/* ===== GESPPASS · v2 设计系统(融合 USACO Guide 梯队/状态 + Brilliant 演示/克制游戏化) ===== */
@font-face{font-family:'JetBrains Mono';src:url('/fonts/jetbrains-mono-latin-400-normal.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('/fonts/jetbrains-mono-latin-500-normal.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('/fonts/jetbrains-mono-latin-700-normal.woff2') format('woff2');font-weight:700;font-display:swap}
:root{
  --paper:#f6f7fb;--surface:#fff;--ink:#13182e;--ink2:#5b6178;--ink3:#9aa0b4;--line:#e6e8f0;--line2:#eef0f6;
  --brand:#ef3b57;--brand-d:#d92f4a;--brand-soft:#fce9ec;
  --pass:#13b083;--pass-d:#0e9a72;--pass-soft:#e3f7ef;
  --gold:#ed9b1f;--gold-soft:#fcf0d8;
  --ed-bg:#161b33;--ed-line:#262c4d;--ed-num:#4b5478;
  --s-kw:#c792ea;--s-ty:#82aaff;--s-str:#c3e88d;--s-num:#f78c6c;--s-cm:#5c6b82;--s-fn:#3fd6a8;
  --L1:#3f72f0;--L2:#0ea5b8;--L3:#13b083;--L4:#6f9f1a;--L5:#ed9b1f;--L6:#f97316;--L7:#ef3b57;--L8:#7c5cff;
  /* 兼容旧变量名(app.js 内联样式 / 法务页仍在用) */
  --red:#ef3b57;--red-d:#d92f4a;--red-l:#fce9ec;--teal:#13b083;--teal-d:#0e9a72;--teal-l:#e3f7ef;
  --green:#13b083;--amber:#ed9b1f;--blue:#3f72f0;--purple:#7c5cff;--gray:#5b6178;--bg:#f6f7fb;--card:#fff;
  --mono:'JetBrains Mono',ui-monospace,"SF Mono",Menlo,Consolas,"PingFang SC","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",monospace;
  --disp:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",system-ui,sans-serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",system-ui,sans-serif;
  --r:14px;--rsm:10px;--rlg:20px;--sh:0 1px 3px rgba(19,24,46,.05),0 1px 2px rgba(19,24,46,.04);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--sans);background:var(--paper);color:var(--ink);line-height:1.72;font-size:19px;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none;cursor:pointer}
button{font-family:inherit;cursor:pointer}
:focus-visible{outline:2.5px solid var(--brand);outline-offset:2px;border-radius:4px}
.wrap{max-width:1300px;margin:0 auto;padding:0 22px}
.mono{font-family:var(--mono)}

