:root,[data-theme="dark"]{
  --bg:#0f1216; --bg2:#151a21; --card:#1a2029; --card2:#20293a;
  --line:#26303d; --line2:#324050;
  --tx:#e8eef6; --tx2:#9fb0c4; --tx3:#6d7f95;
  --pri:#4f8cff; --pri2:#3a72dd;
  --ok:#2ecc8f; --warn:#f5a524; --err:#ff5c5c; --purple:#a97bff;
  --topbg:rgba(15,18,22,.92); --toastbg:#222b38;
  --infoTx:#a9c8ff; --warnTx:#f7c46c; --errTx:#ff9d9d; --okTx:#7fe3ba;
  --canvasShadow:0 2px 16px rgba(0,0,0,.4);
  --r:12px;
}
[data-theme="light"]{
  --bg:#f2f5f9; --bg2:#ffffff; --card:#ffffff; --card2:#eef2f7;
  --line:#dde4ec; --line2:#c6d1de;
  --tx:#1d2836; --tx2:#4d607a; --tx3:#7f93aa;
  --pri:#2f6fe0; --pri2:#255cbd;
  --ok:#159a67; --warn:#cf8a10; --err:#d94b4b; --purple:#7e57e6;
  --topbg:rgba(255,255,255,.92); --toastbg:#ffffff;
  --infoTx:#2a5fb8; --warnTx:#a26a08; --errTx:#bc3b3b; --okTx:#0e7c52;
  --canvasShadow:0 2px 14px rgba(40,60,90,.18);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--tx);
  font:14px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  min-height:100vh;
}
h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:.2px}
a{color:var(--pri);text-decoration:none}
button{font-family:inherit}
.hide{display:none!important}

/* ===== 顶栏 ===== */
.top{
  position:sticky;top:0;z-index:50;
  display:flex;align-items:center;gap:12px;
  padding:12px 18px;background:var(--topbg);
  border-bottom:1px solid var(--line);backdrop-filter:blur(10px);
}
.brand{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:700;cursor:pointer;user-select:none}
.brand .dot{width:9px;height:9px;border-radius:50%;background:var(--pri);box-shadow:0 0 10px var(--pri)}
.top .spacer{flex:1}
.me{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--tx2)}
.badge{
  display:inline-flex;align-items:center;gap:5px;
  padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;
  border:1px solid var(--line2);background:var(--card2);color:var(--tx2);white-space:nowrap;
}
.badge.admin{color:var(--purple);border-color:rgba(169,123,255,.45);background:rgba(169,123,255,.12)}
.badge.head{color:var(--pri);border-color:rgba(79,140,255,.45);background:rgba(79,140,255,.12)}
.badge.subj{color:var(--ok);border-color:rgba(46,204,143,.45);background:rgba(46,204,143,.12)}
.badge.parent{color:var(--warn);border-color:rgba(245,165,36,.45);background:rgba(245,165,36,.12)}
.badge.pending{color:var(--tx3)}
.badge.rejected{color:var(--err);border-color:rgba(255,92,92,.45);background:rgba(255,92,92,.1)}

/* ===== 容器 ===== */
.wrap{max-width:1180px;margin:0 auto;padding:18px}
.narrow{max-width:520px;margin:0 auto;padding:18px}
.card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:16px;margin-bottom:14px;
}
.card.tight{padding:12px}
.card h3{font-size:15px;margin-bottom:12px;display:flex;align-items:center;gap:8px}
.card h3 .sub{font-size:12px;color:var(--tx3);font-weight:400}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.grid{display:grid;gap:12px}
.g2{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}

/* ===== 表单 ===== */
label{display:block;font-size:12.5px;color:var(--tx2);margin-bottom:5px}
input,select,textarea{
  width:100%;padding:10px 12px;border-radius:9px;
  border:1px solid var(--line2);background:var(--bg2);color:var(--tx);
  font-size:14px;font-family:inherit;outline:none;transition:.15s;
}
input[type=radio],input[type=checkbox]{width:16px;height:16px;padding:0;flex:none;accent-color:var(--pri)}
input:focus,select:focus,textarea:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(79,140,255,.14)}
textarea{resize:vertical;min-height:80px;line-height:1.6}
.field{margin-bottom:13px}
.hint{font-size:11.5px;color:var(--tx3);margin-top:5px;line-height:1.55}

