:root {

  /* solo-design consumption aliases: explicit prefix for fill-html-head.mjs */
  --vibe-background: var(--background, #ffffff);
  --vibe-foreground: var(--foreground, #0f172a);
  --vibe-card: var(--card, var(--background));
  --vibe-card-foreground: var(--card-foreground, var(--foreground));
  --vibe-popover: var(--popover, var(--card));
  --vibe-popover-foreground: var(--popover-foreground, var(--card-foreground, var(--foreground)));
  --vibe-primary: var(--primary, #111827);
  --vibe-primary-foreground: var(--primary-foreground, #ffffff);
  --vibe-secondary: var(--secondary, var(--muted, var(--card)));
  --vibe-secondary-foreground: var(--secondary-foreground, var(--foreground));
  --vibe-muted: var(--muted, var(--card));
  --vibe-muted-foreground: var(--muted-foreground, var(--foreground));
  --vibe-accent: var(--accent, var(--secondary, var(--muted, var(--card))));
  --vibe-accent-foreground: var(--accent-foreground, var(--foreground));
  --vibe-destructive: var(--destructive, #ef4444);
  --vibe-destructive-foreground: var(--destructive-foreground, #ffffff);
  --vibe-border: var(--border, currentColor);
  --vibe-input: var(--input, var(--border));
  --vibe-ring: var(--ring, var(--primary));
  --vibe-chart-1: var(--chart-1, var(--primary));
  --vibe-chart-2: var(--chart-2, var(--secondary, var(--primary)));
  --vibe-chart-3: var(--chart-3, var(--accent, var(--primary)));
  --vibe-chart-4: var(--chart-4, var(--muted-foreground, var(--foreground)));
  --vibe-chart-5: var(--chart-5, var(--foreground));
  --vibe-sidebar: var(--sidebar, var(--background));
  --vibe-sidebar-foreground: var(--sidebar-foreground, var(--foreground));
  --vibe-sidebar-primary: var(--sidebar-primary, var(--primary));
  --vibe-sidebar-primary-foreground: var(--sidebar-primary-foreground, var(--primary-foreground));
  --vibe-sidebar-accent: var(--sidebar-accent, var(--accent, var(--muted, var(--card))));
  --vibe-sidebar-accent-foreground: var(--sidebar-accent-foreground, var(--accent-foreground, var(--foreground)));

/* brand */
  --brand-50: #fff4ee;
  --brand-100: #ffe6dc;
  --brand-200: #ffc8b5;
  --brand-300: #ffab8f;
  --brand-400: #ff845f;
  --brand-500: #f7663c;
  --brand-600: #f1481e;
  --brand-700: #d63a14;
  --brand-800: #ad2f13;
  --brand-900: #8a2914;

  /* surface */
  --background: #e3dfd9;
  --muted: #ece7e1;
  --card: #f3f0eb;
  --popover: #f7f4ef;

  /* text */
  --foreground: #211d1a;
  --muted-foreground: #5c5650;
  --card-foreground: #211d1a;
  --popover-foreground: #211d1a;
  --accent-foreground: #211d1a;
  --secondary-foreground: #ffffff;

  /* action */
  --primary: var(--brand-600);
  --primary-foreground: #fff7f3;
  --accent: #ded7cf;
  --input: #d7d1c9;
  --border: #cbc3ba;
  --secondary: #1d1e20;
  --ring: var(--brand-500);

  /* feedback */
  --destructive: #ef4444;
  --destructive-foreground: #ffffff;

  /* chart */
  --chart-1: #f7663c;
  --chart-2: #aea4fd;
  --chart-3: #13b15a;
  --chart-4: #84776e;
  --chart-5: #fe9a45;

  /* sidebar */
  --sidebar: #d2cbc3;
  --sidebar-foreground: #211d1a;
  --sidebar-primary: var(--primary);
  --sidebar-primary-foreground: var(--primary-foreground);
  --sidebar-accent: #212121;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #d6cec6;
  --sidebar-ring: var(--ring);

  /* compatibility aliases */
  --bg-background: var(--background);
  --bg-card: var(--card);
  --bg-popover: var(--popover);
  --bg-muted: var(--muted);
  --text-foreground: var(--foreground);
  --text-card-foreground: var(--card-foreground);
  --text-popover-foreground: var(--popover-foreground);
  --text-primary-foreground: var(--primary-foreground);
  --text-secondary-foreground: var(--secondary-foreground);
  --text-muted-foreground: var(--muted-foreground);
  --text-accent-foreground: var(--accent-foreground);
  --text-destructive-foreground: var(--destructive-foreground);
  --accent-primary: var(--primary);
  --accent-secondary: var(--secondary);
  --accent-input: var(--input);
  --accent-ring: var(--ring);
  --status-destructive: var(--destructive);

  /* === Typography === */
  --font-sans: Geist, ui-sans-serif, sans-serif, system-ui;
  --font-serif: Playfair Display, ui-serif, serif;
  --font-mono: Roboto Mono, monospace;
  --tracking-normal: 0em;

  /* === Radius === */
  --radius: 16px;
  --vibe-radius-sm: 4px;
  --vibe-radius-md: 9px;
  --vibe-radius-lg: var(--radius);

  /* === Spacing === */
  --spacing: 4px;

  /* === Size === */

  /* === Shadow === */
  --shadow-2xs: transparent;
  --shadow-xs: 2px 2px 10px 4px transparent;
  --shadow-sm: 2px 2px 10px 4px transparent;
  --shadow: 2px 2px 10px 4px transparent;
  --shadow-md: 2px 2px 10px 4px transparent;
  --shadow-lg: 2px 2px 10px 4px transparent;
  --shadow-xl: 2px 2px 10px 4px transparent;
  --shadow-2xl: transparent;
}

.dark {
  /* surface */
  --background: #1e1a16;
  --muted: #221d19;
  --card: #2a2521;
  --popover: #302923;

  /* text */
  --foreground: #f2ede7;
  --muted-foreground: #b4aba2;
  --card-foreground: #f2ede7;
  --popover-foreground: #f2ede7;
  --accent-foreground: #f2ede7;
  --secondary-foreground: #f2ede7;

  /* action */
  --primary: var(--brand-600);
  --primary-foreground: #31150d;
  --accent: #443c35;
  --input: #3a332d;
  --border: #3a322c;
  --secondary: #4a413a;
  --ring: var(--brand-500);

  /* feedback */
  --destructive: #ff6b57;
  --destructive-foreground: #fff5f2;

  /* chart */
  --chart-1: #ff845f;
  --chart-2: #f4b366;
  --chart-3: #3ccf8e;
  --chart-4: #b3a6ff;
  --chart-5: #f0d2a6;

  /* sidebar */
  --sidebar: #2b2520;
  --sidebar-foreground: #f2ede7;
  --sidebar-primary: var(--primary);
  --sidebar-primary-foreground: var(--primary-foreground);
  --sidebar-accent: #443c35;
  --sidebar-accent-foreground: #f2ede7;
  --sidebar-border: #3a322c;
  --sidebar-ring: var(--ring);

  /* compatibility aliases */
  --bg-background: var(--background);
  --bg-card: var(--card);
  --bg-popover: var(--popover);
  --bg-muted: var(--muted);
  --text-foreground: var(--foreground);
  --text-card-foreground: var(--card-foreground);
  --text-popover-foreground: var(--popover-foreground);
  --text-primary-foreground: var(--primary-foreground);
  --text-secondary-foreground: var(--secondary-foreground);
  --text-muted-foreground: var(--muted-foreground);
  --text-accent-foreground: var(--accent-foreground);
  --text-destructive-foreground: var(--destructive-foreground);
  --accent-primary: var(--primary);
  --accent-secondary: var(--secondary);
  --accent-input: var(--input);
  --accent-ring: var(--ring);
  --status-destructive: var(--destructive);
  --shadow-2xs: transparent;
  --shadow-2xl: transparent;
}

/* === Semantic token fallback === */
.bg-background { background-color: var(--vibe-background); }
.text-background { color: var(--vibe-background); }
.border-background { border-color: var(--vibe-background); }
.ring-background { --tw-ring-color: var(--vibe-background); }
.bg-foreground { background-color: var(--vibe-foreground); }
.text-foreground { color: var(--vibe-foreground); }
.border-foreground { border-color: var(--vibe-foreground); }
.ring-foreground { --tw-ring-color: var(--vibe-foreground); }
.bg-card { background-color: var(--vibe-card); }
.text-card { color: var(--vibe-card); }
.border-card { border-color: var(--vibe-card); }
.ring-card { --tw-ring-color: var(--vibe-card); }
.bg-card-foreground { background-color: var(--vibe-card-foreground); }
.text-card-foreground { color: var(--vibe-card-foreground); }
.border-card-foreground { border-color: var(--vibe-card-foreground); }
.ring-card-foreground { --tw-ring-color: var(--vibe-card-foreground); }
.bg-popover { background-color: var(--vibe-popover); }
.text-popover { color: var(--vibe-popover); }
.border-popover { border-color: var(--vibe-popover); }
.ring-popover { --tw-ring-color: var(--vibe-popover); }
.bg-popover-foreground { background-color: var(--vibe-popover-foreground); }
.text-popover-foreground { color: var(--vibe-popover-foreground); }
.border-popover-foreground { border-color: var(--vibe-popover-foreground); }
.ring-popover-foreground { --tw-ring-color: var(--vibe-popover-foreground); }
.bg-primary { background-color: var(--vibe-primary); }
.text-primary { color: var(--vibe-primary); }
.border-primary { border-color: var(--vibe-primary); }
.ring-primary { --tw-ring-color: var(--vibe-primary); }
.bg-primary-foreground { background-color: var(--vibe-primary-foreground); }
.text-primary-foreground { color: var(--vibe-primary-foreground); }
.border-primary-foreground { border-color: var(--vibe-primary-foreground); }
.ring-primary-foreground { --tw-ring-color: var(--vibe-primary-foreground); }
.bg-secondary { background-color: var(--vibe-secondary); }
.text-secondary { color: var(--vibe-secondary); }
.border-secondary { border-color: var(--vibe-secondary); }
.ring-secondary { --tw-ring-color: var(--vibe-secondary); }
.bg-secondary-foreground { background-color: var(--vibe-secondary-foreground); }
.text-secondary-foreground { color: var(--vibe-secondary-foreground); }
.border-secondary-foreground { border-color: var(--vibe-secondary-foreground); }
.ring-secondary-foreground { --tw-ring-color: var(--vibe-secondary-foreground); }
.bg-muted { background-color: var(--vibe-muted); }
.text-muted { color: var(--vibe-muted); }
.border-muted { border-color: var(--vibe-muted); }
.ring-muted { --tw-ring-color: var(--vibe-muted); }
.bg-muted-foreground { background-color: var(--vibe-muted-foreground); }
.text-muted-foreground { color: var(--vibe-muted-foreground); }
.border-muted-foreground { border-color: var(--vibe-muted-foreground); }
.ring-muted-foreground { --tw-ring-color: var(--vibe-muted-foreground); }
.bg-accent { background-color: var(--vibe-accent); }
.text-accent { color: var(--vibe-accent); }
.border-accent { border-color: var(--vibe-accent); }
.ring-accent { --tw-ring-color: var(--vibe-accent); }
.bg-accent-foreground { background-color: var(--vibe-accent-foreground); }
.text-accent-foreground { color: var(--vibe-accent-foreground); }
.border-accent-foreground { border-color: var(--vibe-accent-foreground); }
.ring-accent-foreground { --tw-ring-color: var(--vibe-accent-foreground); }
.bg-destructive { background-color: var(--vibe-destructive); }
.text-destructive { color: var(--vibe-destructive); }
.border-destructive { border-color: var(--vibe-destructive); }
.ring-destructive { --tw-ring-color: var(--vibe-destructive); }
.bg-destructive-foreground { background-color: var(--vibe-destructive-foreground); }
.text-destructive-foreground { color: var(--vibe-destructive-foreground); }
.border-destructive-foreground { border-color: var(--vibe-destructive-foreground); }
.ring-destructive-foreground { --tw-ring-color: var(--vibe-destructive-foreground); }
.bg-border { background-color: var(--vibe-border); }
.text-border { color: var(--vibe-border); }
.border-border { border-color: var(--vibe-border); }
.ring-border { --tw-ring-color: var(--vibe-border); }
.bg-input { background-color: var(--vibe-input); }
.text-input { color: var(--vibe-input); }
.border-input { border-color: var(--vibe-input); }
.ring-input { --tw-ring-color: var(--vibe-input); }
.bg-ring { background-color: var(--vibe-ring); }
.text-ring { color: var(--vibe-ring); }
.border-ring { border-color: var(--vibe-ring); }
.ring-ring { --tw-ring-color: var(--vibe-ring); }
.bg-chart-1 { background-color: var(--vibe-chart-1); }
.text-chart-1 { color: var(--vibe-chart-1); }
.border-chart-1 { border-color: var(--vibe-chart-1); }
.ring-chart-1 { --tw-ring-color: var(--vibe-chart-1); }
.bg-chart-2 { background-color: var(--vibe-chart-2); }
.text-chart-2 { color: var(--vibe-chart-2); }
.border-chart-2 { border-color: var(--vibe-chart-2); }
.ring-chart-2 { --tw-ring-color: var(--vibe-chart-2); }
.bg-chart-3 { background-color: var(--vibe-chart-3); }
.text-chart-3 { color: var(--vibe-chart-3); }
.border-chart-3 { border-color: var(--vibe-chart-3); }
.ring-chart-3 { --tw-ring-color: var(--vibe-chart-3); }
.bg-chart-4 { background-color: var(--vibe-chart-4); }
.text-chart-4 { color: var(--vibe-chart-4); }
.border-chart-4 { border-color: var(--vibe-chart-4); }
.ring-chart-4 { --tw-ring-color: var(--vibe-chart-4); }
.bg-chart-5 { background-color: var(--vibe-chart-5); }
.text-chart-5 { color: var(--vibe-chart-5); }
.border-chart-5 { border-color: var(--vibe-chart-5); }
.ring-chart-5 { --tw-ring-color: var(--vibe-chart-5); }
.bg-sidebar { background-color: var(--vibe-sidebar); }
.text-sidebar { color: var(--vibe-sidebar); }
.border-sidebar { border-color: var(--vibe-sidebar); }
.ring-sidebar { --tw-ring-color: var(--vibe-sidebar); }
.bg-sidebar-foreground { background-color: var(--vibe-sidebar-foreground); }
.text-sidebar-foreground { color: var(--vibe-sidebar-foreground); }
.border-sidebar-foreground { border-color: var(--vibe-sidebar-foreground); }
.ring-sidebar-foreground { --tw-ring-color: var(--vibe-sidebar-foreground); }
.bg-sidebar-primary { background-color: var(--vibe-sidebar-primary); }
.text-sidebar-primary { color: var(--vibe-sidebar-primary); }
.border-sidebar-primary { border-color: var(--vibe-sidebar-primary); }
.ring-sidebar-primary { --tw-ring-color: var(--vibe-sidebar-primary); }
.bg-sidebar-primary-foreground { background-color: var(--vibe-sidebar-primary-foreground); }
.text-sidebar-primary-foreground { color: var(--vibe-sidebar-primary-foreground); }
.border-sidebar-primary-foreground { border-color: var(--vibe-sidebar-primary-foreground); }
.ring-sidebar-primary-foreground { --tw-ring-color: var(--vibe-sidebar-primary-foreground); }
.bg-sidebar-accent { background-color: var(--vibe-sidebar-accent); }
.text-sidebar-accent { color: var(--vibe-sidebar-accent); }
.border-sidebar-accent { border-color: var(--vibe-sidebar-accent); }
.ring-sidebar-accent { --tw-ring-color: var(--vibe-sidebar-accent); }
.bg-sidebar-accent-foreground { background-color: var(--vibe-sidebar-accent-foreground); }
.text-sidebar-accent-foreground { color: var(--vibe-sidebar-accent-foreground); }
.border-sidebar-accent-foreground { border-color: var(--vibe-sidebar-accent-foreground); }
.ring-sidebar-accent-foreground { --tw-ring-color: var(--vibe-sidebar-accent-foreground); }

/* === General === */
.no-scrollbar::-webkit-scrollbar { display: none; }
.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }
[data-icon] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  background-color: currentColor;
}

/* === Animations & Components === */
@keyframes slotPulse{0%,100%{opacity:1}50%{opacity:.45}}
@keyframes wordShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}
@keyframes fadeInUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
/* 栏目菜单（2026-09-06）：自左上角菜单钮方向淡入展开（悬浮球时代的 fadeInUp 不再适用） */
@keyframes menuDrop{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
@keyframes gradePop{0%{opacity:0;transform:scale(.5) translateY(4px)}60%{opacity:1;transform:scale(1.12) translateY(0)}100%{opacity:1;transform:scale(1) translateY(0)}}
#grade-label{animation:gradePop .6s cubic-bezier(.34,1.56,.64,1) forwards}
#confetti-canvas{position:fixed;inset:0;pointer-events:none;z-index:50}
@keyframes detailFadeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
[data-slot="detail"]{animation:detailFadeIn .35s ease forwards}
.word-playable{cursor:pointer;transition:opacity .2s ease}
.word-playable:hover{opacity:.65}
input[type=range]::-webkit-slider-thumb{appearance:none;width:14px;height:14px;border-radius:50%;background:var(--primary);cursor:pointer;border:2px solid var(--background)}
input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--primary);cursor:pointer;border:2px solid var(--background);border:none}
.autoplay-on{background:var(--primary)!important}
.autoplay-on .autoplay-knob{transform:translateX(16px);background:var(--primary-foreground)!important}
/* 设置面板标签页：五个栏目（全局/单词/句子/真题/模考），激活态用弱化底色保持扁平 */
.settings-tabs{display:flex;gap:4px;margin-bottom:14px}
.settings-tab{flex:1 1 0;padding:5px 0;border:none;border-radius:8px;background:transparent;font-size:0.75rem;color:var(--muted-foreground);cursor:pointer;transition:background .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent}
.settings-tab:hover{background:var(--muted);color:var(--foreground)}
.settings-tab.active{background:var(--muted);color:var(--foreground);font-weight:600}
.settings-tab-body{display:none}
.settings-tab-body.active{display:block}
.mn-parts{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:4px}
.mn-part{font-size:0.75rem;font-family:ui-monospace,monospace;font-weight:600;padding:2px 8px;border-radius:6px;background:var(--accent);color:var(--foreground)}
.mn-plus{font-size:0.6875rem;color:var(--muted-foreground)}
.mn-note{font-size:0.75rem;color:var(--muted-foreground)}
#settings-panel{animation:fadeInUp .2s ease forwards}
#nav-menu-panel{animation:menuDrop .18s ease forwards;transform-origin:top left}
.nav-menu-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:8px;cursor:pointer;font-size:0.8125rem;transition:background .15s ease;color:var(--foreground)}
.nav-menu-item:hover{background:var(--muted)}
.nav-menu-item.disabled{color:var(--muted-foreground);cursor:not-allowed;opacity:.5}
.nav-menu-item.disabled:hover{background:transparent}
.nav-menu-subitem{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-left:28px;padding-right:14px;font-size:0.75rem;color:var(--muted-foreground)}
.nav-menu-subitem:hover{color:var(--foreground)}
.nav-sub-tag{flex-shrink:0;line-height:1;padding:3px 7px;border-radius:99px;border:1px solid var(--border);color:var(--muted-foreground);background:var(--muted);font-size:0.625rem}
.nav-menu-item.active{background:var(--muted);color:var(--foreground)}
/* 顶级项当前页：主色淡底 + 主色文字，悬停加深（不覆盖 :hover） */
#nav-menu-panel > .nav-menu-item.active{background:color-mix(in srgb,var(--primary) 10%,transparent);color:var(--primary);font-weight:600}
#nav-menu-panel > .nav-menu-item.active:hover{background:color-mix(in srgb,var(--primary) 16%,transparent)}
/* 练习组展开态：仅文字高亮不加底色，悬停仍微亮 */
#nav-menu-panel > .nav-menu-item[data-dom-id="nav-practice-toggle"].active{background:transparent;color:var(--foreground);font-weight:600}
#nav-menu-panel > .nav-menu-item[data-dom-id="nav-practice-toggle"].active:hover{background:var(--muted)}
[data-dom-id="word-submit"]{ ime-mode: disabled; }
[data-dom-id="word-submit"]:focus{outline:none}
[data-dom-id="word-submit"]::-webkit-input-placeholder{color:var(--muted-foreground)}
[data-dom-id="word-submit"]::placeholder{color:var(--muted-foreground)}
/* 软键盘（常规物理键盘排版：字母键统一宽度 --sk-key-w 由 JS 按容器宽度计算，行居中，底排辅助行与首行按键实际宽度对齐） */
.sk-wrap{position:relative;width:100%;display:flex;flex-direction:column;align-items:center}
.sk-row{display:flex;gap:4px;justify-content:center;margin-top:12px;width:100%}
.pd-trkb .sk-row:first-child{margin-top:0}
.sk-key{flex:0 0 auto;width:var(--sk-key-w,42px);height:40px;padding:0;border-radius:8px;border:1px solid var(--border);background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);color:var(--foreground);font-size:1rem;font-weight:600;cursor:pointer;transition:background .12s ease,transform .08s ease;display:flex;align-items:center;justify-content:center;user-select:none;-webkit-tap-highlight-color:transparent}
.sk-key:hover{background:var(--muted)}
.sk-key:active{background:var(--accent);transform:scale(.94)}
.sk-row-aux{width:calc(var(--sk-key-w,42px)*10 + 4px*9);align-self:center}
.sk-key.sk-wide{flex:1 1 0;width:auto;max-width:none;font-size:0.75rem;font-weight:500;color:var(--muted-foreground)}
.sk-key.sk-space{flex:5 1 0;width:auto;max-width:none;font-size:0.75rem;color:var(--muted-foreground);letter-spacing:.3em}
.sk-key.sk-pressed{background:linear-gradient(135deg,var(--chart-2),var(--brand-500));color:#fff;border-color:transparent;box-shadow:0 0 14px rgba(247,102,60,.55);transform:scale(1.06);transition:background .35s ease,box-shadow .45s ease,transform .35s ease,color .35s ease,border-color .35s ease}
#soft-keyboard{animation:fadeInUp .18s ease}
/* 小屏：键盘破出容器边距（main px-5=20px，负边距 15px 后距屏幕边缘 5px），键宽由 --sk-key-w 自适应放大 */
@media (max-width:768px){
  #soft-keyboard{width:calc(100% + 30px);margin:0 -15px;padding:0 2px;box-sizing:border-box}
}
/* ---- 共用界面组件（en-shared 注入 + 两页复用） ---- */
/* 顶栏：常规文档流独立一行（不悬浮），16px 边距与 4px 按钮间距与原 fixed 版一致 */
/* 全局默认文字色（2026-09-02）：此前 body 未设 color，未显式指定颜色的元素继承 UA 默认黑，
   深色模式下成"黑底黑字"；统一回落主题前景色（深色模式自动为暖白） */
body{color:var(--foreground)}
.app-body{display:flex;flex-direction:column;min-height:100vh;background:var(--background);color:var(--foreground)}
.app-body > main{flex:1 1 auto;min-height:0;background:transparent}
/* ---- 背景风景层：固定视口 cover 适配任意分辨率，上下渐变融入主题背景色 ---- */
:root{--bg-landscape:url('assets/bg-landscape-light.jpg')}
.dark{--bg-landscape:url('assets/bg-landscape-dark.jpg')}
/* 背景色系切换：body[data-bg] 覆盖默认晨山，html.dark 组合切换对应夜景版 */
body[data-bg="teal"]{--bg-landscape:url('assets/bg-teal-light.jpg')}
html.dark body[data-bg="teal"]{--bg-landscape:url('assets/bg-teal-dark.jpg')}
body[data-bg="blue"]{--bg-landscape:url('assets/bg-blue-light.jpg')}
html.dark body[data-bg="blue"]{--bg-landscape:url('assets/bg-blue-dark.jpg')}
body[data-bg="violet"]{--bg-landscape:url('assets/bg-violet-light.jpg')}
html.dark body[data-bg="violet"]{--bg-landscape:url('assets/bg-violet-dark.jpg')}
/* 空白背景：隐藏风景层，仅保留纯主题底色 */
body[data-bg="none"]::before{display:none}
.app-body::before{
  content:'';
  position:fixed;
  inset:0;
  z-index:-1;
  pointer-events:none;
  background-image:
    linear-gradient(180deg, var(--background) 0%, color-mix(in srgb, var(--background) 55%, transparent) 18%, transparent 40% 68%, color-mix(in srgb, var(--background) 60%, transparent) 86%, var(--background) 100%),
    var(--bg-landscape);
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
}
/* 顶栏与正文同宽同内边距（640px 内容列 + 两侧 20px），h1 左缘与内容块边框线对齐 */
.top-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;max-width:680px;margin:0 auto;padding:16px 20px 0;box-sizing:border-box;position:relative}
/* 学习倒计时角标：并入 top-actions 流式排布（此前绝对居中，移动端会盖住背景按钮） */
.top-count{display:inline-flex;align-items:center;gap:4px;margin-right:4px;font-size:0.6875rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums;white-space:nowrap;cursor:default;flex-shrink:0;pointer-events:none}
.top-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;position:relative}
/* ---- 背景选择面板 ---- */
.bg-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:30;width:288px;max-width:calc(100vw - 24px);border-radius:12px;border:1px solid var(--border);box-shadow:0 10px 30px rgba(0,0,0,.18);padding:16px;background:var(--popover);color:var(--popover-foreground)}
.bg-list{display:flex;flex-direction:column;gap:10px;max-height:min(320px,46vh);overflow-y:auto;padding-right:2px;scrollbar-width:thin}
.bg-row{display:flex;align-items:center;gap:10px}
.bg-row-name{width:40px;flex-shrink:0;font-size:0.75rem;color:var(--muted-foreground);line-height:1.2}
.bg-row-pair{display:grid;grid-template-columns:1fr 1fr;gap:6px;flex:1;min-width:0}
.bg-swatch{position:relative;height:44px;border-radius:8px;cursor:pointer;background-size:cover;background-position:center;border:1px solid color-mix(in srgb,var(--border) 70%,transparent);transition:border-color .15s ease,box-shadow .15s ease;padding:0;-webkit-tap-highlight-color:transparent}
.bg-swatch:hover{border-color:var(--muted-foreground)}
.bg-swatch.sel{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}
.bg-check{position:absolute;top:4px;right:4px;display:none;width:15px;height:15px;border-radius:99px;background:var(--primary);color:var(--primary-foreground);align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.bg-check svg{width:9px;height:9px}
.bg-swatch.sel .bg-check{display:inline-flex}
.icon-btn{padding:8px;border-radius:8px;transition:background .15s ease;color:var(--muted-foreground)}
.exam-ro{display:flex;flex-direction:column;gap:0;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.exam-ro-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 10px;font-size:0.75rem}
.exam-ro-row + .exam-ro-row{border-top:1px solid var(--border)}
.exam-ro-row span{color:var(--muted-foreground)}
.exam-ro-row b{color:var(--foreground);font-weight:600;font-variant-numeric:tabular-nums;text-align:right}
.exam-change-btn{width:100%;padding:6px 0;border-radius:8px;border:1px solid var(--input);background:var(--card);color:var(--foreground);font-size:0.75rem;cursor:pointer;transition:border-color .15s ease,background .15s ease;white-space:nowrap;-webkit-tap-highlight-color:transparent}
.exam-change-btn:hover{border-color:var(--primary);background:var(--accent)}
.icon-btn:hover{background:var(--muted)}
.icon-btn-sm{padding:4px;border-radius:6px;transition:background .15s ease;color:var(--muted-foreground)}
.icon-btn-sm:hover{background:var(--muted)}
.settings-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:50;width:288px;border-radius:12px;border:1px solid var(--border);box-shadow:0 10px 30px rgba(0,0,0,.18);padding:16px;background:var(--popover);color:var(--popover-foreground)}
.settings-label{color:var(--muted-foreground);display:inline-flex;align-items:center;min-width:0;white-space:nowrap}
.settings-slider{width:100%;height:6px;border-radius:99px;appearance:none;-webkit-appearance:none;cursor:pointer}
.toggle-btn{position:relative;width:36px;height:20px;border-radius:99px;background:var(--muted);transition:background .15s ease;flex-shrink:0}
.hotkey-btn{min-width:64px;padding:3px 10px;border-radius:8px;border:1px solid var(--input);font-size:0.75rem;font-family:var(--font-mono,monospace);font-weight:600;color:var(--foreground);background:var(--card);transition:border-color .15s ease,background .15s ease}
.hotkey-btn:hover{border-color:var(--muted-foreground)}
.hotkey-btn.hotkey-armed{border-color:var(--primary);background:var(--accent);color:var(--primary)}
.tts-src-section{display:flex;flex-direction:column;gap:9px;border-top:1px solid var(--border);padding-top:12px}
.tts-src-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}
.tts-src-group{display:flex;gap:5px;flex-shrink:0}
.tts-src-btn{flex:0 0 auto;padding:4px 11px;border-radius:7px;border:1px solid var(--input);font-size:0.6875rem;font-weight:500;color:var(--muted-foreground);background:var(--card);cursor:pointer;transition:border-color .15s ease,color .15s ease,background .15s ease;-webkit-tap-highlight-color:transparent;white-space:nowrap}
.tts-src-btn:hover{border-color:var(--muted-foreground);color:var(--foreground)}
.tts-src-btn.tts-src-active{border-color:var(--primary);color:var(--primary);background:var(--accent);font-weight:600}
/* 离线禁用态：需联网的设置项（云端语音/AI评分） */
.tts-src-btn[disabled],.tts-voice-select[disabled]{opacity:.45;cursor:not-allowed;border-color:var(--border)}
.tts-src-btn[disabled]:hover{border-color:var(--border);color:var(--muted-foreground)}
.toggle-btn.offline-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
.tts-voice-select{width:100%;padding:6px 8px;border-radius:8px;border:1px solid var(--input);font-size:0.75rem;color:var(--foreground);background:var(--card);appearance:none;-webkit-appearance:none;cursor:pointer}
.tts-voice-select:focus{outline:none;border-color:var(--primary)}
/* 音色下拉（原生 option 无法右侧标价，改弹层：左名称右价格） */
.voice-drop{position:relative;width:100%}
.voice-drop-trigger{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:8px;border:1px solid var(--input);background:var(--card);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease}
.voice-drop-trigger:hover{border-color:var(--primary)}
.voice-drop-label{flex:1;min-width:0;text-align:left;font-size:.75rem;color:var(--foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.voice-drop-price{flex-shrink:0;font-size:.6875rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.voice-drop-chev{flex-shrink:0;color:var(--muted-foreground);transition:transform .15s ease}
.voice-drop.open .voice-drop-chev{transform:rotate(180deg)}
.voice-drop-menu{display:none;position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:45;max-height:236px;overflow-y:auto;border-radius:10px;border:1px solid var(--border);background:var(--popover);color:var(--popover-foreground);box-shadow:0 10px 30px rgba(0,0,0,.18);padding:4px;scrollbar-width:thin}
.voice-drop.open .voice-drop-menu{display:block}
.voice-drop-item{display:flex;align-items:center;gap:7px;padding:7px 8px;border-radius:7px;font-size:.75rem;cursor:pointer;-webkit-tap-highlight-color:transparent}
.voice-drop-item:hover{background:var(--muted)}
.voice-drop-check{flex-shrink:0;color:var(--primary);visibility:hidden}
.voice-drop-item.sel .voice-drop-check{visibility:visible}
.voice-drop-item.sel .voice-drop-name{color:var(--primary);font-weight:600}
.voice-drop-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tts-db-note{font-size:0.6875rem;line-height:1.5;color:var(--muted-foreground)}
.autoplay-knob{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:99px;background:var(--background);transition:transform .15s ease,background .15s ease}
/* 栏目菜单面板（2026-09-06）：右下悬浮球已移除——改由顶栏左上菜单钮开合，
   面板锚在 .page-title（position:relative）下方左对齐（同 bg/settings 弹层锚定法） */
.nav-menu-panel{position:absolute;top:calc(100% + 8px);left:0;z-index:30;width:200px;border-radius:12px;border:1px solid var(--border);box-shadow:0 10px 30px rgba(0,0,0,.22);padding:8px;background:var(--popover);color:var(--popover-foreground)}
.nav-menu-item>svg{flex-shrink:0}
.nav-chevron{margin-left:auto;transition:transform .2s ease}
.nav-disabled-tag{font-size:0.625rem;margin-left:auto;color:var(--muted-foreground)}
/* ---- 页面复用组件 ---- */
.chip{padding:2px 8px;border-radius:99px;font-size:0.75rem;font-weight:500;background:var(--muted);color:var(--muted-foreground)}
/* level-tag 单行不折行，超宽横向滑动 */
[data-dom-id="level-tag"]{white-space:nowrap;overflow-x:auto;min-width:0;max-width:100%;flex:0 1 auto;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}
[data-dom-id="level-tag"]::-webkit-scrollbar{display:none}
[data-dom-id="mix-chip"]{flex-shrink:0}
.mn-chip{display:block;margin:6px auto 0;padding:2px 10px;border-radius:99px;background:var(--muted);background:color-mix(in srgb,var(--chart-4) 14%,transparent);color:var(--chart-4);font-size:0.75rem;font-weight:600;white-space:normal;text-align:center;width:fit-content;max-width:100%}
.card-panel{width:100%;display:flex;flex-direction:column;align-items:center;text-align:center;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);border:1px solid var(--border);border-radius:16px;transition:border-color .15s ease}
/* .card-panel:hover 已移除（2026-09-01 裁决：面板容器不做悬停反馈，保留内框控件自身的悬停/选中态） */
/* ---- 页面标题（顶栏左侧：正文同字号、免加粗） ---- */
/* 标题块拆双按钮：菜单钮（page-menu）开合栏目菜单；标题文字（page-home）回栏目首页/刷新（页面通过 EN.boot 的 goHome 注册行为） */
.page-title{display:inline-flex;align-items:center;gap:3px;min-width:0;max-width:100%;margin:0;flex:0 1 auto;position:relative}
.page-title button{border:0;background:transparent;font-family:inherit;font-size:1rem;line-height:1.5;font-weight:400;color:var(--foreground);user-select:none;cursor:pointer;padding:2px 0;border-radius:8px;-webkit-tap-highlight-color:transparent}
.page-home{padding:2px 6px 2px 0}
/* 菜单钮（2026-09-06）：原返回箭头改为栏目菜单开合钮，右下悬浮球同步移除。
   层级压过各 fixed 浮层（confetti 50/acct-modal 60/pd-ovl 90），点击不被蒙层遮挡；
   热区 20×32；仍低于游客门禁 stage-mask(200) 与 SW 更新条(9999) */
.page-title .page-menu{position:relative;z-index:100;padding:6px 6px 6px 0}
.page-menu svg{flex-shrink:0;color:var(--muted-foreground);transition:color .15s ease}
.page-menu:hover svg{color:var(--primary)}
.page-menu[data-dom-id="nav-menu-toggle"][aria-expanded="true"] svg{color:var(--foreground)}
.page-title-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 未分层样式压过 Tailwind utilities @layer，显式保证 hidden 生效 */
.card-panel.hidden{display:none}
.btn-primary{padding:8px 20px;border-radius:12px;font-size:0.875rem;font-weight:500;background:var(--primary);color:var(--primary-foreground);transition:opacity .15s ease}
.btn-primary:hover{opacity:.85}
.en-footer{text-align:center;padding:8px 0 12px;font-size:0.6875rem;color:var(--muted-foreground);opacity:.7}
.en-footer a{color:inherit;text-decoration:none;transition:color .15s ease}
.en-footer a:hover{color:var(--foreground);text-decoration:underline}
.en-footer-copy{margin-top:4px;letter-spacing:.02em}
/* 2026-09-08 用户裁决改判：移动端整个页脚不显示（原精简页脚方案作废），备案号/协议链接仅桌面端可见 */
@media (max-width:768px){
  .en-footer{display:none}
}
.en-footer-sep{margin:0 2px}
/* 2026-09-09 协议勾选行跨环境对齐：原生 checkbox 盒高随浏览器/系统/微信内核漂移，margin-top 手调无法普适；
   改自绘勾选盒（appearance:none 固定 16px）+ 文字 line-height:16px 等高锚定，两盒皆固定尺寸与环境解耦 */
.acct-legal{display:flex;align-items:flex-start;gap:6px;cursor:pointer;margin:2px 0 8px 44px;font-size:.6875rem;color:var(--muted-foreground);opacity:.85}
.acct-legal input[type=checkbox]{appearance:none;-webkit-appearance:none;flex:none;width:16px;height:16px;margin:0;border:1.5px solid var(--muted-foreground);border-radius:4.5px;background:transparent;background-repeat:no-repeat;background-position:center;background-size:10px 8px;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}
.acct-legal input[type=checkbox]:checked{background-color:var(--primary);border-color:var(--primary);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 8'%3E%3Cpath d='M1 4.2 3.8 7 9 1.2' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.acct-legal input[type=checkbox]:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.acct-legal span{line-height:16px}
.acct-legal a{color:inherit;text-decoration:underline}
.btn-outline{padding:8px 16px;border-radius:12px;font-size:0.875rem;border:1px solid var(--border);color:var(--muted-foreground);transition:opacity .15s ease}
.btn-outline:hover{opacity:.85}
/* ---- 毛玻璃强制选择模态（总结面板） ---- */
#summary-panel:not(.hidden){display:flex;position:fixed;inset:0;z-index:40;align-items:center;justify-content:center;padding:20px;background:rgba(23,19,15,.3)}
.dark #summary-panel:not(.hidden){background:rgba(0,0,0,.5)}
.modal-glass{width:100%;max-width:400px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:28px 24px;border-radius:16px;border:1px solid rgba(255,255,255,.45);background:rgba(243,240,235,.72);backdrop-filter:blur(24px) saturate(1.5);-webkit-backdrop-filter:blur(24px) saturate(1.5);box-shadow:0 24px 60px rgba(0,0,0,.28);animation:modalPop .35s cubic-bezier(.34,1.3,.64,1)}
.dark .modal-glass{background:rgba(42,37,33,.72);border-color:rgba(255,255,255,.08)}
@keyframes modalPop{from{opacity:0;transform:translateY(14px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}
.tips-bubble{position:absolute;left:50%;transform:translate(-50%,-100%);top:-12px;padding:8px 16px;border-radius:12px;border:1px solid var(--border);white-space:normal;text-align:center;z-index:20;background:var(--popover);color:var(--popover-foreground)}
.text-input{width:90%;max-width:320px;padding:12px 20px;text-align:center;font-size:1.125rem;outline:none;transition:border-color .15s ease;border:1px solid var(--input);border-radius:var(--radius);background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);color:var(--foreground)}
.text-input.narrow{max-width:280px}
.word-slot{display:flex;flex-direction:column;align-items:center;gap:4px}
.word-slot-ch{font-family:var(--font-mono,monospace);font-weight:700;height:28px;line-height:28px;font-size:1.125rem;min-width:22px;text-align:center}
.word-slot-line{height:2px;width:20px;border-radius:99px;background:var(--border);transition:background .2s ease}
/* 2026-09-06 拼写卡助记词段遮盖：色块宽度即词长线索、内容不泄底；点按揭看（.on 与对照卡 font-mono/600 同观感） */
.mn-mask{font-family:var(--font-mono,monospace);font-weight:600;color:transparent;background:color-mix(in srgb,var(--muted-foreground) 45%,transparent);border-radius:5px;padding:0 3px;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,color .15s ease}
.mn-mask.on{color:var(--foreground);background:transparent}
.sent-slot{display:flex;flex-direction:column;align-items:center;gap:6px}

/* ---- 短语分组框（句子完成后：多词短语槽位框起来，标签挂框沿） ---- */
.phrase-group{position:relative;display:flex;align-items:flex-end;gap:14px;padding:20px 12px 4px;margin:6px 2px;border:1px solid var(--muted-foreground);border-radius:12px;animation:fadeInUp .35s ease}
.phrase-group-label{position:absolute;top:-9px;left:12px;padding:1px 9px;border-radius:99px;background:var(--card);color:var(--foreground);font-size:0.6875rem;font-weight:600;line-height:1.5;white-space:nowrap;pointer-events:none}
.phrase-group-label.skel{color:var(--muted-foreground);z-index:1}

/* ---- 骨架成分框（主语/谓语/宾语/状语，大框；短语框可嵌套其中） ---- */
.skeleton-group{position:relative;display:flex;align-items:flex-end;flex-wrap:wrap;justify-content:center;gap:14px;padding:22px 14px 6px;margin:10px 3px;border:1px dashed var(--muted-foreground);border-radius:14px;animation:fadeInUp .35s ease}
.skeleton-group>.phrase-group{margin:0 1px}
/* 骨架成分着色：主语蓝/谓语绿/宾语表语紫/状语青（同色系配极淡底），其余灰 */
.skeleton-group.skel-subject{border-color:rgba(59,130,246,.55);background:rgba(59,130,246,.05)}
.skeleton-group.skel-subject .phrase-group-label.skel{color:#3b82f6}
.skeleton-group.skel-verb{border-color:rgba(16,185,129,.55);background:rgba(16,185,129,.05)}
.skeleton-group.skel-verb .phrase-group-label.skel{color:#10b981}
.skeleton-group.skel-object{border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.05)}
.skeleton-group.skel-object .phrase-group-label.skel{color:#8b5cf6}
.skeleton-group.skel-adv{border-color:rgba(6,182,212,.55);background:rgba(6,182,212,.05)}
.skeleton-group.skel-adv .phrase-group-label.skel{color:#06b6d4}
@media (max-width:640px){
  .phrase-group{gap:10px;padding:18px 8px 2px;margin:5px 1px}
  .skeleton-group{gap:10px;padding:20px 10px 4px;margin:8px 2px}
}
.sent-slot-text{font-size:1.125rem;font-weight:600;height:28px;line-height:28px;min-width:32px;text-align:center}
.sent-slot-line{height:2px;width:56px;border-radius:99px;background:var(--border);transition:background .2s ease}
.timer-chip{display:flex;align-items:center;gap:6px;padding:2px 8px;border-radius:99px;background:var(--muted);transition:background .2s ease;flex-shrink:0}
/* 评级文字：无内容时不占位（不产生空块），有评级时才展开 */
.timer-chip .grade-inline-hidden{display:none}
.timer-chip .grade-inline-show{display:inline;animation:gradeIn .25s ease}
@keyframes gradeIn{from{opacity:0;transform:translateX(2px)}to{opacity:1;transform:none}}
/* 复习徽标：FSRS 到期回访重进队列的标识（把调度行为变成用户可感知的信号，与评级色系同为绿色系） */
.rv-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:99px;background:rgba(19,177,90,.12);color:var(--chart-3);font-size:11px;font-weight:600;white-space:nowrap;flex-shrink:0;line-height:1.4}
.rv-badge svg{width:11px;height:11px;flex-shrink:0}
.rv-badge .rv-count{font-weight:700;font-variant-numeric:tabular-nums}
.nw-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:99px;background:var(--accent);color:var(--primary);font-size:11px;font-weight:600;white-space:nowrap;flex-shrink:0;line-height:1.4}
.nw-badge svg{width:11px;height:11px;flex-shrink:0}
/* 错题徽标：错题池未清的词 / 错句·模考优先句重进队列的标识（红色系提示「曾答错」，与复习绿/新词描边区分） */
.wrong-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:99px;background:rgba(239,68,68,.1);color:var(--destructive);font-size:11px;font-weight:600;white-space:nowrap;flex-shrink:0;line-height:1.4}
.wrong-badge svg{width:11px;height:11px;flex-shrink:0}
/* 徽标隐藏：Tailwind browser 版不生成 .hidden 规则，且其 STYLE 注入在 styles.css 之前——
   必须显式写 .hidden 覆盖（同 .card-panel.hidden / .pd-trkb.hidden 惯例），否则带 hidden 类的徽标仍渲染 */
.rv-badge.hidden,.nw-badge.hidden,.wrong-badge.hidden{display:none}
/* 模式切换（翻译/听写）：句页内子模式切换，与 plan-tabs 同款分段控件口径 */
.mode-tabs{display:inline-flex;align-items:center;gap:4px;padding:3px;border-radius:99px;background:var(--muted)}
.mode-tab{padding:5px 16px;border:none;border-radius:99px;background:transparent;font-size:0.75rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background .2s ease,color .2s ease;-webkit-tap-highlight-color:transparent}
.mode-tab:hover{color:var(--foreground)}
.mode-tab.active{background:var(--card);color:var(--foreground);font-weight:600}
/* 句卡朗读（2026-09-06 V9）：重听喇叭按钮/计数已移除——点击中文题面即朗读，
   听写中每次点击计入重听次数（参与评级，影响 FSRS 调度参数） */
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---- 学业分析中心（paper-analysis.js 配套） ---- */
.pa-card{padding:18px 20px;gap:14px;text-align:left}
.pa-cardtitle{display:flex;align-items:center;gap:8px;font-size:0.9375rem;font-weight:700;color:var(--foreground)}
.pa-cardtitle svg{color:var(--primary);flex-shrink:0}
.pa-cardsub{font-size:0.75rem;color:var(--muted-foreground);margin-top:-9px}
.pa-cardchip{margin-left:auto;font-size:0.6875rem;padding:2px 10px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);white-space:nowrap}
.pa-chart{width:100%}
.pa-chart-radar{height:288px}
.pa-chart-curve{height:225px}
.pa-chart-base{height:170px}
.pa-chart-error{height:200px}
.pa-chart-qtype{height:200px}
.pa-dual{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}
.pa-chartfail{display:flex;align-items:center;justify-content:center;height:100%;font-size:0.75rem;color:var(--muted-foreground)}
/* 分维度 sparkline 行（维度名 HTML 文本 + 迷你 ECharts） */
.pa-sparks{display:flex;flex-direction:column;gap:5px;width:100%;border-top:1px dashed var(--border);padding-top:10px;margin-top:2px}
.pa-sparkstitle{font-size:0.6875rem;color:var(--muted-foreground)}
.pa-sparksrow{display:flex;gap:10px}
.pa-sparkcell{flex:1;min-width:0;display:flex;align-items:center;gap:6px}
.pa-sparkname{flex:none;font-size:0.6875rem;font-weight:700}
.pa-sparkchart{flex:1;min-width:0;height:26px}
.pa-warn{display:flex;gap:8px;align-items:flex-start;font-size:0.75rem;line-height:1.7;color:var(--foreground);background:color-mix(in srgb,var(--destructive) 7%,transparent);border:1px solid color-mix(in srgb,var(--destructive) 22%,transparent);border-radius:12px;padding:9px 12px;width:100%}
.pa-warn svg{flex:none;color:var(--destructive);margin-top:2px}
.pa-empty{display:flex;flex-direction:column;align-items:center;gap:5px;padding:20px 0;width:100%}
.pa-emptyicon{color:var(--muted-foreground);opacity:.55}
.pa-empty p{font-size:0.8125rem;color:var(--foreground)}
.pa-empty small{font-size:0.6875rem;color:var(--muted-foreground)}
.pa-route{display:flex;flex-direction:column;width:100%}
.pa-rstop{display:flex;align-items:center;gap:10px;padding:9px 4px;font-size:0.8125rem}
.pa-rstop+.pa-rstop{border-top:1px solid var(--border)}
.pa-rno{flex:none;width:22px;height:22px;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:0.6875rem;font-weight:700;background:var(--muted);color:var(--muted-foreground)}
.pa-rmain{flex:1;min-width:0;color:var(--foreground)}
.pa-rgain{flex:none;font-weight:700;color:var(--primary);font-variant-numeric:tabular-nums;white-space:nowrap}
.pa-raction{flex:none;font-size:0.6875rem;padding:4px 11px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;transition:border-color .15s ease,color .15s ease}
.pa-raction:hover{border-color:var(--primary);color:var(--primary)}
.pa-rfoot{font-size:0.6875rem;color:var(--muted-foreground);width:100%}

/* ---- 学习计划卡（规划页总览）：7 日日历 + 今日清单 ---- */
#plan-daily-mount{min-width:0}
.pl-weekhead{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;width:100%;margin-top:2px}
.pl-weekhead span{text-align:center;font-size:0.625rem;color:var(--muted-foreground)}
.pl-week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;width:100%}
.pl-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:7px 0 6px;border-radius:10px;background:var(--muted);cursor:default;min-width:0}
.pl-day.today{background:var(--primary);color:var(--primary-foreground)}
.pl-daynum{font-size:0.75rem;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;color:var(--foreground)}
.pl-day.today .pl-daynum{color:var(--primary-foreground)}
.pl-daymarks{display:flex;align-items:center;gap:2px;height:4px}
.pl-daymarks i{width:4px;height:4px;border-radius:99px;background:var(--border)}
.pl-daymarks i.on{background:var(--primary)}
.pl-day.today .pl-daymarks i{background:rgba(255,255,255,.35)}
.pl-day.today .pl-daymarks i.on{background:var(--primary-foreground)}
.pl-daypaper{display:inline-flex;color:var(--primary);line-height:1}
.pl-day.today .pl-daypaper{color:var(--primary-foreground)}
.pl-day:hover .pl-tip{display:block}
.pl-day:focus{outline:none}
.pl-day:focus .pl-tip{display:block}
.pl-day .pl-tip{white-space:pre-line;max-width:170px}
.pl-sec{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;margin-top:10px}
.pl-secname{font-size:0.8125rem;font-weight:700;color:var(--foreground)}
.pl-secpct{font-size:0.75rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.pl-bar{width:100%;height:4px;border-radius:99px;background:var(--muted);overflow:hidden;margin-bottom:12px}
.pl-bar i{display:block;height:100%;border-radius:99px;background:var(--primary);transition:width .3s ease}
.pl-task{display:flex;align-items:center;gap:10px;font-size:0.8125rem}
.pl-check{flex:none;color:var(--border);display:flex;align-items:center}
.pl-task.done .pl-check{color:var(--primary)}
.pl-main{flex:1;min-width:0;display:flex;align-items:center;gap:5px}
.pl-name{flex:none;font-weight:600;color:var(--foreground);white-space:nowrap}
.pl-prog{flex:none;font-size:0.75rem;color:var(--foreground);font-variant-numeric:tabular-nums;white-space:nowrap}
.pl-task.done .pl-prog,.pl-task.done .pl-name{color:var(--muted-foreground)}
.pl-chipwrap{display:inline-flex;align-items:center;gap:5px;min-width:0}
.pl-weekfoot{display:flex;align-items:center;gap:8px;width:100%;margin-top:12px;padding-top:10px;border-top:1px solid var(--border);flex-wrap:wrap}
.pl-weekfoot .pl-sec{margin-top:0}
.pl-wtag{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:99px;border:1px solid var(--border);font-size:0.6875rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer;transition:color .15s ease,border-color .15s ease;-webkit-tap-highlight-color:transparent}
.pl-wtag:not(.on):hover{color:var(--foreground);border-color:var(--primary)}
.pl-wtag.on{border-color:var(--primary);color:var(--primary)}
.pl-info{position:relative;flex:none;display:inline-flex;align-items:center;color:var(--muted-foreground);cursor:help;-webkit-tap-highlight-color:transparent}
.pl-info svg{pointer-events:none}
.pl-tip{display:none;position:absolute;left:50%;top:calc(100% + 7px);transform:translateX(-50%);z-index:60;width:max-content;max-width:230px;padding:7px 10px;border-radius:8px;background:var(--foreground);color:var(--background);font-size:0.6875rem;line-height:1.5;font-weight:400;white-space:normal;text-align:left;box-shadow:0 4px 14px rgba(0,0,0,.18);pointer-events:none}
.pl-tip::before{content:'';position:absolute;left:50%;top:-4px;transform:translateX(-50%) rotate(45deg);width:8px;height:8px;background:var(--foreground)}
.pl-info:hover .pl-tip,.pl-info:focus .pl-tip{display:block;animation:pl-tip-in .18s ease}
.pl-info:focus{outline:none}
.pl-go{flex:none;display:inline-flex;align-items:center;font-size:0.6875rem;padding:3px 10px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;transition:border-color .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent}
.pl-go:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}
.pl-go:disabled{cursor:default;opacity:.7}
/* ---- 明日预告（总纲 5.2 预承诺 · 与今日并列）：只呈现，无行动入口 ---- */
.pl-wtag-row{display:flex;align-items:center;gap:8px;width:100%;flex-wrap:wrap}

/* ---- 首次进入：学阶选择层 ---- */
.stage-mask{position:fixed;inset:0;z-index:200;background:var(--background);display:flex;align-items:center;justify-content:center;padding:20px;overflow:auto}
.stage-box{width:100%;max-width:560px;display:flex;flex-direction:column;gap:16px;margin:auto}
.stage-box h2{font-size:1.25rem;font-weight:700;color:var(--foreground);margin:0}
.stage-sub{font-size:0.8125rem;color:var(--muted-foreground);margin:0 0 -6px}
.stage-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.stage-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:14px 14px;border-radius:12px;border:1px solid var(--border);background:var(--card);cursor:pointer;text-align:left;transition:border-color .15s ease,background .15s ease;-webkit-tap-highlight-color:transparent}
.stage-card b{font-size:1rem;color:var(--foreground)}
.stage-card span{font-size:0.6875rem;color:var(--muted-foreground)}
.stage-card:hover{border-color:var(--muted-foreground)}
.stage-card.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 7%,var(--card))}
.stage-card.locked{opacity:.55;cursor:not-allowed}
.stage-card.locked:hover{border-color:var(--border)}
.stage-locktag{font-style:normal;font-size:0.5625rem;padding:2px 7px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);white-space:nowrap;flex:none;margin-top:2px}
.stage-scores{display:none;flex-direction:column;gap:8px}
.stage-scores.show{display:flex}
.stage-scorelabel{font-size:0.8125rem;font-weight:600;color:var(--foreground)}
.stage-scorerow{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.stage-skipnote{font-size:0.75rem;color:var(--muted-foreground)}
.stage-date-input{padding:5px 10px;border-radius:99px;border:1px dashed var(--border);background:var(--card);font-size:0.8125rem;color:var(--muted-foreground);outline:none;font-family:inherit}
.stage-score{padding:6px 14px;border-radius:99px;border:1px solid var(--border);background:var(--card);font-size:0.8125rem;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;transition:border-color .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent}
.stage-score:hover{border-color:var(--muted-foreground);color:var(--foreground)}
.stage-score.on{border-color:var(--primary);color:var(--primary);font-weight:600}
.stage-go{display:inline-flex;align-items:center;justify-content:center;padding:10px 0;border-radius:10px;border:none;background:var(--primary);color:var(--primary-foreground);font-size:0.9375rem;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent}
.stage-go:hover{filter:brightness(1.06)}
.stage-go:disabled{opacity:.45;cursor:not-allowed;filter:none}
.pl-tmr-item{display:inline-flex;align-items:baseline;gap:5px;padding:3px 10px;border-radius:99px;border:1px solid var(--border);font-size:0.6875rem;color:var(--muted-foreground);white-space:nowrap;font-variant-numeric:tabular-nums}
.pl-tmr-item b{color:var(--primary);font-weight:700;font-size:0.8125rem;line-height:1}
.pl-tmr-note{width:100%;font-size:0.6875rem;color:var(--muted-foreground)}

/* ---- 进度推演卡 + 学习记录（P0-4/P0-5） ---- */
.pl-prog-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.pl-prog-num{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1;color:var(--foreground)}
.pl-prog-unit{font-size:0.6875rem;color:var(--muted-foreground)}
.pl-prog-bar{width:100%;height:8px;border-radius:99px;background:var(--muted);overflow:hidden;margin-top:8px}
.pl-prog-bar i{display:block;height:100%;border-radius:99px;background:var(--primary);transition:width .3s ease}
.pl-prog-dates{display:flex;align-items:baseline;justify-content:space-between;gap:8px;width:100%;margin-top:7px;font-size:0.6875rem}
.pl-prog-now{color:var(--muted-foreground)}
.pl-prog-fin{color:var(--muted-foreground);font-variant-numeric:tabular-nums;text-align:right}
.pl-prog-fin.behind{color:var(--destructive);font-weight:600}
.pl-prog-chart{width:100%;height:118px;margin-top:6px}
.pl-rec-row{display:flex;align-items:center;gap:8px;width:100%;margin-top:10px;flex-wrap:wrap}
.pl-rec{display:inline-flex;align-items:baseline;gap:4px;padding:3px 11px;border-radius:99px;border:1px solid var(--border);font-size:0.6875rem;color:var(--muted-foreground);white-space:nowrap;transition:border-color .15s ease}
.pl-rec:hover{border-color:var(--primary)}
.pl-rec b{color:var(--primary);font-weight:700;font-size:0.8125rem;line-height:1;font-variant-numeric:tabular-nums}
@keyframes pl-tip-in{from{opacity:0}}
@media (hover:none){
  .pl-info:hover .pl-tip,.pl-info:focus .pl-tip{display:none}
  .pl-info.tip-open .pl-tip{display:block;position:fixed;left:16px;right:16px;bottom:24px;top:auto;width:auto;max-width:none;transform:none;animation:pl-tip-in .18s ease}
  .pl-info.tip-open .pl-tip::before{display:none}
}

/* ---- 计划页一级视图标签（计划 / 知识库 / 白皮书）：分段控件 ---- */
.plan-tabs{display:flex;gap:4px;width:100%;padding:4px;border-radius:99px;background:var(--muted)}
.plan-tab{flex:1 1 0;padding:7px 0;border:none;border-radius:99px;background:transparent;font-size:0.875rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;transition:background .2s ease,color .2s ease,box-shadow .2s ease;-webkit-tap-highlight-color:transparent}
.plan-tab:hover{color:var(--foreground)}
.plan-tab.active{background:var(--card);color:var(--foreground);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.12)}