/* topbar */
.topbar{background:#fff;border-bottom:1px solid var(--line2);font-size:16.5px;color:var(--ink2)}
.topbar .wrap{display:flex;align-items:center;height:34px;gap:16px}
.topbar .right{margin-left:auto;display:flex;gap:14px;align-items:center}
.usermenu{display:flex;align-items:center;gap:12px;font-size:17px}
.usermenu .uname{font-weight:600;color:var(--ink)}
.usermenu .logout{color:var(--ink2);font-size:16.5px}.usermenu .logout:hover{color:var(--brand)}
.usermenu #course-entry{font-weight:600;color:#34a853}.usermenu #course-entry.on,.usermenu #course-entry:hover{color:#178a3c}

/* header */
header{background:#fff;border-bottom:1px solid var(--line)}
.hd{display:flex;align-items:center;gap:16px;height:62px}
.logo{display:flex;align-items:center;gap:11px;cursor:pointer;white-space:nowrap}
.logo .mark{font-family:var(--disp);font-size:21px;font-weight:800;letter-spacing:.3px;display:inline-flex;align-items:center}
.logo .mark::before{content:"✓";display:inline-flex;align-items:center;justify-content:center;background:var(--brand);color:#fff;width:32px;height:32px;border-radius:9px;margin-right:10px;font-size:21.5px;font-family:var(--sans);box-shadow:0 4px 10px rgba(239,59,87,.3)}
.logo .mark .gesp{color:var(--ink)}.logo .mark .pass{color:var(--brand)}
.logo .sub{font-size:16.5px;color:var(--ink2)}
.logo .badge-sub{font-size:17.5px;color:var(--ink2);font-weight:600;border-left:1px solid var(--line);padding-left:13px;margin-left:2px}
.hd .search{margin-left:auto;position:relative}
.hd .search input{width:280px;height:38px;padding:0 40px 0 14px;border:1px solid var(--line);background:#f7f9fc;border-radius:10px;font-size:18px;outline:none;transition:.15s}
.hd .search input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px var(--brand-soft)}
.hd .search button{position:absolute;right:0;top:0;height:100%;width:38px;border:none;background:transparent;color:var(--ink2);font-size:19.5px}
.hd .search button:hover{color:var(--brand)}

/* nav tabs */
nav.tabs{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
nav.tabs .wrap{display:flex;gap:4px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
nav.tabs .wrap::-webkit-scrollbar{display:none}
nav.tabs a{display:flex;align-items:center;padding:13px 14px 11px;color:var(--ink2);font-size:18.5px;font-weight:500;white-space:nowrap;flex:0 0 auto;border-bottom:2px solid transparent;transition:.15s}
nav.tabs a:hover{color:var(--ink)}
nav.tabs a.on{color:var(--brand);font-weight:700;border-bottom-color:var(--brand)}

/* layout */
.layout{display:flex;gap:18px;padding:20px 0;align-items:flex-start}
.side{width:296px;flex:0 0 296px;position:sticky;top:74px}
.main{flex:1;min-width:0}

/* card */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:0 1px 2px rgba(19,24,46,.05),0 8px 24px -8px rgba(19,24,46,.12);margin-bottom:18px;overflow:hidden;transition:box-shadow .22s ease}
.card-h{padding:15px 20px;border-bottom:1px solid var(--line2);font-weight:700;font-size:21px;color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:8px}
.card-h .sub{font-size:17px;font-weight:500;color:var(--ink2)}
.card-b{padding:20px}

/* sidebar nav */
.nav-title{padding:14px 16px;font-weight:700;color:var(--ink);border-bottom:1px solid var(--line2);font-size:19.5px}
.nav-cols{display:flex;font-size:15px;color:var(--ink3);padding:8px 16px;border-bottom:1px solid var(--line2);background:#fafbfd}
.nav-cols .nc-name{flex:1}.nav-cols .nc-x{width:40px;text-align:center}
.nav-item{display:flex;align-items:center;padding:11px 16px;border-bottom:1px solid var(--line2);cursor:pointer;transition:.13s;font-size:17.5px}
.nav-item:hover{background:#fafbfd}
.nav-item.active{background:var(--brand-soft);border-left:3px solid var(--brand);padding-left:13px}
.nav-item.ov{font-weight:600}
.ni-name{flex:1;display:flex;align-items:center;gap:5px;min-width:0;white-space:nowrap;overflow:hidden}
.ni-name .ch{color:var(--ink3);font-size:15px;flex:none}
.ni-name .ni-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ni-x{width:40px;text-align:center;font-family:var(--mono);flex:none}
.ni-kp{color:var(--blue);font-weight:600}.ni-q{color:var(--brand);font-weight:700}
.caret{color:#c2c9d4;font-size:13px}

/* badges */
.badge{display:inline-block;padding:2px 10px;border-radius:7px;font-size:15px;color:#fff;font-weight:600;white-space:nowrap}
.req-low{background:var(--purple)}.req-mid{background:var(--pass)}.req-high{background:var(--brand)}
.b-freq{display:inline-block;padding:2px 9px;border-radius:6px;font-size:15px;color:#fff;font-weight:600}
.freq-高频{background:var(--brand)}.freq-中频{background:var(--gold)}.freq-低频{background:#9aa3b0}
.qtype{display:inline-block;padding:2px 9px;border-radius:6px;font-size:15px;font-weight:700}
.type-mc{background:var(--brand-soft);color:var(--brand-d)}.type-tf{background:#eaf0fe;color:#1c52bf}

/* breadcrumb / stats */
.crumb{font-size:17.5px;color:var(--ink2);margin-bottom:14px}
.crumb a:hover{color:var(--brand)}.crumb span{color:var(--ink);font-weight:600}
.stats{display:flex;flex-wrap:wrap;gap:14px 30px;padding:4px 2px}
.stat{display:flex;align-items:center;gap:7px;font-size:17.5px}
.stat .lab{color:var(--ink2)}
.stat .val{font-weight:700}.stat .val.red{color:var(--brand);font-size:21.5px;font-family:var(--mono)}
.stars{color:var(--gold);letter-spacing:1px;font-size:18.5px}
.stars .empty{color:#dde1e7}

/* table */
table{width:100%;border-collapse:collapse;font-size:18px}
th{background:#fafbfd;color:var(--ink2);font-weight:600;text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);font-size:16.5px}
th.num,td.num{text-align:center;width:64px}
td{padding:12px 14px;border-bottom:1px solid var(--line2)}
tr.clk{cursor:pointer;transition:.12s}
tr.clk:hover{background:#fafbfd}
.sec-name{font-weight:600}.sec-name .sid{color:var(--brand);margin-right:7px;font-weight:700;font-family:var(--mono);font-size:17px}
.t-kp{color:var(--blue);font-weight:600;font-family:var(--mono)}.t-q{color:var(--brand);font-weight:700;font-family:var(--mono)}

/* charts */
.chart-wrap{display:flex;align-items:center;gap:32px;flex-wrap:wrap;justify-content:center;padding:4px 0}
.legend{display:grid;grid-template-columns:auto auto;column-gap:20px;row-gap:9px;align-items:center;font-size:17px}
.legend .lg-n{display:flex;align-items:center;gap:7px;color:var(--ink);white-space:nowrap}
.legend .sw{width:11px;height:11px;border-radius:3px;flex:none;box-shadow:0 1px 2px rgba(19,24,46,.18)}
.legend .lg-v{justify-self:end;display:flex;align-items:baseline;gap:7px;font-family:var(--mono);white-space:nowrap}
.legend .lg-v b{color:var(--ink);font-weight:700;font-size:17.5px}
.legend .lg-v em{font-style:normal;color:var(--ink3);font-size:16.5px}
/* 图例 v2:占比条 + hover 高亮(各章/子节分布共用) */
.legend2{display:flex;flex-direction:column;gap:1px;flex:1 1 320px;min-width:300px;max-width:540px}
.lg-row{display:grid;grid-template-columns:14px 1fr auto;grid-template-rows:auto auto;column-gap:11px;row-gap:5px;align-items:center;padding:7px 11px;border-radius:10px;transition:background .12s}
.lg-row:hover{background:#f4f7fc}
.lg-row .sw{grid-row:1;grid-column:1;width:12px;height:12px;border-radius:4px;box-shadow:0 1px 2px rgba(19,24,46,.2)}
.lg-name{grid-column:2;grid-row:1;color:var(--ink);font-size:16.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lg-val{grid-column:3;grid-row:1;display:flex;align-items:baseline;gap:8px;font-family:var(--mono)}
.lg-val b{color:var(--ink);font-weight:700;font-size:18px}
.lg-val em{font-style:normal;color:var(--ink3);font-size:14.5px;min-width:36px;text-align:right}
.lg-bar{grid-column:2/4;grid-row:2;height:5px;border-radius:4px;background:#eceff5;overflow:hidden}
.lg-bar>i{display:block;height:100%;border-radius:4px;transition:width .5s cubic-bezier(.22,.61,.36,1)}
/* 配色圆点(侧栏 + 一览表,与饼图同色联动) */
.ch-dot{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 1px 2px rgba(19,24,46,.18)}
.nav-item .ov-ic{margin-right:5px}
/* 一览表「真题」列:数字 + 占比条 */
.t-q .q-cell{display:inline-flex;flex-direction:column;align-items:center;gap:4px;min-width:46px}
.t-q .q-bar{width:100%;height:4px;border-radius:3px;background:#eceff5;overflow:hidden}
.t-q .q-bar>i{display:block;height:100%;border-radius:3px}
/* 3D 饼图悬停弹出 + 浮动提示 */
.pie-box{flex:none;position:relative}
.pie-box .sgrp{transition:transform .2s cubic-bezier(.34,1.4,.5,1);cursor:pointer}
.pie-tip{position:absolute;pointer-events:none;z-index:30;background:rgba(26,31,54,.97);color:#fff;border-radius:10px;padding:7px 11px;font-size:13px;line-height:1.55;box-shadow:0 10px 26px -8px rgba(0,0,0,.5);white-space:nowrap;opacity:0;transform:translateY(4px);transition:opacity .12s,transform .12s}
.pie-tip.on{opacity:1;transform:translateY(0)}
.pie-tip .d{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:6px}
.pie-tip b{font-size:14px;font-weight:700}
.lg-row{cursor:pointer}
.lg-row.hot{background:#eef3fb}
/* 立体数据卡(底纹 + 右下 logo) */
.stat-tiles{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.stile{flex:1 1 150px;border-radius:16px;padding:15px 18px;color:#fff;position:relative;overflow:hidden;box-shadow:0 10px 22px -10px rgba(30,40,80,.5)}
.stile .st-tex{position:absolute;inset:0;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.07) 0 2px,transparent 2px 10px);pointer-events:none}
.stile .st-edge{position:absolute;left:0;top:0;bottom:0;width:5px}
.stile .st-logo{position:absolute;right:-8px;bottom:-14px;width:68px;height:68px;opacity:.18;color:#fff}
.stile .st-logo svg{width:100%;height:100%}
.stile .st-n{position:relative;font-size:13px;font-weight:600;opacity:.95}
.stile .st-v{position:relative;font-size:30px;font-weight:800;font-family:var(--mono);line-height:1.2;letter-spacing:-.02em;text-shadow:0 1px 2px rgba(0,0,0,.2)}
.stile .st-v small{font-size:15px;font-weight:600;margin-left:3px;opacity:.85}
.chart-title{text-align:center;font-weight:700;color:var(--ink);margin:14px 0 2px;font-size:19.5px}
.chart-sub{text-align:center;color:var(--ink2);font-size:15px;margin-bottom:12px}

/* question cards */
.q{border:1px solid var(--line);border-radius:var(--r);margin-bottom:12px;overflow:hidden;transition:.15s;background:#fff}
.q:hover{box-shadow:var(--sh)}
.q-head{display:flex;align-items:center;gap:10px;padding:11px 15px;background:#fafbfd;cursor:pointer;font-size:17px;flex-wrap:wrap}
.q-src{color:var(--ink3);font-family:var(--mono);font-size:16.5px}
.q-diff{font-size:17.5px;color:var(--gold);letter-spacing:1px;white-space:nowrap}
.q-star{margin-left:auto;color:#cdd5e0;font-size:21.5px;cursor:pointer;transition:.15s}
.q-star.on{color:var(--gold)}
.q-toggle{color:var(--brand);font-weight:600;white-space:nowrap}
.q-body{padding:15px}
.q-stem{margin-bottom:10px;line-height:1.7}
.q-stem code,.q-opt code,.opt code{background:#eef0f6;padding:1px 6px;border-radius:5px;font-family:var(--mono);font-size:17px;color:var(--brand-d)}
.q-code{background:var(--ed-bg);color:#cdd6f4;padding:15px 17px;border-radius:var(--rsm);overflow-x:auto;margin:10px 0;font-family:var(--mono);font-size:17px;line-height:1.8;white-space:pre;border:1px solid #20264a}
.q-opts{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.opt{padding:11px 14px;border:1.5px solid var(--line);border-radius:var(--rsm);display:flex;gap:11px;font-size:18.5px;align-items:flex-start;background:#fff;transition:.13s}
.opt .ok{font-weight:700;color:var(--ink2);flex:none;font-family:var(--mono)}
.opt.pick{border-color:var(--blue);background:#eaf0fe}
.opt.sel{cursor:pointer}.opt.sel:hover{border-color:#cdd5e2;background:#fafbfd}
.q.open .opt.correct,.opt.correct.show{background:var(--pass-soft);border-color:var(--pass)}
.q.open .opt.correct .ok,.opt.correct.show .ok{color:var(--pass-d)}
.opt.wrongpick{background:var(--brand-soft);border-color:#eaa6a6}.opt.wrongpick .ok{color:var(--brand)}
.ans{display:none;margin-top:14px;padding:14px 16px;background:var(--pass-soft);border-radius:0 8px 8px 0;border-left:3px solid var(--pass)}
.q.open .ans,.ans.show{display:block}
.ans .a-line{font-weight:700;color:var(--pass-d);margin-bottom:6px}
.ans .a-line .ansv{display:inline-block;min-width:24px;text-align:center;background:var(--pass);color:#fff;border-radius:5px;padding:0 9px;margin-left:4px;font-family:var(--mono)}
.ans .exp{color:#1d6753;font-size:18px;line-height:1.7}
.ans .exp .tip{display:block;margin-top:8px;padding:9px 11px;background:var(--gold-soft);border-radius:6px;color:#8a6d3b;font-size:17px}
.ans .exp code{font-family:var(--mono);background:#e3f0eb;color:#0e5a40;padding:1px 5px;border-radius:4px;font-size:16px}
.ans .exp strong{color:#0c5840;font-weight:700}
.ans .exp .tip code{background:#f5e8cb;color:#7a5a1a}
.ans .exp .tip strong{color:#6b521f}
.todo{color:#aab0bb;font-style:italic}

/* toolbar / pager / buttons */
.qtools{display:flex;align-items:center;gap:12px;margin-bottom:14px;font-size:17.5px;flex-wrap:wrap}
.qtools .cnt{color:var(--ink2)}
.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border:1.5px solid var(--brand);color:var(--brand);border-radius:999px;font-size:18px;font-weight:700;background:#fff;transition:.15s}
.btn:hover{background:var(--brand-soft)}
.btn.solid{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 6px 16px rgba(239,59,87,.28)}
.btn.solid:hover{background:var(--brand-d);box-shadow:0 10px 22px rgba(239,59,87,.36);transform:translateY(-1px)}
.btn.teal{border-color:var(--pass);color:var(--pass-d)}.btn.teal:hover{background:var(--pass);color:#fff}
.btn.gray{border-color:#c8cfd9;color:var(--ink2)}.btn.gray:hover{background:#eef1f5;color:var(--ink)}
.btn:disabled{opacity:.45;cursor:default;box-shadow:none;transform:none}
.pager{display:flex;gap:6px;align-items:center;margin-left:auto}
.pager button{min-width:32px;padding:5px 9px;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:17px;font-family:var(--mono)}
.pager button.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.pager button:disabled{opacity:.4;cursor:default}
.notice{font-size:17px;color:var(--ink2);padding:11px 14px;background:#f7f9fc;border:1px solid var(--line2);border-radius:10px;margin-top:6px;line-height:1.6}

/* empty / loading / toast */
.empty{padding:48px 24px;text-align:center;color:var(--ink2)}
.empty .big{font-size:38px;margin-bottom:10px;line-height:1}
.spinner{width:34px;height:34px;border:3px solid var(--line);border-top-color:var(--brand);border-radius:50%;margin:0 auto 14px;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.toast-wrap{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:var(--ink);color:#fff;padding:11px 18px;border-radius:12px;font-size:18px;font-weight:500;box-shadow:0 8px 24px rgba(0,0,0,.22);animation:toastIn .25s ease;max-width:80vw}
.toast.err{background:var(--brand-d)}.toast.ok{background:var(--pass-d)}
@keyframes toastIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

/* practice quiz */
.quiz-setup{display:flex;flex-direction:column;gap:18px}
.opt-group{display:flex;gap:10px;flex-wrap:wrap}
.chip{padding:8px 16px;border:1.5px solid var(--line);border-radius:999px;font-size:17.5px;background:#fff;transition:.15s}
.chip:hover{border-color:var(--brand);color:var(--brand)}.chip.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.field-label{font-weight:600;font-size:17.5px;margin-bottom:9px;color:var(--ink)}
.quiz-progress{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.quiz-progress>span:first-child{font-family:var(--mono);font-size:17.5px;color:var(--ink2);white-space:nowrap}
.quiz-progress .bar{flex:1;height:8px;background:#eef1f6;border-radius:999px;overflow:hidden}
.quiz-progress .bar span{display:block;height:100%;background:var(--brand);transition:.3s}
.quiz-score{font-weight:700;font-family:var(--mono);color:var(--pass-d);white-space:nowrap}
.fb{margin-top:14px;padding:11px 15px;border-radius:var(--rsm);font-weight:600}
.fb.ok{background:var(--pass-soft);color:var(--pass-d)}.fb.no{background:var(--brand-soft);color:var(--brand)}
.summary{text-align:center;padding:28px 24px}
.summary .ring{font-size:46px;font-weight:800;color:var(--brand);margin:12px 0;font-family:var(--mono);letter-spacing:-.02em}

/* progress dashboard */
.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:13px}
.stat-card{background:#fafbfd;border:1px solid var(--line);border-radius:var(--r);padding:18px;text-align:center}
.stat-card .num{font-size:29px;font-weight:800;color:var(--brand);line-height:1.1;font-family:var(--mono);letter-spacing:-.02em}
.stat-card .lab{color:var(--ink2);font-size:17px;margin-top:6px}
.stat-card.teal .num{color:var(--pass-d)}.stat-card.blue .num{color:var(--blue)}.stat-card.amber .num{color:#b9760a}
.prog-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line2);font-size:17.5px}
.prog-row .pname{width:180px;font-weight:500}
.prog-row .pbar{flex:1;height:16px;background:#eef1f6;border-radius:999px;overflow:hidden;position:relative}
.prog-row .pbar span{display:block;height:100%;border-radius:999px}
.prog-row .pbar .done{background:linear-gradient(90deg,var(--pass),#1abc9c)}
.prog-row .pval{width:140px;text-align:right;color:var(--ink2);font-size:16.5px;font-family:var(--mono)}

/* 代码高亮(暗色 IDE) */
.hl-kw{color:var(--s-kw)}.hl-ty{color:var(--s-ty)}.hl-str{color:var(--s-str)}.hl-cm{color:var(--s-cm);font-style:italic}.hl-num{color:var(--s-num)}.hl-fn{color:var(--s-fn)}

footer{text-align:center;color:var(--ink2);font-size:16.5px;padding:28px 20px 44px;line-height:1.9;border-top:1px solid var(--line);background:#fff;margin-top:10px}
footer a{color:var(--ink2)}footer a:hover{color:var(--brand)}

/* 🤖 智能推题 */
.ai-intro{background:var(--pass-soft);border-left:3px solid var(--pass);border-radius:0 8px 8px 0;padding:13px 16px;font-size:18px;line-height:1.7;color:#1d6753}
.ai-intro b{color:var(--pass-d)}
.wp-box{margin-top:16px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.wp-title{background:#fafbfd;padding:11px 15px;font-weight:700;font-size:18px;border-bottom:1px solid var(--line2)}
.wp-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 15px;border-bottom:1px solid var(--line2);font-size:18px}
.wp-row:last-child{border-bottom:none}
.wp-name{font-weight:600;color:var(--ink)}
.wp-stat{color:var(--ink2);font-size:17px;white-space:nowrap;font-family:var(--mono)}

/* 📝 限时模考 */
.mock-bar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:14px;background:var(--brand);color:#fff;padding:11px 17px;border-radius:var(--rsm);margin-bottom:16px;box-shadow:0 6px 16px rgba(239,59,87,.28);flex-wrap:wrap}
.mock-bar .mb-t{font-weight:700}
.mock-timer{font-family:var(--mono);font-weight:800;font-size:21px;background:rgba(255,255,255,.18);padding:3px 12px;border-radius:8px;min-width:66px;text-align:center}
.mock-timer.warn{background:#fff;color:var(--brand);animation:blink 1s infinite}
@keyframes blink{50%{opacity:.5}}
.mock-prog{font-size:17.5px;opacity:.95;font-family:var(--mono)}
.mock-bar .btn{margin-left:auto;background:#fff;color:var(--brand);border-color:#fff;font-weight:700}
.mock-bar .btn:hover{background:#ffe9eb}
.mq{padding:18px 0;border-bottom:1px dashed var(--line)}
.mq:last-child{border-bottom:none}
.mq-h{margin-bottom:10px;font-size:18px;color:var(--ink)}
.mq-h b{color:var(--brand)}
.fb-ok{color:var(--pass-d)}.fb-no{color:var(--brand)}
.rank-badge{display:inline-block;background:var(--gold-soft);color:#9a6510;border:1px solid #f3d08a;font-weight:700;padding:6px 18px;border-radius:999px;font-size:18.5px;font-family:var(--mono)}

/* 🏆 成就 + 打卡 + 排行榜 */
.ach-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.ach-card{border-radius:var(--r);padding:16px 10px;text-align:center;border:1px solid var(--line);background:#fafbfd}
.ach-card.amber{background:var(--gold-soft);border-color:#f6dca8}
.ach-card.teal{background:var(--pass-soft);border-color:#bce6dd}
.ach-card.blue{background:#eaf0fe;border-color:#c3ddf8}
.ach-ic{font-size:26px;line-height:1}
.ach-v{font-family:var(--mono);font-size:25px;font-weight:700;margin-top:5px;color:var(--ink);letter-spacing:-.02em}
.ach-card.amber .ach-v{color:#b9760a}.ach-card.teal .ach-v{color:var(--pass-d)}.ach-card.blue .ach-v{color:#1c52bf}
.ach-l{font-size:15.5px;color:var(--ink2);margin-top:3px}
.ci{margin-top:16px;text-align:center;padding:12px;border-radius:var(--rsm);font-size:18.5px;font-weight:600}
.ci-done{background:var(--pass-soft);color:var(--pass-d)}.ci-todo{background:var(--gold-soft);color:#a87617}
.lvl-progress{margin-top:16px}
.lp-bar{height:12px;background:#eef1f6;border-radius:999px;overflow:hidden}
.lp-bar span{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--brand));border-radius:999px;transition:width .5s}
.lp-txt{text-align:center;font-size:17px;color:var(--ink2);margin-top:8px}
.lp-txt b{color:var(--brand);font-family:var(--mono)}
.lb{display:flex;flex-direction:column;gap:2px}
.lb-row{display:flex;align-items:center;gap:13px;padding:12px 14px;border-radius:var(--rsm);font-size:18.5px}
.lb-row:nth-child(odd){background:#f8fafc}
.lb-row.me{background:var(--brand-soft);box-shadow:inset 0 0 0 1px #f3b9bf}
.lb-rank{width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--ink2);font-size:17.5px;flex:0 0 auto;font-family:var(--mono)}
.lb-rank.r1{background:var(--gold);color:#fff;border-radius:50%}.lb-rank.r2{background:#aab2c5;color:#fff;border-radius:50%}.lb-rank.r3{background:#c98a52;color:#fff;border-radius:50%}
.lb-name{font-weight:600;color:var(--ink);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-tier{font-size:16.5px;color:var(--ink2);background:#fff;border:1px solid var(--line);padding:2px 9px;border-radius:999px;white-space:nowrap}
.lb-pts{font-family:var(--mono);font-weight:700;color:var(--brand);min-width:62px;text-align:right;white-space:nowrap}

/* 状态点(USACO 式) */
.status{display:inline-flex;align-items:center;gap:6px;font-size:16.5px;font-weight:600}
.status .sd{width:8px;height:8px;border-radius:50%}
.st-done{color:var(--pass-d)}.st-done .sd{background:var(--pass)}
.st-prog{color:#b9760a}.st-prog .sd{background:var(--gold)}
.st-todo{color:var(--ink3)}.st-todo .sd{background:#cdd2de}

/* 活跃度热力图(打卡) */
.heat{display:grid;grid-template-rows:repeat(7,1fr);grid-auto-flow:column;grid-auto-columns:1fr;gap:4px}
.heat i{aspect-ratio:1;border-radius:3px;background:#eaecf3}
.heat i.l1{background:#bde8d8}.heat i.l2{background:#7ed9b4}.heat i.l3{background:#35c191}.heat i.l4{background:var(--pass-d)}
.heat-legend{display:flex;align-items:center;gap:6px;justify-content:flex-end;margin-top:10px;font-size:15px;color:var(--ink3)}
.heat-legend i{width:11px;height:11px;border-radius:3px}

/* 响应式 */
@media(max-width:900px){
  .layout{flex-direction:column}.side{width:100%;flex:none;position:static}
  .hd .search input{width:170px}.ach-grid{grid-template-columns:repeat(4,1fr)}
}
@media(max-width:560px){
  .wrap{padding:0 14px}.hd{height:56px;gap:10px}.hd .search input{width:130px}
  .logo .badge-sub{display:none}.ach-grid{grid-template-columns:repeat(2,1fr)}
  .stat-cards{grid-template-columns:repeat(2,1fr)}.card-b{padding:15px}
  .prog-row{flex-wrap:wrap}.prog-row .pname{width:100%}.prog-row .pval{width:auto;margin-left:auto}
  .summary .ring{font-size:38px}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ===== VIP / 会员 ===== */
.vip-tag{display:inline-block;background:linear-gradient(135deg,#f7b733,#fc4a1a);color:#fff;font-size:15px;font-weight:700;padding:1px 7px;border-radius:999px;vertical-align:middle}
.usermenu .vip-link{color:#fff;background:linear-gradient(135deg,#f7b733,#fc4a1a);border-radius:999px;padding:2px 10px!important;font-weight:600}
.exp.vip-lock{background:#fff8ec;border:1px dashed #f0b35b;color:#8a5a12;border-radius:10px;padding:12px 14px;line-height:1.7}
.exp.vip-lock b{color:#c4560f}
.vip-cta{display:inline-block;margin-left:10px;color:#fff;background:linear-gradient(135deg,#f7b733,#fc4a1a);border-radius:999px;padding:3px 12px;font-weight:600;cursor:pointer;font-size:17.5px;white-space:nowrap}
.plan-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.plan{position:relative;border:1.5px solid #e6e8ef;border-radius:14px;padding:18px 16px;background:#fff}
.plan.hot{border-color:#fc4a1a;box-shadow:0 6px 20px rgba(252,74,26,.12)}
.plan-badge{position:absolute;top:-10px;right:14px;background:linear-gradient(135deg,#f7b733,#fc4a1a);color:#fff;font-size:15px;font-weight:700;padding:2px 10px;border-radius:999px}
.plan-t{font-size:19.5px;font-weight:700;color:#13182e}
.plan-p{font-size:30px;font-weight:800;color:#13182e;margin:6px 0 0}
.plan-p span{font-size:18.5px;font-weight:600;color:#8a90a2}
.plan-sub{font-size:16.5px;color:#8a90a2;margin-bottom:8px}
.plan-f{list-style:none;padding:0;margin:12px 0 14px;font-size:18px;line-height:2}
.plan-f li.muted{color:#a8adbb}
@media(max-width:640px){.plan-grid{grid-template-columns:1fr}}

/* ===== v3 · 立体 + 动效 ===== */
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes pieIn{from{opacity:0;transform:scale(.93)}to{opacity:1;transform:none}}
#content .card{animation:fadeUp .34s cubic-bezier(.22,.61,.36,1) both}
#content .main .card:nth-child(2){animation-delay:.05s}
#content .main .card:nth-child(3){animation-delay:.10s}
#sidebar{animation:none}
svg.pie3d{animation:pieIn .5s cubic-bezier(.22,.61,.36,1) both;overflow:visible}
/* 可点行/卡片 悬停立体反馈 */
tr.clk{transition:background .15s ease,box-shadow .15s ease}
tr.clk:hover{background:var(--brand-soft);box-shadow:inset 3px 0 0 var(--brand)}
.nav-item{transition:background .15s ease,padding .12s ease,box-shadow .15s ease}
.nav-item:hover:not(.active){box-shadow:inset 2px 0 0 var(--line)}
.btn,.pill,.chip{transition:transform .15s ease,box-shadow .15s ease,background .15s ease,border-color .15s ease}
.btn:hover,.pill:hover{transform:translateY(-1px)}
.btn.solid:hover,.pill.pill-red:hover{box-shadow:0 7px 18px -5px rgba(239,59,87,.45)}
.chip:hover{transform:translateY(-1px);box-shadow:0 3px 9px rgba(19,24,46,.12)}
.stat-card,.stat{transition:transform .18s ease,box-shadow .18s ease}
.stat-card:hover{transform:translateY(-2px);box-shadow:0 10px 24px -10px rgba(19,24,46,.18)}
@media (prefers-reduced-motion:reduce){#content .card,svg.pie3d{animation:none}}

/* ===== 学习中心 ===== */
.learn-hero{background:linear-gradient(135deg,#fff 0%,#fef4f6 100%);border:1px solid var(--line);border-radius:16px;padding:22px 26px;margin-bottom:18px}
.learn-hero h2{margin:0 0 7px;font-size:23px;color:var(--ink)}
.learn-hero p{margin:0;color:var(--ink2);font-size:16px;line-height:1.7}
.learn-hero p b{color:var(--brand)}
.learn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:15px}
.lm-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 20px;display:flex;flex-direction:column;transition:.15s}
.lm-card:hover{box-shadow:0 4px 18px rgba(20,24,46,.07);transform:translateY(-2px)}
.lm-card.lm-dim{background:#fbfbfd}
.lm-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}
.lm-ic{font-size:30px;line-height:1}
.lm-soon{font-size:12.5px;color:#9a7a1a;background:var(--gold-soft);border-radius:999px;padding:3px 11px;font-weight:600}
.lm-title{font-size:18px;font-weight:700;color:var(--ink);display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:7px}
.lm-tag{font-size:12.5px;font-weight:500;color:var(--ink3);background:#f1f2f7;border-radius:6px;padding:2px 8px}
.lm-desc{flex:1;margin:0 0 15px;color:var(--ink2);font-size:15px;line-height:1.65}
.lm-btn{align-self:flex-start;background:var(--brand);color:#fff;border:none;border-radius:9px;padding:9px 18px;font-size:15px;font-weight:600;cursor:pointer;transition:.15s}
.lm-btn:hover{background:var(--brand-d)}
.lm-btn.ghost{background:#f1f2f7;color:#9aa0b4;cursor:default}
.learn-foot{margin-top:18px;text-align:center;color:var(--ink3);font-size:14px}

/* ===== 陷阱通关手册 ===== */
.tp-back{margin:0 0 10px}
.tp-back a{color:var(--brand);font-weight:600;font-size:14px;cursor:pointer;text-decoration:none}
.tp-toc{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 22px}
.tp-toc-i{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:14px;color:var(--ink);text-decoration:none;transition:.15s}
.tp-toc-i:hover{border-color:var(--brand);color:var(--brand)}
.tp-toc-i span{background:var(--brand-soft);color:var(--brand-d);border-radius:999px;font-size:12px;font-weight:700;padding:1px 8px}
.tp-cat{margin:0 0 26px;scroll-margin-top:80px}
.tp-cat-h{font-size:19px;margin:0 0 13px;padding-bottom:8px;border-bottom:2px solid var(--line)}
.tp-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}
.tp-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 18px;display:flex;flex-direction:column}
.tp-h{display:flex;align-items:center;gap:8px;font-size:16px;color:var(--ink);margin-bottom:8px}
.tp-h .tp-x{font-size:18px}
.tp-why{margin:0 0 12px;color:var(--ink2);font-size:14.5px;line-height:1.65}
.tp-why code{font-family:var(--mono);background:#eef0f6;color:#0e5a40;padding:1px 5px;border-radius:4px;font-size:13px}
.tp-why strong{color:var(--ink)}
.tp-eg{display:grid;grid-template-columns:1fr;gap:8px;margin-bottom:10px}
.tp-bad,.tp-good{border-radius:9px;padding:8px 11px}
.tp-bad{background:#fdecee;border:1px solid #f6c6cd}
.tp-good{background:#e7f7ef;border:1px solid #b9e7d0}
.tp-bad span,.tp-good span{display:block;font-size:12px;font-weight:700;margin-bottom:3px}
.tp-bad span{color:#c4304a}.tp-good span{color:#0e9a72}
.tp-eg pre{margin:0;font-family:var(--mono);font-size:12.5px;line-height:1.6;white-space:pre-wrap;color:var(--ink);overflow-x:auto}
.tp-exs{margin-top:auto;padding-top:10px;border-top:1px dashed var(--line);font-size:13px;color:var(--ink2)}
.tp-ex{display:inline-block;background:#eef0f6;color:#185fa5;border-radius:6px;padding:2px 8px;margin:2px 4px 0 0;font-size:12.5px;text-decoration:none}
.tp-ex:hover{background:#e0e8fc}

/* ===== 入门讲义(电子教程阅读器) ===== */
.lb-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);margin:18px 0;overflow:hidden}
.lb-h{padding:13px 18px;font-weight:700;font-size:16px;color:var(--ink2);background:var(--line2);letter-spacing:.04em}
.lb-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 18px;border-top:1px solid var(--line2);cursor:pointer;transition:background .15s}
.lb-item:hover{background:#fafbff}
.lb-item:first-of-type{border-top:none}
.lb-t{font-size:17.5px;font-weight:600;color:var(--ink)}
.lb-x{display:flex;align-items:center;gap:10px;flex-shrink:0}
.lb-secs{font-size:13.5px;color:var(--ink3)}
.lb-lock{font-size:13px;background:var(--gold-soft);color:#8a5a12;border-radius:6px;padding:2px 8px;font-weight:600}
.lb-dim .lb-t{color:var(--ink2)}
.ls-hero h2{margin-bottom:0}
.ls-toc{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 18px;margin:14px 0;display:flex;flex-wrap:wrap;gap:8px 18px}
.ls-toc a{font-size:15px;color:#185fa5;padding:2px 0}
.ls-toc a:hover{text-decoration:underline}
.ls-body{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:30px 36px;margin:14px 0;font-size:18.5px;line-height:1.9;overflow-wrap:break-word}
.ls-body p{margin:12px 0}
.ls-body code{font-family:var(--mono);background:#eef0f6;color:#185fa5;padding:1px 6px;border-radius:5px;font-size:.88em}
.ls-h3{margin:34px 0 12px;padding:10px 14px;background:linear-gradient(90deg,var(--brand-soft),transparent);border-left:4px solid var(--brand);border-radius:6px;font-size:21px;color:var(--ink);scroll-margin-top:80px}
.ls-h4{margin:24px 0 8px;font-size:18.5px;color:var(--ink);border-bottom:2px solid var(--line2);padding-bottom:6px}
.ls-strong{font-weight:700;color:var(--ink);margin-top:18px}
.ls-code{background:var(--ed-bg);color:#cdd6f4;padding:16px 18px;border-radius:var(--rsm);overflow-x:auto;margin:14px 0;border:1px solid #20264a}
.ls-code code{font-family:var(--mono);font-size:15.5px;line-height:1.75;background:none;color:inherit;padding:0;white-space:pre}
.ls-callout{background:#fff8ec;border:1px solid #f0d9a8;border-left:4px solid var(--gold);border-radius:var(--rsm);padding:13px 16px;margin:16px 0}
.ls-callout-t{font-weight:700;color:#8a5a12;margin-bottom:6px}
.ls-callout p{margin:6px 0;color:#6b521f;font-size:17px}
.ls-callout code{background:#f5e8cb;color:#7a5a1a}
.ls-note{background:#eef4fd;border:1px solid #cdddf6;border-left:4px solid var(--blue);border-radius:var(--rsm);padding:13px 16px;margin:16px 0}
.ls-note p{margin:6px 0;color:#274468;font-size:17px}
.ls-note code{background:#dce8fa;color:#1a4e8a}
.ls-tablewrap{overflow-x:auto;margin:16px 0}
.ls-table{border-collapse:collapse;width:100%;font-size:16px;background:var(--surface)}
.ls-table th,.ls-table td{border:1px solid var(--line);padding:9px 12px;text-align:left;vertical-align:top;line-height:1.65}
.ls-table th{background:var(--line2);font-weight:700;color:var(--ink)}
.ls-table tr:nth-child(even) td{background:#fafbfd}
.ls-img{display:block;max-width:100%;height:auto;margin:14px auto;border:1px solid var(--line);border-radius:var(--rsm)}
.ls-cap{text-align:center;color:var(--ink3);font-size:14.5px;margin-top:-6px}
.ls-nav{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:18px 0 30px;flex-wrap:wrap}
.ls-navbtn{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 16px;font-size:15px;color:#185fa5;box-shadow:var(--sh);max-width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ls-navbtn:hover{border-color:#b9c6ee;background:#fafbff}
.ls-navbtn.ghost{color:var(--ink2);max-width:none}
@media(max-width:760px){
  .ls-body{padding:20px 16px;font-size:17.5px}
  .ls-navbtn{max-width:100%}
}

/* 新版图形 logo */
.logo-img{height:44px;width:auto;display:block}
.lawnav .logo-img{height:36px}
@media(max-width:760px){.logo-img{height:36px}}

/* ===== v2.1 童趣微调(克制版):只动圆角/阴影/小点缀 ===== */
/* ① 主按钮:糖果底边 + 按压弹性 */
.btn.solid{box-shadow:0 4px 0 var(--brand-d)}
.btn.solid:hover{transform:translateY(-1px);box-shadow:0 5px 0 var(--brand-d)}
.btn.solid:active{transform:translateY(2px);box-shadow:0 2px 0 var(--brand-d)}
.btn.teal{border-width:2px}
.lm-btn{border-radius:999px;padding:9px 22px;box-shadow:0 3px 0 var(--brand-d)}
.lm-btn:hover{transform:translateY(-1px);box-shadow:0 4px 0 var(--brand-d)}
.lm-btn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--brand-d)}
.lm-btn.ghost{box-shadow:none;transform:none}
.pill.pill-red{box-shadow:0 4px 0 var(--brand-d)}
.pill.pill-red:hover{transform:translateY(-1px);box-shadow:0 5px 0 var(--brand-d)}
.pill.pill-red:active{transform:translateY(2px);box-shadow:0 2px 0 var(--brand-d)}
.auth-body .submit{box-shadow:0 4px 0 var(--brand-d)}
.auth-body .submit:active{transform:translateY(2px);box-shadow:0 2px 0 var(--brand-d)}
/* ② 学习中心模块卡:四色顶条 + 图标底托 + 角落小星 */
.lm-card{position:relative;border-radius:18px;padding-top:23px;overflow:hidden}
.lm-card::before{content:"";position:absolute;top:0;left:0;right:0;height:5px;
  background:linear-gradient(90deg,#4285f4 0 25%,#ea4335 25% 50%,#fbbc05 50% 75%,#34a853 75% 100%)}
.lm-card::after{content:"✦";position:absolute;bottom:14px;right:16px;color:var(--gold);font-size:13px;opacity:.8}
.lm-card.lm-dim::before{opacity:.35}
.lm-card.lm-dim::after{opacity:.3}
.lm-ic{width:46px;height:46px;display:inline-flex;align-items:center;justify-content:center;border-radius:14px;font-size:25px;background:#eaf1fe}
.lm-card:nth-child(4n+2) .lm-ic{background:#fdebe9}
.lm-card:nth-child(4n+3) .lm-ic{background:#fdf3d8}
.lm-card:nth-child(4n)   .lm-ic{background:#e7f5ec}
/* ③ 首页级别码:方块改圆形 */
.lv .lv-code{border-radius:50%}
/* ④ 进度条:黄→绿渐变 + 鼓励语 */
.quiz-progress .bar span{background:linear-gradient(90deg,var(--gold),var(--pass))}
.prog-row .pbar .done{background:linear-gradient(90deg,#fbbc05,#34a853)}
.cheer{margin-top:14px;text-align:center;font-size:16.5px;font-weight:700;color:var(--pass-d);background:var(--pass-soft);border-radius:999px;padding:8px 18px;display:inline-block}
.cheer-wrap{text-align:center;margin-top:6px}
/* ⑤ 学习中心两行四列 */
@media(min-width:1100px){.learn-grid{grid-template-columns:repeat(4,1fr)}}

/* 任务3:侧栏与总览表「知识点」列防换行 */
.nav-cols .nc-x,.ni-x{width:48px;white-space:nowrap}
.nav-cols .nc-x{font-size:14px}
th.num,td.num{width:80px;white-space:nowrap}
/* 新页面通用 */
.cs-pad{padding:14px 18px}
.cs-note{font-size:15.5px;color:#8a5a12;background:var(--gold-soft);border-radius:8px;padding:8px 12px;margin-top:10px}
.cs-p{font-size:16.5px;color:var(--ink2);line-height:1.85;margin:8px 0}
.cs-list{margin:4px 0 4px 22px;font-size:16.5px;color:var(--ink2);line-height:2}
.cs-list li b,.cs-p b{color:var(--ink)}
.rm-stage{display:flex;gap:16px;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--sh);padding:18px 20px;margin:13px 0}
.rm-no{flex:none;width:44px;height:44px;border-radius:50%;background:var(--brand-soft);color:var(--brand);font-weight:800;font-size:20px;display:flex;align-items:center;justify-content:center}
.rm-stage:nth-child(odd) .rm-no{background:#eaf1fe;color:#3f72f0}
.rm-w{font-size:13.5px;font-weight:700;color:var(--ink3);letter-spacing:.05em}
.rm-t{font-size:18.5px;font-weight:700;color:var(--ink);margin:3px 0}
.rm-ch{font-size:13px;font-weight:600;color:#185fa5;background:#eaf1fe;border-radius:99px;padding:2px 10px;margin-left:10px;vertical-align:2px}
.rm-p{font-size:16px;color:var(--ink2);margin:4px 0 8px;line-height:1.7}
.rm-ms{font-size:15.5px;font-weight:600;color:var(--pass-d);background:var(--pass-soft);border-radius:8px;padding:6px 12px;display:inline-block}
@media(max-width:640px){.rm-stage{flex-direction:column;gap:8px}}

/* ===== 头像系统 ===== */
.av-img{width:30px;height:30px;border-radius:50%;vertical-align:middle;object-fit:cover}
.lb-av .av-img{width:26px;height:26px}
#uavatar.av-click{cursor:pointer;display:inline-flex;align-items:center}
#uavatar.av-click:hover .av-img{box-shadow:0 0 0 2px var(--brand-soft)}
.ap-grid .ap img{width:34px;height:34px;border-radius:50%;display:block}
.ap-label .ap-tip{font-size:12.5px;color:var(--ink3);font-weight:400;margin-left:6px}
#ap-current img{width:26px;height:26px;border-radius:50%;vertical-align:-7px}
.agree-row{display:flex;align-items:center;gap:7px;font-size:13.5px;color:var(--ink2);margin-top:10px;line-height:1.5;cursor:pointer}
.agree-row a{color:#185fa5}
.avdlg-mask{position:fixed;inset:0;background:rgba(19,24,46,.45);z-index:200;display:flex;align-items:center;justify-content:center;padding:16px}
.avdlg{background:var(--surface);border-radius:18px;box-shadow:0 18px 60px rgba(19,24,46,.25);width:min(420px,100%);padding:18px 20px}
.avdlg-h{font-weight:700;font-size:17px;display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.avdlg-x{cursor:pointer;font-size:22px;color:var(--ink3);line-height:1}
.avdlg-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.avdlg-grid .ap{background:none;border:2px solid transparent;border-radius:50%;padding:2px;cursor:pointer}
.avdlg-grid .ap.on{border-color:var(--brand)}
.avdlg-grid .ap img{width:100%;border-radius:50%;display:block}
.avdlg-up{display:flex;align-items:center;gap:10px;margin:14px 0 4px;flex-wrap:wrap}
.avdlg-upbtn{background:var(--line2);border-radius:99px;padding:7px 14px;font-size:14px;font-weight:600;color:var(--ink2);cursor:pointer}
.avdlg-upbtn:hover{background:#e3e6f0}
.avdlg-cur .av-img{width:38px;height:38px}
.avdlg-tip{font-size:12.5px;color:var(--ink3)}
.avdlg-f{text-align:right;margin-top:10px}

/* ===== 顶栏与协议行精修 ===== */
/* 2) 注册协议行:小勾选框,整行紧凑 */
.auth-body .agree-row{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13.5px;color:var(--ink2);line-height:1.6;cursor:pointer}
.auth-body .agree-row input[type=checkbox]{width:16px;height:16px;flex:none;margin:0;padding:0;accent-color:var(--brand);cursor:pointer;border-radius:4px}
.auth-body .agree-row span{flex:1;text-align:left}
.auth-body .agree-row a{color:#185fa5;white-space:nowrap}
/* 3) 顶栏整体加高,头像垂直居中并加白圈 */
.topbar .wrap{height:42px}
.usermenu .av-img{width:27px;height:27px;border:2px solid #fff;box-shadow:0 0 0 1.5px var(--line)}
#uavatar.av-click:hover .av-img{box-shadow:0 0 0 2px var(--brand)}
.usermenu .av-emoji{font-size:19px;line-height:1}
/* 4) 顶栏品牌位:小图标 + 灰阶层次 */
.tb-brand{display:inline-flex;align-items:center;gap:8px;min-width:0}
.tb-ico{width:19px;height:19px;border-radius:5px}
.tb-name{font-weight:800;font-size:14.5px;letter-spacing:.04em;color:var(--ink);font-family:var(--mono)}
.tb-sep{width:1px;height:14px;background:var(--line)}
.tb-sub{font-size:13px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:560px){.tb-sub,.tb-sep{display:none}}
.um-links{display:flex;align-items:center;gap:12px}
.um-toggle{display:none;background:none;border:1px solid var(--line);border-radius:8px;font-size:16px;line-height:1;padding:5px 10px;cursor:pointer;color:var(--ink2)}
@media(max-width:640px){
  .usermenu{position:relative;gap:8px}
  .um-toggle{display:inline-flex;align-items:center}
  .um-links{display:none;position:absolute;right:0;top:calc(100% + 8px);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px rgba(19,24,46,.16);flex-direction:column;align-items:stretch;gap:0;padding:6px 0;min-width:166px;z-index:60}
  .um-links.open{display:flex}
  .um-links a.logout{padding:11px 18px;font-size:16px;width:100%;box-sizing:border-box}
  .um-links .vip-link{margin:6px 14px}
}

/* ===== 应用页脚 v2 ===== */
.appfoot{text-align:center;padding:30px 16px 36px;border-top:1px solid var(--line2);margin-top:36px;background:#fff}
.appfoot .af-links{display:flex;justify-content:center;gap:24px;margin-bottom:12px}
.appfoot .af-links a{font-size:14.5px;color:var(--ink2)}
.appfoot .af-links a:hover{color:var(--brand)}
.appfoot .af-note{font-size:13px;color:var(--ink3);line-height:1.8;max-width:560px;margin:0 auto 8px}
.appfoot .af-cr{font-size:12.5px;color:#b6bccb;font-family:var(--mono)}

/* 应用页脚公众号块 */
.af-wx{display:inline-flex;align-items:center;gap:13px;background:var(--line2);border-radius:14px;padding:11px 18px;margin-bottom:16px;text-align:left}
.af-qr{width:68px;height:68px;border-radius:8px;background:#fff;border:1px solid var(--line)}
.af-wx-t{display:flex;flex-direction:column;gap:3px}
.af-wx-t b{font-size:14.5px;color:var(--ink)}
.af-wx-t span{font-size:12.5px;color:var(--ink3)}

/* 题目报错 */
.q-report{margin-top:10px;font-size:13px}
.q-report>a{color:var(--ink3);cursor:pointer}
.q-report>a:hover{color:var(--brand)}
.rp-box{margin-top:8px;background:var(--line2);border-radius:10px;padding:10px}
.rp-box textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;font-family:inherit;resize:vertical;box-sizing:border-box}
.rp-act{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.rp-act .lm-btn{padding:6px 16px;font-size:13.5px}
.rp-ok{color:var(--pass-d);font-weight:600}
.rp-err{color:var(--brand);margin-left:8px}

/* ===== 编程题(OJ) ===== */
.pg-paper{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh);margin:13px 0;overflow:hidden}
.pg-paper-h{padding:11px 18px;font-weight:700;color:var(--ink2);background:var(--line2);font-size:15px}
.pg-row{display:flex;align-items:center;gap:14px;padding:13px 18px;border-top:1px solid var(--line2);cursor:pointer}
.pg-row:hover{background:#fafbff}
.pg-st{flex:none;font-size:12.5px;border-radius:99px;padding:2px 10px;background:var(--line2);color:var(--ink3);font-weight:600;min-width:58px;text-align:center}
.pg-st.ac{background:var(--pass-soft);color:var(--pass-d)}
.pg-st.tr{background:var(--gold-soft);color:#8a5a12}
.pg-t{font-size:16.5px;font-weight:600;color:var(--ink)}
.pg-go{margin-left:auto;font-size:14px;color:#185fa5}
.pg-stmt{border:none;box-shadow:none;padding:4px 2px;margin:0}
.pg-li{margin:4px 0}
.pg-editor{width:100%;min-height:300px;box-sizing:border-box;background:var(--ed-bg);color:#cdd6f4;border:1px solid #20264a;border-radius:var(--rsm);padding:14px 16px;font-family:var(--mono);font-size:15px;line-height:1.7;resize:vertical;tab-size:4}
.pg-editor:focus{outline:2px solid #3f72f0;outline-offset:1px}
.pg-actions{display:flex;align-items:center;gap:18px;margin-top:12px}
.pg-sol-toggle{font-size:14px;color:var(--ink3);cursor:pointer}
.pg-sol-toggle:hover{color:#185fa5}
.pg-result{margin-top:14px;border-radius:12px;padding:14px 16px;font-size:15.5px}
.pg-result.v-AC{background:var(--pass-soft);color:var(--pass-d)}
.pg-result.v-WA,.pg-result.v-RE,.pg-result.v-CE{background:#fdecef;color:#b3263f}
.pg-result.v-TLE{background:var(--gold-soft);color:#8a5a12}
.pg-ac{font-size:17px}
.pg-dots{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;align-items:center}
.pg-dot{width:26px;height:26px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:#fff}
.pg-dot.d-AC{background:#2bb673}
.pg-dot.d-WA,.pg-dot.d-RE{background:#e4485f}
.pg-dot.d-TLE{background:#eda620}
.pg-skip{font-size:13px;color:var(--ink3)}
.pg-hint{margin:10px 0 0;font-size:14px}
.pg-ce{background:#161b33;color:#ffb4c0;border-radius:8px;padding:10px 12px;margin-top:8px;font-size:13px;overflow-x:auto;white-space:pre-wrap}
.pg-sub{display:flex;align-items:center;gap:14px;padding:8px 0;border-bottom:1px solid var(--line2);font-size:14.5px;color:var(--ink2)}
.pg-sub:last-child{border-bottom:none}
.pg-v{font-family:var(--mono);font-weight:800;border-radius:6px;padding:1px 8px;font-size:13px}
.pg-v.v-AC{background:var(--pass-soft);color:var(--pass-d)}
.pg-v.v-WA,.pg-v.v-RE,.pg-v.v-CE{background:#fdecef;color:#b3263f}
.pg-v.v-TLE{background:var(--gold-soft);color:#8a5a12}
.pg-sub-t{margin-left:auto;color:var(--ink3);font-size:13px;font-family:var(--mono)}

/* 编程题知识点与解析 */
.pg-kps{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.pg-kp{font-size:13px;font-weight:600;color:#185fa5;background:#eaf1fe;border-radius:99px;padding:3px 12px}
.pg-analysis{font-size:16.5px;line-height:1.85;color:var(--ink2)}
.pg-analysis b{color:var(--ink)}
.pg-analysis code{font-family:var(--mono);background:#eef0f6;color:#185fa5;padding:1px 6px;border-radius:5px;font-size:.88em}
.pg-analysis .pg-li{margin:5px 0}

/* 导航SVG图标(logo风格四色) */
.tabs a{display:inline-flex;align-items:center;gap:7px}
.tab-ic{flex:none;opacity:.85}
.tabs a.on .tab-ic,.tabs a:hover .tab-ic{opacity:1}
.pg-copy{font-size:13px;font-weight:600;color:#185fa5;cursor:pointer;margin-left:10px}
.pg-copy:hover{text-decoration:underline}

/* PWA 安装引导条 */
#pwa-bar{position:fixed;left:12px;right:12px;bottom:14px;z-index:150;background:#13182e;color:#e8ebf5;border-radius:16px;padding:12px 14px;display:flex;align-items:center;gap:12px;box-shadow:0 10px 30px rgba(19,24,46,.35);font-size:14px;line-height:1.5}
#pwa-bar img{width:38px;height:38px;border-radius:10px;flex:none}
#pwa-bar .pb-t{flex:1}
#pwa-bar .pb-btn{background:var(--brand);color:#fff;border:none;border-radius:99px;padding:6px 16px;font-size:13.5px;font-weight:700;margin-left:8px;cursor:pointer}
#pwa-bar .pb-x{flex:none;font-size:22px;color:#8b93b8;cursor:pointer;padding:0 4px}

/* 组卷:章/子节两级选择 */
.ch-list{display:flex;flex-direction:column;gap:10px;margin-top:4px}
.ch-block{border:1px solid var(--line2);border-radius:14px;padding:11px 13px;background:#fcfcfe}
.ch-row{margin-bottom:0}
.sub-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.chip.sub{font-size:13.5px;padding:5px 12px;background:#fff;border:1px solid var(--line)}
.chip.sub.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.chip.hl{background:#fff4e0;border:1px solid #f5c45a;color:#8a5a12;font-weight:700}
.chip.hl.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.scope-hint{font-size:13.5px;color:var(--ink2);margin-top:10px;font-weight:600}
.lesson-jump{display:inline-block;margin-top:8px;font-size:14px;color:#185fa5;cursor:pointer;font-weight:600}
.lesson-jump:hover{text-decoration:underline}

/* 题库浏览·子节讲义与练习入口 */
.sec-acts{float:right;display:inline-flex;gap:8px}
.sec-btn{font-size:13.5px;font-weight:600;border-radius:99px;padding:5px 14px;cursor:pointer}
.sec-btn.lesson{background:#eaf1fe;color:#185fa5}
.sec-btn.drill{background:var(--brand);color:#fff}
.sec-btn:hover{opacity:.88}

/* 我的课程(学生端) */
.cs-item{display:flex;align-items:center;gap:13px;padding:14px 16px;border-radius:14px;cursor:pointer;border:1px solid var(--line2);margin:8px 0;background:#fff}
.cs-item:hover{border-color:var(--brand-soft);background:#fafbff}
.cs-item.done{opacity:.7}
.cs-ic{font-size:24px;flex:none}
.cs-main{flex:1;min-width:0}
.cs-t{font-size:16px;font-weight:700;color:var(--ink)}
.cs-meta{font-size:13px;color:var(--ink3);margin-top:2px}
.cs-over{color:#c0392b;font-weight:700}
.cs-st{flex:none}
.cs-score{background:var(--pass-soft);color:var(--pass-d);font-weight:800;border-radius:99px;padding:4px 12px;font-size:14px}
.cs-todo{color:#185fa5;font-weight:600;font-size:14px}
.cs-read{color:var(--ink3);font-size:13px}
.mini-join{display:inline-block;background:#eaf1fe;color:#185fa5;border-radius:99px;padding:3px 12px;font-size:13px;font-weight:600;cursor:pointer;margin:0 3px}
.hw-q{padding:14px 0;border-bottom:1px solid var(--line2)}
.hw-qh{font-weight:700;margin-bottom:8px}
.hw-opts{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.hw-opt{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:15px}
.hw-opt:hover{background:#fafbff}
.hw-opt input{margin:0}
.hw-k{font-weight:800;color:#185fa5;min-width:18px}
.hw-prog{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line2);font-size:15px}
.hw-done{color:var(--pass-d);font-weight:600;margin-top:14px;font-size:16px}
.hw-err{color:var(--brand);margin-top:12px}

/* 课程资源:讲义章节直达 */
.res-chs{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.res-ch{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;cursor:pointer}
.res-ch:hover{background:#fafbff;border-color:var(--brand-soft)}
.res-ch-ic{font-size:18px}
.res-ch span:nth-child(2){flex:1;font-weight:600}
.res-ch-go{color:#185fa5;font-size:14px}

/* 课程作业评语 */
.cs-item{flex-wrap:wrap}
.cs-comment{flex-basis:100%;margin-top:8px;font-size:13px;color:#8a5a12;background:#fff8ec;border-radius:8px;padding:7px 10px}

/* 讲义:真题子节标题 */
.ls-sec-h{font-size:21px;font-weight:800;color:var(--ink);margin:34px 0 14px;padding-bottom:10px;border-bottom:3px solid var(--brand);scroll-margin-top:80px}
.ls-sec-h:first-child{margin-top:6px}

/* 真题子节讲义弹窗 */
.sl-mask{display:none;position:fixed;inset:0;background:rgba(19,24,46,.5);z-index:300;align-items:center;justify-content:center;padding:0}
.sl-box{background:#fff;border-radius:0;max-width:1080px;width:100%;height:100vh;max-height:100vh;overflow:auto;position:relative;padding:0}
@media(min-width:1120px){.sl-box{border-radius:16px;height:97vh;max-height:97vh;margin:1.5vh 0}}
.sl-x{position:absolute;top:14px;right:18px;font-size:26px;color:#9aa0b4;cursor:pointer;z-index:2;line-height:1}
.sl-load{padding:60px;text-align:center;color:var(--ink3)}
.sl-head{padding:24px 28px 14px;border-bottom:1px solid var(--line2);position:sticky;top:0;background:#fff;border-radius:18px 18px 0 0}
.sl-tag{display:inline-block;background:#eaf1fe;color:#185fa5;font-size:12px;font-weight:700;border-radius:99px;padding:3px 12px;margin-bottom:8px}
.sl-head h2{font-size:24px;color:var(--ink);margin:0}
.sl-body{padding:24px 40px 12px;line-height:1.85;font-size:16px}
.sl-foot{padding:14px 28px 24px;text-align:center;position:sticky;bottom:0;background:#fff}
.sl-empty{padding:40px 28px;text-align:center}
.sl-empty .big{font-size:48px;margin-bottom:12px}
.sl-empty b{font-size:18px;color:var(--ink);display:block;margin-bottom:8px}
.sl-empty p{color:var(--ink3);margin-bottom:18px;line-height:1.7}

/* 讲义示意图 */
.ls-svg{display:block;width:100%;max-width:640px;margin:18px auto;border:1px solid var(--line2);border-radius:12px;background:#fff;padding:6px}

/* 全屏讲义弹窗内的示意图放大 */
.sl-body .ls-svg{max-width:760px}
.sl-body .ls-code{font-size:14.5px}

/* ===== 仿真考试界面 ===== */
.exam-top{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;background:#fff;border-bottom:2px solid var(--line);padding:12px 18px;margin:-8px -8px 14px;box-shadow:0 2px 8px rgba(0,0,0,.04)}
.exam-top-l b{font-size:16px;color:var(--ink)}
.exam-sub{display:block;font-size:12px;color:var(--ink3);margin-top:2px}
.exam-top-r{display:flex;align-items:center;gap:14px}
.exam-clock{font-size:18px;font-weight:700;color:var(--ink);font-family:monospace}
#exam-timer.danger{color:#c0392b;animation:blink 1s infinite}
@keyframes blink{50%{opacity:.5}}
.exam-wrap{display:flex;gap:16px;align-items:flex-start}
.exam-main{flex:1;min-width:0}
.exam-side{width:220px;flex:none;position:sticky;top:80px;background:#fafbfd;border:1px solid var(--line);border-radius:12px;padding:14px}
.exam-nav-sec{margin-bottom:14px}
.exam-nav-t{font-size:13px;font-weight:700;color:var(--ink2);margin-bottom:6px}
.exam-nav-grid{display:flex;flex-wrap:wrap;gap:6px}
.exam-nav-btn{width:34px;height:34px;border:1px solid var(--line2);background:#fff;border-radius:7px;font-size:13px;cursor:pointer;color:var(--ink2)}
.exam-nav-btn.prog{width:auto;padding:0 8px}
.exam-nav-btn.ans{background:#e8f0fe;border-color:#4285f4;color:#185fa5;font-weight:700}
.exam-nav-btn.curr{outline:2px solid #ef3b57;outline-offset:1px}
.exam-nav-tip{font-size:11px;color:var(--ink3);line-height:1.6;margin-top:8px}
.exam-qhead{font-size:14px;font-weight:700;color:var(--ink2);margin-bottom:10px;display:flex;justify-content:space-between}
.exam-qscore{color:#ef3b57;font-size:13px}
.exam-stem{font-size:16px;line-height:1.7;color:var(--ink);margin-bottom:12px}
.exam-opts{display:flex;flex-direction:column;gap:10px;margin:14px 0}
.exam-opt{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1.5px solid var(--line2);border-radius:10px;cursor:pointer;transition:.15s}
.exam-opt:hover{border-color:#aebef0;background:#f6f8ff}
.exam-opt.sel{border-color:#4285f4;background:#e8f0fe}
.exam-opt-k{width:28px;height:28px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#eef0f6;font-weight:700;font-size:14px}
.exam-opt.sel .exam-opt-k{background:#4285f4;color:#fff}
.exam-opt-v{font-size:15px;line-height:1.5}
.exam-pager{display:flex;justify-content:space-between;margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
/* 成绩页 */
.exam-result{text-align:center;padding:30px 0}
.exam-score-circle{width:160px;height:160px;margin:0 auto;border:8px solid;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center}
.exam-score-num{font-size:52px;font-weight:800;line-height:1}
.exam-score-tot{font-size:15px;color:var(--ink3)}
.exam-grade{font-size:22px;font-weight:800;margin:16px 0 10px}
.exam-score-break{display:flex;gap:18px;justify-content:center;font-size:14px;color:var(--ink2)}
.exam-rev-item{padding:14px;border:1px solid var(--line);border-radius:10px;margin-bottom:10px}
.exam-rev-h{font-size:13px;font-weight:700;color:var(--ink2);margin-bottom:6px}
.exam-rev-stem{font-size:14px;line-height:1.6;margin-bottom:6px}
.exam-rev-exp{font-size:13px;color:var(--ink2);background:#f8f9fc;border-radius:8px;padding:8px 12px;line-height:1.6}
@media(max-width:760px){.exam-wrap{flex-direction:column}.exam-side{width:100%;position:static}}

/* 考试界面内嵌编程题作答 */
.exam-code-area{margin-top:14px;border:1px solid var(--line);border-radius:10px;padding:14px;background:#fafbfd}
.exam-code-h{font-size:13px;font-weight:700;color:var(--ink2);margin-bottom:8px}
.exam-code-area .pg-editor{width:100%;min-height:240px;font-family:'JetBrains Mono',monospace;font-size:13px;line-height:1.5;border:1px solid var(--line2);border-radius:8px;padding:12px;background:#fff;resize:vertical}
.exam-code-area .pg-actions{margin-top:10px;display:flex;align-items:center;gap:12px}

/* ===== 官方风格考试界面(三标签) ===== */
.ex2-top{display:flex;align-items:center;gap:12px;padding:12px 18px;background:#fff;border-bottom:1px solid var(--line2);position:sticky;top:0;z-index:20;flex-wrap:wrap}
.ex2-brand{font-weight:800;letter-spacing:.3px;color:var(--ink)}
.ex2-chip{background:#5cb85c;color:#fff;font-size:13px;font-weight:600;padding:3px 12px;border-radius:6px}
.ex2-title{font-weight:600;color:#2b3550}
.ex2-tr{margin-left:auto;display:flex;align-items:center;gap:14px}
.ex2-clock{font-family:var(--mono);font-weight:700;color:#2b3550}
.ex2-clock .danger{color:#e0524b}
.ex2-user{color:var(--ink2);font-size:14px}
.ex2-tabs{display:flex;gap:6px;padding:10px 18px 0;background:#fff;border-bottom:1px solid var(--line)}
.ex2-tab{padding:9px 16px;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;color:#3b6ea5;font-size:14.5px;cursor:pointer}
.ex2-tab.on{background:#f6f7fb;border-color:var(--line);color:var(--ink);font-weight:600}
.ex2-body{max-width:980px;margin:0 auto;padding:20px 18px 60px}
.ex2-grid{display:grid;grid-template-columns:300px 1fr;gap:18px}
.ex2-info,.ex2-list{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.ex2-h{background:#f0f3f8;padding:12px 16px;font-weight:700;color:#2b3550;font-size:15px}
.ex2-kv{display:flex;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--line);font-size:14px}
.ex2-kv b{font-family:var(--mono)}
.ex2-tip{padding:14px 16px;border-top:1px solid var(--line);color:var(--ink2);font-size:13px;line-height:1.7}
.ex2-prow{display:flex;justify-content:space-between;align-items:center;padding:16px;border-top:1px solid var(--line);cursor:pointer}
.ex2-prow:hover{background:#f7f9fc}
.ex2-pt{color:#2f6db5;font-weight:600;font-size:15.5px}
.ex2-ps{color:var(--ink2);font-size:13px;margin-top:3px}
.ex2-pr{display:flex;align-items:center;gap:12px}
.ex2-go{color:#2f6db5;font-size:13px}
.ex2-ok{color:#13b083;font-weight:600;font-size:13px}
.ex2-no{color:#e0524b;font-weight:600;font-size:13px}
.ex2-muted{color:var(--ink2);font-size:13px}
.ex2-back{display:inline-block;color:#2f6db5;cursor:pointer;font-size:14px;margin-bottom:6px}
.ex2-q{background:#fff;border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:14px}
.ex2-qh{font-weight:700;margin-bottom:8px}
.ex2-stem{font-size:15px;line-height:1.7}
.ex2-opts{margin-top:12px;display:flex;flex-direction:column;gap:10px}
.ex2-opt{display:flex;align-items:center;gap:12px;padding:14rpx;padding:12px 14px;border:1px solid var(--line2);border-radius:10px;cursor:pointer}
.ex2-opt.sel{border-color:#2f6db5;background:#f0f6ff}
.ex2-opt .ex2-k{width:38px;height:38px;flex:none;border-radius:50%;background:#f2f3f8;color:#5b6178;text-align:center;line-height:38px;font-weight:700}
.ex2-opt.sel .ex2-k{background:#2f6db5;color:#fff}
.ex2-submitrow{display:flex;align-items:center;gap:14px;margin:8px 0 20px}
.ex2-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden;font-size:14px}
.ex2-table th{background:#f0f3f8;text-align:left;padding:12px 14px;color:#2b3550;font-weight:600}
.ex2-table td{padding:12px 14px;border-top:1px solid var(--line)}
.ex2-badge{display:inline-block;padding:3px 11px;border-radius:6px;font-size:12.5px;color:#fff}
.ex2-badge.g{background:#5cb85c}.ex2-badge.b{background:#5b8fd0}.ex2-badge.r{background:#8a93b8}
.ex2-finish{margin-top:20px;background:#fdeeee;border:1px solid #f3c0c0;border-radius:12px;padding:20px}
.ex2-finish-h{color:#c0392b;font-weight:700;margin-bottom:8px}
.ex2-finish-btn{background:#e0524b;border-color:#e0524b;display:inline-flex;width:auto;padding:12px 30px}
.ex2-judging{display:flex;align-items:center;gap:12px;padding:16px;background:#f7f9fc;border:1px solid var(--line);border-radius:10px;color:var(--ink2);font-size:14px;margin-top:12px}
@media(max-width:760px){ .ex2-grid{grid-template-columns:1fr} .ex2-body{padding:16px 12px 60px} .ex2-table{display:block;overflow-x:auto;white-space:nowrap} }
/* 「选项即代码」题:让代码型选项一眼就是代码(等宽 + 浅底) */
.opt-code{font-family:var(--mono);background:#f4f6fb;border:1px solid #e6e8f0;border-radius:5px;padding:2px 8px;font-size:13.5px;color:#1f2d4d;white-space:pre-wrap;display:inline-block}

/* ===== 🎬 动画微课 ===== */
.ml-unit{margin:22px 0}
.ml-unit-h{display:flex;align-items:center;gap:10px;margin:0 0 4px;padding-bottom:8px;border-bottom:2px solid var(--line)}
.ml-unit-n{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,#7c9cff,#b18cff);color:#fff;font-weight:700;font-size:14px;flex:none}
.ml-unit-h h3{margin:0;font-size:16px;color:var(--ink)}
.ml-unit-cnt{margin-left:auto;font-size:12px;color:var(--ink3);background:#f2f4fb;padding:3px 10px;border-radius:20px}
.ml-c-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:#eef2ff;color:#3b58d6;font-weight:700;font-size:13px;flex:none}
.ml-card-done{border-color:#bfe6cd;background:#f6fdf8}
.ml-card-done .ml-c-num{background:#46b16e;color:#fff}
.ml-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px;margin:14px 0}
.ml-card{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fff;cursor:pointer;transition:.15s;display:flex;flex-direction:column;gap:10px}
.ml-card:hover{border-color:#7c9cff;box-shadow:0 6px 18px rgba(60,90,200,.10);transform:translateY(-2px)}
.ml-c-h{display:flex;gap:10px;align-items:flex-start}
.ml-c-ic{font-size:26px;line-height:1}
.ml-c-t{font-weight:700;font-size:15px;color:var(--ink)}
.ml-c-s{font-size:12px;color:var(--ink3);margin-top:2px}
.ml-c-goal{font-size:13px;color:var(--ink2);line-height:1.65;flex:1;margin:0}
.ml-stage{display:grid;grid-template-columns:1.5fr 1fr;gap:16px;margin:16px 0}
.ml-stage.ml-stage-1{grid-template-columns:1fr}
.ml-note{background:#eef4ff;border:1px solid #d6e2fb;border-radius:10px;padding:12px 14px;font-size:14px;line-height:1.75;color:#28324d;margin-bottom:14px}
.ml-note b{color:#2347b8}
.ml-note code{background:#dde7fb;color:#1f3a8a;padding:1px 6px;border-radius:5px;font-family:var(--mono);font-size:13px}
.ml-note ul{margin:6px 0 0;padding-left:18px}.ml-note li{margin:3px 0}
.ml-note table{border-collapse:collapse;width:100%;margin-top:6px;font-size:13px}
.ml-note th,.ml-note td{border:1px solid #cdd9f3;padding:5px 8px;text-align:left}
.ml-note th{background:#dde7fb;color:#1f3a8a}
.ml-h{font-size:13px;font-weight:700;color:var(--ink3);margin:0 0 8px}
.ml-codebox{background:var(--ed-bg);border:1px solid #20264a;border-radius:var(--rsm);padding:12px 6px;font-family:var(--mono);font-size:14.5px;line-height:1.95;overflow-x:auto}
.ml-line{display:flex;gap:10px;padding:1px 10px;border-radius:6px;white-space:pre;color:#cdd6f4}
.ml-line .ml-ln{color:var(--ed-num);min-width:18px;text-align:right;user-select:none;flex:none}
.ml-line.ml-on{background:rgba(124,156,255,.22);box-shadow:inset 3px 0 0 #7c9cff}
.ml-line.ml-on .ml-ln{color:#9bb4ff;font-weight:700}
.ml-line.ml-on.ml-err{background:rgba(255,90,110,.20);box-shadow:inset 3px 0 0 #ff5a6e}
.ml-line.ml-on.ml-err .ml-ln{color:#ff8a98}
.ml-right{display:flex;flex-direction:column}
.ml-vars{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;min-height:34px}
.ml-var{display:flex;align-items:center;gap:8px;background:#f3f6ff;border:1px solid #e0e6fb;border-radius:8px;padding:6px 12px;font-family:var(--mono);font-size:14px}
.ml-var b{color:#3b58d6;font-weight:700}.ml-var span{color:var(--ink);font-weight:700}
.ml-var.muted{background:#f5f6fa;border-color:var(--line)}
.ml-var.ml-var-hot{background:#fff4d6;border-color:#f5c451;animation:mlHot .6s ease}
.ml-var.ml-var-hot span{color:#a8631a}
@keyframes mlHot{0%{background:#ffe08a;transform:scale(1.12)}100%{background:#fff4d6;transform:scale(1)}}
/* 一句话记住 */
.ml-key{background:linear-gradient(90deg,#fff6e0,#fff9ec);border:1px solid #f3d99a;border-left:4px solid #f0b400;border-radius:8px;padding:9px 14px;margin:10px 0 0;font-size:14px;color:#6b5114;font-weight:600}
/* 预测题(先预测后揭晓) */
.ml-quiz{background:#f3f7ff;border:1px solid #d3e0fb;border-radius:10px;padding:12px}
.ml-quiz-q{font-weight:700;color:#1f3a8a;margin-bottom:10px;font-size:14px}
.ml-quiz-opt{display:block;width:100%;text-align:left;background:#fff;border:1px solid #d3ddf5;border-radius:8px;padding:9px 12px;margin-bottom:8px;cursor:pointer;font-size:14px;color:var(--ink);transition:.12s;font-family:var(--mono)}
.ml-quiz-opt:hover{border-color:#7c9cff;background:#eef3ff}
.ml-quiz-opt b{color:#3b58d6;margin-right:8px}
.ml-quiz-opt:last-child{margin-bottom:0}
.ml-quiz-fb{margin-top:10px;border-radius:8px;padding:10px 12px;font-size:13.5px;line-height:1.6}
.ml-quiz-fb.ok{background:#eafaf0;border:1px solid #b6e6c8;color:#1c6b3a}
.ml-quiz-fb.no{background:#fff0f1;border:1px solid #ffc2c9;color:#9a2230}
.ml-out{background:var(--ed-bg);color:#7CFC9A;border:1px solid #20264a;border-radius:var(--rsm);padding:10px 12px;font-family:var(--mono);font-size:14px;min-height:42px;margin:0;white-space:pre-wrap}
.ml-out .muted{color:#6b73a0}
.ml-say{background:#fff8e6;border:1px solid #ffe3a3;border-radius:10px;padding:12px 16px;font-size:14.5px;line-height:1.7;color:#5a4a1a;margin:8px 0}
.ml-say.ml-say-err{background:#fff0f1;border-color:#ffc2c9;color:#9a2230}
.ml-ctrl{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0 8px}
.ml-prog{margin-left:auto;font-size:13px;color:var(--ink3);font-family:var(--mono)}
.ml-bar{height:6px;background:#eef0f6;border-radius:6px;overflow:hidden}
.ml-bar-in{height:100%;background:linear-gradient(90deg,#7c9cff,#b18cff);transition:width .3s}
@media(max-width:720px){ .ml-stage{grid-template-columns:1fr} .ml-prog{margin-left:0;width:100%;text-align:right} }
