/* ========================================================================
   计算物理导论 —— 阅读资料（doc）样式
   配色与讲义一致：深青 #06303a / 青 #1b93a8 / 淡青白 #f2f9fb

   【正文字号统一缩放 —— --fs】
   正文（章节、段落、表格、代码块、公式说明、左侧目录）的每一处字号都写成
   `calc(N * var(--fs, 1))`，由单一变量 --fs 控制（1 = 原始字号）。
   阅读页右下角的浮动控件（A− / A＋）与 Ctrl + / − / 0 会改这个变量，
   设置存在 localStorage 键 `cpSlideFs` 里，**与放映页共用**，跨页沿用。
   页面外壳（hero 头图区、footer 页脚、.fs-fab 控件本身）保持固定字号，
   与放映页「外壳不参与缩放」的约定一致。新增样式请沿用同样写法。
   ======================================================================== */

:root {
  /* 正文字号统一缩放系数：1 = 原始字号。由 doc.js 在 <html> 上覆盖 */
  --fs: 1;
  --teal: #0e4d5c;
  --lteal: #1b93a8;
  --bg:     #f2f9fb;
  --card:   #ffffff;
  --border: #cfe4ea;
  --text:   #10333d;
  --muted:  #55717a;
  --accent: #1b93a8;
  --accent-soft: #d7eef3;
  --hero:   #06303a;
  --info-bg:#ecf7f9;
  --ok-bg:  #e6f4ea;
  --warn-bg:#fdf6e3;
  --mono: "JetBrains Mono", "Fira Code", Consolas, "Courier New", monospace;
}

* { box-sizing: border-box; }

body {
  margin: 0; background: var(--bg); color: var(--text);
  font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "SimSun", "Microsoft YaHei", sans-serif;
  line-height: 1.9;
  -webkit-font-smoothing: antialiased;
}

