/* ============================================================
   tokens.css — 三色设计令牌(纸 / 青 / 朱)
   规则:全站只用三个"具体颜色"锚点(色相 hue),
        其余一切颜色都是它们的 亮度/饱和度/透明度 派生。
   ① 纸 paper (hue≈33,暖)  → 背景、表面、文字、分隔线
   ② 青 azure (hue≈200)     → 装饰:链接、结构线、交互
   ③ 朱 cinnabar (hue≈9)    → 标注:标题印记、品牌、关键高亮
   亮/暗双模式皆带"一点点色彩",非纯黑白。
   ============================================================ */

:root {
  /* —— 三色锚点的色相/饱和度(亮暗共用同一组色相) —— */
  --paper-h: 33;
  --azure-h: 200;
  --cinnabar-h: 9;

  /* 阅读与布局常量(非颜色) */
  --measure: 42rem;          /* 正文阅读宽度 */
  --page-max: 78rem;
  --radius: 3px;
  --radius-lg: 8px;
  --rule: 1px;
  --space: clamp(1rem, 0.6rem + 1.6vw, 1.6rem);
  --gut: clamp(1.1rem, 0.7rem + 2.2vw, 2.6rem);
  --header-h: 60px;
  --ease: cubic-bezier(.22,.61,.36,1);
}

/* ===================== 浅色(暖米纸) ===================== */
:root,
:root[data-theme="light"] {
  color-scheme: light;
  --paper-s: 30%;
  --azure-s: 54%;
  --cinnabar-s: 64%;

  /* 背景与表面 —— 纸色的高亮度派生 */
  --bg:        hsl(var(--paper-h) calc(var(--paper-s) + 8%) 95.5%);
  --bg-tint:   hsl(var(--paper-h) calc(var(--paper-s) + 6%) 93%);
  --surface:   hsl(var(--paper-h) var(--paper-s) 96.5%);
  --surface-2: hsl(var(--paper-h) calc(var(--paper-s) - 4%) 90%);
  --line:      hsl(var(--paper-h) calc(var(--paper-s) - 10%) 80%);
  --line-soft: hsl(var(--paper-h) calc(var(--paper-s) - 12%) 86%);

  /* 文字 —— 纸色的低亮度派生(暖墨) */
  --text:      hsl(var(--paper-h) calc(var(--paper-s) - 6%) 16%);
  --text-soft: hsl(var(--paper-h) calc(var(--paper-s) - 12%) 36%);
  --text-faint:hsl(var(--paper-h) calc(var(--paper-s) - 16%) 52%);

  /* 装饰青 */
  --accent:      hsl(var(--azure-h) var(--azure-s) 35%);
  --accent-soft: hsl(var(--azure-h) calc(var(--azure-s) - 16%) 46%);
  --accent-wash: hsl(var(--azure-h) var(--azure-s) 35% / .08);

  /* 标注朱 */
  --mark:       hsl(var(--cinnabar-h) var(--cinnabar-s) 47%);
  --mark-soft:  hsl(var(--cinnabar-h) calc(var(--cinnabar-s) - 10%) 56%);
  --mark-wash:  hsl(var(--cinnabar-h) var(--cinnabar-s) 47% / .10);
  --mark-line:  hsl(var(--cinnabar-h) var(--cinnabar-s) 47% / .28);

  --shadow: 0 1px 2px hsl(var(--paper-h) 20% 20% / .06),
            0 6px 24px -8px hsl(var(--paper-h) 20% 20% / .12);
  --selection: hsl(var(--cinnabar-h) var(--cinnabar-s) 47% / .18);
}

/* ===================== 深色(暖墨黑) ===================== */
:root[data-theme="dark"] {
  color-scheme: dark;
  --paper-s: 16%;
  --azure-s: 50%;
  --cinnabar-s: 66%;

  --bg:        hsl(var(--paper-h) calc(var(--paper-s) - 2%) 9.5%);
  --bg-tint:   hsl(var(--paper-h) var(--paper-s) 12%);
  --surface:   hsl(var(--paper-h) var(--paper-s) 13%);
  --surface-2: hsl(var(--paper-h) calc(var(--paper-s) + 2%) 17.5%);
  --line:      hsl(var(--paper-h) var(--paper-s) 25%);
  --line-soft: hsl(var(--paper-h) var(--paper-s) 20%);

  --text:      hsl(var(--paper-h) calc(var(--paper-s) + 6%) 88%);
  --text-soft: hsl(var(--paper-h) var(--paper-s) 66%);
  --text-faint:hsl(var(--paper-h) calc(var(--paper-s) - 2%) 50%);

  --accent:      hsl(var(--azure-h) calc(var(--azure-s) + 6%) 64%);
  --accent-soft: hsl(var(--azure-h) var(--azure-s) 72%);
  --accent-wash: hsl(var(--azure-h) var(--azure-s) 64% / .12);

  --mark:       hsl(var(--cinnabar-h) calc(var(--cinnabar-s) + 4%) 63%);
  --mark-soft:  hsl(var(--cinnabar-h) var(--cinnabar-s) 70%);
  --mark-wash:  hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .14);
  --mark-line:  hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .34);

  --shadow: 0 1px 2px hsl(0 0% 0% / .3),
            0 10px 30px -10px hsl(0 0% 0% / .5);
  --selection: hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .26);
}

/* 跟随系统(未手动指定时) */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    color-scheme: dark;
    --paper-s: 16%; --azure-s: 50%; --cinnabar-s: 66%;
    --bg:        hsl(var(--paper-h) calc(var(--paper-s) - 2%) 9.5%);
    --bg-tint:   hsl(var(--paper-h) var(--paper-s) 12%);
    --surface:   hsl(var(--paper-h) var(--paper-s) 13%);
    --surface-2: hsl(var(--paper-h) calc(var(--paper-s) + 2%) 17.5%);
    --line:      hsl(var(--paper-h) var(--paper-s) 25%);
    --line-soft: hsl(var(--paper-h) var(--paper-s) 20%);
    --text:      hsl(var(--paper-h) calc(var(--paper-s) + 6%) 88%);
    --text-soft: hsl(var(--paper-h) var(--paper-s) 66%);
    --text-faint:hsl(var(--paper-h) calc(var(--paper-s) - 2%) 50%);
    --accent:      hsl(var(--azure-h) calc(var(--azure-s) + 6%) 64%);
    --accent-soft: hsl(var(--azure-h) var(--azure-s) 72%);
    --accent-wash: hsl(var(--azure-h) var(--azure-s) 64% / .12);
    --mark:       hsl(var(--cinnabar-h) calc(var(--cinnabar-s) + 4%) 63%);
    --mark-soft:  hsl(var(--cinnabar-h) var(--cinnabar-s) 70%);
    --mark-wash:  hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .14);
    --mark-line:  hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .34);
    --shadow: 0 1px 2px hsl(0 0% 0% / .3), 0 10px 30px -10px hsl(0 0% 0% / .5);
    --selection: hsl(var(--cinnabar-h) var(--cinnabar-s) 63% / .26);
  }
}

