/* ═══════════════════════════════════════════════════════════════════════════
   Case F — the evidence reader: documents, not memory

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

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

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

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

/* 栅格子项一律允许收缩，否则长路径/长引文会把整行顶宽（标准 §8：禁止用
   overflow-x:hidden 掩盖溢出，那就得从源头允许收缩）。 */
.f-panel-summary,.f-rows,.f-meeting,.f-arm,.f-resolution,.f-res-block,.f-recall,
.f-grid-head,.f-grid-row,.f-grid-models,.f-grid-cells,.f-honesty{min-width:0;}
.f-panel-summary > div,.f-arm > span,.f-grid-head > span,.f-grid-row > span,
.f-evidence .ev-line > *{min-width:0;}

/* ── 01 时间轨 ────────────────────────────────────────────────────────────
   列数不写在这里：case.css 的 .rail 读 `--steps`，HTML 里写了 --steps:4。 */
.f-rail .rail-step p{max-width:34ch;}
.f-rail-note{margin-top:20px;border-top:1px solid var(--rule);}
.f-rail-note em{font-style:italic;}

/* ── 02 证据（两条节选，规格照 case-g.css） ─────────────────────────────── */
.f-evidence .ev-line{grid-template-columns:138px minmax(0,1fr);}
.f-evidence .ev-kind{grid-row:1 / span 3;}
.f-evidence .ev-line:has(.f-cpi) .ev-kind{grid-row:1 / span 4;}
.f-evidence-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);}
.f-evidence-meta a{display:inline-flex;align-items:center;gap:7px;color:inherit;text-decoration:none;border-bottom:1px solid var(--rule);}
.f-evidence-meta a:hover{color:var(--case-accent);border-bottom-color:var(--case-accent);}
/* 外链前的主题图标。规格逐字照 case-c.css 的 .c-source-ico —— C 的 meta 也是
   8px 字号，17px / 1.35 描边就是那一档的既定比例；case-e.css 的 21px / 1.25 是
   配它自己 7px 字号的，别混用。图形本身也不新画：央行声明用 case-e.css 那枚
   立柱建筑，CPI 存档用 E 那枚方框百分号（E 的第二条链接就是同一种来源）。 */
.f-source-ico{width:17px;height:17px;flex:0 0 auto;fill:none;stroke:currentColor;
  stroke-width:1.35;stroke-linecap:square;stroke-linejoin:miter;}
.f-quote{max-width:88ch;font-size:14px;font-weight:300;line-height:1.75;}
.f-evidence .f-quote{grid-column:2;grid-row:2;padding:0 26px;}
.f-evidence .ev-line > p{grid-column:2;grid-row:3;padding:22px 26px;}
.f-evidence .ev-line:has(.f-cpi) > p{grid-row:4;}

/* CPI 图：画的是**引文里点名的三个数字**，不是新数据源。
   条长 = |月变化| ÷ 1.0，1.0 是刻度上限（引文最大值 0.8 之上留一档）。
   两个方向从同一条中线往两边长，所以「涨 0.5 / 跌 0.4 / 跌 0.8」的关系是
   几何可读的，不靠标签解释。 */
.f-cpi{grid-column:2;grid-row:3;margin:22px 26px 0;padding:16px 0 0;border-top:1px solid var(--hair);}
.f-cpi > span{display:block;margin-bottom:16px;font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.f-cpi-rows{display:grid;gap:9px;}
.f-cpi-rows > div{display:grid;grid-template-columns:minmax(66px,88px) minmax(0,1fr) minmax(52px,64px);
  align-items:center;gap:16px;}
.f-cpi-rows b{font-size:8.5px;letter-spacing:.08em;color:var(--fill);}
.f-cpi-rows small{font-family:var(--font-display);font-size:13px;letter-spacing:0;
  font-variant-numeric:tabular-nums;text-align:right;color:var(--fill);}
.f-cpi-rows .is-hot b,.f-cpi-rows .is-hot small{color:var(--case-accent);}
/* 中线在容器正中；涨的往右长，跌的往左长。 */
.f-cpi-bar{position:relative;height:16px;border-left:1px solid var(--hair);}
.f-cpi-bar::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--rule);}
.f-cpi-bar i{position:absolute;top:3px;bottom:3px;width:calc(var(--m) / 1 * 50%);background:var(--fill);}
.f-cpi-bar.is-up i{left:50%;}
.f-cpi-bar.is-down i{right:50%;}
.f-cpi-rows .is-hot .f-cpi-bar i{background:var(--case-accent);}
.f-cpi-note{margin-top:14px;max-width:76ch;font-size:10.5px;font-weight:300;line-height:1.6;color:var(--fill);}

