/* academy.css —— 课程/课题模块页级组件（L3 上收，2026-07-19）。
   原先分散内嵌在 10 个 academy 模板的 <style> 里，违反「app 内禁自带 CSS」红线。
   与 forum.css 同规格：模块表，由 academy 各页 extra_head 引入；选择器带页级前缀，
   迁入后不改特异性。公共件（.card/.chip/.heatbar/.page-hero）仍走 app.css。

   ★★ 版心（2026-08-06 收敛）——本表**一律不写 max-width 做版心**。
   app.css §15 早已定下「版心三档」：`.wrap`（main 基线）/ `.read-col` 820 / `.form-col(-wide)` 420·560，
   并写明「新页一律用类，不要再写内联 max-width」。而 academy 是全站唯一没跟上的模块：
   12 个页面各写各的（var(--maxw) / 940 / 900 / 860 / 840 / 680 / 640），
   桌面 1440 实测**正文左缘出现 5 种**（164 / 270 / 290 / 300 / 510），
   而 page-hero 的左缘恒为 164 ⇒ **每翻一页，页头与正文就错开一次**，正是用户报的「排版错乱」。
   ⇒ 现在页级类只负责 margin-bottom，宽度全部由三档类给：
     · 宽页（wrap 基线）＝ list / topics / topic_courseware / watch
     · 阅读栏 .read-col   ＝ topic_detail / block_detail / topics_hot / course / settlements / ops
     · 表单栏 .form-col-wide ＝ apply / topic_propose
   ⛔ 新增 academy 页面照此办理，不要再回到逐页 max-width。 */

/* 页级容器：只给下边距；宽度由 .wrap / .read-col / .form-col-wide 三档决定（见上）。
   ⚠ 2026-08-07：由 `margin-left:auto`（居中）改为 **左对齐**。
   居中会让 820/560 的窄容器在 1112 版心里左缘落到 310/416，而页头 h1 与子导航都在 164
   ⇒ 每翻到一个窄页，正文就比页头右缩 146px（用户实报「页面宽度不对」）。
   ⛔ 只改 academy 自己的页级容器，不动全站 .read-col/.form-col-wide 的居中语义。 */
.ac,.tm,.hot,.td,.bd-body,.cs-body,.tp-body,.tw-wrap,.ops,.ac-form{margin-left:0;margin-right:auto}
.ac{margin-bottom:56px} .tm{margin-bottom:60px} .hot{margin-bottom:50px} .td{margin-bottom:50px}
.bd-body{margin-bottom:60px} .cs-body{margin-bottom:56px} .tp-body{margin-bottom:60px}
.ops{margin-bottom:50px} .ac-form{margin-bottom:56px}

/* ===== block_detail.html ===== */
/* 板块详情：课题大纲 related 引用整个板块时的落点（原先无页面，19 处死链）。
   与 topics.html 视觉语言一致（.tm-code/.chip-lv），去掉手风琴交互——单板块无需折叠。 */

.bd-mod{margin-bottom:26px}
.bd-mh{display:flex;align-items:center;gap:11px;font-family:var(--mono);font-size:11.5px;
  letter-spacing:.1em;color:var(--muted);margin-bottom:8px}
.bd-mh .mc{color:var(--sect-academy);font-weight:800;font-size:12.5px}
.bd-mh b{font-size:13.5px;font-weight:700;color:var(--ink);letter-spacing:0}
.bd-mh .ln{flex:1;height:1px;background:var(--line)}
.bd-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--line);
  border-radius:10px;background:var(--card);margin-bottom:6px;text-decoration:none;color:var(--ink)}
.bd-row:hover{border-color:var(--sect-academy)}
.bd-code{font-family:var(--mono);font-size:11px;color:var(--muted);flex:none;width:52px}
.bd-tt{flex:1;min-width:0;font-size:13.5px;font-weight:600}
.bd-meta{display:flex;align-items:center;gap:8px;flex:none}
.tm-hear{font-family:var(--mono);font-size:12px;font-weight:700;white-space:nowrap;
  border-radius:999px;padding:6px 13px;display:inline-flex;align-items:center;gap:5px;line-height:1;
  color:var(--muted);background:var(--soft);border:1px solid var(--line)}

/* ===== course.html ===== */
/* 课程页：深色页头 + 购买栏 + 章节表。直引站点令牌（暗色由 tokens.css 全局翻转，本页不自维护）。 */