/* ============================================================
   base.css — 字体、重置、排版基底、布局、背景纹理
   ============================================================ */

/* —— DreamHanSerifCN(梦源宋体)子集 · 四档字重 ——
   Light W9 = 300 · Normal/正文 W13 = 400 · Medium W18 = 600 · Bold W23 = 800 —— */
@font-face{
  font-family:"DreamHanSerifCN"; font-style:normal; font-weight:300;
  font-display:swap; src:url("../fonts/DreamHanSerifCN-W9.woff2") format("woff2");
}
@font-face{
  font-family:"DreamHanSerifCN"; font-style:normal; font-weight:400;
  font-display:swap; src:url("../fonts/DreamHanSerifCN-W13.woff2") format("woff2");
}
@font-face{
  font-family:"DreamHanSerifCN"; font-style:normal; font-weight:600;
  font-display:swap; src:url("../fonts/DreamHanSerifCN-W18.woff2") format("woff2");
}
@font-face{
  font-family:"DreamHanSerifCN"; font-style:normal; font-weight:800;
  font-display:swap; src:url("../fonts/DreamHanSerifCN-W23.woff2") format("woff2");
}

:root{
  --serif:"DreamHanSerifCN", "Source Han Serif SC", "Noto Serif CJK SC",
          "Songti SC", "SimSun", ui-serif, serif;
  --mono:"DM Mono","SFMono-Regular",ui-monospace,"Cascadia Mono",monospace;
}

/* —— 重置 —— */
*,*::before,*::after{box-sizing:border-box}
*{margin:0}
html{
  font-size:20px; /* 全站字号基准 18→20(整体再放大约 110%,所有 rem/em 随之放大) */
  -webkit-text-size-adjust:100%; text-size-adjust:100%;
  scroll-behavior:smooth; scroll-padding-top:calc(var(--header-h) + 1rem);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
}
body{
  font-family:var(--serif); font-weight:400;
  font-size:clamp(20px, 19px + .2vw, 22px); line-height:1.85;
  color:var(--text); background:var(--bg);
  letter-spacing:.005em; text-rendering:optimizeLegibility;
  min-height:100vh; overflow-wrap:break-word;
  transition:background-color .4s var(--ease), color .4s var(--ease);
}
::selection{background:var(--selection)}
img,svg,video{max-width:100%; height:auto; display:block}
a{color:var(--accent); text-decoration:none}
button{font:inherit; color:inherit; background:none; border:none; cursor:pointer}
:focus-visible{outline:2px solid var(--accent); outline-offset:3px; border-radius:2px}

