/* ============================================================================
   AI 产业深度综合报告 v2 · 站点样式（从零重写）
   实施蓝图：01_设计/中文排版规格.md（10 节）
   视觉语言参考：00_调研/APPLE_DESIGN_参考.md
   约束：纯系统字体 · 无 CDN · 无 @font-face · 纯静态 · 只做 light 模式
   ============================================================================ */

/* ---------------------------------------------------------------- 0. 令牌 */
:root {
  /* --- 字体栈：拉丁字面在前，中文字面在后（规格 §1.3）--- */
  --font-sans:
    -apple-system, BlinkMacSystemFont,           /* macOS / iOS → SF Pro */
    "Segoe UI",                                  /* Windows 拉丁 */
    "Helvetica Neue", Arial,                     /* 旧系统兜底 */
    "PingFang SC",                               /* macOS / iOS 中文首选 */
    "Heiti SC",                                  /* Apple 清单里的系统字体安全网 */
    "HarmonyOS Sans SC",                         /* 鸿蒙 / OpenHarmony */
    "MiSans", "OPPO Sans", "vivo Sans",          /* 国产厂商定制字体 */
    "Microsoft YaHei", "微软雅黑",                /* Windows 中文首选 */
    "Noto Sans CJK SC", "Source Han Sans SC", "Noto Sans SC",
    "WenQuanYi Micro Hei",
    sans-serif;
  /* 注意：栈首刻意不用 system-ui —— 中文 locale 的 Chromium 会解析为宋体（规格 §1.3-2） */

  --font-mono:
    ui-monospace, "SF Mono", SFMono-Regular, Menlo,
    "Cascadia Mono", Consolas, "Liberation Mono",
    "PingFang SC", "Microsoft YaHei",
    monospace;

  /* --- 表面与墨色 ---
     纸面走米白（b* ≈ +2），不是纯白也不是奶油色：暖只到「纸」为止，不到「旧」。
     四级表面按 L* 等距下行 98.3 / 95.5 / 94.3 / 92.4，层次关系与原冷灰版一致。
     墨色由蓝灰改为近中性（R≈G≈B），躲开暖纸配冷字的补色冲突，又不让字发褐。 */
  --canvas:     #ECE9E2;   /* 站点底色，暖浅灰   L* 92.4 */
  --surface:    #FBFAF6;   /* 阅读纸面（米白）  L* 98.3 —— 图表画布须与此值严格一致 */
  --tint:       #F4F2EC;   /* 表头 / 胶囊填充   L* 95.5 */
  --tint-2:     #F1EEE7;   /* 章扉带           L* 94.3 */

  --ink:        #18191B;   /* 标题与正文  对纸面 16.5:1 */
  --ink-2:      #3A3B3F;   /* 次级正文    对纸面 10.9:1 */
  --ink-3:      #63646A;   /* 图注 / 脚注 对纸面  5.6:1 */
  --ink-4:      #82858D;   /* kicker / 弱标签 对纸面 3.5:1（较原冷灰版 3.0:1 提高）*/

  --hair:       #DDD8CD;
  --hair-soft:  #E8E3DA;

  /* --- 唯一交互色：深墨蓝。全部可点元素只用这一个色 --- */
  --accent:       #16457A;
  --accent-deep:  #0E3057;
  --accent-tint:  rgba(22, 69, 122, 0.07);
  --accent-line:  rgba(22, 69, 122, 0.26);

  /* --- 唯一编码色：铜。只用于证据层级标记与关卡语义，取自图内 critical 边的金描边 --- */
  --gate:       #9A5B1F;
  --gate-tint:  rgba(154, 91, 31, 0.08);
  --gate-line:  rgba(154, 91, 31, 0.30);

  /* --- 字阶（规格 §2.2）--- */
  --fs-body: 17px;
  --lh-body: 1.85;
  --fs-h2: 23px;
  --fs-h3: 19px;
  --fs-h4: 17px;

  /* --- 版心（规格 §4.3）--- */
  --sheet-w:   min(1120px, 100vw - 96px);
  --sheet-pad: clamp(48px, (var(--sheet-w) - 40em) / 2, 220px);
  /* 交互探索器铺满纸面时两侧留的边距。窄屏归零，让它与纸面同宽。 */
  --explorer-inset: 24px;

  /* --- 动效 --- */
  --ease: cubic-bezier(.22, .61, .36, 1);

  /* --- 阴影：全站唯一一处，给纸面一点重量 --- */
  --sh-sheet: 0 1px 2px rgba(28, 26, 22, .05), 0 12px 40px rgba(28, 26, 22, .07);
  --sh-pop:   0 8px 28px rgba(28, 26, 22, .15), 0 2px 6px rgba(28, 26, 22, .07);

  --topbar-h: 48px;
}

