/* =============================================================
 * Walaoeh v4「南洋画报」— 组件样式（唯一一支主题 CSS）
 *
 * 设计真值 DESIGN.md §F · 原型 100_Todo/drafts/redesign-v3/tiles/tile-E.html
 *
 * 一句话：**纸底全站，深色只做小面积。**
 *   底 = 新闻纸 #F0E6D2，整页叠一层 tex-newsprint multiply 6%；
 *   窗框 = 圆角 12px + 2px 墨线（借 flipbook）；
 *   核实戳 = 略歪的朱红橡皮章，边缘用网点 mask 断墨；
 *   栏目头 = 墨底纸字 Abril（深色只出现在这里、价目表表头、以及章的框线）。
 *
 * 🚫 朱红 #C4402B 对纸只有 4.12 ⇒ **只做填充与大字（≥18.66px）**；
 *    落到正文尺寸的字一律换排字红 #A8321F（5.40）。
 * 🚫 网点灰 #8A7A66 对纸 3.35 ⇒ **只画线**；文字用排字灰 #6E6152（4.85）。
 * 🚫 朱红当底色时纸字 4.12 / 墨字 3.20 ——**朱红块上只放大字**，不放段落。
 * 🔴 动效只许动 `translate` / `scale`，**一律不许 `opacity` / `visibility:hidden`**。
 *    v3 的 opacity:0 + IntersectionObserver 让 fullPage 截图里六格全是空块。
 *    v4 连进场动效都不留：全站没有任何一处「等 JS 来显示」的元素。
 * 🔴 对比度要量**渲染后**的元素（祖先 opacity 连乘 + alpha 合成后），CSS 里的色号不作数。
 * 🚫 不碰 .wal-correction / .wal-updated / .wal-disclaimer —— 那三个块自带 inline style。
 * ============================================================= */

/* =============================================================
 * 字体度量兜底 —— 让「字体换入」不再造成重排（CLS）
 *
 * 🔬 机制是量出来的，不是猜的（2026-09-07，412×823 + CPU 4x + 1.6Mbps 复现）：
 *    唯一那一次 0.106 的位移发生在**字体换入的那一帧**，正文整块上移 29px，
 *    而元素自己的高度没变（dh=0）⇒ 是**上方的 H1 换行数变了**把下面全推了。
 *    Lighthouse 把它记在正文一张图头上（"Unsized image"），但那张图
 *    `<img width="1024" height="687">` 是有尺寸的，同一份报告里 `unsized-images` 也判 pass ——
 *    **两个 audit 互相矛盾时，以自己复现出来的那一帧为准。**
 *
 * 解法：给两支主字体各配一组**度量对齐**的本地兜底，排在真字体之后、通用兜底之前。
 * size-adjust 是实测的 advance width 比（canvas measureText，100px，长样本串）：
 *    Abril Fatface 5074.40 · Newsreader 5068.05 · Georgia 5040.19 · Times New Roman 4660.25
 * ⇒ Georgia 天然只差 0.6%，Times 一族差 8.8% —— 所以**两档兜底不能合成一条**：
 *   一条 @font-face 只能有一个 size-adjust，而装没装 Georgia 的机器需要两个不同的值。
 *   第一条命中不了（没装 Georgia）浏览器会自己走到第二条，这正是 @font-face 链的行为。
 * 覆盖：macOS/iOS/Windows → Georgia 档 · Linux → Liberation/DejaVu 档 · Android → Noto Serif 档。
 *
 * 🚫 IBM Plex Mono 不配兜底：实测它对 Courier New / monospace 的 advance 差 **0.02%**
 *    （等宽字体的 advance 都是 0.6em），配了也换不回任何东西。
 * ============================================================= */

/* 🔬 size-adjust 全部是**在实际用到的字号上**量的 span 宽度比（不是 100px 上量一次就套用）。
 *
 * 🔴 第一版就栽在这里：在 canvas 100px 上量出 Newsreader/Georgia = 100.4%，
 *    照着写进 size-adjust，结果 CLS 一分没降。原因是
 *    **Newsreader 是带 `opsz`（光学尺寸）轴的可变字体** —— 同一个字体在 19px 和 62px
 *    是两套字形，宽度比从 91.19% 一路变到 98.91%。
 *    量错尺寸的代价不是「差一点」，是差 10%，正好够让一段文字多出一行。
 *    ⇒ 正文的兜底按 **19px**（正文实际字号）取值。
 *    Abril Fatface 没有 opsz 轴，19/29/40/62px 上都是 103.42%，一个值通吃。
 *
 * 实测表（同一串样本，span 宽度比，2026-09-07）：
 *              vs Georgia 系      vs Times 系
 *   Abril 400      103.42%          113.74%
 *   News  400 @19   91.19%          100.29%
 *   News  600 @19   81.80%(粗)       98.56%(粗)
 *   News  ital@19   81.86%(斜)       91.51%(斜)
 *
 * ⚠️ 一面失配（某台机器没装 Georgia Bold）不会静默出错：那一面加载失败，
 *    浏览器自己走到 fb B。这正是要用「多个同名 @font-face」而不是「一面 + 合成体」的原因 ——
 *    合成加粗 / 合成斜体的 advance 跟真字体差 5–12%，一段文字就能因此多一行。
 */
@font-face {
  font-family: "Abril fb A";
  src: local("Georgia");
  font-weight: 400; font-style: normal;
  size-adjust: 103.42%; ascent-override: 102.5%; descent-override: 28.0%; line-gap-override: 0%;
}
@font-face {
  font-family: "Abril fb B";
  src: local("Times New Roman"), local("Tinos"), local("Liberation Serif"), local("Noto Serif"), local("DejaVu Serif");
  font-weight: 400; font-style: normal;
  size-adjust: 113.74%; ascent-override: 93.2%; descent-override: 25.5%; line-gap-override: 0%;
}

@font-face {
  font-family: "Newsreader fb A";
  src: local("Georgia");
  font-weight: 400; font-style: normal;
  size-adjust: 91.19%; ascent-override: 81.2%; descent-override: 28.5%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader fb A";
  src: local("Georgia Bold"), local("Georgia-Bold");
  font-weight: 500 700; font-style: normal;
  size-adjust: 81.80%; ascent-override: 90.5%; descent-override: 31.8%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader fb A";
  src: local("Georgia Italic"), local("Georgia-Italic");
  font-weight: 400; font-style: italic;
  size-adjust: 81.86%; ascent-override: 90.4%; descent-override: 31.8%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader fb B";
  src: local("Times New Roman"), local("Tinos"), local("Liberation Serif"), local("Noto Serif"), local("DejaVu Serif");
  font-weight: 400; font-style: normal;
  size-adjust: 100.29%; ascent-override: 73.8%; descent-override: 25.9%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader fb B";
  src: local("Times New Roman Bold"), local("TimesNewRomanPS-BoldMT"), local("Tinos Bold"), local("Liberation Serif Bold"), local("Noto Serif Bold");
  font-weight: 500 700; font-style: normal;
  size-adjust: 98.56%; ascent-override: 75.1%; descent-override: 26.4%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader fb B";
  src: local("Times New Roman Italic"), local("TimesNewRomanPS-ItalicMT"), local("Tinos Italic"), local("Liberation Serif Italic"), local("Noto Serif Italic");
  font-weight: 400; font-style: italic;
  size-adjust: 91.51%; ascent-override: 80.9%; descent-override: 28.4%; line-gap-override: 0%;
}