.cs-buy{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.cs-price b{font-family:var(--mono);font-size:27px;font-weight:800;color:var(--c-hot);
  line-height:1;font-variant-numeric:tabular-nums;display:block}
.cs-price.free b{color:var(--ok)}
.cs-price small{display:block;font-size:11.5px;font-weight:600;
  color:var(--muted);margin-top:6px;letter-spacing:.02em}
.cs-owned{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cs-refund{font-size:11.5px;padding:3px 10px;color:var(--muted)}
.cs-note{display:flex;align-items:center;gap:12px;justify-content:space-between;flex-wrap:wrap;margin-bottom:14px}
.cs-note p{margin:0;font-size:13px;color:var(--muted);line-height:1.6;flex:1;min-width:220px}
.cs-sum{font-size:14px;line-height:1.75;color:var(--ink-2);margin-bottom:14px}
.cs-rows{display:grid;gap:8px}
.cs-row{display:flex;align-items:center;gap:13px;padding:12px 14px;border:1px solid var(--line);
  border-radius:10px;background:var(--card);text-decoration:none;color:var(--ink);transition:border-color .15s}
.cs-row:hover{border-color:var(--sect-academy)}
.cs-no{font-family:var(--mono);font-size:12px;font-weight:800;color:var(--sect-academy);
  background:var(--warm-soft);border-radius:7px;width:26px;height:26px;display:grid;place-items:center;flex:none}
.cs-t{flex:1;min-width:0;font-size:13.5px;font-weight:600;line-height:1.4}
.cs-meta{display:flex;align-items:center;gap:9px;flex:none}
.cs-dur{font-family:var(--mono);font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.cs-row svg.cs-lock{width:15px;height:15px;color:var(--muted);flex:none}
.cs-comp{display:flex;flex-wrap:wrap;gap:8px}
.cs-comp a{font-size:12.5px;padding:6px 12px;border-radius:8px;background:var(--cool-soft);
  color:var(--c-cool);font-weight:600;text-decoration:none}
.cs-comp a:hover{background:var(--c-cool);color:#fff}
@media(max-width:680px){
  .cs-price{font-size:23px}
  .cs-row{padding:11px 12px;gap:10px}
  .cs-t{font-size:13px}
}

/* ===== list.html ===== */
/* 页级别名 → 站点令牌（暗色由 tokens.css 全局翻转，本页零硬编码色）。 */
.ac-head{margin:32px 0 4px}
.ac-head h1{margin:6px 0 0;line-height:1.15}
.ac-sub{color:var(--muted);font-size:14.5px;margin-top:8px;max-width:60ch}

/* 图标徽章：把裸 emoji 收进圆角软底，观感统一（勿再页面到处飘 emoji） */
.ac-ico{width:42px;height:42px;border-radius:12px;display:inline-flex;align-items:center;
  justify-content:center;font-size:22px;line-height:1;flex:none}
.ac-ico.cool{background:var(--cool-soft)} .ac-ico.warm{background:var(--warm-soft)}
.ac-ico.hot{background:var(--hot-soft)}

/* 主特性带：左文右数据，两侧都填满 → 平衡对称（取代原 1.4:1 空右卡） */
.ac-band{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:16px;
  background:linear-gradient(135deg,var(--cool-soft),var(--cyan-soft));
  padding:26px 28px;display:grid;grid-template-columns:1.55fr auto;gap:30px;align-items:center;margin:22px 0 16px}
.ac-band::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--spectrum)}
.ac-band h2{margin:6px 0 0;font-size:23px;font-weight:800;letter-spacing:-.3px}
.ac-band .desc{color:var(--ink-2);font-size:14px;margin:9px 0 16px;line-height:1.65;max-width:52ch}
.ac-band .cta{display:flex;gap:10px;flex-wrap:wrap}
.ac-band .head-row{display:flex;align-items:center;gap:11px}
.ac-stats{display:grid;grid-template-columns:repeat(3,minmax(84px,1fr));gap:10px;min-width:290px}
.ac-stats.one{grid-template-columns:minmax(120px,1fr);min-width:150px}
.ac-stats .metric-tile{text-align:center}
.ac-stats .metric-tile .v{font-size:26px}
.ac-stats .metric-tile .k{margin-top:2px}
/* 讲义带：与课题市场带同构，换暖标底色区分「现在就能读」vs「需求撮合」 */
.ac-band.cw{background:linear-gradient(135deg,var(--warm-soft),var(--hot-soft))}

/* 供需对偶：两张等宽卡 → 对称 */
.ac-duo{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:8px}
.ac-mini{border:1px solid var(--line);border-radius:14px;background:var(--card);padding:20px 20px;
  text-decoration:none;color:var(--ink);display:flex;flex-direction:column;gap:6px;transition:.15s}
.ac-mini:hover{border-color:var(--c-cool);transform:translateY(-2px);box-shadow:var(--shadow)}
.ac-mini .head-row{display:flex;align-items:center;gap:11px}
.ac-mini h3{margin:0;font-size:16.5px;font-weight:750}
.ac-mini p{color:var(--muted);font-size:13px;line-height:1.6;flex:1;margin:2px 0 4px}
.ac-mini .go{color:var(--c-cool);font-weight:700;font-size:13px}

/* 区段标题 */
.ac-sec{margin:28px 0 12px;font-size:16px;font-weight:750;display:flex;align-items:center;gap:9px}
.ac-sec .n{font-family:var(--mono);font-size:12px;color:var(--muted);font-weight:500;margin-left:auto}

/* 直播行 */
.ac-live{border:1px solid var(--line);border-left:3px solid var(--c-hot);border-radius:11px;
  padding:13px 16px;margin-bottom:8px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;align-items:center}
.ac-live .t{font-weight:700}
.ac-live .m{color:var(--muted);font-size:12.5px}

/* 课程网格 */
.ac-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(256px,1fr));gap:14px}
.ac-course{border:1px solid var(--line);border-radius:13px;background:var(--card);padding:16px 17px;
  text-decoration:none;color:var(--ink);display:flex;flex-direction:column;gap:9px;transition:.15s}