/* ---------------------------------------------------------------- 1. 基础 */
*, *::before, *::after { box-sizing: border-box; }

html {
  overflow-x: hidden;          /* 长页兜底：任何单个元素溢出都不许拽出横向滚动条 */
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--topbar-h) + 24px);
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  padding-top: var(--topbar-h);   /* 顶栏是 fixed，这里补回它在文档流里的高度 */
  background: var(--canvas);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 400;
  /* 规格 §1.6 三条禁令：不写 -webkit-font-smoothing、不写 text-rendering、正文不加 letter-spacing */
}

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 3px;
}

a { color: var(--accent); text-decoration: none; transition: color 160ms var(--ease); }
a:hover { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 3px; }

img { max-width: 100%; height: auto; display: block; }

/* Esc 从书脊把焦点还给正文时用的落点，本身不该画描边 */
#report:focus { outline: none; }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* 跳过导航 */
.skip-link {
  position: absolute; left: 12px; top: -60px; z-index: 100;
  background: var(--surface); color: var(--accent);
  padding: 10px 16px; border-radius: 8px; box-shadow: var(--sh-pop);
  font-size: 14px; font-weight: 600;
  transition: top 160ms var(--ease);
}
.skip-link:focus { top: 8px; }

/* ---------------------------------------------------------------- 2. 顶栏 */
/* fixed 而不是 sticky：移动端抽屉打开时要给 body 上 overflow:hidden 锁背景滚动，
   那会把 body 变成滚动容器，sticky 的顶栏随即跌回文档流顶部、连同关闭用的 ☰ 一起
   消失在几万像素之外。fixed 不受滚动容器变化影响。 */
#topbar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  height: var(--topbar-h);
  display: flex; align-items: center; gap: 12px;
  padding: 0 clamp(14px, 3vw, 28px);
  background: rgba(252, 251, 247, .82);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  backdrop-filter: saturate(180%) blur(20px);
  border-bottom: 1px solid var(--hair-soft);
}

#topbar .tb-brand {
  font-size: 14px; font-weight: 600; color: var(--ink);
  letter-spacing: -.01em; white-space: nowrap;
  flex: none;
}
#topbar .tb-brand a { color: inherit; }
#topbar .tb-brand a:hover { color: var(--accent); text-decoration: none; }

/* 面包屑：我现在在哪 */
#crumb {
  flex: 1; min-width: 0;
  font-size: 13px; color: var(--ink-3); font-weight: 400;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  text-align: right;
}
#crumb .sep { color: var(--ink-4); margin: 0 .5em; }
#crumb .c-sec { color: var(--ink-4); }

#topbar .tb-actions { flex: none; display: flex; align-items: center; gap: 4px; }

.tb-btn {
  width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  border: none; background: none; cursor: pointer;
  color: var(--ink-2); border-radius: 8px;
  transition: background 160ms var(--ease), color 160ms var(--ease);
}
.tb-btn:hover { background: var(--tint); color: var(--ink); }
.tb-btn svg { width: 19px; height: 19px; display: block; }

/* ☰ 打开后形变为 ✕：三根线里的中间一根淡出，上下两根旋成叉 */
#btn-menu svg path { transition: transform 220ms var(--ease), opacity 160ms var(--ease); transform-origin: 12px 12px; }
#btn-menu[aria-expanded="true"] svg .m-top { transform: translateY(5px) rotate(45deg); }
#btn-menu[aria-expanded="true"] svg .m-mid { opacity: 0; }
#btn-menu[aria-expanded="true"] svg .m-bot { transform: translateY(-5px) rotate(-45deg); }

#progress {
  position: absolute; left: 0; bottom: -1px; height: 2px; width: 0;
  background: var(--accent);
  transition: width 120ms linear;
}

/* ≥768px：书脊承担导航，顶栏隐藏报告名与 ☰ */
/* ☰ 是 .tb-actions 里唯一的控件（打印按钮已移除），所以这里连容器一起隐藏，
   否则空容器仍会吃掉顶栏的一格 gap，面包屑右侧留出一段无来由的空档。 */
@media (min-width: 768px) {
  #topbar .tb-brand { display: none; }
  #topbar .tb-actions { display: none; }
}
@media (max-width: 767px) {
  #crumb .c-sec, #crumb .sep { display: none; }
}