/* ---- 计划页二级标签（知识库：句型/题型/词汇） ---- */
.plan-subtabs{display:flex;gap:4px;width:100%;padding:3px;border-radius:10px;background:var(--muted)}
.plan-subtab{flex:1 1 0;padding:5px 0;border:none;border-radius:8px;background:transparent;font-size:0.8125rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;transition:background .2s ease,color .2s ease;-webkit-tap-highlight-color:transparent}
.plan-subtab:hover{color:var(--foreground)}
.plan-subtab.active{background:var(--card);color:var(--foreground);font-weight:600}

/* ---- 词汇库：统计卡 + FSRS 状态分布 ---- */
.vocab-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.vocab-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:12px 4px 10px;border-radius:12px;background:var(--card);border:1px solid var(--border);min-width:0;transition:border-color .15s ease}
.vocab-card:hover{border-color:var(--primary)}
.vocab-card-num{font-size:1.25rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}
.vocab-card-label{font-size:0.75rem;color:var(--muted-foreground)}
.vocab-card-sub{font-size:0.625rem;color:var(--muted-foreground);opacity:.8;text-align:center;max-width:100%;overflow-x:auto;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none;text-overflow:clip}
.vocab-card-sub::-webkit-scrollbar{display:none}
.vocab-stack{display:flex;width:100%;height:10px;border-radius:99px;overflow:hidden;gap:2px}
.vocab-seg{min-width:0;transition:flex .3s ease}
.vocab-legend{display:flex;flex-wrap:wrap;gap:6px 14px;width:100%}
.vocab-lg-row{display:flex;align-items:center;gap:8px}
.vocab-lg-dot{width:8px;height:8px;border-radius:99px;flex-shrink:0}
.vocab-lg-label{font-size:0.75rem;color:var(--muted-foreground);width:44px;flex-shrink:0}
.vocab-lg-track{flex:1;height:6px;border-radius:99px;background:var(--muted);overflow:hidden}
.vocab-lg-fill{height:100%;border-radius:99px;transition:width .3s ease}
.vocab-lg-val{font-size:0.75rem;font-variant-numeric:tabular-nums;color:var(--foreground);width:52px;text-align:right;flex-shrink:0}
@media (max-width:480px){
  .vocab-cards{grid-template-columns:repeat(2,1fr)}
}
@media (min-width:481px) and (max-width:680px){
  .vocab-cards{grid-template-columns:repeat(3,1fr)}
}

