/* ============ 宝明智题系统 · 全局样式 ============ */
:root{
  --brand:#1d4ed8; --brand-600:#2563eb; --brand-100:#dbeafe; --brand-50:#eff6ff;
  --accent:#0891b2; --ok:#16a34a; --warn:#d97706; --err:#dc2626; --vip:#7c3aed;
  --bg:#f4f6fb; --panel:#ffffff; --panel-2:#f8fafc; --line:#e3e8f0; --line-2:#eef1f6;
  --text:#111827; --text-2:#4b5563; --text-3:#8a94a6;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 4px 16px rgba(16,24,40,.06);
  --shadow-lg:0 12px 40px rgba(16,24,40,.16);
  --radius:12px; --radius-sm:8px;
  --sidebar-w:246px; --topbar-h:58px; --tabbar-h:56px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --font-mono:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace;
  --font-math:"Cambria Math","STIX Two Math","Times New Roman",Georgia,serif;
}
html[data-theme="dark"]{
  --brand:#60a5fa; --brand-600:#3b82f6; --brand-100:#1e3a8a; --brand-50:#172554;
  --bg:#0b1020; --panel:#131a2b; --panel-2:#182034; --line:#26304a; --line-2:#1e2740;
  --text:#e6e9f2; --text-2:#a9b3c7; --text-3:#7b879e;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 6px 20px rgba(0,0,0,.35);
  --shadow-lg:0 16px 48px rgba(0,0,0,.55);
}
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;line-height:1.6;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
a{color:var(--brand-600);text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
h1,h2,h3,h4{margin:0;font-weight:650;line-height:1.35}
ul{margin:0;padding:0;list-style:none}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c3cad8;border-radius:6px}
html[data-theme="dark"] ::-webkit-scrollbar-thumb{background:#33405e}
::-webkit-scrollbar-track{background:transparent}

.boot{position:fixed;inset:0;display:flex;flex-direction:column;gap:14px;align-items:center;justify-content:center;background:var(--bg);z-index:9999}
.boot-logo{width:62px;height:62px;border-radius:18px;background:linear-gradient(135deg,#2563eb,#0891b2);color:#fff;display:flex;align-items:center;justify-content:center;font-size:30px;font-weight:800;animation:pulse 1.4s ease-in-out infinite}
.boot-text{color:var(--text-3);font-size:13px;letter-spacing:.08em}
@keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.92);opacity:.75}}

.app{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
.topbar{position:sticky;top:0;z-index:60;height:var(--topbar-h);flex:0 0 auto;display:flex;align-items:center;gap:12px;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:9px;flex:0 0 auto}
.brand-mark{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,#2563eb,#0891b2);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:17px;box-shadow:0 2px 8px rgba(37,99,235,.35)}
.brand-name{display:flex;flex-direction:column;line-height:1.15;font-weight:750;font-size:15px}
.brand-name em{font-style:normal;font-size:10.5px;font-weight:500;color:var(--text-3);letter-spacing:.06em}
.mainnav{display:flex;gap:2px;margin-left:14px;overflow-x:auto;scrollbar-width:none;flex:1 1 auto}
.mainnav::-webkit-scrollbar{display:none}
.mainnav a{position:relative;padding:8px 13px;border-radius:9px;color:var(--text-2);font-weight:550;white-space:nowrap;transition:.16s}
.mainnav a:hover{background:var(--panel-2);color:var(--text)}
.mainnav a.active{color:var(--brand-600);background:var(--brand-50)}
.topbar-right{display:flex;align-items:center;gap:6px;flex:0 0 auto;margin-left:auto}
.user-chip{display:flex;align-items:center;gap:7px;padding:4px 10px 4px 4px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line);cursor:pointer}
.user-chip .av{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.user-chip span{font-size:12.5px;font-weight:600;max-width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.layout{display:flex;align-items:flex-start;flex:1 1 auto;min-height:0}
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));height:calc(100dvh - var(--topbar-h));overflow-y:auto;padding:14px 12px 30px;border-right:1px solid var(--line);background:var(--panel)}
.main{flex:1 1 auto;min-width:0;padding:18px 20px 60px;outline:none}