:root {
  /* ── 五色 riso 系统（§F 实测表，别再自己试）── */
  --wal-paper: var(--wp--preset--color--paper, #F0E6D2);      /* 纸底 */
  --wal-paper-hi: var(--wp--preset--color--paper-hi, #F7EFDF);/* 窗框内的亮纸 */
  --wal-ink: var(--wp--preset--color--ink, #241F1B);          /* 纸底 CR 13.18 ✅ */
  --wal-red: var(--wp--preset--color--red, #C4402B);          /* 纸底 4.12 —— 只做填充/大字 */
  --wal-red-t: var(--wp--preset--color--red-ink, #A8321F);    /* 纸底 5.40 ✅ 排字用 */
  --wal-indigo: var(--wp--preset--color--indigo, #2B4B7A);    /* 纸底 7.09 ✅ */
  --wal-grey: var(--wp--preset--color--halftone, #8A7A66);    /* 纸底 3.35 —— 只画线 */
  --wal-grey-t: var(--wp--preset--color--grey-ink, #6E6152);  /* 纸底 4.85 ✅ */
  --wal-void: var(--wp--preset--color--void, #131110);

  /* 线与面 */
  --wal-rule: var(--wal-grey);
  --wal-rule-soft: #C9BCA4;
  --wal-tint: rgba(138, 122, 102, .10);   /* 网点灰淡填充，不写字 */

  /* 中文正文的**系统栈** —— 2026-09-07 起不再拉 Noto Serif SC（它一个人 20 档 1481KB）。
   * 三端各自会命中谁（判断依据，别凭印象改）：
   *   macOS / iOS → **Songti SC**（系统自带宋体，两个平台都有；PingFang 是黑体，不进这条栈）
   *   Windows     → **SimSun / 宋体**（XP 以来一直在）
   *   Android     → 命名的那几支多半都没有 ⇒ 落到最后的 `serif` 泛型。
   *                 ⚠️ 老实说：不少 Android 机型的 `serif` 泛型对 CJK 会回退到
   *                 **Noto Sans CJK（黑体）**，也就是安卓上中文正文多半是黑体不是宋体。
   *                 这是**已知且接受**的 —— 换来的是每页少 1.4MB。
   * 排序是「专有名字在前、泛型兜底在后」：命中越靠前的越接近报纸宋。 */
  --wal-cjk: "Songti SC", "STSong", "Noto Serif CJK SC", "Source Han Serif SC",
             "Source Han Serif CN", "SimSun", serif;

  /* 字（§F 组 1「报头」）*/
  --wal-disp: "Abril Fatface", "Abril fb A", "Abril fb B", Georgia, "Times New Roman", serif;
  --wal-brush: "Ma Shan Zheng", "Kaiti SC", STKaiti, KaiTi, cursive;
  --wal-body: "Newsreader", "Newsreader fb A", "Newsreader fb B", Georgia, "Times New Roman", var(--wal-cjk);
  --wal-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  /* 版面 */
  --wal-shell: min(1180px, 100%);
  --wal-pad: clamp(16px, 3.2vw, 34px);
  --wal-measure: 66ch;
  --wal-rail-w: 226px;                    /* 文章右栏；文章头要跟正文栏对齐，两边共用这一个数 */
  --wal-col-gap: clamp(28px, 3.4vw, 48px);
  --wal-radius: 12px;
  --wal-ease: cubic-bezier(.22, .61, .36, 1);

  /* 纹理（程序生成，256² 无缝；接缝自检写在 README）*/
  --wal-tex-news: url(../img/tex-newsprint.webp);
  --wal-tex-half: url(../img/tex-halftone.webp);
}

/* 拉丁专用展示体 —— 中文页也不换。
 * 🔴 zh 页把 --wal-disp 整个换成 Ma Shan Zheng 之后，站名「The Walaoeh」这几个拉丁字母
 *    在毛笔字体里**没有字形**，会静默掉进 fallback（实测：渲染成一款完全不相干的衬线体）。
 *    品牌字标不能随语言变形，所以凡是「一定是拉丁字」的地方走这一支。 */
:root { --wal-disp-en: "Abril Fatface", "Abril fb A", "Abril fb B", Georgia, "Times New Roman", serif; }

/* 中文页：正文与展示体都换报纸宋，**毛笔只用在 H1 与栏目头**。
 * 判据来自 body class `wal-lang-zh`（PHP 的 walaoeh_lang() 是全站唯一那份判据），
 * 不靠 html[lang] —— Polylang 的 zh 语系 locale 有好几种写法。
 *
 * 🔴 第一版把 `--wal-disp` 整个换成毛笔，于是页脚大字 / 引用 / 卡片标题 / 作者名
 *    全都变成毛笔 —— 那既不合 spec（「毛笔字只用在 H1/栏目头」），代价也是实打实的：
 *    PSI mobile 实测 zh 首页 **32 个字体档 2032KB**，其中 Ma Shan Zheng 占 8 档 505KB。
 *    CJK 的 Google Fonts 是按 unicode-range 切片的 —— **用在越多地方，命中的切片越多**。
 *    收回到 H1+栏目头，命中的字数就从「整页」缩到「几十个字」。 */
.wal-lang-zh {
  --wal-disp: var(--wal-cjk);
  --wal-body: var(--wal-cjk);
}
/* zh 的展示体是宋体，要靠字重撑起「展示」的分量（拉丁那边靠 Abril 的字形本身） */
.wal-lang-zh :is(.wal-mega, .wal-foot__line, .wal-cathead h1, .wal-title,
  .wal-related h2, .wal-card__title, .wal-card__title a, .wal-author__name,
  .wal-fig b, .wal-brand) { font-weight: 700; }
/* 毛笔 —— 只有这几处（spec ③ + 2026-09-08 加的画报标签）。
 * 字重回 400：这款只有一个字重，写 700 会触发合成加粗，糊。
 * 🔴 动这一行的选择器，必须回去改 functions.php 的 walaoeh_brush_chars()
 *    —— 那支函数按选择器把「这一页会用到哪些字」算出来做子集，
 *    漏收的字会**静默**换成系统宋体，不报错。 */
.wal-lang-zh :is(.wal-mega, .wal-title, .wal-cathead h1, .wal-colhead b, .wal-gazette__label) {
  font-family: var(--wal-brush); font-weight: 400;
}

* { box-sizing: border-box; }

body {
  background: var(--wal-paper);
  color: var(--wal-ink);
  font-family: var(--wal-body);
  -webkit-font-smoothing: antialiased;
  position: relative;
  overflow-x: hidden;   /* 手机 390：任何一处溢出都不许把整页推宽 */
}

/* 整页纸纹：multiply 6%，让屏幕上的「白」也是纸不是白。
 * 实测：叠上去之后墨/纸 CR 从 13.18 掉到 12.93（-1.9%），对判定没有影响。
 * pointer-events:none —— 它盖在最上层，绝不能吃掉点击。
 * 用 position:fixed 而不是 absolute：absolute 只覆盖 body 的**初始**高度，
 * 长页面滚下去之后下半截没有纹理，而那种差别只有滚到底才看得见。 */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 9;
  pointer-events: none;
  background-image: var(--wal-tex-news);
  background-size: 256px;
  mix-blend-mode: multiply;
  opacity: .06;
}

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

/* mono 小标签 —— 报纸里那种全大写的栏目注记 */
.wal-lbl,
.wal-mono {
  font-family: var(--wal-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .17em;
  text-transform: uppercase;
  line-height: 1;
}

/* ── A11y ────────────────────────────────────────────────── */
.screen-reader-text {
  border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%);
  height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute;
  width: 1px; word-wrap: normal !important;
}
.wal-skip-link:focus {
  clip: auto; clip-path: none; height: auto; width: auto; margin: 0;
  position: fixed; inset: 8px auto auto 8px; z-index: 9999;
  background: var(--wal-ink); color: var(--wal-paper);
  padding: 10px 16px; border-radius: 6px; text-decoration: none; font-weight: 600;
}
:where(a, button, input, select, textarea, summary):focus-visible {
  outline: 2px solid var(--wal-red-t); outline-offset: 3px; border-radius: 2px;
}

/* =============================================================
 * 窗框 —— 全站唯一的容器母题（借 flipbook）
 * 圆角 12px + 2px 墨线 + 纸底 + 一道硬投影（印刷品叠在桌上的感觉）
 * ============================================================= */

.wal-win {
  margin: 0;
  border: 2px solid var(--wal-ink);
  border-radius: var(--wal-radius);
  background: var(--wal-paper-hi);
  overflow: hidden;
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
}
.wal-win > img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.wal-win--wide > img { aspect-ratio: 16 / 9; }
/* 六格与分类头：桌面 4:3（版面里一块竖一点的图更稳），手机换 16:9 省掉约 400px 的总高 */
.wal-win--tile > img { aspect-ratio: 16 / 9; }
@media (min-width: 760px) { .wal-win--tile > img { aspect-ratio: 4 / 3; } }

/* =============================================================
 * 小报栏目头 —— 墨底纸字（深色只做小面积，这是其中一处）
 * 纸 #F0E6D2 压墨 #241F1B = CR 13.18 ✅
 * ============================================================= */

.wal-colhead {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  background: var(--wal-ink);
  color: var(--wal-paper);
  border-radius: 6px;
  padding: 7px 13px 8px;
  text-decoration: none;
  transition: transform .2s var(--wal-ease);
}
a.wal-colhead:hover { transform: translateY(-2px); }
.wal-colhead b {
  font-family: var(--wal-disp);
  font-weight: 400;
  font-size: 19px;
  line-height: 1.25;
  letter-spacing: .005em;
}
.wal-lang-zh .wal-colhead b { font-size: 22px; }
.wal-colhead span {
  font-family: var(--wal-mono);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--wal-paper);
  white-space: nowrap;
  flex: none;
}

/* =============================================================
 * 顶部导航条 —— 纸底，双细线收边（报纸的天头）
 * ============================================================= */

.wal-header { position: sticky; top: 0; z-index: 80; }
.wal-bar {
  background: var(--wal-paper);
  color: var(--wal-ink);
  border-bottom: 1px solid var(--wal-rule);
  box-shadow: 0 2px 0 var(--wal-paper), 0 3px 0 var(--wal-rule);
  transition: box-shadow .3s var(--wal-ease);
}
.wal-bar.is-stuck { box-shadow: 0 2px 0 var(--wal-paper), 0 3px 0 var(--wal-rule), 0 10px 20px rgba(36, 31, 27, .10); }
.wal-bar__in {
  width: var(--wal-shell); margin: 0 auto; padding: 10px var(--wal-pad);
  display: flex; align-items: center; gap: 18px; min-width: 0;
}

.wal-brand {
  display: inline-flex; align-items: center; gap: 9px; flex: none;
  font-family: var(--wal-disp-en); font-size: 20px; font-weight: 400;
  letter-spacing: .005em; white-space: nowrap; text-decoration: none; color: var(--wal-ink);
}
.wal-brand__tick { width: 24px; height: 24px; display: block; flex: none; }
.wal-mark { display: block; width: 100%; height: 100%; }
.wal-brand:hover { text-decoration: none; }

.wal-bar__nav { display: none; align-items: center; gap: 19px; min-width: 0; }
.wal-bar__nav a {
  font-size: 15px; text-decoration: none; white-space: nowrap; color: var(--wal-grey-t);
  transition: color .2s var(--wal-ease);
}
.wal-bar__nav a:hover, .wal-bar__nav a[aria-current] { color: var(--wal-ink); }
.wal-bar__nav a[aria-current] { text-decoration: underline; text-underline-offset: 5px; }
.wal-bar__chg { position: relative; padding-left: 14px; }
.wal-bar__chg::before {
  content: ""; position: absolute; left: 0; top: 50%; margin-top: -3px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--wal-red);
}
@media (min-width: 1080px) { .wal-bar__nav { display: flex; } }

/* 🔴 窄屏不能把六格藏起来（那正是 v3 借导航条要修的那件事）。
 *    <1080px 时六格折成第二行、横向可滑；整个页头不再吸顶，
 *    第二行就不会吃掉常驻的屏幕高度。 */
@media (max-width: 1079px) {
  .wal-header { position: static; }
  .wal-bar__in { flex-wrap: wrap; row-gap: 0; }
  .wal-bar__nav {
    display: flex; order: 3; flex: 1 0 100%; gap: 18px;
    overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none;
    padding: 0; margin-top: 2px; -webkit-overflow-scrolling: touch;
  }
  .wal-bar__nav::-webkit-scrollbar { display: none; }
  /* 触控目标 ≥44px */
  .wal-bar__nav a { font-size: 15px; display: flex; align-items: center; min-height: 44px; }
  .wal-bar__chg { padding-left: 0; }
  .wal-bar__chg::before { display: none; }
}

.wal-bar__right { margin-left: auto; display: flex; align-items: center; gap: 12px; flex: none; }

/* 🔴 次要文字一律用**实色**，绝不用 opacity 调淡 ——
 *    v1 那枚被 opacity:.42 拖成 CR 1.78 的核实戳，就是这个手法的代价。 */
.wal-lang { display: flex; align-items: center; gap: 6px; font-family: var(--wal-mono); font-size: 12px; letter-spacing: .08em; }
.wal-lang__item { text-decoration: none; color: var(--wal-grey-t); transition: color .2s var(--wal-ease); }
.wal-lang__sep { color: var(--wal-grey-t); }
.wal-lang__item.is-current { font-weight: 600; color: var(--wal-ink); }
.wal-lang__item:hover { color: var(--wal-red-t); }

/* 搜索：<details>/<summary>，零 JS，键盘可达 */
.wal-hsearch { position: relative; }
.wal-hsearch__t {
  list-style: none; cursor: pointer; display: grid; place-items: center;
  width: 34px; height: 34px; border-radius: 6px; border: 1.5px solid var(--wal-rule);
}
.wal-hsearch__t::-webkit-details-marker { display: none; }
.wal-hsearch__t svg { width: 17px; height: 17px; stroke: var(--wal-ink); stroke-width: 1.9; }
.wal-hsearch[open] .wal-hsearch__t { background: var(--wal-tint); border-color: var(--wal-ink); }
.wal-hsearch__f {
  position: absolute; right: 0; top: calc(100% + 10px); z-index: 5;
  display: flex; gap: 6px; padding: 10px; border-radius: var(--wal-radius);
  width: min(84vw, 380px);
  background: var(--wal-paper-hi); border: 2px solid var(--wal-ink);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
}
.wal-hsearch__f input {
  flex: 1; min-width: 0; background: none; border: 0; outline: 0; color: var(--wal-ink);
  font: 400 15px/1 var(--wal-body); padding: 8px 6px;
}
.wal-hsearch__f button {
  flex: none; border: 0; cursor: pointer; border-radius: 5px; padding: 8px 13px;
  background: var(--wal-ink); color: var(--wal-paper);
  font: 500 12px/1 var(--wal-mono); letter-spacing: .08em;
}

/* =============================================================
 * 首页 ① 报头 + 主视觉
 * ============================================================= */

.wal-main { display: block; }
.wal-main--home { padding: 0 var(--wal-pad) clamp(40px, 5vw, 72px); }
.wal-hero { width: var(--wal-shell); margin: 0 auto; padding-top: clamp(22px, 3vw, 40px); }

/* 报头：上下双线之间的字标 + 一行 mono */
.wal-masthead {
  border-top: 3px double var(--wal-ink);
  border-bottom: 1px solid var(--wal-ink);
  padding: clamp(16px, 2.4vw, 26px) 0 12px;
  margin-bottom: clamp(16px, 2.4vw, 26px);
  text-align: center;
}
.wal-masthead__wm img {
  display: block; margin: 0 auto;
  width: clamp(190px, 26vw, 300px); height: auto;
}
.wal-masthead__line {
  margin: 14px 0 0;
  display: flex; flex-wrap: wrap; justify-content: center; align-items: center;
  gap: 6px 14px;
  font-family: var(--wal-mono); font-size: 11px; font-weight: 500;
  letter-spacing: .15em; text-transform: uppercase; color: var(--wal-grey-t);
}
.wal-masthead__line > span { display: inline-flex; gap: 5px; }
.wal-masthead__line > span + span::before {
  content: "·"; margin-right: 9px; color: var(--wal-grey);
}
.wal-masthead__line time { font-variant-numeric: tabular-nums; color: var(--wal-red-t); }

/* 主视觉 */
.wal-hero__img { margin: 0; }
.wal-hero__say {
  display: grid; gap: clamp(10px, 1.6vw, 18px);
  padding: clamp(18px, 2.6vw, 30px) 0 0;
  grid-template-columns: 1fr;
}
@media (min-width: 900px) {
  .wal-hero__say { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); align-items: end; gap: clamp(20px, 3vw, 44px); }
}
.wal-mega {
  font-family: var(--wal-disp); font-weight: 400; margin: 0;
  font-size: clamp(38px, 6.2vw, 84px); line-height: 1.02; letter-spacing: -.012em;
  color: var(--wal-ink); text-wrap: balance;
}
/* 「被坑 / taken」是全站唯一一处大面积朱红字 —— 尺寸恒 ≥38px，
 * §F 允许朱红做大字（≥18.66px 时 3:1 即可，实测 4.12 ✅）。 */
.wal-mega em { font-style: normal; color: var(--wal-red); }
.wal-lang-zh .wal-mega { font-size: clamp(36px, 5.6vw, 76px); line-height: 1.14; letter-spacing: 0; }
.wal-hero__note { display: flex; flex-direction: column; gap: 14px; align-items: flex-start; }
@media (min-width: 900px) { .wal-hero__note { padding-bottom: 6px; } }
.wal-hero__sub {
  margin: 0; color: var(--wal-grey-t); font-size: clamp(15px, 1.2vw, 17px);
  line-height: 1.55; max-width: 44ch;
}

/* =============================================================
 * 首页 ② 分类广告框（数字 + 搜索）
 * ============================================================= */

.wal-ledger { width: var(--wal-shell); margin: clamp(30px, 4vw, 52px) auto 0; }
.wal-ledger__in {
  border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  background: var(--wal-paper-hi); padding: 12px 12px 18px;
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
}
.wal-ledger__body {
  display: grid; gap: clamp(16px, 2.4vw, 30px); padding: 16px 8px 0;
  grid-template-columns: 1fr;
}
@media (min-width: 820px) { .wal-ledger__body { grid-template-columns: auto minmax(0, 1fr); align-items: start; } }
.wal-figs { display: flex; gap: clamp(20px, 3vw, 38px); flex-wrap: wrap; }
.wal-fig b {
  display: block; font-family: var(--wal-disp); font-weight: 400;
  font-size: clamp(34px, 4.2vw, 54px); line-height: .95; color: var(--wal-ink);
  font-variant-numeric: tabular-nums;
}
.wal-lang-zh .wal-fig b { font-family: var(--wal-mono); font-weight: 600; }
.wal-fig .wal-lbl { display: block; margin-top: 8px; color: var(--wal-grey-t); }
.wal-ledger__col { min-width: 0; }

.wal-bigsearch {
  display: flex; align-items: center; gap: 10px;
  border: 2px solid var(--wal-ink); border-radius: 8px; background: var(--wal-paper);
  padding: 6px 6px 6px 13px;
}
.wal-bigsearch svg { width: 19px; height: 19px; flex: none; stroke: var(--wal-grey-t); stroke-width: 1.9; }
.wal-bigsearch input {
  flex: 1; min-width: 0; border: 0; background: none; outline: 0; color: var(--wal-ink);
  font: 400 16px/1.3 var(--wal-body); padding: 11px 0;
}
.wal-bigsearch input::placeholder { color: var(--wal-grey-t); }
.wal-bigsearch button {
  flex: none; border: 0; cursor: pointer; border-radius: 5px; padding: 11px 17px;
  background: var(--wal-ink); color: var(--wal-paper);
  font: 500 12px/1 var(--wal-mono); letter-spacing: .1em; text-transform: uppercase;
  transition: transform .2s var(--wal-ease);
}
.wal-bigsearch button:hover { transform: translateY(-2px); }
.wal-ledger__p {
  margin: 14px 0 0; font-size: 15.5px; line-height: 1.6; color: var(--wal-grey-t); max-width: 62ch;
}
.wal-ledger__p b { color: var(--wal-ink); font-weight: 600; }

/* =============================================================
 * 首页 ③ 六格 = 报纸版面（不是一格一整屏）
 * ============================================================= */

.wal-fields { width: var(--wal-shell); margin: clamp(34px, 4.4vw, 60px) auto 0; }
.wal-fields__grid {
  display: grid; gap: clamp(22px, 2.6vw, 34px);
  grid-template-columns: 1fr;
}
@media (min-width: 700px)  { .wal-fields__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1080px) { .wal-fields__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.wal-field { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.wal-field .wal-win { margin: 0; }
.wal-field__blurb {
  margin: -2px 0 0; font-family: var(--wal-mono); font-size: 11.5px; line-height: 1.5;
  color: var(--wal-grey-t); letter-spacing: .02em;
}
/* 版面要对齐：关键词行有的一行有的两行，不钉高度的话同一排六格的文章列表起点各不相同，
 * 一眼就散了。两行的高度是 2 × 1.5em。手机是单栏，没有「同一排」这回事 ⇒ 不钉。 */
@media (min-width: 700px) {
  .wal-field__blurb { min-height: 3em; }
  .wal-field .wal-meta { margin-top: auto; padding-top: 2px; }
}

.wal-topics { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--wal-rule); }
.wal-topics li { margin: 0; }
.wal-topics a {
  display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  padding: 9px 0; border-bottom: 1px dotted var(--wal-rule);
  text-decoration: none; color: var(--wal-ink); font-size: 15.5px; line-height: 1.35;
  transition: transform .2s var(--wal-ease), color .2s var(--wal-ease);
}
.wal-topics a:hover { transform: translateX(2px); color: var(--wal-red-t); }
.wal-topics time {
  flex: none; font-family: var(--wal-mono); font-size: 11px; color: var(--wal-grey-t);
  font-variant-numeric: tabular-nums;
}

.wal-meta {
  margin: 2px 0 0; display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: baseline;
  font-family: var(--wal-mono); font-size: 11px; letter-spacing: .09em; color: var(--wal-grey-t);
}
.wal-meta a { color: var(--wal-red-t); text-decoration: none; border-bottom: 1px solid currentColor; }
.wal-meta a:hover { color: var(--wal-ink); }
.wal-meta time { font-variant-numeric: tabular-nums; }

/* =============================================================
 * 首页 ④ 更正启事（What changed）
 * ============================================================= */

.wal-changed { width: var(--wal-shell); margin: clamp(38px, 5vw, 70px) auto 0; }
.wal-changed__in {
  border-top: 3px double var(--wal-ink); padding-top: clamp(18px, 2.4vw, 28px);
}
.wal-changed__in > .wal-colhead { display: inline-flex; }
.wal-changed__sub, .wal-latest__sub {
  margin: 14px 0 clamp(16px, 2vw, 24px); font-size: 15px; line-height: 1.6;
  color: var(--wal-grey-t); max-width: 68ch;
}
.wal-log { border-top: 1px solid var(--wal-rule); }
.wal-log__row {
  display: grid; gap: 2px 16px; padding: 13px 0; border-bottom: 1px solid var(--wal-rule);
  grid-template-columns: 1fr auto;
  align-items: baseline;
}
@media (min-width: 900px) {
  .wal-log__row { grid-template-columns: 104px minmax(0, 1fr) auto; gap: 4px 20px; }
}
.wal-log__d {
  font-family: var(--wal-mono); font-size: 12px; color: var(--wal-grey-t);
  font-variant-numeric: tabular-nums; letter-spacing: .04em; order: -1;
}
.wal-log__t {
  font-size: 16.5px; line-height: 1.4; color: var(--wal-ink); text-decoration: none;
  border-bottom: 1px solid var(--wal-rule);
}
.wal-log__t:hover { color: var(--wal-red-t); border-color: currentColor; }
.wal-log__n {
  grid-column: 1 / -1; font-size: 14px; line-height: 1.55; color: var(--wal-grey-t); max-width: 78ch;
}
@media (min-width: 900px) { .wal-log__n { grid-column: 2 / 3; } }
.wal-log__tag {
  font-family: var(--wal-mono); font-size: 10px; font-weight: 600; letter-spacing: .12em;
  text-transform: uppercase; padding: 4px 8px; border-radius: 4px; white-space: nowrap;
  border: 1px solid currentColor; color: var(--wal-grey-t);
}
.wal-log__tag.is-changed { background: var(--wal-red); color: var(--wal-paper); border-color: var(--wal-red); }
.wal-log__tag.is-holds { color: var(--wal-indigo); }
.wal-log__tag.is-unverified { color: var(--wal-red-t); }

/* =============================================================
 * 核实戳 —— 一枚略歪的朱红橡皮章。设计的中心。
 * 章底 = 朱红 6% 叠在纸上（#EDDCC8）· 章内字 = #A8321F ⇒ CR 4.99 ✅
 * 🔴 opacity 恒为 1，任何祖先都不许给它 opacity。
 * ============================================================= */

.wal-stamp {
  display: inline-flex; flex-direction: column; align-items: center; gap: 3px;
  position: relative; opacity: 1;
  border: 2.5px solid var(--wal-red); border-radius: 11px;
  background: rgba(196, 64, 43, .06);
  color: var(--wal-red-t);
  padding: 8px 17px 7px;
  transform: rotate(-3deg);
  font-family: var(--wal-mono);
}
/* 网点断墨的边缘：把 tex-halftone 当 mask，让那圈纸色描边缺一块一块的 ——
 * 手盖的章不会四边都实。mask 里的透明处露出下面的章框，所以观感是「墨没吃满」。 */
.wal-stamp::after {
  content: ""; position: absolute; inset: -2.5px; border-radius: 11px;
  border: 2.5px solid var(--wal-paper); pointer-events: none;
  -webkit-mask-image: var(--wal-tex-half); mask-image: var(--wal-tex-half);
  -webkit-mask-size: 34px; mask-size: 34px;
}
.wal-stamp__lbl {
  font-size: 10px; font-weight: 500; line-height: 1;
  letter-spacing: .16em; text-transform: uppercase;
}
.wal-stamp__d {
  font-family: var(--wal-mono); font-weight: 600; font-variant-numeric: tabular-nums;
  font-size: 19px; line-height: 1.15; letter-spacing: .01em;
}
.wal-stamp--sm { padding: 6px 13px 5px; border-width: 2px; border-radius: 9px; transform: rotate(-2.4deg); }
.wal-stamp--sm::after { inset: -2px; border-width: 2px; border-radius: 9px; }
.wal-stamp--sm .wal-stamp__lbl { font-size: 9px; letter-spacing: .14em; }
.wal-stamp--sm .wal-stamp__d { font-size: 15px; }

.wal-stamprow { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 22px; }
.wal-stamprow p { max-width: 40ch; color: var(--wal-grey-t); font-size: 14.5px; line-height: 1.5; margin: 0; }
.wal-stamprow--art { margin: clamp(20px, 2.6vw, 28px) 0 0; }
.wal-stamp__note { display: block; width: 100%; font-size: 13px; color: var(--wal-grey-t); }
.wal-stamp-wrap { margin: 0; }

/* =============================================================
 * 页脚 —— 纸底，双线报尾
 * ============================================================= */

.wal-footer {
  background: var(--wal-paper);
  border-top: 3px double var(--wal-ink);
  margin-top: clamp(46px, 6vw, 84px);
  padding: clamp(30px, 4vw, 52px) var(--wal-pad) 34px;
}
.wal-foot { width: var(--wal-shell); margin: 0 auto; }
.wal-foot__line {
  font-family: var(--wal-disp); font-weight: 400; margin: 0;
  font-size: clamp(22px, 2.8vw, 38px); line-height: 1.18; letter-spacing: -.008em; max-width: 26ch;
  color: var(--wal-ink);
}
/* 🔴 这里必须用**排字红** #A8321F（5.40），不是印刷朱红 #C4402B（4.12）。
 * 实测（390，渲染后）：clamp 下界把它压到 22px —— 22px 既不到 24，也不是 700 粗，
 * 于是它是「正文」不是「大字」，门槛 4.5 而不是 3 ⇒ 4.12 直接 FAIL。
 * 桌面 38px 时同一个色号是合规的，所以这条**只有量手机才看得见** ——
 * 「大字可以用朱红」这句话真正的条件是 px 数，不是这行字长得像不像标题。 */
.wal-foot__line em { font-style: normal; color: var(--wal-red-t); }
/* ⚠️ `ch` = 字符「0」的宽度（半角）。26ch 在英文里是 26 个字母，在中文里只有 13 个字 ——
 * 同一个数字在两种语言下是两个完全不同的行宽。zh 单独给值，不是「调好看」，是单位语义不同。 */
.wal-lang-zh .wal-foot__line { max-width: 38ch; }
.wal-foot__grid {
  margin-top: clamp(26px, 3.4vw, 40px);
  display: grid; gap: 0;
  border: 2px solid var(--wal-ink); border-radius: var(--wal-radius); overflow: hidden;
  grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 700px) { .wal-foot__grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1000px) { .wal-foot__grid { grid-template-columns: repeat(6, 1fr); } }
.wal-foot__cell {
  padding: 15px 14px 16px; display: block; text-decoration: none; color: var(--wal-ink);
  border-right: 1px solid var(--wal-rule); border-bottom: 1px solid var(--wal-rule);
  transition: background .2s var(--wal-ease);
}
.wal-foot__cell:hover { background: var(--wal-tint); }
.wal-foot__cell:nth-child(2n) { background: rgba(138, 122, 102, .06); }
.wal-foot__cell:nth-child(2n):hover { background: var(--wal-tint); }
@media (min-width: 1000px) { .wal-foot__cell { border-bottom: 0; } .wal-foot__cell:last-child { border-right: 0; } }
.wal-foot__cell b { display: block; font-family: var(--wal-disp); font-weight: 400; font-size: 19px; }
.wal-lang-zh .wal-foot__cell b { font-size: 21px; }
.wal-foot__cell span { display: block; margin-top: 5px; font-family: var(--wal-mono); font-size: 11.5px; color: var(--wal-grey-t); }
.wal-foot__bot {
  margin-top: 26px; display: flex; flex-wrap: wrap; gap: 12px 22px; align-items: center;
  color: var(--wal-grey-t); font-size: 13.5px;
}
.wal-foot__bot .wal-lang { border: 1.5px solid var(--wal-rule); border-radius: 999px; padding: 5px 13px; }
.wal-foot__ph { font-family: var(--wal-mono); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.wal-foot__bot .wal-foot__ph:last-child { margin-left: auto; }
.wal-footer .wal-nav__list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 22px; }
.wal-footer .wal-nav__list a { color: var(--wal-grey-t); text-decoration: none; font-size: 14px; }
.wal-footer .wal-nav__list a:hover { color: var(--wal-ink); text-decoration: underline; }

/* =============================================================
 * 文章页
 * ============================================================= */

.wal-main--article { padding: 0 var(--wal-pad); }
/* 文章头（面包屑→首图）跟正文栏**同宽同起点** —— 右栏那条空白就成了刻意的天地，
 * 而不是「头比正文宽出去一截」的意外。两边共用 --wal-rail-w / --wal-col-gap。 */
.wal-ahead {
  width: min(1180px, 100%); margin: 0 auto;
  padding: clamp(20px, 3vw, 38px) 0 clamp(14px, 2vw, 22px);
}
@media (min-width: 1024px) {
  .wal-ahead { max-width: calc(min(1180px, 100%) - var(--wal-rail-w) - var(--wal-col-gap)); margin: 0 auto 0 max(0px, calc((100% - min(1180px, 100%)) / 2)); }
}
.wal-crumbs { font-family: var(--wal-mono); font-size: 11.5px; color: var(--wal-grey-t); margin: 0 0 16px; letter-spacing: .04em; }
.wal-crumbs a { color: var(--wal-grey-t); text-decoration: none; }
.wal-crumbs a:hover { color: var(--wal-red-t); text-decoration: underline; }

.wal-ahead .wal-colhead { display: inline-flex; margin: 0 0 18px; }

.wal-title { margin: 0 !important; max-width: 22ch; text-wrap: balance; }
.wal-lang-zh .wal-title { max-width: 20ch; line-height: 1.22; }
.wal-adek {
  margin: 16px 0 0; font-family: var(--wal-body); font-style: italic;
  font-size: clamp(17px, 1.5vw, 21px); line-height: 1.5; color: var(--wal-grey-t); max-width: 52ch;
}
.wal-lang-zh .wal-adek { font-style: normal; }
.wal-byline {
  margin: 18px 0 0; display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center;
  color: var(--wal-grey-t); font-family: var(--wal-mono); font-size: 12px; letter-spacing: .05em;
}
.wal-byline a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--wal-rule); }
.wal-byline a:hover { color: var(--wal-red-t); }
/* 分隔点用排字灰（4.85），不是描边灰（1.32）—— 描边色写字是 §F 明写的红线 */
.wal-byline s { text-decoration: none; color: var(--wal-grey-t); }

/* 首图占满栏宽（spec ②：width 100% 栏宽），不是正文的 66ch —— 报纸的头版照片就是通栏 */
.wal-featured { margin: clamp(20px, 2.6vw, 30px) 0 0; max-width: 100%; }
/* 首图套窗框：这里不能用 .wal-win（那是主题自己的容器），首图是 core 的块 */
.wal-featured img {
  width: 100%; display: block; border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
}

/* ── 一句话答案卡 ──────────────────────────────────────────
 * 数据源是作者手动插入的 pattern；正文里没有 ⇒ 这一块整个不渲染。 */
.wal-answer {
  margin: clamp(22px, 2.8vw, 34px) 0 0;
  background: var(--wal-paper-hi);
  border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
  padding: clamp(18px, 2.2vw, 26px); max-width: 780px;
}
.wal-answer__hd {
  margin: 0; font-family: var(--wal-mono); font-size: 10.5px; font-weight: 600;
  letter-spacing: .18em; text-transform: uppercase; color: var(--wal-red-t);
}
.wal-answer__lead { margin: 11px 0 0; font-size: 19px; line-height: 1.55; color: var(--wal-ink); max-width: 62ch; }
.wal-answer__lead strong { font-weight: 600; }
.wal-answer__list {
  margin: 17px 0 0; padding: 0; display: grid; gap: 1px;
  background: var(--wal-rule); border: 1px solid var(--wal-rule); border-radius: 6px; overflow: hidden;
}
@media (min-width: 680px) { .wal-answer__list { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); } }
.wal-answer__row { background: var(--wal-paper-hi); padding: 13px 14px 14px; margin: 0; }
.wal-answer__list dt {
  font-family: var(--wal-mono); font-size: 10px; font-weight: 500; letter-spacing: .15em;
  text-transform: uppercase; color: var(--wal-grey-t);
}
.wal-answer__list dd {
  margin: 8px 0 0; font-family: var(--wal-mono); font-weight: 500;
  font-size: clamp(18px, 1.8vw, 22px); line-height: 1.15; font-variant-numeric: tabular-nums; color: var(--wal-ink);
}
.wal-answer__list dd.is-text { font-family: var(--wal-body); font-size: 17px; }
/* 注解默认中性灰。红/蓝是**语义**，要明写 —— 默认给一个颜色等于替内容作判断。 */
.wal-answer__note { display: block; margin-top: 5px; font-family: var(--wal-body); font-size: 13px; font-weight: 400; line-height: 1.35; color: var(--wal-grey-t); }
.wal-answer__note.is-good { color: var(--wal-indigo); font-weight: 500; }
.wal-answer__note.is-warn { color: var(--wal-red-t); font-weight: 500; }

/* ── 正文 ── */
.wal-wrap2 {
  width: min(1180px, 100%); margin: 0 auto;
  padding-bottom: clamp(40px, 5vw, 72px);
  display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--wal-col-gap);
}
/* 右栏从 1024 起（v3 是 1160）—— 66ch 正文 ≈ 640px + 226px 右栏 + 间距，1024 装得下 */
@media (min-width: 1024px) { .wal-wrap2 { grid-template-columns: minmax(0, 1fr) var(--wal-rail-w); align-items: start; } }
.wal-col { min-width: 0; }

.wal-content { max-width: var(--wal-measure); font-size: 19px; line-height: 1.6; }
.wal-lang-zh .wal-content { font-size: 17.5px; line-height: 1.85; }
.wal-content > * { max-width: 100%; }
.wal-content p { margin: 0 0 1.1em; }
.wal-content a { color: var(--wal-indigo); text-underline-offset: 3px; text-decoration-thickness: 1px; }
.wal-content a:hover { color: var(--wal-red-t); }
.wal-content strong { font-weight: 600; }
.wal-content ul, .wal-content ol { margin: 1.1em 0; padding-left: 22px; }
.wal-content li { margin: .4em 0; }
.wal-content li::marker { color: var(--wal-red-t); }
.wal-content h2 { margin: 1.9em 0 .5em; padding-top: .5em; border-top: 1px solid var(--wal-rule); }
.wal-content h3 { margin: 1.7em 0 .45em; }
.wal-content h2 + h3 { margin-top: .9em; }
.wal-content hr.wp-block-separator { border: 0; border-top: 1px solid var(--wal-rule); margin: 2.1rem 0; opacity: 1; }
.wal-content figure { margin: 0 0 1.5em; }
.wal-content figure img { border-radius: var(--wal-radius); border: 2px solid var(--wal-ink); }
.wal-content figcaption { font-family: var(--wal-mono); font-size: 12px; color: var(--wal-grey-t); margin-top: 8px; text-align: left; }
.wal-content blockquote {
  margin: 1.9em 0; padding: 2px 0 2px 20px; border-left: 4px solid var(--wal-red);
  font-family: var(--wal-disp); font-size: clamp(20px, 2vw, 26px); line-height: 1.3; color: var(--wal-ink);
}
.wal-lang-zh .wal-content blockquote { font-family: var(--wal-body); font-weight: 600; font-size: clamp(19px, 1.9vw, 24px); line-height: 1.55; }
.wal-content blockquote p:last-child { margin-bottom: 0; }

/* -------------------------------------------------------------
 * Magazine Blocks 的 heading 兼容层
 *
 * 🔴 实测：148 篇正文里 6468 个 h2/h3 **全部**包在 <div class="mzb-heading">…
 *    <h2 class="mzb-heading-text">。那是静态保存的 HTML（不是动态块），
 *    停用插件不会丢内容，但会丢它注入的那份 inline CSS ⇒ 标题塌成默认样式。
 *    这一段就是接住它的。插件还开着时同特异性，必须完整重置。
 * ------------------------------------------------------------- */
.wal-content .mzb-heading { margin: 1.9em 0 .5em; padding-top: .5em; border-top: 1px solid var(--wal-rule); }
.wal-content .mzb-heading .mzb-heading-inner { margin: 0; }
.wal-content .mzb-heading .mzb-heading-text {
  font-family: var(--wal-disp); font-weight: 400; color: var(--wal-ink);
  letter-spacing: -.005em; line-height: 1.16; margin: 0;
  background: transparent; padding: 0; border: 0; border-radius: 0; display: block;
  text-shadow: none; box-shadow: none;
}
.wal-content .mzb-heading, .wal-content .mzb-heading .mzb-heading-inner { background: transparent; border-left: 0; border-right: 0; border-bottom: 0; padding-left: 0; padding-right: 0; box-shadow: none; }
.wal-content .mzb-heading h2.mzb-heading-text { font-size: clamp(25px, 2.5vw, 34px); }
.wal-content .mzb-heading h3.mzb-heading-text { font-family: var(--wal-body); font-weight: 600; font-size: 20px; letter-spacing: 0; line-height: 1.4; }
.wal-content .mzb-heading:has(h3) { border-top: 0; padding-top: 0; margin-top: 1.7em; }
.wal-content .mzb-heading .mzb-heading-text strong { font-weight: inherit; }
/* ColorMag 调色盘残留（正文里 12 处）—— 换主题后那个 class 无处可解，给它一个纸色 */
.has-cm-color-2-background-color { background-color: var(--wal-tint); }

/* ── 价目表 = 报纸表格 ──────────────────────────────────────
 * 表头墨底纸字（深色的第二处小面积）· 行间点线 · 金额 Plex Mono 右对齐。
 * 🔴 表头选择器必须同时认 `thead td` —— 实测 148 篇里 161 张表，一个 <th> 都没有。
 *    只写 `table th` 等于把这套皮发到了零个页面上，而页面看起来只是「朴素了点」。
 * 🔴 「最后一栏右对齐」的判据是**那一栏的内容**（PHP 逐表读 tbody，≥60% 像金额才加
 *    `wal-num-last`），不是它排在最后 —— 位置是代理量，内容是地面真值。 */
.wal-content .wp-block-table { margin: 1.7em 0; max-width: var(--wal-measure); }
.wal-content .wp-block-table > table, .wal-content > table { display: block; overflow-x: auto; }
.wal-content table {
  width: 100%; border-collapse: collapse; background: var(--wal-paper-hi);
  border: 2px solid var(--wal-ink); border-radius: 8px;
  font-family: var(--wal-mono); font-size: 14px; line-height: 1.6; font-variant-numeric: tabular-nums;
  overflow: hidden;
}
.wal-content table :is(thead th, thead td) {
  background: var(--wal-ink); color: var(--wal-paper);
  font-family: var(--wal-mono); font-size: 10.5px; font-weight: 500; letter-spacing: .13em;
  text-transform: uppercase; text-align: left; padding: 12px 15px; white-space: nowrap;
  border-bottom: 0;
}
.wal-content table td { padding: 12px 15px; border-bottom: 1px dotted var(--wal-rule); vertical-align: top; }
.wal-content table tr:last-child td { border-bottom: 0; }
.wal-content table.wal-num-last :is(th, td):last-child { text-align: right; }
.wal-content table :is(th, td):only-child { text-align: left; }
.wal-content .wp-block-table.is-style-stripes tbody tr:nth-child(odd) { background: rgba(138, 122, 102, .07); }
.wal-content .wp-block-table figcaption { font-family: var(--wal-mono); }

/* ── Rank Math 的 TOC / FAQ block —— 只给皮，不改它的 class 结构 ── */
.wal-content .wp-block-rank-math-toc-block {
  background: var(--wal-paper-hi); border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
  padding: 18px 20px 20px; margin: clamp(24px, 3vw, 36px) 0; max-width: var(--wal-measure);
}
.wal-content .wp-block-rank-math-toc-block h2,
.wal-content .wp-block-rank-math-toc-block h3 {
  font-family: var(--wal-mono); font-size: 10.5px; font-weight: 600; letter-spacing: .18em;
  text-transform: uppercase; color: var(--wal-red-t); margin: 0 0 12px; border: 0; padding: 0; line-height: 1;
}
.wal-content .wp-block-rank-math-toc-block ul,
.wal-content .wp-block-rank-math-toc-block ol { margin: 0; padding-left: 20px; font-size: 16px; line-height: 1.75; }
@media (min-width: 620px) { .wal-content .wp-block-rank-math-toc-block ol { columns: 2; column-gap: 32px; } }
.wal-content .wp-block-rank-math-toc-block li { margin: 0 0 .2em; }
.wal-content .wp-block-rank-math-toc-block li::marker { font-family: var(--wal-mono); color: var(--wal-grey-t); font-size: 13px; }
.wal-content .wp-block-rank-math-toc-block a { color: var(--wal-ink); text-decoration: none; }
.wal-content .wp-block-rank-math-toc-block a:hover { color: var(--wal-red-t); text-decoration: underline; }

.wal-content .wp-block-rank-math-faq-block { margin: clamp(30px, 3.6vw, 48px) 0 0; max-width: var(--wal-measure); }
.wal-content .rank-math-list-item { border-bottom: 1px solid var(--wal-rule); padding: 4px 0 14px; margin: 0; }
.wal-content .rank-math-question {
  font-family: var(--wal-body); font-weight: 600; font-size: 18px; line-height: 1.4;
  color: var(--wal-ink); margin: 14px 0 .3em; letter-spacing: 0;
}
.wal-content .rank-math-answer { font-size: 16.5px; color: var(--wal-grey-t); }
.wal-content .rank-math-answer p:last-child { margin-bottom: 0; }

/* ── 右栏（≥1024px）：戳 + On this page ── */
.wal-rail2 { display: none; position: sticky; top: 84px; padding-top: 4px; }
@media (min-width: 1024px) { .wal-rail2 { display: block; } }
.wal-rail2__who {
  display: block; font-family: var(--wal-mono); font-size: 10.5px; font-weight: 500;
  letter-spacing: .16em; text-transform: uppercase; color: var(--wal-grey-t);
  border-top: 3px double var(--wal-ink); padding-top: 10px;
}
.wal-rail2__stamp { margin-top: 16px; }
.wal-rail2__src { margin: 14px 0 0; font-size: 12.5px; line-height: 1.5; color: var(--wal-grey-t); }
.wal-toc2 { margin-top: 22px; padding-top: 16px; border-top: 1px solid var(--wal-rule); }
.wal-toc2:empty { display: none; }             /* JS 没跑 ⇒ 不留空壳标题 */
.wal-toc2 b { display: block; font-family: var(--wal-mono); font-size: 10px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--wal-grey-t); margin-bottom: 11px; }
.wal-toc2 a {
  display: block; padding: 6px 0 6px 12px; border-left: 2px solid var(--wal-rule);
  font-size: 13.5px; line-height: 1.35; color: var(--wal-grey-t); text-decoration: none;
  transition: border-color .2s var(--wal-ease), color .2s var(--wal-ease);
}
.wal-toc2 a:hover { color: var(--wal-ink); }
.wal-toc2 a.is-cur { color: var(--wal-red-t); border-left-color: var(--wal-red); font-weight: 500; }

/* ── 同格其它文章 ── */
.wal-related { border-top: 3px double var(--wal-ink); padding: clamp(28px, 3.6vw, 48px) var(--wal-pad) clamp(34px, 4vw, 56px); }
.wal-related__in { width: var(--wal-shell); margin: 0 auto; }
.wal-related h2 { font-family: var(--wal-disp); font-weight: 400; margin: 0; font-size: clamp(22px, 2.3vw, 30px); }
.wal-related__sub { margin: 7px 0 0; color: var(--wal-grey-t); font-size: 14.5px; }
.wal-cards3 { margin-top: clamp(20px, 2.6vw, 30px); display: grid; gap: 16px; grid-template-columns: 1fr; }
@media (min-width: 700px) { .wal-cards3 { grid-template-columns: repeat(3, 1fr); } }
.wal-card3 {
  border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
  padding: 16px 17px 18px; background: var(--wal-paper-hi); text-decoration: none; display: block; color: var(--wal-ink);
  transition: transform .22s var(--wal-ease);
}
.wal-card3:hover { transform: translateY(-2px); }
.wal-card3 em { font-style: normal; font-family: var(--wal-mono); font-size: 10px; font-weight: 500; letter-spacing: .15em; text-transform: uppercase; color: var(--wal-red-t); }
.wal-card3 b { display: block; margin-top: 10px; font-weight: 400; font-size: 17.5px; line-height: 1.34; }
.wal-card3 time { display: block; margin-top: 12px; font-family: var(--wal-mono); font-size: 11.5px; color: var(--wal-grey-t); font-variant-numeric: tabular-nums; }

/* =============================================================
 * 分类页 —— 栏目头 + 场景图 + 该格全部文章（纸底）
 * ============================================================= */

.wal-main--cat { padding: 0 var(--wal-pad); }
/* 面包屑在版头**之上** —— 它是「你在哪」，放在大标题下面读起来是倒的 */
.wal-catcrumbs { width: var(--wal-shell); margin: 0 auto; padding-top: clamp(16px, 2.4vw, 28px); }
.wal-catcrumbs .wal-crumbs { margin: 0; }
.wal-cathead { width: var(--wal-shell); margin: 0 auto; padding: clamp(14px, 2vw, 22px) 0 clamp(16px, 2.2vw, 26px); }
.wal-cathead__in {
  display: grid; gap: clamp(20px, 3vw, 40px); grid-template-columns: 1fr; align-items: center;
}
@media (min-width: 900px) { .wal-cathead__in { grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); } }
.wal-cathead__col { min-width: 0; }
.wal-cathead .wal-colhead { display: inline-flex; margin-bottom: 16px; }
.wal-cathead h1 {
  font-family: var(--wal-disp); font-weight: 400; margin: 0;
  font-size: clamp(34px, 4.4vw, 62px); line-height: 1.04; letter-spacing: -.01em; color: var(--wal-ink);
}
.wal-lang-zh .wal-cathead h1 { line-height: 1.2; }
.wal-cathead h1 i {
  font-style: normal; display: block; margin-top: 12px;
  font-family: var(--wal-mono); font-size: 12px; letter-spacing: .1em; line-height: 1.5; color: var(--wal-grey-t);
  text-transform: none;
}
.wal-cathead .wal-dek { margin: 16px 0 0; max-width: 48ch; color: var(--wal-grey-t); font-size: clamp(15px, 1.2vw, 17px); line-height: 1.6; }
.wal-cathead .wal-meta { margin-top: 14px; }