/* ---- 生词本（词汇库视图内）：三通道汇入列表 ---- */
.wb-list{display:flex;flex-direction:column;gap:6px;width:100%;max-height:340px;overflow-y:auto;padding-right:2px}
.wb-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--border);border-radius:11px;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);min-width:0;transition:border-color .15s ease}
.wb-row:hover{border-color:var(--primary)}
.wb-word{border:none;background:transparent;padding:0;font-size:0.875rem;font-weight:600;color:var(--foreground);cursor:pointer;flex-shrink:0;max-width:38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:opacity .15s ease;-webkit-tap-highlight-color:transparent}
.wb-word:hover{opacity:.65}
.wb-mid{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.wb-gloss{font-size:0.6875rem;color:var(--muted-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-meta{display:flex;align-items:center;gap:8px;font-size:0.625rem;color:var(--muted-foreground);flex-wrap:wrap}
.wb-src{color:var(--primary)}
.wb-date{font-variant-numeric:tabular-nums;opacity:.8}
.wb-del{border:none;background:transparent;padding:4px;border-radius:8px;color:var(--muted-foreground);cursor:pointer;flex-shrink:0;display:inline-flex;align-items:center;opacity:.55;transition:opacity .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent}
.wb-del:hover{opacity:1;color:var(--destructive)}
.wb-empty{display:flex;flex-direction:column;align-items:center;gap:4px;padding:28px 0 22px}
.wb-empty-main{font-size:0.8125rem;font-weight:500;color:var(--foreground)}
.wb-empty-sub{font-size:0.6875rem;color:var(--muted-foreground);text-align:center}
.wb-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;margin-top:2px}
.wb-foot-note{font-size:0.6875rem;color:var(--muted-foreground)}
.wb-go{white-space:nowrap;padding:7px 18px}

/* ---- 白皮书：统计图表网格 ---- */
.wp-grid{display:grid;grid-template-columns:1fr;gap:12px}
.wp-card{display:flex;flex-direction:column;border-radius:14px;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);border:1px solid var(--border);padding:12px 14px 8px;min-width:0;transition:border-color .15s ease}
.wp-card:hover{border-color:var(--primary)}
.wp-card-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.wp-card-title{font-size:0.875rem;font-weight:600}
.wp-card-sub{font-size:0.6875rem;color:var(--muted-foreground)}
.wp-chart{width:100%;height:230px;margin-top:4px}
@media (min-width:560px){
  .wp-grid{grid-template-columns:1fr 1fr}
  .wp-card-span2{grid-column:span 2}
}
/* 白皮书封面页：生成封面图列表（一行三列：图 + 标题 + 简介） */
.wp-cover-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;width:100%}
@media (max-width:559px){.wp-cover-grid{grid-template-columns:repeat(2,1fr)}}
.wp-cover-card{display:flex;flex-direction:column;width:100%;border:1px solid var(--border);border-radius:14px;overflow:hidden;cursor:pointer;text-align:left;padding:0;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);transition:border-color .15s ease,transform .15s ease;-webkit-tap-highlight-color:transparent}
.wp-cover-card:hover{border-color:var(--primary)}
.wp-cover-card:active{transform:scale(.985)}
.wp-cover-imgwrap{position:relative;width:100%;aspect-ratio:3/4;overflow:hidden;background:var(--muted);flex-shrink:0}
.wp-cover-img{width:100%;height:100%;object-fit:cover;display:block}
/* 2026-09-02 书架改造：SVG 程序化封面 + 书架头 + 书页 iframe */
.wp-cover-head{width:100%;display:flex;flex-direction:column;gap:4px;margin-bottom:2px}
.wp-cover-h2{margin:0;font-size:1.125rem;font-weight:700;color:var(--foreground)}
.wp-cover-sub2{margin:0;font-size:0.75rem;color:var(--muted-foreground)}
.wp-cover-svg{width:100%;height:100%}
.wp-cover-svg svg{width:100%;height:100%;display:block}
.wp-cover-booktitle{font-size:0.8125rem;font-weight:700;color:var(--foreground);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.wp-cover-meta{font-size:0.65rem;color:var(--muted-foreground)}
.wp-book-bar{width:100%;display:flex;align-items:center;gap:12px;margin-bottom:10px}
.wp-book-frame{width:100%;height:calc(100vh - 170px);min-height:420px;border:1px solid var(--border);border-radius:14px;background:#fff}
.wp-book-title{font-size:0.9375rem;font-weight:700;color:var(--foreground);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wp-cover-imgwrap::before{content:'';position:absolute;left:0;right:0;top:0;height:52%;background:linear-gradient(180deg,rgba(0,0,0,.42),rgba(0,0,0,0));pointer-events:none;z-index:1}
.wp-cover-title{position:absolute;left:0;right:0;top:0;z-index:2;padding:13px 12px 0;color:#fff;font-size:26px;font-weight:700;line-height:1.55;text-align:left;text-shadow:0 1px 6px rgba(0,0,0,.45);letter-spacing:.01em}
.wp-cover-body{display:flex;flex-direction:column;gap:4px;padding:10px 12px 12px;flex:1;min-width:0}
.wp-cover-sub{font-size:0.6875rem;color:var(--muted-foreground);line-height:1.5}
/* 白皮书报告头：H1 + 元信息 + 口径说明 */
.wp-report-head{display:flex;flex-direction:column;gap:10px;width:100%;padding:2px 0}
.wp-report-back{display:inline-flex;align-items:center;gap:5px;align-self:flex-start;border:none;background:transparent;padding:4px 10px;border-radius:99px;font-size:0.6875rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;flex-shrink:0;transition:color .15s ease,background .15s ease;-webkit-tap-highlight-color:transparent}
.wp-report-back:hover{color:var(--primary);background:color-mix(in srgb,var(--primary) 6%,transparent)}
.wp-report-h1{font-size:1.375rem;font-weight:700;text-align:center;line-height:1.4;color:var(--foreground);margin:4px 0 0;letter-spacing:.01em}
.wp-report-meta{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;font-size:0.6875rem;color:var(--muted-foreground)}
.wp-report-sep{width:3px;height:3px;border-radius:99px;background:var(--muted-foreground);flex-shrink:0}
.wp-report-intro{display:flex;flex-direction:column;gap:8px;width:100%;border-top:1px dashed var(--border);border-bottom:1px dashed var(--border);padding:12px 2px;margin-top:4px}
.wp-report-line{font-size:0.75rem;line-height:1.75;color:var(--muted-foreground);text-align:left;margin:0}
.wp-report-line b{color:var(--foreground);font-weight:600;margin-right:6px}
.wp-back-btn{display:inline-flex;align-items:center;gap:6px;margin:8px auto 0;padding:7px 18px;border-radius:99px;border:1px solid var(--border);background:transparent;font-size:0.75rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;flex-shrink:0;transition:border-color .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent}
.wp-back-btn:hover{border-color:var(--primary);color:var(--primary)}
.plan-view-in{animation:planViewIn .25s ease}
@keyframes planViewIn{from{opacity:0}to{opacity:1}}

/* ---- 知识点库（规划页 · 知识点标签）：状态筛选 + 排序 + 长方形块列表 ---- */
/* ---- 知识库统一面板（2026-09-02 扁平化）：单卡分区,总览/清单两段,细分隔线 ---- */
.kb-panel{width:100%;border:1px solid var(--border);border-radius:16px;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);overflow:hidden}
.kb-sec{padding:14px 18px;display:flex;flex-direction:column;gap:10px}
.kb-sec + .kb-sec{border-top:1px solid var(--border)}
.kb-sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.kb-sec-title{font-size:0.72rem;font-weight:700;letter-spacing:.14em;color:var(--muted-foreground)}
.kb-sec-meta{font-size:0.7rem;color:var(--muted-foreground)}
.kb-kpis{display:flex;flex-wrap:wrap;gap:6px 22px;width:100%}
.kb-kpi{display:flex;align-items:baseline;gap:6px;min-width:0}
.kb-kpi b{font-size:1.0625rem;font-weight:700;color:var(--foreground);font-variant-numeric:tabular-nums}
.kb-kpi span{font-size:0.7rem;color:var(--muted-foreground);white-space:nowrap}
.kb-legend{display:flex;flex-wrap:wrap;gap:6px 14px;width:100%}
.kp-chiprow{display:flex;align-items:center;gap:6px;width:100%;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}
.kp-chiprow::-webkit-scrollbar{display:none}
.kp-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:99px;border:1px solid var(--border);background:transparent;font-size:0.75rem;font-weight:500;color:var(--muted-foreground);cursor:pointer;white-space:nowrap;flex-shrink:0;transition:border-color .15s ease,color .15s ease,background .15s ease;-webkit-tap-highlight-color:transparent}
.kp-chip:hover{border-color:var(--primary);color:var(--foreground)}
.kp-chip.active{border-color:var(--primary);color:var(--primary);background:color-mix(in srgb,var(--primary) 9%,transparent);font-weight:600}
.kp-dot{width:7px;height:7px;border-radius:99px;flex-shrink:0}
.kp-meta-line{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;flex-wrap:wrap}
.kp-stats{font-size:0.75rem;color:var(--muted-foreground);white-space:nowrap}
.kp-list{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;width:100%}
@media (min-width:560px){
  .kp-list{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
}
.kp-item{position:relative;display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;padding:11px 14px;border:1px solid var(--border);border-radius:12px;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);transition:border-color .15s ease}
.kp-item:hover{border-color:var(--primary)}
.kp-main{display:flex;flex-direction:column;gap:0;min-width:0;flex:1}
.kp-top{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0}
.kp-name{font-size:0.875rem;font-weight:500;color:var(--foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.kp-val{font-size:1.0625rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;flex-shrink:0}
.kp-track{width:100%;height:5px;border-radius:99px;background:var(--muted);overflow:hidden;margin:6px 0 5px}
.kp-fill{height:100%;border-radius:99px;transition:width .3s ease}
.kp-sub{font-size:0.6875rem;color:var(--muted-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kp-metaline{font-size:0.6875rem;color:var(--muted-foreground);width:100%;margin:0}
/* 句型卡点击展开例句（kp-item-ex）：默认收起，open 时平铺例句区 */
.kp-item-ex{cursor:pointer;flex-wrap:wrap;align-items:flex-start} /* pill 顶对齐恒定：展开前后位置不动（原收起 center/展开 flex-start 切换致跳位） */
.kp-example{display:none;width:100%;margin-top:9px;padding-top:9px;border-top:1px solid var(--border);flex-direction:column;gap:3px;cursor:default}
.kp-item-ex.open .kp-example{display:flex}
.kp-item-ex.open{align-items:flex-start}
.kp-item-ex.open .kp-main{flex:1}
.kp-example-en{font-size:0.8125rem;color:var(--foreground);line-height:1.5}
.kp-example-zh{font-size:0.75rem;color:var(--muted-foreground);line-height:1.5}
.kp-example-note{font-size:0.6875rem;color:var(--muted-foreground);line-height:1.5;padding-top:2px}

/* ---- 词汇库：全词列举网格 ---- */
.vocab-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;width:100%}
.vocab-cell{display:flex;flex-direction:column;gap:4px;padding:9px 11px;border:1px solid var(--border);border-radius:11px;background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);min-width:0;position:relative;transition:border-color .15s ease}
.vocab-cell:hover{border-color:var(--primary)}
.vocab-cell-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-width:0}
.vocab-word{font-size:0.875rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.vocab-count{font-size:0.6875rem;color:var(--muted-foreground);flex-shrink:0;font-variant-numeric:tabular-nums}
.vocab-gloss{font-size:0.6875rem;color:var(--muted-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vocab-state-track{width:100%;height:4px;border-radius:99px;background:var(--muted);overflow:hidden}
.vocab-state-fill{height:100%;border-radius:99px}
.kp-pill{display:inline-flex;align-items:center;padding:3px 11px;border-radius:99px;font-size:0.6875rem;font-weight:500;white-space:nowrap;flex-shrink:0;background:var(--muted);color:var(--muted-foreground)}
.kp-empty{padding:26px 0;width:100%;text-align:center;font-size:0.75rem;color:var(--muted-foreground)}
.kp-demonote{display:flex;align-items:center;gap:6px;font-size:0.6875rem;color:var(--muted-foreground);width:100%}
.kp-demonote svg{flex:none;opacity:.7}


/* ---- 出题配置（paper.html） ---- */
.pc-title{font-size:0.9375rem;font-weight:700;color:var(--foreground)}
.pc-opts{display:flex;flex-direction:column;gap:9px;width:100%}
.pc-opt{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:12px;border:1.5px solid var(--border);background:transparent;cursor:pointer;text-align:left;transition:border-color .15s ease,background .15s ease;font-family:inherit}
.pc-opt:hover{border-color:var(--muted-foreground)}
.pc-opt.locked{cursor:not-allowed;opacity:.62}
.pc-opt.locked .pc-optmain span{color:var(--muted-foreground)}
.pc-opt.sel{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 7%,transparent)}
.pc-radio{flex:none;width:16px;height:16px;border-radius:99px;border:2px solid var(--muted-foreground);margin-top:2px;position:relative;transition:border-color .15s ease}
.pc-opt.sel .pc-radio{border-color:var(--primary)}
.pc-opt.sel .pc-radio::after{content:'';position:absolute;inset:2px;border-radius:99px;background:var(--primary)}
.pc-optmain{flex:1;min-width:0}
.pc-optmain b{display:block;font-size:0.875rem;color:var(--foreground)}
.pc-optmain span{display:block;font-size:0.6875rem;color:var(--muted-foreground);margin-top:2px;line-height:1.6}
.pc-opthead{display:flex;align-items:center;gap:7px}
.pc-opthead b{display:inline}
.pc-tier{font-size:0.625rem;padding:1px 7px;border-radius:99px;border:1px solid var(--border);color:var(--muted-foreground);white-space:nowrap;flex:none}
.pc-opt.sel .pc-tier{border-color:color-mix(in srgb,var(--primary) 45%,transparent);color:var(--primary)}
.pc-weak{display:flex;flex-direction:column;gap:8px;width:100%;padding:11px 13px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--primary) 40%,transparent);background:color-mix(in srgb,var(--primary) 4%,transparent)}
.pc-weaktitle{font-size:0.75rem;font-weight:600;color:var(--foreground)}
.pc-weaksub{font-size:0.625rem;color:var(--muted-foreground);line-height:1.5}
.pc-weakbox{display:flex;flex-direction:column;gap:10px;max-height:264px;overflow-y:auto;padding-right:2px}
.pc-weakgroup{display:flex;flex-direction:column;gap:6px}
.pc-weakdim{font-size:0.625rem;font-weight:600;color:var(--muted-foreground)}
.pc-weakopts{display:flex;flex-wrap:wrap;gap:7px}
.pc-weakopt{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:99px;border:1.5px solid var(--border);background:transparent;cursor:pointer;font-family:inherit;transition:border-color .15s ease,background .15s ease;max-width:100%}
.pc-weakopt:hover{border-color:var(--muted-foreground)}
.pc-weakopt b{font-size:0.75rem;color:var(--foreground);max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pc-weakopt span{font-size:0.625rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}
.pc-weakopt.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}
.pc-weakopt.on b{color:var(--primary)}
.pc-suggest{font-style:normal;font-size:0.5625rem;padding:1px 6px;border-radius:99px;background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary);white-space:nowrap;flex:none}
.pa-start:disabled{opacity:.55;cursor:not-allowed}
.pa-btnrow{display:flex;align-items:center;gap:10px}
.pa-quit{display:inline-flex;align-items:center;justify-content:center;width:44px;height:36px;border-radius:12px;border:1px solid var(--border);background:transparent;color:var(--muted-foreground);cursor:pointer;flex-shrink:0;transition:border-color .15s ease,color .15s ease}
.pa-quit:hover{border-color:color-mix(in srgb,var(--destructive) 45%,var(--border));color:var(--destructive)}
.pc-optnum{flex:none;font-size:0.6875rem;color:var(--muted-foreground);white-space:nowrap;margin-top:3px;font-variant-numeric:tabular-nums}
.pc-opt.sel .pc-optnum{color:var(--primary);font-weight:600}
.pc-preview{display:flex;flex-direction:column;gap:6px;font-size:0.75rem;color:var(--muted-foreground);width:100%;border-top:1px dashed var(--border);padding-top:12px}
.pc-chips{display:flex;flex-wrap:wrap;gap:5px}
.pc-chip{font-size:0.6875rem;padding:2px 9px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);white-space:nowrap}
@media(max-width:420px){
  .pa-card{padding:15px 15px;border-radius:12px;gap:12px}
  .pa-chart-radar{height:250px}
  .pa-rmain{font-size:0.75rem}
  .pc-opt{padding:10px 12px}
  .pa-dual{grid-template-columns:1fr}
}

/* ---- 真题演示引擎（paper-demo.js 配套，paper.html / mock.html 共用，配色走主题 token） ---- */
/* ---- 真题演示引擎（paper-demo.js 配套，配色走页面主题 token） ---- */
:root{--pd-ok:#1fa05c;--pd-warn:#b8860b;--pd-bad:var(--destructive);--pd-c-S:#3b82f6;--pd-c-V:#1fa05c;--pd-c-O:#8b5cf6;--pd-c-A:#64748b;--pd-c-CJ:#d97706}
.dark{--pd-ok:#4ade80;--pd-warn:#eab308;--pd-c-S:#60a5fa;--pd-c-V:#4ade80;--pd-c-O:#a78bfa;--pd-c-A:#94a3b8;--pd-c-CJ:#fbbf24}
.pd-mono{font-variant-numeric:tabular-nums}
.pd-pbar{height:2px;border-radius:99px;background:var(--muted);overflow:hidden;margin:2px 0 10px}
.pd-pbar>div{height:100%;background:var(--primary);transition:width .4s ease}
/* ---- 考情统计框 ---- */
.pd-stats{display:flex;flex-direction:column;gap:9px;background:color-mix(in srgb,var(--muted) 38%,transparent);border:1px solid var(--border);border-radius:13px;padding:12px 14px;margin-top:12px}
.pd-stats-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.pd-stats-title{display:inline-flex;align-items:center;gap:5px;font-size:0.6875rem;font-weight:700;letter-spacing:1px;color:var(--muted-foreground)}
.pd-stats-score{font-size:0.7188rem;color:var(--muted-foreground);font-weight:500}
.pd-stats-score b{color:var(--foreground);font-weight:700}
.pd-srow{display:flex;gap:10px;align-items:flex-start}
.pd-slabel{flex:none;width:58px;font-size:0.75rem;color:var(--muted-foreground);line-height:1.75}
.pd-sval{flex:1;min-width:0;font-size:0.7812rem;color:var(--foreground);line-height:1.75}
.pd-sdist{display:flex;flex-direction:column;gap:7px}
.pd-sditem{display:flex;flex-direction:column;gap:4px}
.pd-sdtop{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.pd-sdname{font-size:0.75rem;color:var(--foreground);min-width:0}
.pd-sdcnt{flex:none;font-size:0.7188rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.pd-sdtrack{height:4px;border-radius:99px;background:color-mix(in srgb,var(--foreground) 10%,transparent);overflow:hidden}
.pd-sdfill{height:100%;border-radius:99px;background:var(--primary);opacity:.6}
.pd-imp{display:inline-flex;align-items:center;gap:1px}
.pd-star{font-size:0.75rem;line-height:1;color:color-mix(in srgb,var(--foreground) 20%,transparent)}
.pd-star.on{color:var(--primary)}
.pd-imp b{font-size:0.7812rem;margin-left:6px}
.pd-impwhy{display:block;margin-top:2px;font-size:0.6875rem;color:var(--muted-foreground)}
.pd-stats-note{font-size:0.7188rem;color:var(--muted-foreground);border-top:1px dashed color-mix(in srgb,var(--border) 80%,transparent);padding-top:8px}
.pd-card{width:100%;text-align:left;background:color-mix(in srgb,var(--card) 92%,transparent);border:1px solid var(--border);border-radius:16px;padding:18px 20px;margin-bottom:10px;display:flex;flex-direction:column;gap:14px}
.pd-cardtop{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pd-chip{font-size:0.7188rem;padding:2px 9px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);white-space:nowrap}
.pd-chip-src{background:color-mix(in srgb,var(--primary) 13%,transparent);color:var(--primary);font-weight:600}
.pd-cardbody{display:flex;flex-direction:column;gap:13px;font-size:0.9375rem;line-height:1.7;color:var(--foreground)}
/* ---- 题区 / 答区分区 ---- */
.pd-qzone{display:flex;flex-direction:column;gap:12px}
.pd-azone{display:flex;flex-direction:column;gap:10px;background:color-mix(in srgb,var(--primary) 4%,transparent);border:1px solid color-mix(in srgb,var(--primary) 17%,transparent);border-radius:13px;padding:12px 13px;transition:border-color .25s ease,background .25s ease}
.pd-azone.locked{border-color:var(--border);background:color-mix(in srgb,var(--muted) 42%,transparent)}
.pd-azhead{display:flex;align-items:center;gap:6px}
.pd-azlabel{display:inline-flex;align-items:center;gap:5px;font-size:0.6875rem;font-weight:700;letter-spacing:1.5px;color:var(--primary)}
.pd-azstat{margin-left:auto;font-size:0.7188rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--muted-foreground)}
.pd-azfoot{display:flex;align-items:center;gap:10px;margin-top:2px;flex-wrap:wrap}
.pd-azfoot .pd-btn-primary{margin-left:auto}
.pd-note{font-size:0.7812rem;color:var(--muted-foreground)}
.pd-stem{font-size:0.9375rem;font-weight:600;line-height:1.6}
.pd-qno{color:var(--primary);margin-right:4px;font-weight:700}
/* 题面插图（admin 内容审核插图 → Markdown 图片语法渲染；data URI 随分册走 VIP 门禁） */
.pd-stem img,.pd-src img,.pd-note img,.pd-abb img,.pd-opttext img{display:block;max-width:100%;max-height:340px;border-radius:8px;margin:6px 0}
.pd-opttext{min-width:0;overflow-wrap:anywhere}
.pd-opts{display:flex;flex-direction:column;gap:5px}
.pd-opt{display:flex;align-items:flex-start;gap:9px;padding:9px 11px;border-radius:10px;border:1px solid transparent;background:transparent;text-align:left;font-size:0.9062rem;line-height:1.55;color:var(--foreground);transition:background .15s ease,border-color .15s ease}
.pd-opt:hover{background:color-mix(in srgb,var(--foreground) 5%,transparent)}
.pd-letter{flex:none;width:19px;height:19px;margin-top:1px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:0.6875rem;font-weight:700;background:var(--muted);color:var(--muted-foreground)}
.pd-opt.sel{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}
.pd-opt.sel .pd-letter{background:var(--primary);color:var(--primary-foreground)}
.pd-opt.ok{border-color:var(--pd-ok);background:color-mix(in srgb,var(--pd-ok) 8%,transparent)}
.pd-opt.ok .pd-letter{background:var(--pd-ok);color:#fff}
.pd-opt.bad{border-color:var(--pd-bad);background:color-mix(in srgb,var(--pd-bad) 7%,transparent)}
.pd-opt.bad .pd-letter{background:var(--pd-bad);color:#fff}
.pd-audio{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:11px;background:var(--muted)}
.pd-play{flex:none;width:28px;height:28px;border-radius:99px;background:var(--primary);color:var(--primary-foreground);display:flex;align-items:center;justify-content:center;transition:opacity .15s ease}
.pd-play:hover{opacity:.85}
.pd-play.busy{opacity:.55;pointer-events:none}
.pd-play.done{opacity:.38;pointer-events:none}
.pd-rail{flex:1;position:relative;height:3px;border-radius:99px;background:color-mix(in srgb,var(--foreground) 14%,transparent);overflow:hidden}
.pd-fill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;background:var(--primary)}
.pd-audiohint{flex:none;font-size:0.7188rem;color:var(--muted-foreground)}
.pd-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 16px;border-radius:11px;font-size:0.875rem;border:1px solid var(--border);color:var(--foreground);background:var(--card);transition:opacity .15s ease;white-space:nowrap;flex-shrink:0;text-align:center}
.pd-btn:hover{opacity:.85}
.pd-btn:disabled{opacity:.45;pointer-events:none}
.pd-btn-primary{background:var(--primary);color:var(--primary-foreground);border-color:transparent;font-weight:500}
.pd-btn-sm{padding:4px 11px;font-size:0.7812rem;border-radius:9px}
.pd-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.pd-passage{border-left:3px solid var(--border);padding:2px 0 2px 13px}
.pd-ptitle{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}
.pd-ptitle b{font-size:0.8438rem;color:var(--foreground)}
.pd-ptag{font-size:0.6875rem;color:var(--muted-foreground)}
.pd-ptext{font-size:0.9062rem;line-height:1.9;color:var(--foreground)}
.pd-tw{cursor:pointer;border-bottom:1px dotted transparent;transition:background .12s ease}
.pd-tw:hover{background:color-mix(in srgb,var(--primary) 14%,transparent);border-bottom-color:var(--primary)}
.pd-plabel{display:inline-flex;min-width:20px;height:20px;align-items:center;justify-content:center;margin-right:7px;border-radius:6px;background:var(--muted);color:var(--muted-foreground);font-size:0.6875rem;font-weight:700}
.pd-ctext{font-size:0.9375rem;line-height:2.05;color:var(--foreground)}
.pd-blank,.pd-gslot{display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:24px;margin:0 3px;padding:0 8px;border-radius:7px;border:none;border-bottom:2px solid var(--muted-foreground);background:transparent;font-size:0.8125rem;font-weight:600;color:var(--primary);vertical-align:baseline;transition:border-color .15s ease,background .15s ease}
.pd-blank:hover,.pd-gslot:hover{background:color-mix(in srgb,var(--primary) 10%,transparent)}
.pd-blank.filled,.pd-gslot.filled{border-bottom-style:solid;border-bottom-color:var(--primary)}
.pd-blank.ok,.pd-gslot.ok{color:var(--pd-ok);border-bottom-color:var(--pd-ok)}
.pd-blank.bad,.pd-gslot.bad{color:var(--pd-bad);border-bottom-color:var(--pd-bad)}
.pd-bfix{margin-left:4px;font-size:0.6875rem;color:var(--pd-ok);font-weight:700}
/* 填答板：嵌入型题型的空位总览（答区内） */
.pd-fboard{display:flex;flex-wrap:wrap;gap:7px}
.pd-fb{min-width:34px;height:30px;padding:0 9px;border-radius:8px;border:1px solid var(--border);background:var(--card);font-size:0.7812rem;font-weight:600;color:var(--muted-foreground);display:inline-flex;align-items:center;justify-content:center;gap:4px;transition:border-color .15s ease,color .15s ease}
.pd-fb:hover{border-color:var(--primary);color:var(--primary)}
.pd-fb.filled{border-color:var(--primary);color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}
.pd-fb.ok{border-color:var(--pd-ok);color:var(--pd-ok);background:color-mix(in srgb,var(--pd-ok) 7%,transparent)}
.pd-fb.bad{border-color:var(--pd-bad);color:var(--pd-bad);background:color-mix(in srgb,var(--pd-bad) 6%,transparent)}
.pd-fb b{font-weight:700}
.pd-bank{display:flex;flex-wrap:wrap;gap:6px}
.pd-bchip{display:flex;flex-direction:column;align-items:center;gap:1px;padding:5px 12px;border-radius:9px;border:1px solid var(--border);background:var(--card);transition:border-color .15s,background .15s}
.pd-bchip span{font-size:0.8438rem;font-weight:600;color:var(--foreground)}
.pd-bchip small{font-size:0.6562rem;color:var(--muted-foreground)}
.pd-bchip:hover{border-color:var(--primary)}
.pd-bchip.sel{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 9%,transparent)}
.pd-bchip.used{opacity:.38;pointer-events:none}
.pd-strow{display:flex;align-items:center;gap:10px;padding:9px 2px;font-size:0.9062rem}
.pd-strow+.pd-strow{border-top:1px solid var(--border)}
.pd-stno{flex:none;width:1.4em;color:var(--muted-foreground);font-size:0.7812rem;font-variant-numeric:tabular-nums}
.pd-sttext{flex:1;line-height:1.6}
.pd-stlets{display:flex;gap:5px;flex:none}
.pd-lbtn{width:28px;height:28px;border-radius:8px;border:1px solid transparent;background:var(--muted);color:var(--muted-foreground);font-size:0.7812rem;font-weight:700;transition:all .15s ease}
.pd-lbtn:hover{border-color:var(--primary);color:var(--primary)}
.pd-lbtn.sel{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary)}
.pd-lbtn.ok{background:var(--pd-ok);color:#fff}
.pd-lbtn.bad{background:var(--pd-bad);color:#fff}
.pd-cands{display:flex;flex-direction:column}
.pd-cand{display:flex;gap:8px;padding:9px 2px;font-size:0.875rem;line-height:1.6}
.pd-cand+.pd-cand{border-top:1px solid var(--border)}
.pd-ordlist{display:flex;flex-direction:column;gap:8px}
.pd-ordcard{display:flex;gap:11px;padding:11px 13px;border-radius:11px;background:var(--muted);font-size:0.875rem;line-height:1.6;color:var(--foreground);touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab}
.pd-ordcard.dragging{opacity:.85;cursor:grabbing;box-shadow:0 6px 18px rgba(0,0,0,.14);z-index:5;position:relative}
.pd-ordcard.selected{box-shadow:inset 0 0 0 1.5px var(--primary)}
.pd-ordpos{flex:none;width:22px;height:22px;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:0.7188rem;font-weight:700;background:var(--card);color:var(--muted-foreground)}
.pd-ordcard.ok .pd-ordpos{background:var(--pd-ok);color:#fff}
.pd-ordcard.bad .pd-ordpos{background:var(--pd-bad);color:#fff}
.pd-ordhint{font-size:0.75rem;color:var(--muted-foreground)}
.pd-hmpara{padding:9px 0}
.pd-hmpara+.pd-hmpara{border-top:1px solid var(--border)}
.pd-hmpara>.pd-hmbadge{margin-bottom:6px}
.pd-hmtext{font-size:0.9062rem;line-height:1.85;color:var(--foreground)}
.pd-hmrows{display:flex;flex-direction:column}
.pd-hmrow{display:flex;align-items:center;gap:10px;padding:6px 0}
.pd-hmrow+.pd-hmrow{border-top:1px solid color-mix(in srgb,var(--border) 55%,transparent)}
.pd-hmbadge{flex:none;min-width:34px;height:24px;padding:0 6px;border-radius:7px;background:var(--card);border:1px solid var(--border);display:inline-flex;align-items:center;justify-content:center;font-size:0.6875rem;font-weight:700;color:var(--muted-foreground)}
.pd-hmslotbtn{flex:1;min-height:34px;padding:5px 12px;border-radius:9px;border:1px dashed var(--muted-foreground);background:var(--card);font-size:0.8125rem;color:var(--muted-foreground);text-align:left;display:flex;align-items:center;transition:border-color .15s ease,color .15s ease}
.pd-hmslotbtn:hover{border-color:var(--primary);color:var(--primary)}
.pd-hmslotbtn.filled{border-style:solid;border-color:var(--primary);color:var(--primary);font-weight:600}
.pd-hmslotbtn.ok{border-color:var(--pd-ok);color:var(--pd-ok);border-style:solid}
.pd-hmslotbtn.bad{border-color:var(--pd-bad);color:var(--pd-bad);border-style:solid}
.pd-roles{display:flex;flex-wrap:wrap;gap:6px}
.pd-rolebtn{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:99px;border:1px solid var(--border);background:var(--card);font-size:0.8125rem;color:var(--foreground)}
.pd-rolebtn .pd-rdot{width:8px;height:8px;border-radius:99px}
.pd-rolebtn:hover{border-color:var(--muted-foreground)}
.pd-rolebtn.active{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent);font-weight:600}
.pd-msent{font-size:1rem;line-height:2.4;color:var(--foreground)}
.pd-mword{padding:2px 4px;border-radius:6px;cursor:pointer;transition:background .12s ease}
.pd-mword:hover{background:var(--muted)}
.pd-mword.mk.wS{background:color-mix(in srgb,var(--pd-c-S) 16%,transparent)}
.pd-mword.mk.wV{background:color-mix(in srgb,var(--pd-c-V) 16%,transparent)}
.pd-mword.mk.wO{background:color-mix(in srgb,var(--pd-c-O) 16%,transparent)}
.pd-mword.mk.wA{background:color-mix(in srgb,var(--pd-c-A) 18%,transparent)}
.pd-mword.mk.wCJ{background:color-mix(in srgb,var(--pd-c-CJ) 18%,transparent)}
.pd-mword.ok{box-shadow:inset 0 -2px 0 var(--pd-ok)}
.pd-mword.bad{text-decoration:line-through;color:var(--pd-bad)}
.pd-mword.missed{outline:1.5px dashed var(--pd-warn);outline-offset:1px}
.pd-rl{font-size:0.625rem;font-weight:700;color:var(--muted-foreground);margin-left:3px;vertical-align:super}
.pd-mlegend{font-size:0.75rem;color:var(--muted-foreground)}
.pd-src{font-size:0.9375rem;line-height:1.8;border-left:3px solid var(--border);padding:2px 0 2px 13px;color:var(--foreground)}
.pd-trhint{display:flex;align-items:center;gap:6px;font-size:0.7812rem;color:var(--muted-foreground)}
.pd-trrow{display:flex;gap:8px;width:100%;align-items:stretch}
.pd-trtextarea{flex:1;padding:10px 13px;border-radius:11px;border:1px solid var(--border);background:var(--card);font-size:0.9375rem;color:var(--foreground);font-family:inherit;resize:vertical;min-height:90px;line-height:1.7}
.pd-trtextarea:focus{outline:none;border-color:var(--primary)}
.pd-trtextarea:disabled{opacity:.6}
.pd-trkb{display:flex;flex-direction:column;align-items:stretch;padding:10px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 28px rgba(0,0,0,.22)}
.pd-trkb.hidden{display:none}
/* 软键盘按钮：悬浮于输入框右上角（定位由 js positionKb 注入，这里只管外观） */
.kb-btn{padding:6px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--muted-foreground);box-shadow:0 3px 10px rgba(0,0,0,.14);transition:background .15s ease}
.kb-btn:hover{background:var(--muted)}
/* 句页输入框内嵌软键盘钮（2026-09-06）：kb-toggle 收进 word-submit 框内右侧——
   去边框/阴影透明化（悬停浮 muted 圆角），输入框右侧让位 56px 并放宽至 320px；
   word 页等外部悬浮用法仍走上方 .kb-btn 基类 */
.input-kb{position:relative;width:90%;max-width:320px}
.input-kb .text-input{width:100%;max-width:none;padding-left:56px;padding-right:56px}
.kb-inset{position:absolute;right:10px;top:50%;transform:translateY(-50%);padding:5px;border:none;background:transparent;box-shadow:none}
.kb-inset:hover{background:var(--muted)}
/* ---- 小升初族填空（grammar-fill / sentence-transform）---- */
.pd-fillinput{flex:1;padding:10px 13px;border-radius:11px;border:1px solid var(--border);background:var(--card);font-size:0.9375rem;color:var(--foreground);font-family:inherit;line-height:1.7}
.pd-fillinput:focus{outline:none;border-color:var(--primary)}
.pd-fillinput:disabled{opacity:.6}
.pd-fillinput.ok{border-color:var(--pd-ok);color:var(--pd-ok);font-weight:700}
.pd-fillinput.bad{border-color:var(--pd-bad);color:var(--pd-bad)}
.pd-ginput{display:inline-block;height:26px;margin:0 3px;padding:0 7px;border:none;border-bottom:2px solid var(--muted-foreground);background:color-mix(in srgb,var(--primary) 6%,transparent);border-radius:5px 5px 0 0;font-size:0.8125rem;font-weight:600;color:var(--primary);text-align:center;font-family:inherit;vertical-align:baseline;transition:border-color .15s ease}
.pd-ginput:focus{outline:none;border-bottom-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent)}
.pd-ginput:disabled{opacity:.85}
.pd-ginput.ok{color:var(--pd-ok);border-bottom-color:var(--pd-ok)}
.pd-ginput.bad{color:var(--pd-bad);border-bottom-color:var(--pd-bad)}
.pd-bchip-word{padding:5px 12px}
.pd-bchip-word span{font-size:0.8438rem;font-weight:600;color:var(--foreground)}
.pd-bchip-word:hover{border-color:var(--primary)}
.pd-strip{display:flex;flex-direction:column}
.pd-stripitem{display:flex;gap:11px;padding:8px 0;font-size:0.8438rem;line-height:1.6}
.pd-stripitem+.pd-stripitem{border-top:1px solid var(--border)}
.pd-stripitem b{display:block;font-size:0.8438rem;color:var(--foreground)}
.pd-stripitem span{color:var(--muted-foreground);font-size:0.7812rem}
.pd-sn{flex:none;width:20px;height:20px;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:0.6875rem;font-weight:700;background:var(--muted);color:var(--muted-foreground);margin-top:2px}
.pd-ta{width:100%;border:1px solid var(--border);border-radius:11px;padding:11px 13px;background:var(--card);font-size:0.9062rem;line-height:1.8;color:var(--foreground);resize:vertical}
.pd-ta:focus{outline:none;border-color:var(--primary)}
.pd-ta:disabled{opacity:.8}
.pd-tarow{display:flex;justify-content:space-between;font-size:0.75rem;color:var(--muted-foreground)}
.pd-chartbox{border:1px solid var(--border);border-radius:12px;padding:12px}
.pd-cbtitle{font-size:0.7812rem;color:var(--muted-foreground);margin-bottom:6px;text-align:center}
.pd-chartbox svg{width:100%;height:auto;display:block}
.pd-chartbox text{fill:var(--muted-foreground)}
.pd-diff{margin-top:4px;font-size:0.9062rem;line-height:2}
.pd-dw{padding:1px 3px;border-radius:4px;margin:0 1px}
.pd-dw.ok{color:var(--pd-ok);font-weight:600}
.pd-dw.miss{color:var(--pd-bad);background:color-mix(in srgb,var(--pd-bad) 10%,transparent);text-decoration:underline dotted}
.pd-dw.extra{color:var(--muted-foreground);background:var(--muted);text-decoration:line-through}
.pd-rasent{font-size:0.9375rem;line-height:2.1}
.pd-raw{border-radius:5px;padding:1px 3px;transition:color .3s,background .3s}
.pd-rasent.scored .pd-raw{color:var(--pd-ok);font-weight:600}
.pd-rasent.scored .pd-raw.weak{color:var(--pd-warn);background:color-mix(in srgb,var(--pd-warn) 13%,transparent)}
.pd-rasent.scored .pd-raw.miss{color:var(--pd-bad);background:color-mix(in srgb,var(--pd-bad) 13%,transparent)}
.pd-rarec{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:11px;background:var(--muted)}
.pd-rabtn{flex:none;width:40px;height:40px;border-radius:99px;background:var(--primary);color:var(--primary-foreground);display:flex;align-items:center;justify-content:center;transition:transform .15s ease}
.pd-rabtn:hover{transform:scale(1.05)}
.pd-rarec.on .pd-rabtn{background:var(--pd-bad);animation:pdRecPulse 1.4s ease-in-out infinite}
@keyframes pdRecPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
.pd-rawave{flex:none;display:flex;align-items:center;gap:3px;height:26px}
.pd-rawave i{width:3px;height:6px;border-radius:2px;background:var(--muted-foreground);opacity:.5}
.pd-rarec.on .pd-rawave i{opacity:1;background:var(--pd-bad);animation:pdWave .9s ease-in-out infinite}
@keyframes pdWave{0%,100%{height:5px}50%{height:20px}}
.pd-ratime{flex:none;font-size:0.75rem;color:var(--muted-foreground);min-width:38px;text-align:right}
.pd-ralabel{flex:1;font-size:0.7812rem;color:var(--muted-foreground);min-width:0}
.pd-analysis{display:flex;flex-direction:column;gap:12px;padding-top:14px;border-top:1px solid var(--border);margin-top:2px}
.pd-ver{display:flex;align-items:center;gap:7px;font-size:0.875rem;font-weight:600}
.pd-ver.ok{color:var(--pd-ok)}
.pd-ver.bad{color:var(--pd-bad)}
.pd-ver.part{color:var(--pd-warn)}
.pd-ver.self{color:var(--muted-foreground)}
.pd-vsc{margin-left:auto;font-size:0.7812rem;font-weight:500;font-variant-numeric:tabular-nums}
.pd-anblock{border-left:2px solid var(--border);padding-left:12px}
.pd-abh{display:flex;align-items:center;gap:5px;font-size:0.75rem;color:var(--muted-foreground);margin-bottom:6px}
.pd-abb{font-size:0.875rem;line-height:1.8;color:var(--foreground)}
.pd-adiff b{color:var(--primary)}
.pd-tier{display:inline-block;font-size:0.6875rem;padding:1px 8px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);margin-left:8px;vertical-align:1px}
.pd-tag{font-size:0.75rem;padding:3px 11px;border-radius:99px;border:1px solid var(--border);background:transparent;color:var(--foreground);margin:0 6px 6px 0}
.pd-tag:hover{border-color:var(--primary);color:var(--primary)}
/* ---- AI 评分（可选付费） ---- */
.pd-ai{margin-top:2px;padding:12px 14px;border-radius:12px;border:1px solid var(--border);background:color-mix(in srgb,var(--primary) 4%,transparent)}
.pd-ai-fail{border-style:dashed;background:transparent;opacity:.85}
.pd-ai-load{display:flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--muted-foreground)}
.pd-aispin{width:13px;height:13px;border-radius:50%;border:2px solid var(--border);border-top-color:var(--primary);animation:pdspin .8s linear infinite}
@keyframes pdspin{to{transform:rotate(360deg)}}
.pd-ai-head{display:flex;align-items:center;gap:7px;font-size:0.8125rem;font-weight:600;color:var(--foreground)}
.pd-ai-score{margin-left:auto;font-family:var(--font-mono,monospace);font-weight:600;color:var(--primary)}
.pd-ai-comment{margin-top:8px;font-size:0.8438rem;line-height:1.75;color:var(--foreground)}
.pd-ai-cost{margin-top:8px;font-size:0.7188rem;color:var(--muted-foreground)}
.pd-point{display:inline-block;font-size:0.75rem;padding:3px 10px;border-radius:8px;background:var(--muted);color:var(--muted-foreground);margin:0 6px 6px 0}
.pd-checklist{display:flex;flex-direction:column;gap:5px}
.pd-clrow{display:flex;align-items:center;gap:8px;font-size:0.8438rem;color:var(--foreground)}
.pd-clic{width:18px;height:18px;border-radius:99px;display:flex;align-items:center;justify-content:center}
.pd-clic.ok{background:color-mix(in srgb,var(--pd-ok) 15%,transparent);color:var(--pd-ok)}
.pd-clic.bad{background:color-mix(in srgb,var(--pd-bad) 12%,transparent);color:var(--pd-bad)}
.pd-refbox{border-left:2px solid var(--border);padding-left:12px}
.pd-refbox summary{display:flex;align-items:center;gap:5px;font-size:0.75rem;color:var(--muted-foreground);cursor:pointer;list-style:none}
.pd-refbox summary::-webkit-details-marker{display:none}
.pd-rbbody{margin-top:7px;font-size:0.875rem;line-height:1.9;color:var(--foreground)}
.pd-sumtop{text-align:center;display:flex;flex-direction:column;gap:4px}
.pd-sumscore{font-size:2.125rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--foreground);line-height:1.1}
.pd-sumscore span{font-size:0.9375rem;color:var(--muted-foreground);font-weight:400}
.pd-sumsub{font-size:0.7812rem;color:var(--muted-foreground)}
.pd-sumstat{display:flex;justify-content:center;gap:8px;flex-wrap:wrap}
.pd-st{font-size:0.75rem;padding:3px 11px;border-radius:99px}
.pd-st.ok{background:color-mix(in srgb,var(--pd-ok) 13%,transparent);color:var(--pd-ok)}
.pd-st.part{background:color-mix(in srgb,var(--pd-warn) 13%,transparent);color:var(--pd-warn)}
.pd-st.bad{background:color-mix(in srgb,var(--pd-bad) 11%,transparent);color:var(--pd-bad)}
.pd-st.self{background:var(--muted);color:var(--muted-foreground)}
.pd-sumchips{display:flex;flex-wrap:wrap;gap:7px}
.pd-sumchip{display:inline-flex;align-items:center;gap:6px;font-size:0.75rem;padding:4px 10px;border-radius:99px;font-variant-numeric:tabular-nums}
.pd-sumchip b{font-weight:700}
.pd-sumchip.ok{background:color-mix(in srgb,var(--pd-ok) 12%,transparent);color:var(--pd-ok)}
.pd-sumchip.part{background:color-mix(in srgb,var(--pd-warn) 12%,transparent);color:var(--pd-warn)}
.pd-sumchip.bad{background:color-mix(in srgb,var(--pd-bad) 10%,transparent);color:var(--pd-bad)}
.pd-sumchip.self{background:var(--muted);color:var(--muted-foreground)}
.pd-pop{position:absolute;z-index:80;min-width:230px;max-width:300px;max-height:50vh;overflow-y:auto;-webkit-overflow-scrolling:touch;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:7px;box-shadow:0 10px 32px rgba(0,0,0,.16)}
.pd-pop-sheet{position:fixed;left:0!important;right:0!important;top:auto!important;bottom:0!important;width:100%!important;max-width:none;border-radius:16px 16px 0 0;max-height:60vh;overflow-y:auto;-webkit-overflow-scrolling:touch;box-shadow:0 -8px 32px rgba(0,0,0,.2);animation:pdSlideUp .25s ease}
@keyframes pdSlideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
.pd-popopt{display:flex;align-items:flex-start;gap:8px;width:100%;text-align:left;padding:8px 10px;border-radius:9px;background:transparent;font-size:0.875rem;line-height:1.5;color:var(--foreground)}
.pd-popopt:hover{background:var(--muted)}
.pd-popopt.used{opacity:.4;pointer-events:none}
.pd-poletter{flex:none;font-size:0.75rem;font-weight:700;color:var(--primary);margin-top:2px}
.pd-wordcard{padding:10px 12px;min-width:220px}
.pd-wc-word{font-size:1.0625rem;font-weight:700;color:var(--foreground)}
.pd-wc-gloss{font-size:0.8438rem;margin-top:5px;color:var(--foreground)}
.pd-wc-freq{font-size:0.75rem;color:var(--primary);margin-top:3px}
.pd-wc-actions{margin-top:9px}
.pd-ovl{position:fixed;inset:0;z-index:90;background:rgba(15,12,10,.45);display:flex;align-items:center;justify-content:center;padding:20px}
.pd-ovlpanel{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:20px;max-width:420px;width:100%}
.pd-ovltitle{display:flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;margin-bottom:10px;color:var(--foreground)}
.pd-ovlactions{display:flex;justify-content:flex-end;margin-top:16px}
#pd-toast-wrap{position:fixed;left:0;right:0;bottom:88px;display:flex;flex-direction:column;align-items:center;gap:8px;z-index:95;pointer-events:none}
.pd-toast{background:var(--foreground);color:var(--background);font-size:0.8125rem;padding:8px 16px;border-radius:99px;opacity:.94;transition:opacity .3s ease;box-shadow:0 4px 16px rgba(0,0,0,.18)}
@media(prefers-reduced-motion:reduce){.pd-rarec.on .pd-rabtn,.pd-rarec.on .pd-rawave i{animation:none!important}}
@media(max-width:420px){
  .pd-card{padding:15px 15px;border-radius:14px;gap:12px}
  .pd-cardbody{gap:11px}
  .pd-azone{padding:10px 10px;border-radius:12px;gap:9px}
  .pd-qzone{gap:10px}
  .pd-azfoot{flex-direction:column;align-items:stretch;gap:7px}
  .pd-azfoot .pd-btn-primary{margin-left:0}
  .pd-stats{padding:10px 11px;border-radius:12px;gap:8px}
  .pd-slabel{width:52px}
  .pd-sdname{font-size:0.7188rem}
  .pd-ordcard{font-size:0.8438rem;padding:10px 11px;gap:9px}
  .pd-msent{font-size:0.9375rem;line-height:2.2}
  .pd-ctext{font-size:0.9062rem}
  .pd-fb{height:28px;min-width:31px;font-size:0.75rem}
}