/* ---------- 头部 ---------- */
.hero {
  background: linear-gradient(135deg, #06303a 0%, #0b4552 100%);
  color: #f2f9fb; padding: 3.2rem 2rem 2.6rem;
}
.hero-inner { max-width: 1180px; margin: 0 auto; }
.hero .crumb { font-size: 13px; color: #93b3bc; margin-bottom: 14px; }
.hero .crumb a { color: #93b3bc; text-decoration: none; }
.hero .crumb a:hover { color: var(--accent); }
.hero .crumb .sep { margin: 0 8px; color: #2c6b78; }
.hero h1 { font-size: 2.1rem; margin: 0 0 .5rem; font-weight: 800; letter-spacing: .02em; }
.hero .sub { font-size: 1rem; color: #a9c6ce; }
.hero .tags { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 1.1rem; }
.hero .tags span {
  background: rgba(255,255,255,.13); border: 1px solid rgba(255,255,255,.3);
  border-radius: 20px; padding: .16em .85em; font-size: .8rem; color: #eaf7fa;
}
.hero .btnline { margin-top: 1.3rem; display: flex; flex-wrap: wrap; gap: .6rem; }
.hero .btnline a {
  display: inline-block; text-decoration: none; font-size: .86rem;
  padding: .45em 1.1em; border-radius: 6px; border: 1px solid var(--accent);
  background: var(--accent); color: #fff;
}
.hero .btnline a.ghost { background: transparent; color: var(--accent); }

/* ---------- 布局：左侧目录 + 正文 ---------- */
.layout { max-width: 1180px; margin: 0 auto; padding: 2.4rem 1.2rem 5rem; display: grid; grid-template-columns: 240px 1fr; gap: 2.6rem; align-items: start; }
@media (max-width: 980px) { .layout { grid-template-columns: 1fr; } }

nav.toc { position: sticky; top: 1.2rem; font-size: calc(.88rem * var(--fs, 1)); background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 1.1rem 1.2rem; max-height: calc(100vh - 3rem); overflow-y: auto; }
nav.toc h3 { font-size: calc(.82rem * var(--fs, 1)); letter-spacing: .12em; color: var(--muted); text-transform: uppercase; margin: 0 0 .7rem; font-weight: 700; }
nav.toc ol { list-style: none; margin: 0; padding: 0; counter-reset: t; }
nav.toc > ol > li { margin: .3rem 0; }
nav.toc a { color: var(--text); text-decoration: none; display: block; padding: .2rem 0; border-left: 3px solid transparent; padding-left: .55rem; }
nav.toc a:hover { color: var(--accent); border-left-color: var(--accent); }
nav.toc .sub a { font-size: calc(.83rem * var(--fs, 1)); color: var(--muted); padding-left: 1.1rem; }
@media (max-width: 980px) { nav.toc { position: static; max-height: none; } }

/* 正文列的基础字号也跟随 --fs。
   作用：① 没有显式字号声明的后代（如包裹公式的 .fml）会继承它；
   ② mjx-container 的 `font-size: 108%` 是相对单位——只有父级字号会变，
      公式才会跟着一起缩放（否则公式会「纹丝不动」，与正文脱节）。
   --fs=1 时 1rem 仍是 16px，与改造前完全一致，无排版漂移。

   min-width: 0 是必须的：main 是 .layout 网格的 1fr 子项，而网格子项的
   `min-width` 默认是 auto（= 内容的 min-content 宽度），字号放大后内容的
   min-content 会超过轨道宽度，把整页横向撑开（doc_03 在 140% / 1366 下
   曾多出 458px）。置 0 后由子元素各自内部滚动（.fml / pre 已有 overflow-x:auto）。 */
main { font-size: calc(1rem * var(--fs, 1)); min-width: 0; }

/* ---------- 章节 ---------- */
section.chap { margin-bottom: 3.4rem; scroll-margin-top: 1rem; }
h2.chap-title {
  font-size: calc(1.42rem * var(--fs, 1)); margin: 0 0 1.2rem; padding: .5rem 0 .5rem 1rem;
  border-left: 6px solid var(--accent); color: var(--hero); line-height: 1.4;
}
h2.chap-title .pp { display: block; font-size: calc(.76rem * var(--fs, 1)); font-weight: 400; color: var(--muted); font-family: var(--mono); margin-top: .35rem; letter-spacing: .04em; }
h3.sec-title { font-size: calc(1.12rem * var(--fs, 1)); margin: 2.2rem 0 .9rem; color: #0b6b7d; }
h3.sec-title .pp { font-size: calc(.75rem * var(--fs, 1)); color: var(--muted); font-family: var(--mono); font-weight: 400; margin-left: .5rem; }
h4 { font-size: calc(1rem * var(--fs, 1)); margin: 1.5rem 0 .6rem; color: var(--hero); }
p { margin: .85rem 0; font-size: calc(.99rem * var(--fs, 1)); }
ul, ol { padding-left: 1.5rem; }
li { margin: .35rem 0; font-size: calc(.99rem * var(--fs, 1)); }
li::marker { color: var(--accent); }
strong { color: #0a2830; }
code { font-family: var(--mono); font-size: .88em; background: #eaf6f9; border-radius: 4px; padding: .1em .4em; }

/* ---------- 正文里的外部链接（.ext） ----------
   指向站外资源（如 Gaussian 官网）的链接。用 class 显式标注，
   与「页码对照表」里的内部锚点（.ppt-map a）区分开。 */
main a.ext {
  color: #0b6b7d; text-decoration: underline; font-weight: 600;
  text-underline-offset: 2px; text-decoration-thickness: 1px;
  overflow-wrap: anywhere;
}
main a.ext:hover { color: #06303a; text-decoration-thickness: 2px; }

/* ---------- 卡片 / 提示块 ---------- */
.box { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 1.2rem 1.5rem; margin: 1.2rem 0; }
.box.info { background: var(--info-bg); border-color: #cee7ed; }
.box.ok   { background: var(--ok-bg); border-color: #a9d29a; }
.box.warn { background: var(--warn-bg); border-color: #bfe0e7; }
.box .lb { display: inline-block; font-size: calc(.74rem * var(--fs, 1)); font-weight: 700; color: #0b6b7d; letter-spacing: .1em; margin-right: .5rem; }
.box.ok .lb { color: #3d6c2e; }
.box p:first-child { margin-top: 0; }
.box p:last-child { margin-bottom: 0; }

/* ---------- 公式 ---------- */
mjx-container { font-size: 108% !important; }
.fml { background: #fff; border: 1px dashed var(--border); border-radius: 8px; padding: 1rem 1.2rem; margin: 1.1rem 0; overflow-x: auto; text-align: center; }
.fml-note { font-size: calc(.84rem * var(--fs, 1)); color: var(--muted); text-align: center; margin-top: .3rem; }
.term { display: inline-block; background: var(--accent-soft); color: #0b6b7d; border-radius: 4px; padding: 0 .42em; font-weight: 600; }

/* ---------- 表格 ---------- */
table.tbl { width: 100%; border-collapse: collapse; margin: 1.1rem 0; font-size: calc(.92rem * var(--fs, 1)); background: #fff; border-radius: 8px; overflow: hidden; box-shadow: 0 1px 4px rgba(0,0,0,.05); }
table.tbl th, table.tbl td { padding: .55rem .8rem; border-bottom: 1px solid var(--border); text-align: left; vertical-align: top; }
table.tbl th { background: var(--hero); color: #f2f9fb; font-weight: 600; font-size: calc(.87rem * var(--fs, 1)); }
table.tbl tr:nth-child(even) td { background: #f6fcfd; }
table.tbl tr:hover td { background: #e8f5f9; }
table.tbl td.c, table.tbl th.c { text-align: center; font-family: var(--mono); font-size: calc(.86rem * var(--fs, 1)); }
.scroll-x { overflow-x: auto; }

/* ---------- 图片 ---------- */
.figs { display: flex; flex-wrap: wrap; gap: 1.1rem; justify-content: center; margin: 1.3rem 0; }
.figs figure { margin: 0; text-align: center; max-width: 100%; }
.figs img { max-width: 100%; border: 1px solid var(--border); border-radius: 8px; background: #fff; }
.figs figcaption { font-size: calc(.83rem * var(--fs, 1)); color: var(--muted); margin-top: .4rem; }
.figs.small img { max-height: 240px; }
.figs.mid img { max-height: 340px; }

/* ---------- 例题 ---------- */
.ex { background: #fff; border: 1px solid var(--border); border-left: 5px solid var(--lteal); border-radius: 8px; padding: 1.1rem 1.4rem; margin: 1.3rem 0; }
.ex .hd { font-size: calc(.8rem * var(--fs, 1)); font-weight: 700; color: #0b6b7d; letter-spacing: .1em; margin-bottom: .5rem; }
.ex .sol { border-top: 1px dashed var(--border); margin-top: .8rem; padding-top: .6rem; }
.ex .sol .lb { font-size: calc(.78rem * var(--fs, 1)); font-weight: 700; color: #3d6c2e; letter-spacing: .1em; }

/* ---------- 页码对照 ---------- */
.ppt-map { font-family: var(--mono); font-size: calc(.85rem * var(--fs, 1)); }
.ppt-map a { color: var(--lteal); text-decoration: none; }
.ppt-map a:hover { text-decoration: underline; }
.ppt-map tr.ins td { background: #f0fafc; }
.ppt-map tr.ins td.c a { color: #0e4d5c; font-weight: 700; }

footer { text-align: center; color: var(--muted); font-size: .84rem; padding: 2rem; border-top: 1px solid var(--border); }

/* ---------- 代码块（LAMMPS 输入脚本 / 命令行） ---------- */
pre {
  font-family: var(--mono); font-size: calc(.84rem * var(--fs, 1)); line-height: 1.7;
  background: #f4fbfc; border: 1px solid var(--border);
  border-left: 4px solid var(--accent); border-radius: 8px;
  padding: .9rem 1.1rem; margin: 1.1rem 0; overflow-x: auto;
  color: var(--text); white-space: pre;
}
pre code { background: transparent; padding: 0; font-size: inherit; }
pre .cm { color: #6f8f99; }
pre .kw { color: #0b6b7d; font-weight: 700; }

/* 单行 URL / 命令条 */
.urlline {
  font-family: var(--mono); font-size: calc(.88rem * var(--fs, 1)); line-height: 1.7;
  background: var(--hero); color: #e2f3f7;
  border-radius: 8px; padding: .6rem 1rem; margin: 1rem 0;
  overflow-x: auto; white-space: nowrap;
}
.urlline a { color: #b6e0e9; text-decoration: none; border-bottom: 1px dashed var(--accent); }
.urlline .lbk { color: #7fa3ad; margin-right: .6rem; }

/* 页码对照表里指向插页的行 */
.ppt-map tr.now td { background: #e8f5f9; }

/* ---------- 正文字号控制（右下角浮动按钮） ----------
   阅读页没有放映页那样的底部工具栏，所以用固定定位的浮动控件。
   属于「阅读器外壳」：字号一律写死 px，**不跟随 --fs 缩放**。 */
.fs-fab {
  position: fixed; right: 18px; bottom: 18px; z-index: 90;
  display: flex; align-items: center; gap: 5px;
  background: var(--hero); border-radius: 22px; padding: 5px 7px;
  box-shadow: 0 4px 14px rgba(6, 48, 58, .28);
}
.fs-fab button {
  font-family: inherit; font-size: 13px; line-height: 1;
  color: #dff1f5; background: transparent; cursor: pointer;
  border: 1px solid #2c6b78; border-radius: 14px; padding: 6px 11px;
  transition: background .15s, color .15s, border-color .15s;
}
.fs-fab button:hover:not(:disabled) {
  background: var(--accent); color: #fff; border-color: var(--accent);
}
.fs-fab button:disabled { opacity: .38; cursor: default; }
.fs-fab .fs-val {
  font-family: var(--mono); font-size: 12px; color: #a9c6ce;
  min-width: 44px; text-align: center; user-select: none;
}
/* 键盘提示：告诉读者 `=` / `−` / `0` 也能调字号。
   同样是「外壳」，字号写死 px、不跟随 --fs；窄屏放不下就隐藏。 */
.fs-fab .fs-hint {
  font-size: 11px; line-height: 1; color: #8fb3bc;
  padding: 0 8px 0 6px; white-space: nowrap; user-select: none;
}
@media (max-width: 720px) { .fs-fab .fs-hint { display: none; } }
@media (max-width: 560px) { .fs-fab { right: 10px; bottom: 10px; } }
@media print { .fs-fab { display: none; } }