.f-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);}
.f-redaction span{letter-spacing:.35em;color:var(--case-accent);}

/* ── 03 面板（规格照 case-g.css 的 panel-summary / legend） ──────────────── */
.f-panel-summary{display:grid;grid-template-columns:minmax(0,1fr) 118px minmax(0,1fr);
  border:1px solid var(--edge);background:var(--paper);}
.f-panel-summary > div{min-height:150px;padding:24px 28px;}
.f-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;}
.f-panel-summary span{font-size:8px;line-height:1.3;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.f-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;}
.f-panel-summary p{align-self:start;max-width:28ch;font-size:11px;font-weight:300;line-height:1.5;color:var(--fill);}
.f-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);}
.f-panel-summary .is-arrow span{font-family:var(--font-display);font-size:32px;font-weight:200;color:var(--case-accent);}
.f-panel-summary .is-arrow b{font-size:7px;line-height:1.5;letter-spacing:.12em;text-transform:uppercase;}
.f-panel-summary .is-packed strong{color:var(--case-accent);}

.f-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);}
.f-legend > span{display:inline-flex;align-items:center;gap:9px;}
.f-key{flex:none;width:10px;height:10px;border:1px solid var(--fill);background:var(--paper);}
.f-key.is-packed{border-color:var(--case-accent);background:var(--case-accent);}
.f-key.is-coin{width:1px;height:15px;border:0;background:var(--on);}
.f-legend-note{text-transform:none;letter-spacing:.02em;font-size:10.5px;color:var(--fill);}

/* 九场 × 两臂。列宽在 .f-rows 上声明一次，表头与所有臂共用同一套列 ——
   于是「表头对不上数据列」这件事在结构上不可能发生。 */
.f-rows{--f-cols:minmax(128px,.9fr) minmax(92px,.62fr) minmax(180px,1.6fr) minmax(112px,.8fr);
  border:1px solid var(--edge);background:var(--paper);}
.f-rows-head{display:grid;grid-template-columns:var(--f-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);}
.f-rows-head > span{padding:0 20px;border-right:1px solid var(--hair);}
.f-rows-head > span:last-child{border-right:0;}
.f-meeting{border-bottom:1px solid var(--rule);}
.f-meeting:last-child{border-bottom:0;}
.f-meeting-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 14px;padding:16px 20px 10px;}
.f-meeting-head b{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;}
.f-meeting-head small{font-size:7px;letter-spacing:.14em;text-transform:uppercase;color:var(--fill);}
.f-meeting.is-cut .f-meeting-head small{color:var(--case-accent);}
.f-gain{margin-left:auto;font-size:7.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--fill);
  font-variant-numeric:tabular-nums;}

.f-arm{display:grid;grid-template-columns:var(--f-cols);align-items:center;min-height:46px;}
.f-arm.is-bare{border-top:1px solid var(--hair);}
.f-arm > span{padding:8px 20px;}
.f-arm-label{font-size:8px;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.f-arm.is-packed .f-arm-label{color:var(--case-accent);}
.f-arm-p{display:flex;align-items:baseline;gap:8px;}
.f-arm-p b{font-family:var(--font-display);font-size:17px;font-weight:300;font-variant-numeric:tabular-nums;}
.f-arm-p small{font-size:7px;letter-spacing:.1em;text-transform:uppercase;color:var(--fill);}
/* 误差条。长度 = Brier ÷ 0.45，由生成器写进 --err。掷硬币线画在同一个盒子的
   0.25/0.45 处，所以「哪几行比掷硬币还差」是同一套几何算出来的，不是标注的。 */
.f-bar{position:relative;display:block;height:14px;background:color-mix(in srgb,var(--on) 4%,transparent);}
.f-bar::after{content:"";position:absolute;left:calc(0.25 / 0.45 * 100%);top:-3px;bottom:-3px;width:1px;
  background:var(--on);}
.f-bar i{position:absolute;left:0;top:0;bottom:0;width:var(--err);background:var(--fill);}
.f-arm.is-packed .f-bar i{background:var(--case-accent);}
.f-arm-err{display:flex;flex-direction:column;gap:4px;}
.f-arm-err b{font-family:var(--font-display);font-size:15px;font-weight:300;font-variant-numeric:tabular-nums;}
.f-arm.is-packed .f-arm-err b{color:var(--case-accent);}
.is-overcoin{font-size:7px;letter-spacing:.1em;text-transform:uppercase;color:var(--fill);}

/* ── 04 三张解释卡的图（外框走共享 hard-grid / hard-copy / hard-visual） ── */
.f-rare-grid article{display:flex;flex-direction:column;}
.f-hard-visual{margin-top:auto;}
.f-arms-mark,.f-demoted{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);}
.f-arms-mark > i{flex:1;height:0;border-top:1px solid var(--fill);}
.f-arms-mark b{flex:none;font-size:8px;letter-spacing:.1em;}
.f-arms-mark .is-packed{color:var(--case-accent);}
.f-demoted{justify-content:space-between;}
.f-demoted s{text-decoration-thickness:1px;}
.f-demoted b{font-size:8px;letter-spacing:.12em;color:var(--case-accent);}
.f-mini-grid{display:grid;grid-template-columns:repeat(6,10px);gap:5px 6px;align-content:center;
  min-height:56px;padding:10px 14px;background:color-mix(in srgb,var(--on) 3%,transparent);}
