/* ==========================================================================
   MBA 刷题站 v2 — Smartisan OS 风格
   设计语言：轻拟物 / 极细描边(0.4-0.8px) / 克制的同色渐变 / 灰阶文字 / 内凹
   基底：smartisan.css（kit 官方 token）。本文件把 v2 的类名映射到该语言。
   暗色模式为推导版（kit 无暗色），保持同样的低对比+细描边+内凹逻辑。
   ========================================================================== */

:root {
  /* 桥接：v2 模板里引用的变量 → Smartisan token */
  --bg: #f0f0f0;
  --card: #ffffff;
  --ink: #333333;
  --sub: #7f7f7f;
  --blue: #5079d9;          /* 文字按钮蓝 */
  --blue-deep: #4772e6;     /* 主按钮按下 */
  --green: #4b9e63;
  --red: #d4574e;
  --orange: #c9863d;
  --line: #e2e2e2;
  --chip: #e7edfd;
  --chip-ink: #5079d9;
  --radius: 10px;
  --fs: 16px;

  /* 正文字体：题干/材料/解析用 Serif（唯一豁免）；其余全部归 kit 字体栈 */
  --font-serif: "IBM Plex Serif", "Songti SC", "Noto Serif CJK SC", "Source Han Serif SC",
                "STSong", "SimSun", Georgia, "Times New Roman", serif;
  --font-opt: "Smartisan Compact", "PingFang SC", -apple-system, BlinkMacSystemFont,
              "Hiragino Sans GB", "Microsoft YaHei", sans-serif;

  /* Smartisan 原生 token */
  --s-grad-primary: linear-gradient(180deg, #5b87eb, #5883eb);
  --s-blue-500: #3f68e2;
  --s-blue-600: #2f54d7;
  --s-shadow-btn: 0 4px 2px rgba(0, 0, 0, 0.10);
  --s-shadow-card: 0 10px 16px rgba(0, 0, 0, 0.04);
  --s-inset-track: inset 0 4px 4px rgba(0, 0, 0, 0.06);
  --s-font: "Leon Sans", "PingFang SC", -apple-system, BlinkMacSystemFont,
            "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
}

html[data-theme="dark"] {
  --bg: #191919;
  --card: #262626;
  --ink: #e2e2e2;
  --sub: #9a9a9a;
  --blue: #7da3f5;
  --blue-deep: #4772e6;
  --green: #5da873;
  --red: #e06b62;
  --orange: #d19a55;
  --line: #3d3d3d;
  --chip: #2b3a5c;
  --chip-ink: #9db9f7;
}
html[data-fs="s"] { --fs: 14px; }
html[data-fs="l"] { --fs: 18px; }

/* ---- 打包字体：Serif 正文 + Inter 选项（本地文件，无外链依赖）---- */
@font-face {
  font-family: "IBM Plex Serif"; src: url(fonts/IBMPlexSerif-Regular.ttf) format("truetype");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "IBM Plex Serif"; src: url(fonts/IBMPlexSerif-Bold.ttf) format("truetype");
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter"; src: url(fonts/inter-latin-400.woff2) format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter"; src: url(fonts/inter-latin-600.woff2) format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
}
/* Leon Sans（OFL 1.1）：界面西文统一字体。仅拉丁子集 + 常用符号，103KB。
   题干/选项另用 --font-serif / --font-opt，不受影响。 */
@font-face {
  font-family: "Leon Sans"; src: url(fonts/LeonSans-var.woff2) format("woff2");
  font-weight: 100 900; font-style: normal; font-display: swap;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html { font-size: var(--fs); }
body {
  margin: 0; color: var(--ink);
  /* 正文用 SemiBold（600）：Leon Sans 400 偏细、500 仍偏轻；
     中文按 CSS 匹配落到 PingFang Semibold，中英观感一致 */
  font: 600 1rem/1.65 var(--s-font);
  /* 不再强制 antialiased：macOS 上它会明显把字压细，交给系统默认渲染 */
  transition: background .25s;
}
/* body 挂了 kit 的 .s-page 类，其 color 规则（类选择器）会压过上面的 body 规则，
   导致暗色模式正文一直是浅色模式的 #333——这里以更高优先级夺回主题色 */
body.s-page { color: var(--ink); }
html[data-theme="light"] body,
html:not([data-theme]) body { background: var(--s-page-texture, #f0f0f0); }
html[data-theme="dark"] body { background: repeating-linear-gradient(90deg, #191919 0 3.6px, #1c1c1c 3.6px 7.2px); }
#app { padding: 0 clamp(16px, 3vw, 32px) calc(90px + env(safe-area-inset-bottom)); }
/* 桌面端利用率：宽屏加宽内容区，收紧两侧留白 */
@media (min-width: 1100px) {
  #app { padding-left: 32px; padding-right: 32px; }
  .runcan .inner { max-width: 1100px; }
}

h1 { font-size: 1.25rem; font-weight: 700; color: #636363; margin: 16px 0 12px; }
html[data-theme="dark"] h1 { color: #e0e0e0; }
h2 { font-size: 1rem; font-weight: 700; color: var(--sub); margin: 0 0 10px; }
a { color: var(--blue); text-decoration: none; }

/* ---- 按钮：默认白底细描边（sheet），主操作蓝渐变（elevated），按下换色/下沉 ---- */
button {
  font: inherit; color: #636363; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 36px; padding: 6px 14px;
  background: linear-gradient(180deg, #ffffff, #fcfcfc);
  border: 0.8px solid #e2e2e2; border-radius: 8px;
}
button:active { background: #f8f8f8; }
button.primary {
  color: #fff; background: var(--s-grad-primary);
  border: 0.8px solid var(--s-blue-500); box-shadow: var(--s-shadow-btn);
  font-weight: 700;
}
button.primary:active { background: var(--blue-deep); border-color: var(--s-blue-600); }
/* primary 蓝底上的图标必须白色：.s-icon 类自带的灰色会压过继承色 */
button.primary .s-icon, a.primary .s-icon { color: #fff; }
button.danger {
  color: #fff; background: #d9534f; border-color: #d9534f;
  box-shadow: 0 1px 2px rgba(180,50,46,.28);
}
button.danger:active { background: #c84440; border-color: #c84440; }
html[data-theme="dark"] button.danger { background: #c9504c; border-color: #c9504c; }
button:disabled { opacity: 0.3; cursor: default; }
html[data-theme="dark"] button { color: #c9c9c9; background: #2e2e2e; border-color: #454545; }
html[data-theme="dark"] button:active { background: #383838; }
html[data-theme="dark"] button.primary { color: #fff; background: var(--s-grad-primary); border-color: var(--s-blue-500); }

input, select, textarea {
  font: inherit; color: var(--ink);
  background: #fff; border: 0.8px solid var(--line); border-radius: 6px;
  padding: 8px 12px; box-shadow: inset 0 4px 4px rgba(0,0,0,.04); outline: none;
}
input:focus, textarea:focus { border-color: #93b2f7; }
input::placeholder, textarea::placeholder { color: #d9d9d9; }
html[data-theme="dark"] input, html[data-theme="dark"] select, html[data-theme="dark"] textarea { background: #2e2e2e; }
textarea { width: 100%; resize: vertical; }

/* ---- 卡片：白底 圆角10 0.8px描边 大范围淡投影 ---- */
.card {
  background: var(--card); border-radius: var(--radius);
  border: 0.8px solid var(--line);
  box-shadow: 0 10px 16px rgba(0, 0, 0, 0.04);
  padding: 15px 17px; margin-bottom: 13px;
}
html[data-theme="dark"] .card { box-shadow: none; }
.row { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; }
.spacer { flex: 1; }
.muted { color: var(--sub); font-size: .85rem; }
.chip {
  display: inline-flex; align-items: center; justify-content: center; height: 26px; padding: 2px 12px;
  border-radius: 100px; font-size: .8rem; font-weight: 600; line-height: 1;
  color: #6393ff; background: #fff; border: 0.4px solid #93b2f7;
}
/* 顶栏右侧三件套统一几何：同高、同圆角、同字重，间距 6px */
.topnav > a.chip, .topnav > .theme-toggle {
  height: 30px; min-height: 30px; border-radius: 9px;
  font-size: 13px; font-weight: 600; line-height: 1;
}
.topnav > a.chip { padding: 0 15px; }
.badge {
  display: inline-block; padding: 1px 9px; border-radius: 100px;
  font-size: .75rem; font-weight: 600; border: 0.4px solid transparent;
}
.badge.full, .badge.confirmed, .badge.verified { background: #e9f4ec; color: #3c7d52; border-color: #b9d8c2; }
.badge.brief, .badge.reviewed { background: #fdf3e2; color: #ad8a67; border-color: #d2b89c; }
.badge.none, .badge.draft { background: #fdecea; color: #cc3e39; border-color: #eb7f77; }

/* ---- 顶栏：App Bar（48px 半透明 + 背景模糊；下缘渐进模糊带，消除与滚动内容的硬边割裂）---- */
.topnav {
  position: sticky; top: 0; z-index: 20;
  display: flex; gap: 6px; align-items: center;
  height: 48px; margin: 0 -14px; padding: 0 14px;
  background: color-mix(in srgb, var(--card) 76%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.5);
  backdrop-filter: blur(14px) saturate(1.5);
  border-bottom: 1px solid rgba(0,0,0,.05);
}
.topnav::after {
  content: ""; position: absolute; left: 0; right: 0; top: 100%; height: 30px;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  -webkit-mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  background: linear-gradient(180deg, color-mix(in srgb, var(--card) 45%, transparent), transparent);
  pointer-events: none;
}
html[data-theme="dark"] .topnav { border-bottom-color: rgba(255,255,255,.08); }
.topnav > b { font-size: 16px; font-weight: 700; color: #636363; margin-right: 8px; white-space: nowrap; }
html[data-theme="dark"] .topnav > b { color: #e0e0e0; }
.topnav a { padding: 5px 10px; border-radius: 8px; color: #636363; font-size: 13.5px; white-space: nowrap; }
html[data-theme="dark"] .topnav a { color: #9f9f9f; }
.topnav a.on { color: var(--blue); font-weight: 700; background: var(--chip); }
.topnav button { min-height: 30px; padding: 4px 10px; font-size: 13px; border-radius: 4px; }
/* 顶栏右侧按钮共轴等高（kit chip 规范 30px）：主题切换方钮与登录胶囊同高 */
.topnav .theme-toggle { height: 30px; min-height: 30px; width: 30px; padding: 0; }

/* ---- 首页 ---- */
.hero { text-align: center; padding: 34px 0 10px; }
.hero .muted { letter-spacing: 2px; }
.hero .days { font-size: 3.4rem; font-weight: 700; color: var(--blue); line-height: 1.15; }
.statgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
.statgrid .card { text-align: center; margin: 0; }
.statgrid b { font-size: 1.5rem; font-weight: 700; color: #636363; }
html[data-theme="dark"] .statgrid b { color: #e0e0e0; }
.navgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
.navcard { display: block; padding: 16px; cursor: pointer; }
.navcard b { display: block; font-size: 1.02rem; color: var(--ink); margin-bottom: 3px; }
.navcard:active { background: var(--blue); border-color: var(--s-blue-500); }
.navcard:active b, .navcard:active .muted { color: #fff; }

/* ---- 题库列表 ---- */
.pgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px; }
.pcard { margin: 0; cursor: pointer; }
.pcard:active { background: var(--blue); border-color: var(--s-blue-500); }
.pcard:active b, .pcard:active .muted, .pcard:active .badge { color: #fff; }
.pcard .prog { height: 4px; background: #efefef; border-radius: 100px; box-shadow: var(--s-inset-track); overflow: hidden; margin-top: 8px; }
.pcard .prog i { display: block; height: 100%; background: linear-gradient(0deg, #7ca3fb, #668ff7); }

/* ====== 刷题页 ====== */
.runwrap { display: grid; grid-template-columns: 1fr; gap: 12px; }
@media (min-width: 980px) {
  .runwrap.withmat { grid-template-columns: minmax(280px, 42%) 1fr; align-items: stretch; }
  /* 两卡顶对齐 + 等高：材料与题卡都拉伸到行高；长材料内部滚动并吸顶 */
  .runwrap.withmat > .material.pane { position: sticky; top: 62px; max-height: calc(100vh - 84px); overflow: auto; }
  .runwrap.withmat > div:last-child { display: flex; flex-direction: column; }
  .runwrap.withmat > div:last-child .qcard { flex: 1; }
}
.material { margin: 0; }
.material .matbody { white-space: pre-wrap; }
.qstem, .material .matbody, .analysis, .essay-ana { font-family: var(--font-serif); font-weight: 400; }
.opt { font-family: var(--font-opt); font-weight: 400; }
.qhead { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.qno { font-weight: 700; font-size: 1.05rem; color: var(--ink); }
.qstem { white-space: pre-wrap; font-size: 1.02rem; line-height: 1.7; }

/* 完形填空原文：空位编号可点，当前空高亮 */
.matbody--rich { white-space: pre-wrap; line-height: 1.9; }
.cblank {
  display: inline-block; min-width: 1.5em; text-align: center; margin: 0 1px;
  color: var(--blue); font-weight: 700; cursor: pointer;
  border-bottom: 1.5px dotted var(--blue); user-select: none;
}
.cblank.cur { color: #fff; background: var(--blue); border-radius: 5px; border-bottom-color: transparent; }

/* 选项：白卡 0.8px 描边；按下整行变蓝白字（锤子列表按下态）；对错用低饱和绿/红 */
.opts { display: flex; flex-direction: column; gap: 9px; margin-top: 16px; }
.opt {
  display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px;
  background: var(--card); border: 0.8px solid var(--line); border-radius: var(--radius);
  cursor: pointer; transition: background .12s, border-color .12s;
}
.opt:hover { border-color: #c9c9c9; }
.opt:active { background: var(--blue); }
.opt:active .l, .opt:active * { color: #fff !important; }
.opt .l { font-weight: 700; color: var(--blue); min-width: 20px; }
.opt.sel { border-color: var(--blue); background: var(--chip); }
.opt.right { border-color: #b9d8c2; background: #e9f4ec; }
.opt.wrong { border-color: #eb7f77; background: #fdecea; }
.opt.dim { opacity: .5; }
html[data-theme="dark"] .opt.right { background: #24382b; }
html[data-theme="dark"] .opt.wrong { background: #3d2624; }
.opt .judge-tag { margin-left: auto; font-size: .8rem; color: var(--sub); }
.opts.judge .row { width: 100%; }
.opts.judge .opt { min-height: 52px; font-weight: 700; }
.criteria { font-size: .88rem; background: #fafafa !important; }
html[data-theme="dark"] .criteria { background: #2a2a2a !important; }
.criteria ol { margin: 6px 0 0; padding-left: 20px; }
.essaybox { min-height: 180px; margin-top: 12px; }
.essay-ana { white-space: pre-wrap; background: #fafafa; border-radius: 8px; padding: 12px; margin-top: 10px; }
.feedback { border-radius: 8px; padding: 9px 13px; margin-top: 12px; font-weight: 700; }
.feedback.ok { background: #e9f4ec; color: #3c7d52; }
.feedback.bad { background: #fdecea; color: #cc3e39; }
html[data-theme="dark"] .feedback.ok { background: #24382b; }
html[data-theme="dark"] .feedback.bad { background: #3d2624; }
.analysis { margin-top: 14px; border-top: 0.8px dashed var(--line); padding-top: 12px; white-space: pre-wrap; line-height: 1.7; }
.analysis .analabel { color: var(--blue); font-weight: 700; margin-bottom: 6px; }
.figimgs { display: grid; gap: 8px; margin: 10px 0; }
.figimgs { justify-items: center; }
.figimgs img { max-width: 100%; max-height: 420px; width: auto; height: auto; border: 0.8px solid var(--line); border-radius: 8px; cursor: zoom-in; background: #fff; }
.imgmask { position: fixed; inset: 0; background: rgba(0, 0, 0, .75); z-index: 60; display: flex; align-items: center; justify-content: center; cursor: zoom-out; }
.imgmask img { max-width: 96vw; max-height: 94vh; border-radius: 8px; background: #fff; }

/* ---- 刷题页标题栏：结构用 .s-appbar（kit），此处仅覆盖；半透明+渐进模糊带同顶栏 ---- */
.runbar { position: sticky; top: 0; z-index: 25; margin: 0 -14px 12px;
  background: color-mix(in srgb, var(--card) 76%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.5);
  backdrop-filter: blur(14px) saturate(1.5);
  border-bottom: 1px solid rgba(0,0,0,.05); }
.runbar::after { content: ""; position: absolute; left: 0; right: 0; top: 100%; height: 30px;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  -webkit-mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  background: linear-gradient(180deg, color-mix(in srgb, var(--card) 45%, transparent), transparent);
  pointer-events: none; }
.runbar .runbar__back { background: none; border: 0; box-shadow: none; color: var(--s-icon, #929292); min-height: 0; padding: 4px 6px; }
.runbar .runbar__back:active { background: none; opacity: .6; }
html[data-theme="dark"] .runbar { background: color-mix(in srgb, var(--card) 76%, transparent); border-bottom-color: rgba(255,255,255,.08); }
html[data-theme="dark"] .runbar .s-appbar__title, html[data-theme="dark"] .runbar .s-icon { color: #cfcfcf; }
.runbar .spacer { flex: 1; }
html[data-theme="dark"] .topnav { background: color-mix(in srgb, var(--card) 76%, transparent); border-bottom-color: rgba(255,255,255,.08); }

/* ---- 底部操作栏：四元素等高 定宽 等距 ---- */
.runcan {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
  background: color-mix(in srgb, var(--card) 88%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.5);
  backdrop-filter: blur(14px) saturate(1.5);
  border-top: 1px solid rgba(0,0,0,.05);
  padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
}
.runcan::before { content: ""; position: absolute; left: 0; right: 0; bottom: 100%; height: 22px;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  -webkit-mask-image: linear-gradient(0deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  mask-image: linear-gradient(0deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  background: linear-gradient(0deg, color-mix(in srgb, var(--card) 45%, transparent), transparent);
  pointer-events: none; }
html[data-theme="dark"] .runcan { border-top-color: rgba(255,255,255,.08); }
.runcan .inner { max-width: 980px; margin: 0 auto; display: flex; gap: 10px; align-items: stretch; }.runcan .inner button { height: 44px; min-height: 44px; padding: 0 14px; white-space: nowrap; }
.runcan .nav-sym { flex: none; width: 52px; padding: 0; font-size: 1.4rem; font-weight: 700; }
.runcan .primary.nav-sym { width: 76px; font-size: 1.15rem; }
.runcan .acbtn { flex: 1; min-width: 0; }
.runcan .submitbtn { flex: none; width: auto; min-width: 76px; padding: 0 14px; white-space: nowrap; }

/* ---- 抽层（答题卡/帮助）：底部弹窗 20px 顶圆角，正文区 #efefef ---- */
.sheet { position: fixed; inset: 0; z-index: 50; background: rgba(0, 0, 0, .6); display: flex; align-items: flex-end; }
.sheet .pane {
  background: #efefef; width: 100%; max-height: 76vh; overflow: auto;
  border-radius: 20px 20px 0 0; padding: 0 0 calc(20px + env(safe-area-inset-bottom));
}
html[data-theme="dark"] .sheet .pane { background: #2a2a2a; }
.sheet .pane > h2, .sheet .pane > .row, .sheet .pane > div, .sheet .pane > table, .sheet .pane > p {
  margin-left: 16px; margin-right: 16px;
}
.sheet .pane > h2 {
  height: 48px; display: flex; align-items: center; justify-content: center; margin: 0 -16px 10px;
  background: linear-gradient(180deg, #ffffff, #fafafa); border-bottom: 0.8px solid var(--line);
  border-radius: 20px 20px 0 0; font-size: 14px; color: #656565;
}
html[data-theme="dark"] .sheet .pane > h2 { background: linear-gradient(180deg, #2e2e2e, #2a2a2a); color: #cfcfcf; }
.acgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(42px, 1fr)); gap: 7px; }
.ac {
  aspect-ratio: 1; border-radius: 8px; display: flex; align-items: center; justify-content: center;
  font-size: .85rem; cursor: pointer; position: relative;
  background: linear-gradient(180deg, #fff, #fcfcfc); border: 0.8px solid var(--line);
}
html[data-theme="dark"] .ac { background: #333; }
.ac:active { background: var(--blue); }
.ac.cur { border-color: var(--blue); box-shadow: 0 0 0 2px rgba(80, 121, 217, .35); }
.ac.done { background: var(--chip); color: var(--chip-ink); border-color: transparent; }
.ac.wrongst { background: #fdecea; color: var(--red); border-color: transparent; }
html[data-theme="dark"] .ac.wrongst { background: #3d2624; }
.ac.flag::after { content: ""; position: absolute; top: 3px; right: 4px; width: 6px; height: 6px; border-radius: 50%; background: var(--orange); }
.timer { font-variant-numeric: tabular-nums; font-weight: 700; }

/* ---- 画像 ---- */
.bars .barrow { display: grid; grid-template-columns: 130px 1fr 60px; gap: 10px; align-items: center; margin: 7px 0; font-size: .88rem; }
@media (max-width: 700px) {
  .bars .barrow { grid-template-columns: 100px 1fr 56px; gap: 7px; font-size: .8rem; }
  .bars .barrow > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}
.bar { background: #efefef; border-radius: 100px; height: 8px; box-shadow: inset 0 4px 4px rgba(0,0,0,.06); overflow: hidden; }
html[data-theme="dark"] .bar { background: #383838; }
.bar i { display: block; height: 100%; background: linear-gradient(0deg, #7ca3fb, #668ff7); border-radius: 100px; }
.heat { display: grid; grid-template-columns: repeat(auto-fill, 13px); gap: 3px; }
.heat i { width: 13px; height: 13px; border-radius: 3px; background: #e8e8e8; border: 0.4px solid #dedede; }
html[data-theme="dark"] .heat i { background: #333; border-color: #3d3d3d; }
.heat i.l1 { background: #dce6fb; border-color: #c8d8f6; }
.heat i.l2 { background: #b3caf6; border-color: #9db9f0; }
.heat i.l3 { background: #5b87eb; border-color: #4a76d8; }
html[data-theme="dark"] .heat i.l1 { background: #2b3a5c; border-color: #34466e; }
html[data-theme="dark"] .heat i.l2 { background: #3c5488; border-color: #47639e; }
html[data-theme="dark"] .heat i.l3 { background: #5b87eb; border-color: #6d95ee; }
table.tbl { width: 100%; border-collapse: collapse; font-size: .88rem; }
.tbl th { text-align: left; color: var(--sub); font-weight: 600; padding: 7px 9px; border-bottom: 0.8px solid var(--line); }
.tbl td { padding: 7px 9px; border-bottom: 0.4px solid var(--line); }

/* ---- 错题本：复习调度（汇总卡 + 6 阶 Smartisan 配色进度点）---- */
.wres { display: flex; align-items: center; gap: 8px; }
.wsum__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.wsum__grid div { background: var(--bg); border: 0.4px solid var(--line); border-radius: 6px; padding: 10px 0; text-align: center; }
html[data-theme="dark"] .wsum__grid div { background: rgba(255,255,255,.05); }
.wsum__grid b { display: block; font-size: 20px; }
.wsum__grid span { font-size: 12px; color: var(--sub); }
.wstub { background: #fdecea; color: #cc3e39; border-color: #eb7f77; }
html[data-theme="dark"] .wstub { background: #3d2624; color: #e08a82; border-color: #5c352f; }
.wstem { font-family: var(--font-serif); font-size: .85rem; line-height: 1.6; }
.wrow { cursor: pointer; }
.wrow:active { background: var(--blue); border-color: var(--s-blue-500); }
.wrow:active b, .wrow:active .muted { color: #fff; }

/* ---- 完形填空手机就近选项浮层 ---- */
.cpop-mask { position: fixed; inset: 0; z-index: 55; background: rgba(0,0,0,.18); }
.cpop { position: fixed; z-index: 56; width: min(340px, calc(100vw - 24px));
  background: color-mix(in srgb, var(--card) 86%, transparent);
  -webkit-backdrop-filter: blur(18px) saturate(1.5);
  backdrop-filter: blur(18px) saturate(1.5);
  border: 0.8px solid var(--line); border-radius: 14px;
  box-shadow: 0 16px 34px rgba(0,0,0,.22); padding: 10px 12px; }
.cpop__head { display: flex; align-items: center; justify-content: space-between;
  font-weight: 700; font-size: .85rem; margin-bottom: 7px; }
.cpop__head .ok { color: var(--green); font-size: .8rem; }
.cpop__head .bad { color: var(--red); font-size: .8rem; }
.cpop__opts { margin-top: 0; gap: 6px; }
.cpop__opts .opt { padding: 7px 10px; font-size: .85rem; }
/* 已作答的完形空位：实底标记 */
.cblank.done { background: var(--chip); border-bottom-color: transparent;
  border-radius: 5px; color: var(--chip-ink); }
.stdots { display: flex; gap: 5px; margin-top: 9px; align-items: center; }
.stdots i { width: 9px; height: 9px; border-radius: 50%; border: 1px solid var(--line); background: transparent; }
.stdots i.s0 { --dc: #cf5b52; } .stdots i.s1 { --dc: #d07330; } .stdots i.s2 { --dc: #c9932f; }
.stdots i.s3 { --dc: #7fa53a; } .stdots i.s4 { --dc: #4d9e5f; } .stdots i.s5 { --dc: #2f9fa8; }
.stdots i.past { background: color-mix(in srgb, var(--dc) 45%, var(--card)); border-color: transparent; }
.stdots i.cur { background: var(--dc); border-color: transparent;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--dc) 28%, transparent); }
.stdots i.fin { background: var(--dc); border-color: transparent; }

.toast {
  position: fixed; left: 50%; bottom: 96px; transform: translateX(-50%); z-index: 90;
  padding: 12px 16px; border-radius: 6px; font-size: 14px; font-weight: 700; color: #ad8a67;
  background: linear-gradient(180deg, #fcf6e6, #fcf3dc); border: 0.4px solid #d2b89c;
  max-width: min(86vw, 480px); text-align: center;
}
.kbd { border: 0.5px solid #d3d3d3; border-bottom-width: 1.5px; border-radius: 4px; padding: 0 5px; font-size: .78rem; background: #fff; }
html[data-theme="dark"] .kbd { background: #333; }
.helptable td { padding: 4px 10px 4px 0; }
.login-box { max-width: 380px; margin: 8vh auto; }
.stembox {
  max-height: 180px; overflow: auto; background: #fafafa;
  border: 0.8px solid var(--line); border-radius: 8px; padding: 10px 12px; font-size: 14px;
}
html[data-theme="dark"] .stembox, html[data-theme="dark"] .criteria { background: #2a2a2a; }
.material.collapsed .matbody { display: none; }

/* ---- 设置里的开关：锤子开关（白凹槽 + 拨钮 + 指示点）---- */
input[type="checkbox"] {
  appearance: none; -webkit-appearance: none; margin: 0 6px 0 0; cursor: pointer; flex: none;
  position: relative; width: 44px; height: 22px; border-radius: 100px; vertical-align: middle;
  background: #fff; border: 0.4px solid var(--line); box-shadow: inset 0 4px 12px rgba(0,0,0,.10);
}
input[type="checkbox"]::after {
  content: ""; position: absolute; top: 50%; left: 29px; width: 8.5px; height: 8.5px; margin-top: -4.25px;
  border-radius: 50%; background: #f4f4f4; border: 0.4px solid #e8e8e8;
}
input[type="checkbox"]::before {
  content: ""; position: absolute; top: -0.4px; left: -0.4px; width: 22px; height: 22px; border-radius: 50%; z-index: 1;
  background: linear-gradient(180deg, #fff, #fcfcfc); border: 0.4px solid var(--line); box-shadow: 0 4px 4px rgba(0,0,0,.08);
  transition: left .18s ease;
}
input[type="checkbox"]:checked::after { left: 6px; background: linear-gradient(180deg, #9cbcff, #7da7ff); border-color: #769dfe; }
input[type="checkbox"]:checked::before { left: calc(100% - 21.6px); }

/* ---- 手机端修正（10-15 反馈）---- */
body, button, a, .opt, .ac, .viewport, .mathead { touch-action: manipulation; }
.runcan button { white-space: nowrap; }
.runcan .nav-sym { font-size: 1.35rem; font-weight: 700; min-width: 46px; }
.runcan .primary.nav-sym { min-width: 76px; font-size: 1.1rem; }
.mathead { cursor: pointer; }
@media (max-width: 700px) { .hint-desktop { display: none !important; } }
@media (min-width: 701px) { .hint-mobile { display: none !important; } }


/* ---- v2 独立版：题库年份分组 / 模拟卷 / 收藏旗标激活态 ---- */
.grp-title { font-size: 15px; font-weight: 600; color: var(--sub); margin: 4px 2px 8px; }
.segtabs { display: flex; gap: 0; background: #e9e9e9; border-radius: 8px; padding: 3px; }
html[data-theme="dark"] .segtabs { background: #303030; }
.segtabs button { flex: 1; border: 0; background: transparent; padding: 10px 0; border-radius: 6px;
  font-size: 14px; line-height: 1.4; color: var(--sub); cursor: pointer; }
.segtabs button.on { background: var(--card); color: var(--ink); font-weight: 600;
  box-shadow: 0 1px 3px rgba(0,0,0,.12); }
.yearrow { display: flex; align-items: center; gap: 14px; padding: 11px 0;
  border-bottom: 0.8px solid var(--line, #f2f2f2); cursor: pointer; }
.yearrow:last-child { border-bottom: 0; }
.yearrow:active { background: rgba(91,135,235,.06); }
.yearrow__year { font-size: 20px; font-weight: 700; min-width: 58px; font-variant-numeric: tabular-nums; }
.yearrow__mid { flex: 1; min-width: 0; font-size: 12px; color: var(--sub); }
.yearrow__mid .prog { margin-top: 5px; }
.yearrow__acts { display: flex; align-items: center; gap: 8px; }
.krow { display: flex; align-items: center; gap: 8px; padding: 5px 0; }
.mockgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 12px; }
.mockcard { padding: 16px; }
.mockcard__head { display: flex; align-items: center; gap: 8px; color: var(--blue-deep, #4772e6); }
.mockcard__head b { color: var(--ink); font-size: 16px; }
.navcard--hero { position: relative; padding: 18px 16px 16px; }
.navcard__icon { position: absolute; right: 14px; top: 14px; width: 22px; height: 22px;
  color: var(--blue-deep, #4772e6); opacity: .75; }

/* 收藏 / 旗标 激活态 —— 默认即有白底描边轮廓（与「答题卡」按钮同级），激活换色 */
.qbtn { border-radius: 8px; padding: 5px 10px !important;
  color: var(--sub); cursor: pointer; line-height: 1; transition: background .15s, color .15s, border-color .15s; }
.qbtn:hover { border-color: #c9c9c9; }
.qbtn--fav { background: #fcf3d8; color: #ad8a67; }
html[data-theme="dark"] .qbtn--fav { background: #3d3423; color: #d9bd8a; }
.qbtn--fav svg { color: #e8b93e; }
.qbtn--flag { background: #e8eefc; color: #4772e6; }
html[data-theme="dark"] .qbtn--flag { background: #26314d; color: #8fb0f5; }

/* 知识点选择：多列点击选块；颜色按一级类目区分（10 色 Smartisan 色板，.kpGroups 分配 .c0-.c9） */
.kpgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.kpchip { --kc: #6b84a3; min-height: 38px; justify-content: flex-start; gap: 8px; text-align: left; padding: 6px 12px;
  border-radius: 8px; font-size: .88rem;
  color: var(--kc);
  background: color-mix(in srgb, var(--kc) 10%, var(--card));
  border: 0.8px solid color-mix(in srgb, var(--kc) 26%, var(--card)); }
.kpchip.c0 { --kc: #5079d9; } .kpchip.c1 { --kc: #2f9fa8; } .kpchip.c2 { --kc: #4d9e5f; }
.kpchip.c3 { --kc: #c9932f; } .kpchip.c4 { --kc: #d07330; } .kpchip.c5 { --kc: #cf5b52; }
.kpchip.c6 { --kc: #8e6fc1; } .kpchip.c7 { --kc: #c1599e; } .kpchip.c8 { --kc: #8a734d; }
.kpchip.c9 { --kc: #5f7d9c; }
.kpchip .kpchip__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.kpchip .kpchip__n { flex: none; font-size: .72rem; color: color-mix(in srgb, var(--kc) 72%, var(--sub)); }
.kpchip.on { color: #fff; font-weight: 700;
  background: linear-gradient(180deg, color-mix(in srgb, var(--kc) 82%, #fff), var(--kc));
  border-color: color-mix(in srgb, var(--kc) 78%, #000);
  box-shadow: var(--s-shadow-btn); }
.kpchip.on .kpchip__n { color: rgba(255,255,255,.85); }

/* 设置页：kit 列表结构（.s-list），叠加主题色适配（kit 无暗色推导）；间距见下方「二轮反馈」块 */
.settings .s-list { background: var(--card); border-color: var(--line); box-shadow: 0 10px 16px rgba(0,0,0,.04); }
.settings .s-list-item { background: var(--card); color: var(--ink); }
.settings .s-list-item__title { color: var(--ink); font-size: 15px; }
.settings .s-list-item__subtitle { color: var(--sub); }
.settings .s-list-item input[type="number"], .settings .s-list-item input[type="date"] { min-height: 0; padding: 7px 10px; }
html[data-theme="dark"] .settings .s-list { background: var(--card); border-color: var(--line); box-shadow: none; }
html[data-theme="dark"] .settings .s-list-item { background: var(--card); color: var(--ink); }
html[data-theme="dark"] .settings .s-list-item__title { color: var(--ink); }
.setseg { width: 236px; max-width: 56vw; }
.setseg button { padding: 7px 0; font-size: 13px; }

/* 设置页行对齐（10-16 四轮）：放弃顶对齐+负补偿——元素种类多高度不一，补偿永远补不齐。
   正解：整行垂直居中 + 行高由内容决定（去 60px 死高）+ 四至统一 12/12/18/12，
   行内所有元素（标题/输入框/开关/日期值/chevron）天然共享一条中轴线 */
.setgrp { margin-bottom: 28px; }
.setgrp > .s-list-group__header { margin: 0; padding: 0 18px 9px; }
.settings .s-list-item { align-items: center; padding: 12px 12px 12px 18px; min-height: 0; }
.settings .s-list-item__detail { align-items: center; gap: 10px; }
.settings .setfoot { padding: 6px 18px 12px; font-size: .78rem; line-height: 1.5; color: var(--sub); }

/* 账户组：预置头像网格（拟物渐变圆角方块 + 首字） */
.avatarset { display: flex; flex-wrap: wrap; gap: 9px; justify-content: flex-end; max-width: 420px; }
.avatar { width: 44px; height: 44px; min-height: 0; padding: 0; border-radius: 12px;
  border: 0.8px solid rgba(0,0,0,.12); color: #fff; font-size: 17px; font-weight: 700;
  box-shadow: inset 0 1px 2px rgba(255,255,255,.45), inset 0 -3px 5px rgba(0,0,0,.18); }
.avatar.on { box-shadow: inset 0 1px 2px rgba(255,255,255,.45), inset 0 -3px 5px rgba(0,0,0,.18),
  0 0 0 2.5px var(--card), 0 0 0 4.5px var(--blue); }
html[data-theme="dark"] .avatar { border-color: rgba(255,255,255,.15); }
html[data-theme="dark"] .avatar.on { box-shadow: inset 0 1px 2px rgba(255,255,255,.45), inset 0 -3px 5px rgba(0,0,0,.18),
  0 0 0 2.5px var(--card), 0 0 0 4.5px var(--blue); }

/* 顶栏右侧：账户胶囊 + 下拉（设置/退出），替代裸文本+退出按钮的拥挤排布 */
.topnav a { padding: 5px 11px; }
.userwrap { position: relative; margin-left: 6px; }
.userchip { gap: 7px; min-height: 34px; padding: 4px 12px !important; border-radius: 100px; font-size: 13px; font-weight: 800; }
.uav { width: 21px; height: 21px; border-radius: 7px; flex: none;
  font-style: normal; font-weight: 800;          /* 头像首字母：不斜体、最重字重 */
  color: #fff; font-size: 12px; display: inline-flex; align-items: center; justify-content: center;
  box-shadow: inset 0 1px 1px rgba(255,255,255,.45), inset 0 -2px 3px rgba(0,0,0,.18); }
.userchip svg { width: 12px; height: 12px; color: var(--sub); }
/* 下拉菜单：topnav 已无 overflow 裁剪（overflow-x 已删），absolute 锚定即可 */
.usermenu { position: absolute; right: 0; top: calc(100% + 8px); z-index: 45;
  background: var(--card); border: 0.8px solid var(--line); border-radius: 10px;
  box-shadow: 0 12px 20px rgba(0,0,0,.14); min-width: 148px; overflow: hidden; }
.usermenu a { display: block; padding: 11px 16px; color: var(--ink); font-size: 14px; border-bottom: 0.8px solid var(--line); }
.usermenu a:last-child { border-bottom: 0; }
.usermenu a:active { background: var(--chip); }
html[data-theme="dark"] .usermenu { box-shadow: 0 12px 20px rgba(0,0,0,.5); }

/* 题库年份列表 → 卡片网格（效率对齐知识点页） */
.yeargrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; }
.yearcard { margin: 0; cursor: pointer; }
.yearcard__top { display: flex; align-items: baseline; justify-content: space-between; }
.yearcard__top b { font-size: 22px; font-variant-numeric: tabular-nums; }
.yearcard .prog { height: 4px; background: #efefef; border-radius: 100px; box-shadow: var(--s-inset-track); overflow: hidden; margin-top: 9px; }
html[data-theme="dark"] .yearcard .prog, html[data-theme="dark"] .pcard .prog { background: #383838; }
.yearcard .prog i { display: block; height: 100%; background: linear-gradient(0deg, #7ca3fb, #668ff7); }
.yearcard__done { font-size: 12px; color: var(--sub); margin-top: 6px; }
.yearcard__acts { display: flex; gap: 8px; margin-top: 11px; }
.yearcard__acts button { flex: 1; min-height: 32px; padding: 4px 0; font-size: 13px; }
.yearcard:active { background: var(--blue); border-color: var(--s-blue-500); }
.yearcard:active b, .yearcard:active .muted, .yearcard:active .yearcard__done { color: #fff; }

/* 日期选择弹层（自研月历，Smartisan 风格） */
.sheet .pane > .calbox { width: min(320px, 86vw); margin: 0 auto 10px; }
.calhead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.calhead b { font-size: 15px; }
.calhead button { width: 40px; min-height: 36px; padding: 0; font-size: 1.15rem; font-weight: 700; }
.calweek, .calgrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.calweek span { text-align: center; font-size: 12px; color: var(--sub); padding: 4px 0; }
.calcell { min-height: 40px; padding: 0; font-size: 14px; border-radius: 8px; }
.calcell.out { opacity: .3; cursor: default; }
.calcell.today { border-color: var(--blue); }
.calcell.sel { background: var(--s-grad-primary); border-color: var(--s-blue-500); color: #fff; font-weight: 700; box-shadow: var(--s-shadow-btn); }


/* ---- 手机端（10-16 整改）：底部 tab bar 导航替代平铺顶栏；桌面不受影响 ---- */
.navlinks { display: contents; }
.tabbar { display: none; }
@media (max-width: 700px) {
  .navlinks { display: none; }
  .tabbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 35; display: flex;
    height: calc(54px + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom);
    background: color-mix(in srgb, var(--card) 90%, transparent);
    -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
    border-top: 1px solid rgba(0,0,0,.05); }
  .tabbar a { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 2px; font-size: 10.5px; color: var(--sub); padding: 0; }
  .tabbar a svg { width: 21px; height: 21px; }
  .tabbar a.on { color: var(--blue); font-weight: 600; }
.tabbar::before { content: ""; position: absolute; left: 0; right: 0; bottom: 100%; height: 22px;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  -webkit-mask-image: linear-gradient(0deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  mask-image: linear-gradient(0deg, #000 0%, rgba(0,0,0,.4) 55%, transparent 100%);
  background: linear-gradient(0deg, color-mix(in srgb, var(--card) 45%, transparent), transparent);
  pointer-events: none; }
  /* 设置页窄屏：左列与控件堆叠，头像网格换行铺开 */
  .settings .s-list-item { flex-wrap: wrap; }
  .settings .s-list-item__detail { width: 100%; margin-top: 2px; }
  .settings .s-list-item__detail .setseg { width: 100%; max-width: none; margin-top: 0; }
  .settings .s-list-item__detail input[type="number"] { margin-top: 0; }
  .settings .s-list-item__detail .primary { margin-top: 0; }
  .avatarset { width: 100%; justify-content: flex-start; max-width: none; }
  .yeargrid { grid-template-columns: repeat(2, 1fr); }
  /* 抽层用动态视口，避免 iOS 76vh 超出可视区裁掉底部按钮 */
  .sheet .pane { max-height: 76dvh; }
  #app { padding-bottom: calc(90px + env(safe-area-inset-bottom)); }
}

/* 交卷成绩单卡（kit：白卡 + 0.8px 细描边；禁彩条；Instrument 大数字 + 蓝阶三级） */
.resultcard { margin-bottom: 14px; }
/* 统计行：不用灰底小卡片，细线分隔的平铺指标（卡片内禁止 Instrument，数字用系统字 + tabular-nums） */
.resultcard__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
.resultcard__grid div { padding: 2px 0; text-align: center; border-left: 0.5px solid var(--line); }
.resultcard__grid div:first-child { border-left: 0; }
.resultcard__grid b { display: block; font: 600 22px/1.25 var(--s-font); color: var(--ink); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.resultcard__grid span { font-size: 12px; color: var(--sub); }
/* 报告区条形图：固定标签列，条轨吃满剩余宽度（宽卡下不失衡） */
.resultcard .bars .barrow { grid-template-columns: 150px minmax(0, 1fr) auto; gap: 12px; }
.resultcard .bars .bar > i { border-radius: 100px; }
.resultcard .bars .barrow .muted { font-variant-numeric: tabular-nums; }
/* 得分率蓝阶三级：弱(<60)浅蓝底蓝字 / 中(60-74)中蓝 / 优(≥75)实蓝 */
.rc-cell { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
/* 失分知识点点阵：一行一点阵，方块沿用刷题日历 l1-l3 色阶 */
.kpgrid { display: grid; gap: 6px; }
.kpgrid__row { display: grid; grid-template-columns: minmax(120px, 200px) 1fr 24px; gap: 10px; align-items: center; }
.kpgrid__name { font-size: 13px; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kpgrid__dots { display: flex; flex-wrap: wrap; gap: 3px; }
.kpgrid__dots i { width: 11px; height: 11px; border-radius: 3px; background: #e8e8e8; border: 0.4px solid #dedede; }
.kpgrid__dots i.l1 { background: #dce6fb; border-color: #c8d8f6; }
.kpgrid__dots i.l2 { background: #b3caf6; border-color: #9db9f0; }
.kpgrid__dots i.l3 { background: #5b87eb; border-color: #4a76d8; }
html[data-theme="dark"] .kpgrid__dots i { background: #333; border-color: #3d3d3d; }
html[data-theme="dark"] .kpgrid__dots i.l1 { background: #2b3a5c; border-color: #34466e; }
html[data-theme="dark"] .kpgrid__dots i.l2 { background: #3c5488; border-color: #47639e; }
html[data-theme="dark"] .kpgrid__dots i.l3 { background: #5b87eb; border-color: #6d95ee; }
.kpgrid__n { font-size: 13px; color: var(--sub); text-align: right; font-variant-numeric: tabular-nums; }
/* 写作自评输入：kit 输入框（0.4px 细描边 + 左对齐数字） */
.selfinput { width: 88px; height: 32px; padding: 0 10px; border: 0.4px solid var(--line); border-radius: 6px; background: var(--card); color: var(--ink); font-size: 14px; font-variant-numeric: tabular-nums; outline: none; }
.selfinput:focus { border-color: var(--blue); }
.selftotal { color: var(--blue-deep, #4772e6); font-variant-numeric: tabular-nums; }
.rc-note { font-size: 13px; }
.rc-rate { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; height: 22px; padding: 0 8px; border-radius: 4px; font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; }
.rc-rate--low  { background: #dce6fb; color: #4772e6; border: 0.4px solid #c8d8f6; }
.rc-rate--mid  { background: #b3caf6; color: #2b4bad; border: 0.4px solid #9db9f0; }
.rc-rate--good { background: #5b87eb; color: #fff; border: 0.4px solid #4a76d8; }
html[data-theme="dark"] .rc-rate--low  { background: #2b3a5c; color: #9db9f0; border-color: #34466e; }
html[data-theme="dark"] .rc-rate--mid  { background: #3c5488; color: #cfe0fb; border-color: #47639e; }
html[data-theme="dark"] .rc-rate--good { background: #5b87eb; color: #fff; border-color: #6d95ee; }
@media (max-width: 700px) {
  .resultcard .bars .barrow { grid-template-columns: minmax(92px, 130px) minmax(0, 1fr) auto; gap: 8px; }
}

/* ---- 反馈/成绩/新设置件 ---- */
.qbtn--txt { font-size: 12px; color: var(--sub); padding: 4px 8px; }
.fbkinds { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.fbkinds button { padding: 5px 12px; }
.fbkinds button.on { background: var(--blue); color: #fff; border-color: var(--blue); }
.wremove { flex: none; padding: 2px 6px; color: var(--sub); }
.wremove .s-icon { width: 12px; height: 12px; }
html[data-ana="s"] .analysis { font-size: .86rem; }
html[data-ana="l"] .analysis { font-size: 1.06rem; }
html[data-theme="dark"] .toast { color: #e8cf9a; background: linear-gradient(180deg, #3a352c, #37322a); border-color: #5a5142; }
html[data-theme="dark"] .badge.full, html[data-theme="dark"] .badge.confirmed,
html[data-theme="dark"] .badge.verified { background: rgba(60, 125, 82, .22); color: #8cc9a2; border-color: rgba(140, 201, 162, .35); }
html[data-theme="dark"] .badge.brief, html[data-theme="dark"] .badge.reviewed { background: rgba(173, 138, 103, .2); color: #d8b98c; border-color: rgba(216, 185, 140, .3); }
html[data-theme="dark"] .badge.none, html[data-theme="dark"] .badge.draft { background: rgba(204, 62, 57, .18); color: #e79b97; border-color: rgba(231, 155, 151, .3); }

/* ---- 单题节奏芯片 ---- */
.qtime { font-variant-numeric: tabular-nums; font-weight: 600; font-size: 13px; color: var(--sub); padding: 2px 8px; border-radius: 6px; background: rgba(0,0,0,.04); }
html[data-theme="dark"] .qtime { background: rgba(255,255,255,.06); }
.qtime.warm { color: #b0741f; }
.qtime.slow { color: var(--red); }

/* ---- 人机交互批：判分条/错因/报告/搜索/打印 ---- */
.revealbar { justify-content: flex-end; margin-top: 12px; gap: 10px; }
.revealbtn { padding: 12px 26px; }
.ereason { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: 12px 0 4px; font-size: 13px; }
.echip { padding: 4px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); color: var(--sub); font-size: 13px; }
.echip.on { background: var(--blue); border-color: var(--blue); color: #fff; }
.rpt { margin-top: 12px; border-top: 0.8px solid var(--line); padding-top: 12px; }
.rpt-title { font-size: 13px; font-weight: 600; }
.rpt-chip { padding: 3px 12px; border-radius: 999px; border: 0.4px solid var(--line); background: var(--card); color: var(--sub); font-size: 12px; font-variant-numeric: tabular-nums; }
.rpt-chip--plain { background: transparent; }
.qsearch { display: flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; margin-bottom: 14px; background: var(--card); }
.qsearch input { flex: 1; border: 0; outline: 0; background: transparent; color: var(--ink); font-size: 14px; }
.qresults { margin-bottom: 14px; }
.qres-row { padding: 12px 14px; margin-bottom: 8px; cursor: pointer; }
.runbar__help { width: 30px; height: 30px; border-radius: 8px; border: 1px solid var(--line); background: transparent; color: var(--sub); font-size: 14px; margin-left: 8px; }
@media (max-width: 700px) { .runbar__help { display: none; } .qhead .muted { display: none; } }
@media print {
  .topnav, .tabbar, .runcan, .qbtn, .wremove, .echip, button, .stdots { display: none !important; }
  body { background: #fff; }
  .card { box-shadow: none; border: 1px solid #ddd; break-inside: avoid; }
  .wstem, .qstem, .analysis { color: #000 !important; white-space: normal; }
}

/* ---- 自绘确认弹窗 ---- */
.dlgmask { position: fixed; inset: 0; z-index: 60; background: rgba(0, 0, 0, .55); display: flex; align-items: center; justify-content: center; padding: 24px; }
.dlg { background: var(--card); border-radius: 16px; padding: 20px; width: min(400px, 100%); box-shadow: 0 18px 50px rgba(0, 0, 0, .28); }
.dlg-text { font-size: 15px; line-height: 1.7; color: var(--ink); }
.dlg-btn { min-height: 38px; padding: 8px 20px; border-radius: 10px; border: 1px solid var(--line); background: transparent; color: var(--sub); font-size: 14px; }
.dlg-btn--ok { background: var(--blue); border-color: var(--blue); color: #fff; font-weight: 600; }

/* ---- 画像重构：板块/薄弱行网格 + 错因 chips ---- */
.secrow { display: grid; grid-template-columns: minmax(96px, 1.1fr) 1.3fr 44px 40px 56px; gap: 10px; align-items: center; margin: 8px 0; font-size: .88rem; }
.secrow .secname { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.secrow .secacc { font-variant-numeric: tabular-nums; text-align: right; }
.secrow .seccell { font-variant-numeric: tabular-nums; color: var(--sub); text-align: right; white-space: nowrap; font-size: .82rem; }
.secrow.sechead { margin: 0 0 2px; color: var(--sub); font-size: .72rem; }
.secrow.sechead span:not(:first-child) { text-align: right; }
.secrow .slowt { color: var(--red); }
.mixchip { padding: 5px 14px; border-radius: 999px; background: var(--bg); border: 1px solid var(--line); font-size: 13px; font-variant-numeric: tabular-nums; }
@media (max-width: 700px) {
  .secrow { grid-template-columns: minmax(76px, 1fr) 1fr 38px 34px 46px; gap: 6px; font-size: .8rem; }
  .bars .barrow { grid-template-columns: minmax(92px, 1fr) 1fr auto; }
}
.bars .barrow { grid-template-columns: minmax(120px, 1.1fr) 1.3fr auto; }
.bars .barrow > span:first-child { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bars .barrow > span:last-child { white-space: nowrap; }

/* 顶栏全宽化（非落地页）：品牌与内容区左缘对齐 */
.topnav { width: 100vw; margin-left: calc(50% - 50vw); padding-left: clamp(16px, 3vw, 32px); padding-right: clamp(16px, 3vw, 32px); }



/* 刷题区内容可读宽度（其余页面全宽） */
html:not([data-route="landing"]) .runwrap,
html:not([data-route="landing"]) .resultcard { max-width: 1100px; margin-left: auto; margin-right: auto; }

/* ============================================================
   答题卡原型 v2
   底纹：刷题区（.s-page--textured 细竖纹）
   色板：知识点选择同款 10 色（.kpchip c0–c9）
   字体：仅 hero 大数字用 Instrument Serif，其余全部系统字 + tabular-nums
   ============================================================ */
.asv{
  --asv-max: 1160px;
  --asv-edge: clamp(14px, 3vw, 32px);
  --asv-serif: "Instrument Serif", var(--font-serif);
  --asv-blue: #5079d9;
  --asv-green: #4d9e5f;
  --asv-red: #cf5b52;
  --asv-yellow: #c9932f;
}
body.asv-body { background-color: transparent; }
.asv-topbar{
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; gap: 9px; height: 52px;
  padding: 0 var(--asv-edge);
  background: color-mix(in srgb, var(--card) 90%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.4); backdrop-filter: blur(14px) saturate(1.4);
  border-bottom: .8px solid var(--line);
}
.asv-iconbtn{
  width: 32px; height: 32px; min-height: 32px; padding: 0; border-radius: 8px;
  border: .8px solid var(--line); background: var(--card); color: var(--ink);
}
.asv-iconbtn .s-icon{ width: 17px; height: 17px; color: currentColor; }
.asv-topbar__id{ display: flex; flex-direction: column; gap: 0; min-width: 0; }
.asv-topbar__title{ font-size: 14px; font-weight: 700; }
.asv-topbar__meta{ font-size: 10.5px; color: var(--sub); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.asv-spacer{ flex: 1; }
.asv-timer{
  display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 10px;
  border-radius: 8px; border: .8px solid var(--line); background: var(--card);
  font-size: 10.5px; color: var(--sub); white-space: nowrap;
}
.asv-timer b{ font-size: 12px; color: var(--ink); font-variant-numeric: tabular-nums; }
.asv-timer.is-warn b{ color: var(--red); }
.asv-topbar .primary{ height: 32px; min-height: 32px; padding: 0 14px; font-size: 12px; border-radius: 8px; }

/* ---------- 页面骨架 ---------- */
.asv-main{
  max-width: var(--asv-max); margin: 0 auto;
  padding: 20px var(--asv-edge) 56px;
  display: flex; flex-direction: column; gap: 14px;
}
.asv-head{ display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 2px 2px 2px; }
.asv-eyebrow{ display: flex; align-items: center; gap: 7px; margin: 0 0 7px; font-size: 10.5px; font-weight: 600; letter-spacing: .12em; color: var(--sub); }
.asv-eyebrow i{ width: 5px; height: 5px; border-radius: 50%; background: var(--asv-blue); }
.asv-head h1{ margin: 0; font-size: 25px; line-height: 1.25; font-weight: 600; color: var(--ink); letter-spacing: -.01em; }
.asv-proto{ display: inline-block; margin-left: 9px; vertical-align: 5px; padding: 2px 8px; border-radius: 999px; font-size: 9.5px; font-weight: 600; letter-spacing: .05em; color: #ad8a67; background: #fcf6e6; border: .6px solid #d2b89c; }
html[data-theme="dark"] .asv-proto{ color: color-mix(in srgb, #ad8a67 58%, #fff); background: rgb(252 246 230 / .08); border-color: rgb(210 184 156 / .3); }
.asv-sub{ margin: 6px 0 0; font-size: 12px; color: var(--sub); line-height: 1.65; }
.asv-tools{ display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.asv-switch{ display: inline-flex; padding: 2px; gap: 2px; border-radius: 9px; border: .8px solid var(--line); background: var(--bg); }
.asv-switch button{ min-height: 28px; padding: 3px 12px; border: 0; border-radius: 7px; background: transparent; box-shadow: none; font-size: 12px; color: var(--sub); }
.asv-switch button[aria-pressed="true"]{ background: var(--card); color: var(--ink); font-weight: 700; box-shadow: 0 1px 2px rgb(0 0 0 / .08); }
.asv-switch__label{ align-self: center; font-size: 10.5px; color: var(--sub); margin: 0 2px 0 6px; }
html[data-theme="dark"] .asv .s-chip{ background: var(--card); border-color: var(--line); color: var(--sub); }
html[data-theme="dark"] .asv .s-chip--blue, html[data-theme="dark"] .asv .s-chip.is-pressed{ background: var(--chip); border-color: color-mix(in srgb, var(--chip-ink) 45%, transparent); color: var(--chip-ink); }
html[data-theme="dark"] .asv-switch{ background: var(--card); }
html[data-theme="dark"] .asv-switch button[aria-pressed="true"]{ background: #333; }

/* ---------- 卡片 ---------- */
.asv-panel{ margin: 0; padding: 16px 18px 17px; border-radius: 12px; }
.asv-panel__head{ display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.asv-panel__head h2{ margin: 0; font-size: 14px; font-weight: 700; color: var(--ink); letter-spacing: .005em; }
.asv-panel__head p{ margin: 4px 0 0; font-size: 11px; color: var(--sub); line-height: 1.6; }
.asv-panel__tag{ flex: none; font-size: 10.5px; padding: 3px 9px; border-radius: 999px; background: var(--bg); border: .8px solid var(--line); color: var(--sub); white-space: nowrap; font-variant-numeric: tabular-nums; }
.asv-panel__foot{ margin: 9px 0 0; font-size: 10.5px; color: var(--sub); line-height: 1.65; }

/* ---------- hero：左文案 + 右叠放玻璃卡（点选实色置前） ---------- */
.asv-hero{ display: grid; grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr); gap: 20px; align-items: center; padding: 2px 2px 0; }
.asv-hero__copy{ min-width: 0; padding: 2px 0; }
.asv-hero__title{ margin: 0; font-size: 11px; font-weight: 700; letter-spacing: .12em; color: color-mix(in srgb, var(--ink) 62%, transparent); }
.asv-bignum{ margin: 8px 0 0; font-family: var(--asv-serif); font-size: clamp(46px, 4.8vw, 62px); font-weight: 400; line-height: .98; letter-spacing: -.025em; font-variant-numeric: tabular-nums; color: var(--ink); }
.asv-bignum small{ margin-left: 4px; font-family: var(--s-font); font-size: 14px; font-weight: 600; letter-spacing: 0; color: var(--sub); }
.asv-hero__desc{ margin: 11px 0 0; max-width: 33em; font-size: 12px; line-height: 1.75; color: var(--sub); }
.asv-hero__hint{ margin: 12px 0 0; font-size: 10.5px; color: var(--sub); opacity: .7; }
.asv-hero__hint b{ font-weight: 600; color: var(--ink); }

/* 叠放卡组 */
.asv-stackrow{
  display: flex; justify-content: center; align-items: flex-start;
  padding: 20px 2px 22px; margin: -8px 0;
  overflow: visible;
}
.asv-stackrow::-webkit-scrollbar{ display: none; }
.asv-metric{
  position: relative; flex: none; width: 170px; min-height: 140px;
  margin-right: -32px; padding: 14px 14px 12px;
  display: flex; flex-direction: column; justify-content: space-between; align-items: center; gap: 8px;
  text-align: center; cursor: pointer; color: var(--ink);
  border-radius: 14px;
  background: color-mix(in srgb, var(--mc) 15%, rgb(255 255 255 / 16%));
  border: .8px solid rgb(255 255 255 / .55);
  -webkit-backdrop-filter: blur(14px) saturate(1.45); backdrop-filter: blur(14px) saturate(1.45);
  box-shadow: 0 8px 20px rgb(25 31 45 / .05), inset 0 1px 1px rgb(255 255 255 / .32);
  transform: translateY(var(--rise, 0)) rotate(var(--tilt, 0));
  transition: transform .22s cubic-bezier(.2, .8, .2, 1), box-shadow .2s, background .2s, color .2s;
  z-index: var(--z, 1);
}
html[data-theme="dark"] .asv-metric{
  background: color-mix(in srgb, var(--mc) 16%, rgb(18 18 18 / 34%));
  border-color: rgb(255 255 255 / .14);
  box-shadow: 0 8px 20px rgb(0 0 0 / .24), inset 0 1px 1px rgb(255 255 255 / .12);
}
.asv-metric:nth-child(1){ --tilt: -1.5deg; --rise: 2px; }
.asv-metric:nth-child(2){ --tilt: 1.3deg; --rise: -4px; }
.asv-metric:nth-child(3){ --tilt: -.6deg; --rise: 4px; }
.asv-metric:nth-child(4){ --tilt: 1.6deg; --rise: -2px; }
.asv-metric:nth-child(5){ --tilt: -1deg; --rise: 3px; }
.asv-metric:last-child{ margin-right: 0; }
.asv-metric:hover{ transform: translateY(-7px) rotate(0); z-index: 20; box-shadow: 0 12px 26px rgb(25 31 45 / .1); }
.asv-metric:focus-visible{ outline: 2px solid var(--mc); outline-offset: 2px; z-index: 20; transform: translateY(-7px) rotate(0); }
.asv-metric[aria-pressed="true"]{
  background: color-mix(in srgb, var(--mc) 88%, #283344);
  color: #fff; border-color: color-mix(in srgb, var(--mc) 74%, #000);
  transform: translateY(-13px) rotate(0); z-index: 30;
  box-shadow: 0 16px 34px rgb(25 31 45 / .2);
}
html[data-theme="dark"] .asv-metric[aria-pressed="true"]{ border-color: color-mix(in srgb, var(--mc) 70%, #fff 10%); }
.asv-metric__label{ font-size: 11px; font-weight: 600; letter-spacing: .02em; opacity: .75; }
.asv-metric__value{ display: block; font-size: 38px; font-weight: 700; line-height: 1.02; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.asv-metric__value small{ margin-left: 1px; font-size: 13px; font-weight: 600; opacity: .55; letter-spacing: 0; }
.asv-metric__value.is-long{ font-size: 27px; letter-spacing: -.01em; }
.asv-metric__sub{ display: block; font-size: 10.5px; opacity: .62; line-height: 1.5; }
.asv-metric[aria-pressed="true"] .asv-metric__label,
.asv-metric[aria-pressed="true"] .asv-metric__sub{ opacity: .85; }
.asv-metric[aria-pressed="true"] .asv-metric__value small{ opacity: .7; }

.asv-hero__bottom{ grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; margin-top: 12px; padding-top: 11px; border-top: .8px solid var(--line); flex-wrap: wrap; }
.asv-stack{ flex: 1; min-width: 160px; display: flex; height: 7px; border-radius: 999px; overflow: hidden; background: color-mix(in srgb, var(--line) 60%, transparent); }
.asv-stack i{ height: 100%; }
.asv-stack .ok{ background: var(--asv-green); } .asv-stack .bad{ background: var(--asv-red); }
.asv-stack .open{ background: var(--asv-yellow); } .asv-stack .none{ background: color-mix(in srgb, var(--ink) 14%, transparent); }
.asv-legendline{ display: flex; flex-wrap: wrap; gap: 5px 12px; margin: 0; padding: 0; list-style: none; font-size: 10px; color: var(--sub); }
.asv-legendline li{ display: inline-flex; align-items: center; gap: 5px; }
.asv-legendline i{ width: 6px; height: 6px; border-radius: 2px; }
.asv-hero__foot{ grid-column: 1 / -1; margin: 9px 0 0; font-size: 10px; color: var(--sub); line-height: 1.6; opacity: .85; }

/* ---------- 两栏 ---------- */
.asv-layout{ display: grid; grid-template-columns: minmax(0, 1.22fr) minmax(340px, .88fr); gap: 14px; align-items: start; }
.asv-col{ display: flex; flex-direction: column; gap: 14px; min-width: 0; }

/* ---------- 表格：板块 / 用时 ---------- */
.asv-table{ --cols: minmax(0,1fr) 40px 44px 92px 52px; }
.asv-tr{ display: grid; grid-template-columns: var(--cols); column-gap: 10px; align-items: center; }
.asv-th{ padding: 3px 0 7px; border-bottom: .8px solid var(--line); font-size: 10px; color: var(--sub); letter-spacing: .04em; }
.asv-th > :not(:first-child){ text-align: right; }
.asv-row{ border-bottom: .8px solid var(--line); padding: 9px 0 8px; }
.asv-row:last-of-type{ border-bottom: 0; }
.asv-cell-name{ min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.asv-cell-name b{ display: flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 600; color: var(--ink); }
.asv-cell-name b i{ width: 7px; height: 7px; border-radius: 2px; background: var(--kc, var(--asv-blue)); flex: none; }
.asv-cell-name small{ padding-left: 14px; font-size: 10px; color: var(--sub); }
.asv-cell-num{ text-align: right; font-size: 14px; color: var(--sub); font-variant-numeric: tabular-nums; }
.asv-cell-score{ text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.asv-cell-score b{ font-size: 17px; font-weight: 700; color: var(--ink); }
.asv-cell-score small{ margin-left: 1px; font-size: 10px; color: var(--sub); }
.asv-cell-rate{ text-align: right; font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }
.asv-cell-empty{ color: var(--sub); font-size: 10.5px; }
.asv-rowbar{ display: flex; height: 5px; margin-top: 6px; border-radius: 999px; overflow: hidden; background: color-mix(in srgb, var(--line) 55%, transparent); }
.asv-rowbar i{ height: 100%; }
.asv-tbody .asv-row:last-child{ border-bottom: 0; }

/* 考试模式：只保留 板块 / 题量 / 已答 */
.asv-table.is-exam{ --cols: minmax(0,1fr) 40px 56px; }
.asv-table.is-exam .asv-col-score, .asv-table.is-exam .asv-col-rate{ display: none; }

/* ---------- 用时 ---------- */
/* 用时三块：叠放玻璃卡（与 hero 同一套：悬停抬起、点选实色置前） */
.asv-pace-stack{ display: flex; justify-content: center; align-items: flex-start; padding: 18px 0 16px; margin: -4px 0 6px; }
.asv-pace-card{
  position: relative; flex: none; width: 200px; min-height: 116px;
  margin-right: -30px; padding: 13px 14px;
  display: flex; flex-direction: column; align-items: center; justify-content: space-between; gap: 6px;
  text-align: center; cursor: pointer; color: var(--ink);
  border-radius: 13px;
  background: color-mix(in srgb, var(--mc) 14%, rgb(255 255 255 / 20%));
  border: .8px solid rgb(255 255 255 / .6);
  -webkit-backdrop-filter: blur(10px) saturate(1.35); backdrop-filter: blur(10px) saturate(1.35);
  box-shadow: 0 6px 16px rgb(25 31 45 / .05), inset 0 1px 1px rgb(255 255 255 / .32);
  transform: translateY(var(--rise, 0)) rotate(var(--tilt, 0));
  transition: transform .22s cubic-bezier(.2,.8,.2,1), box-shadow .2s, background .2s, color .2s;
  z-index: var(--z, 1);
}
.asv-pace-card:nth-child(1){ --tilt: -1.2deg; --rise: 2px; }
.asv-pace-card:nth-child(2){ --tilt: 1deg; --rise: -3px; }
.asv-pace-card:nth-child(3){ --tilt: -.7deg; --rise: 3px; }
.asv-pace-card:last-child{ margin-right: 0; }   /* 最后一张不再负边距，整组按视觉外框居中 */
.asv-pace-card:hover{ transform: translateY(-6px) rotate(0); z-index: 4; box-shadow: 0 12px 24px rgb(25 31 45 / .1); }
.asv-pace-card:focus-visible{ outline: 2px solid var(--mc); outline-offset: 2px; z-index: 4; transform: translateY(-6px) rotate(0); }
.asv-pace-card[aria-pressed="true"]{
  background: color-mix(in srgb, var(--mc) 88%, #283344);
  color: #fff; border-color: color-mix(in srgb, var(--mc) 74%, #000);
  transform: translateY(-10px) rotate(0); z-index: 5;
  box-shadow: 0 14px 30px rgb(25 31 45 / .18);
}
.asv-pace-card__label{ display: flex; align-items: center; gap: 5px; font-size: 10.5px; font-weight: 600; opacity: .75; }
.asv-pace-card__label i{ width: 5px; height: 5px; border-radius: 1.5px; background: currentColor; opacity: .8; }
.asv-pace-card__value{ font-size: 28px; font-weight: 700; line-height: 1.05; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.asv-pace-card__sub{ font-size: 10.5px; opacity: .62; }
.asv-pace-card[aria-pressed="true"] .asv-pace-card__label,
.asv-pace-card[aria-pressed="true"] .asv-pace-card__sub{ opacity: .85; }
html[data-theme="dark"] .asv-pace-card{
  background: color-mix(in srgb, var(--mc) 16%, rgb(18 18 18 / 34%));
  border-color: rgb(255 255 255 / .14);
  box-shadow: 0 6px 16px rgb(0 0 0 / .24), inset 0 1px 1px rgb(255 255 255 / .12);
}

.asv-table--pace{ --cols: minmax(0,1fr) 54px 54px 58px 96px; }
.asv-table--pace .asv-cell-num{ color: var(--ink); }
.asv-cell-dev{ text-align: right; font-size: 12px; font-variant-numeric: tabular-nums; }
.asv-cell-dev.over{ color: var(--asv-red); } .asv-cell-dev.under{ color: var(--asv-green); }
.asv-gauge{ display: block; width: 100%; position: relative; height: 5px; border-radius: 999px; background: color-mix(in srgb, var(--line) 55%, transparent); overflow: hidden; }
.asv-gauge i{ position: absolute; left: 0; top: 0; height: 100%; border-radius: 999px; background: var(--kc, var(--asv-blue)); }
.asv-gauge em{ position: absolute; top: -1px; width: 1px; height: 7px; background: color-mix(in srgb, var(--ink) 32%, transparent); }
.asv-slow-title{ margin: 13px 0 0; font-size: 10.5px; color: var(--sub); letter-spacing: .04em; }
.asv-slow{ margin: 2px 0 0; padding: 0; list-style: none; }
.asv-slow li{ display: grid; grid-template-columns: minmax(0,1fr) 54px 58px; column-gap: 10px; align-items: center; padding: 7px 0; border-top: .8px solid var(--line); font-size: 12px; }
.asv-slow li:first-child{ border-top: 0; }
.asv-slow .who{ display: flex; align-items: center; gap: 7px; min-width: 0; }
.asv-slow .who i{ width: 6px; height: 6px; border-radius: 2px; background: var(--kc); flex: none; }
.asv-slow .who b{ font-weight: 600; }
.asv-slow .who span{ color: var(--sub); font-size: 10.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asv-slow .time{ text-align: right; font-variant-numeric: tabular-nums; }
.asv-slow .over{ text-align: right; color: var(--asv-red); font-variant-numeric: tabular-nums; }

/* ---------- 矩阵：Smartisan 圆形旋钮（40px，状态用配色 + 图例，无外挂元素） ---------- */
.asv-filters{ display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 4px; }
.asv-group{ margin-top: 14px; }
.asv-group__head{ display: flex; align-items: center; gap: 7px; margin-bottom: 9px; font-size: 11px; color: var(--sub); }
.asv-group__head i{ width: 7px; height: 7px; border-radius: 2px; background: var(--kc); }
.asv-group__head b{ color: var(--ink); font-weight: 600; font-size: 12px; }
.asv-group__head span{ margin-left: auto; font-variant-numeric: tabular-nums; }
.asv-cells{ display: grid; grid-template-columns: repeat(auto-fill, minmax(42px, 1fr)); gap: 10px 8px; }

.asv-dot{
  position: relative; width: 40px; height: 40px; margin: 0 auto;
  border: 0; padding: 0; border-radius: 50%;
  background: color-mix(in srgb, var(--kc) 18%, #fff);
  cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
  transition: transform .14s ease, opacity .15s ease;
}
.asv-dot::before{
  content: ""; position: absolute; inset: 2.5px; border-radius: 50%;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--kc) 6%, #fff),
    color-mix(in srgb, var(--kc) 12%, #fff));
  border: .8px solid color-mix(in srgb, var(--kc) 32%, #fff);
  box-shadow: inset 0 1px 1px rgb(255 255 255 / .9), 0 1px 2px rgb(0 0 0 / .04);
}
.asv-dot > span{ position: relative; z-index: 1; font-size: 15px; font-weight: 700; color: color-mix(in srgb, var(--kc) 84%, #333); font-variant-numeric: tabular-nums; }
.asv-dot:hover{ transform: translateY(-1px); }
.asv-dot:hover::before{ background: linear-gradient(180deg,
    color-mix(in srgb, var(--kc) 9%, #fff),
    color-mix(in srgb, var(--kc) 16%, #fff)); }
.asv-dot:active{ transform: translateY(1px); }
.asv-dot:focus-visible{ outline: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--kc) 40%, transparent); }

/* 已答：板块色实体旋钮 */
.asv-dot.is-answered::before{
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--kc) 72%, #fff),
    var(--kc));
  border-color: color-mix(in srgb, var(--kc) 72%, #000);
  box-shadow: inset 0 1px 1px rgb(255 255 255 / .35), 0 2px 3px rgb(0 0 0 / .1);
}
.asv-dot.is-answered > span{ color: #fff; }

/* 做错：红 */
.asv-dot.is-wrong::before{
  background: linear-gradient(180deg, color-mix(in srgb, #cf5b52 62%, #fff), #cf5b52);
  border-color: color-mix(in srgb, #cf5b52 78%, #000);
  box-shadow: inset 0 1px 1px rgb(255 255 255 / .3), 0 2px 3px rgb(0 0 0 / .12);
}
.asv-dot.is-wrong > span{ color: #fff; }

/* 写作已写待评：暖黄 */
.asv-dot.is-open::before{
  background: linear-gradient(180deg, color-mix(in srgb, #c9932f 55%, #fff), #c9932f);
  border-color: color-mix(in srgb, #c9932f 82%, #000);
}
.asv-dot.is-open > span{ color: #fff; }

/* 旗标：只在旋钮内部加一道琥珀描边，不外挂 */
.asv-dot.is-flag::before{
  border-color: #cd9143;
  box-shadow: inset 0 0 0 1.5px color-mix(in srgb, #cd9143 60%, transparent), inset 0 1px 1px rgb(255 255 255 / .8);
}

/* 当前题 / 选中：内嵌蓝环 + 轻微抬起，不外扩元素 */
.asv-dot.is-current::before{
  border-color: transparent;
  box-shadow: inset 0 0 0 2px #fff, inset 0 0 0 4px #4772e6, 0 1px 2px rgb(0 0 0 / .06);
}
.asv-dot.is-selected{ transform: scale(1.09); z-index: 2; }
.asv-dot.is-selected::before{ box-shadow: inset 0 0 0 2px #fff, inset 0 0 0 4px #2f54d7, 0 3px 6px rgb(0 0 0 / .16); }
.asv-dot.is-dim{ opacity: .28; }

html[data-theme="dark"] .asv-dot{ background: color-mix(in srgb, var(--kc) 20%, var(--bg)); }
html[data-theme="dark"] .asv-dot::before{
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--kc) 12%, var(--card)),
    color-mix(in srgb, var(--kc) 18%, var(--bg)));
  border-color: color-mix(in srgb, var(--kc) 34%, var(--line));
  box-shadow: inset 0 1px 1px rgb(255 255 255 / .08), 0 1px 2px rgb(0 0 0 / .3);
}
html[data-theme="dark"] .asv-dot > span{ color: color-mix(in srgb, var(--kc) 55%, var(--ink)); }
html[data-theme="dark"] .asv-dot.is-answered::before{
  background: linear-gradient(180deg, color-mix(in srgb, var(--kc) 72%, #fff), var(--kc));
  border-color: color-mix(in srgb, var(--kc) 72%, #000);
}
html[data-theme="dark"] .asv-dot.is-wrong::before{
  background: linear-gradient(180deg, color-mix(in srgb, #cf5b52 62%, #fff), #cf5b52); border-color: color-mix(in srgb, #cf5b52 78%, #000);
}
html[data-theme="dark"] .asv-dot.is-open::before{
  background: linear-gradient(180deg, color-mix(in srgb, #c9932f 55%, #fff), #c9932f); border-color: color-mix(in srgb, #c9932f 82%, #000);
}
html[data-theme="dark"] .asv-dot.is-answered > span,
html[data-theme="dark"] .asv-dot.is-wrong > span,
html[data-theme="dark"] .asv-dot.is-open > span{ color: #fff; }
html[data-theme="dark"] .asv-dot.is-flag::before{ border-color: #cd9143; }

.asv-legend{ display: flex; flex-wrap: wrap; gap: 7px 14px; margin: 13px 0 0; padding: 0; list-style: none; font-size: 10.5px; color: var(--sub); }
.asv-legend li{ display: inline-flex; align-items: center; gap: 6px; }
.asv-legend i{ width: 14px; height: 14px; border-radius: 50%; position: relative; flex: none;
  background: color-mix(in srgb, #5079d9 18%, #fff); }
.asv-legend i::before{ content: ""; position: absolute; inset: 1px; border-radius: 50%;
  background: linear-gradient(180deg, #fff, color-mix(in srgb, #5079d9 10%, #fff));
  border: .8px solid color-mix(in srgb, #5079d9 32%, #fff); }
.asv-legend .k-done::before{ background: conic-gradient(#5079d9, #2f9fa8, #4d9e5f, #8e6fc1, #d07330, #5079d9); border-color: transparent; }
.asv-legend .k-wrong::before{ background: linear-gradient(180deg, color-mix(in srgb, #cf5b52 62%, #fff), #cf5b52); border-color: color-mix(in srgb, #cf5b52 78%, #000); }
.asv-legend .k-open::before{ background: linear-gradient(180deg, color-mix(in srgb, #c9932f 55%, #fff), #c9932f); border-color: color-mix(in srgb, #c9932f 82%, #000); }
.asv-legend .k-flag::before{ border-color: #cd9143; box-shadow: inset 0 0 0 1.5px color-mix(in srgb, #cd9143 60%, transparent); }

.asv-detail{
  margin-top: 13px; padding: 13px 14px; border-radius: 10px;
  display: flex; flex-direction: column; gap: 11px;
  background: color-mix(in srgb, var(--kc, #5079d9) 8%, var(--card));
  border: .8px solid color-mix(in srgb, var(--kc, #5079d9) 24%, var(--card));
}
html[data-theme="dark"] .asv-detail{
  background: color-mix(in srgb, var(--kc, #5079d9) 14%, var(--card));
  border-color: color-mix(in srgb, var(--kc, #5079d9) 32%, var(--line));
}
.asv-detail__head{ display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.asv-detail__sec{ font-size: 14px; font-weight: 700; letter-spacing: .005em; }
.asv-detail__no{ font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; color: color-mix(in srgb, var(--ink) 58%, transparent); white-space: nowrap; }
.asv-detail__kp{ font-size: 12px; color: color-mix(in srgb, var(--ink) 58%, transparent); }
.asv-detail__dot{ font-size: 12px; color: color-mix(in srgb, var(--ink) 35%, transparent); }
.asv-detail__state{ margin-left: auto; font-size: 12px; font-weight: 600; padding: 4px 10px; border-radius: 999px; white-space: nowrap;
  background: var(--card); border: .8px solid var(--line); color: var(--sub); }
.asv-detail__state.is-ok{ background: color-mix(in srgb, #4d9e5f 14%, var(--card)); border-color: color-mix(in srgb, #4d9e5f 34%, var(--card)); color: color-mix(in srgb, #4d9e5f 80%, #333); }
.asv-detail__state.is-bad{ background: color-mix(in srgb, #cf5b52 13%, var(--card)); border-color: color-mix(in srgb, #cf5b52 34%, var(--card)); color: color-mix(in srgb, #cf5b52 80%, #333); }
.asv-detail__state.is-open{ background: color-mix(in srgb, #c9932f 15%, var(--card)); border-color: color-mix(in srgb, #c9932f 36%, var(--card)); color: color-mix(in srgb, #c9932f 78%, #333); }
html[data-theme="dark"] .asv-detail__state.is-ok{ color: color-mix(in srgb, #4d9e5f 60%, #fff); }
html[data-theme="dark"] .asv-detail__state.is-bad{ color: color-mix(in srgb, #cf5b52 55%, #fff); }
html[data-theme="dark"] .asv-detail__state.is-open{ color: color-mix(in srgb, #c9932f 55%, #fff); }

.asv-detail__facts{ display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0;
  padding-top: 11px; border-top: .8px solid color-mix(in srgb, var(--kc, #5079d9) 20%, transparent); }
.asv-fact{ padding: 0 11px; border-left: .8px solid color-mix(in srgb, var(--kc, #5079d9) 18%, transparent); }
.asv-fact:first-child{ padding-left: 0; border-left: 0; }
.asv-fact span{ display: block; font-size: 11px; color: color-mix(in srgb, var(--ink) 64%, transparent); }
.asv-fact b{ display: block; margin-top: 3px; font-size: 17px; font-weight: 700; color: var(--ink);
  font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.asv-detail__actions{ display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.asv-detail__actions .primary{ height: 34px; min-height: 34px; padding: 0 16px; font-size: 12px; border-radius: 8px; }
.asv-detail__actions button{ height: 34px; min-height: 34px; padding: 0 14px; font-size: 12px; border-radius: 8px; }
.asv-hint{ margin-left: auto; font-size: 10px; color: color-mix(in srgb, var(--ink) 48%, transparent); }

/* ---------- 页脚 / toast ---------- */
.asv-foot{ display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; flex-wrap: wrap; padding: 2px; color: var(--sub); font-size: 10.5px; line-height: 1.7; }
.asv-foot b{ color: var(--ink); font-weight: 600; }
.asv-foot .kbds{ display: inline-flex; flex-wrap: wrap; gap: 5px 9px; align-items: center; }
.asv-foot .kbd{ background: var(--card); border-color: var(--line); }
.asv-toast{
  position: fixed; left: 50%; bottom: 24px; transform: translate(-50%, 10px); z-index: 60;
  padding: 9px 15px; border-radius: 9px; font-size: 12px; color: var(--ink);
  background: color-mix(in srgb, var(--card) 92%, transparent); border: .8px solid var(--line);
  box-shadow: 0 10px 26px rgb(0 0 0 / .14); backdrop-filter: blur(12px);
  opacity: 0; pointer-events: none; transition: opacity .16s ease, transform .16s ease;
}
.asv-toast.is-on{ opacity: 1; transform: translate(-50%, 0); }

/* ---------- 响应式 ---------- */
@media (max-width: 1000px){
  .asv-layout{ grid-template-columns: 1fr; }
  .asv-col--right{ order: -1; }
  .asv-hero{ grid-template-columns: 1fr; gap: 8px; }
  .asv-stackrow{ padding: 14px 60px 18px 2px; overflow-x: auto; overflow-y: hidden; }
}
@media (max-width: 760px){
  .asv-topbar__meta{ display: none; }
  .asv-main{ padding-top: 16px; gap: 12px; }
  .asv-head h1{ font-size: 22px; }
  .asv-tools{ width: 100%; justify-content: space-between; }
  .asv-hero{ padding: 0; }
  .asv-bignum{ font-size: 46px; }
  .asv-hero__desc{ font-size: 12px; }
  .asv-stackrow{ justify-content: flex-start; padding: 12px 44px 16px 2px; overflow-x: auto; overflow-y: hidden;
    -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .asv-metric{ width: 158px; min-height: 118px; margin-right: -28px; padding: 12px 12px 10px; }
  .asv-metric__value{ font-size: 24px; }
  .asv-metric__value.is-long{ font-size: 19px; }
  .asv-panel{ padding: 14px 14px 15px; }
  .asv-table{ --cols: minmax(0,1fr) 38px 82px; }
  .asv-col-qty, .asv-col-rate{ display: none; }
  .asv-table.is-exam{ --cols: minmax(0,1fr) 56px; }
  .asv-cell-name b{ font-size: 12px; }
  .asv-table--pace{ --cols: minmax(0,1fr) 48px 50px; }
  .asv-col-target{ display: none; }
  .asv-gauge{ display: none; }
  .asv-cell-name small{ display: none; }
  .asv-pace-stack{ justify-content: flex-start; padding: 14px 36px 14px 2px; overflow-x: auto; overflow-y: hidden;
    -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .asv-pace-card{ width: 176px; min-height: 108px; margin-right: -26px; }
  .asv-pace-card__value{ font-size: 24px; }
  .asv-cells{ grid-template-columns: repeat(auto-fill, minmax(33px, 1fr)); gap: 5px; }
  .asv-detail__facts{ grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 12px; }
  .asv-fact:nth-child(odd){ padding-left: 0; border-left: 0; }
  .asv-fact:nth-child(n+3){ border-top: .8px solid color-mix(in srgb, var(--kc, #5079d9) 16%, transparent); padding-top: 10px; }
  .asv-hint{ display: none; }
  .asv-foot .kbds{ display: none; }
}
@media (max-width: 420px){
  .asv-timer i{ display: none; }
  .asv-switch__label{ display: none; }
  .asv-hero__bottom{ gap: 8px; }
  .asv-legendline{ font-size: 9.5px; gap: 4px 9px; }
}
@media (prefers-reduced-motion: reduce){
  .asv, .asv *, .asv *::before, .asv *::after{ transition: none !important; animation: none !important; }
}

/* ===== 答题卡 v2（全屏叠层）===== */
.asv{ position: fixed; inset: 0; z-index: 58; overflow-y: auto; overscroll-behavior: contain;
  background: var(--s-page-texture, var(--bg)); padding-bottom: 36px; }
.asv i{ font-style: normal; }
.asv .primary{ color:#fff; }
html[data-theme="dark"] .asv{ background: repeating-linear-gradient(90deg, #191919 0 3.6px, #1c1c1c 3.6px 7.2px); }
.asv-topbar{ border-radius: 0; }
.asv-main{ padding-top: 18px; }
.asv-col--right{ min-width: 0; }
@media (max-width: 1000px){ .asv-panel{ margin-bottom: 0; } }
.asv-foot{ padding: 0 2px; }

/* ===== 掌握度 v3：板块行 / 影响面板 / 详情条 ===== */
.asv-cell-name .asv-mline b{ display: inline; }
.asv-mline{ display: block; margin-top: 2px; font-size: 10px; color: color-mix(in srgb, var(--ink) 56%, transparent);
  font-variant-numeric: tabular-nums; }
.asv-mline b{ margin-left: 2px; font-weight: 700; }
.asv-mline__dot{ margin: 0 3px; opacity: .45; }
.asv-mline.is-off{ opacity: .72; }
.asv .is-up{ color: color-mix(in srgb, #4d9e5f 82%, #333); }
.asv .is-down{ color: color-mix(in srgb, #cf5b52 82%, #333); }
.asv .is-flat{ color: var(--sub); }
html[data-theme="dark"] .asv .is-up{ color: color-mix(in srgb, #4d9e5f 58%, #fff); }
html[data-theme="dark"] .asv .is-down{ color: color-mix(in srgb, #cf5b52 58%, #fff); }

.asv-mpanel__sum{ display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 2px 0 10px; }
.asv-mpanel__mean{ display: flex; flex-direction: column; min-width: 102px; }
.asv-mpanel__mean b{ font-size: 30px; font-weight: 700; line-height: 1; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; color: var(--ink); }
.asv-mpanel__mean.is-up b{ color: color-mix(in srgb, #4d9e5f 82%, #333); }
.asv-mpanel__mean.is-down b{ color: color-mix(in srgb, #cf5b52 82%, #333); }
.asv-mpanel__mean span{ margin-top: 5px; font-size: 10.5px; color: var(--sub); }
.asv-mpanel__facts{ display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 11px; color: var(--sub); }
.asv-mpanel__facts b{ font-size: 13px; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
.asv-mtop{ list-style: none; margin: 0; padding: 0; border-top: .8px solid var(--line); }
.asv-mtop li{ display: grid; grid-template-columns: 6px minmax(0, 1fr) 64px 44px; align-items: center; gap: 8px;
  padding: 7px 0; border-bottom: .8px solid color-mix(in srgb, var(--line) 72%, transparent); }
.asv-mtop li::before{ content: ""; width: 5px; height: 5px; border-radius: 1.5px; background: var(--kc); }
.asv-mtop li:last-child{ border-bottom: 0; }
.asv-mtop__name{ font-size: 11px; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asv-mtop__vals{ font-size: 10.5px; color: var(--sub); text-align: right; font-variant-numeric: tabular-nums; }
.asv-mtop__delta{ font-size: 11px; font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }
.asv-mtop__bar{ height: 5px; border-radius: 2px; background: color-mix(in srgb, var(--kc) 12%, var(--bg)); overflow: hidden; }
.asv-mtop__bar i{ display: block; height: 100%; border-radius: 2px; background: var(--kc); }
.asv-mpanel__note{ margin: 9px 0 0; font-size: 10px; color: var(--sub); line-height: 1.6; }
.asv-mpanel__empty{ margin: 4px 0 0; font-size: 11px; color: var(--sub); line-height: 1.6; }

.asv-dm{ margin-top: 10px; padding: 9px 11px 10px; border-radius: 9px;
  background: color-mix(in srgb, var(--kc, #5079d9) 7%, var(--card));
  border: .8px solid color-mix(in srgb, var(--kc, #5079d9) 20%, var(--card)); }
.asv-dm.is-off{ background: transparent; border: .8px dashed var(--line); font-size: 11px; color: var(--sub);
  line-height: 1.6; padding: 8px 11px; }
.asv-dm__head{ display: flex; align-items: baseline; gap: 7px; min-width: 0; }
.asv-dm__label{ font-size: 10.5px; color: color-mix(in srgb, var(--ink) 60%, transparent); }
.asv-dm__now{ font-size: 22px; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; }
.asv-dm__now small{ margin-left: 1px; font-size: 10px; font-weight: 600; opacity: .5; letter-spacing: 0; }
.asv-dm__delta{ font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }
.asv-dm__dot{ color: var(--sub); opacity: .6; }
.asv-dm__kp{ margin-left: auto; font-size: 10.5px; color: var(--sub); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asv-dm__pending{ font-size: 10px; color: var(--sub); }
.asv-dm__bar{ position: relative; height: 6px; margin: 8px 0 6px; border-radius: 3px;
  background: color-mix(in srgb, var(--kc) 10%, var(--bg)); overflow: hidden; }
.asv-dm__bar i{ display: block; height: 100%; border-radius: 3px; background: var(--kc); }
.asv-dm__bar em{ position: absolute; top: -2px; width: 2px; height: 10px; border-radius: 1px;
  background: color-mix(in srgb, var(--kc) 70%, var(--ink)); opacity: .55; transform: translateX(-1px); }
.asv-dm__meta{ font-size: 10px; color: var(--sub); font-variant-numeric: tabular-nums; }
html[data-theme="dark"] .asv-dm__bar{ background: rgb(255 255 255 / .08); }
@media (max-width: 760px){
  .asv-mtop li{ grid-template-columns: 6px minmax(0, 1fr) 58px 40px; }
  .asv-mpanel__mean b{ font-size: 26px; }
}
@media (max-width: 760px){
  .asv-cell-name .asv-mline{ display: block; }
}

/* ===== 答题卡模式 / 掌握度精简 ===== */
.asv-layout.is-cardonly{ grid-template-columns: minmax(0, 1fr); }
.asv-layout.is-cardonly .asv-col--right{ width: 100%; max-width: 760px; margin: 0 auto; }
.asv-cardonly-bar{ display: flex; align-items: center; gap: 16px; padding: 0 2px 10px;
  font-size: 11px; color: var(--sub); }
.asv-cardonly-bar b{ font-size: 15px; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
.asv-cardonly-bar__time{ margin-left: auto; font-variant-numeric: tabular-nums; }

.asv-mtotal{ display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; padding: 2px 0 8px; }
.asv-mtotal__now{ display: flex; align-items: baseline; gap: 5px; font-size: 10.5px; color: var(--sub); }
.asv-mtotal__now b{ font-size: 34px; font-weight: 700; line-height: 1; color: var(--ink); letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; }
.asv-mtotal__now small{ font-size: 10px; opacity: .55; }
.asv-mtotal__delta{ display: flex; flex-direction: column; align-items: flex-end; gap: 3px;
  font-size: 10.5px; color: var(--sub); }
.asv-mtotal__delta b{ font-size: 24px; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; }
.asv-mbar{ height: 6px; border-radius: 3px; overflow: hidden;
  background: color-mix(in srgb, #5079d9 10%, var(--bg)); margin: 2px 0 7px; }
.asv-mbar i{ display: block; height: 100%; border-radius: 3px; background: #5079d9; }
.asv-mmeta{ margin: 0; font-size: 10.5px; color: var(--sub); font-variant-numeric: tabular-nums; line-height: 1.6; }
.asv-mlink{ display: inline-block; margin-top: 8px; font-size: 11px; color: var(--blue); text-decoration: none; }
.asv-mlink:hover{ text-decoration: underline; }
@media (max-width: 760px){
  .asv-cardonly-bar{ gap: 10px; font-size: 10.5px; }
  .asv-mtotal__now b{ font-size: 30px; }
}

/* hero 卡组：减少叠压，避免卡片边缘/标签互相遮挡 */
.asv-metric{ width: 160px; margin-right: -12px; }
@media (max-width: 760px){ .asv-metric{ width: 150px; margin-right: -12px; } }

/* ===== 知识画像：知识点掌握明细 ===== */
.kmastery{ border-top: .8px solid var(--line); }
.krow{ display: grid; grid-template-columns: minmax(0, 1.6fr) 56px 140px 56px 52px 52px; align-items: center; gap: 8px;
  padding: 7px 0; border-bottom: .8px solid color-mix(in srgb, var(--line) 72%, transparent); font-size: 12px; }
.krow:last-child{ border-bottom: 0; }
.khead{ font-size: 10.5px; color: var(--sub); padding-top: 6px; }
.ksubj{ display:flex; align-items:center; justify-content:space-between; padding: 12px 0 4px; font-size: 11px; font-weight: 600; color: var(--sub); border-bottom: .8px solid var(--line); }
.ksubj b{ font-size: 11px; color: var(--ink); font-variant-numeric: tabular-nums; }
.khead .knum{ text-align: right; }
.kname{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.km{ display: flex; align-items: center; gap: 6px; }
.km b{ width: 24px; text-align: right; font-size: 12px; font-variant-numeric: tabular-nums; }
.km i{ flex: 1; height: 4px; border-radius: 2px; background: var(--bg); overflow: hidden; }
.km em{ display: block; height: 100%; border-radius: 2px; }
.knum{ text-align: right; color: var(--sub); font-variant-numeric: tabular-nums; }
@media (max-width: 760px){
  .krow{ grid-template-columns: minmax(0, 1fr) 42px 88px 42px 40px 40px; gap: 5px; font-size: 10.5px; }
  .km b{ width: 22px; font-size: 12px; }
}

/* ===== 知识画像：分数 hero ===== */
.pv{ display: flex; flex-direction: column; gap: 13px; }
.pv-hero{ position: relative; overflow: hidden; isolation: isolate;
  display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 26px; padding: 22px 24px;
  border-radius: 16px; background: var(--card); border: .8px solid var(--line);
  box-shadow: 0 8px 24px rgb(25 31 45 / .05); }
.pv-hero::before{ content: ""; position: absolute; inset: -30%; z-index: 0; pointer-events: none;
  background:
    radial-gradient(38% 55% at 12% 18%, color-mix(in srgb, #5079d9 40%, transparent), transparent 70%),
    radial-gradient(32% 50% at 86% 22%, color-mix(in srgb, #2f9fa8 32%, transparent), transparent 70%),
    radial-gradient(40% 55% at 58% 88%, color-mix(in srgb, #8e6fc1 30%, transparent), transparent 72%);
  filter: blur(28px); opacity: .52; animation: pvFlow 18s ease-in-out infinite alternate; }
.pv-hero > *{ position: relative; z-index: 1; }
html[data-theme="dark"] .pv-hero::before{ opacity: .3; }
@keyframes pvFlow{
  0%{ transform: translate3d(-2%, -1%, 0) rotate(0deg) scale(1); }
  100%{ transform: translate3d(2%, 2%, 0) rotate(8deg) scale(1.08); }
}
@media (prefers-reduced-motion: reduce){ .pv-hero::before{ animation: none; } }
.pv-left{ min-width: 0; display: flex; flex-direction: column; }
.pv-tabs{ align-self: flex-start; display: inline-flex; gap: 2px; padding: 2px; border-radius: 9px; background: var(--bg);
  border: .8px solid var(--line); }
.pv-tabs button{ min-height: 28px; padding: 3px 14px; border: 0; border-radius: 7px; background: transparent;
  box-shadow: none; font-size: 12px; color: var(--sub); }
.pv-tabs button[aria-pressed="true"]{ background: var(--card); color: var(--ink); font-weight: 700;
  box-shadow: 0 1px 2px rgb(0 0 0 / .08); }
.pv-eyebrow{ margin: 18px 0 0; font-size: 11px; color: var(--sub); letter-spacing: .06em; }
.pv-big{ display: flex; align-items: baseline; gap: 7px; flex: none; }
.pv-big b{ font: 400 clamp(64px, 7.2vw, 96px)/.9 "Instrument Serif", var(--font-serif);
  letter-spacing: -.02em; font-variant-numeric: tabular-nums; color: var(--ink); }
.pv-big small{ font-size: 17px; font-weight: 600; color: var(--sub); }
.pv-copy{ margin: 12px 0 0; font-family: var(--font-serif); font-size: 16px; font-weight: 600;
  line-height: 1.7; color: var(--ink); opacity: .88; max-width: 31em; }
.pv-actions{ display: flex; align-items: center; gap: 10px; margin-top: auto; padding-top: 14px; }
.pv-actions .primary{ min-height: 36px; padding: 0 17px; font-size: 12px; border-radius: 9px; }
.pv-secondary{ display: inline-flex; align-items: center; justify-content: center; min-height: 36px; padding: 0 16px;
  border-radius: 9px; border: .8px solid var(--line); background: transparent; color: var(--ink);
  font-size: 12px; text-decoration: none; }
.pv-secondary:hover{ background: color-mix(in srgb, var(--ink) 4%, transparent); }
.pv-right{ display: flex; flex-direction: column; gap: 0; min-width: 0; }
.pv-stats{ position: relative; z-index: 2; display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin-bottom: -16px; }
.pv-stat{ position: relative; width: 100%; height: 74px; padding: 10px 13px;
  display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: 5px;
  border-radius: 12px; text-align: left; cursor: pointer;
  background: color-mix(in srgb, var(--sc, #5079d9) 8%, rgb(255 255 255 / 44%));
  border: .8px solid rgb(255 255 255 / .75);
  -webkit-backdrop-filter: blur(10px) saturate(1.35); backdrop-filter: blur(10px) saturate(1.35);
  box-shadow: 0 4px 12px rgb(25 31 45 / .06), inset 0 1px 0 rgb(255 255 255 / .62);
  z-index: calc(1 + var(--i, 0)); transition: transform .2s, background .2s, box-shadow .2s; }
.pv-stat:nth-child(1){ transform: translate(0, 0); }
.pv-stat:nth-child(2){ transform: translate(-6px, 10px); z-index: 2; }
.pv-stat:nth-child(3){ transform: translate(6px, -8px); z-index: 3; }
.pv-stat:nth-child(4){ transform: translate(0, 4px); z-index: 4; }
.pv-stat:hover{ transform: translate(-2px, 2px); z-index: 20; }
.pv-stat:focus-visible{ outline: 2px solid var(--sc); outline-offset: 2px; z-index: 20; }
.pv-stat[aria-pressed="true"]{ background: color-mix(in srgb, var(--sc, #5079d9) 86%, #283344);
  color: #fff; border-color: color-mix(in srgb, var(--sc, #5079d9) 70%, #000);
  transform: translate(-3px, -3px) scale(1.01); z-index: 30;
  box-shadow: 0 10px 24px rgb(25 31 45 / .18); }
.pv-stat__label{ font-size: 10.5px; color: var(--sub); }
.pv-stat__value{ font-size: 21px; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; color: var(--ink); }
.pv-stat__value small{ margin-left: 1px; font-size: 10px; font-weight: 600; opacity: .55; }
.pv-stat[aria-pressed="true"] .pv-stat__label{ color: rgb(255 255 255 / .78); }
.pv-stat[aria-pressed="true"] .pv-stat__value{ color: #fff; }
html[data-theme="dark"] .pv-stat{ background: color-mix(in srgb, var(--sc, #5079d9) 14%, #262626);
  border-color: rgb(255 255 255 / .12); box-shadow: 0 4px 12px rgb(0 0 0 / .2); }
.pv-stats b{ display: block; font-size: 21px; font-weight: 700; line-height: 1.1;
  font-variant-numeric: tabular-nums; color: var(--ink); }
.pv-stats span{ display: block; margin-top: 2px; font-size: 10.5px; color: var(--sub); }
.pv-heat{ position: relative; z-index: 0; margin-top: auto; min-height: 108px; padding: 26px 14px 12px; border-radius: 11px;
  background: color-mix(in srgb, #5079d9 6%, rgb(255 255 255 / 44%));
  border: .8px solid rgb(255 255 255 / .75);
  -webkit-backdrop-filter: blur(9px) saturate(1.3); backdrop-filter: blur(9px) saturate(1.3);
  box-shadow: 0 3px 10px rgb(25 31 45 / .05), inset 0 1px 0 rgb(255 255 255 / .65); }
html[data-theme="dark"] .pv-heat{ background: color-mix(in srgb, #5079d9 13%, #262626);
  border-color: rgb(255 255 255 / .12); box-shadow: 0 3px 10px rgb(0 0 0 / .2); }
.pv-heat__head{ display: flex; justify-content: space-between; align-items: baseline;
  font-size: 10.5px; color: var(--sub); }
.pv-heat__head em{ font-style: normal; opacity: .7; }
.pv-heat__grid{ display: grid; grid-template-columns: repeat(28, 9px); grid-auto-rows: 9px; gap: 2px; margin-top: 8px; }
.pv-heat__grid i{ width: 9px; height: 9px; border-radius: 2px;
  background: color-mix(in srgb, #5079d9 7%, transparent); }
html[data-theme="dark"] .pv-heat__grid i{ background: color-mix(in srgb, #5079d9 12%, transparent); }
.pv-heat__grid i.l1{ background: color-mix(in srgb, #5079d9 22%, var(--bg)); }
.pv-heat__grid i.l2{ background: color-mix(in srgb, #5079d9 48%, var(--bg)); }
.pv-heat__grid i.l3{ background: #5079d9; }
.pv-detail__head{ display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.pv-detail__head h2{ margin: 0; font-size: 14px; font-weight: 700; }
.pv-detail__head p{ margin: 4px 0 0; font-size: 11px; color: var(--sub); }
.pv-tag{ flex: none; padding: 4px 10px; border-radius: 999px; border: .8px solid var(--line);
  background: var(--bg); font-size: 11px; color: var(--sub); font-variant-numeric: tabular-nums; }
@media (max-width: 900px){
  .pv-hero{ grid-template-columns: 1fr; padding: 18px; gap: 18px; }
  .pv-big b{ font-size: 56px; }
  .pv-copy{ margin-top: 8px; font-size: 14.5px; max-width: none; }
  .pv-actions{ margin-top: 4px; padding-top: 0; }
  .pv-stats{ margin-bottom: 12px; }
  .pv-stat{ height: 66px; }
  .pv-stat:nth-child(2){ transform: translate(-8px, 8px); }
  .pv-stat:nth-child(3){ transform: translate(8px, -8px); }
  .pv-stat:nth-child(4){ transform: translate(0, 0); }
  .pv-stat__value{ font-size: 19px; }
  .pv-heat{ margin-top: 0; min-height: 0; }
  .pv-heat__grid{ grid-template-columns: repeat(28, 9px); gap: 2px; }
}

/* 画像日历 hover 提示 */
.pv-tip{ position: fixed; z-index: 200; transform: translateX(-50%); padding: 4px 9px; border-radius: 7px;
  background: rgb(28 30 34 / .94); color: #fff; font-size: 10.5px; line-height: 1.5; white-space: nowrap;
  box-shadow: 0 6px 18px rgb(0 0 0 / .18); pointer-events: none; }
.pv-heat__grid i{ cursor: default; }
.pv-heat__grid i:focus-visible{ outline: 2px solid var(--blue); outline-offset: 1px; }

/* ===== 手机端：答题报告 metric / 用时卡 不再横向裁切 ===== */
@media (max-width: 760px){
  .asv-stackrow{ display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 12px 0 14px; overflow: visible; }
  .asv-metric{ width: auto; min-height: 112px; margin-right: 0; padding: 12px 10px;
    --tilt: 0deg; --rise: 0px; transform: none; border-radius: 12px; }
  .asv-metric:nth-child(n){ --tilt: 0deg; --rise: 0px; }
  .asv-metric:hover{ transform: none; }
  .asv-metric[aria-pressed="true"]{ transform: none; }
  .asv-metric__value{ font-size: 25px; }
  .asv-metric__value.is-long{ font-size: 19px; }
  .asv-metric__sub{ font-size: 10px; }
  .asv-pace-stack{ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px;
    padding: 12px 0; overflow: visible; }
  .asv-pace-card{ width: auto; min-height: 96px; margin-right: 0; padding: 10px 6px;
    --tilt: 0deg; --rise: 0px; transform: none; }
  .asv-pace-card:nth-child(n){ --tilt: 0deg; --rise: 0px; }
  .asv-pace-card:hover, .asv-pace-card[aria-pressed="true"]{ transform: none; }
  .asv-pace-card__value{ font-size: 20px; }
  .asv-pace-card__label{ font-size: 9.5px; gap: 3px; }
  .asv-pace-card__sub{ font-size: 9.5px; }
}

/* ===== 手机端：画像 2×2 不重叠、明细精简为 4 列 ===== */
@media (max-width: 900px){
  .pv-stats{ grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 0; }
  .pv-stat{ height: auto; min-height: 64px; transform: none !important; }
  .pv-stat:nth-child(n){ transform: none !important; }
  .pv-stat[aria-pressed="true"]{ transform: translateY(-2px) !important; }
  .pv-heat{ margin-top: 12px; min-height: 0; padding: 13px 14px 12px; }
  .pv-heat__grid{ grid-template-columns: repeat(28, 9px); gap: 2px; }
}
@media (max-width: 760px){
  .krow{ grid-template-columns: minmax(0, 1fr) 38px 82px 44px; }
  .krow > :nth-child(5), .krow > :nth-child(6){ display: none; }
  .km b{ width: 20px; }
}

/* 手机端日历：21×4 方格（28 列会撑出卡片） */
@media (max-width: 900px){
  .pv-heat__grid{ grid-template-columns: repeat(21, 10px); grid-auto-rows: 10px; gap: 3px; }
  .pv-heat__grid i{ width: 10px; height: 10px; }
}

/* KaTeX 自定义渲染器的容器（替代 auto-render 插入的裸 span） */
.tex-inline{ display: inline; }
.tex-display{ display: block; margin: .55em 0; max-width: 100%; overflow-x: auto; overflow-y: hidden; }
.tex-display .katex-display{ margin: 0; }
.tex-label{ font-family: var(--s-font); font-size: .9em; margin-left: .15em; color: var(--ink); }

/* 公式排版前：先隐藏原始 $...$，用骨架占位；渲染完成由 tex() 移除 .tex-pending */
.tex-pending{ position: relative; }
.qcard.tex-pending{ min-height: 420px; }
.qcard.tex-pending > *{ display: none; }
.qcard.tex-pending::after{
  content:""; position:absolute; z-index:1; left:20px; right:20px; top:64px; height:calc(100% - 84px);
  pointer-events:none; border-radius:8px;
  background:
    linear-gradient(#e9e9e9,#e9e9e9) 0 8px/42% 15px no-repeat,
    linear-gradient(#ededed,#ededed) 0 40px/92% 11px no-repeat,
    linear-gradient(#ededed,#ededed) 0 60px/84% 11px no-repeat,
    linear-gradient(#ededed,#ededed) 0 80px/68% 11px no-repeat,
    linear-gradient(#efefef,#efefef) 0 122px/100% 34px no-repeat,
    linear-gradient(#efefef,#efefef) 0 164px/100% 34px no-repeat,
    linear-gradient(#efefef,#efefef) 0 206px/100% 34px no-repeat,
    linear-gradient(#efefef,#efefef) 0 248px/100% 34px no-repeat;
  opacity:.9; animation:texPending 1.1s ease-in-out infinite alternate;
}
.material.tex-pending .matbody{ display: none; }
.material.tex-pending{ min-height: 160px; }
.material.tex-pending::after{
  content:""; position:absolute; z-index:1; left:18px; right:18px; top:56px; height:calc(100% - 76px);
  pointer-events:none; border-radius:8px;
  background:
    linear-gradient(#ededed,#ededed) 0 4px/96% 11px no-repeat,
    linear-gradient(#ededed,#ededed) 0 24px/88% 11px no-repeat,
    linear-gradient(#ededed,#ededed) 0 44px/94% 11px no-repeat,
    linear-gradient(#ededed,#ededed) 0 64px/70% 11px no-repeat;
  opacity:.8; animation:texPending 1.1s ease-in-out infinite alternate;
}
.analysis.tex-pending{ min-height: 90px; color: transparent; }
.analysis.tex-pending > *{ display: none; }
.analysis.tex-pending::after{
  content:""; position:absolute; z-index:1; left:14px; right:14px; top:32px; height:90px;
  pointer-events:none; border-radius:6px;
  background:linear-gradient(#ededed,#ededed) 0 0/92% 11px no-repeat,
             linear-gradient(#ededed,#ededed) 0 20px/84% 11px no-repeat,
             linear-gradient(#ededed,#ededed) 0 40px/88% 11px no-repeat,
             linear-gradient(#ededed,#ededed) 0 60px/58% 11px no-repeat;
  opacity:.8; animation:texPending 1.1s ease-in-out infinite alternate;
}
.l-quizwrap.tex-pending{ min-height: 180px; }
.l-quizwrap.tex-pending > *{ display: none; }
.l-quizwrap.tex-pending::after{
  content:""; position:absolute; z-index:1; left:0; right:0; top:8px; height:180px;
  pointer-events:none; border-radius:8px;
  background:linear-gradient(#ededed,#ededed) 0 0/72% 13px no-repeat,
             linear-gradient(#ededed,#ededed) 0 34px/94% 11px no-repeat,
             linear-gradient(#ededed,#ededed) 0 56px/86% 11px no-repeat,
             linear-gradient(#ededed,#ededed) 0 78px/90% 11px no-repeat;
  opacity:.8; animation:texPending 1.1s ease-in-out infinite alternate;
}
@keyframes texPending{ from{opacity:.45} to{opacity:.9} }
@media (prefers-reduced-motion: reduce){ .tex-pending::after{ animation:none } }

/* ==========================================================================
   AI 写作/翻译批改（docs/08 §7）
   沿用 Smartisan 语言：细描边、内凹轨道、灰阶为主 + 低饱和蓝强调。
   维度条严格用蓝阶三级（--ai-l1/l2/l3），不引入彩条。
   ========================================================================== */
.aig {
  --ai-l3: #5b87eb;   /* 佳 */
  --ai-l2: #b3caf6;   /* 中 */
  --ai-l1: #dce6fb;   /* 弱 */
  margin-top: 14px;
  border-top: 0.4px solid var(--line);
  padding-top: 14px;
}
html[data-theme="dark"] .aig {
  --ai-l3: #7da3f5;
  --ai-l2: #4d6da8;
  --ai-l1: #35476b;
}

/* ---- 汇总条 ---- */
.aig__head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; margin-bottom: 10px;
}
.aig__sum { display: flex; align-items: baseline; gap: 8px; }
.aig__sum-label { font-size: 13px; color: var(--sub); }
.aig__sum b { font: 600 26px/1 var(--s-font); color: var(--blue-deep, #4772e6);
  font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.aig__sum .muted { font-size: 13px; }
.aig__total { display: flex; align-items: baseline; gap: 6px; font-size: 13px; }
.aig__total b { font: 600 18px/1 var(--s-font); color: var(--ink);
  font-variant-numeric: tabular-nums; }

/* ---- 操作区 ---- */
.aig__actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.aig__actions button { padding: 5px 14px; min-height: 34px; }
.aig__btn { display: inline-flex; align-items: center; gap: 6px;
  box-shadow: 0 3px 10px rgba(110,105,240,.16), inset 0 0 0 .5px rgba(150,130,255,.28); }
.aig__spark { font-size: 13px; line-height: 1; opacity: .92; }
.aig__hint { font-size: 12px; color: var(--sub); margin: 4px 0 0; }
.aig__hint a { color: var(--blue); }
.aig__err { font-size: 12px; color: var(--red); margin: 6px 0; }

/* ---- 批改进度 ---- */
.aig__prog { margin: 10px 0; }
.aig__prog-bar {
  height: 4px; border-radius: 100px; background: rgba(0,0,0,.06);
  overflow: hidden; margin-bottom: 7px;
}
html[data-theme="dark"] .aig__prog-bar { background: rgba(255,255,255,.10); }
.aig__prog-bar i { display: block; height: 100%; border-radius: 100px;
  background: var(--s-grad-primary); transition: width .35s ease; }
.aig__prog .muted { font-size: 12px; display: inline-flex; align-items: center; }
.torb { display: inline-block; vertical-align: -3px; margin-right: 6px; flex: none; }


/* ---- 自评表单 ---- */
.aig__self {
  border: 0.5px solid var(--line); border-radius: var(--radius);
  padding: 12px 14px; margin: 10px 0; background: var(--card);
}
.aig__self-row { display: flex; align-items: center; justify-content: space-between;
  gap: 10px; padding: 7px 0; border-bottom: 0.4px solid var(--line); flex-wrap: wrap; }
.aig__self-row:last-of-type { border-bottom: 0; }
.aig__self-name { display: flex; flex-direction: column; gap: 2px; }
.aig__self-name b { font-size: 14px; }
.aig__self-name .muted { font-size: 11px; }
.aig__self-btns { display: flex; align-items: center; gap: 6px; }
.aig__g {
  width: 34px; height: 30px; padding: 0; font-size: 13px;
  border-radius: 6px; border: 0.4px solid var(--line); background: var(--card); color: var(--sub);
}
.aig__g.on { background: var(--s-grad-primary); color: #fff; border-color: transparent;
  box-shadow: var(--s-shadow-btn); }
.aig__self-score { min-width: 34px; text-align: right; font-variant-numeric: tabular-nums;
  color: var(--blue-deep, #4772e6); font-weight: 600; font-size: 14px; }
.aig__self-foot { display: flex; align-items: center; justify-content: space-between;
  gap: 10px; margin-top: 10px; flex-wrap: wrap; }
.aig__self-foot .muted { font-size: 11px; }
.aig__self-foot button { padding: 5px 14px; }

/* ---- 逐题结果卡 ---- */
.aig__card {
  border: 0.4px solid var(--line); border-radius: var(--radius);
  margin-top: 10px; overflow: hidden; background: var(--card);
}
.aig__card-head {
  display: flex; align-items: center; gap: 10px; padding: 10px 12px;
  cursor: pointer; user-select: none;
}
.aig__card-head:hover { background: rgba(0,0,0,.018); }
html[data-theme="dark"] .aig__card-head:hover { background: rgba(255,255,255,.05); }
.aig__card-title { display: flex; align-items: baseline; gap: 8px; flex: 1; min-width: 0; }
.aig__card-title b { font-size: 13px; font-weight: 600; }
.aig__card-title .muted { font-size: 11px; }
.aig__card-score { display: flex; align-items: baseline; gap: 3px; }
.aig__card-score b { font: 600 16px/1 var(--s-font);
  color: var(--blue-deep, #4772e6); font-variant-numeric: tabular-nums; }
.aig__card-score .muted { font-size: 12px; }
.aig__card-fail { font-size: 12px; color: var(--red); }
.aig__chev { width: 14px; height: 14px; color: var(--sub); transition: transform .2s ease; }
.aig__chev.open { transform: rotate(90deg); }

.aig__card-body { padding: 0 12px 12px; }

/* ---- 维度条 ---- */
.aig__dims { display: flex; flex-direction: column; gap: 8px; }
.aig__dim {
  display: grid; grid-template-columns: 62px minmax(60px, 1fr) 52px;
  align-items: center; gap: 8px 10px;
}
.aig__dim-name { font-size: 13px; color: var(--ink); font-weight: 500; }
.aig__dim-bar { height: 5px; border-radius: 100px; background: rgba(0,0,0,.06); overflow: hidden; }
html[data-theme="dark"] .aig__dim-bar { background: rgba(255,255,255,.10); }
.aig__dim-bar i { display: block; height: 100%; border-radius: 100px; transition: width .35s ease; }
.aig__dim-bar i { background: var(--dc, var(--ai-l2)); }
.aig__dim-num { font-size: 12px; color: var(--sub); text-align: right; font-variant-numeric: tabular-nums; }
.aig__dim-num b { font-size: 15px; font-weight: 600; color: var(--dc, var(--blue-deep, #4772e6)); }
.aig__dim-cmt { grid-column: 1 / -1; font-size: 11px; line-height: 1.5; margin-top: -2px; }

/* ---- 总评与清单 ---- */
.aig__comment { font-size: 13px; line-height: 1.65; margin: 12px 0 0; color: var(--ink); }
.aig__lists { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.aig__list-title { font-size: 12px; color: var(--sub); display: block; margin-bottom: 4px; }
.aig__list ul { margin: 0; padding-left: 18px; }
.aig__list li { font-size: 13px; line-height: 1.6; margin-bottom: 3px; }
.aig__warn { font-size: 12px; line-height: 1.65; color: var(--sub); margin: 10px 0 0; }

/* ---- 移动端 ---- */
@media (max-width: 700px) {
  .aig { margin-top: 12px; padding-top: 12px; }
  .aig__head { gap: 8px; }
  .aig__sum b { font-size: 23px; }
  .aig__total b { font-size: 17px; }
  .resultcard__grid b { font-size: 19px; }
  .aig__dim { grid-template-columns: 54px minmax(50px, 1fr) 46px; gap: 6px 8px; }
  .aig__card-body { padding: 0 10px 10px; }
  .aig__self-foot { flex-direction: column; align-items: stretch; }
  .aig__self-foot button { width: 100%; }
  .aig__g { width: 38px; height: 34px; }
}

/* ==========================================================================
   考试记录详情（回看页）
   规范：无灰底卡片；卡片内数字一律系统字 + tabular-nums（Instrument 只给 hero）；
   信息顺序 = 一句话结论 → 总分 → 构成 → 明细，先结论后数字。
   ========================================================================== */
.rp__bar { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.rp__title { font-size: 16px; font-weight: 600; }
.rp__meta { font-size: 12px; color: var(--sub); }
.rp__back { font-size: 12px; color: var(--sub); text-decoration: none; }
.rp__back:hover { color: var(--blue); }

.rp__verdict {
  margin: 12px 0 0; font-size: 14px; line-height: 1.75; color: var(--ink);
}

.rp__score {
  display: flex; align-items: baseline; gap: 8px; margin-top: 14px;
}
.rp__score-num {
  font: 600 44px/1 var(--s-font); color: var(--blue-deep, #4772e6);
  font-variant-numeric: tabular-nums; letter-spacing: -.02em;
}
.rp__score-full { font-size: 14px; color: var(--sub); font-variant-numeric: tabular-nums; }

/* 构成条：客观（深蓝）与写作（浅蓝）的长度即得分率 */
.rp__stack {
  display: flex; height: 7px; margin-top: 12px; border-radius: 100px;
  overflow: hidden; background: rgba(0,0,0,.055);
}
html[data-theme="dark"] .rp__stack { background: rgba(255,255,255,.10); }
.rp__seg { display: block; height: 100%; transition: width .4s ease; }
.rp__seg--obj { background: #5b87eb; }
.rp__seg--write { background: #b3caf6; }
html[data-theme="dark"] .rp__seg--obj { background: #7da3f5; }
html[data-theme="dark"] .rp__seg--write { background: #4d6da8; }

/* 明细：每项都带满分，避免"21 是什么"看不懂 */
.rp__ledger {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 0;
  margin-top: 14px; padding-top: 12px; border-top: 0.5px solid var(--line);
}
.rp__led {
  display: flex; align-items: baseline; gap: 7px; min-width: 0;
  padding-left: 14px; border-left: 0.5px solid var(--line);
}
.rp__led:first-child { padding-left: 0; border-left: 0; }
.rp__led-dot { width: 7px; height: 7px; border-radius: 2px; flex: none; transform: translateY(-1px); }
.rp__led-dot--obj { background: #5b87eb; }
.rp__led-dot--write { background: #b3caf6; }
html[data-theme="dark"] .rp__led-dot--obj { background: #7da3f5; }
html[data-theme="dark"] .rp__led-dot--write { background: #4d6da8; }
.rp__led-name { font-size: 12px; color: var(--sub); }
.rp__led-val { font: 600 17px/1 var(--s-font); color: var(--ink); font-variant-numeric: tabular-nums; }
.rp__led-max { font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }

@media (max-width: 700px) {
  .rp__score-num { font-size: 36px; }
  .rp__ledger { grid-template-columns: 1fr; gap: 8px; }
  .rp__led { padding-left: 0; border-left: 0; }
}

/* ==========================================================================
   设置页：个人信息卡 + 会员激活
   规范：白底卡、细描边，不用灰底块；数字一律系统字 + tabular-nums。
   ========================================================================== */
.pc { padding: 18px 20px 6px; }
.pc__head { display: flex; align-items: center; gap: 14px; }
.pc__avatar {
  width: 56px; height: 56px; border-radius: 16px; flex: none;
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 22px; font-weight: 600;
  box-shadow: 0 4px 10px rgba(0,0,0,.10);
}
.pc__id { min-width: 0; }
.pc__name { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pc__name-text {
  font-size: 18px; font-weight: 600; color: var(--ink);
  max-width: 46vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pc__badge {
  font-size: 11px; line-height: 1; padding: 4px 8px; border-radius: 999px;
  border: 0.5px solid transparent; white-space: nowrap;
}
/* 会员徽章：文字由 interface-motion-craft 的 metal 效果渲染，这里只给容器 */
.pc__badge--vip {
  display: inline-flex; align-items: center;
  padding: 3px 9px 3px 8px;
  background: #f4f5f7;
  border-color: #dcdfe4;
}
html[data-theme="dark"] .pc__badge--vip { background: #2b2f36; border-color: #3c424b; }

/* metal 渲染器塞进小徽章里：压掉它的默认大字号与 120px 最小高度 */

/* thinking orb 宿主 */
.morb { display: inline-flex; width: 20px; height: 20px; vertical-align: -5px; margin-right: 6px; flex: none; }
.morb .imc-effect { width: 20px; height: 20px; display: block; }
/* reduced-motion 时插件会露出英文状态文本；旁边已有中文「正在批改」，隐藏之 */
@media (prefers-reduced-motion: reduce) {
  .morb .imc-orbs__status { display: none; }
}
.pc__badge--free { color: var(--sub); border-color: var(--line); }
.pc__meta { font-size: 12px; color: var(--sub); margin-top: 5px; font-variant-numeric: tabular-nums; }

.pc__rows { margin-top: 16px; border-top: 0.5px solid var(--line); }
.pc__row {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  padding: 12px 0; border-bottom: 0.5px solid var(--line); flex-wrap: wrap;
}
.pc__row:last-child { border-bottom: 0; }
.pc__row-label { font-size: 14px; color: var(--ink); }
.pc__row-edit { display: flex; align-items: center; gap: 8px; }
.pc__row-edit input { width: 180px; }
.pc__quota { font: 600 14px var(--s-font); color: var(--blue-deep, #4772e6); font-variant-numeric: tabular-nums; }

.pc__redeem { display: flex; gap: 8px; }
.pc__redeem input {
  /* 不加 text-transform：前缀 0cto 需保持小写，码体由 JS 归一为大写 */
  flex: 1; min-width: 0; letter-spacing: .06em;
  font-variant-numeric: tabular-nums;
}
.pc__redeem button { flex: none; padding: 0 18px; }
.pc__msg { font-size: 12px; color: var(--green); margin: 8px 0 0; }
.pc__msg.bad { color: var(--red); }

@media (max-width: 700px) {
  .pc { padding: 16px 14px 4px; }
  .pc__avatar { width: 48px; height: 48px; border-radius: 14px; font-size: 19px; }
  .pc__name-text { font-size: 16px; max-width: 40vw; }
  .pc__row-edit input { width: 120px; }
  .pc__redeem { flex-direction: column; }
  .pc__redeem button { min-height: 40px; }
}
.pc__tag{ font-size:10.5px; font-weight:400; color:#8a6d1f; background:#fbf0d2; border:.5px solid #eddaa8; border-radius:999px; padding:1px 7px; margin-left:6px; vertical-align:1px }
html[data-theme="dark"] .pc__tag{ color:#e7c877; background:#3a3320; border-color:#55492a }

/* 失败态与注入标记（成本护栏/防注入的前端提示） */
.aig__fail-title { font-size: 14px; font-weight: 600; color: var(--red); margin: 2px 0 4px; }
.aig__link { font-size: 12px; color: var(--blue); text-decoration: none; align-self: center; }
.aig__link:hover { text-decoration: underline; }
.aig__flag {
  font-size: 10.5px; line-height: 1; padding: 3px 7px; border-radius: 999px;
  color: var(--orange); border: 0.5px solid currentColor; white-space: nowrap; flex: none;
}

/* 分数波动说明与批改报告导出 */
.aig__note { font-size: 12px; line-height: 1.7; color: var(--sub); margin: 8px 0 0; }
.aig__note b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.aig__foot { display: flex; align-items: center; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.aig__mini {
  font-size: 12px; padding: 5px 12px; border-radius: 7px;
  border: 0.5px solid var(--line); background: var(--card); color: var(--ink); cursor: pointer;
}
.aig__mini:hover { border-color: var(--blue); color: var(--blue); }

/* 手动记分：成绩单逐题输入 + 练习页行内输入（不做 ABCD 折算，只用于自统计） */
.mscore {
  margin-top: 12px; padding: 12px 14px;
  border: 0.5px solid var(--line); border-radius: 10px; background: var(--card);
}
.mscore--inline {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 10px; padding: 10px 12px;
}
.mscore__head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.mscore__head b { font-size: 13px; }
.mscore__head .muted { font-size: 12px; }
.mscore__row {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 8px 0; border-top: 0.5px solid var(--line);
}
.mscore__row:first-of-type { border-top: 0; }
.mscore__kind { min-width: 140px; display: flex; align-items: baseline; gap: 6px; font-size: 13px; }
.mscore__kind .muted { font-size: 12px; }
.mscore__input {
  width: 92px; padding: 6px 8px; border-radius: 7px;
  border: 0.5px solid var(--line); background: var(--card); color: var(--ink);
  font-variant-numeric: tabular-nums; font-size: 13px;
}
.mscore__input:focus { outline: none; border-color: var(--blue); }

/* 交卷后解析回看：顶部状态条 + AI 卡里的作答原文 */
.reviewbar {
  display: flex; align-items: center; gap: 10px;
  max-width: 1180px; margin: 0 auto 10px; padding: 8px 14px;
  border: 0.5px solid var(--line); border-radius: 10px; background: var(--card);
}
.reviewbar__tag {
  font-size: 12px; font-weight: 700; color: var(--blue);
  padding: 3px 9px; border-radius: 6px; background: rgba(80, 121, 217, 0.1);
}
.reviewbar__btn {
  font-size: 13px; padding: 5px 14px; border-radius: 8px;
  border: 0.5px solid var(--line); background: var(--card); color: var(--ink); cursor: pointer;
}
.reviewbar__btn:hover { border-color: var(--blue); color: var(--blue); }
.aig__origin {
  margin-top: 12px; padding: 10px 12px; border: 0.5px dashed var(--line);
  border-radius: 8px; background: var(--bg);
}
.aig__origin-title { display: block; font-size: 12px; color: var(--sub); margin-bottom: 5px; }
.aig__origin-text {
  margin: 0; white-space: pre-wrap; font-family: var(--font-serif);
  font-size: 13px; line-height: 1.75; color: var(--ink);
  max-height: 220px; overflow: auto;
}

/* ==========================================================================
   进阶分析（会员增值）：趋势 / 错因归因 / 能力雷达
   三条竖卡，数据密度高但不堆色；只用蓝灰阶，符合全站配色约束。
   ========================================================================== */
.adv { margin-top: 20px; }
.adv__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.adv__head h2 { margin: 0; font-size: 18px; }
.adv__head p { margin: 4px 0 0; font-size: 12px; }
.adv__tabs { display: flex; gap: 6px; }
.adv__tabs button {
  font-size: 12px; padding: 5px 12px; border-radius: 8px; cursor: pointer;
  border: 0.5px solid var(--line); background: var(--card); color: var(--ink);
}
.adv__tabs button.on { border-color: var(--blue); color: var(--blue); }
.adv__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.adv__card { padding: 14px 16px; }
.adv__card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.adv__card-head b { font-size: 14px; }
.adv__card-head .muted { font-size: 12px; }
.adv__spark { width: 100%; height: 96px; display: block; }
.adv__spark-area { fill: rgba(80, 121, 217, 0.10); stroke: none; }
.adv__spark-line { fill: none; stroke: var(--blue); stroke-width: 2; vector-effect: non-scaling-stroke; }
.adv__spark-dot { fill: var(--blue); }
.adv__trend-foot { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; font-size: 12px; }
.adv__trend-foot b { font-variant-numeric: tabular-nums; }
.adv__bars { display: flex; flex-direction: column; gap: 8px; margin-bottom: 6px; }
.adv__bar { display: grid; grid-template-columns: 44px 1fr 24px; align-items: center; gap: 8px; font-size: 12px; }
.adv__bar-label { color: var(--sub); }
.adv__bar-track { height: 7px; border-radius: 4px; background: rgba(127, 127, 127, 0.14); overflow: hidden; }
.adv__bar-track i { display: block; height: 100%; background: var(--blue); border-radius: 4px; }
.adv__bar-n { text-align: right; font-variant-numeric: tabular-nums; }
.adv__list { margin-top: 10px; }
.adv__list-title { font-size: 12px; color: var(--sub); margin-bottom: 4px; }
.adv__row { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; padding: 3px 0; }
.adv__row span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adv__row .muted { flex-shrink: 0; }
.adv__radar { width: 100%; height: 190px; display: block; }
.adv__radar-ring { fill: none; stroke: var(--line); stroke-width: 0.8; }
.adv__radar-axis { stroke: var(--line); stroke-width: 0.8; }
.adv__radar-fill { fill: rgba(80, 121, 217, 0.18); stroke: var(--blue); stroke-width: 1.4; }
.adv__radar-label { font-size: 9px; fill: var(--sub); }
.adv__dims { display: flex; flex-wrap: wrap; gap: 6px 12px; margin-top: 6px; font-size: 12px; color: var(--sub); }
.adv__dims b { color: var(--ink); font-variant-numeric: tabular-nums; }
.adv-upsell { margin-top: 20px; padding: 16px 18px; }
.adv-upsell b { font-size: 14px; }
.adv-upsell p { margin: 6px 0 8px; font-size: 13px; }
.adv-upsell a { font-size: 13px; color: var(--blue); }
@media (max-width: 980px) { .adv__grid { grid-template-columns: 1fr; } }

/* 用户协议 / 隐私政策 */
.legal { max-width: 780px; margin: 0 auto; padding: 26px 30px; line-height: 1.9; }
.legal h1 { margin: 8px 0 4px; font-size: 22px; }
.legal__meta { font-size: 12px; margin: 0 0 18px; }
.legal h2 { font-size: 15px; margin: 20px 0 6px; }
.legal p, .legal ul { font-size: 14px; margin: 6px 0; }
.legal ul { padding-left: 20px; }

/* 收藏行：避开知识点表格的 .krow 网格样式（同名类历史冲突） */
.favrow { display: flex; align-items: flex-start; gap: 8px; padding: 8px 0; border-bottom: 0.5px solid var(--line); }
.favrow:last-of-type { border-bottom: 0; }

/* 收藏笔记 */
.note-line { margin-top: 6px; font-size: 12px; color: var(--sub); white-space: pre-wrap; }
.note-dlg textarea {
  width: 100%; box-sizing: border-box; margin-top: 10px; padding: 10px;
  border-radius: 8px; border: 0.5px solid var(--line); background: var(--card);
  color: var(--ink); font-family: var(--font-serif); line-height: 1.7; resize: vertical;
}

/* 选择题键盘可达 */
.opt:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
@media (max-width: 700px) { .legal { padding: 18px 16px; } }

/* ==========================================================================
   成绩单 v2：按卷面构成组织 —— 合计分 → 构成条 → 明细 → 批改 → 板块 → 行动
   规范：无灰底卡片；数字系统字 + tabular-nums；先结论后细节。
   ========================================================================== */
.rc { padding-bottom: 4px; }
.rc__top { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.rc__label { font-size: 13px; color: var(--sub); }
.rc__meta { font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }

.rc__score { display: flex; align-items: baseline; gap: 8px; margin-top: 6px; }
.rc__score b {
  font: 600 46px/1 var(--s-font); color: var(--blue-deep, #4772e6);
  font-variant-numeric: tabular-nums; letter-spacing: -.02em;
}
.rc__full { font-size: 14px; color: var(--sub); font-variant-numeric: tabular-nums; }

.rc__stack {
  display: flex; height: 7px; margin-top: 12px; border-radius: 100px;
  overflow: hidden; background: rgba(0,0,0,.055);
}
html[data-theme="dark"] .rc__stack { background: rgba(255,255,255,.10); }
.rc__seg { display: block; height: 100%; transition: width .4s ease; }
.rc__seg--obj { background: #5b87eb; }
.rc__seg--write { background: #b3caf6; }
html[data-theme="dark"] .rc__seg--obj { background: #7da3f5; }
html[data-theme="dark"] .rc__seg--write { background: #4d6da8; }

.rc__ledger { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin-top: 12px; }
.rc__led {
  display: flex; align-items: baseline; gap: 6px; min-width: 0;
  padding-left: 14px; border-left: 0.5px solid var(--line);
}
.rc__led:first-child { padding-left: 0; border-left: 0; }
.rc__dot { width: 7px; height: 7px; border-radius: 2px; flex: none; transform: translateY(-1px); }
.rc__dot--obj { background: #5b87eb; }
.rc__dot--write { background: #b3caf6; }
html[data-theme="dark"] .rc__dot--obj { background: #7da3f5; }
html[data-theme="dark"] .rc__dot--write { background: #4d6da8; }
.rc__led-name { font-size: 12px; color: var(--sub); }
.rc__led-val { font: 600 16px/1 var(--s-font); color: var(--ink); font-variant-numeric: tabular-nums; }
.rc__led-val--pending { color: var(--sub); font-weight: 500; }
.rc__led-max { font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }
.rc__led-sub { font-size: 12px; margin-left: 2px; }

/* 行动组：看完结果再决定去哪 */
.rc__actions {
  display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap;
  margin-top: 16px; padding-top: 14px; border-top: 0.5px solid var(--line);
}
.rc__actions button { flex: none; min-width: 104px; min-height: 38px; padding: 0 18px; }

/* 批改区标题 */
.aig__title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.aig__title b { font-size: 13px; font-weight: 600; }
.aig__title .muted { font-size: 12px; }
.aig__linkbtn {
  background: none; border: 0; color: var(--blue); font-size: 12px;
  padding: 4px 2px; cursor: pointer;
}
.aig__linkbtn:hover { text-decoration: underline; }

/* 收起态在标题后给一句总评摘要，避免只看分数没信息 */
.aig__card-brief {
  flex: 1; min-width: 0; font-size: 12px; text-align: right;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

@media (max-width: 700px) {
  .rc__score b { font-size: 38px; }
  .rc__ledger { grid-template-columns: 1fr; gap: 8px; }
  .rc__led { padding-left: 0; border-left: 0; }
  .rc__actions button { flex: 1 1 100%; }
  .aig__card-brief { display: none; }
}

/* 回看页面包屑：与「考试记录」列表形成明确上下文 */
.rp__crumb {
  display: inline-block; margin: 0 0 6px; font-size: 12.5px; color: var(--sub);
  text-decoration: none;
}
.rp__crumb:hover { color: var(--blue); }

/* 考试记录行：标题+徽章一行、日期用时一行，分数右对齐，不再互相挤压 */
.runrec {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 0; border-bottom: 0.5px solid var(--line);
  text-decoration: none; color: inherit;
}
.runrec:last-of-type { border-bottom: 0; }
.runrec:hover { background: rgba(0,0,0,.015); }
html[data-theme="dark"] .runrec:hover { background: rgba(255,255,255,.04); }
.runrec__main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.runrec__title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 14px; font-weight: 600; color: var(--ink); }
.runrec__meta { font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }
.runrec__score { display: flex; align-items: baseline; gap: 4px; flex: none; }
.runrec__score b { font: 600 16px var(--s-font); color: var(--ink); font-variant-numeric: tabular-nums; }
.runrec__score .muted { font-size: 12px; }
.runrec__chev { width: 12px; height: 12px; color: var(--sub); flex: none; }

/* ==========================================================================
   AI 动效（参考 libraries-dev：border-beam 的 pulse-inner / pulse-outside）
   纯 CSS 复刻，无依赖；全部遵守 prefers-reduced-motion。
   ========================================================================== */

/* AI 批改按钮：pulse-inner —— 光在按钮内部呼吸，不外溢 */
.aig__btn { position: relative; overflow: hidden; isolation: isolate; }
.aig__btn::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: radial-gradient(130% 90% at 50% 118%, rgba(255,255,255,.46), rgba(255,255,255,0) 62%);
  opacity: .16;
  animation: beamPulse 3.2s ease-in-out infinite;
}
@keyframes beamPulse { 0%, 100% { opacity: .14 } 50% { opacity: .5 } }

/* 激活码输入：pulse-outside —— 聚焦时外圈辉光呼吸，不裁切内容 */
.pc__redeem { position: relative; }
.pc__redeem::after {
  content: ""; position: absolute; inset: -3px; border-radius: 11px; pointer-events: none;
  box-shadow: 0 0 0 1px rgba(91,135,235,.30), 0 0 16px rgba(91,135,235,.22);
  opacity: 0; transition: opacity .25s ease;
}
.pc__redeem:focus-within::after { opacity: .7; animation: glowBreathe 2.6s ease-in-out infinite; }
/* 深色模式辉光需要更亮才看得见 */
html[data-theme="dark"] .pc__redeem::after {
  box-shadow: 0 0 0 1px rgba(120,160,255,.55), 0 0 22px rgba(110,150,255,.42);
}
html[data-theme="dark"] .pc__redeem:focus-within::after { opacity: 1; }
@keyframes glowBreathe { 0%, 100% { opacity: .55 } 50% { opacity: 1 } }

@media (prefers-reduced-motion: reduce) {
  .aig__btn::after { animation: none; opacity: .2; }
  .pc__redeem:focus-within::after { animation: none; opacity: .7; }
}


/* ==========================================================================
   会员卡（settings · 会员分组）—— 分档材质系统
   质感全部矢量：噪点颗粒 + 斜向反光 + 渐变裁切压印字，边缘永远锐利。
   材质由浅到深递进：哑光 → 银 → 香槟 → 曜石金 → 钛铂（终身最高）。
   ========================================================================== */
.mcard {
  position: relative; overflow: hidden; isolation: isolate;
  max-width: 520px;
  margin: 14px 16px 8px;
  padding: 15px 18px 13px;
  border-radius: 14px;
  --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E");
}
.mcard > * { position: relative; z-index: 1; }
/* 颗粒肌理 */
.mcard__grain {
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image: var(--grain); background-size: 140px 140px;
  opacity: .05; mix-blend-mode: overlay;
}
/* 斜向反光 */
.mcard__sheen {
  position: absolute; inset: -40% -10%; z-index: 0; pointer-events: none;
  background: linear-gradient(104deg, transparent 38%, rgba(255,255,255,.16) 47%,
              rgba(255,255,255,.02) 54%, transparent 62%);
}

.mcard__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.mcard__code {
  font-size: 8.5px; font-weight: 600; letter-spacing: .22em; text-transform: uppercase;
  opacity: .38;
}
.mcard__brand { display: block; height: 12px; width: 51px; flex: none; fill: currentColor; }

/* 压印字：上亮下暗的双色渐变裁切，比 canvas 锐利 */
.mcard__plan {
  margin: 12px 0 3px;
  /* 正名用 Instrument Serif 斜体、首字母大写：比全大写柔和，衬线更有航海册的旧感 */
  font-family: "Instrument Serif", var(--font-serif);
  font-style: italic; font-weight: 400;
  font-size: 34px; letter-spacing: .01em;
  line-height: 1.05;
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.mcard__sub { font-size: 11.5px; }
.mcard__foot {
  margin-top: 12px; padding-top: 9px;
  display: flex; justify-content: space-between; align-items: baseline;
  font-size: 11.5px; font-variant-numeric: tabular-nums;
}
.mcard__foot .mcard__q { font-weight: 600; }

/* —— 体验码：哑光浅灰 —— */
.mcard--trial {
  background: linear-gradient(160deg, #f6f7f9 0%, #e7e9ed 55%, #dfe1e6 100%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.9), inset 0 1px 0 #fff, 0 1px 3px rgba(0,0,0,.06);
  color: #5d636c;
}
.mcard--trial .mcard__sub,
.mcard--trial .mcard__foot { color: #878d96; }
.mcard--trial .mcard__brand { color: #7b828c; }
.mcard--trial .mcard__plan { background-image: linear-gradient(180deg, #6a717b, #43484f); }

/* —— 月卡：银 —— */
.mcard--month {
  background: linear-gradient(155deg, #fbfcfd 0%, #dfe2e8 40%, #c8ccd4 70%, #eceef1 100%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.85), inset 0 1px 0 #fff, 0 2px 6px rgba(0,0,0,.08);
  color: #4a4f57;
}
.mcard--month .mcard__sub,
.mcard--month .mcard__foot { color: #7d838c; }
.mcard--month .mcard__brand { color: #5b626b; }
.mcard--month .mcard__plan { background-image: linear-gradient(175deg, #f4f7fa 0%, #565d66 26%, #33383f 46%, #b9c1cc 72%, #3f454d 100%); }

/* —— 季卡：香槟 —— */
.mcard--quarter {
  background: linear-gradient(155deg, #fbf7ee 0%, #e8dcc2 45%, #d6c5a1 72%, #f2ead7 100%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.75), inset 0 1px 0 #fffdf7, 0 2px 7px rgba(120,95,50,.14);
  color: #6b5a3a;
}
.mcard--quarter .mcard__sub, .mcard--quarter .mcard__foot { color: #8a7550; }
.mcard--quarter .mcard__brand { color: #7a6335; }
.mcard--quarter .mcard__plan { background-image: linear-gradient(175deg, #d9c093 0%, #755b26 28%, #4f3c15 46%, #c3a668 72%, #634d1e 100%); }

/* —— 上岸卡：琥珀金（订阅制，介于季卡与年卡之间） —— */
.mcard--kaoan {
  background: linear-gradient(155deg, #f7edd8 0%, #e2c894 42%, #cfae72 70%, #f3e6c9 100%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.7), inset 0 1px 0 #fffaf0, 0 2px 9px rgba(120,90,40,.18);
  color: #5d4a24;
}
.mcard--kaoan .mcard__sub, .mcard--kaoan .mcard__foot { color: #856d3f; }
.mcard--kaoan .mcard__plan { background-image: linear-gradient(175deg, #e0c68f 0%, #7d5f22 28%, #513c12 48%, #c9a55f 74%, #6b511c 100%); }
.mcard--kaoan .mcard__foot { border-top: 0.5px solid rgba(90,70,30,.16); }

/* —— 年卡：曜石 + 金 —— */
.mcard--year {
  background: linear-gradient(158deg, #2b2f36 0%, #1a1d22 52%, #24282e 100%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.10), inset 0 1px 0 rgba(255,255,255,.14), 0 3px 12px rgba(0,0,0,.26);
  color: #e8eaee;
}
.mcard--year .mcard__sub, .mcard--year .mcard__foot { color: #8f959e; }
.mcard--year .mcard__brand { color: #c2a468; }
.mcard--year .mcard__plan { background-image: linear-gradient(176deg, #fff4d6 0%, #d9b978 38%, #a98a45 54%, #fbeecb 78%, #c8a866 100%); }
.mcard--year .mcard__foot { border-top: 0.5px solid rgba(255,255,255,.12); }

/* —— 终身：最深曜石 + 铂金（最高档） —— */
.mcard--lifetime {
  background: linear-gradient(150deg, #14161a 0%, #0d0f12 46%, #1c2026 74%, #171a1f 100%);
  box-shadow: inset 0 0 0 1px rgba(214,226,240,.20), inset 0 1px 0 rgba(255,255,255,.22), 0 4px 18px rgba(0,0,0,.34);
  color: #eef2f7;
}
.mcard--lifetime .mcard__sub, .mcard--lifetime .mcard__foot { color: #98a2b0; }
.mcard--lifetime .mcard__brand { color: #b9c6d8; }
.mcard--lifetime .mcard__plan { background-image: linear-gradient(176deg, #ffffff 0%, #cfdae8 30%, #93a2b6 48%, #f4f8ff 72%, #b6c3d4 100%); }
.mcard--lifetime .mcard__foot { border-top: 0.5px solid rgba(255,255,255,.14); }
.mcard--lifetime .mcard__sheen { background: linear-gradient(104deg, transparent 36%, rgba(220,235,255,.14) 46%, rgba(255,255,255,.03) 54%, transparent 64%); }

/* 未开通态 */
.mcard--empty {
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--card) 100%, transparent), color-mix(in srgb, var(--bg) 55%, var(--card)));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--line) 88%, transparent);
}
.mcard--empty::after {
  content: ""; position: absolute; inset: 7px; border-radius: 12px;
  border: 1px dashed color-mix(in srgb, var(--line) 90%, transparent);
  pointer-events: none;
}
.mcard__foot--empty {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-top: 14px; padding-top: 11px;
  border-top: 0.5px solid color-mix(in srgb, var(--line) 80%, transparent);
}
.mcard__cta { padding: 7px 16px; font-size: 12.5px; border-radius: 9px; }
.mcard--empty .mcard__grain, .mcard--empty .mcard__sheen { display: none; }
.mcard__plan--empty {
  /* 中文不走衬线斜体（合成斜体在汉字上很难看） */
  font-family: var(--s-font); font-style: normal;
  color: var(--ink); font-size: 19px; font-weight: 700; letter-spacing: .01em;
  -webkit-text-fill-color: currentColor; background: none;
}
.mcard--empty .mcard__sub { color: var(--sub); }

@media (max-width: 700px) {
  .mcard { margin: 12px 12px 6px; padding: 13px 15px 11px; }
  .mcard__plan { font-size: 24px; }
}

/* ==========================================================================
   激活码输入框：voice 辉光
   光带渲染在输入框**内部**：.pc__field 负责白底/描边/裁切，effect 铺满底层，
   输入文字浮在其上。聚焦淡入、失焦暂停。
   ========================================================================== */
.pc__redeem { display: flex; align-items: center; gap: 8px; }
.pc__field {
  position: relative; flex: 1 1 0; min-width: 0;
  display: flex; align-items: center;
  border-radius: 8px;
  overflow: hidden;
  background: var(--card);
  border: 0.8px solid var(--line);
  transition: border-color .2s ease;
}
.pc__field:focus-within { border-color: var(--blue, #5b87eb); }
.pc__field input {
  position: relative; z-index: 1;
  flex: 1; min-width: 0;
  background: transparent;
  border: 0; outline: none;
  padding: 9px 12px;
  font-size: 14px; letter-spacing: .04em;
  color: var(--ink);
}
.pc__field .vglow {
  position: absolute; inset: 0;
  pointer-events: none;
  opacity: 0; transition: opacity .32s ease;
  z-index: 0;
  --imc-voice-radius: 8px;
}
.pc__field .vglow .imc-effect.imc-voice { min-height: 0; height: 100%; }
.pc__field:focus-within .vglow { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .pc__field:focus-within .vglow { opacity: .75; }
}

/* ==========================================================================
   字重层级（基准 600）
   正文已是 SemiBold，层级往上继续加重：小标题 700、区块/页面标题 800。
   只按语义选择器加，避免和组件内既有声明打架。
   ========================================================================== */
h1, h2 { font-weight: 800; }
h3, h4, h5, h6 { font-weight: 700; }

/* 组标题是"标签"，靠颜色弱化，字重与正文持平；往上才是加重 */
.s-list-group__header { font-weight: 600; }
.s-list-item__title { font-weight: 700; }

/* 原先 500 的标签统一抬到 600，避免比正文还轻 */
.aig__dim-name, .aig__dim-cmt, .pc__plan-rest { font-weight: 600; }

/* 登录后的首页倒计时：与落地页同一套（Instrument Serif 大数字 + 中文单位），居中 */
.home-cd {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: clamp(10px, 1.6vw, 24px);
  margin: 10px 0 6px;
  flex-wrap: wrap;
}
.home-cd__u { display: flex; align-items: baseline; gap: 4px; }
.home-cd__u b {
  font-family: "Instrument Serif", var(--font-serif);
  font-size: clamp(44px, 5.6vw, 84px);
  line-height: .95;
  font-weight: 400;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
  min-width: 1.8ch;
  text-align: center;
}
.home-cd__u i { font-style: normal; font-size: clamp(12px, 1.2vw, 16px); color: var(--sub); }
@media (max-width: 560px) {
  .home-cd { gap: 8px; }
  .home-cd__u b { font-size: clamp(32px, 11vw, 48px); min-width: 1.6ch; }
  .home-cd__u i { font-size: 11px; }
}

/* 首页会员状态提醒（到期/额度）：一条就够，不弹窗不打断 */
.home-notice {
  display: flex; align-items: center; gap: 8px;
  margin: 6px 0 14px;
  padding: 9px 14px;
  border-radius: 10px;
  border: 0.8px solid color-mix(in srgb, var(--blue) 26%, transparent);
  background: color-mix(in srgb, var(--blue) 7%, var(--card));
  font-size: 12.5px; color: var(--ink);
}
.home-notice .s-icon { width: 14px; height: 14px; flex: none; color: var(--blue); }
.home-notice a { margin-left: auto; flex: none; color: var(--blue); font-weight: 600; text-decoration: none; }
.home-notice a:hover { text-decoration: underline; }

/* 暗色下深色档会员卡与背景贴合，补一圈亮边把卡面勾出来 */
html[data-theme="dark"] .mcard--year,
html[data-theme="dark"] .mcard--lifetime {
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.22), inset 0 1px 0 rgba(255,255,255,.26),
              0 4px 18px rgba(0,0,0,.5);
}

/* ==========================================================================
   站内额度条（订阅卡的双时间窗 / 次数卡的余额）
   ========================================================================== */
.aig__meters {
  display: flex; flex-direction: column; gap: 8px;
  margin: 12px 0 14px;
  padding: 11px 14px;
  border-radius: 10px;
  border: 0.5px solid var(--line);
  background: color-mix(in srgb, var(--blue) 4%, transparent);
}
.aig__meter {
  display: grid;
  grid-template-columns: 52px minmax(60px, 1fr) 58px auto;
  align-items: center; gap: 10px;
}
.aig__meter-name { font-size: 11.5px; color: var(--sub); letter-spacing: .02em; }
.aig__meter-track {
  display: block; height: 5px; border-radius: 100px;
  background: rgba(0,0,0,.07); overflow: hidden;
}
.aig__meter-track i {
  display: block; height: 100%; border-radius: 100px;
  background: var(--blue); transition: width .35s ease;
}
.aig__meter-track i.low { background: #c9932f; }
.aig__meter-num { font-size: 12px; color: var(--ink); text-align: right; font-variant-numeric: tabular-nums; }
.aig__meter-num b { font-weight: 700; }
.aig__meter-hint { font-size: 11px; color: var(--sub); white-space: nowrap; }
html[data-theme="dark"] .aig__meter-track { background: rgba(255,255,255,.10); }

@media (max-width: 620px) {
  .aig__meter { grid-template-columns: 46px 1fr 54px; }
  .aig__meter-hint { grid-column: 1 / -1; white-space: normal; }
}

/* ==========================================================================
   购买记录（设置页）
   ========================================================================== */
.orderlist { display: flex; flex-direction: column; gap: 2px; }
.orderrow {
  display: grid;
  grid-template-columns: 1fr auto auto auto;
  align-items: center; gap: 12px;
  padding: 7px 0;
  font-size: 12.5px;
  border-bottom: 0.5px solid var(--line);
}
.orderrow:last-child { border-bottom: 0; }
.orderrow__name { color: var(--ink); }
.orderrow__amt { font-variant-numeric: tabular-nums; color: var(--ink); }
.orderrow__time { color: var(--sub); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.orderrow__st { font-size: 11px; color: var(--sub); }
.orderrow__st.is-paid { color: var(--blue); }
.orderrow__st.is-refunded { color: #b06a2c; }

/* ==========================================================================
   进阶分析 v2（会员）：玻璃胶囊 + 流光趋势（ECharts）
   ========================================================================== */
.adv2 { margin-top: 20px; }
.adv2__trendcard { margin-bottom: 12px; }
.adv2__ch { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.adv2__ch b { font-size: 14px; }
.adv2__ch span { font-size: 11px; color: var(--sub); }
.adv2__chart { height: 210px; width: 100%; }
.adv2__foot { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-top: 4px; font-size: 12px; color: var(--sub); }
.adv2__foot b { font-size: 15px; color: var(--ink); font-variant-numeric: tabular-nums; }
.adv2__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 12px; }
.advcaps { display: flex; flex-direction: column; gap: 11px; padding-top: 2px; }
.gcap { display: grid; grid-template-columns: 70px 1fr 30px; gap: 12px; align-items: center; font-size: 12px; }
.gcap__name { display: flex; align-items: center; gap: 6px; color: var(--sub); }
.gcap__name i { width: 6px; height: 6px; border-radius: 50%; background: var(--dc); display: inline-block; }
.gcap__track {
  height: 14px; border-radius: 100px; position: relative; overflow: hidden;
  background: linear-gradient(180deg, rgba(0, 0, 0, .055), rgba(0, 0, 0, .025));
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .07);
}
.gcap__fill {
  position: absolute; left: 0; top: 0; bottom: 0; border-radius: 100px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, .65), rgba(255, 255, 255, 0) 48%),
    linear-gradient(90deg, var(--dc), var(--dc-d));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .85), inset 0 -1px 0 rgba(0, 0, 0, .10), 0 1px 3px rgba(0, 0, 0, .12);
}
.gcap__val { text-align: right; font-weight: 700; color: var(--dc-i); font-variant-numeric: tabular-nums; }
.gbars { display: flex; flex-direction: column; gap: 8px; }
.gbar { display: grid; grid-template-columns: 52px 1fr 26px; gap: 8px; align-items: center; font-size: 12px; }
.gbar__track {
  height: 7px; border-radius: 100px; position: relative; overflow: hidden;
  background: linear-gradient(180deg, rgba(0, 0, 0, .05), rgba(0, 0, 0, .02));
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .06);
}
.gbar__track i {
  display: block; height: 100%; border-radius: 100px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, .6), rgba(255, 255, 255, 0) 50%),
    linear-gradient(90deg, #6f93ea, #5079d9);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), inset 0 -1px 0 rgba(0, 0, 0, .08);
}
.gbar b { text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }
.adv2__list { margin-top: 12px; }
.adv2__lt { font-size: 11px; color: var(--sub); margin-bottom: 4px; }
.adv2__row { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; padding: 3px 0; border-bottom: 0.5px dashed rgba(0, 0, 0, .06); }
.adv2__row:last-child { border-bottom: 0; }
.adv2__row span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adv2__row .muted { flex: none; }
@media (max-width: 980px) {
  .adv2__grid { grid-template-columns: 1fr; }
  .adv2__chart { height: 190px; }
}
