/* ============================================================
   研究生机器学习 · 课件统一主题
   基于 reveal.js，针对公式密集 + 交互演示的课堂投影场景
   ============================================================ */

/* 色值由 shared/theme.json 经构建生成 theme.css。 */

.reveal{
  font-family: "PingFang SC","Hiragino Sans GB","Source Han Sans SC",
               "Microsoft YaHei","Noto Sans CJK SC", system-ui, sans-serif;
  font-size: 30px;
  color: var(--ink);
}
.reveal-viewport{ background: var(--bg); }

/* ---------- 标题 ---------- */
.reveal h1,.reveal h2,.reveal h3,.reveal h4{
  font-weight: 600; text-transform: none; letter-spacing: 0;
  color: var(--ink); margin: 0 0 .5em 0; line-height: 1.25;
}
.reveal h1{ font-size: 1.9em; }
.reveal h2{
  font-size: 1.28em; text-align: left; margin-top: 0;
  border-bottom: 2px solid var(--rule); padding-bottom: .4em; margin-bottom: .62em;
}
.reveal h3{ font-size: 1.06em; text-align: left; color: var(--ink-soft); }

.reveal section{ text-align: left; }
.reveal p{ line-height: 1.5; margin: .5em 0; }
.reveal a{ color:var(--link); text-decoration:none; }
.reveal a:hover{ text-decoration:underline; }

/* ---------- 列表：收紧，公式课行距不能太散 ---------- */
.reveal ul,.reveal ol{ margin-left: 1.1em; }
.reveal li{ margin: .3em 0; line-height: 1.45; }
.reveal li li{ font-size: .92em; color: var(--ink-soft); }

/* ---------- 封面页 ---------- */
.title-slide{ text-align:center !important; }
.title-slide h1{ margin-bottom:.15em; }
.title-slide .sub{ font-size:.95em; color:var(--ink-soft); margin-bottom:2em; }
.title-slide .meta{ font-size:.62em; color:var(--ink-faint); line-height:1.9; }
.lec-badge{
  display:inline-block; font-size:.5em; letter-spacing:.22em; color:var(--accent);
  border:1px solid var(--accent); border-radius:2em; padding:.35em 1.3em; margin-bottom:1.4em;
}

/* ---------- 公式 ---------- */
.katex{ font-size: 1.04em; }
.katex-display{ margin: .7em 0 !important; }
.reveal .eq-box{                      /* 需要被反复回指的核心公式 */
  background: var(--bg-panel); border-left: 3px solid var(--accent);
  padding: .5em 1em; margin: .7em 0; border-radius: 0 4px 4px 0;
}
.reveal .eq-num{ float:right; color:var(--ink-faint); font-size:.8em; }

/* ---------- 强调块 ---------- */
.note, .warn, .key{
  border-left:3px solid; padding:.45em .9em; margin:.7em 0;
  font-size:.88em; border-radius:0 4px 4px 0; background:var(--bg-panel);
}
.note{ border-color:var(--c1); }
.key { border-color:var(--accent); }
.warn{ border-color:var(--danger); }
.note b,.key b,.warn b{ font-weight:600; }

/* ---------- 表格 ---------- */
.reveal table{ font-size:.82em; border-collapse:collapse; margin:.6em 0; }
.reveal table th{
  background:var(--bg-panel); font-weight:600; text-align:left;
  border-bottom:2px solid var(--rule); padding:.42em .8em;
}
.reveal table td{ border-bottom:1px solid var(--rule); padding:.38em .8em; }
.reveal table tr:last-child td{ border-bottom:none; }
.reveal table.numeric-table{ table-layout:fixed; font-variant-numeric:tabular-nums; }
.reveal table.numeric-table th,.reveal table.numeric-table td{
  text-align:center; vertical-align:middle; padding:.42em .25em;
}