/* ---------------------------------------------------- 3. 章节书脊 rail（≥768px）*/
#spine {
  position: fixed; left: 0; top: 50%; transform: translateY(-50%);
  z-index: 40; width: 20px; padding: 0 8px;
  display: flex; flex-direction: column; gap: 4px;
  align-items: flex-start;
}
@media (max-width: 767px) { #spine { display: none; } }

.spine-tick {
  display: block; width: 4px; border-radius: 2px;
  background: var(--hair);
  height: clamp(14px, calc((60vh - (var(--n) - 1) * 4px) / var(--n)), 28px);
  transition: width 160ms var(--ease), background 160ms var(--ease);
}
.spine-tick[data-read] { background: var(--ink-4); }
.spine-tick[aria-current] { background: var(--accent); width: 6px; }
.spine-tick:hover { background: var(--accent-deep); width: 6px; }
.spine-tick:focus-visible { outline-offset: 3px; }

/* tick tooltip */
#spine-tip {
  position: fixed; z-index: 42; left: 26px;
  padding: 5px 11px; border-radius: 8px;
  background: rgba(252, 251, 247, .92);
  -webkit-backdrop-filter: saturate(180%) blur(16px);
  backdrop-filter: saturate(180%) blur(16px);
  border: 1px solid var(--hair-soft);
  box-shadow: var(--sh-pop);
  font-size: 13px; color: var(--ink); white-space: nowrap;
  opacity: 0; pointer-events: none;
  transition: opacity 140ms var(--ease);
}
#spine-tip[data-show] { opacity: 1; }

/* ------------------------------------------------ 4. 目录浮层 / 移动端抽屉 */
#nav-panel {
  position: fixed; left: 0; top: 0; bottom: 0; z-index: 46;
  width: 300px; padding: calc(var(--topbar-h) + 24px) 0 32px;
  background: rgba(252, 251, 247, .90);
  -webkit-backdrop-filter: saturate(180%) blur(24px);
  backdrop-filter: saturate(180%) blur(24px);
  border-right: 1px solid var(--hair);
  transform: translateX(-100%);
  transition: transform 220ms var(--ease);
  overflow-y: auto; overscroll-behavior: contain;
  visibility: hidden;
}
#nav-panel[data-open] { transform: translateX(0); visibility: visible; }

@media (max-width: 767px) {
  #nav-panel { width: 320px; transition-duration: 260ms; }
}
@media (max-width: 420px) { #nav-panel { width: min(320px, 86vw); } }

#nav-scrim {
  position: fixed; inset: 0; z-index: 44;
  background: rgba(20, 23, 28, .40);
  opacity: 0; pointer-events: none;
  transition: opacity 200ms var(--ease);
}
#nav-scrim[data-open] { opacity: 1; pointer-events: auto; }
@media (min-width: 768px) { #nav-scrim { display: none; } }

.np-head {
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: .12em; color: var(--ink-4);
  padding: 0 20px 12px;
}
#nav-panel ol { list-style: none; margin: 0; padding: 0; }
.np-ch > a {
  display: flex; align-items: baseline; gap: 10px;
  padding: 8px 20px 8px 18px;
  font-size: 13.5px; line-height: 1.5; color: var(--ink-2);
  border-left: 2px solid transparent;
}
.np-ch > a:hover { background: var(--tint); color: var(--ink); text-decoration: none; }
.np-ch > a .np-num {
  font-family: var(--font-mono); font-size: 11px; font-variant-numeric: tabular-nums;
  color: var(--ink-4); flex: none; min-width: 2.6em;
}
.np-ch[data-current] > a { color: var(--accent); font-weight: 600; border-left-color: var(--accent); }
.np-ch[data-current] > a .np-num { color: var(--accent); }

.np-secs { display: none; padding: 2px 0 8px; }
.np-ch[data-current] .np-secs { display: block; }
.np-secs a {
  display: block; padding: 5px 20px 5px 46px;
  font-size: 12.5px; line-height: 1.5; color: var(--ink-3);
  border-left: 2px solid transparent;
}
.np-secs a:hover { background: var(--tint); color: var(--ink); text-decoration: none; }
.np-secs a[data-current] { color: var(--accent); border-left-color: var(--accent-line); }

/* ---------------------------------------------------------------- 5. 纸面 */
.sheet {
  width: var(--sheet-w);
  /* 100vw 含滚动条宽度。窄屏上 --sheet-w 只减了 12px，比滚动条还窄，
     纸面会比可视宽度宽出几个像素、把整页拽出横向滚动条。这一行是唯一的防线。 */
  max-width: 100%;
  margin: 0 auto;
  background: var(--surface);
  box-shadow: var(--sh-sheet);
}
.sheet-inner { padding: 0 var(--sheet-pad); }

@media (max-width: 1199px) { :root { --sheet-w: calc(100vw - 72px); --sheet-pad: clamp(40px, (var(--sheet-w) - 40em) / 2, 220px); } }
@media (max-width: 1023px) { :root { --sheet-w: calc(100vw - 56px); --sheet-pad: 32px; --explorer-inset: 0px; } }
@media (max-width: 767px)  { :root { --sheet-w: calc(100vw - 20px); --sheet-pad: 18px; } }
@media (max-width: 420px)  { :root { --sheet-w: calc(100vw - 12px); --sheet-pad: 14px; } }

@media (max-width: 1023px) { :root { --fs-body: 17px; --lh-body: 1.82; } }
@media (max-width: 767px)  { :root { --fs-body: 16.5px; --lh-body: 1.80; --fs-h2: 21px; --fs-h3: 18px; --fs-h4: 16.5px; } }
@media (max-width: 420px)  { :root { --fs-body: 16px;  --lh-body: 1.78; --fs-h2: 20px; --fs-h3: 17.5px; --fs-h4: 16px; } }

/* 正文测量宽：40em ＝ 每行 40 个汉字（规格 §4.2）*/
.measure { max-width: 40em; }

/* ---------------------------------------------------------------- 6. 封面 */
.cover { padding-top: 88px; padding-bottom: 64px; }

.cover-kicker {
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: .12em;
  color: var(--ink-4); margin: 0 0 22px;
}
.cover h1 {
  font-size: clamp(27px, 3.7vw, 40px); font-weight: 700; line-height: 1.22;
  letter-spacing: -.02em; color: var(--ink);
  margin: 0 0 20px; max-width: 20em;
}
/* 署名：单位、作者、日期。比正文小一号、次级墨色，全角空格分隔（源稿里就是全角空格）。 */
.cover .byline {
  font-size: 15.5px; font-weight: 400; line-height: 1.7;
  color: var(--ink-2); margin: 0 0 44px;
}

/* 证据边界条：本报告的方法论就是它的身份，所以它上封面而不是数字大字报 */
.scope {
  border-top: 1px solid var(--ink);
  border-bottom: 1px solid var(--hair);
  padding: 20px 0 22px; margin: 0 0 8px;
  display: grid; gap: 20px 40px;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
}
.scope-item dt {
  font-family: var(--font-mono);
  font-size: 11px; font-weight: 600; letter-spacing: .12em;
  color: var(--ink-4); margin-bottom: 7px;
}
.scope-item dd {
  margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--ink-2);
  font-variant-numeric: tabular-nums;
}
.scope-item dd b { font-weight: 600; color: var(--ink); }

