/* ================= 主题变量 ================= */
:root, [data-theme="light"]{
  --bg:#f0f2f5; --card:#ffffff; --ink:#1f2933; --muted:#6b7280;
  --line:#e3e8ef; --brand:#2f6fed; --brand-d:#1f4fc0;
  --red:#d64545; --green:#2e9e5b; --amber:#e8a33d; --soft:#eef3ff;
  --orange:#f77f00; --orange-light:#fff3e0;
  --warn-bg:#fff8ec; --warn-text:#8a5a10;
}
[data-theme="dark"]{
  --bg:#0f1117; --card:#181b24; --ink:#e8eaf0; --muted:#8b92a8;
  --line:#2a2f3d; --brand:#f5a623; --brand-d:#ffcb6b;
  --soft:#232838; --red:#ff6b6b; --green:#5cdb8b; --amber:#ffd166;
  --orange:#f77f00; --orange-light:#3d2e1f;
  --warn-bg:#2e2616; --warn-text:#ffd79a;
}
[data-theme="green"]{
  --bg:#f0f7f4; --card:#ffffff; --ink:#1f2933; --muted:#5c7373;
  --line:#d4e8de; --brand:#0d9b6a; --brand-d:#067a52;
  --soft:#e3f5ed; --orange:#0d9b6a; --orange-light:#e3f5ed;
  --warn-bg:#fff8ec; --warn-text:#8a5a10;
}
[data-theme="blue"]{
  --bg:#f0f9ff; --card:#ffffff; --ink:#1f2933; --muted:#5c6b7a;
  --line:#d6eaf7; --brand:#0ea5e9; --brand-d:#0284c7;
  --soft:#e0f2fe; --orange:#0ea5e9; --orange-light:#e0f2fe;
  --warn-bg:#fff8ec; --warn-text:#8a5a10;
}
[data-theme="yellow"]{
  --bg:#fffbf0; --card:#ffffff; --ink:#1f2933; --muted:#7a6a5c;
  --line:#f3e6d0; --brand:#f59e0b; --brand-d:#d97706;
  --soft:#fef3c7; --orange:#f59e0b; --orange-light:#fef3c7;
  --warn-bg:#fff8ec; --warn-text:#8a5a10;
}
/* 章节页强制深色，优先级高于全局主题 */
body.chapter-mode{
  --bg:#0f1117; --card:#181b24; --ink:#e8eaf0; --muted:#8b92a8;
  --line:#2a2f3d; --brand:#f5a623; --brand-d:#ffcb6b;
  --soft:#232838; --red:#ff6b6b; --green:#5cdb8b; --amber:#ffd166;
  --warn-bg:#2e2616; --warn-text:#ffd79a;
}
*{box-sizing:border-box}
body{margin:0;font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  background:var(--bg);color:var(--ink);font-size:18px;line-height:1.6}
button{font-family:inherit;cursor:pointer;border:none;border-radius:8px;padding:8px 16px;font-size:17px;font-weight:600}

