:root{
  --bg:#0b0d10; --fg:#e8eaed; --dim:#8b94a3; --accent:#ffd166; --rule:#1e242c;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--fg);font-family:var(--sans);overflow:hidden;-webkit-font-smoothing:antialiased}

#stage{position:fixed;inset:0;display:flex;flex-direction:column}
#slide{position:relative;flex:1;display:flex;flex-direction:column;justify-content:center;
  padding:6vh 9vw;overflow:hidden}
#slide video{display:block;margin:0 auto}
#slide .visual{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
#slide .visual-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(11,13,16,.96) 0%,rgba(11,13,16,.7) 38%,rgba(11,13,16,.08) 72%)}
#slide .visual-copy{position:relative;z-index:1;max-width:52vw}
#slide .frag{opacity:0;transition:opacity .45s ease}
#slide .frag.on{opacity:1}
#slide .frag.on.struck{text-decoration:line-through;text-decoration-thickness:.07em;opacity:.34;transition:opacity .35s ease}
/* 先在场、再逐个划掉：每按一下划一格 */
#slide .frag.strike-on{opacity:1;color:var(--fg);text-decoration:line-through;text-decoration-color:transparent;text-decoration-thickness:2px;transition:color .35s ease,text-decoration-color .35s ease}
#slide .frag.strike-on.on{color:var(--dim);text-decoration-color:currentColor}
#slide h1 .sub.real{color:var(--fg)}
@media (prefers-reduced-motion:reduce){#slide .frag{transition:none}}
#slide .visual-caption{position:absolute;right:2.2rem;bottom:2.1rem;z-index:1;color:rgba(232,234,237,.55);font-size:.72rem;letter-spacing:.08em}
.dag{width:100%;height:min(52vh,470px);overflow:visible}
.dag .edge{fill:none;stroke:#4b5868;stroke-width:1.5;opacity:.26}
.dag .edge.hot{stroke:var(--accent);stroke-width:2.8;opacity:.95;stroke-dasharray:10 13;animation:dag-flow 1.8s linear infinite;filter:drop-shadow(0 0 5px rgba(255,209,102,.45))}
.dag .node circle{fill:#11161c;stroke:#526071;stroke-width:1.5}
.dag .node text{fill:#8590a0;font:15px var(--mono);text-anchor:middle;dominant-baseline:middle}
.dag .node.hot circle{fill:#272315;stroke:var(--accent);stroke-width:2.5;animation:dag-pulse 1.8s ease-in-out infinite}
.dag .node.hot text{fill:var(--accent)}
.dag .layer{fill:#778292;font:15px var(--sans);text-anchor:middle;letter-spacing:.08em}
.dag .gate{fill:#141a21;stroke:#4b5868;stroke-width:1.5}
.dag .gate.hot{fill:#242116;stroke:var(--accent);stroke-width:2}
.dag .gate-label{fill:#c3cad6;font:16px var(--sans);text-anchor:middle;dominant-baseline:middle}
@keyframes dag-flow{to{stroke-dashoffset:-46}}
@keyframes dag-pulse{0%,100%{r:15;filter:none}50%{r:18;filter:drop-shadow(0 0 7px rgba(255,209,102,.55))}}
@media (prefers-reduced-motion:reduce){.dag .edge.hot,.dag .node.hot circle{animation:none}}
#slide.has-notes{flex:0 0 58%}
#pres{display:none;position:fixed;inset:0;z-index:70;background:#0b0d10;
  grid-template-rows:auto minmax(0,auto) minmax(0,1fr)}
body.pres #pres{display:grid}
body.pres #stage,body.pres #hud,body.pres #help,body.pres #bar,body.pres #nav,body.pres #ticks{display:none!important}
#pres .top{display:flex;align-items:baseline;gap:1.4rem;padding:.6rem 1.3rem;
  border-bottom:1px solid var(--rule);font-family:var(--mono);font-size:.82rem;color:var(--dim)}
#pres .top .clk{cursor:pointer;user-select:none;-webkit-user-select:none;padding:.1rem .35rem;border-radius:6px;font-size:1.7rem;color:var(--accent);font-variant-numeric:tabular-nums;letter-spacing:.02em}
#pres .top .clk.run{color:#5bd18b}
#pres .top .pg{font-size:1.05rem;color:#e8eaed}
#pres .top .rest{margin-left:auto;font-size:.76rem}
#pres .mid{display:grid;grid-template-columns:1.35fr 1fr;gap:1rem;padding:.9rem 1.3rem 0}
#pres .card{border:1px solid var(--rule);border-radius:9px;padding:.75rem .95rem;overflow:auto;max-height:31vh}
#pres .card h6{font:600 .68rem var(--mono);letter-spacing:.16em;color:#6b7280;margin-bottom:.45rem}
#pres .card.now{border-color:#3a4453}
#pres .card.now .txt{color:#e8eaed;font-size:1.02rem;line-height:1.6}
#pres .card.next .txt{color:var(--dim);font-size:.9rem;line-height:1.55}
#pres .stepno{margin-left:.7rem;font-family:var(--mono);font-size:.8rem;color:var(--accent);opacity:.85}
#pres .modebtn{margin-left:.6rem;border:1px solid var(--rule);background:#12161c;color:var(--dim);
  border-radius:8px;padding:.25rem .7rem;font-size:.78rem;cursor:pointer;flex:0 0 auto}
#pres .modebtn.on{border-color:var(--accent);color:var(--accent)}
#pres .say{padding:1rem 1.3rem 2.5rem;overflow-y:auto;font-size:1.16rem;line-height:1.78}
/* 逐段模式：一屏一段,字要大到抬眼就能扫走 */
#pres .say.stepping{display:flex;flex-direction:column;justify-content:center;
  font-size:clamp(1.7rem,3.1vw,2.6rem);line-height:1.5;padding:1.2rem 2rem 2rem}
#pres .say.stepping.full{justify-content:flex-start}
#pres .say.stepping p{margin:0 0 .5em}
#pres .say.stepping .stage{font-size:.52em;line-height:1.5;opacity:.65;margin-bottom:.8em}
#pres .say.stepping strong{color:var(--accent)}
#pres .say p{margin:0 0 .72em;color:var(--fg)}
#pres .say strong{color:var(--accent);font-weight:600}
#pres .say .stage{color:var(--dim);font-style:italic;font-size:.94em}
#pres .syncdot{width:.55rem;height:.55rem;border-radius:50%;margin-left:.7rem;flex:0 0 auto;background:#4b5563}
#pres .syncdot.live{background:#5bd18b;box-shadow:0 0 6px rgba(91,209,139,.6)}
#pres .syncdot.wait{background:var(--accent)}
#pres .pnav{margin-left:.8rem;display:flex;gap:.5rem}
#pres .pnav button{min-width:3rem;min-height:2.1rem;border:1px solid var(--rule);border-radius:8px;
  background:#12161c;color:var(--fg);font-size:1rem;cursor:pointer;touch-action:manipulation}
#pres .pnav button:active{background:#1c222b}
@media (max-width:760px){
  body.pres{overflow:hidden}
  #pres{grid-template-rows:auto auto minmax(0,1fr);padding-bottom:env(safe-area-inset-bottom)}
  #pres .top{flex-wrap:wrap;gap:.5rem .9rem;padding:.55rem .9rem;position:sticky;top:0;z-index:2;background:#0b0d10}
  #pres .top .clk{font-size:1.35rem}
  #pres .top #pk{flex-basis:100%;order:9;font-size:.7rem;opacity:.75}
  #pres .top .rest{margin-left:0}
  #pres .pnav{margin-left:auto}
  #pres .pnav button{min-width:3.6rem;min-height:2.6rem;font-size:1.15rem}
  #pres .mid{grid-template-columns:1fr;gap:.6rem;padding:.7rem .9rem 0}
  #pres .card{max-height:18vh;padding:.6rem .75rem}
  #pres .card.next{display:none}
  #pres .card.now .txt{font-size:.95rem}
  #pres .say{padding:.85rem .9rem 3rem;font-size:1.24rem;line-height:1.75;-webkit-text-size-adjust:100%}
  #pres .say.stepping{font-size:1.72rem;line-height:1.48;padding:1rem .95rem 2rem}
  #pres .modebtn{padding:.32rem .75rem;font-size:.82rem}
}
@media (max-width:760px) and (orientation:landscape){
  #pres .mid{display:none}
  #pres .say{font-size:1.1rem}
}
#pres .say .callout{border-left:3px solid #3a4453;padding-left:.9rem;color:var(--dim);font-size:.9em;margin:.9em 0}
#script{display:none;position:fixed;inset:0;z-index:60;overflow-y:auto;background:#0b0d10;
  padding:3rem clamp(1.2rem,7vw,7rem) 6rem;font-size:15px;line-height:1.75}
#script.on{display:block}
#script .sum{position:sticky;top:0;background:#0b0d10;border-bottom:1px solid var(--rule);
  padding:.5rem 0 1rem;margin-bottom:2rem;color:var(--dim);font-size:.9rem;letter-spacing:.04em}
#script .sum b{color:var(--accent);font-weight:600}
#script .editbar{float:right;display:inline-flex;align-items:center;gap:.5rem;font-size:.8rem}
#script .editbar #editState{color:var(--dim)}
#script .editbar #editState.dirty{color:var(--accent)}
#script .editbar button{border:1px solid var(--rule);background:#12161c;color:var(--fg);
  border-radius:6px;padding:.2rem .6rem;font-size:.78rem;cursor:pointer}
#script .editbar button:hover{border-color:var(--accent)}
#script .editbar input[type=file]{display:none}
#script .body[contenteditable]{outline:none;border-left:2px solid transparent;padding-left:.6rem;margin-left:-.8rem;transition:border-color .15s}
#script .body[contenteditable]:hover{border-left-color:#2a323d}
#script .body[contenteditable]:focus{border-left-color:var(--accent);background:rgba(255,209,102,.04)}
@media print{ #script .editbar{display:none} #script .body[contenteditable]{border-left:none;padding-left:0;margin-left:0} }
#script section{border-top:1px solid #171d24;padding:1.6rem 0}
#script .chap{color:var(--accent);font-size:1.35rem;font-weight:650;letter-spacing:.02em;
  border-top:2px solid var(--accent);padding-top:1.4rem;margin-top:1.4rem}
#script h5{font:600 .74rem var(--mono);letter-spacing:.14em;color:#6b7280;margin-bottom:.5rem}
#script .id{color:var(--accent);font-family:var(--mono);font-size:.78rem;letter-spacing:.1em}
#script .kk{color:var(--dim);font-size:.78rem;letter-spacing:.1em}
#script .face{color:#c3cad6;background:#11161c;border-left:3px solid #2a323d;
  padding:.6rem .9rem;margin:.5rem 0 1rem;font-size:.86rem;line-height:1.6}
#script .body p{margin:0 0 .7em;color:var(--fg)}
#script .body strong{color:var(--accent);font-weight:600}
#script .body .stage{color:var(--dim);font-style:italic}
#script .body .callout{border-left:3px solid #3a4453;padding-left:.9rem;color:var(--dim);margin:.9em 0}
#script .mins{float:right;color:var(--dim);font-family:var(--mono);font-size:.75rem}
@media print{
  body{background:#fff;overflow:visible}
  #stage,#hud,#help,#bar,#nav,#deckExportStatus{display:none!important}
  #script{position:static;display:block;background:#fff;color:#111;padding:0;font-size:11pt}
  #script .sum{position:static}
  #script .id,#script .chap,#script .body strong{color:#000}
  #script .kk,#script .body .stage,#script .body .callout,#script .mins{color:#555}
  #script .face{background:#f4f4f4;color:#222}
  #script section{border-top:1px solid #ccc;page-break-inside:avoid}
}

.kicker{font-size:1.1rem;line-height:1.4;letter-spacing:.18em;color:var(--dim);margin-bottom:2.2rem;font-weight:500}
h1{font-size:clamp(2.4rem,6.4vw,5.2rem);line-height:1.14;letter-spacing:-.02em;font-weight:700}
h1 .sub{display:block;font-size:.46em;color:var(--dim);font-weight:500;margin-top:1.4rem;letter-spacing:0}
h2{font-size:clamp(1.9rem,4.6vw,3.6rem);line-height:1.28;font-weight:650;letter-spacing:-.01em}
.big{font-size:clamp(2.1rem,5.4vw,4.4rem);line-height:1.25;font-weight:700;letter-spacing:-.015em}
em{font-style:normal;color:var(--accent)}
.c-red{color:#ff7b72}
/* L1-4b 的 benchmark 面板：照实际界面还原，要的是"这是张截图"的感觉 */
.bench{border:1px solid #232b35;border-radius:10px;background:#0e1217;overflow:hidden;font-family:var(--mono);margin-top:1rem}
.bench table{width:100%;border-collapse:collapse;font-size:clamp(.52rem,1.08vw,.82rem);line-height:1.5}
.bench th{color:#6b7280;font-weight:400;text-align:left;padding:.55em .8em;border-bottom:1px solid #232b35}
.bench td{padding:.5em .8em;border-bottom:1px solid #161d25;color:#c3cad6;vertical-align:middle}
.bench tr.hot td{background:#151d27}
.bench tr.hot td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.bench .box{display:inline-block;width:.85em;height:.85em;border:1px solid #39414d;border-radius:2px;vertical-align:-.08em}
.bench .pt{color:#aab4c2;border-bottom:1px solid #39414d;margin-right:.45em}
.bench .chip{display:inline-block;border:1px solid #2a323d;border-radius:999px;padding:.08em .65em;margin:.1em .3em .1em 0;color:#8b94a3}
.bench .btn{display:inline-block;border:1px solid #2a323d;border-radius:5px;padding:.08em .5em;margin-right:.28em;color:#c3cad6}
.bench .btn.off{color:#4a5361;border-color:#20272f}
.bench .pass{color:#5bd18b}
.bench .fail{color:#ff7b72}
.bench .player{display:flex;align-items:center;gap:.9em;padding:.6em .9em;border-top:1px solid #232b35;
  background:#0a0e13;color:#5f6b7d;font-size:clamp(.5rem,1vw,.76rem)}
.bench .player .bar{flex:1;height:3px;background:#232b35;border-radius:2px}

.c-blue{color:#6cb6ff}
.lines{font-size:clamp(1.4rem,3.2vw,2.5rem);line-height:1.62;font-weight:500}
.d{color:var(--dim)}
ul{list-style:none;font-size:clamp(1.3rem,2.9vw,2.2rem);line-height:1.75}
ul li{padding-left:1.5em;text-indent:-1.5em;margin:.28em 0}
ul li::before{content:"·";color:var(--accent);display:inline-block;width:1.5em;text-indent:0;font-weight:700}
.quote{border-left:4px solid var(--accent);padding-left:1.4rem;
  font-size:clamp(1.35rem,3vw,2.3rem);line-height:1.6}
.quote .src{display:block;font-size:.62em;color:var(--dim);margin-bottom:1rem;letter-spacing:.04em}
code,.mono{font-family:var(--mono);color:var(--accent);font-size:.9em}
.ph{border:1px dashed var(--rule);border-radius:10px;padding:3.2rem 2rem;text-align:center;
  color:var(--dim);font-size:clamp(1.1rem,2.2vw,1.6rem);line-height:1.7}
.ph b{color:var(--fg);font-weight:600}
table{border-collapse:collapse;font-size:clamp(1.05rem,2.2vw,1.7rem);width:100%}
td,th{padding:.55em .9em;border-bottom:1px solid var(--rule);text-align:left}
.has-notes table.compact{font-size:clamp(.82rem,1.55vw,1.15rem)}
.has-notes table.compact td,.has-notes table.compact th{padding:.3em .7em}
/* ByteByteGo 原图卡片：白底原样呈现（CC BY-NC-ND，不改色不叠加） */
.bbgfig img.bbg{display:block;width:100%;height:100%;object-fit:contain;background:#fff;border-radius:10px}
/* 八个概念：原图局部卡片，宽度随屏幕走，高度不超过版心 */
.bbgslice{flex:0 0 46%;max-height:62vh;display:flex;align-items:center}
.bbgslice img.bbg{display:block;width:100%;height:auto;max-height:62vh;object-fit:contain;background:#fff;border-radius:10px}
.has-notes .bbgslice{flex-basis:34%}
.has-notes .bbgslice img.bbg{max-height:30vh}
/* 两张局部并排（D2） */
.bbgslice2{flex:1;min-width:0}
.bbgslice2 img.bbg{display:block;width:100%;height:auto;max-height:38vh;object-fit:contain;background:#fff;border-radius:10px}
.has-notes .bbgslice2 img.bbg{max-height:20vh}
/* 内容偏满的页：矮屏（≤ 800px）再收一档 */
@media (max-height:800px){#slide .fit{zoom:.74}}
th{color:var(--dim);font-weight:500;font-size:.82em;letter-spacing:.06em}
:where(td:first-child){color:var(--dim)}
table.lead td:first-child:not([class]){color:var(--fg)}
.prompt{font-family:var(--mono);font-size:clamp(.62rem,1.28vw,1.02rem);line-height:1.62;
  background:#101419;border:1px solid var(--rule);border-radius:10px;padding:1.5rem 1.7rem;
  white-space:pre-wrap;color:#aab4c2;max-height:76vh;overflow:auto}
.prompt .hl{color:var(--accent);font-weight:700;background:rgba(255,209,102,.10);
  display:inline-block;padding:0 .3em;border-radius:3px}
.prompt .cm{color:#5b6675}
.prompt .k{color:#e8eaed}
.prompt.dim{color:#39414d}
.prompt.dim .k,.prompt.dim .cm{color:#333a45}
.strike{text-decoration:line-through;color:var(--dim);text-decoration-thickness:2px}
/* 翻译链：一个概念被一路改名 */
.chain{display:flex;align-items:stretch;gap:.7rem;font-size:clamp(.95rem,1.95vw,1.5rem)}
.chain .n{flex:1;border:1px solid var(--rule);border-radius:9px;background:#101419;padding:.6em .8em;
  color:var(--dim);font-size:.78em;line-height:1.35;text-align:center}
.chain .n b{display:block;margin-top:.25em;color:var(--fg);font-size:1.28em;font-weight:600}
.chain .n.hot{border-color:var(--accent);background:#1c1f18}
.chain .n.hot b{color:var(--accent)}
.chain .a{align-self:center;color:var(--dim);font-size:1.2em}
/* mall4cloud 模块卡片 */
.mods{display:grid;grid-template-columns:repeat(5,1fr);gap:.55rem}
.mod{border:1px solid var(--rule);border-radius:8px;background:#101419;padding:.75em .95em;line-height:1.4}
.mod b{display:block;font-family:var(--mono);font-weight:600;color:var(--fg);font-size:clamp(.78rem,1.55vw,1.28rem)}
.mod span{display:block;color:var(--dim);font-size:clamp(.64rem,1.2vw,1rem);margin-top:.25em}
/* 状态按疆域上色 */
.tag{display:inline-block;border:1px solid var(--c);color:var(--c);border-radius:999px;
  padding:.08em .7em;margin:.14em .3em .14em 0;font-size:.9em;white-space:nowrap}
/* 两块疆域并排 */
.terr{flex:1;border:1px solid var(--rule);border-radius:10px;background:#101419;padding:1.1rem 1.3rem;
  font-size:clamp(.95rem,1.9vw,1.4rem);line-height:1.5}
.terr b{display:block;color:var(--fg);font-weight:600}
.terr span{display:block;color:var(--dim);font-size:.82em;margin-top:.35em}

#notes{display:none;flex:1 1 42%;border-top:1px solid var(--rule);background:#0e1116;
  padding:2.2rem 9vw 2.6rem;overflow-y:auto;font-size:1.02rem;line-height:1.85;color:#c3cad6}
#notes.on{display:block}
#notes p{margin:0 0 .75em}
#notes strong{color:var(--accent);font-weight:600}
#notes .stage{color:var(--dim);font-style:italic}
#notes .callout{border-left:3px solid #3a4453;padding-left:1rem;color:var(--dim);margin:1em 0}
#notes h4{font-size:.78rem;letter-spacing:.16em;color:var(--dim);margin-bottom:1rem;font-weight:600}
#fmtbar{position:fixed;z-index:80;display:none;gap:.35rem;padding:.35rem;border:1px solid var(--rule);
  border-radius:10px;background:#12161c;box-shadow:0 6px 20px rgba(0,0,0,.45)}
#fmtbar.on{display:flex;align-items:center}
#fmtbar .set{display:none;gap:.35rem}
#fmtbar[data-ctx="note"] .set[data-for="note"],
#fmtbar[data-ctx="slide"] .set[data-for="slide"]{display:flex}
#fmtbar button{border:1px solid var(--rule);background:#171d24;color:var(--fg);border-radius:7px;
  padding:.28rem .62rem;font-size:.78rem;cursor:pointer;white-space:nowrap}
#fmtbar button:hover{border-color:var(--accent);color:var(--accent)}
#fmtbar .hint{color:var(--dim);font-size:.7rem;padding:0 .35rem;font-family:var(--mono)}
@media print{#fmtbar{display:none!important}}
#notes .sbtn{margin-left:.8rem;border:1px solid var(--rule);background:#12161c;color:var(--dim);
  border-radius:7px;padding:.16rem .6rem;font-size:.72rem;cursor:pointer;letter-spacing:normal}
#notes .sbtn.on{border-color:var(--accent);color:var(--accent)}
#notes .nstate.warn{color:var(--accent)}
#notes .nstate{margin-left:.7rem;font-size:.72rem;letter-spacing:.04em;color:var(--dim)}
#notes .nstate.on{color:var(--accent)}
#notes .nbody{outline:none;border-left:2px solid transparent;padding-left:.7rem;margin-left:-.9rem;
  border-radius:0 4px 4px 0;transition:border-color .15s,background .15s}
#notes .nbody:hover{border-left-color:#2a323d}
#notes .nbody:focus{border-left-color:var(--accent);background:rgba(255,209,102,.04)}

#bar{position:fixed;top:0;left:0;height:2px;background:var(--accent);transition:width .2s;z-index:5}
#hud #editflag{display:none;background:var(--accent);color:#11161c;font-weight:600;
  font-size:.72rem;letter-spacing:.06em;padding:.14rem .6rem;border-radius:999px;margin-right:.9rem}
body.editing #hud #editflag{display:inline-block}
body.editing #slide{outline:2px dashed rgba(255,209,102,.45);outline-offset:-8px}
#hud #editflag{content:none}
#hud #ovr{color:var(--accent);font-size:.72rem;letter-spacing:.06em;margin-right:.9rem}
#hud{position:fixed;bottom:1.1rem;right:1.4rem;font-family:var(--mono);font-size:.78rem;
  color:var(--dim);z-index:5;display:flex;gap:1.2rem;align-items:center}

#clock{color:var(--dim)}
#clock.run{color:var(--accent)}
#help{position:fixed;bottom:1.1rem;left:1.4rem;font-family:var(--mono);font-size:.72rem;color:#4b5563;z-index:5}
#nav{position:fixed;top:.9rem;left:1.4rem;z-index:6;display:flex;gap:1rem;align-items:center;
  font-family:var(--mono);font-size:.78rem;opacity:.28;transition:opacity .18s}
#nav:hover{opacity:1}
#nav a{color:var(--dim);text-decoration:none;border-bottom:1px solid transparent;padding-bottom:1px}
#nav a:hover{color:var(--accent);border-bottom-color:var(--accent)}
#nav .sep{color:#39414d}
@media print{#nav{display:none}}
@media print{body{overflow:visible}#hud,#help,#bar{display:none}}
/* ═══ 模板库：默认「暗色 · 琥珀」，另有三套可切换（G 键循环 / ?theme=…）═══
   页面内容里的配色一律走下面这组变量，切换主题时实时生效 */
:root{
  --c-panel:#12161c; --c-line:#2a323d; --c-text:#c3cad6; --c-dim:#5f6b7d; --c-edge:#39414d;
  --c-hot-bg:#1c1f18; --c-hot:#ffd166; --c-bad:#ff7b72; --c-er-line:#526071;
  --c-scrim:rgba(11,13,16,.74);
  --t-purple:#c297ff; --t-blue:#6cb6ff; --t-green:#5bd18b;
}
#slide .ht{display:none}
.bbgfig img.bbg,.bbgslice img.bbg,.bbgslice2 img.bbg{border:1px solid var(--rule)}
#pres,#script,#notes,#fmtbar,.export-menu,#deckExportStatus{
  --bg:#0b0d10; --fg:#e8eaed; --dim:#8b94a3; --accent:#ffd166; --rule:#1e242c; color:var(--fg)}
#themeName{position:fixed;left:50%;top:1.1rem;transform:translateX(-50%);z-index:8;
  font-family:var(--mono);font-size:.78rem;letter-spacing:.14em;color:var(--dim);
  opacity:0;transition:opacity .25s ease;pointer-events:none}
#themeName.on{opacity:1}

/* ── 浅色三套共用 ── */
html[data-theme="wave"],html[data-theme="editorial"],html[data-theme="1984"]{
  --c-panel:#fff; --c-line:#c9d2cc; --c-text:#1b2923; --c-dim:#8a978f; --c-edge:#a7b2ab;
  --c-hot-bg:#e3f0f1; --c-bad:#c0392b; --c-er-line:#8a978f; --c-scrim:rgba(244,244,239,.82);
  --t-purple:#7b4bb7; --t-blue:#2463a6; --t-green:#2f8a4f}
html[data-theme="wave"] .prompt,html[data-theme="editorial"] .prompt,html[data-theme="1984"] .prompt{
  background:var(--ink-code);border-color:var(--ink-code);color:#d6e2dc}
html[data-theme="wave"] .prompt .hl,html[data-theme="editorial"] .prompt .hl,html[data-theme="1984"] .prompt .hl{
  color:#f3d27a;background:rgba(243,210,122,.14)}
html[data-theme="wave"] .prompt .cm,html[data-theme="editorial"] .prompt .cm,html[data-theme="1984"] .prompt .cm{color:#86a095}
html[data-theme="wave"] .prompt .k,html[data-theme="editorial"] .prompt .k,html[data-theme="1984"] .prompt .k{color:#fff}
html[data-theme="wave"] .chain .n,html[data-theme="editorial"] .chain .n,html[data-theme="1984"] .chain .n,
html[data-theme="wave"] .mod,html[data-theme="editorial"] .mod,html[data-theme="1984"] .mod,
html[data-theme="wave"] .terr,html[data-theme="editorial"] .terr,html[data-theme="1984"] .terr{
  background:var(--panel);border-color:var(--rule)}
html[data-theme="wave"] .chain .n.hot,html[data-theme="editorial"] .chain .n.hot,html[data-theme="1984"] .chain .n.hot{
  background:var(--panel-hot);border-color:var(--accent)}
html[data-theme="wave"] .tag,html[data-theme="editorial"] .tag,html[data-theme="1984"] .tag{
  background:color-mix(in srgb,var(--c) 7%,transparent)}
html[data-theme="wave"] .c-red,html[data-theme="editorial"] .c-red,html[data-theme="1984"] .c-red{color:#c0392b}
html[data-theme="wave"] .c-blue,html[data-theme="editorial"] .c-blue,html[data-theme="1984"] .c-blue{color:#2463a6}
html[data-theme="wave"] #help,html[data-theme="editorial"] #help,html[data-theme="1984"] #help{color:#9aa6a0}
html[data-theme="wave"] #nav .sep,html[data-theme="editorial"] #nav .sep,html[data-theme="1984"] #nav .sep{color:#b9c2bb}
html[data-theme="wave"] #hud #editflag,html[data-theme="editorial"] #hud #editflag,html[data-theme="1984"] #hud #editflag{color:#fff}

/* ── Wave：米白 + 墨绿 + 青绿半调等高线（参考 Pitch Wave 的风格） ── */
html[data-theme="wave"]{--bg:#f4f4ef;--fg:#1b2923;--dim:#5f6d66;--accent:#0e6e76;--rule:#d7ddd6;
  --panel:#fff;--panel-hot:#e3f0f1;--ink-code:#1d2a24;--c-hot:#0e6e76}
html[data-theme="wave"] h1{font-weight:500;letter-spacing:-.025em}
html[data-theme="wave"] h1 .sub{font-family:var(--mono);font-size:.3em;letter-spacing:.22em;text-transform:uppercase;color:var(--dim);margin-top:1.8rem}
html[data-theme="wave"] .big{font-weight:600;letter-spacing:-.02em}
html[data-theme="wave"] .kicker{font-family:var(--mono);font-size:.82rem;letter-spacing:.2em;color:var(--dim)}
html[data-theme="wave"] #slide .ht{display:block;position:absolute;inset:0;z-index:0;pointer-events:none;
  background-image:radial-gradient(circle,#3f878d 40%,transparent 46%);background-size:7px 7px;opacity:.72;
  -webkit-mask-image:repeating-radial-gradient(ellipse 130% 95% at 104% 118%,#000 0 30px,transparent 30px 62px),radial-gradient(95% 85% at 100% 112%,#000 25%,transparent 72%);
  -webkit-mask-composite:source-in;
  mask-image:repeating-radial-gradient(ellipse 130% 95% at 104% 118%,#000 0 30px,transparent 30px 62px),radial-gradient(95% 85% at 100% 112%,#000 25%,transparent 72%);
  mask-composite:intersect}

/* ── Editorial：米白 / 衣线大标题 / 赭红 ── */
html[data-theme="editorial"]{--bg:#efe9dc;--fg:#1c1a17;--dim:#6b645a;--accent:#9a3b1f;--rule:#d4cab8;
  --panel:#f8f4ea;--panel-hot:#f3e2d6;--ink-code:#23211e;--c-hot:#9a3b1f;
  --serif:"Didot","Bodoni 72","Songti SC","STSong",Georgia,serif}
html[data-theme="editorial"] h1,html[data-theme="editorial"] .big{font-family:var(--serif);font-weight:500;letter-spacing:-.01em}
html[data-theme="editorial"] h1{font-size:clamp(3rem,7.4vw,6rem)!important;line-height:1.04}
html[data-theme="editorial"] .quote{font-family:var(--serif);font-style:italic}
html[data-theme="editorial"] .kicker{font-family:var(--mono);font-size:.8rem;letter-spacing:.28em;color:var(--dim)}
html[data-theme="editorial"] #slide{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);margin:2.4vh 2vw}

/* ── 1984：米白 + 复古电脑窗口 ── */
html[data-theme="1984"]{--bg:#f3eee1;--fg:#141414;--dim:#5c5a55;--accent:#1f4fd1;--rule:#cfc8b6;
  --panel:#fffdf7;--panel-hot:#e6ecfb;--ink-code:#141414;--c-hot:#1f4fd1;
  --serif:"New York","Songti SC","STSong",Georgia,serif}
html[data-theme="1984"] #slide{margin:4.2vh 3.2vw 5.6vh;border:2px solid #141414;border-radius:3px;background:
  repeating-linear-gradient(180deg,#141414 0 1.5px,transparent 1.5px 4.5px) top/100% 24px no-repeat,#fbf8f0;
  box-shadow:5px 5px 0 #141414;padding-top:calc(6vh + 24px)}
html[data-theme="1984"] h1,html[data-theme="1984"] .big{font-family:var(--serif);font-weight:500}
html[data-theme="1984"] .kicker{font-family:var(--mono);font-size:.8rem;letter-spacing:.2em;color:var(--dim)}
html[data-theme="1984"] .prompt{border-radius:0}
/* 窗口框吃掉了纵向空间：这套主题里图片再收一档 */
html[data-theme="1984"] .bbgfig,html[data-theme="1984"] .mapfig{height:min(56vh,620px)!important}
html[data-theme="1984"] .bbgslice img.bbg{max-height:52vh}
html[data-theme="1984"] .bbgslice2 img.bbg{max-height:32vh}

/* 矮屏（≤800px，如 1366×768）：这两套主题的边框与大字要收紧 */
@media (max-height:800px){
  html[data-theme="editorial"] #slide{margin:0;border:0}
  html[data-theme="editorial"] h1{font-size:clamp(2.4rem,6vw,4rem)!important}
  html[data-theme="1984"] #slide{margin:1.6vh 1.6vw 2.2vh;padding:calc(3.4vh + 22px) 7vw 3.4vh;box-shadow:3px 3px 0 #141414}
  html[data-theme="editorial"] .bbgfig,html[data-theme="editorial"] .mapfig,
  html[data-theme="1984"] .bbgfig,html[data-theme="1984"] .mapfig{height:min(50vh,520px)!important}
  html[data-theme="editorial"] .bbgslice img.bbg,html[data-theme="1984"] .bbgslice img.bbg{max-height:46vh}
  html[data-theme="editorial"] .bbgslice2 img.bbg,html[data-theme="1984"] .bbgslice2 img.bbg{max-height:28vh}
  html[data-theme="editorial"] .fit,html[data-theme="1984"] .fit{zoom:.68}
  /* 窗口框 + 大衬线，在矮屏上整体再缩一档 */
  html[data-theme="1984"] #slide > *{zoom:.88}
}

/* ── Lattice：深蓝网格 + 荧光绿 ── */
html[data-theme="lattice"]{--bg:#0b0c3a;--fg:#eef0ff;--dim:#9aa0d6;--accent:#c6f35b;--rule:#2a2d6e;
  --c-panel:#141655;--c-line:#2a2d6e;--c-text:#eef0ff;--c-dim:#9aa0d6;--c-edge:#3a3e86;
  --c-hot-bg:#1d2160;--c-hot:#c6f35b;--c-bad:#ff8a80;--c-er-line:#3a3e86;--c-scrim:rgba(11,12,58,.8);
  --t-purple:#c4b5fd;--t-blue:#93c5fd;--t-green:#c6f35b}
html[data-theme="lattice"] #slide{background:
  linear-gradient(rgba(154,160,214,.10) 1px,transparent 1px) 0 0/100% 12.5vh,
  linear-gradient(90deg,rgba(154,160,214,.10) 1px,transparent 1px) 0 0/12.5vw 100%,var(--bg)}
html[data-theme="lattice"] h1,html[data-theme="lattice"] .big{font-weight:400;letter-spacing:-.02em}
html[data-theme="lattice"] .prompt{background:#07082a;border-color:#2a2d6e;color:#d7dbff}
html[data-theme="lattice"] .prompt .hl{color:#c6f35b;background:rgba(198,243,91,.12)}
html[data-theme="lattice"] .chain .n,html[data-theme="lattice"] .mod,html[data-theme="lattice"] .terr{background:#141655;border-color:#2a2d6e}
html[data-theme="lattice"] .chain .n.hot{background:#1d2160;border-color:#c6f35b}


/* ═══════════════════════════════════════════════════════════════════
   现场辅助：章节刻度 / 总览 / 搜索 / 黑屏 / 二维码 / 帮助
   这几层都是「讲台上的工具」，不属于内容，配色固定走暗色
   ═══════════════════════════════════════════════════════════════════ */
#ov,#find,#qr,#helpPanel{
  --bg:#0b0d10; --fg:#e8eaed; --dim:#8b94a3; --accent:#ffd166; --rule:#1e242c; color:var(--fg)}

/* ── 章节刻度：贴在顶部进度条上 ── */
#ticks{position:fixed;top:0;left:0;right:0;height:2px;z-index:4;pointer-events:none}
#ticks i{position:absolute;top:0;width:1px;height:6px;background:#38414e}
#ticks i.done{background:#6b5a2a}
#chap{color:var(--dim)}
#chap b{color:var(--fg);font-weight:500}
@media print{#ticks{display:none}}

/* ── 黑屏：讲台上让听众看你，不看屏 ── */
/* 盖住内容，但要低于总览/搜索/二维码/帮助——黑屏时讲台上照样要能用这些 */
#blackout{position:fixed;inset:0;z-index:78;background:#000;display:none}
body.black #blackout{display:block}
body.black #bar,body.black #ticks,body.black #nav,body.black #hud,body.black #help{display:none!important}
body.black.white #blackout{background:#fff}

/* ── 总览：按章节分组的跳页网格 ── */
#ov{position:fixed;inset:0;z-index:80;background:#06080a;display:none;
  overflow-y:auto;padding:1.4rem clamp(1rem,4vw,3rem) 3rem}
body.ov #ov{display:block}
#ov .ovtop{position:sticky;top:0;background:#06080a;padding:.2rem 0 .9rem;
  display:flex;align-items:baseline;gap:1rem;white-space:nowrap;
  font-family:var(--mono);font-size:.8rem;color:var(--dim);z-index:1}
#ov .ovtop b{color:var(--fg);font-size:1rem;font-weight:600;font-family:var(--sans)}
#ov h5{font:600 .74rem var(--mono);letter-spacing:.18em;color:var(--accent);
  margin:1.5rem 0 .6rem;padding-bottom:.35rem;border-bottom:1px solid var(--rule)}
#ov h5 span{color:var(--dim);margin-left:.6rem;letter-spacing:.06em}
#ov .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:.6rem}
#ov .card{border:1px solid var(--rule);border-radius:9px;background:#0f1318;padding:.6rem .7rem;
  cursor:pointer;text-align:left;color:inherit;font:inherit;display:flex;flex-direction:column;gap:.35rem;
  min-height:86px;overflow:hidden}
#ov .card:hover{border-color:#3c4553;background:#131920}
#ov .card.now{border-color:var(--accent);background:#1a1810}
#ov .card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
#ov .card .no{font-family:var(--mono);font-size:.68rem;color:var(--dim);letter-spacing:.06em}
#ov .card.now .no{color:var(--accent)}
#ov .card .ttl{font-size:.82rem;line-height:1.35;color:var(--fg);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
#ov .card .ttl:empty::before{content:"（无标题）";color:var(--dim)}

/* ── 搜索：76 页里找一页 ── */
#find{position:fixed;inset:0;z-index:85;background:rgba(6,8,10,.9);display:none;
  padding:12vh clamp(1rem,6vw,4rem) 2rem}
body.find #find{display:block}
#find .box{max-width:720px;margin:0 auto;border:1px solid var(--rule);border-radius:12px;
  background:#0f1318;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.55)}
#find input{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;
  color:var(--fg);font:400 1.1rem var(--sans);padding:.95rem 1.1rem;outline:none}
#find input::placeholder{color:var(--dim)}
#find .list{max-height:52vh;overflow-y:auto}
#find .hit{display:flex;gap:.8rem;align-items:baseline;padding:.6rem 1.1rem;cursor:pointer;
  border-bottom:1px solid #141a21}
#find .hit:last-child{border-bottom:0}
#find .hit.on{background:#1a1f27}
#find .hit .no{font-family:var(--mono);font-size:.7rem;color:var(--dim);flex:0 0 5.2rem}
#find .hit .txt{font-size:.88rem;line-height:1.45;color:var(--fg);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#find .hit .txt em{color:var(--accent);font-style:normal}
#find .hit .ch{font-size:.7rem;color:var(--dim);margin-left:auto;flex:0 0 auto;padding-left:.8rem}
#find .none{padding:1.1rem;color:var(--dim);font-size:.88rem}

/* ── 二维码：现场扫码跟看／带走 ── */
#qr{position:fixed;inset:0;z-index:86;background:rgba(6,8,10,.93);display:none;
  align-items:center;justify-content:center}
body.qr #qr{display:flex}
#qr .box{background:#fff;border-radius:14px;padding:1.5rem 1.5rem 1.1rem;text-align:center;
  max-width:min(88vw,420px)}
#qr .box img,#qr .box canvas{display:block;width:min(62vw,280px);height:auto;margin:0 auto;image-rendering:pixelated}
#qr .box table{border-collapse:collapse;margin:0 auto}
#qr .box td{padding:0;width:4px;height:4px;border:0}
#qr .cap{margin-top:.9rem;font-family:var(--mono);font-size:.7rem;color:#3b444f;word-break:break-all;line-height:1.5}
#qr .hint{margin-top:.5rem;font-size:.74rem;color:#8b94a3}

/* ── 帮助面板：按键表 ── */
#helpPanel{position:fixed;inset:0;z-index:87;background:rgba(6,8,10,.93);display:none;
  align-items:center;justify-content:center;padding:2rem}
body.helpon #helpPanel{display:flex}
#helpPanel .box{border:1px solid var(--rule);border-radius:12px;background:#0f1318;
  padding:1.4rem 1.7rem;max-width:min(92vw,560px);max-height:84vh;overflow-y:auto}
#helpPanel h6{font:600 .72rem var(--mono);letter-spacing:.18em;color:var(--accent);margin:1.1rem 0 .5rem}
#helpPanel h6:first-child{margin-top:0}
#helpPanel dl{display:grid;grid-template-columns:auto 1fr;gap:.35rem 1rem;align-items:baseline}
#helpPanel dt{font-family:var(--mono);font-size:.78rem;color:var(--fg);white-space:nowrap}
#helpPanel dd{font-size:.84rem;color:var(--dim);line-height:1.5}
#helpPanel .foot{margin-top:1.2rem;font-size:.76rem;color:var(--dim)}

@media (max-width:760px){
  #ov{padding:1rem .8rem 2.5rem}
  #ov .ovtop .keys{display:none}          /* 手机上没有方向键，提示只会挤版 */
  #ov .grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:.45rem}
  #find{padding:8vh .8rem 1rem}
  #find .hit .ch{display:none}
}
