
:root{
  --bg:#f5f6fa; --card:#ffffff; --ink:#0f1a2b; --ink2:#4e5d70; --ink3:#8b96a5;
  --line:rgba(16,26,43,.07); --brand:#2563eb; --brand2:#3b82f6; --brand-soft:rgba(37,99,235,.10);
  --star:#f59e0b; --ok:#12b76a; --ok-soft:rgba(18,183,106,.12);
  --bad:#ef4444; --bad-soft:rgba(239,68,68,.10);
  --warn:#d97706; --warn-soft:rgba(217,119,6,.10); --r:20px;
  --shadow-card:0 1px 2px rgba(16,24,40,.04),0 10px 30px -14px rgba(16,24,40,.12);
  --shadow-pop:0 12px 40px -8px rgba(37,99,235,.35);
  --safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg) linear-gradient(180deg,#f7f9fc 0,#eef3f8 42%,#eaf1f7 100%) fixed; color:var(--ink);
  font:15px/1.65 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
/* min-height 用 dvh 兜住 iOS Safari 地址栏伸缩：100vh 是「地址栏收起」时的高度，
   打开时内容会被顶出屏幕，底部页签栏看着像浮在半空。老浏览器不认 dvh 就用 vh 那一行。 */
.wrap{max-width:520px;margin:0 auto;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}
/* G36：顶栏改成毛玻璃 —— 原来是整条深蓝实心块（用户：古早网页风） */
/* G39：顶栏瘦身（54→44px）。标题显式给 line-height，别让 body 的 1.65 把行高撑起来 */
header{
  position:sticky;top:0;z-index:20;color:var(--ink);
  background:rgba(255,255,255,.66);
  -webkit-backdrop-filter:saturate(180%) blur(16px);backdrop-filter:saturate(180%) blur(16px);
  padding:calc(11px + env(safe-area-inset-top,0px)) 14px 11px;
  display:flex;align-items:center;gap:6px;
  border-bottom:1px solid rgba(37,99,235,.10);box-shadow:0 1px 12px rgba(37,99,235,.06)
}
header .t{font-size:16.5px;font-weight:700;line-height:1.3;flex:1;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.3px}
/* G41：首页标题放品牌标记（glyph 版），其它页面仍只用文字标题 */
header .t.brand{display:flex;align-items:center;gap:7px;flex:1}
header .t.brand::before{
  content:'';flex:none;width:20px;height:20px;
  background:url(icon-glyph.svg?v=20260923h) center/contain no-repeat
}
/* G39：顶栏动作 = 小型安静胶囊。
   原来 69×33、13.5px、实底蓝 tint + 描边，是顶栏里最重的一块色（用户：非常搞这么大）。
   现在去掉描边、字号收到 12px、内边距 5/9 ⇒ 约 54×22，只在按下时给颜色。
   ::after 把**热区**上下各撑 11px（≈76×44，够得着），屏幕上不占位置。 */
header button{
  position:relative;appearance:none;-webkit-appearance:none;
  background:transparent;border:0;color:var(--ink2);
  font-size:12px;font-weight:600;line-height:1;border-radius:999px;padding:5px 8px;
  cursor:pointer;font-family:inherit;transition:background .15s,color .15s
}
header button::after{content:'';position:absolute;top:-11px;right:-7px;bottom:-11px;left:-7px}
/* G39d：两个入口 = 彩色小胶囊（复用应用已有语义色，不引入新色）
     复习 = 蓝（--brand）· 错题本 = 红（--bad）
   背景一律用同色系的极浅 tint，所以「有色」但不刺眼；按下加深一档。
   云同步状态不再占一个按钮 —— 它是顶栏最左边那个状态胶囊 #cloudst，点开是账号浮层。 */
header #srs{color:var(--brand);background:var(--brand-soft)}
header #wr{color:var(--bad);background:var(--bad-soft)}
header #srs:active{background:rgba(37,99,235,.20);color:var(--brand)}
header #wr:active{background:rgba(239,68,68,.20);color:var(--bad)}
/* 底部固定页签栏占位：有页签的页面（考点卡/公式卡/刷题）才需要，
   无页签页面多一点留白也不碍事 */
main{flex:1;padding:12px 12px calc(96px + var(--safe-b))}
.sub{color:var(--ink2);font-size:12px;line-height:1.5;margin:2px 0 8px}
.card{background:rgba(255,255,255,.86);border:1px solid rgba(16,26,43,.055);border-radius:22px;padding:14px;margin-bottom:10px;
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:var(--shadow-card)}
.card.tap{cursor:pointer;transition:transform .12s,box-shadow .12s}
.card.tap:active{transform:scale(.985);box-shadow:0 4px 14px rgba(37,99,235,.12)}
.row{display:flex;align-items:center;gap:10px}
.grow{flex:1;min-width:0}
.badge{display:inline-block;font-size:11px;padding:2px 7px;border-radius:6px;background:var(--brand-soft);color:var(--brand);font-weight:600}
.badge.g{background:var(--ok-soft);color:var(--ok)}
.badge.w{background:var(--warn-soft);color:var(--warn)}
.badge.n{background:#eef1f5;color:var(--ink3)}
h3{margin:0 0 4px;font-size:15.5px}
.mut{color:var(--ink2);font-size:13px}
.mut2{color:var(--ink3);font-size:12px}
.stars{color:var(--star);letter-spacing:1px;font-size:13px;white-space:nowrap}
.pill{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink2);
  background:rgba(37,99,235,.06);border:1px solid rgba(37,99,235,.08);
  border-radius:999px;padding:3px 10px;margin-right:6px}
.bar{height:5px;background:#eef1f5;border-radius:999px;overflow:hidden;margin-top:8px}
.bar>i{display:block;height:100%;background:var(--brand);border-radius:999px}
/* 页签改到**屏幕底部固定**（用户要求：手机上好按）。
   原来 sticky 在顶部，单手够不着；现在做成底部 tab bar，
   并给 main 留出等高底部内边距，避免最后一张卡被压住。 */
.tabs{display:flex;gap:6px;background:rgba(255,255,255,.76);border:0;border-top:1px solid rgba(37,99,235,.10);
  -webkit-backdrop-filter:saturate(180%) blur(16px);backdrop-filter:saturate(180%) blur(16px);
  border-radius:0;margin:0;padding:6px 8px calc(6px + env(safe-area-inset-bottom,0px));
  position:fixed;left:50%;transform:translateX(-50%);bottom:0;width:100%;max-width:520px;
  z-index:30;box-shadow:0 -2px 12px rgba(37,99,235,.10)}
/* App 的 tab bar 不是 34px 的小按钮：48px 高、手指够得着，图标行也不至于挤成一条线 */
.tabs button{flex:1;border:0;background:transparent;min-height:48px;padding:12px 6px;border-radius:12px;
  font-size:14px;font-weight:600;line-height:1;color:var(--ink2);cursor:pointer;font-family:inherit;
  display:inline-flex;align-items:center;justify-content:center}
.tabs button.on{background:rgba(37,99,235,.12);color:var(--brand)}
.flash{
  background:var(--card);border:1px solid var(--line);border-radius:16px;
  min-height:260px;padding:18px;display:flex;flex-direction:column;cursor:pointer;
  box-shadow:0 6px 20px rgba(37,99,235,.07)
}
.flash .q{font-size:17px;font-weight:600;line-height:1.55}
.flash .hint{margin-top:auto;color:var(--ink3);font-size:12.5px;text-align:center;padding-top:14px}
.sect{margin-top:12px}
.sect .lb{font-size:12px;font-weight:700;color:var(--brand);letter-spacing:.4px;margin-bottom:3px}
.sect .tx{font-size:14.5px;color:var(--ink)}
.sect.warn .lb{color:var(--warn)} .sect.warn .tx{background:var(--warn-soft);padding:8px 10px;border-radius:9px}
.sect.warn .tx{font-size:14px}
.rate{display:flex;gap:8px;margin-top:12px}
.rate button{flex:1;border:1px solid var(--line);background:#fff;border-radius:11px;padding:11px 4px;
  font-size:13.5px;font-weight:600;line-height:1;cursor:pointer;font-family:inherit;color:var(--ink2)}
.rate button:active{background:#f4f7fa}
.rate .y{color:var(--ok);border-color:#bfe5d2}
.rate .m{color:var(--warn);border-color:#f0dcb4}
.rate .n{color:var(--bad);border-color:#f2cdc9}
/* 错题本条目：题干只给预览，两个动作按钮并排（重做 / 看解析） */
.wstem{margin-top:6px;font-size:14px;line-height:1.6;color:var(--ink)}
.wmeta{font-size:12px;color:var(--ink3);margin-top:6px}
.wbtns{display:flex;gap:8px;margin-top:12px}
.wbtns .btn{margin-top:0;flex:1;width:auto}
.wbtns .btn.sm{padding:11px;font-size:14px}
.nav{display:flex;gap:8px;margin-top:10px;align-items:center}
.nav button{flex:1;border:1px solid var(--line);background:#fff;border-radius:11px;padding:10px;
  font-size:14px;font-weight:600;line-height:1;color:var(--brand);cursor:pointer;font-family:inherit}
/* LaTeX 数学排版：KaTeX 自己带字体，这里只做容器与中文字形兜底
   （讲义公式里混了 78 条中文，KaTeX_Main 没有汉字 → 必须给 CJK 字体栈）

   字号与折行（用户反馈「渲染太大、换行太难看」）：
   - KaTeX 默认 1.21em；这里容器定 13.5px、.katex 用 1em ⇒ 实际就是 13.5px，不再二次放大。
   - white-space:nowrap：**永不折行**，分数线/上下标不会被拦腰截断（折行才是难看的根源）。
   - 溢出交给 JS 的 fitFormulas() 先做等比缩放；只有缩到下限仍超宽才横向滚动。
   - 容器是 flex 且子项 margin:0 auto —— 若改成 text-align:center，
     溢出时左侧会被裁掉且滚不回去（flexbox 居中的经典坑）。

   选择器不带 .fx 前缀：公式现在同时出现在「公式卡」的翻卡里，
   不能再依赖旧的外层深色卡。 */
.expr.tex{font-size:13.5px;line-height:1.9;white-space:nowrap;padding:11px 10px;
  display:flex;align-items:center;overflow-x:auto;-webkit-overflow-scrolling:touch;
  background:#eef4f9;border-radius:9px;margin-top:6px}
.expr.tex .katex{font-size:1em;color:inherit;flex:0 0 auto;margin:0 auto}
/* 缩放过（fit）的公式不再需要横向滚动，把滚动条带来的抖动消掉 */
.expr.tex.adapted{overflow-x:hidden}
/* 缩到下限仍超宽的那批（390px 真机下约 26%）只能横滚，
   必须给个明确提示，否则用户不知道右边还有内容 */
.fxhint{font-size:11.5px;color:var(--ink3);margin-top:3px;text-align:right}
.katex{font-family:KaTeX_Main,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",serif}
/* 「去做对应题」入口（G8）：紧贴卡片下沿长出来的一条页脚，
   把配套题放回卡片本身，替代原来堆在页尾的罗列。
   是卡片的**兄弟节点**而不是子节点 —— 卡片整体绑了「轻点翻面」，
   按钮若在里面，点一下会同时翻面和跳题。 */
.gotos{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  margin:-1px 0 10px;padding:10px 18px 12px;background:var(--card);
  border:1px solid var(--line);border-top:1px dashed var(--line);
  border-radius:0 0 16px 16px}
.gotos .glb{font-size:12px;color:var(--ink3);font-weight:600;margin-right:2px}
.gbtn{border:1px solid var(--brand);background:#fff;color:var(--brand);border-radius:10px;
  padding:9px 12px;font-size:13.5px;font-weight:600;line-height:1;cursor:pointer;font-family:inherit}
.gbtn:active{background:#f2f8fc}
/* 带页脚的卡片：下沿改成直角，跟页脚拼成一块 */
.flash.hasgoto{border-radius:16px 16px 0 0}
/* G9 模式切换（刷卡 / 复习 / 跟随全局），只在考点卡与公式卡两个页签出现。
   G39h 重排：`.modebar` 统一成「左边说明、右边控件」的一行，控件按语义分两类 ——
     · 互斥开关（刷卡/复习/跟随全局、卡片模式、中文对照 开/关）→ 一律用 `.sw` 分段选择器；
     · 普通动作（排程 / 收工）→ 小胶囊按钮。
   G39e 换拨动开关时误删了旧的 `.modebar button`，这两处按钮掉回浏览器原生外观
   （用户：「古早 win 系统的感觉」），这里把两类控件的样式一起补齐。
   选择器用 `>button` 限定**直接子元素** —— 分段选择器里的 `.seg` 也是 button，
   不能被这条规则碰到（`.sw .seg` 的类选择器优先级更高，但显式隔开更保险）。 */
.modebar{display:flex;align-items:center;gap:6px;margin:2px 2px 8px}
.modebar .lb{font-size:11.5px;font-weight:600;color:var(--ink3);flex:0 0 auto;letter-spacing:.02em}
.modebar .cnt{font-size:11.5px;font-weight:600;color:var(--ink2);flex:0 0 auto;
  font-variant-numeric:tabular-nums;margin-right:auto}
.modebar .sw{margin-left:auto}
.modebar>button{flex:0 0 auto;appearance:none;-webkit-appearance:none;
  border:1px solid rgba(37,99,235,.20);background:rgba(255,255,255,.70);
  color:var(--brand);border-radius:999px;padding:4px 11px;
  font-size:12px;font-weight:600;line-height:1.5;cursor:pointer;font-family:inherit;
  transition:background .15s,border-color .15s,color .15s;
  -webkit-tap-highlight-color:transparent}
.modebar>button:active{background:rgba(37,99,235,.14);border-color:rgba(37,99,235,.34)}
/* G39f：手势入口 + 卡片模式开关并成一行（用户：放到手势这里，紧凑点）。
   左侧「手势怎么用？」占满剩余宽度、右对齐收尾；右侧是拨动开关。
   提示块展开时这一行只剩开关（此时手势说明就在旁边，不用再挂入口）。 */
.utilbar{display:flex;align-items:center;gap:6px;margin:2px 2px 8px}
/* G39h：与 .modebar .lb 对齐（同一层级的说明文字，字号/字重/字色必须一致，
   否则首页的「卡片模式」和章节里的「本章模式」看起来是两套东西） */
.utilbar .ubt{font-size:11.5px;font-weight:600;color:var(--ink3);flex:0 0 auto;letter-spacing:.02em}
.utilbar .sw{margin-left:auto}
/* G39e：模式切换 = 拨动开关（用户：「改成开关拨动形式」）。
   一条灰轨道 + 一个会滑过去的白色滑块；滑块的位置/宽度由生成时写死的行内 px 决定，
   不依赖 calc(var(--n)) 那套（浏览器支持面参差）。段宽在生成时算好，各段等宽。
   G39h 只做了**不影响布局**的观感收紧（内阴影 + 描边环，都是 box-shadow，
   不占盒模型）：轨道垫底显得「凹」，滑块有一圈细描边，跟轨道分得开。
   注意 padding:3px / knob 的 left:3px 与生成端的 216+70、116+55 是**绑定**的，
   改任何一个都要同步改生成端，否则滑块会错位。 */
.sw{position:relative;display:inline-flex;flex:0 0 auto;background:rgba(16,26,43,.065);
  border-radius:999px;padding:3px;box-shadow:inset 0 1px 2px rgba(16,26,43,.06);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.sw .knob{position:absolute;top:3px;bottom:3px;left:3px;border-radius:999px;background:#fff;
  box-shadow:0 1px 2px rgba(16,24,40,.18),0 0 0 .5px rgba(16,26,43,.05);
  transition:transform .22s cubic-bezier(.4,0,.2,1)}
.sw .seg{position:relative;z-index:1;flex:1 1 0;min-width:0;border:0;background:transparent;
  appearance:none;-webkit-appearance:none;
  font-size:11.5px;font-weight:600;line-height:1.5;color:var(--ink3);padding:4px 8px;
  border-radius:999px;cursor:pointer;font-family:inherit;white-space:nowrap;
  -webkit-tap-highlight-color:transparent;transition:color .2s}
.sw .seg.on{color:var(--brand);font-weight:700}
/* G5 中文对照：译文**永远排在原文下面**，不覆盖、不替换原文（用户明确约束），
   视觉上做成弱化的一层（左细线 + 次级字色），开关键也是小 chip。 */
.cn{display:block;margin-top:5px;color:var(--ink2);font-size:13.5px;line-height:1.7;
  border-left:2px solid var(--line);padding-left:9px}
/* G14 一次性提示：轻一点，且能就地关掉 */
.tip{position:relative;margin-top:8px;font-size:12px;color:var(--ink2);
  background:rgba(37,99,235,.07);border:1px solid rgba(37,99,235,.10);border-radius:12px;
  padding:7px 56px 7px 9px;line-height:1.45;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.tipx{position:absolute;right:7px;top:50%;transform:translateY(-50%);
  border:0;background:transparent;color:var(--brand);font-size:11.5px;font-weight:600;
  cursor:pointer;font-family:inherit;padding:3px 5px}
.ex.cn{margin-top:8px}
/* G11 手势反馈（尽量不碍眼）：
   · 拖动全程只有顶部一根 2px 细进度条，方向跟随拖动方向；
   · 只有拖过线、松手即将「前进/返回」时才冒出一个小 chip（顶部居中、12px、半透明），
     平时翻页不给任何浮层 —— 页面本身翻过去就是反馈。 */
.dragbar{position:fixed;top:0;height:2px;width:0;display:none;z-index:70;
  background:var(--brand);opacity:.75;pointer-events:none}
.dragpill{position:fixed;top:14px;left:50%;transform:translateX(-50%);z-index:70;display:none;
  pointer-events:none;background:rgba(28,34,48,.72);color:#fff;font-size:12px;font-weight:600;
  padding:4px 12px;border-radius:999px;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
/* G11 手势提示：跟错题本「怎么用」同一形态，可关掉；关掉后首页留小入口随时再看 */
.tip .g{margin-top:3px;font-weight:600;color:var(--ink)}
.howto{border:0;background:transparent;color:var(--brand);font-size:12px;font-weight:600;
  font-family:inherit;cursor:pointer;padding:2px 0;display:block}
.utilbar .howto{flex:1;min-width:0;text-align:left}
/* 复习模式：整章平铺，每张卡直接展开。
   这里卡片**不可点**（没有翻面语义），所以「关联练习」可以安全放进卡片内部，
   一路贴到卡片下沿；刷卡模式则必须放外面，否则点按钮会连带翻面。 */
.rvname{font-size:15.5px;font-weight:600;color:var(--brand);margin-top:7px;line-height:1.5}
/* G20：首页顶层「独立功能」区 —— 与下方章节卡形态分开：
   双栏、彩色底、大数字、带动作按钮；章节卡是单列白底列表。 */
.seclab{font-size:11.5px;font-weight:650;color:var(--ink3);letter-spacing:.14em;margin:14px 6px 6px}
.funzone{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.fun{position:relative;border-radius:13px;padding:10px 11px 10px;border:1px solid transparent}
.fun .ico{position:absolute;right:9px;top:9px;width:22px;height:22px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}
.fun .n{font-size:20px;font-weight:700;line-height:1.06;margin-top:1px}
.fun .t{font-size:12.5px;font-weight:600;margin-top:2px}
.fun .d{font-size:10.5px;line-height:1.4;color:var(--mut);margin-top:3px;min-height:26px}
.fun .go{display:inline-block;margin-top:3px;font-size:11px;padding:3px 9px;border-radius:999px;
  background:rgba(255,255,255,.72);border:1px solid rgba(0,0,0,.07);font-weight:600}
.fun.srs{background:linear-gradient(180deg,rgba(37,99,235,.11),rgba(37,99,235,.045));border-color:rgba(37,99,235,.22)}
.fun.srs .ico{background:rgba(37,99,235,.16);color:#1d4ed8}
.fun.srs .n{color:#1d4ed8}
.fun.wrong{background:linear-gradient(180deg,rgba(239,68,68,.10),rgba(239,68,68,.035));border-color:rgba(239,68,68,.18)}
.fun.wrong .ico{background:rgba(239,68,68,.14);color:#b91c1c}
.fun.wrong .n{color:#b91c1c}
.fun.zero .n{color:var(--mut);font-weight:600}
.fun.zero .go{background:rgba(255,255,255,.5);font-weight:500}
/* P7：复习队列进度条 + 自评按钮上的间隔预览小字 */
.srsbar{height:4px;border-radius:2px;background:rgba(128,128,128,.18);overflow:hidden;margin:8px 0 2px}
.srsbar i{display:block;height:100%;background:var(--brand);border-radius:2px;transition:width .2s}
/* G21 排程日历 */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:10px}
.cw{text-align:center;font-size:11px;font-weight:600;color:var(--ink3);padding:3px 0}
.cd{position:relative;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:rgba(128,128,128,.07);font-size:13px;color:var(--ink3);border:1.5px solid transparent;line-height:1}
.cd.blank{background:transparent}
.cd.has{background:var(--brand-soft);color:var(--brand);font-weight:700;cursor:pointer}
.cd.today{border-color:var(--brand2)}
.cd.sel{background:var(--brand);color:#fff}
.cd .b{position:absolute;top:2px;right:3px;min-width:14px;height:14px;line-height:14px;text-align:center;
  border-radius:7px;background:var(--brand);color:#fff;font-size:9.5px;padding:0 3px}
.cd.sel .b{background:#fff;color:var(--brand)}
.planhd{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--card);
  border:1px solid var(--line);border-radius:12px;padding:8px 10px;margin-top:10px}
.planhd .t{font-size:14.5px;font-weight:700;color:var(--ink)}
.planhd button{border:1px solid var(--line);background:#fff;border-radius:9px;padding:5px 10px;
  font-size:13px;color:var(--brand);font-family:inherit;cursor:pointer}
/* G24 错题索引：题号磁贴 */
.wgrp{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:11px 12px;margin-bottom:9px}
.wgrphd{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:9px}
.wgrphd .t{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.4}
.wgrphd .n{flex:0 0 auto;font-size:11.5px;font-weight:600;color:var(--brand)}
.wtiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(70px,1fr));gap:8px}
.wtile{border:1px solid var(--line);background:#fff;border-radius:11px;padding:8px 4px 7px;
  display:flex;flex-direction:column;align-items:center;gap:1px;font-family:inherit;cursor:pointer}
.wtile .no{font-size:16px;font-weight:700;color:var(--ink);line-height:1.15}
.wtile .no i{font-size:10.5px;font-weight:400;font-style:normal;color:var(--ink3);margin-left:1px}
.wtile .c{font-size:10.5px;color:var(--ink3);line-height:1.25}
.wtile .d{font-size:10.5px;font-weight:600;color:var(--bad);line-height:1.25}
.wtile:active{background:var(--brand-soft)}
/* G23 错题本筛选 chips */
.wchips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:8px}
.wchips .lb{font-size:11.5px;font-weight:600;color:var(--ink3);margin-right:2px;flex:0 0 auto}
.wchip{border:1px solid var(--line);background:#fff;color:var(--ink2);border-radius:999px;
  padding:5px 10px;font-size:12px;line-height:1;font-family:inherit;cursor:pointer}
.wchip b{margin-left:5px;font-size:11px;color:var(--brand)}
.wchip.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.wchip.on b{color:#fff}
/* G22 错题集内翻页 */
.wsetbar{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--bad-soft);
  border:1px solid rgba(200,68,58,.22);border-radius:12px;padding:8px 11px;margin-bottom:9px;
  font-size:12.5px;color:var(--bad);font-weight:600}
.wsetbar button{flex:0 0 auto;border:1px solid var(--bad);background:#fff;color:var(--bad);border-radius:9px;
  padding:4px 9px;font-size:12px;font-weight:600;font-family:inherit;cursor:pointer}
.rate button b{display:block;font-size:10px;font-weight:400;opacity:.72;margin-top:2px}
.card.rv .gotos{margin:12px -14px -14px;padding:10px 14px 12px;
  border-left:0;border-right:0;border-bottom:0;border-radius:0 0 13px 13px}
.prog{font-size:12px;color:var(--ink3);margin-top:7px;display:flex;align-items:center;gap:6px}
.prog .bar{flex:1;margin-top:0;height:4px}
.qbox{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}
.qstem{font-size:14.5px;line-height:1.7;white-space:pre-wrap}
.qstem .no{font-weight:700;color:var(--brand)}
/* G13 真表格：PDF 抽出来的行列渲染成 HTML 表，宽表可横向滑动 */
.tblwrap{margin:10px 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fbfcfe}
.tblcap{font-size:12.5px;color:var(--ink2);font-weight:600;padding:7px 10px 4px;line-height:1.4}
.tblscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.qtbl{border-collapse:collapse;font-size:13px;min-width:100%}
.qtbl th,.qtbl td{border:1px solid var(--line);padding:6px 9px;text-align:left;
  vertical-align:top;white-space:nowrap;font-weight:400}
.qtbl th{background:#eef2f8;font-weight:600;color:var(--ink)}
.qtbl td:first-child,.qtbl th:first-child{white-space:normal}
.opt{display:flex;gap:9px;align-items:flex-start;border:1px solid var(--line);background:#fff;
  border-radius:11px;padding:10px 11px;margin-top:8px;cursor:pointer;font-size:14px;line-height:1.55}
.opt .k{font-weight:700;color:var(--brand);flex:0 0 16px}
.opt.on{border-color:var(--brand);background:var(--brand-soft)}
.opt.ok{border-color:var(--ok);background:var(--ok-soft)}
.opt.bad{border-color:var(--bad);background:var(--bad-soft)}
.ans{margin-top:12px;border-top:1px dashed var(--line);padding-top:11px}
.ans .hd{font-weight:700;font-size:14px;margin-bottom:5px}
.ans .hd.ok{color:var(--ok)} .ans .hd.bad{color:var(--bad)}
.ans .hd.rev{color:var(--brand)}
.ans .ex{font-size:13.5px;color:var(--ink2);line-height:1.7;white-space:pre-wrap;word-break:break-word}
/* G36：按钮统一半透明玻璃风 —— 淡色底 + 细描边 + 胶囊圆角，不再是深蓝实心块 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid rgba(37,99,235,.18);border-radius:999px;padding:9px 18px;
  font-size:13.5px;font-weight:600;line-height:1;cursor:pointer;font-family:inherit;margin-top:12px;
  color:var(--brand);background:rgba(37,99,235,.10);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 2px 10px rgba(37,99,235,.07);white-space:nowrap}
.btn:active{background:rgba(37,99,235,.16)}
.btn.gh{background:rgba(255,255,255,.6);color:var(--ink2);border:1px solid rgba(16,32,50,.10);box-shadow:none}
.btn:disabled{opacity:.45}
.empty{text-align:center;color:var(--ink3);padding:40px 16px;font-size:14px}
.legend{font-size:12px;color:var(--ink3);margin:0 0 10px}
select,input[type=text]{font-size:14px;font-family:inherit;border:1px solid var(--line);border-radius:9px;
  padding:7px 10px;width:100%;background:rgba(255,255,255,.92);color:var(--ink)}
input[type=text]{margin-top:8px}
/* 轻提示条。#toast 在原版里压根没有样式 —— 提示文字等于掉在页脚后面，谁都看不见。
   现在它是「登录后解释一句」唯一的出口，得有样式。 */
.toast{
  position:fixed;left:50%;bottom:calc(26px + env(safe-area-inset-bottom,0px));
  transform:translate(-50%,10px);z-index:120;
  max-width:min(88vw,430px);box-sizing:border-box;
  background:rgba(15,26,43,.93);color:#fff;
  font-size:13px;line-height:1.6;text-align:left;letter-spacing:.01em;
  padding:11px 14px;border-radius:14px;
  box-shadow:0 14px 36px -12px rgba(16,24,40,.55);
  opacity:0;pointer-events:none;
  transition:opacity .18s ease,transform .18s ease
}
.toast.on{opacity:1;transform:translate(-50%,0)}
/* 本机存储写不进去时的提示条（首页用） */
.warnbar{background:rgba(200,68,58,.09);border:1px solid rgba(200,68,58,.22);color:var(--bad);
  border-radius:16px;padding:11px 13px;font-size:13px;line-height:1.65;margin:10px 0;
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
/* 通用胶囊按钮：登录闸门与账号浮层共用（cloud.css 只加排版差异） */
.mrow{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.mrow .mbtn{margin-top:0}
.mbtn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid transparent;border-radius:999px;padding:9px 20px;
  font-size:13.5px;font-weight:600;line-height:1;cursor:pointer;font-family:inherit;margin-top:12px;
  white-space:nowrap;color:var(--brand);background:rgba(37,99,235,.10);
  transition:transform .12s,background .12s}
.mbtn:active{transform:scale(.97)}
.mbtn.pri{color:#fff;background:linear-gradient(180deg,var(--brand2),var(--brand));box-shadow:var(--shadow-pop)}
.mbtn.pri:active{box-shadow:0 4px 14px -6px rgba(37,99,235,.5)}
.mbtn.gh{background:rgba(255,255,255,.66);color:var(--ink2);border:1px solid rgba(16,26,43,.09);box-shadow:none}
.mbtn.soft{background:rgba(37,99,235,.07);color:var(--brand);border:1px solid rgba(37,99,235,.12);box-shadow:none}
/* 全屏门 / 浮层外壳：登录闸门（不透明整屏）与账号浮层（半透明底部卡）共用 */
.fsgate{display:none;position:fixed;left:0;right:0;top:0;bottom:0;z-index:95;
  background:rgba(20,28,38,.34);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  align-items:flex-end;justify-content:center;padding:0;overflow:auto}
.fsgate.on{display:flex}
.gcard{background:rgba(255,255,255,.92);border:1px solid rgba(255,255,255,.75);
  -webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px);
  border-radius:28px 28px 0 0;padding:14px 20px calc(20px + env(safe-area-inset-bottom,0px));
  max-width:520px;width:100%;box-shadow:0 -12px 48px rgba(16,24,40,.20)}
.gcard::before{content:'';display:block;width:40px;height:4.5px;border-radius:999px;
  background:rgba(16,24,40,.14);margin:0 auto 14px}
@media(min-width:560px){ .fsgate{align-items:center;padding:18px}
  .gcard{border-radius:24px;box-shadow:0 18px 48px rgba(37,99,235,.18)} }
.gcard .gtit{font-size:18px;font-weight:750;color:var(--ink);line-height:1.4;letter-spacing:-.35px}
.gcard .mbtn{display:flex;width:100%;margin-top:14px}
.gcard .mrow .mbtn{display:inline-flex;width:auto;margin-top:0}
.gcard .mrow{justify-content:center}
footer{text-align:center;color:var(--ink3);font-size:11.5px;padding:6px 0 18px}

/* ---------- 触控热区（App 化）----------
   在无头浏览器里按 320 / 375 / 414 三档宽度实测过整站（首页 / 科目 / 模块 / 刷题四个页面），
   横向溢出为 0，但一批控件的手指热区明显偏小：
     底部页签 34px · 分段选择器（刷卡·复习·开/关）25px · 上一题/下一题 36px
     · 错题筛选 chip 22px · 提示条上的「知道了」22px
   人手指的可靠触控直径约 44pt（Apple HIG）/ 48dp（Material），所以下面统一补到
   44px（主控件）或 36px（密排 chip）。**只加高度和热区，不改视觉密度**——
   能不改字号、不加边框的就不动，屏幕上看起来几乎一样。 */
.nav button{min-height:44px}
.rate button{min-height:44px}
.wchip{min-height:36px;display:inline-flex;align-items:center}
.gbtn{min-height:40px;display:inline-flex;align-items:center}   /* 卡片页脚那排「第 N 题 ›」 */

/* 分段选择器：本体做成 iOS 标准的 32px，另外用 ::after 把热区上下各撑 6px 到 44px
   —— 屏幕上看不见，但手指够得着。同一排之间的横向间距不受影响。 */
.sw .seg{min-height:32px;padding:6px 10px;font-size:12px}
.sw .seg::after{content:'';position:absolute;left:0;right:0;top:-6px;bottom:-6px}

/* 提示条上的「知道了」是绝对定位的小字，原来只有 22px 高。
   这里不动它的排版（它要在右侧垂直居中），只用 ::after 把热区撑到 44px ——
   和顶栏那排小胶囊是同一个手法。 */
.tipx::after{content:'';position:absolute;left:-6px;right:-6px;top:-11px;bottom:-11px}