button{
  padding:10px 16px;border-radius:9px;border:1px solid var(--line2);
  background:var(--card2);color:var(--tx);font-size:13.5px;font-weight:600;
  cursor:pointer;transition:.15s;
}
button:hover:not(:disabled){border-color:var(--pri);color:var(--pri)}
button:disabled{opacity:.45;cursor:not-allowed}
button.pri{background:var(--pri);border-color:var(--pri);color:#fff}
button.pri:hover:not(:disabled){background:var(--pri2)}
button.ok{background:rgba(46,204,143,.16);border-color:rgba(46,204,143,.5);color:var(--ok)}
button.err{background:rgba(255,92,92,.14);border-color:rgba(255,92,92,.45);color:var(--err)}
button.sm{padding:6px 11px;font-size:12.5px;border-radius:7px}
button.ghost{background:transparent}
.btns{display:flex;gap:9px;flex-wrap:wrap}

/* ===== 标签页 ===== */
.tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin-bottom:16px}
.tabs button{
  background:transparent;border:none;border-bottom:2px solid transparent;
  border-radius:0;padding:9px 13px;color:var(--tx2);font-size:13.5px;
}
.tabs button:hover{color:var(--tx)}
.tabs button.on{color:var(--pri);border-bottom-color:var(--pri)}
.tabs button .cnt{
  display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;
  background:var(--err);color:#fff;font-size:10.5px;font-weight:700;line-height:16px;vertical-align:1px;
}