.f-mini-grid i{width:10px;height:10px;border:1px solid var(--fill);}
.f-mini-grid i.is-unparsed{border-style:dashed;opacity:.55;}
.f-mini-grid b{grid-column:1/-1;margin-top:4px;font-size:8px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--case-accent);white-space:nowrap;}

/* ── 05 结算：按逐字决议句分组，五组 ─────────────────────────────────────── */
/* ⚠️ minmax 的最小值必须能收缩：写成 minmax(310px,1fr) 时，320px 视口下
   可用宽只有 280px，栅格仍按 310px 排 → 实测右侧溢出 10px。
   min(310px,100%) 让它在窄屏退到 100%，这是把溢出**从源头修掉**，
   不是用 overflow-x:hidden 盖住（标准 §3 明令禁止那种做法）。 */
.f-resolution{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(310px,100%),1fr));gap:20px;}
.f-res-block{display:flex;flex-direction:column;padding:26px 28px;border:1px solid var(--edge);background:var(--paper);}
.f-res-block.is-cut{border-color:var(--case-accent);
  background:color-mix(in srgb,var(--case-accent) 5%,var(--paper));}
.f-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);}
.f-res-head p{font-size:8px;line-height:1.5;letter-spacing:.13em;text-transform:uppercase;color:var(--fill);}
.f-res-head strong{font-family:var(--font-display);font-size:15px;font-weight:300;
  letter-spacing:var(--disp-tracking-md);white-space:nowrap;}
.f-res-block.is-cut .f-res-head strong{color:var(--case-accent);}
.f-res-block .f-quote{max-width:none;font-size:12.5px;line-height:1.7;}
.f-res-links{display:grid;gap:1px;margin-top:auto;padding-top:20px;}
.f-res-links li{background:var(--paper);border:1px solid var(--hair);}
.f-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;}
.f-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 高的按钮右下角几乎看不见。 */
.f-res-when{display:inline-flex;align-items:center;gap:7px;min-width:0;}
.f-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。 */
.f-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，与 .f-source-ico 实际的 0.96px 同一档，
      不会出现「按钮里的箭头粗、行内的箭头发虚」。 */
.f-evidence-meta .f-out-ico{width:11px;height:11px;stroke-width:2.182;}
.f-res-foot{margin-top:20px;border-top:1px solid var(--rule);}

/* ── 诚实层 ───────────────────────────────────────────────────────────────
   ⚠️ 这一节**不用** C / E / G / H 那套四张等重的 safeguards 卡（F 原来也是）。
      2026-08-18 按设计意见重排了主次：四张等重卡片会把「138/138」抬到和
      「T−14」「1337468」一样的分量，读者要么把 138/138 当成准确率，
      要么被三个内部符号挡住；而这一页最该被记住的 0.077 对 0.207
      在这一节里干脆没出现。现在分三层：
        .f-verdict      两个主结论，大号（数字规格照 .f-panel-summary）
        .f-credentials  两条次级凭证，小号（规格照原 safeguards 的说明文字）
        .f-recall       矩阵降为证明材料，并加图例说明两种格子
      如果 G / H 以后也这么排，把这三块提到 case.css 再说，现在只有 F 这样。 */

