
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
:root{
--pri:#3f5b7a;--pri-d:#2f4a66;--pri-l:#e8eef4;
--ok:#3f7d4f;--ok-l:#eafaf0;--warn:#a9742a;--warn-l:#fdf3e3;
--red:#c0392b;--red-l:#fbecea;--purple:#7c5a9e;--purple-l:#f3ecf8;
--bg:#efe6cf;--card:#fbf6ea;--text:#2a2620;--sub:#5c5240;--muted:#9a8f76;
--line:#e3d7bd;--r:14px;--sh:0 2px 8px rgba(80,55,20,.08),0 1px 2px rgba(80,55,20,.05);
--ink:#2a2620;--ink2:#5c5240;--seal:#9a2f28;--seal-l:#f3e4df;--gold:#a88242;--line2:#d8c8a0;--paper:#f7eed8;--paper-d:#efe2c4;
}
html,body{margin:0;padding:0;overflow-x:hidden}
body{
background:linear-gradient(180deg,#f3ead2 0%,#ece0c0 100%);color:var(--text);
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
font-size:16px;line-height:1.6;-webkit-text-size-adjust:100%;
padding-bottom:calc(24px + env(safe-area-inset-bottom));
}
.wrap{max-width:1080px;margin:0 auto;padding:14px 14px 32px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:11px;position:relative}
h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.35}
button{font-family:inherit;font-size:15px;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:16px;color:var(--text)}
.hide{display:none!important}