.ac-course:hover{border-color:var(--c-cool);transform:translateY(-2px);box-shadow:var(--shadow)}
.ac-course h3{margin:0;font-size:16px;font-weight:700;line-height:1.35}
.ac-course .sum{color:var(--muted);font-size:12.5px;flex:1;line-height:1.55}
.ac-cfoot{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;
  border-top:1px solid var(--line);padding-top:10px}
.ac-price{font-family:var(--mono);font-weight:700;color:var(--c-hot)}

@media (max-width:760px){
  .ac-band{grid-template-columns:1fr;gap:20px;padding:22px 20px}
  .ac-stats{min-width:0}
  .ac-duo{grid-template-columns:1fr}
}
@media (max-width:400px){ .ac-stats .metric-tile .v{font-size:22px} }

/* ===== ops_matchmaking.html ===== */
/* 页级别名 → 站点令牌（暗色由 tokens.css 全局翻转）。 */
.ops-zh{margin:24px 0 12px;font-size:13px;font-weight:700;display:flex;align-items:center;gap:8px}
.ops-pip{width:8px;height:8px;border-radius:50%}
.ops-pip.crowd{background:var(--c-warm)}.ops-pip.nom{background:var(--c-hot)}
.ops-n{font-family:var(--mono);font-size:12px;color:var(--muted);margin-left:auto;font-weight:400}
.ops-card{border:1px solid var(--line);border-radius:12px;background:var(--bg);padding:14px 16px;margin-bottom:9px;display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.ops-card:hover{border-color:var(--c-cool)}
.ops-card.crowd{border-left:3px solid var(--c-warm)}.ops-card.nom{border-left:3px solid var(--c-hot)}
.ops-ci{flex:1;min-width:210px}
.ops-ci a{font-weight:650;font-size:14.5px;color:var(--ink);text-decoration:none}
.ops-ci a:hover{color:var(--c-cool)}
.ops-meta{color:var(--muted);font-size:12px;margin-top:4px}
.ops-meta code{font-family:var(--mono);font-size:11px}
.ops-fbar{display:inline-block;width:90px;height:6px;border-radius:4px;background:var(--line);overflow:hidden;vertical-align:middle;margin:0 4px}
.ops-fbar i{display:block;height:100%;background:var(--c-warm)}

/* ===== topic_courseware.html ===== */
/* 讲义阅读页：长文（3000~4000 字/ 5~6 讲）阅读体验。正文走公共 .prose 组件，
   页级 CSS 只留布局、目录、阅读进度三件本页专有物。 */
.tw-prog{position:fixed;top:0;left:0;height:3px;width:0;z-index:60;
  background:linear-gradient(90deg,var(--c-cool),var(--sect-academy));transition:width .1s linear}
.tw-wrap{margin-bottom:60px}
.tw-layout{display:grid;grid-template-columns:minmax(0,1fr) 232px;gap:26px;align-items:start;margin-top:16px}
.tw-main{min-width:0;max-width:820px}

/* 正文首个 h1 与 hero 标题重复（讲义 .md 自带标题），隐藏避免同屏出现两次 */
.tw-main .prose > h1:first-child{display:none}
/* 讲义元信息块（.md 开头的引用块）：从灰底引用升级为可扫读的信息卡 */
.tw-main .prose > blockquote:first-of-type{border-left:0;background:var(--soft);
  border:1px solid var(--line);border-radius:var(--radius-sm);padding:13px 16px;margin:0 0 1.6em;
  font-size:13px;line-height:1.9;color:var(--ink-2)}
.tw-main .prose > blockquote:first-of-type strong{color:var(--ink)}

/* 目录：桌面右侧吸顶；当前阅读章节高亮 */
/* ⛔ 侧栏必须能撑满整列，sticky 才有粘性范围可走：
   .tw-layout 上的 align-items:start 会把 grid 子项高度塌缩到内容高度，
   于是 position:sticky 立刻走到头 ⇒ 读到正文中段目录就消失了（实测 2400px 处已不见）。 */
.tw-tocwrap{align-self:stretch}
.tw-toc{position:sticky;top:82px}
.tw-toc summary{list-style:none;cursor:pointer}
.tw-toc summary::-webkit-details-marker{display:none}
.tw-toc h4{margin:0;display:inline;font-family:var(--mono);font-size:10px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--muted);font-weight:700}
.tw-toc ol{list-style:none;margin:10px 0 0;padding:0;max-height:70vh;overflow-y:auto}
.tw-toc li{margin:0}
.tw-toc a{display:block;padding:6px 10px;border-left:2px solid var(--line);font-size:12.5px;
  line-height:1.5;color:var(--muted);text-decoration:none;transition:.15s}
