/* ═══════════════════════════════════════════════════════════════════════════
   Case H — the referee: disagreement is the signal

   按 CASE_PAGE_STANDARDS.md §3 的边界：这个文件**只装 H 独有的数据图表、
   内容结构和必要的响应式覆盖**。共享的排版、节奏、滚动条、动效语言、
   hard-* 解释卡、calib-* 校准装置、honesty-* 诚实框、audit-* 审计区
   全部留在 case.css，页面上以「共享基类 + h- 前缀修饰类」并列接入。

   ⚠️ 与 C / F / G 同名的 per-case 构件（panel-summary / safeguards / redaction /
      legend / res-* / quote），取值**逐字照抄 case-g.css / case-f.css**，
      不另发明第三套。2026-08-17 就是在这上面翻过车：同一个构件写出第三套数值，
      并排看就是走样。见记忆 feedback-reuse-locked-styles。

   ⚠️ 与 F / G 不同的一点：`.ev-line` 的两列栅格不在这里重复声明 ——
      case.css 里 `.ev-line` 已经是 `138px minmax(0,1fr)`，
      case-f.css / case-g.css 各抄了一份，那是标准 §3 明说不要做的事。
      这里只写**真正的差异**：H 的证据栏有四行内容（meta / 引文 / 流程图 / 正文），
      所以只覆盖 `.ev-kind` 的跨行数与各子块的落位。

   ⚠️ 所有图表的位置与长度都由数据驱动的 CSS 变量算出（--from / --to），
      变量由 tools/gen-case-h.py 从 fed_case_rows.csv 直接算好写进 style 属性。
      没有一个「猜出来的」像素值，换字号/字体/语言都不影响对位。
   ═════════════════════════════════════════════════════════════════════════ */

/* 与 case-c.css / case-f.css / case-g.css 对齐的既定规格，不许另发明 */
.caseh{--hero-art-w:clamp(260px,32vw,500px);}
.caseh .case-hero h1{max-width:none;font-size:clamp(34px,3.9vw,56px);}
.caseh .block-head h2{max-width:none;}
.caseh .calib-copy h2{margin-top:18px;}

/* 栅格子项一律允许收缩，否则长行 id / 长引文会把整行顶宽（标准 §3：禁止用
   overflow-x:hidden 掩盖溢出，那就得从源头允许收缩）。 */
.h-panel-summary,.h-rows,.h-row,.h-resolution,.h-res-block,.h-xd,.h-xd-rows,.h-xd-row,
.h-boundary,.h-seats,.h-honesty,.h-worked,.h-flow-lane{min-width:0;}
.h-panel-summary > div,.h-row > span,.h-xd-row > span,.h-seat,
.h-protocol .ev-line > *{min-width:0;}

/* ── 01 时间轨 ────────────────────────────────────────────────────────────
   列数不写在这里：case.css 的 .rail 读 `--steps`，HTML 里写了 --steps:4。 */
.h-rail .rail-step p{max-width:34ch;}
/* ⚠️ H 的第三格里有一条很长的文件路径（docs/findings/13082026_memory_audit_judge_stage.md）。
   窄屏下 `.rail` 的列是 1fr = minmax(auto,1fr)，min-content 由这个不可断的
   token 决定 —— 实测 430px 起整页右溢出 45px。C / F / G 的时间轨里没有长路径，
   所以这条只在 H 需要。让路径本身可断是从源头修，不是用 overflow-x:hidden 盖住。 */
.h-rail .rail-step code{overflow-wrap:anywhere;}
.h-rail-note{margin-top:20px;border-top:1px solid var(--rule);}

/* ── 02 协议（这一页没有证据包节选，只有「裁判看到什么」） ────────────────
   四行内容：meta / 逐字描述 / 流程图 / 正文。规格照 case-g.css 的证据栏。 */