.wal-catbody { width: var(--wal-shell); margin: 0 auto; padding: clamp(14px, 2vw, 24px) 0 clamp(40px, 5vw, 72px); }
.wal-catlist { margin: 0; padding: 0; list-style: none; border-top: 3px double var(--wal-ink); max-width: 900px; }
.wal-catlist a {
  display: flex; justify-content: space-between; align-items: baseline; gap: 18px;
  padding: 14px 0; border-bottom: 1px solid var(--wal-rule);
  text-decoration: none; color: var(--wal-ink); font-size: 17px; line-height: 1.4;
  transition: transform .2s var(--wal-ease), color .2s var(--wal-ease);
}
.wal-catlist a:hover { transform: translateX(3px); color: var(--wal-red-t); }
.wal-catlist time { flex: none; font-family: var(--wal-mono); font-size: 12px; color: var(--wal-grey-t); font-variant-numeric: tabular-nums; }

/* =============================================================
 * 存档 / 搜索 / 作者 / 404
 * ============================================================= */

.wal-main--list { width: var(--wal-shell); margin: 0 auto; padding: clamp(22px, 3vw, 44px) var(--wal-pad) clamp(40px, 5vw, 72px); }
.wal-archive-head { margin: 0 0 22px; padding: 0 0 14px; border-bottom: 3px double var(--wal-ink); }
.wal-archive-head h1 { margin: 0 0 6px !important; }
.wal-archive-desc { font-size: 15px; color: var(--wal-grey-t); margin: 0; max-width: 60ch; }