/* ---------- 分栏 ---------- */
/* 第四讲：完整推导的局部版式，正文和公式保持可投影字号。 */
.reveal .lr-detail .lr-copy{ font-size:.8em; line-height:1.5; }
.reveal .lr-detail .lr-eq{ font-size:.86em; }
.reveal .lr-detail .lr-subhead{ font-size:.9em; }
.reveal .lr-detail .intro-card h3 small{ display:block; font-size:.7em; margin-top:.35em; color:var(--ink-soft); }
.reveal .lr-detail .lr-optional{ display:inline-block; vertical-align:middle; font-size:.48em; font-weight:400; color:var(--accent); border:1px solid var(--accent); border-radius:1em; padding:.2em .65em; }
.reveal .lr-detail table:not(.numeric-table) td{ text-align:left; vertical-align:middle; }
.reveal .lr-detail .eq-box{ padding:.4em .7em; }
.reveal .lr-detail .katex-display{ margin:.5em 0 !important; }
.reveal .lr-detail.title-slide .lec-badge{ margin-bottom:.7em; }
.reveal .lr-detail.title-slide h1{ font-size:1.7em; }
.reveal .lr-detail.title-slide .sub{ margin-bottom:.7em; }
.reveal .lr-detail.title-slide .eq-box{ margin:.65em auto; width:90%; box-sizing:border-box; }
.reveal .lr-detail .lr-outline{ width:92%; margin:.7em auto; font-size:.75em; table-layout:fixed; }
.reveal .lr-detail .lr-inline-controls{ flex-direction:row; align-items:center; gap:1.2em; margin:.4em 0; }
.reveal .lr-detail .lr-inline-controls .row:first-child{ flex:1; }
.reveal #s-reg-gd > .eq-box,
.reveal #s-reg-mle-least-squares > .eq-box{ padding:.15em .7em; margin:.35em 0; }

/* 固定比例的两列共占 98%，间距占余下 2%，避免内容越过右边界。 */
.cols{ display:flex; gap:2%; align-items:flex-start; }
.cols > *{ flex:1; min-width:0; }
.cols.v-center{ align-items:center; }
.c-40{ flex:0 0 40% !important; } .c-60{ flex:0 0 58% !important; }
.c-35{ flex:0 0 35% !important; } .c-65{ flex:0 0 63% !important; }
.c-45{ flex:0 0 44% !important; } .c-55{ flex:0 0 54% !important; }

/* ---------- 交互演示面板 ---------- */
.demo{
  background:var(--bg-panel); border:1px solid var(--rule);
  border-radius:6px; padding:.7em .9em; margin:.3em 0;
}
.demo canvas{ display:block; width:100%; height:auto; border-radius:4px; background:var(--surface); }
.ctrl{ display:flex; flex-direction:column; gap:.55em; font-size:.62em; }
.ctrl .row{ display:flex; align-items:center; gap:.5em; }
.ctrl label{ flex:0 0 auto; color:var(--ink-soft); min-width:5.4em; }
.ctrl input[type=range]{ flex:1; accent-color:var(--accent); min-width:0; }
.ctrl .val{
  flex:0 0 3.9em; text-align:right; font-variant-numeric:tabular-nums;
  font-family:ui-monospace,"SF Mono",Menlo,monospace; color:var(--accent); font-weight:600;
}
.ctrl select,.ctrl button{
  font-family:inherit; font-size:1em; padding:.28em .6em;
  border:1px solid var(--rule); border-radius:4px; background:var(--surface); color:var(--ink); cursor:pointer;
}
.ctrl button:hover{ background:var(--accent); color:var(--surface); border-color:var(--accent); }
.ctrl button:active{ transform:translateY(1px); }
.ctrl button[aria-pressed="true"]{ background:var(--accent); color:var(--surface); border-color:var(--accent); }
.ctrl .chk{ display:flex; align-items:center; gap:.35em; cursor:pointer; }
.readout{
  font-family:ui-monospace,"SF Mono",Menlo,monospace; font-size:.6em;
  color:var(--ink-soft); line-height:1.7; margin-top:.5em;
  border-top:1px solid var(--rule); padding-top:.5em;
}
.readout b{ color:var(--ink); font-weight:600; }

