/* ESAT 真题检索站 —— 零依赖样式，跟随系统深/浅色 */
:root{
  --bg:#f5f7f6; --card:#ffffff; --ink:#15181d; --ink-soft:#3d434d; --muted:#6b7280;
  --line:#e3e6e3; --line-soft:#eef0ee;
  --accent:#0f766e; --accent-ink:#0b5d56; --accent-soft:#e6f2f0;
  --amber:#b45309; --amber-soft:#fdf3e3;
  --violet:#6d28d9; --violet-soft:#f1ecfd;
  /* 知识点讲解面板的强调色（用户要求：不要深绿，要浅紫） */
  --kn-strong:#8b5cf6;   /* 小节标题的浅紫字 */
  --kn-bg:#f4eeff;       /* 公式框 / 例题框的浅紫底 */
  --kn-line:#ddd0fb;
  --radius:12px;
  --shadow:0 1px 2px rgba(16,24,40,.05), 0 8px 24px rgba(16,24,40,.06);
  --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
  --math:-apple-system,BlinkMacSystemFont,"PingFang SC","Apple Symbols","Segoe UI Symbol",
         "STIX Two Math","Cambria Math","DejaVu Sans",system-ui,sans-serif;
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#0e1114; --card:#171a1f; --ink:#e8eaee; --ink-soft:#c3c8d0; --muted:#98a1ad;
    --line:#272c34; --line-soft:#21252c;
    --accent:#2dd4bf; --accent-ink:#7fe9de; --accent-soft:#12302d;
    --amber:#fbbf24; --amber-soft:#2e2411;
    --violet:#c4b5fd; --violet-soft:#241b3a;
    --kn-strong:#c4b5fd; --kn-bg:#2a2244; --kn-line:#3d3260;
    --shadow:0 1px 2px rgba(0,0,0,.5), 0 10px 28px rgba(0,0,0,.4);
  }
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--ink);
  font:15px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  -webkit-text-size-adjust:100%;
}
a{color:var(--accent-ink)}

/* ---------------- header ---------------- */
header{
  position:sticky; top:0; z-index:30; background:var(--card);
  border-bottom:1px solid var(--line); padding:14px 20px 12px;
}
header .hrow{display:flex; align-items:flex-start; gap:12px}
header h1{margin:0; font-size:19px; letter-spacing:.3px}
header .sub{color:var(--muted); font-size:12.5px; margin-top:2px}
header .hright{margin-left:auto}
.pill{
  font-family:var(--mono); font-size:12px; color:var(--accent-ink);
  background:var(--accent-soft); border-radius:20px; padding:3px 11px; white-space:nowrap;
}
.searchbar{display:flex; gap:8px; align-items:center; margin-top:11px; flex-wrap:wrap}
.searchbar .sb-ico{font-size:16px; opacity:.6}
#kw{
  flex:1 1 320px; min-width:180px; font:inherit; font-size:14.5px; padding:9px 12px;
  border:1px solid var(--line); border-radius:10px; background:var(--card); color:var(--ink);
}
#kw:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft)}
#kw::placeholder{color:var(--muted); opacity:.85}
.hint{font-size:12.5px; color:var(--muted); margin-top:8px; min-height:18px; line-height:1.5}
.hint b{color:var(--ink)}
.hint .warn{color:var(--amber)}

