/* ============================================================
 * 创归思伴学 · 子页共享设计系统（foundation）
 *   · 复用 desktop.css v3 令牌（热粉 #E2538F / 奶油底 / 圆体 Baloo2·Quicksand）
 *   · 适配「无侧栏」独立子页：提供居中容器 + 返回学生端顶栏
 *   · 将子页自有 --brand/--bg 等旧紫青变量重映射到热粉系统
 *     （本文件经 <link> 在子页 <style> 之后加载，故覆盖生效）
 * 红线：离线优先 · 不引 CDN · 不喂答案 · 不渲染差生标签 · REGISTRY=57 不变
 * 与 desktop.css（app.html）/ style.css（client.html）/ site.css（官网）隔离
 * ============================================================ */
@import url("desktop.css");

/* ---- 变量重映射：子页旧紫青 → 热粉系统 ---- */
:root{
  --accent:var(--purple);         /* 主强调色（默认=品牌热粉，子页可覆写语义色） */
  --accent-d:var(--purple-d);
  --accent-l:var(--purple-l);
  --accent-shadow:rgba(226,83,143,.6);
  --brand:var(--accent);          /* 主操作色（原 #6d5efc 紫 · 跟随 --accent，品牌热粉不变） */
  --brand-d:var(--purple-d);
  --bg:#FFF6F0;                   /* 暖奶油底（原 #f7f8fc 冷灰） */
  --card:#FFFFFF;
  --ink:rgba(40,30,38,.95);
  --muted:rgba(40,30,38,.62);
  --line:rgba(40,30,38,.08);      /* 等同 --hair */
  --ok:var(--green);
}

/* ---- 基底：去子页自带 18px body 内边距，交给 .subpage 容器 ---- */
html,body{background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased}
body{padding:0;line-height:var(--lh-normal);font-size:var(--fs-base)}

/* ---- 居中内容容器（替代缺失的侧栏栅格，对齐 app.html 主区观感） ---- */
.subpage{max-width:960px;margin:0 auto;padding:24px 24px 72px}

/* ---- 模块1 T-B2：学科上下文条（版本/年级/单元，仅上下文不渲染差生标签） ---- */
.subject-ctx{font-size:12px;color:var(--muted);padding:6px 12px;background:var(--surface,#fff);
  border:1px solid var(--line);border-radius:8px;margin:8px 0}

/* ---- 返回学生端顶栏 ---- */
.subpage-bar{display:inline-flex;align-items:center;gap:6px;margin:2px 0 20px;
  color:var(--accent-d);font-weight:600;font-size:13px;letter-spacing:var(--tr-snug);
  text-decoration:none;padding:7px 14px;border-radius:var(--r-pill);background:var(--accent-l);
  transition:background .2s ease,transform .2s var(--ease-pop)}
.subpage-bar:hover{background:var(--accent-l);transform:translateX(-2px)}
.subpage-bar svg{width:15px;height:15px;stroke:currentColor;stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round}

/* ---- 统一标题 / 副标题节奏（子页多用裸 <h1>） ---- */
h1{font-family:var(--font-display);font-size:24px;font-weight:700;color:var(--ink);
  letter-spacing:var(--tr-tight);line-height:var(--lh-tight);margin:0 0 6px}
.sub{color:var(--muted);font-size:var(--fs-md);line-height:var(--lh-loose);margin-bottom:18px}
h2,h3{font-family:var(--font-display);color:var(--ink);letter-spacing:var(--tr-snug)}

/* ---- 统一按钮（子页多用裸 <button>） ---- */
button{background:var(--accent);color:#fff;border:0;border-radius:var(--r-sm);padding:9px 16px;
  font-size:14px;font-family:inherit;font-weight:600;cursor:pointer;
  box-shadow:0 6px 14px -8px var(--accent-shadow);
  transition:transform .15s var(--ease-pop),box-shadow .2s ease,background .2s ease}
button:hover{background:var(--accent-d);box-shadow:0 8px 18px -8px var(--accent-shadow)}
button:active{transform:scale(.96)}
button.secondary,button.tag{background:var(--surface);color:var(--ink);border:1px solid var(--hair);box-shadow:none}
button.secondary:hover,button.tag:hover{background:var(--surface-2);border-color:var(--hair-strong)}

/* ---- 统一标签（子页 .tag 多为紫字+淡紫底） ---- */
.tag{color:var(--accent-d);background:var(--accent-l);border:1px solid var(--accent-l);
  display:inline-block;font-size:11px;font-weight:600;padding:3px 10px;border-radius:var(--r-pill);margin-left:6px}

/* ---- 通用提示框描边统一为热粉（子页多 border-left:3px solid var(--brand)） ---- */
.note{color:var(--muted);font-size:12px;line-height:1.6;margin-top:8px}
.hintbox,.ladder .lv,.matrix .pt .h,.offline{border-left-color:var(--accent)}

/* ---- 离线/本地模式提示（子页 fetch 失败回退时显示，热粉系一致） ---- */
.offline{margin-top:10px;padding:8px 10px;background:#fff8ec;border-left:3px solid #f0a020;
  border-radius:6px;font-size:12px;line-height:1.6;color:#8a5a00}
.offline[hidden]{display:none}

/* ---- 表单控件轻抛光（不破坏子页自有布局） ---- */
select,textarea{font-family:inherit;color:var(--ink);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface)}
select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-l)}

/* ---- 移动端：容器收窄 ---- */
@media (max-width:720px){
  .subpage{padding:18px 16px 56px}
  h1{font-size:21px}
}
@media (prefers-reduced-motion:reduce){
  .subpage-bar,button{transition:none}
  button:active{transform:none}
}

/* ==================== UI 升级补丁 Gizmo 借鉴版（U0–U5）====================
 * 正面激励（P1）：只有 +XP/关卡/进度，无扣命/排行/对战/上瘾机制。
 * 配色沿用既有 ABC 体系（--accent 品牌热粉 + 各科语义色），不越界。
 * 离线诚实（P5）：无数据显示占位语，不画假进度。
 */
/* 首页 Hero：今日闯关大按钮 + 今日进度环（U1/U4） */
.gx-hero{display:flex;align-items:stretch;gap:16px;margin:4px 0 14px;flex-wrap:wrap}
.gx-hero-l{flex:1;min-width:260px}
.gx-quest,.gx-quest-btn{display:flex;align-items:center;gap:14px;padding:18px 20px;border-radius:20px;
  background:linear-gradient(135deg,var(--accent),var(--accent-d));color:#fff;text-decoration:none;
  box-shadow:0 10px 24px -10px var(--accent-shadow);transition:transform .15s,box-shadow .15s}
.gx-quest:hover,.gx-quest-btn:hover{transform:translateY(-2px);box-shadow:0 14px 30px -10px var(--accent-shadow)}
.gx-quest-ic{font-size:30px;filter:drop-shadow(0 3px 6px rgba(0,0,0,.2))}
.gx-quest-txt{display:flex;flex-direction:column;gap:2px}
.gx-quest-txt b{font-size:19px;letter-spacing:.5px}
.gx-quest-txt small{font-size:12px;opacity:.9}
.gx-quest-go{margin-left:auto;font-size:14px;font-weight:700;background:rgba(255,255,255,.18);
  padding:6px 12px;border-radius:999px}