/* 图例 */
.legend{ display:flex; flex-wrap:wrap; gap:.9em; font-size:.58em; color:var(--ink-soft); margin-top:.45em; }
.legend > span{ display:flex; align-items:center; gap:.32em; }
.legend i{ width:.85em; height:.85em; border-radius:2px; display:inline-block; }
.legend i.ln{ height:3px; border-radius:2px; }

/* ---------- 代码 ---------- */
.reveal pre{
  width:100%; margin:.55em 0; box-shadow:none; overflow:visible;
  font-size:.5em; line-height:1.5; text-align:left;
}
/* display 必须显式写 block：内联元素的上下 padding 不撑高行盒，
   内容会溢出父容器被裁掉 */
.reveal pre code{
  display:block; padding:.85em 1.05em; max-height:none;
  overflow-x:auto; overflow-y:hidden; white-space:pre; word-wrap:normal;
  background:var(--bg); border:1px solid var(--rule); border-radius:5px;
  font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
}
.reveal code:not(pre code){
  background:var(--bg-panel); padding:.08em .35em; border-radius:3px;
  font-size:.88em; color:var(--c2);
  font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
}

/* ---------- 页脚 / 进度 ---------- */
.reveal .slide-number{
  left:24px; right:auto; bottom:18px;
  background:transparent; color:var(--ink-soft); font-size:16px;
  font-variant-numeric:tabular-nums;
}
.reveal .progress{ color:var(--accent); height:3px; }
.reveal .controls .navigate-right.course-next{ opacity:1; visibility:visible; cursor:pointer; pointer-events:auto; }

/* 本节小结 / 引子 */
.roadmap li{ color:var(--ink-faint); }
.roadmap li.now{ color:var(--ink); font-weight:600; }
.roadmap li.now::marker{ color:var(--accent); }

/* 提问页 */
.ask{ font-size:1.05em; text-align:center; padding:1.2em 0; color:var(--c1); font-weight:600; }

/* 小字注 */
.fn{ font-size:.62em; color:var(--ink-faint); margin-top:.8em; }

/* 让 fragment 里消失的内容不撑布局 */
.reveal .fragment.fade-in-then-out.visible{ opacity:1; }

/* 打印/导出 PDF 时保持白底 */
@media print{ .reveal-viewport{ background:var(--surface); } }

/* ============================================================
   课程介绍页 / 教师介绍页
   ============================================================ */
.info-grid{ display:grid; grid-template-columns:auto 1fr; gap:.45em 1.2em; font-size:.78em; }
.info-grid dt{ color:var(--ink-faint); white-space:nowrap; }
.info-grid dd{ margin:0; color:var(--ink); }

.presentation-card{
  border:1px solid var(--rule); border-top:3px solid var(--accent);
  border-radius:5px; background:var(--bg-panel); padding:.6em .8em;
  font-size:.74em; line-height:1.45;
}
.presentation-card h3{ color:var(--accent); font-size:1.06em; margin:0 0 .45em; }
.presentation-card p{ margin:0; }

.risk-card{ border:1px solid var(--rule); border-top:4px solid var(--risk-color); border-radius:6px; padding:.85em .7em; background:var(--surface); }
.risk-card h3{ color:var(--risk-color); font-size:1em; }
.risk-card h3 small{ display:block; color:var(--risk-color); font-size:.58em; margin-top:.35em; font-weight:400; }
.risk-scope{ font-size:.8em; margin:1.2em 0 .5em; }
.reveal .risk-card .eq-box{ font-size:.76em; padding:.6em .3em; margin:1em 0; border-left:0; text-align:center; height:100px; box-sizing:border-box; display:flex; align-items:center; justify-content:center; }
.reveal .risk-card p{ font-size:.76em; margin:1.1em 0; }
.risk-status{ font-size:.72em; color:var(--risk-color); }
.risk-role{ border-top:1px solid var(--rule); margin-top:1em; padding-top:.8em; font-size:.78em; color:var(--risk-color); }