.tw-toc a:hover{color:var(--ink);background:var(--soft)}
.tw-toc a.on{color:var(--sect-academy);border-left-color:var(--sect-academy);font-weight:600}
.tw-toc a.sub{padding-left:20px;font-size:12px}

.tw-foot{margin-top:26px;padding-top:14px;border-top:1px dashed var(--line);
  display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}
.tw-back{color:var(--muted);font-size:12.5px}
.tw-lock{text-align:center;font-size:12.5px;color:var(--muted);margin:0 0 -4px}

/* ≤1024 平板/手机：单列，目录移到正文上方并默认折叠（JS 控 open），不占首屏 */
@media (max-width:1024px){
  .tw-layout{grid-template-columns:1fr;gap:14px}
  .tw-main{max-width:none;order:2}
  .tw-tocwrap{order:1}
  .tw-toc{position:static;padding:13px 16px}
  .tw-toc ol{max-height:none}
  .tw-toc summary{display:flex;align-items:center;justify-content:space-between}
  .tw-toc summary::after{content:"展开";font-family:var(--mono);font-size:10.5px;color:var(--sect-academy)}
  .tw-toc[open] summary::after{content:"收起"}
}
@media (max-width:680px){
  /* 示意图标签密集，等比缩到 ~360px 后字号只剩一半会读不清；
     改为按最小可读宽度横向滚动（沿用站内 .prose-scroll 对宽表格的同款处理）。 */
  .tw-main .prose figure{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .tw-main .prose figure img{min-width:600px}
  .tw-main .prose figcaption{position:sticky;left:0}
  .tw-main .prose{font-size:15px}
  .tw-main .prose h2{font-size:18px}
  .tw-main .prose h3{font-size:15.5px}
  .tw-foot{flex-direction:column;align-items:flex-start;gap:8px}
}

/* ===== topic_detail.html ===== */
/* 课题详情=三向撮合枢纽。直引站点令牌（单一光谱真相；暗色由 tokens.css 全局翻转，本页不再自维护）。 */
.td-page{background:var(--bg);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.td-head{padding:18px 20px 16px;border-bottom:1px solid var(--line)}
.td-code{font-family:var(--mono);font-size:12px;color:var(--c-cool);font-weight:650}
.td-title{font-size:22px;font-weight:750;letter-spacing:-.01em;margin:5px 0 9px;line-height:1.3}
.td-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.td-sum{color:var(--muted);font-size:13.5px;margin:12px 0 0;line-height:1.65}
.td-sm{padding:13px 20px;border-bottom:1px solid var(--line);background:var(--soft)}
.td-zone{padding:16px 20px;border-bottom:1px solid var(--line)}
.td-zone:last-child{border-bottom:0}
.td-zone h4{margin:0 0 12px;font-size:13px;font-weight:700;display:flex;align-items:center;gap:8px}
.td-pip{width:7px;height:7px;border-radius:50%}
.td-pip.demand{background:var(--c-cool)}.td-pip.supply{background:var(--ok)}.td-pip.claim{background:var(--c-warm)}
.td-course{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--line);border-radius:10px;background:var(--soft);margin-bottom:8px;text-decoration:none;color:var(--ink)}
.td-course:hover{border-color:var(--c-cool)}
.td-thumb{width:40px;height:40px;border-radius:9px;background:var(--c-cool);flex:none;display:grid;place-items:center;color:#fff;font-size:16px}
.td-ci{flex:1;min-width:0}.td-ci b{font-size:13.5px;display:block}.td-ci small{color:var(--muted);font-size:11.5px}
.td-price{font-family:var(--mono);font-weight:700;color:var(--c-hot);white-space:nowrap}
.td-fund{display:flex;align-items:center;gap:11px;margin-bottom:12px}
.td-fund .heatbar{flex:1}
.td-fnum{font-family:var(--mono);font-size:12.5px;color:var(--muted);white-space:nowrap}
.td-fnum b{color:var(--c-cool)}
.td-reached{background:var(--ok-soft);color:var(--ok);border-radius:9px;padding:8px 12px;font-size:12.5px;font-weight:600;margin-bottom:12px}
.td-fld{font-size:13px;padding:9px 11px;border:1px solid var(--line);background:var(--soft);border-radius:9px;width:100%;box-sizing:border-box;color:var(--ink)}
.td-hint{font-size:11.5px;color:var(--muted);margin-top:10px;line-height:1.5}
.td-rel{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.td-relc{font-size:11.5px;padding:3px 9px;border-radius:7px;background:var(--cool-soft);color:var(--c-cool)}
/* 课程大纲（结构化 syllabus 渲染） */
.tdo-sub{font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--sect-academy);
  text-transform:uppercase;margin:16px 0 9px}
.tdo-sub:first-of-type{margin-top:2px}
.tdo-obj{list-style:none;margin:0;padding:0;display:grid;gap:7px}
.tdo-obj li{display:flex;gap:9px;font-size:13.5px;line-height:1.55;color:var(--ink-2)}
.tdo-obj li svg{width:16px;height:16px;flex:none;margin-top:2px;color:var(--ok)}
.tdo-secs{margin:0;padding:0;counter-reset:sec;list-style:none;display:grid;gap:11px}
.tdo-secs>li{position:relative;padding-left:34px}
.tdo-secs>li::before{counter-increment:sec;content:counter(sec,decimal-leading-zero);position:absolute;left:0;top:0;
  font-family:var(--mono);font-size:12px;font-weight:800;color:var(--sect-academy);
  background:var(--warm-soft);border-radius:7px;width:25px;height:25px;display:grid;place-items:center}
.tdo-secs>li>b{font-size:14px;font-weight:700;color:var(--ink);display:block;margin-bottom:5px;line-height:1.3;padding-top:3px}
.tdo-secs>li>ul{margin:0;padding-left:16px;display:grid;gap:3px}
.tdo-secs>li>ul>li{font-size:12.8px;color:var(--muted);line-height:1.5}
.tdo-concepts{display:flex;flex-wrap:wrap;gap:6px}
.tdo-concepts .chip{background:var(--soft);color:var(--ink-2);font-family:var(--mono);font-size:11.5px}
.tdo-case{background:var(--cool-soft);border-left:3px solid var(--c-cool);border-radius:0 9px 9px 0;
  padding:11px 14px;font-size:13px;line-height:1.6;color:var(--ink-2);margin-top:6px}
.tdo-case b{color:var(--c-cool);font-weight:700}
.tdo-pit{list-style:none;margin:0;padding:0;display:grid;gap:7px}
.tdo-pit li{display:flex;gap:9px;font-size:13px;line-height:1.55;color:var(--ink-2)}
.tdo-pit li svg{width:16px;height:16px;flex:none;margin-top:2px;color:var(--c-hot)}
.tdo-meta{margin-top:16px;padding-top:12px;border-top:1px dashed var(--line);
  font-size:12px;color:var(--muted);line-height:1.7}
.tdo-meta b{color:var(--ink-2)}
/* 加深块：关键公式 / 工具·标准 / 动手做 / 相关课题 */
.tdo-formulas{display:grid;gap:8px}
.tdo-formula{background:var(--soft);border-radius:9px;padding:9px 13px}
.tdo-formula .expr{font-family:var(--mono);font-size:13.5px;font-weight:700;color:var(--ink);line-height:1.4}
.tdo-formula .desc{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.5}
.tdo-chips{display:flex;flex-wrap:wrap;gap:6px}
.tdo-chips .chip{background:var(--soft);color:var(--ink-2);font-size:11.5px}
.tdo-chips.tools .chip{background:var(--cool-soft);color:var(--c-cool)}
.tdo-exercise{background:var(--ok-soft);border-left:3px solid var(--ok);border-radius:0 9px 9px 0;
  padding:11px 14px;font-size:13px;line-height:1.6;color:var(--ink-2)}
.tdo-exercise b{color:var(--ok);font-weight:700}
.tdo-related{display:flex;flex-wrap:wrap;gap:7px}
.tdo-related a{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:5px 11px;border-radius:8px;
  background:var(--cool-soft);color:var(--c-cool);text-decoration:none;font-weight:600;transition:background var(--dur-1) var(--ease)}
.tdo-related a:hover{background:var(--c-cool);color:#fff}
.tdo-related a .c{font-family:var(--mono);opacity:.75;font-size:11px}

/* ===== topic_propose.html ===== */
/* 建题页：温标 page-hero + 公共 .card 表单。页级只留表单栅格。 */

.tp-form{display:grid;gap:16px;padding:20px}
.tp-f label{display:block;font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:6px}
.tp-f .hint{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.5}
.tp-fld{width:100%;box-sizing:border-box;font-size:13.5px;padding:10px 12px;border:1px solid var(--line);
  background:var(--soft);border-radius:9px;color:var(--ink);font-family:inherit;transition:.15s}
.tp-fld:focus{outline:none;border-color:var(--sect-academy);background:var(--card)}
textarea.tp-fld{min-height:84px;resize:vertical;line-height:1.6}
.tp-lv{display:flex;gap:8px;flex-wrap:wrap}
.tp-lv label{display:inline-flex;align-items:center;gap:6px;margin:0;cursor:pointer;font-weight:600}
.tp-lv input{accent-color:var(--sect-academy)}
.tp-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tp-actions .note{font-size:11.5px;color:var(--muted);flex:1;min-width:180px;line-height:1.5}

/* ===== topics.html ===== */
/* 课题市场（旗舰页，v2 重构）：温标 page-hero 开场 + 公共组件（.card/.chip/.chip-lv/.heatbar）。
   页级 CSS 只留布局与本页交互态；卡/胶囊/热度条全部走 app.css 公共件（暗色由 tokens.css 全局翻转）。 */
.tm-layout{display:grid;grid-template-columns:256px minmax(0,1fr);gap:22px;align-items:start;margin-top:14px}
@media (max-width:900px){.tm-layout{grid-template-columns:1fr;gap:12px}}
.tm-aside{position:sticky;top:82px;display:flex;flex-direction:column;gap:12px}
@media (max-width:900px){.tm-aside{position:static}}
.tm-aside .card{padding:15px 16px}
.tm-aside h4{margin:0 0 10px;font-family:var(--mono);font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);font-weight:700}
.tm-search input{width:100%;padding:10px 12px;border:1px solid var(--line);background:var(--soft);border-radius:10px;color:var(--ink);font-size:13.5px;box-sizing:border-box;transition:.15s}
.tm-search input:focus{outline:none;border-color:var(--sect,var(--c-cool));background:var(--card)}
.tm-chips{display:flex;flex-wrap:wrap;gap:7px}
button.tm-chip{cursor:pointer;min-height:30px;padding:4px 12px;transition:.15s;user-select:none}
button.tm-chip:hover{border-color:var(--sect,var(--c-cool))}
button.tm-chip[aria-pressed=true]{background:var(--sect,var(--c-cool));border-color:transparent;color:#fff}
button.tm-chip.chip-lv.l1[aria-pressed=true]{background:var(--c-cool)}
button.tm-chip.chip-lv.l2[aria-pressed=true]{background:var(--c-warm)}
button.tm-chip.chip-lv.l3[aria-pressed=true]{background:var(--c-hot)}
.tm-legend{font-size:12px;color:var(--muted);line-height:2.15}
.tm-legend .chip-lv{min-width:32px;justify-content:center;margin-right:8px}
.tm-legend b{color:var(--ink)}
a.tm-hotlink{display:block;text-align:center;background:var(--hot-soft);border:1px solid transparent;border-radius:var(--radius-sm);
  padding:12px 14px;color:var(--c-hot);font-weight:700;font-size:13.5px;text-decoration:none;transition:.15s}
a.tm-hotlink:hover{filter:brightness(.97);box-shadow:var(--shadow)}

/* 工具行 */
.tm-toolbar{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px;margin-bottom:2px}
.tm-toolbar .n{font-family:var(--mono);font-size:12.5px}
.tm-toolbar .g{margin-left:auto;display:flex;gap:6px}
.tm-lnk{background:none;border:1px solid var(--line);color:var(--sect,var(--c-cool));cursor:pointer;font-size:12.5px;font-weight:600;padding:5px 11px;border-radius:8px;transition:.15s}
.tm-lnk:hover{border-color:var(--sect,var(--c-cool));background:var(--soft)}

/* 板块分组头：mono 编号眉标 + 细线延伸（nw-month 手法），整行可点折叠 */
.tm-bh{display:flex;align-items:center;gap:11px;font-family:var(--mono);font-size:11.5px;letter-spacing:.12em;
  color:var(--muted);margin:24px 0 2px;cursor:pointer}
.tm-block:first-of-type .tm-bh{margin-top:12px}
.tm-bh .bid{color:var(--sect,var(--c-cool));font-weight:800;font-size:12.5px}
.tm-bh b{font-family:inherit;font-size:13.5px;font-weight:750;color:var(--ink);letter-spacing:.03em}
.tm-bh .ln{flex:1;height:1px;background:var(--line);min-width:24px}
.tm-bh .bn{white-space:nowrap}
/* 板块级讲义计数：板块默认收起，不展开也要看得出哪里有内容可读
   （替代此前那个把板块切成两段的「全局有讲义优先」排序，见 views.topic_list） */
.tm-bh .bcw{white-space:nowrap;display:inline-flex;align-items:center;gap:4px;
  color:var(--sect-academy);font-weight:700;letter-spacing:0}
.tm-bh .bcw svg{width:13px;height:13px}
.tm-note{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.55}
.tm-note b{color:var(--sect-academy)}
.tm-caret{transition:transform .2s;color:var(--muted);flex:none}
.tm-block.open .tm-caret{transform:rotate(90deg)}
.tm-bh:focus-visible{outline:2px solid var(--sect,var(--c-cool));outline-offset:3px;border-radius:6px}
.tm-body{display:none}
.tm-block.open .tm-body{display:block}

/* 模块子眉标 */
.tm-mh{display:flex;align-items:baseline;gap:9px;padding:13px 2px 5px;font-size:13px}
.tm-mh .mc{font-family:var(--mono);font-size:11px;color:var(--sect,var(--c-cool));font-weight:700}
.tm-mh b{font-weight:700}
.tm-mh .mn{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--muted)}

/* 课题行：编号 mono ｜ 标题 + chip 行 ｜ 想听（数字 + 迷你 .heatbar）；悬停染学院温标色 */
.tm-topic{display:grid;grid-template-columns:58px minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:11px 8px;border-top:1px dashed var(--line);transition:background .12s}
.tm-topic:hover{background:var(--soft)}
.tm-code{font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.tm-tt{font-size:14px;font-weight:600;line-height:1.45;min-width:0;text-decoration:none;color:var(--ink)}
.tm-topic:hover .tm-tt{color:var(--sect,var(--c-cool))}
.tm-sub{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px;align-items:center}
.tm-hearcell{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.tm-hearcell .heatbar{width:72px}

/* 想听胶囊（_hear_inline.html 复用挂钩，HTMX swap 目标） */
.tm-hear,.tm-hearbtn{font-family:var(--mono);font-size:12px;font-weight:700;white-space:nowrap;text-decoration:none;
  border-radius:999px;padding:6px 13px;display:inline-flex;align-items:center;gap:5px;line-height:1}
.tm-hear{color:var(--muted);background:var(--soft);border:1px solid var(--line)}
.tm-hearbtn{color:var(--c-cool);background:var(--cool-soft);border:1px solid transparent;cursor:pointer;transition:.15s}
.tm-hearbtn:hover{background:var(--c-cool);color:#fff}

@media (max-width:680px){
  .tm-topic{grid-template-columns:auto minmax(0,1fr)}
  .tm-code{align-self:start;padding-top:2px}
  .tm-hearcell{grid-column:2;flex-direction:row;align-items:center;justify-self:start}
  .tm-bh b{letter-spacing:0}
}

/* ===== topics_hot.html ===== */
/* 热度榜（v2）：温标 page-hero 开场 + 公共组件（.chip-lv/.heatbar）；页级只留榜单行布局。 */
.hot-row{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card);margin-bottom:8px;text-decoration:none;color:var(--ink);transition:border-color .15s}
.hot-row:hover{border-color:var(--c-hot)}
.hot-rank{font-family:var(--mono);font-weight:800;font-size:20px;text-align:center;color:var(--muted)}
.hot-row.top .hot-rank{color:var(--c-hot)}
.hot-t{font-size:14.5px;font-weight:500;min-width:0}
.hot-t code{font-family:var(--mono);font-size:11px;color:var(--muted);margin-left:6px}
.hot-t .chip-lv{margin-left:6px;font-size:10.5px;padding:1px 7px}
.hot-m{display:flex;flex-direction:column;align-items:flex-end;gap:5px;font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}
.hot-m b{color:var(--c-hot);font-size:15px}
.hot-m .heatbar{width:72px}
@media (max-width:680px){.hot-row{grid-template-columns:34px minmax(0,1fr) auto}.hot-rank{font-size:16px}}

/* ===== watch.html ===== */
/* 播放页：播放器为主，目录随行。直引站点令牌（暗色由 tokens.css 全局翻转）。 */
.wt-grid{display:grid;grid-template-columns:1fr 288px;gap:20px;align-items:start}
.wt-stage{padding:0;overflow:hidden;position:relative}
.wt-player{width:100%;aspect-ratio:16/9;background:#000}
.wt-mark{position:absolute;top:10px;right:12px;color:rgba(255,255,255,.45);font-family:var(--mono);
  font-size:12px;pointer-events:none;z-index:5}
.wt-hint{color:var(--muted);font-size:12px;margin:8px 0 0;line-height:1.6}
.wt-gate{display:flex;align-items:flex-start;gap:14px;padding:22px}
.wt-gate div{flex:1;min-width:0}
.wt-gate b{display:block;font-size:14.5px;margin-bottom:5px}
.wt-gate p{margin:0;font-size:13px;color:var(--muted);line-height:1.65}
.wt-gate .btn{margin-top:12px}
.wt-nav{display:flex;justify-content:space-between;gap:10px;margin-top:14px}
.wt-nav a{font-size:12.5px;font-weight:600;color:var(--muted);padding:8px 13px;border:1px solid var(--line);
  border-radius:9px;text-decoration:none;max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wt-nav a:hover{border-color:var(--sect-academy);color:var(--sect-academy)}
.wt-nav a:only-child:last-child{margin-left:auto}
.wt-side{position:sticky;top:82px}
.wt-side h3{margin:0 0 10px;font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--sect-academy)}
.wt-list{display:grid;gap:6px;max-height:62vh;overflow-y:auto}
.wt-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);text-decoration:none;color:var(--ink-2);font-size:13px}
.wt-item:hover{border-color:var(--sect-academy)}
.wt-item.on{border-color:var(--sect-academy);background:var(--warm-soft);color:var(--ink);font-weight:650}
.wt-no{font-family:var(--mono);font-size:11px;font-weight:800;color:var(--muted);flex:none;
  width:20px;text-align:right;font-variant-numeric:tabular-nums}
.wt-item.on .wt-no{color:var(--sect-academy)}
.wt-nm{flex:1;min-width:0;line-height:1.4}
@media(max-width:960px){
  .wt-grid{grid-template-columns:1fr}
  .wt-side{position:static}
  .wt-list{max-height:none}
}

/* ═══════════════════════════════════════════════════════════════
   讲义阅读体验升级（2026-08-07，用户实报「阅读体验糟糕」）
   ⛔ 只用既有令牌，不新增颜色。
   ═══════════════════════════════════════════════════════════════ */

/* ── 阅读元信息条：进度 / 篇幅 / 预计用时。放 h1 之下、正文之上 ── */
.tw-meter{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin:0 0 22px;
  padding-bottom:14px;border-bottom:1px solid var(--line);
  font-family:var(--mono);font-size:11.5px;color:var(--muted);letter-spacing:.02em}
.tw-meter b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.tw-meter .dot{width:5px;height:5px;border-radius:99px;background:var(--sect-academy);flex:none}

/* ── 元信息块：讲义首个 blockquote（课程代码/板块/时长/适合对象/前置/定位）──
   ⛔ 原样是一整段流水文字，标签与值挤在一起没有结构，是全页最难读的一块（用户实报）。
   JS 解析成 dt/dd 后由这里排成两列网格；解析失败则保留原样（下面的 fallback 分支）。 */
.tw-meta{display:grid;grid-template-columns:auto 1fr;gap:9px 16px;margin:0 0 26px;
  padding:18px 20px;background:var(--soft);border-radius:var(--radius);
  border-left:3px solid var(--sect-academy);font-size:14px;line-height:1.7}
.tw-meta dt{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--muted);
  text-transform:uppercase;white-space:nowrap;padding-top:3px}
.tw-meta dd{margin:0;color:var(--ink-2)}
.tw-meta dd b,.tw-meta dd strong{color:var(--ink)}

/* ── 独立公式行：整段就是一条式子时居中成块 ──
   ⚠ 判据在 JS 里且刻意保守（见模板注释）——宁可漏排，也不把正文段落误判成公式。 */
.tw-eq{display:block;margin:1.5em 0;padding:14px 18px;background:var(--soft);
  border-radius:var(--radius-sm);text-align:center;font-size:16.5px;line-height:1.75;
  color:var(--ink);overflow-x:auto}

/* ── 章节分隔：h2 起一节，给它一条发丝线与更大的上间距 ── */
.tw-main .prose h2{margin-top:2.4em;padding-top:1.05em;border-top:1px solid var(--line)}
.tw-main .prose > h2:first-of-type{margin-top:1.2em}
/* 讲次编号感：h2 前挂一枚温标小方块，替代纯文字标题 */
.tw-main .prose h2::before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;
  background:var(--sect-academy);margin-right:10px;vertical-align:middle;transform:translateY(-2px)}

/* ── 目录：加层级与当前位置的可读性 ── */
.tw-toc{border-radius:var(--radius)}
.tw-toc ol{scrollbar-width:thin}
.tw-toc a{border-left-width:2px}
.tw-toc a.on{background:var(--warm-soft)}

/* ── 正文与侧栏的间距在宽屏放大，长文更透气 ── */
@media(min-width:1200px){
  .tw-layout{grid-template-columns:minmax(0,1fr) 250px;gap:40px}
}
/* ≤1024 目录转顶部折叠，正文占满 */
@media(max-width:1024px){
  .tw-layout{grid-template-columns:1fr;gap:14px}
  .tw-tocwrap{order:-1}
  .tw-toc{position:static}
  .tw-meta{grid-template-columns:1fr;gap:2px 0;padding:16px}
  .tw-meta dt{padding-top:10px}
  .tw-meta dt:first-child{padding-top:0}
}
@media(max-width:680px){
  .tw-meter{gap:12px;font-size:11px}
  .tw-eq{font-size:15px;padding:12px 14px;text-align:left}
}