/* ================= 页眉 ================= */
.topbar{display:flex;flex-direction:column;background:var(--card);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.header-top{display:flex;flex-direction:column;align-items:flex-start;padding:10px 22px}
.brand-slogan{font-size:15px;color:var(--muted);margin-top:2px;white-space:nowrap;letter-spacing:.2px}
.header-nav{display:flex;align-items:center;gap:12px;padding:8px 22px;border-top:1px solid var(--line);background:#fafbff}
body.chapter-mode .header-nav{background:#141821}
.nav-left{display:flex;align-items:center;gap:10px}
.brand{font-weight:700;font-size:21px;cursor:pointer;white-space:nowrap}
.badge{background:var(--soft);color:var(--brand-d);font-size:15px;padding:3px 10px;border-radius:20px;border:1px solid var(--line);white-space:nowrap}
.topnav{display:flex;align-items:center;gap:18px;flex:1;min-width:0;justify-content:flex-start}
.topnav a{color:var(--ink);text-decoration:none;font-weight:600;font-size:17px;white-space:nowrap}
.topnav a:hover{color:var(--brand)}
.header-right{display:flex;align-items:center;gap:12px;margin-left:auto;white-space:nowrap}
.login-state{font-size:16px;color:var(--muted);display:flex;align-items:center;gap:10px;white-space:nowrap}
.login-state a{color:var(--brand);text-decoration:none;font-weight:600}
.login-state a:hover{text-decoration:underline}
.login-state .sep{color:var(--line)}
.ver-switch{margin-left:6px;position:relative}
.theme-switch{position:relative}
.theme-btn{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:16px;color:var(--ink);cursor:pointer;display:flex;align-items:center;gap:6px}
.theme-btn:hover{border-color:var(--brand);color:var(--brand)}
.theme-menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:6px;min-width:120px;display:none;z-index:30}
.theme-menu.open{display:block}
.theme-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:16px;white-space:nowrap}
.theme-item:hover{background:var(--soft)}
.theme-dot{width:12px;height:12px;border-radius:50%;border:1px solid var(--line)}
.ver-sel{padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:16px;
  background:var(--card);color:var(--ink);cursor:pointer}
.ver-sel:hover{border-color:var(--brand)}

/* ================= 布局 ================= */
#app{max-width:none;margin:0;padding:0;flex:1;min-width:0}
.layout{max-width:1320px;margin:0 auto;display:flex;align-items:flex-start;gap:0}
.sidebar{width:248px;flex-shrink:0;position:sticky;top:110px;align-self:flex-start;
  max-height:calc(100vh - 130px);overflow-y:auto;padding:14px 12px;background:var(--card);
  border-right:1px solid var(--line)}
.side-head{font-weight:600;font-size:16px;color:var(--brand-d);margin:2px 4px 10px}
.sgrade{margin-bottom:6px}
.sghead{font-weight:600;font-size:17px;padding:7px 6px;cursor:pointer;border-radius:8px}
.sghead:hover{background:var(--soft)}
.sbody{padding:2px 0 8px 6px}
.sbook{margin:2px 0 6px;padding-left:10px;border-left:2px solid var(--soft)}
.sbhead{font-size:15px;color:var(--muted);padding:3px 0}
.schlist{display:flex;flex-wrap:wrap;gap:6px;padding-bottom:4px}
.schip{display:inline-block;padding:5px 9px;border:1px solid var(--line);border-radius:7px;
  background:var(--card);font-size:15px;cursor:pointer;color:var(--ink)}
.schip:hover{border-color:var(--brand);color:var(--brand)}
.schip.off{color:#b9c0cc;cursor:default;border-style:dashed}
.schip.off:hover{border-color:var(--line);color:#b9c0cc}
.foot{text-align:center;color:var(--muted);font-size:15px;padding:18px}

/* ================= 通用页面（AI辅导/知识图谱/学习中心/注册） ================= */
.page-center{width:100%;max-width:1100px;margin:0 auto;padding:22px;min-height:calc(100vh - 140px)}

/* ================= 通用 ================= */
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:16px}
.card h2{margin:0 0 10px;font-size:20px}
.card h3{margin:14px 0 8px;font-size:18px}
.muted{color:var(--muted);font-size:16px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.btn-primary{background:var(--brand);color:#fff}
.btn-primary:hover{background:var(--brand-d)}
.btn-ghost{background:var(--card);border:1px solid var(--line);color:var(--ink)}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}

/* ================= 首页 Dashboard ================= */
.home-dashboard{width:100%;min-height:calc(100vh - 140px)}
.db-wrap{max-width:1520px;margin:0 auto;padding:22px}
/* 首页章节目录要单行放下全部章节名，故首页整体版面比其它页更宽 */
body.home-page .layout{max-width:1520px}
.db-hero{background:var(--card);border:1px solid var(--line);border-radius:16px;
  padding:16px 20px;margin-bottom:22px}
.db-hero-right{max-width:100%;background:transparent;border:none;border-radius:0;
  padding:0;display:flex;flex-direction:column;gap:10px}
.db-cat-rows{display:flex;flex-direction:column;gap:6px;margin-bottom:4px}
.db-cat-row{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.db-cat-tab.empty{visibility:hidden;cursor:default}
.db-hero-cats-wrap{display:flex;justify-content:center}
.db-hero-cats-row{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;padding-bottom:4px}
.db-hero-cats-row::-webkit-scrollbar{height:4px}
.db-hero-cats-row::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}
.db-hero-chip{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:5px 11px;
  font-size:15px;color:var(--ink);cursor:pointer;white-space:nowrap;transition:border-color .1s,color .1s;flex-shrink:0}
.db-hero-chip:hover{border-color:var(--brand);color:var(--brand)}
.db-hero-chip.off{background:var(--soft);color:#9aa3b2;cursor:not-allowed;border-style:dashed;opacity:.55}
.db-hero-chip.off:hover{border-color:var(--line);color:#9aa3b2}
[data-theme="dark"] .db-hero-chip.off{background:#232838;color:#5c6370;opacity:.6}

.db-section{margin-bottom:22px}
.db-sec-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.db-sec-head h3{margin:0;font-size:19px}
.db-sec-tip{font-size:15px;color:var(--muted)}
.db-path{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.db-path-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;
  display:flex;gap:12px;align-items:flex-start;cursor:pointer;transition:transform .1s,border-color .1s}
.db-path-card:hover{transform:translateY(-2px);border-color:var(--brand)}
.db-path-num{width:28px;height:28px;border-radius:50%;background:var(--orange-light);color:var(--orange);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0}
.db-path-card b{display:block;font-size:17px;margin-bottom:2px}
.db-path-card p{margin:0;font-size:15px;color:var(--muted)}
.db-path-foot{font-size:15px;color:var(--muted);margin-top:10px}

.db-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.db-stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;text-align:center}
.db-stat b{display:block;font-size:28px;color:var(--orange);margin-bottom:4px}
.db-stat span{font-size:15px;color:var(--muted)}

.db-rank-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:20px;overflow:hidden}
.db-rank-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.db-rank-head h3{margin:0;font-size:19px;color:var(--orange)}
.db-rank-tip{font-size:15px;color:var(--muted)}
.db-rank-body{display:flex;gap:18px;align-items:flex-start;margin-bottom:16px}
.db-rank-level{display:flex;gap:16px;align-items:center;background:var(--orange-light);border-radius:14px;padding:16px;flex:2;min-width:0}
body.chapter-mode .db-rank-level,[data-theme="dark"] .db-rank-level{background:#2a1f15}
.db-level-badge{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 18px;text-align:center;color:var(--orange);font-weight:700;flex-shrink:0}
.db-level-badge small{font-weight:400;color:var(--muted);font-size:14px}
.db-level-info{display:flex;gap:18px;flex:1;min-width:0;justify-content:space-between}
.db-level-info div{display:flex;flex-direction:column;min-width:60px}
.db-level-info b{font-size:20px;color:var(--ink);white-space:nowrap}
.db-level-info span{font-size:14px;color:var(--muted);white-space:nowrap}
.db-rank-task{flex:1;min-width:0}
.db-task-title{font-weight:600;font-size:16px;margin-bottom:8px}
.db-task-item{display:inline-flex;align-items:center;gap:6px;background:var(--soft);border-radius:8px;padding:6px 12px;font-size:16px;margin-bottom:8px}
.db-task-progress{font-size:15px;color:var(--muted)}
.db-rank-list{border-top:1px solid var(--line);padding-top:12px}
.db-rank-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line)}
.db-rank-no{width:24px;height:24px;border-radius:50%;background:var(--soft);color:var(--brand);display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700}
.db-rank-name{flex:1;font-weight:600}
.db-rank-meta{font-size:15px;color:var(--muted)}
.db-rank-score{margin-left:auto;font-size:16px;color:var(--orange);font-weight:600}

.db-version-bar{display:flex;gap:16px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;font-size:16px}

/* 章节目录（首页 Hero 内：年级单行滚动） */
.db-cat-tab{white-space:nowrap;padding:5px 12px;border-radius:14px;border:1px solid var(--line);background:var(--card);font-size:15px;text-align:center;cursor:pointer;color:var(--ink);flex-shrink:0}
.db-cat-tab:hover{border-color:var(--brand);color:var(--brand)}
.db-cat-tab.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.db-cat-list{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.db-cat-card{display:flex;align-items:center;gap:14px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;cursor:pointer;transition:transform .1s,border-color .1s}
.db-cat-card:hover{transform:translateY(-2px);border-color:var(--brand)}
.db-cat-card.off{cursor:default;opacity:.7}
.db-cat-card.off:hover{transform:none;border-color:var(--line)}
.db-cat-no{width:34px;height:34px;border-radius:8px;background:var(--orange-light);color:var(--orange);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0}
.db-cat-info{flex:1;min-width:0}
.db-cat-title{font-weight:600;font-size:17px;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-cat-meta{font-size:15px;color:var(--muted);display:flex;align-items:center;gap:8px;white-space:nowrap}
.db-cat-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:14px}
.db-cat-tag.ready{background:#e7f8ef;color:#218358}
.db-cat-tag.soon{background:#f1f2f4;color:#8b92a8}
.db-cat-btn{flex-shrink:0;background:var(--orange);color:#fff;border-radius:18px;padding:7px 16px;font-size:16px;font-weight:600}
.db-cat-btn:hover{background:#e67300}
.db-cat-btn.disabled{background:#e3e8ef;color:#9aa3b2;cursor:not-allowed}

@media (max-width:760px){
  .db-cat-list{grid-template-columns:1fr}
  .header-top{padding:10px 16px}
  .db-hero{padding:14px 16px}
  .db-hero-right{padding:12px}
}

/* ================= 章节页（深色全屏） ================= */
body.fullscreen-chapter .topbar{display:none}
body.fullscreen-chapter .foot{display:none}
body.fullscreen-chapter .layout{max-width:none;margin:0}
body.fullscreen-chapter #app{min-height:100vh}
.chapter-app{width:100%;min-height:calc(100vh - 110px);display:flex;flex-direction:column}
body.fullscreen-chapter .chapter-app{min-height:100vh}
.ch-error{max-width:560px;margin:40px auto;text-align:center}
.ch-topbar{display:flex;justify-content:space-between;align-items:center;padding:14px 22px;background:var(--card);border-bottom:1px solid var(--line);gap:14px}
.ch-title-back{display:flex;align-items:center;gap:10px;min-width:0}
.ch-back-btn{background:var(--soft);border:1px solid var(--line);color:var(--ink);border-radius:10px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;font-size:19px;cursor:pointer}
.ch-back-btn:hover{border-color:var(--brand);color:var(--brand)}
.ch-title{min-width:0}
.ch-title-main{font-size:21px;font-weight:700;color:var(--ink)}
.ch-title-sub{font-size:15px;color:var(--muted);margin-top:2px}
.ch-top-actions{display:flex;gap:10px;flex-wrap:wrap}
.ch-top-btn{background:var(--soft);border:1px solid var(--line);color:var(--ink);border-radius:18px;padding:6px 14px;font-size:16px;font-weight:600}
.ch-top-btn:hover{border-color:var(--brand);color:var(--brand)}

.ch-lesson-tabs{display:flex;gap:8px;padding:12px 22px;background:var(--card);border-bottom:1px solid var(--line);overflow-x:auto}
.ch-lesson-tab{white-space:nowrap;padding:6px 14px;border-radius:16px;border:1px solid var(--line);font-size:16px;cursor:pointer;color:var(--muted)}
.ch-lesson-tab.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.ch-lesson-tab:hover{color:var(--brand)}
.ch-lesson-tab.on:hover{color:#fff}

.ch-layout{display:flex;flex:1;gap:0;min-height:calc(100vh - 180px)}
.ch-knowledge{width:300px;flex-shrink:0;background:var(--card);border-right:1px solid var(--line);padding:16px;overflow-y:auto;max-height:calc(100vh - 180px)}
.ch-stage{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--bg)}

.ch-demo{flex:1;padding:18px 22px;overflow-y:auto;min-height:260px}
.ch-demo-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.ch-demo-head h3{margin:0;font-size:19px;color:var(--brand-d)}
.ch-demo-tip{font-size:15px;color:var(--muted)}
.ch-demo-content{min-height:180px}
.ch-demo-stem{font-size:18px;margin-bottom:10px;padding:12px;background:var(--card);border-radius:10px;border:1px solid var(--line)}
.ch-demo-walk{font-size:16px;color:var(--muted);margin-bottom:12px;line-height:1.8}
.ch-demo-placeholder{color:var(--muted);padding:40px;text-align:center;border:2px dashed var(--line);border-radius:12px}

.ch-practice{min-height:280px;background:var(--card);border-top:1px solid var(--line);display:flex;flex-direction:column}
.ch-practice-tabs{display:flex;gap:6px;padding:10px 22px 0;border-bottom:1px solid var(--line);overflow-x:auto}
.ch-practice-tab{white-space:nowrap;padding:8px 16px;border-radius:12px 12px 0 0;border:1px solid transparent;border-bottom:none;font-size:16px;cursor:pointer;color:var(--muted);margin-bottom:-1px;background:transparent}
.ch-practice-tab.on{background:var(--card);border-color:var(--line);color:var(--brand);font-weight:700;border-bottom:1px solid var(--card)}
.ch-practice-tab:hover{color:var(--brand)}
.ch-practice-body{flex:1;padding:14px 22px;overflow-y:auto}

.ch-sec-subtabs{display:flex;gap:8px;margin-bottom:12px}
.ch-sec-subtab{padding:5px 12px;border-radius:16px;border:1px solid var(--line);cursor:pointer;font-size:16px}
.ch-sec-subtab.on{border-color:var(--brand);background:var(--soft)}
.ch-sec-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.ch-sec-count{font-size:15px;color:var(--muted)}
.ch-empty{color:var(--muted);padding:30px;text-align:center}
.ch-center-links{display:flex;gap:12px;flex-wrap:wrap;padding:20px}

/* 知识点面板 */
.kp-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:14px}
.kp-card h4{margin:0 0 10px;font-size:17px;font-weight:700;color:var(--brand-d);display:flex;align-items:center;gap:6px}
.kp-card h4 .icon{width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--soft);color:var(--brand);font-size:15px}
.kp-card ul{margin:0;padding-left:18px;font-size:16px;color:var(--ink)}
.kp-card li{margin:6px 0}
.kp-card .kp-formula{background:var(--soft);border-radius:8px;padding:8px 10px;margin:6px 0;font-size:16px}
.kp-card .kp-caution{background:transparent;border-left:3px solid var(--line);border-radius:6px;padding:8px 10px;margin:6px 0;font-size:16px;color:var(--ink)}
.kp-card .kp-check{display:flex;align-items:flex-start;gap:6px;margin:6px 0;font-size:16px}
.kp-card .kp-check::before{content:"✓";color:var(--green);font-weight:700;flex-shrink:0}

/* 题目卡片 */
.q{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px;margin:10px 0}
.q .stem{font-weight:600;margin-bottom:6px}
.ans{display:flex;gap:8px;margin-top:6px;align-items:stretch}
.ans input{flex:1;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:18px;background:var(--card);color:var(--ink)}
.feedback{margin-top:8px;font-size:17px}
/* 数学答案输入组件：编辑时显示源码 input，失焦/提交后显示 KaTeX 渲染公式 */
.math-answer-wrap{position:relative;display:flex;flex:1;align-items:stretch;min-width:120px;min-height:38px}
.math-answer-wrap input.math-answer,
.math-answer-wrap input[id^="ei-"],
.math-answer-wrap #rin{width:100%;box-sizing:border-box}
.math-answer-wrap .math-render{display:none;cursor:text;flex:1;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:18px;background:var(--card);color:var(--ink);min-height:38px;box-sizing:border-box;align-items:center}
.math-answer-wrap:not(.editing) input.math-answer,
.math-answer-wrap:not(.editing) input[id^="ei-"],
.math-answer-wrap:not(.editing) #rin{display:none}
.math-answer-wrap:not(.editing) .math-render{display:flex}
.math-answer-wrap .math-render .katex{font-size:1.08em}
.feedback.ok{color:var(--green)}
.feedback.no{color:var(--red)}
.hint{background:#fff8ec;border-left:3px solid var(--amber);padding:8px 10px;margin-top:8px;border-radius:6px;font-size:16px}
.think{background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:12px;margin-top:12px}
.think .q1{font-weight:600;color:var(--brand-d)}
.think .bubble{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px;margin:8px 0}
.think .bubble.me{margin-left:40px;background:var(--soft)}
.think .bubble.ai{margin-right:40px;background:var(--card)}
.think textarea{width:100%;min-height:54px;border:1px solid var(--line);border-radius:8px;padding:8px;font-family:inherit;font-size:17px;background:var(--card);color:var(--ink)}
.ch-think-wrap{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line)}
.ch-think-wrap h4{margin:0 0 10px;font-size:17px;color:var(--brand-d)}

.tag{display:inline-block;font-size:15px;padding:2px 9px;border-radius:20px;margin-right:6px}
.tag.b{background:#e7f4ff;color:#1f6fc0}
.tag.p{background:#fff1e0;color:#c07d12}
.tag.t{background:#f0e9ff;color:#6b3fc0}

/* 圆可视化：割圆法 */
.circle-viz{display:flex;flex-direction:column;gap:14px}
.circle-viz-stage{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px;display:flex;justify-content:center}
.circle-viz-stage svg{width:100%;max-width:720px;height:auto;display:block}
.circle-viz-ctrls{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-end;justify-content:center}
.circle-viz-ctrl{display:flex;flex-direction:column;gap:6px;min-width:150px}
.circle-viz-ctrl-wide{min-width:220px}
.circle-viz-play{flex-direction:row;align-items:center;gap:8px;min-width:auto}
.circle-viz svg text{font-weight:700}
.circle-viz-modes{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.cv-mode-btn{font-size:15px;padding:7px 14px;border-radius:9px;border:1px solid var(--brand);background:var(--card);color:var(--text);font-weight:700;cursor:pointer;white-space:nowrap}
.cv-mode-btn.on{background:var(--brand);color:#fff}
.cv-mode-btn.ghost{border-color:var(--line);color:var(--text)}
.circle-viz-ctrl label{font-size:16px;color:var(--text)}
.circle-viz-ctrl input[type=range]{width:100%}
.btn-mini{font-size:16px;padding:8px 16px;border-radius:9px;border:1px solid var(--brand);background:var(--brand);color:#fff;font-weight:700;cursor:pointer;white-space:nowrap}
.btn-mini.ghost{background:transparent;color:var(--text);border-color:var(--line)}
.btn-mini:hover{opacity:.9}
.circle-viz-formula{font-size:17px;line-height:1.8;color:var(--muted);text-align:center;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:10px}

/* 学习中心 */
.tabs{display:flex;gap:8px;border-bottom:1px solid var(--line);margin-bottom:14px}
.tabs .tab{padding:8px 14px;cursor:pointer;font-weight:600;color:var(--muted);border-bottom:2px solid transparent}
.tabs .tab.on{color:var(--brand);border-color:var(--brand)}
.wq{display:flex;justify-content:space-between;gap:10px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:8px 0;background:var(--card)}
.wq .meta{font-size:15px;color:var(--muted)}
.wq-actions{display:flex;flex-direction:column;gap:6px;flex-shrink:0}
.diag{background:#f0f6ff;border:1px solid #d6e2ff;border-left:4px solid var(--brand);border-radius:8px;padding:10px 14px;margin:-2px 0 10px}
.diag-head{font-weight:600;color:var(--brand-d);margin-bottom:6px}
.diag-msg{color:var(--ink);font-size:16px;margin-bottom:6px}
.diag-roots{margin:0;padding-left:18px}
.diag-roots li{margin:5px 0;font-size:17px}
.diag-roots .tag{margin-left:6px}
.report-row{display:flex;align-items:center;gap:10px;margin:8px 0}
.bar{height:14px;border-radius:7px;background:var(--line);flex:1;overflow:hidden}
.bar>i{display:block;height:100%;background:var(--green)}
.bar>i.low{background:var(--red)}
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:50}
.modal{background:var(--card);border-radius:12px;padding:22px;width:320px;border:1px solid var(--line)}
.modal input{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin:6px 0 12px;background:var(--card);color:var(--ink)}
.empty{color:var(--muted);text-align:center;padding:30px}

/* ================= 响应式 ================= */
@media (max-width:900px){
  .db-path{grid-template-columns:repeat(2,1fr)}
  .db-stats{grid-template-columns:repeat(2,1fr)}
  .db-rank-body{flex-direction:column}
  .ch-layout{flex-direction:column}
  .ch-knowledge{width:100%;max-height:none;border-right:none;border-bottom:1px solid var(--line)}
  .ch-demo{min-height:200px}
  .db-hero{padding:16px}
  .db-hero-right{padding:12px}
  .db-cat-row{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:760px){
  .layout{flex-direction:column}
  .sidebar{width:100%;position:static;max-height:none;border-right:none;border-bottom:1px solid var(--line)}
  .header-nav{flex-wrap:wrap;gap:8px}
  .topnav{order:3;width:100%;justify-content:center}
  .db-path{grid-template-columns:1fr}
  .db-stats{grid-template-columns:repeat(2,1fr)}
  .db-level-info{grid-template-columns:repeat(2,1fr)}
}

/* 配套资料（拓展阅读 tab） */
.mat-list{max-width:920px;margin:0 auto;padding:8px 4px}
.mat-cat{font-size:15px;color:var(--accent,#2b6cb0);margin:18px 0 8px;border-left:3px solid var(--accent,#2b6cb0);padding-left:8px}
.mat-count{font-size:12px;color:#888;font-weight:normal;margin-left:6px}
.mat-item{border:1px solid var(--line,#e3e8ef);border-radius:10px;margin-bottom:12px;overflow:hidden;background:#fff}
.mat-title{background:#f5f7fa;padding:8px 12px;font-weight:600;font-size:14px;border-bottom:1px solid var(--line,#e3e8ef)}
.mat-body{padding:12px 14px;font-size:13px;line-height:1.7;color:#2d3748;max-height:520px;overflow:auto}
.mat-body p{margin:4px 0}
.mat-body h4{margin:10px 0 4px;font-size:14px;color:#1a202c}
.mat-tbl{border-collapse:collapse;margin:8px 0;width:100%;font-size:12px}
.mat-tbl td{border:1px solid var(--line,#e3e8ef);padding:4px 8px;vertical-align:top}