#s-complexity .demo{ padding:.45em .6em; }
#s-complexity .ctrl{ font-size:.56em; }
#s-complexity > .eq-box .katex-display{ margin:.25em 0 !important; }
#s-inductive-bias > .eq-box .katex-display{ margin:.4em 0 !important; }
#s-cluster-em .demo{ padding:.45em .6em; }
#s-cluster-em .readout{ font-size:.56em; line-height:1.55; }

.intro-card-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:.65em; margin-top:.8em; }
.intro-card{ border:1px solid var(--rule); background:var(--bg-panel); border-radius:6px; padding:.7em .65em; }
.intro-card h3{ font-size:.86em; color:var(--accent); margin:0 0 .3em; }
.intro-card > small{ display:block; color:var(--ink-soft); font-size:.57em; }
.signal-example{ height:170px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.65em; font-size:.7em; margin:.7em 0; border-radius:5px; background:var(--surface); }
.signal-example svg{ width:95%; height:130px; }
.signal-example strong{ color:var(--accent); font-weight:500; }
.reveal .intro-card p{ font-size:.7em; }
.signal-result{ border-top:1px solid var(--rule); padding-top:.75em; margin-top:.8em; color:var(--accent); font-size:.7em; }
.tool-environment,.tool-foundation{ background:var(--bg-panel); border-left:3px solid var(--accent); border-radius:4px; padding:.55em .9em; font-size:.76em; }
.tool-environment small,.tool-foundation small{ display:block; color:var(--ink-soft); font-size:.78em; margin-top:.4em; }
.tool-foundation{ margin-top:.7em; }
.tool-icon{ font-size:.6em; color:var(--ink-soft); letter-spacing:.08em; margin-bottom:.7em; }
.tool-card h3{ font-size:.8em; }
.reveal .tool-card p{ margin:.9em 0 0; font-size:.71em; }
.tool-card p a{ font-weight:600; }
.tool-card p span{ display:block; font-size:.84em; color:var(--ink-soft); margin-top:.15em; }

.domain-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:.65em; margin-top:1em; }
.domain-card{ border:1px solid var(--rule); border-radius:6px; background:var(--bg-panel); padding:.6em .5em; text-align:center; }
.domain-input{ font-size:.72em; color:var(--ink-soft); margin-bottom:.7em; }
.domain-visual{ display:block; width:100%; height:145px; margin:0; object-fit:cover; border-radius:3px; background:var(--surface); }
.domain-language,.domain-sequence{ display:flex; flex-direction:column; justify-content:center; gap:.6em; font-size:.63em; }
.domain-language span{ background:var(--primary-pale); padding:.5em .3em; margin:0 .6em; border-radius:5px; }
.domain-sequence{ color:var(--sv); font-family:ui-monospace,Menlo,monospace; }
.domain-sequence small{ font-family:inherit; font-size:.78em; color:var(--ink-faint); }
.domain-arrow{ color:var(--accent); font-size:1.1em; margin:.2em 0; }
.domain-card h3{ text-align:center; font-size:.84em; margin:0 0 .4em; color:var(--accent); }
.domain-en{ min-height:2.7em; font-size:.46em; line-height:1.4; color:var(--ink-soft); }
.domain-card p{ margin:.65em 0 .1em; font-size:.65em; }