.wal-cards { display: block; margin: 0; max-width: 860px; }
.wal-card { border-bottom: 1px solid var(--wal-rule); padding: 16px 0; margin: 0; }
.wal-card__title { margin: 0 0 6px !important; }
.wal-card__title, .wal-card__title a {
  font-family: var(--wal-disp); font-weight: 400; font-size: 1.4rem; line-height: 1.22;
  letter-spacing: -.005em; color: var(--wal-ink); text-decoration: none;
}
.wal-card__title a:hover { color: var(--wal-red-t); text-decoration: underline; text-underline-offset: 4px; }
.wal-card__excerpt { font-size: 15px; color: var(--wal-grey-t); margin: 0 0 10px; line-height: 1.6; max-width: 62ch; }
.wal-card__excerpt .wp-block-post-excerpt__more-link { display: none; }
.wal-card__meta { margin: 0; }
.wal-card__meta .wal-stamp { transform: none; }
.wal-card__meta .wal-stamp::after { display: none; }

.wal-pagination { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 26px 0 0; font-family: var(--wal-mono); font-size: 13px; }
.wal-pagination a, .wal-pagination .page-numbers { color: var(--wal-grey-t); text-decoration: none; border: 1.5px solid var(--wal-rule); border-radius: 5px; padding: 6px 11px; background: var(--wal-paper-hi); }
.wal-pagination .current { background: var(--wal-ink); color: var(--wal-paper); border-color: var(--wal-ink); }
.wal-pagination a:hover { border-color: var(--wal-ink); color: var(--wal-ink); }