/* 主结论。数字规格逐字照 .f-panel-summary strong，不另发明一套；
   /138 用的是 case.css 里 .tile-val sup 的既定写法（hero 的 9/9 就是它）。 */
.f-verdict{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  border:1px solid var(--rule);background:var(--paper);}
.f-verdict-card{min-width:0;padding:30px 28px 32px;border-right:1px solid var(--hair);}
.f-verdict-card:last-child{border-right:0;}
.f-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，
   不是 .f-panel-summary 的 clamp(54px,6vw,78px)。理由是量出来的：
   右边那格要放「0.077 → 0.207」十三个字符，78px 下实测把卡片撑满、
   0.207 几乎贴到右边框。而 hero 的 readout 里这两个数本来就是 .tile-val 这一档，
   读者在页首已经见过同一套字号，这里沿用最自然，也不用另发明第三套。 */
.f-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);}
.f-verdict-card strong sup{font-size:.4em;letter-spacing:0;margin-left:3px;vertical-align:baseline;
  color:var(--fill);}
/* 「0.077 → 0.207」：两个数一个箭头，箭头与「之后」那个数退回中性色 ——
   这一页的语言一直是「实心强调色 = 带证据，空心/中性 = 抽掉证据」。 */
.f-verdict-pair{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 .32em;}
.f-verdict-pair em{font-style:normal;}
/* 箭头单独居中：容器是 baseline 对齐，而 → 这个字形的基线在很低的位置，
   跟着基线走就会挂在数字脚下。align-self:center 只影响它自己。 */
.f-verdict-pair i{align-self:center;font-size:.6em;font-style:normal;color:var(--fill);}
.f-verdict-pair .is-bare{color:var(--text);}
/* 一句大白话结论，规格照 case.css 的 .hard-grid h3（本页「小标题」那一档）。 */
.f-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);}
.f-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 逐字一致。 */
.f-credentials{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;
  margin-top:20px;background:var(--hair);border:1px solid var(--rule);}
.f-credentials > div{min-width:0;padding:20px 24px 22px;background:var(--paper);}
.f-credentials span{display:block;font-size:8px;line-height:1.3;letter-spacing:.15em;
  text-transform:uppercase;color:var(--case-accent);}
.f-credentials p{max-width:52ch;margin-top:12px;font-size:11.5px;font-weight:300;line-height:1.65;color:var(--fill);}
.f-credentials code{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.02em;color:var(--text);}

/* 162 格 recall 网格：9 行 × 9 家族分组 × 2 遍。
   表头的 9 列与格子的 9 组同构，对齐是结构保证的，不靠居中巧合。
   ⚠️ unparseable 的 24 格必须**长得不一样**（虚线空格），因为「没答」不等于
      「答了不知道」—— 写成 162/162 就是虚高，v2 §0 给 case-01 定的口径
      就是只数可解析格。 */
.f-recall{margin-top:20px;padding:24px 26px 22px;border:1px solid var(--rule);background:var(--paper);}
.f-recall 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);}
/* ⚠️ 这里**故意不是**强调色（G 的 .g-recall figcaption b 是）。
   这一节重排后强调色只留给两个主结论的数字；矩阵已经降为证明材料，
   再给它一个强调色的大数字，就又回到「138/138 像准确率」那个问题上了。 */
.f-recall figcaption b{color:var(--fill);}
/* 图例。两种格子必须能自己解释：实线带短横 = 有有效回答（内容是 unknown），
   虚线空格 = 根本没有有效回答。格子的边框/底色/短横规格与网格里的**逐字一致**，
   否则图例和实物对不上就等于没有图例。
   外框排布规格照 §03 的 .f-legend，不另发明。 */
.f-recall-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);}
.f-recall-legend > span{display:inline-flex;align-items:center;gap:9px;}
.f-key-cell{flex:none;display:grid;place-items:center;width:38px;height:15px;
  border:1px solid color-mix(in srgb,var(--on) 22%,transparent);
  background:color-mix(in srgb,var(--on) 4%,transparent);}
.f-key-cell.is-unparsed{border-style:dashed;background:transparent;
  border-color:color-mix(in srgb,var(--on) 16%,transparent);}
.f-key-cell em{font-style:normal;font-family:var(--font-mono);font-size:9px;line-height:1;color:var(--fill);}
.f-grid-head,.f-grid-row{display:grid;grid-template-columns:minmax(78px,116px) minmax(0,1fr);
  align-items:center;gap:14px;}