.grade{ display:flex; gap:.9em; align-items:stretch; margin:.5em 0; }
.grade .part{
  flex:0 0 auto; border-radius:6px; padding:.55em .95em; text-align:center;
  border:1px solid var(--rule); background:var(--surface);
}
.grade .part .pct{ font-size:1.5em; font-weight:700; line-height:1.1; }
.grade .part .what{ font-size:.62em; color:var(--ink-soft); margin-top:.15em; }
.grade .part.exam{ border-color:var(--accent); }
.grade .part.exam .pct{ color:var(--accent); }
.grade .part.daily .pct{ color:var(--c1); }
.grade .bar{ flex:1; display:flex; align-items:center; }
.grade .bar .seg{ height:14px; }
.grade .bar .seg.a{ background:var(--c1);     border-radius:7px 0 0 7px; }
.grade .bar .seg.b{ background:var(--accent); border-radius:0 7px 7px 0; }

.books{ display:flex; gap:1.1em; margin-top:.3em; }
.book{
  flex:1; border:1px solid var(--rule); border-left:4px solid var(--c1);
  border-radius:0 5px 5px 0; padding:.5em .85em; background:var(--surface); font-size:.74em;
}
.book:nth-child(2){ border-left-color:var(--c2); }
.book .t{ font-weight:600; }
.book .a{ color:var(--ink-soft); font-size:.88em; margin-top:.1em; }
.book .u{ color:var(--ink-faint); font-size:.82em; margin-top:.3em; }

/* 教师页 */
.avatar{
  width:157px; height:157px; border-radius:50%; object-fit:cover;
  display:block; margin:0 auto;          /* 不给 auto 就会贴左，和下面居中的文字对不齐 */
  background:var(--bg);                  /* 照片本身是透明背景，别再拿渐变盖住 */
  border:4px solid var(--surface); box-shadow:0 0 0 1px var(--rule), 0 6px 20px rgba(var(--shadow-rgb),.10);
}
.who{ text-align:center; }
.who .name{ font-size:1.12em; font-weight:600; margin-top:.45em; }
.who .role{ font-size:.78em; color:var(--ink-soft); margin-top:.15em; }
.who .mail{ font-size:.66em; color:var(--link); margin-top:.4em;
            font-family:ui-monospace,Menlo,monospace; }

/* 履历用 Grid 而不是 flex：年份列的宽度由最长的那个日期决定，
   所有行共用同一列宽，右侧内容才会严格对齐在同一条竖线上。
   用 flex 给固定 em 宽度，长日期会把该行顶出去，左边缘就参差不齐。 */
.cv{
  display:grid; grid-template-columns:max-content 1fr;
  column-gap:1.1em; row-gap:.42em; align-items:baseline;
  font-size:.76em;
}
.cv h4{
  grid-column:1 / -1;
  font-size:1em; font-weight:600; color:var(--accent);
  margin:0 0 .1em; letter-spacing:.04em;
  border-bottom:1px solid var(--rule); padding-bottom:.25em;
}
.cv h4:not(:first-child){ margin-top:.9em; }
.cv .row{ display:contents; }          /* 让 .yr 和 .what 直接参与外层网格 */
.cv .yr{ color:var(--ink-faint); font-variant-numeric:tabular-nums; white-space:nowrap; }
.cv .what{ line-height:1.5; }
.cv .what b{ font-weight:600; }
.cv .what em{ font-style:normal; color:var(--ink-soft); }
.tags{ display:flex; flex-wrap:wrap; gap:.35em; margin-top:.3em; }
.tags span{
  font-size:.9em; padding:.12em .6em; border-radius:2em;
  background:var(--bg-panel); border:1px solid var(--rule); color:var(--ink-soft);
}
.hl{ display:flex; gap:1.4em; margin-top:.2em; }
.hl div{ text-align:center; }
.hl .n{ font-size:1.32em; font-weight:700; color:var(--c1); line-height:1.1; }
.hl .l{ font-size:.82em; color:var(--ink-faint); }