.wal-notice { padding: clamp(32px, 5vw, 64px) 0 24px; }
.wal-notice h1, .wal-notice h2 { margin: 0 0 12px !important; }
.wal-notice p { font-size: 16px; color: var(--wal-grey-t); max-width: 52ch; margin: 0 0 18px; }
.wal-notice__back { font-family: var(--wal-mono); font-size: 13px; color: var(--wal-red-t); text-decoration: none; border-bottom: 1px solid currentColor; }
.wal-search { max-width: 420px; margin: 0 0 18px; }

/* =============================================================
 * 作者框
 * ============================================================= */

.wal-author {
  display: flex; gap: 14px; align-items: flex-start; max-width: var(--wal-measure);
  background: var(--wal-paper-hi); border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
  padding: 16px 18px; margin: clamp(28px, 3.4vw, 44px) 0 0;
}
.wal-author--archive { margin: 0 0 24px; }
.wal-author__avatar { flex: none; }
.wal-author__img { border-radius: 50%; display: block; width: 56px; height: 56px; object-fit: cover; border: 2px solid var(--wal-ink); }
.wal-author__monogram {
  width: 56px; height: 56px; border-radius: 50%; background: var(--wal-red); color: var(--wal-paper);
  display: grid; place-items: center; font-family: var(--wal-disp); font-size: 26px; line-height: 1;
}
.wal-author__body { min-width: 0; }
.wal-author__eyebrow { font-family: var(--wal-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--wal-grey-t); margin: 0 0 5px; font-weight: 500; }
.wal-author__name { font-family: var(--wal-disp); font-weight: 400; font-size: 21px; margin: 0 0 5px; }
.wal-author__name a { color: var(--wal-ink); text-decoration: none; }
.wal-author__name a:hover { color: var(--wal-red-t); text-decoration: underline; }
.wal-author__bio { font-size: 14.5px; color: var(--wal-grey-t); margin: 0; line-height: 1.6; }