/* —— 朱丝栏方格稿纸:全站背景纹理(色③ 朱的极淡派生) —— */
body::before{
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background-image:
    repeating-linear-gradient(to right,
      var(--mark-wash) 0 var(--rule), transparent var(--rule) 2.25rem),
    repeating-linear-gradient(to bottom,
      var(--mark-wash) 0 var(--rule), transparent var(--rule) 2.25rem);
  background-position:center top;
  opacity:.24; mask-image:linear-gradient(to bottom, transparent, #000 14rem);
}

/* —— 标题排版 —— */
h1,h2,h3,h4,h5,h6{
  font-weight:600; line-height:1.3; letter-spacing:.01em;
  color:var(--text); text-wrap:balance;
}
h1{font-size:clamp(1.9rem,1.4rem + 2.2vw,2.9rem); font-weight:800; line-height:1.18}
h2{font-size:clamp(1.45rem,1.2rem + 1.2vw,1.95rem)}
h3{font-size:clamp(1.2rem,1.05rem + .6vw,1.45rem)}
h4{font-size:1.08rem}
p{text-wrap:pretty}
strong,b{font-weight:600; color:var(--text)} /* 粗体=Medium(W18),非 Bold(W23):正文强调更克制 */
em,i{font-style:italic}
small{font-size:.84em; color:var(--text-soft)}
sup,sub{line-height:0}

code,kbd,samp{
  font-family:var(--mono); font-size:.86em;
  background:var(--surface-2); padding:.12em .4em; border-radius:var(--radius);
  border:1px solid var(--line-soft);
}

/* —— 布局容器 —— */
.wrap{width:100%; max-width:var(--page-max); margin-inline:auto; padding-inline:var(--gut)}
.flow > * + *{margin-block-start:1.05em}
.muted{color:var(--text-soft)}
.faint{color:var(--text-faint)}
.center{text-align:center}
hr{border:none; height:var(--rule); background:var(--line); margin-block:2.4rem}

/* 工具:视觉隐藏(无障碍) */
.visually-hidden{
  position:absolute!important; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
}

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

/* ============================================================
   components.css — 页头/页脚/导航/卡片/印章/目录/翻页/徽章/切换
   ============================================================ */

/* —————————————————— 盾徽 LOGO(青朱双分·火凤,品牌记忆点) —————————————————— */
.brand-logo{
  block-size:2.5em; inline-size:auto; flex:0 0 auto; display:block;
  filter:drop-shadow(0 1px 2.5px color-mix(in srgb, var(--mark) 24%, transparent));
  transition:transform .35s var(--ease);
}
a:hover > .brand-logo,.brand:hover .brand-logo{transform:rotate(-4deg) scale(1.05)}
.brand-logo--footer{block-size:3.4em}

/* —————————————————— 页头 —————————————————— */
.site-header{
  position:sticky; top:0; z-index:50;
  block-size:var(--header-h); display:flex; align-items:center;
  background:color-mix(in srgb, var(--bg) 82%, transparent);
  backdrop-filter:saturate(1.4) blur(10px);
  -webkit-backdrop-filter:saturate(1.4) blur(10px);
  border-block-end:var(--rule) solid var(--line);
}
.site-header .wrap{display:flex; align-items:center; gap:1.2rem; max-width:var(--page-max)}
.brand{display:flex; align-items:center; gap:.6rem; color:var(--text); font-weight:800; flex:0 0 auto; white-space:nowrap}
.brand-name{font-size:1.22rem; letter-spacing:.06em}
.brand-name b{color:var(--mark); font-weight:800}
.brand-sub{
  font-size:.7rem; letter-spacing:.34em; color:var(--text-faint);
  font-weight:400; text-transform:uppercase; padding-inline-start:.1rem;
}
@media (max-width:640px){.brand-sub{display:none}}

.nav{display:flex; align-items:center; gap:.7rem; margin-inline-start:auto}
/* 三大功能入口 */
.nav-feats{display:flex; align-items:center; gap:.1rem}
.nav-feat{
  display:inline-flex; align-items:center; gap:.32em; color:var(--text-soft); font-size:.9rem;
  padding:.38em .62em; border-radius:var(--radius); white-space:nowrap; transition:color .2s, background-color .2s;
}
.nav-feat .nf-g{color:var(--mark); font-size:1.04em; line-height:1}
.nav-feat:hover{color:var(--text); background:var(--surface-2)}
/* 模块区:野史直达 + 分组下拉 */
.nav-mods{display:flex; align-items:center; gap:.1rem; padding-inline-start:.7rem; border-inline-start:var(--rule) solid var(--line)}
.nav-primary{
  color:var(--mark); font-weight:800; font-size:.92rem; padding:.38em .62em; border-radius:var(--radius);
  white-space:nowrap; position:relative; transition:background-color .2s;
}
.nav-primary:hover{background:var(--mark-wash)}
.nav-primary.is-active::after{content:""; position:absolute; inset-inline:.62em; inset-block-end:.14em; block-size:2px; background:var(--mark); border-radius:2px}
.navgroup{position:relative}
.navgroup-btn{
  color:var(--text-soft); font-size:.92rem; padding:.38em .56em; border-radius:var(--radius);
  display:inline-flex; align-items:center; gap:.22em; white-space:nowrap; transition:color .2s, background-color .2s;
}
.navgroup-btn:hover{color:var(--text); background:var(--surface-2)}
.navgroup.is-active .navgroup-btn{color:var(--mark)}
.ng-caret{font-size:.68em; opacity:.6; transition:transform .2s}
.navgroup:hover .ng-caret,.navgroup.is-open .ng-caret{transform:rotate(180deg)}
.navdrop{
  position:absolute; inset-block-start:calc(100% + .45rem); inset-inline-start:50%; translate:-50% 0; min-inline-size:13rem;
  background:var(--surface); border:var(--rule) solid var(--line); border-radius:var(--radius-lg);
  box-shadow:var(--shadow); padding:.4rem; display:grid; gap:.08rem; z-index:60;
  opacity:0; visibility:hidden; transform:translateY(-6px); transition:opacity .18s var(--ease), transform .18s var(--ease), visibility .18s;
}
.navdrop::before{content:""; position:absolute; inset-block-end:100%; inset-inline:0; block-size:.5rem} /* hover 桥 */
.navgroup:hover .navdrop,.navgroup:focus-within .navdrop,.navgroup.is-open .navdrop{opacity:1; visibility:visible; transform:none}
.navdrop a{display:grid; gap:.05rem; padding:.5em .7em; border-radius:var(--radius); color:var(--text); font-size:.92rem; line-height:1.3}
.navdrop a:hover{background:var(--accent-wash); color:var(--accent)}
.navdrop a[aria-current="page"]{color:var(--mark)}
.navdrop .nd-sub{font-size:.71rem; color:var(--text-faint); letter-spacing:.02em; font-weight:400}

/* 导航在窄屏折叠为抽屉 */
.nav-toggle{display:none}
@media (max-width:980px){
  .nav-toggle{display:inline-grid; place-items:center; inline-size:2.2em; block-size:2.2em; border-radius:var(--radius); color:var(--text-soft)}
  .nav-toggle:hover{background:var(--surface-2); color:var(--text)}
  .nav{
    position:fixed; inset:var(--header-h) 0 auto 0; flex-direction:column; align-items:stretch; gap:0;
    background:var(--bg); border-block-end:var(--rule) solid var(--line);
    padding:.5rem var(--gut) 1.2rem; box-shadow:var(--shadow);
    max-height:0; overflow:hidden; visibility:hidden; transition:max-height .3s var(--ease), visibility .3s;
  }
  .nav[data-open="true"]{max-height:85vh; visibility:visible; overflow:auto}
  .nav-feats,.nav-mods{flex-direction:column; align-items:stretch; gap:0; padding:0; border:none}
  .nav-feat,.nav-primary,.navgroup-btn{padding:.7em .4em; border-block-end:var(--rule) solid var(--line-soft); width:100%; justify-content:flex-start}
  .nav-feats{border-block-end:2px solid var(--line)}
  .navgroup{position:static}
  .ng-caret{margin-inline-start:auto}
  .navdrop{position:static; opacity:1; visibility:visible; transform:none; box-shadow:none; border:none; background:transparent;
    padding:.2rem 0 .4rem 1.1rem; min-inline-size:0; translate:0 0}
  .navdrop::before{display:none}
  .nav-primary.is-active::after{display:none}
}

/* 图标按钮(切换/搜索/导航) */
.iconbtn{
  display:inline-grid; place-items:center; inline-size:2.3em; block-size:2.3em;
  border-radius:var(--radius); color:var(--text-soft); font-size:1rem;
  border:var(--rule) solid transparent; transition:.2s;
}
.iconbtn:hover{background:var(--surface-2); color:var(--text); border-color:var(--line)}
/* 日/月 主题切换 */
.theme-toggle .glyph-dark{display:none}
:root[data-theme="dark"] .theme-toggle .glyph-light{display:none}
:root[data-theme="dark"] .theme-toggle .glyph-dark{display:inline}

/* —————————————————— 页脚:牌记 colophon —————————————————— */
.site-footer{
  margin-block-start:5rem; border-block-start:var(--rule) solid var(--line);
  background:var(--bg-tint);
}
.colophon{
  display:grid; gap:1.6rem; padding-block:3rem 2rem;
  grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));
}
.colophon h4{
  font-size:.78rem; letter-spacing:.22em; text-transform:uppercase;
  color:var(--text-faint); font-weight:600; margin-block-end:.7rem;
}
.colophon a{color:var(--text-soft)} .colophon a:hover{color:var(--accent)}
.colophon ul{list-style:none; padding:0; display:grid; gap:.35rem; font-size:.92rem}
.colophon-mark{display:flex; gap:.7rem; align-items:flex-start}
.colophon-mark p{font-size:.88rem; color:var(--text-soft); line-height:1.7}
.colophon-mark p.ai-disclaimer{font-size:.82rem; color:var(--text-faint); line-height:1.7;
  border-inline-start:2px solid color-mix(in srgb, var(--mark) 42%, transparent); padding-inline-start:.7rem}