/* 课程地图 */
.map{ display:grid; grid-template-columns:repeat(3,1fr); gap:.7em; font-size:.62em; }
/* 8 次课：四列两行 */
.map.map8{ grid-template-columns:repeat(4,1fr); gap:.75em; font-size:.66em; }
.map.map8 .sess{ padding:.6em .75em; }
.map.map8 .sess li{ margin:.2em 0; }
.map.map8 .sess:nth-child(7){ border-top-color:var(--c1); }
.map.map8 .sess:nth-child(8){ border-top-color:var(--c2); }
.map .sess{ border:1px solid var(--rule); border-top:3px solid var(--c1);
            border-radius:0 0 5px 5px; padding:.5em .7em; background:var(--surface); }
.map .sess:nth-child(2){ border-top-color:var(--c2); }
.map .sess:nth-child(3){ border-top-color:var(--c3); }
.map .sess:nth-child(4){ border-top-color:var(--c4); }
.map .sess:nth-child(5){ border-top-color:var(--accent); }
.map .sess:nth-child(6){ border-top-color:var(--ink-soft); }
.map .sess .h{ font-weight:600; margin-bottom:.3em; }
.map .sess ol{ margin:0 0 0 1.1em; padding:0; }
.map .sess li{ margin:.12em 0; color:var(--ink-soft); line-height:1.35; }

/* ============================================================
   页眉：课程标识 + 课件地址，全程常驻
   ============================================================ */
.deck-header{
  /* 宽度对齐幻灯片正文：reveal 把缩放比与幻灯片尺寸挂在 .reveal-viewport 上，
     直接算出来，页眉右端的网址就能和正文右边缘对齐 */
  position:fixed; top:0; left:50%; transform:translateX(-50%);
  width:calc(var(--slide-width, 1280px) * var(--slide-scale, 1));
  max-width:100%; z-index:30;
  display:flex; align-items:center; gap:.9em;
  padding:.42em 0; pointer-events:none;
  font-size:20px; line-height:1;      /* 投影时坐在后排也要看得清 */
}
.deck-header .crest{ height:30px; width:auto; opacity:.85; flex:0 0 auto; }
.deck-header .course{ color:var(--ink-faint); font-weight:600; letter-spacing:.02em; }
.deck-header .sep{ flex:1; height:1px; background:var(--rule); }
.deck-header .url{
  color:var(--link); font-family:ui-monospace,"SF Mono",Menlo,monospace;
  font-size:.92em; pointer-events:auto; text-decoration:none;
}
.deck-header .url:hover{ text-decoration:underline; }
/* 顶部对齐：标题与它下面那条灰线在每一页的位置完全固定。
   reveal 在切页时仍会给幻灯片写入居中用的 top，必须强制压掉，
   否则内容少的页会被推到屏幕下方。 */
.reveal .slides > section{ top: 0 !important; padding-top: 46px; }
.reveal .slides > section.title-slide{
  padding-top: 0; height: 100%;
  display: flex !important; flex-direction: column;
  align-items: center; justify-content: center;
}

/* 演讲者视图和总览模式下不要页眉挡着 */
.reveal.overview ~ .deck-header{ display:none; }

/* 课程介绍页上把地址放大展示一次 */
.deck-url-big{
  display:inline-flex; align-items:center; gap:.5em;
  font-family:ui-monospace,"SF Mono",Menlo,monospace;
  font-size:.72em; color:var(--link);
  border:1px dashed var(--link); border-radius:5px;
  padding:.4em .85em; margin-top:.2em;
}
.deck-url-big::before{ content:"课件"; font-family:inherit;
  font-size:.82em; color:var(--ink-faint); letter-spacing:.1em; }

/* ============================================================
   流程图：把一条真实流水线摊开，标出机器学习卡在哪一环
   ============================================================ */