/* ---- 账号状态横幅（游客/会员到期；顶部常驻、文档流内非悬浮） ---- */
.acct-banner{width:100%;max-width:680px;margin:0 auto;padding:16px 20px 0;box-sizing:border-box}
.acct-banner-inner{display:flex;flex-direction:column;align-items:center;gap:11px;padding:13px 16px 14px;border-radius:12px;background:var(--muted);border:1px solid var(--border)}
.acct-msg{font-size:0.8125rem;line-height:1.55;color:var(--muted-foreground);text-align:center;text-wrap:balance}
.acct-actions{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:nowrap}
.acct-msg-info{display:inline-flex;align-items:center;gap:3px;color:var(--primary);text-decoration:none;cursor:pointer;white-space:nowrap;vertical-align:-2px}
.acct-msg-info:hover{text-decoration:underline}
.acct-btn{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex-shrink:0;padding:7px 18px;border-radius:10px;font-size:0.8125rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .15s ease,border-color .15s ease,color .15s ease,background .15s ease}
.acct-btn-sub{border:1px solid var(--border);color:var(--muted-foreground);background:var(--card)}
.acct-btn-sub:hover{border-color:var(--muted-foreground);color:var(--foreground)}
.acct-btn-main{border:1px solid var(--primary);color:var(--primary-foreground);background:var(--primary);font-weight:600}
.acct-btn-main:hover{opacity:.88}

