/* Jojo 英语 · English-First Words */
* { margin:0; padding:0; box-sizing:border-box; }
[hidden] { display:none !important; }
:root {
  --pri:#5B5FEF; --pri2:#8B5CF6; --accent:#F5A623; --bg:#FAFBFE;
  --ink:#2A2F45; --ink2:#5A6178; --ink3:#9AA0B8;
  --card:#fff; --line:#EEF0F6; --ok:#22C55E; --err:#D9553F;
  --radius:18px; --shadow:0 4px 20px rgba(91,95,239,.08);
}
html { font-size:16px; }
body {
  font-family:"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  background:var(--bg); color:var(--ink); min-height:100vh; display:flex; flex-direction:column;
}
button { font-family:inherit; cursor:pointer; }
a { text-decoration:none; color:inherit; }

/* ---------- 顶栏 ---------- */
.topbar {
  position:sticky; top:0; z-index:50; display:flex; align-items:center; gap:18px;
  padding:12px 28px; background:rgba(255,255,255,.92); backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
}
.logo { display:flex; align-items:center; gap:8px; font-weight:800; font-size:1.2rem;
  background:linear-gradient(92deg,var(--pri),var(--pri2)); -webkit-background-clip:text; background-clip:text; color:transparent; }
.logo-emoji { font-size:1.5rem; -webkit-text-fill-color:initial; }
.nav { display:flex; gap:4px; flex:1; }
.nav a { padding:8px 14px; border-radius:12px; color:var(--ink2); font-size:.95rem; font-weight:600; transition:.15s; }
.nav a:hover { background:var(--line); color:var(--ink); }
.nav a.active { background:linear-gradient(92deg,var(--pri),var(--pri2)); color:#fff; }
.errbook-link { position:relative; }
.err-badge { position:absolute; top:0; right:0; background:var(--err); color:#fff; font-size:.68rem;
  min-width:18px; height:18px; line-height:18px; text-align:center; border-radius:9px; padding:0 4px; font-weight:700; }
.points-capsule { display:flex; align-items:center; gap:6px; background:linear-gradient(92deg,#FFF7E8,#FFEFC7);
  border:1px solid #F5D98B; padding:7px 14px; border-radius:999px; font-weight:800; color:#8A5A00; }

/* ---------- 布局 ---------- */
main#app { flex:1; width:100%; max-width:980px; margin:0 auto; padding:28px 20px 60px; }
.footer { text-align:center; color:var(--ink3); font-size:.8rem; padding:22px; border-top:1px solid var(--line); }
/* ICP 备案号：独立于 .footer（移动端/管理后台/学习页均可见） */
.icp { text-align:center; padding:0 0 20px; }
.icp a { color:var(--ink3); font-size:.72rem; text-decoration:none; }
.icp a:hover { color:var(--ink2); text-decoration:underline; }

.page-title { font-size:1.6rem; font-weight:800; margin-bottom:6px; }
.page-sub { color:var(--ink2); margin-bottom:22px; }
.card { background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow); padding:22px; border:1px solid var(--line); }

.btn { border:none; border-radius:14px; padding:12px 26px; font-size:1rem; font-weight:700; transition:.15s; }
.btn-pri { background:linear-gradient(92deg,var(--pri),var(--pri2)); color:#fff; box-shadow:0 6px 18px rgba(91,95,239,.3); }
.btn-pri:hover { transform:translateY(-2px); box-shadow:0 10px 24px rgba(91,95,239,.4); }
.btn-accent { background:linear-gradient(92deg,#F5A623,#F78B2D); color:#fff; box-shadow:0 6px 18px rgba(245,166,35,.35); }
.btn-ghost { background:#fff; border:1.5px solid var(--line); color:var(--ink2); }
.btn-ghost:hover { border-color:var(--pri); color:var(--pri); }
.btn:disabled { opacity:.45; cursor:not-allowed; transform:none!important; }
.btn-sm { padding:7px 14px; font-size:.85rem; border-radius:10px; }

/* ---------- 首页 ---------- */
.home-hero { text-align:center; padding:34px 0 10px; }
.home-greet { color:var(--ink2); font-weight:600; margin-bottom:10px; }
.home-h1 { font-size:2.5rem; font-weight:900; line-height:1.25;
  background:linear-gradient(92deg,var(--pri),var(--pri2) 55%,var(--accent)); -webkit-background-clip:text; background-clip:text; color:transparent; }
.home-sub { color:var(--ink2); margin-top:12px; font-size:1.05rem; }
.home-libcard { display:flex; align-items:center; gap:16px; margin:30px auto 0; max-width:560px; text-align:left; }
.home-libcard .lib-icon { font-size:2.6rem; }
.home-libcard .lib-info { flex:1; }
.home-libcard .lib-name { font-weight:800; font-size:1.15rem; }
.home-libcard .lib-meta { color:var(--ink3); font-size:.85rem; margin-top:3px; }
.home-libcard .lib-prog { margin-top:8px; }
.home-start { text-align:center; margin-top:22px; }
.home-start .btn { font-size:1.15rem; padding:15px 46px; }
.home-stats { display:flex; gap:14px; justify-content:center; margin-top:34px; flex-wrap:wrap; }
.stat-card { background:#fff; border:1px solid var(--line); border-radius:16px; padding:16px 30px; text-align:center; box-shadow:var(--shadow); min-width:130px; }
.stat-num { font-size:1.7rem; font-weight:900; color:var(--pri); }
.stat-label { color:var(--ink3); font-size:.82rem; margin-top:2px; }
.switch-panel { margin:18px auto 0; max-width:560px; }
.switch-item { display:flex; align-items:center; gap:10px; padding:11px 14px; border-radius:12px; transition:.12s; }
.switch-item:hover { background:var(--line); }
.switch-item .s-icon { font-size:1.4rem; }
.switch-item .s-name { flex:1; font-weight:700; text-align:left; }
.switch-item .s-tag { font-size:.72rem; background:var(--line); color:var(--ink2); border-radius:8px; padding:2px 8px; }
.switch-item .s-cur { font-size:.75rem; color:var(--pri); font-weight:700; }

/* ---------- 学习页 ---------- */
.study-top { display:flex; align-items:center; gap:14px; margin-bottom:20px; }
.study-progress { flex:1; height:10px; background:var(--line); border-radius:6px; overflow:hidden; }
.study-progress i { display:block; height:100%; background:linear-gradient(90deg,var(--pri),var(--pri2)); border-radius:6px; transition:width .3s; }
.study-count { font-weight:800; color:var(--ink2); white-space:nowrap; }
.study-exit { border:none; background:none; color:var(--ink3); font-size:1.1rem; }

.phase-card { max-width:620px; margin:0 auto; text-align:center; }
.word-big { font-size:3rem; font-weight:900; letter-spacing:.04em; }
.pos-tag { display:inline-block; background:#EDE9FE; color:var(--pri2); font-size:.78rem; font-weight:700;
  padding:3px 12px; border-radius:999px; margin:8px 0 14px; }
.word-emoji { font-size:4.2rem; margin:8px 0; }
.word-emoji img { max-width:200px; max-height:140px; border-radius:18px; object-fit:cover; margin:8px 0; }
.def-line, .sent-line { display:flex; align-items:flex-start; gap:8px; text-align:left; background:var(--bg);
  border:1px solid var(--line); border-radius:14px; padding:12px 14px; margin-top:10px; font-size:.98rem; line-height:1.55; }
.def-line .lab, .sent-line .lab { flex-shrink:0; font-size:.72rem; font-weight:800; color:var(--pri); background:#EDE9FE;
  border-radius:6px; padding:2px 7px; margin-top:2px; }
.speaker { border:none; background:none; font-size:1.05rem; opacity:.7; flex-shrink:0; }
.speaker:hover { opacity:1; transform:scale(1.15); }
.card-nav { display:flex; justify-content:space-between; align-items:center; margin-top:24px; gap:10px; }
.listen-btn { background:linear-gradient(92deg,#FFF7E8,#FFEFC7); border:1px solid #F5D98B; color:#8A5A00;
  border-radius:12px; padding:9px 18px; font-weight:800; }
.skip-preview { background:none; border:none; color:var(--ink3); font-size:.85rem; text-decoration:underline; }

/* 列表预习 */
.preview-list { max-width:620px; margin:0 auto; }
.preview-row { display:flex; align-items:center; gap:12px; background:#fff; border:1px solid var(--line);
  border-radius:14px; padding:12px 16px; margin-bottom:10px; }
.preview-row .pw { font-weight:800; font-size:1.1rem; min-width:120px; }
.preview-row .pd { flex:1; color:var(--ink2); font-size:.88rem; }
.preview-row .pe { font-size:1.5rem; }
.preview-row .pe img { width:2rem; height:2rem; border-radius:6px; object-fit:cover; vertical-align:middle; }

/* 拼写 */
.spell-slots { display:flex; justify-content:center; gap:7px; margin:26px 0 10px; flex-wrap:wrap; }
.slot { width:44px; height:56px; border-radius:12px; border:2.5px solid var(--line); background:#fff;
  display:flex; align-items:center; justify-content:center; font-size:1.7rem; font-weight:900; color:var(--pri);
  transition:.12s; text-transform:lowercase; }
.slot.filled { border-color:var(--pri); background:#F3F2FF; }
.slot.cursor { border-color:var(--accent); box-shadow:0 0 0 3px rgba(245,166,35,.25); }
.slot.hint-fill { color:var(--accent); border-style:dashed; }
@keyframes shake { 0%,100%{transform:translateX(0)} 20%{transform:translateX(-7px)} 40%{transform:translateX(7px)} 60%{transform:translateX(-5px)} 80%{transform:translateX(5px)} }
.shake { animation:shake .35s; }
.spell-actions { display:flex; justify-content:center; gap:10px; margin-top:20px; flex-wrap:wrap; }
.hint-panel { margin-top:16px; text-align:left; }
.hint-pic { text-align:center; font-size:3rem; }
.hint-pic img { width:96px; height:96px; border-radius:18px; object-fit:cover; }

/* 庆祝横幅 */
.cheer-banner { margin:18px auto 0; padding:14px 30px; border-radius:16px; font-size:1.3rem; font-weight:900;
  display:inline-block; animation:pop .45s cubic-bezier(.2,1.6,.4,1); }
.cheer-perfect { background:linear-gradient(92deg,#FFF3D6,#FFE9A8); color:#8A5A00; border:2px solid #F5D98B; }
.cheer-good { background:linear-gradient(92deg,#E6FBEF,#CFF7E0); color:#0F7A3D; border:2px solid #A7E8C4; }
@keyframes pop { 0%{transform:scale(.5);opacity:0} 100%{transform:scale(1);opacity:1} }

/* 例句 */
.sent-display { font-size:1.35rem; line-height:2.2; font-weight:700; text-align:center; margin:18px 0; }
.blank-run { display:inline-block; min-width:1em; border-bottom:3px solid var(--pri); color:var(--pri);
  font-weight:900; padding:0 4px; letter-spacing:.06em; }
.dict-word { display:inline-flex; gap:3px; margin:0 5px; }
.dict-letter { display:inline-block; width:1em; border-bottom:2.5px solid var(--ink3); text-align:center; font-weight:900; color:var(--pri); }
.dict-letter.done { border-color:var(--ok); color:var(--ok); }
.sent-zh-hint { background:#FFF9EC; border:1.5px dashed #F5D98B; color:#8A5A00; border-radius:14px;
  padding:12px 18px; margin-top:14px; font-size:1rem; animation:pop .3s; }
.sent-done { color:var(--ok); }

/* 完成页 */
.done-wrap { text-align:center; padding:40px 0; }
.trophy { font-size:5.5rem; animation:bounce 1.2s infinite; display:inline-block; }
@keyframes bounce { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-14px)} }
.done-title { font-size:1.8rem; font-weight:900; margin:16px 0 6px; }
.done-stats { color:var(--ink2); margin-bottom:26px; }
.done-btns { display:flex; gap:14px; justify-content:center; }

/* ---------- 学习进度 ---------- */
.ov-row { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; margin-bottom:20px; }
.prog-lib-row { display:flex; align-items:center; gap:12px; padding:13px 4px; border-bottom:1px solid var(--line); }
.prog-lib-row:last-child { border-bottom:none; }
.prog-lib-icon { font-size:1.5rem; }
.prog-lib-main { flex:1; }
.prog-lib-name { font-weight:700; }
.prog-lib-name .tag { font-size:.68rem; border-radius:6px; padding:1px 7px; margin-left:6px; font-weight:700; }
.tag-sys { background:#E8F1FF; color:#2060C0; }
.tag-mine { background:#FDE8FF; color:#A02090; }
.dual-bar { height:9px; background:var(--line); border-radius:5px; margin-top:7px; position:relative; overflow:hidden; }
.dual-bar .b-learn { position:absolute; inset:0; background:#C7C9F5; border-radius:5px; }
.dual-bar .b-master { position:absolute; inset:0; background:linear-gradient(90deg,var(--pri),var(--pri2)); border-radius:5px; }
.prog-lib-nums { font-size:.78rem; color:var(--ink3); margin-top:4px; }
.week-chart { display:flex; align-items:flex-end; gap:10px; height:150px; padding:10px 6px 0; }
.week-col { flex:1; display:flex; flex-direction:column; align-items:center; gap:6px; height:100%; justify-content:flex-end; }
.week-bar { width:70%; max-width:38px; background:linear-gradient(180deg,var(--pri2),var(--pri)); border-radius:8px 8px 3px 3px; min-height:5px; transition:height .4s; }
.week-val { font-size:.72rem; font-weight:800; color:var(--pri); }
.week-day { font-size:.7rem; color:var(--ink3); }

/* ---------- 单词库 ---------- */
.lib-group-title { font-size:1.1rem; font-weight:800; margin:26px 0 4px; }
.lib-group-sub { color:var(--ink3); font-size:.85rem; margin-bottom:14px; }
.lib-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; }
.lib-card { display:flex; gap:14px; align-items:flex-start; cursor:pointer; transition:.15s; position:relative; }
.lib-card:hover { transform:translateY(-3px); box-shadow:0 10px 28px rgba(91,95,239,.16); }
.lib-card.current { border:2px solid var(--pri); }
.lib-card .lib-icon { font-size:2.2rem; }
.lib-card .lib-name { font-weight:800; }
.lib-card .lib-meta { color:var(--ink3); font-size:.8rem; margin-top:3px; }
.lib-card .lib-desc { color:var(--ink2); font-size:.83rem; margin-top:6px; line-height:1.5; }
.lib-card .cur-flag { position:absolute; top:12px; right:14px; font-size:.72rem; font-weight:800; color:var(--pri); }
.upload-zone { border:2.5px dashed var(--line); border-radius:var(--radius); padding:34px; text-align:center;
  color:var(--ink2); transition:.15s; background:#fff; margin-top:14px; }
.upload-zone.drag { border-color:var(--pri); background:#F3F2FF; }
.upload-zone .uz-icon { font-size:2.4rem; }
.upload-formats { font-size:.78rem; color:var(--ink3); margin-top:8px; }
.empty-tip { text-align:center; color:var(--ink3); padding:26px; background:#fff; border:1px dashed var(--line); border-radius:var(--radius); }

/* ---------- 错词本 ---------- */
.err-row { display:flex; align-items:center; gap:12px; padding:13px 4px; border-bottom:1px solid var(--line); }
.err-row:last-child { border-bottom:none; }
.err-word { font-weight:800; font-size:1.1rem; min-width:110px; }
.err-info { flex:1; color:var(--ink2); font-size:.85rem; }
.err-times { background:#FDECEA; color:var(--err); font-weight:800; font-size:.78rem; border-radius:8px; padding:3px 10px; }

/* ---------- 设置 ---------- */
.set-row { display:flex; align-items:center; gap:16px; padding:16px 4px; border-bottom:1px solid var(--line); }
.set-row:last-child { border-bottom:none; }
.set-main { flex:1; }
.set-title { font-weight:700; }
.set-desc { color:var(--ink3); font-size:.8rem; margin-top:2px; }
.set-ctl { flex-shrink:0; }
input[type=range] { width:190px; accent-color:var(--pri); }
.set-val { font-weight:900; color:var(--pri); min-width:30px; text-align:center; display:inline-block; }
.switch { position:relative; width:52px; height:29px; display:inline-block; }
.switch input { display:none; }
.switch i { position:absolute; inset:0; background:#D5D9E8; border-radius:999px; transition:.2s; }
.switch i::after { content:''; position:absolute; width:23px; height:23px; background:#fff; border-radius:50%; top:3px; left:3px; transition:.2s; box-shadow:0 2px 6px rgba(0,0,0,.2); }
.switch input:checked + i { background:var(--pri); }
.switch input:checked + i::after { left:26px; }
.seg { display:inline-flex; background:var(--line); border-radius:12px; padding:3px; }
.seg button { border:none; background:none; padding:7px 16px; border-radius:9px; font-weight:700; color:var(--ink2); font-size:.88rem; }
.seg button.on { background:#fff; color:var(--pri); box-shadow:0 2px 8px rgba(0,0,0,.1); }
.seg.disabled { opacity:.4; pointer-events:none; }
select.set-select { border:1.5px solid var(--line); border-radius:10px; padding:8px 12px; font-weight:600; color:var(--ink); background:#fff; }
.chips { display:flex; flex-wrap:wrap; gap:8px; max-width:430px; }
.chip { display:inline-flex; align-items:center; gap:5px; border:1.5px solid var(--line); border-radius:999px;
  padding:6px 13px; font-size:.85rem; font-weight:600; background:#fff; transition:.12s; }
.chip.on { border-color:var(--pri); background:#F3F2FF; color:var(--pri); }
.chip .x { color:var(--ink3); font-weight:800; }
.chip-add { border-style:dashed; color:var(--ink3); }
.rules-table { width:100%; border-collapse:collapse; font-size:.86rem; }
.rules-table td { padding:7px 10px; border-bottom:1px solid var(--line); }
.rules-table td:last-child { text-align:right; font-weight:800; color:var(--pri); }

/* ---------- 基本信息 ---------- */
.profile-form { max-width:460px; }
.pf-field { margin-bottom:18px; }
.pf-field label { display:block; font-weight:700; margin-bottom:7px; }
.pf-field input, .pf-field select { width:100%; border:1.5px solid var(--line); border-radius:12px; padding:11px 14px; font-size:1rem; background:#fff; }

/* ---------- 弹层 ---------- */
.modal-mask { position:fixed; inset:0; background:rgba(42,47,69,.45); z-index:100; display:flex;
  align-items:center; justify-content:center; backdrop-filter:blur(4px); }
.modal { background:#fff; border-radius:24px; padding:30px 34px; width:min(92vw,460px); text-align:center; position:relative;
  animation:pop .3s cubic-bezier(.2,1.4,.4,1); max-height:86vh; overflow:auto; }
.modal-close { position:absolute; top:14px; right:16px; border:none; background:none; font-size:1.15rem; color:var(--ink3); }
.mic-word { font-size:2rem; font-weight:900; margin-bottom:18px; }
.mic-btn { width:96px; height:96px; border-radius:50%; border:none; background:linear-gradient(135deg,var(--pri),var(--pri2));
  color:#fff; font-size:1rem; font-weight:800; box-shadow:0 10px 30px rgba(91,95,239,.4); display:inline-flex;
  flex-direction:column; align-items:center; justify-content:center; gap:4px; }
.mic-icon { font-size:1.8rem; }
.mic-btn.listening { animation:pulse 1.1s infinite; }
@keyframes pulse { 0%,100%{box-shadow:0 0 0 0 rgba(91,95,239,.5)} 50%{box-shadow:0 0 0 20px rgba(91,95,239,0)} }
.mic-rings { display:flex; justify-content:center; gap:6px; margin-top:18px; height:34px; align-items:center; }
.mic-rings i { width:7px; background:linear-gradient(180deg,var(--pri2),var(--pri)); border-radius:4px; animation:vol .7s infinite ease-in-out; }
.mic-rings i:nth-child(2){ animation-delay:.18s } .mic-rings i:nth-child(3){ animation-delay:.36s }
@keyframes vol { 0%,100%{height:8px} 50%{height:30px} }
.mic-status { color:var(--ink2); margin-top:16px; min-height:1.4em; }
.mic-score { font-size:2.4rem; font-weight:900; margin-top:10px; }
.mic-score.s-great { color:var(--ok); } .mic-score.s-pass { color:var(--pri); } .mic-score.s-low { color:var(--accent); }
.mic-actions { margin-top:18px; display:flex; gap:10px; justify-content:center; }

/* ---------- Toast / 彩带 ---------- */
.toast { position:fixed; left:50%; bottom:44px; transform:translateX(-50%); background:#2A2F45; color:#fff;
  padding:12px 24px; border-radius:999px; font-weight:700; z-index:200; animation:pop .25s; box-shadow:0 8px 30px rgba(0,0,0,.25); }
#confettiCanvas { position:fixed; inset:0; pointer-events:none; z-index:150; }

/* ---------- 移动端底部标签栏 ---------- */
.tabbar { display:none; }
body.in-study .tabbar { display:none !important; }
@media (max-width:720px) {
  body.in-study main#app { padding-bottom:24px; }
}

/* ---------- 管理后台（独立入口 /admin） ---------- */
body.in-admin .topbar, body.in-admin .tabbar, body.in-admin .footer, body.in-admin .points-capsule { display:none !important; }
body.in-admin main#app { max-width:1080px; }
.adm-who { color:var(--ink3); font-size:.85rem; font-weight:700; align-self:center; }
.admin-tabs { display:flex; gap:8px; margin-bottom:18px; flex-wrap:wrap; align-items:center; }
.admin-tabs button { border:1.5px solid var(--line); background:#fff; border-radius:12px; padding:9px 20px; font-weight:700; color:var(--ink2); }
.admin-tabs button.on { background:linear-gradient(92deg,var(--pri),var(--pri2)); color:#fff; border-color:transparent; }
.admin-table { width:100%; border-collapse:collapse; font-size:.86rem; }
.admin-table th { text-align:left; color:var(--ink3); font-size:.76rem; padding:9px 10px; border-bottom:2px solid var(--line); white-space:nowrap; }
.admin-table td { padding:10px; border-bottom:1px solid var(--line); vertical-align:middle; }
.admin-table tr:hover td { background:var(--bg); }
.admin-search { display:flex; gap:10px; margin-bottom:14px; }
.admin-search input, .admin-search select { border:1.5px solid var(--line); border-radius:10px; padding:9px 13px; font-size:.92rem; background:#fff; }
.admin-search input { flex:1; }
.admin-form { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin-bottom:14px; }
.admin-form input, .admin-form select { border:1.5px solid var(--line); border-radius:10px; padding:9px 12px; font-size:.92rem; }
.pager { display:flex; gap:10px; align-items:center; justify-content:center; margin-top:14px; color:var(--ink2); font-size:.88rem; }
.table-wrap { overflow-x:auto; }

/* ---------- 管理后台 · 用户使用报表 ---------- */
.rep-hbar-row { display:flex; align-items:center; gap:10px; padding:8px 0; }
.rep-hbar-label { width:170px; font-size:.85rem; font-weight:700; }
.rep-hbar-track { flex:1; height:14px; background:var(--line); border-radius:7px; overflow:hidden; }
.rep-hbar-fill { display:block; height:100%; border-radius:7px; }
.rep-hbar-num { width:110px; text-align:right; font-size:.8rem; color:var(--ink2); white-space:nowrap; }
.rep-trend-bars { display:flex; gap:4px; align-items:flex-end; height:100px; }
.rep-trend-bar { display:block; width:14px; border-radius:6px 6px 2px 2px; min-height:4px; }

/* 单词语音/图片上传控件 */
.media-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:14px; }
.media-col { display:grid; gap:10px; margin-bottom:14px; }
.media-cell { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:9px 11px;
  border:1.5px dashed var(--line); border-radius:10px; }
.media-lab { font-weight:700; font-size:.85rem; }
.media-st { font-size:.78rem; color:var(--ink3); }
.media-thumb { width:44px; height:44px; object-fit:cover; border-radius:8px; }
.row-thumb { width:36px; height:36px; object-fit:cover; border-radius:8px; vertical-align:middle; }

/* ---------- 登录页 ---------- */
.auth-wrap { max-width:400px; margin:40px auto; }
.auth-logo { text-align:center; font-size:3rem; }
.auth-title { text-align:center; font-size:1.5rem; font-weight:900; margin:10px 0 4px;
  background:linear-gradient(92deg,var(--pri),var(--pri2)); -webkit-background-clip:text; background-clip:text; color:transparent; }
.auth-sub { text-align:center; color:var(--ink2); font-size:.88rem; margin-bottom:22px; }
.auth-err { background:#FDECEA; color:var(--err); border-radius:10px; padding:10px 14px; font-size:.86rem; margin-bottom:14px; }
.auth-switch { text-align:center; margin-top:16px; color:var(--ink2); font-size:.88rem; }
.auth-switch a { color:var(--pri); font-weight:700; }

/* ---------- 响应式（移动端优先优化） ---------- */
@media (max-width:720px) {
  body { -webkit-tap-highlight-color:transparent; }
  button, a { touch-action:manipulation; }
  input, select { font-size:16px !important; } /* 防 iOS 聚焦放大 */

  .topbar { padding:10px 14px; gap:10px; }
  .topbar .nav { display:none; }              /* 顶栏导航移交底部标签栏 */
  .logo-text { font-size:1.05rem; }
  .points-capsule { padding:6px 12px; font-size:.9rem; }

  .tabbar { display:flex; position:fixed; left:0; right:0; bottom:0; z-index:60;
    background:rgba(255,255,255,.96); backdrop-filter:blur(12px); border-top:1px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom)); }
  .tabbar a { flex:1; display:flex; flex-direction:column; align-items:center; gap:2px;
    padding:6px 0; color:var(--ink3); font-size:.68rem; font-weight:700; border-radius:12px; position:relative; }
  .tabbar a i { font-style:normal; font-size:1.3rem; }
  .tabbar a.active { color:var(--pri); }
  .tabbar .err-badge { top:0; right:18%; }
  .footer { display:none; }
  /* 移动端：备案号给固定 tabbar 让位 */
  .icp { padding:6px 0 calc(78px + env(safe-area-inset-bottom)); }
  body.in-study .icp { padding-bottom:14px; }
  main#app { padding:18px 14px calc(84px + env(safe-area-inset-bottom)); }

  .home-hero { padding:18px 0 6px; }
  .home-h1 { font-size:1.75rem; }
  .home-sub { font-size:.92rem; }
  .home-libcard { padding:16px; gap:12px; }
  .home-libcard .lib-icon { font-size:2rem; }
  .home-start .btn { width:100%; max-width:340px; }
  .stat-card { min-width:0; flex:1; padding:12px 8px; }
  .stat-num { font-size:1.35rem; }
  .home-stats { gap:8px; }

  .word-big { font-size:2.2rem; }
  .word-emoji { font-size:3.2rem; }
  .slot { width:34px; height:46px; font-size:1.3rem; border-radius:10px; }
  .spell-slots { gap:5px; }
  .spell-actions { display:grid; grid-template-columns:1fr 1fr; width:100%; }
  .spell-actions .btn, .spell-actions .listen-btn { width:100%; padding:12px 8px; }
  .def-line, .sent-line { font-size:.9rem; padding:10px 12px; }
  .sent-display { font-size:1.1rem; line-height:2; }
  .phase-card { padding:16px; }
  .card-nav { flex-wrap:wrap; }
  .card-nav .btn { flex:1; padding:12px 8px; }
  .done-btns { flex-direction:column; align-items:stretch; }
  .done-btns .btn { width:100%; }

  .lib-grid { grid-template-columns:1fr; }
  .upload-zone { padding:24px 14px; }
  .err-row { flex-wrap:wrap; row-gap:6px; }
  .err-word { min-width:0; }

  .set-row { flex-direction:column; align-items:flex-start; gap:10px; }
  .set-ctl { width:100%; }
  .set-ctl input[type=range] { width:calc(100% - 46px); }
  .seg { width:100%; display:flex; }
  .seg button { flex:1; }
  .set-select { width:100%; }
  .rules-table { width:100%; }

  .week-chart { gap:5px; }
  .prog-lib-nums { font-size:.72rem; }
  .modal { width:94vw; padding:24px 18px; }
  .admin-table { font-size:.78rem; }
  .admin-form { grid-template-columns:1fr 1fr; }
  .media-row { grid-template-columns:1fr; }
}