.pipe{ display:flex; align-items:stretch; gap:.3em; margin:.6em 0; }
.pipe .step{
  flex:1; min-width:0; border:1px solid var(--rule); border-radius:5px;
  background:var(--surface); padding:.5em .6em; font-size:.58em; line-height:1.4;
  display:flex; flex-direction:column; gap:.12em; position:relative;
}
.pipe .step .k{
  position:absolute; top:-.62em; left:.55em; background:var(--ink-faint); color:var(--surface);
  font-size:.82em; font-weight:700; width:1.5em; height:1.5em; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
}
.pipe .step b{ font-weight:600; color:var(--ink); }
.pipe .step em{ font-style:normal; color:var(--ink-faint); font-size:.9em; }
/* 机器学习负责的环节 */
.pipe .step.ml{ border-color:var(--accent); border-width:2px; background:var(--primary-pale); }
.pipe .step.ml .k{ background:var(--accent); }
.pipe .step.ml b{ color:var(--accent); }
.pipe .arw{
  flex:0 0 auto; align-self:center; color:var(--ink-faint);
  font-size:.85em; padding:0 .05em;
}
.pipe-tag{
  display:inline-block; font-size:.56em; color:var(--accent); font-weight:600;
  border-top:2px solid var(--accent); padding-top:.25em; margin-top:.1em;
}

/* 把一个真实问题翻译成本课的记号 */
.io{ display:grid; grid-template-columns:auto 1fr; gap:.35em .9em; font-size:.76em; margin:.3em 0; }
.io dt{ color:var(--accent); font-weight:600; white-space:nowrap; font-family:ui-monospace,Menlo,monospace; }
.io dd{ margin:0; }

/* 两栏对照：例子 A / 例子 B */
.vs{ display:grid; grid-template-columns:1fr 1fr; gap:.9em; font-size:.8em; }
.vs > div{ border:1px solid var(--rule); border-radius:5px; padding:.55em .8em; background:var(--surface); }
.vs h4{ margin:0 0 .3em; font-size:1em; font-weight:600; }


/* 课程介绍页的校徽：与标题同一行右对齐，底边压在灰线上。
   不要给 section 设 position:relative —— reveal 自己用的是 absolute，
   改了会打乱它的布局。section 本来就是定位祖先，直接 absolute 即可。 */
.crest-lg{
  position:absolute; top:46px; right:0; height:58px; width:auto; opacity:.95;
}

/* ============================================================
   实物照片 / 产品图
   ============================================================ */
.shots{ display:grid; gap:.6em; }
.shots.g3{ grid-template-columns:repeat(3,1fr); }
.shots.g2{ grid-template-columns:repeat(2,1fr); }
.shot{ border:1px solid var(--rule); border-radius:6px; overflow:hidden; background:var(--surface); }
.shot img{ display:block; width:100%; height:132px; object-fit:cover; }
.shot .cap{ padding:.35em .6em; font-size:.54em; line-height:1.4; }
.shot .cap b{ display:block; font-weight:600; color:var(--ink); font-size:1.08em; }
.shot .cap span{ color:var(--ink-faint); }

/* 图片来源与许可，字要小但必须在 */
.credit{ font-size:.46em; color:var(--ink-faint); line-height:1.5; margin-top:.5em; }

/* 大模型 logo 墙 */
.logos{ display:grid; grid-template-columns:repeat(4,1fr); gap:.7em; }
.logo-card{
  border:1px solid var(--rule); border-radius:7px; background:var(--surface);
  padding:.7em .5em .55em; text-align:center;
}
.logo-card img{ height:44px; width:auto; max-width:82%; object-fit:contain; }
.logo-card .nm{ font-size:.6em; font-weight:600; margin-top:.45em; }
.logo-card .by{ font-size:.5em; color:var(--ink-faint); margin-top:.08em; }

/* 教师页底部的个人主页 */
.homepage{ text-align:center; margin-top:1.6em; }
.homepage a{
  font-family:ui-monospace,"SF Mono",Menlo,monospace;
  font-size:.62em; color:var(--link); text-decoration:none;
  border-bottom:1px solid color-mix(in srgb, var(--link) 35%, transparent);
  padding-bottom:.12em;
}
.homepage a:hover{ border-bottom-color:var(--link); }