/* 封面目录：九行把全书论点交代完 */
.cover-toc { margin: 56px 0 0; }
.cover-toc h2 {
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: .12em; color: var(--ink-4);
  margin: 0 0 4px; padding: 0; border: 0;
}
.cover-toc ol { list-style: none; margin: 0; padding: 0; }
.cover-toc li { border-bottom: 1px solid var(--hair-soft); }
.cover-toc a {
  display: grid; grid-template-columns: 4.6em minmax(0, 1fr);
  gap: 4px 18px; padding: 14px 0; color: var(--ink);
  align-items: baseline;
}
.cover-toc a:hover { text-decoration: none; }
.cover-toc a:hover .ct-topic { color: var(--accent); }
.ct-num {
  font-family: var(--font-mono); font-size: 12px; font-variant-numeric: tabular-nums;
  color: var(--ink-4); letter-spacing: .04em;
}
.ct-topic { font-size: 17px; font-weight: 600; line-height: 1.45; }
.ct-claim {
  grid-column: 2; font-size: 14.5px; line-height: 1.6; color: var(--ink-3);
  margin-top: 2px;
}
@media (max-width: 560px) {
  .cover-toc a { grid-template-columns: 1fr; }
  .ct-claim { grid-column: 1; }
}

/* ---------------------------------------------------------- 7. 章扉（signature）*/
/* 章开头是一条铺满纸面的浅色带：章号 + 主题 + 判断句 + 本章图表计数。
   判断句取自源稿 h1 的全角冒号右半 —— 这是内容自带的语法，不是装饰。 */
/* 注意：.chapter 没有横向内边距，所以章扉带自己吃 --sheet-pad 就正好铺满纸面，
   不要再加负 margin —— 加了会把带子推出纸面之外。 */
.ch-opener {
  padding: 60px var(--sheet-pad) 44px;
  background: var(--tint-2);
  border-top: 1px solid var(--hair);
  border-bottom: 1px solid var(--hair-soft);
  margin: 112px 0 44px;
}
.report-body > .chapter:first-child > .ch-opener { margin-top: 0; border-top: none; }