/* ---- 账号弹层（年卡说明/登录/充值；登录与充值置顶层级） ---- */
.acct-modal-mask{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.42);display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box;animation:acctFadeIn .18s ease forwards}
.acct-modal-top{z-index:80}
.acct-modal{width:100%;max-width:342px;border-radius:14px;border:1px solid var(--border);background:var(--popover);color:var(--popover-foreground);padding:18px 18px 20px;box-shadow:0 10px 30px rgba(0,0,0,.18);animation:acctPopIn .2s ease forwards}
.acct-modal-head{display:flex;align-items:center;gap:7px;font-size:0.9375rem;font-weight:600;margin-bottom:12px}
.acct-modal-head .acct-modal-x{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;color:var(--muted-foreground);cursor:pointer;transition:background .15s ease;-webkit-tap-highlight-color:transparent;background:transparent;border:none}
.acct-modal-head .acct-modal-x:hover{background:var(--muted)}
.acct-modal-list{list-style:none;display:flex;flex-direction:column;gap:9px;margin-bottom:12px}
.acct-modal-list li{position:relative;padding-left:17px;font-size:0.8125rem;line-height:1.6;color:var(--foreground)}
.acct-modal-list li::before{content:'';position:absolute;left:2px;top:0.58em;width:5px;height:5px;border-radius:99px;background:var(--muted-foreground)}
.acct-modal-note{font-size:0.6875rem;color:var(--muted-foreground);margin-bottom:14px}
.acct-modal .acct-btn-main{width:100%;justify-content:center;padding:9px 0}
@keyframes acctFadeIn{from{opacity:0}to{opacity:1}}
@keyframes acctPopIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}