.gx-quest-btn.idle{background:var(--remain,#f1f3f8);color:var(--muted);box-shadow:none;cursor:not-allowed;width:100%}
.gx-hero-r{display:flex;flex-direction:column;align-items:center;gap:8px;justify-content:center}
.gx-hero-ring{display:flex;align-items:center;justify-content:center;background:var(--card,#fff);
  border:1px solid var(--line,#e7eaf2);border-radius:20px;padding:10px 16px;text-decoration:none}
.gx-ring{position:relative;width:64px;height:64px;text-align:center}
.gx-ring svg{width:64px;height:64px}
.gx-ring-fill{transition:stroke-dasharray .5s ease}
.gx-ring b{position:absolute;top:18px;left:0;right:0;font-size:17px;color:var(--ink,#1f2430)}
.gx-ring span{position:absolute;top:36px;left:0;right:0;font-size:11px;color:var(--muted,#6b7080)}
/* XP 角标（U3 零惩罚：只有 +XP） */
.gx-xp-chip,.gx-xp-badge{display:inline-flex;align-items:center;padding:6px 14px;border-radius:999px;
  background:#fdf1dc;color:#d97706;font-size:13px;font-weight:700}
.gx-xp-badge b{font-size:16px}
/* 复习关卡卡组（U2） */
.gx-quests{display:flex;flex-direction:column;gap:8px;margin:6px 0 12px}
.gx-quest-card{display:block;padding:12px 14px;border-radius:14px;background:var(--card,#fff);
  border:1px solid var(--line,#e7eaf2);text-decoration:none;color:var(--ink,#1f2430);
  box-shadow:0 4px 12px -8px rgba(0,0,0,.12);transition:transform .15s}
.gx-quest-card:hover{transform:translateX(3px)}
.gx-qc-cover{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;
  background:#eef2ff;color:#5b6bd6;margin-bottom:4px}
.gx-quest-card b{font-size:14px;display:block}
.gx-quest-card small{font-size:12px;color:var(--muted,#6b7080)}
.gx-quest-card em{font-style:normal;background:var(--remain,#f1f3f8);border-radius:6px;padding:1px 6px;margin:0 2px}
.gx-qc-go{float:right;font-size:12px;color:var(--accent);font-weight:700}
.gx-muted{font-size:13px;color:var(--muted,#6b7080);padding:6px 0}
/* 成长页总览条（U4） */
.gx-overview{display:flex;gap:10px;margin:2px 0 14px;flex-wrap:wrap}
.gx-ov{flex:1;min-width:110px;background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);
  border-radius:14px;padding:12px;text-align:center}
.gx-ov b{display:block;font-size:22px;color:var(--accent);font-variant-numeric:tabular-nums}
.gx-ov span{font-size:12px;color:var(--muted,#6b7080)}
/* U0 学科彩卡矩阵 */
.gx-subj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:8px 0}
.gx-subj-card{position:relative;overflow:hidden;text-align:left;background:var(--card,#fff);
  border:1px solid var(--line,#e7eaf2);border-radius:14px;padding:0;cursor:pointer;
  box-shadow:0 4px 12px -8px rgba(0,0,0,.12);transition:transform .15s}
/* [R13 2026-09-21 · PM 报障②「每个学科学科彩卡…光标点到这里，颜色，让字看不清楚」]
   设置页那批彩卡是 **<button>**（`gameui.subjectCard()`），本类 `:hover` 只声明 transform/box-shadow
   ⇒ 背景被本文件 L58 无作用域 `button:hover{background:var(--accent-d)}`（0,1,1）抢走 ⇒ 深紫 #6C51C4
   压深墨学科名 ⇒ 实测对比度 **2.77**（< 4.5）。此处显式接管为卡片本底色（白），
   对 `#/subjects` 的 `<a class="gx-subj-card">` 版**零视觉差异**（它本来静置/悬停都是白），
   只把 `<button>` 版从深紫拉回白卡：学科名 16.11、描述 16.11（实测）。 */
.gx-subj-card:hover{transform:translateY(-2px);background:var(--card,#fff)}
.gx-sc-band{display:block;height:52px;background:linear-gradient(135deg,var(--sc),transparent)}
/* 设置页学科彩卡收窄：降低色带高度+饱和度，不再抢眼（2026-08-20 P1-7） */
#gxSubjGrid .gx-subj-card{border-radius:12px}
#gxSubjGrid .gx-sc-band{height:22px;opacity:.55}
#gxSubjGrid .gx-sc-body{padding:7px 11px}
#gxSubjGrid .gx-sc-body b{font-size:13px}
#gxSubjGrid .gx-sc-body small{font-size:10px}
.gx-sc-body{display:flex;flex-direction:column;gap:2px;padding:10px 12px}
.gx-sc-body b{font-size:15px;color:var(--ink,#1f2430)}
.gx-sc-body small{font-size:12px;color:var(--muted,#6b7080)}
/* 学科彩卡包裹层（用于叠加 🧊 几何3D 入口，避免嵌套 <a> 进 <button>） */
.gx-subj-card-wrap{position:relative}
.gx-subj-card-wrap>.gx-subj-card{width:100%}
/* 数学专属：彩卡右上角 🧊 几何/函数3D可视化入口 */
.gx-sc-geo{position:absolute;top:8px;right:10px;z-index:3;display:inline-flex;align-items:center;gap:3px;
  padding:3px 8px;border-radius:999px;font-size:11px;font-weight:700;line-height:1;text-decoration:none;
  background:linear-gradient(135deg,#6D5EFC,#28C2C8);color:#fff;box-shadow:0 4px 12px rgba(109,94,252,.35);
  transition:transform .15s,opacity .15s;white-space:nowrap}
.gx-sc-geo:hover{transform:scale(1.06);opacity:.92}
.gx-sub{font-size:13px;font-weight:700;color:var(--ink,#1f2430);margin:10px 0 6px}
/* 章节卡片：垂直磁贴（去长条化 · 2026-08-21 P1-4） */
.gx-chapter{display:flex;flex-direction:column;align-items:center;text-align:center;gap:9px;width:100%;min-height:152px;
  padding:20px 14px 16px;background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);border-top:3px solid var(--ch-accent,#8B6FE8);
  border-radius:16px;margin:0;cursor:pointer;transition:transform .18s,box-shadow .18s,border-color .18s;position:relative;overflow:hidden}
/* [R13 2026-09-21] 🔴 hover 必须**显式接管 background**：本文件 L58 有一条**无作用域**的
   `button:hover{background:var(--accent-d)}`（特异性 0,1,1）。.gx-chapter 是 <button>，
   它自己的 :hover 只声明 transform/box-shadow/border-color —— 对 `background` 而言，级联里
   唯一命中者就是 `button:hover`（0,1,1 > 本类基础规则 0,1,0）⇒ 悬停时整张卡被刷成深紫
   #6C51C4，而卡内深墨字（--ink = rgba(40,30,38,.95)）纹丝不动 → 实测对比度 2.77（< 4.5）。
   修法沿用本文件既有范式（与 .gym-quick .asp-chip:hover 同源）：在 :hover 内显式接管
   background，取**极淡 accent 渐变（仍近白）**，文字对比度不降；不动 transform/阴影层级。 */
.gx-chapter:hover{transform:translateY(-3px);box-shadow:0 12px 26px -12px var(--ch-accent,#8B6FE8);border-color:color-mix(in srgb,var(--ch-accent,#8B6FE8) 35%,var(--line,#e7eaf2));background:linear-gradient(180deg,color-mix(in srgb,var(--ch-accent,#8B6FE8) 8%,var(--card,#fff)) 0%,var(--card,#fff) 60%)}
.gx-chapter:active{transform:translateY(-1px)}
/* 章节选中态：点击后高亮，与 hover 区分 */
.gx-chapter.ch-selected{transform:translateY(-2px);box-shadow:0 14px 30px -12px var(--ch-accent,#8B6FE8);
  border-color:var(--ch-accent,#8B6FE8);border-width:2px;background:linear-gradient(180deg,color-mix(in srgb,var(--ch-accent,#8B6FE8) 6%,transparent) 0%,var(--card,#fff) 40%)}
.ch-ic{width:52px;height:52px;flex:none;display:flex;align-items:center;justify-content:center;font-size:27px;border-radius:15px;
  background:linear-gradient(135deg,var(--ch-accent,#8B6FE8),color-mix(in srgb,var(--ch-accent,#8B6FE8) 50%,#fff));
  box-shadow:0 6px 14px -6px var(--ch-accent,#8B6FE8)}
.gx-ch-name{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px;align-items:center;justify-content:center}
.gx-ch-name b{display:block;font-size:14px;font-weight:600;color:var(--ink,#1f2430);line-height:1.35}
.gx-ch-name small{font-size:11px;color:var(--muted,#6b7080);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ch-idx{font-size:10px;font-weight:700;color:var(--ch-accent,#8B6FE8);background:color-mix(in srgb,var(--ch-accent,#8B6FE8) 10%,transparent);
  padding:3px 11px;border-radius:99px;letter-spacing:.5px}
.gx-ch-arrow{display:none}
.gx-ch-bar{width:90px;height:6px;border-radius:99px;background:var(--remain,#f1f3f8);overflow:hidden;flex:none}
.gx-ch-bar span{display:block;height:100%;background:var(--accent);border-radius:99px}
.gx-ch-pct{font-size:12px;color:var(--muted,#6b7080);width:38px;text-align:right}
/* [R13 2026-09-21 · PM「这个视频标志和3d标志不用显示」] `.gx-ch-geo`（章卡右下 🧊 角标）自 R13 起**无元素使用**——
   app.js / gameui.js 的章卡模板已删掉该角标。规则保留不删：3D 实验室的 5 处真入口仍在（学科彩卡 gx-sc-geo / 学科速览 sx-3d /
   学习页 labUrl / classical-read/index.html / reading/index.html），未来若在别处复用本类名可直接生效。 */
.gx-ch-geo{position:absolute;bottom:8px;right:10px;font-size:18px;line-height:1;z-index:2;
  background:linear-gradient(135deg,rgba(109,94,252,.1),rgba(40,194,200,.08));
  border:1px solid rgba(109,94,252,.2);border-radius:8px;padding:3px 7px}
.gx-ch-geo a{text-decoration:none;opacity:.85;transition:opacity .15s,transform .15s;display:inline-block}
.gx-ch-geo a:hover{opacity:1;transform:scale(1.15)}
/* KP 知识点小关卡片（美化 · 2026-08-21 P1-6） */
#subjKps{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;margin:10px 0 0;
  padding:16px 18px;border-radius:16px;background:color-mix(in srgb,var(--ch-accent,#8B6FE8) 4%,transparent);
  border:1px solid color-mix(in srgb,var(--ch-accent,#8B6FE8) 12%,var(--line,#e7eaf2))}
#subjKps .gx-sub{grid-column:1/-1}
/* [R13] 小关卡「名字被挤成 0 宽」修复：列宽 260px、卡内可用 ~238px，而 ic34 + ▶24 + 🧊28 +
   CTA106 + 徽片65 + 间距 30 ≈ 300px > 238px；flex 默认 nowrap ⇒ flex:1;min-width:0 的
   .gx-kp-name 被压缩到 **0 宽**（真机实测 name.w=0）⇒ 整面板看不出哪张卡是哪一关。
   只在本面板内允许换行 + 把名字 flex-basis 提到 120px：控件自动落到第二行，名字恢复 ~190px。
   刻意**不加到全局 .gx-kp** —— prereq-pending / myquest-shell 复用同类名，避免误伤。 */
#subjKps .gx-kp{flex-wrap:wrap}
#subjKps .gx-kp-name{flex:1 1 120px;min-width:0}
#subjKps .gx-kp-mas{margin-left:auto}
/* KP 面板头部 + 返回按钮 */
.sx-kp-head{display:flex;align-items:center;gap:12px;grid-column:1/-1;margin-bottom:8px}
.sx-kp-back{flex:none;font-size:13px;font-weight:600;color:var(--ink,#1f2430);background:#f1f3f8;
  border:1px solid var(--line,#e7eaf2);padding:7px 14px;border-radius:99px;cursor:pointer;transition:.16s}
.sx-kp-back:hover{background:#e4e7ef;border-color:#c0c4cc}
.gx-kp{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 14px;
  background:var(--kp-bg,#f8f9fc);border:1px solid var(--line,#e7eaf2);border-radius:12px;margin:0;cursor:pointer;
  transition:transform .15s,box-shadow .15s,border-color .15s;position:relative}
/* [R13] 同上（小关卡是 <button>，同样会被全局 `button:hover` 抢走背景）。
   实测悬停对比度：名称/卡底 2.77、CTA 字/卡底 1.27、徽片 2.29 —— 「检查我会不会 →」几乎
   完全看不见（紫字压深紫底）。此处显式接管为**白卡底**，卡内三种字色（--ink 深墨 / #5E2FD6 紫 / 
   --kp-color 灰）在白底上全部达标。 */
.gx-kp:hover{transform:translateY(-2px);box-shadow:0 6px 18px -8px rgba(0,0,0,.07);border-color:var(--kp-color,#9ca3af);background:var(--card,#fff)}
.gx-kp:active{transform:translateY(0)}
.gx-kp.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-l,#ffe9f2)}
.kp-ic{width:34px;height:34px;flex:none;display:flex;align-items:center;justify-content:center;font-size:17px;border-radius:10px;
  background:var(--kp-bg,#f8f9fc);border:1px solid var(--line,#e7eaf2)}
.gx-kp-name{flex:1;min-width:0;font-size:13px;color:var(--ink,#1f2430);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gx-kp-video{flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--kp-color,#9ca3af);
  background:color-mix(in srgb,var(--kp-color,#9ca3af) 10%,transparent);border-radius:8px;transition:background .15s}
.gx-kp-video:hover{background:color-mix(in srgb,var(--kp-color,#9ca3af) 20%,transparent)}
.gx-kp-mas{flex:none;font-size:11px;font-weight:600;padding:3px 9px;border-radius:99px;
  background:var(--kp-bg,#f8f9fc);color:var(--kp-color,#9ca3af);border:1px solid color-mix(in srgb,var(--kp-color,#9ca3af) 20%,transparent)}
.gx-kp-mas i{font-style:normal;margin-right:2px}
/* [R13 2026-09-21] `.gx-kp-geo`（小关卡内 🧊）同样**无元素使用**：小关卡空间只有 260px，该标把名字挤成 0 宽；
   功能未丢，入口见上（5 处）。 */
.gx-kp-geo{flex:none;width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:14px;
  text-decoration:none;opacity:.55;transition:opacity .15s,transform .15s;border-radius:8px;
  background:color-mix(in srgb,#6D5EFC 8%,transparent);margin-left:2px}
.gx-kp-geo:hover{opacity:1;transform:scale(1.15);background:color-mix(in srgb,#6D5EFC 18%,transparent)}
/* [R13 2026-09-21] 以下 `.gx-kp-exp` 规则自 R13 起**无元素使用**：小关卡内 `▶ 看讲解` 已随「视频标志不用显示」删除；
   规则与上文设计注记一并保留（说明见下），未来入口复用可直接生效。 */
/* [2026-09-11] 知识点小关卡（.gx-kp）内「▶ 看讲解」入口 —— 全局 [data-video] 委托 → openKpVideo。
   类名刻意用 .gx-kp-exp 而非 .gx-kp-video：后者是学习页 progress 区「▶ 看视频讲解」的既有类
   （engine.js 的 .ckp-video .gx-kp-video 有 26×26 图标态覆盖），同名会互相污染。
   设计意图：卡片内唯一高饱和元素——品牌紫青渐变实底，与低饱和的 🧊 角标拉开视觉层级，
   解决"讲解入口藏在下一层、学生在学科页/知识点列表里找不到"的可见性问题。
   24px 触控方块与 .gx-kp-geo 视觉对齐；hover 弹性放大保持可点感知。 */
.gx-kp-exp{flex:none;width:24px;height:24px;display:flex;align-items:center;justify-content:center;
  font-size:9px;line-height:1;color:#fff;border-radius:8px;cursor:pointer;margin-left:3px;
  background:linear-gradient(135deg,#6D5EFC,#28C2C8);
  box-shadow:0 4px 10px -4px rgba(109,94,252,.6);
  transition:transform .16s cubic-bezier(.34,1.56,.64,1),box-shadow .16s,filter .16s;user-select:none}
.gx-kp-exp:hover{transform:scale(1.14);box-shadow:0 7px 16px -5px rgba(109,94,252,.8);filter:brightness(1.07)}
.gx-kp-exp:active{transform:scale(.96)}
.gx-kp-cta{flex:none;display:inline-flex;align-items:center;gap:2px;font-size:11.5px;font-weight:600;line-height:1;
  color:#5E2FD6;background:linear-gradient(135deg,rgba(109,94,252,.12),rgba(40,194,200,.12));
  border:1px solid rgba(109,94,252,.35);border-radius:99px;padding:4px 10px;margin-left:4px;cursor:pointer;
  white-space:nowrap;transition:background .16s,transform .16s,box-shadow .16s;user-select:none}
.gx-kp-cta:hover{background:linear-gradient(135deg,rgba(109,94,252,.22),rgba(40,194,200,.22));transform:translateY(-1px);box-shadow:0 4px 12px -4px rgba(109,94,252,.5)}
.gx-kp-cta:active{transform:translateY(0)}

/* [2026-09-15] 跨模块「前置基础 · 待确认」区块（prereq_pending.js 渲染）：
   琥珀色系 = 待确认（非薄弱/非已掌握），与红/绿档位严格区分，不贴差生标签。 */
.prereq-pending{margin:14px 0;padding:14px 16px 16px;border:1px solid rgba(245,158,11,.32);border-radius:14px;
  background:linear-gradient(135deg,rgba(245,158,11,.07),rgba(249,115,22,.045));position:relative}
.prereq-pending .pp-head{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.prereq-pending .pp-kicker{display:inline-flex;align-items:center;align-self:flex-start;font-size:12px;font-weight:700;
  color:#B45309;background:rgba(245,158,11,.16);border:1px solid rgba(245,158,11,.42);border-radius:99px;padding:3px 11px;letter-spacing:.01em}
.prereq-pending .pp-sub{font-size:12.5px;color:var(--muted,#6b7080);line-height:1.6}
.prereq-pending .pp-list{display:flex;flex-direction:column;gap:8px}
.prereq-pending .pp-item{border-left:3px solid rgba(245,158,11,.55)}
.prereq-pending .pp-item .gx-kp-ic{background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.4);color:#B45309}
.prereq-pending .pp-note{margin-top:10px;font-size:11.5px;color:var(--muted,#6b7080);line-height:1.6;
  border-top:1px dashed var(--line,#e7eaf2);padding-top:8px}

/* ============================================================
   [2026-09-11] 讲解弹层「加载态」：进度条 + 骨架屏 + 旁路
   背景：首次点知识点讲解要等 21~42s（B站检索→拉字幕→质量打分），
        原实现只有一句静态「正在采集…」+ ⏳，全程零变化 = 用户感知卡死。
   设计：①渐变进度条按 92%·(1-e^(-t/20)) 渐进但永不达满——既持续推进又诚实不撒谎；
        ②阶段文案随真实管线推进（检索→字幕→打分→精挑）+ 已等待秒数；
        ③三张 shimmer 骨架卡暗示"内容即将成型"，消除空屏焦虑；
        ④分隔线下常驻旁路——AI 动画/文字支架都不依赖采集结果，可立即走。
   无障碍：秒数用 tabular-nums 防跳动；prefers-reduced-motion 下停全部动画。
   ============================================================ */
.kpv-bar{position:relative;height:5px;border-radius:99px;background:#eef0f6;overflow:hidden;margin:14px 20px 0}
.kpv-bar>i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;
  background:linear-gradient(90deg,#6D5EFC,#28C2C8);
  transition:width .6s cubic-bezier(.4,0,.2,1)}
.kpv-bar::after{content:'';position:absolute;top:0;bottom:0;width:36%;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.9),transparent);
  animation:kpvSweep 1.5s ease-in-out infinite}
@keyframes kpvSweep{0%{left:-38%}100%{left:100%}}
.kpv-sk{height:60px;border-radius:12px;margin-bottom:10px;
  background:linear-gradient(90deg,#f1f2f7 25%,#e5e8f1 37%,#f1f2f7 63%);
  background-size:560px 100%;animation:kpvSk 1.4s linear infinite}
.kpv-sk:nth-of-type(2){opacity:.78}
.kpv-sk:nth-of-type(3){opacity:.56}
@keyframes kpvSk{0%{background-position:-280px 0}100%{background-position:280px 0}}
.kpv-bypass{margin-top:16px;border-top:1px dashed #e6e8f0;padding-top:13px}
.kpv-bypass-tip{font-size:11px;color:#9ca3af;margin-bottom:10px;line-height:1.5}
.kpv-bypass-row{display:flex;gap:8px;flex-wrap:wrap}
.kpv-btn{font-size:12px;border-radius:20px;padding:7px 15px;cursor:pointer;white-space:nowrap;
  border:1px solid #e6e8f0;background:#fff;color:#4b5563;
  transition:transform .16s cubic-bezier(.34,1.56,.64,1),box-shadow .16s,border-color .16s}
.kpv-btn:hover{border-color:#6D5EFC;color:#6D5EFC;transform:translateY(-1px)}
.kpv-btn:active{transform:scale(.97)}
.kpv-btn--pri{border:none;color:#fff;background:linear-gradient(135deg,#6D5EFC,#28C2C8);
  box-shadow:0 5px 14px -5px rgba(109,94,252,.65)}
.kpv-btn--pri:hover{color:#fff;box-shadow:0 8px 18px -5px rgba(109,94,252,.8);filter:brightness(1.06)}
/* 次要动作（重新检索）：必须比主 CTA 弱——虚线下划线文字链，不与「看动画讲解」抢层级 */
.kpv-link{display:inline-block;font-size:11px;color:#a6acb9;cursor:pointer;user-select:none;
  border-bottom:1px dashed #dbdee6;padding-bottom:1px;
  transition:color .16s,border-color .16s}
.kpv-link:hover{color:#6D5EFC;border-bottom-color:#6D5EFC}
.kpv-slow{margin-top:12px;font-size:11px;color:#b45309;background:#fffbeb;
  border:1px solid #fde68a;border-radius:10px;padding:8px 11px;line-height:1.5}
@media (prefers-reduced-motion:reduce){
  .kpv-bar::after{animation:none}
  .kpv-sk{animation:none}
  .kpv-bar>i{transition:none}
}
/* U5 侧栏学科色点 + U4' 成长复盘一级入口（PROGRESS 数字徽标=本周关卡数） */
.subj-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;vertical-align:middle}
.nav-growth{position:relative}
.nav-growth-badge{display:inline-block;min-width:18px;padding:1px 6px;margin-left:6px;border-radius:999px;
  background:var(--accent);color:#fff;font-size:10px;font-weight:700;text-align:center;vertical-align:middle}
/* 全局调性微调（U5：卡片风，不改 ABC 主色板） */
.menu-nav a{border-radius:10px;transition:background .15s,transform .15s}
.menu-nav a:hover{transform:translateX(2px)}
.menu-nav a i{margin-right:2px}
.btn.pri{border-radius:14px;box-shadow:0 8px 18px -10px var(--accent-shadow)}
@media (max-width:720px){
  .gx-hero{flex-direction:column}
  .gx-hero-ring{align-self:flex-start}
}

/* U0'(R8)：章列表容器 grid —— 每章独立卡片+进度条，杜绝挤一行 */
#gxChapterWrap,#gxKpWrap{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));margin:6px 0}

/* U2'(R6)：离线引导卡 —— 后端未连时也给出可点击入口，而非纯占位 */
.gx-guide{background:var(--remain,#f8f9fc);border-style:dashed;cursor:default}
.gx-guide .gx-qc-go{color:var(--accent);text-decoration:none;background:var(--accent-l,#ffe9f2);
  padding:4px 10px;border-radius:999px;font-size:12px}
/* U0'(R3)：学科独立主页色带头 */
.gx-subj-hero{display:flex;flex-direction:column;gap:4px;padding:20px 22px;border-radius:16px;margin:2px 0 12px;
  background:linear-gradient(135deg,var(--sc),transparent 70%),var(--card,#fff);
  border:1px solid var(--line,#e7eaf2)}
.gx-subj-hero b{font-size:20px;color:var(--ink,#1f2430)}
.gx-subj-hero small{font-size:12px;color:var(--muted,#6b7080)}
/* ===== 学科主页 V2（探索空间 · 2026-08-21 P0/P1/P2）===== */
.sx-domains{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 4px}
.sx-tab{display:inline-flex;align-items:center;gap:7px;padding:8px 16px;border-radius:99px;font-size:13px;font-weight:600;
  background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);color:var(--muted,#6b7080);cursor:pointer;transition:.15s;font-family:inherit}
.sx-tab::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--dc,#8B6FE8)}
.sx-tab.on{color:#fff;border-color:transparent;background:var(--dc,#8B6FE8);box-shadow:0 6px 16px -8px var(--dc,#8B6FE8)}
.sx-tab.on::before{background:rgba(255,255,255,.92)}
.sx-tab:hover:not(.on){border-color:var(--dc,#8B6FE8);color:var(--ink,#1f2430)}
.sx-hero{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin:18px 0 12px;padding:12px 18px;border-radius:14px;
  background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);box-shadow:0 2px 8px -3px rgba(0,0,0,.05)}
.sx-hero-l{min-width:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sx-title-row{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.sx-emoji{width:46px;height:46px;flex:none;display:flex;align-items:center;justify-content:center;font-size:24px;border-radius:14px;
  background:var(--sc);color:#fff;box-shadow:0 6px 14px -6px var(--sc)}
.sx-title-txt b{display:block;font-size:18px;color:var(--ink,#1f2430)}
.sx-title-txt small{font-size:12px;color:var(--muted,#6b7080)}
.sx-quick{display:flex;gap:8px;flex-wrap:wrap}
.sx-quick .btn{font-size:13px;padding:9px 16px}
/* Hero 按钮去紫：用靛蓝区分于 pageHead 深紫 */
.sx-hero .btn.pri{background:linear-gradient(135deg,#4F46E5,#3730A3);color:#fff;border-color:transparent;
  box-shadow:0 6px 14px -4px rgba(79,70,229,.35)}
.sx-hero .btn.pri:hover{background:linear-gradient(135deg,#3730A3,#312E81);box-shadow:0 8px 18px -4px rgba(79,70,229,.45)}
.sx-hero-r{display:flex;align-items:center;gap:16px}
.sx-ring{width:108px;height:108px;flex:none}
.sx-ring-bg{fill:none;stroke:var(--remain,#f1f3f8);stroke-width:10}
.sx-ring-fg{fill:none;stroke:var(--sc);stroke-width:10;stroke-linecap:round;transform:rotate(-90deg);transform-origin:60px 60px;transition:stroke-dashoffset .8s ease}
.sx-ring-num{font-size:22px;font-weight:700;fill:var(--ink,#1f2430);text-anchor:middle}
.sx-ring-cap{font-size:11px;fill:var(--muted,#6b7080);text-anchor:middle}
.sx-stats{display:flex;flex-direction:column;gap:8px}
.sx-stat b{display:block;font-size:20px;color:var(--ink,#1f2430);font-variant-numeric:tabular-nums}
.sx-stat span{font-size:11px;color:var(--muted,#6b7080)}
.sx-3d{display:flex;align-items:center;gap:16px;margin:0 0 14px;padding:16px 20px;border-radius:18px;text-decoration:none;
  background:linear-gradient(120deg,#ecfdf5,#d1fae5 55%,#a7f3d0);color:#064e3b;box-shadow:0 10px 28px -12px rgba(16,185,129,.22);transition:.18s;position:relative;overflow:hidden;border:1px solid rgba(16,185,129,.2)}
.sx-3d:hover{transform:translateY(-2px);box-shadow:0 16px 36px -12px rgba(16,185,129,.3)}
.sx-3d::after{content:"";position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(16,185,129,.25),transparent 70%)}
.sx-3d-ic{width:54px;height:54px;flex:none;display:flex;align-items:center;justify-content:center;font-size:28px;border-radius:16px;background:rgba(16,185,129,.12);border:1px solid rgba(16,185,129,.25);color:#059669}
.sx-3d-txt{flex:1;min-width:0}
.sx-3d-txt b{display:block;font-size:15px;color:#064e3b}
.sx-3d-txt small{font-size:12px;color:#047857;line-height:1.5}
.sx-3d-go{flex:none;font-size:13px;font-weight:600;color:#fff;background:linear-gradient(135deg,#10b981,#059669);padding:8px 14px;border-radius:99px;white-space:nowrap;box-shadow:0 4px 12px -4px rgba(16,185,129,.35)}
#subjChapters{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;margin:8px 0}
#subjChapters .gx-sub{grid-column:1/-1}
#subjChapters .gx-grade-group{grid-column:1/-1}
#subjChapters .gx-chapter{margin:0}
/* 首章推荐高亮 */
#subjChapters .gx-chapter:first-child{border-top-width:4px;background:linear-gradient(180deg,color-mix(in srgb,var(--ch-accent,#8B6FE8) 6%,transparent),var(--card,#fff) 55%)}
#subjChapters .gx-chapter:first-child .ch-ic{transform:scale(1.12)}
#subjChapters .gx-chapter:first-child::after{content:"推荐";position:absolute;top:9px;right:9px;font-size:10px;font-weight:700;
  color:#fff;background:var(--ch-accent,#8B6FE8);padding:2px 9px;border-radius:99px}
@media (max-width:780px){
  .sx-hero{flex-direction:column;gap:10px;padding:12px 14px}
  .sx-hero-l{justify-content:center}
  .sx-hero-r{justify-content:center;gap:20px}
  .sx-3d{flex-wrap:wrap}
  .sx-3d-go{margin-left:auto}
  .v12-qswitch{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .v12-qswitch .qs-pills{flex-wrap:nowrap}
  .gx-chapter{padding:16px 10px 13px;min-height:0;gap:7px}
  .ch-ic{width:44px;height:44px;font-size:23px;border-radius:13px}
  .gx-ch-name b{font-size:13px}
  #subjChapters{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
  #subjKps{grid-template-columns:1fr}
}

/* 整改批次1：全局「本地模式」banner（离线诚实，后端不可达时全页顶部提示） */
.local-mode-banner{display:flex;align-items:center;gap:6px;margin:0 0 10px;padding:8px 14px;border-radius:10px;
  font-size:13px;color:var(--muted,#6b7080);background:var(--remain,#f8f9fc);border:1px dashed var(--line,#d8dce6)}
.local-mode-banner b{color:var(--ink,#1f2430)}

/* ===== v12 首页改版（设计师定稿 2026-08-20 · 品牌紫 #8B6FE8）===== */
/* Hero 高拍仪工作台 */
.v12-hero{margin:22px 0 34px;border-radius:28px;padding:44px 46px;position:relative;overflow:hidden;
  background:linear-gradient(180deg,#F1EDFD 0%,#F8F6FE 55%,#FCFBFE 100%);
  box-shadow:0 6px 20px rgba(139,111,232,.10);border:1px solid rgba(139,111,232,.18)}
.v12-hero::before{content:"";position:absolute;left:8%;top:30px;width:70px;height:24px;background:#fff;border-radius:24px;opacity:.55;
  box-shadow:50px 14px 0 -4px #fff, 96px 4px 0 -8px #fff}
.v12-hero::after{content:"";position:absolute;right:5%;bottom:50px;width:80px;height:26px;background:#fff;border-radius:26px;opacity:.45;
  box-shadow:-60px 12px 0 -4px #fff, -110px 6px 0 -8px #fff}
.v12-hero-in{display:flex;gap:44px;align-items:center;position:relative;z-index:1}
.v12-hero-l{flex:1.1;min-width:0}
.v12-kicker{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.9);border:1px solid rgba(139,111,232,.25);
  color:#8B6FE8;font-size:12px;padding:6px 14px;border-radius:99px;margin-bottom:18px;font-weight:500}
.v12-kicker .dot{width:7px;height:7px;border-radius:50%;background:#8B6FE8;box-shadow:0 0 0 3px rgba(139,111,232,.18)}
.v12-hero h1{font-size:29px;font-weight:600;color:#3A2E55;line-height:1.35;letter-spacing:.3px;margin:0}
.v12-hero h1 em{font-style:normal;color:#D9357A}
.v12-sub{font-size:14px;color:#6F6A85;margin:12px 0 20px;max-width:430px;line-height:1.7}
.v12-tabs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}
.v12-tab{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.75);border:1.5px solid rgba(139,111,232,.3);
  color:#8B6FE8;font-size:13px;padding:9px 16px;border-radius:99px;cursor:pointer;transition:all .18s;font-weight:500;font-family:inherit}
.v12-tab.on{background:#8B6FE8;color:#fff;border-color:#8B6FE8;font-weight:600;box-shadow:0 6px 16px rgba(139,111,232,.28)}
.v12-tab:hover{transform:translateY(-1px)}
.v12-bubble{background:#fff;border-radius:20px 20px 20px 6px;padding:16px 20px;box-shadow:0 12px 30px rgba(80,65,160,.16);
  max-width:420px;position:relative;margin-bottom:20px}
.v12-bubble::before{content:"";position:absolute;left:26px;bottom:-9px;width:18px;height:18px;background:#fff;transform:rotate(45deg);border-radius:3px}
.v12-bubble .who{font-size:11px;color:#D9357A;font-weight:600;margin-bottom:4px}
.v12-bubble p{font-size:15px;color:#2B2740;margin:0}
.v12-bubble .typing{display:inline-block;width:3px;height:15px;background:#8B6FE8;vertical-align:-2px;margin-left:2px;animation:v12-blink 1s steps(2) infinite}
@keyframes v12-blink{50%{opacity:0}}
.v12-cta{display:inline-flex;align-items:center;gap:10px;background:#D9357A;color:#fff;font-size:15px;font-weight:600;
  border-radius:99px;padding:14px 28px;cursor:pointer;text-decoration:none;box-shadow:0 12px 26px rgba(217,53,122,.30);transition:transform .15s}
.v12-cta:hover{transform:translateY(-2px)}
.v12-cta .ar{font-size:17px;transition:transform .2s}
.v12-cta:hover .ar{transform:translateX(4px)}
.v12-cta-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:6px}
/* Hero 右侧：镜头 + 公仔 */
.v12-hero-r{flex:1;min-width:320px;display:flex;flex-direction:column;align-items:center;position:relative;padding-top:6px}
.v12-cam{position:relative;width:300px;height:200px}
.v12-cam-arm{position:absolute;right:-20px;top:-30px;width:240px;height:240px;pointer-events:none;z-index:1;overflow:visible}
.v12-lens{position:absolute;left:50%;top:30px;transform:translateX(-50%);width:150px;height:150px;border-radius:50%;
  background:#fff;box-shadow:0 18px 40px rgba(40,10,80,.32),inset 0 0 0 6px rgba(255,255,255,.6);
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.v12-lens::after{content:"";position:absolute;inset:8px;border-radius:50%;border:1px dashed rgba(139,111,232,.35);pointer-events:none}
.v12-rec{position:absolute;top:8px;left:50%;transform:translateX(-50%);background:rgba(255,255,255,.95);color:#2FBFA5;
  font-size:10px;padding:2px 9px;border-radius:99px;font-weight:500;z-index:3;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.v12-rec::before{content:"";width:6px;height:6px;border-radius:50%;background:#2FBFA5;box-shadow:0 0 0 3px rgba(47,191,165,.3);animation:v12-pulse 1.4s ease-in-out infinite}
@keyframes v12-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.5);opacity:.5}}
.v12-view{width:128px;padding:10px 12px;background:#fff;border-radius:4px;transform:rotate(-4deg);box-shadow:0 4px 12px rgba(0,0,0,.08);position:relative}
.v12-view::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:4px 0 0 4px}
.v12-view[data-kind="textbook"]::before{background:#4A7DFF}
.v12-view[data-kind="homework"]::before{background:#FF9F43}
.v12-view[data-kind="exam"]::before{background:#FF6B9D}
.v12-view .v-tag{font-size:8px;color:#A5A0B8;margin-bottom:3px;letter-spacing:.5px}
.v12-view .v-t{font-size:11px;font-weight:600;color:#241F38;margin-bottom:6px}
.v12-view .v-l{height:5px;border-radius:3px;background:#EFEDF5;margin-bottom:4px}
.v12-view .v-l.s{width:55%}.v12-view .v-l.m{width:75%}
.v12-view .v-num{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;border-radius:5px;font-size:9px;font-weight:600;margin-right:5px}
.v12-view .v-x{width:8px;height:8px;border-radius:2px;border:1.3px solid #FF6B9D;position:relative;flex:none;margin-right:6px}
.v12-view .v-x::after{content:"";position:absolute;left:1.3px;top:1.3px;width:4px;height:4px;border-radius:1.5px;background:#FF6B9D}
.v12-cam-btn{display:inline-flex;align-items:center;gap:10px;margin-top:12px;background:rgba(255,255,255,.95);color:#3A2E55;
  font-size:13px;font-weight:600;border-radius:99px;padding:10px 18px;cursor:pointer;text-decoration:none;
  box-shadow:0 8px 20px rgba(80,65,160,.18);transition:transform .15s}
.v12-cam-btn:hover{transform:translateY(-2px)}
.v12-cam-btn .ci{width:24px;height:24px;border-radius:50%;background:#F1EDFD;display:flex;align-items:center;justify-content:center;font-size:12px}
.v12-cam-btn .ar{font-size:15px;transition:transform .2s}
.v12-cam-btn:hover .ar{transform:translateX(3px)}
.v12-cta-row .v12-cam-btn{margin-top:0}
.v12-cam-btn.v12-cam-btn-primary{padding:14px 28px;font-size:15px;color:#fff;background:linear-gradient(135deg,#8B6FE8,#6D5EFC);box-shadow:0 12px 26px rgba(139,111,232,.35);transition:transform .15s}
.v12-cam-btn.v12-cam-btn-primary:hover{transform:translateY(-2px)}
.v12-cam-btn.v12-cam-btn-primary .ci{width:28px;height:28px;background:rgba(255,255,255,.2);font-size:14px}
.v12-cam-btn.v12-cam-btn-primary .ar{font-size:17px;transition:transform .2s}
.v12-cam-btn.v12-cam-btn-primary:hover .ar{transform:translateX(4px)}

/* ── Hero 右侧：知识星云 · 浅色透明科技风（2026-09-03） ── */
.v12-ai-orbit{position:relative;width:440px;height:360px;display:flex;align-items:center;justify-content:center}
.v12-orbit-svg{width:100%;height:100%;overflow:visible;animation:v12-orbit-float 7s ease-in-out infinite}
@keyframes v12-orbit-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.v12-mascot{margin-top:10px;position:relative;width:180px;height:150px;display:flex;align-items:center;justify-content:center}
.v12-mascot-disc{position:absolute;inset:0;border-radius:50%;
  background:radial-gradient(circle,#FFFFFF 0%,#F1EDFD 50%,rgba(241,237,253,0) 72%);animation:v12-breath 3.2s ease-in-out infinite}
@keyframes v12-breath{0%,100%{transform:scale(1);opacity:.95}50%{transform:scale(1.08);opacity:1}}
.v12-mascot-img{position:relative;width:130px;display:block;animation:v12-breath-img 3.2s ease-in-out infinite;
  filter:drop-shadow(0 14px 24px rgba(40,10,80,.30))}
@keyframes v12-breath-img{0%,100%{transform:scale(1) translateY(0)}50%{transform:scale(1.045) translateY(-3px)}}
.v12-mascot-mouth{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scaleY(.18);width:130px;pointer-events:none;
  transform-origin:50% 53%;animation:v12-talk 0.6s ease-in-out infinite}
@keyframes v12-talk{0%,100%{transform:translate(-50%,-50%) scaleY(.18)}45%{transform:translate(-50%,-50%) scaleY(1)}60%{transform:translate(-50%,-50%) scaleY(.72)}}
.v12-wave{position:absolute;right:-6px;bottom:2px;display:flex;gap:3px;align-items:flex-end;height:18px}
.v12-wave i{width:3px;border-radius:2px;background:rgba(139,111,232,.55);animation:v12-wave 0.9s ease-in-out infinite}
.v12-wave i:nth-child(1){height:6px;animation-delay:0s}.v12-wave i:nth-child(2){height:13px;animation-delay:.12s}
.v12-wave i:nth-child(3){height:10px;animation-delay:.24s}.v12-wave i:nth-child(4){height:15px;animation-delay:.36s}
@keyframes v12-wave{0%,100%{transform:scaleY(.5)}50%{transform:scaleY(1)}}
/* 4 功能卡 */
/* 2026-08-20 加：首次引导气泡（能量星解释 · 只弹一次 · 纯 CSS 5.5s 自动淡出，无 JS 时序依赖） */
  .v12-energy-tip{position:fixed;left:18px;top:200px;z-index:2147483600;max-width:340px;
    background:#3A2E55;color:#fff;font-size:12px;line-height:1.6;padding:10px 14px;border-radius:12px;
    box-shadow:0 8px 22px rgba(60,20,100,.25);
    animation:v12-tip-in .3s ease-out, v12-tip-out .5s ease-in 5s forwards}
  .v12-energy-tip b{color:#FFD166;font-weight:600}
  .v12-energy-tip::before{content:"";position:absolute;left:22px;top:-6px;width:12px;height:12px;background:#3A2E55;transform:rotate(45deg);border-radius:2px}
  .v12-energy-tip.out{opacity:0;transform:translateY(-6px);transition:opacity .4s,transform .4s}
  @keyframes v12-tip-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
  @keyframes v12-tip-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px);visibility:hidden}}
  @media(max-width:720px){.v12-energy-tip{left:12px;right:12px;max-width:none}}
  .v12-celebrate-wrap{position:fixed;left:50%;top:34%;transform:translate(-50%,-50%);z-index:2147483500;pointer-events:none;width:320px;height:380px}
  .v12-celebrate-wrap .vc-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);width:280px;padding:24px 22px 20px;border-radius:24px;background:linear-gradient(135deg,#6D5EFC 0%,#28C2C8 100%);box-shadow:0 18px 44px rgba(109,94,252,.36),0 4px 12px rgba(40,194,200,.20);text-align:center;color:#fff;opacity:0}
  .v12-celebrate-wrap.on .vc-card{animation:vc-cardin .9s cubic-bezier(.28,1.5,.5,1) forwards}
  @keyframes vc-cardin{0%{transform:translate(-50%,-50%) scale(0) rotate(-8deg);opacity:0}55%{transform:translate(-50%,-50%) scale(1.08) rotate(2deg);opacity:1}78%{transform:translate(-50%,-50%) scale(.96) rotate(-1deg);opacity:1}100%{transform:translate(-50%,-50%) scale(1) rotate(0);opacity:1}}
  .v12-celebrate-wrap .vc-mascot-svg{width:120px;height:120px;margin:0 auto 6px;filter:drop-shadow(0 4px 10px rgba(0,0,0,.18))}
  .v12-celebrate-wrap .vc-mascot-svg svg{width:100%;height:100%;display:block}
  .v12-celebrate-wrap .vc-mascot-img{position:relative;width:140px;height:140px;margin:0 auto 4px}
  .v12-celebrate-wrap .vc-mascot-img .vc-mascot-base{width:100%;height:100%;display:block;filter:drop-shadow(0 6px 14px rgba(109,94,252,.28))}
  .v12-celebrate-wrap .vc-mascot-img .vc-mascot-mouth{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
  .v12-celebrate-wrap.on .vc-mascot-svg{animation:vc-mbounce 1s ease-out 2}
  @keyframes vc-mbounce{0%{transform:translateY(0) scale(1)}35%{transform:translateY(-14px) scale(1.06)}60%{transform:translateY(0) scale(1)}100%{transform:translateY(0)}}
  .v12-celebrate-wrap .vc-xp{font-size:30px;font-weight:800;color:#fff;letter-spacing:1px;text-shadow:0 2px 8px rgba(255,255,255,.3);margin-top:2px;line-height:1.1}
  .v12-celebrate-wrap .vc-msg{font-size:13px;color:rgba(255,255,255,.92);margin-top:6px;line-height:1.4;letter-spacing:.3px}
  .v12-celebrate-wrap .vc-ring{position:absolute;left:50%;top:50%;width:10px;height:10px;border-radius:50%;border:3px solid #FFD86B;opacity:0;pointer-events:none}
  .v12-celebrate-wrap.on .vc-ring{animation:vc-ring 1.1s ease-out forwards}
  @keyframes vc-ring{0%{opacity:.9;transform:scale(.3)}100%{opacity:0;transform:scale(8)}}
  .v12-celebrate-wrap .vc-spark{position:absolute;width:10px;height:10px;border-radius:3px;opacity:0;pointer-events:none}
  .v12-celebrate-wrap.on .vc-spark{animation:vc-pop 1.2s ease-out forwards}
  @keyframes vc-pop{0%{opacity:0;transform:translate(0,0) rotate(0) scale(.5)}20%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--rot)) scale(1.1)}}
  .v12-xp-bar{display:flex;align-items:center;gap:12px;background:#fff;border-radius:16px;padding:12px 18px;
    box-shadow:0 6px 18px rgba(80,65,160,.06);margin-bottom:14px;border:1px solid rgba(139,111,232,.14)}
  .v12-xp-bar .xpi{font-size:18px;flex:none}
  .v12-xp-bar .xpt{font-size:13px;color:#5C5677;font-weight:500;flex:none}
  .v12-xp-bar .xptrack{flex:1;height:10px;border-radius:99px;background:#F1EDFD;overflow:hidden;min-width:80px}
  .v12-xp-bar .xpfill{height:100%;border-radius:99px;background:linear-gradient(90deg,#8B6FE8,#FF6B9D);transition:width .6s ease}
  .v12-xp-bar .xpn{font-size:13px;color:#8B6FE8;font-weight:700;flex:none}
  .v12-xp-bar .xpn em{font-style:normal;color:#A5A0B8;font-weight:500}
  .v12-xp-bar .xpg{font-size:12px;color:#2563EB;text-decoration:none;flex:none;font-weight:500}
  .v12-xp-bar .xpg:hover{text-decoration:underline}
  .v12-num-flex{display:flex;align-items:center;gap:10px}
  .v12-ring-slot{display:inline-flex;margin-left:auto;transform:scale(.62);transform-origin:right center}
  .v12-ring-slot .gx-ring{display:inline-flex;align-items:center}
  .v12-ring-slot .gx-ring svg{width:52px;height:52px}
  .v12-ring-slot .gx-ring b{font-size:13px;margin-left:-26px;color:#8B6FE8}
  .v12-ring-slot .gx-ring span{font-size:9px;margin-left:2px;color:#A5A0B8}
  .v12-badges{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#fff;border-radius:16px;
    padding:10px 18px;box-shadow:0 6px 18px rgba(80,65,160,.06);margin-bottom:14px;border:1px solid rgba(139,111,232,.14)}
  .v12-badges .vb-title{font-size:13px;font-weight:600;color:#241F38;flex:none;margin-right:4px}
  .v12-badges .vb-item{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#241F38;
    background:#F7F4FE;border:1px solid rgba(139,111,232,.16);padding:5px 11px;border-radius:99px;cursor:pointer;transition:all .15s}
  .v12-badges .vb-item:hover{transform:translateY(-1px);box-shadow:0 4px 10px rgba(139,111,232,.18)}
  .v12-badges .vb-item i{font-style:normal;font-size:13px}
  .v12-badges .vb-item.dim{opacity:.45;cursor:default}
  .v12-badges .vb-item.dim:hover{transform:none;box-shadow:none}
  .v12-badges .vb-more{font-size:12px;color:#2563EB;text-decoration:none;margin-left:auto;font-weight:500}
  .v12-badges .vb-more:hover{text-decoration:underline}
  @media(max-width:720px){.v12-badges .vb-more{margin-left:0}}
.v12-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:18px}
.v12-cols-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:1000px){.v12-cols,.v12-cols-3{grid-template-columns:repeat(2,1fr)}}
.v12-card{background:#fff;border-radius:20px;padding:20px 20px 22px;position:relative;cursor:pointer;
  box-shadow:0 10px 30px rgba(80,65,160,.07),0 2px 8px rgba(80,65,160,.04);transition:transform .18s,box-shadow .18s;overflow:hidden}
.v12-card:hover{transform:translateY(-4px);box-shadow:0 16px 36px rgba(80,65,160,.12)}
.v12-card::before{content:"";position:absolute;left:0;top:0;right:0;height:4px;border-radius:20px 20px 0 0}
.v12-card.c-purple::before{background:linear-gradient(90deg,#8B6FE8,#A56FE0)}
.v12-card.c-pink::before{background:linear-gradient(90deg,#FF6B9D,#FF8FB8)}
.v12-card.c-teal::before{background:linear-gradient(90deg,#2FBFA5,#43D4BA)}
.v12-card.c-blue::before{background:linear-gradient(90deg,#4A7DFF,#6F9AFF)}
.v12-card .ic{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:17px;margin-bottom:12px}
.v12-card.c-purple .ic{background:#F1EDFD;color:#8B6FE8}
.v12-card.c-pink .ic{background:#FFF1F6;color:#FF6B9D}
.v12-card.c-teal .ic{background:#E1F5EE;color:#2FBFA5}
.v12-card.c-blue .ic{background:#E6F1FB;color:#4A7DFF}
.v12-card h3{font-size:12px;color:#6F6A85;font-weight:500;display:flex;justify-content:space-between;margin:0}
.v12-card h3 small{font-size:10px;color:#A5A0B8}
.v12-card .num{font-size:28px;font-weight:600;margin:6px 0 2px;line-height:1.1}
.v12-card.c-purple .num{color:#8B6FE8}.v12-card.c-pink .num{color:#FF6B9D}
.v12-card.c-teal .num{color:#2FBFA5}.v12-card.c-blue .num{color:#4A7DFF}
.v12-card .num .u{font-size:13px;font-weight:400;color:#A5A0B8;margin-left:2px}
.v12-card .desc{font-size:11px;color:#A5A0B8}
.streak-flame{display:inline-block;animation:v12-flicker 1.2s ease-in-out infinite}
@keyframes v12-flicker{0%,100%{transform:scale(1) rotate(0)}25%{transform:scale(1.12) rotate(-3deg)}75%{transform:scale(1.06) rotate(3deg)}}
.v12-streak-btn{display:inline-flex;align-items:center;gap:6px;margin-top:10px;background:linear-gradient(135deg,#FFB020,#FF6B9D);
  color:#fff;font-size:12px;font-weight:600;border:none;border-radius:99px;padding:8px 16px;cursor:pointer;
  box-shadow:0 6px 14px rgba(255,107,157,.30);transition:transform .15s;font-family:inherit}
.v12-streak-btn:hover{transform:translateY(-2px)}
/* [2026-09-01] 打卡按钮已打卡状态：灰化 + 禁用 hover 弹跳 */
.v12-streak-btn.done{background:linear-gradient(135deg,#A5A0B8,#C8C4D4);box-shadow:0 4px 10px rgba(160,150,180,.20);cursor:default;opacity:.92}
.v12-streak-btn.done:hover{transform:none}
.v12-streak-btn .cib-tic{margin-right:2px;font-weight:700;font-size:13px;line-height:1}
#v12StreakCard{cursor:pointer}
/* 2026-08-20 加：两条推送 banner → 2 列网格（打破"连续横条"单调） */
.v12-bars-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:6px 0 20px}
@media(max-width:760px){.v12-bars-row{grid-template-columns:1fr}}
/* 2026-08-20 加：紫色全宽"今日打卡"长条 banner（原 streak-btn 抽出做成单条横幅） */
.v12-checkin-bar{display:flex;align-items:center;gap:14px;margin:0;
  background:linear-gradient(120deg,#8B6FE8 0%,#A878F0 50%,#C893F8 100%);
  color:#fff;border-radius:18px;padding:20px 22px;text-decoration:none;cursor:pointer;min-height:118px;
  box-shadow:0 10px 28px rgba(139,111,232,.28);transition:transform .15s,box-shadow .15s}
.v12-checkin-bar:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(139,111,232,.36)}
.v12-checkin-bar .cib-ic{font-size:30px;flex:none;filter:drop-shadow(0 2px 4px rgba(255,255,255,.3))}
.v12-checkin-bar .cib-txt{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}
.v12-checkin-bar .cib-txt b{font-size:17px;font-weight:600;letter-spacing:.3px}
.v12-checkin-bar .cib-txt small{font-size:12px;opacity:.88;line-height:1.5}
.v12-checkin-bar .cib-btn{flex:none;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.4);
  font-size:13px;font-weight:600;padding:10px 18px;border-radius:99px;
  backdrop-filter:blur(6px);transition:background .15s}
.v12-checkin-bar:hover .cib-btn{background:rgba(255,255,255,.32)}
@media(max-width:600px){.v12-checkin-bar{flex-wrap:wrap;gap:10px}.v12-checkin-bar .cib-btn{margin-left:auto}}
/* 学科彩卡（IXL 风） */
.v12-subj-sec{margin-bottom:40px}
/* 2026-08-20 美化：学科标题（图标 + 紫粉渐变大字 + 副标 + 浅紫渐变小底） */
.v12-subj-head{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:14px 18px;border-radius:14px;
  background:linear-gradient(120deg,#F4E6EF 0%,#F8E8E0 100%);border:1px solid rgba(139,111,232,.10)}
.v12-subj-ic{font-size:22px;flex:none;filter:drop-shadow(0 2px 4px rgba(80,30,150,.18))}
.v12-subj-h{font-size:18px;font-weight:700;margin:0;letter-spacing:.5px;
  background:linear-gradient(135deg,#8B6FE8 0%,#FF6B9D 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.v12-subj-sub{font-size:12px;color:#5C5677;font-weight:400;margin-left:auto}
@media(max-width:720px){.v12-subj-sub{display:none}}
/* 2026-08-20 加：复习关卡长条（跟紫色"今日推荐"配对 · 绿色 · 2 列网格内） */
.v12-review-bar{display:flex;align-items:center;gap:14px;margin:0;
  background:linear-gradient(120deg,#10B981 0%,#2FBFA5 50%,#33D4BA 100%);
  color:#fff;border-radius:18px;padding:20px 22px;text-decoration:none;cursor:pointer;min-height:118px;
  box-shadow:0 10px 28px rgba(16,185,129,.28);transition:transform .15s,box-shadow .15s}
.v12-review-bar:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(16,185,129,.36)}
.v12-review-bar .rb-ic{font-size:30px;flex:none;filter:drop-shadow(0 2px 4px rgba(255,255,255,.3))}
.v12-review-bar .rb-txt{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}
.v12-review-bar .rb-txt b{font-size:17px;font-weight:600;letter-spacing:.3px}
.v12-review-bar .rb-txt small{font-size:12px;opacity:.88;line-height:1.5}
.v12-review-bar .rb-btn{flex:none;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.4);
  font-size:13px;font-weight:600;padding:10px 18px;border-radius:99px;backdrop-filter:blur(6px);transition:background .15s}
.v12-review-bar:hover .rb-btn{background:rgba(255,255,255,.32)}
@media(max-width:600px){.v12-review-bar{flex-wrap:wrap;gap:10px}.v12-review-bar .rb-btn{margin-left:auto}}
.v12-subj-h{font-size:15px;font-weight:500;margin-bottom:18px;color:#241F38}
/* 学科彩卡 · 大图标视觉化风格（2026-08-20 晚改：告别列表报表风） */
.gx-subj-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:1100px){.gx-subj-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:780px){.gx-subj-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.gx-subj-grid{grid-template-columns:1fr 1fr;gap:10px}}
.gx-subj-card{position:relative;background:#fff;border:1px solid rgba(120,110,150,.10);border-radius:18px;cursor:pointer;
  overflow:hidden;text-decoration:none;color:inherit;display:block;
  box-shadow:0 4px 16px rgba(80,65,160,.06);transition:transform .2s ease,box-shadow .2s ease}
.gx-subj-card::after{display:none}
.gx-subj-card:hover{transform:translateY(-5px);box-shadow:0 14px 32px rgba(80,65,160,.14);background:var(--card,#fff)}
.gx-subj-card.hot{border-color:rgba(59,130,246,.35);box-shadow:0 8px 24px rgba(59,130,246,.12)}
/* ---- 大图标 hero 区 ---- */
.sc-hero{position:relative;padding:28px 16px 20px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;min-height:120px}
.sc-emoji{font-size:42px;line-height:1;margin-bottom:8px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.08))}
.sc-badge{position:absolute;top:12px;right:12px;font-size:11px;font-weight:600;color:#fff;
  background:rgba(255,255,255,.25);backdrop-filter:blur(6px);padding:4px 10px;border-radius:99px;
  border:1px solid rgba(255,255,255,.35)}
/* ---- 文字区 ---- */
.sc-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:6px}
.sc-body b{font-size:15.5px;font-weight:700;color:#241F38;text-align:center}
.sc-body p{font-size:11px;color:#9A93AE;text-align:center;margin:0;line-height:1.45}
/* 章节标签 */
.sc-tags{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-top:4px}
.sc-tag{font-size:10px;color:var(--sc,#8B6FE8);background:color-mix(in srgb,var(--sc,#8B6FE8) 10%,#fff);
  padding:3px 9px;border-radius:99px;border:1px solid color-mix(in srgb,var(--sc,#8B6FE8) 18%,transparent);
  max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 底部 CTA */
.sc-go{display:block;text-align:center;font-size:12px;font-weight:600;color:var(--sc,#8B6FE8);
  margin-top:6px;padding-top:10px;border-top:1px solid rgba(120,110,150,.07);
  transition:letter-spacing .15s}
.gx-subj-card:hover .sc-go{letter-spacing:.5px}
/* 快捷工具 · 8 项 4 列 × 2 行（2026-08-20 加：从侧栏迁入考试技巧/英语角/专项工具/统计） */
/* 快捷工具区标题（2026-08-20 P1-10 过渡加强） */
.v12-tools-header{display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.v12-tools-title{font-size:17px;font-weight:700;color:#241F38;margin:0}
.v12-tools-sub{font-size:12px;color:#9A93AE}
.v12-tools{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:36px}
.v12-tools-8{grid-template-columns:repeat(4,1fr)}
@media(max-width:980px){.v12-tools-8{grid-template-columns:repeat(3,1fr)}}
@media(max-width:680px){.v12-tools-8{grid-template-columns:repeat(2,1fr)}}
.v12-tool{display:flex;align-items:center;gap:10px;background:#fff;border-radius:16px;padding:13px 18px;
  box-shadow:0 4px 14px rgba(80,65,160,.05);font-size:13px;color:#241F38;cursor:pointer;transition:transform .15s;text-decoration:none}
.v12-tool:hover{transform:translateY(-2px)}
.v12-tool .ti{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:15px;flex:none}
/* 2026-08-20 加：学习小组统计卡片 */
.gs-stats{margin:24px 0 8px}
.gs-title{font-size:15px;font-weight:600;color:#241F38;margin:0 0 14px;display:flex;align-items:center;gap:8px}
.gs-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}
@media(max-width:980px){.gs-grid{grid-template-columns:repeat(2,1fr)}}
.gs-card{display:flex;flex-direction:column;gap:4px;padding:18px 20px;background:#fff;border-radius:16px;
  box-shadow:0 4px 14px rgba(80,65,160,.06);text-decoration:none;color:inherit;transition:transform .15s}
.gs-card:hover{transform:translateY(-2px)}
.gs-card.me{background:linear-gradient(135deg,#F1EDFD 0%,#FCE8F0 100%)}
.gs-card.me .gs-num{color:#8B6FE8}
.gs-tic{font-size:22px;margin-bottom:4px}
.gs-tt{font-size:12px;color:#645C7A}
.gs-num{font-size:28px;font-weight:700;color:#241F38;line-height:1.1}
.gs-num small{font-size:13px;font-weight:500;color:#8579A8;margin-left:2px}
.gs-sub{font-size:11px;color:#8579A8;line-height:1.5}
.gs-top{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.gs-rank{display:flex;align-items:center;gap:14px;padding:12px 16px;background:#fff;border-radius:14px;
  box-shadow:0 4px 12px rgba(80,65,160,.05);text-decoration:none;color:inherit;transition:transform .15s}
.gs-rank:hover{transform:translateX(4px)}
.gs-medal{font-size:24px;flex:none}
.gs-av{font-size:24px;flex:none}
.gs-rank b{font-size:14px;font-weight:600;color:#241F38;flex:1;min-width:0}
.gs-pts{font-size:12px;font-weight:600;color:#8B6FE8;background:#F1EDFD;padding:3px 10px;border-radius:99px}
  .v12-skill-band{position:relative;left:calc(-1 * var(--main-x,78px));width:100vw;margin-left:0;margin-right:0;
    padding:120px 24px 56px;background:linear-gradient(180deg,#F4E6EF 0%,#F8E8E0 100%);overflow:hidden}
  .v12-skill-wave{position:absolute;left:0;top:-1px;width:100%;height:90px;display:block;z-index:2}
  .v12-skill-wave-bg{position:absolute;left:0;top:0;width:100%;height:90px;display:block;z-index:1}
.v12-band-inner{position:relative;max-width:1080px;margin:0 auto;text-align:center}
.v12-band-title{font-size:23px;color:#185FA5;font-weight:500;margin:0 0 8px}
.v12-band-title .band-em{color:#D9357A}
.v12-band-sub{font-size:13px;color:#5A6B85;margin:0 0 30px}
.v12-carousel{display:flex;align-items:center;gap:14px;margin-bottom:24px}
.v12-c-arrow{width:36px;height:36px;border-radius:50%;background:#fff;border:1px solid rgba(120,110,150,.12);
  color:#6F6A85;font-size:22px;cursor:pointer;flex:none;box-shadow:0 2px 8px rgba(0,0,0,.05)}
.v12-c-arrow:hover{color:#8B6FE8}
.v12-c-track{display:flex;gap:14px;flex:1;overflow-x:auto;padding:8px 4px;scrollbar-width:thin}
.v12-c-track::-webkit-scrollbar{height:4px}
.v12-c-track::-webkit-scrollbar-thumb{background:rgba(120,110,150,.12);border-radius:2px}
/* 轮播卡 · IXL 风格游戏卡（2026-08-20 晚改：大插图区主导 + 零装饰 + 每卡独特视觉） */
.v12-c-card{flex:none;width:140px;background:#fff;border-radius:18px;padding:16px 12px 14px;
  box-shadow:0 4px 16px rgba(80,65,160,.07);text-align:center;cursor:pointer;
  transition:transform .2s ease;text-decoration:none;color:inherit;
  display:block;position:relative;overflow:hidden}
.v12-c-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px rgba(80,65,160,.13)}
/* ---- 大插图区（卡面主体） ---- */
.v12-c-card .c-ic{width:100%;aspect-ratio:1/1;border-radius:14px;display:flex;align-items:center;justify-content:center;
  font-size:36px;margin-bottom:10px;position:relative;overflow:hidden;
  /* 默认：元素色 12% 淡底 */
  background:color-mix(in srgb,var(--cc,#8B6FE8) 11%,#fff);
  color:var(--cc,#8B6FE8)}
/* 部分卡用圆形裁切（通过内联 style 覆盖）—— 模拟 IXL 的"圆牌/方牌"混排 */
.v12-c-card .c-ic.round{border-radius:50%}
/* 插图区内微光斑装饰 */
.v12-c-card .c-ic::after{content:'';position:absolute;width:45%;height:45%;border-radius:50%;
  background:radial-gradient(circle,color-mix(in srgb,var(--cc,#8B6FE8) 20%,transparent) 0%,transparent 70%);
  opacity:.55;top:-5%;right:-10%;pointer-events:none}
/* 文字标签 —— 小而干净 */
.v12-c-card b{display:block;font-size:12.5px;color:#241F38;font-weight:600;margin-bottom:2px;line-height:1.3}
.v12-c-card small{display:block;font-size:10.5px;color:#A5A0B8;line-height:1.35}
.v12-band-cta{display:inline-flex;align-items:center;gap:8px;background:#8B6FE8;color:#fff;font-size:14px;font-weight:600;
  padding:13px 28px;border-radius:99px;text-decoration:none;box-shadow:0 8px 20px rgba(139,111,232,.30);transition:transform .15s}
.v12-band-cta:hover{transform:translateY(-2px)}
/* 满屏② 蓝色 banner */
.v12-feat-band{position:relative;left:calc(-1 * var(--main-x,78px));width:100vw;margin-left:0;margin-right:0;padding:48px 28px 56px;
  background:linear-gradient(135deg,#1E88E5 0%,#1565C0 100%);color:#fff;overflow:hidden}
.v12-feat-inner{position:relative;max-width:1080px;margin:0 auto;text-align:center}
.v12-feat-title{font-size:23px;font-weight:500;margin:0 0 8px}
.v12-feat-title .feat-em{color:#FFE9A8}
.v12-feat-sub{font-size:13px;color:rgba(255,255,255,.85);margin:0 0 32px}
.v12-feat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media(max-width:1000px){.v12-feat-grid{grid-template-columns:repeat(2,1fr)}}
.v12-feat-card{background:#fff;border-radius:14px;padding:22px;text-align:left;color:#241F38;box-shadow:0 8px 20px rgba(0,0,0,.10)}
.v12-feat-card:hover{transform:translateY(-4px);box-shadow:0 14px 28px rgba(0,0,0,.16);transition:transform .18s}
.v12-feat-card .fc-ic{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:14px}
.v12-feat-card h3{font-size:14px;font-weight:600;color:#241F38;margin:0 0 8px}
.v12-feat-card p{font-size:12px;color:#6F6A85;line-height:1.6;margin:0}
.v12-foot{text-align:center;font-size:11px;color:#A5A0B8;padding:20px 0 40px}

/* ===== v12 首页 · 三场景流程卡（2026-09-16 · 锚在 Hero 正下方，回答「现在干什么」）===== */
.v12-flow{margin:0 0 30px;border-radius:24px;padding:22px 26px;background:#fff;
  border:1px solid rgba(139,111,232,.18);box-shadow:0 14px 40px rgba(80,65,160,.10);position:relative;overflow:hidden}
.v12-flow::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
  background:linear-gradient(180deg,#8B6FE8,#28C2C8)}
.v12-flow-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.v12-flow-ava{width:38px;height:38px;border-radius:12px;flex:none;
  background:linear-gradient(135deg,#6D5EFC,#28C2C8);display:flex;align-items:center;justify-content:center;font-size:19px}
.v12-flow-hd{flex:1;min-width:0}
.v12-flow-hd b{display:block;font-size:15px;color:#2B2740}
.v12-flow-hd span{font-size:12px;color:#8B86A0}
.v12-flow-all{font-size:12px;color:#9A95AE;white-space:nowrap}
.v12-flow-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media (max-width:900px){.v12-flow-steps{grid-template-columns:1fr}}
.v12-fstep{border-radius:16px;padding:14px 16px;background:#FAF9FF;border:1.5px solid #EDEAFB;
  display:flex;flex-direction:column;gap:8px;transition:transform .18s,box-shadow .18s}
.v12-fstep.is-now{background:linear-gradient(160deg,#FFF6FB,#F5F3FF);border-color:rgba(217,53,122,.35);
  box-shadow:0 8px 22px rgba(217,53,122,.12)}
.v12-fstep.is-ready{background:linear-gradient(160deg,#F2FFFC,#F5F3FF);border-color:rgba(40,194,200,.35)}
.v12-fstep-top{display:flex;align-items:center;gap:8px}
.v12-fstep-no{width:20px;height:20px;border-radius:50%;background:#EDEAFB;color:#8B6FE8;font-size:11px;
  font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.v12-fstep.is-now .v12-fstep-no{background:#D9357A;color:#fff}
.v12-fstep.is-ready .v12-fstep-no{background:#28C2C8;color:#fff}
.v12-fstep-t{font-size:14px;font-weight:600;color:#2B2740}
.v12-fstep-tag{margin-left:auto;font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600;white-space:nowrap}
.v12-fstep-tag.now{background:#D9357A;color:#fff}
.v12-fstep-tag.ready{background:#28C2C8;color:#fff}
.v12-fstep-tag.lock{background:#EDEAFB;color:#8B86A0}
.v12-fstep-d{font-size:12px;color:#6F6A85;line-height:1.65;flex:1}
.v12-fstep-d b{color:#2B2740}
.v12-fstep-btn{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;
  padding:8px 16px;border-radius:12px;border:none;cursor:pointer;text-decoration:none;
  background:#8B6FE8;color:#fff;transition:transform .16s}
.v12-fstep-btn:hover{transform:translateY(-1px)}
.v12-fstep.is-now .v12-fstep-btn{background:#D9357A}
.v12-fstep.is-ready .v12-fstep-btn{background:#28C2C8}
.v12-flow-note{margin-top:14px;font-size:11.5px;color:#9A95AE;line-height:1.6}
.v12-flow-note b{color:#8B6FE8}

/* ===== 整改 2026-08-20：侧栏选科 label 可见 + 学科主页快速切换器 ===== */
.subj-ctx-bar .sel-row{display:flex;align-items:center;gap:6px;margin:4px 0;padding:4px 6px;border-radius:8px;background:rgba(241,237,253,.55)}
.subj-ctx-bar .sel-lbl{font-size:11px;color:#8B6FE8;font-weight:600;flex:none;min-width:48px}
.subj-ctx-bar select{flex:1;min-width:0;font-size:12px;padding:4px 6px;border-radius:6px;border:1px solid rgba(120,110,150,.18);background:#fff;color:#241F38}
/* 学科主页快速切换器 */
.v12-qswitch{margin:18px 0 22px;padding:14px 18px;background:#fff;border-radius:14px;box-shadow:0 4px 14px rgba(80,65,160,.06);display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.v12-qswitch .qs-lbl{font-size:12px;color:#6F6A85;font-weight:600}
.v12-qswitch .qs-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.v12-qswitch .qs-pill{padding:6px 14px;border-radius:99px;font-size:12px;font-weight:500;background:rgba(241,237,253,.6);color:#534AB7;border:1px solid rgba(120,110,150,.18);cursor:pointer;transition:all .15s;font-family:inherit}
.v12-qswitch .qs-pill.on{background:#4F46E5;color:#fff;font-weight:600;border-color:#4F46E5;box-shadow:0 4px 10px rgba(79,70,229,.28)}
.v12-qswitch .qs-pill:hover:not(.on){background:#EEF2FF;border-color:#4F46E5}
.v12-qswitch .qs-sep{width:1px;height:20px;background:rgba(120,110,150,.18);margin:0 4px}

/* ============ P2-B 独立闯关模块（arcade） ============ */
.arc-wrap{max-width:920px;margin:18px auto;padding:0 14px}
.arc-map{display:flex;flex-direction:column;gap:14px;margin-top:6px}
.arc-stage{background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);border-radius:16px;padding:14px 16px;position:relative;overflow:hidden}
.arc-stage::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#6D5EFC,#28C2C8)}
.arc-stage.stage-locked{opacity:.72;background:linear-gradient(0deg,#fafbff,#f4f5fb)}
.arc-stage-head{display:flex;align-items:center;gap:12px}
.arc-stage-ic{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-size:20px;background:linear-gradient(135deg,rgba(109,94,252,.14),rgba(40,194,200,.14));border:1px solid rgba(109,94,252,.2);flex:none}
.arc-stage-meta{flex:1;min-width:0}
.arc-stage-meta b{display:block;font-size:15px;color:var(--ink,#1f2430)}
.arc-stage-meta small{font-size:12px;color:var(--muted,#6b7080)}
.arc-stage-pct{font-weight:800;font-size:15px;color:#16a34a;font-variant-numeric:tabular-nums;white-space:nowrap}
.arc-stage-pct .arc-lock-tag{font-size:12px;color:var(--muted,#6b7080);font-weight:600;background:var(--bg,#f6f7fb);border:1px solid var(--line);border-radius:99px;padding:2px 10px}
.arc-nodes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:12px}
.arc-node{display:flex;align-items:center;gap:8px;text-align:left;background:#fff;border:1px solid var(--line,#e7eaf2);border-radius:12px;padding:11px 12px;cursor:pointer;transition:.16s;font:inherit;color:var(--ink)}
.arc-node:hover{transform:translateY(-2px);box-shadow:0 10px 22px -12px rgba(109,94,252,.5);border-color:rgba(109,94,252,.4)}
.arc-node .arc-dot{width:10px;height:10px;border-radius:50%;flex:none;background:#cbd2e0}
.arc-node .arc-node-name{flex:1;min-width:0;font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.arc-node .arc-node-state{font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;white-space:nowrap}
.arc-node.new{background:linear-gradient(135deg,#fff,#f6f7ff)}
.arc-node.new .arc-dot{background:linear-gradient(135deg,#6D5EFC,#28C2C8)}
.arc-node.new .arc-node-state{color:#5b53d6;background:rgba(109,94,252,.12)}
.arc-node.learned .arc-dot{background:#3b82f6}
.arc-node.learned .arc-node-state{color:#2563eb;background:#eff6ff}
.arc-node.done .arc-dot{background:#16a34a}
.arc-node.done .arc-node-state{color:#15803d;background:#ecfdf5}
.arc-node.locked{opacity:.55;cursor:not-allowed}
.arc-locked-hint{margin-top:10px;font-size:12.5px;color:var(--muted,#6b7080);background:var(--bg,#f6f7fb);border:1px dashed var(--line);border-radius:10px;padding:8px 12px}
.arc-badges{margin-top:18px}
.arc-badges-t{font-size:14px;font-weight:800;color:var(--ink,#1f2430);margin:18px 0 10px}
.arc-badges{display:flex;flex-wrap:wrap;gap:10px}
.arc-badge{min-width:120px;background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:2px;position:relative;overflow:hidden}
.arc-badge::before{content:"";position:absolute;right:-14px;top:-14px;width:48px;height:48px;border-radius:50%;background:radial-gradient(circle,rgba(255,176,32,.18),transparent 70%)}
.arc-badge-ic{font-size:22px}
.arc-badge b{font-size:13px;color:var(--ink)}
.arc-badge small{font-size:11px;color:var(--muted,#6b7080)}

/* 2026-09-01 闯关地图（#/my-quest）：多学科聚合卡，复用 arc 的 stage 标记 */
.mq-wrap{display:flex;flex-direction:column;gap:16px;margin-top:6px}
.mq-subj{background:var(--card,#fff);border:1px solid var(--line,#e7eaf2);border-radius:18px;padding:16px 18px;position:relative;overflow:hidden}
.mq-subj::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#6D5EFC,#28C2C8)}
.mq-subj-head{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.mq-subj-ic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-size:20px;background:linear-gradient(135deg,rgba(109,94,252,.14),rgba(40,194,200,.14));border:1px solid rgba(109,94,252,.2);flex:none}
.mq-subj-meta{flex:1;min-width:0}
.mq-subj-meta b{display:block;font-size:16px;color:var(--ink,#1f2430)}
.mq-subj-meta small{font-size:12px;color:var(--muted,#6b7080)}
.mq-subj-chip{font-size:11px;font-weight:700;padding:3px 10px;border-radius:99px;background:rgba(109,94,252,.12);color:#5b53d6;white-space:nowrap}
.mq-subj-chip.on{background:#ecfdf5;color:#15803d}
.mq-subj-chip.grey{background:var(--bg,#f6f7fb);color:var(--muted,#6b7080)}
.mq-subj-go{font-size:12.5px;font-weight:700;color:#5b53d6;text-decoration:none;white-space:nowrap}
.mq-subj-go:hover{text-decoration:underline}
.mq-empty-note{background:linear-gradient(135deg,#fff7ed,#ffedd5);border:1px solid #fed7aa;color:#9a3412;border-radius:14px;padding:12px 16px;font-size:13.5px;margin-bottom:4px}
.mq-empty-note a{color:#c2410c;font-weight:700}

@media (max-width:560px){
  .arc-nodes{grid-template-columns:repeat(auto-fill,minmax(128px,1fr))}
  .arc-stage-head{gap:10px}
  .arc-stage-ic{width:38px;height:38px;font-size:18px}
  .arc-node{padding:12px 13px}
}
@media (hover:none){
  .arc-node:hover{transform:none;box-shadow:none}
  .arc-node:active{border-color:rgba(109,94,252,.5);background:linear-gradient(135deg,#fff,#eef0ff)}
}

/* ============================================================
   数学学科页 · 视觉母题（2026-09-02 整改）
   母题：草稿纸（坐标网格 + 淡函数曲线）· 几何构图（坐标象限 + 漂浮立体）
        卡片语言 = 白底细描边（区别于英语页的填充渐变）
   仅作用于 .mth-* 命名空间，不影响其他学科页
   ============================================================ */
.mth-hero{position:relative;overflow:hidden;border-radius:24px;margin:22px 0 16px;
  /* [v28] 数学 hero 底色明显蓝→紫→青三色相渐变，呼应品牌紫(#a548FF)但保留数学冷色"草稿纸"母题——
     起端蓝(书写墨水) → 中段薰衣草紫(品牌色) → 末端薄荷青(公式演算绿)；色相跨度大让渐变肉眼可见 */
  background:linear-gradient(135deg,#C5D5FF 0%,#F1E9FB 50%,#B6EFE8 100%);
  border:1px solid rgba(109,94,252,.22);
  box-shadow:0 22px 48px -28px rgba(63,86,196,.42), 0 2px 6px -3px rgba(40,194,200,.18)}
/* 草稿纸网格（母题核心：数学的"纸"，而非英语的"柔光"）*/
.mth-hero::before{content:'';position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(63,86,196,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(63,86,196,.055) 1px,transparent 1px);
  background-size:26px 26px;
  -webkit-mask-image:radial-gradient(125% 135% at 10% 0%,#000 38%,transparent 100%);
  mask-image:radial-gradient(125% 135% at 10% 0%,#000 38%,transparent 100%)}
/* 一条淡到几乎看不见的函数曲线（草稿纸上的演算痕）*/
.mth-hero::after{content:'';position:absolute;left:46%;right:-4%;bottom:-30px;height:260px;
  pointer-events:none;opacity:.55;
  background:no-repeat left bottom/contain
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 560 260'%3E%3Cpath d='M0 190 C 60 190, 78 92, 140 92 S 244 196, 300 132 S 430 36, 560 104' fill='none' stroke='%233f56c4' stroke-width='2' stroke-opacity='.32' stroke-linecap='round'/%3E%3Cpath d='M0 226 C 90 226, 120 158, 210 158 S 350 232, 430 176 S 520 128, 560 150' fill='none' stroke='%230FA5A5' stroke-width='1.6' stroke-opacity='.26' stroke-linecap='round'/%3E%3C/svg%3E")}
.mth-hero-in{position:relative;z-index:2;display:grid;grid-template-columns:1.03fr .97fr;
  gap:26px;align-items:center;padding:34px 36px}
.mth-copy{min-width:0}
.mth-eyebrow{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:999px;
  background:rgba(63,86,196,.09);border:1px solid rgba(63,86,196,.2);
  font-size:12.5px;font-weight:700;color:#3f56c4;letter-spacing:.4px}
.mth-title{font-size:37px;font-weight:800;line-height:1.45;letter-spacing:-.4px;
  margin:14px 0 0;color:#132038}
.mth-title .mth-grad{background:linear-gradient(120deg,#3f56c4 0%,#2563EB 45%,#0FA5A5 100%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.mth-lede{margin:13px 0 0;font-size:15.5px;line-height:2.0;color:#4d5878;max-width:580px}
.mth-lede b{color:#132038;font-weight:700}
.mth-acts{display:flex;gap:11px;margin-top:20px;flex-wrap:wrap}
.mth-btn{display:inline-flex;align-items:center;gap:7px;padding:12px 24px;border-radius:999px;
  font-size:14.5px;font-weight:700;text-decoration:none;border:none;cursor:pointer;
  transition:transform .18s ease,box-shadow .18s ease;font-family:inherit}
.mth-btn-pri{color:#fff;background:linear-gradient(120deg,#3f56c4 0%,#2563EB 55%,#0FA5A5 100%);
  box-shadow:0 12px 26px -10px rgba(45,90,220,.65)}
.mth-btn-pri:hover{transform:translateY(-2px);box-shadow:0 16px 32px -10px rgba(45,90,220,.75)}
.mth-btn-ghost{color:#2b3a5c;background:rgba(255,255,255,.86);border:1.5px solid #d9e2f4;
  box-shadow:0 4px 12px -6px rgba(28,42,92,.25)}
.mth-btn-ghost:hover{transform:translateY(-2px);border-color:#3f56c4;color:#3f56c4}
.mth-stats{list-style:none;display:flex;gap:26px;margin:22px 0 0;padding:0;flex-wrap:wrap}
.mth-stats li{display:flex;flex-direction:column;min-width:0}
.mth-stats strong{font-size:26px;font-weight:800;line-height:1.2;color:#132038;
  font-variant-numeric:tabular-nums}
.mth-stats span{font-size:12.5px;color:#78829c;margin-top:4px;letter-spacing:.3px}
/* ---- 右侧构图：坐标象限 + 漂浮几何体 + 小伴（区别于英语的"玻璃卡+引言气泡"）---- */
.mth-stage{position:relative;min-height:264px;border-radius:20px;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 120% at 50% 8%,rgba(255,255,255,.95),rgba(243,247,255,.6));
  border:1px solid #e3eaf8}
/* 十字坐标轴 */
.mth-stage::before{content:'';position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(to right,transparent calc(50% - .5px),rgba(63,86,196,.26) calc(50% - .5px),rgba(63,86,196,.26) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(to bottom,transparent calc(50% - .5px),rgba(63,86,196,.26) calc(50% - .5px),rgba(63,86,196,.26) calc(50% + .5px),transparent calc(50% + .5px));
  -webkit-mask-image:radial-gradient(100% 100% at 50% 50%,#000 55%,transparent 100%);
  mask-image:radial-gradient(100% 100% at 50% 50%,#000 55%,transparent 100%)}
.mth-solid{position:absolute;pointer-events:none;filter:drop-shadow(0 8px 16px rgba(28,42,92,.18))}
.mth-solid svg{display:block;width:100%;height:100%}
.mth-s1{width:74px;height:74px;top:12%;left:8%;animation:mthFloat 6s ease-in-out infinite}
.mth-s2{width:78px;height:78px;top:14%;right:9%;animation:mthFloat 7.2s ease-in-out infinite .8s}
.mth-s3{width:86px;height:86px;bottom:9%;right:13%;animation:mthFloat 6.6s ease-in-out infinite 1.6s}
.mth-s4{width:60px;height:60px;bottom:12%;left:11%;animation:mthFloat 8s ease-in-out infinite 2.2s}
@keyframes mthFloat{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-11px) rotate(4deg)}}
.mth-mascot{position:relative;z-index:3;width:190px;max-width:62%;height:auto;object-fit:contain;
  filter:drop-shadow(0 14px 26px rgba(28,42,92,.28));animation:mthFloat 7s ease-in-out infinite .4s}
/* ---- 四大板块矩阵（v20 · 统一品牌色 + 4 板块大修：白底紫边 + on 浅紫底紫青描边）---- */
.mth-plates{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:16px 0 18px}
.mth-plate{position:relative;display:block;width:100%;text-align:left;cursor:pointer;
  background:#fff;
  color:#1d2140;  /* 兜底：button 全局 color 为白，未显式设色的子元素会隐形 */
  border:1.5px solid #e3eaf8;
  border-left:5px solid var(--pc);  /* 4 板各自领域色仅作用于左侧粗竖条 */
  border-radius:18px;padding:18px 18px 16px;
  font-family:inherit;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease,background .2s ease;
  box-shadow:0 2px 8px -4px rgba(28,42,92,.12)}
/* hover：仅抬升 + 浅边框，不染底色——避免浓色底让文字看不清（同时显式覆盖全局 button:hover 的浓紫底干扰）*/
.mth-plate:hover{background:#fff;
  transform:translateY(-3px);
  border-color:var(--pc-line);
  box-shadow:0 14px 26px -20px rgba(28,42,92,.28)}
.mth-plate:hover b{color:#1d2140}
.mth-plate:hover small{color:#5b6480}
.mth-plate:hover .mth-plate-stats b{color:var(--pc)}
.mth-plate:hover .mth-plate-ic{background:#fff;border-color:var(--pc-line);color:var(--pc)}
/* on：品牌统一色 · 白底 + 紫青渐变描边 + 关键字段微染色 */
.mth-plate.on{background:linear-gradient(180deg,rgba(139,111,232,.05) 0%,rgba(40,194,200,.04) 100%);
  border-color:#8B6FE8;
  box-shadow:0 18px 34px -22px rgba(139,111,232,.40)}
.mth-plate.on b{color:#0b1431}
.mth-plate.on .mth-plate-stats b{color:var(--tb,#8B6FE8)}
.mth-plate.on .mth-plate-go{color:#8B6FE8;font-weight:700}
.mth-plate.on::after{content:"✓ 当前";position:absolute;top:12px;right:14px;font-size:11px;font-weight:700;color:#8B6FE8;
  background:rgba(139,111,232,.12);padding:3px 9px;border-radius:99px;letter-spacing:.5px}
/* v24 空板块：本学段无章节可练时灰化+禁用+切年级提示（disabled + 显式 :hover 覆盖：特异性 .is-empty:hover=(0,2,1) > 全局 button:hover=(0,1,1)，拦截浓紫底） */
.mth-plate.is-empty{background:#f8f9fc !important;cursor:not-allowed;opacity:.78;
  border-left-color:#cbd5e1 !important}
.mth-plate.is-empty .mth-plate-ic{background:#eef1f6;border-color:#e1e7f0;color:#94a3b8;filter:grayscale(.4)}
.mth-plate.is-empty b{color:#64748b}
.mth-plate.is-empty small{color:#94a3b8}
.mth-plate.is-empty .mth-plate-stats{opacity:.6}
.mth-plate.is-empty .mth-plate-go{color:#94a3b8;font-weight:600;letter-spacing:.2px}
.mth-plate.is-empty:hover{background:#f8f9fc !important;transform:none;box-shadow:none;
  border-color:#e3eaf8 !important;border-left-color:#cbd5e1 !important}
/* 默认 · 标题深色 · 永远清晰 */
.mth-plate-ic{width:44px;height:44px;border-radius:13px;display:flex;align-items:center;
  justify-content:center;background:#F7F5FE;border:1px solid #ECE6FA;margin:0 0 12px;color:var(--pc);transition:all .2s ease}
.mth-plate-ic svg{width:26px;height:26px;display:block}
.mth-plate b{display:block;font-size:16.5px;font-weight:700;color:#1d2140;letter-spacing:.2px}  /* 默认深色不再变浅紫 */
.mth-plate small{display:block;margin-top:5px;font-size:12.5px;line-height:1.6;color:#78829c}
.mth-plate-go{margin-top:11px;display:inline-flex;align-items:center;gap:5px;font-size:12.5px;
  font-weight:700;color:var(--pc);opacity:.85}
.mth-plate.on .mth-plate-go{opacity:1}
/* ---- 工具箱：描边语言强化（左竖条 + 悬浮抬升），不复用英语的填充渐变 ---- */
.mth-tool{position:relative}
.mth-tool::before{content:'';position:absolute;left:0;top:16px;bottom:16px;width:4px;
  border-radius:0 4px 4px 0;background:var(--tc);opacity:.85;transition:opacity .2s ease}
.mth-tool:hover{transform:translateY(-3px);border-color:var(--tc)!important;
  box-shadow:0 18px 34px -22px var(--tc)!important}
.mth-tool:hover::before{opacity:1}
.mth-tool:nth-child(1){--tc:#6D5EFC}
.mth-tool:nth-child(2){--tc:#8B5CF6}
.mth-tool:nth-child(3){--tc:#0369A1}
.mth-tool:nth-child(4){--tc:#E11D48}
.mth-tool:nth-child(5){--tc:#2563EB}
.mth-tool:nth-child(6){--tc:#1F9D6B}
.mth-tool:nth-child(7){--tc:#FF6B35}
/* 第 8/9/10 张（数学游乐场 / 口算速算 / 记忆宫殿）补齐左竖条描边色 —— 缺 --tc 时竖条会渲染成透明 */
.mth-tool:nth-child(8){--tc:#F97316}
.mth-tool:nth-child(9){--tc:#F59E0B}
.mth-tool:nth-child(10){--tc:#7C3AED}
/* ---- [#v26] 数学 CTA「大题深挖分析师」：#a548ff 品牌紫主调，色相跨度大（粉紫→紫→蓝紫）让渐变"明显"；白字反白，去左竖条；图标半透明白底白描边；按钮白底紫字紫描边（与紫色底形成跳跃对比） ---- */
.mth-cta-row{position:relative;display:flex;align-items:center;gap:18px;
  margin:4px 0 22px;padding:20px 24px;
  background:linear-gradient(135deg,#C249FF 0%,#A548FF 45%,#6D3FEE 100%);
  border:1px solid rgba(255,255,255,.18);border-radius:22px;
  text-decoration:none;color:#ffffff;font-family:inherit;cursor:pointer;
  box-shadow:0 16px 36px -16px rgba(165,72,255,.55),0 2px 8px -3px rgba(109,62,238,.35);
  transition:transform .2s ease,box-shadow .2s ease}
/* v25 去掉左竖条（参考样无左竖条）—— v26 保持 */
.mth-cta-row::before{display:none}
.mth-cta-row:hover{transform:translateY(-3px);
  background:linear-gradient(135deg,#D36CFF 0%,#B85EFF 45%,#7E58F0 100%);
  box-shadow:0 24px 44px -18px rgba(165,72,255,.65),0 4px 12px -3px rgba(109,62,238,.45)}
.mth-cta-ic{width:56px;height:56px;border-radius:16px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;color:#ffffff;
  background:rgba(255,255,255,.18);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.30)}
.mth-cta-ic svg{width:30px;height:30px;display:block}
.mth-cta-body{display:flex;flex-direction:column;gap:5px;flex:1 1 auto;min-width:0}
.mth-cta-title{font-size:19px;font-weight:700;color:#ffffff;letter-spacing:.2px;line-height:1.2}
.mth-cta-sub{font-size:13px;color:rgba(255,255,255,.85);line-height:1.55;font-weight:400}
.mth-cta-go{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;white-space:nowrap;
  font-size:14px;font-weight:700;color:#A548FF;
  background:#ffffff;
  padding:11px 20px;border-radius:99px;
  box-shadow:0 6px 16px -6px rgba(0,0,0,.28),inset 0 0 0 1px rgba(165,72,255,.18);
  transition:transform .15s ease,background .15s ease,box-shadow .15s ease}
.mth-cta-go svg{width:16px;height:16px;display:block}
.mth-cta-row:hover .mth-cta-go{transform:translateX(3px);
  background:#ffffff;
  box-shadow:0 8px 22px -6px rgba(0,0,0,.32),inset 0 0 0 1px rgba(165,72,255,.30)}
/* ---- [#v22] 数学学科页顶栏「学科」整组隐藏（与 v22 反馈「学科·数学」按钮不用显示 对应）---- */
body[data-subject="math"] .mth-hide{display:none !important}
/* ---- 响应式 ---- */
@media (max-width:1180px){
  .mth-plates{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:900px){
  .mth-hero-in{grid-template-columns:1fr;gap:18px;padding:26px 24px}
  .mth-title{font-size:30px}
  .mth-lede{font-size:14.5px;line-height:1.9}
  .mth-stage{min-height:230px;order:-1}
  .mth-mascot{width:160px}
  .mth-stats{gap:20px}
  .mth-stats strong{font-size:23px}
}
@media (max-width:760px){
  .mth-cta-row{flex-wrap:wrap;padding:16px 18px;gap:14px}
  .mth-cta-ic{width:48px;height:48px}
  .mth-cta-ic svg{width:26px;height:26px}
  .mth-cta-title{font-size:17px}
  .mth-cta-sub{font-size:12.5px}
  .mth-cta-go{width:100%;justify-content:center;padding:12px 18px;font-size:13.5px}
}
@media (max-width:560px){
  .mth-plates{grid-template-columns:1fr}
  .mth-stats{gap:16px}
  .mth-btn{padding:11px 18px;font-size:13.5px}
}/* ============================================================
/* 2026-09-02 数学学科整改 (4 大板块充实 + qswitch 提前 + 副标清理) */
/* ============================================================ */
/* ---- 4 大板块 stats / 章名预览 / 占位 ---- */
.mth-plate-stats{display:flex;align-items:center;gap:10px;margin:14px 0 10px;padding-top:12px;border-top:1px dashed rgba(120,110,150,.18)}
.mth-plate-stats span{display:flex;align-items:baseline;gap:3px;font-size:12px;color:#78829c}
.mth-plate-stats b{font-size:16px;font-weight:800;color:#0f172a;letter-spacing:.2px}
.mth-plate.on .mth-plate-stats b{color:var(--pc)}
.mth-plate-chs{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:5px}
.mth-plate-chs li{position:relative;padding-left:14px;font-size:12.5px;line-height:1.45;color:#475569;font-weight:500;letter-spacing:.2px}
.mth-plate-chs li::before{content:"";position:absolute;left:0;top:8px;width:5px;height:5px;border-radius:50%;background:var(--pc);opacity:.85}
.mth-plate-chs li:last-child::before{background:repeating-linear-gradient(90deg,var(--pc) 0 2px,transparent 2px 4px);border-radius:0;width:6px;height:2px;top:10px}
.mth-plate-empty{font-size:12px;color:#94a3b8;font-style:italic;margin:14px 0 14px;padding:10px 12px;background:rgba(120,110,150,.06);border-radius:8px}
/* 去 eyebrow 后 hero 顶部不留大空隙 */
.mth-hero-in{padding-top:34px}
/* ---- 数学专属 qswitch（提前到 hero 之上 · 射击数学几何装饰）---- */
body[data-subject="math"] .v12-qswitch{position:relative;overflow:hidden;
  margin:18px 0 0;border:1px solid rgba(120,110,150,.18);
  background:linear-gradient(135deg,rgba(109,94,252,.04) 0%,rgba(40,194,200,.04) 100%)}
body[data-subject="math"] .v12-qswitch::before{content:"";position:absolute;left:14px;top:14px;width:34px;height:34px;
  background-image:radial-gradient(circle,rgba(91,107,214,.18) 1.4px,transparent 1.6px);background-size:8px 8px;opacity:.7;pointer-events:none}
body[data-subject="math"] .v12-qswitch::after{content:"+ - \00f7 =";position:absolute;right:18px;top:50%;transform:translateY(-50%);
  font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;font-size:14px;letter-spacing:10px;
  color:rgba(91,107,214,.35);font-weight:600;pointer-events:none;line-height:1}
/* ---- 响应式：≤1100 mth-plate stats 紧文·≤776 装饰隐藏 ---- */
@media (max-width:1100px){
  body[data-subject="math"] .v12-qswitch::before,body[data-subject="math"] .v12-qswitch::after{display:none}
  body[data-subject="math"] .v12-qswitch{padding-left:14px;padding-right:14px}
}
@media (max-width:900px){
  .mth-plate-stats b{font-size:14px}
  .mth-plate-chs li{font-size:12px}
}
@media (max-width:560px){
  body[data-subject="math"] .v12-qswitch{margin-top:14px;padding:12px 14px}
  .mth-plate-stats{margin:12px 0 8px;padding-top:10px}
}
/* ============================================================
/* 2026-09-02 v20 math subject refactor (4 plates brand-colored + grade/version label) */
/* ============================================================ */
/* ---- v20 grade/version small chip (shown in stats row, right-aligned) ---- */
.mth-plate-meta{margin-left:auto;font-size:11.5px;color:#78829c;font-weight:600;letter-spacing:.2px;
  background:linear-gradient(135deg,#F4F0FF 0%,#E8F5F6 100%);padding:3px 9px;border-radius:99px;display:inline-flex;align-items:center;gap:4px}
.mth-plate-meta::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:linear-gradient(120deg,#6D5EFC 0%,#28C2C8 100%)}
.mth-plate.on .mth-plate-meta{background:linear-gradient(135deg,rgba(109,94,252,.18) 0%,rgba(40,194,200,.15) 100%);color:#1d2140}
@media (max-width:900px){.mth-plate{padding:16px 16px 14px}.mth-plate-meta{font-size:10.5px;padding:2px 7px}}
/* ============================================================
/* 2026-09-02 语文主页整改 (水墨书卷母题 hero + 四大能力域矩阵 + 作文智能陪练) */
/* ============================================================ */
/* ---- 语文 hero：宣纸米底 + 水墨纹 + 印章/卷轴浮饰 ---- */
/* ===== 语文 v4：净宣纸白底 + 毛笔字大字 + 压角印 + 红色笔锋（v3 底色「米黄显脏」的整改） ===== */
/* 自托管毛笔字字体：Ma Shan Zheng（马善政）·OFL 商用免费；pyftsubset 子集化到 hero 用字（72KB woff2） */
@font-face{
  font-family:"MaShanZheng";
  src:url("fonts/MaShanZheng-ChineseHero.subset.woff2") format("woff2");
  font-display:swap;font-weight:400;font-style:normal;unicode-range:U+4E00-9FFF,U+3000-303F,U+FF00-FFEF;}

/* 主底：纯白宣纸（绝不染色），边框极淡，水墨远山只留右下角一淡墨 */
.chn-hero-v3{position:relative;overflow:hidden;border-radius:24px;margin:22px 0 16px;
  background:#ffffff;
  border:1px solid rgba(31,41,55,.10);
  padding:36px 44px 30px;
  box-shadow:0 18px 44px -32px rgba(31,41,55,.45),0 1px 4px -2px rgba(31,41,55,.10)}
/* 远山淡墨（只留右下，浓度减半） */
.chn-hero-v3::after{content:'';position:absolute;right:-80px;bottom:-100px;width:380px;height:380px;
  pointer-events:none;opacity:.10;
  background:no-repeat right bottom/contain
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 420'%3E%3Cpath d='M30 340 C 80 320, 110 220, 170 240 S 240 320, 300 260 S 380 200, 400 220' fill='none' stroke='%231F2937' stroke-width='2.6' stroke-linecap='round'/%3E%3Cpath d='M20 380 C 90 360, 130 320, 200 320 S 300 360, 380 320' fill='none' stroke='%231F2937' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E")}
/* 去掉 v3 的「脏」根源：毛玻璃 wash + 宣纸点纹（白底上加这俩反而显脏） */
.chn-hero-v3::before{display:none}
.chn-hero-v3 .chn-hero-wash{display:none}

/* 顶行：kicker 左、压角印 右（仿书画落款） */
.chn-v3-top{position:relative;z-index:3;display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:20px;gap:24px}
.chn-kicker{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;
  background:rgba(192,57,43,.08);border:1px solid rgba(192,57,43,.20);
  font-size:12.5px;font-weight:700;color:#C0392B;letter-spacing:.4px}
.chn-kicker-dot{display:inline-block;width:8px;height:8px;border-radius:50%;
  background:linear-gradient(120deg,#C0392B 0%,#28C2C8 100%)}
/* 压角印：朱红方印，旋转 -5°，仿手盖印章 */
.chn-seal-corner{position:relative;width:64px;height:64px;border-radius:8px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#D44A3C 0%,#C0392B 50%,#9C2A1F 100%);
  color:#FFF7E8;font-family:"STXingkai","Xingkai SC","STXinwei","KaiTi","STKaiti",serif;font-size:38px;font-weight:700;
  line-height:1;letter-spacing:0;
  box-shadow:
    0 0 0 2px rgba(192,57,43,.20),
    0 0 0 4px rgba(192,57,43,.08),
    0 10px 24px -8px rgba(192,57,43,.55),
    inset 0 0 0 2px rgba(255,247,232,.25);
  transform:rotate(-5deg);
  text-shadow:0 1px 0 rgba(120,30,20,.4)}
.chn-seal-corner::after{content:'';position:absolute;inset:5px;border:1.5px solid rgba(255,247,232,.32);border-radius:4px;pointer-events:none}

/* 主标题：毛笔字大字（自托管 Ma Shan Zheng 离线 woff2，靠系统行楷链兜底；大字号+大字距近"毛体"） */
.chn-v3-title{position:relative;z-index:3;margin:0 0 6px;
  font-family:"MaShanZheng","STXingkai","Xingkai SC","STXinwei","STHupo","STKaiti","KaiTi","KaiTi SC","Songti SC",cursive,serif;
  font-weight:400;line-height:1.22;letter-spacing:8px;color:#0F172A;font-size:62px;
  text-shadow:0 1px 0 rgba(31,41,55,.04)}
.chn-v3-title .chn-v3-t1{color:#0F172A}
.chn-v3-title .chn-v3-t2{color:#B91C1C;text-shadow:0 1px 0 rgba(185,28,28,.10)}
/* 红色笔锋装饰（飞白朱红，代替数学式「4 数字条」） */
.chn-v3-brush{position:relative;z-index:3;display:block;margin:6px 0 24px;width:240px;max-width:46%;height:14px;color:#C0392B}

/* 文案 + 行动 + 墨韵进度 */
.chn-v3-lede{position:relative;z-index:3;max-width:680px;margin:0;font-size:15.5px;line-height:2.0;color:#475569}
.chn-v3-lede b{color:#0F172A;font-weight:700}
.chn-v3-acts{position:relative;z-index:3;display:flex;gap:11px;margin-top:20px;flex-wrap:wrap}
.chn-btn{display:inline-flex;align-items:center;gap:7px;padding:12px 24px;border-radius:999px;
  font-size:14.5px;font-weight:700;text-decoration:none;border:none;cursor:pointer;
  transition:transform .18s ease,box-shadow .18s ease;font-family:inherit}
.chn-btn-pri{color:#fff;background:linear-gradient(120deg,#C0392B 0%,#E4564A 55%,#B91C1C 100%);
  box-shadow:0 12px 26px -10px rgba(192,57,43,.6)}
.chn-btn-pri:hover{transform:translateY(-2px);box-shadow:0 16px 32px -10px rgba(192,57,43,.7)}
.chn-btn-ghost{color:#1F2937;background:#fff;border:1.5px solid rgba(31,41,55,.22);
  box-shadow:0 6px 16px -10px rgba(31,41,55,.3)}
.chn-btn-ghost:hover{transform:translateY(-2px);border-color:rgba(192,57,43,.5);color:#C0392B}

/* 墨韵进度（替代数学式「4 数字条」） */
.chn-v3-ink{position:relative;z-index:3;display:inline-flex;align-items:center;gap:9px;margin-top:18px;
  padding:10px 15px;border-radius:13px;
  background:#F8FAFC;border:1px solid rgba(31,41,55,.10);
  font-size:13.5px;color:#475569;width:fit-content}
.chn-v3-ink strong{color:#C0392B;font-weight:800;font-variant-numeric:tabular-nums}
.chn-v3-ink-dot{width:9px;height:9px;border-radius:50%;background:#1F2937;position:relative;flex:0 0 auto}
.chn-v3-ink-dot::after{content:'';position:absolute;inset:0;border-radius:50%;border:2px solid rgba(192,57,43,.5);
  animation:chnPulse 2.4s ease-out infinite}
@keyframes chnPulse{0%{transform:scale(1);opacity:.8}100%{transform:scale(2.4);opacity:0}}
.chn-v3-ink-sep{color:#b9ad95}

/* 窄屏响应 */
@media (max-width:720px){
  .chn-hero-v3{padding:26px 22px 24px}
  .chn-v3-title{font-size:42px;letter-spacing:4px}
  .chn-seal-corner{width:54px;height:54px;font-size:30px}
  /* 自托管毛笔字窄屏字距回收 */
  .chn-v3-title{letter-spacing:3px}
}
/* ---- 卷轴目录（替代数学式 4 等分方块网格）---- */
.chn-scroll-toc{position:relative;margin:8px 0 18px;
  background:linear-gradient(180deg,#FBF7EE 0%,#F1E8D6 100%);
  border-radius:10px;box-shadow:0 18px 40px -26px rgba(31,41,55,.5)}
.chn-toc-rod{height:18px;border-radius:9px;
  background:linear-gradient(180deg,#3a2f25,#231b14);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 2px 6px -2px rgba(0,0,0,.4)}
.chn-toc-rod-top{margin:0 26px}
.chn-toc-rod-bot{margin:0 26px}
.chn-toc-body{padding:18px 24px}
.chn-toc-head{display:flex;align-items:center;gap:12px;margin:2px 0 14px}
.chn-toc-head-seal{width:38px;height:38px;border-radius:9px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;background:#C0392B;color:#fff;
  font-family:"KaiTi","STKaiti",serif;font-size:22px;font-weight:700;
  box-shadow:0 6px 14px -7px rgba(192,57,43,.7)}
.chn-toc-head-tx{display:flex;flex-direction:column;gap:2px}
.chn-toc-head-t{font-size:18px;font-weight:700;color:#1F2937;letter-spacing:.3px}
.chn-toc-head-tx small{font-size:12.5px;color:#8a7f6a}
.chn-toc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.chn-toc-item{display:flex;align-items:center;gap:14px;padding:14px 16px;cursor:pointer;
  background:#fffdf8;border:1px solid rgba(31,41,55,.12);border-left:5px solid var(--pc);
  border-radius:13px;text-decoration:none;color:inherit;
  transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease,background .16s ease}
.chn-toc-item:hover{transform:translateX(4px);box-shadow:0 12px 26px -18px rgba(31,41,55,.4);
  background:#fff;border-color:var(--pc)}
.chn-toc-item.on{background:linear-gradient(90deg,rgba(192,57,43,.06),rgba(31,41,55,.03));
  border-color:var(--pc);box-shadow:0 14px 30px -20px rgba(192,57,43,.45)}
.chn-toc-seal{width:42px;height:42px;border-radius:11px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;color:#fff;
  font-family:"KaiTi","STKaiti",serif;font-size:21px;font-weight:700;
  box-shadow:0 6px 14px -7px rgba(0,0,0,.4),inset 0 0 0 2px rgba(255,255,255,.22)}
.chn-toc-txt{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 auto}
.chn-toc-txt b{font-size:16.5px;font-weight:700;color:#1F2937;letter-spacing:.2px}
.chn-toc-txt small{font-size:12.5px;line-height:1.5;color:#78829c}
.chn-toc-num{flex:0 0 auto;font-size:12.5px;color:#8a7f6a;display:flex;align-items:baseline;gap:3px}
.chn-toc-num b{font-size:20px;font-weight:800;color:var(--pc);font-variant-numeric:tabular-nums}
/* 学习流角标（写作/基础知识 = 直通专项训练，不受该学段 0 章影响）：朱批墨签胶囊 */
.chn-toc-go{flex:0 0 auto;padding:7px 14px;border-radius:999px;white-space:nowrap;
  font-size:13px;font-weight:700;letter-spacing:.4px;color:var(--pc);
  background:#fffdf8;border:1.5px solid var(--pc);
  background:color-mix(in srgb,var(--pc) 9%,#fffdf8);
  border:1.5px solid color-mix(in srgb,var(--pc) 34%,transparent);
  transition:background .16s ease,color .16s ease,box-shadow .16s ease,transform .16s ease}
.chn-toc-flow:hover .chn-toc-go{background:var(--pc);color:#fff;transform:translateX(2px);
  box-shadow:0 8px 18px -9px color-mix(in srgb,var(--pc) 70%,transparent)}
/* 学习流条目：虚线左脊 + 淡墨底，与「章类域」实线脊在视觉上区分开 */
.chn-toc-flow{border-left-style:dashed;
  background:linear-gradient(100deg,color-mix(in srgb,var(--pc) 4%,#fffdf8),#fffdf8 62%)}
/* ---- 信笺（替代数学式横条 CTA）---- */
.chn-letter{position:relative;display:flex;align-items:center;gap:16px;
  margin:4px 0 22px;padding:20px 22px 20px 24px;border-radius:18px;
  background:linear-gradient(135deg,#FCF8EF 0%,#F3EAD7 100%);
  border:1px solid rgba(31,41,55,.16);
  text-decoration:none;color:inherit;font-family:inherit;cursor:pointer;
  box-shadow:0 16px 34px -20px rgba(31,41,55,.5);
  transition:transform .18s ease,box-shadow .18s ease}
.chn-letter::before{content:'';position:absolute;left:0;top:14px;bottom:14px;width:4px;border-radius:4px;
  background:repeating-linear-gradient(180deg,#C0392B 0 7px,transparent 7px 13px)}
.chn-letter:hover{transform:translateY(-3px);box-shadow:0 22px 44px -22px rgba(31,41,55,.6)}
.chn-letter-seal{width:56px;height:56px;border-radius:50%;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;background:#C0392B;color:#fff;
  font-family:"KaiTi","STKaiti",serif;font-size:28px;font-weight:700;
  box-shadow:0 8px 18px -8px rgba(192,57,43,.7),inset 0 0 0 3px rgba(255,255,255,.22);
  transform:rotate(-8deg)}
.chn-letter-body{display:flex;flex-direction:column;gap:5px;flex:1 1 auto;min-width:0}
.chn-letter-title{font-size:18.5px;font-weight:700;color:#1F2937;letter-spacing:.2px}
.chn-letter-body small{font-size:13px;color:#5b6b7a;line-height:1.6}
.chn-letter-go{flex:0 0 auto;white-space:nowrap;font-size:14px;font-weight:700;color:#C0392B;
  background:#fff;border:1.5px solid rgba(192,57,43,.3);padding:10px 18px;border-radius:99px;
  transition:transform .15s ease,background .15s ease}
.chn-letter:hover .chn-letter-go{transform:translateX(3px);background:rgba(192,57,43,.08)}
/* ---- 便签墙（六张专项卡变宣纸便签，区别于扁平卡网格）---- */
.chn-notes-wall{margin:22px 0 4px}
.chn-notes-wall .chn-feat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 18px}
.chn-notes-wall .chn-card{position:relative;transform:rotate(-.6deg);
  background:linear-gradient(180deg,#FFFDF7,#FBF5E8);
  border:1px solid rgba(31,41,55,.14);border-radius:14px;
  box-shadow:0 12px 26px -18px rgba(31,41,55,.55);
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.chn-notes-wall .chn-card:nth-child(even){transform:rotate(.6deg)}
.chn-notes-wall .chn-card:nth-child(3n){transform:rotate(-.3deg)}
.chn-notes-wall .chn-card::before{content:'';position:absolute;top:-9px;left:50%;transform:translateX(-50%) rotate(-3deg);
  width:62px;height:18px;background:rgba(192,57,43,.22);border:1px solid rgba(192,57,43,.30);
  border-radius:2px;box-shadow:0 2px 5px -2px rgba(0,0,0,.2)}
.chn-notes-wall .chn-card:hover{transform:rotate(0deg) translateY(-3px);
  box-shadow:0 18px 34px -20px rgba(192,57,43,.5);border-color:rgba(192,57,43,.4)}
.chn-notes-wall .chn-card-ic{background:linear-gradient(135deg,rgba(192,57,43,.12),rgba(40,194,200,.10));color:#C0392B;
  border:1px solid rgba(192,57,43,.18)}
.chn-notes-wall .chn-ask{position:relative;transform:rotate(.4deg);
  background:linear-gradient(135deg,rgba(192,57,43,.06),rgba(31,41,55,.03));
  border:1px solid rgba(192,57,43,.22);box-shadow:0 12px 26px -18px rgba(31,41,55,.5)}
.chn-notes-wall .chn-ask::before{content:'';position:absolute;top:-9px;left:50%;transform:translateX(-50%) rotate(3deg);
  width:62px;height:18px;background:rgba(40,194,200,.22);border:1px solid rgba(40,194,200,.30);border-radius:2px}
/* ---- 响应式 ---- */
@media (max-width:1180px){.chn-notes-wall .chn-feat-grid{grid-template-columns:1fr}}
@media (max-width:900px){
  .chn-hero-v2 .chn-hero-in{grid-template-columns:1fr;gap:20px;padding:26px 24px}
  .chn-banner{justify-content:center}
  .chn-vtitle{font-size:38px}
  .chn-lede{font-size:14.5px;line-height:1.85}
}
@media (max-width:760px){
  .chn-letter{flex-wrap:wrap;padding:16px 18px;gap:14px}
  .chn-letter-go{width:100%;text-align:center;padding:11px 16px}
  .chn-toc-item{padding:12px 13px;gap:11px}
  .chn-toc-seal{width:38px;height:38px;font-size:18px}
}
@media (max-width:560px){
  .chn-vtitle{font-size:32px;letter-spacing:5px}
  .chn-inkline{width:100%}
}

/* ===== 错题本独立页面感（#1012 网站化改造） ===== */
body[data-errorbook="1"],
body[data-errorbook="1"] .app-layout,
body[data-errorbook="1"] .app-layout > .main{background:#E9F7EF;min-height:100vh}
body[data-errorbook="1"] .app-layout > .main{max-width:none !important;width:100% !important;margin-left:0 !important;margin-right:0 !important}
body[data-errorbook="1"] header.top-nav{display:none!important}
body[data-errorbook="1"] #xb-companion,
body[data-errorbook="1"] #energyTip,
body[data-errorbook="1"] #mascotV5Wrap{display:none!important}
body[data-errorbook="1"] .page-head.tone-data{background:transparent;padding:0}
/* 错题本 · 全宽贯穿（#1012 视觉微调第四轮）：顶栏/占位全宽贯穿，hero/body 内容列 1124 居中 */
body[data-errorbook="1"] .main > .eb-topbar,
body[data-errorbook="1"] .main > .eb-topbar-pad{
  max-width:none !important;
  width:100% !important;
  margin-left:0 !important;
  margin-right:0 !important;
  box-sizing:border-box !important
}
body[data-errorbook="1"] .main > .eb-hero,
body[data-errorbook="1"] .main > .eb-body{
  max-width:1124px !important;
  width:100% !important;
  margin-left:auto !important;
  margin-right:auto !important;
  box-sizing:border-box !important
}

/* ===== 内嵌模式（?embed=1）· 三站工作台 iframe 内联「只留业务本体」契约 =====
   与 body[data-errorbook="1"] 同一手法：外壳页负责品牌顶栏与流程导航，
   被嵌页隐藏自己的 top-nav / 公仔 / 能量卡 / 对话坞 / 页头，并把 #main 铺满视口。
   仅当 URL 带 embed=1 时由 app.js 落 data-embed，整页访问零影响。 */
body[data-embed="1"],
body[data-embed="1"] .app-layout,
body[data-embed="1"] .app-layout > .main{background:transparent;min-height:100vh}
body[data-embed="1"] .app-layout{display:block!important;padding:0!important}
body[data-embed="1"] .app-layout > main.main{
  max-width:none!important;width:100%!important;
  margin:0!important;padding:0!important;box-sizing:border-box!important}
body[data-embed="1"] header.top-nav,
body[data-embed="1"] #xb-companion,
body[data-embed="1"] #energyTip,
body[data-embed="1"] #xbTalkDock,
body[data-embed="1"] #mascotV5Wrap,
body[data-embed="1"] .app-layout > footer{display:none!important}
/* 被嵌页页头隐藏：外壳页已有「知识开门 · 原地采集」标题，避免双标题占掉取景台高度 */
body[data-embed="1"] .main > .page-head{display:none!important}

/* 错题本 · 清新版 顶栏（固定吸顶 + 浅绿纯色 + 全宽贯穿 + 内容 1124 居中） */
.eb-topbar{position:fixed;top:0;left:0;right:0;z-index:200;background:#3ECA9A;border-bottom:1px solid rgba(255,255,255,.20)}
.eb-topbar-in{position:relative;max-width:1124px;width:100%;padding:0 24px;margin:0 auto;display:flex;align-items:center;justify-content:center;gap:28px;height:76px;box-sizing:border-box}
.eb-top-brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.eb-top-logo{width:32px;height:32px;border-radius:50%;background:#fff;color:#3ECA9A;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.10)}
.eb-top-name{font-weight:700;font-size:16px;color:#fff}
.eb-top-name em{font-style:normal;font-weight:500;opacity:.86}
.eb-top-nav{display:flex;gap:10px;justify-content:center;align-items:center;flex:0 0 auto}
.eb-top-nav-item{padding:7px 13px;border-radius:12px;color:rgba(255,255,255,.88);font-size:14px;text-decoration:none;transition:.15s}
.eb-top-nav-item:hover{background:rgba(255,255,255,.16)}
.eb-top-nav-item.on{background:rgba(255,255,255,.94);color:#3ECA9A;font-weight:700}
.eb-top-rt{position:absolute;right:24px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:8px;margin-left:0}
.eb-top-uname{font-size:14px;color:#fff}
.eb-topbar-pad{height:76px}
/* 错题本 · 清新版 hero */
.eb-hero{position:relative;margin:0;padding:26px 0 24px;background:transparent;color:#1F1D2E;overflow:visible}
.eb-hero-in{max-width:1124px;margin:0 auto;padding:0 24px;display:flex;gap:36px;align-items:center}
.eb-hero-left{flex:1;min-width:0}
.eb-hero-title{font-size:46px;font-weight:800;line-height:1.16;letter-spacing:-.5px;margin:0}
.eb-hero-title .hl{color:#5B4DFC}
.eb-hero-sub{font-size:18px;color:#4A4A5A;margin-top:14px;line-height:1.75}
.eb-hero-chips{display:flex;gap:12px;margin-top:18px;flex-wrap:wrap}
.eb-hero-chips span{font-size:14px;padding:9px 17px;border-radius:16px;background:#fff;border:1px solid}
.eb-hero-chips .eb-chip{font-size:14px;padding:9px 17px;border-radius:16px;background:#fff;border:1px solid;cursor:pointer;font-family:inherit;font-weight:600;transition:.18s}
.eb-hero-chips .eb-chip:hover{transform:translateY(-2px);box-shadow:0 6px 16px -8px rgba(0,0,0,.25)}
.eb-hero-chips .chip-a{border-color:#5B4DFC;color:#5B4DFC}
.eb-hero-chips .chip-b{border-color:#1D9E75;color:#1D9E75}
.eb-hero-chips .chip-c{border-color:#185FA5;color:#185FA5}
.eb-hero-actions{display:flex;align-items:center;gap:18px;margin-top:24px}
.eb-hero-actions .btn-pri{background:linear-gradient(135deg,#5B4DFC,#1D9E75);color:#fff;border:none;padding:14px 30px;border-radius:22px;font-size:17px;font-weight:700;cursor:pointer;box-shadow:0 6px 18px rgba(91,77,252,.24)}
.eb-hero-actions .btn-ghost{color:#5B4DFC;font-weight:600;font-size:16px;text-decoration:none}
.eb-mascot-card{width:360px;flex:none;background:#fff;border-radius:26px;box-shadow:0 8px 28px rgba(83,74,183,.12);padding:16px;display:flex;flex-direction:column;align-items:center}
@keyframes ebFloat{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-8px) scale(1.02)}}
.eb-mascot-img{animation:ebFloat 4s ease-in-out infinite}
.eb-mascot-img img{width:140px;height:140px;object-fit:contain;display:block}
.eb-mascot-quote{background:#F0F9F4;color:#4A4A5A;font-size:14px;line-height:1.6;padding:10px 15px;border-radius:18px;margin-top:10px;position:relative}
.eb-mascot-quote p{margin:0;padding-left:15px}
.eb-mascot-quote::before{content:"\201C";position:absolute;top:2px;left:8px;font-size:24px;color:#A8D8BC;font-family:Georgia,serif}
.eb-mascot-quote .author{display:block;margin-top:5px;font-size:12px;color:#9B9BAB;padding-left:15px}
.eb-mascot-chips{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap;justify-content:center}
.eb-mascot-chips span{font-size:12px;padding:6px 12px;border-radius:14px;background:#fff;border:1px solid}
.eb-mascot-chips .chip-a{border-color:#5B4DFC;color:#5B4DFC}
.eb-mascot-chips .chip-b{border-color:#1D9E75;color:#1D9E75}
.eb-mascot-chips .chip-c{border-color:#185FA5;color:#185FA5}
.eb-hero-tabs{max-width:1124px;margin:22px auto 0;padding:0 24px;display:flex;gap:8px;flex-wrap:wrap}
.eb-hero-tab{background:#fff;color:#6B6B7B;border:1px solid #E8E6F3;padding:11px 20px;border-radius:20px;font-size:15px;font-weight:600;cursor:pointer;transition:.15s}
.eb-hero-tab:hover{background:#DDF3E6}
.eb-hero-tab.on{background:linear-gradient(135deg,#5B4DFC,#1D9E75);color:#fff;border-color:transparent;box-shadow:0 4px 12px rgba(91,77,252,.24)}
@media (max-width:900px){
  .eb-hero-in{flex-direction:column;gap:20px}
  .eb-hero-title{font-size:32px}
  .eb-hero-sub{font-size:15px}
  .eb-mascot-card{width:100%}
}
@media (max-width:720px){
  .eb-topbar-in{gap:14px;padding:0 16px}
  .eb-top-name{font-size:14px}
  .eb-top-name em{display:none}
  .eb-top-nav-item{padding:6px 10px;font-size:13px}
  .eb-top-uname{display:none}
  .eb-top-rt{right:16px}
}

.eb-body{max-width:1124px;margin:0 auto}
.eb-card{
  background:#fff;border-radius:18px;padding:18px 20px;margin-bottom:14px;
  box-shadow:0 4px 18px rgba(49,42,92,.06);border:1px solid rgba(122,91,166,.10)
}
.eb-card h2{margin:0 0 12px;font-size:17px;font-weight:700;color:#1f2937}
.eb-card .muted{font-size:12px;color:#9ca3af;margin-left:6px}
.eb-quick-row{display:flex;gap:10px;flex-wrap:wrap}
.eb-quick-row .btn-pri,.eb-quick-row .btn-ghost{
  padding:9px 18px;border-radius:999px;font-size:13px;font-weight:700;cursor:pointer;border:none
}
.eb-quick-row .btn-pri{background:linear-gradient(135deg,#7A5BA6,#FF7A59);color:#fff}
.eb-quick-row .btn-ghost{background:#F1ECFB;color:#6B4E9E}

.eb-grid-4{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
.eb-subj-card:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(122,91,166,.16)}


/* 错题本独立配色 v2 新增：光晕 / 品牌标 / 标题渐变 / 间隔复习 / 编辑弹窗 */
.eb-review-empty{padding:14px 0;color:#9aa0b4;font-size:13px}
#ebEditOverlay{font-family:inherit}
#ebEditOverlay textarea,#ebEditOverlay input{outline:none}
#ebEditOverlay textarea:focus,#ebEditOverlay input:focus{border-color:#7A5BA6!important;box-shadow:0 0 0 3px rgba(122,91,166,.12)}

/* ===== errorbook v2 覆盖：轻量统计 / 学科 pills / 列表卡 ===== */
.eb-card{padding:16px 18px;margin-bottom:12px}
.eb-stats{display:flex;gap:0;border-radius:16px;background:#fff;overflow:hidden}
.eb-stat{flex:1;text-align:center;padding:18px 0;position:relative}
.eb-stat + .eb-stat::before{content:"";position:absolute;left:0;top:24px;bottom:24px;width:1px;background:#E8E6F3}
.eb-stat .n{display:block;font-size:26px;font-weight:800;color:#5B4DFC}
.eb-stat span{display:block;font-size:12px;color:#6B6B7B;margin-top:4px}
.eb-subj-pills{display:flex;gap:10px;flex-wrap:wrap}
.eb-subj-pill{background:#fff;border:1px solid #E8E6F3;border-radius:999px;padding:7px 14px;font-size:13px;font-weight:600;color:#4A4A5A;cursor:pointer;transition:.15s}
.eb-subj-pill:hover{background:#DDF3E6;border-color:#A8D8BC}
.eb-subj-pill .n{color:#5B4DFC;font-weight:800;margin-right:4px}
.eb-row{display:flex;align-items:flex-start;gap:12px;padding:14px 0;border-bottom:1px solid #F0EDFE}
.eb-row:last-child{border-bottom:none}
.eb-row .bar{width:4px;height:44px;border-radius:3px;flex:none;background:#E8E6F3;margin-top:3px}
.eb-row .main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:5px;overflow:hidden;padding:0 !important;margin:0 !important;max-width:none !important;min-height:0 !important}
.eb-row .title{font-size:15px;font-weight:600;color:#1F1D2E;line-height:1.45;width:100%;max-width:none!important;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}
.eb-row .meta{font-size:12px;color:#6B6B7B;display:flex;align-items:center;gap:10px;flex-wrap:wrap;max-width:none!important;width:100%}
.eb-row .actions{display:flex;align-items:flex-start;gap:8px;flex:none;flex-wrap:wrap;min-width:0;margin-left:auto;padding-top:2px}
.eb-row .actions .eb-lecture-btn{border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;cursor:pointer;border:1px solid transparent;color:#fff;background:linear-gradient(135deg,#5B4DFC,#1D9E75);white-space:nowrap}
.eb-row .actions .eb-grad-btn{border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;cursor:pointer;border:1px solid #1D9E75;background:#fff;color:#1D9E75;white-space:nowrap}
.eb-row .actions .eb-del-btn,.eb-row .actions .eb-edit-btn{border:none;background:transparent;cursor:pointer;color:#9B9BAB;font-size:15px;padding:2px 4px}
.eb-row .actions .grad{font-size:12px;color:#1D9E75;font-weight:700;padding:6px 14px;white-space:nowrap}
.eb-row .actions .eb-practice-btn{border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;cursor:pointer;border:1px solid #5B4DFC;background:#fff;color:#5B4DFC;white-space:nowrap}
.eb-row .actions .eb-practice-btn:hover{background:#F3F0FF}
/* [#1019] 错题本变式重练 · 答题区 */
.eb-answer-area{background:#F4FBF7;border:1px solid #D1E7DD;border-radius:14px;padding:16px}
.eb-answer-hint{font-size:13px;font-weight:800;color:#2f9e6b;margin-bottom:12px}
.eb-answer-area label:hover{border-color:#5B4DFC!important}
/* [#1019] 错题本讲解挂载区：最小高度让加载/错误状态可见 */
.eb-lecture-mount{margin-top:12px;border-top:1px solid #E8E6F3;padding-top:12px;min-height:24px}
.eb-lecture-mount:empty{display:none}
.eb-lecture-mount .ckp-lecture-loading,.eb-lecture-mount .ckp-lecture-hint{padding:18px;border-radius:12px;text-align:center;font-size:14px;line-height:1.6}
.eb-lecture-mount .ckp-lecture-loading{background:#F3F0FF;color:#6D5EFC}
.eb-lecture-mount .ckp-lecture-hint{background:#FFF2F0;color:#CF1322;border:1px solid #FFCCC7}
/* [#1019+] 统一做题面：做错题/变式重练 共用 */
.eb-solve-area{background:#F4FBF7;border:1px solid #D1E7DD;border-radius:14px;padding:16px;margin-top:14px}
.eb-solve-hint{font-size:13px;font-weight:800;color:#2f9e6b;margin-bottom:12px}
@media (max-width:720px){
  .eb-row{flex-wrap:wrap}
  .eb-row .main{width:100%;min-width:100%}
  .eb-row .actions{width:100%;justify-content:flex-end;margin-left:0;margin-top:10px}
}

/* ============================================================
 * [2026-10-02 批A · 学科页深色收口] 深色分支迁入 page.css（干净方案）
 * ------------------------------------------------------------
 * 为什么必须写在**本文件**里：
 *   app.html 先加载 desktop.css(:8)、后加载 page.css(:10)。CSS 层叠里「同特异性看先后」
 *   ⇒ 本文件的浅色字面量会反噬 desktop.css 里已经写好的深色规则。实证两例：
 *     · `[data-theme="dark"] .chn-card`(0,2,0)  vs  `.chn-notes-wall .chn-card`(0,2,0) → 后者胜（便签墙在深色下仍是米黄）
 *     · `html[data-theme="dark"] .mth-cta-go`(0,2,1) vs `.mth-cta-row:hover .mth-cta-go`(0,3,0) → 后者胜（hover 回纯白）
 *   修法不走 !important 军备竞赛：把深色分支写在**本文件末尾**（天然最后解析 + 带 html 前缀更高特异性），
 *   与加载顺序解耦、一处收口。只有页面自己用了 !important 的两处（.mth-plate.is-empty）才跟随 !important。
 * 范围：8 个 SPA 学科页（math / chinese / chemistry / biology / history / geography / politics）。
 *   物理科**豁免**（用户 2026-10-02 拍板②：整页恒深空是设计意图，保留不动）；
 *   英语页**不改**（用户拍板①：英语暂时不动）。
 * 浅色档零影响：本段所有选择器都带 `html[data-theme="dark"]` 前缀，浅色档一条都不命中。
 * 配色原则：不套模板换肤 —— 每科保留自己的母题色相（化学绿青 / 生物叶绿 / 历史青铜 /
 *   地理海青 / 政治宣纸朱砂 / 数学草稿纸紫青 / 语文宣纸砚墨），只是把「纸」换成「夜里的纸」。
 * ============================================================ */

/* ------------------------------------------------------------
 * A. 四科「整页底 + 语义令牌」—— P0 根因①（body 级近黑 --ink 压过 html 级 dark）
 *    + 根因④（四科整页浅色 linear-gradient 无深色版）
 *    取值与 desktop.css 的浅色版一一对应，只换明度不换色相。
 * ------------------------------------------------------------ */
html[data-theme="dark"] body[data-subject="chemistry"]{
  --ink:#E7FFF7;--ink-2:rgba(215,255,242,.78);--ink-3:rgba(215,255,242,.56);
  --hair:rgba(45,212,191,.22);--hair-strong:rgba(45,212,191,.32);--hair-soft:rgba(45,212,191,.10);
  --line:rgba(45,212,191,.22);
  background:
    radial-gradient(circle at 8% 4%, rgba(16,185,129,.10) 0%, transparent 60%),
    radial-gradient(circle at 92% 2%, rgba(6,182,212,.09) 0%, transparent 62%),
    radial-gradient(circle at 2% 96%, rgba(20,184,166,.09) 0%, transparent 62%),
    radial-gradient(circle at 98% 94%, rgba(6,182,212,.10) 0%, transparent 62%),
    radial-gradient(ellipse at 50% 42%, rgba(45,212,191,.05) 0%, transparent 74%),
    linear-gradient(158deg,#07171B 0%,#061419 45%,#05121A 100%);
  background-attachment:fixed;color:var(--ink)}
html[data-theme="dark"] body[data-subject="chemistry"]::before{opacity:.45}
html[data-theme="dark"] body[data-subject="chemistry"] .local-mode-banner{
  color:rgba(215,255,242,.78);background:rgba(13,32,34,.72);border-color:rgba(45,212,191,.24)}
html[data-theme="dark"] body[data-subject="chemistry"] .local-mode-banner b{color:#5EEAD4}

html[data-theme="dark"] body[data-subject="biology"]{
  --ink:#E8FFEE;--ink-2:rgba(216,255,226,.78);--ink-3:rgba(216,255,226,.56);
  --hair:rgba(74,222,128,.22);--hair-strong:rgba(74,222,128,.32);--hair-soft:rgba(74,222,128,.10);
  --line:rgba(74,222,128,.22);
  background:
    radial-gradient(circle at 8% 4%, rgba(34,197,94,.10) 0%, transparent 60%),
    radial-gradient(circle at 92% 2%, rgba(22,163,74,.09) 0%, transparent 62%),
    radial-gradient(circle at 2% 96%, rgba(132,204,22,.09) 0%, transparent 62%),
    radial-gradient(circle at 98% 94%, rgba(21,128,61,.10) 0%, transparent 62%),
    radial-gradient(ellipse at 50% 42%, rgba(74,222,128,.05) 0%, transparent 74%),
    linear-gradient(158deg,#08160E 0%,#071410 45%,#061210 100%);
  background-attachment:fixed;color:var(--ink)}
html[data-theme="dark"] body[data-subject="biology"]::before{opacity:.5}
html[data-theme="dark"] body[data-subject="biology"] .local-mode-banner{
  color:rgba(216,255,226,.78);background:rgba(12,32,20,.72);border-color:rgba(74,222,128,.24)}
html[data-theme="dark"] body[data-subject="biology"] .local-mode-banner b{color:#6EE7B7}

/* 历史：宣纸 → 夜读青铜纸（纸纹保留，暖白字） */
html[data-theme="dark"] body[data-subject="history"]{
  --ink:#F7EBD2;--ink-2:rgba(240,224,190,.78);--ink-3:rgba(240,224,190,.56);
  --his-deep:#E8B96A;--his-bright:#F2B44C;--his-seal:#E8664F;--his-paper:#1E1710;
  --hair:rgba(217,119,6,.22);--hair-strong:rgba(217,119,6,.34);--hair-soft:rgba(217,119,6,.10);
  --line:rgba(217,119,6,.22);
  background:
    radial-gradient(900px 520px at 86% 6%, rgba(217,119,6,.10), transparent 60%),
    radial-gradient(820px 480px at 5% 95%, rgba(146,64,14,.10), transparent 60%),
    linear-gradient(160deg,#171208 0%,#14100A 38%,#110E09 70%,#100D08 100%);
  color:var(--ink)}
html[data-theme="dark"] body[data-subject="history"]::before{opacity:.35}
html[data-theme="dark"] body[data-subject="history"] .local-mode-banner{
  color:rgba(240,224,190,.78);background:rgba(38,28,14,.74);border-color:rgba(217,119,6,.26)}
html[data-theme="dark"] body[data-subject="history"] .local-mode-banner b{color:#F2B44C}

html[data-theme="dark"] body[data-subject="geography"]{
  --ink:#E2F7FD;--ink-2:rgba(206,240,250,.78);--ink-3:rgba(206,240,250,.56);
  --hair:rgba(34,211,238,.22);--hair-strong:rgba(34,211,238,.32);--hair-soft:rgba(34,211,238,.10);
  --line:rgba(34,211,238,.22);
  background:
    radial-gradient(620px 360px at 86% 10%, rgba(34,211,238,.11), transparent 60%),
    radial-gradient(520px 320px at 8% 94%, rgba(14,116,144,.14), transparent 62%),
    radial-gradient(420px 280px at 50% 60%, rgba(37,99,235,.07), transparent 60%),
    linear-gradient(158deg,#07161C 0%,#06131A 38%,#05111A 70%,#04101A 100%);
  background-attachment:fixed;color:var(--ink)}
html[data-theme="dark"] body[data-subject="geography"]::before{opacity:.45}
html[data-theme="dark"] body[data-subject="geography"] .local-mode-banner{
  color:rgba(206,240,250,.78);background:rgba(10,30,38,.74);border-color:rgba(34,211,238,.24)}
html[data-theme="dark"] body[data-subject="geography"] .local-mode-banner b{color:#67E8F9}

/* ------------------------------------------------------------
 * B. 数学（草稿纸母题 → 夜航草稿纸：网格留、曲线留，纸换成深蓝）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .mth-hero{
  background:
    radial-gradient(120% 120% at 10% 0%, rgba(63,86,196,.30) 0%, transparent 60%),
    linear-gradient(135deg,rgba(63,86,196,.24) 0%,rgba(109,94,252,.16) 50%,rgba(15,165,165,.18) 100%),
    var(--surface,#1E1B2E);
  border-color:rgba(155,140,255,.30);
  box-shadow:0 22px 48px -28px rgba(0,0,0,.66),0 2px 6px -3px rgba(40,194,200,.14)}
html[data-theme="dark"] .mth-hero::before{
  background-image:linear-gradient(rgba(155,140,255,.10) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(155,140,255,.10) 1px,transparent 1px)}
html[data-theme="dark"] .mth-hero::after{opacity:.24}
html[data-theme="dark"] .mth-eyebrow{color:#C9BEFF;background:rgba(155,140,255,.14);border-color:rgba(155,140,255,.32)}
html[data-theme="dark"] .mth-title{color:var(--ink,#fff)}
html[data-theme="dark"] .mth-lede{color:var(--ink-2)}
html[data-theme="dark"] .mth-lede b{color:var(--ink,#fff)}
html[data-theme="dark"] .mth-stats strong{color:var(--ink,#fff)}
html[data-theme="dark"] .mth-stats span{color:var(--ink-3)}
html[data-theme="dark"] .mth-stage{
  background:radial-gradient(120% 120% at 50% 8%,rgba(45,39,72,.96),rgba(21,19,31,.92));
  border-color:var(--hair-strong,rgba(255,255,255,.14))}
html[data-theme="dark"] .mth-stage::before{
  background:
    linear-gradient(to right,transparent calc(50% - .5px),rgba(155,140,255,.34) calc(50% - .5px),rgba(155,140,255,.34) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(to bottom,transparent calc(50% - .5px),rgba(155,140,255,.34) calc(50% - .5px),rgba(155,140,255,.34) calc(50% + .5px),transparent calc(50% + .5px))}
html[data-theme="dark"] .mth-btn-ghost{color:var(--ink,#fff);background:rgba(255,255,255,.08);border-color:var(--hair-strong,rgba(255,255,255,.14))}
html[data-theme="dark"] .mth-btn-ghost:hover{border-color:var(--purple,#9B8CFF);color:var(--purple-d,#B3A6FF)}
html[data-theme="dark"] .mth-plate-ic{background:var(--surface-3,#332E47);border-color:var(--hair-strong,rgba(255,255,255,.14))}
html[data-theme="dark"] .mth-plate-stats b{color:var(--ink,#fff)}
html[data-theme="dark"] .mth-plate-stats span{color:var(--ink-3)}
html[data-theme="dark"] .mth-plate-chs li{color:var(--ink-2)}
html[data-theme="dark"] .mth-plate-empty{background:rgba(255,255,255,.05);color:var(--ink-3)}
/* ⚠ 页面自己写了 !important（page.css :1002/:1010）—— 必须跟着 !important 才压得住 */
html[data-theme="dark"] .mth-plate.is-empty{background:var(--surface-2,#272338)!important;border-color:var(--hair,rgba(255,255,255,.08))!important;border-left-color:var(--hair-strong,rgba(255,255,255,.14))!important}
html[data-theme="dark"] .mth-plate.is-empty:hover{background:var(--surface-2,#272338)!important;border-color:var(--hair,rgba(255,255,255,.08))!important;border-left-color:var(--hair-strong,rgba(255,255,255,.14))!important}
html[data-theme="dark"] .mth-plate.is-empty b{color:var(--ink-2)}
html[data-theme="dark"] .mth-plate.is-empty small,
html[data-theme="dark"] .mth-plate.is-empty .mth-plate-go{color:var(--ink-3)}
html[data-theme="dark"] .mth-plate.is-empty .mth-plate-ic{background:var(--surface-3,#332E47);border-color:var(--hair-strong,rgba(255,255,255,.14));color:var(--ink-3);filter:none}
/* 数学 3D 入口条：薄荷实底 → 夜里薄荷烟 */
html[data-theme="dark"] .sx-3d{
  background:linear-gradient(120deg,rgba(16,185,129,.18),rgba(16,185,129,.09) 55%,rgba(6,182,212,.12));
  color:var(--ink,#fff);border-color:rgba(63,224,200,.28);
  box-shadow:0 10px 28px -14px rgba(0,0,0,.6)}
html[data-theme="dark"] .sx-3d-txt b{color:var(--ink,#fff)}
html[data-theme="dark"] .sx-3d-txt small{color:var(--ink-2)}
html[data-theme="dark"] .sx-3d-ic{background:rgba(16,185,129,.16);border-color:rgba(63,224,200,.30);color:#5EEAD4}
html[data-theme="dark"] .sx-3d-go{background:linear-gradient(135deg,#10b981,#0E9F8A);color:#04201B}
html[data-theme="dark"] .qswitch{background:var(--surface,#1E1B2E);border-color:var(--hair)}
/* ⚠ hover 链 (0,3,0) 压过 desktop 的 (0,2,1) —— 迁到本文件补回 */
html[data-theme="dark"] .mth-cta-go{background:var(--surface-3,#332E47);color:var(--purple-d,#B3A6FF)}
html[data-theme="dark"] .mth-cta-row:hover .mth-cta-go{background:var(--surface-2,#272338);color:#FFFFFF}

/* ------------------------------------------------------------
 * C. 语文（宣纸白 + 朱砂 → 夜砚纸：纸变深、朱砂提亮）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .chn-scroll-toc{
  background:linear-gradient(180deg,#241E16 0%,#1B1610 100%);
  box-shadow:0 18px 40px -26px rgba(0,0,0,.75)}
html[data-theme="dark"] .chn-toc-head-t{color:var(--ink,#fff)}
html[data-theme="dark"] .chn-toc-head-tx small{color:var(--ink-3)}
html[data-theme="dark"] .chn-letter{
  background:linear-gradient(135deg,#241E16 0%,#1B1610 100%);
  border-color:rgba(240,225,190,.16);
  box-shadow:0 16px 34px -22px rgba(0,0,0,.8)}
html[data-theme="dark"] .chn-letter-title{color:var(--ink,#fff)}
html[data-theme="dark"] .chn-letter-body small{color:var(--ink-2)}
/* 便签墙（根因②主现场：page.css 的 (0,2,0) 与 desktop 的 dark 规则同特异性 → 后者被反噬） */
html[data-theme="dark"] .chn-notes-wall .chn-card{
  background:linear-gradient(180deg,#2A2419,#201B14);
  border-color:rgba(240,225,190,.18);
  box-shadow:0 12px 26px -18px rgba(0,0,0,.8)}
html[data-theme="dark"] .chn-notes-wall .chn-card:hover{
  border-color:rgba(240,135,122,.42);box-shadow:0 18px 34px -20px rgba(0,0,0,.85)}
html[data-theme="dark"] .chn-notes-wall .chn-card-ic{
  background:linear-gradient(135deg,rgba(192,57,43,.26),rgba(40,194,200,.18));
  color:#F0877A;border-color:rgba(240,135,122,.32)}
html[data-theme="dark"] .chn-notes-wall .chn-ask{
  background:linear-gradient(135deg,rgba(192,57,43,.16),rgba(255,255,255,.04));
  border-color:rgba(240,135,122,.28);
  box-shadow:0 12px 26px -18px rgba(0,0,0,.8)}
/* 迁移：desktop.css :1877 的 dark 规则（同特异性被本文件反噬） */
html[data-theme="dark"] .chn-card,html[data-theme="dark"] .chn-ask{background:var(--surface-2,#272338)}

/* ------------------------------------------------------------
 * D. 化学（实验室白台 → 夜班实验台）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .chem-kicker{color:#5EEAD4;border-color:rgba(45,212,191,.40);background:rgba(16,185,129,.10)}
html[data-theme="dark"] .chem-hero .btn{background:rgba(255,255,255,.08);border-color:rgba(45,212,191,.30);color:var(--ink,#fff)}
html[data-theme="dark"] .chem-hero .btn:hover{background:rgba(255,255,255,.14)}
html[data-theme="dark"] .chem-dom{
  background:linear-gradient(165deg,rgba(14,34,34,.92) 40%,rgba(9,24,26,.94) 100%);
  border-color:rgba(45,212,191,.22);
  box-shadow:0 14px 34px -24px rgba(0,0,0,.7)}
html[data-theme="dark"] .chem-dom:hover{border-color:rgba(45,212,191,.48);box-shadow:0 20px 50px -16px rgba(0,0,0,.8)}
html[data-theme="dark"] .chem-dom-body h3{color:var(--ink,#fff)}
html[data-theme="dark"] .chem-dom-body p{color:var(--ink-3)}

/* ------------------------------------------------------------
 * E. 生物（叶绿浅底 → 夜林）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .bio-hero{
  background:linear-gradient(160deg,rgba(14,36,22,.94) 0%,rgba(11,28,18,.90) 55%,rgba(8,22,15,.92) 100%);
  border-color:rgba(74,222,128,.24);
  box-shadow:0 22px 60px -32px rgba(0,0,0,.8)}
html[data-theme="dark"] .bio-hero-leaf{opacity:.30;
  background:radial-gradient(circle at 40% 40%, rgba(74,222,128,.28), rgba(34,197,94,.10) 60%, transparent 72%)}
html[data-theme="dark"] .bio-kicker{color:#6EE7B7;background:rgba(34,197,94,.12);border-color:rgba(74,222,128,.30)}
html[data-theme="dark"] .bio-lede b{color:#6EE7B7}
html[data-theme="dark"] .bio-acts .btn{background:rgba(255,255,255,.08);border-color:rgba(74,222,128,.26);color:var(--ink,#fff)}
html[data-theme="dark"] .bio-acts .btn:hover{background:rgba(255,255,255,.14)}
html[data-theme="dark"] .bio-stat-col b{color:#6EE7B7}
html[data-theme="dark"] .bio-lens{
  background:radial-gradient(circle at 42% 38%, rgba(20,44,28,.95), rgba(13,30,20,.9) 60%, rgba(9,22,15,.92) 100%);
  border-color:rgba(74,222,128,.32);
  box-shadow:0 22px 50px -24px rgba(0,0,0,.8), inset 0 0 40px rgba(34,197,94,.10)}
html[data-theme="dark"] .bio-cta{
  background:linear-gradient(120deg,rgba(34,197,94,.20),rgba(132,204,22,.10) 70%,rgba(255,255,255,.04));
  border-color:rgba(74,222,128,.30);
  box-shadow:0 12px 30px -20px rgba(0,0,0,.7)}
html[data-theme="dark"] .bio-cta-go{color:#6EE7B7}
html[data-theme="dark"] .bio-dom{
  background:linear-gradient(165deg,rgba(16,36,24,.92) 40%,rgba(10,26,17,.94) 100%);
  border-color:rgba(74,222,128,.22)!important}
html[data-theme="dark"] .bio-dom-badge{color:#6EE7B7;background:rgba(34,197,94,.14);border-color:rgba(74,222,128,.24)}

/* ------------------------------------------------------------
 * F. 历史（宣纸青铜 → 夜读史册）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .his-hero{
  background:linear-gradient(165deg,rgba(58,42,20,.94) 0%,rgba(34,25,13,.94) 100%);
  border-color:rgba(217,119,6,.26);
  box-shadow:0 18px 48px -30px rgba(0,0,0,.8)}
html[data-theme="dark"] .his-title .g{background:linear-gradient(120deg,#F2B44C,#E8B96A);-webkit-background-clip:text;background-clip:text;color:transparent}
html[data-theme="dark"] .his-acts .btn{background:rgba(255,255,255,.08);border-color:rgba(217,119,6,.30);color:var(--his-deep,#E8B96A)}
html[data-theme="dark"] .his-acts .btn:hover{background:rgba(255,255,255,.14)}
html[data-theme="dark"] .his-domains{
  background:linear-gradient(165deg,rgba(52,38,19,.92),rgba(32,24,13,.94));
  border-color:rgba(217,119,6,.24);
  box-shadow:0 14px 38px -28px rgba(0,0,0,.8)}
html[data-theme="dark"] .his-dom{
  background:linear-gradient(165deg,rgba(48,35,18,.94) 40%,rgba(30,22,12,.96) 100%);
  border-color:color-mix(in srgb, var(--pc) 40%, rgba(255,255,255,.10))}
html[data-theme="dark"] .his-feat{
  background:linear-gradient(165deg,rgba(52,38,19,.92),rgba(32,24,13,.94));
  border-color:rgba(217,119,6,.24);
  box-shadow:0 14px 38px -28px rgba(0,0,0,.8)}
html[data-theme="dark"] .his-card{background:var(--surface,#1E1B2E);border-color:rgba(217,149,59,.32)}

/* ------------------------------------------------------------
 * G. 地理（海青 + 沙色 → 深海夜航）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .geo-hero{
  background:linear-gradient(160deg,rgba(10,38,48,.94) 0%,rgba(7,24,32,.94) 100%);
  border-color:rgba(34,211,238,.26);
  box-shadow:0 18px 48px -30px rgba(0,0,0,.8)}
html[data-theme="dark"] .geo-kicker{color:#67E8F9;background:rgba(34,211,238,.12);border-color:rgba(34,211,238,.30)}
html[data-theme="dark"] .geo-lede b{color:#67E8F9}
html[data-theme="dark"] .geo-title .g{background:linear-gradient(120deg,#67E8F9,#38BDF8);-webkit-background-clip:text;background-clip:text;color:transparent}
html[data-theme="dark"] .geo-acts .btn{background:rgba(255,255,255,.08);border-color:rgba(34,211,238,.28);color:var(--ink,#fff)}
html[data-theme="dark"] .geo-acts .btn:hover{background:rgba(255,255,255,.14)}
html[data-theme="dark"] .geo-stat-col b{color:#67E8F9}
html[data-theme="dark"] .geo-dom{
  background:linear-gradient(165deg,rgba(12,36,46,.92) 42%,rgba(8,24,32,.94) 100%)!important;
  border-color:rgba(34,211,238,.22)!important}
html[data-theme="dark"] .geo-card{background:var(--surface,#1E1B2E);border-color:rgba(63,224,200,.25)}
html[data-theme="dark"] .geo-card-go{color:#67E8F9;border-top-color:rgba(34,211,238,.16)}
html[data-theme="dark"] .geo-cta{background:linear-gradient(120deg,rgba(34,211,238,.16),rgba(14,116,144,.14));border-color:rgba(34,211,238,.26)}
html[data-theme="dark"] .geo-cta-go,
html[data-theme="dark"] .geo-ask-go,
html[data-theme="dark"] .geo-dom-go{color:#67E8F9}
html[data-theme="dark"] .geo-ask{background:linear-gradient(120deg,rgba(34,211,238,.14),rgba(37,99,235,.10));border-color:rgba(34,211,238,.24)}

/* ------------------------------------------------------------
 * H. 政治 / 道法（宣纸米底 + 青铜锈绿 + 朱砂 → 明镜夜审）
 * ------------------------------------------------------------ */
html[data-theme="dark"] .pol-hero{
  background:linear-gradient(158deg,rgba(44,36,26,.94) 0%,rgba(30,25,18,.94) 52%,rgba(22,19,14,.95) 100%);
  border-color:rgba(120,160,135,.30);
  box-shadow:0 20px 46px -30px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,255,255,.05)}
html[data-theme="dark"] .pol-kicker{color:#FCA5A5;background:rgba(185,28,28,.14);border-color:rgba(248,113,113,.32)}
html[data-theme="dark"] .pol-title .g{background:linear-gradient(118deg,#F87171 0%,#F2C14E 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
html[data-theme="dark"] .pol-lede b{color:#F87171}
html[data-theme="dark"] .pol-acts .btn{background:rgba(255,255,255,.08);border-color:rgba(248,113,113,.28);color:#FCA5A5}
html[data-theme="dark"] .pol-acts .btn:hover{background:rgba(255,255,255,.14)}
html[data-theme="dark"] .pol-stat-col b{color:#F87171}
html[data-theme="dark"] .pol-domains{
  background:linear-gradient(180deg,rgba(44,36,26,.92) 0%,rgba(28,23,17,.94) 100%);
  border-color:rgba(120,160,135,.26)}
html[data-theme="dark"] .pol-dom-title{color:#FCA5A5}
html[data-theme="dark"] .pol-dom{background:var(--surface,#1E1B2E);border-color:var(--hair-strong,rgba(255,255,255,.14))}
html[data-theme="dark"] .pol-dom-body h3{color:var(--ink,#fff)}
html[data-theme="dark"] .pol-feat{background:linear-gradient(180deg,rgba(44,36,26,.92),rgba(28,23,17,.94));border-color:rgba(120,160,135,.26)}
html[data-theme="dark"] .pol-feat-title{color:#FCA5A5}
html[data-theme="dark"] .pol-card{background:var(--surface,#1E1B2E);border-color:var(--hair-strong,rgba(255,255,255,.14))}
html[data-theme="dark"] .pol-card-go{color:#F87171}
html[data-theme="dark"] .pol-cta{
  background:linear-gradient(120deg,rgba(185,28,28,.18) 0%,rgba(201,162,39,.12) 100%);
  border-color:rgba(248,113,113,.28)}
html[data-theme="dark"] .pol-cta-title{color:#FCA5A5}
html[data-theme="dark"] .pol-cta-go{color:#F87171}
html[data-theme="dark"] .pol-ask{
  background:linear-gradient(120deg,rgba(185,28,28,.16),rgba(201,162,39,.10));
  border-color:rgba(248,113,113,.26)}
html[data-theme="dark"] .pol-ask-bd b{color:#FCA5A5}
html[data-theme="dark"] .pol-ask-go{color:#F87171}
html[data-theme="dark"] .pol-ask-ic{background:rgba(185,28,28,.20)}
html[data-theme="dark"] .pol-cta-ic{background:rgba(185,28,28,.20)}
/* [2026-10-02 批A·补] 历史域卡「去复习」箭头字：浅色档 --pc 深琥珀在夜卡上对比不足（实测 1.63） */
html[data-theme="dark"] .his-dom-go{color:#F2B44C}
/* [2026-10-02 批A·补2] 政治域卡箭头/徽标：同 --pc 深红问题（实测对比 1.46），与 his-dom-go 同批收口 */
html[data-theme="dark"] .pol-dom-go{color:#FCA5A5}
html[data-theme="dark"] .pol-dom-badge b{color:#FCA5A5}