/* =============================================================
 * 正文里的自订组件（pattern 插入用）
 * 🚫 跟内容里的 .wal-correction / .wal-updated / .wal-disclaimer 无关 ——
 *    那三个自带 inline style，主题一个字都不提。
 * ============================================================= */

.wal-gloss {
  background: var(--wal-paper-hi); border: 2px solid var(--wal-ink); border-radius: var(--wal-radius);
  box-shadow: 3px 3px 0 rgba(36, 31, 27, .13);
  padding: 14px 16px; margin: 1.6em 0; max-width: var(--wal-measure);
}
.wal-gloss__t { font-family: var(--wal-mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--wal-red-t); margin: 0 0 8px; font-weight: 600; }
.wal-gloss__row { display: flex; gap: 10px; font-size: 15px; padding: 3px 0; margin: 0; }
.wal-gloss__row dt { font-style: italic; font-weight: 600; flex: none; min-width: 100px; }
.wal-gloss__row dd { margin: 0; color: var(--wal-grey-t); }

.wal-steps { counter-reset: walstep; margin: 1.6em 0; padding: 0; list-style: none; max-width: var(--wal-measure); }
.wal-steps > li { counter-increment: walstep; position: relative; padding: 16px 0 16px 46px; border-top: 1px solid var(--wal-rule); margin: 0; font-size: 16.5px; }
.wal-steps > li::before {
  content: counter(walstep, decimal-leading-zero); position: absolute; left: 0; top: 18px;
  font-family: var(--wal-mono); font-size: 13px; font-weight: 600; color: var(--wal-red-t);
}
.wal-steps > li > strong { display: block; font-weight: 600; }
.wal-steps > li > em { font-style: normal; color: var(--wal-grey-t); font-size: 14.5px; }

