:root{font-size:14px;line-height:1.6;font-family:var(--font-sans);color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--focus);outline-offset:3px}h1,h2,h3,p{margin:0}h1{font-size:27px}h2{font-size:20px}h3{font-size:16px}.sidebar{position:fixed;width:224px;height:100dvh;background:var(--sidebar);border-right:1px solid var(--sidebar-line);padding:26px 20px;display:flex;flex-direction:column}.brand{font-size:30px;font-weight:750;letter-spacing:-3px;color:var(--blue);line-height:1}.brand span{font-size:23px}.brand b{font-size:20px;letter-spacing:-.6px}.brand small{display:block;font-size:10px;letter-spacing:2px;margin:6px 0 0 30px;color:var(--muted)}.sidebar p{font-size:11px;color:var(--muted);margin:38px 10px 10px}.sidebar nav{display:grid;gap:5px}.sidebar nav a{display:flex;align-items:center;height:47px;padding:9px 11px;border-radius:7px;font-size:13px;color:var(--muted)}.sidebar nav a.active{background:var(--teal-soft);color:var(--brand);font-weight:600}.sidebar>button{margin-top:auto;text-align:left;border:0;background:none;color:var(--muted);padding:10px}.main{margin-left:224px}main{max-width:1390px;margin:auto;padding:38px}.mobile-header,.mobile-nav{display:none}.heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:25px}.eyebrow{font-size:12px;color:var(--muted);margin-bottom:6px}.search{display:flex;align-items:center;width:300px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:9px 12px}.search input{width:100%;border:0;outline:0;background:transparent}.card:hover{background:#f6f9fb}.columns{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:25px}.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-head a{font-size:12px;color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.card{display:flex;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden;min-height:145px;text-align:left;padding:0}.card img,.placeholder{width:35%;object-fit:cover;background:#eef1e8;flex-shrink:0}.placeholder{display:grid;place-items:center;font-size:38px;font-weight:600;color:#355a7d;background:#e6edf6}.copy{padding:15px;min-width:0}.meta{font-size:11px;color:var(--muted)}.copy h3{margin:8px 0 5px}.copy p{font-size:12px;color:var(--muted)}.more-link{display:block;color:var(--blue);font-size:11px;margin-top:10px}.rail{background:#fff;border:1px solid var(--line);border-radius:8px;padding:21px;height:max-content}.rail p{font-size:12px;color:var(--muted);line-height:1.9;margin:10px 0 16px}.secondary,.primary{display:inline-block;border-radius:6px;padding:9px 15px;border:1px solid var(--line);background:#fff}.primary{background:var(--blue);color:#fff;border-color:var(--blue)}.count{font-size:12px;color:var(--muted);margin-bottom:14px}.about{max-width:700px}.about p{line-height:2;color:var(--muted);margin:16px 0}.notice{margin-top:20px;background:#e9f0f5;border-radius:8px;padding:18px}.notice p{margin:6px 0}.empty{padding:26px 0;color:var(--muted)}footer{border-top:1px solid var(--line);margin-top:40px;padding:20px 0;color:var(--muted);display:flex;gap:18px;flex-wrap:wrap;font-size:11px}footer button{border:0;background:none;padding:0;color:inherit}dialog{width:min(520px,calc(100% - 30px));max-height:calc(100dvh - 30px);overflow:auto;border:1px solid var(--line);border-radius:10px;padding:28px;background:white;color:#1a2430}dialog::backdrop{background:#14263799}.close{position:absolute;right:12px;top:8px;border:0;background:none;font-size:26px}dialog>p{font-size:12px;color:var(--muted);margin:8px 0}label{display:block;font-size:12px;font-weight:600;margin-top:13px}label input,label select,label textarea{display:block;width:100%;padding:9px;margin-top:5px;border:1px solid var(--line);border-radius:6px;background:#f8fafb}label textarea{resize:vertical}.hint{color:var(--muted);font-size:11px;margin:15px 0}#feedback-result{font-size:12px;margin:10px 0}.error{color:#9b3329}@media(max-width:960px){.sidebar{display:none}.main{margin:0}.mobile-header{display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid var(--line);padding:18px}.mobile-header button{border:1px solid var(--line);background:#fff;border-radius:6px;padding:6px 9px;font-size:12px}.mobile-nav{display:grid;grid-template-columns:repeat(4,1fr);position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:5}.mobile-nav a{text-align:center;padding:15px 0;font-size:12px}.mobile-nav a.active{color:var(--blue);font-weight:600}main{padding:25px 20px 90px}.columns{grid-template-columns:1fr}.rail{display:none}}@media(max-width:600px){h1{font-size:23px}.heading{display:block}.search{width:100%;margin-top:16px}.grid{gap:10px}.card{display:block}.card img,.placeholder{width:100%;height:95px}.copy{padding:11px}.copy h3{font-size:14px}.copy p{font-size:11px}.meta{font-size:10px}.filters select{max-width:100%}}

/* Shared card structure: links and buttons use the same top-aligned layout. */
.card{display:flex;align-items:stretch;justify-content:flex-start;font:inherit;color:inherit}
.card img{display:block}
.copy{display:flex;flex-direction:column;flex:1;align-items:stretch;overflow-wrap:anywhere}
.meta{display:block}
.copy .more-link{margin-top:auto;padding-top:12px}
.search{gap:8px;min-width:0}
.search input{min-width:0}
.search button{display:grid;place-items:center;flex:none;width:36px;height:36px;border:0;border-radius:4px;background:transparent;font-size:21px;line-height:1;padding:0}
.search button:hover{background:#e9f0f5}
#resource-content p{margin:12px 0;overflow-wrap:anywhere}
#context,footer a{overflow-wrap:anywhere}
@media(max-width:600px){
 main{padding:22px 16px calc(88px + env(safe-area-inset-bottom))}
 .heading{margin-bottom:20px}
 .search{padding:6px 10px}.search input{font-size:16px}
 .section-head{gap:12px}.section-head a{white-space:nowrap}
 .grid{gap:12px}.card{flex-direction:column;min-width:0}
 .card img,.card .placeholder{width:100%;height:112px;flex:none}
 .copy{padding:13px 12px 14px;width:100%}
 .meta{font-size:11px;line-height:1.6;min-height:3.2em}
 .copy h3{font-size:15px;line-height:1.5;min-height:3em;margin:7px 0 8px}
 .copy p{font-size:12px;line-height:1.7;min-height:3.4em}
 .more-link{font-size:12px;line-height:1.5}
 .filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
 .filters select{width:100%;min-width:0;min-height:44px;padding:8px 5px;font-size:13px}
 .mobile-nav a{min-height:48px;display:grid;place-items:center;padding:12px 4px}
 dialog{padding:24px 18px;max-height:calc(100dvh - 24px)}
 label input,label select,label textarea{font-size:16px;min-width:0;max-width:100%}
 #feedback-form .primary{width:100%;min-height:44px}
 .admin-header{flex-wrap:wrap;align-items:flex-start}.admin-header select{max-width:100%;min-height:44px}
 .panel{padding:16px}.row{overflow-wrap:anywhere}.controls input{min-width:0;width:100%}
 .controls button{min-height:44px}#summary{gap:16px}#summary>div{min-width:100px}
}

.starter-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.starter,.recent{background:#fff;border:1px solid var(--line);border-radius:8px;padding:18px}.starter h3{margin:7px 0}.starter p{min-height:4em;color:var(--muted);font-size:12px}.starter .primary,.starter .secondary{margin-top:12px}.recent{margin-bottom:26px}.recent p{margin:8px 0}@media(max-width:700px){.starter-grid{grid-template-columns:1fr}.starter p{min-height:0}.starter .primary,.starter .secondary{min-height:44px}}

/* 学段与专题 */
.filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.field{display:flex;align-items:center;background:#fff;border:1px solid var(--line);border-radius:8px;padding:0 12px;height:40px;min-width:0}
.field select{appearance:none;-webkit-appearance:none;border:0;background-color:transparent;font:inherit;font-size:13px;color:#1a2430;padding:0 18px 0 0;width:112px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23808b96' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right center}
option.pending,.field select.pending{color:#9aa8b4}
.field select:focus{outline:none}
.field:focus-within{border-color:#b9cfe2;box-shadow:0 0 0 3px #eef4f9}
.badge{position:absolute;top:10px;right:10px;font-size:10px;line-height:1;padding:4px 6px;border-radius:4px;background:#eef2f6;color:#7d8b98;border:1px solid #e2e8ee}
.card.pending{background:#fbfcfd;border-style:dashed}
.card.pending .copy h3,.card.pending .copy p{color:#8d99a4}
.card.pending .more-link{color:#9aa8b4}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.chip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:6px 14px;font-size:12px;color:var(--muted);cursor:pointer}
.chip.active{background:#e6eef5;border-color:#b9cfe2;color:var(--blue);font-weight:600}
.chip.pending{color:#a4b0bb;border-style:dashed;background:#fbfcfd}
.collection-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;margin-top:16px}
.collection{position:relative;display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:20px;text-align:left;font:inherit;color:inherit;cursor:pointer}
.collection:hover{border-color:#b9c9d8}
.collection h3{font-size:17px}
.collection p{font-size:12px;color:var(--muted);line-height:1.8;margin:0}
.collection .meta{font-size:11px;color:var(--muted)}
.collection.pending{background:#fbfcfd;border-style:dashed}
.collection.pending h3,.collection.pending p{color:#8d99a4}
.back{font-size:12px;color:var(--muted);margin-bottom:14px}
.back a{color:var(--blue)}
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));transform:translateX(-50%);background:#1a2430;color:#fff;font-size:13px;line-height:1.5;padding:11px 18px;border-radius:8px;max-width:calc(100% - 32px);text-align:center;z-index:30}
@media(max-width:960px){.collection-grid{grid-template-columns:1fr}}
@media(max-width:600px){.filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.field{padding:0 9px;height:38px}.field select{width:100%;max-width:100%;padding-right:16px}.toast{bottom:calc(76px + env(safe-area-inset-bottom))}}

/* ============================================================
   学段页 · 册卡目录（v5）
   一个主体：12 册卡片。整张卡就是入口，右侧通高册页图形。
   ============================================================ */

/* A. 工具栏：标题 + 筛选 + 搜索，一条线 */
.heading-sem{align-items:flex-end;justify-content:flex-start;gap:26px;margin-bottom:22px}
.heading-sem .heading-title{flex:none}
.heading-sem .filters{margin:0;flex-wrap:nowrap;gap:8px}
.heading-sem .field{height:38px}
.heading-sem .field select{width:104px}
.heading-sem .search{width:258px;margin-left:auto;padding:6px 12px}

.knowledge{margin-top:0;border-top:0;padding-top:0}

/* B. 册卡：左文右图，右侧为通高册页块 */
.kbooks{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:14px}
.kbook-card{
  position:relative;display:flex;min-height:128px;
  background:#fff;border:1px solid #e4ebf2;border-radius:11px;
  text-align:left;cursor:pointer;overflow:hidden;padding:0;
  transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}
.kbook-card::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--k);z-index:2;
  transition:width .2s ease,opacity .2s ease}
.kbook-card.is-b::before{opacity:.35}
.kbook-card:hover{transform:translateY(-3px);border-color:var(--k-line);box-shadow:0 14px 26px -18px rgba(28,50,74,.55)}
.kbook-card:hover::before{width:6px}
.kbook-card:focus-visible{outline:2px solid var(--k);outline-offset:2px}

.kbook-main{flex:1;min-width:0;display:flex;flex-direction:column;padding:17px 10px 15px 20px}
.kbook-title{font-size:15.5px;font-weight:600;color:#1d2e3f;letter-spacing:.3px}
.kbook-title em{font-style:normal;font-weight:500;font-size:14px;color:#7d90a0;margin-left:3px;letter-spacing:0}
.kbook-nums{margin-top:auto;padding-top:12px;display:flex;gap:20px}
.knum{display:flex;flex-direction:column;gap:2px}
.knum b{font-size:25px;line-height:1.02;font-weight:600;color:var(--k);font-variant-numeric:tabular-nums;letter-spacing:-.6px}
.knum i{font-style:normal;font-size:10.5px;color:#8c9dab;letter-spacing:.15px}

.kbook-plate{
  position:relative;flex:none;width:90px;display:flex;flex-direction:column;padding:0}
.kbook-plate::before{
  content:"";position:absolute;inset:0;background:var(--k);opacity:.055;
  transition:opacity .2s ease}
.kbook-card.is-b .kbook-plate::before{opacity:.032}
.kbook-card:hover .kbook-plate::before{opacity:.095}
.kbook-art{position:absolute;inset:0;display:block;pointer-events:none;transition:transform .35s ease}
.kbook-art svg{display:block;width:100%;height:100%}
.kbook-card:hover .kbook-art{transform:scale(1.045)}

/* B2. 只剩一两册时（按年级筛选）：横向封面卡，标题在左、统计靠右贴图 */
.kbooks.is-few{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.kbooks.is-few .kbook-card{min-height:124px}
.kbooks.is-few .kbook-main{flex-direction:row;align-items:center;gap:22px;padding:18px 22px 18px 26px}
.kbooks.is-few .kbook-title{font-size:17px;white-space:nowrap}
.kbooks.is-few .kbook-title em{font-size:15px}
.kbooks.is-few .kbook-nums{margin:0 0 0 auto;padding:0;gap:34px;flex:none}
.kbooks.is-few .knum b{font-size:26px}
.kbooks.is-few .kbook-plate{width:190px;padding:0}
.kbooks.is-few .kbook-plate::before{opacity:0}
.kbooks.is-few .kbook-art{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 42%);mask-image:linear-gradient(90deg,transparent 0,#000 42%)}
@media(max-width:900px){
 .kbooks.is-few .kbook-main{flex-direction:column;align-items:flex-start;justify-content:center;gap:0}
 .kbooks.is-few .kbook-nums{margin:auto 0 0;padding-top:12px}
 .kbooks.is-few .kbook-plate{width:150px}
}

/* C. 进入一册后的头部 */
.kdrill{display:flex;align-items:center;gap:14px;margin:0 0 14px}
.kback{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border:1px solid #e4ebf2;border-radius:7px;background:#fff;font-size:12px;color:#4a6178;cursor:pointer;transition:border-color .15s ease,color .15s ease,background .15s ease}
.kback:hover{border-color:#b9cfe2;color:var(--blue);background:#f8fbfd}
.kback span{font-size:13px;color:#9aa8b4}
.kdrill-name{font-size:16px;font-weight:600;color:#1d2e3f}
.kdrill .count{margin-left:auto;font-size:11.5px;color:#8b9aa7}
/* 册次页去掉了页内大标题和返回按钮，只留这行统计（旭哥 22:46） */
.kdrill-meta{margin:0 0 12px;font-size:12px;color:#7c8a71}

/* D. 搜索结果：按册分组，只留册名 */
.khits{display:flex;flex-direction:column;gap:22px}
.khit{display:flex;flex-direction:column;gap:9px}
.khit-name{font-size:12px;color:#8b9aa7}
.khit-name i{font-style:normal;margin-left:8px;color:#b8c4ce}
.knames{display:flex;flex-wrap:wrap;gap:8px}
.kname{padding:7px 13px;border:1px solid #e4ebf2;border-radius:16px;background:#fff;font-size:13px;transition:border-color .15s ease,color .15s ease}
.kname:hover{border-color:#b9cfe2;color:var(--blue);background:#f8fbfd}

/* E. 册内知识点列表 */
.kloading{font-size:12px;color:#8b9aa7;padding:10px 0}
.klist{list-style:none;margin:0;padding:0;border-top:1px solid #edf0e6}
.krow{border-bottom:1px solid #edf0e6}
.krow-head{display:grid;grid-template-columns:34px minmax(0,1fr) auto 66px;align-items:center;gap:14px;width:100%;padding:14px 10px;background:none;border:0;text-align:left;border-radius:9px;transition:background .18s ease}
.krow-head:hover{background:var(--teal-soft)}
.kidx{font-size:11px;letter-spacing:.4px;color:#a9b5a0;font-variant-numeric:tabular-nums}
.kmain{display:flex;flex-direction:column;gap:3px;min-width:0}
.kmain strong{font-size:15px;font-weight:600;line-height:1.5;color:#2f3a2c}
.kmain small{font-size:12.5px;line-height:1.5;color:#7c8a71;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kdom{justify-self:end;padding:2px 9px;border:1px solid #e6ecd9;border-radius:999px;background:#f2f5e9;font-size:11.5px;color:#6d7c5f;text-align:center;white-space:nowrap}
.kstate{font-size:12px;color:#476342;text-align:right;white-space:nowrap}
.krow.done .kstate{color:#3b7a45}
.krow.weak .kstate{color:#a03b3b}
.krow.shaky .kstate{color:#8a6a24}
.kcaret{display:none}
.kbody{padding:2px 6px 22px 42px}
.kdesc{font-size:12px;color:var(--muted);margin-bottom:12px}
.kcrit h4{color:var(--muted);font-weight:600;margin-bottom:4px;font-size:11px}
.kcrit ul{margin:0 0 14px;padding-left:16px;font-size:12px;color:#3a4a58}
.kcrit li{margin:2px 0}

/* F. 答题 */
.quiz{background:#f7fafc;border:1px solid #e8eef4;border-radius:8px;padding:14px}
.qlabel{font-size:11px;color:var(--muted);margin-bottom:6px}
.qprompt{font-size:13px;line-height:1.75;margin-bottom:12px}
.opts{display:flex;flex-direction:column;gap:7px}
.opt{padding:9px 12px;border:1px solid var(--line);background:#fff;border-radius:6px;text-align:left;font-size:13px;line-height:1.6}
.opt:hover{border-color:#b9cfe2;background:#f6f9fb}
.opt.ok{border-color:#7fb287;background:#f0f8f1;color:#2c6a37}
.opt.bad{border-color:#d99a9a;background:#fdf2f2;color:#a03b3b}
.opt[disabled]{cursor:default}
.fillrow{display:flex;gap:8px}
.fillrow input{flex:1;min-width:0;padding:9px 12px;border:1px solid var(--line);border-radius:6px;background:#fff}
.fillrow input[disabled]{background:#f2f5f8;color:#7c8b99}
.fillrow button[disabled]{background:#f2f5f8;border-color:#e4ebf1;color:#9aa8b4;cursor:default}
.qres{margin-top:12px;font-size:12.5px;line-height:1.8;padding-top:11px;border-top:1px dashed #dde5cd}
.qres.ok strong{color:#3c7a4a}
.qres.bad strong{color:#a8433f}
.qres span{color:#7c8a71}
.qround{margin-top:16px;padding-top:16px;border-top:1px solid #e2eaf1}
.qmore{margin-top:12px}
.qnote{margin-top:12px;font-size:12px;line-height:1.7;padding:9px 12px;border-radius:6px}
.qnote.mid{background:#fdf9ef;color:#8a6a24;border:1px solid #ecdcb6}
.qnote.bad{background:#fdf3f3;color:#8f3b3b;border:1px solid #e8c4c4}

.ksource{margin-top:26px;font-size:11.5px;line-height:1.8;color:#8b997b}
.ksource a{color:#476342}

@media(max-width:1120px){
 .heading-sem{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px}
 .heading-sem .heading-title{width:100%}
 .heading-sem .filters{margin:0;flex-wrap:wrap}
 .heading-sem .search{width:252px;margin:0 0 0 auto}
}
@media(max-width:600px){
 .heading-sem .search{width:100%;margin:10px 0 0}
 .kbooks,.kbooks.is-few{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
 .kbook-card,.kbooks.is-few .kbook-card{min-height:122px;padding:0}
 .kbook-main,.kbooks.is-few .kbook-main{padding:13px 6px 12px 14px;justify-content:flex-start}
 .kbook-title,.kbooks.is-few .kbook-title{font-size:13.5px;width:auto}
 .kbook-title em{font-size:12.5px;margin-left:2px}
 .kbook-nums,.kbooks.is-few .kbook-nums{margin-top:auto;padding-top:9px;gap:9px}
 .knum b{font-size:20px;letter-spacing:-.4px}
 .knum i{font-size:9px;letter-spacing:0;white-space:nowrap}
 .kbook-plate,.kbooks.is-few .kbook-plate{width:68px;padding:0}

 .kdrill{gap:10px;flex-wrap:wrap}
 .kdrill-name{font-size:15px}
 .kdrill .count{margin-left:0;width:100%;order:3}
 .krow-head{grid-template-columns:26px minmax(0,1fr) auto;gap:10px;padding:13px 6px}
 .kdom{display:none}
 .kbody{padding-left:6px}
}

/* ============================================================
   周末版 · 本次更新 / 三学段 / 知识详情 / 搜索 / 判题
   ============================================================ */
.update{background:#fff;border:1px solid var(--line);border-radius:8px;padding:18px;margin-bottom:26px;min-width:0}
.update .hint{font-size:12px;color:var(--muted);line-height:1.8}
.update-nums{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:16px 0}
.update-nums>div{background:#f7fafc;border:1px solid #e8eef4;border-radius:8px;padding:12px 10px;min-width:0}
.update-nums b{display:block;font-size:22px;line-height:1.2;color:var(--blue);font-variant-numeric:tabular-nums}
.update-nums i{font-style:normal;font-size:11px;color:var(--muted)}
.stage-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.stage-link{position:relative;display:flex;flex-direction:column;gap:3px;min-width:0;background:#f8fbfd;border:1px solid #dfe9f1;border-radius:8px;padding:13px 30px 13px 14px}
.stage-link:hover{border-color:#b9cfe2;background:#f1f7fc}
.stage-link strong{font-size:15px;color:var(--blue)}
.stage-link small{font-size:11px;color:var(--muted)}
.stage-link>span{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--blue)}
.update-note{font-size:11px;color:#8b9aa7;line-height:1.8;margin-top:14px;overflow-wrap:anywhere}
.update-note a{color:var(--blue)}

/* 首页「本次更新」：本版《天工开物》与「此前已上线」的数学内容分开呈现。
   数字块用独立的 .tg-facts，不占用 .update-nums，老回归脚本的四格断言不受影响。 */
.tg-update{background:#f7fbfd;border:1px solid #dfe9f1;border-radius:8px;padding:16px;margin:0 0 16px;min-width:0}
.tg-update-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.tg-badge{flex:0 0 auto;border-radius:999px;background:var(--blue);color:#fff;font-size:11px;padding:3px 10px;white-space:nowrap}
.tg-update h3{font-size:17px;color:var(--blue)}
.tg-update>p{font-size:13px;line-height:1.9;color:#1a2430;margin:0 0 12px}
.tg-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:12px 0}
.tg-facts>div{background:#fff;border:1px solid #e8eef4;border-radius:8px;padding:11px 10px;min-width:0}
.tg-facts b{display:block;font-size:21px;line-height:1.2;color:var(--blue);font-variant-numeric:tabular-nums}
.tg-facts i{font-style:normal;font-size:11px;color:var(--muted)}
.tg-update p.tg-links{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:12px 0 10px}
.tg-links span{font-size:12px;color:var(--muted)}
.tg-update p.tg-note{font-size:11px;line-height:1.8;color:#8b9aa7;margin:0}
.tg-old{font-size:12px;color:var(--muted);margin:2px 0 10px;padding-top:10px;border-top:1px solid var(--line)}

.kstages{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.kstage{display:inline-flex;align-items:baseline;gap:7px;padding:8px 16px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:14px;color:var(--muted)}
.kstage small{font-size:11px;color:#9aa8b4}
.kstage.active{background:#e6eef5;border-color:#b9cfe2;color:var(--blue);font-weight:600}
/* 学段页签右侧：竖线分隔 + 当前学科「数学」选中标签（旭哥 22:30）。标签是状态标识，不可点，所以不用 :hover */
.kstage-sep{width:1px;height:18px;margin:0 7px;border-radius:1px;background:#c6d2b5;align-self:center}
.kstage-subject{align-items:center;gap:5px;cursor:default;white-space:nowrap;font-weight:600}
.kstage-subject svg{width:11px;height:11px;flex:none;display:block}
.kstage.is-on{background:var(--teal-soft);border-color:var(--line-strong);color:var(--brand)}
.kstage-intro{font-size:12px;color:var(--muted);line-height:1.8;margin:0 0 14px}
.ksearch-note{font-size:12px;color:var(--muted);margin:0 0 14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.kclear{border:1px solid var(--line);background:#fff;border-radius:6px;padding:5px 10px;font-size:12px;color:var(--blue)}
.ksearch-head{font-size:12px;color:var(--muted);margin-bottom:12px}
.ksearch-list{display:flex;flex-direction:column;gap:7px}
.kresult-link{display:flex;flex-direction:column;gap:2px;align-items:flex-start;border-radius:8px;padding:8px 12px;max-width:100%}
.kresult-link strong{font-size:13px;font-weight:600}
.kresult-link small{font-size:11px;color:var(--muted)}
.kempty,.kerror,.kinvalid,.kloading{font-size:13px;line-height:1.8;padding:14px 16px;border-radius:8px;margin:0 0 14px}
.kempty{background:#f7fafc;border:1px solid #e8eef4;color:var(--muted)}
.kloading{background:#f7fafc;border:1px solid #e8eef4;color:#8b9aa7}
.kerror{background:#fdf3f3;border:1px solid #e8c4c4;color:#8f3b3b}
.kinvalid{background:#fdf9ef;border:1px solid #ecdcb6;color:#8a6a24}
.kerror h3,.kinvalid h3{font-size:15px;margin-bottom:6px}
.kerror p,.kinvalid p{margin:6px 0}
.kerror a,.kinvalid a{display:inline-block;margin:4px 8px 0 0;color:var(--blue)}

.ktopic-head{margin:0 0 18px}
.ktopic-head h2{font-size:21px;color:#1d2e3f}
.kflag-note{font-size:12px;line-height:1.8;color:#8a6a24;background:#fdf9ef;border:1px solid #ecdcb6;border-radius:6px;padding:9px 12px;margin-top:8px}
.kflag{font-style:normal;color:#8a6a24}
/* 知识点详情区块（旭哥 22:57）：与册详情列表同一套绿系与字号层级。
   选择器统一带 .ksec 前缀抬到 (0,2,0)，否则会被下方「文字层级」那批 (0,1,0) 规则覆盖。 */
.ksec{background:#fff;border:1px solid #e6ecd9;border-radius:10px;padding:18px 20px;margin:0 0 12px;min-width:0}
.ksec>h3{font-size:14px;font-weight:600;color:#3d5943;letter-spacing:.2px;margin:0 0 12px}
.ksec .hint{font-size:12.5px;color:#7c8a71;line-height:1.8;margin-bottom:10px}
.ksec .kdesc,.ksec .ksrc{font-size:13px;line-height:1.85;color:#4a5a41;overflow-wrap:anywhere}
.ksec .ksrc a{color:#476342}
.ksec .kcrit-list{margin:0;padding-left:18px;font-size:13px;line-height:1.9;color:#4a5a41}
.ksec .kpre-list{display:flex;flex-direction:column;gap:7px;margin:0 0 12px}
.ksec .kpre-label{font-size:11px;color:#8b997b;letter-spacing:.3px}
.ksec .kpre{font-size:13px;color:#476342;background:#f7f9f0;border:1px solid #e6ecd9;border-radius:8px;padding:9px 12px;overflow-wrap:anywhere;transition:background .15s,border-color .15s}
.ksec .kpre:hover{background:#f2f5e9;border-color:#d8e2c6}
.ksec .kpre small{display:block;font-size:11.5px;color:#8b997b;margin-top:3px}

/* 题目卡跟随知识点区块的绿系（旭哥 22:57）。带 .ksec 前缀 (0,2,0)，
   压过上方「纸感卡片」那批 (0,1,0) 分组规则与后面的 .qprompt 颜色声明。 */
.ksec .qitem{background:#f9fbf4;border:1px solid #e6ecd9;border-radius:9px;padding:16px;margin:0 0 12px;min-width:0}
.ksec .qref{background:#f5f7ec}
.ksec .qlabel{font-size:11.5px;color:#8b997b}
.ksec .qprompt{color:#3a4a3a}
.ksec .opt{border-color:#e0e8d3;border-radius:8px}
.ksec .opt:hover{border-color:#b3c79f;background:#f4f7ea}
.ksec .qexplain{border-top-color:#dde5cd;font-size:12.5px;line-height:1.85;color:#4a5a41}
.ksec .qexplain strong{color:#2f3a2c}
.ksec .qexplain summary{color:#476342;font-size:12.5px}
.ksec .fillrow input{border-color:#e0e8d3;border-radius:8px}
.ksec .fillrow input:focus{outline:none;border-color:#b3c79f;box-shadow:0 0 0 3px #4763421f}
.qbadge{font-size:10.5px;border-radius:4px;padding:2px 6px;margin-left:2px}
.qbadge.auto{background:#eaf3ec;color:#2c6a37;border:1px solid #cfe3d3}
.qbadge.ref{background:#f1f0e8;color:#7a6b3e;border:1px solid #e3dec6}
.qprompt{font-size:13.5px;line-height:1.8;overflow-wrap:anywhere}
.pre{white-space:pre-wrap;overflow-wrap:anywhere}
.qresult:empty{display:none}
.qactions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.qactions .secondary{font-size:12px;padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:6px;color:var(--blue)}
.qexplain{margin-top:10px;padding:11px 12px;border-top:1px dashed #dbe4ec;font-size:12px;line-height:1.85;color:#3a4a58}
.qexplain strong{display:block;margin-bottom:6px;color:#1d2e3f}
.qexplain summary{cursor:pointer;color:var(--blue);font-size:12px;margin-bottom:8px}
.qexplain p{margin-top:6px;overflow-wrap:anywhere}
.qres.neutral strong{color:#8a6a24}
.opt-static{cursor:default;background:#fafcfd}
.opt.picked{border-color:#477aa4;background:#eef4f9}
.opt-static .kfig,.opt .kfig{margin:6px 0 0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.kfig{display:block;max-width:100%;margin:8px 0}
.kfig-inner{display:block;max-width:100%}
.kfig-inner svg{display:block;width:100%;max-width:320px;height:auto;max-height:300px}
.kfig-error{font-size:11px;color:#a03b3b;background:#fdf3f3;border:1px solid #e8c4c4;border-radius:6px;padding:8px}

@media(max-width:700px){
 .update-nums{grid-template-columns:repeat(2,minmax(0,1fr))}
 .tg-facts{grid-template-columns:repeat(2,minmax(0,1fr))}
 .tg-update h3{font-size:16px}
 .stage-links{grid-template-columns:1fr}
 .ksec{padding:14px 12px}
 .ktopic-head h2{font-size:18px}
 .kstage{padding:7px 12px;font-size:13px}
 .kstage-sep{height:16px;margin:0 5px}
}

/* 窄屏一行放不下「竖线 + 数学标签」：收起竖线与对勾，把标签压紧，
   否则竖线会孤零零挂在第一行末尾、标签被挤到第二行 */
@media(max-width:480px){
 .kstage-sep{display:none}
 .kstage-subject{padding:7px 14px}
 .kstage-subject svg{display:none}
}

/* 3D 实验室：学段 → 学科 二级分组（小学 / 初中 / 高中） */
.section-head.stage-head{margin:30px 0 14px;padding-bottom:9px;border-bottom:2px solid #d7e2ec;align-items:baseline}
.section-head.stage-head:first-of-type{margin-top:22px}
.section-head.stage-head h2{font-size:22px;letter-spacing:.5px;color:var(--blue)}
.section-head.stage-head .hint{margin:0}
.stage-sub{display:flex;align-items:baseline;gap:8px;margin:16px 0 9px}
.stage-sub h3{font-size:13px;font-weight:600;color:var(--muted);letter-spacing:1px}
.stage-sub .hint{margin:0;font-size:11px}
@media(max-width:600px){
 .section-head.stage-head{margin:24px 0 12px}
 .section-head.stage-head h2{font-size:19px}
}

/* ============================================================
   Figma UI 优化 · 视觉对齐覆盖块（2026-11-11）
   唯一配色来源 /tokens.css。这里只覆盖颜色 / 字体 / 圆角 / 描边 /
   阴影 / 交互态，不改任何布局属性，避免破坏既有响应式与 tests/
   里的旧选择器断言。类名一律沿用旧名，不新增、不重命名。
   回退：删除本块，并还原文件首行 :root 与侧栏那 6 处改动。
   规范正本见 20261111-前端UI设计规范.md。
   ============================================================ */
html{background:var(--bg)}
body{color:var(--text);font-family:var(--font-sans)}
::selection{background:var(--selection);color:var(--text-strong)}
h1{font-size:25px;font-family:var(--font-serif);font-weight:600;letter-spacing:.5px;color:var(--text-strong)}
h2{font-size:18px;font-weight:500;color:var(--text-strong)}
h3{font-size:14px;font-weight:500}
a{transition:color var(--ease) ease}

/* 顶栏面包屑（本轮唯一新增 DOM） */
.topbar{height:var(--topbar-h);display:flex;align-items:center;padding:0 32px;background:var(--topbar);border-bottom:1px solid var(--sidebar-line)}
.breadcrumb{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.breadcrumb a{color:var(--muted)}
.breadcrumb a:hover{color:var(--brand)}
.breadcrumb strong{font-weight:500;color:var(--text)}

/* 共享壳：侧栏与移动端顶/底栏 */
.sidebar nav a,.sidebar>button{transition:background var(--ease) ease,color var(--ease) ease}
.sidebar nav a:hover{background:var(--sage);color:var(--brand)}
.sidebar>button:hover{color:var(--brand)}
.brand,.brand small{color:var(--brand)}
.main{background:var(--bg)}
.mobile-header{background:var(--topbar);border-bottom:1px solid var(--sidebar-line)}
.mobile-header button{border-color:var(--line);background:var(--paper);color:var(--brand)}
.mobile-nav{background:var(--sidebar);border-top:1px solid var(--sidebar-line)}
.mobile-nav a.active{color:var(--brand)}
.eyebrow{color:var(--brand);letter-spacing:1px}

/* 容器：纸感卡片、细描边、10px 圆角、克制阴影 */
.search,.field,.card,.collection,.rail,.notice,.update,.tg-update,
.ksec,.qitem,.kbook-card,.stage-link,.chip,.secondary,.primary,dialog,
.update-nums>div,.tg-facts>div,.kpre,.qref,.opt-static,.kempty,.kloading{
 background:var(--paper);border:1px solid var(--line);border-radius:var(--radius)}
.card img,.placeholder{background:var(--hero)}
.placeholder{color:var(--brand);background:var(--teal-soft)}
.update-nums>div,.tg-facts>div,.stage-link,.rail,.qref,.opt-static{background:var(--sage)}
.notice{background:var(--gold-bg)}
dialog{color:var(--text);box-shadow:var(--shadow-lg)}
dialog::backdrop{background:rgba(61,89,67,.42)}
label input,label select,label textarea{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm)}
.field:focus-within{border-color:var(--line-strong);box-shadow:0 0 0 3px var(--teal-soft)}
.search input,.field select{color:var(--text)}
.search button{background:none;border:0;color:var(--brand)}

/* 文字层级与链接 */
.copy h3,.kbook-title,.collection h3,.ktopic-head h2,.section-head.stage-head h2,.qexplain strong{color:var(--text-strong)}
.copy p,.meta,.hint,.about p,.rail p,.back,.kstage,.chip,.kempty,.kloading,
.kstage-intro,.ksearch-note,.ksearch-head,.kresult-link small,.kpre small,
.update .hint,.update-note,.tg-update>p,.tg-old,.tg-update p.tg-note,
.stage-link small,.collection p,.collection .meta,.stage-sub h3{color:var(--muted)}
.kdesc,.ksrc,.kcrit-list,.qprompt,.qexplain{color:var(--text)}
.more-link,.back a,.section-head a,.kclear,.ksrc a,.qexplain summary,.kpre,
.update-nums b,.tg-facts b,.stage-link strong,.update-note a,.kerror a,.kinvalid a{color:var(--brand)}
.badge,.qbadge.ref{background:var(--gold-bg);border-color:var(--line);color:var(--gold)}
.tg-badge{background:var(--brand);color:var(--paper)}
.count,.copy .meta{color:var(--muted)}

/* 按钮、选中态、悬停位移 */
.primary{background:var(--brand);border-color:var(--brand);color:var(--paper);border-radius:var(--radius-sm)}
.secondary{border-radius:var(--radius-sm);color:var(--brand)}
.card:hover,.collection:hover,.kbook-card:hover,.stage-link:hover{
 background:var(--teal-soft);border-color:var(--line-strong);
 transform:translateY(calc(-1 * var(--lift)));
 transition:transform var(--ease) ease,background var(--ease) ease,border-color var(--ease) ease}
.chip.active,.kstage.active,.steps button[aria-pressed="true"]{background:var(--teal-soft);border-color:var(--line-strong);color:var(--brand)}
.chip.pending,.card.pending,.collection.pending,.kbook-card.is-b{background:var(--sage);color:var(--muted)}
.opt.picked{border-color:var(--brand);background:var(--teal-soft)}
.qactions .secondary{background:var(--paper);border-color:var(--line);color:var(--brand)}
.toast{background:var(--brand);color:var(--paper);border-radius:var(--radius)}
footer{border-top-color:var(--line);color:var(--muted)}
.section-head.stage-head{border-bottom-color:var(--line-strong)}
.qexplain{border-top-color:var(--line)}

/* 语义状态：保留红 / 金 / 绿三套，只换底与描边 */
.kerror,.kfig-error{background:var(--red-bg);border-color:var(--line);color:var(--red)}
.kinvalid,.kflag-note,.qres.neutral strong,.kflag{background:var(--gold-bg);border-color:var(--line);color:var(--gold)}
.qbadge.auto{background:var(--green-bg);border-color:var(--line);color:var(--brand)}

@media(max-width:960px){.topbar{height:48px;padding:0 16px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