/* ============ 顶部 ============ */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.logo{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,#2563eb,#7c3aed);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.brand h1{font-size:19px;letter-spacing:-.2px}
.brand .sb{font-size:12.5px;color:var(--muted);font-weight:500}
.tools{display:flex;gap:8px;flex-wrap:wrap}
.sync-badge{flex:0 0 auto;align-self:center;font-size:12px;font-weight:700;padding:5px 10px;border-radius:20px;white-space:nowrap;transition:.2s}
.sync-badge.on{background:rgba(16,185,129,.14);color:#047857;border:1px solid rgba(16,185,129,.4)}
.sync-badge.off{background:rgba(239,68,68,.12);color:#b91c1c;border:1px solid rgba(239,68,68,.4)}
.ver-pill{flex:0 0 auto;align-self:center;font-size:12px;font-weight:700;padding:5px 11px;border-radius:20px;white-space:nowrap;cursor:pointer;background:linear-gradient(135deg,#f59e0b,#f97316);color:#fff;border:1px solid rgba(249,115,22,.5);box-shadow:0 2px 8px rgba(249,115,22,.4);animation:verpulse 1.4s ease-in-out infinite}
@keyframes verpulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 14px;border-radius:11px;background:#fff;border:1px solid var(--line);color:var(--sub);font-weight:600;font-size:14px;transition:.15s}
.btn:hover{border-color:#cbd5e1;background:#f9fafb}
.btn:active{transform:scale(.97)}
.btn.pri{background:var(--pri);border-color:var(--pri);color:#fff}
.btn.pri:hover{background:var(--pri-d);border-color:var(--pri-d)}
.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.ok:hover{filter:brightness(.95)}
.btn.danger{color:var(--red);border-color:#fecaca;background:var(--red-l)}
.btn.sm{min-height:36px;padding:0 10px;font-size:13px;border-radius:9px}
.btn.warn{color:#b45309;border-color:#fde68a;background:#fffbeb}
.btn.warn:hover{background:#fef3c7;border-color:#fcd34d}
/* 今日新词的两个操作键：未点击前同一底色，点击后才染色（绿=记住了 / 橙=有点难） */
.btn.act{background:var(--paper);border-color:var(--line2);color:var(--ink2);font-weight:600}
.btn.act:hover{background:var(--paper-d);border-color:var(--gold);color:var(--ink)}
.btn.act.on-ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.act.on-hard{background:#e07b2a;border-color:#c96a1e;color:#fff}
.btn.act.on-ok:hover,.btn.act.on-hard:hover{color:#fff;filter:brightness(.96)}
.wc-act.busy{pointer-events:none}
.tm-btn{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line2);background:var(--paper);color:var(--ink);font-weight:700;font-size:13px;padding:6px 12px;border-radius:14px;cursor:pointer;transition:.15s;font-family:inherit}
.tm-btn:hover{background:var(--paper-d);border-color:var(--gold)}
.tm-btn.on{background:linear-gradient(135deg,#e07b2a,#cf2f17);border-color:#cf2f17;color:#fff;box-shadow:0 2px 8px rgba(207,47,23,.35)}
.stat-click{cursor:pointer;transition:.15s}
.stat-click:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(80,55,20,.12)}
.wc-act.busy .btn.act:not(.on-ok):not(.on-hard){opacity:.5}
.btn.blk{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn svg{flex-shrink:0}

/* ============ 今天的修行 ============ */
.today{background:linear-gradient(135deg,var(--paper) 0%,var(--paper-d) 100%);border:1px solid var(--line2)}
.today-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.today-h h2{font-size:16.5px;display:flex;align-items:center;gap:7px}
.today-actions{display:flex;align-items:stretch;gap:8px;margin-bottom:9px}
.today-actions .wave-btn,
.today-actions .date-btn,
.today-actions .streak-badge{flex:1;justify-content:center;text-align:center;min-width:0;overflow:hidden;text-overflow:ellipsis;min-height:36px;padding:7px 10px}
.today-actions .date-btn .cal-ico{flex-shrink:0}
.wave-btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#9a2f28;background:#fbf3ec;border:1px solid #d9a39c;padding:7px 13px;border-radius:20px;cursor:pointer;font-family:inherit;white-space:nowrap;box-shadow:0 1px 3px rgba(154,47,40,.10);transition:.15s;flex-shrink:0}
.wave-btn:hover{background:#f6e7df;border-color:#c98f86;transform:translateY(-1px)}
.wave-btn:active{transform:scale(.97)}
.wave-btn svg{width:15px;height:15px;flex-shrink:0}
.wave-btn.disabled{opacity:.5;background:#f1ece7;border-color:#e3ddd6;color:#a89e96;cursor:not-allowed;box-shadow:none}
.wave-btn.disabled:hover{background:#f1ece7;border-color:#e3ddd6;transform:none}
.date-btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--ink2);background:#fffdf8;border:1px solid var(--line2);padding:7px 13px;border-radius:20px;cursor:pointer;font-family:inherit;box-shadow:0 1px 3px rgba(80,55,20,.06);transition:.15s;white-space:nowrap;flex-shrink:0}
.date-btn:hover{background:#f6ecd6;border-color:#cbb892}
.date-btn .cal-ico{width:15px;height:15px;flex-shrink:0}
.streak-badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:800;color:#8a5a16;background:#fdf3e3;border:1px solid #ecd9a8;padding:7px 13px;border-radius:20px;white-space:nowrap;flex-shrink:0}
.todo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.todo-item{background:var(--card);border:1px solid var(--line2);border-radius:11px;padding:8px 9px;display:flex;align-items:flex-start;gap:9px;cursor:pointer;transition:.15s}
.todo-item:hover{border-color:var(--line2);box-shadow:0 2px 8px rgba(80,55,20,.10)}
.todo-item.urgent{border-color:#fecaca;background:var(--red-l)}
.todo-item.done{opacity:.62}
.ti-ic{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
/* 今日任务完成 · 鼓励语 */
.praise{margin-top:11px;border:1px solid #bbf7d0;background:linear-gradient(135deg,#ecfdf5,#f0fdf4);border-radius:14px;padding:12px 13px;text-align:center;box-shadow:0 4px 16px rgba(16,163,74,.12)}
.praise-head{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.praise-badge{display:inline-block;font-size:16px;font-weight:800;color:#15803d;background:#dcfce7;padding:6px 16px;border-radius:20px;cursor:pointer;transition:.15s}
.praise-badge:hover{transform:scale(1.05)}
.praise-sub{font-size:15px;color:#15803d;opacity:.95}
.praise-msg{display:flex;align-items:baseline;justify-content:center;gap:10px;flex-wrap:wrap;margin:2px 0 4px}
.praise-msg .pcn{font-size:24px;font-weight:800;color:#065f46;line-height:1.35}
.praise-msg .pen{font-size:21px;font-weight:600;color:#047857;line-height:1.3}
.ti-body{flex:1;min-width:0}
.ti-t{font-size:13px;font-weight:700;line-height:1.25}
.ti-s{font-size:11.5px;color:var(--muted);margin-top:2px;min-height:26px;line-height:1.32}
.ti-t .num{font-size:16px;margin-right:2px}
.red{color:var(--red)}.green{color:var(--ok)}.amber{color:var(--warn)}.blue{color:var(--pri)}
.tip-bar{margin-top:9px;background:var(--warn-l);border:1px solid #fde68a;color:#92400e;border-radius:11px;padding:8px 11px;font-size:13.5px;display:flex;align-items:center;gap:8px}

/* ============ Tabs ============ */
.tabs{display:flex;gap:6px;background:var(--card);border:1px solid var(--line2);border-radius:13px;padding:5px;margin-bottom:10px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.tab{flex:1;min-width:88px;min-height:44px;border-radius:9px;font-weight:600;font-size:14.5px;color:var(--sub);display:flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;transition:.15s}
.tab.on{background:var(--seal);color:#fff;box-shadow:0 2px 6px rgba(154,47,40,.28)}
.tab .badge{display:none !important}

.sec-h{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.sec-h h3{font-size:16px;display:flex;align-items:center;gap:7px}
.sec-h .desc{font-size:12.5px;color:var(--muted);font-weight:500;margin-top:2px}

/* ============ 单词卡 ============ */
.wcard{border:1px solid var(--line);border-radius:13px;padding:12px;margin-bottom:9px;transition:.18s;background:#fff}
.wcard.learned{border-color:#bbf7d0;background:var(--ok-l)}
.wc-top{display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap}
.wc-word{font-size:22px;font-weight:800;letter-spacing:-.4px;line-height:1.2;font-family:"Segoe UI",Roboto,-apple-system,sans-serif;-webkit-user-select:text;user-select:text}
/* 今日新词：单词/中文释义/例句允许长按复制 */
#newWords .wc-cn,#newWords .wc-ex .en,#newWords .wc-ex .cn{-webkit-user-select:text;user-select:text}
.wc-ph{font-size:14.5px;color:var(--sub);font-family:"Segoe UI",Roboto,sans-serif}
.pos{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:6px;background:var(--purple-l);color:var(--purple);vertical-align:middle}
.wc-cn{font-size:16px;font-weight:600;margin-top:5px}
/* 单词与「音标 / 词性 / 词库来源(年级)」同一行 */
.wc-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
/* 今日新词三列网格：每行 3 个，一屏显示更多，减少滚动；
   卡片等高对齐（stretch + flex 列布局），例句/中文释义长短不齐也不会让任何一张卡凸出 */
#newWords{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;align-items:stretch}
#newWords .wcard{margin-bottom:0;display:flex;flex-direction:column;height:100%;padding:10px 10px 8px}
#newWords .wc-ex{flex:1;overflow:hidden;min-height:0;margin-bottom:6px}
#newWords .wc-act{margin-top:auto}
/* 中文释义不省略，词库名放在中文后面 */
#newWords .wc-cn{display:inline;font-size:16px;font-weight:600;margin-top:0}
#newWords .wc-cn .grade-tag{font-size:11px;margin-left:6px;vertical-align:middle}
/* 单词独占一行，中文+词性+词库名独占第二行 */
#newWords .wc-head{display:flex;flex-direction:column;gap:2px;width:100%}
#newWords .wc-head .wl1{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
#newWords .wc-head .wl2{display:flex;align-items:baseline;gap:5px;flex-wrap:wrap;width:100%}
#newWords .wc-head .wl2-cn{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:2.7em;flex-shrink:1;min-width:0;font-size:15px;color:#374151;line-height:1.35}
/* 陈述句/反问句放大字号 */
.ex-type{font-size:12.5px}
#newWords .wc-ex .en{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#newWords .wc-ex .cn{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
/* 「再来一波」新增词：与首轮词同尺寸；未学=浅黄底，已学=浅绿底 */
.wcard.wave{border-style:dashed;background:#fffbeb;border-color:#fde68a}
.wcard.wave .wc-word{font-size:22px}
.wcard.wave .wc-ph{font-size:14.5px}
.wcard.wave .wc-cn{font-size:16px;margin-top:5px}
.wcard.wave .wc-ex{font-size:14.5px;padding:8px 11px;margin-top:7px}
.wcard.wave .btn.sm{padding:7px 12px;font-size:13px}
.wcard.wave.learned{border-color:#bbf7d0;background:var(--ok-l)}
.wcard.wave.learned .wc-word{font-size:22px}
/* 两轮之间的分隔条 */
.wave-sep{grid-column:1/-1;display:flex;align-items:center;gap:10px;margin:3px 0 1px;color:var(--sub);font-size:13px;font-weight:800}
.wave-sep::before,.wave-sep::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--line),transparent)}
.wave-sep span{white-space:nowrap;padding:2px 6px;background:#fff;border-radius:999px}
/* 今日短语栏：单词下方新增，每行 2 个，卡片式与单词一致 */
.phrase-sep{grid-column:1/-1;display:flex;align-items:center;gap:10px;margin:16px 0 8px;color:#b45309;font-size:13px;font-weight:800}
.phrase-sep::before,.phrase-sep::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,#fcd34d,transparent)}
.phrase-sep span{white-space:nowrap;padding:2px 9px;background:#fff7ed;border:1px solid #fde68a;border-radius:999px}
.phrase-grid{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:4px 0 8px}
.phrase-grid .wcard{margin:0;height:auto}
/* ===== 今日新词 / 今日短语 左右 4:6 分栏（同时都有时才启用） ===== */
#newWords.split{display:block}
.np-split{display:grid;grid-template-columns:4fr 6fr;gap:16px;align-items:start}
.np-col{display:flex;flex-direction:column;gap:9px;min-width:0}
#newWords.split .wcard{height:auto;margin-bottom:0}
#newWords.split .wc-ex{flex:none;overflow:visible;margin-bottom:0}
#newWords.split .wc-act{margin-top:9px}
/* 今日新词列卡片缩至 90%（短语列保持原尺寸） */
.np-words .wcard{transform:scale(.9);transform-origin:top center}
.np-col .wave-sep,.np-col .phrase-sep{margin-left:0;margin-right:0}
@media(max-width:640px){.np-split{grid-template-columns:1fr}}
.wc-ex{margin-top:7px;padding:8px 11px;background:#f8fafc;border-left:3px solid var(--pri);border-radius:0 9px 9px 0;font-size:14.5px;cursor:pointer;transition:background .15s}
.wc-ex:hover{background:#eef4fb;border-left-color:#1ca9e0}
.wc-ex .en{font-family:"Segoe UI",Roboto,sans-serif;color:#1e3a8a}
.wc-ex .ex-row{display:flex;align-items:center;gap:8px}
.wc-ex .ex-row .en{flex:1}
.wc-ex .cn{color:var(--sub);font-size:13.5px;margin-top:3px}
/* 例句中高亮新学单词：天蓝色 + 下划线 */
.ex-hl{color:#1ca9e0;text-decoration:underline;text-underline-offset:3px;font-weight:700}
.ex-type{display:inline-block;font-size:11px;font-weight:700;color:#0369a1;background:#e0f2fe;border:1px solid #bae6fd;border-radius:6px;padding:1px 7px;margin-right:8px;vertical-align:middle;}
/* 例句点击换句的提示 */
.ex-hint{margin-top:4px;font-size:11.5px;color:var(--sub);text-align:right;user-select:none;opacity:.85}
/* 例句点击换句后放大一个字号 */
.wc-ex.ex-big .en{font-size:16.5px;line-height:1.35}
.wc-ex.ex-big .cn{font-size:15.5px;line-height:1.4}
.wc-act{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap;align-items:center;justify-content:center}
.wc-act .btn{flex:1;justify-content:center}
/* 例句默认折叠，点击展开（压缩「今日新词」卡片高度，减少滚动） */
.ex-toggle{margin-top:5px;font-size:12.5px;font-weight:600;color:var(--pri);background:var(--pri-l);border:1px solid #dbeafe;border-radius:8px;padding:3px 11px;cursor:pointer;display:inline-flex;align-items:center;gap:3px;font-family:inherit;line-height:1.4}
.ex-toggle:active{transform:scale(.97)}
.spk{width:44px;height:44px;border-radius:11px;background:var(--pri-l);color:var(--pri);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #dbeafe;position:relative;overflow:hidden}
.spk:active{transform:scale(.93)}
.spk.playing{background:var(--pri);color:#fff}
.spk .spk-ic{display:inline-flex;align-items:center;justify-content:center}
.spk .spk-wave{position:absolute;inset:0;width:100%;height:100%;display:none;pointer-events:none}
.spk.playing .spk-ic,.spk.ended .spk-ic{display:none}
.spk.playing .spk-wave,.spk.ended .spk-wave{display:block}
.grade-tag{font-size:11.5px;color:var(--muted);background:#f3f4f6;padding:2px 8px;border-radius:20px;font-weight:600}
/* 卡片词库标签：当前词库主色突出，其它归属词库淡灰弱化 */
.grade-tag.gt-cur{background:var(--pri-l);color:var(--pri);font-weight:700}
.grade-tag.gt-other{background:#f3f4f6;color:#94a3b8;font-weight:500}
.stage-tag{font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:20px;background:var(--pri-l);color:var(--pri)}
/* 彩蛋词已融入常规词流，不再单独高亮（与其它词同排版） */

/* ============ 复习 ============ */
/* 复习闯关模块卡片：单行排列（6 个模块一整行），统一白色背景 */
.mode-grid{display:flex;flex-direction:column;gap:9px}
.mode-row{display:flex;flex-wrap:wrap;gap:9px;justify-content:center}
.mode-row .mode-card{flex:1 1 240px;max-width:360px;width:auto}
@media(max-width:1100px){.mode-row .mode-card{flex:1 1 200px}}
@media(max-width:620px){.mode-row{flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start}.mode-row .mode-card{flex:0 0 calc(50% - 2.5px);max-width:none;min-height:0;height:auto}}
.mode-card{border:1px solid var(--line);border-radius:12px;padding:10px 12px;text-align:left;transition:.18s;background:#fff;display:block;width:100%;box-sizing:border-box}
.mode-card:hover{border-color:var(--pri);box-shadow:0 4px 14px rgba(37,99,235,.12);transform:translateY(-2px)}
.mode-card .mi{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:6px;background:#fff}
.mode-card .mi svg{width:18px;height:18px}
.mode-card h4{font-size:14.5px;margin-bottom:2px;line-height:1.3}
.mode-card p{margin:0;font-size:12px;color:var(--muted);line-height:1.4}
/* 紧凑模式：横排一行一卡，手机端和窄屏都一卡一行更省空间 */
.mode-card.row{display:flex;align-items:center;gap:10px;text-align:left}
.mode-card.row .mi{margin-bottom:0;flex-shrink:0}
.mode-card.row .mt{flex:1;min-width:0}
.mode-card.row h4{margin-bottom:1px}
.mode-card.row p{font-size:11.5px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* 单词补天入口按钮：视觉放大并高亮，便于一眼找到 */
#fillLaunchCard{border-color:#f0a06a;box-shadow:0 4px 14px rgba(217,72,15,.14);background:linear-gradient(180deg,#fffaf5,#fff3ea)}
#fillLaunchCard h4{font-size:18px;color:#b4430c}
#fillLaunchCard .mi{width:44px;height:44px;border-radius:13px}
#fillLaunchCard .mi svg{width:24px;height:24px}
#fillLaunchCard p{font-size:13.5px;line-height:1.45}

.quiz-bar{display:flex;align-items:center;gap:12px;margin-bottom:8px;flex-wrap:wrap}
.qid{display:inline-block;margin-left:8px;padding:1px 9px;border-radius:7px;background:#e8f1ff;color:#1d6fe0;font-size:13px;font-weight:800;font-family:Consolas,'Courier New',monospace;letter-spacing:.5px;vertical-align:middle;border:1px solid #cfe2ff}
.pbar{flex:1;min-width:120px;height:9px;background:#eef2f7;border-radius:20px;overflow:hidden}
.pbar>i{display:block;height:100%;background:linear-gradient(90deg,#2563eb,#7c3aed);border-radius:20px;transition:width .35s}
.qcount{font-size:13.5px;color:var(--sub);font-weight:700;white-space:nowrap}

/* 连线 */
.match-wrap{position:relative;margin:4px auto 2px;max-width:780px}
.match-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}
.match-cols{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:42px;z-index:2}
.mcol{display:flex;flex-direction:column;gap:8px;align-items:center}
.mcol.right{padding-top:0}
.mcol.left{padding-top:88px}
.mitem{width:100%;max-width:280px;min-height:44px;border:2px solid var(--line);border-radius:12px;padding:6px 12px;display:flex;align-items:center;justify-content:center;text-align:center;font-weight:700;font-size:15px;transition:.15s;line-height:1.32;word-break:break-word;box-shadow:0 1px 2px rgba(15,23,42,.05);box-sizing:border-box}
/* 英文按钮：淡蓝渐变 + 蓝框 + 深蓝字（保持蓝色族，不被中文按钮覆盖） */
.mitem.en{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-color:#93c5fd;color:#1e3a8a;font-family:"Segoe UI",Roboto,sans-serif;font-size:16px}
/* 中文按钮：淡橙渐变 + 橙框 + 深橙字（与英文视觉始终明显区分） */
.mitem.cn{background:linear-gradient(135deg,#fff7ed,#fed7aa);border-color:#fdba74;color:#9a3412;font-size:15px}
/* hover 反馈 */
.mitem:hover:not(.matched):not(.sel):not(.wrong){filter:brightness(.97);transform:translateY(-1px);box-shadow:0 3px 6px rgba(15,23,42,.08)}
/* === 选中态：英文 强蓝 / 中文 强橙（始终保留底色族，不让两边看上去一样） === */
.mitem.en.sel{border-color:#2563eb;background:linear-gradient(135deg,#bfdbfe,#93c5fd);box-shadow:0 0 0 3px rgba(37,99,235,.28);color:#1e3a8a}
.mitem.cn.sel{border-color:#ea580c;background:linear-gradient(135deg,#fed7aa,#fdba74);box-shadow:0 0 0 3px rgba(234,88,12,.28);color:#9a3412}
/* === 匹配成功：英文 蓝→青绿 / 中文 橙→杏黄（保留各自的底色族，仅加深饱和度 + 浅绿描边） === */
.mitem.en.matched{border-color:#34d399;background:linear-gradient(135deg,#d1fae5,#a7f3d0);color:#065f46;cursor:default;opacity:1}
.mitem.cn.matched{border-color:#34d399;background:linear-gradient(135deg,#fef3c7,#fde68a);color:#92400e;cursor:default;opacity:1}
/* === 错误态：英文/中文都用红色系（明显提示，但保持底色族差异） === */
.mitem.en.wrong{border-color:#dc2626;background:linear-gradient(135deg,#fee2e2,#fecaca);color:#991b1b;animation:shake .4s;box-shadow:0 0 0 3px rgba(220,38,38,.18)}
.mitem.cn.wrong{border-color:#dc2626;background:linear-gradient(135deg,#fee2e2,#fecaca);color:#991b1b;animation:shake .4s;box-shadow:0 0 0 3px rgba(220,38,38,.18)}
/* 撤销提示气泡：连错时浮在连线区上方中央 */
.undo-hint{position:absolute;top:-2px;left:50%;transform:translate(-50%,-100%);background:#1f2937;color:#fff;font-size:12.5px;font-weight:600;padding:5px 12px;border-radius:18px;box-shadow:0 4px 12px rgba(0,0,0,.18);white-space:nowrap;z-index:10;animation:undoPop .25s ease;cursor:pointer;user-select:none}
.undo-hint:before{content:"";position:absolute;left:50%;top:100%;transform:translateX(-50%);border:6px solid transparent;border-top-color:#1f2937}
.undo-hint .x{margin-left:5px;opacity:.75}
@keyframes undoPop{from{opacity:0;transform:translate(-50%,-90%)}to{opacity:1;transform:translate(-50%,-100%)}}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
/* 连错时的「小蛇」动画：闪几下后消失 */
.match-snake{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:6;overflow:visible}
.snake-path{stroke-dasharray:11 9;animation:snakeSlither 1.4s linear, snakeFlash 1.4s ease forwards}
.snake-head{animation:snakeFlash 1.4s ease forwards}
@keyframes snakeSlither{from{stroke-dashoffset:40}to{stroke-dashoffset:0}}
@keyframes snakeFlash{0%{opacity:0}10%{opacity:1}28%{opacity:.3}44%{opacity:1}60%{opacity:.3}76%{opacity:1}90%{opacity:.45}100%{opacity:0}}
@keyframes flow{to{stroke-dashoffset:-32}}
.reveal-line{animation:flow 1s linear infinite}

/* 听音选意 倍速条：0.5 ~ 2 倍可拖拽，默认 1 倍 */
.speed-ctl{display:flex;align-items:center;gap:10px;justify-content:center;max-width:640px;margin:2px auto 0}
.sc-label{font-size:12px;font-weight:700;color:var(--sub);flex-shrink:0}
.speed-ctl input[type=range]{flex:1;min-width:140px;accent-color:#7c3aed;cursor:pointer}
.sc-val{font-size:13px;font-weight:800;color:#7c3aed;min-width:34px;text-align:center;flex-shrink:0}
/* 听音选意 - 紧凑版：喇叭左、选项右，答案揭示卡内嵌精简 */
.listen-box{display:flex;align-items:flex-start;gap:14px;max-width:640px;margin:0 auto;padding:4px 0 0}
.listen-side{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:88px}
.big-spk{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#2563eb,#7c3aed);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 18px rgba(37,99,235,.30);margin-bottom:4px;position:relative;overflow:hidden}
.big-spk svg{width:32px;height:32px}
.big-spk:active{transform:scale(.95)}
.big-spk .spk-ic{display:inline-flex;align-items:center;justify-content:center}
.big-spk .spk-wave{position:absolute;inset:0;width:100%;height:100%;display:none;pointer-events:none}
.big-spk.playing .spk-ic,.big-spk.ended .spk-ic{display:none}
.big-spk.playing .spk-wave,.big-spk.ended .spk-wave{display:block}
@keyframes ring{0%{box-shadow:0 6px 18px rgba(37,99,235,.30),0 0 0 0 rgba(37,99,235,.4)}70%{box-shadow:0 6px 18px rgba(37,99,235,.30),0 0 0 18px rgba(37,99,235,0)}100%{box-shadow:0 6px 18px rgba(37,99,235,.30),0 0 0 0 rgba(37,99,235,0)}}
.play-hint{font-size:11.5px;color:var(--muted);text-align:center;line-height:1.25;min-height:30px;width:100%}
.opts{display:grid;grid-template-columns:1fr 1fr;gap:8px;flex:1;min-width:0}
.opt{min-height:46px;max-height:58px;border:2px solid var(--line);border-radius:11px;padding:7px 11px;text-align:left;font-size:14.5px;font-weight:600;background:#fff;display:flex;align-items:center;gap:9px;transition:.15s;line-height:1.3;overflow:hidden}
.opt:hover:not(:disabled){border-color:var(--ok);background:var(--ok-l);transform:scale(1.04);box-shadow:0 6px 14px rgba(63,125,79,.18)}
.opt:disabled{cursor:default}
.opt .k{width:24px;height:24px;border-radius:6px;background:#f3f4f6;color:var(--sub);font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.opt .txt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:1;min-width:0;word-break:break-word}
.opt.right{border-color:var(--ok);background:var(--ok-l);color:#15803d}
.opt.right .k{background:var(--ok);color:#fff}
.opt.bad{border-color:var(--red);background:var(--red-l);color:#b91c1c;animation:shake .4s}
.opt.bad .k{background:var(--red);color:#fff}
.opt.locked{opacity:.55}
/* 听音选意 上一题 / 下一题 导航：卡片化大按钮 */
.q-nav{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:18px;flex-wrap:wrap;grid-column:1/-1}
.q-idx{font-size:15px;color:var(--muted);font-weight:700;min-width:120px;text-align:center;letter-spacing:.3px}
.nav-btn{display:inline-flex;align-items:center;gap:8px;border:2px solid var(--line);background:#fff;color:var(--pri);font-weight:800;font-size:18px;padding:13px 28px;border-radius:17px;cursor:pointer;font-family:inherit;transition:.18s;box-shadow:0 4px 12px rgba(37,99,235,.10)}
.nav-btn:hover:not(:disabled){background:var(--pri-l);border-color:var(--pri);transform:translateY(-2px);box-shadow:0 8px 18px rgba(37,99,235,.16)}
.nav-btn:active:not(:disabled){transform:translateY(0)}
.nav-btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}
.nav-btn .nav-ico{font-size:24px;line-height:1;font-weight:900}

/* 答题揭示卡 - 紧凑版：词+音+状态一行，释义+例句紧凑，下一题右侧 */
.reveal{margin:12px auto 0;max-width:640px;background:#f8fafc;border:1px solid var(--line);border-radius:12px;padding:10px 12px;text-align:left}
.reveal .r-row1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.reveal .r-row1 .wc-word{font-size:19px;font-weight:800;letter-spacing:-.3px;line-height:1.2;font-family:"Segoe UI",Roboto,-apple-system,sans-serif;color:var(--ink)}
.reveal .r-row1 .wc-ph{font-size:13px;color:var(--sub);font-family:"Segoe UI",Roboto,sans-serif}
.reveal .r-row1 .pos{display:inline-block;font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px;background:var(--purple-l);color:var(--purple);vertical-align:middle}
.reveal .r-row1 .spk-mini{width:30px;height:30px;border-radius:8px;background:var(--pri-l);color:var(--pri);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #dbeafe;cursor:pointer;padding:0;position:relative;overflow:hidden}
.reveal .r-row1 .spk-mini svg{width:15px;height:15px}
.reveal .r-row1 .spk-mini:active{transform:scale(.93)}
.reveal .r-row1 .spk-mini .spk-ic{display:inline-flex;align-items:center;justify-content:center}
.reveal .r-row1 .spk-mini .spk-wave{position:absolute;inset:0;width:100%;height:100%;display:none;pointer-events:none}
.reveal .r-row1 .spk-mini.playing .spk-ic,.reveal .r-row1 .spk-mini.ended .spk-ic{display:none}
.reveal .r-row1 .spk-mini.playing .spk-wave,.reveal .r-row1 .spk-mini.ended .spk-wave{display:block}
.reveal .r-row1 .r-stat{margin-left:auto;font-size:12.5px;font-weight:700;padding:3px 10px;border-radius:11px;white-space:nowrap;display:inline-flex;align-items:center;gap:4px}
.reveal .r-row1 .r-stat.ok{background:#dcfce7;color:#15803d}
.reveal .r-row1 .r-stat.bad{background:#fee2e2;color:#b91c1c}
.reveal .r-cn{font-size:15.5px;font-weight:700;color:var(--ink);margin-top:5px;line-height:1.3}
.reveal .r-ex{margin-top:6px;padding:7px 10px;background:#fff;border-left:3px solid var(--pri);border-radius:0 8px 8px 0;font-size:13.5px;line-height:1.35}
.reveal .r-ex .en{color:#1e3a8a;font-weight:600}
.reveal .r-ex .cn{color:var(--sub);font-size:12.5px;margin-top:2px}
.reveal .r-act{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:8px;flex-wrap:wrap}
.reveal .r-act .r-meta{font-size:12px;color:var(--sub);font-weight:600;flex:1;min-width:0}
.reveal .r-act .r-meta.bad{color:#b91c1c}
.reveal .r-act .btn{font-size:14px;min-height:36px;padding:0 18px;border-radius:10px;font-weight:700}

/* 结果 */
.result{text-align:center;padding:14px 6px;zoom:2}
.score-2x{zoom:2}
@media(max-width:700px){.result{zoom:1.4}.score-2x{zoom:1.4}}
.res-ring{margin:0 auto 12px;display:block}
.res-t{font-size:21px;font-weight:800;margin-bottom:5px}
.res-s{font-size:14px;color:var(--sub);margin-bottom:12px}
.res-list{text-align:left;max-width:560px;margin:0 auto 12px}
.res-row{display:flex;align-items:center;gap:9px;padding:8px 11px;border:1px solid var(--line);border-radius:11px;margin-bottom:6px;font-size:14.5px}
.res-row.bad{border-color:#fecaca;background:var(--red-l)}
.res-row .w{font-weight:700;font-family:"Segoe UI",Roboto,sans-serif;font-size:16px}
.res-row .c{color:var(--sub);flex:1;min-width:0}

/* 单词补天 */
#fillPage{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 16px;align-items:stretch;margin-top:4px}
@media(max-width:1100px){ #fillPage{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media(max-width:640px){ #fillPage{grid-template-columns:1fr;gap:12px} }
/* 物理 2K 竖屏兜底（.k2portrait 由 JS 按物理像素判定添加）：单词补天一列（一行一个填空） */
.k2portrait #fillPage{grid-template-columns:1fr;gap:20px}
.fill-card{position:relative;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;box-shadow:0 1px 3px rgba(15,23,42,.05);display:flex;flex-direction:column}
/* 错题单词：橙色底，优先醒目 */
.fill-card.fill-err{background:linear-gradient(135deg,#fff4ec,#fff7ef);border-color:#f0d3b8;box-shadow:0 2px 10px rgba(217,72,15,.12)}
/* 已学会单词（pass 里）：绿色底 */
.fill-card.fill-pass{background:linear-gradient(135deg,#ecfdf5,#f0fdf4);border-color:#a7f3d0;box-shadow:0 2px 10px rgba(16,185,129,.12)}
.fill-head{display:flex;align-items:center;justify-content:center;gap:9px;margin:4px 0 2px}
.fill-cn{font-size:22px;font-weight:800;text-align:center;color:#1f2937;line-height:1.4}
/* 每个词中文右侧：所属词库小标签 + 错题标记 */
.fill-bank{font-size:11.5px;color:#9a3412;background:#fff4ec;border:1px solid #f0d3b8;border-radius:999px;padding:1px 8px;white-space:nowrap;font-weight:600;flex:0 0 auto}
.fill-err-tag{font-size:11px;color:#b91c1c;background:#fee2e2;border:1px solid #fecaca;border-radius:999px;padding:1px 7px;font-weight:700;vertical-align:middle;margin-left:4px;white-space:nowrap}
/* 每个词单独朗读按钮（沿用 spk-mini 以便事件委托/波形可视化识别） */
.fill-spk{width:30px;height:30px;border-radius:9px;background:var(--pri-l);color:var(--pri);border:1px solid #dbeafe;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;cursor:pointer;position:relative;overflow:hidden;padding:0}
.fill-spk:active{transform:scale(.92)}
.fill-spk .spk-ic{display:inline-flex;align-items:center;justify-content:center}
.fill-spk.playing .spk-ic,.fill-spk.ended .spk-ic{display:none}
/* 一页多词时，每组单词之间的美化分隔线（渐隐 + 菱形点缀） */
.fill-sep{display:flex;align-items:center;gap:10px;margin:8px 0 12px}
.fill-sep::before,.fill-sep::after{content:'';flex:1;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,#e8bd8e)}
.fill-sep::after{transform:scaleX(-1)}
.fill-sep span{flex:0 0 auto;font-size:9px;color:#d9a06a;line-height:1}
.fill-pos{text-align:center;color:var(--muted);font-size:13px;margin-bottom:12px}
.fill-ph{font-family:"Consolas","Courier New",monospace;color:#9a3412;font-weight:600;font-size:14px}
.fill-word{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center;margin:6px 0 14px}
/* 使用等宽字体，小写 l 与大写 I 区分明显，规避混淆 */
.fw-ch{width:44px;height:54px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:25px;font-weight:800;font-family:"Consolas","Courier New",monospace;background:#f8fafc;border:2px solid #e2e8f0;color:#0f172a;box-sizing:border-box}
.fw-in{width:44px;height:54px;border-radius:10px;border:2px solid #d9b08c;background:#fff7ef;color:#9a3412;font-size:25px;font-weight:800;text-align:center;padding:0;outline:none;box-sizing:border-box;transition:.12s;font-family:"Consolas","Courier New",monospace;caret-color:#d9480f}
.fw-in:focus{border-color:#d9480f;box-shadow:0 0 0 3px rgba(217,72,15,.16)}
.fw-in.right{border-color:var(--ok);background:var(--ok-l);color:#15803d}
.fw-in.wrong{border-color:var(--red);background:var(--red-l);color:#b91c1c}
/* 英文词组中的空格：不出现填空框，仅以间隙表示，系统自动留空，不诱导用户填写 */
/* #44 词间隔标记：用一段虚线下划线表示「此处有空格」，换行时仍可见，避免把两个单词误认为一个长单词 */
.fw-sp{width:18px;height:54px;display:inline-flex;align-items:center;justify-content:center;position:relative;margin:0 1px}
.fw-sp::after{content:"";position:absolute;left:1px;right:1px;bottom:0.16em;border-bottom:2px dotted #c4b5fd}
.fill-pbar>i{background:linear-gradient(90deg,#ea580c,#d9480f)}
/* 提交后对照：正确字母绿色，错误位置红色波浪下划线，悬停显示你填的内容 */
.fill-diff{margin:8px auto 0;max-width:560px;display:flex;flex-wrap:wrap;gap:5px;justify-content:center;font-size:23px;font-weight:800;font-family:"Consolas","Courier New",monospace;letter-spacing:1px}
.fd-fixed{color:#0f172a}
.fd-right{color:#15803d}
.fd-wrong{color:#b91c1c;background:#fee2e2;border-radius:6px;padding:0 3px;text-decoration:underline wavy #b91c1c}
/* 单词补天·错词解析（强调：你提交的错词 / 正确答案 / 差别） */
.fa-box{margin-top:7px;font-size:13.5px;color:#7f1d1d;line-height:1.55}
.fa-line{display:flex;align-items:center;gap:8px;margin:5px 0;flex-wrap:wrap}
.fa-key{flex:0 0 auto;font-weight:800;color:#7f1d1d;min-width:66px}
.fa-word{font-family:"Consolas","Courier New",monospace;font-size:22px;font-weight:800;letter-spacing:2px;display:inline-flex;gap:1px;flex-wrap:wrap}
.fa-ok{color:#0f172a}
.fa-bad{color:#b91c1c;background:#fee2e2;border-radius:5px;padding:0 2px}
.fa-good{color:#15803d;background:#dcfce7;border-radius:5px;padding:0 2px}
.fa-miss{color:#9ca3af;background:#f1f5f9;border-radius:5px;padding:0 2px}
.fa-sp{display:inline-block;width:8px}
.fa-diffs{margin-top:6px;padding-left:74px}
.fa-diff{margin:2px 0}
.fa-diff b{color:#7f1d1d}
@media(max-width:480px){ .fill-word{gap:6px} .fw-ch,.fw-in{width:36px;height:46px;font-size:20px} .fw-sp{width:12px;height:46px} .fill-cn{font-size:19px} .fill-word.phrase .fw-ch,.fill-word.phrase .fw-in{font-size:16px} }

/* ===== You know M3 · 电影对白连线 ===== */
/* 上下布局：英文句子横向一行在上，中文答案横向一行在下（原左右两栏改为上下两行） */
.m3-wrap{display:flex;flex-direction:column;gap:16px}
.m3-left{width:100%;min-width:0;display:flex;flex-direction:row;flex-wrap:wrap;gap:11px}
.m3-right{width:100%;min-width:0;display:flex;flex-direction:row;flex-wrap:wrap;gap:11px}
.m3-en{display:flex;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--paper);min-height:60px}
.m3-en .m3-flag{flex:0 0 auto;font-size:11px;font-weight:800;color:#fff;background:#15803d;border-radius:6px;padding:2px 7px}
.m3-en .m3-spk{flex:0 0 auto;width:42px;height:42px;border-radius:10px;background:var(--pri-l);color:var(--pri);border:1px solid #dbeafe;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:.15s;position:relative;overflow:hidden}
.m3-en .m3-spk:hover,.m3-en .m3-spk.playing{background:var(--pri);color:#fff}
.m3-en .m3-spk.playing .spk-ic{animation:m3pulse .9s ease-in-out infinite}
@keyframes m3pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.22)}}
.m3-en .m3-text{flex:1 1 auto;font-size:15.5px;font-weight:700;font-family:"Georgia","Segoe UI",serif;line-height:1.45;color:#0f172a}
.m3-en .m3-drop{flex:0 0 auto;width:150px;min-height:42px;border:2px dashed #d9b08c;border-radius:10px;background:#fffdf7;display:flex;align-items:center;justify-content:center;color:#c99a76;font-size:12.5px;cursor:pointer;transition:.15s;text-align:center;padding:5px}
.m3-en .m3-drop.done{border-style:solid;border-color:var(--ok);background:var(--ok-l);color:#15803d;font-size:13.5px}
.m3-en .m3-drop.wrong{border-color:var(--red);background:var(--red-l);color:#b91c1c}
.m3-cn{flex:1 0 auto;border:1.5px solid #bfdbfe;border-radius:12px;padding:10px 12px;background:#eff6ff;font-size:14.5px;line-height:1.5;color:#1d4ed8;cursor:grab;box-shadow:0 1px 3px rgba(0,0,0,.05);transition:.15s;user-select:none;font-weight:700}
.m3-cn.dragging{opacity:.45}
.m3-cn.used{opacity:.5;color:#9ca3af;background:#f3f4f6;border-color:#d1d5db;pointer-events:none}
.m3-en.drag-over .m3-drop,.m3-drop.drag-over{border-color:#d9480f;background:#fff7ef;transform:scale(1.02)}
/* M3 底部操作按钮：提交答案 / 再来一波 / 退出 放大 2 倍 */
#m3Foot .btn{min-height:88px;padding:0 42px;border-radius:20px;font-size:26px;font-weight:800;gap:10px}
#m3Foot .desc{font-size:13px;flex-basis:100%;text-align:center}
/* M3 全部学会卡片 */
.m3-done-card{text-align:center;padding:36px 20px;border:2px dashed var(--ok);border-radius:20px;background:var(--ok-l)}
.m3-done-card .m3-done-t{font-size:26px;font-weight:800;color:#15803d;margin-bottom:8px}
.m3-done-card .desc{font-size:14px;color:var(--muted)}
@media (orientation:portrait) and (min-height:2000px){
  .m3-wrap{gap:24px}
  .m3-left,.m3-right{gap:16px}
  .m3-en{min-height:84px;padding:15px 18px}
  .m3-en .m3-text{font-size:30px}
  .m3-en .m3-flag{font-size:18px;padding:6px 12px;border-radius:9px}
  .m3-en .m3-spk{width:60px;height:60px;border-radius:14px}
  .m3-en .m3-drop{width:250px;min-height:72px;font-size:24px;border-width:3px}
  .m3-cn{font-size:28px;padding:16px 20px;border-radius:16px}
  .m3-en .m3-drop.done{font-size:26px}
  #m3Foot .btn{min-height:160px;padding:0 76px;border-radius:34px;font-size:46px;gap:18px}
  #m3Foot .desc{font-size:22px}
  .m3-done-card{padding:60px 30px;border-radius:32px;border-width:3px}
  .m3-done-card .m3-done-t{font-size:46px}
  .m3-done-card .desc{font-size:24px}
}

/* 列表/表 */
.filter-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:9px}
.inp,select.inp{min-height:44px;border:1px solid var(--line);border-radius:11px;padding:0 12px;background:#fff;outline:none;font-size:16px}
.inp:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.search{flex:1;min-width:150px}
.wlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.wrow{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:#fff}
.wrow.due{border-color:#fecaca;background:var(--red-l)}
.wrow.mastered{border-color:#bbf7d0;background:var(--ok-l)}
.wrow-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wrow-h b{font-size:17px;font-family:"Segoe UI",Roboto,sans-serif}
.wrow-cn{font-size:14px;color:var(--sub);margin-top:2px}
.wrow-m{font-size:12px;color:var(--muted);margin-top:4px;display:flex;gap:10px;flex-wrap:wrap}
.overdue-header{padding:6px 0 4px;border-bottom:1px solid var(--line);margin-bottom:6px;display:flex;align-items:center;gap:9px}
.overdue-section{margin-bottom:2px}
/* 我的书房：子模块导航（语法大全 / 我的词库 并列） */
.subtabs{display:flex;gap:6px;background:var(--card);border:1px solid var(--line2);border-radius:13px;padding:5px;margin-bottom:12px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.subtab{flex:1;min-width:96px;min-height:42px;border-radius:9px;font-weight:600;font-size:15px;color:var(--sub);display:flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;transition:.15s;border:none;background:transparent;cursor:pointer}
.subtab.on{background:var(--seal);color:#fff;box-shadow:0 2px 6px rgba(154,47,40,.28)}
.subtab:hover:not(.on){color:var(--pri)}
/* 语法大全：条目卡片（词组 / 答案 / 解析 / 例句） */
.gitem{border:1px solid var(--line);border-radius:14px;padding:13px 15px;background:#fff;display:flex;flex-direction:column}
.gitem-s{font-size:17px;font-weight:700;color:#1e293b;line-height:1.4;font-family:"Segoe UI",Roboto,sans-serif}
.gitem-meta{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:9px}
.gitem-form{font-size:13px;font-weight:700;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:9px;padding:4px 12px;white-space:nowrap;line-height:1.4}
.gitem-zh{font-size:13px;color:#475569;background:#f8fafc;border:1px solid var(--line);border-radius:9px;padding:4px 12px;line-height:1.45;word-break:break-word}
.gitem-ex{margin-top:11px;display:flex;flex-direction:column;gap:6px;border-top:1px dashed var(--line);padding-top:10px}
.gex{font-size:14px;line-height:1.45}
.gex-en{color:#0f172a;font-weight:600;font-family:"Segoe UI",Roboto,sans-serif}
.gex-zh{color:var(--sub);margin-left:8px}
/* 语法大全条目：左上角 ID + 已掌握绿标 */
.gitem-hd{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.gitem-id{font-size:11px;font-weight:800;color:#64748b;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:7px;padding:1px 6px;letter-spacing:.02em;flex:0 0 auto}
.gitem.done{border-color:#16a34a;background:#f0fdf4}
.gitem-done{font-size:12px;font-weight:800;color:#16a34a;background:#dcfce7;border:1px solid #bbf7d0;border-radius:999px;padding:1px 10px;flex:0 0 auto}
/* 已学习切换按钮：未学习→橙色；已学习→绿色 */
.gitem-learn{font-size:12px;font-weight:700;color:#ea580c;background:#fff7ed;border:1px solid #fdba74;border-radius:999px;padding:1px 9px;cursor:pointer;flex:0 0 auto;font-family:inherit;line-height:1.5}
.gitem-learn:hover{border-color:#ea580c}
.gitem-learn.on{color:#16a34a;background:#f0fdf4;border-color:#86efac}
/* 待复习队列 4 列网格 */
.rlist{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.rlist .wrow{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:10px 8px;border-radius:10px;min-height:90px;box-sizing:border-box;border:1.5px solid;gap:2px}
.rlist .wrow.due{background:#fef2f2;border-color:#fecaca}
.rlist .wrow.queue{background:#eff6ff;border-color:#bfdbfe}
.rlist .wrow-h{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:4px 6px;width:100%}
.rlist .wrow-h b{font-size:14px;font-weight:700;color:#1e293b}
.rlist .wrow-h .wc-ph{font-size:11px;color:#64748b}
.rlist .wrow-cn{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:3px 5px;width:100%;padding:0 2px;line-height:1.3}
.rlist .wrow-cn .wrow-cn-txt{font-size:12px;color:#334155}
.rlist .wrow-cn .pos{font-size:10px;color:#94a3b8}
/* 复习卡片隐藏多余信息 */
.rlist .wrow-m,.rlist .stage-tag{display:none}
/* 待复习队列：每张卡片右上角加一个发音按钮（绝对定位，不改变卡片尺寸） */
.rlist .wrow{position:relative}
.rlist .wrow-spk{position:absolute;top:5px;right:5px;width:26px;height:26px;padding:0;border:1px solid var(--line);background:#fff;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--pri);opacity:.82;z-index:2}
.rlist .wrow-spk:hover{opacity:1;background:var(--pri-l)}
.rlist .wrow-spk svg{width:15px;height:15px;display:block}
@media(max-width:700px){.rlist{grid-template-columns:repeat(2,1fr)}}
@media(max-width:420px){.rlist{grid-template-columns:1fr}}
.btn.xs{min-height:30px;padding:0 10px;font-size:12px;border-radius:8px}
.wrow-rate{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}
.wrow-rate .btn.xs{flex:1;min-width:0}

/* 统计 */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;margin-bottom:11px}
.stat{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:13px;padding:13px 12px 11px;text-align:center;background:linear-gradient(180deg,#ffffff,#fcf8ee);box-shadow:var(--sh);transition:transform .16s ease,box-shadow .16s ease}
.stat::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--accent,#3f5b7a);opacity:.9}
.stat:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(80,55,20,.15)}
.stat:active{transform:translateY(0)}
.stat .v{font-size:26px;font-weight:800;line-height:1.12;letter-spacing:-.4px}
.stat .l{font-size:12.5px;color:var(--muted);margin-top:5px;font-weight:600}
.chart-box{overflow-x:auto;-webkit-overflow-scrolling:touch}

.empty{text-align:center;padding:24px 16px;color:var(--muted)}
.empty svg{opacity:.35;margin-bottom:10px}
.empty p{margin:0 0 4px;font-size:14.5px}

/* 弹窗 */
.mask{position:fixed;inset:0;background:rgba(15,23,42,.55);display:flex;align-items:center;justify-content:center;padding:18px;z-index:99;backdrop-filter:blur(2px)}
.modal{background:#fff;border-radius:17px;padding:18px;max-width:420px;width:100%;box-shadow:0 20px 50px rgba(0,0,0,.28);max-height:86vh;overflow:auto}
.modal.wide{max-width:680px}
.modal h3{font-size:17px;margin-bottom:9px;display:flex;align-items:center;gap:8px}
.modal p{font-size:14.5px;color:var(--sub);margin:0 0 12px;line-height:1.6}
.modal-btns{display:flex;gap:9px}
.modal-btns .btn{flex:1}
/* 日历 */
.cal{max-width:384px;margin:0 auto}
.cal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cal-h button{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:18px;cursor:pointer;color:var(--pri);font-weight:700;line-height:1}
.cal-h button:hover{background:#eff6ff}
.cal-title{font-size:15.5px;font-weight:800}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.cal-wd{margin-bottom:6px}
.cal-wd span{text-align:center;font-size:11.5px;font-weight:700;color:var(--muted)}
.cal-cell{position:relative;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;border-radius:9px;cursor:pointer;border:1px solid transparent;transition:.12s;user-select:none}
.cal-cell.empty{visibility:hidden;cursor:default}
.cal-cell.future{color:var(--muted);background:#f8fafc;cursor:default}
.cal-cell.done{color:#15803d;background:#dcfce7;border-color:#bbf7d0}
.cal-cell.miss{color:#dc2626;background:#fee2e2;border-color:#fecaca}
.cal-cell.today{outline:2px solid var(--pri);outline-offset:-2px}
.cal-cell:not(.future):not(.empty):hover{filter:brightness(.96)}
.cal-legend{display:flex;gap:12px;justify-content:center;margin-top:12px;font-size:11.5px;color:var(--sub);flex-wrap:wrap}
.cal-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:middle}
.cal-tip{position:fixed;z-index:300;background:#fff;border:1px solid var(--line);border-radius:13px;box-shadow:0 12px 34px rgba(15,23,42,.22);padding:13px 14px;width:248px;font-size:13px;color:var(--ink);max-height:62vh;overflow:auto;display:none}
.cal-tip h4{font-size:14px;margin:0 0 8px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.cal-tip .x{width:22px;height:22px;border-radius:6px;border:none;background:#f1f5f9;font-size:15px;line-height:1;cursor:pointer;color:var(--muted);flex-shrink:0}
.cal-tip .st{display:flex;gap:18px;margin-bottom:9px}
.cal-tip .st b{font-size:17px}
.cal-tip .grp{margin-top:9px}
.cal-tip .grp .lab{font-weight:800;font-size:12px;color:var(--sub);margin-bottom:5px}
.cal-tip .wd{display:inline-block;background:#f1f5f9;border-radius:6px;padding:2px 7px;margin:2px 4px 0 0;font-size:12px}
.cal-tip .empty{color:var(--muted);font-size:12px}
.toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(80px);background:#111827;color:#fff;padding:12px 20px;border-radius:12px;font-size:14.5px;font-weight:600;z-index:200;opacity:0;transition:.28s;pointer-events:none;max-width:88vw;text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.25)}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.foot{text-align:center;font-size:12.5px;color:var(--muted);padding:6px 0 0;line-height:1.8}

@media(max-width:768px){
  .wrap{padding:12px 11px 30px}
  .brand h1{font-size:17px}
  .tools{width:100%}
  .tools .btn{flex:1;padding:0 8px;font-size:13px}
  .todo-grid{grid-template-columns:repeat(3,1fr);gap:6px}
  .todo-item{padding:8px 7px;gap:7px}
  .ti-ic{width:28px;height:28px}
  .ti-t{font-size:13px}
  .ti-s{font-size:11px}
  #newWords{grid-template-columns:1fr}
  .wc-word{font-size:22px}
  /* === 移动端 中英连线 紧凑化（取消之字错位，缩小按钮） === */
  /* quizHead：标题/描述行高紧凑，退出按钮小巧 */
  .sec-h{align-items:flex-start;gap:6px;margin-bottom:5px}
  .sec-h>div:first-child{flex:1;min-width:0}
  .sec-h .btn.sm{padding:4px 9px;font-size:12px;align-self:flex-start;border-radius:9px}
  .mcol.left{padding-top:0}
  .mcol.right{padding-top:0}
  .mcol{gap:6px}
  .match-wrap{margin:0 auto;position:relative;align-items:start}
  .mitem{min-height:24px;font-size:11.5px;padding:2px 5px;border-width:1.5px;border-radius:9px;line-height:1.18;letter-spacing:.1px;width:auto;max-width:140px;margin-left:auto;margin-right:auto}
  .mitem.en{font-size:11px;padding:2px 4px;max-width:130px}
  .mitem.cn{font-size:11.5px;max-width:148px}
  .match-cols{gap:26px}
  #matchFoot{margin-top:6px;gap:6px}
  #matchFoot .btn.sm{padding:5px 8px;font-size:12px}
  .undo-hint{font-size:11.5px;padding:4px 10px}
  .wlist{grid-template-columns:1fr}
  .big-spk{width:84px;height:84px}
  .big-spk svg{width:40px;height:40px}
  .listen-box{flex-direction:column;align-items:stretch;gap:8px}
  .listen-side{width:100%;flex-direction:row;gap:10px;justify-content:center}
  .play-hint{min-height:auto;width:auto;font-size:12.5px;align-self:center;text-align:left}
  .opt{min-height:50px;max-height:none;font-size:14.5px;padding:8px 11px}
  .opt .txt{-webkit-line-clamp:3}
  /* 听音选意 导航：窄屏同排紧凑显示（上一题 | 第X/Y题 | 下一题） */
  .q-nav{gap:6px;flex-wrap:nowrap;margin-top:10px}
  .nav-btn{font-size:13.5px;padding:8px 10px;border-radius:11px;gap:4px}
  .nav-btn .nav-ico{font-size:16px}
  .q-idx{font-size:12.5px;min-width:70px}
  .stat .v{font-size:23px}
  .tab{min-width:76px;font-size:13.5px;padding:0 4px}
  .tab .tx{display:none}
  .tab.on .tx{display:inline}
}

/* ================= Hero / 顶栏美化 ================= */
/* === Hero：日式古朴 · 毛笔书法 === */
.hero{
  position:relative;overflow:hidden;border-radius:18px;padding:14px 16px 12px;margin-bottom:10px;
  border:1px solid #b08a52;
  background-color:#f1e3c2;
  background-image:
    /* 水墨 - 左上 */
    radial-gradient(ellipse 60% 80% at 8% 12%, rgba(42,38,32,.07) 0%, transparent 60%),
    /* 和纸纤维斜纹 */
    repeating-linear-gradient(45deg, rgba(138,104,62,.045) 0 2px, transparent 2px 5px),
    repeating-linear-gradient(-45deg, rgba(138,104,62,.025) 0 1px, transparent 1px 4px),
    /* 宣纸底色渐变 */
    linear-gradient(180deg, #f6ead0 0%, #ecdcb6 55%, #e1cb9c 100%);
  box-shadow:0 4px 16px rgba(80,55,20,.10), inset 0 0 0 1px rgba(255,255,255,.25);
}
/* 顶部金色细线（屏风边框） */
.hero::before{content:"";position:absolute;left:10px;right:10px;top:7px;height:2px;background:linear-gradient(90deg,transparent,#a88242 20%,#7a4d22 50%,#a88242 80%,transparent);opacity:.55;pointer-events:none}
.hero::after{content:"";position:absolute;left:10px;right:10px;bottom:7px;height:2px;background:linear-gradient(90deg,transparent,#a88242 20%,#7a4d22 50%,#a88242 80%,transparent);opacity:.55;pointer-events:none}
.hero-row{display:flex;align-items:center;justify-content:space-between;gap:14px;position:relative;z-index:1;min-height:46px}
.hero-l{display:flex;align-items:center;gap:14px;min-width:0;flex:1}
.hero h1{
  font-size:23px;letter-spacing:6px;font-weight:700;
  font-family:"STXingkai","STXingkai-SC","Xingkai SC","Kaiti SC","STKaiti","KaiTi","楷体","DFKai-SB","BiauKai","Hiragino Mincho ProN","Yu Mincho",serif;
  color:#2a2620;text-shadow:0 1px 0 rgba(255,252,238,.6);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  line-height:1.25;padding-left:2px;
}
.hero-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.hero-title h1{flex:1;min-width:0;padding-right:36px}
/* 龙珠设置按钮：完全透明、只显示龙珠图标 */
.icon-btn.db-set{width:auto;height:auto;min-width:0;padding:0;background:transparent;border-color:transparent;border-radius:0;box-shadow:none}
.icon-btn.db-set:hover{background:rgba(120,80,30,.07);border-color:transparent;border-radius:50%;box-shadow:none}
.icon-btn.db-set svg{width:28px;height:28px}
.hero .sb{
  font-family:"STKaiti","KaiTi","Kaiti SC","Hiragino Mincho ProN","Yu Mincho","Songti SC","STSong",serif;
  font-size:12.5px;color:#6b563a;font-weight:500;margin-top:5px;letter-spacing:1.5px;
  font-style:italic;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.hero-r{position:absolute;top:14px;right:16px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;z-index:5}
.logo{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#2563eb,#7c3aed,#ec4899);display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 6px 18px rgba(124,58,237,.32)}
.hero h1{font-size:21px;letter-spacing:-.4px;display:flex;align-items:center;gap:8px}
.hero .sb{font-size:12.5px;color:var(--muted);font-weight:500;margin-top:2px}
.hero-r{position:absolute;top:14px;right:16px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;z-index:5}
.hero-tools{margin-top:13px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;justify-content:space-between}

/* ================= 回到平台首页（并入「今天的修行」右侧按钮行，仅房子图标、放大） ================= */
.home-btn{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;background:transparent;color:var(--sub);text-decoration:none;border:none;cursor:pointer;transition:.15s;font-family:inherit;flex:0 0 auto;white-space:nowrap;width:36px;height:32px;flex-shrink:0}
.home-btn:hover{background:rgba(120,80,30,.07);color:var(--pri)}
.home-btn.gerr-btn{position:relative;color:var(--pri)}
.gerr-badge{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;line-height:16px;background:#dc2626;color:#fff;border-radius:999px;font-size:10px;font-weight:700;text-align:center;padding:0 4px;box-sizing:border-box}
.home-btn svg{width:23px;height:23px;display:block}
.hero-row{display:flex;align-items:center;justify-content:space-between;gap:10px;position:relative;z-index:1;min-height:46px}
.hero-title{display:flex;align-items:center;gap:8px;flex:1;min-width:0;justify-content:center}
.hero-title h1{flex:0 0 auto;padding-right:0;white-space:nowrap}
.ucard{flex:0 0 auto}
.hero-r{position:static;display:flex;gap:8px;align-items:center;flex:0 0 auto}
@media(max-width:768px){
  .home-btn{width:32px;height:30px}
  .home-btn svg{width:20px;height:20px}
  .hero-title{gap:6px}
}

/* ================= 用户卡片 ================= */
.ucard{display:flex;align-items:center;gap:10px;padding:7px 14px 7px 7px;background:transparent;border:1px solid transparent;border-radius:14px;cursor:pointer;transition:.18s;box-shadow:none;user-select:none}
.ucard:hover{border-color:var(--line2);box-shadow:0 4px 14px rgba(80,55,20,.10);transform:translateY(-1px)}
.ucard.on{border-color:var(--pri);background:var(--pri-l)}
.uc-info{min-width:0;line-height:1.25}
.uc-info .n{font-size:14.5px;font-weight:700;white-space:nowrap}
.uc-info .s{font-size:11.5px;color:var(--muted);font-weight:500;margin-top:2px;white-space:nowrap}
.uc-arrow{color:var(--muted);transition:.2s}
.ucard.on .uc-arrow{transform:rotate(180deg);color:var(--pri)}

/* ================= 头像 ================= */
.avatar{width:50px;height:50px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:800;font-size:18px;color:#fff;letter-spacing:-.5px;box-shadow:0 2px 8px rgba(0,0,0,.12);font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif}
.avatar.lg{width:64px;height:64px;font-size:25px}
.avatar.xl{width:96px;height:96px;font-size:38px}
.av-g1{background:linear-gradient(135deg,#fb923c,#f43f5e)}
.av-g2{background:linear-gradient(135deg,#22c55e,#0ea5e9)}
.av-g3{background:linear-gradient(135deg,#a855f7,#ec4899)}
.av-g4{background:linear-gradient(135deg,#f59e0b,#f97316)}
.av-g5{background:linear-gradient(135deg,#3b82f6,#8b5cf6)}
.av-g6{background:linear-gradient(135deg,#06b6d4,#10b981)}
.av-g7{background:linear-gradient(135deg,#ef4444,#f59e0b)}
.av-g8{background:linear-gradient(135deg,#8b5cf6,#3b82f6)}
.av-img{background-size:cover;background-position:center}

/* ================= Icon Button ================= */
.icon-btn{width:40px;height:40px;border-radius:11px;background:#fff;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--sub);transition:.15s}
.icon-btn:hover{border-color:var(--pri);color:var(--pri);transform:translateY(-1px);box-shadow:0 3px 10px rgba(37,99,235,.14)}
.icon-btn svg{width:18px;height:18px}

/* ================= 芯片 ================= */
.chip{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:34px;padding:0 13px;border-radius:18px;background:#f3f4f6;color:var(--sub);font-size:13px;font-weight:600;cursor:pointer;border:1.5px solid transparent;transition:.15s;user-select:none}
.chip:hover{background:#e5e7eb}
.chip.on{background:var(--pri);color:#fff;border-color:var(--pri);box-shadow:0 2px 8px rgba(37,99,235,.25)}
.chip-eye{margin-left:7px;font-size:11px;font-weight:700;color:#fff;background:rgba(255,255,255,.22);border:none;border-radius:11px;padding:2px 8px;cursor:pointer;line-height:1.5}
.chip-eye:hover{background:rgba(255,255,255,.38)}
.chip:not(.on) .chip-eye{color:var(--pri);background:#eaf0fe}
.chip:not(.on) .chip-eye:hover{background:#dde7fd}
.egg-bank{cursor:pointer;background:#faf5ff;border-color:#f0e1fb}
.egg-bank:hover{border-color:#d8b4fe}
.egg-bank svg{margin-left:6px;opacity:.55}
/* 词库查看弹窗 */
.bank-stat{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--sub);background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:10px 13px;margin-bottom:12px}
.bank-stat b{color:var(--pri)}
/* 各词库学习进度（学习数据面板）：表格化，比卡片式更省空间 */
.bank-stat-grid{display:flex;flex-direction:column;gap:9px}
.bank-tbl{border-collapse:collapse;width:100%;font-size:14px;background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.bank-tbl th,.bank-tbl td{border-bottom:1px solid var(--line);padding:8px 10px;text-align:center}
.bank-tbl th{background:#f8fafc;font-size:12.5px;color:var(--muted);font-weight:700}
.bank-tbl td.bt-name{text-align:left;font-weight:700;color:var(--text);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bank-tbl td.bt-mast{color:#16a34a;font-weight:800}
.bank-tbl tbody tr:last-child td{border-bottom:none}
/* 各词库学习进度：横向条形图（取代旧表格） */
.bank-sum{font-size:13px;color:var(--sub);font-weight:600;margin-bottom:11px;padding:9px 12px;background:var(--pri-l);border-radius:11px;border:1px solid var(--line)}
.bank-sum b{color:var(--pri);font-weight:800}
.bank-chart{display:flex;flex-direction:column;gap:14px}
.bc-row{display:flex;flex-direction:column;gap:7px}
.bc-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.bc-name{font-size:15px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px}
.bc-name .dot{width:9px;height:9px;border-radius:50%;background:var(--pri);flex:none}
.bc-meta{font-size:12.5px;color:var(--muted);font-weight:600;white-space:nowrap}
.bc-meta b{color:var(--pri);font-weight:800}
.bc-meta b.ok{color:var(--ok)}
.bc-track{position:relative;height:15px;border-radius:9px;background:#ece3cf;overflow:hidden;box-shadow:inset 0 1px 2px rgba(80,55,20,.12)}
.bc-fill{position:absolute;top:0;left:0;height:100%;border-radius:9px;transition:width .6s cubic-bezier(.2,0,0,1)}
.bc-fill.m{background:linear-gradient(90deg,#5cb270,#3f7d4f)}
.bc-fill.l{background:linear-gradient(90deg,#6d93c4,#3f5b7a)}
.bc-foot{display:flex;gap:14px;font-size:11.5px;font-weight:600;color:var(--muted)}
.bc-foot .fm{color:var(--ok)} .bc-foot .fl{color:var(--pri)} .bc-foot .fp{margin-left:auto;color:var(--sub)}
/* 错题本：单词错题 4 个/行，字号放大 */
.err-desc{font-size:13.5px}
.err-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;max-height:54vh;overflow:auto;padding:2px}
.err-cell{border:1px solid #fecaca;border-radius:12px;padding:11px 10px;background:#fff7f7;display:flex;flex-direction:column;gap:2px;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}
.err-cell:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(180,40,40,.12)}
.err-cell .ec-w{font-size:18px;font-weight:800;color:#1f2937;line-height:1.2;word-break:break-word}
.err-cell .ec-p{font-size:13.5px;color:var(--muted)}
.err-cell .ec-c{font-size:13.5px;color:#4b5563;line-height:1.35}
.err-cell .ec-badge{margin-top:6px;font-size:12px;font-weight:700;color:#b91c1c;background:#fde8e8;border-radius:8px;padding:2px 8px;align-self:flex-start}
.err-go{font-size:17px;padding:13px 24px;min-height:50px}
@media (max-width:560px){ .err-grid{grid-template-columns:repeat(2,1fr)} }
.bank-list{display:grid;grid-template-columns:1fr;gap:8px;max-height:56vh;overflow:auto;padding-right:4px}
.bank-row{border:1px solid var(--line);border-radius:11px;padding:9px 12px;background:#fff}
.bank-row .bw{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.bank-row .bw b{font-size:15px}
.bank-row .bph{font-size:12.5px;color:var(--muted)}
.bank-row .bc{font-size:13.5px;color:var(--sub);margin-top:2px}
.bank-row .be{font-size:12.5px;color:var(--muted);margin-top:2px;font-style:italic}
.bank-sec{font-size:13px;font-weight:700;color:var(--pri);margin:14px 0 6px;padding-bottom:5px;border-bottom:1.5px dashed var(--line);display:flex;align-items:center;gap:8px}
.bank-sec-n{font-size:11px;font-weight:600;color:var(--muted);background:#f1f5f9;border:1px solid var(--line);border-radius:20px;padding:1px 9px}
.pwd-box{margin:6px 0 4px}
.pwd-box input{width:100%;padding:11px 13px;border:1.5px solid var(--line);border-radius:11px;font-size:15px;letter-spacing:2px;box-sizing:border-box}
.pwd-err{color:#dc2626;font-size:13px;min-height:18px;margin-top:6px}
.chip.ok.on{background:var(--ok);border-color:var(--ok);box-shadow:0 2px 8px rgba(22,163,74,.25)}
.chip-group{display:flex;flex-wrap:wrap;gap:7px}

/* ================= 用户列表 ================= */
.user-list{display:flex;flex-direction:column;gap:10px}
.user-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1.5px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;transition:.18s}
.user-row:hover{border-color:var(--pri);background:var(--pri-l);transform:translateX(2px)}
.user-row.cur{border-color:var(--pri);background:linear-gradient(135deg,var(--pri-l),#f5f3ff)}
.user-row .ur-info{flex:1;min-width:0}
.user-row .ur-info .n{font-weight:700;font-size:15px;display:flex;align-items:center;gap:7px}
.user-row .ur-info .n .tag{font-size:11px;background:var(--pri);color:#fff;padding:2px 7px;border-radius:11px;font-weight:600}
.user-row .ur-info .s{font-size:12px;color:var(--muted);margin-top:3px}
.user-row .ur-stat{font-size:11.5px;color:var(--sub);background:#f3f4f6;padding:4px 10px;border-radius:11px;font-weight:600;white-space:nowrap}
.user-row .ur-del{width:32px;height:32px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:.15s}
.user-row .ur-del:hover{border-color:var(--red);color:var(--red);background:var(--red-l)}
.user-row .ur-del svg{width:14px;height:14px}
.user-row .ur-set{width:32px;height:32px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--pri);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:.15s}
.user-row .ur-set:hover{border-color:var(--pri);color:#fff;background:var(--pri)}
.user-row .ur-set svg{width:15px;height:15px}
/* 切换用户下拉面板：扩大 + 下移左移 + 两行信息 */
.user-pick-panel{position:fixed;z-index:10050;width:720px;max-width:calc(100vw - 24px);background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 18px 50px rgba(15,23,42,.22);padding:16px;animation:upPop .18s ease;font-family:inherit}
.user-pick-panel .upp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.user-pick-panel .upp-head h3{font-size:16px;font-weight:800;margin:0;color:var(--ink);display:flex;align-items:center;gap:7px}
.user-pick-panel .upp-x{width:28px;height:28px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--muted);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:15px;line-height:1}
.user-pick-panel .upp-x:hover{background:#f3f4f6;color:var(--ink)}
.user-pick-panel .user-list{gap:10px;max-height:min(68vh,520px);overflow-y:auto;margin:0 -4px;padding:0 4px}
/* user-row 改上下两行：上=头像+昵称+设置，下=词库+掌握 */
.user-pick-panel .user-list .user-row{padding:12px 14px;border-radius:12px;gap:8px;align-items:stretch}
.user-pick-panel .user-list .user-row .ur-top{display:flex;align-items:center;gap:10px}
.user-pick-panel .user-list .user-row .avatar{width:42px;height:42px;font-size:16px;flex:0 0 auto}
.user-pick-panel .user-list .user-row .ur-info{flex:1 1 auto;min-width:0}
.user-pick-panel .user-list .user-row .ur-info .n{font-size:14.5px}
.user-pick-panel .user-list .user-row .ur-info .s{font-size:11.5px;margin-top:2px;color:var(--sub)}
.user-pick-panel .user-list .user-row .ur-bot{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11.5px;color:var(--sub)}
.user-pick-panel .user-list .user-row .ur-bot .ur-bank{flex:1 1 auto;min-width:0}
.user-pick-panel .user-list .user-row .ur-stat{flex:0 0 auto;font-size:11px;padding:3px 8px;border-radius:9px;font-weight:700;background:#fff4ec;color:#9a3412;border:1px solid #f0d3b8;white-space:nowrap}
.user-pick-panel .upp-foot{margin-top:10px;padding-top:10px;border-top:1px solid var(--line2);display:flex;gap:8px}
.user-pick-panel .upp-foot .btn{font-size:13px;padding:7px 12px;border-radius:10px}
.user-pick-mask{position:fixed;inset:0;z-index:10040;background:transparent}
@keyframes upPop{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}

/* ================= 设置分区 ================= */
.set-sec{margin-bottom:18px}
.set-sec h4{font-size:13.5px;color:var(--txt);font-weight:800;margin-bottom:10px;padding-bottom:7px;border-bottom:1px solid var(--line)}
.set-row{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:9px}
.set-num{display:flex;align-items:center;gap:11px;padding:11px 14px;background:var(--bg);border-radius:12px;border:1px solid var(--line)}
.set-num .lbl{font-size:13.5px;color:var(--sub);font-weight:600;flex:1;min-width:120px}
.set-num input[type=range]{flex:1;min-width:140px}
.set-num .v{min-width:48px;text-align:center;font-weight:800;font-size:18px;color:var(--pri);font-family:"Segoe UI",Roboto,sans-serif}
.set-info{display:flex;align-items:center;gap:14px;padding:14px;background:linear-gradient(135deg,#f8fafc,#f5f3ff);border-radius:14px;border:1px solid var(--line);margin-bottom:11px}
.set-info .avatar.lg{cursor:pointer}
.set-info .meta{flex:1;min-width:0}
.set-info .meta .n{font-size:17px;font-weight:800;margin-bottom:3px}
.set-info .meta .id{font-size:11.5px;color:var(--muted);font-family:"Segoe UI",Roboto,sans-serif}
.set-info .meta input{font-size:15px;font-weight:700;padding:7px 11px;border:1px solid var(--line);border-radius:9px;width:100%;outline:none;background:#fff}
.set-info .meta input:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
/* #42 自定义头像：设置面板内联画廊（参考英语平台） */
.set-av-block{background:var(--bg);border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:11px}
.set-av-gallery{display:flex;gap:9px;flex-wrap:wrap}
.set-av-gallery .btn{flex:1;min-width:120px}
.set-av .avatar.lg{cursor:default}
/* 换头像浮层（原内联样式，改为 class 便于设置面板统一放大） */
.av-modal{display:none;position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:200;align-items:center;justify-content:center;padding:18px}
.av-box{background:#fff;border-radius:14px;padding:18px;max-width:360px;width:100%}
.av-t{font-weight:700;margin-bottom:13px}
.av-prev{display:flex;justify-content:center;margin-bottom:13px}
.av-acts{display:flex;gap:9px;margin-bottom:13px;flex-wrap:wrap}
.set-tip{font-size:12.5px;color:var(--muted);margin-top:9px;line-height:1.6}
/* 仿 quiz 用户设置：词库选择子标题 + 分组面板 + 分组标题（带主色竖条） */
.set-sub{font-size:12.5px;font-weight:800;color:var(--pri);margin:15px 0 8px;display:flex;align-items:center;gap:6px}
.set-bank-panel{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px 13px;margin-bottom:4px}
.set-grp-title{font-size:12px;font-weight:700;color:var(--sub);margin:11px 0 6px;display:flex;align-items:center;gap:6px}
.set-grp-title:first-child{margin-top:0}
.set-grp-title::before{content:"";width:3px;height:12px;background:var(--pri);border-radius:2px}

/* ================= 设置面板 2 倍放大 =================
   仅作用于设置弹窗（.set2x），不影响其它 modal。
   尺寸对照（原 → 2×）：面板 420→840px、内边距 18→32px、标题 17→30px、
   分区标题 13→24px、信息条内边距 14→26px、名字输入框 15→27px、
   词库 chip 34→62px、按钮 44→76px、头像 lg 64→124px / xl 96→180px。 */
.modal.set2x{max-width:980px;padding:32px 34px;border-radius:26px}
.modal.set2x h3{font-size:30px;margin-bottom:18px;gap:14px}
.modal.set2x p{font-size:24px;margin:0 0 20px;line-height:1.6}
.modal.set2x .set-sec{margin-bottom:32px}
.modal.set2x .set-sec h4{font-size:24px;margin-bottom:16px}
.modal.set2x .set-row{gap:18px;margin-bottom:18px}
.modal.set2x .set-tip{font-size:21px;margin-top:16px;line-height:1.6}
.modal.set2x .set-info{padding:26px;gap:26px;border-radius:26px;margin-bottom:20px}
.modal.set2x .set-info .meta .n{font-size:30px;margin-bottom:6px}
.modal.set2x .set-info .meta .id{font-size:20px}
.modal.set2x .set-info .meta input{font-size:27px;font-weight:700;padding:12px 18px;border-width:2px;border-radius:16px}
.modal.set2x .set-info .avatar.lg{width:124px;height:124px;font-size:48px}
.modal.set2x .set-num{padding:20px 24px;gap:20px;border-radius:22px}
.modal.set2x .set-num .lbl{font-size:24px;min-width:190px}
.modal.set2x .set-num .v{font-size:34px;min-width:84px}
.modal.set2x .set-num input[type=range]{min-width:220px;height:16px}
.modal.set2x .chip-group{gap:14px;margin-top:8px}
.modal.set2x .set-sub{font-size:23px;margin:24px 0 13px}
.modal.set2x .set-bank-panel{padding:22px;border-radius:18px}
.modal.set2x .set-av-block{padding:26px;border-radius:26px}
.modal.set2x .set-av-gallery{gap:16px}
.modal.set2x .set-av-gallery .btn{min-width:0}
.modal.set2x .set-grp-title{font-size:21px;margin:18px 0 10px}
.modal.set2x .set-grp-title:first-child{margin-top:0}
.modal.set2x .set-grp-title::before{width:5px;height:20px}
.modal.set2x .chip{min-height:62px;padding:0 26px;border-radius:34px;font-size:24px;gap:10px}
.modal.set2x .chip-eye{margin-left:14px;font-size:20px;padding:4px 16px;border-radius:22px}
.modal.set2x .btn{min-height:76px;padding:0 26px;border-radius:20px;font-size:26px;gap:12px}
.modal.set2x .btn.sm{min-height:62px;padding:0 18px;font-size:22px;border-radius:16px}
.modal.set2x .modal-btns{gap:18px}
/* 换头像浮层同步放大 */
.modal.set2x .av-modal{padding:30px}
.modal.set2x .av-box{max-width:560px;padding:30px;border-radius:26px}
.modal.set2x .av-t{font-size:28px;margin-bottom:22px}
.modal.set2x .av-prev{margin-bottom:22px}
.modal.set2x .av-acts{gap:18px;margin-bottom:22px}
.modal.set2x .avatar.xl{width:180px;height:180px;font-size:70px}
/* 设置面板：用户设置(左) | 学习设置(右) 两栏，参考英语平台 .uni-so-box.wide。
   标题与底栏固定，仅主体滚动（内容很长时按钮不会被挤走）。 */
.modal.set2x{display:flex;flex-direction:column;overflow:hidden}
.modal.set2x>h3,.modal.set2x>.set-row{flex:0 0 auto}
.modal.set2x>.set-cols{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;padding-right:4px}
.set-cols{display:flex;gap:22px;align-items:stretch}
.set-col{min-width:0}
.set-col-left{flex:0 0 300px}
.set-col-right{flex:1;min-width:0;border-left:1.5px solid #e2e8f0;padding-left:22px;display:flex;flex-direction:column}
.set-col .set-sec:last-child{margin-bottom:0}
.modal.set2x .set-av-gallery{gap:14px;flex-wrap:wrap;align-items:center}
.modal.set2x .set-av-gallery .btn.set-av-ico,
.modal.set2x .set-av-gallery .btn.set-av-img{width:54px;height:54px;border-radius:50%;padding:0;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.modal.set2x .set-av-ico{color:var(--pri)}
.modal.set2x .set-av-ico svg{width:26px;height:26px}
.set-av-thumb{width:46px;height:46px;border-radius:50%;object-fit:cover;display:block;border:2px solid rgba(0,0,0,.08)}
@media(max-width:768px){
  .set-cols{flex-direction:column;gap:0}
  .set-col-left{flex:none}
  .set-col-right{border-left:none;padding-left:0}
}

@media(max-width:768px){
  /* 顶栏压缩 */
  .hero{padding:13px 14px 12px;border-radius:16px;margin-bottom:12px}
  .hero h1{font-size:19px;letter-spacing:3px;line-height:1.25;white-space:nowrap}
  .hero .sb{font-size:11px;margin-top:3px;line-height:1.3;letter-spacing:1px;font-style:italic;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .hero-l{gap:12px;min-width:0;flex:1}
  .hero-r{top:11px;right:11px;gap:6px}
  .ucard{padding:6px 12px 6px 6px;gap:10px;border-radius:14px;flex-shrink:0}
  .uc-info .s{display:none}
  .uc-info .n{font-size:14px}
  .uc-info .n.uc-role-hidden{max-width:0}
  .ucard .avatar{width:46px;height:46px;font-size:17px}
  .icon-btn{width:34px;height:34px;border-radius:10px}
  .icon-btn svg{width:16px;height:16px}
  .hero-title{gap:8px}
  .icon-btn.db-set svg{width:24px;height:24px}
  .hero-title h1{padding-right:30px}

  /* 今天的修行 三模块 */
  .today-h h2{font-size:15.5px}
  .today-h{margin-bottom:5px}
  .date-btn{font-size:11.5px;padding:5px 9px;gap:5px}
  .date-btn .cal-ico{width:13px;height:13px}
  .streak-badge{font-size:11.5px;padding:5px 9px}
  .today-actions{margin-bottom:6px;gap:6px}
  .today-actions .wave-btn,.today-actions .date-btn,.today-actions .streak-badge{min-height:30px;padding:5px 8px;font-size:11.5px}
  .todo-grid{gap:5px}
  .todo-item{padding:7px 7px;gap:6px;border-radius:9px}
  .ti-ic{width:28px;height:28px;border-radius:7px}
  .ti-t{font-size:12px}
  .ti-t .num{font-size:14.5px}
  .ti-s{font-size:10.5px;min-height:24px;line-height:1.25;margin-top:1px}

  /* 标签页 4 个 */
  .tabs{padding:3px;gap:3px;border-radius:11px;margin-bottom:7px}
  .tab{min-width:0;min-height:36px;font-size:12px;padding:0 4px;gap:3px;border-radius:7px}
  .tab svg{width:15px;height:15px}
  .tab .tx{font-size:12.5px}
  .tab .badge{font-size:10px;padding:0 5px;min-width:16px;line-height:14px}

  /* 词条卡片 */
  .wcard{padding:12px;border-radius:12px;margin-bottom:10px}
  .wc-word{font-size:22px}
  .wc-ph{font-size:13.5px}
  .wc-cn{font-size:15px;margin-top:5px}
  .wc-ex{margin-top:8px;padding:9px 11px;font-size:13.5px}
  .wc-ex .cn{font-size:12.5px}
  .wc-act{margin-top:9px;gap:6px}
  .wc-act .btn.sm{flex:1;min-width:0;font-size:12.5px;padding:0 6px}

  /* 区段头 */
  .sec-h{margin-bottom:6px;gap:7px}
  .sec-h h3{font-size:14px}
  .sec-h .desc{font-size:11.5px;line-height:1.45}

  /* 弹窗 */
  .modal .modal-box{padding:18px 16px;border-radius:14px;max-width:94vw;max-height:90vh;overflow:auto}
  .modal h3{font-size:15.5px}

  /* 设置区 */
  .set-sec{margin-bottom:14px}
  .set-sec h4{font-size:12px;margin-bottom:7px}
  .set-row{gap:7px;margin-bottom:7px}
  .set-num{padding:10px 12px;gap:9px;border-radius:11px}
  .set-num .lbl{font-size:12.5px;min-width:0}
  .set-num .v{font-size:16px;min-width:42px}
  .set-info{padding:12px;border-radius:13px;margin-bottom:10px}
  .set-sub{font-size:12px;margin:12px 0 7px}
  .set-bank-panel{padding:11px 12px}
  .set-grp-title{font-size:11.5px;margin:9px 0 5px}

  /* 设置面板 2× 在小屏降档（约 1.5×），避免文字与 chip 溢出屏幕 */
  .modal.set2x{max-width:96vw;padding:20px 18px;border-radius:20px}
  .modal.set2x h3{font-size:22px;margin-bottom:12px}
  .modal.set2x p{font-size:17px;margin:0 0 14px}
  .modal.set2x .set-sec{margin-bottom:20px}
  .modal.set2x .set-sec h4{font-size:17px;margin-bottom:11px}
  .modal.set2x .set-row{gap:11px;margin-bottom:11px}
  .modal.set2x .set-tip{font-size:15px;margin-top:11px}
  .modal.set2x .set-info{padding:16px;gap:16px;border-radius:18px}
  .modal.set2x .set-info .meta .n{font-size:21px}
  .modal.set2x .set-info .meta .id{font-size:14px}
  .modal.set2x .set-info .meta input{font-size:19px;padding:9px 13px;border-radius:12px}
  .modal.set2x .set-info .avatar.lg{width:84px;height:84px;font-size:33px}
  .modal.set2x .set-num{padding:14px 16px;gap:13px;border-radius:16px}
  .modal.set2x .set-num .lbl{font-size:17px;min-width:0}
  .modal.set2x .set-num .v{font-size:24px;min-width:56px}
  .modal.set2x .set-num input[type=range]{min-width:0;height:10px}
  .modal.set2x .chip-group{gap:9px}
  .modal.set2x .set-sub{font-size:16px;margin:16px 0 10px}
  .modal.set2x .set-bank-panel{padding:15px;border-radius:15px}
  .modal.set2x .set-grp-title{font-size:15px;margin:13px 0 8px}
  .modal.set2x .set-grp-title::before{width:4px;height:14px}
  .modal.set2x .chip{min-height:44px;padding:0 16px;border-radius:22px;font-size:17px}
  .modal.set2x .chip-eye{margin-left:9px;font-size:14px;padding:2px 10px;border-radius:15px}
  .modal.set2x .btn{min-height:54px;padding:0 17px;border-radius:14px;font-size:19px;gap:8px}
  .modal.set2x .btn.sm{min-height:46px;padding:0 13px;font-size:16px;border-radius:12px}
  .modal.set2x .modal-btns{gap:11px}
  .modal.set2x .av-box{max-width:94vw;padding:20px}
  .modal.set2x .av-t{font-size:20px;margin-bottom:15px}
  .modal.set2x .avatar.xl{width:124px;height:124px;font-size:48px}

  /* 词库芯片 */
  .chip-group{gap:5px}
  .chip{font-size:12.5px;min-height:30px;padding:0 11px}
  .chip-eye{margin-left:5px;padding:1px 6px;font-size:10.5px}

  /* 复习方式卡片 */
  .mode-grid{grid-template-columns:1fr;gap:7px}
  .mode-card{padding:8px 10px;border-radius:11px;gap:9px}
  .mode-card h4{font-size:13.5px;margin-bottom:1px}
  .mode-card p{font-size:11.5px;line-height:1.35}
  .mode-card .mi{width:30px;height:30px;border-radius:8px;margin-bottom:0}
  .mode-card .mi svg{width:16px;height:16px}

  /* 闯关进度条 */
  .quiz-bar{gap:8px;margin-bottom:6px}
  .pbar{height:6px;border-radius:18px}
  .qcount{font-size:12px}

  /* 卡片 padding 移动端压紧 */
  .card{padding:11px 11px 12px;margin-bottom:9px;border-radius:13px}

  /* 列表/统计 */
  .filter-row{gap:6px;margin-bottom:10px}
  .inp,select.inp{font-size:14.5px;min-height:40px;border-radius:10px;padding:0 11px}
  .wlist{grid-template-columns:1fr;gap:8px}
  .wrow{padding:10px 11px;border-radius:11px}
  .wrow-h b{font-size:16px}
  .wrow-rate{gap:5px;margin-top:7px}
  .stat-grid{grid-template-columns:repeat(2,1fr);gap:9px}
  .res-list{gap:6px}
  .res-row{padding:8px 10px;font-size:13.5px;border-radius:10px}

  /* 头像弹窗 */
  .pwd-box input{font-size:14px;padding:10px 12px;letter-spacing:1.5px}
  .pwd-err{font-size:12px}
}

/* 超窄屏（如 iPhone SE 320-360px）：仅图标 + 角标 */
@media(max-width:380px){
  .tab .tx{display:none}
  .tab svg{width:17px;height:17px}
  .tab .badge{font-size:10.5px;padding:0 5px;min-width:18px;line-height:16px}
  .hero h1{font-size:16.5px;letter-spacing:2px}
  .hero .sb{font-size:10.5px;letter-spacing:.5px}
  .uc-info .n{font-size:12.5px}
  .ucard .avatar{width:42px;height:42px;font-size:16px}
  .ucard{padding:5px 10px 5px 5px;gap:8px}
  .today-h h2{font-size:14.5px}
  /* 超窄屏：三按钮 2x2 等宽对齐 */
  .today-actions{flex-wrap:wrap;gap:6px}
  .today-actions .wave-btn,
  .today-actions .date-btn,
  .today-actions .streak-badge{flex:1 0 calc(50% - 3px);font-size:11.5px;padding:6px 8px;min-height:30px}
  .today-actions .date-btn .cal-ico{width:13px;height:13px}
  .today-actions .wave-btn svg{width:13px;height:13px}
  .todo-grid{gap:5px}
  .ti-t{font-size:12px}
  .ti-t .num{font-size:14px}
  .ti-s{font-size:10.5px;min-height:26px}
}
/* ===== 手机竖屏重排（≤560px：顶部双行、今日任务单列、底部条居中） ===== */
@media(max-width:560px){
  /* 顶部 Hero 单行布局：标题与用户卡同处第1行（与 561-720px 一致，
     避免标题 flex:1 1 100% 独占整行被挤到第2行） */
  .hero-row{flex-wrap:nowrap;min-height:0;row-gap:0}
  .ucard{order:0;margin:0}
  .hero-r{order:3;display:none}
  .hero-title{order:0;flex:1;min-width:0;justify-content:center;padding-top:0}
  .hero-title h1{padding-right:0;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px}
  .icon-btn.db-set svg{width:22px;height:22px}

  /* 今日任务：三卡改单列横排（图标左、文字右），杜绝文字竖排 */
  .todo-grid{grid-template-columns:1fr;gap:7px}
  .todo-item{align-items:center;padding:9px 12px;border-radius:11px;gap:10px}
  .ti-ic{width:34px;height:34px;border-radius:10px}
  .ti-t{font-size:14px}
  .ti-t .num{font-size:17px}
  .ti-s{font-size:12px;margin-top:1px;min-height:0;line-height:1.3}

  /* 底部版本条：左右留边并居中，隐藏日期避免左溢出屏幕；
     允许换行 + 溢出裁剪，避免「服务端流水」单行蓝字过长把固定条撑爆盖住内容 */
  .buildbar{left:14px;right:14px;justify-content:center;transform:none;flex-wrap:wrap;overflow:hidden;max-width:calc(100vw - 28px)}
  .buildbar .bt{display:none}
  .buildbar #srvline{flex:1 1 100%;min-width:0;margin:2px 0 0;text-align:center}

  /* 今日新词标题行：时光机按钮保留在首行右侧，说明文字换到下一行 */
  #learnDesc{flex:1 0 100%;order:2;font-size:11.5px;text-align:left}
  .tm-btn{order:1;margin-left:auto}

  /* 中英连线：中文释义最多 2 行截断，避免长释义 3 行换行与左侧英文错位 */
  .mitem.cn{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;align-items:flex-start}

  /* 底部版本条按钮：窄屏压缩内边距，确保「更新日志」「系统日志」同排不溢出 */
  .buildbar{gap:6px;padding:6px 10px}
  .buildbar .blog-btn{padding:5px 9px;font-size:11.5px}
}
/* ===== 手机端弹窗收紧（更新日志 / 系统日志 / 错题本等宽弹窗） ===== */
@media(max-width:640px){
  .modal{max-width:96vw;padding:14px 13px;border-radius:14px}
  .modal.wide{max-width:96vw}
  .bl-title{font-size:15px;margin:2px 2px 8px;display:flex;align-items:center;justify-content:space-between;gap:10px;position:sticky;top:0;background:#fff;z-index:2}
  .bl-title .modal-x{flex:0 0 auto;width:30px;height:30px;border:0;border-radius:9px;background:var(--pri-l);color:var(--pri);font-size:17px;line-height:1;cursor:pointer}
  .buildlog{font-size:12.5px}
  .bl-item{padding:8px 1px}
  .bl-n{font-size:12.5px;line-height:1.55}
  .bl-h{margin-bottom:4px}
  /* 系统日志查看器：标签行换行 + 内容区限高，避免整屏被内容盖住 */
  #logViewContent{max-height:64vh}
}
/* ===== 底部版本信息（右下角悬浮） ===== */
.buildbar{position:fixed;left:50%;transform:translateX(-50%);right:auto;bottom:calc(14px + env(safe-area-inset-bottom));z-index:60;display:flex;align-items:center;gap:9px;
  padding:6px 12px;background:rgba(251,246,234,.95);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  border:1px solid var(--line);border-radius:999px;font-size:12.5px;color:var(--sub);box-shadow:0 6px 20px rgba(80,55,20,.14)}
.buildbar .bv{font-weight:800;color:var(--pri);background:var(--pri-l);padding:3px 9px;border-radius:999px;white-space:nowrap;letter-spacing:.3px}
.buildbar .bt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--sub)}
.buildbar .blog-btn{flex:0 0 auto;font-weight:700;color:#fff;background:var(--pri);border:0;border-radius:999px;padding:5px 13px;min-height:0;font-size:12px;line-height:1.4;cursor:pointer;transition:.15s}
.buildbar .blog-btn:active{transform:scale(.96)}
.buildbar #srvline{order:5}                 /* 桌面：服务端流水排在按钮之后 */
.praise-streak{display:none}                 /* 手机端才在「今日任务完成」内显示连续修行天数 */
.bl-title{font-size:16px;font-weight:800;color:var(--text);margin:2px 2px 10px}
.buildlog{display:flex;flex-direction:column;gap:0;margin:0}
.bl-item{padding:11px 2px;border-bottom:1px dashed var(--line)}
.bl-item:last-child{border-bottom:none}
.bl-h{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.bl-v{font-weight:800;color:var(--pri);background:var(--pri-l);padding:2px 9px;border-radius:999px;font-size:12px;white-space:nowrap}
.bl-d{font-size:11.5px;color:var(--muted);white-space:nowrap}
.bl-n{font-size:13.5px;color:var(--text);line-height:1.6}

/* ===== 竖屏大屏适配（1440×2560 27寸 · 观看距离约70cm）：整体放大（今日新词保持 3 列） ===== */
@media (orientation:portrait) and (min-width:769px){
  body{zoom:1.18}
}

/* ===== 2K 竖屏大屏适配（1440×2560）：顶部行/卡片/字号整体放大，内容下移 ===== */
@media (orientation:portrait) and (min-height:2000px){
  body{padding:0; zoom:1}
  .wrap{max-width:1380px;height:100dvh;max-height:100dvh;box-sizing:border-box;overflow-y:auto;padding:46px 18px 40px}
  .hero{padding:34px 28px 30px; margin-bottom:30px; border-radius:22px}
  .hero-row{gap:18px; min-height:64px}
  .hero h1, .hero-title h1{font-size:46px}
  .home-btn{width:70px;height:63px;border-radius:999px}
  .home-btn svg{width:45px;height:45px}
  .ucard{padding:10px 20px 10px 10px;gap:14px;border-radius:18px}
  .ucard .avatar{width:50px;height:50px;font-size:22px}
  .uc-info .n{font-size:32px}
  .uc-info .s{font-size:20px}
  .icon-btn{width:68px;height:68px}
  .icon-btn.db-set svg{width:44px;height:44px}
  .tabs{padding:8px;gap:8px;border-radius:16px;margin-bottom:16px}
  .tab{min-height:72px;font-size:24px;gap:8px;border-radius:12px}
  .tab svg{width:32px;height:32px}
  .tab .tx{font-size:24px}
  .card{padding:30px 34px;border-radius:22px}
  .today-h h2, h2{font-size:34px}
  .date-btn{font-size:20px;padding:10px 18px}
  .streak-badge{font-size:19px;padding:10px 16px}
  .wave-btn{font-size:19px;padding:11px 20px}
  .sec-h h3, h3{font-size:30px}
  #newWords{gap:20px}
  .wcard{padding:20px 22px;border-radius:20px}
  .wc-word{font-size:34px}
  .wc-ph{font-size:20px}
  .wc-cn{font-size:24px;margin-top:7px}
  .wc-ex{font-size:21px;padding:12px 15px;border-radius:0 12px 12px 0}
  .wc-ex .cn{font-size:18px}
  .wc-act .btn.sm{font-size:20px;padding:11px 18px}
  .spk{width:56px;height:56px;border-radius:14px}
  /* ===== 复习闯关首页：两行居中 + 统一白底 + 紧凑卡片（2K 竖屏也能排下） ===== */
  .mode-grid{gap:16px}
  .mode-row{gap:16px}
  .mode-row .mode-card{flex:1 1 300px;max-width:460px}
  .mode-card{padding:18px 16px;border-radius:16px;min-height:0}
  .mode-card .mi{width:46px;height:46px;border-radius:12px;margin-bottom:12px}
  .mode-card .mi svg{width:26px;height:26px}
  .mode-card.row{gap:12px}
  .mode-card h4{font-size:21px;margin-bottom:6px;-webkit-line-clamp:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mode-card p{font-size:14px;line-height:1.4}
  .mode-card.row .mi{margin-bottom:0}
  .mode-card.row p{font-size:14px}
  /* #36 单词补天入口卡片在 2K 下与另外五张同源（ID 选择器权重盖过 .mode-card h4，需显式跟随） */
  #fillLaunchCard h4{font-size:21px}
  #fillLaunchCard p{font-size:14px}
  #fillLaunchCard .mi{width:46px;height:46px;border-radius:12px}
  #fillLaunchCard .mi svg{width:26px;height:26px}
  /* ===== 中英连线：整体放大，占满宽度 ===== */
  .match-wrap{max-width:1300px}
  .match-cols{gap:110px}
  .mcol{gap:22px}
  .mcol.left{padding-top:120px}
  .mitem{max-width:none;min-height:110px;border-radius:20px;padding:14px 24px;font-size:32px;border-width:3px}
  .mitem.en{font-size:34px}
  .mitem.cn{font-size:31px}
  /* ===== 听音选意：整体放大，至少占屏幕 2/3 ===== */
  .speed-ctl{max-width:1180px;gap:26px;margin:8px auto 0}
  .sc-label{font-size:24px}
  .speed-ctl input[type=range]{min-width:380px;height:14px}
  .sc-val{font-size:30px;min-width:70px}
  .listen-box{max-width:1180px;gap:34px}
  .big-spk{width:150px;height:150px;border-radius:50%}
  .big-spk svg{width:76px;height:76px}
  .listen-side{width:170px}
  .play-hint{font-size:20px;min-height:48px}
  .opts{grid-template-columns:1fr 1fr;gap:22px}
  .opt{min-height:120px;max-height:none;border-radius:20px;padding:16px 24px;font-size:30px;gap:18px;border-width:3px}
  .opt .k{width:54px;height:54px;border-radius:14px;font-size:24px}
  /* 听音选意 上一题/下一题：2K 放大（3倍卡片按钮） */
  .q-nav{gap:30px;margin-top:26px}
  .q-idx{font-size:26px;min-width:190px}
  .nav-btn{font-size:42px;padding:22px 46px;border-radius:26px;gap:14px;border-width:3px}
  .nav-btn .nav-ico{font-size:56px}
  /* 听音选意 答题揭示卡：2K 放大并居中（仅 #revealZone 内，不影响单词补天） */
  #revealZone .reveal{max-width:980px;margin:20px auto 0;padding:24px 30px;border-radius:24px;border-width:2px}
  #revealZone .reveal .r-row1{gap:16px}
  #revealZone .reveal .r-row1 .wc-word{font-size:40px}
  #revealZone .reveal .r-row1 .wc-ph{font-size:24px}
  #revealZone .reveal .r-row1 .pos{font-size:20px;padding:6px 16px;border-radius:10px}
  #revealZone .reveal .r-row1 .spk-mini{width:56px;height:56px;border-radius:12px}
  #revealZone .reveal .r-row1 .spk-mini svg{width:28px;height:28px}
  #revealZone .reveal .r-row1 .r-stat{font-size:24px;padding:8px 20px;border-radius:18px}
  #revealZone .reveal .r-cn{font-size:32px;margin-top:10px}
  #revealZone .reveal .r-ex{margin-top:12px;padding:14px 18px;font-size:26px;border-width:4px}
  #revealZone .reveal .r-ex .cn{font-size:22px;margin-top:4px}
  #revealZone .reveal .r-act{gap:16px;margin-top:12px}
  #revealZone .reveal .r-act .r-meta{font-size:20px}
  #revealZone .reveal .r-act .btn{font-size:24px;min-height:56px;padding:0 30px;border-radius:16px}
  /* ===== 今日新词标题行：说明放大 + 右侧按钮增大 ===== */
  .sec-h .desc{font-size:23px;margin-top:0}
  .tm-btn{font-size:20px;padding:9px 16px;border-radius:18px}
  /* 今日新词卡片新排版（wl1 单词行 / wl2 中文+词库行）2K 放大 */
  #newWords .wcard{padding:14px 14px 10px;border-radius:18px}
  #newWords .wc-head .wl1 .wc-word{font-size:36px}
  #newWords .wc-head .wl1 .wc-ph{font-size:24px}
  #newWords .wc-head .wl2{gap:8px}
  #newWords .wc-head .wl2 .wl2-cn{font-size:24px;max-height:2.5em;line-height:1.3}
  #newWords .wc-head .wl2 .pos{font-size:20px;padding:5px 12px;border-radius:8px}
  #newWords .wc-head .wl2 .grade-tag{font-size:20px;padding:4px 12px;border-radius:16px}
  #newWords .wc-head .wl2 .stage-tag{font-size:16px;padding:4px 12px}
  #newWords .spk{width:50px;height:50px;border-radius:14px;margin-top:2px}
  #newWords .spk svg{width:24px;height:24px}
  #newWords .wc-act .btn{font-size:18px;padding:8px 14px;border-radius:12px;min-height:44px}
  #newWords .ex-type{font-size:18px}
  #newWords .wc-ex{font-size:20px;padding:10px 14px;border-radius:0 13px 13px 0;margin-top:6px}
  #newWords .wc-ex .cn{font-size:17px}
  #newWords .wc-ex.ex-big .en{font-size:23px;line-height:1.35}
  #newWords .wc-ex.ex-big .cn{font-size:20px;line-height:1.4}
  /* 全部标为已学按钮 2 倍 */
  #learnFoot .btn.pri.blk{font-size:24px;padding:16px 36px;border-radius:18px;min-height:60px}
  /* ===== 「再来一波」卡片：与首轮同尺寸放大 ===== */
  .wcard.wave{padding:20px 22px;border-radius:20px}
  .wcard.wave .wc-word{font-size:34px}
  .wcard.wave .wc-ph{font-size:20px}
  .wcard.wave .wc-cn{font-size:24px;margin-top:7px}
  .wcard.wave .wc-ex{font-size:21px;padding:12px 15px;border-radius:0 12px 12px 0;margin-top:7px}
  .wcard.wave .wc-ex .cn{font-size:18px}
  .wcard.wave .btn.sm{font-size:20px;padding:11px 18px}
  /* ===== 绿色已学卡：文字加大一号 + 紧凑排版 ===== */
  .wcard.learned .wc-word{font-size:38px}
  .wcard.learned .wc-ph{font-size:21px}
  .wcard.learned .wc-cn{font-size:26px;margin-top:8px}
  .wcard.learned .stage-tag{font-size:17px;padding:4px 12px}
  .wcard.learned .wc-ex{font-size:22px;padding:13px 16px}
  .wcard.learned .wc-ex .cn{font-size:19px}
  /* 今日短语栏 + 各词库进度（2K 放大） */
  .phrase-sep{font-size:20px;margin:22px 0 10px}
  .phrase-sep span{padding:3px 12px;font-size:20px}
  /* 「今日新词 · 首轮」标题与「今日短语」标题在 2K 下也保持同字号（req：首轮放大至与短语一致） */
  .wave-sep{font-size:20px;margin:8px 0 6px}
  .wave-sep span{padding:3px 12px;font-size:20px}
  .phrase-grid{gap:18px}
  .bank-tbl{font-size:20px}
  .bank-tbl th{font-size:18px}
  .bank-tbl td.bt-name{max-width:360px}
  /* 2K 竖屏：学习概览与各词库进度、错题本放大 */
  .stat .v{font-size:40px} .stat .l{font-size:20px} .stat{padding:20px 16px}
  .bank-sum{font-size:22px;padding:16px 18px}
  .bank-chart{gap:24px} .bc-name{font-size:26px} .bc-meta{font-size:22px} .bc-track{height:28px} .bc-foot{font-size:20px}
  .err-grid{grid-template-columns:repeat(4,1fr);gap:18px} .err-cell .ec-w{font-size:34px} .err-cell .ec-p{font-size:24px} .err-cell .ec-c{font-size:24px} .err-cell .ec-badge{font-size:20px} .err-go{font-size:30px;min-height:80px;padding:18px 36px}
  /* ===== 设置面板 2K 竖屏：加宽 + 左右两栏平衡（版式参考英语平台 .uni-so-box.wide 的 2K 规则）=====
     宽度 980px → min(1440px,94vw)；左栏固定 380px、右栏独占剩余宽度；
     取消整体 zoom:.8，改为逐项 ≈80% 的显式尺寸；词库卡片明显缩小，整页更短更协调。 */
  /* 用 .modal.wide.set2x 三重选择器：2K 块末尾还有一条 .modal.wide{max-width:840px}（同权重、更靠后），
     会把设置弹窗压回 840px（这正是「页面太长」的根因）。提高权重后才能真正加宽。 */
  .modal.wide.set2x{width:min(1440px,94vw);max-width:min(1440px,94vw);max-height:92vh;padding:30px 34px;border-radius:30px;zoom:1}
  .modal.set2x h3{font-size:27px;margin-bottom:18px;gap:12px}
  .modal.set2x>.set-cols{gap:34px}
  .modal.set2x .set-col-left{flex:0 0 380px}
  .modal.set2x .set-col-right{padding-left:34px}
  .modal.set2x .set-sec{margin-bottom:20px}
  .modal.set2x .set-sec h4{font-size:20px;margin-bottom:13px;padding-bottom:9px}
  /* 左栏：头像 + 昵称 纵向居中（与英语平台「当前头像在上方、昵称在下」一致） */
  .modal.set2x .set-info{flex-direction:column;align-items:center;gap:18px;padding:22px;text-align:center}
  .modal.set2x .set-info .meta{width:100%;flex:none}
  .modal.set2x .set-info .meta .id{text-align:center;font-size:16px}
  .modal.set2x .set-info .avatar.lg{width:150px;height:150px;font-size:58px}
  .modal.set2x .set-info .meta input{width:100%;text-align:center;font-size:22px;padding:11px 16px;border-radius:15px}
  .modal.set2x .set-av-block{padding:20px;border-radius:22px}
  .modal.set2x .set-sub{font-size:19px;margin:0 0 14px;text-align:center}
  .modal.set2x .set-av-gallery{gap:18px;justify-content:center}
  .modal.set2x .set-av-gallery .btn.set-av-ico,
  .modal.set2x .set-av-gallery .btn.set-av-img{width:88px;height:88px}
  .modal.set2x .set-av-ico svg{width:34px;height:34px}
  .modal.set2x .set-av-thumb{width:76px;height:76px}
  /* 右栏：词库卡片缩小（62px→46px 高、24px→19px 字号），铺得更宽更矮 */
  .modal.set2x .set-bank-panel{padding:16px 18px;border-radius:16px}
  .modal.set2x .chip-group{gap:10px}
  .modal.set2x .set-grp-title{font-size:18px;margin:13px 0 8px}
  .modal.set2x .set-grp-title::before{width:4px;height:17px}
  .modal.set2x .chip{min-height:46px;padding:0 17px;border-radius:24px;font-size:19px;gap:8px}
  .modal.set2x .chip-eye{margin-left:9px;font-size:15px;padding:3px 11px;border-radius:14px}
  /* 学习设置滑块收紧 */
  .modal.set2x .set-num{padding:15px 18px;gap:16px;border-radius:17px}
  .modal.set2x .set-num .lbl{font-size:20px;min-width:150px}
  .modal.set2x .set-num .v{font-size:27px;min-width:64px}
  .modal.set2x .set-num input[type=range]{min-width:170px;height:13px}
  /* 按钮与底栏 */
  .modal.set2x .set-row{gap:14px;margin-bottom:14px}
  .modal.set2x .btn{min-height:60px;padding:0 20px;border-radius:16px;font-size:21px;gap:10px}
  .modal.set2x .btn.sm{min-height:50px;padding:0 15px;font-size:18px;border-radius:13px}
  .ex-toggle{font-size:19px;padding:6px 15px;border-radius:10px}
  /* 待复习队列 2K 放大 */
  .rlist{gap:10px}
  .rlist .wrow{min-height:130px;padding:14px 12px;border-radius:14px}
  .rlist .wrow-h b{font-size:22px}
  .rlist .wrow-h .wc-ph{font-size:16px}
  .rlist .wrow-cn .wrow-cn-txt{font-size:18px}
  .rlist .wrow-cn .pos{font-size:15px;padding:3px 8px;border-radius:6px}
  /* 待复习队列发音按钮 2K 放大 */
  .rlist .wrow-spk{width:46px;height:46px;border-radius:12px;top:9px;right:9px}
  .rlist .wrow-spk svg{width:24px;height:24px}
  /* ===== 复习闯关·待巩固底部按钮（中英连线/听音选意）：2K 放大（字体+2、高度2倍） ===== */
  #consolidateFoot{gap:16px}
  #consolidateFoot .rev-foot-btn{font-size:22px;min-height:88px;padding:0 26px;border-radius:16px}
  #consolidateFoot > div{font-size:16px}
  /* ===== 单词补天：题目中文/音标/单词字号放大 + 操作按钮约为 2 倍 ===== */
  .fill-head{gap:16px;margin:8px 0 4px}
  .fill-cn{font-size:46px;margin:0;line-height:1.4}
  .fill-bank{font-size:22px;padding:3px 16px}
  .fill-err-tag{font-size:20px;padding:3px 14px}
  .fill-spk{width:64px;height:64px;border-radius:18px}
  .fill-spk svg{width:32px;height:32px}
  .fill-sep{margin:14px 0 20px}
  .fill-sep::before,.fill-sep::after{height:3px}
  .fill-sep span{font-size:16px}
  .fill-pos{font-size:26px;margin-bottom:20px}
  .fill-ph{font-size:28px}
  .fill-word{gap:12px;margin:10px 0 22px}
  /* 2K 竖屏：单词补天一行一个填空（按诉求恢复单列） */
  #fillPage{grid-template-columns:1fr;gap:20px}
  .fw-ch,.fw-in{width:92px;height:112px;border-radius:20px;font-size:52px;border-width:3px}
  /* #40 短语词库在 2K 下同步缩小一号 */
  .fill-word.phrase .fw-ch,.fill-word.phrase .fw-in{font-size:42px}
  .fw-sp{width:30px;height:112px}
  .fill-pbar{height:18px;border-radius:999px}
  #fillCheckBtn{font-size:32px;padding:18px 44px;border-radius:22px;min-width:220px}
  #fillCheckBtn:disabled{opacity:.5}   /* 统一提交后置灰，避免重复提交 */
  #fillSpeakAll{font-size:22px;padding:9px 18px;border-radius:14px}
  .fill-lsn{font-size:22px;padding:14px 26px;border-radius:18px}
  .fill-bar{font-size:24px;min-height:64px}
  /* 我的书房·语法大全 2K 放大 */
  .subtab{min-height:58px;font-size:22px;border-radius:12px}
  .gitem{border-radius:18px;padding:20px 22px}
  .gitem-s{font-size:26px}
  .gitem-form,.gitem-zh{font-size:18px;padding:6px 16px;line-height:1.45}
  .gitem-ex{margin-top:14px;padding-top:14px;gap:9px}
  .gex{font-size:22px;line-height:1.5}
}

/* ===== 单词补天设置：基础样式（非 2K 与 2K 共用） ===== */
/* 单词补天设置：两个数轴同行 + 其他文字/按钮 1.5 倍 */
.fill-axes-row{display:flex;gap:18px;margin-top:14px;align-items:flex-start}
.fill-axes-cell{flex:1;min-width:0}
.fill-axes-lbl{font-size:13px;color:var(--muted);font-weight:600;margin-bottom:6px}
.fill-axes-cell .fill-per-row{margin:0 0 2px}
.fill-axes-cell .fill-stepper{margin:0}
/* 单词补天设置：其他文字/按钮统一放大 1.5 倍（数轴本身已同行缩短，不在此列） */
.fill-set-page > p,
.fill-set-page .fs-desc{font-size:19.5px;line-height:1.6}
.fill-set-page h3{font-size:24px}
.fill-set-page .fs-grp-title{font-size:18px;font-weight:600;color:var(--muted);margin:14px 0 7px}
.fill-set-page .chip{font-size:19.5px;min-height:46px;padding:0 18px;border-radius:23px}
.fill-set-page .fs-err{font-size:19.5px;padding:13px 15px;border-radius:14px}
.fill-set-page .fs-err .btn{font-size:19.5px;padding:11px 22px}
.fill-set-page .modal-btns .btn{font-size:19.5px;padding:12px 24px}
.fill-set-page .fill-stepper-btn{width:58px;height:58px;font-size:30px;border-radius:18px}
.fill-val-chip{display:inline-flex;align-items:center;justify-content:center;min-width:62px;height:42px;padding:0 16px;border-radius:21px;background:#fff4ec;border:2px solid #f0d6c2;color:#9a3412;font-size:19px;font-weight:800;flex:0 0 auto;box-shadow:0 1px 3px rgba(217,72,15,.08)}
.fill-set-page .fill-stepper{justify-content:center;gap:14px}
.fill-set-page .fs-tip{font-size:17px;line-height:1.6;margin-top:10px}
@media (min-width:2000px){
  .fill-axes-row{gap:24px}
  .fill-axes-lbl{font-size:15px;margin-bottom:8px}
}
@media (max-width:720px){
  .fill-axes-row{flex-direction:column;gap:10px}
}
.fill-per-row{display:flex;align-items:center;gap:14px;margin:8px 0 4px}
.fill-per-label{font-size:18px;font-weight:700;color:#9a3412;flex:0 0 auto}
.fill-per-track{position:relative;flex:1;height:64px;display:flex;align-items:center;cursor:pointer;touch-action:none}
.fill-per-line{position:absolute;left:0;right:0;top:50%;height:8px;transform:translateY(-50%);background:#f1e9df;border-radius:999px}
.fill-per-fill{position:absolute;left:0;top:50%;transform:translateY(-50%);height:8px;background:linear-gradient(90deg,#d9480f,#ea580c);border-radius:999px;width:0;pointer-events:none}
.fill-per-nums{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:64px;pointer-events:none}
.fill-per-num{position:absolute;top:50%;transform:translate(-50%,-50%);width:42px;height:42px;border-radius:12px;background:#fff;border:2.5px solid #e2e8f0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#6b7280;pointer-events:auto;cursor:pointer;transition:.12s;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.fill-per-num:hover{border-color:#ea580c;color:#9a3412;transform:translate(-50%,-50%) scale(1.06)}
.fill-per-num.active{background:#d9480f;border-color:#c2410c;color:#fff;box-shadow:0 4px 12px rgba(217,72,15,.35);transform:translate(-50%,-50%) scale(1.08)}
.fill-per-thumb{display:none}
/* 非 2K：紧凑 −/+ 步进器 */
.fill-stepper{display:flex;align-items:center;gap:10px;justify-content:center;margin:4px 0 2px}
.fill-stepper-btn{width:46px;height:46px;border-radius:12px;background:#fff7ef;border:2.5px solid #d9b08c;color:#9a3412;font-size:24px;font-weight:800;cursor:pointer;line-height:1;transition:.12s;display:inline-flex;align-items:center;justify-content:center}
.fill-stepper-btn:hover{background:#d9480f;color:#fff;border-color:#c2410c}
/* 旧的 .fill-stepper-val（大号数字）已弃用，改用 .fill-val-chip 干净显示当前值 */
/* 单词补天设置按钮（顶栏） */
.fill-set-btn{font-size:16px;font-weight:800;padding:5px 12px}
/* 单词补天顶栏「单词补天设置」「退出」：缩至 80% 大小，置于标题同行右侧 */
.fill-top-actions{display:flex;gap:8px;align-items:center}
.fill-top-actions .btn{font-size:20px;font-weight:800;padding:7px 16px;border-radius:10px;min-height:48px}
/* 统一提交答案：钩子图标放大至与文字同高 */
#fillCheckBtn svg{width:1.2em;height:1.2em;flex-shrink:0;vertical-align:-0.18em}
/* 2K 放大版：只在 2K 媒体里把上述基础样式放大 */
@media (orientation:portrait) and (min-height:2000px){
  .fill-per-row{gap:18px;margin:10px 0 4px}
  .fill-per-label{font-size:22px}
  .fill-per-track{height:80px}
  .fill-per-num{width:56px;height:56px;border-radius:16px;font-size:26px;border-width:3px}
  .fill-stepper-btn{width:58px;height:58px;font-size:28px;border-radius:16px}
  .fill-val-chip{min-width:88px;height:54px;border-radius:27px;font-size:25px;border-width:3px}
  .fill-set-btn{font-size:20px;padding:9px 18px}
  /* #39 单词补天顶栏按钮 2K（缩至 80% 同比例） */
  .fill-top-actions .btn{font-size:34px;padding:13px 27px;border-radius:16px;min-height:77px}
  /* 切换用户弹窗 2 倍放大 */
  .modal.wide{max-width:840px}
  .user-row{padding:14px 16px;border-radius:16px;gap:14px}
  .user-row .avatar{width:60px;height:60px;border-radius:30px;font-size:28px}
  .user-row .ur-info .n{font-size:24px}
  .user-row .ur-info .s{font-size:18px;margin-top:4px}
  .user-row .ur-stat{font-size:16px;padding:6px 12px}
  .user-row .ur-set svg{width:28px;height:28px}
  .user-list{gap:10px}
  /* 切换用户下拉面板 2K 放大 */
  .user-pick-panel{width:560px;padding:20px;border-radius:22px}
  .user-pick-panel .upp-head h3{font-size:24px}
  .user-pick-panel .upp-x{width:40px;height:40px;font-size:22px;border-radius:11px}
  .user-pick-panel .user-list .user-row{padding:14px 16px;gap:14px;border-radius:16px}
  .user-pick-panel .user-list .user-row .avatar{width:60px;height:60px;font-size:26px}
  .user-pick-panel .user-list .user-row .ur-info .n{font-size:21px}
  .user-pick-panel .user-list .user-row .ur-info .s{font-size:17px;margin-top:4px}
  .user-pick-panel .user-list .user-row .ur-stat{font-size:16px;padding:6px 12px;border-radius:12px}
  .user-pick-panel .upp-foot .btn{font-size:19px;padding:11px 18px;border-radius:14px}
  .modal-btn{padding:10px 22px;font-size:18px}
  /* 待复习队列 2K 放大：每行 5 个 + 卡片缩小 */
  .rlist{gap:12px;grid-template-columns:repeat(5,1fr)}
  .rlist .wrow{min-height:110px;padding:14px 10px;border-radius:14px;border-width:2px}
  .rlist .wrow-h b{font-size:21px}
  .rlist .wrow-h .wc-ph{font-size:15px}
  .rlist .wrow-h .pos{font-size:14px}
  .rlist .wrow-cn{font-size:16px;margin-top:5px}
  /* 错题本（📘）2K 放大：单词网格减为 3 列、卡片与字号整体放大，单词不再拥挤 */
  .modal.wide .err-grid{grid-template-columns:repeat(3,1fr);gap:16px;max-height:62vh}
  .modal.wide .err-cell{padding:16px 14px;border-radius:16px}
  .modal.wide .err-cell .ec-w{font-size:24px}
  .modal.wide .err-cell .ec-p{font-size:18px}
  .modal.wide .err-cell .ec-c{font-size:17px;line-height:1.4}
  .modal.wide .err-cell .ec-badge{font-size:16px;padding:3px 11px;border-radius:10px}
  .modal.wide .err-desc{font-size:17px}
  .modal.wide .err-go{font-size:22px;padding:16px 30px;min-height:62px}
  .modal.wide .bc-fill{height:18px}
}
/* ===== 语法连线（V0.65：选项环绕中央结构卡 · 左/右列各 4 选项 · 顶部语法锚点 / 底部中文锚点） =====
   几何：三栏 flex = 左选项列 | 中央结构卡 | 右选项列。
   左/右列各 4 选项：上 2 个语法（按长度降序·长上短下）、下 2 个中文（按长度升序·短上长下）。
   中央结构卡顶部「语法」锚点、底部「中文」锚点。
   连线：语法锚点(顶)→上方语法选项；中文锚点(底)→下方中文选项；分处上下半区，互不交叉、不穿其他选项。
   不使用 transform:scale，坐标零换算。 */
.gwrap{max-width:1180px;margin:0 auto}
/* 进度点导航 */
.gprog{display:flex;align-items:center;justify-content:center;gap:8px;margin:2px 0 14px}
.gprog-dot{width:36px;height:36px;border-radius:50%;border:2px solid var(--line);background:#fff;font-size:15px;font-weight:800;color:var(--sub);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .15s cubic-bezier(.34,1.56,.64,1),box-shadow .15s,border-color .15s,background .15s,color .15s;user-select:none}
.gprog-dot:hover{border-color:var(--pri);color:var(--pri)}
.gprog-dot.done{background:#16a34a;border-color:#16a34a;color:#fff}
.gprog-dot.cur{border-color:var(--pri);color:var(--pri);box-shadow:0 0 0 5px rgba(37,99,235,.16);transform:scale(1.1)}
.gprog-line{width:34px;height:2px;background:var(--line);flex:0 0 auto}
/* 舞台三栏 */
.gstage{position:relative;display:flex;align-items:stretch;gap:16px;min-height:640px;padding:24px 0}
.g-col-opts{flex:1 1 0;min-width:0;display:flex;flex-direction:column;justify-content:space-between;gap:48px}
.g-grp{display:flex;flex-direction:column;gap:12px;min-width:0}
/* 8 个选项尽量贴四角：左列左对齐（靠左上/左下角）、右列右对齐（靠右上/右下角） */
.g-col-opts.left .g-grp{align-items:flex-start;text-align:left}
.g-col-opts.right .g-grp{align-items:flex-end;text-align:right}
.g-center{flex:0 0 auto;position:relative;display:flex;align-items:center;justify-content:center;min-width:0;padding:24px 0}
.g-stem-card{background:#fff;border:2px solid var(--line);border-radius:20px;padding:30px 24px;box-shadow:0 1px 2px rgba(15,23,42,.05),0 8px 22px rgba(15,23,42,.06);max-width:352px;width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-width:0}
.g-id{position:absolute;top:9px;left:11px;font-size:12px;font-weight:800;color:#64748b;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;padding:1px 7px;letter-spacing:.02em;line-height:1.5}
.g-stem-tag{font-size:12.5px;font-weight:800;letter-spacing:.06em;color:#94a3b8}
.g-stem{font-size:27px;font-weight:800;color:#0f172a;line-height:1.5;text-align:center;word-break:break-word;overflow-wrap:anywhere;width:100%;max-width:100%}
.g-stem .blank{display:inline-block;width:58px;height:3px;background:#2563eb;vertical-align:middle;margin:0 6px;border-radius:2px}
.g-opt-label{font-size:13px;font-weight:800;color:var(--sub);margin-bottom:8px;line-height:1.4}
/* 一键问AI按钮（题目右上角，与「退出」同排）：未作答禁用、作答/看答案后可用 */
#gAiBtn{font-size:13px;padding:5px 11px;min-height:30px;border-radius:9px}
#gAiBtn:disabled{opacity:.42;cursor:not-allowed}
/* 卡片文字可复制（题干/例句/结果卡）；选项与锚点仍是可交互元素，保持不可选中 */
.g-stem-card,.g-stem,.g-opt-label,.greveal,.greveal li,.gres,.gres-stem,.gres-row,.gres-ex{-webkit-user-select:text;user-select:text}
/* 锚点（连接点）：包一层 wrap 做绝对定位，内部 .g-anchor 保留自身 transform(选中放大) 不被覆盖 */
.g-anchor-wrap{position:absolute;left:50%;transform:translateX(-50%);z-index:5}
/* 连接点必须完整落在结构卡「框外」：用 bottom/top:100% 贴到卡片上/下边缘之外，
   这样无论字号怎么放大（尤其 2K 竖屏）都不会钻进卡内压住「英语结构 / 题干」文字 */
.g-anchor-wrap.top{top:auto;bottom:100%;margin-bottom:8px}
.g-anchor-wrap.bot{bottom:auto;top:100%;margin-top:8px}
.g-col-opts.left .g-opt{align-self:flex-start;max-width:100%}
.g-col-opts.right .g-opt{align-self:flex-end;max-width:100%}
.g-anchor{padding:9px 20px;border-radius:999px;border:3px solid #cbd5e1;background:#fff;color:#64748b;font-size:15px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;user-select:none;flex:0 0 auto;white-space:nowrap;transition:transform .15s cubic-bezier(.34,1.56,.64,1),box-shadow .15s,border-color .15s,background .15s,color .15s}
.g-anchor:hover{transform:translateY(-2px)}
.g-anchor:active{transform:scale(.93)}
.g-anchor.gram{border-color:#2563eb;color:#2563eb}
.g-anchor.zh{border-color:#16a34a;color:#16a34a}
.g-anchor.sel{transform:scale(1.06)}
.g-anchor.gram.sel{box-shadow:0 0 0 6px rgba(37,99,235,.18);background:#eff6ff}
.g-anchor.zh.sel{box-shadow:0 0 0 6px rgba(22,163,74,.18);background:#ecfdf5}
.g-anchor.linked{color:#fff}
.g-anchor.gram.linked{background:#2563eb;border-color:#2563eb;box-shadow:0 4px 12px rgba(37,99,235,.28)}
.g-anchor.zh.linked{background:#16a34a;border-color:#16a34a;box-shadow:0 4px 12px rgba(22,163,74,.28)}
.g-anchor.ok{background:#16a34a!important;border-color:#16a34a!important;color:#fff!important}
.g-anchor.bad{background:#dc2626!important;border-color:#dc2626!important;color:#fff!important}
.g-opt{border:2px solid var(--line);border-radius:12px;background:#fff;padding:12px 14px;font-size:17px;font-weight:700;color:#0f172a;cursor:pointer;transition:border-color .14s,background .14s,box-shadow .14s,transform .1s;user-select:none;line-height:1.35;align-self:flex-end;flex:0 0 auto}
.g-opt:hover{border-color:#2563eb;background:#f8fbff}
.g-opt:active{transform:scale(.985)}
.g-opt.sel{border-color:#2563eb;background:#eff6ff;box-shadow:0 0 0 3px rgba(37,99,235,.16)}
.g-opt.ok{border-color:#16a34a;background:#ecfdf5;color:#065f46}
.g-opt.bad{border-color:#dc2626;background:#fef2f2;color:#991b1b}
/* 看答案后的例句展示区（移到显眼处） */
.greveal{margin-top:16px;background:#fff;border:2px solid #fde68a;border-radius:16px;padding:16px 18px;box-shadow:0 6px 20px rgba(15,23,42,.06)}
.greveal.hide{display:none}
.greveal-h{font-size:28px;font-weight:800;color:#b45309;margin-bottom:10px;line-height:1.4}
.greveal ol{margin:0;padding-left:22px}
.greveal li{font-size:17px;line-height:1.7;margin-bottom:6px}
.greveal li b{color:#0f172a}
.greveal li span{color:var(--sub);margin-left:6px}
/* 例句中标绿「本条语法结构」命中的片段（如 might rain / might be / might know） */
.ghl{font-style:normal;background:#dcfce7;border-radius:5px;padding:0 4px;box-shadow:inset 0 -1px 0 #bbf7d0}
.greveal li b .ghl,.gres-ex b .ghl,.gex-en .ghl{color:#15803d;font-weight:800}
/* 连线层 */
.glines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3;overflow:visible}
/* 底部按钮与提示 */
.gfoot{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;align-items:center;margin-top:18px}
.gmsg{width:100%;text-align:center;color:var(--sub);font-weight:600;min-height:20px;font-size:15px;padding:0 8px}
.ggiveup{font-size:1.5em;padding:.55em 1.2em;font-weight:800}
/* 结果页（总结放大 200%） */
.gresult{display:flex;flex-direction:column;gap:12px;max-width:450px;margin:0 auto;zoom:2}
.gres{background:#fff;border:1px solid var(--line);border-left:6px solid #16a34a;border-radius:14px;padding:12px 14px;box-shadow:0 1px 2px rgba(15,23,42,.05)}
.gres.bad{border-left-color:#dc2626}
.gres-stem{font-size:17px;font-weight:800;color:#0f172a;margin-bottom:7px;line-height:1.35}
.gres-row{font-size:14px;margin-bottom:4px;line-height:1.45}
.gres-k{color:var(--sub);font-weight:700}
.gres-v{font-weight:800}
.gres-v.ok{color:#16a34a}
.gres-v.bad{color:#dc2626}
.gres-ex{margin-top:7px;background:#f8fafc;border-radius:9px;padding:8px 10px;font-size:13.5px;line-height:1.55}
.gres-ex b{color:#0f172a}
.gres-ex span{color:var(--sub)}
/* 中等屏 */
@media(max-width:900px){
  .gstage{min-height:560px}
  .g-stem{font-size:22px}
  .g-stem .blank{width:44px}
  .g-stem-card{padding:20px 16px;border-radius:16px}
  .g-anchor{padding:8px 17px;font-size:13.5px;border-width:2.5px}
  .g-opt{font-size:15.5px;padding:10px 12px}
  .g-col-opts{gap:30px}
  .gresult{zoom:1.5;max-width:560px}
}
/* 窄屏：上下堆叠 + 纯点选（隐藏连线） */
@media(max-width:640px){
  .gstage{flex-direction:column;align-items:stretch;min-height:0;gap:14px;padding:4px 0}
  .g-col-opts{width:100%;gap:14px}
  .g-center{width:100%}
  .g-anchor-wrap.top,.g-anchor-wrap.bot{position:static;transform:none;left:auto;top:auto;bottom:auto;margin:6px 0}
  .g-col-opts.left .g-grp,.g-col-opts.right .g-grp{align-items:stretch;text-align:left}
  .g-col-opts.left .g-opt,.g-col-opts.right .g-opt{align-self:stretch}
  .glines{display:none}
  .g-stem{font-size:20px}
  .g-stem-card{padding:18px 14px}
  .gresult{zoom:1.15;max-width:100%}
}
/* ===== 语法连线 · 2K 竖屏放大 ===== */
@media (orientation:portrait) and (min-height:2000px){
  .gwrap{max-width:1360px}
  .gprog-dot{width:62px;height:62px;font-size:26px;border-width:3px}
  .gprog-line{width:56px;height:4px}
  .gprog{gap:14px;margin:6px 0 24px}
  .gstage{min-height:960px}
  .g-col-opts{gap:72px}
  .g-stem-card{max-width:544px;padding:40px 30px;border-radius:30px;border-width:3px}
  .g-stem{font-size:46px}
  .g-stem .blank{width:100px;height:5px}
  .g-stem-tag{font-size:22px}
  .g-anchor-wrap.top{margin-bottom:22px}
  .g-anchor-wrap.bot{margin-top:22px}
  .g-anchor{padding:16px 34px;font-size:28px;border-width:5px}
  .g-grp{gap:18px}
  .g-opt{font-size:30px;padding:18px 22px;border-radius:18px;border-width:3px}
  .greveal{font-size:22px;padding:24px 26px;border-radius:24px}
  .greveal li{font-size:27px}
  .gfoot{gap:20px;margin-top:30px}
  .gmsg{font-size:26px;min-height:34px}
  .ggiveup{font-size:2.6em;padding:.5em 1.1em}
  .gfoot .btn{font-size:30px;padding:16px 32px;border-radius:16px}
  .gresult{zoom:2;max-width:480px;gap:20px}
  .gres{padding:18px 20px;border-left-width:9px;border-radius:20px}
  .gres-stem{font-size:26px}
  .gres-row{font-size:20px}
  .gres-ex{font-size:18px;padding:12px 14px}
  #gAiBtn{font-size:22px;padding:9px 20px;min-height:52px;border-radius:14px}
}

/* 1080p 横屏压缩（整屏塞下） */
@media (orientation:landscape) and (min-width:1200px) and (max-height:1150px){
  body{padding:0 !important;overflow:hidden !important}
  .wrap{max-width:1380px !important;padding:6px 10px 4px !important}
  .hero{padding:6px 10px !important;margin-bottom:4px !important;border-radius:10px !important}
  .hero-title{font-size:16px !important}
  .ucard{padding:6px !important;border-radius:8px !important}
  .avatar{width:36px !important;height:36px !important;font-size:16px !important}
  .hero-r{gap:6px !important}
  .praise{padding:4px 10px !important}
  .praise-badge{width:auto !important;height:auto !important;font-size:12px !important;padding:3px 10px !important;white-space:nowrap !important}
  .praise-sub{font-size:11px !important}
  .praise-msg .pcn{font-size:16px !important}
  .praise-msg .pen{font-size:14px !important}
  .praise-msg{font-size:11px !important}
  .mode-grid{gap:4px !important;flex-direction:row !important;flex-wrap:wrap !important}
  .mode-row{display:flex !important;flex-wrap:wrap !important;gap:4px !important;flex:1 1 100% !important}
  .mode-card{padding:4px 8px !important;flex:1 1 calc(25% - 4px) !important;min-width:0 !important;border-radius:8px !important}
  .mode-card .mt{font-size:12px !important;margin-bottom:0 !important;display:flex !important;align-items:center !important}
  .mode-card h4{font-size:12px !important;margin:0 !important;line-height:1.2 !important}
  .mode-card .mi{width:22px !important;height:22px !important;border-radius:6px !important;margin:0 !important;padding:0 !important;display:flex !important;align-items:center !important;justify-content:center !important}
  .mode-card .mi svg{width:13px !important;height:13px !important}
  #fillLaunchCard{padding:4px 8px !important}
  #fillLaunchCard .mi{width:22px !important;height:22px !important;border-radius:6px !important}
  #fillLaunchCard h4{font-size:12px !important}
  .card{padding:6px 10px !important;margin-bottom:4px !important;border-radius:10px !important}
  .today-h{font-size:12px !important;margin-bottom:3px !important}
  .todo-grid{gap:5px !important}
  .foot{padding:2px !important;font-size:11px !important;margin-top:2px !important}
  /* —— 语法连线 · 1080p 一屏放下：去掉 640px 最小高度，选项聚拢 —— */
  .sec-h h3{font-size:15px !important;margin:0}
  .sec-h .desc{font-size:11px !important}
  .quiz-bar{margin-bottom:4px !important}
  .qcount{font-size:11px !important}
  .gprog{gap:5px;margin:2px 0 6px}
  .gprog-dot{width:26px;height:26px;font-size:12px;border-width:2px}
  .gprog-dot.cur{transform:scale(1.05);box-shadow:0 0 0 3px rgba(37,99,235,.16)}
  .gprog-line{width:18px}
  .gstage{min-height:0;padding:4px 0;gap:14px;align-items:center}
  .g-col-opts{gap:14px;justify-content:center}
  .g-grp{gap:6px}
  .g-opt-label{font-size:11px;margin-bottom:2px}
  .g-opt{font-size:13.5px;padding:7px 10px;border-radius:10px;border-width:2px}
  .g-center{padding:4px 0}
  .g-stem-card{max-width:300px;padding:14px;border-radius:14px;gap:4px}
  .g-stem{font-size:19px}
  .g-stem .blank{width:42px}
  .g-anchor{padding:6px 14px;font-size:13px;border-width:2.5px}
  .g-anchor-wrap.top{margin-bottom:5px}
  .g-anchor-wrap.bot{margin-top:5px}
  .greveal{margin-top:8px;padding:10px 12px;border-radius:12px}
  .greveal-h{font-size:15px;margin-bottom:5px}
  .greveal li{font-size:12.5px;line-height:1.55;margin-bottom:3px}
  .gfoot{gap:8px;margin-top:8px}
  .gfoot .btn{min-height:34px;padding:0 14px;font-size:13px;border-radius:9px}
  .gmsg{font-size:12px}
}

/* ===== 手机/窄屏（≤820px）：语法连线改「双段式」排版，连线绝不交叉/穿模 ===== */
@media(max-width:820px){
  /* —— 语法连线 · 双段式：上段=词性/时态、下段=中文含义；
        每段「选项在左、锚点在右」，连线只走右侧空走廊 → 任何题目都不会交叉/遮挡/穿越选项 —— */
  .gstage.gm{display:flex;flex-direction:column;align-items:stretch;gap:10px;min-height:0;padding:4px 0}
  .gstage.gm .gband{display:flex;flex-direction:row;align-items:center;gap:8px;width:100%}
  .gstage.gm .gband-opts{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:7px}
  .gstage.gm .g-anchor-col{flex:0 0 auto;display:flex;align-items:center;justify-content:center}
  .gstage.gm .g-opt-label{margin-bottom:4px}
  .gstage.gm .g-center{width:100%;padding:0}
  .gstage.gm .g-stem-card{max-width:100%;padding:16px 14px}
  .gstage.gm .g-opt{align-self:stretch;max-width:100%;font-size:15px;padding:10px 12px}
  .gstage.gm .g-anchor{padding:10px 16px;font-size:14px}
  .gstage.gm .glines{display:block}   /* 双段式走廊连线安全，移动端也显示连线（线段 x 区间恒在「选项右缘↔锚点左缘」之间，绝不进入选项本体） */

  /* —— 底部版本条：取消 fixed 悬浮，改页面流末尾，绝不遮挡内容；整体收窄 —— */
  .buildbar{position:static;left:auto;right:auto;transform:none;bottom:auto;width:100%;max-width:100%;border-radius:14px;margin-top:12px;box-shadow:none;justify-content:center;flex-wrap:wrap;gap:6px;padding:7px 10px;font-size:11.5px}
  .buildbar .bt{display:none}
  .buildbar #srvline{order:-1;flex:1 1 100%;min-width:0;margin:2px 0 0;text-align:center;font-size:11px;line-height:1.4;word-break:break-word}
  /* 服务端流水在「更新日志」上方单独成行；版本号 + 更新日志 + 系统日志 同一行 */

  /* —— 今天的修行：进一步压紧 —— */
  .today{padding:10px 11px 11px}
  .today-h{margin-bottom:5px}
  .streak-badge{display:none}              /* 手机端：连续修行天数移到「今日任务完成」内 */
  .praise{padding:8px 10px}
  .praise-badge{font-size:13px;padding:4px 12px}
  .praise-sub{font-size:11px}
  .praise-msg .pcn{font-size:18px}
  .praise-msg .pen{font-size:15px}
  .praise-streak{display:block;margin-top:5px;font-size:12px;font-weight:700;color:#7c3aed}

  /* —— 待办三卡：手机压成一行（隐藏副标题，只留「N 个待巩固」等） —— */
  .todo-grid{grid-template-columns:repeat(3,1fr);gap:6px}
  .todo-item{padding:7px 8px;gap:7px;align-items:center}
  .todo-item .ti-ic{width:24px;height:24px}
  .todo-item .ti-ic svg{width:14px;height:14px}
  .ti-t{font-size:12px;line-height:1.2}
  .ti-t .num{font-size:15px}
  .ti-s{display:none}

  /* —— 复习闯关 5 模块：2列 + 压缩高度 —— */
  .mode-grid{gap:5px}
  .mode-row{gap:4px}
  .mode-row .mode-card{flex:0 0 calc(50% - 2px);max-width:none;min-height:0;height:auto}
  .mode-card.row{padding:4px 8px;gap:6px;border-radius:9px;min-height:0;height:auto;align-items:center}
  .mode-card .mi{width:22px;height:22px;border-radius:6px;margin:0}
  .mode-card .mi svg{width:13px;height:13px}
  .mode-card h4{font-size:12px;margin-bottom:0}
  #fillLaunchCard{padding:4px 8px;background:linear-gradient(180deg,#fffaf5,#fff3ea);box-shadow:none}
  #fillLaunchCard .mi{width:22px;height:22px;border-radius:6px}
  #fillLaunchCard h4{font-size:12px;color:#b4430c}
}