.wal-price tr.is-best td { background: rgba(196, 64, 43, .08); }
.wal-price .wal-tag { font-family: var(--wal-mono); font-size: 10px; background: var(--wal-red); color: var(--wal-paper); padding: 1px 5px; border-radius: 3px; margin-left: 6px; font-weight: 600; }
.wal-price .is-penalty { color: var(--wal-red-t); }

/* =============================================================
 * 动效关掉 —— 是关，不是减速。
 * v4 本来就没有任何「等 JS 来显示」的元素，所以关掉之后内容一个字都不会少。
 * ============================================================= */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation: none !important; transition: none !important; scroll-behavior: auto !important;
  }
  html { scroll-behavior: auto; }
}

/* =============================================================
 * 手机（390 基准）
 * ============================================================= */

@media (max-width: 700px) {
  .wal-masthead { padding-top: 12px; padding-bottom: 10px; margin-bottom: 14px; }
  .wal-masthead__line { font-size: 10px; letter-spacing: .1em; gap: 3px 10px; margin-top: 10px; }
  .wal-masthead__line > span + span::before { margin-right: 7px; }
  .wal-hero__say { padding-top: 14px; gap: 12px; }

  /* 🔴 390 的 H1：去掉 ch 上限 + 行高放到 1.08。
   * `22ch` 在 390 换算成 504px，比栏宽 358px 还大 ⇒ **英文这条根本没生效**，
   * 四行是字号造成的，不是宽度。而中文那条 `20ch` = 324px **比栏宽窄 34px**，
   * 白白少了一行的容量 —— 同一个 `ch` 单位在两种语言下是两件完全不同的事（取舍 #22b）。
   * 栏宽本身就是上限，手机上不需要第二个。行高 1.08 是给 Abril 的降部留余量（1.04 会啃到 g/y/J）。 */
  .wal-title, .wal-lang-zh .wal-title { max-width: none; line-height: 1.08; }
  /* 中文单独放回 1.22：毛笔体的竖笔画比拉丁高，1.08 会啃到上下。
   * 实测这不花任何代价 —— 最长的中文标题在 1.08 和 1.22 下**都是 3 行**
   * （中文换行不看单词边界，行高不改变每行能放几个字）。 */
  .wal-lang-zh .wal-title, .wal-lang-zh .wal-cathead h1 { line-height: 1.22; }
  .wal-cathead h1 { max-width: none; }
  .wal-mega { font-size: clamp(32px, 9.4vw, 44px); }
  .wal-lang-zh .wal-mega { font-size: clamp(30px, 8.8vw, 42px); }

  /* 六格在手机上：图与栏目头并排（一格省下约 90px，六格就是 540px）。
   * 三篇仍然全在 —— 为了凑「≤5 屏」去砍掉 spec 要的内容，是拿指标换产品。
   * 能压的是留白与图高，不能压的是那三条链接。 */
  .wal-field { gap: 9px; display: grid; grid-template-columns: 132px minmax(0, 1fr); align-items: start; column-gap: 12px; }
  .wal-field > .wal-win { grid-row: span 2; }
  .wal-field > .wal-colhead { align-self: start; }
  .wal-field__blurb { margin: 0; font-size: 11px; line-height: 1.45; }
  .wal-field > .wal-topics, .wal-field > .wal-meta { grid-column: 1 / -1; }
  .wal-win--tile > img { aspect-ratio: 4 / 3; }
  .wal-colhead { padding: 6px 11px 7px; }
  .wal-colhead b { font-size: 17px; }
  .wal-lang-zh .wal-colhead b { font-size: 19px; }
  .wal-topics a { padding: 9px 0; font-size: 14.5px; }
  .wal-fields__grid { gap: 20px; }

  /* 更正启事：注解在手机上会拖出四五行 */
  .wal-changed__sub, .wal-latest__sub { font-size: 14px; line-height: 1.55; }
  .wal-log__row { grid-template-columns: 1fr; padding: 11px 0; }
  .wal-log__n { font-size: 13.5px; line-height: 1.5; }
  .wal-log__tag { justify-self: start; margin-top: 5px; }

  .wal-ledger__p { font-size: 14.5px; line-height: 1.55; }
  .wal-foot__cell { padding: 12px 12px 13px; }
  .wal-foot__cell b { font-size: 17px; }
  .wal-foot__bot { margin-top: 20px; gap: 10px 18px; }
  .wal-foot__bot .wal-foot__ph:last-child { margin-left: 0; }
  .wal-brand { font-size: 17px; }
  .wal-bar__in { gap: 10px; }
}


