/* ==========================================================
   IVD 成长台 · 医疗蓝白主题 / 响应式布局
   ----------------------------------------------------------
   断点：
     >1536px  折叠屏展开态：左列表 + 右详情 分栏
     >1024px  桌面：固定侧栏 + 表格
     <768px   手机：汉堡抽屉 + 卡片堆叠（无横向滚动，触摸区≥44px）
   全部用 media queries + flex/grid，不写死宽度。
   ========================================================== */
:root{
  --bg:#f2f6fc; --bg-deep:#e9eff9;
  --panel:#ffffff; --panel-2:#f8fbff; --panel-3:#f4f8fe;
  --ink:#0f1f36; --ink-2:#54657e; --ink-3:#8a99ae;
  --line:#e2eaf4; --line-2:#d3dfee;
  --brand:#1668dc; --brand-deep:#0d4aa6; --brand-soft:#eaf2ff; --brand-soft-2:#dbe9ff;
  --ok:#0f9d63; --ok-soft:#e7f8f0;
  --warn:#c47b00; --warn-soft:#fff5e2;
  --bad:#d63a3a; --bad-soft:#fdecec;
  --purple:#6a4bd0; --purple-soft:#f1ecff;
  --shadow-sm:0 1px 2px rgba(15,42,80,.05),0 2px 8px rgba(15,42,80,.045);
  --shadow:0 2px 6px rgba(15,42,80,.06),0 12px 28px rgba(15,42,80,.07);
  --shadow-lg:0 12px 44px rgba(9,25,48,.18);
  --r-sm:8px; --r:12px; --r-lg:16px;
  --sb-w:238px;
  --font:"Inter","PingFang SC","Microsoft YaHei","Hiragino Sans GB","Source Han Sans SC",system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:var(--font);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.6}