.ch-kicker {
  display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: .12em;
  color: var(--gate); margin-bottom: 18px;
}
.ch-kicker .ch-index {
  margin-left: auto; color: var(--ink-4); letter-spacing: .08em;
  font-variant-numeric: tabular-nums;
}
.ch-opener h1 {
  font-size: clamp(26px, 2.6vw, 34px); font-weight: 700; line-height: 1.32;
  letter-spacing: -.015em; color: var(--ink); margin: 0; max-width: 22em;
}
.ch-claim {
  margin: 14px 0 0; max-width: 32em;
  font-size: clamp(16px, 1.4vw, 18.5px); font-weight: 400; line-height: 1.62;
  color: var(--ink-2);
  padding-left: 16px; border-left: 3px solid var(--gate-line);
}

@media (max-width: 767px) {
  .ch-opener { margin: 80px 0 32px; padding: 40px var(--sheet-pad) 32px; }
  .ch-kicker .ch-index { margin-left: 0; width: 100%; }
}

/* ---------------------------------------------------------------- 8. 正文 */
.report-body { padding-bottom: 8px; }

.content h2 {
  font-size: var(--fs-h2); font-weight: 700; line-height: 1.45; letter-spacing: -.01em;
  color: var(--ink);
  margin: 64px 0 16px; padding-top: 24px;
  border-top: 1px solid var(--hair-soft);
}
.content h3 {
  font-size: var(--fs-h3); font-weight: 600; line-height: 1.55;
  color: var(--ink); margin: 40px 0 12px;
}
.content h4 {
  font-size: var(--fs-h4); font-weight: 600; line-height: 1.70;
  color: var(--ink); margin: 24px 0 8px;
}
@media (max-width: 767px) {
  .content h2 { margin-top: 48px; }
  .content h3 { margin-top: 32px; }
}

/* 段落：首行缩进 2em + 10px 若有若无的段距（规格 §3.1）
   text-indent 只写在 p 上，绝不写在容器上（规格 §3.6.1）*/
.content p {
  text-indent: 2em;
  margin: 0 0 10px;
  text-align: left;
  overflow-wrap: break-word;
  /* 不写 word-break: break-all —— 会关闭中文标点禁则（规格 §5.3）*/
}

/* 复位清单（规格 §3.6.2）*/
.content :where(
  li, blockquote, figure, figcaption, .callout, .tbl-wrap,
  td, th, dd, dt, .footnotes, .toc, .meta, .ev, .explorer-slot, details
) p { text-indent: 0; }

.content li { text-indent: 0; }
.fig-title, .tbl-title, .fig-note, .tbl-note, .footnote-item { text-indent: 0; }

/* 接续段逃生舱：语气未完的续写（规格 §3.6.3-4）*/
.content p.p-cont { text-indent: 0; }

/* 凸排（规格 §3.6.3-5）*/
.content ol.hang > li { text-indent: -2em; padding-left: 2em; }

.content ul, .content ol { margin: 16px 0; padding-left: 2em; }
.content li { margin-bottom: 8px; }
.content li > ul, .content li > ol { margin: 8px 0; }

.content strong { font-weight: 600; color: var(--ink); }
/* strong 用 600 不用 700：macOS 上是真 Semibold，Windows 上等同 Bold（规格 §1.5）*/

.content code {
  font-family: var(--font-mono); font-size: 0.92em;
  background: var(--tint); padding: .12em .38em; border-radius: 4px;
  color: var(--ink-2);
}

.content blockquote {
  margin: 24px 0; padding-left: 16px;
  border-left: 3px solid var(--hair);
  color: var(--ink-2);
}
.content blockquote p { font-size: 16px; line-height: 1.80; }

.content hr { border: 0; border-top: 1px solid var(--hair-soft); margin: 40px 0; }

/* 数字与单位不可拆（规格 §5.3）*/
.nowrap { white-space: nowrap; }

/* 中西文自动间距：源稿已有半角空格，normal 不会重复插入（规格 §5.2）*/
.content { text-autospace: normal; text-spacing-trim: normal; }

/* ------------------------------------------------------------ 9. 提示卡 */
.callout {
  margin: 32px 0; padding: 20px 22px;
  background: var(--tint); border-radius: 12px;
  border: 1px solid var(--hair-soft);
}
.callout p { font-size: 16px; line-height: 1.78; margin-bottom: 8px; }
.callout p:last-child { margin-bottom: 0; }
.callout .callout-label {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  letter-spacing: .12em; color: var(--ink-4);
  display: block; margin-bottom: 10px;
}