.h-protocol .ev-kind{grid-row:1 / span 4;}
.h-protocol-meta{grid-column:2;grid-row:1;display:flex;justify-content:space-between;gap:24px;
  padding:18px 26px 12px;font-size:8px;line-height:1.4;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
.h-quote{max-width:88ch;font-size:14px;font-weight:300;line-height:1.75;}
.h-protocol .h-quote{grid-column:2;grid-row:2;padding:0 26px;}
.h-protocol .ev-line > p{grid-row:4;padding:22px 26px 22px;}

/* 流程图。画的是**上面那句话本身**：座位读包 → 分歧 → 裁判拿到同一个包
   加匿名读数 → 重新定价。三个节点两根箭头，箭头用 flex 自己伸缩，
   所以换字号/换语言都不会错位；线宽与角标是同一个 ::after 画的。
   ⚠️ 图上不出现阈值、不出现裁判数量 —— 那正是这一页刻意不发布的三件事。 */
.h-flow{grid-column:2;grid-row:3;margin:22px 26px 0;padding:16px 0 0;border-top:1px solid var(--hair);}
.h-flow > span{display:block;margin-bottom:16px;font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.h-flow-lane{display:flex;align-items:stretch;}
.h-flow-node{flex:1 1 0;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:6px;
  min-height:64px;padding:12px 14px;border:1px solid var(--hair);
  background:color-mix(in srgb,var(--on) 3%,transparent);}
.h-flow-node b{font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--text);}
.h-flow-node small{font-size:7.5px;line-height:1.45;letter-spacing:.08em;text-transform:uppercase;color:var(--fill);}
.h-flow-node.is-hot{border-color:var(--case-accent);background:color-mix(in srgb,var(--case-accent) 7%,transparent);}
.h-flow-node.is-hot b{color:var(--case-accent);}
.h-flow-arrow{flex:0 1 52px;position:relative;min-width:24px;font-style:normal;
  display:flex;align-items:center;justify-content:center;}
/* 带标签的那根箭头要更宽：实测 em 标签本身 44.5px，52px 的槽里几乎把线和
   箭头角挤没了。108px 让标签两侧各留三十来 px 的线，箭头方向才读得出来。 */
.h-flow-arrow:has(em){flex:0 1 108px;min-width:60px;}
.h-flow-arrow::before{content:"";position:absolute;left:0;right:0;top:50%;height:0;border-top:1px solid var(--fill);}
.h-flow-arrow::after{content:"";position:absolute;right:0;top:50%;width:5px;height:5px;
  border-top:1px solid var(--fill);border-right:1px solid var(--fill);
  transform:translate(1px,-50%) rotate(45deg);}
.h-flow-arrow em{position:relative;padding:0 4px;background:var(--paper);
  font-size:6.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--case-accent);}