body.modal-open{overflow:hidden}
h1,h2,h3,h4,p{margin:0}
button{font-family:inherit;font-size:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
a{color:var(--brand);text-decoration:none}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#cdd9e8;border-radius:8px;border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#b4c5da;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}
[hidden]{display:none!important}
.muted{color:var(--ink-3)}
.mono{font-variant-numeric:tabular-nums}

/* ============ 布局 ============ */
.app{display:flex;min-height:100vh}
.sidebar{
  width:var(--sb-w);flex:0 0 var(--sb-w);background:var(--panel);
  border-right:1px solid var(--line);display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;z-index:40;
}
.brand{display:flex;gap:10px;align-items:center;padding:20px 18px 16px;border-bottom:1px solid var(--line)}
.brand-mark{width:38px;height:38px;border-radius:11px;flex:0 0 38px;background:linear-gradient(150deg,#2b7cf0,#0d4aa6);color:#fff;display:grid;place-items:center;box-shadow:0 6px 14px rgba(22,104,220,.28)}
.brand-mark svg{width:21px;height:21px}
.brand-text{min-width:0}
.brand-text strong{display:block;font-size:15px;letter-spacing:.2px;white-space:nowrap}
.brand-text span{display:block;font-size:11px;color:var(--ink-3);margin-top:-1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* v5.1 侧栏身份块：点左上角 ☰ 就能看到「我现在是谁」，忘了名字不用猜。
   没设名字时用暖色底提醒 —— 那种情况记录挂在临时编号上，换设备会丢。 */
.side-who{display:flex;align-items:center;gap:9px;width:calc(100% - 24px);margin:12px 12px 2px;
  padding:9px 10px;background:var(--brand-soft);border:1px solid #d7e6ff;border-radius:11px;
  text-align:left;font-family:inherit;cursor:pointer;transition:.15s;flex:0 0 auto}
.side-who:hover{border-color:var(--brand);background:#e8f2ff}
.side-who-ico{font-size:17px;line-height:1;flex:0 0 auto}
.side-who-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.side-who-label{font-size:10.5px;color:var(--ink-3);line-height:1.2}
.side-who-name{font-size:13px;color:var(--brand-deep);font-weight:700;line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side-who-more{font-size:18px;color:var(--ink-3);flex:0 0 auto;line-height:1}
.side-who.no-name{background:var(--warn-soft);border-color:#f0dcae}
.side-who.no-name .side-who-name{color:var(--warn)}
.who-card{background:var(--panel-2);border:1px solid var(--line);border-radius:11px;
  padding:12px 14px;margin:12px 0;font-size:13px;line-height:1.7}
.who-card b{font-size:16px;color:var(--brand-deep)}
.who-card .who-id{color:var(--ink-3);font-size:11.5px;font-family:ui-monospace,Consolas,monospace}

.nav{padding:10px;display:flex;flex-direction:column;gap:3px;flex:1;overflow:auto}
.nav-group{display:flex;flex-direction:column;gap:2px}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;
  color:var(--ink-2);font-size:13.5px;text-align:left;position:relative;transition:.15s;width:100%;min-height:42px;
}
.nav-item:hover{background:var(--panel-2);color:var(--ink)}
.nav-item.active{background:var(--brand-soft);color:var(--brand-deep);font-weight:600}
.nav-item.active::before{content:"";position:absolute;left:-10px;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--brand)}
.nav-ico{width:18px;text-align:center;font-size:14px;opacity:.9;flex:0 0 18px}
.nav-label{flex:1;min-width:0}
.nav-caret{font-size:15px;color:var(--ink-3);transition:transform .2s;transform:rotate(0deg)}
.nav-group.collapsed .nav-caret{transform:rotate(-90deg)}
.nav-group.collapsed .nav-sub{display:none}
.nav-sub{display:flex;flex-direction:column;gap:2px;margin:2px 0 4px 12px;padding-left:10px;border-left:1px dashed var(--line-2)}
.nav-child{font-size:13px;padding:8px 10px;min-height:38px}
.nav-child .nav-ico{font-size:12px;color:var(--ink-3)}
.nav-count{margin-left:auto;font-style:normal;font-size:11px;color:var(--ink-3);background:var(--panel-3);border:1px solid var(--line);border-radius:20px;padding:0 7px;line-height:18px;font-variant-numeric:tabular-nums}
.nav-item.active .nav-count{background:#fff;border-color:#cfe0fb;color:var(--brand-deep)}
.nav-parent-active{color:var(--brand-deep);font-weight:600}
.side-foot{padding:12px 14px 16px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.privacy-pill{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--ink-2);background:var(--panel-2);border:1px solid var(--line);border-radius:20px;padding:7px 11px;text-align:left}
.privacy-pill:hover{border-color:#bcd6f7;background:var(--brand-soft)}
.privacy-pill .dot{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px rgba(15,157,99,.14);flex:0 0 7px}
.side-version{font-size:10.5px;color:var(--ink-3);opacity:.85;padding-left:4px}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  position:sticky;top:0;z-index:60;background:rgba(255,255,255,.97);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);padding:13px 24px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
}
.topbar-title h1{font-size:17px;font-weight:700;letter-spacing:.2px}
.topbar-title p{font-size:12px;color:var(--ink-3);margin-top:1px}
.topbar-right{margin-left:auto;display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.stat-chip{display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:3px 12px;min-width:66px}
.stat-chip b{font-size:15px;line-height:1.25;color:var(--brand-deep);font-variant-numeric:tabular-nums}
.stat-chip span{font-size:10.5px;color:var(--ink-3)}
/* v4.0：出题范围入口从顶部条那个蓝色主按钮降级到左侧栏底部
   （用户 2026-11-10：「出题范围不是自己选的吗，先给我放到一个不起眼的地方」）
   它是「设置一次就不用再管」的东西，不该占着顶部条最显眼的位置。
   原来那个白点是配蓝底用的，现在底色浅，改成琥珀色才看得见。 */
.side-scope{display:flex;align-items:center;gap:6px;font-size:11px;line-height:1.3;color:var(--ink-3);background:none;border:0;border-radius:8px;padding:4px;text-align:left;opacity:.85;font-family:inherit;cursor:pointer}
.side-scope:hover{opacity:1;color:var(--ink-2);background:var(--panel-2)}
.side-scope.on{color:var(--brand-deep);opacity:1}
.scope-dot{width:7px;height:7px;border-radius:50%;background:var(--warn);opacity:.35;display:inline-block;margin-left:2px;flex:0 0 7px}
.side-scope.on .scope-dot{opacity:1;box-shadow:0 0 0 3px rgba(196,123,0,.16)}
/* ===== v3.11 顶部条可收起 =====
   用户 2026-11-10：「上滚动搞一个下拉的箭头」——顶部条右侧挂一个箭头，
   点一下整条压成一行（标题 + 箭头），手机能多显示约 30px 的题目内容；
   再点一下拉回来。状态记在 localStorage，下次打开保持上次的选择。 */
.topbar-fold{
  flex:0 0 auto;width:26px;height:26px;padding:0;margin-left:2px;
  display:flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:8px;background:var(--panel-2);
  color:var(--ink-3);font-size:11px;line-height:1;cursor:pointer;
  transition:background .15s,color .15s,transform .18s;
}
.topbar-fold:hover{background:#fff;color:var(--ink)}
.topbar-fold:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
body.topbar-folded .topbar{padding:5px 18px;gap:8px;flex-wrap:nowrap}
body.topbar-folded .topbar-title .crumb,
body.topbar-folded .topbar-title p{display:none}
body.topbar-folded .topbar-title h1{font-size:13px;line-height:1.3}
body.topbar-folded .topbar-right{display:none}
/* 收起后右侧按钮区没了，箭头自己顶到最右边（margin-left:auto 顶住） */
body.topbar-folded .topbar-fold{margin-left:auto}
.only-mobile{display:none!important}
.scrim{position:fixed;inset:0;background:rgba(9,25,48,.4);z-index:35}

.workspace{display:flex;gap:0;align-items:flex-start;flex:1;min-height:0}
.view{padding:22px 24px 70px;flex:1;min-width:0;max-width:1240px;width:100%;margin:0 auto}
.detail-pane{display:none}

/* ============ 通用组件 ============ */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm)}
.card+.card{margin-top:16px}
.card-pad{padding:18px 20px}
.card-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.card-h h3{font-size:14px;font-weight:650}
.card-h .spacer{margin-left:auto}
.stack{display:flex;flex-direction:column;gap:16px}
.row{display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.spacer{margin-left:auto}
.sec-head{display:flex;align-items:flex-end;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.sec-head h2{font-size:16px;font-weight:700}
.sec-head p{font-size:12.5px;color:var(--ink-3)}
.hint{font-size:12px;color:var(--ink-3)}
.hr{height:1px;background:var(--line);margin:14px 0}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:9px;font-size:13px;font-weight:600;border:1px solid var(--line-2);background:var(--panel);color:var(--ink);transition:.15s;white-space:nowrap;min-height:36px}
.btn:hover{border-color:#b9cbe4;background:var(--panel-2)}
.btn-primary{background:linear-gradient(180deg,#2775e6,#1668dc);border-color:#1668dc;color:#fff;box-shadow:0 3px 10px rgba(22,104,220,.22)}
.btn-primary:hover{background:linear-gradient(180deg,#1f6cd8,#0f5bc4);border-color:#0f5bc4}
.btn-ghost{background:transparent;border-color:transparent;color:var(--brand)}
.btn-ghost:hover{background:var(--brand-soft)}
.btn-danger{color:var(--bad);border-color:#f3cfcf;background:#fff}
.btn-danger:hover{background:var(--bad-soft)}
.btn-danger-solid{background:var(--bad);border-color:var(--bad);color:#fff}
.btn-danger-solid:hover{background:#bd2f2f}
.btn-sm{padding:5px 10px;font-size:12px;border-radius:8px;min-height:30px}
.btn-lg{padding:11px 20px;font-size:14px;border-radius:11px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.icon-btn{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;color:var(--ink-2);font-size:16px;flex:0 0 auto}
.icon-btn:hover{background:var(--panel-2)}

.tag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;padding:2px 8px;border-radius:6px;background:var(--brand-soft);color:var(--brand-deep);font-weight:600;white-space:nowrap}
.tag.gray{background:#eef2f8;color:var(--ink-2)}
.tag.ok{background:var(--ok-soft);color:var(--ok)}
.tag.warn{background:var(--warn-soft);color:var(--warn)}
.tag.bad{background:var(--bad-soft);color:var(--bad)}
.tag.purple{background:var(--purple-soft);color:var(--purple)}
.tag.demo{background:#f0f4fa;color:var(--ink-3);border:1px dashed var(--line-2)}
.type-single{background:#e8f1ff;color:#1a5fc4}
.type-multi{background:#ecebff;color:#5b4bc4}
.type-fill{background:#fff2e2;color:#a56a00}
.type-qa{background:#e6f7f0;color:#0d8a57}
.type-term{background:#fdeef5;color:#b0457e}

.input,select.input,textarea.input{width:100%;padding:8px 11px;border:1px solid var(--line-2);border-radius:9px;background:#fff;outline:none;transition:.15s;font-size:13px;min-height:36px}
.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(22,104,220,.12)}
textarea.input{resize:vertical;line-height:1.7;min-height:88px}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:12px;color:var(--ink-2);font-weight:600}
.field label i{color:var(--bad);font-style:normal}
.field-hint{font-size:11px;color:var(--ink-3)}
.static-val{font-size:13px;color:var(--ink-2);background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:8px 11px;white-space:pre-wrap;max-height:180px;overflow:auto}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field-full{grid-column:1/-1}

/* 复选框 / 开关 */
.cbx{width:17px;height:17px;accent-color:var(--brand);cursor:pointer;flex:0 0 17px}
.cbx-lg{width:18px;height:18px}
.switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;user-select:none}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .track{width:40px;height:22px;border-radius:20px;background:#cfd9e7;position:relative;transition:.2s;flex:0 0 40px}
.switch .track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:.2s}
.switch input:checked+.track{background:var(--brand)}
.switch input:checked+.track::after{transform:translateX(18px)}
.switch input:focus-visible+.track{box-shadow:0 0 0 3px rgba(22,104,220,.2)}

/* 表格（桌面） */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{background:var(--panel-2);color:var(--ink-2);font-weight:600;font-size:12px;text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:11px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover{background:var(--panel-3)}
.tbl tbody tr.is-disabled{opacity:.5;background:#fafbfd}
.tbl tbody tr.is-disabled .fname{text-decoration:line-through}
.tbl .num{font-variant-numeric:tabular-nums;white-space:nowrap}
.fname{font-weight:600;color:var(--ink);word-break:break-all;line-height:1.45}
.fname small{display:block;font-weight:400;color:var(--ink-3);font-size:11px;margin-top:2px}
.tag-cell{display:flex;gap:4px;flex-wrap:wrap;max-width:230px}
.dist{font-size:11.5px;color:var(--ink-2);white-space:nowrap}
.dist b{color:var(--brand-deep);font-weight:600}
.row-actions{display:flex;gap:4px;justify-content:flex-end;flex-wrap:wrap}
.mini-btn{font-size:12px;padding:4px 8px;border-radius:7px;color:var(--ink-2);border:1px solid transparent;white-space:nowrap;min-height:30px}
.mini-btn:hover{background:var(--brand-soft);color:var(--brand-deep)}
.mini-btn.danger:hover{background:var(--bad-soft);color:var(--bad)}
.mini-btn .lock{font-size:11px;margin-left:2px}

/* 展开区 / 详情 */
.detail-body{background:var(--panel-3);border-top:1px solid var(--line);padding:14px 16px}
.detail-row td{padding:0!important;background:var(--panel-3)}
.sub-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.sub-head h4{font-size:13px;font-weight:650}
.sub-head .spacer{margin-left:auto}
.q-list{display:flex;flex-direction:column;gap:8px}
.q-item{background:#fff;border:1px solid var(--line);border-radius:9px;padding:10px 12px;display:flex;gap:10px;align-items:flex-start}
.q-item.off{opacity:.52;background:#f7f9fc}
.q-item.off .q-stem{text-decoration:line-through}
.q-item .q-main{flex:1;min-width:0}
.q-stem{font-size:13px;line-height:1.6;word-break:break-word}
.q-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;align-items:center}
.q-answer{font-size:12px;color:var(--ink-2);margin-top:5px;word-break:break-word}
.q-answer b{color:var(--ok)}
.q-actions{display:flex;gap:2px;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;max-width:150px}
.k-item{background:#fff;border:1px solid var(--line);border-radius:9px;padding:11px 12px}
.k-item.off{opacity:.52}
.k-item h4{font-size:13px;font-weight:650;margin-bottom:4px;display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.k-item p{font-size:12.5px;color:var(--ink-2);line-height:1.65;white-space:pre-wrap;word-break:break-word;max-height:76px;overflow:hidden}
.k-foot{display:flex;gap:6px;align-items:center;margin-top:8px;flex-wrap:wrap}
.link-chip{font-size:11px;color:var(--brand-deep);background:var(--brand-soft);border-radius:6px;padding:2px 7px;cursor:pointer;border:1px solid #d5e6ff}
.link-chip:hover{background:var(--brand-soft-2)}

.detail-pane{position:sticky;top:70px;align-self:flex-start;max-height:calc(100vh - 90px);overflow:auto;background:var(--panel);border:1px solid var(--line);border-left:2px solid var(--brand-soft-2);border-radius:0 0 0 var(--r);box-shadow:var(--shadow-sm);padding:16px;flex:0 0 34%;min-width:320px;max-width:460px}
.detail-pane .pane-h{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.detail-pane .pane-h h3{font-size:14px;font-weight:700;flex:1;min-width:0;word-break:break-all}

/* 空态 / 页头 / 占位 */
.empty{text-align:center;padding:46px 20px;color:var(--ink-3)}
.empty-ico{font-size:34px;opacity:.6;margin-bottom:8px}
.empty h3{font-size:14px;color:var(--ink-2);font-weight:600;margin-bottom:4px}
.empty p{font-size:12.5px;max-width:430px;margin:0 auto 14px;line-height:1.7}
.page-intro{background:linear-gradient(120deg,#fff,#f4f9ff);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;margin-bottom:16px}
.page-intro h2{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.page-intro p{font-size:12.5px;color:var(--ink-2);margin-top:6px;line-height:1.7}
.page-intro .pill-line{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}

/* 标签页 */
.tabs{display:flex;gap:4px;background:var(--panel-2);border:1px solid var(--line);border-radius:11px;padding:4px;margin-bottom:16px;width:fit-content;max-width:100%}
.tab{padding:8px 18px;border-radius:8px;font-size:13px;font-weight:600;color:var(--ink-2);min-height:38px;display:flex;align-items:center;gap:7px}
.tab:hover{background:#fff;color:var(--ink)}
.tab.active{background:#fff;color:var(--brand-deep);box-shadow:var(--shadow-sm)}
.tab .cnt{font-size:11px;background:var(--brand-soft);color:var(--brand-deep);border-radius:12px;padding:0 6px;font-variant-numeric:tabular-nums}

/* 上传区 */
.upload-zone{border:1.5px dashed #bcd3ef;background:linear-gradient(180deg,#fbfdff,#f4f9ff);border-radius:var(--r);padding:16px 18px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px;transition:.15s}
.upload-zone.drag{border-color:var(--brand);background:var(--brand-soft)}
.upload-ico{width:42px;height:42px;border-radius:12px;background:var(--brand-soft);display:grid;place-items:center;font-size:20px;color:var(--brand-deep);flex:0 0 42px}
.upload-txt{flex:1;min-width:180px}
.upload-txt b{font-size:13.5px;display:block}
.upload-txt span{font-size:11.5px;color:var(--ink-3);display:block;margin-top:2px;line-height:1.6}

/* 工具条 */
.toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;padding:10px 16px;background:var(--panel-2);border-bottom:1px solid var(--line)}
.toolbar .input{width:auto;min-width:130px;flex:0 1 190px}
.toolbar .spacer{margin-left:auto}
.batch-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:9px 16px;background:#fff7e9;border-bottom:1px solid #f6e3bd;font-size:12.5px;color:#8a5c00}
.batch-bar b{color:#a56a00}
.sel-count{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}

/* 出题范围面板 */
.scope-host{padding:0 24px}
.scope-panel{border:1px solid #cfe0fb;background:linear-gradient(180deg,#f7fbff,#fff);border-radius:var(--r);box-shadow:var(--shadow-sm);margin:16px 0 0;overflow:hidden}
.scope-h{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.scope-h h3{font-size:14px;font-weight:700}
.scope-h p{font-size:11.5px;color:var(--ink-3)}
.scope-h .spacer{margin-left:auto}
.scope-body{padding:16px 18px}
.scope-switches{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
.scope-lib{border:1px solid var(--line);border-radius:11px;padding:13px 14px;background:#fff;display:flex;gap:12px;align-items:center;transition:.15s}
.scope-lib.on{border-color:#a9cdf7;background:linear-gradient(120deg,#f4f9ff,#fff)}
.scope-lib.off{opacity:.62}
.scope-lib .lib-ico{font-size:22px;flex:0 0 auto}
.scope-lib .lib-txt{flex:1;min-width:0}
.scope-lib .lib-txt b{font-size:13.5px;display:block}
.scope-lib .lib-txt span{font-size:11.5px;color:var(--ink-3)}
.scope-lib .spacer{margin-left:auto}
.scope-filters{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.scope-filters .input{width:auto;flex:1 1 170px;min-width:130px}
.scope-filters select.input{flex:0 1 160px}
.scope-files{border:1px solid var(--line);border-radius:10px;max-height:270px;overflow:auto;background:#fff}
.scope-file{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line);min-height:46px}
.scope-file:last-child{border-bottom:none}
.scope-file:hover{background:var(--panel-3)}
.scope-file-off{opacity:.5}
.scope-group-label{font-size:12px;font-weight:700;color:var(--ink-2);background:var(--panel-2);padding:7px 12px;border-bottom:1px solid var(--line);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.scope-empty{padding:24px 14px;text-align:center;font-size:12.5px;color:var(--ink-3)}
.scope-file .sf-name{flex:1;min-width:0;font-size:12.5px;font-weight:600;word-break:break-all}
.scope-file .sf-name small{display:block;font-weight:400;color:var(--ink-3);font-size:11px}
.scope-file .sf-nums{font-size:11.5px;color:var(--ink-2);white-space:nowrap;font-variant-numeric:tabular-nums}
.scope-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:13px 18px;border-top:1px solid var(--line);background:var(--panel-2)}
.scope-stat{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.scope-stat .big{font-size:21px;font-weight:700;color:var(--brand-deep);font-variant-numeric:tabular-nums;line-height:1}
.scope-stat .lbl{font-size:11px;color:var(--ink-3)}
.scope-stat .unit{display:flex;flex-direction:column;gap:2px}
.scope-note{font-size:11.5px;color:var(--ink-3);line-height:1.6;max-width:420px}
.scope-note.warn{color:var(--warn)}
.smart-line{font-size:11.5px;color:var(--ink-2);background:#fff;border:1px dashed var(--line-2);border-radius:8px;padding:8px 11px;margin-top:12px;line-height:1.7}
.smart-line b{color:var(--brand-deep)}

/* 占位页 */
.dev-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:14px}
.dev-item{border:1px solid var(--line);border-radius:10px;padding:13px 15px;background:#fff}
.dev-item h4{font-size:13px;font-weight:650;margin-bottom:5px;display:flex;align-items:center;gap:7px}
.dev-item p{font-size:12px;color:var(--ink-2);line-height:1.7}
.dev-item .dot{width:6px;height:6px;border-radius:50%;background:var(--brand);display:inline-block}

/* Modal */
.modal-root{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:18px}
.modal-scrim{position:absolute;inset:0;background:rgba(9,25,48,.42);backdrop-filter:blur(2px)}
.modal{position:relative;width:min(520px,100%);max-height:min(86vh,760px);display:flex;flex-direction:column;background:var(--panel);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);animation:tin .2s ease-out;overflow:hidden}
.modal-wide{width:min(760px,100%)}
@keyframes tin{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
.modal-h{display:flex;align-items:center;gap:10px;padding:15px 18px;border-bottom:1px solid var(--line)}
.modal-h h3{font-size:15px;font-weight:700;flex:1}
.modal.modal-danger .modal-h{background:var(--bad-soft)}
.modal-b{padding:18px;overflow:auto;flex:1;min-height:0}
.modal-f{display:flex;justify-content:flex-end;gap:9px;padding:12px 18px;border-top:1px solid var(--line);background:var(--panel-2)}
.modal-msg{font-size:13.5px;color:var(--ink-2);line-height:1.8;white-space:pre-wrap;word-break:break-word}
.modal-note{font-size:11.5px;color:var(--ink-3);margin-top:12px;line-height:1.7}
.view-block{background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:12px 14px;margin-bottom:12px;font-size:13px;line-height:1.8;white-space:pre-wrap;word-break:break-word}
.view-block b{color:var(--ink-3);font-size:11.5px;display:block;margin-bottom:3px;font-weight:600}

/* Toast */
.toast-root{position:fixed;right:18px;bottom:18px;z-index:120;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}
.toast{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:10px;padding:10px 14px;box-shadow:var(--shadow);font-size:13px;animation:tin .2s ease-out;max-width:min(360px,88vw);pointer-events:auto}
.toast.ok{border-left-color:var(--ok)}.toast.warn{border-left-color:var(--warn)}.toast.bad{border-left-color:var(--bad)}
.toast.out{opacity:0;transform:translateY(8px);transition:.25s}
.toast-ico{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;color:#fff;background:var(--brand);flex:0 0 18px}
.toast.ok .toast-ico{background:var(--ok)}.toast.warn .toast-ico{background:var(--warn)}.toast.bad .toast-ico{background:var(--bad)}

/* 隐私面板 */
.priv-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.priv-cell{background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:11px 13px}
.priv-cell b{display:block;font-size:18px;color:var(--brand-deep);font-variant-numeric:tabular-nums}
.priv-cell span{font-size:11.5px;color:var(--ink-3)}

/* ============ 出题范围面板 v0.2：三个独立区块 ============ */
.scope-blocks{display:flex;flex-direction:column;gap:12px}
.scope-block{border:1px solid var(--line);border-radius:11px;background:#fff;overflow:hidden}
.blk-h{display:flex;align-items:center;gap:10px;padding:10px 13px;background:var(--panel-2);border-bottom:1px solid var(--line);flex-wrap:wrap}
.blk-no{width:24px;height:24px;border-radius:7px;background:var(--brand-soft);color:var(--brand-deep);display:grid;place-items:center;font-weight:700;font-size:12px;flex:0 0 24px}
.blk-t{flex:1;min-width:160px}
.blk-t b{font-size:13px;display:block}
.blk-t small{font-size:11px;color:var(--ink-3)}
.scope-switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;user-select:none}
.scope-switch input{position:absolute;opacity:0;width:0;height:0}
.scope-switch .track{width:40px;height:22px;border-radius:20px;background:#cfd9e7;position:relative;transition:.2s;flex:0 0 40px}
.scope-switch .track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:.2s}
.scope-switch input:checked+.track{background:var(--brand)}
.scope-switch input:checked+.track::after{transform:translateX(18px)}
.sw-txt{min-width:78px}
.sw-txt b{font-size:12px;display:block}
.sw-txt small{font-size:10.5px;color:var(--ink-3);display:block}
.blk-b{padding:11px 13px}
.blk-b.blk-off{opacity:.55}
.fusion-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:9px}
.fusion-bar label{font-size:12px;font-weight:600;color:var(--ink-2);white-space:nowrap}
.fusion-bar .input{width:auto;flex:0 1 190px;min-width:150px;min-height:34px}
.fusion-line{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--brand-soft);border:1px solid #d5e6ff;border-radius:8px;padding:8px 10px;margin-bottom:9px;font-size:12px}
.fusion-line b{color:var(--brand-deep)}
.year-line{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:9px}
.year-chip{border:1px solid var(--line-2);border-radius:20px;padding:3px 11px;font-size:11.5px;color:var(--ink-2);min-height:30px}
.year-chip.on,.year-chip.all{background:var(--brand-soft);border-color:#a9cdf7;color:var(--brand-deep);font-weight:600}
.scope-sub-label{display:flex;align-items:center;gap:8px;font-size:11.5px;font-weight:600;color:var(--ink-2);margin:9px 0 6px}
.scope-block .scope-files{max-height:190px}
.scope-fbadge{display:inline-block;font-size:10.5px;background:var(--brand-soft-2);color:var(--brand-deep);border-radius:5px;padding:1px 6px;margin-right:6px;font-weight:700}
.smart-line ul{margin:6px 0 0;padding-left:18px}
.smart-line li{margin:2px 0}
.smart-notice{margin-top:8px;padding:6px 9px;background:var(--warn-soft);border:1px solid #f2dcae;border-radius:7px;color:var(--warn);font-size:11.5px;line-height:1.6}
.scope-ratio{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px;font-size:12px}
.scope-ratio label{font-weight:600;color:var(--ink-2)}
.scope-ratio input[type=range]{flex:1 1 180px;accent-color:var(--brand);min-width:140px}
.scope-stat .unit{min-width:74px}

/* ============ 来源标注 / 结果标签 ============ */
.src-tag{display:inline-flex;font-size:11px;padding:2px 7px;border-radius:6px;font-weight:600;white-space:nowrap}
.src-main{background:#e8f1ff;color:#1658b8}
.src-side{background:#eef2f8;color:#54657e}
.src-ai{background:#fff1dc;color:#b26a00}
.src-adapted{background:var(--ok-soft);color:var(--ok)}
.res-tag{display:inline-flex;font-size:11px;padding:2px 7px;border-radius:6px;font-weight:700;white-space:nowrap}
.res-tag.ok{background:var(--ok-soft);color:var(--ok)}
.res-tag.bad{background:var(--bad-soft);color:var(--bad)}
.res-tag.warn{background:var(--warn-soft);color:var(--warn)}
.res-tag.gray{background:#eef2f8;color:var(--ink-2)}
.mini-btn.on{background:var(--brand-soft);color:var(--brand-deep);border-color:#cfe0fb;font-weight:600}

/* ============ 答题页：一页多题 + 左右分栏 ============ */
.quiz-intro p{font-size:12px}
.quiz-intro .quiz-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.quiz-intro .quiz-head h2{margin:0}
.quiz-intro .paper-switch{width:auto;min-width:190px;margin-left:auto}
.quiz-notice{background:var(--warn-soft);border:1px solid #f2dcae;color:var(--warn);border-radius:9px;padding:9px 12px;font-size:12px;margin-bottom:14px;line-height:1.7}
.quiz-layout{display:grid;grid-template-columns:minmax(0,1fr) 268px;gap:14px;align-items:start}
.quiz-flow{display:flex;flex-direction:column;gap:9px;min-width:0}
.quiz-progress{position:sticky;top:78px;min-width:0}
.quiz-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;box-shadow:var(--shadow-sm);scroll-margin-top:80px}
.quiz-card.is-wrong{border-color:#f0bcbc;box-shadow:0 0 0 2px rgba(214,58,58,.07)}
.qc-h{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.qc-no{width:21px;height:21px;border-radius:6px;background:var(--brand-soft);color:var(--brand-deep);display:grid;place-items:center;font-size:11px;font-weight:700;flex:0 0 21px}
.qc-file{font-size:10.5px;color:var(--ink-3);max-width:36%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qc-stem{font-size:13.2px;line-height:1.55;margin-bottom:7px;word-break:break-word;font-weight:500}
.q-opts{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px}
.q-opt{display:flex;align-items:center;gap:7px;padding:4px 7px;border:1px solid transparent;border-radius:7px;cursor:pointer;font-size:12.5px;min-height:30px;line-height:1.45}
.q-opt:hover{background:var(--panel-3)}
.q-opt.picked{background:var(--brand-soft);border-color:#cfe0fb}
.q-opt input{accent-color:var(--brand);flex:0 0 15px;width:15px;height:15px;margin:0}
.q-opt-l{width:17px;height:17px;border-radius:5px;background:var(--panel-3);border:1px solid var(--line);display:grid;place-items:center;font-size:10.5px;font-weight:700;color:var(--ink-2);flex:0 0 17px}
.q-opt.picked .q-opt-l{background:var(--brand);border-color:var(--brand);color:#fff}
.q-opt-t{flex:1;min-width:0;word-break:break-word}
.q-input-wrap{margin-top:2px}
.q-text{width:100%;font-size:12.5px;min-height:34px;line-height:1.5}
textarea.q-text{resize:vertical}
.q-self{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}
/* v3.6：底部四按钮（答案 / 解析 / 错题本 / 反馈）固定一排，不再两排
   （用户 2026-11-10 第 8 条：手机现在要两排才能显示开） */
.qc-foot{display:flex;gap:5px;align-items:center;flex-wrap:nowrap;margin-top:4px;padding-top:4px;border-top:1px dashed var(--line)}
.qc-foot .btn{min-height:26px;padding:2px 8px;font-size:12px;line-height:1.35;flex:1 1 0;min-width:0;white-space:nowrap}
.qc-foot .btn.is-on{background:var(--brand-soft);border-color:#cfe0fb;color:var(--brand-deep);font-weight:600}
/* 结论提示（你选错了 / 答错了）单独占一行，不挤按钮 */
.qc-foot .wrong-tip{flex:0 0 100%;order:9}
.btn-wrong-hint{background:var(--bad-soft);border-color:#f0bcbc;color:var(--bad);font-weight:700}
.btn-wrong-hint:hover{background:#fbdcdc;border-color:#e8aaaa}
.wrong-tip{font-size:11.5px;color:var(--bad);font-weight:600}
.qc-reveal:empty{display:none}
.reveal-box{margin-top:6px;border-radius:8px;padding:8px 10px;font-size:12.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.ans-box{background:var(--ok-soft);border:1px solid #c8ecd9}
.exp-box{background:var(--panel-2);border:1px solid var(--line)}
.rv-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:11px;color:var(--ink-3);font-weight:600;margin-bottom:2px}
.rv-answer{font-size:14px;font-weight:700;color:var(--ok)}
.rv-mine{font-size:11.5px;color:var(--ink-2);margin-top:5px}
.rv-mine span{font-weight:600}
.rv-block{margin-top:6px}
.rv-src{display:inline-block;font-size:10.5px;color:var(--brand-deep);font-weight:700;margin-bottom:2px;
  padding:0 5px;border-radius:8px;background:rgba(43,108,176,.07)}
.k-ref{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-top:6px}
.k-ref-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.k-ref-h b{font-size:12.5px}
.k-ref-body{margin-top:5px;color:var(--ink-2)}
.k-ref-fig{margin-top:5px;font-size:11px;color:var(--purple)}

.qp-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px;box-shadow:var(--shadow-sm)}
.qp-card h3{font-size:13.5px;font-weight:700;margin-bottom:8px}
.qp-bar{height:8px;background:var(--panel-3);border-radius:8px;overflow:hidden;margin:10px 0}
.qp-bar i{display:block;height:100%;background:linear-gradient(90deg,#2b7cf0,#0d4aa6);border-radius:8px;transition:width .2s}
.qp-line{display:flex;justify-content:space-between;font-size:12.5px;padding:4px 0;border-bottom:1px dashed var(--line)}
.qp-line b{color:var(--brand-deep);font-variant-numeric:tabular-nums}
.qp-sub{font-size:11.5px;color:var(--ink-3);margin:12px 0 6px;font-weight:600}
.qp-src{display:flex;gap:5px;flex-wrap:wrap}
.qp-jump{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}
.jump{border:1px solid var(--line);border-radius:6px;font-size:11.5px;color:var(--ink-2);background:#fff;min-height:28px}
.jump:hover{border-color:#b9cbe4}
.jump.done{border-color:#a9cdf7;background:var(--brand-soft);color:var(--brand-deep)}
.jump.ok{background:var(--ok-soft);border-color:#bfe9d5;color:var(--ok)}
.jump.bad{background:var(--bad-soft);border-color:#f3cfcf;color:var(--bad)}
.qp-btns{display:flex;flex-direction:column;gap:6px;margin-top:14px}
.qp-btns .btn{width:100%}

/* ============ 响应式：折叠屏展开态 >1536px 左右分栏 ============ */
@media (min-width:1537px){
  .view{max-width:none;margin:0;padding-right:18px}
  .workspace{align-items:stretch}
  .detail-pane{display:block;margin:22px 22px 22px 0}
  .workspace:not(.has-detail) .detail-pane{display:none}
  .tbl .tag-cell{max-width:200px}
}

/* ============ 中等屏收窄 ============ */
@media (max-width:1180px){
  .topbar-right .stat-chip{display:none}
  .form-grid{grid-template-columns:1fr}
  .field-full{grid-column:auto}
}

/* ============ 答题页：≤1024px 收成单栏（进度移到顶部） ============ */
@media (max-width:1024px){
  .quiz-layout{grid-template-columns:1fr}
  .quiz-progress{position:static;order:-1}
  .qp-jump{grid-template-columns:repeat(10,1fr)}
  .qp-btns{flex-direction:row;flex-wrap:wrap}
  .qp-btns .btn{width:auto;flex:1 1 150px}
}

/* ============ 手机 <768px：汉堡 + 卡片堆叠 ============ */
@media (max-width:767px){
  /* 触摸区 ≥44px */
  .nav-item,.nav-child,.switch,.cell-check,.scope-file{min-height:44px}
  .only-mobile{display:grid!important}
  .sidebar{position:fixed;left:0;top:0;bottom:0;height:100vh;transform:translateX(-100%);transition:transform .22s ease;box-shadow:var(--shadow-lg);width:min(84vw,290px);flex-basis:auto}
  body.sidebar-open .sidebar{transform:translateX(0)}
  .main{width:100%}
  /* v3.6：手机顶部条常驻 + 压缩高度（用户 2026-11-10 第 5 条：
     条条不能消失，手机屏幕小，要多显示内容） */
  .topbar{padding:7px 12px;gap:8px;z-index:60}
  .topbar-title{min-width:0}
  .topbar-title h1{font-size:14px;line-height:1.25}
  .topbar-title p{display:none}
  .crumb{font-size:9.5px;margin-bottom:0;line-height:1.2}
  .topbar-right{margin-left:auto;gap:5px;flex-wrap:nowrap}
  .ver-chip,.btn-roadmap,.btn-feedback{display:none}
  .stat-chip{display:none}
  .side-scope{padding:8px 4px;font-size:12px;min-height:36px}
  .icon-btn{width:44px;height:44px;font-size:19px}
  /* v3.11：手机上箭头做成好点的尺寸；收起后整条只剩一行（约 34px） */
  .topbar-fold{width:32px;height:32px;font-size:13px}
  body.topbar-folded .topbar{padding:4px 10px;gap:6px}
  body.topbar-folded .topbar-title h1{font-size:12.5px}
  body.topbar-folded .only-mobile{width:32px;height:32px;font-size:16px}
  .view{padding:14px 12px 80px}
  .scope-host{padding:0 12px}
  .scope-panel{margin-top:12px}
  .scope-h,.scope-body,.scope-foot{padding:12px 13px}
  .scope-switches{grid-template-columns:1fr;gap:9px}
  .scope-lib{padding:11px 12px;min-height:56px}
  .scope-filters .input,.scope-filters select.input{flex:1 1 100%;min-width:0}
  .scope-files{max-height:none}
  .scope-foot{flex-direction:column;align-items:flex-start}
  .scope-stat{gap:14px}
  .card-h{padding:12px 13px}
  .card-pad{padding:14px 13px}
  .upload-zone{padding:13px}
  .toolbar{padding:10px 12px}
  .toolbar .input,.toolbar select.input{flex:1 1 100%;min-width:0;width:100%}
  .tabs{width:100%}
  .tab{flex:1;justify-content:center;padding:9px 8px;min-height:44px}
  .dev-grid{grid-template-columns:1fr}

  /* 表格 → 卡片堆叠，不横向滚动 */
  .tbl-wrap{overflow:visible}
  table.tbl,thead.tbl-head,.tbl tbody,.tbl tr,.tbl td{display:block;width:100%!important}
  .tbl thead{display:none}
  .tbl tbody tr{
    background:var(--panel);border:1px solid var(--line);border-radius:11px;
    padding:11px 12px;margin-bottom:10px;box-shadow:var(--shadow-sm);
  }
  .tbl tbody tr:hover{background:var(--panel)}
  .tbl tbody tr.detail-row{background:var(--panel-3);padding:0;border:none;box-shadow:none;margin-top:-6px;margin-bottom:12px;border-radius:0 0 11px 11px}
  .tbl tbody tr.detail-row td{border:none}
  .tbl tbody tr.is-disabled{background:#f7f9fc}
  .tbl td{border:none;padding:5px 0;display:flex;align-items:center;gap:10px;min-width:0}
  .tbl td::before{
    content:attr(data-label);flex:0 0 62px;color:var(--ink-3);font-size:11.5px;font-weight:600;
  }
  .tbl td[data-label=""]::before,.tbl td.no-label::before{display:none}
  .tbl td.cell-check{display:flex;align-items:center;gap:10px;padding-bottom:8px}
  .tbl td.cell-name{display:block;padding:0 0 8px}
  .tbl td.cell-name::before{display:none}
  .tbl td.cell-actions{display:flex;justify-content:flex-end;padding-top:9px;border-top:1px dashed var(--line);margin-top:5px}
  .tbl td.cell-actions::before{display:none}
  .row-actions{justify-content:flex-end}
  .mini-btn{min-height:44px;padding:8px 12px;font-size:12.5px}
  .tag-cell{max-width:none}
  .btn{min-height:44px;padding:9px 14px}
  .btn-sm{min-height:44px;padding:7px 11px}
  .cbx{width:20px;height:20px;flex-basis:20px}
  .switch .track{width:46px;height:26px;flex-basis:46px}
  .switch .track::after{width:20px;height:20px}
  .switch input:checked+.track::after{transform:translateX(20px)}
  .q-item{flex-direction:column;gap:8px}
  .q-actions{max-width:none;justify-content:flex-start}
  .q-actions .mini-btn{min-height:44px}
  .detail-pane{display:none!important}

  /* 答题页：单栏滚动、卡片堆叠、触摸区 ≥44px、不横向滚动 */
  .quiz-layout{grid-template-columns:1fr;gap:10px}
  .quiz-progress{order:-1}
  .qp-card{padding:12px}
  .qp-jump{grid-template-columns:repeat(6,1fr)}
  .jump{min-height:44px}
  .qp-btns{flex-direction:column}
  .qp-btns .btn{width:100%;min-height:44px}
  .quiz-card{padding:11px 12px}
  .q-opts{grid-template-columns:1fr;gap:2px}
  .q-opt{min-height:44px;padding:7px 9px}
  .q-opt input{width:18px;height:18px;flex-basis:18px}
  .q-text{min-height:44px}
  .q-self .mini-btn{min-height:44px}
  .qc-foot .btn{min-height:44px}
  .qc-file{max-width:100%}
  .qp-src .tag{font-size:11px}
  /* 范围面板三块在手机端同样不遮挡、可点 */
  .blk-h{padding:10px}
  .blk-t{min-width:120px}
  .scope-switch{min-height:44px}
  .scope-switch .track{width:46px;height:26px;flex-basis:46px}
  .scope-switch .track::after{width:20px;height:20px}
  .scope-switch input:checked+.track::after{transform:translateX(20px)}
  .fusion-bar .input{flex:1 1 100%;min-width:0;min-height:44px}
  .year-chip{min-height:44px;padding:6px 12px}
  .scope-ratio input[type=range]{min-height:44px;flex:1 1 100%}
  .scope-block .scope-files{max-height:none}
  .smart-line{font-size:11.5px}
  .modal-root{padding:10px}
  .modal{max-height:92vh;width:100%}
  .form-grid{grid-template-columns:1fr}
  .priv-grid{grid-template-columns:1fr 1fr}
  .toast-root{right:10px;left:10px;bottom:12px;align-items:stretch}
  .toast{max-width:none}
}

@media (max-width:400px){
  .brand-text span{display:none}
  .scope-stat .big{font-size:18px}
  .tbl td::before{flex-basis:54px;font-size:11px}
}

/* ==========================================================
   v0.3 · 启动自检 / 页面指示 / 文件系统上传与删除优化
   ========================================================== */
.boot-bar{
  position:fixed;top:0;left:0;right:0;z-index:9999;display:flex;align-items:center;gap:12px;
  padding:10px 16px;background:#fff3f3;border-bottom:2px solid #e98c8c;color:#8d2020;
  box-shadow:0 6px 22px rgba(140,30,30,.14);flex-wrap:wrap;font-size:12.5px;
}
.boot-ico{font-size:18px;flex:0 0 auto}
.boot-msg{flex:1;min-width:180px;display:flex;flex-direction:column;gap:1px}
.boot-msg b{font-size:13px}
.boot-msg small{font-size:11.5px;color:#a34b4b;word-break:break-all}
/* v4.0：常驻的「网页打不开怎么办」那一行，比错误详情更淡一档 */
.boot-hint{font-size:11.5px;color:#8a5a5a;line-height:1.55;margin-top:2px}
.boot-btn{background:#d63a3a;color:#fff;border-radius:8px;padding:7px 12px;font-size:12px;font-weight:600;min-height:34px}
.boot-btn.ghost{background:#fff;color:#a33;border:1px solid #e9b6b6}
/* v4.0：版本更新提示条（跟启动错误条区分开 —— 这条是好事，不该做成红色警报）
   固定在底部，避开手机的安全区；只在版本真的变了才出现，点「稍后」就收起 */
.upd-bar{
  position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:9998;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 14px;border-radius:12px;
  background:#1f2937;color:#f8fafc;font-size:12.5px;
  box-shadow:0 10px 30px rgba(15,23,42,.28);max-width:calc(100vw - 24px);
}
.upd-ico{font-size:16px;flex:0 0 auto}
.upd-msg{flex:1 1 auto;min-width:150px;line-height:1.5}
.upd-msg b{color:#fff}
.upd-btn{background:#2563eb;color:#fff;border:none;border-radius:8px;padding:7px 12px;
  font-size:12px;font-weight:600;min-height:34px;cursor:pointer}
.upd-btn.ghost{background:transparent;color:#cbd5e1;border:1px solid rgba(226,232,240,.35)}
.boot-err-list{width:100%;margin:6px 0 0;padding:10px;background:#fff;border:1px solid #ecc;border-radius:8px;
  font-size:11px;white-space:pre-wrap;word-break:break-all;max-height:150px;overflow:auto}
.crumb{font-size:10.5px;letter-spacing:.4px;color:var(--ink-3);text-transform:none;margin-bottom:1px;font-weight:600}
.ver-chip{font-size:10.5px;font-weight:700;color:var(--brand-deep);background:var(--brand-soft);
  border:1px solid #cfe0fb;border-radius:20px;padding:3px 9px;white-space:nowrap}
.render-error{padding:24px;text-align:center;color:var(--bad)}
.render-error h3{font-size:16px;margin-bottom:8px}
.render-error p{font-size:12.5px;color:var(--ink-2);margin-bottom:6px}
.render-error .btn{margin-top:12px}

/* ---------- 分区概览条 ---------- */
.lib-hero{--tone:var(--brand);--tone-soft:var(--brand-soft);
  position:relative;background:linear-gradient(118deg,#fff 0%,var(--tone-soft) 100%);
  border:1px solid var(--line);border-left:4px solid var(--tone);border-radius:var(--r-lg);
  padding:18px 20px 16px;margin-bottom:16px;box-shadow:var(--shadow-sm);overflow:hidden}
.lib-hero.tone-teal{--tone:#0d9488;--tone-soft:#e6f8f5}
.lib-hero.tone-purple{--tone:var(--purple);--tone-soft:var(--purple-soft)}
.lib-hero.tone-orange{--tone:#e07b16;--tone-soft:#fff2e2}
.lib-hero.tone-green{--tone:var(--ok);--tone-soft:var(--ok-soft)}
.lib-hero.tone-red{--tone:var(--bad);--tone-soft:var(--bad-soft)}
.lib-hero-top{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}
.lib-hero-title{display:flex;gap:13px;align-items:flex-start;flex:1;min-width:240px}
.lib-hero-ico{width:50px;height:50px;flex:0 0 50px;border-radius:14px;display:grid;place-items:center;
  font-size:24px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-sm)}
.lib-hero-title h2{font-size:17px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lib-hero-title p{font-size:12.5px;color:var(--ink-2);margin-top:6px;line-height:1.7;max-width:760px}
.lib-hero-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding-top:4px}
.btn-demo{background:#fff8e8;border-color:#f0cf8a;color:#9a6300;box-shadow:0 2px 8px rgba(196,123,0,.1)}
.btn-demo:hover{background:#ffefcc;border-color:#e5b95f}
.lib-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:14px}
.lib-stat{background:rgba(255,255,255,.78);border:1px solid rgba(255,255,255,.9);border-radius:10px;
  padding:8px 12px;display:flex;flex-direction:column;gap:1px}
.lib-stat b{font-size:19px;line-height:1.3;color:var(--tone);font-variant-numeric:tabular-nums}
.lib-stat span{font-size:11px;color:var(--ink-3)}
.demo-note{margin-top:12px;background:#fff9ec;border:1px solid #f2dfae;border-radius:9px;
  padding:9px 12px;font-size:12px;color:#8a6100;line-height:1.7}
.demo-note.ok-note{background:var(--ok-soft);border-color:#bfe8d3;color:#0b7a4d}
.demo-note .tag{margin:0 2px}

/* ---------- 醒目的上传卡 ---------- */
.upload-card{display:flex;align-items:center;gap:18px;flex-wrap:wrap;cursor:pointer;
  border:2px dashed #a9c9f2;background:linear-gradient(180deg,#fbfdff,#eef6ff);
  border-radius:var(--r-lg);padding:20px 22px;margin-bottom:16px;transition:.15s;min-height:118px}
.upload-card:hover{border-color:var(--brand);background:linear-gradient(180deg,#fff,#e8f2ff);box-shadow:var(--shadow-sm)}
.upload-card.drag{border-color:var(--brand);background:var(--brand-soft);transform:scale(1.002)}
.upload-badge{width:54px;height:54px;flex:0 0 54px;border-radius:16px;display:grid;place-items:center;
  font-size:26px;color:#fff;background:linear-gradient(150deg,#3a86f0,#0d4aa6);box-shadow:0 6px 16px rgba(22,104,220,.28)}
.upload-main{flex:1;min-width:220px}
.upload-main h3{font-size:15.5px;font-weight:700;color:var(--ink)}
.upload-main p{font-size:12.5px;color:var(--ink-2);margin-top:4px;line-height:1.7}
.upload-main b{color:var(--brand-deep)}
.upload-formats{display:flex;gap:5px;flex-wrap:wrap;margin-top:9px}
.upload-formats span{font-size:10.5px;font-weight:600;color:var(--ink-2);background:#fff;
  border:1px solid var(--line-2);border-radius:5px;padding:2px 7px}
.upload-actions{display:flex;flex-direction:column;gap:6px;align-items:center;min-width:190px}
.btn-upload{min-height:48px;padding:12px 22px;font-size:14.5px;border-radius:11px;
  box-shadow:0 5px 16px rgba(22,104,220,.28);width:100%}
.upload-tip{font-size:11px;color:var(--ink-3);text-align:center;line-height:1.5}
.empty-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.mini-btn.danger.solid{color:var(--bad);background:var(--bad-soft);border-color:#f0c6c6;font-weight:600}
.mini-btn.danger.solid:hover{background:#f9d9d9;color:#a52a2a}

/* ---------- 占位页专属 hero，切换页面一眼可辨 ---------- */
.dev-hero{--tone:var(--brand);--tone-soft:var(--brand-soft);
  display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  background:linear-gradient(118deg,#fff 0%,var(--tone-soft) 100%);
  border:1px solid var(--line);border-left:4px solid var(--tone);border-radius:var(--r-lg);
  padding:18px 20px;margin-bottom:14px;box-shadow:var(--shadow-sm)}
.dev-hero.tone-teal{--tone:#0d9488;--tone-soft:#e6f8f5}
.dev-hero.tone-purple{--tone:var(--purple);--tone-soft:var(--purple-soft)}
.dev-hero.tone-orange{--tone:#e07b16;--tone-soft:#fff2e2}
.dev-hero.tone-green{--tone:var(--ok);--tone-soft:var(--ok-soft)}
.dev-hero.tone-red{--tone:var(--bad);--tone-soft:var(--bad-soft)}
.dev-hero-ico{width:58px;height:58px;flex:0 0 58px;border-radius:16px;display:grid;place-items:center;
  font-size:29px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-sm)}
.dev-hero-txt{flex:1;min-width:220px}
.dev-hero-txt h2{font-size:19px;font-weight:700;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.dev-hero-txt p{font-size:12.5px;color:var(--ink-2);margin-top:6px;line-height:1.7}
.dev-hero-side{font-size:11px;color:var(--ink-3);text-align:right;border-left:1px dashed var(--line-2);padding-left:16px;line-height:1.7}
.dev-hero-side b{font-size:15px;color:var(--tone);display:block}
.scope-hint{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--brand-soft);
  border:1px solid #cfe0fb;border-radius:10px;padding:10px 14px;margin-bottom:14px;font-size:12.5px;color:var(--brand-deep)}
.scope-hint span{flex:1;min-width:200px}
body[data-tone="orange"] .topbar-title h1{color:#b45f06}
body[data-tone="purple"] .topbar-title h1{color:var(--purple)}
body[data-tone="teal"] .topbar-title h1{color:#0b7a72}
body[data-tone="green"] .topbar-title h1{color:#0b7a4d}
body[data-tone="red"] .topbar-title h1{color:#b52c2c}

/* ---------- 手机端：新组件同样堆叠、触摸区≥44px、不横向滚动 ---------- */
@media (max-width:767px){
  .boot-bar{padding:9px 12px;gap:8px}
  .boot-btn{min-height:44px;flex:1 1 auto}
  .boot-msg{min-width:100%}
  .lib-hero{padding:14px 13px;border-radius:12px}
  .lib-hero-top{gap:12px}
  .lib-hero-ico{width:42px;height:42px;flex:0 0 42px;font-size:21px;border-radius:12px}
  .lib-hero-title{min-width:100%;gap:10px}
  .lib-hero-title h2{font-size:15px}
  .lib-hero-actions{width:100%;flex-direction:column;align-items:stretch}
  .lib-hero-actions .btn{min-height:46px;width:100%;justify-content:center}
  .lib-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
  .lib-stat{padding:7px 10px}
  .lib-stat b{font-size:17px}
  .upload-card{padding:14px;gap:12px;flex-direction:column;align-items:stretch;text-align:left}
  .upload-badge{width:44px;height:44px;flex:0 0 44px;font-size:21px}
  .upload-main{min-width:0}
  .upload-main h3{font-size:15px}
  .upload-actions{min-width:0;width:100%}
  .btn-upload{min-height:48px}
  .upload-tip{font-size:11px}
  .empty-actions{flex-direction:column}
  .empty-actions .btn{min-height:48px;width:100%}
  .dev-hero{padding:14px 13px;gap:12px}
  .dev-hero-ico{width:46px;height:46px;flex:0 0 46px;font-size:24px}
  .dev-hero-txt{min-width:0;width:100%}
  .dev-hero-txt h2{font-size:17px}
  .dev-hero-side{display:none}
  .scope-hint{flex-direction:column;align-items:stretch}
  .scope-hint .btn{min-height:46px}
  .ver-chip{font-size:10px;padding:4px 8px}
}

/* ==========================================================
   v0.4 · 标签来源 / 图文知识点 / 解析 / 待开发提示
   ========================================================== */
.btn-roadmap{background:var(--warn-soft);color:var(--warn);border:1px solid #f0d9a8;font-weight:600}
.btn-roadmap:hover{background:#ffedc8}
.btn-organize{background:var(--brand-soft);color:var(--brand-deep);border:1px solid #cfe0fb;font-weight:600}
.btn-organize:hover{background:var(--brand-soft-2)}
.warn-btn{background:var(--warn-soft);color:var(--warn);border-color:#f0d9a8}

/* 统一的黄色「待开发」提示 */
.dev-note{display:flex;align-items:flex-start;gap:8px;margin:10px 0;padding:9px 12px;border:1px solid #f2dcae;border-left:3px solid var(--warn);background:var(--warn-soft);border-radius:8px;color:#7a5200;font-size:12.5px;line-height:1.6}
.dev-note-ico{flex:0 0 auto;font-size:14px}
.dev-note b{color:#8a5600}
.dev-chip{display:inline-block;padding:2px 7px;border-radius:6px;background:var(--warn-soft);color:var(--warn);border:1px solid #f0d9a8;font-size:11px;font-weight:600}
.roadmap-ai{padding:10px 12px;border-radius:8px;background:var(--brand-soft);border:1px solid #cfe0fb;color:var(--ink-2);font-size:12.5px;margin-bottom:12px}
.roadmap-group{margin:12px 0;padding-bottom:4px;border-bottom:1px solid var(--line)}
.roadmap-group:last-child{border-bottom:none}
.roadmap-group h4{font-size:14px;margin-bottom:6px;color:var(--ink)}
.roadmap-group ul{margin:0;padding-left:2px;list-style:none}
.roadmap-group li{display:flex;gap:8px;padding:4px 0;font-size:12.5px;color:var(--ink-2);line-height:1.6}
.roadmap-group li span{color:var(--warn);flex:0 0 auto}

/* 标签三来源角标 / 知识方向 */
.tag-src{display:inline-block;margin-left:4px;padding:0 3px;border-radius:4px;background:rgba(13,74,166,.12);color:var(--brand-deep);font-size:9px;font-style:normal;font-weight:700;vertical-align:middle;line-height:1.5}
.tag-manual{background:var(--ok-soft);color:var(--ok);border-color:#bfe8d4}
.dir-tag{background:var(--purple-soft);color:var(--purple);border-color:#ded2ff}
.tag-note{margin-top:10px;padding:9px 12px;border-radius:8px;background:var(--panel-2);border:1px dashed var(--line-2);font-size:12.5px;color:var(--ink-2)}
.tag-note b{color:var(--ink)}
.tag-note .dev-note{margin-bottom:0}

/* 知识点配图：文字 + 下面附近的原页图 */
.k-thumbs{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.k-thumb{width:74px;height:52px;object-fit:cover;border:1px solid var(--line-2);border-radius:6px;background:var(--panel-2)}
.k-view-figs,.k-figs{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px}
.k-view-figs figure,.k-figs figure{margin:0;flex:0 1 280px;max-width:100%}
.k-view-figs img,.k-figs img{width:100%;height:auto;max-height:220px;object-fit:contain;border:1px solid var(--line-2);border-radius:8px;background:var(--panel-2)}
.k-view-figs figcaption,.k-figs figcaption{font-size:11.5px;color:var(--ink-3);margin-top:4px;line-height:1.5}

/* 解析存疑 / 待校对 */
.review-hint{margin:8px 0;padding:10px 12px;border-radius:8px;background:var(--warn-soft);border:1px solid #f2dcae;font-size:12.5px;color:#7a5200}
.review-hint .dev-note{margin-bottom:0}
.review-flag{margin-top:5px;padding:5px 8px;border-radius:6px;background:var(--warn-soft);color:#8a5600;font-size:11.5px;border-left:2px solid var(--warn)}
.qc-review{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0 10px;padding:8px 10px;border-radius:8px;background:var(--warn-soft);border:1px solid #f2dcae;color:#7a5200;font-size:12.5px}

/* 解析区：三种来源 + AI 解析 */
.rv-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0}
.no-match{padding:8px 0;color:var(--ink-2);font-size:12.5px}
.ai-ref{margin-top:8px;padding:10px 12px;border-radius:8px;background:var(--purple-soft);border:1px solid #ded2ff}
.ai-label{font-size:12.5px;color:var(--purple);font-weight:600;margin-bottom:6px}
.ai-text{white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:12.5px;line-height:1.75;color:var(--ink);margin:0 0 8px}
.ai-caveat{font-size:11.5px;color:#8a5600;background:var(--warn-soft);border-radius:6px;padding:6px 8px;margin-bottom:6px}
.qp-note{margin-top:8px;font-size:11.5px;color:var(--ink-3);line-height:1.5}
.k-ref .rv-actions{margin-top:0}

/* 标签选择器（互动） */
.tag-picker{display:flex;flex-wrap:wrap;gap:6px;max-height:230px;overflow:auto;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}
.tp-item{display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border:1px solid var(--line-2);border-radius:20px;background:var(--panel);font-size:12.5px;cursor:pointer;min-height:32px}
.tp-item:has(input:checked){background:var(--brand-soft);border-color:#b9d3fb;color:var(--brand-deep)}
.tp-item input{accent-color:var(--brand)}

/* 主题库整理报告 */
.org-rule{padding:10px 12px;border-radius:8px;background:var(--brand-soft);border:1px solid #cfe0fb;font-size:12.5px;color:var(--ink-2);margin-bottom:10px}
.org-list{max-height:280px;overflow:auto;border:1px solid var(--line);border-radius:8px}
.org-item{padding:9px 12px;border-bottom:1px solid var(--line)}
.org-item:last-child{border-bottom:none}
.org-stem{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:4px}
.org-meta{display:flex;gap:6px;flex-wrap:wrap}
/* v4.0：疑似重复区块（换个说法的那一层）。样式刻意比上面「精确重复」低调，
   因为它只是线索，不是结论 —— 别让它看起来像「已经确认要删」 */
.org-sub{margin:16px 0 8px;font-size:13.5px;font-weight:700;color:var(--ink)}
.sus-list{max-height:320px}
.sus-item .org-stem{font-weight:500;color:var(--ink-2)}
.sus-item .org-stem:first-child{color:var(--ink)}
.org-acts{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.org-acts .btn{min-height:32px}

@media (max-width:767px){
  .dev-note{font-size:12px;padding:9px 10px}
  .tp-item{min-height:44px;padding:8px 12px}
  .qc-review .mini-btn,.rv-actions .btn,.rv-actions .mini-btn{min-height:44px}
  .k-thumb{width:66px;height:48px}
  .k-view-figs figure,.k-figs figure{flex:1 1 100%}
  .tag-note{font-size:12px}
  .org-list{max-height:220px}
  .btn-roadmap{min-height:40px}
}

/* ============ v0.5：主观题要点判分 / 存储体检 ============ */
.auto-note{margin-top:8px;padding:8px 10px;border-radius:8px;background:var(--panel-3);border:1px dashed var(--line);
  font-size:12px;color:var(--ink-2);line-height:1.6}
.auto-grade{margin-top:10px;padding:10px 12px;border-radius:10px;background:#fff;border:1px solid var(--line)}
.auto-grade .ag-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.auto-grade .ag-h b{font-size:13px}
.ag-line{display:flex;gap:6px;flex-wrap:wrap;align-items:baseline;font-size:12px;line-height:1.9;margin-top:4px}
.ag-line>span{flex:0 0 auto;color:var(--ink-3);min-width:70px}
.ag-line i{font-style:normal;padding:1px 8px;border-radius:6px;background:var(--panel-3);border:1px solid var(--line)}
.ag-line.ok i{background:#eaf7ef;border-color:#c7e8d4;color:#1d7a44}
.ag-line.bad i{background:#fdeeee;border-color:#f3cccc;color:#b3392f}

.kv-list{display:flex;flex-direction:column;gap:1px;background:var(--line);border-radius:10px;overflow:hidden;margin-bottom:12px}
.kv-row{display:flex;gap:12px;justify-content:space-between;align-items:flex-start;background:#fff;padding:9px 12px;font-size:13px}
.kv-row>span{color:var(--ink-3);flex:0 0 auto}
.kv-row>b{font-weight:600;text-align:right;word-break:break-all}

@media (max-width:767px){
  .kv-row{flex-direction:column;gap:2px}
  .kv-row>b{text-align:left}
  .auto-grade{padding:10px}
  .ag-line>span{min-width:64px}
}
.quick-target{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);
  background:#fff;border:1px solid var(--line);border-radius:8px;padding:0 8px;height:32px}
.input-mini{width:58px;height:26px;padding:0 6px;text-align:center;border:none;background:var(--panel-3)}

/* ==========================================================
   v0.6：填空题空位 / 原题号 / 手动出题 / 圈选反馈
   ========================================================== */

/* --- 原题库编号：灰色小药丸，带说明，不让人误以为是答案 --- */
.qc-code{font-size:11px;color:var(--ink-3);border:1px dashed var(--line-2);border-radius:20px;
  padding:1px 7px;white-space:nowrap;background:var(--panel-2);cursor:help;flex:0 0 auto}

/* --- 填空题：把空位画出来，答案只在「显示答案」后出现 --- */
.fill-wrap{margin-top:8px}
.fill-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--ink-2);margin-bottom:6px}
.fill-hint b{color:var(--brand-deep);font-size:12.5px}
.fill-noans{color:var(--warn);background:var(--warn-soft);border:1px solid #f0dcb8;border-radius:20px;padding:1px 8px}
.fill-input{width:100%;max-width:560px;border-left:3px solid var(--brand);background:#fbfdff}
.fill-blank{color:var(--brand-deep);font-weight:700;background:#eaf2ff;border-bottom:2px solid #9fc2f5;
  border-radius:3px;padding:0 7px;margin:0 2px;white-space:nowrap}
.fill-warn{margin-top:6px;font-size:12px;color:var(--warn);background:var(--warn-soft);
  border:1px solid #f0dcb8;border-radius:8px;padding:6px 10px;line-height:1.6;max-width:640px}

/* --- 手动出题（答题页内） --- */
.btn-manual{border-color:#c7e8d4;color:#1d7a44;background:#f2fbf6}
.btn-manual:hover{background:#e8f8ef;border-color:#a9dcc0}
.mp-tabs{display:flex;gap:6px;margin-bottom:12px;border-bottom:1px solid var(--line);padding-bottom:8px;flex-wrap:wrap}
.mp-tab{padding:7px 14px;border-radius:8px;background:var(--panel-3);border:1px solid var(--line);
  font-size:13px;color:var(--ink-2)}
.mp-tab.on{background:var(--brand-soft);border-color:#b9d3fb;color:var(--brand-deep);font-weight:600}
.mp-bar{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
.mp-bar .input{height:34px}
.mp-count{margin-left:auto;font-size:12.5px;color:var(--brand-deep);font-weight:600}
.mp-list{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:10px;background:var(--panel-2)}
.mp-item{display:grid;grid-template-columns:auto auto 1fr auto;gap:10px;align-items:center;
  padding:9px 12px;border-bottom:1px solid var(--line);cursor:pointer;font-size:13px}
.mp-item:last-child{border-bottom:none}
.mp-item:hover{background:#fff}
.mp-item input{accent-color:var(--brand);width:16px;height:16px}
.mp-type{font-size:11px;padding:1px 7px;border-radius:20px;background:var(--brand-soft);color:var(--brand-deep);white-space:nowrap}
.mp-type.t-multi{background:#f1ecff;color:#5b3fbf}
.mp-type.t-fill{background:#e7f8f0;color:#0f7a4d}
.mp-type.t-qa,.mp-type.t-term{background:#fff5e2;color:#9a6200}
.mp-stem{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-src{font-size:11.5px;color:var(--ink-3);white-space:nowrap}
.mp-src .ok-t{color:var(--ok)}
.mp-src .warn-t{color:var(--warn)}
.mp-more{padding:10px 12px;font-size:12px;color:var(--ink-3);text-align:center}
.mp-note{margin-top:10px;font-size:12px;color:var(--ink-2);background:var(--panel-3);
  border:1px dashed var(--line-2);border-radius:8px;padding:8px 10px;line-height:1.7}

/* --- 圈选反馈 --- */
.btn-feedback{border-color:#f0dcb8;color:#9a6200;background:#fff9ee}
.fb-layer{position:fixed;inset:0;z-index:9999;cursor:crosshair;background:rgba(16,42,80,.10)}
.fb-tip{position:absolute;left:50%;top:14px;transform:translateX(-50%);background:rgba(15,31,54,.94);
  color:#fff;padding:7px 15px;border-radius:20px;font-size:12.5px;pointer-events:none;
  box-shadow:var(--shadow);white-space:nowrap;max-width:92vw;overflow:hidden;text-overflow:ellipsis}
.fb-rect{position:absolute;border:2px solid var(--brand);background:rgba(22,104,220,.12);
  border-radius:4px;box-shadow:0 0 0 9999px rgba(9,25,48,.16);pointer-events:none}
.fb-note-box{position:absolute;width:340px;max-width:calc(100vw - 20px);background:#fff;border-radius:12px;
  box-shadow:var(--shadow-lg);padding:12px;z-index:2;cursor:default;border:1px solid var(--line)}
.fb-nb-h{font-size:13px;font-weight:600;margin-bottom:8px;color:var(--ink)}
.fb-note-box textarea{width:100%;resize:vertical;font-size:13px}
.fb-nb-f{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.fb-list{max-height:50vh;overflow:auto;display:flex;flex-direction:column;gap:8px}
.fb-item{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--panel-2)}
.fb-item-h{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2);margin-bottom:4px;flex-wrap:wrap}
.fb-item-h b{color:var(--brand-deep)}
.fb-item-b{font-size:13px;color:var(--ink);line-height:1.6}
.fb-item-m{font-size:11.5px;color:var(--ink-3);margin-top:4px;word-break:break-all;font-family:ui-monospace,Consolas,monospace}
.fb-empty{padding:26px 14px;text-align:center;color:var(--ink-3);font-size:13px;
  border:1px dashed var(--line-2);border-radius:10px;background:var(--panel-2)}

@media (max-width:767px){
  .mp-item{grid-template-columns:auto auto 1fr;grid-template-areas:"cb ty stem" ". . src";row-gap:3px}
  .mp-item input{grid-area:cb}
  .mp-type{grid-area:ty}
  .mp-stem{grid-area:stem;white-space:normal}
  .mp-src{grid-area:src}
  .mp-list{max-height:42vh}
  .fb-note-box{width:calc(100vw - 20px);left:10px!important}
  .qc-code{font-size:10.5px}
  .fill-input{max-width:100%}
}

/* 多空填空：答案按空拆开展示 */
.fill-ans{display:flex;flex-wrap:wrap;gap:8px}
.fill-ans span{background:var(--brand-soft);border:1px solid #cfe0fb;border-radius:8px;padding:3px 10px;font-size:13px;color:var(--ink-2)}
.fill-ans b{color:var(--brand-deep);font-size:14px;margin-left:4px}

/* ==========================================================
   v0.7：年份 / 红绿判分 / 简答图文 / 题型顺序 / 模板与待校对
   ========================================================== */

/* --- 题目年份：小小的蓝色年份牌 --- */
.qc-year{font-size:11px;font-weight:700;color:#0b5fb8;background:#eaf2ff;border:1px solid #cfe0fb;
  border-radius:20px;padding:1px 8px;white-space:nowrap;flex:0 0 auto}

/* --- 选择题判分：答对绿、答错红（只在展开答案后显示，避免提前泄露） --- */
.qc-input{margin-top:2px}
.opt-mark{display:none;margin-left:auto;font-size:11px;font-weight:700;white-space:nowrap;flex:0 0 auto}
.quiz-card.ans-shown .opt-mark{display:inline-block}
.quiz-card.ans-shown .q-opt[data-std="1"]{background:#e9f8f0;border-color:#9fdcbb}
.quiz-card.ans-shown .q-opt[data-std="1"] .q-opt-l{background:#18a05a;border-color:#18a05a;color:#fff}
.quiz-card.ans-shown .q-opt[data-std="1"] .opt-mark{color:#12864a}
.quiz-card.ans-shown .q-opt[data-std="1"] .opt-mark::after{content:"✔ 正确答案"}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"]{background:#fdeeee;border-color:#f0b4b4}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"] .q-opt-l{background:#d93a3a;border-color:#d93a3a;color:#fff}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"] .opt-mark{color:#c22c2c}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"] .opt-mark::after{content:"✘ 你选的"}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="1"]{background:#dcf3e6;border-color:#7fd0a6}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="1"] .q-opt-l{background:#12864a;border-color:#12864a;color:#fff}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="1"] .opt-mark{color:#0f6f3d}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="1"] .opt-mark::after{content:"✔ 你选对了"}
/* 答案框跟着结果变色 */
.ans-box.r-ok{background:#eaf7ef;border-color:#bfe7cf}
.ans-box.r-bad{background:#fdefef;border-color:#f2c3c3}
.ans-box.r-bad .rv-answer{color:var(--ink)}
.ans-box.r-bad .rv-mine span{color:#c22c2c}
.ans-box.r-ok .rv-mine span,.ans-box.r-part .rv-mine span{color:#0f6f3d}
.ans-box.r-part{background:#fffaf0;border-color:#f0dcb8}

/* --- 简答 / 名词解释：不作答，直接看答案与解析 --- */
.qa-skip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;padding:7px 11px;
  background:var(--panel-3);border:1px dashed var(--line-2);border-radius:8px;font-size:12.5px;color:var(--ink-2)}
.qa-write{margin-top:8px}

/* --- 题目原图（简答里的表格 / 配图） --- */
.qc-figs{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 4px}
.qc-figs figure{margin:0;max-width:260px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:4px}
/* v3.0：题干图默认占一半宽（.qc-figs.big 的简答原图仍按原设计铺满，它有自己的「放大看原图」） */
.qc-figs img{display:block;width:auto;max-width:50%;max-height:180px;object-fit:contain;border-radius:5px;background:var(--panel-2);cursor:zoom-in}
.qc-figs figcaption{font-size:10.5px;color:var(--ink-3);margin-top:3px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.fig-big{text-align:center;background:var(--panel-2);border-radius:10px;padding:8px}
.fig-big img{max-width:100%;max-height:72vh;border-radius:6px}

/* --- 填空 AI 判读的提示行 --- */
.ag-tip{margin-top:6px;font-size:11.5px;color:var(--ink-3);border-top:1px dashed var(--line);padding-top:6px}

/* --- 出题范围：题型与顺序 --- */
.type-order{margin:12px 0 10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2)}
.type-order .to-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.type-order .to-h b{font-size:13.5px;color:var(--ink)}
.type-order .to-h .hint{font-size:11.5px;color:var(--ink-3)}
.to-list{display:flex;gap:8px;flex-wrap:wrap}
.to-item{display:flex;align-items:center;gap:7px;padding:6px 11px;border:1px solid var(--line);
  border-radius:9px;background:#fff;cursor:pointer;font-size:12.5px;user-select:none}
.to-item .to-no{width:17px;height:17px;border-radius:5px;background:var(--brand-soft);color:var(--brand-deep);
  font-size:10.5px;font-weight:700;display:grid;place-items:center}
.to-item input{display:none}
.to-item .track{width:28px;height:15px;border-radius:20px;background:#dfe6ef;position:relative;transition:.15s}
.to-item .track::after{content:"";position:absolute;left:2px;top:2px;width:11px;height:11px;border-radius:50%;
  background:#fff;transition:.15s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.to-item input:checked + .track{background:var(--brand)}
.to-item input:checked + .track::after{left:15px}
.to-item.off{opacity:.55;background:var(--panel-3)}
.to-item.off .track{background:#cdd6e2}
.to-note{margin-top:8px;font-size:11.5px;color:var(--ink-3);line-height:1.7}

/* --- 文件系统：模板 / 待校对清单 --- */
.btn-template{border-color:#cfe0fb;color:var(--brand-deep);background:#f4f9ff}
.btn-template:hover{background:#e9f3ff}
.btn-badge{display:inline-block;margin-left:4px;background:var(--warn);color:#fff;border-radius:20px;
  padding:0 5px;font-size:10.5px;font-weight:700;line-height:15px}
.upload-template{margin-top:8px;font-size:11.5px;color:var(--ink-3);line-height:1.75}
.link-btn{background:none;border:none;padding:0;color:var(--brand);font-size:11.5px;
  text-decoration:underline;cursor:pointer}
.link-btn:hover{color:var(--brand-deep)}

/* --- 圈选反馈：手动复制兜底 --- */
.fb-copy{margin-bottom:10px}
.fb-copy label{display:block;font-size:12px;color:var(--ink-2);margin-bottom:5px;font-weight:600}
.fb-copy textarea{font-size:12px;font-family:ui-monospace,Consolas,monospace;line-height:1.6;background:var(--panel-2)}
.fb-copy .hint{display:block;margin-top:4px;font-size:11.5px;color:var(--ink-3)}
.fb-warn{margin-bottom:10px;padding:8px 11px;border-radius:8px;background:var(--warn-soft);
  border:1px solid #f0dcb8;color:#7a5200;font-size:12px;line-height:1.7}

@media (max-width:767px){
  .to-item{flex:1 1 46%;justify-content:space-between}
  .qc-figs figure{max-width:100%}
  .quiz-card.ans-shown .opt-mark{font-size:10px}
}

/* ==========================================================
   v0.8 · 判断题 / 截图题 / 选项纠错 / 按题型导出
   ========================================================== */

/* --- 判断题：两个大按钮 --- */
.judge-wrap{margin-top:2px}
.j-opts{grid-template-columns:1fr 1fr;gap:8px;margin-top:5px}
.j-opt{min-height:42px;justify-content:center;border:1px solid var(--line);border-radius:9px;
  background:var(--panel-2);font-size:13.5px;font-weight:600}
.j-opt:hover{background:var(--panel-3)}
.j-opt .q-opt-t{flex:0 1 auto;text-align:center}
.j-opt input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.j-opt.picked{background:var(--brand-soft);border-color:#bcd6f7;color:var(--brand-deep)}
.j-ans{display:inline-block;padding:2px 10px;border-radius:7px;font-weight:700}
.j-ans.ok{background:#dcf3e6;color:#0f6f3d}
.j-ans.bad{background:#fdeeee;color:#c22c2c}

/* --- 答案区：一句话说清「你选了什么 / 正确答案是什么 / 对错」 --- */
.cv{margin:6px 0 2px;padding:6px 10px;border-radius:8px;font-size:12.5px;line-height:1.7;
  border:1px solid transparent}
.cv.ok{background:#e9f8f0;border-color:#9fdcbb;color:#0f6f3d}
.cv.bad{background:#fdeeee;border-color:#f0b4b4;color:#a52222}
.cv.none{background:var(--panel-3);border-color:var(--line);color:var(--ink-2)}
.cv b{font-weight:700}
/* 已经显示答案时，「我选中的那项」不能再是蓝色高亮 —— 让红绿说了算 */
.quiz-card.ans-shown .q-opt.picked{background:transparent;border-color:transparent}
.quiz-card.ans-shown .q-opt.picked .q-opt-l{background:var(--panel-3);border-color:var(--line);color:var(--ink-2)}
.quiz-card.ans-shown .q-opt[data-std="1"],
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"]{border-width:1px;border-style:solid}
.quiz-card.ans-shown .q-opt[data-std="1"] .q-opt-t{color:#0f6f3d}
.quiz-card.ans-shown .q-opt[data-mine="1"][data-std="0"] .q-opt-t{color:#a52222;text-decoration:line-through;
  text-decoration-color:rgba(165,34,34,.5)}

/* --- 截图题 / 简答原图：铺满卡片，点开 1:1 ---
   v4.0 用户 2026-11-10：「简答题图稍微小了一点，电脑看着略小，
   手机看着最起码横向铺满，折叠屏显示再大一点点」
   原来 .qc-figs 是 flex + wrap，figure 宽度由图片固有宽决定，
   里面的 img{width:100%} 就成了循环依赖 → 图片按原始尺寸显示，撑不满。
   现在 big 模式改成块级：figure 明确 100% 宽，图片跟着铺满。 */
.qc-figs.big{margin:4px 0 6px;display:block}
.qc-figs.big figure{max-width:1600px;width:100%;margin:0 0 8px}
.qc-figs.big figure:last-child{margin-bottom:0}
.qc-figs.big img{width:100%;max-width:100%;height:auto;max-height:none;border-radius:8px;border:1px solid var(--line);
  background:#fff;cursor:zoom-in}
.qc-figs .fig-cap{color:var(--ink-3)}
.fig-big img{max-width:100%;height:auto}

/* --- 文件系统：图片导入题型 / 按题型导出 --- */
.upload-imgtype{margin-top:8px;font-size:11.5px;color:var(--ink-2);line-height:1.9;
  display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.input.mini{width:auto;min-width:150px;padding:3px 6px;font-size:11.5px;height:26px}
.pick-list{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}
.pick-row{display:flex;align-items:center;gap:7px;padding:8px 10px;border:1px solid var(--line);
  border-radius:8px;background:var(--panel-2);font-size:12.5px;cursor:pointer}
.pick-row:hover{background:var(--panel-3)}
.pick-row .pr-name{font-weight:600}
.pick-row .hint{margin-left:auto;color:var(--ink-3)}
.pick-row input{accent-color:var(--brand)}

@media (max-width:767px){
  .pick-list{grid-template-columns:1fr}
  .j-opts{grid-template-columns:1fr 1fr}
  .qc-figs.big img{max-height:none}
}

/* ==========================================================
   v0.9 · 文件整理页 / 整理包 / AI 复制粘贴
   ========================================================== */

/* --- 顶部 --- */
.og-page{display:flex;flex-direction:column;gap:12px}
.og-hero{display:flex;align-items:flex-start;gap:18px;padding:16px 18px;border-radius:12px;
  background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line)}
.og-hero-l{flex:1 1 auto;min-width:0}
.og-hero-l h2{margin:0 0 5px;font-size:16px;font-weight:700;color:var(--ink)}
.og-hero-l p{margin:0;font-size:12.5px;line-height:1.75;color:var(--ink-2);max-width:64ch}
.og-hero-r{display:flex;gap:8px;flex:0 0 auto}
.og-kpi{min-width:66px;padding:8px 10px;border-radius:9px;background:var(--panel);
  border:1px solid var(--line);text-align:center}
.og-kpi b{display:block;font-size:18px;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums}
.og-kpi span{font-size:10.5px;color:var(--ink-3)}
.og-kpi.warn{background:#fdf6e3;border-color:#f0d9a8}
.og-kpi.warn b{color:#8a5a09}

/* --- 上传区 --- */
.og-upload{display:flex;align-items:center;gap:16px;padding:16px 18px;border-radius:12px;
  border:1.5px dashed var(--line);background:var(--panel);transition:border-color .15s,background .15s}
.og-upload:hover{border-color:var(--brand);background:var(--brand-soft)}
.og-upload.is-drop{border-color:var(--brand);background:var(--brand-soft);border-style:solid}
.og-up-ico{width:40px;height:40px;flex:0 0 auto;border-radius:11px;display:grid;place-items:center;
  background:var(--brand-soft);color:var(--brand-deep);font-size:19px}
.og-up-main{flex:1 1 auto;min-width:0}
.og-up-main h3{margin:0 0 4px;font-size:13.5px;font-weight:700;color:var(--ink)}
.og-up-main p{margin:0;font-size:11.5px;line-height:1.7;color:var(--ink-2)}
.og-up-formats{margin-top:6px;font-size:11px;color:var(--ink-3);letter-spacing:.02em}
.og-up-side{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.og-sel{font-size:11px;color:var(--ink-3);display:flex;align-items:center;gap:5px}
.og-sel select{padding:3px 6px;border:1px solid var(--line);border-radius:6px;background:var(--panel);
  color:var(--ink);font-size:11.5px;font-family:inherit}
.og-hint{font-size:10.5px;color:var(--ink-3)}

/* --- 工具条 --- */
.og-tools{padding:12px 16px;border-radius:12px;background:var(--panel);border:1px solid var(--line)}
.og-tools-h{font-size:11px;font-weight:700;color:var(--ink-3);letter-spacing:.06em;margin-bottom:8px}
.og-tools-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.og-tools-note{margin-top:8px;font-size:11px;line-height:1.7;color:var(--ink-3)}

/* --- 报告 --- */
.og-report{padding:14px 16px;border-radius:12px;background:var(--panel);border:1px solid var(--line)}
.og-report-h{display:flex;align-items:baseline;gap:8px;margin-bottom:10px;font-size:13px;color:var(--ink)}
.og-report-at{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.og-bars{display:flex;flex-direction:column;gap:5px}
.og-bar-row{display:flex;align-items:center;gap:9px;font-size:11.5px}
.og-bar-lab{flex:0 0 74px;color:var(--ink-2)}
.og-bar-wrap{flex:1 1 auto;height:7px;border-radius:4px;background:var(--panel-3);overflow:hidden}
.og-bar{display:block;height:100%;border-radius:4px;background:var(--brand);min-width:2px}
.og-bar-n{flex:0 0 34px;text-align:right;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.og-notes{margin-top:10px;padding-top:9px;border-top:1px dashed var(--line)}
.og-note{font-size:11.5px;line-height:1.8;color:var(--ink-2)}

/* --- 分组结果 --- */
.og-groups{display:flex;flex-direction:column;gap:9px}
.og-group{border:1px solid var(--line);border-radius:11px;background:var(--panel);overflow:hidden}
.og-ghead{display:flex;align-items:center;gap:8px;padding:9px 13px;cursor:pointer;font-size:12.5px;
  background:var(--panel-2);user-select:none}
.og-ghead:hover{background:var(--panel-3)}
.og-caret{width:12px;color:var(--ink-3);font-size:11px}
.og-cnt{font-size:11px;color:var(--ink-3);padding:1px 6px;border-radius:5px;background:var(--panel-3)}
.og-cnt.warn{background:#fdf1d6;color:#8a5a09}
.og-gbody{padding:4px 0}
.og-row{display:flex;align-items:center;gap:9px;padding:6px 13px;font-size:11.5px;
  border-top:1px solid var(--line);min-height:34px}
.og-row:first-child{border-top:none}
.og-row:hover{background:var(--panel-2)}
.og-row.is-warn{background:#fffbf0}
.og-row.is-warn:hover{background:#fdf6e3}
.og-code{flex:0 0 62px;color:var(--ink-3);font-size:10.5px;font-variant-numeric:tabular-nums;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.og-stem{flex:1 1 auto;min-width:0;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.og-ans{flex:0 0 92px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:11px}
.og-badge{flex:0 0 auto;padding:1px 7px;border-radius:5px;font-size:10px;font-weight:600}
.og-badge.ok{background:#e6f4ec;color:#0f6f3d}
.og-badge.warn{background:#fdecec;color:#a52222}
.og-row-act{flex:0 0 auto;display:flex;gap:4px}
.og-more{display:block;width:100%;padding:8px;border:none;background:var(--panel-2);
  color:var(--brand-deep);font-size:11.5px;cursor:pointer;font-family:inherit;border-top:1px solid var(--line)}
.og-more:hover{background:var(--brand-soft)}

/* --- AI 助手弹窗 --- */
.ai-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}
.ai-step{padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--panel-2)}
.ai-step b{display:block;font-size:11.5px;color:var(--ink);margin-bottom:3px}
.ai-step span{font-size:10.5px;line-height:1.6;color:var(--ink-3)}
.ai-block{margin-top:10px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--panel)}
.ai-block-h{display:flex;align-items:center;gap:8px;padding:7px 11px;background:var(--panel-2);
  font-size:11.5px;border-bottom:1px solid var(--line)}
.ai-count{font-size:10.5px;color:var(--ink-3)}
.ai-ta{display:block;width:100%;height:150px;padding:10px 12px;border:none;outline:none;resize:vertical;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.65;color:var(--ink);
  background:var(--panel)}
.ai-ta.in{height:130px;background:#fffdf6}
.ai-prev{padding:0 12px 10px;font-size:11px}
.ai-prev:empty{display:none}
.ai-ok{color:#0f6f3d}
.ai-bad{color:#a52222}
.ai-prev-list{margin-top:5px;line-height:1.8;color:var(--ink-2)}
.modal-note.small{font-size:11px;line-height:1.75}

@media (max-width:900px){
  .og-hero{flex-direction:column;gap:12px}
  .og-hero-r{width:100%}
  .og-kpi{flex:1 1 0;min-width:0}
  .ai-steps{grid-template-columns:1fr}
}
@media (max-width:767px){
  .og-upload{flex-direction:column;align-items:stretch;gap:10px}
  .og-up-side{align-items:stretch}
  .og-up-side .btn{width:100%}
  .og-row{flex-wrap:wrap;gap:6px}
  .og-stem{flex:1 1 100%;white-space:normal;line-height:1.6}
  .og-code{flex:0 0 auto}
  .og-ans{flex:0 0 auto}
}

/* --- 知识点：一键跳搜索 --- */
.search-grid{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.search-grid a{text-decoration:none;min-width:88px;justify-content:center}

/* ==========================================================
   v1.0 · 外网共享 / 访客提示 / 本地 AI
   ========================================================== */

/* --- 访客模式一行提示条（v3.4：细条，不挡操作） --- */
.guest-bar{display:flex;align-items:center;gap:6px;margin:0 0 10px;padding:5px 10px;
  border:1px solid #dbe7f3;border-radius:6px;background:#f7fafd;
  font-size:11.5px;line-height:1.5;color:#43617f}
.guest-bar-ico{font-size:12px;line-height:1;flex:0 0 auto}
.guest-bar-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.guest-bar-copy{flex:0 0 auto;font-size:11px;line-height:1.4;padding:1px 8px;
  border:1px solid #cfe0f0;border-radius:999px;background:#fff;color:#2f6ca8;cursor:pointer}
.guest-bar-copy:hover{background:#eef5fc}
/* v4.4：认人后的「你好，名字 · 状态 + 改名字 + 📤 交反馈」，整块靠右，不挤压左侧提示 */
.guest-bar-sync{flex:0 0 auto;display:flex;align-items:center;gap:4px;
  font-size:11px;line-height:1.4;color:#43617f;white-space:nowrap;max-width:62%;
  overflow:hidden;text-overflow:ellipsis}
.guest-bar-sync .mini-btn{white-space:nowrap}

/* --- 生成共享版弹窗 --- */
.share-box{display:flex;flex-direction:column;gap:10px}
.share-kpi{display:flex;gap:10px;flex-wrap:wrap}
.share-k{flex:1 1 0;min-width:110px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;
  background:var(--panel-2);text-align:center}
.share-k b{display:block;font-size:20px;line-height:1.2;color:var(--ink)}
.share-k span{display:block;margin-top:3px;font-size:11px;color:var(--ink-3)}
.share-note{font-size:12px;line-height:1.8;color:var(--ink-2);padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel)}
.share-note.small{font-size:11px;color:var(--ink-3);background:transparent}
.share-state{font-size:12px;line-height:1.7;color:var(--ink-2);padding:9px 12px;
  border:1px dashed var(--line);border-radius:9px;background:var(--panel)}
.share-url{padding:10px 12px;border:1px solid #bcd9f7;border-radius:9px;background:#f2f8ff;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:#123c6b;
  word-break:break-all;user-select:all}
.share-ok{color:#0f6f3d}
.share-bad{color:#a52222}
.share-tip{font-size:11px;line-height:1.7;color:var(--ink-3);padding:2px 2px 0}
.btn-share{background:linear-gradient(180deg,#e8f2ff,#d8e9ff);border-color:#bcd9f7;color:#1c4f8b}
.btn-share:hover{background:linear-gradient(180deg,#dfeeff,#cbe1ff)}

/* --- 本地 AI 区块 --- */
.ai-local{margin-top:10px;padding:10px 12px;border:1px solid #cfe3d3;border-radius:10px;
  background:linear-gradient(180deg,#f4fbf5,#eef8f0)}
.ai-local-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11.5px;color:#1f5c36}
.ai-local-h b{color:#14532d}
.ai-local-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px}
.ai-local-row .btn[disabled]{opacity:.55;cursor:not-allowed}
.ai-hint{font-size:10.5px;line-height:1.6;color:#3f6b4e}
.ai-hint b{color:#14532d}
.ai-local-note{margin-top:7px;font-size:10.5px;line-height:1.6;color:#4b7a5b}

@media (max-width:767px){
  .share-kpi{flex-direction:column}
  .ai-local-row{align-items:stretch}
  .ai-local-row .btn{width:100%}
}

/* ===== v1.2 一键出题面板 · 默认简单、高级收起 ===== */
.quick-card .quick-label{font-size:12px;color:var(--ink-3,#888);font-weight:600;margin-right:6px}
.quick-block{margin:10px 0}
/* v3.0：29 个板块 chip 压成「紧凑多列」—— 字号 12 + padding 收窄 + gap 6，
   容器最高 132px 内部滚动：面板不会被 29 个 chip 拉长，也不会出现横向滚动条。 */
.quick-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;
  max-height:132px;overflow:auto;min-width:0;max-width:100%}
.quick-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;min-width:0;max-width:100%;
  border:1px solid var(--line-2,#e3e6ec);border-radius:10px;font-size:12px;line-height:17px;
  cursor:pointer;background:var(--bg-2,#fafbfc);overflow:hidden}
.quick-tag input{margin:0;flex:0 0 auto}
.quick-tag .quick-tag-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
.quick-tag small{color:var(--ink-3,#999);flex:0 0 auto;font-size:10.5px}
.quick-numrow{margin-top:10px}
.quick-count{font-size:12px;color:var(--ink-3,#888)}
.quick-adv{padding:10px 0 2px}
.quick-mix{display:inline-flex;align-items:center;gap:4px;font-size:12px}
.quick-lib{font-size:12px;color:var(--ink-3,#888)}
.qp-src-fold summary{cursor:pointer;font-size:12px;color:var(--ink-3,#888);margin:6px 0}

/* ===== v1.5 出题面板：板块搜索 / 短名 chip / 实时数量 ===== */
/* v3.0：板块行改成 flex 横排，薄弱加强靠右（margin-left:auto），不再单占面板首行 */
/* v3.1：板块行右侧工具条 —— 薄弱加强 → 随机/不重复开关 → 全选 → 清空，
   同一个 flex 组 + 同一个 6px gap，视觉上连成一片，不再被 margin-left:auto 拉开 */
/* v3.3：板块行控件左移 —— 「板块 + 共 N 道」后面紧跟薄弱加强 / 随机·不重复，
   右侧只留全选 / 清空（margin-left:auto）。窄屏自动换行，不会被挤出面板。 */
.quick-tagblock .quick-label{display:flex;align-items:center;flex-wrap:wrap;gap:6px;width:100%}
.quick-tagblock .quick-labeltext{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0;flex:0 1 auto}
.quick-tools{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto;flex:0 0 auto}
.quick-tools .quick-mini{margin-left:0}
.quick-weak-inline{margin-left:0;white-space:nowrap;gap:4px;flex:0 0 auto}
.quick-tagbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px}
.quick-tagbar .input{padding:3px 8px;font-size:12px;height:auto}
.quick-tag-name{white-space:nowrap}
.quick-tag:hover{border-color:var(--brand,#2b6cb0);background:#fff}
.quick-tag:has(input:checked){border-color:var(--brand,#2b6cb0);background:#eaf2fb;font-weight:600}
.quick-count{color:var(--ink-3,#8a8f98)}

/* ===== v1.6 答题四按钮 / 我的标记 / 反馈 / 薄弱加强 ===== */
.qc-foot{gap:8px;flex-wrap:wrap}
.qc-flag{border-style:dashed}
.qc-flag.on{border-color:#2b6cb0;background:#eaf2fb;color:#1a4e8a;border-style:solid;font-weight:600}
.qc-flag.warn{border-color:#b45309;background:#fff7e6;color:#8a4b00;border-style:solid;font-weight:600}
.switch-line{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-3,#8a8f98);cursor:pointer;user-select:none}
.switch-line input{margin:0}
.quick-weak{margin:8px 0 2px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.fb-box{font-size:13px;line-height:1.7}
.fb-tip{color:#8a6d3b;margin-bottom:8px}
.fb-opts{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:8px}
.fb-opt{display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.fb-note{width:100%;box-sizing:border-box;margin-bottom:10px;font-size:13px}
.fb-actions{display:flex;justify-content:flex-end;gap:8px}
.fb-q{margin-top:10px;color:var(--ink-3,#8a8f98);font-size:12px;border-top:1px dashed var(--line-2,#e3e6ec);padding-top:6px}
.flags-panel{font-size:13px}
.flags-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.flags-bar .spacer{flex:1 1 auto}
.flags-table{width:100%;border-collapse:collapse;font-size:12px}
.flags-table th,.flags-table td{border-bottom:1px solid var(--line-2,#e3e6ec);padding:6px 8px;text-align:left;vertical-align:top}
.flags-table th{background:var(--bg-2,#fafbfc);font-weight:600}
.fl-stem{max-width:340px}
.fl-note{margin-top:3px;color:var(--ink-3,#8a8f98)}


/* ===== v1.7 答题界面紧凑化 + 出题面板改版 ===== */
.qc-foot .hint,.qc-foot .wrong-tip{font-size:11px;padding:1px 6px;margin:0}
.qc .qc-reveal:empty{display:none}
.exp-box .rv-actions{margin:4px 0}
.exp-box .no-match{font-size:12px}
.ai-ref{margin-top:6px;padding:8px 10px}
.ai-text{margin:4px 0;font-size:12px;line-height:1.5;max-height:none}
.fold-btn{font-size:11px;padding:1px 7px;margin-left:4px}
.quick-libnote{font-size:12px;color:var(--ink-3,#8a8f98);margin:4px 0 2px}
.quick-total{margin:10px 0}
.quick-range{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}
.quick-range input[type="range"]{flex:1 1 260px;min-width:180px;accent-color:#2b6cb0}
.quick-ticks{display:flex;justify-content:space-between;font-size:10.5px;color:var(--ink-3,#a0a4ac);
  margin:2px 0 0;max-width:100%;gap:2px}
.quick-ticks span{flex:1 1 0;text-align:center}
.quick-mixrow{margin:12px 0 8px}
.quick-mixline{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:6px}
.quick-mix{display:inline-flex;align-items:center;gap:5px;font-size:12px}
.quick-mix small{color:var(--ink-3,#a0a4ac);font-size:10.5px}
.quick-std{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.quick-note{font-size:11px;color:var(--ink-3,#8a8f98)}
.quick-papers{margin:10px 0 2px}
.quick-paperline{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.quick-paperline .btn[disabled]{opacity:.55;cursor:not-allowed}

/* ===== v1.8 出题面板：题型按钮 / 选卷 ===== */
.quick-totalnum{font-size:13px;font-weight:700;color:var(--brand-deep,#1a4e8a);min-width:54px}
.quick-types{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.quick-typebtn{min-width:96px;justify-content:center}
.quick-typebtn.on{background:#2b6cb0;border-color:#2b6cb0;color:#fff;font-weight:600}
.quick-typebtn.on:hover{background:#25598f;border-color:#25598f;color:#fff}
.quick-papers{margin:10px 0 4px}
.quick-papers>summary{cursor:pointer;font-size:12px;color:var(--ink-3,#8a8f98);outline:none}
.quick-paperline{margin-top:6px}
.quick-paperline .btn.on{background:#2b6cb0;border-color:#2b6cb0;color:#fff;font-weight:600}

/* ===== v1.9 出题面板最终布局：五按钮一行 + 两个提交按钮 + 极简解析 ===== */
/* 第一行：题库 + 备注 + 薄弱加强 */
.quick-head{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;margin-bottom:6px}
.quick-head .quick-lib{font-size:13px;white-space:nowrap;display:inline-flex;align-items:center;gap:4px}
.quick-head .quick-lib select{padding:3px 6px;font-size:13px}
.quick-libnote{font-size:11.5px;color:var(--ink-3,#8a8f98);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.quick-spacer{flex:1 1 auto}
.quick-head .switch-line{font-size:12px;white-space:nowrap;margin:0}

/* 题型：六个按钮一横排（v2.8 加了「简答」），整组只占面板 2/5 宽（v2.0 用户 14:53：「拉的太长了…缩短到 2/5」）
   v2.8b 修「裁字」：视口 ≤1100 时 40% 只有约 309px，6 个按钮被 flex 压到 47px、
   「名词/判断」「标准BC卷」的文字被裁（CDP 实测 scrollWidth > clientWidth）。
   修法：flex:1 1 0 保留「等宽撑满整行」的原观感，min-width:max-content 兜底 ——
   宽屏等宽（与修之前一致），窄到装不下时按内容宽占位、真装不下才换行（flex-wrap:wrap），
   任何宽度都不再压字；行宽下限 330px 让 1024~1440 这一档仍是「一行 6 个」，
   手机窄屏由下面的 @media 收敛成 100% 宽。 */
.quick-typerow{margin:10px 0 2px}
.quick-types{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px;width:40%;min-width:330px;max-width:100%}
.quick-typebtn{
  flex:1 1 0;min-width:max-content;min-inline-size:max-content;
  justify-content:center;text-align:center;white-space:nowrap;
  padding:4px 2px;font-size:11.5px;line-height:1.25;
  border-radius:6px;
}
/* 选中态一眼可见（蓝底白字）—— 用户报过「选 2025A 卷没变蓝」 */
.quick-typebtn.is-on,
.quick-typebtn.is-on:hover,
.quick-typebtn.is-on:focus{
  background:#1a73e8;border-color:#1a73e8;color:#fff;font-weight:700;
  box-shadow:0 1px 3px rgba(26,115,232,.35);
}
.quick-typebtn.quick-stdbtn{font-size:11.5px;padding:5px 3px}

/* 原卷按钮（details 里）也用同一套选中态：蓝底白字 */
.quick-paperbtn.is-on,
.quick-paperbtn.is-on:hover,
.quick-paperbtn.is-on:focus{
  background:#1a73e8;border-color:#1a73e8;color:#fff;font-weight:700;
  box-shadow:0 1px 3px rgba(26,115,232,.35);
}

/* 两个提交按钮：v2.2 总长和上方题型行等长（40% / min-width 330，与 .quick-types 同步） */
.quick-submit{display:flex;gap:8px;margin-top:10px;width:40%;min-width:330px;max-width:100%}
.quick-submit .btn{flex:1 1 0;justify-content:center;padding:8px 10px;font-size:13px}
.quick-submit .btn[data-qk="build"]{font-weight:700}

/* ===== v3.1 随机 / 不重复：左右滑动开关（button.switch.no-repeat） =====
   宽 104px（≤120），文字 12px；关＝「随机」高亮（滑块在左），开＝「不重复」高亮（滑块在右）。
   注意：不能沿用 .switch 的 label+input 结构，这里是一个 <button role="switch">。 */
.switch.no-repeat{position:relative;display:inline-flex;align-items:center;
  width:104px;min-width:104px;height:24px;min-height:24px;padding:0;gap:0;
  border:1px solid var(--line-2,#e3e6ec);border-radius:999px;
  background:#eef2f7;color:var(--ink-3,#77808c);
  font-size:12px;line-height:1;font-weight:600;
  cursor:pointer;user-select:none;overflow:hidden;
  transition:background .18s,border-color .18s}
.switch.no-repeat .sw-l,.switch.no-repeat .sw-r{position:relative;z-index:1;flex:1 1 0;
  text-align:center;font-size:12px;line-height:22px;transition:color .18s}
.switch.no-repeat .sw-thumb{position:absolute;top:2px;left:2px;z-index:0;
  width:calc(50% - 2px);height:18px;border-radius:999px;background:#fff;
  box-shadow:0 1px 3px rgba(0,0,0,.18);transition:transform .18s}
.switch.no-repeat .sw-l{color:#1a4e8a;font-weight:700}
.switch.no-repeat.is-on{background:#e8f0fe;border-color:#bcd3f7}
.switch.no-repeat.is-on .sw-thumb{transform:translateX(100%)}
.switch.no-repeat.is-on .sw-l{color:var(--ink-3,#77808c);font-weight:600}
.switch.no-repeat.is-on .sw-r{color:#1a73e8;font-weight:700}
.switch.no-repeat:hover{border-color:#b9c4d4}
.switch.no-repeat:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(22,104,220,.2)}

/* v3.1 试卷库：列表页（倒序列出全部归档卷 + 继续作答 / 删除） */
.papers-head{white-space:normal}
.papers-head p{margin:4px 0 10px}
.papers-title{font-weight:700;font-size:14px;margin-bottom:2px}
.papers-n{font-weight:700;color:var(--ink,#1f2328)}
.papers-name{font-weight:700}
.papers-acts{display:flex;gap:6px;flex-wrap:wrap}
.papers-acts .btn{white-space:nowrap}

/* 题量：滑条 + 下面一个数字（v2.0：右边那个数字框删掉了，只剩一个） */
.quick-range{display:flex;flex-direction:column;align-items:flex-start;gap:3px;margin-top:4px}
.quick-range input[type="range"]{flex:0 0 auto;width:40%;min-width:330px;max-width:100%;accent-color:#2b6cb0}
.quick-totalnum{font-size:13px;font-weight:700;color:var(--brand-deep,#1a4e8a);white-space:nowrap;line-height:1.2}
.quick-total .quick-label{margin-bottom:0}

/* 板块内的小按钮 */
.quick-mini{font-size:11px;padding:1px 7px;margin-left:4px}

/* 回答页：极简解析区 */
.exp-box .rv-src{font-size:11px;color:var(--ink-3,#8a8f98);margin-left:6px}
.exp-box .exp-plain{margin:6px 0 0;font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.exp-box .exp-empty{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3,#8a8f98);margin-top:6px}
.exp-box .exp-empty .btn{font-size:12px;padding:2px 8px}
.exp-box .exp-kb{margin-top:8px;border-top:1px dashed var(--line-2,#e3e6ec);padding-top:6px}
.exp-box .exp-kb>summary{cursor:pointer;font-size:11.5px;color:var(--ink-3,#8a8f98);outline:none}
.exp-box .exp-kb .k-ref{margin-top:6px}

/* ===== v2.0 答案区：最多两行 ===== */
.ans-box{padding:6px 10px}
.ans-line{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;font-size:13px;line-height:1.45}
.ans-line .av-ok{color:#1a7f37;font-weight:700}
.ans-line .av-bad{color:#c62828;font-weight:700}
.ans-k{color:var(--ink-3,#8a8f98);font-size:12px;white-space:nowrap}
.ans-v{font-weight:700;color:var(--ink,#1f2328);word-break:break-word}
.ans-box.r-ok .ans-v{color:#1a7f37}
.ans-box.r-bad .ans-v{color:#c62828}
.ans-sep{color:#cfd4dc;font-size:11px}
.ans-mine{color:var(--ink-3,#8a8f98);font-size:12px;word-break:break-word}
.ans-text{margin-top:3px;font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
/* v2.4：自评在题卡顶部行「居中」（桌面不贴最右，用户说太边上） */
.qc-h .q-self{flex:0 0 auto;flex-wrap:nowrap;margin:0 auto;gap:5px}
.q-self .hint{font-size:11px}

/* ===== v2.1 填空一空一框 ===== */
/* 填空题：有几个空就几个输入框，不加任何说明文字 */
.fill-inputs{display:flex;gap:6px;flex-wrap:wrap}
/* v2.5：一个空固定约 8 个中文字符宽（8em），输入超长框内横向滚动，不忽宽忽窄 */
.fill-inputs .fill-input{flex:0 1 auto;width:8em;min-width:8em;max-width:100%}
/* 简答 / 名词解释：只剩右下角一个入口按钮，压到最薄 */
.qa-skip{margin-top:2px;padding:0;background:none;border:0;border-radius:0;justify-content:flex-end}
.qa-skip .mini-btn{font-size:11px;padding:1px 7px}

@media (max-width:420px){
  .quick-typebtn{padding:4px 1px;font-size:11px}
  .quick-typebtn.quick-stdbtn{font-size:10.5px}
  .quick-range input[type="range"]{width:40%;min-width:260px;max-width:100%}
  .quick-head .quick-libnote{display:none}
  .ans-line{font-size:12.5px;gap:4px}
}

/* ===== v2.3：题卡顶部压缩 + 来源可点 + 进度折叠 ===== */
/* 来源标签做成按钮：可点展开完整来源信息 */
.src-btn{cursor:pointer;border:none;outline:none;font-family:inherit;line-height:inherit;appearance:none;-webkit-appearance:none}
.src-btn:hover{filter:brightness(.96);text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}
.src-pop{font-size:13px;line-height:2}
/* 出题面板顶部的试卷切换下拉（多试卷时才出现） */
.quick-paperswitch{width:auto;max-width:220px;padding:3px 6px;font-size:12px}
/* 进度：默认折叠，summary 一行小字 */
.qp-fold summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--brand-deep);outline:none;list-style:none;display:flex;align-items:center;gap:4px}
.qp-fold summary::-webkit-details-marker{display:none}
.qp-fold summary::before{content:'▸';font-size:11px;transition:transform .15s;display:inline-block}
.qp-fold[open] summary::before{transform:rotate(90deg)}
.qp-fold .qp-bar{margin:8px 0 6px}
.qp-settings{display:flex;flex-direction:column;gap:4px;margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
.qp-settings .switch-line{font-size:12px}

/* 手机窄屏：提交判分 / 我的标记 并排小按钮，不撑满整行 */
@media (max-width:480px){
  .qp-btns{flex-direction:row;gap:6px;margin-top:10px}
  .qp-btns .btn{width:auto;flex:1 1 0;min-height:32px;padding:4px 8px;font-size:12px;line-height:1.3}
  /* v2.4：题型组和题量滑条在手机上拉满整行（和顶部淡蓝提示条一样宽） */
  .quick-types,.quick-range input[type="range"]{width:100%;min-width:0}
  /* v2.5：两个提交按钮（一键出题/重新出题）手机上也拉满 */
  .quick-submit{width:100%;min-width:0}
  /* v2.4：手机端自评两个按钮挤一行不换行、更小 */
  .qc-h .q-self{flex-wrap:nowrap;flex-shrink:0;margin:0;gap:4px}
  .qc-h .q-self .mini-btn{padding:2px 6px;font-size:11px;min-height:0;line-height:1.4}
}

/* ===== v2.5 选项三态：点选蓝 / 判分后对绿错红（不依赖 .ans-shown） ===== */
.q-opt.is-picked{background:var(--brand-soft);border-color:#cfe0fb}
.q-opt.is-picked .q-opt-l{background:var(--brand);border-color:var(--brand);color:#fff}
.q-opt.is-correct{background:#e9f8f0!important;border-color:#9fdcbb!important}
.q-opt.is-correct .q-opt-l{background:#18a05a!important;border-color:#18a05a!important;color:#fff!important}
.q-opt.is-wrong{background:#fdeeee!important;border-color:#f0b4b4!important}
.q-opt.is-wrong .q-opt-l{background:#d93a3a!important;border-color:#d93a3a!important;color:#fff!important}

/* ===== v2.6 简答 / 名词解释答案里的配图（〔图a:KEY〕→ 图片条） ===== */
/* 答案正文仍是 pre-wrap 纯文本，图片按块级插进去。
   v3.0：默认只占卡片一半宽（手机 ≤480 恢复 100%），点图可看原图 */
/* v4.0 用户 2026-11-10：「简答题图稍微小了一点，电脑看着略小，手机最起码横向铺满」
   答案区的图原来是 max-width:50%，电脑上永远只占半栏 → 改成铺满整行。 */
.ans-fig{margin:8px 0}
.ans-fig img{width:100%;max-width:100%;height:auto;border:1px solid var(--line,#e5e7eb);border-radius:6px;display:block;cursor:zoom-in;background:#fff}

/* ===== v2.9 教材页 ===== */
.mat-search{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}
.mat-search .input{flex:1 1 260px;min-width:200px}
.mat-books{display:flex;flex-direction:column;gap:14px}
.book-card{display:flex;gap:14px;border:1px solid var(--line,#e5e7eb);border-radius:10px;padding:12px;background:#fff}
.book-side{flex:0 0 120px}
.book-cover{width:120px;height:auto;border-radius:6px;border:1px solid var(--line,#e5e7eb);display:block}
.book-main{flex:1 1 auto;min-width:0}
.book-main h3{margin:0 0 4px;font-size:15px}
.book-meta{margin:0 0 8px;color:#6b7280;font-size:12px}
.book-acts{display:flex;gap:8px;flex-wrap:wrap}
.toc-list{margin-top:10px;max-height:320px;overflow:auto;border-top:1px dashed var(--line,#e5e7eb);padding-top:6px}
.toc-row{display:flex;gap:8px;padding:3px 6px;border-radius:4px;text-decoration:none;color:inherit;font-size:12.5px}
.toc-row:hover{background:#f3f4f6}
.toc-row.lv1{font-weight:600;margin-top:4px}
.toc-row.lv2{padding-left:18px}
.toc-t{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.toc-p{flex:0 0 auto;color:#9ca3af}
.hit-row{display:flex;gap:8px;padding:6px 4px;border-bottom:1px solid #f1f2f4;text-decoration:none;color:inherit;font-size:12.5px}
.hit-row:hover{background:#f8fafc}
.hit-book{flex:0 0 auto;color:#2b6cb0}
.hit-page{flex:0 0 auto;color:#9ca3af}
.hit-text{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:560px){.book-card{flex-direction:column}.book-side{flex:0 0 auto}.book-cover{width:96px}}

/* ==========================================================
   v3.0 平板 / 折叠屏展开态（641–1200px）
   ----------------------------------------------------------
   折叠屏展开大约 700–1100px：既不满足 >1537 的分栏，也够不到 <768 的手机布局，
   以前会落在「238px 定宽侧栏 + 40% 定宽题型组」这一档，正文被压窄、字号显小。
   这一档统一按平板处理：侧栏收窄、内容满宽、正文字号维持 14px。
   不影响 1440 桌面（>1200）与 ≤480 手机（<641）。
   （放在文件末尾，确保能覆盖前面同优先级的定宽规则）
   ========================================================== */
@media (min-width:641px) and (max-width:1200px){
  :root{--sb-w:196px}
  .sidebar{width:196px;flex-basis:196px}
  .brand{padding:16px 12px 14px;gap:8px}
  .brand-text span{display:none}
  .brand-text strong{font-size:14px}
  .nav{padding:8px}
  .nav-item{padding:9px 10px;font-size:13px}
  .nav-child{font-size:12.5px;padding:7px 9px}
  .topbar{padding:11px 18px;gap:10px}
  .view{max-width:none;margin:0;padding:18px 20px 64px}
  body{font-size:14px}
  /* 去掉 40% / 330px 那套定宽：平板下题型组、出题按钮、题量滑条都占满内容列 */
  .quick-types,.quick-submit,.quick-range input[type="range"]{width:100%;min-width:0}
  .detail-pane{display:none!important}
}

/* v3.0：手机 ≤480 上答案图 / 题干图恢复满宽（必须放在 .ans-fig img 基础规则之后才生效） */
@media (max-width:480px){
  .ans-fig img,.qc-figs img{max-width:100%}
}

/* ==========================================================
   v3.2 错题本 / 题库搜索 / 主观题「加入错题本」
   ========================================================== */
/* 题卡底部：⭐ 加入错题本（在「问题反馈」左边） */
.qc-wrong{border-style:dashed}
.qc-wrong.is-on{border-color:#b45309;background:#fff7e6;color:#8a4b00;border-style:solid;font-weight:600}

/* 答题页顶部：题库搜索 */
.qsearch-card{margin-bottom:14px}
.qsearch-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.qsearch-head b{font-size:13px;white-space:nowrap}
.qsearch-input{flex:1;min-width:200px;height:30px;padding:3px 9px;font-size:13px}
.qsearch-count{font-size:12px;color:var(--ink-3);white-space:nowrap}
.qsearch-hits{margin-top:8px;display:flex;flex-direction:column;gap:4px;max-height:260px;overflow:auto}
.qsearch-hits:empty{display:none}
.qsearch-empty,.qsearch-tip{font-size:12px;color:var(--ink-3)}
.qsearch-hit{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:#fff;
  border:1px solid var(--line);border-radius:8px;padding:6px 9px;cursor:pointer;font:inherit;color:var(--ink)}
.qsearch-hit:hover{border-color:var(--brand);background:var(--brand-soft)}
.qsearch-hit .tag{flex:none;font-size:11px}
.qsearch-hit .qs-stem{flex:1;min-width:0;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 只读预览弹窗 */
.qs-preview{display:flex;flex-direction:column;gap:10px}
.qs-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.qs-stem-full{font-size:14px;line-height:1.65;white-space:normal}
.qs-opts{margin:0;padding-left:22px;font-size:13px;line-height:1.7}
.qs-ans,.qs-exp{font-size:13px;line-height:1.6;background:#f7faff;border:1px solid var(--line);
  border-radius:8px;padding:8px 10px}
.qs-ans b,.qs-exp b{color:var(--ink-2);margin-right:6px}

/* 错题本页面 */
.wrong-page{display:flex;flex-direction:column;gap:14px}
.wrong-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:14px}
.wrong-head .hint{font-size:12px;color:var(--ink-3)}
.wrong-cat{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.wrong-cat-h{display:flex;align-items:center;gap:8px;padding:9px 12px;background:#f7faff;
  border-bottom:1px solid var(--line)}
.wrong-cat-n{font-size:12px;color:var(--ink-3)}
.wrong-list{display:flex;flex-direction:column}
.wrong-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-top:1px solid var(--line)}
.wrong-row:first-child{border-top:0}
.wrong-row:hover{background:#fbfdff}
.wr-main{flex:1;min-width:0}
.wr-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.wr-count{color:#b45309;font-weight:600}
.wr-time{color:var(--ink-3)}
.wr-stem{margin-top:3px;font-size:13px;line-height:1.5;color:var(--ink);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.wr-acts{display:flex;gap:6px;flex:none}
@media (max-width:640px){
  .wr-stem{white-space:normal}
  .wrong-row{align-items:flex-start;flex-direction:column;gap:6px}
  .wr-acts{width:100%;justify-content:flex-end}
  .qsearch-input{min-width:0;width:100%}
}

/* ===== v3.3 错题本 · 勾选批量删除 ===== */
.wrong-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;
  border:1px solid var(--line);border-radius:10px;background:#f7faff;font-size:13px}
.wrong-bar b{color:var(--ink)}
.wrong-bar .btn[disabled]{opacity:.5;cursor:not-allowed}
.wrong-bar [data-wr="del-selected"]{margin-left:auto}
.wr-check{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;padding:2px}
.wr-check input{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--brand)}
.wrong-row.is-sel{background:#eef6ff}


/* ===== v3.5 做题进度条（出题面板顶部，主题库/副题库分开） =====
   v4.0 用户 2026-11-10：「主题库的进度不在一横排，手机显示是两排；
   电脑的不要太短，和题量100道那条横线一样长」
   根因：出题面板只有 268px 宽，库名 + 「已做 x / 共 y 题」+ 条 + 百分比
   硬挤一行，条被压到几十像素，手机上直接整体折行。
   现在：第一行纯文字（库名 / 已做…/共… / 百分比靠右），第二行横条独占，
   宽度≈题量滑条，长短一眼可辨；手机上文字那行也不会再折。 */
.quick-progress{margin:8px 0 10px;padding:9px 11px;border:1px solid var(--line,#e5e7eb);border-radius:8px;background:#f8fafc}
.pr-head{font-size:12.5px;font-weight:600;color:var(--ink-2,#374151);margin-bottom:7px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.pr-hint{font-size:11px;font-weight:400;color:var(--ink-3,#9ca3af)}
.pr-lib{display:block;padding:5px 0}
.pr-top{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}
.pr-libname{flex:0 0 auto;font-size:12px;font-weight:600;color:var(--brand,#2563eb)}
.pr-num{flex:0 0 auto;font-size:12px;color:var(--ink-2,#4b5563);white-space:nowrap}
.pr-num b{color:var(--brand,#2563eb);font-size:13px}
.pr-pct{margin-left:auto;font-size:11px;color:var(--ink-3,#9ca3af);font-variant-numeric:tabular-nums}
/* v5.2 用户 2026-11-12：「主副题库进度条有点长，跟题目100的横条一样长就好了」。
   题量滑条（最大 100 道）在桌面上是 width:40% / min-width:330px（见 .quick-range input），
   进度条原来是 100%，明显长一截。这里改成同一组值；窄屏下滑条会拉满，进度条跟着拉满。 */
.pr-bar{width:40%;min-width:330px;max-width:100%;height:7px;border-radius:4px;background:#e5e7eb;overflow:hidden}
.pr-bar i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#2563eb);border-radius:4px}
/* v5.2 用户 2026-11-12 截图：题卡底部「答案 / 解析 / 错题本 / 反馈」那一排
   （.qc-foot 的虚线 + 四个等宽按钮）原来横贯整个题卡，电脑上太长不好看。
   同样缩到跟题量滑条一致；四个按钮仍等分这条，不会挤歪。 */
.qc-foot{width:40%;min-width:330px;max-width:100%}
/* 与 .quick-range input[type=range] 的断点保持一致：平板 / 手机下滑条 100%，两处横条也 100% */
@media (min-width:641px) and (max-width:1200px){.pr-bar,.qc-foot{width:100%;min-width:0}}
@media (max-width:480px){.pr-bar,.qc-foot{width:100%;min-width:0}}

/* ===== v5.3：做题进度整块重做（用户 2026-11-12 20:50）=====
   用户连说几次「横向不好看，人眼不好看」「0% 不能改吗」——
   之前一直在调横条长度，方向就错了。问题是这一块横向铺开：
   两行文字被 margin-left:auto 拉到两端、下面再挂两条空灰横条、
   进度 0% 时就是两条死灰杠，右侧还挂个刺眼的「0%」。
   现在收成紧凑一行：标题 + 主题库数字 + 副题库数字，靠左不铺开。
   横条 / 百分比 / 灰字说明只是隐藏，DOM 和旧规则都留着，要恢复随时能改回来。 */
.quick-progress{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 11px}
.quick-progress .pr-head{margin:0;font-size:12px;gap:0}
.quick-progress .pr-hint{display:none}
.quick-progress .pr-lib{display:inline-flex;align-items:baseline;gap:6px;padding:0}
.quick-progress .pr-top{margin:0;gap:6px}
.quick-progress .pr-pct,.quick-progress .pr-bar{display:none}
.quick-progress .pr-libname{font-size:11.5px}
.quick-progress .pr-num{font-size:11.5px}
.quick-progress .pr-num b{font-size:12px}
.quick-progress .pr-lib + .pr-lib::before{content:'·';color:var(--ink-3,#9ca3af);margin-right:1px}
@media (max-width:480px){.quick-progress{gap:7px;padding:6px 9px}}
.pr-files{padding:0 0 3px 60px;display:flex;gap:12px;flex-wrap:wrap}
.pr-file{font-size:11px;color:var(--ink-3,#6b7280);max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pr-file b{color:var(--brand,#2563eb)}
.pr-file.muted{font-style:italic;font-weight:400}
@media (max-width:560px){
  .pr-lib{padding:4px 0}
  .pr-top{gap:6px;margin-bottom:4px}
  .pr-libname{font-size:11px}
  .pr-num{font-size:10.5px}
  .pr-num b{font-size:11.5px}
  .pr-pct{font-size:10px}
  .pr-bar{height:6px}
  .pr-files{padding-left:0}
  .pr-hint{display:none}
}

/* ===== v3.6 填空题「判这道题」+ 判定结果（- 名词解释/简答不判对错） ===== */
.fill-actions{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
.fill-verdict{font-size:12px;font-weight:700;padding:2px 9px;border-radius:7px;line-height:1.6}
.fill-verdict.v-ok{color:#0b7a4d;background:#e9f8f0}
.fill-verdict.v-part{color:#8a4b00;background:#fff7e6}
.fill-verdict.v-bad{color:#b52c2c;background:#fdeeee}
/* v3.10：本地比对不像 → 云端 AI 复核的等待态 */
.fill-verdict.v-busy{color:#1f5fa8;background:#eaf2fd}
.fill-verdict.v-busy::after{content:'';display:inline-block;width:6px;height:6px;margin-left:5px;
  border-radius:50%;background:currentColor;animation:fbBlink 1s infinite}
@keyframes fbBlink{0%,100%{opacity:.25}50%{opacity:1}}
/* 判题中按钮置灰，防止连点重复调 AI */
.fill-actions .btn[disabled]{opacity:.55;cursor:not-allowed}

/* ==========================================================
   v4.0 触摸响应优化
   用户 2026-11-10：「使用中感觉触摸偶尔不灵，你可以再优化一下」
   ----------------------------------------------------------
   手机上「点了没反应」通常是这三件事，这里一次收掉：
   ① 双击缩放等待：手指快速点两下，浏览器在等「是不是要放大」，
      第二次点击就被吃掉 → touch-action:manipulation 关掉这段等待
   ② 长按选中文字：手指多停几十毫秒就变成「选字」，click 不再触发
      → 按钮 / 选项卡这类不需要选字的元素统一禁选（答案正文仍然能选能复制）
   ③ 点了没反馈：手指盖住按钮，看不出到底点没点上
      → 只在没有 hover 的设备（手机/平板）上加 :active 即时反馈
   ========================================================== */
button, .btn, .mini-btn, .icon-btn, .q-opt, .j-opt, .quick-tag, .quick-typebtn,
.nav-item, .switch, .scope-switch, .year-chip, .topbar-fold, .pick-row, .paper-row,
label[data-tag], .seg-btn, .tab, .chip, .quiz-jump a, .qp-jump a {
  touch-action: manipulation;
}
/* 只禁「按钮类」的选字，不动答案区/题干，保持可复制 */
button, .btn, .mini-btn, .icon-btn, .q-opt, .j-opt, .quick-tag, .quick-typebtn,
.nav-item, .switch, .scope-switch, .year-chip, .topbar-fold {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;   /* 长按不弹「复制/查询」菜单，避免抢走点击 */
}

@media (hover: none) {
  /* 移动端没有真正的 hover：按下就给反馈，松手立即恢复 */
  .btn:active, .mini-btn:active, .icon-btn:active, .q-opt:active, .j-opt:active,
  .quick-tag:active, .quick-typebtn:active, .nav-item:active, .year-chip:active,
  .topbar-fold:active {
    filter: brightness(.93);
    transition: none;
  }
  /* 选项被选中时给一点按下手感，弥补没有 hover 的反馈缺失 */
  .q-opt:active { transform: scale(.995); }
}