/* ---- 验证码登录表单 ---- */
.acct-form{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
.acct-code-row{display:flex;gap:8px}
.acct-code-row .acct-input{flex:1;min-width:0}
.acct-input{width:100%;padding:9px 12px;border-radius:10px;border:1px solid var(--input);background:var(--card);color:var(--foreground);font-size:0.875rem;transition:border-color .15s ease;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
.acct-input:focus{outline:none;border-color:var(--primary)}
.acct-input::placeholder{color:var(--muted-foreground)}
.acct-code-btn{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;flex-shrink:0;padding:9px 13px;border-radius:10px;border:1px solid var(--border);background:var(--card);color:var(--foreground);font-size:0.8125rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease,opacity .15s ease}
.acct-code-btn:hover{border-color:var(--muted-foreground)}
.acct-code-btn:disabled{opacity:.45;cursor:not-allowed}

/* ---- 充值类别卡（成为会员/充值积分） ---- */
.acct-cats{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.acct-cat{display:flex;align-items:center;gap:11px;width:100%;padding:12px 13px;border-radius:12px;border:1px solid var(--border);background:var(--card);color:var(--foreground);cursor:pointer;text-align:left;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease}
.acct-cat:hover{border-color:var(--muted-foreground)}
.acct-cat-ic{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:9px;background:var(--muted);color:var(--muted-foreground);flex-shrink:0}
.acct-cat-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.acct-cat-title{display:flex;align-items:center;gap:6px;font-size:0.875rem;font-weight:600}
.acct-cat-desc{font-size:0.6875rem;color:var(--muted-foreground);line-height:1.5}
.acct-cat-arrow{color:var(--muted-foreground);flex-shrink:0}
.acct-cat-off{opacity:.5;cursor:not-allowed}
.acct-cat-off:hover{border-color:var(--border)}
.acct-cat-lock{padding:1px 7px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);font-size:0.625rem;font-weight:600;flex-shrink:0}
/* ---- 付费增值门禁（非年卡禁选禁用）---- */
.paid-locked{opacity:.45;cursor:not-allowed}
.paid-locked .autoplay-knob{background:var(--muted)}
.paid-lock-badge{display:inline-flex;align-items:center;padding:1px 7px;margin-left:6px;border-radius:99px;background:color-mix(in srgb,var(--primary) 10%,transparent);color:var(--primary);font-size:0.5625rem;font-style:normal;font-weight:600;flex-shrink:0;vertical-align:1px}
.paid-gate-note{margin-top:2px}
.tts-src-btn[disabled]{opacity:.45;cursor:not-allowed}
.acct-cat-price{margin-left:auto;padding:1px 8px;border-radius:99px;background:var(--muted);color:var(--foreground);font-size:0.75rem;font-weight:600;flex-shrink:0;font-variant-numeric:tabular-nums}
.acct-code-input{font-family:var(--font-mono,monospace);letter-spacing:.5px;text-transform:uppercase}

/* ---- 金额选择（会员单档锁定 / 积分档+自定义，输入后与固定档同款样式） ---- */
.acct-amts{display:flex;gap:8px;margin-bottom:14px}
.acct-amt{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:9px 4px;border-radius:11px;border:1px solid var(--border);background:var(--card);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease,background .15s ease;min-width:0}
.acct-amt:hover{border-color:var(--muted-foreground)}
.acct-amt.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 7%,var(--card))}
.acct-amt.on .acct-amt-num{color:var(--primary)}
.acct-amt-num{font-size:0.9375rem;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.acct-amt-label{font-size:0.625rem;color:var(--muted-foreground);white-space:nowrap}
.acct-amt-custom{padding:9px 4px;border-style:dashed}
.acct-amt-custom.on{border-style:solid}
.acct-amt-cwrap{display:flex;align-items:baseline;justify-content:center;gap:1px;min-width:0;max-width:100%}
.acct-amt-cny{font-size:0.9375rem;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--foreground)}
.acct-amt.on .acct-amt-cny{color:var(--primary)}
.acct-amt.on .acct-amt-input{color:var(--primary)}
.acct-amt-clabel{font-size:0.625rem;color:var(--muted-foreground);white-space:nowrap}
.acct-amt-custom .acct-amt-input{width:4ch;height:auto;padding:0;font-size:0.9375rem;text-align:center;box-sizing:content-box}
.acct-amt-input:focus{outline:none}
.acct-amt-input::placeholder{color:var(--muted-foreground);font-size:0.75rem;font-weight:400}