.ai-disclaimer b{color:var(--text-soft); font-weight:600}
.footer-rule{
  display:flex; align-items:center; gap:1rem; padding-block:1.3rem;
  border-block-start:var(--rule) solid var(--line-soft);
  font-size:.8rem; color:var(--text-faint); flex-wrap:wrap;
}
.footer-rule .dot{inline-size:4px; block-size:4px; border-radius:50%; background:var(--mark)}

/* —————————————————— 首页 hero —————————————————— */
.hero{padding-block:clamp(3rem,2rem + 6vw,6.5rem) 2.5rem; position:relative}
.hero-kicker{
  display:inline-flex; align-items:center; gap:.6rem; margin-block-end:1.4rem;
  font-size:.8rem; letter-spacing:.28em; text-transform:uppercase; color:var(--text-faint);
}
.hero-kicker .line{inline-size:2.4rem; block-size:var(--rule); background:var(--mark-line)}
.hero h1{font-size:clamp(2.4rem,1.6rem + 4.4vw,4.6rem); letter-spacing:.02em; margin-block-end:1.1rem}
.hero h1 .em{color:var(--mark)}
.hero-lede{font-size:clamp(1.05rem,1rem + .5vw,1.3rem); color:var(--text-soft); max-width:38rem; line-height:1.9}
.hero-stats{display:flex; gap:2.4rem; flex-wrap:wrap; margin-block-start:2.4rem}
.stat .n{font-size:2.1rem; font-weight:800; color:var(--accent); line-height:1; font-feature-settings:"tnum"}
.stat .l{font-size:.82rem; color:var(--text-faint); letter-spacing:.1em; margin-block-start:.4rem}

/* —————————————————— 卡片网格(模块/文章) —————————————————— */
.section-head{display:flex; align-items:baseline; gap:1rem; margin-block:3.2rem 1.4rem}
.section-head h2{white-space:nowrap}
.section-head .rule{flex:1; height:var(--rule); background:var(--line); translate:0 -.3rem}
.section-head .count{color:var(--text-faint); font-size:.86rem}

.card-grid{display:grid; gap:1.1rem; grid-template-columns:repeat(auto-fill,minmax(min(100%,17rem),1fr))}
.card{
  position:relative; display:flex; flex-direction:column; gap:.55rem;
  padding:1.3rem 1.35rem 1.4rem; background:var(--surface);
  border:var(--rule) solid var(--line); border-radius:var(--radius-lg);
  transition:border-color .25s, transform .25s var(--ease), box-shadow .25s;
  overflow:hidden;
}
.card::before{
  content:""; position:absolute; inset-block:0; inset-inline-start:0; inline-size:3px;
  background:var(--mark); scale:1 0; transform-origin:bottom; transition:scale .28s var(--ease);
}
.card:hover{transform:translateY(-3px); border-color:var(--line); box-shadow:var(--shadow)}
.card:hover::before{scale:1 1; transform-origin:top}
.card-idx{font-size:.74rem; letter-spacing:.18em; color:var(--text-faint); font-feature-settings:"tnum"}
.card h3{font-size:1.16rem} .card h3 a{color:var(--text)} .card:hover h3 a{color:var(--mark)}
.card p{font-size:.9rem; color:var(--text-soft); line-height:1.7; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden}
.card-foot{margin-block-start:auto; padding-block-start:.7rem; display:flex; gap:.6rem; align-items:center; color:var(--text-faint); font-size:.78rem}

/* —————————————————— 徽章 / 标签 —————————————————— */
.badge{
  display:inline-flex; align-items:center; gap:.35em; font-size:.74rem; font-weight:600;
  letter-spacing:.04em; padding:.18em .6em; border-radius:99px; line-height:1.5;
  background:var(--accent-wash); color:var(--accent); border:var(--rule) solid transparent;
}
.badge.mark{background:var(--mark-wash); color:var(--mark)}
.tag{font-size:.78rem; color:var(--text-soft); background:var(--surface-2); padding:.15em .55em; border-radius:var(--radius)}

/* —————————————————— 文章页布局 + 目录 —————————————————— */
.doc{display:grid; gap:var(--gut); align-items:start; padding-block:2rem 1rem}
@media (min-width:1040px){ .doc{grid-template-columns:minmax(0,1fr) 15rem} }
.doc-main{min-width:0; max-width:var(--measure); margin-inline:auto; inline-size:100%}
.doc-head{margin-block-end:2rem; padding-block-end:1.5rem; border-block-end:var(--rule) solid var(--line)}
.doc-head .crumb{font-size:.82rem; color:var(--text-faint); margin-block-end:1rem; display:flex; gap:.5rem; flex-wrap:wrap}
.doc-head .crumb a{color:var(--text-soft)} .doc-head .crumb a:hover{color:var(--accent)}
.doc-head h1{margin-block-end:.9rem}
.doc-head .lede{color:var(--text-soft); font-size:1.05rem; line-height:1.8}
.doc-head .meta{display:flex; gap:1.1rem; flex-wrap:wrap; margin-block-start:1.1rem; font-size:.8rem; color:var(--text-faint)}