/* ===== 表格 ===== */
.tw{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
table{border-collapse:collapse;width:100%;font-size:13px;white-space:nowrap}
th{
  background:var(--bg2);color:var(--tx2);font-weight:600;font-size:12.5px;
  text-align:left;padding:9px 11px;border-bottom:1px solid var(--line);
}
td{padding:8px 11px;border-bottom:1px solid var(--line)}
tr:last-child td{border-bottom:none}
tbody tr:hover td{background:rgba(79,140,255,.05)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.mut{color:var(--tx3)}
.ok{color:var(--ok)}
.bad{color:var(--err)}
.warnc{color:var(--warn)}

/* ===== 状态药丸 ===== */
.pill{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:600}
.pill.pending{background:rgba(245,165,36,.15);color:var(--warn)}
.pill.approved{background:rgba(46,204,143,.15);color:var(--ok)}
.pill.rejected{background:rgba(255,92,92,.14);color:var(--err)}
.pill.disabled,.pill.revoked{background:rgba(109,127,149,.18);color:var(--tx3)}

/* ===== 统计卡片（使用概况） ===== */
.statGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:10px;margin:0 0 14px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 8px;text-align:center}
.stat .sv{font-size:19px;font-weight:700;color:var(--tx);font-variant-numeric:tabular-nums}
.stat .sl{font-size:12px;color:var(--tx2);margin-top:2px}

/* ===== 提示 ===== */
.toast{
  position:fixed;left:50%;bottom:28px;transform:translateX(-50%);
  background:var(--toastbg);border:1px solid var(--line2);color:var(--tx);
  padding:10px 18px;border-radius:10px;font-size:13.5px;z-index:999;
  box-shadow:0 10px 30px rgba(0,0,0,.5);max-width:88vw;
}
.toast.ok{border-color:rgba(46,204,143,.5)}
.toast.err{border-color:rgba(255,92,92,.5)}

.box{border-radius:10px;padding:11px 13px;font-size:13px;line-height:1.6;margin-bottom:13px}
.box.info{background:rgba(79,140,255,.09);border:1px solid rgba(79,140,255,.3);color:var(--infoTx)}
.box.warn{background:rgba(245,165,36,.09);border:1px solid rgba(245,165,36,.3);color:var(--warnTx)}
.box.err{background:rgba(255,92,92,.08);border:1px solid rgba(255,92,92,.3);color:var(--errTx)}
.box.ok{background:rgba(46,204,143,.09);border:1px solid rgba(46,204,143,.3);color:var(--okTx)}

/* ===== 统计卡 ===== */
.stat{background:var(--card2);border:1px solid var(--line);border-radius:11px;padding:13px}
.stat .k{font-size:11.5px;color:var(--tx3);margin-bottom:5px}
.stat .v{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.stat .d{font-size:11.5px;color:var(--tx3);margin-top:3px}

/* ===== 列表项 ===== */
.item{
  display:flex;gap:12px;align-items:flex-start;
  padding:12px;border:1px solid var(--line);border-radius:10px;
  background:var(--bg2);margin-bottom:9px;
}
.item .grow{flex:1;min-width:0}
.item .t{font-weight:600;font-size:13.5px;margin-bottom:3px}
.item .m{font-size:12px;color:var(--tx3);line-height:1.6;word-break:break-word}
.item .acts{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}

.empty{text-align:center;padding:34px 16px;color:var(--tx3);font-size:13px}

/* ===== 家长端成绩卡 ===== */
.subjcard{background:var(--card2);border:1px solid var(--line);border-radius:11px;padding:13px}
.subjcard .top2{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.subjcard .name{font-weight:650;font-size:14px}
.subjcard .sc{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.bar{height:6px;border-radius:99px;background:var(--line);overflow:hidden;margin:6px 0 8px}
.bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--pri),var(--purple))}
.mini{font-size:11.5px;color:var(--tx3);display:flex;justify-content:space-between;gap:8px}

/* 分数录入网格 */
.scgrid{display:grid;grid-template-columns:1fr repeat(var(--cols,1),88px);gap:6px;align-items:center}
.scgrid .hd{font-size:12px;color:var(--tx2);text-align:center;padding-bottom:3px}
.scgrid input{padding:7px 8px;text-align:right;font-variant-numeric:tabular-nums}
.scgrid .nm{padding:7px 0;font-size:13px;overflow:hidden;text-overflow:ellipsis}

/* ===== 只读阅览区（家长端成绩单 / 评语）===== */
.roHost{
  position:relative;line-height:0;
  user-select:none;-webkit-user-select:none;-ms-user-select:none;
  -webkit-touch-callout:none;
}
.roHost canvas{max-width:100%;box-shadow:var(--canvasShadow)}
.roHost::after{
  content:'只读阅览 · 不可复制';position:absolute;right:10px;bottom:10px;
  font-size:10.5px;line-height:1.7;color:var(--tx3);
  background:var(--topbg);border:1px solid var(--line2);border-radius:999px;
  padding:1px 9px;pointer-events:none;
}
.hashmono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;letter-spacing:.3px}

/* ===== 手机端适配 ===== */
@media (max-width:640px){
  .wrap,.narrow{padding:12px}
  .top{padding:10px 12px;gap:8px}
  .brand{font-size:14.5px;gap:7px}
  .brand .dot{width:8px;height:8px}
  .me{gap:7px}
  .me .who{display:none}
  /* 390px 顶栏最挤：分析报告入口收掉图标只留文字，避免横向溢出 */
  .rep-ico{display:none}
  .rep-lbl{white-space:nowrap}
  .badge{font-size:11px;padding:2px 7px}
  #btnTheme{padding:6px 9px}
  .card{padding:13px;border-radius:10px}
  .card h3{font-size:14px;flex-wrap:wrap;gap:4px 8px}

  /* 页签放不下时横向滑动，不换行 */
  .tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;margin-bottom:13px;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tabs button{flex:0 0 auto;padding:9px 12px;font-size:13px}

  /* 表格：横向滚动更顺滑，行距略收紧 */
  .tw{-webkit-overflow-scrolling:touch}
  table{font-size:12.5px}
  th,td{padding:8px 9px}

  /* 录入网格：科目列压缩到 64-74px，避免 7 科时过宽 */
  .scgrid{grid-template-columns:minmax(84px,1fr) repeat(var(--cols,1),minmax(64px,74px));gap:5px}

  /* 统计卡与列表 */
  .stat .v{font-size:19px}
  .item{flex-direction:column;gap:8px}
  .item .acts{justify-content:flex-start}

  /* 触控目标 */
  button{min-height:38px}
  button.sm{min-height:32px}
  input,select,textarea{font-size:16px} /* 16px 以上才不会触发 iOS 聚焦自动放大 */

  /* 弹窗贴边、更低 */
  .toast{bottom:18px;max-width:92vw;font-size:13px}

  /* 家长端成绩卡 */
  .subjcard .sc{font-size:18px}
}