/* 规格与 .g-redaction / .f-redaction 逐字一致，一个属性都没多加。 */
.h-redaction{display:flex;align-items:center;gap:12px;margin-top:12px;
  font-size:8px;line-height:1.4;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
.h-redaction span{letter-spacing:.35em;color:var(--case-accent);}

/* ── 03 面板（规格照 case-g.css 的 panel-summary / legend） ──────────────── */
.h-panel-summary{display:grid;grid-template-columns:minmax(0,1fr) 118px minmax(0,1fr);
  border:1px solid var(--edge);background:var(--paper);}
.h-panel-summary > div{min-height:150px;padding:24px 28px;}
.h-panel-summary > div:not(.is-arrow){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto 1fr;align-items:end;gap:8px 24px;}
.h-panel-summary span{font-size:8px;line-height:1.3;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-panel-summary strong{grid-column:2;grid-row:1/3;font-family:var(--font-display);
  font-size:clamp(54px,6vw,78px);font-weight:220;line-height:.9;
  letter-spacing:var(--disp-tracking-md);font-variant-numeric:tabular-nums;}
.h-panel-summary p{align-self:start;max-width:28ch;font-size:11px;font-weight:300;line-height:1.5;color:var(--fill);}
.h-panel-summary .is-arrow{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  border-left:1px solid var(--rule);border-right:1px solid var(--rule);text-align:center;color:var(--fill);}
.h-panel-summary .is-arrow span{font-family:var(--font-display);font-size:32px;font-weight:200;color:var(--case-accent);}
.h-panel-summary .is-arrow b{font-size:7px;line-height:1.5;letter-spacing:.12em;text-transform:uppercase;}
.h-panel-summary .is-judged strong{color:var(--case-accent);}

.h-legend{display:flex;flex-wrap:wrap;align-items:center;gap:10px 26px;margin:30px 0 12px;
  font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
.h-legend > span{display:inline-flex;align-items:center;gap:9px;}
.h-key{flex:none;width:10px;height:10px;border:1px solid var(--fill);background:var(--paper);}
.h-key.is-judged{border-color:var(--case-accent);background:var(--case-accent);}
.h-legend-note{text-transform:none;letter-spacing:.02em;font-size:10.5px;color:var(--fill);}

/* 九行表。列宽在 .h-rows 上声明一次，表头与所有行共用同一套列 ——
   于是「表头对不上数据列」这件事在结构上不可能发生（照 case-f.css 的做法）。
   列宽取值照 case-g.css 的五列表，不另发明。 */
.h-rows{--h-cols:minmax(150px,.9fr) minmax(180px,1.5fr) minmax(96px,.62fr) minmax(96px,.62fr) minmax(112px,.72fr);
  border:1px solid var(--edge);background:var(--paper);}
.h-rows-head{display:grid;grid-template-columns:var(--h-cols);align-items:center;min-height:42px;
  border-bottom:1px solid var(--rule);font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.h-rows-head > span{padding:0 20px;border-right:1px solid var(--hair);}
.h-rows-head > span:last-child{border-right:0;}
.h-row{display:grid;grid-template-columns:var(--h-cols);align-items:stretch;
  border-bottom:1px solid var(--hair);}
.h-row:last-child{border-bottom:0;}
.h-row > span{display:flex;flex-direction:column;justify-content:center;gap:6px;
  padding:18px 20px;border-right:1px solid var(--hair);}
.h-row > span:last-child{border-right:0;}
.h-cell-meeting b{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;}
.h-cell-meeting small{font-size:7px;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-row.is-cut .h-cell-meeting small{color:var(--case-accent);}

/* 移动轨。0 → 0.70 的误差刻度，--from = 面板、--to = 裁判之后。
   线段用 min()/max() 撑开，所以「哪边更靠左」不需要生成器预先排序，
   往哪个方向走都画得对。左右各留 12px，落在两端的标记不会被裁掉
   （点宽 11px，半宽 5.5 < 12）。 */
.h-cell-move{justify-content:center;}
.h-move{position:relative;height:26px;margin:0 12px;}
.h-move::before{content:"";position:absolute;left:0;right:0;top:50%;height:0;border-top:1px solid var(--hair);}
.h-move-span{position:absolute;left:min(var(--from),var(--to));
  width:calc(max(var(--from),var(--to)) - min(var(--from),var(--to)));
  top:50%;height:0;border-top:2px solid var(--case-accent);transform:translateY(-50%);}
.h-dot{position:absolute;top:50%;width:11px;height:11px;transform:translate(-50%,-50%);}
.h-dot.is-panel{left:var(--from);border:1px solid var(--fill);background:var(--paper);}
.h-dot.is-judged{left:var(--to);border:1px solid var(--case-accent);background:var(--case-accent);
  box-shadow:0 0 10px color-mix(in srgb,var(--case-accent) 50%,transparent);}

.h-cell-num b{font-family:var(--font-display);font-size:21px;font-weight:300;
  font-variant-numeric:tabular-nums;line-height:1;}
.h-cell-num small{font-size:8.5px;letter-spacing:.06em;color:var(--fill);font-variant-numeric:tabular-nums;}
.h-cell-num.is-judged b{color:var(--case-accent);}
.h-cell-verdict b{font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--case-accent);}
.h-cell-verdict small{font-size:9px;letter-spacing:.04em;color:var(--fill);font-variant-numeric:tabular-nums;}
/* 没动的那一行：不是输，是「按设计放过了」。所以右端标记退回空心，
   判定与数字都退回中性色，一个字都不用改就读得出来。 */
.h-row.is-tie .h-dot.is-judged{border-color:var(--fill);background:var(--paper);box-shadow:none;}
.h-row.is-tie .h-cell-num.is-judged b{color:var(--text);}
.h-row.is-tie .h-cell-verdict b{color:var(--fill);}
/* 下面有专门的 worked example 卡，这一行做同色系的淡底，读者能对上。
   ⚠️ 先按 .g-res-block.is-change / .f-res-block.is-cut 的 5% 写，实测在
      .sec-dark 里几乎看不出来（那两处是在浅底上用的），所以这里抬到 8%。
      不用「单边彩色竖条」——case-g.css 里明确写了故意不走那套。 */
.h-row.is-worked{background:color-mix(in srgb,var(--case-accent) 8%,transparent);}

/* worked example 卡 */
.h-worked{margin-top:20px;border:1px solid var(--case-accent);
  background:color-mix(in srgb,var(--case-accent) 5%,var(--paper));}
.h-worked-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px 20px;
  padding:16px 26px;border-bottom:1px solid var(--hair);}
.h-worked-head p{font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-worked-head strong{font-family:var(--font-mono);font-size:11px;font-weight:400;letter-spacing:.08em;color:var(--case-accent);}
.h-worked-body{padding:22px 26px 24px;}
.h-worked-body > p{margin-top:20px;max-width:88ch;font-size:12.5px;font-weight:300;line-height:1.7;color:var(--text-2);}
.h-worked-body > .h-worked-source{margin-top:18px;padding-top:16px;max-width:none;
  border-top:1px solid var(--hair);font-size:12px;font-style:italic;color:var(--text);}
.h-worked-source > span{display:block;margin-bottom:8px;font-size:8px;font-style:normal;
  letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-worked-source a{display:inline-flex;align-items:center;gap:8px;margin-left:10px;
  font-size:9.5px;font-style:normal;letter-spacing:.08em;color:var(--text);text-decoration:none;
  border-bottom:1px solid var(--case-accent);padding-bottom:3px;}

/* 三条「数字 → 数字」的横条（worked example / 跨域小结 / 边界展品）
   共用同一套规格 —— 它们在页面上是同一种读法，不该长成三个样。 */
/* ⚠️ align-items 是 center 而不是 flex-end：三个横条里每一栏都是
   「小标签 + 大数字 + 小注」同一套结构、等高，所以居中与底对齐的结果一样，
   但中间那根箭头（只有一行）会被底对齐压到大数字下面 15px 处（实测）。
   居中让它自己落在数字的中线上，不用任何偏移量。 */
.h-worked-move,.h-xd-summary,.h-boundary-scores{display:flex;flex-wrap:wrap;align-items:center;gap:14px 24px;}
.h-worked-move > div,.h-xd-summary > div,.h-boundary-scores > div{display:flex;flex-direction:column;gap:5px;min-width:0;}
.h-worked-move span,.h-xd-summary span,.h-boundary-scores span{font-size:8px;line-height:1.3;
  letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-worked-move b,.h-xd-summary b,.h-boundary-scores b{font-family:var(--font-display);
  font-size:clamp(26px,2.6vw,34px);font-weight:250;line-height:1;
  letter-spacing:var(--disp-tracking-md);font-variant-numeric:tabular-nums;}
.h-worked-move small,.h-xd-summary small,.h-boundary-scores small{font-size:8.5px;letter-spacing:.06em;
  color:var(--fill);font-variant-numeric:tabular-nums;}
.h-worked-move > i,.h-xd-summary > i,.h-boundary-scores > i{font-family:var(--font-display);
  font-size:26px;font-style:normal;color:var(--case-accent);}
.h-worked-move .is-judged b,.h-xd-summary .is-judged b{color:var(--case-accent);}
.h-worked-move .is-out,.h-xd-summary .is-note,.h-boundary-scores .is-out{margin-left:auto;
  padding-left:22px;border-left:1px solid var(--hair);}
.h-worked-move .is-out b,.h-xd-summary .is-note b,.h-boundary-scores .is-out b{font-family:var(--font-mono);
  font-size:14px;font-weight:400;letter-spacing:.09em;}
.h-xd-summary .is-note b{color:var(--fill);}

/* ── 04 三张解释卡的图（外框走共享 hard-grid / hard-copy / hard-visual） ── */
.h-rare-grid article{display:flex;flex-direction:column;}
.h-hard-visual{margin-top:auto;}
.h-trigger,.h-null,.h-sign{display:flex;align-items:center;gap:12px;min-height:56px;padding:0 14px;
  background:color-mix(in srgb,var(--on) 3%,transparent);
  font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--fill);}
.h-trigger > i{flex:1;height:0;border-top:1px solid var(--fill);}
.h-trigger b{flex:none;font-size:8px;letter-spacing:.1em;}
.h-trigger .is-hot{color:var(--case-accent);}
.h-null{justify-content:space-between;}
.h-null b{font-family:var(--font-display);font-size:15px;font-weight:300;letter-spacing:0;
  text-transform:none;font-variant-numeric:tabular-nums;}
.h-null > i{font-family:var(--font-display);font-size:16px;font-style:normal;color:var(--case-accent);}
.h-null small{font-size:8px;letter-spacing:.12em;}
.h-sign{flex-wrap:wrap;justify-content:space-between;gap:6px 16px;padding:10px 14px;
  font-size:8px;letter-spacing:.12em;}
.h-sign .is-hot{color:var(--case-accent);}

/* ── 05 结算：按逐字决议句分组，五组（规格照 case-f.css）─────────────────
   ⚠️ minmax 的最小值必须能收缩：写成 minmax(310px,1fr) 时 320px 视口下
      可用宽只有 280px，栅格仍按 310px 排 → 右侧溢出。min(310px,100%)
      让它在窄屏退到 100%，这是把溢出从源头修掉。 */
.h-resolution{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(310px,100%),1fr));gap:20px;}
.h-res-block{display:flex;flex-direction:column;padding:26px 28px;border:1px solid var(--edge);background:var(--paper);}
.h-res-block.is-cut{border-color:var(--case-accent);
  background:color-mix(in srgb,var(--case-accent) 5%,var(--paper));}
.h-res-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
  padding-bottom:16px;margin-bottom:18px;border-bottom:1px solid var(--hair);}
.h-res-head p{font-size:8px;line-height:1.5;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.h-res-head strong{font-family:var(--font-display);font-size:15px;font-weight:300;
  letter-spacing:var(--disp-tracking-md);white-space:nowrap;}
.h-res-block.is-cut .h-res-head strong{color:var(--case-accent);}
.h-res-block .h-quote{max-width:none;font-size:12.5px;line-height:1.7;}
.h-res-links{display:grid;gap:1px;margin-top:auto;padding-top:20px;}
.h-res-links li{background:var(--paper);border:1px solid var(--hair);}
.h-res-links a{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:11px 14px;font-size:9.5px;letter-spacing:.06em;color:var(--text);text-decoration:none;}
.h-res-links a:hover{color:var(--case-accent);background:color-mix(in srgb,var(--case-accent) 7%,transparent);}
/* 结算链接是按钮式外链：日期前放一枚文档图标，↗ 放大。
   · 图形不新画 —— 就是 §02 ev-kind 里那枚「官方声明」文档（同一个意思用同一枚图形）。
   · 15px / 1.35 描边与本页 §02 的来源图标同一档；与文字 7px 间距也与那里一致。
   · ↗ 的 14px 也不是拍的：case.css 的 .audit-request-btn 就是「9px 标签 + 14px 箭头」，
     这里标签 9.5px，沿用同一档。原来 ↗ 跟着标签只有 9.5px，实测字形盒宽 6.3px，
     落在 38px 高的按钮右下角几乎看不见。 */
.h-res-when{display:inline-flex;align-items:center;gap:7px;min-width:0;}
.h-res-ico{width:15px;height:15px;flex:0 0 auto;fill:none;stroke:currentColor;
  stroke-width:1.35;stroke-linecap:square;stroke-linejoin:miter;}
/* ↗ 从字体字形换成描边图形。原来用的是 Unicode &#8599;，它是**字体里的字**：
   头部是实心三角、线重跟着字重走，跟本页所有图标（fill:none + 1px 描边 +
   square 端头 + miter 拐角）根本不是一套语言，并排就看得出是外来物。
   现在这枚是同一套画法：一根 45° 轴 + 一个直角头，端头 square、拐角 miter。 */
.h-out-ico{flex:none;width:14px;height:14px;fill:none;stroke:currentColor;
  stroke-width:1.714;stroke-linecap:square;stroke-linejoin:miter;}
/* 行内位置（§02 来源行、§05 底部来源、worked example / 边界展品）用小一号。
   ⚠️ stroke-width 是按「最终线重 1 CSS px」反算的，不是随手填的：
      viewBox 24 ÷ 盒宽，14px → 24/14 = 1.714，11px → 24/11 = 2.182。
      两处都落在 1px，与 .h-source-ico 实际的 0.96px 同一档，
      不会出现「按钮里的箭头粗、行内的箭头发虚」。 */
.h-worked-source .h-out-ico,.h-boundary-source .h-out-ico{width:11px;height:11px;stroke-width:2.182;}
.h-res-foot{margin-top:20px;border-top:1px solid var(--rule);}

/* ── 诚实层 ─────────────────────────────────────────────────────────────── */
/* ⚠️ 这一节**不用**四张等重的 safeguards 卡（C / E 还是那样，H 原来也是）。
   2026-08-18 按设计意见重排，规格与 case-f.css 的 .f-verdict / .f-credentials
   **逐字一致**，只换前缀 —— 三页并排必须是同一套字号。
   ⚠️ 主结论的 46px 同时解决了这一页最要紧的一个矛盾：本节标题写着
      「最弱的那个数不是我们领先讲的那个」，但重排前脆弱的跨域那对数实测 34px，
      是这一节里最大的数字。46px > 34px 之后主次才和文案一致。 */
/* 主结论。数字规格逐字照 .h-panel-summary strong，不另发明一套；
   /138 用的是 case.css 里 .tile-val sup 的既定写法（hero 的 9/9 就是它）。 */
.h-verdict{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  border:1px solid var(--rule);background:var(--paper);}
.h-verdict-card{min-width:0;padding:30px 28px 32px;border-right:1px solid var(--hair);}
.h-verdict-card:last-child{border-right:0;}
.h-verdict-card > span{display:block;max-width:44ch;
  font-size:8px;line-height:1.4;letter-spacing:.15em;text-transform:uppercase;color:var(--fill);}
/* ⚠️ 数字用的是 case.css 里 .tile-val 那一档 clamp(30px,3.1vw,46px) / 250，
   不是 .h-panel-summary 的 clamp(54px,6vw,78px)。理由是量出来的：
   右边那格要放「p = 0.004」十三个字符，78px 下实测把卡片撑满、
   0.207 几乎贴到右边框。而 hero 的 readout 里这两个数本来就是 .tile-val 这一档，
   读者在页首已经见过同一套字号，这里沿用最自然，也不用另发明第三套。 */
.h-verdict-card strong{display:block;margin-top:22px;font-family:var(--font-display);
  font-size:clamp(30px,3.1vw,46px);font-weight:250;line-height:1;
  letter-spacing:var(--disp-tracking-md);font-variant-numeric:tabular-nums;color:var(--case-accent);}
.h-verdict-card strong sup{font-size:.4em;letter-spacing:0;margin-left:3px;vertical-align:baseline;
  color:var(--fill);}
/* ⚠️ H 的第二主结论是一个 p 值，不是「数字 → 数字」那一对，
   所以 case-f.css / case-g.css 里的 .x-verdict-pair 那组规则在这里是死的，没抄过来。 */
/* 一句大白话结论，规格照 case.css 的 .hard-grid h3（本页「小标题」那一档）。 */
.h-verdict-card b{display:block;margin-top:20px;max-width:24ch;font-family:var(--font-display);
  font-size:17px;font-weight:350;letter-spacing:var(--disp-tracking-md);line-height:1.3;color:var(--text);}
.h-verdict-card p{max-width:44ch;margin-top:14px;font-size:11.5px;font-weight:300;line-height:1.65;color:var(--fill);}

/* 次级凭证：只有标签 + 一句人话，没有大数字 —— 它们是凭证，不是结论。
   说明文字的规格与原 safeguards 的 p 逐字一致。 */
.h-credentials{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;
  margin-top:20px;background:var(--hair);border:1px solid var(--rule);}
.h-credentials > div{min-width:0;padding:20px 24px 22px;background:var(--paper);}
.h-credentials span{display:block;font-size:8px;line-height:1.3;letter-spacing:.15em;
  text-transform:uppercase;color:var(--case-accent);}
.h-credentials p{max-width:52ch;margin-top:12px;font-size:11.5px;font-weight:300;line-height:1.65;color:var(--fill);}
.h-credentials code{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.02em;color:var(--text);}

/* 跨域争议七行：页面上最脆的那个数，连产生它的行一起摆出来。
   外框规格照 case-g.css 的 .g-recall（同一种「图 + 说明」盒子）。 */
.h-xd,.h-boundary{margin-top:20px;padding:24px 26px 22px;border:1px solid var(--rule);background:var(--paper);}
.h-xd figcaption,.h-boundary figcaption{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;
  gap:10px 20px;padding-bottom:18px;border-bottom:1px solid var(--hair);
  font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
/* ⚠️ 故意不是强调色（跟 case-f.css / case-g.css 的矩阵说明同一个理由）：
   这一节重排后强调色只留给两个主结论；跨域块是**脆弱的那个数**，
   给它一个强调色的角标等于把视觉重量又送回最不该被记住的地方。 */
.h-xd figcaption b,.h-boundary figcaption b{color:var(--fill);overflow-wrap:anywhere;text-transform:none;letter-spacing:.06em;}
.h-xd-summary{margin-top:20px;}
/* 跨域七行的图例。⚠️ 这里的编码对象是**整行的底纹**（变差的行铺极淡点阵），
   所以样本做成一小段行，点阵规格与 .h-xd-row.is-worse **逐字一致**，
   否则图例和实物对不上就等于没有图例。外框排布照 §03 的 .h-legend。 */
.h-xd-legend{display:flex;flex-wrap:wrap;align-items:center;gap:10px 26px;margin-top:16px;
  font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
.h-xd-legend > span{display:inline-flex;align-items:center;gap:9px;}
.h-key-row{flex:none;width:38px;height:15px;border:1px solid var(--hair);}
.h-key-row.is-worse{background-color:transparent;
  background-image:radial-gradient(circle at center,color-mix(in srgb,var(--on) 7%,transparent) 1px,transparent 1.2px);
  background-size:6px 6px;}

.h-xd-rows{--h-xd-cols:minmax(0,1.25fr) minmax(44px,.3fr) minmax(56px,.4fr) 24px minmax(56px,.4fr) minmax(58px,.44fr);
  margin-top:22px;border-top:1px solid var(--hair);}
.h-xd-row{display:grid;grid-template-columns:var(--h-xd-cols);align-items:center;gap:12px;
  min-height:36px;padding:8px 0;border-bottom:1px solid var(--hair);}
.h-xd-row:last-child{border-bottom:0;}
.h-xd-id{overflow-wrap:anywhere;font-size:9px;line-height:1.4;letter-spacing:.02em;color:var(--fill);}
.h-xd-out{font-size:7.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
.h-xd-num b{font-family:var(--font-display);font-size:15px;font-weight:300;
  line-height:1;font-variant-numeric:tabular-nums;}
.h-xd-num.is-judged b{color:var(--case-accent);}
.h-xd-arrow{font-size:12px;line-height:1;color:var(--fill);}
.h-xd-verdict{font-size:7.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--case-accent);}
/* 变差的三行整行铺一层极淡点阵 —— 不是变灰、不是划掉，只是标出来
   （与 .g-row.is-lost 同一套底纹，读者在两页之间学一次就够）。 */
.h-xd-row.is-worse{background-color:transparent;
  background-image:radial-gradient(circle at center,color-mix(in srgb,var(--on) 7%,transparent) 1px,transparent 1.2px);
  background-size:6px 6px;}
.h-xd-row.is-worse .h-xd-num.is-judged b{color:var(--text);}
.h-xd-row.is-worse .h-xd-verdict{color:var(--fill);}
.h-xd-note,.h-boundary-note{margin-top:20px;padding-top:16px;border-top:1px solid var(--hair);
  max-width:96ch;font-size:11.5px;font-weight:300;line-height:1.7;color:var(--fill);overflow-wrap:anywhere;}
.h-xd-note b{color:var(--case-accent);font-weight:inherit;}

.h-honesty{margin-top:20px;}

/* 边界展品：六个座位的读数 + 双双打错的两个分数。
   ⚠️ 这里只出现「面板中位数 / 裁判之后」两个数，不列裁判、不报裁判数量。 */
.h-boundary-rule{margin-top:20px;padding-left:16px;border-left:2px solid var(--case-accent);
  max-width:96ch;font-size:12px;font-weight:300;font-style:italic;line-height:1.7;color:var(--text-2);}
.h-boundary-rule > span{display:block;margin-bottom:8px;font-size:8px;font-style:normal;
  letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-boundary-seats{margin-top:24px;}
.h-boundary-seats > p{font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.h-seats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(118px,100%),1fr));gap:1px;
  margin-top:12px;background:var(--hair);border:1px solid var(--hair);}
.h-seat{display:flex;flex-direction:column;gap:6px;padding:13px 14px;background:var(--paper);}
.h-seat b{font-size:8px;letter-spacing:.12em;color:var(--fill);}
.h-seat-p{font-family:var(--font-display);font-size:19px;font-weight:300;line-height:1;
  font-variant-numeric:tabular-nums;}
.h-boundary-scores{margin-top:24px;padding-top:20px;border-top:1px solid var(--hair);}
.h-boundary-source{margin-top:16px;}
.h-boundary-source a{display:inline-flex;align-items:center;gap:8px;font-size:9.5px;letter-spacing:.08em;
  color:var(--text);text-decoration:none;border-bottom:1px solid var(--case-accent);padding-bottom:3px;}


/* ── 断点。阈值与 F / G 对齐（同一批构件、同一批挤压点）：
      1180 是四列 safeguards 与九行五列表开始挤的点，
      980  是 panel-summary 三栏放不下的点，
      820  是九行表必须改成「两行」、跨域六列必须改成流式的点，
      720  是证据栏、流程图与解释卡必须收成一列的点。 ──────────────────── */
@media (max-width:1180px){
  .h-rows{--h-cols:minmax(128px,.85fr) minmax(140px,1.3fr) minmax(84px,.6fr) minmax(84px,.6fr) minmax(96px,.68fr);}
  .h-rows-head > span,.h-row > span{padding-left:14px;padding-right:14px;}
}

@media (max-width:980px){
  .h-panel-summary{grid-template-columns:1fr;}
  .h-panel-summary > div{min-height:122px;}
  .h-panel-summary .is-arrow{min-height:64px;flex-direction:row;border:0;
    border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);}
}

@media (max-width:820px){
  /* 五列换成「两行 × 三列」：会议 + 两个数字一行，轨道 + 判定一行。
     表头在窄屏没有意义，收起来，改用每格自己的前缀标签。 */
  .h-rows-head{display:none;}
  .h-row{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) minmax(0,1fr);}
  .h-cell-meeting{grid-column:1;grid-row:1;}
  .h-cell-num.is-panel{grid-column:2;grid-row:1;}
  .h-cell-num.is-judged{grid-column:3;grid-row:1;border-right:0;}
  .h-cell-move{grid-column:1 / span 2;grid-row:2;border-top:1px solid var(--hair);border-right:1px solid var(--hair);}
  .h-cell-verdict{grid-column:3;grid-row:2;border-top:1px solid var(--hair);border-right:0;}
  .h-cell-num::before{font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);}
  .h-cell-num.is-panel::before{content:"PANEL";}
  .h-cell-num.is-judged::before{content:"AFTER REFEREE";}
  /* 六列的跨域表换成流式：行 id 独占一行，其余在第二行按内容排。 */
  .h-xd-row{display:flex;flex-wrap:wrap;align-items:center;gap:7px 14px;padding:11px 0;}
  .h-xd-id{flex:1 1 100%;}
  .h-xd-verdict{margin-left:auto;}
}

@media (max-width:720px){
  .h-protocol .ev-kind{grid-row:auto;}
  .h-protocol-meta,.h-protocol .h-quote,.h-flow,.h-protocol .ev-line > p{grid-column:1;grid-row:auto;}
  .h-protocol-meta{flex-direction:column;gap:5px;padding:16px 20px 10px;}
  .h-protocol .h-quote{padding:0 20px;}
  .h-flow{margin:20px 20px 0;}
  .h-protocol .ev-line > p{padding:20px;}
  /* 三节点一行在窄屏排不开，改成竖列；箭头连同箭头角一起转 90°。 */
  .h-flow-lane{flex-direction:column;}
  /* ⚠️ 竖排时 flex-basis 量的是**高度**，所以宽屏那条 `flex:0 1 108px`
     会把带标签的箭头拉成 108px 高，两段间距一眼就不齐。这里两根都归零重设。 */
  .h-flow-arrow,.h-flow-arrow:has(em){flex:none;min-width:0;min-height:30px;}
  .h-flow-arrow:has(em){min-height:40px;}
  .h-flow-arrow::before{left:50%;right:auto;top:0;bottom:0;width:0;height:auto;
    border-top:0;border-left:1px solid var(--fill);}
  .h-flow-arrow::after{left:50%;right:auto;top:auto;bottom:0;
    transform:translate(-50%,1px) rotate(135deg);}
  .h-verdict,.h-credentials{grid-template-columns:1fr;}
  .h-verdict-card{border-right:0;border-bottom:1px solid var(--hair);}
  .h-verdict-card:last-child{border-bottom:0;}
  .h-xd,.h-boundary{padding:20px 18px;}
  .h-rare-grid article{border-right:0;border-bottom:1px solid var(--hair);}
  .h-rare-grid article:last-child{border-bottom:0;}
  .h-worked-head,.h-worked-body{padding-left:20px;padding-right:20px;}
}

@media (max-width:520px){
  .h-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
  .h-cell-meeting{grid-column:1 / span 2;border-right:0;border-bottom:1px solid var(--hair);}
  .h-cell-num.is-panel{grid-column:1;grid-row:2;}
  .h-cell-num.is-judged{grid-column:2;grid-row:2;}
  .h-cell-move{grid-column:1 / span 2;grid-row:3;border-right:0;}
  .h-cell-verdict{grid-column:1 / span 2;grid-row:4;border-top:1px solid var(--hair);}
  .h-worked-move .is-out,.h-xd-summary .is-note,.h-boundary-scores .is-out{margin-left:0;
    padding-left:0;border-left:0;}
}

@media (prefers-reduced-motion:reduce){
  .h-dot.is-judged{box-shadow:none;}
}