.toc{
  position:sticky; top:calc(var(--header-h) + 1.4rem); font-size:.86rem; align-self:start;
  max-block-size:calc(100vh - var(--header-h) - 2.8rem);
  max-block-size:calc(100dvh - var(--header-h) - 2.8rem);
  display:grid; grid-template-rows:auto minmax(0,1fr);
}
@media (max-width:1039px){.toc{display:none}}
.toc-title{font-size:.74rem; letter-spacing:.2em; text-transform:uppercase; color:var(--text-faint); margin-block-end:.8rem; font-weight:600}
.toc ol{
  list-style:none; padding:0 .3rem .4rem 0; margin:0; display:grid; gap:.1rem;
  border-inline-start:var(--rule) solid var(--line);
  overflow-y:auto; overscroll-behavior:contain; scrollbar-gutter:stable;
  scrollbar-width:thin; scrollbar-color:var(--line) transparent;
}
.toc ol::-webkit-scrollbar{inline-size:8px}
.toc ol::-webkit-scrollbar-track{background:transparent}
.toc ol::-webkit-scrollbar-thumb{background:var(--line); border-radius:999px}
.toc ol::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}
.toc li{margin:0}
.toc a{display:block; padding:.32em .9em; color:var(--text-soft); border-inline-start:2px solid transparent; margin-inline-start:-1px; line-height:1.45}
.toc a:hover{color:var(--text)}
.toc a.lvl-3{padding-inline-start:1.7em; font-size:.95em}
.toc a[data-active="true"]{color:var(--mark); border-inline-start-color:var(--mark)}

/* —————————————————— 上一篇/下一篇 —————————————————— */
.pager{display:grid; gap:1rem; grid-template-columns:1fr 1fr; margin-block-start:3.5rem}
@media (max-width:560px){.pager{grid-template-columns:1fr}}
.pager a{
  display:flex; flex-direction:column; gap:.3rem; padding:1.1rem 1.2rem;
  border:var(--rule) solid var(--line); border-radius:var(--radius-lg);
  color:var(--text); transition:border-color .2s, background-color .2s;
}
.pager a:hover{background:var(--surface); border-color:var(--accent-soft)}
.pager .dir{font-size:.74rem; letter-spacing:.14em; color:var(--text-faint); text-transform:uppercase}
.pager .t{font-weight:600} .pager a:hover .t{color:var(--accent)}
.pager .next{text-align:end; grid-column:2} @media (max-width:560px){.pager .next{grid-column:1}}

/* —————————————————— 返回顶部 + 阅读进度 —————————————————— */
.progress{position:fixed; inset-block-start:0; inset-inline:0; block-size:2px; z-index:60; background:transparent}
.progress > i{display:block; block-size:100%; inline-size:var(--p,0%); background:var(--mark); transition:width .1s linear}