/* ------------------------------------------------- 10. 图：对齐正文栏宽 + 证据栏 */
/* R2-8：图不再出血到纸面边缘。图块、图题、证据栏的左右边界与段落严格对齐，
   宽图在栏宽内缩放，看细节走点击放大与交互探索器。 */
figure.fig { margin: 40px 0; }

figure.fig .fig-frame {
  /* matplotlib 侧已把 figure 与 axes 背景改成 --surface（#FBFAF6），图版与纸面同色，
     衬垫因此撤掉：底色比纸面深一档的 --tint 加一圈描边，现在会在图周围围出一道灰环，
     它自己就成了新的接缝。去掉底色、描边与内边距，图与纸面连成一个面，
     边界交给图版自身那道 1px 极淡描边（4.5%）交代。 */
  background: none;
  border: 0;
  padding: 0;
  cursor: zoom-in;
  position: relative;
}
figure.fig img {
  width: 100%; height: auto;
  border-radius: 5px;
  box-shadow: 0 0 0 1px rgba(28, 26, 22, .045);
}

/* 放大提示：不常驻，hover 才出现 */
figure.fig .fig-zoom {
  position: absolute; right: 12px; bottom: 12px;
  font-family: var(--font-mono); font-size: 11px; letter-spacing: .06em;
  background: rgba(252, 251, 247, .94); color: var(--ink-2);
  border: 1px solid var(--hair); border-radius: 6px; padding: 4px 9px;
  opacity: 0; transition: opacity 160ms var(--ease); pointer-events: none;
}
figure.fig .fig-frame:hover .fig-zoom { opacity: 1; }

figure.fig figcaption { padding: 16px 0 0; }

/* 图题在下（规格 §6.1）*/
.fig-title, .tbl-title {
  font-size: 14.5px; font-weight: 600; line-height: 1.50; color: var(--ink);
  margin: 0;
}
/* 重出标记：同一图在别处再次出现，沿用原编号并回链首见处 */
.fig-repeat {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 600; letter-spacing: .08em;
  color: var(--ink-4); background: var(--tint);
  border: 1px solid var(--hair-soft); border-radius: 4px;
  padding: 1px 6px; margin-left: .7em; vertical-align: .1em;
}
.fig-repeat:hover { color: var(--accent); border-color: var(--accent-line); text-decoration: none; }

.fig-num, .tbl-num {
  font-family: var(--font-mono); font-variant-numeric: tabular-nums;
  margin-right: .7em; color: var(--gate); font-weight: 600;
}

/* ---- signature：证据栏 ----------------------------------------------------
   45 图 + 38 表，每一件都带口径 / 数据源 / 数据截止日期。这是本报告最强的身份，
   所以它是一个被设计过的结构化记录，而不是一段跑长的小字。
   R2-9：不再用线型或角标区分已核验层与报道层，统一按合并口径呈现，
   证据分层的方法说明集中在附录。左侧竖线是中性的，只承担「这是一条记录」。 */
.ev {
  margin: 10px 0 0;
  padding-left: 14px;
  border-left: 2px solid var(--hair);
}

.ev-row { display: grid; grid-template-columns: 4.2em minmax(0, 1fr); gap: 2px 12px; }
.ev-row + .ev-row { margin-top: 5px; }
.ev-k {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  letter-spacing: .10em; color: var(--ink-4); line-height: 1.85;
  white-space: nowrap;
}
/* 证据栏里全是长英文报告名，不给断词的话 grid 轨道会撑到 min-content 之外 */
.ev-v { font-size: 13.5px; line-height: 1.72; color: var(--ink-3); overflow-wrap: break-word; min-width: 0; }

/* 图注兜底（无结构化字段时）*/
.fig-note, .tbl-note {
  font-size: 13.5px; line-height: 1.72; color: var(--ink-3);
  margin: 8px 0 0;
}

@media (max-width: 640px) {
  .ev-row { grid-template-columns: minmax(0, 1fr); gap: 1px; }
  .ev-k { line-height: 1.5; }
}

/* ---------------------------------------------------------- 11. 表格 */
figure.tbl { margin: 32px 0; }
.tbl-head { margin-bottom: 12px; }          /* 表题在上（规格 §6.1）*/
.tbl-note { margin-top: 12px; }
figure.tbl .ev { margin-top: 12px; }

.tbl-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--hair-soft);
  border-radius: 10px;
}
/* 无表题的行内表：与编号表同样的滚动壳，间距自带 */
.tbl-wrap.tbl-inline { margin: 24px 0; }

.tbl-wrap.can-right { box-shadow: inset -18px 0 16px -18px rgba(20,23,28,.22); }
.tbl-wrap.can-left  { box-shadow: inset  18px 0 16px -18px rgba(20,23,28,.22); }
.tbl-wrap.can-left.can-right {
  box-shadow: inset -18px 0 16px -18px rgba(20,23,28,.22),
              inset  18px 0 16px -18px rgba(20,23,28,.22);
}