/* =============================================================
 * 办事流程画报 —— 图里一个字都没有，标签叠在量出来的空白牌子上
 *
 * 牌子的 x/y/w/h 是 `scripts/riso/gazette.py` 用连通域量出来的**百分比**，
 * 由 PHP 写进 inline style。这里只负责「把字塞进那个框里还能读」。
 *
 * 🔑 字号跟的是**图自己的宽度**（container query），不是视口宽度 ——
 *    这张图在文章栏约 700px、在手机约 350px，而牌子占的百分比不变，
 *    所以只有 cqw 能让「字和牌子」始终等比。用 vw 的话手机上字会溢出牌子。
 * 🔴 牌子里不画任何背景/边框：那两样已经**印在图里**了，
 *    再叠一层就会和印刷的轮廓错开一两个像素，看起来像套印失败。
 * ============================================================= */

.wal-gazette {
  position: relative;
  container-type: inline-size;
}
/* 2.4:1 横幅带（2026-09-08 指挥官裁定，取代 16:9）。
 * 写在这里是**刻意压过** .wal-win--wide 的 16/9 —— 那个类给的是窗框样式，比例由画报自己定。 */
.wal-gazette > img { aspect-ratio: 12 / 5; }

.wal-gazette__label {
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 0.6cqw;
  overflow: hidden;
  color: var(--wal-ink);                 /* 牌子是裸纸或淡朱红，墨字 CR ≥ 4.1 */
  font-family: var(--wal-disp-en);
  /* 1.75cqw：文章栏 659px 时 = 11.5px，最长标签 "Pos Malaysia" 实测占 66/76px。
   * 上一档 2.0cqw 三个标签**全部换行溢出**（牌子只有 25px 高）—— 这个数是量出来的不是估的。 */
  font-size: clamp(8px, 1.75cqw, 17px);
  line-height: 1.06;
  text-align: center;
  text-wrap: balance;
  pointer-events: none;                  /* 图上是装饰位，别挡住选中图片 */
}
.wal-gazette__label > span { display: block; max-width: 100%; }

/* 中文标签 ≤8 字，牌子里放得下更大的字；毛笔的字面也比拉丁小一圈 */
.wal-lang-zh .wal-gazette__label {
  font-size: clamp(9px, 2.3cqw, 24px);
  letter-spacing: .02em;
}

/* 窄屏：牌子只剩约 37px 宽 —— 再小的字也塞不下 12 个字符。
 * 实测（1440→390 逐档量的，不是估的）：480px 视口还撑得住（图 416px，字 8px，45/48 刚好），
 * 到 390 就**三个标签全部换行被裁**（字宽 35 / 牌宽 37，两行高过牌子）。
 *
 * 所以窄屏不叠字，让**同一批 <span>** 落回图下面排成一行图注：
 * position 改 static 之后行内的 left/top 自然失效，width/height 用 !important 盖掉那两个百分比。
 * 🔑 关键好处是**不复制第二份文字** —— 图注和牌子标签是同一批 DOM 节点，
 *    读屏不会听两遍，也不会出现「改了一处忘了另一处」。 */
@media (max-width: 520px) {
  .wal-gazette { display: flex; flex-wrap: wrap; gap: 8px 0; padding-bottom: 10px; }
  .wal-gazette > img { flex: 0 0 100%; margin-bottom: 2px; }
  .wal-gazette__label {
    position: static;
    width: auto !important;
    height: auto !important;
    flex: 1 1 0;
    min-width: 0;
    margin: 0 6px;
    padding: 5px 0 0;
    border-top: 2px solid var(--wal-red);
    align-items: flex-start;
    font-size: 12px;
    line-height: 1.2;
  }
  .wal-lang-zh .wal-gazette__label { font-size: 13px; }
}

/* ==== 首页 ④b 最新核实 · 取舍见 README #30 ==== */
.wal-latest{width:var(--wal-shell);margin:clamp(38px,5vw,70px) auto 0}
.wal-latest__in{border-top:3px double var(--wal-ink);padding-top:clamp(18px,2.4vw,28px)}
.wal-latest__in>.wal-colhead{display:inline-flex;margin:0}
.wal-latest__grid{list-style:none;margin:0;padding:0;display:grid;
grid-template-columns:repeat(auto-fit,minmax(min(400px,100%),1fr));column-gap:clamp(24px,3vw,44px)}
#wal-latest .wal-log__row{grid-template-columns:minmax(0,1fr) auto;gap:3px 14px}
#wal-latest .wal-log__d{order:0;grid-column:1/-1}
@media (max-width:480px){
#wal-latest .wal-log__d{display:none}
#wal-latest .wal-log__row{padding:8px 0}
#wal-latest .wal-log__t{font-size:15px;line-height:1.3}
#wal-latest .wal-log__tag{font-size:9px;padding:3px 6px}
#wal-latest .wal-latest__sub{margin:10px 0 12px}}