/* —————————————————— 站内检索浮层 —————————————————— */
.search-overlay{
  position:fixed; inset:0; z-index:100; padding:14vh 1rem 1rem;
  background:color-mix(in srgb, var(--bg) 55%, transparent);
  backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); display:flex; justify-content:center;
}
.search-overlay[hidden]{display:none}
.search-panel{
  inline-size:min(40rem,100%); max-block-size:72vh; display:flex; flex-direction:column;
  background:var(--surface); border:var(--rule) solid var(--line); border-radius:var(--radius-lg);
  box-shadow:var(--shadow); overflow:hidden; animation:pop .22s var(--ease);
}
@keyframes pop{from{transform:translateY(-8px); opacity:0}to{transform:none; opacity:1}}
.search-input{
  font:inherit; font-size:1.1rem; padding:1.05rem 1.3rem; border:none; outline:none;
  background:transparent; color:var(--text); border-block-end:var(--rule) solid var(--line);
}
.search-results{overflow:auto; padding:.4rem}
.search-results a{display:grid; gap:.15rem; padding:.7rem .9rem; border-radius:var(--radius); color:var(--text)}
.search-results a:hover{background:var(--accent-wash)}
.sr-mod{font-size:.72rem; letter-spacing:.1em; color:var(--mark); text-transform:uppercase}
.sr-title{font-weight:600}
.sr-desc{font-size:.84rem; color:var(--text-soft); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.search-hint{padding:.6rem 1.3rem; font-size:.76rem; border-block-start:var(--rule) solid var(--line-soft)}

/* —————————————————— 四维标签 chip —————————————————— */
.fchips{display:flex; flex-wrap:wrap; gap:.4rem; margin-block-start:1rem}
.fchip{
  display:inline-flex; align-items:center; gap:.3em; font-size:.76rem; line-height:1.45;
  padding:.2em .62em; border-radius:99px; border:1px solid transparent; cursor:pointer;
  background:transparent; transition:background-color .18s, color .18s, border-color .18s; white-space:nowrap;
}
.fchip .fk{font-size:.82em; opacity:.55; margin-inline-end:.05em}
.fchip .fn{font-size:.8em; opacity:.55; font-feature-settings:"tnum"; margin-inline-start:.1em}
.fchip.f-mark{color:var(--mark); border-color:var(--mark-line)}
.fchip.f-accent{color:var(--accent); border-color:var(--accent-wash)}
.fchip.f-mark:hover{background:var(--mark-wash)}
.fchip.f-accent:hover{background:var(--accent-wash)}
.fchip.is-on{color:var(--bg)}
.fchip.f-mark.is-on{background:var(--mark); border-color:var(--mark)}
.fchip.f-accent.is-on{background:var(--accent); border-color:var(--accent)}
.fchip.is-on .fk,.fchip.is-on .fn{opacity:.8}

/* —————————————————— 标签检索页 —————————————————— */
.tagfilter{margin-block-start:1.4rem}
.facet-group{margin-block:1.5rem}
.facet-group h3{font-size:1.02rem; display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap}
.facet-group h3 .muted{font-size:.76rem; font-weight:400; letter-spacing:.02em}
.facet-chips{display:flex; flex-wrap:wrap; gap:.45rem; margin-block-start:.7rem}
.facet-chips .fchip{font-size:.82rem; padding:.3em .72em}
.tf-bar{
  display:flex; align-items:center; gap:1rem; margin-block:1.8rem .4rem;
  padding-block-start:1rem; border-block-start:var(--rule) solid var(--line);
}
.tf-count{color:var(--text-soft); font-size:.9rem; font-feature-settings:"tnum"}
.tf-clear{font-size:.82rem; color:var(--accent); border:1px solid var(--accent-wash); padding:.26em .85em; border-radius:99px; margin-inline-start:auto}
.tf-clear:hover{background:var(--accent-wash)}
.tf-results{display:grid; gap:.7rem; margin-block-start:.9rem}
.tf-result{
  display:block; padding:.95rem 1.15rem; border:var(--rule) solid var(--line); border-radius:var(--radius-lg);
  background:var(--surface); transition:transform .2s var(--ease), border-color .2s, box-shadow .2s; color:var(--text);
}
.tf-result:hover{border-color:var(--accent-soft); transform:translateY(-2px); box-shadow:var(--shadow)}
.tf-result .tr-mod{font-size:.72rem; letter-spacing:.1em; color:var(--mark); text-transform:uppercase}
.tf-result h4{font-size:1.06rem; margin-block:.2rem; color:var(--text)}
.tf-result:hover h4{color:var(--accent)}
.tf-result p{font-size:.86rem; color:var(--text-soft); line-height:1.6}
.tf-empty{color:var(--text-faint); padding:1.4rem 0; font-size:.92rem}

/* —————————————————— 时间线 —————————————————— */
.timeline{list-style:none; padding:0; margin-block-start:1.5rem}
.tl-era{font-weight:800; color:var(--mark); font-size:1.06rem; letter-spacing:.06em; margin-block:1.9rem .7rem}
.tl-item{display:grid; grid-template-columns:3.2rem 1fr; gap:1rem; align-items:start}
.tl-year{text-align:end; font-weight:800; color:var(--accent); font-feature-settings:"tnum"; font-size:.92rem; padding-block-start:.18rem}
.tl-body{border-inline-start:2px solid var(--line); padding:.1rem 0 1.1rem 1.35rem; position:relative}
.tl-body::before{content:""; position:absolute; inset-inline-start:-6px; inset-block-start:.5rem; inline-size:10px; block-size:10px; border-radius:50%; background:var(--mark); border:2px solid var(--bg)}
.tl-body p{line-height:1.72}
.tl-body p a{color:var(--text); text-decoration:underline; text-decoration-color:var(--accent-wash); text-underline-offset:.2em}
.tl-body p a:hover{text-decoration-color:var(--accent); color:var(--accent)}
.tl-body .fchip{margin-block-start:.45rem}
@media(max-width:520px){
  .tl-item{grid-template-columns:2.4rem 1fr; gap:.7rem}
  .tl-year{font-size:.82rem}
}

/* —————————————————— 知识图谱 —————————————————— */
.graph-wrap{position:relative; border:var(--rule) solid var(--line); border-radius:var(--radius-lg); background:var(--bg-tint); overflow:hidden; margin-block:1rem 3.5rem}
.graph-legend{
  position:absolute; inset-block-start:.8rem; inset-inline-start:.8rem; z-index:2; display:flex; gap:.85rem; flex-wrap:wrap; align-items:center;
  font-size:.8rem; color:var(--text-soft); background:color-mix(in srgb,var(--bg) 72%,transparent);
  padding:.4rem .8rem; border-radius:99px; border:var(--rule) solid var(--line-soft); backdrop-filter:blur(4px);
}
.graph-legend .gl{display:inline-flex; align-items:center; gap:.35em}
.gd{inline-size:.72em; block-size:.72em; border-radius:50%; display:inline-block}
.gd-event{background:var(--mark)} .gd-person{background:var(--accent)} .gd-theme{background:var(--surface-2); box-shadow:inset 0 0 0 1.5px var(--text-faint)}
.gl-reset{color:var(--accent); border:1px solid var(--accent-wash); padding:.12em .65em; border-radius:99px; font-size:.78rem}
.gl-reset:hover{background:var(--accent-wash)}
.graph-svg{display:block; inline-size:100%; block-size:min(72vh,680px); cursor:grab; touch-action:none; user-select:none}
.graph-svg.grabbing{cursor:grabbing}
.g-edge{stroke:var(--line); stroke-width:1; transition:stroke .15s, opacity .15s}
.g-edge.is-hot{stroke:var(--mark); stroke-width:1.6}
.g-node{cursor:pointer; transition:opacity .15s}
.g-node circle{transition:r .15s}
.g-node text{font-family:var(--serif); font-size:12.5px; fill:var(--text); paint-order:stroke; stroke:var(--bg); stroke-width:3.5px; pointer-events:none}
.g-node.is-event circle{fill:var(--mark)}
.g-node.is-person circle{fill:var(--accent)}
.g-node.is-theme circle{fill:var(--surface-2); stroke:var(--text-faint); stroke-width:1.5}
.g-node.is-theme text{fill:var(--text-soft); font-weight:800}
.g-node:hover circle{r:13}
.g-dim{opacity:.16}

/* ============================================================
   prose.css — Markdown 正文渲染(.prose)
   特色:标题朱印记、朱丝栏表格、callout 特殊标识、脚注
   ============================================================ */

.prose{font-size:1.02rem; line-height:1.92}
.prose > * + *{margin-block-start:1.15em}
.prose > h2 + *,.prose > h3 + *{margin-block-start:.7em}

/* 段落首行可选缩进(中文阅读) — 通过 body class 控制,默认不缩进保证清晰 */

/* —— 标题:朱印记 —— */
.prose h2,.prose h3,.prose h4{position:relative; scroll-margin-top:calc(var(--header-h) + 1.2rem)}
.prose h2{
  margin-block-start:2.6em; padding-block-end:.4em; font-size:1.6rem;
  border-block-end:var(--rule) solid var(--line);
}
.prose h2::before{
  content:""; position:absolute; inset-inline-start:-.92em; inset-block-start:.16em;
  inline-size:.34em; block-size:1.05em; background:var(--mark); border-radius:1px;
}
.prose h3{margin-block-start:2em; font-size:1.28rem; color:var(--text)}
.prose h3::before{
  content:"—"; color:var(--mark); font-weight:800; margin-inline-end:.5em; opacity:.85;
}
.prose h4{margin-block-start:1.6em; font-size:1.08rem; color:var(--text-soft)}

/* 标题锚点链接(悬停显示) */
.prose .anchor{
  position:absolute; inset-inline-start:-1.4em; opacity:0; color:var(--mark);
  font-weight:400; text-decoration:none; transition:opacity .2s;
}
.prose h2:hover .anchor,.prose h3:hover .anchor{opacity:.7}
@media (max-width:720px){.prose .anchor{display:none}}

/* —— 链接 —— */
.prose a{
  color:var(--accent); text-decoration:underline;
  text-decoration-color:var(--accent-wash); text-underline-offset:.22em;
  text-decoration-thickness:1.5px; transition:text-decoration-color .2s, color .2s;
}
.prose a:hover{text-decoration-color:var(--accent)}
.prose a[href^="http"]::after{content:"↗"; font-size:.72em; margin-inline-start:.15em; color:var(--text-faint); vertical-align:.1em}
.prose a.is-unpublished{color:var(--text-faint); text-decoration:none; cursor:default; border-block-end:1px dotted var(--line)}
.prose a.is-unpublished::after{content:"·未公开"; font-size:.76em; color:var(--text-faint); margin-inline-start:.15em}

/* —— 列表 —— */
.prose ul,.prose ol{padding-inline-start:1.5em}
.prose li{margin-block:.35em} .prose li::marker{color:var(--mark-soft)}
.prose ol li::marker{color:var(--accent); font-weight:600}
.prose li > ul,.prose li > ol{margin-block-start:.35em}

/* —— 强调 —— */
.prose strong{color:var(--text); font-weight:600; text-underline-offset:2px} /* 正文粗体=Medium(W18) */
.prose mark{background:var(--mark-wash); color:inherit; padding:.05em .2em; border-radius:2px}

/* —— 引用 / lede 摘要 —— */
.prose blockquote{
  margin-inline:0; padding:.2em 0 .2em 1.4em; color:var(--text-soft);
  border-inline-start:3px solid var(--mark-line); font-style:normal;
}
.prose blockquote p{margin-block:.5em}
/* 文首摘要(生成器把首个 blockquote 标记为 .lede) */
.prose .lede{
  border-inline-start:none; padding:1.2em 1.4em; background:var(--surface);
  border-radius:var(--radius-lg); color:var(--text-soft); font-size:1.02em;
  border:var(--rule) solid var(--line); position:relative;
}

/* —— 表格(朱丝栏)—— */
.prose .table-wrap{overflow-x:auto; margin-block:1.4em; border:var(--rule) solid var(--line); border-radius:var(--radius-lg)}
.prose table{border-collapse:collapse; inline-size:100%; font-size:.92rem; line-height:1.6}
.prose th,.prose td{padding:.6em .85em; text-align:start; vertical-align:top; border-block-end:var(--rule) solid var(--line-soft)}
.prose thead th{
  background:var(--bg-tint); color:var(--text); font-weight:600; white-space:nowrap;
  border-block-end:1.5px solid var(--mark-line); position:sticky; top:0;
}
.prose tbody tr:nth-child(even){background:color-mix(in srgb,var(--surface-2) 50%, transparent)}
.prose tbody tr:hover{background:var(--accent-wash)}
.prose td:first-child{color:var(--text); font-weight:600}

/* —— 代码块 —— */
.prose pre{
  background:var(--bg-tint); border:var(--rule) solid var(--line);
  border-radius:var(--radius-lg); padding:1em 1.2em; overflow-x:auto;
  font-size:.86rem; line-height:1.6;
}
.prose pre code{background:none; border:none; padding:0; font-size:inherit}

/* —— 图片 —— */
.prose img{border-radius:var(--radius-lg); border:var(--rule) solid var(--line); margin-inline:auto}
.prose figure{margin-block:1.6em} .prose figcaption{text-align:center; font-size:.84rem; color:var(--text-faint); margin-block-start:.6em}

/* —— 分隔线 —— */
.prose hr{margin-block:2.6rem; height:auto; background:none; text-align:center; border:none}
.prose hr::before{content:"❖"; color:var(--mark-line); font-size:1rem; letter-spacing:1em}

/* ———————————— callout 特殊标识(:::note / :::key / :::warn / :::lore / :::source)———————————— */
.callout{
  --c:var(--accent); --cw:var(--accent-wash);
  margin-block:1.5em; padding:1em 1.2em 1em 1.15em; border-radius:var(--radius-lg);
  background:var(--cw); border:var(--rule) solid transparent;
  border-inline-start:3px solid var(--c); position:relative;
}
.callout > *{margin-block:.4em} .callout > :first-child{margin-block-start:0} .callout > :last-child{margin-block-end:0}
.callout .callout-label{
  display:flex; align-items:center; gap:.5em; font-weight:800; color:var(--c);
  font-size:.86rem; letter-spacing:.06em; margin-block-end:.5em;
}
.callout .callout-label .sigil{font-size:1em}
.callout.is-key{--c:var(--mark); --cw:var(--mark-wash)}
.callout.is-warn{--c:hsl(var(--cinnabar-h) 70% 50%); --cw:var(--mark-wash)}
.callout.is-lore{--c:var(--accent-soft); --cw:var(--accent-wash)}
.callout.is-source{--c:var(--text-faint); --cw:color-mix(in srgb,var(--surface-2) 60%,transparent); font-size:.9em}
.callout.is-source a{color:var(--accent)}

/* —— 脚注 —— */
.prose .footnotes{margin-block-start:3rem; padding-block-start:1.5rem; border-block-start:var(--rule) solid var(--line); font-size:.9rem; color:var(--text-soft)}
.prose .footnotes ol{padding-inline-start:1.2em}
.prose .footnote-ref a{text-decoration:none; color:var(--mark); font-weight:600; padding-inline:.1em}

/* —— 来源区块(文末「## 来源」自动柔化)—— */
.prose .sources-block{
  font-size:.88rem; color:var(--text-soft); margin-block-start:3rem;
  padding:1.4em 1.5em 1.2em; background:color-mix(in srgb,var(--surface-2) 45%,transparent);
  border:var(--rule) solid var(--line-soft); border-radius:var(--radius-lg);
  border-inline-start:3px solid var(--line);
}
.prose .sources-block > h2{
  margin-block-start:0; border:none; padding:0; font-size:.82rem; font-weight:600;
  letter-spacing:.16em; text-transform:uppercase; color:var(--text-faint);
}
.prose .sources-block > h2::before{
  content:"❖"; position:static; inline-size:auto; block-size:auto; background:none;
  color:var(--mark-line); margin-inline-end:.5em; border-radius:0;
}
.prose .sources-block > h3{font-size:1rem; color:var(--text-soft); margin-block-start:1.4em}
.prose .sources-block > h3::before{opacity:.6}
.prose .sources-block ul{padding-inline-start:1.2em}
.prose .sources-block li{margin-block:.2em; line-height:1.6}
.prose .sources-block li::marker{color:var(--line)}
.prose .sources-block a{word-break:break-all; color:var(--accent-soft)}

/* —— 首字下沉(野史文章首段)—— */
.prose.dropcap > p:first-of-type::first-letter{
  font-size:3.1em; font-weight:800; float:inline-start; line-height:.82;
  margin-inline-end:.12em; margin-block-start:.06em; color:var(--mark);
}

/* ———————————— 野史(模块13)版面签名 ———————————— */
/* 标题下的「青↔朱」细线 —— 呼应「争斗」二色 */
.is-lore .doc-head h1{position:relative}
.is-lore .doc-head h1::after{
  content:""; display:block; inline-size:3.4em; block-size:3px; margin-block-start:.6rem;
  background:linear-gradient(90deg, var(--mark) 0 42%, var(--accent)); border-radius:2px; opacity:.9;
}
/* 野史正文的引用收紧为「编按/旁注」体感:柔底 + 青线,区别于一手引文 */
.is-lore .prose blockquote:not(.lede){
  background:color-mix(in srgb, var(--accent) 5%, transparent);
  border-inline-start-color:var(--accent-soft); border-radius:0 var(--radius) var(--radius) 0;
  padding:.55em 1.1em .55em 1.3em;
}
/* 野史里 :::lore 野史·传说 callout 更具「轶闻」气质 */
.is-lore .callout.is-lore{ font-style:italic; }
.is-lore .callout.is-lore .callout-label{ font-style:normal; letter-spacing:.1em; }

/* ============================================================
   print.css — 打印 / 导出 PDF 友好
   目标:按 Print 时得到「暖纸背景 + 梦源宋体 + 三色标注 + 合适排版」的
        漂亮 PDF,便于分享野史。隐藏导航等屏幕外壳,保留内容与记忆点。
   ============================================================ */
@media print {
  /* —— 强制亮色暖纸调(无论屏幕处于深/浅色),让 PDF 落在暖纸上 —— */
  :root,
  :root[data-theme="dark"],
  :root[data-theme="light"] {
    color-scheme: light;
    --paper-s: 30%; --azure-s: 54%; --cinnabar-s: 64%;
    --bg:        hsl(var(--paper-h) calc(var(--paper-s) + 8%) 96.5%);
    --bg-tint:   hsl(var(--paper-h) calc(var(--paper-s) + 6%) 93%);
    --surface:   hsl(var(--paper-h) var(--paper-s) 97.5%);
    --surface-2: hsl(var(--paper-h) calc(var(--paper-s) - 4%) 91%);
    --line:      hsl(var(--paper-h) calc(var(--paper-s) - 10%) 78%);
    --line-soft: hsl(var(--paper-h) calc(var(--paper-s) - 12%) 85%);
    --text:      hsl(var(--paper-h) calc(var(--paper-s) - 6%) 14%);
    --text-soft: hsl(var(--paper-h) calc(var(--paper-s) - 12%) 34%);
    --text-faint:hsl(var(--paper-h) calc(var(--paper-s) - 16%) 48%);
    --accent:      hsl(var(--azure-h) var(--azure-s) 32%);
    --accent-soft: hsl(var(--azure-h) calc(var(--azure-s) - 16%) 44%);
    --accent-wash: hsl(var(--azure-h) var(--azure-s) 35% / .08);
    --mark:      hsl(var(--cinnabar-h) var(--cinnabar-s) 45%);
    --mark-soft: hsl(var(--cinnabar-h) calc(var(--cinnabar-s) - 10%) 54%);
    --mark-wash: hsl(var(--cinnabar-h) var(--cinnabar-s) 47% / .10);
    --mark-line: hsl(var(--cinnabar-h) var(--cinnabar-s) 47% / .26);
  }

  /* —— 强制打印背景色(否则浏览器默认丢弃底色与 callout 底纹) —— */
  *, *::before, *::after {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
  }

  @page {
    margin: 16mm 15mm 17mm;
  }

  html { background: var(--bg); font-size: 11pt; }
  body {
    background: var(--bg); color: var(--text);
    font-size: 11pt; line-height: 1.7;
  }

  /* —— 隐藏屏幕外壳 —— */
  .site-header, .site-footer, .progress, .toc, .pager, .nav, .nav-toggle,
  .theme-toggle, .iconbtn, .search-overlay, [data-open-search],
  .doc-head .crumb, .visually-hidden, .hero-stats { display: none !important; }

  main { margin: 0 !important; }
  .wrap, .doc, .doc-main {
    max-width: none !important; width: auto !important;
    margin: 0 !important; padding: 0 !important; display: block !important;
  }
  .doc { gap: 0 !important; }

  /* —— 暖纸朱丝栏:保留记忆点底纹(整页淡格) —— */
  body::before {
    position: fixed; inset: 0; z-index: -1; opacity: .4;
    mask: none !important; -webkit-mask: none !important;
  }

  /* —— 标题与正文 —— */
  .doc-head { border-block-end:1px solid var(--line); }
  .doc-head h1 { font-size: 1.9rem; }
  .doc-head .meta { color: var(--text-faint); }
  .prose { font-size: 11pt; line-height: 1.72; }
  h1, h2, h3, h4 { break-after: avoid-page; }
  .prose h2, .prose h3, .prose h4 { break-after: avoid-page; }
  p, li { orphans: 2; widows: 2; }

  /* —— 块级元素避免被切断 —— */
  .callout, .table-wrap, table, figure, blockquote, pre, .lede,
  .prose img, tr { break-inside: avoid; }

  /* —— 链接:正文保留色不展开;来源区显示 URL 便于离线引用 —— */
  .prose a { color: var(--accent); text-decoration: underline; }
  .prose a[href^="http"]::after { content: ""; }
  .sources-block a[href^="http"]::after {
    content: " ‹" attr(href) "›"; font-size: .8em; color: var(--text-faint); word-break: break-all;
  }

  /* —— 文末牌记(每篇 PDF 收尾的署名) —— */
  .prose::after {
    content: "野中大 · 香港中文大学民间野史档案 — 凡述必溯源,仅供学习研究,引用请核对原始来源";
    display: block; margin-block-start: 2.4rem; padding-block-start: .8rem;
    border-block-start: 1px solid var(--line);
    font-size: .78rem; color: var(--text-faint); text-align: center;
  }

  /* 首页/模块页打印时也清爽呈现 */
  .hero { padding-block: 1rem 1.4rem !important; }
  .card { break-inside: avoid; box-shadow: none !important; }
}