/* ===== 成绩档案（可打印 A4 · 纸面独立配色，不随主题翻转） ===== */
.archPaper{
  --ap-ink:#1a1d21; --ap-ink2:#4b5563; --ap-mut:#6b7280; --ap-line:#e5e7eb;
  --ap-ok:#0e7c52; --ap-danger:#c0392b; --ap-brand:#3b5bdb;
  background:#fff; color:var(--ap-ink); border-radius:14px;
  padding:26px 26px 30px; box-shadow:var(--canvasShadow);
  font-size:14px; line-height:1.75; max-width:900px; margin:0 auto;
}
.archPaper header.apTop{
  background:linear-gradient(135deg,#1f6feb,#5f3dc4); color:#fff; border-radius:16px;
  padding:22px 24px 18px; -webkit-print-color-adjust:exact; print-color-adjust:exact;
}
.archPaper .apCls{font-size:12.5px;opacity:.9;letter-spacing:2px}
.archPaper .apTop h1{margin:2px 0 6px;font-size:22px}
.archPaper .apSub{opacity:.94;font-size:13.5px}
.archPaper .apMeta{margin-top:12px;display:flex;flex-wrap:wrap;gap:8px;font-size:12.5px}
.archPaper .apMeta span{background:rgba(255,255,255,.16);padding:4px 10px;border-radius:999px}
.archPaper .apNotice{
  background:#f0fdf4;border:1px solid #bbf7d0;border-radius:12px;padding:12px 15px;
  margin:16px 0;font-size:13.5px;color:#14532d;-webkit-print-color-adjust:exact;print-color-adjust:exact;
}
.archPaper .apNotice b{color:#15803d}
.archPaper h2.apSec{margin:26px 0 10px;font-size:17px;display:flex;align-items:center;gap:10px}
.archPaper h2.apSec .n{
  width:25px;height:25px;border-radius:8px;background:var(--ap-ink);color:#fff;font-size:12.5px;
  display:flex;align-items:center;justify-content:center;flex:0 0 auto;
  -webkit-print-color-adjust:exact;print-color-adjust:exact;
}
.archPaper .apCard{background:#fff;border:1px solid var(--ap-line);border-radius:12px;padding:15px 17px}
.archPaper .apKpis{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media(min-width:700px){.archPaper .apKpis{grid-template-columns:repeat(4,1fr)}}
.archPaper .apKpi{background:#fff;border:1px solid var(--ap-line);border-radius:12px;padding:11px 14px}
.archPaper .apKpi .lab{font-size:12px;color:var(--ap-mut)}
.archPaper .apKpi .val{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}
.archPaper .apKpi .val small{font-size:12.5px;font-weight:400;color:var(--ap-mut)}
.archPaper table{width:100%;border-collapse:collapse;font-size:13.5px;border:1px solid var(--ap-line);border-radius:12px;overflow:hidden;margin-top:6px}
.archPaper th,.archPaper td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--ap-line);vertical-align:top}
.archPaper th{background:#f9fafb;font-size:12.5px;color:var(--ap-ink2);font-weight:600;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper tr:last-child td{border-bottom:0}
.archPaper td.num,.archPaper .num{font-variant-numeric:tabular-nums;white-space:nowrap}
.archPaper .up{color:var(--ap-ok);font-weight:600}
.archPaper .dn{color:var(--ap-danger);font-weight:600}
.archPaper .apBar{margin:9px 0}
.archPaper .apBarTop{display:flex;justify-content:space-between;font-size:13.5px;margin-bottom:3px}
.archPaper .apBarTop i{font-style:normal;color:var(--ap-mut);font-variant-numeric:tabular-nums}
.archPaper .apTrack{background:#eef1f5;border-radius:6px;height:14px;overflow:hidden;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper .apFill{height:100%;border-radius:6px;background:linear-gradient(90deg,#4c6ef5,#3b5bdb);-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper .apBar.low .apFill{background:linear-gradient(90deg,#f59e0b,#d97706)}
.archPaper .apMark{position:absolute;top:-3px;bottom:-3px;width:2px;background:#dc2626}
.archPaper ul.apTight{margin:4px 0 0;padding-left:20px}
.archPaper ul.apTight li{margin:7px 0}
.archPaper .apBox{border-radius:12px;padding:12px 15px;font-size:13.5px;margin-top:12px}
.archPaper .apGrayBox{background:#f8fafc;border:1px solid #e2e8f0;color:#334155;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper .apWarnBox{background:#fffbeb;border:1px solid #fde68a;color:#92400e;margin-top:0}
.archPaper .apBlueBox{background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper .apMut{color:var(--ap-mut);font-size:12.5px}
.archPaper .apTag{display:inline-block;padding:1px 7px;border-radius:999px;font-size:11.5px;margin:1px 3px 1px 0;white-space:nowrap;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.archPaper .apTagOk{color:#0e7c52;background:rgba(14,124,82,.12)}
.archPaper .apTagWarn{color:#a26a08;background:rgba(162,106,8,.12)}
.archPaper .apTagBad{color:#c0392b;background:rgba(192,57,43,.12)}
.archPaper .apFoot{margin-top:24px;text-align:center;color:var(--ap-mut);font-size:12px;line-height:1.9}
.archPaper .apActions{display:flex;gap:10px;margin-top:18px;align-items:center}
.archPaper .archSel{
  background:#fff;border:1px solid var(--ap-line);color:var(--ap-ink);border-radius:9px;
  padding:8px 10px;font-size:13px;max-width:280px;
}
@media(max-width:820px){
  .archPaper{padding:16px 12px 22px}
  .archPaper .apTop{padding:16px 14px 14px}
  .archPaper .apTop h1{font-size:18.5px}
  .archPaper .apCard{padding:12px;overflow-x:auto}
  .archPaper table{min-width:520px}
  .archPaper .apActions{flex-wrap:wrap}
}

/* 打印：只输出档案纸面，隐藏 SPA 其余部分（仅当档案页激活时接管打印） */
#archPrintRoot{display:none}
@media print{
  body.arch-on{background:#fff}
  body.arch-on #topbar,body.arch-on #view,body.arch-on #modalHost{display:none!important}
  body.arch-on #archPrintRoot{display:block!important}
  #archPrintRoot .archPaper{box-shadow:none;border-radius:0;max-width:none;margin:0;padding:0 4px}
  #archPrintRoot .apActions{display:none!important}
  #archPrintRoot .apCard,#archPrintRoot .apBar,#archPrintRoot .apBox,#archPrintRoot table{break-inside:avoid}
}

/* ===== 使用说明（各权限一份 · 可打印） ===== */
.gdHead{margin-bottom:12px}
.gdHead h3{font-size:17px;margin-bottom:6px}
.gdHead .hint{font-size:12.5px}
.gdBody{padding:4px 18px 18px}
.gdBody .gdH{
  font-size:15px;margin:22px 0 10px;padding-left:11px;line-height:1.5;
  border-left:3px solid var(--brand);display:block;
}
.gdBody .gdSec:first-child .gdH{margin-top:14px}
.gdBody .gdP{margin:0 0 9px;font-size:13.5px;line-height:1.85;color:var(--tx)}
.gdBody ul.gdList,.gdBody ol.gdList{margin:8px 0 12px;padding-left:22px}
.gdBody ul.gdList li,.gdBody ol.gdList li{font-size:13.5px;line-height:1.85;margin:7px 0}
.gdBody ul.gdList{list-style:disc}
.gdBody ol.gdList{list-style:decimal}
/* 表格：正文类表格必须换行（全局 table 是 nowrap，学生会撑爆手机屏） */
.gdBody .tw table,.gdPrintWrap .tw table{white-space:normal}
.gdBody .tw table th,.gdBody .tw table td,.gdPrintWrap .tw table th,.gdPrintWrap .tw table td{
  vertical-align:top;line-height:1.7;
}
.gdBody .tw table td:first-child{font-weight:600}
.gdToc{margin-bottom:12px}
.gdTocList{display:flex;flex-wrap:wrap;gap:7px}
.gdTocBtn{padding:6px 11px!important;font-size:12.5px!important;text-align:left}
.gdFoot .btns{margin-top:6px}
/* 打印：只输出说明正文 */
#guidePrintRoot{display:none}
.gdPrintWrap{padding:0 6px;max-width:900px;margin:0 auto;background:#fff;color:#16181d}
.gdPrintWrap .gdH{border-left:3px solid #3b5bdb;color:#16181d;page-break-after:avoid}
.gdPrintWrap .gdP,.gdPrintWrap .gdList li{color:#25282e}
.gdPrintWrap .box{break-inside:avoid}
.gdPrintWrap .tw table th,.gdPrintWrap .tw table td{border-color:#dcdfe4;color:#25282e}
.gdPrintWrap .tw table th{background:#f3f5f8}
.gdPrintWrap .gdSec{break-inside:auto}
.gdPrintHead{border-bottom:1px solid #dcdfe4;padding-bottom:10px;margin-bottom:6px}
@media print{
  body.guide-on{background:#fff}
  body.guide-on #topbar,body.guide-on #view,body.guide-on #modalHost{display:none!important}
  body.guide-on #guidePrintRoot{display:block!important}
}
/* 手机端：说明里的表格全部换行显示，不横向滚动 */
@media(max-width:820px){
  .gdBody{padding:2px 12px 14px}
  .gdBody .tw table,.gdBody .tw table td,.gdBody .tw table th{white-space:normal!important}
  .gdBody .tw table td:first-child{white-space:normal!important;font-weight:600}
  .gdBody .gdH{font-size:14.5px;margin:18px 0 8px}
  .gdBody .gdP,.gdBody ul.gdList li,.gdBody ol.gdList li{font-size:13px;line-height:1.8}
  .gdTocList{gap:6px}
  .gdTocBtn{font-size:12px!important}
}

/* 会员管理：两张表的列内容较长，手机端必须换行（全局 table 是 nowrap） */
#memParents .tw table,#memOrders .tw table{white-space:normal}
#memParents .tw table th,#memParents .tw table td,#memOrders .tw table th,#memOrders .tw table td{vertical-align:top;line-height:1.7}
#memParents .tw table td:first-child{white-space:nowrap}

/* ===== 性别占比条（名册） ===== */
.gbarWrap{margin:0 0 10px}
.gbar{display:flex;height:8px;border-radius:999px;overflow:hidden;background:var(--card2)}
.gSeg{display:block;height:100%}
.gSeg.gM{background:var(--pri)}
.gSeg.gF{background:var(--purple)}
.gSeg.gU{background:var(--line2)}
.gbarTxt{margin-top:5px;font-size:12.5px;color:var(--tx2)}
.gbarTxt b{color:var(--tx)}
select.gSel{padding:2px 6px;font-size:12.5px;min-width:66px}

/* ===== 中考倒计时（家长端头部） ===== */
.cdLine{margin-top:6px;font-size:13.5px;color:var(--tx2)}
.cdLine b{color:var(--tx)}
.cdLine .cdNum{font-size:16px;color:var(--pri)}

/* ===== 真题练习 ===== */
.qzStem{font-size:14.5px;line-height:1.7;margin-bottom:6px}
.qzOpt{display:flex;align-items:flex-start;gap:6px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;margin:4px 0;cursor:pointer;font-size:14px;line-height:1.6}
.qzOpt:hover{background:var(--card2)}
.qzOpt.on{border-color:var(--pri);background:color-mix(in srgb,var(--pri) 8%,transparent)}
.qzOpt input{margin-top:5px;flex:none}
.qzFill{width:100%;max-width:340px}
.qzOpt .qzTxt{flex:1;min-width:0}

/* ===== 试卷保护：只能在线答题，不能复制/下载/打印 ===== */
body.qzLockOn #pHost,
body.qzLockOn #pHost *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
body.qzLockOn #pHost .qzFill,
body.qzLockOn #pHost .qzFill *{-webkit-user-select:text;user-select:text}
@media print{
  body.qzLockOn > *{display:none !important}
  body.qzLockOn::after{content:'试卷内容仅限在线答题，不支持打印或导出。';display:block;margin:48px 24px;font-size:16px;color:#333;text-align:center}
}

/* ===== 考点芯片（挂考点 / 结果页考点标签） ===== */
.kpChips{display:flex;flex-wrap:wrap;gap:6px}
.kpChip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid var(--line);border-radius:14px;background:var(--card2);color:var(--tx2);font-size:12.5px;cursor:pointer;line-height:1.4;max-width:100%}
.kpChip i{font-style:normal;color:var(--mut);font-size:11px}
.kpChip.on{border-color:var(--pri);background:color-mix(in srgb,var(--pri) 12%,transparent);color:var(--pri)}
.kpChip.on i{color:var(--pri)}
.kpQ{padding:8px 0;border-top:1px dashed var(--line)}
.kpQ:first-of-type{border-top:none}
.kpStem{font-size:13.5px;color:var(--tx);margin-bottom:5px;line-height:1.5}
.kpTags{display:flex;flex-wrap:wrap;gap:5px;margin:2px 0 6px}
.kpTag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11.5px;background:color-mix(in srgb,var(--pri) 10%,transparent);color:var(--pri)}

/* ===== 题库听力播放器（quiz-audio.js） ===== */
.qzAud{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--card2)}
.qzAudTop{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline;margin-bottom:8px}
.qzAudLab{font-size:13.5px;font-weight:700;color:var(--tx)}
.qzAudSeg{font-size:12px;color:var(--tx3)}
.qzAudRow{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.qzAudRow .sm{padding:4px 10px}
.qzAudCnt{font-size:12px;color:var(--tx3);margin-left:2px}
.qzAudTip{margin-top:8px;font-size:11.5px}
.qzAud audio{width:100%;margin-top:8px}
.qzScript{margin-top:8px;padding:10px 12px;border-radius:8px;background:var(--bg2,rgba(0,0,0,.04));border:1px dashed var(--line);font-size:13px;line-height:1.85;white-space:normal}
@media (max-width:520px){
  .qzAudRow .sm{padding:5px 9px;font-size:12.5px}
  .qzAudCnt{width:100%}
}

/* ===== 年级范围多选（view-admin.js） ===== */
.gsBox{display:flex;flex-wrap:wrap;gap:8px 14px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card2)}
.gsItem{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer;user-select:none}
.gsItem input{width:15px;height:15px;margin:0;cursor:pointer;accent-color:var(--pri,#4a8)}

/* ===== 登录页公共导航 + 公开入口卡（main.js renderLogin）
   未登录访客也要能看到本站结构：首页 / 服务与开通 / 教学进度表 / 分析报告 ===== */
.pubnav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin:0 0 14px}
.pubnav a{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border:1px solid var(--line);
  border-radius:999px;font-size:13px;text-decoration:none;color:var(--tx2);background:var(--card)}
.pubnav a:hover{border-color:var(--line2);color:var(--tx)}
.pubcard{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

/* ===== 跟读练习（quiz-audio.js repeatHtml） ===== */
.qzRepWrap{margin-top:8px;border-top:1px dashed var(--line);padding-top:6px}
.qzRepSum{cursor:pointer;font-size:13px;color:var(--tx2);padding:2px 0;user-select:none}
.qzRepSum:hover{color:var(--tx)}
.qzRep{margin-top:8px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.qzRepRow{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.qzRepTime{font-size:12px}
