/* 纯黑背景 · 思源宋体（Noto Serif SC）· JetBrains Mono */
:root{
  --bg:#000;--ink:#ece8e1;--muted:#9c978f;--faint:#5f5b55;--line:#2a2826;--panel:#0c0c0c;
  --accent:#e9a46a;--teal:#6cc9c0;--warn:#e9866a;
  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC","SimSun",serif;
  --mono:"JetBrains Mono","SFMono-Regular",Consolas,monospace;
  --r-background-color:#000;--r-main-font:var(--serif);--r-heading-font:var(--serif);--r-code-font:var(--mono);
  --r-main-color:var(--ink);--r-heading-color:#fff;--r-link-color:var(--teal);--r-link-color-hover:var(--accent);
  --r-main-font-size:25px;--r-heading-text-transform:none;--r-heading-letter-spacing:0;--r-heading-font-weight:700;
}
html,body,.reveal-viewport{background:#000!important}
.reveal{font-family:var(--serif);color:var(--ink);font-size:25px;line-height:1.75}
.reveal .slides{text-align:left}
.reveal .slides section.page-slide{height:100%;padding:0!important}
.reveal .slide-scroll{height:100%;overflow-y:auto;overflow-x:hidden;padding:34px 46px 40px;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#333 transparent}
.reveal .slide-head{display:flex;justify-content:space-between;gap:28px;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:22px}
.reveal .eyebrow{font-family:var(--mono);font-size:14px;letter-spacing:.12em;color:var(--accent);text-transform:uppercase}
.reveal h1,.reveal h2,.reveal h3{font-family:var(--serif);text-transform:none;letter-spacing:0;line-height:1.35;text-shadow:none}
.reveal h2{font-size:44px;margin:8px 0 6px;font-weight:900}
.reveal h3{font-size:27px;margin:26px 0 10px;color:#fff;font-weight:700}
.reveal .lead{font-size:21px;color:var(--muted);margin:0}
.reveal .pno{font-family:var(--mono);font-size:15px;color:var(--faint);text-align:right;white-space:nowrap;padding-top:6px}
.reveal .pno .mins{display:block;color:var(--accent);font-size:13px}
.reveal p{margin:12px 0}
.reveal ul,.reveal ol{display:block;margin:10px 0 10px 1.3em}.reveal li{margin:6px 0}
.reveal strong{color:#fff;font-weight:700}
.reveal a{color:var(--teal);text-decoration:underline;text-underline-offset:4px;text-decoration-color:#2f5753}
.reveal code{font-family:var(--mono);font-size:.84em;color:#9fe0d9;background:#111;border:1px solid #222;padding:1px 6px;border-radius:4px;overflow-wrap:anywhere}
.reveal pre{width:100%;box-shadow:none;margin:14px 0;font-size:17px;line-height:1.75}
.reveal pre code{display:block;max-height:none;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:18px 22px;color:#d8e8e6;white-space:pre;overflow-x:auto}
/* tables */
.reveal .table-wrap{overflow-x:auto;margin:16px 0}
.reveal table{border-collapse:collapse;width:100%;font-size:19px;line-height:1.65}
.reveal table th,.reveal table td{border:1px solid var(--line);padding:10px 14px;text-align:left;vertical-align:top}
.reveal table th{background:#111;color:var(--accent);font-family:var(--mono);font-size:15px;font-weight:600;letter-spacing:.04em;border-bottom:1px solid #3a3733}
.reveal table tbody tr:nth-child(even){background:#070707}
.reveal table td:first-child{color:#fff}
/* callouts */
.reveal .keypoint,.reveal .trap{display:flex;gap:16px;align-items:flex-start;padding:14px 18px;margin:20px 0;border-radius:8px;font-size:21px;background:#0b0b0b}
.reveal .keypoint{border-left:3px solid var(--teal)}.reveal .trap{border-left:3px solid var(--warn)}
.reveal .keypoint>span,.reveal .trap>span{flex-shrink:0;font-family:var(--mono);font-size:13px;font-weight:600;padding:3px 9px;border-radius:4px;margin-top:4px;color:#000}
.reveal .keypoint>span{background:var(--teal)}.reveal .trap>span{background:var(--warn)}
.reveal .example{border:1px solid var(--line);border-radius:10px;padding:14px 20px;margin:22px 0;background:#070707}
.reveal .ex-head{font-weight:700;color:#fff}.reveal .ex-tag{font-family:var(--mono);font-size:13px;color:#000;background:var(--accent);border-radius:4px;padding:2px 8px;margin-right:10px;vertical-align:3px}
.reveal details summary{cursor:pointer;color:var(--teal);font-size:18px;margin-top:6px;font-family:var(--mono)}
.reveal .ex-answer{border-top:1px dashed #333;margin-top:10px;padding-top:4px}
.reveal .math-block{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 24px;margin:18px 0;color:#fff;overflow-x:auto}
.reveal .math-cap{color:var(--muted);font-size:19px;text-align:center;margin:0 0 8px}
.reveal mjx-container{color:#fff}
.reveal .two-col{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.reveal .pathline{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}
.reveal .pathline span{border:1px solid #333;border-radius:6px;padding:7px 14px;font-size:18px;background:#0b0b0b}
.reveal .pathline span+span:before{content:'→';color:var(--accent);padding-right:12px}
.reveal .notice{background:#0b0b0b;border:1px solid var(--line);border-radius:8px;padding:12px 16px;font-size:18px;color:var(--muted)}
.reveal .refs{font-size:15px;color:var(--faint);margin-top:20px;font-family:var(--mono)}
.reveal .exercise-link{border-left:3px solid var(--accent);padding-left:14px;font-size:20px}
/* hero on welcome page */
.reveal .hero-layout{display:grid;grid-template-columns:1.5fr 1fr;gap:36px}
.reveal .hero-copy{font-size:24px;color:var(--teal);line-height:1.9}
.reveal .route-panel{border-left:1px solid var(--line);padding-left:30px}
.reveal .stats{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);margin-top:24px;padding-top:12px}
.reveal .stats strong{display:block;font-family:var(--mono);font-size:40px;line-height:1.3}
.reveal .stats span{font-size:15px;color:var(--muted)}
.reveal .primary,.reveal .button{display:inline-block;font-family:var(--mono);font-size:17px;text-decoration:none;padding:9px 16px;border-radius:6px;margin:6px 8px 6px 0}
.reveal .primary{background:var(--teal);color:#000}.reveal .button{border:1px solid #444;color:var(--ink)}
/* widgets */
.reveal .interactive{background:#080808;border:1px solid #2c3a39;border-radius:10px;padding:16px 22px;margin:20px 0}
.reveal .interactive h3{margin-top:0}
.reveal .interactive label{display:block;font-size:16px;color:var(--muted);font-family:var(--mono)}
.reveal .interactive input,.reveal .interactive textarea{display:block;width:100%;box-sizing:border-box;margin:6px 0 12px;background:#000;color:#fff;border:1px solid #3a3a3a;border-radius:6px;padding:8px 12px;font:18px var(--mono)}
.reveal .input-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.reveal .tb-buttons{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px}
.reveal button{font-family:var(--mono);font-size:15px;background:#111;color:var(--ink);border:1px solid #3a3a3a;border-radius:6px;padding:6px 12px;cursor:pointer}
.reveal button:hover{border-color:var(--teal);color:#fff}.reveal button.primary{background:var(--teal);color:#000;border:0}
.reveal output{display:block;white-space:pre-wrap;font:17px/1.7 var(--mono);color:#fff;margin-top:10px}
.reveal #tb-output{background:#000;border:1px solid #2a2a2a;border-radius:6px;padding:10px 14px;max-height:260px;overflow:auto;overflow-wrap:anywhere}
.reveal .idcard-demo{display:flex;gap:6px;font:30px var(--mono);margin:14px 0}
.reveal .idcard-demo .seg{padding:4px 10px;border-radius:6px;border:1px solid #333}
.reveal .seg.a{color:var(--teal)}.reveal .seg.b{color:var(--accent)}.reveal .seg.c{color:#a9b4ff}.reveal .seg.d{background:#fff;color:#000}
.reveal .lab-meta{display:flex;gap:8px;margin-bottom:10px}.reveal .pill{font-family:var(--mono);font-size:14px;border:1px solid #3a3a3a;border-radius:20px;padding:2px 12px;color:var(--muted)}
.reveal .lab-actions{margin:16px 0}.reveal .lab-hint{border-left:2px solid #333;padding:2px 14px;margin:8px 0;font-size:19px}
.reveal .source-item{border-bottom:1px solid var(--line);padding:8px 0;font-size:18px}.reveal .source-item p{color:var(--muted);margin:2px 0;font-size:16px;font-family:var(--mono);overflow-wrap:anywhere}
/* cover & toc */
.reveal section.cover{height:100%}
.reveal .cover-inner{position:absolute;left:90px;right:90px;top:50%;transform:translateY(-50%)}
.reveal .cover .kicker{font-family:var(--mono);color:var(--accent);font-size:20px;letter-spacing:.06em}
.reveal .cover h1{font-size:118px;font-weight:900;line-height:1.15;margin:20px 0;color:#fff}
.reveal .cover h1 span{font-weight:400;color:var(--faint);font-size:.55em;padding:0 .15em}
.reveal .cover .sub{font-size:30px;color:var(--ink)}
.reveal .cover .hint{font-family:var(--mono);font-size:16px;color:var(--faint);margin-top:60px}
.reveal ol.toc{list-style:none;margin:10px 0;padding:0;columns:2;column-gap:60px}
.reveal ol.toc li{break-inside:avoid;margin:0;border-bottom:1px solid var(--line)}
.reveal ol.toc a{display:flex;gap:18px;padding:12px 4px;color:var(--ink);text-decoration:none;font-size:26px}
.reveal ol.toc a span{font-family:var(--mono);color:var(--accent);font-size:18px;padding-top:6px}
.reveal ol.toc a:hover{color:#fff;background:#0c0c0c}
.reveal .controls{color:var(--accent)}.reveal .progress{color:var(--accent);height:3px}
.reveal .slide-number{font-family:var(--mono);background:transparent;color:var(--faint);font-size:14px}
@media (max-width:820px){.reveal .two-col,.reveal .hero-layout,.reveal .input-row{grid-template-columns:1fr}.reveal ol.toc{columns:1}.reveal .route-panel{border:0;padding:0}}
.reveal .slide-number{left:16px;right:auto;bottom:10px}
/* part dividers & grouped toc */
.reveal section.divider{height:100%}
.reveal .divider-inner{position:absolute;left:90px;right:90px;top:50%;transform:translateY(-50%);border-left:4px solid var(--accent);padding-left:40px}
.reveal .divider .dk{font-family:var(--mono);font-size:22px;letter-spacing:.14em;color:var(--accent);margin:0 0 14px}
.reveal .divider h2{font-size:68px;font-weight:900;color:#fff;margin:0;line-height:1.25}
.reveal .toc-wrap{display:grid;grid-template-columns:1fr 1fr;gap:18px 50px;margin-top:10px}
.reveal .toc-group h3{font-family:var(--mono);font-size:17px;color:var(--accent);margin:4px 0 8px;letter-spacing:.04em;border-bottom:1px solid var(--line);padding-bottom:6px}
.reveal .toc-group ul{list-style:none;margin:0;padding:0}
.reveal .toc-group li{margin:0}
.reveal .toc-group a{display:block;padding:7px 6px;color:var(--ink);text-decoration:none;font-size:22px}
.reveal .toc-group a:hover{color:#fff;background:#0c0c0c}
@media (max-width:820px){.reveal .toc-wrap{grid-template-columns:1fr}.reveal .divider h2{font-size:40px}}