.icon-btn{width:34px;height:34px;border-radius:9px;border:1px solid transparent;background:transparent;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-2);transition:.15s;flex:0 0 auto}
.icon-btn:hover{background:var(--panel-2);border-color:var(--line);color:var(--text)}
.icon-btn svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 15px;border-radius:9px;border:1px solid var(--line);background:var(--panel);color:var(--text);font-weight:600;cursor:pointer;transition:.15s;white-space:nowrap;line-height:1.2}
.btn:hover{border-color:#c9d3e4;background:var(--panel-2)}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.btn-primary{background:var(--brand-600);border-color:var(--brand-600);color:#fff;box-shadow:0 2px 8px rgba(37,99,235,.28)}
.btn-primary:hover{background:var(--brand);border-color:var(--brand);color:#fff}
.btn-ghost{background:transparent;border-color:transparent;color:var(--text-2)}
.btn-ghost:hover{background:var(--panel-2);color:var(--text)}
.btn-danger{color:var(--err);border-color:#fca5a5}
.btn-danger:hover{background:#fef2f2;border-color:var(--err)}
html[data-theme="dark"] .btn-danger:hover{background:#3f1d1d}
.btn-sm{padding:5px 10px;font-size:12.5px;border-radius:7px}
.btn-lg{padding:11px 22px;font-size:15px}
.btn-block{width:100%}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-hd{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.card-hd h3{font-size:14.5px}
.card-hd .sp{margin-left:auto}
.card-bd{padding:16px}
.card-ft{padding:12px 16px;border-top:1px solid var(--line-2);display:flex;gap:8px;justify-content:flex-end;background:var(--panel-2);border-radius:0 0 var(--radius) var(--radius);flex-wrap:wrap}

.grid{display:grid;gap:14px}
.row{display:flex;gap:10px;align-items:center}
.row.wrap{flex-wrap:wrap}
.sp{flex:1 1 auto}
.muted{color:var(--text-3)}
.small{font-size:12.5px}
.mono{font-family:var(--font-mono)}
.nowrap{white-space:nowrap}
.center{text-align:center}
.right{text-align:right}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}

.page-hd{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.page-hd h2{font-size:20px;letter-spacing:-.01em}
.page-hd p{margin:3px 0 0;color:var(--text-3);font-size:12.8px}
.page-hd .acts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}

.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:6px;font-size:11.5px;font-weight:600;background:var(--panel-2);border:1px solid var(--line);color:var(--text-2);line-height:1.55;white-space:nowrap}
.tag-blue{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand-600)}
.tag-green{background:#ecfdf5;border-color:#a7f3d0;color:#047857}
.tag-orange{background:#fff7ed;border-color:#fed7aa;color:#c2410c}
.tag-red{background:#fef2f2;border-color:#fecaca;color:#b91c1c}
.tag-purple{background:#f5f3ff;border-color:#ddd6fe;color:#6d28d9}
.tag-gray{background:var(--panel-2);border-color:var(--line);color:var(--text-3)}
html[data-theme="dark"] .tag-green{background:#052e1c;border-color:#14532d;color:#4ade80}
html[data-theme="dark"] .tag-orange{background:#3a2308;border-color:#7c4a12;color:#fbbf24}
html[data-theme="dark"] .tag-red{background:#3a1414;border-color:#7f1d1d;color:#f87171}
html[data-theme="dark"] .tag-purple{background:#2a1a4a;border-color:#4c1d95;color:#c4b5fd}

.field{display:flex;flex-direction:column;gap:6px}
.field>label{font-size:12.5px;font-weight:650;color:var(--text-2)}
.field>label .req{color:var(--err);margin-left:2px}
.inp,.sel,.ta{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:var(--panel);transition:.15s;outline:none}
.inp:focus,.sel:focus,.ta:focus{border-color:var(--brand-600);box-shadow:0 0 0 3px rgba(37,99,235,.13)}
.sel{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a94a6' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;background-size:15px;padding-right:30px;cursor:pointer}
.ta{min-height:76px;resize:vertical;line-height:1.65}
.inp-sm{padding:5px 9px;font-size:12.5px;border-radius:7px}
.hint{font-size:11.5px;color:var(--text-3)}
.check{display:inline-flex;align-items:center;gap:7px;cursor:pointer;user-select:none;font-size:13px}
.check input{width:16px;height:16px;accent-color:var(--brand-600);cursor:pointer;margin:0}
.switch{position:relative;width:40px;height:22px;flex:0 0 auto;display:inline-block}
.switch input{opacity:0;width:0;height:0;position:absolute}
.switch i{position:absolute;inset:0;background:#cbd5e1;border-radius:999px;transition:.2s;cursor:pointer}
.switch i::before{content:"";position:absolute;width:16px;height:16px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.switch input:checked+i{background:var(--brand-600)}
.switch input:checked+i::before{transform:translateX(18px)}

.search-box{position:relative;flex:1 1 220px;min-width:0}
.search-box svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;fill:none;stroke:var(--text-3);stroke-width:2;stroke-linecap:round;pointer-events:none}
.search-box .inp{padding-left:32px}

.seg{display:inline-flex;background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:2px;gap:2px;overflow-x:auto;max-width:100%}
.seg button{padding:5px 12px;border:0;background:transparent;border-radius:7px;cursor:pointer;font-weight:600;color:var(--text-2);white-space:nowrap;font-size:12.5px}
.seg button.on{background:var(--panel);color:var(--brand-600);box-shadow:0 1px 3px rgba(0,0,0,.12)}
.side-sec{margin-bottom:15px}
.side-sec>.t{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:750;color:var(--text-3);letter-spacing:.08em;padding:5px 8px}
.side-sec>.t .sp{margin-left:auto}
.nav-list{display:flex;flex-direction:column;gap:1px}
.nav-list a,.nav-list button{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;border-radius:8px;color:var(--text-2);font-weight:550;cursor:pointer;border:0;background:transparent;text-align:left;font-size:13.2px;transition:.14s}
.nav-list a:hover,.nav-list button:hover{background:var(--panel-2);color:var(--text)}
.nav-list a.on,.nav-list button.on{background:var(--brand-50);color:var(--brand-600);font-weight:650}
.nav-list .cnt{margin-left:auto;font-size:11px;color:var(--text-3);background:var(--panel-2);padding:0 6px;border-radius:999px;flex:0 0 auto}
.nav-list svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}

.tree{font-size:13px}
.tree-row{display:flex;align-items:center;gap:3px;padding:4px 6px;border-radius:7px;cursor:pointer;user-select:none}
.tree-row:hover{background:var(--panel-2)}
.tree-row.on{background:var(--brand-50);color:var(--brand-600);font-weight:650}
.tree-row .tw{width:15px;height:15px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;color:var(--text-3);transition:.15s}
.tree-row .tw svg{width:10px;height:10px;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.tree-row.open .tw{transform:rotate(90deg)}
.tree-row .nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tree-row .n{font-size:10.5px;color:var(--text-3);flex:0 0 auto}
.tree-kids{padding-left:14px;border-left:1px dashed var(--line);margin-left:11px}

.tbl-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel)}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{background:var(--panel-2);text-align:left;padding:10px 12px;font-weight:700;color:var(--text-2);font-size:12.2px;border-bottom:1px solid var(--line);white-space:nowrap}
table.tbl td{padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.tbl tbody tr:hover{background:var(--panel-2)}
table.tbl tbody tr:last-child td{border-bottom:0}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}

.q-item{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;margin-bottom:11px;transition:.15s;position:relative}
.q-item:hover{border-color:#c9d3e4;box-shadow:var(--shadow)}
.q-item.sel{border-color:var(--brand-600);background:var(--brand-50)}
.q-item .q-hd{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:7px}
.q-item .q-no{font-weight:750;color:var(--brand-600);font-size:13.5px;flex:0 0 auto}
.q-item .q-stem{font-size:14.2px;line-height:1.85;color:var(--text);word-break:break-word}
.q-item .q-stem p{margin:0 0 4px}
.q-item .q-opts{margin-top:9px;display:grid;grid-template-columns:1fr 1fr;gap:4px 18px}
.q-item .q-opts.one{grid-template-columns:1fr}
.q-item .q-opt{display:flex;gap:7px;font-size:13.7px;line-height:1.75;padding:1px 0;word-break:break-word}
.q-item .q-opt .k{font-weight:700;color:var(--text-2);flex:0 0 auto}
.q-item .q-ft{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:11px;padding-top:9px;border-top:1px dashed var(--line)}
.q-item .q-ft .acts{margin-left:auto;display:flex;gap:4px;opacity:.5;transition:.15s}
.q-item:hover .q-ft .acts,.q-item.sel .q-ft .acts{opacity:1}
.q-item .ans-box{margin-top:10px;padding:10px 12px;background:var(--panel-2);border-radius:9px;border-left:3px solid var(--ok);font-size:13.2px;line-height:1.8}
.q-item .ans-box .lbl{font-weight:750;color:var(--ok);margin-right:6px}
.q-item .ans-box .an{font-weight:650}
.q-item .analysis{margin-top:7px;font-size:13px;color:var(--text-2);line-height:1.85}
.q-item .analysis .lbl{font-weight:750;color:var(--accent);margin-right:6px}
.q-item .pick{position:absolute;right:12px;top:12px}

.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:12px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;position:relative;overflow:hidden}
.stat .k{font-size:12px;color:var(--text-3);font-weight:600}
.stat .v{font-size:25px;font-weight:800;letter-spacing:-.02em;margin-top:3px;font-variant-numeric:tabular-nums}
.stat .v small{font-size:12.5px;font-weight:600;color:var(--text-3);margin-left:3px}
.stat .d{font-size:11.5px;color:var(--text-3);margin-top:2px}
.stat.hl{background:linear-gradient(135deg,var(--brand-600),#0891b2);border-color:transparent;color:#fff}
.stat.hl .k,.stat.hl .d{color:rgba(255,255,255,.82)}

.modal-mask{position:fixed;inset:0;background:rgba(11,16,32,.5);z-index:200;display:flex;align-items:center;justify-content:center;padding:18px;animation:fade .18s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:var(--panel);border-radius:16px;box-shadow:var(--shadow-lg);width:100%;max-width:640px;max-height:calc(100vh - 36px);max-height:calc(100dvh - 36px);display:flex;flex-direction:column;animation:pop .2s cubic-bezier(.2,.9,.3,1.2);overflow:hidden}
@keyframes pop{from{transform:translateY(14px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.modal.wide{max-width:940px}
.modal.xwide{max-width:1200px}
.modal-hd{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex:0 0 auto}
.modal-hd h3{font-size:16px}
.modal-hd .x{margin-left:auto}
.modal-bd{padding:18px;overflow-y:auto;flex:1 1 auto;min-height:0}
.modal-ft{padding:13px 18px;border-top:1px solid var(--line);display:flex;gap:9px;justify-content:flex-end;background:var(--panel-2);flex-wrap:wrap;flex:0 0 auto}
.modal-ft .left{margin-right:auto;display:flex;gap:9px;align-items:center}

.drawer-mask{position:fixed;inset:0;background:rgba(11,16,32,.45);z-index:200;animation:fade .18s}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(440px,100%);background:var(--panel);z-index:201;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);animation:slidein .24s cubic-bezier(.2,.9,.3,1)}
@keyframes slidein{from{transform:translateX(100%)}to{transform:none}}
.drawer-hd{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex:0 0 auto}
.drawer-bd{flex:1 1 auto;overflow-y:auto;padding:18px;min-height:0}
.drawer-ft{padding:13px 18px;border-top:1px solid var(--line);display:flex;gap:9px;justify-content:flex-end;background:var(--panel-2);flex:0 0 auto}

.toast-root{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);z-index:400;display:flex;flex-direction:column;gap:9px;align-items:center;pointer-events:none;width:min(92vw,460px)}
.toast{background:#111827;color:#fff;padding:10px 17px;border-radius:11px;font-size:13.3px;box-shadow:var(--shadow-lg);animation:tin .22s ease;display:flex;align-items:center;gap:9px;max-width:100%}
.toast.ok{background:#15803d}.toast.err{background:#b91c1c}.toast.warn{background:#b45309}
@keyframes tin{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}

.empty{padding:48px 20px;text-align:center;color:var(--text-3)}
.empty .ico{width:58px;height:58px;margin:0 auto 13px;border-radius:16px;background:var(--panel-2);display:flex;align-items:center;justify-content:center;border:1px solid var(--line)}
.empty .ico svg{width:27px;height:27px;fill:none;stroke:var(--text-3);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.empty h4{font-size:15px;color:var(--text-2);margin-bottom:5px}
.empty p{margin:0 0 15px;font-size:12.8px}

.pager{display:flex;align-items:center;gap:6px;justify-content:center;padding:15px 0 4px;flex-wrap:wrap}
.pager button{min-width:32px;height:32px;padding:0 8px;border:1px solid var(--line);background:var(--panel);border-radius:8px;cursor:pointer;font-weight:600;color:var(--text-2);font-size:12.8px}
.pager button:hover:not(:disabled){border-color:var(--brand-600);color:var(--brand-600)}
.pager button.on{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
.pager button:disabled{opacity:.4;cursor:not-allowed}
.pager .info{font-size:12.3px;color:var(--text-3);margin:0 6px}

.bar{height:7px;border-radius:99px;background:var(--line-2);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:99px;background:var(--brand-600);transition:width .35s}
.bar.green>i{background:var(--ok)}.bar.orange>i{background:var(--warn)}.bar.red>i{background:var(--err)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:7px 14px;font-size:13px}
.kv dt{color:var(--text-3);white-space:nowrap}
.kv dd{margin:0;font-weight:600}
.divider{height:1px;background:var(--line);margin:14px 0}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line);font-size:12px;font-weight:600;cursor:pointer;color:var(--text-2)}
.chip.on{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand-600)}
.chip .rm{cursor:pointer;opacity:.55;font-weight:800}
.chip .rm:hover{opacity:1;color:var(--err)}
/* ---------- 数学公式 ---------- */
.mtx{font-family:var(--font-math);white-space:nowrap;display:inline-block;vertical-align:middle;line-height:1.2;font-size:1.05em}
.mtx .mfrac{display:inline-flex;flex-direction:column;vertical-align:-.55em;text-align:center;margin:0 .16em;font-size:.97em}
.mtx .mfrac>span{display:block;padding:0 .28em;line-height:1.3}
.mtx .mfrac>span:last-child{border-top:1px solid currentColor}
.mtx .msqrt{display:inline-flex;align-items:flex-start;vertical-align:middle}
.mtx .msqrt>.rad{line-height:1.1}
.mtx .msqrt>.bod{border-top:1px solid currentColor;padding:0 .18em;margin-top:.1em;line-height:1.35}
.mtx sup,.mtx sub{font-size:.72em;line-height:0}
.mtx .mop{font-style:normal;margin:0 .1em;font-family:var(--font);font-size:.95em}
.mtx .mbig{display:inline-flex;flex-direction:column;align-items:center;vertical-align:-.6em;margin:0 .22em}
.mtx .mbig>.lim{font-size:.6em;line-height:1.2}
.mtx .mbig>.sym{font-size:1.55em;line-height:.95}
.mtx .mtext{font-family:var(--font);font-style:normal;font-size:.95em}
.mtx .mover{display:inline-flex;flex-direction:column;align-items:center;vertical-align:middle}
.mtx .mover>.ov{font-size:.7em;line-height:1.1}
.mtx .mbar{border-top:1px solid currentColor;padding-top:.05em;display:inline-block}
.mtx .mcases{display:inline-flex;align-items:stretch;vertical-align:middle}
.mtx .mcases>.br{font-size:2.2em;font-weight:300;line-height:.85;font-family:var(--font)}
.mtx .mcases>.cs{display:flex;flex-direction:column;justify-content:center;gap:.1em;padding-left:.15em}
.mtx .mit{font-style:italic}
.mtx .mrm{font-style:normal}

/* ---------- 试卷打印版式 ---------- */
.print-root{display:none}
.paper-doc{font-family:"Times New Roman","SimSun",serif;color:#000;background:#fff;padding:24px 28px;max-width:900px;margin:0 auto;line-height:1.95;font-size:14.5px}
.paper-doc h1.pt{text-align:center;font-size:22px;font-weight:800;letter-spacing:.04em;margin:0 0 6px;font-family:"SimHei","Microsoft YaHei",sans-serif}
.paper-doc .psub{text-align:center;font-size:13px;color:#222;margin-bottom:10px}
.paper-doc .pmeta{display:flex;justify-content:center;gap:24px;font-size:12.5px;border-top:1px solid #000;border-bottom:2px solid #000;padding:7px 0;margin-bottom:14px;flex-wrap:wrap}
.paper-doc .sec-t{font-weight:800;font-size:15.5px;margin:18px 0 6px;font-family:"SimHei","Microsoft YaHei",sans-serif}
.paper-doc .sec-note{font-size:12.5px;color:#333;margin:0 0 10px}
.paper-doc .pq{margin-bottom:12px;page-break-inside:avoid}
.paper-doc .pq .opts{display:grid;grid-template-columns:1fr 1fr;gap:1px 22px;margin-top:5px}
.paper-doc .pq .opts.one{grid-template-columns:1fr}
.paper-doc .blank-line{display:inline-block;min-width:78px;border-bottom:1px solid #000;margin:0 3px}
.paper-doc .ans-sec{page-break-before:always;margin-top:24px;border-top:2px solid #000;padding-top:12px}
.paper-doc .ans-item{margin-bottom:8px;font-size:13.5px;page-break-inside:avoid}
.paper-doc .ans-item .k{font-weight:800}
.paper-doc .score-tbl{width:100%;border-collapse:collapse;margin:10px 0 4px;font-size:12.5px;text-align:center}
.paper-doc .score-tbl th,.paper-doc .score-tbl td{border:1px solid #000;padding:5px 6px}
.paper-doc .mtx{font-size:1.05em}

/* ---------- 考试 ---------- */
.exam-shell{position:fixed;inset:0;background:var(--bg);z-index:150;display:flex;flex-direction:column;overflow:hidden}
.exam-top{flex:0 0 auto;display:flex;align-items:center;gap:11px;padding:9px 15px;background:var(--panel);border-bottom:1px solid var(--line);box-shadow:var(--shadow)}
.exam-top .t{font-weight:750;font-size:14.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}
.exam-clock{font-family:var(--font-mono);font-weight:800;font-size:15.5px;padding:4px 12px;border-radius:9px;background:var(--brand-50);color:var(--brand-600);letter-spacing:.03em;flex:0 0 auto}
.exam-clock.warn{background:#fef2f2;color:var(--err);animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:.4}}
.exam-body{flex:1 1 auto;overflow-y:auto;padding:16px 16px 40px;display:flex;gap:16px;justify-content:center;align-items:flex-start}
.exam-main{width:100%;max-width:840px;min-width:0}
.exam-aside{width:248px;flex:0 0 248px;position:sticky;top:0}
.exam-q{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:15px 17px;margin-bottom:13px;scroll-margin-top:12px}
.exam-q.cur{border-color:var(--brand-600);box-shadow:0 0 0 3px rgba(37,99,235,.1)}
.opt-pick{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border:1px solid var(--line);border-radius:10px;margin-top:8px;cursor:pointer;transition:.14s;background:var(--panel)}
.opt-pick:hover{border-color:var(--brand-600);background:var(--brand-50)}
.opt-pick.on{border-color:var(--brand-600);background:var(--brand-50);box-shadow:inset 0 0 0 1px var(--brand-600)}
.opt-pick .kb{width:23px;height:23px;flex:0 0 auto;border-radius:50%;border:1.6px solid var(--line);display:flex;align-items:center;justify-content:center;font-weight:750;font-size:12.5px;color:var(--text-2);background:var(--panel)}
.opt-pick.on .kb{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
.opt-pick.sq .kb{border-radius:6px}
.opt-pick .tx{flex:1 1 auto;min-width:0;line-height:1.7}
.ans-map{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.ans-map button{aspect-ratio:1/1;border:1px solid var(--line);background:var(--panel);border-radius:8px;cursor:pointer;font-weight:700;font-size:12.5px;color:var(--text-2);display:flex;align-items:center;justify-content:center;padding:0}
.ans-map button.done{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
.ans-map button.cur{outline:2px solid var(--warn);outline-offset:1px}

/* ---------- 判卷 ---------- */
.grade-layout{display:grid;grid-template-columns:1fr 336px;gap:16px;align-items:start}
.grade-panel{position:sticky;top:calc(var(--topbar-h) + 14px)}
.score-input{display:flex;align-items:center;gap:8px}
.score-input .inp{width:80px;text-align:center;font-weight:750;font-size:15px}
.quick-scores{display:flex;gap:5px;flex-wrap:wrap}
.quick-scores button{padding:3px 9px;border:1px solid var(--line);background:var(--panel);border-radius:7px;cursor:pointer;font-size:12px;font-weight:650;color:var(--text-2)}
.quick-scores button:hover{border-color:var(--brand-600);color:var(--brand-600)}
.mark-ok{color:var(--ok);font-weight:800}
.mark-no{color:var(--err);font-weight:800}
.mark-half{color:var(--warn);font-weight:800}

/* ---------- 图表 ---------- */
.chart{width:100%;height:auto;display:block;overflow:visible}
.chart text{font-family:var(--font);font-size:10.5px;fill:var(--text-3)}
.chart .axis{stroke:var(--line);stroke-width:1}
.chart .grid-l{stroke:var(--line-2);stroke-width:1;stroke-dasharray:3 3}
.chart .lbl{fill:var(--text-2);font-weight:600}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--text-2);justify-content:center;margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}

/* ---------- 拖拽 ---------- */
.drag-handle{cursor:grab;color:var(--text-3);display:inline-flex;padding:2px;align-items:center}
.drag-handle svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.dragging{opacity:.35}
.drop-hint{height:3px;background:var(--brand-600);border-radius:2px;margin:3px 0}

/* ---------- 富文本 ---------- */
.rte{border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--panel)}
.rte:focus-within{border-color:var(--brand-600);box-shadow:0 0 0 3px rgba(37,99,235,.13)}
.rte-bar{display:flex;gap:3px;flex-wrap:wrap;padding:5px 7px;background:var(--panel-2);border-bottom:1px solid var(--line);align-items:center}
.rte-bar button{min-width:27px;height:27px;padding:0 6px;border:1px solid transparent;background:transparent;border-radius:6px;cursor:pointer;font-size:12.5px;font-weight:700;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;gap:3px}
.rte-bar button:hover{background:var(--panel);border-color:var(--line);color:var(--brand-600)}
.rte-bar .sep{width:1px;height:18px;background:var(--line);margin:0 4px;flex:0 0 auto}
.rte-body{min-height:88px;padding:10px 12px;outline:none;font-size:14.2px;line-height:1.85;overflow-x:auto}
.rte-body:empty::before{content:attr(data-ph);color:var(--text-3);pointer-events:none}
.rte-body img{max-width:100%;border-radius:6px}
.rte-body sub,.rte-body sup{font-size:.72em}

.only-mobile{display:none}
.tabbar{display:none}
@media (max-width:1100px){.exam-aside{display:none}.grade-layout{grid-template-columns:1fr}.grade-panel{position:static}}
@media (max-width:900px){
  .sidebar{position:fixed;left:0;top:var(--topbar-h);bottom:0;z-index:120;width:272px;flex-basis:272px;transform:translateX(-105%);transition:transform .24s cubic-bezier(.2,.9,.3,1);box-shadow:var(--shadow-lg);height:auto}
  body.nav-open .sidebar{transform:none}
  body.nav-open::after{content:"";position:fixed;inset:0;background:rgba(11,16,32,.42);z-index:110;animation:fade .2s}
  .only-mobile{display:inline-flex}
  .mainnav{display:none}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:130;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--panel);border-top:1px solid var(--line)}
  .tabbar a{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--text-3);font-size:10.5px;font-weight:600;padding:5px 0}
  .tabbar a svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
  .tabbar a.on{color:var(--brand-600)}
  .main{padding:14px 13px calc(var(--tabbar-h) + 34px)}
  .page-hd h2{font-size:18px}
  .q-item .q-opts{grid-template-columns:1fr}
  .modal-mask{padding:0;align-items:flex-end}
  .modal{max-width:none;border-radius:16px 16px 0 0;max-height:93vh;max-height:93dvh}
  .brand-name em{display:none}
  .stat-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
  .exam-body{padding:12px 11px 34px}
}
@media (max-width:560px){
  .topbar{padding:0 10px;gap:7px}
  .user-chip span{display:none}
  .user-chip{padding:4px}
  .page-hd .acts{width:100%;margin-left:0}
  .page-hd .acts .btn{flex:1 1 auto}
  .card-bd{padding:13px}
}
@media print{
  body{background:#fff}
  .topbar,.sidebar,.tabbar,.toast-root,.modal-root,.no-print,#app{display:none!important}
  .print-root{display:block!important}
  @page{margin:15mm 14mm}
}

/* ---------- 登录页 ---------- */
.login-root{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(1100px 560px at 8% -12%,rgba(37,99,235,.20),transparent 60%),radial-gradient(900px 520px at 102% 4%,rgba(8,145,178,.18),transparent 55%),var(--bg)}
.login-wrap{width:100%;max-width:1020px;display:grid;grid-template-columns:1.02fr .98fr;background:var(--panel);border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-lg)}
.login-card{padding:34px 32px 24px}
.login-hd{margin-bottom:20px}
.login-logo{width:52px;height:52px;border-radius:15px;background:linear-gradient(135deg,var(--brand-600),var(--accent));color:#fff;font-size:26px;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 20px rgba(37,99,235,.30)}
.login-hd h1{margin:12px 0 2px;font-size:23px;letter-spacing:.5px}
.login-hd p{margin:0;color:var(--text-3);font-size:12.5px}
.login-bd .field{margin-bottom:12px}
.login-err{background:rgba(220,38,38,.09);border:1px solid rgba(220,38,38,.32);color:var(--err);padding:8px 11px;border-radius:9px;font-size:13px;margin-bottom:12px}
.login-rem{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-2);margin:2px 0 14px;cursor:pointer}
.login-ft{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;flex-wrap:wrap}
.login-ft .link{background:none;border:0;color:var(--brand-600);cursor:pointer;font-size:12.5px;padding:0}
.login-side{padding:34px 30px;background:linear-gradient(180deg,var(--panel-2),var(--panel));border-left:1px solid var(--line)}
.login-tip .ti{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px;margin:16px 0 4px}
.login-tip .ti:first-child{margin-top:0}
.login-tip .ti svg{width:17px;height:17px;color:var(--brand-600)}
.login-tip p{margin:0;color:var(--text-3);font-size:12.5px;line-height:1.8}
.login-quick{grid-column:1/-1;border-top:1px solid var(--line);padding:14px 30px;background:var(--panel-2)}
.login-quick .t{font-size:12px;color:var(--text-3);margin-bottom:8px}
.login-quick .qs{display:flex;gap:8px;flex-wrap:wrap}
.login-quick .q{border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:7px 12px;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:1px;transition:.15s;color:var(--text)}
.login-quick .q:hover{border-color:var(--brand-600);box-shadow:0 3px 12px rgba(37,99,235,.14)}
.login-quick .q b{font-size:13px}
.login-quick .q span{font-size:11.5px;color:var(--text-3)}
@media(max-width:880px){
  .login-wrap{grid-template-columns:1fr;max-width:440px}
  .login-side{display:none}
  .login-card{padding:26px 20px 18px}
  .login-quick{padding:12px 20px}
  .login-root{padding:12px}
}
/* ---------- 顶栏账号菜单 ---------- */
.user-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:236px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lg);padding:6px;z-index:60}
.user-menu .uh{padding:9px 10px 8px;border-bottom:1px solid var(--line-2);margin-bottom:5px}
.user-menu .uh b{display:block;font-size:13.5px}
.user-menu .uh span{font-size:11.5px;color:var(--text-3)}
.user-menu button{display:flex;align-items:center;gap:8px;width:100%;border:0;background:none;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text);text-align:left}
.user-menu button:hover{background:var(--panel-2)}
.user-menu button svg{width:16px;height:16px;color:var(--text-3)}
.user-menu button.danger{color:var(--err)}
.user-menu button.danger svg{color:var(--err)}
.topbar-right{position:relative}
/* ---------- 账号管理表格 ---------- */
.tbl .icon-btn.danger:hover{color:var(--err);border-color:rgba(220,38,38,.4)}
.tbl code{background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-family:var(--font-mono);font-size:12.5px}

.user-chip .role-dot{font-style:normal;margin-left:6px;font-size:11px;color:var(--brand-600);background:var(--brand-50);border:1px solid var(--brand-100);border-radius:999px;padding:0 7px;line-height:17px}
html[data-theme="dark"] .user-chip .role-dot{background:rgba(59,130,246,.16);border-color:rgba(59,130,246,.35)}

/* ---------- 修复：hidden 必须真的隐藏（此前被 .app/.login-root 的 display 覆盖） ---------- */
[hidden]{display:none!important}
.login-root{flex-direction:column;gap:0}

/* ---------- 全站页脚 ---------- */
.site-footer{flex:0 0 auto;margin-top:auto;padding:16px 20px 20px;border-top:1px solid var(--line);background:var(--panel-2);color:var(--text-3);font-size:12.3px;line-height:1.95;text-align:center}
.site-footer .f-row{display:flex;gap:6px 14px;justify-content:center;align-items:center;flex-wrap:wrap}
.site-footer .f-brand{font-weight:700;color:var(--text-2);font-size:13px;letter-spacing:.3px}
.site-footer .f-sep{opacity:.45}
.site-footer a{color:var(--text-3);text-decoration:none;display:inline-flex;align-items:center;gap:4px}
.site-footer a:hover{color:var(--brand-600);text-decoration:underline}
.site-footer svg{width:14px;height:14px}
.login-footer{width:100%;max-width:1020px;margin:14px auto 0;text-align:center;color:var(--text-3);font-size:12px;line-height:1.95}
.login-footer .f-brand{font-weight:700;color:var(--text-2)}
.login-footer .f-row{display:flex;gap:6px 14px;justify-content:center;align-items:center;flex-wrap:wrap}
.login-footer a{color:var(--text-3);text-decoration:none;display:inline-flex;align-items:center;gap:4px}
.login-footer a:hover{color:var(--brand-600);text-decoration:underline}
.login-footer svg{width:13px;height:13px}
@media (max-width:900px){
  .site-footer{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 16px)}
  .login-footer{max-width:440px}
}
@media print{.site-footer{display:none!important}}

/* ---------- 登录卡片内的内置账号快捷填入 ---------- */
.login-quick{display:none}
.login-builtin{margin-top:16px;padding-top:12px;border-top:1px dashed var(--line);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.login-builtin .qs{display:flex;gap:6px;flex-wrap:wrap}
.login-builtin .q{border:1px solid var(--line);background:var(--panel-2);border-radius:999px;padding:2px 10px;cursor:pointer;font-size:11.5px;color:var(--text-3);display:inline-flex;gap:5px;align-items:center;transition:.15s}
.login-builtin .q b{color:var(--text-2);font-weight:650}
.login-builtin .q:hover{border-color:var(--brand-600);color:var(--brand-600)}