/* 参考教材：书影 + 书目信息 */
.books{ display:flex; flex-direction:column; gap:.6em; margin-top:.2em; }
.book{
  display:flex; gap:.9em; align-items:flex-start;
  border:1px solid var(--rule); border-radius:6px;
  padding:.6em .8em; background:var(--surface); font-size:.7em;
}
.book img{
  flex:0 0 74px; width:74px; height:auto; border-radius:2px;
  box-shadow:0 1px 6px rgba(var(--shadow-rgb),.2);
}
.book .meta{ min-width:0; }
.book .t{ font-weight:600; font-size:1.05em; line-height:1.3; }
.book .a{ color:var(--ink-soft); margin-top:.2em; }
.book .u{ color:var(--ink-faint); font-size:.9em; margin-top:.35em; line-height:1.45; }

/* ============================================================
   讲次导航（每讲末尾自动生成）
   ============================================================ */
.deck-header .home{ color:inherit; text-decoration:none; pointer-events:auto; }
.deck-header .home:hover{ color:var(--link); }

.nav-slide h2{ text-align:center; border-bottom:none; }
.nav-row{ display:grid; grid-template-columns:1fr .7fr 1fr; gap:.9em; margin-top:1.2em; }
.nav-card{
  display:flex; flex-direction:column; justify-content:center;
  border:1px solid var(--rule); border-radius:8px; background:var(--surface);
  padding:.9em 1.1em; text-decoration:none; color:var(--ink);
  min-height:5.2em; transition:border-color .12s, background .12s;
}
.nav-card:hover{ border-color:var(--link); background:var(--bg-panel); }
.nav-card.empty{ border-style:dashed; background:transparent; pointer-events:none; opacity:.4; }
.nav-card.next{ text-align:right; }
.nav-card.home{ text-align:center; border-color:var(--rule); }
.nav-card .dir{ font-size:.56em; color:var(--link); font-weight:600; letter-spacing:.06em; }
.nav-card .num{ font-size:.6em; color:var(--ink-faint); margin-top:.35em; }
.nav-card .ttl{ font-size:.78em; font-weight:600; margin-top:.15em; line-height:1.3; }
.nav-card .sub{ font-size:.58em; color:var(--ink-soft); margin-top:.2em; line-height:1.35; }
.nav-slide kbd{
  background:var(--bg-panel); border:1px solid var(--rule); border-bottom-width:2px;
  border-radius:4px; padding:.05em .4em; font-family:ui-monospace,Menlo,monospace;
  font-size:.9em; color:var(--ink);
}

/* 概念表达式：整行居中，词内不折行 */
.eq-box.concept{
  text-align:center; font-size:1.02em; letter-spacing:.02em;
  padding:.6em 1em; white-space:nowrap; overflow-x:auto;
}
.eq-box.concept .op{ margin:0 .45em; color:var(--ink-soft); }
.eq-box.concept .eq{ margin:0 .1em; }

/* 图例里的形状标记：颜色之外还要能看出圆点与三角的区别 */
.legend .mk{ font-size:1.05em; line-height:1; }
.legend .mk.tri{ font-size:.92em; }

/* 演示中随参数实时更新的公式 */
.eq-live{
  margin-top:.55em; padding:.5em .7em;
  background:var(--surface); border:1px solid var(--rule); border-radius:5px;
  font-size:.62em; text-align:center; overflow-x:auto; white-space:nowrap;
}
.eq-live .coef{
  margin-top:.35em; font-size:.86em; color:var(--ink-soft);
  font-family:ui-monospace,Menlo,monospace; white-space:nowrap;
}
.eq-live .coef b{ color:var(--sv); }
.eq-live .coef sup{ font-size:.7em; vertical-align:super; }
.eq-live .coef sub{ font-size:.72em; vertical-align:sub; }

#s-bias .demo{ padding:.5em .6em; }