table {
  width: 100%; border-collapse: collapse;
  font-size: 14.5px; line-height: 1.60;
}
th {
  font-size: 13px; font-weight: 600; line-height: 1.50; letter-spacing: .01em;
  background: var(--tint); color: var(--ink);
  text-align: left; padding: 10px 14px;
  border-bottom: 1px solid var(--hair);
  vertical-align: bottom;
}
td {
  padding: 10px 14px;
  border-bottom: 1px solid var(--hair-soft);
  font-variant-numeric: tabular-nums;   /* 表格开等宽数字（规格 §5.6）*/
  color: var(--ink-2);
  vertical-align: top;
}
tbody tr:last-child td { border-bottom: none; }
th:first-child, td:first-child { min-width: 4.5em; font-weight: 600; color: var(--ink); }
.col-num { text-align: right; }
th.col-num { text-align: right; }

@media (max-width: 767px) { table { min-width: 560px; } }
@media (max-width: 900px) {
  th:first-child, td:first-child {
    position: sticky; left: 0; z-index: 1;
    background: var(--surface);
  }
  th:first-child { background: var(--tint); }
}

/* ------------------------------------------------------- 12. 交互探索器 */
/* 版式规则分两类，不要混：
   静态图与表格对齐正文栏宽（R2-8，图不得突出于文段）；
   交互探索器铺满纸面宽度，因为它信息量大、要同时容下图例栏、画布与详情栏，
   40em 的栏宽里画布只剩两百多像素，网络看不成。
   做法是用负外边距抵掉 .sheet-inner 的左右内边距，再留一点边距不贴死纸边。 */
.explorer-slot {
  margin: 40px calc(var(--explorer-inset) - var(--sheet-pad));
  padding: 0;
}
/* 图题、提示与静态图回退仍归正文栏，与其余图注左右边界对齐 */
.explorer-cap, .explorer-fallback {
  margin-inline: calc(var(--sheet-pad) - var(--explorer-inset));
}
.explorer-shell {
  position: relative;
  border: 1px solid var(--hair-soft);
  border-radius: 10px;
  overflow: hidden;
  background: var(--tint);
}
.explorer-shell iframe {
  display: block; width: 100%; height: 820px; border: 0;
}

/* ---- 交互图全屏 -------------------------------------------------------- */
/* 栏宽只有 40em，网络图在里面看不清细节，全屏是主要的看图路径（窄屏尤其）。
   做法是给容器本身加 position: fixed，iframe 节点不动 —— 移动 DOM 会让 iframe
   重新加载，读者已经设好的筛选与选中状态全部丢失。 */

.explorer-shell[data-fs] {
  position: fixed; inset: 12px; z-index: 80;
  border-radius: 12px; border-color: var(--hair);
  background: var(--surface);
  box-shadow: 0 24px 70px rgba(20, 23, 28, .28);
}
.explorer-shell[data-fs] iframe { height: 100%; }
/* 全屏时原位留一个等高占位，退出后页面不跳 */
.explorer-slot[data-fs-placeholder] { min-height: var(--fs-ph, 820px); }

#fs-scrim {
  position: fixed; inset: 0; z-index: 79;
  background: rgba(20, 23, 28, .46);
  opacity: 0; pointer-events: none;
  transition: opacity 200ms var(--ease);
}
#fs-scrim[data-open] { opacity: 1; pointer-events: auto; }

@media (max-width: 640px) {
  .explorer-shell[data-fs] { inset: 0; border-radius: 0; border: 0; }
}
.explorer-cap { padding: 16px 0 0; }
.explorer-hint {
  font-size: 13.5px; line-height: 1.72; color: var(--ink-3);
  margin: 8px 0 0;
}
/* 左右外边距由本节开头的规则给（推回正文栏），这里只设上下，不用 margin 简写覆盖它 */
.explorer-fallback { margin-top: 12px; margin-bottom: 0; }
.explorer-fallback > summary {
  font-size: 13.5px; color: var(--accent); cursor: pointer;
  list-style: none; padding: 6px 0;
}
.explorer-fallback > summary::-webkit-details-marker { display: none; }
.explorer-fallback > summary::before { content: "▸ "; color: var(--ink-4); }
.explorer-fallback[open] > summary::before { content: "▾ "; }
.explorer-fallback figure.fig { margin-inline: 0; }
.explorer-fallback figure.fig figcaption { padding-inline: 0; }

@media (max-width: 767px) { .explorer-shell iframe { height: 560px; } }

