:root{
  --bg:#0e1117; --bg2:#141922; --card:#171d27; --card2:#1d2431;
  --bd:#252d3b; --bd2:#313b4d;
  --tx:#e6ebf3; --tx2:#9aa7b8; --tx3:#6b7789;
  --pri:#5b7cfa; --pri2:#7c5cff; --cyan:#22d3ee;
  --ok:#22c55e; --okbg:rgba(34,197,94,.12);
  --no:#ef4444; --nobg:rgba(239,68,68,.12);
  --warn:#f59e0b; --warnbg:rgba(245,158,11,.12);
  --hd:rgba(14,17,23,.92); --bar:rgba(18,23,32,.97);
  --hov:#1a2130; --txa:#cfe0f5; --inv:#04140a; --onv:#fff;
  --r:12px;
  --fs:15px;          /* 基础字号（可在设置中调节） */
  --fsq:16.5px;       /* 题干字号 */
}
/* 亮色（护眼）主题 */
[data-theme="light"]{
  --bg:#f2f5fa; --bg2:#ffffff; --card:#ffffff; --card2:#eef2f8;
  --bd:#dfe6f0; --bd2:#c8d3e2;
  --tx:#1b2333; --tx2:#4c5a70; --tx3:#8b98ad;
  --pri:#3f63e8; --pri2:#6b4ff0; --cyan:#0891b2;
  --ok:#15a34a; --okbg:rgba(21,163,74,.1);
  --no:#dc2626; --nobg:rgba(220,38,38,.09);
  --warn:#c2760a; --warnbg:rgba(194,118,10,.1);
  --hd:rgba(255,255,255,.94); --bar:rgba(255,255,255,.98);
  --hov:#eaf0fa; --txa:#23405e; --inv:#fff; --onv:#fff;
}
[data-theme="light"] .opt{background:#fff}
[data-theme="light"] .cell{background:#fff}
[data-theme="light"] .stat{background:#fff}
[data-theme="light"] .logo .dot{box-shadow:0 0 12px rgba(63,99,232,.45)}
[data-theme="light"] ::-webkit-scrollbar-thumb{background:#c3cddc}
/* 字号档位 */
[data-fs="s"]{--fs:14px;--fsq:15.5px}
[data-fs="m"]{--fs:15px;--fsq:16.5px}
[data-fs="l"]{--fs:16.5px;--fsq:18px}
[data-fs="xl"]{--fs:18px;--fsq:19.5px}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
html{-webkit-tap-highlight-color:transparent}
body{
  background:var(--bg); color:var(--tx);
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:var(--fs); line-height:1.7; -webkit-font-smoothing:antialiased;
  transition:background .2s,color .2s;
}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#2c3546;border-radius:5px}
::-webkit-scrollbar-track{background:transparent}
a{color:inherit;text-decoration:none}

.wrap{max-width:1080px;margin:0 auto;padding:0 16px}

/* header */
header{
  position:sticky;top:0;z-index:50;background:var(--hd);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--bd);
}
.hd{display:flex;align-items:center;gap:14px;height:60px}
.logo{display:flex;align-items:center;gap:9px;font-weight:700;font-size:16px;white-space:nowrap}
.logo .dot{width:9px;height:9px;border-radius:50%;background:linear-gradient(135deg,var(--pri),var(--cyan));box-shadow:0 0 12px rgba(91,124,250,.6)}
.logo small{font-weight:400;color:var(--tx3);font-size:12px;margin-left:2px}
nav{display:flex;gap:2px;overflow-x:auto;flex:1;scrollbar-width:none}
nav::-webkit-scrollbar{display:none}
nav button{
  background:none;border:none;color:var(--tx2);padding:7px 13px;border-radius:8px;
  cursor:pointer;font-size:14px;white-space:nowrap;font-family:inherit;transition:.15s;
}
nav button:hover{color:var(--tx);background:var(--card)}
nav button.on{color:var(--onv);background:linear-gradient(135deg,var(--pri),var(--pri2))}
.tools{display:flex;gap:6px}
.tools button{
  background:var(--card);border:1px solid var(--bd);color:var(--tx2);
  width:34px;height:34px;border-radius:8px;cursor:pointer;font-size:15px;
}
.tools button:hover{border-color:var(--pri);color:var(--tx)}

/* pages */
.page{display:none;padding:22px 0 60px}
.page.on{display:block}

/* cards */
.card{background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:18px}
.grid{display:grid;gap:12px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
@media(max-width:820px){.g4,.g3,.g2{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.g4,.g3,.g2{grid-template-columns:1fr}}

.stat{background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:16px}
.stat .n{font-size:26px;font-weight:800;line-height:1.2}
.stat .l{font-size:12px;color:var(--tx3);margin-top:2px}
.c-pri{color:var(--pri)}.c-ok{color:var(--ok)}.c-no{color:var(--no)}.c-cy{color:var(--cyan)}.c-wn{color:var(--warn)}

h2.t{font-size:19px;font-weight:700;margin-bottom:4px;display:flex;align-items:center;gap:8px}
h2.t .bar{width:4px;height:17px;border-radius:2px;background:linear-gradient(180deg,var(--pri),var(--cyan))}
.sub{color:var(--tx3);font-size:13px;margin-bottom:16px}

/* chapter list */
.chs{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.ch{
  background:var(--card);border:1px solid var(--bd);border-radius:10px;padding:13px 15px;
  cursor:pointer;transition:.15s;display:flex;align-items:center;gap:12px;
}
.ch:hover{border-color:var(--pri);transform:translateY(-1px)}
.ch .no{
  width:34px;height:34px;flex:none;border-radius:8px;background:var(--card2);
  display:flex;align-items:center;justify-content:center;font-weight:700;
  font-size:13px;color:var(--tx2);border:1px solid var(--bd2);
}
.ch .info{flex:1;min-width:0}
.ch .nm{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ch .mt{font-size:12px;color:var(--tx3);display:flex;gap:10px;margin-top:2px}
.ch .bar2{width:52px;height:5px;border-radius:3px;background:var(--bd2);overflow:hidden;flex:none}
.ch .bar2 i{display:block;height:100%;background:linear-gradient(90deg,var(--pri),var(--cyan));transition:.3s}
.ch .pct{font-size:11px;color:var(--tx3);width:32px;text-align:right;flex:none}

/* btns */
.btn{
  background:var(--card2);border:1px solid var(--bd2);color:var(--tx);
  padding:9px 18px;border-radius:9px;cursor:pointer;font-size:14px;font-family:inherit;transition:.15s;
}
.btn:hover{border-color:var(--pri)}
.btn.pri{background:linear-gradient(135deg,var(--pri),var(--pri2));border:none;color:#fff;font-weight:600}
.btn.pri:hover{filter:brightness(1.1)}
.btn.ok{background:var(--ok);border:none;color:var(--inv);font-weight:600}
.btn.sm{padding:5px 12px;font-size:13px}
.btn:disabled{opacity:.4;cursor:not-allowed}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* quiz */
.qhead{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  margin-bottom:14px;font-size:13px;color:var(--tx2);flex-wrap:wrap;
}
.badge{background:var(--card2);border:1px solid var(--bd2);padding:2px 9px;border-radius:20px;font-size:12px}
.qbox{background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:20px}
.qtext{font-size:var(--fsq);line-height:1.85;margin-bottom:16px;white-space:pre-wrap}
.opts{display:grid;gap:9px}
.opt{
  border:1px solid var(--bd2);background:var(--bg2);border-radius:10px;padding:12px 15px;
  cursor:pointer;transition:.12s;display:flex;gap:11px;align-items:flex-start;font-size:14.5px;line-height:1.65;
}
.opt:hover{border-color:var(--pri);background:var(--hov)}
.opt .k{
  width:23px;height:23px;flex:none;border-radius:6px;background:var(--card2);border:1px solid var(--bd2);
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:var(--tx2);
}
.opt.sel{border-color:var(--pri);background:rgba(91,124,250,.1)}
.opt.sel .k{background:var(--pri);color:#fff;border-color:var(--pri)}
.opt.right{border-color:var(--ok);background:var(--okbg)}
.opt.right .k{background:var(--ok);color:var(--inv);border-color:var(--ok)}
.opt.wrong{border-color:var(--no);background:var(--nobg)}
.opt.wrong .k{background:var(--no);color:#fff;border-color:var(--no)}
.opt.locked{cursor:default}
.opt.locked:hover{border-color:var(--bd2);background:var(--bg2)}

.exp{
  margin-top:16px;border-radius:10px;padding:14px 16px;font-size:14px;line-height:1.8;
  background:var(--bg2);border:1px solid var(--bd);display:none;white-space:pre-wrap;
}
.exp.on{display:block}
.exp .hd{font-weight:700;margin-bottom:6px;display:flex;gap:8px;align-items:center}
.exp .ans{color:var(--ok);font-weight:700}

.qfoot{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;align-items:center}
.qfoot .sp{flex:1}

/* sheet */
.sheet{
  background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:16px;margin-top:16px;
}
.sheet .st{font-size:13px;color:var(--tx3);margin-bottom:10px}
.cells{display:grid;grid-template-columns:repeat(auto-fill,minmax(36px,1fr));gap:6px}
.cell{
  aspect-ratio:1;border-radius:7px;background:var(--bg2);border:1px solid var(--bd2);
  display:flex;align-items:center;justify-content:center;font-size:12.5px;cursor:pointer;color:var(--tx2);
}
.cell:hover{border-color:var(--pri)}
.cell.done{background:var(--card2);color:var(--tx)}
.cell.ok{background:var(--okbg);border-color:var(--ok);color:var(--ok)}
.cell.no{background:var(--nobg);border-color:var(--no);color:var(--no)}
.cell.cur{border-color:var(--pri);box-shadow:0 0 0 2px rgba(91,124,250,.25)}
.cell.flag::after{content:"";position:absolute}

/* exam */
.etop{
  display:flex;gap:14px;align-items:center;justify-content:space-between;flex-wrap:wrap;
  background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:12px 18px;margin-bottom:16px;
  position:sticky;top:60px;z-index:20;
}
.timer{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--cyan)}
.timer.low{color:var(--no)}
.lg{display:flex;gap:14px;font-size:13px;color:var(--tx2)}
.lg span{display:flex;align-items:center;gap:5px}
.lg i{width:11px;height:11px;border-radius:3px;display:inline-block}

/* result */
.res{text-align:center;padding:34px 20px}
.res .big{font-size:52px;font-weight:900;line-height:1}
.res .big.pass{color:var(--ok)}
.res .big.fail{color:var(--no)}
.res .tip{color:var(--tx2);margin:12px 0 20px}

/* cases */
.case{background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:18px;margin-bottom:14px}
.case h3{font-size:15.5px;margin-bottom:8px;display:flex;gap:9px;align-items:flex-start;line-height:1.6}
.tag{
  font-size:11.5px;padding:2px 8px;border-radius:5px;background:rgba(91,124,250,.15);
  color:var(--pri);font-weight:600;white-space:nowrap;margin-top:2px;
}
.scene{
  font-size:14px;line-height:1.85;color:var(--tx2);background:var(--bg2);
  border-radius:9px;padding:14px 16px;white-space:pre-wrap;margin-bottom:14px;
}
.qs{margin-bottom:12px}
.qs .qi{font-size:14.5px;font-weight:600;margin-bottom:7px}
.ansbox{display:none;margin-top:6px;padding:12px 14px;background:var(--bg2);border:1px solid var(--bd);border-radius:9px;font-size:14px;line-height:1.85;white-space:pre-wrap;color:var(--txa)}
.ansbox.on{display:block}
textarea.myans{
  width:100%;min-height:78px;background:var(--bg2);border:1px solid var(--bd2);border-radius:9px;
  color:var(--tx);padding:11px 13px;font-family:inherit;font-size:14px;line-height:1.7;resize:vertical;
}
textarea.myans:focus{outline:none;border-color:var(--pri)}

/* search */
input.se{
  width:100%;background:var(--card);border:1px solid var(--bd);border-radius:10px;
  padding:11px 15px;color:var(--tx);font-size:14px;font-family:inherit;
}
input.se:focus{outline:none;border-color:var(--pri)}

.empty{text-align:center;padding:50px 20px;color:var(--tx3)}
.empty .ic{font-size:40px;margin-bottom:10px;opacity:.5}

.hint{font-size:12.5px;color:var(--tx3);margin-top:8px;line-height:1.7}
hr.sep{border:none;border-top:1px solid var(--bd);margin:16px 0}
.pill{display:inline-block;padding:1px 8px;border-radius:5px;background:var(--card2);font-size:12px;color:var(--tx2);border:1px solid var(--bd2)}
.toast{
  position:fixed;bottom:28px;left:50%;transform:translateX(-50%) translateY(80px);
  background:var(--card2);border:1px solid var(--bd2);padding:10px 20px;border-radius:9px;
  font-size:14px;opacity:0;transition:.25s;z-index:200;pointer-events:none;
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

/* 底部导航（仅移动端显示） */
#tabbar{display:none}
#tabbar button i{font-style:normal;font-size:16px;line-height:1;display:block}

/* =============== 移动端适配 =============== */
@media(max-width:768px){
  body{font-size:calc(var(--fs) + .5px);-webkit-text-size-adjust:100%}
  .wrap{padding:0 12px}
  .hd{height:54px;gap:10px}
  .logo{font-size:15px}
  .logo small{display:none}
  nav#nav{display:none}
  #tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;
    background:var(--bar);backdrop-filter:blur(14px);
    border-top:1px solid var(--bd);
    padding:4px 2px calc(4px + env(safe-area-inset-bottom,0px));
  }
  #tabbar button{
    flex:1;background:none;border:none;color:var(--tx3);font-size:11px;
    font-family:inherit;display:flex;flex-direction:column;align-items:center;gap:3px;
    padding:4px 0 3px;cursor:pointer;border-radius:8px;line-height:1.25;min-width:0;
    -webkit-tap-highlight-color:transparent;
  }
  #tabbar button i{font-style:normal;font-size:17px;line-height:1;display:block;opacity:.85}
  #tabbar button.on i{opacity:1}
  #tabbar button span{display:block;white-space:nowrap;transform:scale(.96)}

  .page{padding:16px 0 130px}
  h2.t{font-size:17px}
  .sub{font-size:12.5px}

  /* 统计卡片两列 */
  @media(max-width:560px){.g4{grid-template-columns:repeat(2,1fr)}}
  .stat{padding:13px}
  .stat .n{font-size:22px}

  /* 章节卡片单列 */
  .chs{grid-template-columns:1fr}
  .ch{padding:12px 13px}

  /* 选项触摸友好 */
  .qbox{padding:16px 14px}
  .qtext{font-size:var(--fsq);line-height:1.8;margin-bottom:14px}
  .opt{padding:13px 14px;font-size:calc(var(--fs) + .2px);line-height:1.75;border-radius:10px}
  .opt .k{width:24px;height:24px}
  .exp{font-size:13.5px;padding:13px 14px}

  /* 操作条吸底（在底部导航之上） */
  .qfoot{
    position:fixed;left:0;right:0;bottom:calc(52px + env(safe-area-inset-bottom,0px));
    z-index:55;margin:0;padding:9px 12px;gap:9px;
    background:var(--bar);backdrop-filter:blur(14px);
    border-top:1px solid var(--bd);border-radius:0;
  }
  .qfoot .btn{flex:1;padding:12px 0;font-size:14.5px;text-align:center;font-weight:600}
  .qfoot .sp,.qfoot .hint{display:none}
  .page{padding:16px 0 calc(150px + env(safe-area-inset-bottom,0px))}

  /* 答题卡格子放大 */
  .cells{grid-template-columns:repeat(auto-fill,minmax(42px,1fr));gap:7px}
  .cell{font-size:13.5px;border-radius:8px}
  .sheet{padding:14px}

  /* 考试顶栏 */
  .etop{top:54px;padding:10px 14px;gap:10px}
  .timer{font-size:18px}
  .lg{font-size:12px;gap:10px}

  /* 顶部工具行 */
  .row .btn{flex:1 1 auto}
  .row select.btn,.row select{flex:1 1 100%;width:100%}
  #selChP,#selChR{width:100%;padding:10px 12px}

  /* 案例 */
  .case{padding:15px 14px}
  .scene{font-size:13.5px;padding:12px 13px;line-height:1.8}
  .res{padding:26px 14px}
  .res .big{font-size:46px}

  /* 搜索 */
  input.se{padding:12px 14px;font-size:15px}

  .toast{bottom:calc(110px + env(safe-area-inset-bottom,0px))}
}

/* 小屏再收紧 */
@media(max-width:380px){
  #tabbar button{font-size:10.5px}
  .opt{font-size:14.5px;padding:12px}
}

/* 触摸反馈 */
@media(hover:none){
  .opt:active{border-color:var(--pri);background:var(--hov)}
  .btn:active{filter:brightness(1.15)}
  .ch:active{border-color:var(--pri)}
}

/* =============== 设置面板 =============== */
.mask{
  position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:180;display:none;
  opacity:0;transition:.2s;
}
.mask.on{display:block;opacity:1}
.setpanel{
  position:fixed;left:0;right:0;bottom:0;z-index:190;
  background:var(--card);border-top:1px solid var(--bd);
  border-radius:16px 16px 0 0;padding:18px 18px calc(18px + env(safe-area-inset-bottom,0px));
  transform:translateY(105%);transition:transform .25s cubic-bezier(.3,.9,.3,1);
}
.setpanel.on{transform:translateY(0)}
.setpanel h3{font-size:15px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.frow{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.frow .lb{font-size:13.5px;color:var(--tx2);width:60px;flex:none}
.seg{display:flex;gap:0;border:1px solid var(--bd2);border-radius:9px;overflow:hidden;flex:1}
.seg button{
  flex:1;background:none;border:none;color:var(--tx2);padding:9px 4px;font-size:13.5px;
  font-family:inherit;cursor:pointer;border-right:1px solid var(--bd2);white-space:nowrap;
}
.seg button:last-child{border-right:none}
.seg button.on{background:linear-gradient(135deg,var(--pri),var(--pri2));color:#fff;font-weight:600}

/* =============== 手机横屏 =============== */
@media(max-height:460px) and (orientation:landscape){
  .page{padding:12px 0 90px}
  #tabbar button{font-size:10px;padding:3px 0}
  #tabbar button i{font-size:15px}
  .etop{position:static}
  .qfoot{position:static;margin-top:14px;border:1px solid var(--bd);border-radius:10px;background:none;backdrop-filter:none}
  .qfoot .btn{padding:9px 0}
}

/* =============== 打印/大屏下隐藏移动端元素 =============== */
@media(min-width:769px){ #tabbar{display:none !important} }

/* 公式速查 / 考点速记 */
.fx{background:var(--card);border:1px solid var(--bd);border-radius:var(--r);padding:16px;margin-bottom:12px}
.fx h3{font-size:15px;margin-bottom:10px;display:flex;align-items:center;gap:8px;color:var(--cyan)}
.fx h3 .dot2{width:6px;height:6px;border-radius:50%;background:var(--cyan)}
.fml{
  background:var(--bg2);border:1px solid var(--bd);border-left:3px solid var(--pri);
  border-radius:8px;padding:10px 13px;margin-bottom:9px;
}
.fml .n{font-size:14.5px;font-weight:700;color:var(--tx);line-height:1.7}
.fml .d{font-size:13px;color:var(--tx2);margin-top:3px;line-height:1.75}
.fml code{
  background:var(--card2);padding:1px 6px;border-radius:4px;font-family:ui-monospace,Consolas,monospace;
  font-size:13px;color:var(--cyan);
}
.kp{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.kpc{background:var(--card);border:1px solid var(--bd);border-radius:10px;padding:13px 15px}
.kpc .t2{font-size:14px;font-weight:700;margin-bottom:6px;color:var(--pri);display:flex;gap:7px;align-items:center}
.kpc .c2{font-size:13.5px;color:var(--tx2);line-height:1.85;white-space:pre-wrap}
.subnav{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.subnav button{
  background:var(--card);border:1px solid var(--bd);color:var(--tx2);padding:7px 14px;
  border-radius:20px;font-size:13.5px;cursor:pointer;font-family:inherit;
}
.subnav button.on{background:linear-gradient(135deg,var(--pri),var(--pri2));color:#fff;border-color:transparent;font-weight:600}