/* ---------------- buttons / inputs ---------------- */
.btn{
  font:inherit; font-size:13px; padding:7px 12px; border-radius:9px; cursor:pointer;
  border:1px solid var(--line); background:var(--card); color:var(--ink);
}
.btn:hover{border-color:var(--accent); color:var(--accent-ink)}
.btn:disabled{opacity:.5; cursor:default}
.btn.wide{width:100%; margin-top:6px; font-size:12.5px; padding:6px 10px}
.btn.tiny{font-size:12px; padding:4px 10px; border-radius:20px}
.btn.tiny.on{background:var(--accent); border-color:var(--accent); color:#fff}
select{
  font:inherit; font-size:13px; padding:6px 8px; border:1px solid var(--line);
  border-radius:9px; background:var(--card); color:var(--ink);
}

/* ---------------- layout ---------------- */
main{display:grid; grid-template-columns:326px minmax(0,1fr); align-items:start}
aside{
  background:var(--card); border-right:1px solid var(--line);
  padding:14px 12px 60px;
  height:calc(100vh - var(--head-h, 108px)); overflow-y:auto;
  position:sticky; top:var(--head-h, 108px);
}
#results{padding:16px 20px 90px; min-width:0}

section.panel{margin-bottom:15px}
section.panel > h2{
  margin:0 0 7px; font-size:12px; letter-spacing:.7px; color:var(--muted); font-weight:600;
  text-transform:uppercase; display:flex; align-items:center; gap:8px;
}
section.panel > h2 .reset{
  margin-left:auto; font-size:11px; text-transform:none; letter-spacing:0;
  font-weight:500; color:var(--accent-ink); cursor:pointer;
}
section.panel > h2 .reset:hover{text-decoration:underline}

/* ---- 手风琴（左栏）：同一时刻只展开一层，选完自动把下一层顶上来 ---- */
section.panel > h2.ph{cursor:pointer; user-select:none}
section.panel > h2.ph:hover{color:var(--fg, inherit)}
.ph-caret{font-size:10px; width:11px; flex:none; color:var(--muted); text-align:center}
section.panel > h2.ph .picked{
  margin-left:6px; font-size:11px; text-transform:none; letter-spacing:0; font-weight:600;
  color:var(--accent-ink); background:var(--accent-soft); border-radius:20px; padding:1px 8px;
  max-width:11em; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
section.panel > h2.ph .picked:empty{display:none; background:none; padding:0}
section.panel.collapsed > h2.ph{margin-bottom:0}
.panel-body[hidden]{display:none}

ul.opts{list-style:none; margin:0; padding:0; border:1px solid var(--line);
        border-radius:10px; overflow-y:auto; overflow-x:hidden}
ul.opts{max-height:none}
#p-topic, #p-point{max-height:min(52vh, 420px)}
ul.opts li{
  display:flex; align-items:center; gap:8px; padding:6px 9px; cursor:pointer;
  font-size:13.5px; border-bottom:1px solid var(--line-soft);
}
ul.opts li:last-child{border-bottom:none}
ul.opts li:hover{background:var(--accent-soft)}
ul.opts li.on{background:var(--accent-soft); color:var(--accent-ink); font-weight:600}
ul.opts li .nm{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
ul.opts li .en{font-size:11px; color:var(--muted); font-weight:400}
ul.opts li .ct{
  font-family:var(--mono); font-size:11px; color:var(--muted);
  background:var(--line-soft); padding:1px 7px; border-radius:20px;
}
ul.opts li.zero{color:var(--muted); opacity:.7}
.empty-note{padding:8px 10px; font-size:12.5px; color:var(--muted)}

.flags{display:flex; flex-direction:column; gap:6px; font-size:13px}
.flags label{display:flex; align-items:center; gap:7px; cursor:pointer}
.flags input{margin:0; cursor:pointer}

.papers{display:flex; flex-direction:column; gap:9px}
.papers .grp{display:flex; flex-wrap:wrap; gap:5px; align-items:center}
.papers .grp .gn{
  font-family:var(--mono); font-size:11.5px; color:var(--muted);
  min-width:52px; text-transform:uppercase;
}
.ybtn{
  font:inherit; font-size:12px; padding:3px 9px; border-radius:20px; cursor:pointer;
  border:1px solid var(--line); background:var(--card); color:var(--ink);
}
.ybtn:hover{border-color:var(--accent); color:var(--accent-ink)}
.ybtn.on{background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600}
.pools{display:flex; flex-wrap:wrap; gap:5px}
.poolchip{
  font-family:var(--mono); font-size:11.5px; padding:3px 8px; border-radius:20px;
  border:1px dashed var(--line); color:var(--muted);
}
.poolchip.done{border-style:solid; color:var(--accent-ink); background:var(--accent-soft)}

/* ---------------- toolbar / crumbs ---------------- */
.toolbar{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:10px}
.toolbar .count{font-size:13.5px; color:var(--muted); margin-right:auto}
.toolbar .count b{color:var(--ink); font-size:15.5px}
.toolbar .sortlab{font-size:12.5px; color:var(--muted); display:flex; align-items:center; gap:6px}
.crumbs{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:10px; min-height:0}
.crumbs .cr{
  font-size:12.5px; background:var(--accent-soft); color:var(--accent-ink);
  border-radius:20px; padding:2px 10px; cursor:pointer; display:inline-flex; gap:6px;
}
.crumbs .cr i{font-style:normal; opacity:.6}

/* ---------------- card ---------------- */
.card{
  background:var(--card); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:12px 14px 11px; margin-bottom:12px;
}
.card .top{display:flex; align-items:baseline; gap:9px; flex-wrap:wrap}
.card .lab{font-family:var(--mono); font-weight:700; font-size:14px; color:var(--accent-ink)}
.card .paper{font-size:13.5px; font-weight:600}
.card .part{font-size:12px; color:var(--muted)}
.card .mod{
  font-size:11.5px; background:var(--violet-soft); color:var(--violet);
  border-radius:20px; padding:1px 9px;
}
.card .badge{
  font-size:11px; color:var(--amber); background:var(--amber-soft);
  border-radius:20px; padding:1px 8px;
}
.figwrap{
  margin-top:10px; background:#fff; border:1px solid var(--line); border-radius:10px;
  padding:6px; overflow:hidden;
}
/* 题图内联限高：原卷扫描图很高（有的 2000px），铺满会把整张卡片撑成一屏；
   点图可开放大层看原尺寸，所以这里限高不丢信息 */
.figwrap img.qimg{display:block; width:auto; max-width:100%; max-height:min(58vh, 520px);
  height:auto; margin:0 auto; cursor:zoom-in; border-radius:6px}
/* —— 题面（KaTeX 真数学排版） —— */
.qbody{margin-top:10px; padding:12px 14px; background:var(--card); border:1px solid var(--line); border-radius:10px}
.stem-main{font-size:15.5px; line-height:1.75; white-space:pre-wrap}
.stem-main .katex{font-size:1.02em}
.opts-main{margin-top:10px; display:flex; flex-direction:column; gap:6px}
.opt-main{display:flex; gap:8px; align-items:baseline; line-height:1.6}
.opt-main b.ol{flex:0 0 22px; color:var(--fg-dim); font-weight:600}
.opt-main .ot{flex:1 1 auto}
.opt-main .oimg{max-width:280px; height:auto; border:1px solid var(--line); border-radius:6px; display:block; margin-top:4px}
.imgfail{
  display:flex; align-items:center; justify-content:center; text-align:center;
  min-height:96px; padding:14px; font-size:12.5px; color:var(--amber);
  background:var(--amber-soft); border:1px dashed var(--amber); border-radius:8px;
  word-break:break-all;
}
.optfig{
  margin-top:9px; font-size:13px; color:var(--amber); background:var(--amber-soft);
  border-radius:8px; padding:5px 10px; display:inline-block;
}
.acts{display:flex; gap:8px; flex-wrap:wrap; margin-top:10px}
.ans{
  margin-top:9px; font-size:14px; background:var(--accent-soft); color:var(--accent-ink);
  border-radius:9px; padding:7px 11px;
}
.ans b{font-family:var(--mono); font-size:15px}
.ans .src{display:block; margin-top:2px; font-size:11.5px; color:var(--muted); font-family:var(--mono)}
.txt{
  margin-top:9px; border-top:1px dashed var(--line); padding-top:9px;
  font-family:var(--math); font-size:13.5px; color:var(--ink-soft);
}
.txt .lbl{font-size:11.5px; color:var(--muted); margin:0 0 4px}
.txt .stem{white-space:pre-wrap; word-break:break-word; line-height:1.55}
.txt .opt{white-space:pre-wrap; word-break:break-word; line-height:1.5; margin-top:3px}
.txt .opt b{font-family:var(--mono); color:var(--accent-ink); margin-right:5px}
.tags{display:flex; flex-wrap:wrap; gap:5px; margin-top:9px}
.tag{font-size:11.5px; border-radius:20px; padding:1px 8px; background:var(--line-soft); color:var(--muted)}
.tag.lv-domain{background:#eef2ff; color:#3730a3}
.tag.lv-branch{background:var(--accent-soft); color:var(--accent-ink)}
.tag.lv-topic{background:var(--amber-soft); color:var(--amber)}
.tag.lv-point{background:var(--violet-soft); color:var(--violet)}

.empty{color:var(--muted); padding:34px 6px; text-align:center; font-size:14px; line-height:1.7}
.more{text-align:center; padding:8px 0 40px}
.hit{font-size:11.5px; color:var(--accent-ink); background:var(--accent-soft);
     border-radius:20px; padding:1px 8px}

/* ---------------- 放大 ---------------- */
.zoom{
  position:fixed; inset:0; z-index:99; background:rgba(12,14,18,.92);
  overflow:auto; padding:44px 12px 24px; text-align:center;
}
.zoom-bar{
  position:fixed; top:0; left:0; right:0; height:38px; display:flex; align-items:center; gap:12px;
  padding:0 14px; background:rgba(20,23,28,.92); color:#e8eaee; font-size:12.5px;
}
.zoom-bar .zoom-x{margin-left:auto; opacity:.7}
#zoom-img{max-width:min(1400px,96vw); width:auto; height:auto; background:#fff; border-radius:8px}
@media (max-width:900px){
  main{grid-template-columns:1fr}
  aside{position:static; height:auto; border-right:none; border-bottom:1px solid var(--line);
        max-height:none; overflow:visible}
  #results{padding:14px 12px 70px}
  header{padding:12px 14px 10px}
}
@media print{
  header, aside, .toolbar, .acts{display:none!important}
  body{background:#fff}
  main{display:block}
  .card{break-inside:avoid; border:none; border-bottom:1px solid #ddd; box-shadow:none}
}

/* 保险：任何带 hidden 的元素都必须消失（避免 display:flex 盖掉 UA 默认） */
[hidden]{display:none!important}

/* 答案交叉核验标记 */
.chkok{display:block; font-size:12px; color:#0f766e; margin-top:3px}
.chkbad{display:block; font-size:12px; color:#a16207; margin-top:3px}

/* ============ 知识点讲解面板（右栏抽屉） ============
   错版防线：图一律 max-width:100% + height:auto，图框固定不溢出容器；
   长公式块横向可滚，绝不允许撑破面板。 */
main.k-on{grid-template-columns:326px minmax(0,1fr) 430px}
.kpanel{position:sticky; top:0; align-self:start; height:100vh; overflow-y:auto;
        border-left:1px solid var(--line); background:var(--card)}
.kbar{position:sticky; top:0; z-index:2; display:flex; align-items:center; gap:8px;
      padding:10px 14px; background:var(--card); border-bottom:1px solid var(--line)}
.kbar .ktitle{font-weight:700; font-size:14px}
.kclose{margin-left:auto; border:none; background:transparent; font-size:18px; line-height:1;
        cursor:pointer; color:var(--muted, #667); padding:2px 6px; border-radius:6px}
.kclose:hover{background:var(--accent, #0f766e22)}
.kbody{padding:12px 16px 80px; font-size:13.5px; line-height:1.62}
.kbody h3{margin:2px 0 6px; font-size:16px; line-height:1.35}
.kzh{font-size:12.5px; color:var(--muted, #668); font-weight:500; margin-left:6px}
.ksyl{font-size:12px; color:var(--muted, #667); border-left:3px solid var(--line);
      padding:2px 0 2px 8px; margin:6px 0 10px}
.konel{font-weight:600; margin:6px 0 12px}
.ksec{margin:12px 0 4px; font-weight:700; font-size:13px; color:var(--kn-strong)}
.kbody ul{margin:4px 0 4px 18px; padding:0}
.kbody li{margin:3px 0}
.kfml{margin:6px 0 2px; padding:6px 8px; overflow-x:auto; background:var(--kn-bg);
      border:1px solid var(--kn-line); border-radius:6px; text-align:center; max-width:100%}
.kfnote{font-size:12.5px; color:var(--muted, #667); margin-bottom:6px}
.kwe{background:var(--kn-bg); border:1px solid var(--kn-line); border-radius:8px; padding:9px 11px; margin:8px 0}
.kwe .kq{font-weight:600; margin-bottom:5px}
.kwe ol{margin:4px 0 4px 18px; padding:0}
.kwe .ka{font-weight:700}
.kfig{margin:10px 0; padding:0}
.kfig img, .kfig svg{display:block; max-width:100%; width:auto; height:auto; margin:0 auto;
                     background:#fff; border:1px solid var(--line); border-radius:8px}
.kfig figcaption{font-size:12px; color:var(--muted, #667); text-align:center; margin-top:5px; line-height:1.5}
.khits{margin-top:12px; padding-top:10px; border-top:1px solid var(--line); font-size:12.5px}
.khits a{color:var(--accent, #0f766e); cursor:pointer; text-decoration:underline}
.klist li::before{color:var(--kn-strong)}
.klack{padding:18px 6px; color:var(--muted, #667)}
.kbook{font-size:11px; margin-left:4px; opacity:.75}
@media (max-width:1400px){
  main.k-on{grid-template-columns:326px minmax(0,1fr)}
  .kpanel{position:fixed; right:0; top:0; width:min(430px,92vw); z-index:40;
          box-shadow:-8px 0 24px #0003}
}
@media (max-width:900px){
  main.k-on{grid-template-columns:1fr}
  .kpanel{width:100vw}
}

/* 层级小标：⑤ 知识点 头上显示「共 N 个 · 已收录讲解 M 篇」 */
.lvcap{font-size:11px; font-weight:400; color:var(--muted); margin-left:6px}

/* 空结果里的轻量按钮（例：知识点无命中时「改为查看该考点的全部题目」） */
.btn-mini{margin-top:6px; padding:4px 10px; font-size:12px; border-radius:8px;
  border:1px solid var(--line); background:var(--card); color:var(--accent-ink); cursor:pointer; font-family:inherit}
.btn-mini:hover{border-color:var(--accent)}

/* 讲解面板里的知识点索引列表（点一条看讲解） */
.klist{list-style:none; margin:6px 0 0; padding:0}
.klist li{display:flex; gap:8px; align-items:baseline; justify-content:space-between;
  padding:6px 8px; border:1px solid var(--line); border-radius:8px; margin-bottom:4px;
  cursor:pointer; font-size:13px; line-height:1.5}
.klist li:hover{border-color:var(--accent); background:var(--accent-soft)}
.klist li .kc{color:var(--muted); font-size:11.5px; white-space:nowrap}
.klist li::before{content:'📖'; font-size:12px; opacity:.45}
.klist li:not(li)::before{content:''}
.tag.clickable{cursor:pointer}
.tag.clickable:hover{border-color:var(--accent); color:var(--accent-ink)}