/* --------------------------------------------------------- 13. 脚注 */
.content sup.fn-ref { line-height: 0; }
.content sup.fn-ref a {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  color: var(--accent); padding: 0 .18em;
  font-variant-numeric: tabular-nums;
}
.footnotes {
  margin-top: 72px; padding-top: 24px;
  border-top: 1px solid var(--hair);
}
.footnotes h2 {
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: .12em; color: var(--ink-4);
  margin: 0 0 14px; padding: 0; border: 0;
}
.footnotes ol { list-style: none; margin: 0; padding: 0; counter-reset: none; }
.footnote-item {
  display: grid; grid-template-columns: 2.6em minmax(0, 1fr); gap: 10px;
  font-size: 13.5px; line-height: 1.75; color: var(--ink-3);
  margin-bottom: 10px;
}
.footnote-item .fn-mark {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  color: var(--ink-4); padding-top: .28em;
  font-variant-numeric: tabular-nums;
}
.footnote-item .fn-back { margin-left: .5em; color: var(--ink-4); }
.footnote-item:target { background: var(--accent-tint); border-radius: 6px; }

/* --------------------------------------------------------- 14. 页脚 */
.site-foot {
  padding: 56px var(--sheet-pad) 72px;
  border-top: 1px solid var(--hair);
  color: var(--ink-3); font-size: 13.5px; line-height: 1.75;
}
.site-foot .foot-label {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  letter-spacing: .12em; color: var(--ink-4); margin-bottom: 10px;
}
.site-foot p { max-width: 44em; margin: 0 0 8px; text-indent: 0; }
.canvas-foot {
  text-align: center; padding: 28px 16px 44px;
  font-family: var(--font-mono); font-size: 11px; letter-spacing: .1em;
  color: var(--ink-4);
}

/* --------------------------------------------------------- 15. 灯箱 */
#lightbox {
  position: fixed; inset: 0; z-index: 90;
  background: rgba(20, 23, 28, .92);
  display: none; align-items: center; justify-content: center;
  padding: 40px 24px;
  cursor: zoom-out;
}
#lightbox[data-open] { display: flex; }
#lightbox img {
  max-width: 100%; max-height: calc(100vh - 128px);
  object-fit: contain; cursor: default;
  box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
#lightbox .lb-cap {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 16px 24px 22px; text-align: center;
  color: #E8EAEE; font-size: 13.5px; line-height: 1.6;
  background: linear-gradient(to top, rgba(20,23,28,.85), rgba(20,23,28,0));
}
#lightbox .lb-close {
  position: absolute; right: 16px; top: 16px;
  width: 44px; height: 44px; border-radius: 50%;
  border: none; background: rgba(255,255,255,.14); color: #fff;
  font-size: 20px; cursor: pointer; line-height: 1;
}
#lightbox .lb-close:hover { background: rgba(255,255,255,.24); }

/* --------------------------------------------------------- 16. 动效 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  html { scroll-behavior: auto; }
}

/* --------------------------------------------------------- 17. 打印 */
@media print {
  :root { --sheet-w: 100%; --sheet-pad: 0; }
  body { background: #fff; padding-top: 0; }
  #topbar, #spine, #nav-panel, #nav-scrim, #lightbox, .skip-link, #spine-tip { display: none !important; }
  .sheet { width: 100%; box-shadow: none; }
  .ch-opener { break-before: page; background: none; padding-top: 24px; }
  figure.fig, figure.tbl, .explorer-slot { break-inside: avoid; }
  .explorer-shell { display: none; }
  .explorer-fallback { display: block; }
  .explorer-fallback > summary { display: none; }
  .content p { text-indent: 2em; }   /* 打印保留缩进（规格 §3.6.3-8）*/
  a { color: inherit; text-decoration: none; }
}

/* 带 p 值列的统计表：显著行与不显著行用极浅底色分段（表 2-2） */
tr.row-sig td { background: rgba(196, 98, 45, 0.055); }
tr.row-ns td { background: rgba(106, 106, 106, 0.04); }

/* 封面署名里的实验室链接：保持署名的次级墨色，悬停时显链接色，不打扰封面克制感 */
.cover .byline a { color: inherit; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: rgba(0,0,0,0.25); }
.cover .byline a:hover { color: var(--accent); text-decoration-color: currentColor; }

/* 封面的两个日期：首次发布固定，最后更新随每次上线走 */
.cover .byline-dates {
  margin: 4px 0 0;
  font-size: 14px;
  color: var(--ink-3, #7A756C);
  letter-spacing: 0.01em;
}
.cover .byline-dates .sep { margin: 0 8px; opacity: 0.55; }