.f-grid-head{padding:16px 0 10px;}
.f-grid-models{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:8px;
  font-size:6.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--fill);}
.f-grid-models span{text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.f-grid-row{min-height:28px;}
.f-grid-row > b{font-size:8.5px;letter-spacing:.08em;color:var(--fill);white-space:nowrap;}
.f-grid-cells{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:8px;}
.f-grid-fam{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;}
.f-grid-cells i{display:grid;place-items:center;height:15px;
  border:1px solid color-mix(in srgb,var(--on) 22%,transparent);
  background:color-mix(in srgb,var(--on) 4%,transparent);}
.f-grid-cells i.is-unparsed{border-style:dashed;background:transparent;
  border-color:color-mix(in srgb,var(--on) 16%,transparent);}
.f-grid-cells em{font-style:normal;font-family:var(--font-mono);font-size:9px;line-height:1;color:var(--fill);}
.f-recall-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);}

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

/* ── 断点。阈值是量出来的：
      1180 是四列 safeguards 与九场四列表开始挤的点，
      980  是 panel-summary 三栏放不下的点，
      820  是两臂表必须改成「两行」的点，
      720  是证据栏与网格表头必须收起的点。 ────────────────────────────── */
@media (max-width:1180px){
  .f-rows{--f-cols:minmax(112px,.85fr) minmax(84px,.6fr) minmax(140px,1.4fr) minmax(100px,.72fr);}
  .f-rows-head > span,.f-arm > span{padding-left:14px;padding-right:14px;}
  .f-meeting-head{padding-left:14px;padding-right:14px;}
  .f-grid-models{gap:5px;}
  .f-grid-cells{gap:5px;}
}

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

@media (max-width:820px){
  /* 两臂表换成「标签+概率一行，条+误差一行」；表头在窄屏没有意义，收起来，
     改用每格自己的前缀标签。 */
  .f-rows-head{display:none;}
  .f-arm{grid-template-columns:minmax(0,1fr) minmax(0,1fr);row-gap:0;}
  .f-arm-label{grid-column:1;grid-row:1;}
  .f-arm-p{grid-column:2;grid-row:1;justify-content:flex-end;}
  .f-arm-bar{grid-column:1 / span 2;grid-row:2;padding-top:0;}
  .f-arm-err{grid-column:1 / span 2;grid-row:3;flex-direction:row;align-items:baseline;gap:10px;padding-top:0;}
  .f-grid-head{display:none;}
  .f-grid-row{grid-template-columns:minmax(70px,96px) minmax(0,1fr);gap:10px;}
  .f-grid-cells{gap:4px;}
  .f-grid-fam{gap:3px;}
  .f-grid-cells i{height:13px;}
  .f-grid-cells em{font-size:8px;}
}

@media (max-width:720px){
  .f-evidence .ev-line,.f-evidence .ev-line:has(.f-cpi){grid-template-columns:1fr;}
  .f-evidence .ev-kind,.f-evidence .ev-line:has(.f-cpi) .ev-kind,
  .f-evidence-meta,.f-evidence .f-quote,.f-cpi,
  .f-evidence .ev-line > p,.f-evidence .ev-line:has(.f-cpi) > p{grid-column:1;grid-row:auto;}
  .f-evidence-meta{flex-direction:column;gap:5px;padding:16px 20px 10px;}
  .f-evidence .f-quote{padding:0 20px;}
  .f-cpi{margin:20px 20px 0;}
  .f-evidence .ev-line > p{padding:20px;}
  .f-verdict,.f-credentials{grid-template-columns:1fr;}
  .f-verdict-card{border-right:0;border-bottom:1px solid var(--hair);}
  .f-verdict-card:last-child{border-bottom:0;}
  .f-recall{padding:20px 18px;}
  .f-cpi-rows > div{grid-template-columns:minmax(60px,74px) minmax(0,1fr) minmax(46px,56px);gap:10px;}
}

@media (max-width:430px){
  .f-arm{grid-template-columns:1fr;}
  .f-arm-label,.f-arm-p,.f-arm-bar,.f-arm-err{grid-column:1;}
  .f-arm-p{grid-row:2;justify-content:flex-start;}
  .f-arm-bar{grid-row:3;}
  .f-arm-err{grid-row:4;}
  .f-grid-cells{grid-template-columns:repeat(9,minmax(0,1fr));gap:3px;}
  .f-grid-fam{gap:2px;}
}