/* ---- 二维码支付区（默认支付宝，切渠道即换码） ---- */
.acct-qr-zone{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:14px}
.acct-ch-tabs{display:inline-flex;gap:4px;padding:3px;border-radius:10px;background:var(--muted)}
.acct-ch-tab{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;padding:5px 14px;border-radius:8px;border:none;background:transparent;color:var(--muted-foreground);font-size:0.75rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}
.acct-ch-tab.on{background:var(--card);color:var(--foreground);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.acct-qr-holder{display:flex;align-items:center;justify-content:center;padding:12px;border-radius:14px;background:var(--card);border:1px solid var(--border)}
.acct-qr-box{position:relative;width:150px;height:150px}
.acct-qr-pattern{position:absolute;inset:0;border-radius:6px;overflow:hidden;background:var(--card)}
.acct-qr-pattern i{position:absolute;width:4.762%;height:4.762%;background:var(--foreground)}
.acct-qr-corner{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:var(--card);border:3px solid var(--primary);color:var(--primary)}
.acct-qr-corner.wx{border-color:#10b981;color:#10b981}
.acct-qr-tip{font-size:0.6875rem;color:var(--muted-foreground)}
.acct-pay{flex:1 1 0;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:10px 0;border-radius:10px;border:1px solid var(--border);background:var(--card);color:var(--foreground);font-size:0.875rem;font-weight:500;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease,opacity .15s ease}
.acct-pay:hover{border-color:var(--muted-foreground)}
.acct-pay:disabled{opacity:.5;cursor:not-allowed}

/* ---- 顶栏账号 tips 面板（已登录：年卡/免费状态+充值入口+退出） ---- */
.acct-tips{position:absolute;top:calc(100% + 8px);right:0;z-index:30;width:288px;max-width:calc(100vw - 24px);border-radius:12px;border:1px solid var(--border);box-shadow:0 10px 30px rgba(0,0,0,.18);padding:16px;background:var(--popover);color:var(--popover-foreground);animation:fadeInUp .2s ease forwards}
.acct-tips-head{display:flex;align-items:center;gap:8px}
.acct-tips-name{font-size:0.9375rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acct-tips-info{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;margin-left:auto;padding:0;border:none;border-radius:8px;background:transparent;color:var(--muted-foreground);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color .15s ease,background .15s ease}
.acct-tips-info:hover{color:var(--foreground);background:var(--muted)}
.acct-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:99px;font-size:0.6875rem;font-weight:600}
.acct-badge-free{background:var(--muted);color:var(--muted-foreground)}
.acct-badge-member{background:var(--accent);color:var(--primary)}
.acct-tips-meta{margin-top:6px;font-size:0.6875rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.acct-tips-note{margin-top:10px;font-size:0.6875rem;line-height:1.65;color:var(--muted-foreground)}
.acct-tips-points{display:flex;align-items:center;gap:5px;margin-top:8px;font-size:0.6875rem;color:var(--muted-foreground)}
.acct-tips-actions{display:flex;flex-direction:column;gap:8px;margin-top:14px;padding-top:13px;border-top:1px solid var(--border)}
.acct-tips-actions .acct-btn{width:100%;justify-content:center;padding:7px 0}
.acct-tips-logout{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:100%;margin-top:7px;padding:7px 0;border-radius:10px;border:none;background:transparent;color:var(--muted-foreground);font-size:0.8125rem;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color .15s ease,background .15s ease}
.acct-tips-logout:hover{color:var(--foreground);background:var(--muted)}

/* ---- 轻提示（en-shared 通用 toast；置于登录弹层之上） ---- */
#en-toast-wrap{position:fixed;left:50%;bottom:36px;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.en-toast{padding:8px 16px;border-radius:10px;border:1px solid var(--border);background:var(--popover);color:var(--popover-foreground);box-shadow:0 6px 18px rgba(0,0,0,.14);font-size:0.8125rem;transition:opacity .3s ease}

/* ---- 顶栏站内信（铃铛 + 未读徽标 + 消息面板；游客态铃铛隐藏） ---- */
.msg-toggle{position:relative}
.msg-toggle.hidden{display:none}
.msg-badge{position:absolute;top:1px;right:0;min-width:15px;height:15px;padding:0 4px;border-radius:99px;background:var(--destructive);color:var(--destructive-foreground);font-size:0.5625rem;font-weight:700;line-height:15px;text-align:center;font-variant-numeric:tabular-nums;pointer-events:none}
.msg-badge.hidden{display:none}
.msg-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:30;width:320px;max-width:calc(100vw - 24px);border-radius:12px;border:1px solid var(--border);box-shadow:0 10px 30px rgba(0,0,0,.18);padding:16px;background:var(--popover);color:var(--popover-foreground);animation:fadeInUp .2s ease forwards}
.msg-panel.hidden{display:none}
.msg-panel-head{display:flex;align-items:center;gap:7px}
.msg-panel-title{font-size:0.9375rem;font-weight:600}
.msg-panel-count{padding:2px 8px;border-radius:99px;background:var(--muted);color:var(--muted-foreground);font-size:0.625rem;font-weight:600;white-space:nowrap}
.msg-panel-count.hidden{display:none}
.msg-read-all{display:inline-flex;align-items:center;white-space:nowrap;flex-shrink:0;margin-left:auto;padding:4px 10px;border-radius:8px;border:none;background:transparent;color:var(--muted-foreground);font-size:0.75rem;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color .15s ease,background .15s ease}
.msg-read-all:hover{color:var(--foreground);background:var(--muted)}
.msg-read-all.hidden{display:none}
.msg-list{display:flex;flex-direction:column;gap:6px;max-height:320px;overflow:auto;margin-top:12px}
.msg-empty{padding:26px 0;text-align:center;font-size:0.8125rem;color:var(--muted-foreground)}
.msg-item{display:flex;align-items:flex-start;gap:8px;padding:9px 10px;border-radius:10px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease}
.msg-item:hover{background:var(--muted)}
.msg-item.unread{background:var(--card);border:1px solid var(--border)}
.msg-item.unread:hover{border-color:var(--muted-foreground)}
.msg-dot{flex-shrink:0;width:6px;height:6px;margin-top:7px;border-radius:99px;background:var(--destructive)}
.msg-item-main{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.msg-item-head{display:flex;align-items:center;gap:6px;min-width:0}
.msg-item-tag{flex-shrink:0;padding:1px 6px;border-radius:6px;background:var(--muted);color:var(--muted-foreground);font-size:0.625rem;font-weight:500;white-space:nowrap}
.msg-item.unread .msg-item-tag{background:var(--accent);color:var(--primary);font-weight:600}
.msg-item-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:0.8125rem;font-weight:600;color:var(--foreground)}
.msg-item-time{margin-left:auto;flex-shrink:0;font-size:0.625rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.msg-item-body{margin:0;font-size:0.75rem;line-height:1.6;color:var(--muted-foreground);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.msg-item-link{display:inline-flex;align-items:center;gap:3px;align-self:flex-start;margin-top:1px;font-size:0.75rem;font-weight:500;color:var(--primary);white-space:nowrap}
/* ---- 站内信 2026-09-01 优化：限时截止标签 / 单条删除 / 加载更多 ---- */
.msg-item-exp{flex-shrink:0;font-size:0.625rem;color:var(--chart-5);white-space:nowrap}
.msg-item-del{flex-shrink:0;align-self:flex-start;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:2px;border:none;border-radius:6px;background:transparent;color:var(--muted-foreground);cursor:pointer;opacity:0;transition:opacity .12s ease}
.msg-item:hover .msg-item-del,.msg-item-del:focus-visible{opacity:.85}
.msg-item-del:hover{background:var(--accent);color:var(--destructive);opacity:1}
.msg-more{display:block;width:100%;padding:8px 0;border:none;background:transparent;font-size:0.75rem;font-weight:500;color:var(--primary);cursor:pointer}
.msg-more:hover{opacity:.8}
@media (pointer:coarse){.msg-item-del{opacity:.85}}   /* 触屏无 hover：删除钮常显 */

/* ---- 邀请有礼弹层（D-C8 · 分享卡+真实二维码+名单 tabs+微信收款绑定） ---- */
.acct-form-note{margin:2px 0 0;font-size:0.6875rem;line-height:1.6;color:var(--muted-foreground)}
.inv-tabs{display:flex;gap:4px;padding:4px;border-radius:12px;background:var(--muted);margin:0}
.inv-tab{display:flex;flex:1;align-items:center;justify-content:center;gap:5px;white-space:nowrap;padding:7px 4px;border-radius:9px;border:none;background:transparent;color:var(--muted-foreground);font-size:0.75rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}
.inv-tab.on{background:var(--card);color:var(--foreground);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.1)}
.inv-qr-holder{display:flex;align-items:center;justify-content:center;padding:12px;border-radius:14px;background:var(--card);border:1px solid var(--border)}
.inv-qr-box{width:150px;height:150px}
.inv-qr-box img,.inv-qr-box canvas{width:100%!important;height:100%!important;border-radius:6px;display:block}
.inv-link-row{display:flex;align-items:center;gap:8px;width:100%}
.inv-link{flex:1;min-width:0;padding:9px 11px;border-radius:10px;border:1px solid var(--input);background:var(--card);color:var(--foreground);font-size:0.6875rem;font-family:var(--font-mono,monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inv-copy-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;flex-shrink:0;padding:8px 12px;border-radius:10px;border:1px solid var(--border);background:var(--card);color:var(--foreground);font-size:0.75rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:border-color .15s ease}
.inv-copy-btn:hover{border-color:var(--muted-foreground)}
.inv-list{display:flex;flex-direction:column;gap:8px;max-height:min(300px,44vh);overflow:auto;margin:0}
.inv-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:var(--card)}
.inv-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.inv-row-t1{font-size:0.8125rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inv-row-t2{font-size:0.6875rem;color:var(--muted-foreground);font-variant-numeric:tabular-nums}
.inv-tag{display:inline-flex;align-items:center;padding:1px 8px;border-radius:99px;font-size:0.625rem;font-weight:600;flex-shrink:0;white-space:nowrap}
.inv-tag-ok{background:var(--accent);color:var(--primary)}
.inv-tag-wait{background:var(--muted);color:var(--muted-foreground)}
.inv-wx{display:flex;flex-direction:column;gap:9px;padding:11px 12px;border-radius:12px;border:1px dashed var(--border);background:color-mix(in srgb,var(--muted) 45%,transparent)}
.inv-wx-row{display:flex;align-items:center;gap:10px}
.inv-wx-row-t{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.inv-wx-t1{font-size:0.8125rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inv-wx-t2{font-size:0.6875rem;color:var(--muted-foreground);line-height:1.55;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inv-wx-avatar{width:38px;height:38px;border-radius:99px;object-fit:cover;flex-shrink:0;border:1px solid var(--border);background:var(--muted)}
.inv-wx-qr{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:4px}
.inv-wx-qr .inv-qr-holder{padding:10px}
.inv-wx-qr .inv-qr-box{width:128px;height:128px}
.inv-wx-qr-note{font-size:0.6875rem;color:var(--muted-foreground);text-align:center;line-height:1.6}
.inv-empty{padding:18px 0;text-align:center;font-size:0.75rem;color:var(--muted-foreground)}

/* ---- SW 新版本提示条（en-shared.js 注入 · M2-C3） ---- */
.sw-update-bar{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);display:flex;align-items:center;gap:12px;padding:10px 10px 10px 18px;border-radius:12px;border:1px solid var(--border);background:var(--card);color:var(--foreground);box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:9999;font-size:0.875rem;white-space:nowrap}
.sw-update-bar button{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex-shrink:0;padding:6px 14px;border-radius:8px;border:1px solid var(--primary);background:var(--primary);color:var(--primary-foreground);font-size:0.8125rem;font-weight:500;cursor:pointer;transition:opacity .15s ease}
.sw-update-bar button:hover{opacity:.85}

/* ---- 辨析训练（discern.html · M2-D3 P8-4） ---- */
.disc-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;border:1px solid var(--border);background:var(--muted);color:var(--muted-foreground);font-size:0.75rem;font-weight:500}
.disc-badge-c{padding:3px 8px;gap:4px;font-size:0.7rem;color:var(--accent);background:transparent}
.disc-badge-c::before{content:'';width:5px;height:5px;border-radius:999px;background:var(--accent);flex-shrink:0}
.disc-prompt{font-size:1.75rem;font-weight:600;color:var(--foreground);text-wrap:balance;word-break:break-word;overflow-wrap:anywhere;line-height:1.35;cursor:pointer;transition:opacity .15s ease}
.disc-prompt:hover{opacity:.65}
.disc-prompt-def{font-size:1.25rem;font-weight:500;cursor:default}
.disc-opts{display:flex;flex-direction:column;gap:10px;width:100%}
.disc-opt{display:flex;align-items:center;gap:12px;width:100%;padding:14px 16px;border-radius:12px;border:1px solid var(--border);background:color-mix(in srgb,var(--card) var(--card-alpha,100%),transparent);text-align:left;font-size:1rem;line-height:1.5;color:var(--foreground);transition:background .15s ease,border-color .15s ease}
.disc-opt:hover{border-color:var(--primary)}
.disc-opt .disc-letter{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:26px;height:26px;border-radius:8px;background:var(--muted);color:var(--muted-foreground);font-size:0.8125rem;font-weight:600}
.disc-opt .disc-word{font-size:1.125rem;font-weight:600}
.disc-opt .disc-ph{font-size:0.8125rem;font-family:var(--font-mono,monospace);color:var(--muted-foreground)}
.disc-opt.ok{border-color:var(--pd-ok);background:color-mix(in srgb,var(--pd-ok) 8%,transparent)}
.disc-opt.ok .disc-letter{background:var(--pd-ok);color:#fff}
.disc-opt.bad{border-color:var(--pd-bad);background:color-mix(in srgb,var(--pd-bad) 7%,transparent)}
.disc-opt.bad .disc-letter{background:var(--pd-bad);color:#fff}
.disc-cmp{display:flex;flex-direction:column;gap:6px;width:100%;padding:12px 14px;border-radius:12px;background:var(--muted)}
.disc-cmp-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;text-align:left}
.disc-cmp-row b{font-size:1rem;color:var(--foreground);cursor:pointer;flex-shrink:0}
.disc-cmp-row b:hover{opacity:.65}
.disc-cmp-row span{font-size:0.8125rem;color:var(--muted-foreground);text-align:right}
.disc-cmp-word{display:inline-flex;align-items:center;gap:5px;min-width:0}
.disc-speak{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--muted-foreground);cursor:pointer;flex-shrink:0;-webkit-tap-highlight-color:transparent;transition:color .15s ease,background .15s ease}
.disc-speak:hover{color:var(--primary);background:var(--muted)}
.disc-cmp-note{font-size:0.75rem;color:var(--muted-foreground);text-align:left;padding-top:2px;border-top:1px dashed var(--border)}

/* iOS Safari 交互红线：<16px 字号的输入框聚焦时自动放大页面且无法用 JS 阻止。
   移动端将文本输入控件抬升至 16px（含动态创建：登录/会员码 .acct-input、充值自定义金额 .acct-amt-input、
   真题翻译作答 .pd-trtextarea、小升初填空 .pd-fillinput/.pd-ginput）；桌面布局不受影响。type=date/select 弹原生选择器不触发缩放，不处理 */
@media (max-width: 768px){
  .acct-input, .acct-amt-custom .acct-amt-input, .pd-trtextarea, .pd-fillinput, .pd-ginput{ font-size: 16px; }
}

/* 站点运行时配置（admin 后台直达前台） */
.ann-bar{display:flex;align-items:center;gap:8px;max-width:var(--content-max,960px);margin:8px auto 0;padding:7px 12px;border-radius:10px;border:1px solid var(--border);background:color-mix(in srgb,var(--primary) 7%,var(--card));font-size:12.5px;line-height:1.5}
.ann-bar::before{content:'';flex-shrink:0;width:7px;height:7px;border-radius:99px;background:var(--primary);opacity:.85}
.ann-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--foreground)}
.ann-link{flex-shrink:0;color:var(--primary);font-weight:600;text-decoration:none;white-space:nowrap}
.ann-link:active{opacity:.7}
.ann-close{flex-shrink:0;width:22px;height:22px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:7px;background:transparent;color:var(--muted-foreground);font-size:15px;line-height:1;cursor:pointer;-webkit-tap-highlight-color:transparent}
.ann-close:hover{background:var(--muted)}
.maint-mask{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,var(--background) 88%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.maint-panel{max-width:340px;width:100%;display:flex;flex-direction:column;align-items:center;gap:10px;padding:30px 26px;border-radius:16px;border:1px solid var(--border);background:var(--card);text-align:center;box-shadow:var(--shadow-lg,0 10px 40px rgba(0,0,0,.14))}
.maint-panel svg{width:38px;height:38px;color:var(--primary);opacity:.9}
.maint-panel h3{margin:0;font-size:16px;font-weight:700;color:var(--foreground)}
.maint-panel p{margin:0;font-size:13px;line-height:1.8;color:var(--muted-foreground)}
.maint-retry{margin-top:6px;padding:8px 22px;border-radius:99px;border:1px solid var(--input);background:var(--card);color:var(--foreground);font-size:13px;font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent;white-space:nowrap}
.maint-retry:hover{border-color:var(--primary);color:var(--primary)}

/* ===== 内联样式外链化（2026-09-03 自动提取 · iu- = inline utility） ===== */
.iu-ml-auto{margin-left:auto}
.iu-padd-56px16px{padding:56px 16px}
.iu-marg-8px{margin-top:8px}
.iu-heig-300px{height:300px}
.iu-minw-560px{min-width:560px}
.iu-p-empty{padding:28px 16px}
.iu-minw-420px{min-width:420px}
.iu-padd-0-maxh-360px-over-auto{padding:0;max-height:360px;overflow-y:auto}
.iu-padd-6px16px-maxh-220px-over-auto{padding:6px 16px;max-height:220px;overflow-y:auto}
.iu-maxh-260px{max-height:260px}
.iu-minw-960px{min-width:960px}
.iu-padd-20px14px{padding:20px 14px}
.iu-widt-auto{width:auto}
.iu-widt-170px{width:170px}
.iu-maxh-420px{max-height:420px}
.iu-minw-1000px{min-width:1000px}
.iu-flex-wrap-gap-10px{flex-wrap:wrap;gap:10px}
.iu-gap-6px-flex-wrap{gap:6px;flex-wrap:wrap}
.iu-padd-3px12px-font-0d76rem{padding:3px 12px;font-size:0.76rem}
.iu-maxh-360px{max-height:360px}
.iu-minw-860px{min-width:860px}
.iu-minw-720px{min-width:720px}
.iu-flex-8{display:flex;gap:8px}
.iu-widt-110px{width:110px}
.iu-maxh-480px{max-height:480px}
.iu-grid-10{display:grid;gap:10px}
.iu-mb-4{margin-bottom:4px}
.iu-w-full{width:100%}
.iu-lh-19{line-height:1.9}
.iu-flex-1{flex:1}
.iu-maxh-460px{max-height:460px}
.iu-minw-760px{min-width:760px}
.iu-line-1d8{line-height:1.8}
.iu-widt-190px{width:190px}
.iu-disp-flex-alig-center-gap-5px-curs-pointer{display:flex;align-items:center;gap:5px;cursor:pointer}
.iu-maxh-440px{max-height:440px}
.iu-widt-34px{width:34px}
.iu-maxh-240px{max-height:240px}
.iu-minw-640px{min-width:640px}
.iu-padd-20px16px{padding:20px 16px}
.iu-widt-160px{width:160px}
.iu-maxh-520px{max-height:520px}
.iu-minw-900px{min-width:900px}
.iu-disp-none{display:none}
.iu-widt-100p-heig-auto-resi-vertical{width:100%;height:auto;resize:vertical}
.iu-gap-6px-flex-wrap-marg-6px{gap:6px;flex-wrap:wrap;margin-bottom:6px}
.iu-widt-100p-disp-none{width:100%;display:none}
.iu-maxh-300px{max-height:300px}
.iu-disp-flex-gap-8px-flex-wrap{display:flex;gap:8px;flex-wrap:wrap}
.iu-widt-132px{width:132px}
.iu-widt-104px{width:104px}
.iu-widt-92px{width:92px}
.iu-widt-152px{width:152px}
.iu-widt-118px{width:118px}
.iu-maxh-560px{max-height:560px}
.iu-p-16-14{padding:16px 14px}
.iu-widt-90px{width:90px}
.iu-minw-480px{min-width:480px}
.iu-flex-wrap-gap-8px{flex-wrap:wrap;gap:8px}
.iu-disp-grid-gap-8px{display:grid;gap:8px}
.iu-padd-10px14px{padding:10px 14px}
.iu-disp-grid-gap-14px{display:grid;gap:14px}
.iu-disp-flex-alig-center-just-space-between-gap-10px{display:flex;align-items:center;justify-content:space-between;gap:10px}
.iu-font-13px-font-600{font-size:13px;font-weight:600}
.iu-minw-76px{min-width:76px}
.iu-disp-flex-gap-10px-flex-wrap{display:flex;gap:10px;flex-wrap:wrap}
.iu-flex-1-minw-220px{flex:1;min-width:220px}
.iu-widt-200px{width:200px}
.iu-widt-150px{width:150px}
.iu-minw-820px{min-width:820px}
.iu-maxw-420px{max-width:420px}
.iu-marg-10px{margin-top:10px}
.iu-maxw-560px{max-width:560px}
.iu-marg-2px{margin-left:2px}
.iu-padd-32px0{padding:32px 0}
.iu-maxw-600px{max-width:600px}
.iu-marg-12px{margin-bottom:12px}
.iu-just-space-between{justify-content:space-between}
.iu-widt-220px{width:220px}
.iu-font-12px{font-size:12px}
.iu-padd-20px0{padding:20px 0}
.iu-grid-88px1fr-marg-8px{grid-template-columns:88px 1fr;margin-bottom:8px}
.iu-minh-84px{min-height:84px}
.iu-marg-0{margin:0}
.iu-maxw-680px{max-width:680px}
.iu-maxw-760px{max-width:760px}
.iu-maxh-180px{max-height:180px}
.iu-minw-520px{min-width:520px}
.iu-marg-12px{margin-top:12px}
.iu-pointer{cursor:pointer}
.iu-maxw-260px{max-width:260px}
.iu-maxw-240px-word-break-all{max-width:240px;word-break:break-all}
.iu-maxw-200px{max-width:200px}
.iu-fw-6{font-weight:600}
.iu-font-tabular-nums{font-variant-numeric:tabular-nums}
.iu-curs-default{cursor:default}
.iu-font-inherit{font-family:inherit}
.iu-maxh-200px{max-height:200px}
.iu-maxh-320px{max-height:320px}
.iu-font-12d5px{font-size:12.5px}
.iu-widt-auto-flex-1{width:auto;flex:1}
.iu-shrink-0{flex-shrink:0}
.iu-marg-8px00{margin:8px 0 0}
.iu-gap-4px{gap:4px}
.iu-gap-6px-flex-nowrap{gap:6px;flex-wrap:nowrap}
.iu-padd-3px10px{padding:3px 10px}
.iu-maxw-320px-over-hidden-text-ellipsis-whit-nowrap{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-disp-flex-alig-center-gap-10px{display:flex;align-items:center;gap:10px}
.iu-minw-80px-font-12d5px{min-width:80px;font-size:12.5px}
.iu-disp-flex-alig-center-gap-8px-font-12d5px{display:flex;align-items:center;gap:8px;font-size:12.5px}
.iu-maxw-300px-over-hidden-text-ellipsis-whit-nowrap{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-maxw-150px-over-hidden-text-ellipsis-whit-nowrap{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-maxw-330px-over-hidden-text-ellipsis-whit-nowrap{max-width:330px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-maxw-200px-over-hidden-text-ellipsis-whit-nowrap{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-maxw-120px-over-hidden-text-ellipsis-whit-nowrap{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iu-grid-88px1fr88px1fr{grid-template-columns:88px 1fr 88px 1fr}
.iu-widt-76px-flex-none{width:76px;flex:none}
.iu-widt-120px-flex-none{width:120px;flex:none}
.iu-line-1d7{line-height:1.7}
.iu-alig-flex-start{align-items:flex-start}
.iu-flex-1-minw-0{flex:1;min-width:0}
.iu-text-center-padd-48px{text-align:center;padding:48px}
.iu-disp-flex-alig-center-gap-18px-flex-wrap{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.iu-flex-1-minw-240px{flex:1;min-width:240px}
.iu-fw-7{font-weight:700}
.iu-whit-nowrap-flex-0{white-space:nowrap;flex-shrink:0}
.iu-widt-15px-heig-15px{width:15px;height:15px}
.iu-marg-18px{margin-top:18px}
.iu-whit-nowrap{white-space:nowrap}
.iu-widt-13px-heig-13px{width:13px;height:13px}
.iu-maxh-52vh-over-auto-marg-10px{max-height:52vh;overflow:auto;margin-top:10px}
.iu-minw-150px{min-width:150px}
.iu-widt-14px-heig-14px{width:14px;height:14px}
.iu-maxw-640px-gap-44px{max-width:640px;gap:44px}
.iu-gap-6px-marg-0auto{gap:6px;margin:0 auto}
.iu-maxw-640px-gap-10px{max-width:640px;gap:10px}
.iu-maxw-720px-gap-10px{max-width:720px;gap:10px}
.iu-marg-14px04px{margin:14px 0 4px}
.iu-marg-0014px{margin:0 0 14px}
.iu-disp-flex-gap-10px-just-flex-end{display:flex;gap:10px;justify-content:flex-end}
.iu-maxw-640px-gap-16px{max-width:640px;gap:16px}
.iu-gap-16px{gap:16px}
.iu-gap-12px-disp-none{gap:12px;display:none}
.iu-disp-inline-flex-alig-center-gap-6px{display:inline-flex;align-items:center;gap:6px}

/* ===== 内联样式外链化（2026-09-03 · iu- = inline utility，script 块外安全提取） ===== */
.iu-ml-auto{margin-left:auto}
.iu-padd-56px16px{padding:56px 16px}
.iu-marg-8px{margin-top:8px}
.iu-heig-300px{height:300px}
.iu-minw-560px{min-width:560px}
.iu-p-empty{padding:28px 16px}
.iu-minw-420px{min-width:420px}
.iu-padd-0-maxh-360px-over-auto{padding:0;max-height:360px;overflow-y:auto}
.iu-padd-6px16px-maxh-220px-over-auto{padding:6px 16px;max-height:220px;overflow-y:auto}
.iu-maxh-260px{max-height:260px}
.iu-minw-960px{min-width:960px}
.iu-padd-20px14px{padding:20px 14px}
.iu-widt-auto{width:auto}
.iu-widt-170px{width:170px}
.iu-maxh-420px{max-height:420px}
.iu-minw-1000px{min-width:1000px}
.iu-flex-wrap-gap-10px{flex-wrap:wrap;gap:10px}
.iu-gap-6px-flex-wrap{gap:6px;flex-wrap:wrap}
.iu-padd-3px12px-font-076rem{padding:3px 12px;font-size:0.76rem}
.iu-maxh-360px{max-height:360px}
.iu-minw-860px{min-width:860px}
.iu-minw-720px{min-width:720px}
.iu-flex-8{display:flex;gap:8px}
.iu-widt-110px{width:110px}
.iu-maxh-480px{max-height:480px}
.iu-grid-10{display:grid;gap:10px}
.iu-mb-4{margin-bottom:4px}
.iu-w-full{width:100%}
.iu-colo-varfg{color:var(--fg)}
.iu-lh-19{line-height:1.9}
.iu-flex-1{flex:1}
.iu-maxh-460px{max-height:460px}
.iu-minw-760px{min-width:760px}
.iu-line-18{line-height:1.8}
.iu-widt-190px{width:190px}
.iu-disp-flex-alig-center-gap-5px-curs-pointer{display:flex;align-items:center;gap:5px;cursor:pointer}
.iu-acce-varaccent{accent-color:var(--accent)}
.iu-maxh-440px{max-height:440px}
.iu-widt-34px{width:34px}
.iu-maxh-240px{max-height:240px}
.iu-minw-640px{min-width:640px}
.iu-padd-20px16px{padding:20px 16px}
.iu-widt-160px{width:160px}
.iu-maxh-520px{max-height:520px}
.iu-minw-900px{min-width:900px}
.iu-flex-between{display:flex;justify-content:space-between;align-items:center}
.iu-disp-none{display:none}
.iu-widt-100-heig-auto-resi-vertical{width:100%;height:auto;resize:vertical}
.iu-gap-6px-flex-wrap-marg-6px{gap:6px;flex-wrap:wrap;margin-bottom:6px}
.iu-widt-100-disp-none{width:100%;display:none}
.iu-maxh-300px{max-height:300px}
.iu-disp-flex-gap-8px-flex-wrap{display:flex;gap:8px;flex-wrap:wrap}
.iu-widt-132px{width:132px}
.iu-widt-104px{width:104px}
.iu-widt-92px{width:92px}
.iu-widt-152px{width:152px}
.iu-widt-118px{width:118px}
.iu-maxh-560px{max-height:560px}
.iu-p-16-14{padding:16px 14px}
.iu-widt-90px{width:90px}
.iu-minw-480px{min-width:480px}
.iu-flex-wrap-gap-8px{flex-wrap:wrap;gap:8px}
.iu-disp-grid-gap-8px{display:grid;gap:8px}
.iu-padd-10px14px{padding:10px 14px}
.iu-disp-grid-gap-14px{display:grid;gap:14px}
.iu-disp-flex-alig-center-just-spacebetween-gap-10px{display:flex;align-items:center;justify-content:space-between;gap:10px}
.iu-font-13px-font-600{font-size:13px;font-weight:600}
.iu-minw-76px{min-width:76px}
.iu-disp-flex-gap-10px-flex-wrap{display:flex;gap:10px;flex-wrap:wrap}
.iu-flex-1-minw-220px{flex:1;min-width:220px}
.iu-widt-200px{width:200px}
.iu-widt-150px{width:150px}
.iu-minw-820px{min-width:820px}
.iu-maxw-420px{max-width:420px}
.iu-marg-10px{margin-top:10px}
.iu-maxw-560px{max-width:560px}
.iu-marg-2px{margin-left:2px}
.iu-padd-32px0{padding:32px 0}
.iu-maxw-600px{max-width:600px}
.iu-marg-12px{margin-bottom:12px}
.iu-just-spacebetween{justify-content:space-between}
.iu-widt-220px{width:220px}
.iu-font-12px{font-size:12px}
.iu-padd-20px0{padding:20px 0}
.iu-grid-88px1fr-marg-8px{grid-template-columns:88px 1fr;margin-bottom:8px}
.iu-minh-84px{min-height:84px}
.iu-marg-0{margin:0}
.iu-maxw-680px{max-width:680px}
.iu-maxw-760px{max-width:760px}
.iu-maxh-180px{max-height:180px}
.iu-minw-520px{min-width:520px}
.iu-marg-12px{margin-top:12px}
.iu-widt-100-heig-300px-bord-1pxsolidvarborder-bord-8px-back{width:100%;height:300px;border:1px solid var(--border);border-radius:8px;background:#fff}
.iu-font-varfontmonomonospace-text-uppercase{font-family:var(--font-mono,monospace);text-transform:uppercase}
.iu-font-varfontmonomonospace{font-family:var(--font-mono,monospace)}
.iu-text-center-padd-48px-colo-varfgmuted{text-align:center;padding:48px;color:var(--fg-muted)}
.iu-text-center-padd-48px{text-align:center;padding:48px}
.iu-colo-varfgmuted{color:var(--fg-muted)}
.iu-maxw-640px-gap-44px{max-width:640px;gap:44px}
.iu-colo-varmutedforeground{color:var(--muted-foreground)}
.iu-colo-varforeground{color:var(--foreground)}
.iu-back-varmuted{background:var(--muted)}
.iu-colo-varforeground-text-balance-minh-14em{color:var(--foreground);text-wrap:balance;min-height:1.4em}
.iu-gap-6px-marg-0auto{gap:6px;margin:0 auto}
.iu-colo-varforeground-text-balance{color:var(--foreground);text-wrap:balance}
.iu-back-varaccent-colo-varaccentforeground{background:var(--accent);color:var(--accent-foreground)}
.iu-disp-inlineflex-alig-center-gap-6px-whit-nowrap-flex-0{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex-shrink:0}
.iu-maxw-640px-gap-10px{max-width:640px;gap:10px}
.iu-maxw-720px-gap-10px{max-width:720px;gap:10px}
.iu-maxw-640px-gap-16px{max-width:640px;gap:16px}
.iu-gap-16px{gap:16px}
.iu-gap-12px-disp-none{gap:12px;display:none}
.iu-colo-varforeground-text-balance-word-breakword-over-anyw{color:var(--foreground);text-wrap:balance;word-break:break-word;overflow-wrap:anywhere;max-width:100%;min-height:1.4em}

/* 学习倒计时完成态（可点击重新开始计时：基类 pointer-events:none 需放开） */

/* ---------- 邀请有礼重构（2026-09-04）：弹层限高内滚 + 三区（推广海报/奖励/好友） ----------
   海报为可截图营销卡：品牌语 + 产品点 + 二维码，不含活动规则；移动端不超高，PC 端加宽不细长；2026-09-06 定高 580px（推广页签字体就绪自然高 576.5 + 余量）：三页签/加载态同高不跳变，矮屏仍由 max-height 兜底内滚 */
.inv-modal{max-width:460px;height:580px;max-height:min(88vh,680px);display:flex;flex-direction:column;overflow:hidden}
.inv-modal .acct-modal-head{margin-bottom:14px}
.inv-body{display:flex;flex-direction:column;gap:14px;min-height:0;overflow:auto;overscroll-behavior:contain;padding:2px 2px 4px}
.inv-poster{display:flex;flex-direction:column;align-items:center;gap:12px}
.inv-poster-hero{width:100%;display:flex;flex-direction:column;align-items:center;gap:10px;padding:24px 12px 62px;border-radius:16px;background:linear-gradient(135deg,#4f46e5,#7c3aed 55%,#a855f7);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09),0 10px 26px rgba(79,70,229,.16)}
.inv-poster-title{color:#fff;font-size:1.25rem;font-weight:700;letter-spacing:.2em;margin-left:.2em;text-shadow:0 2px 12px rgba(31,20,90,.25)}
.inv-poster-pills{display:flex;flex-wrap:nowrap;justify-content:center;gap:6px;margin-top:2px}
.inv-poster-pill{white-space:nowrap;padding:4px 12px;border-radius:99px;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.22);color:rgba(255,255,255,.95);font-size:0.6875rem;font-weight:500;letter-spacing:.03em}
.inv-poster-qr{margin-top:-52px;padding:12px;border-radius:16px;background:#fff;box-shadow:0 16px 34px rgba(50,38,150,.26);position:relative;z-index:1}
.inv-poster-qr .inv-qr-box{width:152px;height:152px}
.inv-poster-cap{margin:-2px 0 20px;font-size:0.8125rem;font-weight:600;letter-spacing:.02em}
.inv-save-btn{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;padding:11px 0;margin-bottom:10px;border-radius:12px;border:none;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;font-size:0.8125rem;font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent;box-shadow:0 8px 18px rgba(79,70,229,.28);transition:transform .15s ease,box-shadow .15s ease}
.inv-save-btn:hover{box-shadow:0 10px 22px rgba(79,70,229,.34)}
.inv-save-btn:active{transform:scale(.98)}
.inv-sum{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 2px}
.inv-sum-num{font-size:0.9375rem;font-weight:700;font-variant-numeric:tabular-nums}
.inv-sum-rule{margin-left:auto;font-size:0.6875rem;color:var(--muted-foreground)}
.inv-poster-mask{z-index:95;background:rgba(16,10,42,.74);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}
.inv-poster-dlg{display:flex;flex-direction:column;align-items:center;gap:14px;width:min(392px,90vw);position:relative}
.inv-poster-img{display:block;width:100%;border-radius:16px;box-shadow:0 26px 64px rgba(0,0,0,.42)}
.inv-poster-tip{margin:0;font-size:0.6875rem;line-height:1.6;color:rgba(255,255,255,.85);text-align:center}
.inv-poster-dl{display:inline-flex;align-items:center;gap:7px;padding:10px 28px;border-radius:12px;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.32);color:#fff;font-size:0.75rem;font-weight:600;text-decoration:none;-webkit-tap-highlight-color:transparent}
.inv-poster-dl:active{transform:scale(.98)}
.inv-poster-x{position:absolute;top:-44px;right:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;padding:0;border-radius:99px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);color:#fff;cursor:pointer}

/* ---------- 学习礼（每日达标红包，2026-09-07）：弹窗 460×580 对齐 inv-modal ---------- */
.sg-modal{max-width:460px;height:580px;max-height:min(88vh,680px);display:flex;flex-direction:column;overflow:hidden}
.sg-modal .acct-modal-head{margin-bottom:10px}
.sg-body{display:flex;flex-direction:column;gap:11px;min-height:0;overflow:auto;overscroll-behavior:contain;padding:2px 2px 6px}
.sg-sum{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:12px;background:var(--muted)}
.sg-sum-name{font-size:0.9375rem;font-weight:700}
.sg-sum-date{font-size:0.6875rem;color:var(--muted-foreground)}
.sg-sum-rule{font-size:0.6875rem;font-weight:600;color:var(--primary)}
.sg-sum-note{font-size:0.6875rem;color:var(--muted-foreground)}
.sg-sum-err{font-size:0.75rem;color:var(--muted-foreground);display:flex;align-items:center;gap:6px}
.sg-modal .inv-wx{margin:0 2px}
.sg-cal{display:flex;flex-direction:column;gap:8px}
.sg-cal-nav{display:flex;align-items:center;justify-content:space-between;padding:0 2px}
.sg-cal-month{font-size:0.8125rem;font-weight:700;font-variant-numeric:tabular-nums}
.sg-cal-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:9px;border:1px solid var(--border);background:transparent;color:var(--foreground);font-size:16px;line-height:1;cursor:pointer;-webkit-tap-highlight-color:transparent}
.sg-cal-btn:disabled{opacity:.35;cursor:default}
.sg-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.sg-cal-dow{text-align:center;font-size:0.6875rem;color:var(--muted-foreground);padding:1px 0}
.sg-cal-cell{position:relative;height:38px;display:flex;align-items:center;justify-content:center;border:none;border-radius:10px;background:transparent;color:var(--foreground);font-size:0.8125rem;font-variant-numeric:tabular-nums;cursor:pointer;-webkit-tap-highlight-color:transparent}
.sg-cal-cell.off{visibility:hidden}
.sg-cal-cell.out{opacity:.22;cursor:default}
.sg-cal-cell.mark{box-shadow:inset 0 0 0 1px var(--border)}
.sg-cal-cell.met{box-shadow:inset 0 0 0 1.5px var(--primary);font-weight:700}
.sg-cal-cell.claimed{background:var(--primary);color:var(--primary-foreground,#fff);font-weight:700}
.sg-cal-cell.today::after{content:'';position:absolute;bottom:2px;left:50%;transform:translateX(-50%);width:14px;height:2px;border-radius:1px;background:var(--primary)}
.sg-cal-cell.sel{box-shadow:inset 0 0 0 2px var(--foreground)}
.sg-cal-cell.claimed.sel{box-shadow:inset 0 0 0 2px rgba(127,127,127,.55)}
.sg-dot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:99px;background:var(--primary)}
.sg-dot.got{background:var(--primary-foreground,#fff)}
.sg-dot.idle{background:var(--muted-foreground);opacity:.4}
.sg-cal-legend{display:flex;gap:12px;padding:0 4px;font-size:0.6875rem;color:var(--muted-foreground)}
.sg-cal-legend span{display:inline-flex;align-items:center;gap:4px}
.sg-cal-legend .sg-dot{position:static;transform:none}
.sg-detail{display:flex;flex-direction:column;gap:7px}
.sg-day-head{display:flex;align-items:center;justify-content:space-between;font-size:0.8125rem;font-weight:700;padding:0 2px}
.sg-tag{font-size:0.6875rem;font-weight:600;padding:2px 9px;border-radius:99px;background:var(--muted);color:var(--muted-foreground)}
.sg-tag-ok{background:var(--primary);color:var(--primary-foreground,#fff)}
.sg-prog{display:flex;align-items:center;justify-content:space-between;font-size:0.75rem;padding:7px 11px;border-radius:10px;background:var(--muted);font-variant-numeric:tabular-nums}
.sg-prog-ok{color:var(--primary);font-weight:700}
.sg-rewards{display:flex;flex-direction:column;gap:6px}
.sg-reward-row{display:flex;align-items:center;justify-content:space-between;padding:8px 11px;border-radius:11px;border:1.5px dashed var(--primary)}
.sg-side{display:inline-flex;align-items:center;gap:9px}
.sg-amount{font-size:0.9375rem;font-weight:800;color:var(--primary);font-variant-numeric:tabular-nums}
.sg-state{font-size:0.6875rem;color:var(--muted-foreground)}
.sg-state-ok{color:var(--primary);font-weight:700}
.sg-state-dim{opacity:.55}
.sg-hint{font-size:0.6875rem;color:var(--muted-foreground);text-align:center;line-height:1.6;padding:1px 4px}
.sg-cta{width:100%;justify-content:center;padding:9px 0}
.sg-login-entry{margin-top:12px;display:inline-flex;align-items:center;gap:5px;background:transparent;border:none;padding:4px 2px;color:var(--primary);font-size:0.75rem;font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent}
.sg-login-entry:hover{text-decoration:underline}
/* 达成礼花遮罩：压在弹窗家族（z-60/80）之上、海报遮罩（z-95）之下 */
.sg-celebrate-mask{position:fixed;inset:0;z-index:88;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;animation:acctFadeIn .18s ease forwards}
.sg-celebrate-card{width:min(320px,86vw);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:16px;padding:24px 18px 18px;text-align:center;display:flex;flex-direction:column;gap:8px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.sg-celebrate-emoji{font-size:40px;line-height:1}
.sg-celebrate-title{font-size:1.0625rem;font-weight:800}
.sg-celebrate-sub{font-size:0.75rem;color:var(--muted-foreground);line-height:1.6}
.sg-celebrate-actions{display:flex;gap:8px;margin-top:8px}
.sg-celebrate-actions .acct-btn{flex:1;justify-content:center;padding:9px 0}
/* 学习礼达标顶部消息条（与庆祝卡同源触发，点按直达弹窗） */
.sg-top-toast{position:fixed;top:14px;left:50%;transform:translateX(-50%);z-index:92;display:flex;align-items:center;gap:10px;max-width:min(94vw,560px);padding:10px 18px;border-radius:14px;border:1px solid rgba(245,158,11,.35);background:linear-gradient(135deg,rgba(244,63,94,.94),rgba(249,115,22,.94));color:#fff;box-shadow:0 10px 32px rgba(249,115,22,.35);font-size:0.875rem;font-weight:600;cursor:pointer;animation:sgTopIn .45s cubic-bezier(.21,1.02,.55,1) both}
.sg-top-toast-out{opacity:0;transform:translateX(-50%) translateY(-16px);transition:opacity .38s ease,transform .38s ease}
.sg-top-toast-emoji{font-size:20px;line-height:1}
.sg-top-toast-text{line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sg-top-toast-go{flex:none;padding:4px 12px;border-radius:999px;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.45);font-size:0.8125rem;font-weight:700}
@keyframes sgTopIn{from{opacity:0;transform:translateX(-50%) translateY(-22px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@media (max-width:480px){
  .sg-top-toast{top:10px;padding:9px 14px;font-size:0.8125rem;border-radius:12px}
  .sg-top-toast-text{white-space:normal}
}
@media (max-width:480px){
  .sg-cal-grid{gap:3px}
  .sg-cal-cell{height:34px;font-size:0.75rem;border-radius:8px}
  .sg-modal{max-width:100%;height:560px}
}

/* ---- 栏目菜单强制引导（2026-09-09）：首次建档后一次性 tips 气泡 ----
   遮罩 z=95 压住全站操作（acct-modal 60/pd-ovl 90/en-toast 90 均在下方），
   菜单钮 .page-menu 既有 z=100 穿透可点（无洞设计）；亮环与气泡 pointer-events:none 不挡热区 */
.menu-guide-mask{position:fixed;inset:0;z-index:95;background:rgba(15,12,10,.55);touch-action:none;animation:menuGuideFade .25s ease both}
.dark .menu-guide-mask{background:rgba(0,0,0,.62)}
.menu-guide-ring{position:fixed;z-index:96;pointer-events:none;border:2px solid var(--primary);border-radius:10px;animation:menuGuidePulse 1.5s ease-in-out infinite}
.menu-guide-bubble{position:fixed;z-index:97;pointer-events:none;max-width:min(72vw,250px);padding:9px 14px;border-radius:12px;background:var(--foreground);color:var(--background);font-size:.8125rem;font-weight:500;line-height:1.5;letter-spacing:.01em;box-shadow:0 6px 22px rgba(0,0,0,.3);animation:menuGuideBob 1.5s ease-in-out infinite}
.menu-guide-bubble::before{content:'';position:absolute;left:8px;top:-4px;width:10px;height:10px;border-radius:2px;background:var(--foreground);transform:rotate(45deg)}
.menu-guide-bubble.nudge{animation:menuGuideNudge .4s ease}
@keyframes menuGuideFade{from{opacity:0}to{opacity:1}}
@keyframes menuGuidePulse{0%,100%{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 45%,transparent)}50%{box-shadow:0 0 0 8px color-mix(in srgb,var(--primary) 12%,transparent)}}
@keyframes menuGuideBob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}
@keyframes menuGuideNudge{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

/* ---------- 学阶弹层·track 选择区（2026-09-16 年级行程体系）---------- */
.stage-track{display:none;flex-direction:column;gap:10px}
.stage-track.show{display:flex}
.stage-track.locked .stage-score{opacity:.55}
.stage-track-hd{display:flex;align-items:center;gap:8px}
.stage-track-mode .stage-score{flex:1;padding:10px 12px}
.stage-track-unit{display:flex;flex-direction:column;gap:8px;padding-left:2px}
.stage-track-units{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
.stage-track-units::-webkit-scrollbar{display:none}
.stage-track-u{min-width:44px}
.stage-track-rp{display:flex;align-items:center;gap:8px;font-size:.875rem;color:var(--foreground);cursor:pointer}
.stage-track-rp input{accent-color:var(--primary)}

/* ---------- 分部得分全宽进度条（2026-09-16 反馈：题型 title 入条、进度条拉通） ---------- */
.mk-secbars{display:flex;flex-direction:column;gap:8px}
.mk-secbar{position:relative;height:34px;border-radius:9px;overflow:hidden;display:flex;align-items:center}
.mk-secbar-fill{position:absolute;left:0;top:0;height:100%;transition:width .4s}
.mk-secbar-self{opacity:.28}
.mk-secbar-t{position:relative;z-index:2;padding:0 12px;font-size:.8rem;font-weight:600;color:var(--foreground);text-shadow:0 1px 0 color-mix(in srgb,var(--background) 55%,transparent)}
.mk-secbar-meta{position:relative;z-index:2;margin-left:auto;padding:0 12px;font-size:.75rem;font-variant-numeric:tabular-nums;color:var(--muted-foreground)}

/* 教材行（2026-09-16 整合进学习计划卡：单行收纳位置/调整/补基础） */
.tk-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:2px 0}
.tk-pos{font-size:.84rem;color:var(--foreground);flex:1;min-width:220px}
.tk-btn{padding:3px 12px;font-size:.72rem}
.tk-rp{display:flex;align-items:center;gap:5px;font-size:.78rem;color:color-mix(in srgb,var(--muted-foreground) 78%,var(--foreground));cursor:pointer}
.tk-cov{font-size:.78rem;color:color-mix(in srgb,var(--muted-foreground) 78%,var(--foreground));padding-bottom:4px}

/* 学阶弹层两步式第二页（反馈⑫②） */
.stage-track-back{border:none;background:none;color:var(--primary);font-size:.82rem;cursor:pointer;padding:2px 10px 2px 0}
.stage-track-unit .stage-scorelabel{margin-left:auto}

/* ---------- 错字母门禁视觉警示（2026-09-18 双端续修）：输入框=边框本体闪红两下
   （叠加在绿/橙状态边框上、同粗细，不再外画 box-shadow 圈）；格子侧=当前待输入
   字母/单词的下划线闪红两下（.kb-err-line，非整盒闪）。只写 50% 帧：动画起止回落
   到元素底层颜色，连击错键 remove→reflow→add 重启。
   第四轮：句子页当前词线底色 var(--ring) 橙与 destructive 红近似同色、仅变色肉眼
   不可见 → 50% 帧叠 scaleY(2) 瞬时加粗一倍（transform 不参与布局零位移） ---------- */
.kb-err-flash{animation:kb-err-blink .3s ease-in-out 2}
@keyframes kb-err-blink{50%{border-color:var(--destructive)}}
.kb-err-line{animation:kb-err-line-blink .3s ease-in-out 2}
@keyframes kb-err-line-blink{50%{background-color:var(--destructive);transform:scaleY(2)}}

/* ---------- 学阶弹层·教材版本/单元下拉（2026-09-19 版本全量补全：15 新版入列，chips→select） ---------- */
.stage-track-field{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.stage-track-field .stage-scorelabel{flex:0 0 auto;margin:0}
.stage-track-field .stage-scorerow{flex:1;min-width:0}
.stage-select{flex:1;min-width:140px;padding:9px 10px;border-radius:8px;border:1px solid var(--input);font-size:0.9rem;font-family:inherit;color:var(--foreground);background:var(--card);appearance:none;-webkit-appearance:none;cursor:pointer}
.stage-select:focus{outline:none;border-color:var(--primary)}
