/* ============================================================================
 * 框架层样式（2026-10-17 按老板架构图重写）—— 与 `score.css` 分开，只服务 `score_dims.js`。
 * 规矩：只新增 `dq-`／`pub-`／`dim-`／`am-`／`qa-`／`ev-`／`details-` 前缀，不动线上旧 class。
 * 颜色一律走 `tokens.css` 的 var（浅色主题由 `html[data-theme="light"]` 自动切换）。
 * ==========================================================================*/
.dq-framework { display: block; }
.dq-head { border-left: 3px solid var(--purple); background: var(--purple-subtle);
  padding: 10px 12px; border-radius: 0 6px 6px 0; margin: 0 0 18px; }
.dq-eyebrow { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.dq-title { font-size: 17px; font-weight: 600; margin: 4px 0 6px; color: var(--text); }
.dq-note { font-size: 13px; line-height: 1.55; color: var(--muted); }

/* ── Publishing decision（架构图 Publishing decision.png）────────────────── */
.pub-block { border: 1px solid var(--border); border-radius: 12px;
  padding: 16px 18px 14px; margin: 0 0 18px; background: var(--panel); }
.pub-head { display: flex; align-items: center; gap: 10px; margin: 0 0 8px; }
.pub-eyebrow { font-size: 11px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--muted); font-weight: 600; }
.pub-status { font-size: 12px; font-weight: 600; border-radius: 999px; padding: 2px 10px; }
.pub-status.tone-ok { color: var(--green); background: color-mix(in srgb, var(--green) 14%, transparent); }
.pub-status.tone-warn { color: var(--gold); background: color-mix(in srgb, var(--gold) 16%, transparent); }
.pub-status.tone-bad { color: var(--red); background: color-mix(in srgb, var(--red) 14%, transparent); }
.pub-status.tone-none { color: var(--muted); background: var(--panel-2); }
.pub-conclusion { font-size: 17px; font-weight: 700; line-height: 1.35; color: var(--text);
  margin: 4px 0 12px; }
.pub-metrics { display: flex; gap: 28px; padding: 10px 0; border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border); margin: 0 0 12px; }
.pub-metric { display: flex; flex-direction: column; }
.pub-metric-label { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.pub-metric-val { font-size: 26px; font-weight: 700; color: var(--text); line-height: 1.1; }
.pub-metric-den { font-size: 11px; color: var(--muted); }
/* 🔴 2026-10-19（老板令 R2）顶上只留**一个**数：`N things to fix` */
.pub-count { font-size: 15px; font-weight: 700; color: var(--text); margin: 2px 0 10px; }
/* 🔴 2026-10-19（老板令 R1）「我们考核了什么、每条怎么影响发布状态」——折叠，与分类依据同款式 */
.pub-decides { margin: 0 0 12px; border-top: 1px solid var(--border); padding-top: 8px; }
.pub-decides > summary { cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--text); }
.pub-decides-in { margin-top: 6px; }
.pub-decides-note { font-size: 12px; color: var(--muted); line-height: 1.5; margin: 0 0 8px; }
.pub-decides-row { padding: 4px 0; border-top: 1px dashed var(--border); }
.pub-decides-row:first-of-type { border-top: 0; }
.pub-decides-line { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
.pub-decides-cat { font-size: 12.5px; font-weight: 600; color: var(--text); }
.pub-decides-tag { font-size: 11.5px; color: var(--muted); }
.pub-decides-tag.blk { color: var(--warn, #d69e2e); font-weight: 600; }
/* 🔴 2026-10-19（老板令 R3）「这一句在原文哪一段」 */
.pub-fix-where, .dim-where { font-size: 11.5px; color: var(--muted); margin: 2px 0 0;
  font-variant-numeric: tabular-nums; }
.pub-fix-head { font-size: 13px; font-weight: 700; color: var(--text); margin: 0 0 8px; }
.pub-fixes { margin: 0 0 14px; }
.pub-fix { padding: 8px 0; border-top: 1px solid var(--border); }
.pub-fix:first-child { border-top: 0; }
.pub-fix-line { display: flex; gap: 8px; align-items: baseline; }
.pub-fix-dot { flex: 0 0 auto; width: 8px; height: 8px; border-radius: 50%;
  background: var(--gold); margin-top: 2px; }
.pub-fix-title { font-weight: 600; color: var(--text); font-size: 13.5px; }
.pub-fix-how { font-size: 12.5px; color: var(--muted); line-height: 1.5; margin: 3px 0 0 16px; }
.pub-fix-tag { font-size: 11px; color: var(--muted); margin: 4px 0 0 16px; }
.pub-cta { display: inline-block; font-size: 13px; font-weight: 600; color: #fff;
  background: var(--text); border-radius: 8px; padding: 9px 16px; text-decoration: none; }
.pub-cta:hover { opacity: .88; }

/* ── 一个维度（架构图 2.1–2.3：结论式）────────────────────────────────── */
.dim-block { position: relative; border: 1px solid var(--border); border-radius: 12px;
  padding: 16px 18px 14px; margin: 0 0 16px; background: var(--panel); }
/* §1：dim-head 三件套删掉（标题跟折叠行重复）；结论句挪折叠行右边 */
.dim-para { margin: 12px 0 0; padding: 12px 14px; border-radius: 9px; }
.dim-para-title { font-size: 13px; font-weight: 700; margin: 0 0 8px; color: var(--text); }
.dim-solid { background: color-mix(in srgb, var(--green) 8%, transparent);
  border: 1px solid color-mix(in srgb, var(--green) 24%, transparent); }
.dim-improve { background: color-mix(in srgb, var(--red) 7%, transparent);
  border: 1px solid color-mix(in srgb, var(--red) 22%, transparent); }
.dim-row { padding: 8px 0; border-top: 1px solid var(--border); }
.dim-row:first-child { border-top: 0; }
.dim-line { display: flex; gap: 8px; align-items: baseline; }
.dim-check { flex: 0 0 auto; font-size: 13px; }
.dim-solid .dim-check { color: var(--green); }
.dim-improve .dim-check { color: var(--red); }
.dim-headline { font-weight: 600; color: var(--text); font-size: 13.5px; }
.dim-body { font-size: 12.5px; color: var(--muted); line-height: 1.55; margin: 4px 0 0 20px; }
.dim-ev { font-size: 12.5px; color: var(--muted); line-height: 1.5; margin: 5px 0 0 20px;
  font-style: italic; }
.dim-pass { margin: 6px 0 0 20px; background: var(--panel-2); border-radius: 7px; padding: 8px 10px; }
.dim-pass-label { font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.dim-pass-quote { font-size: 12.5px; color: var(--text); line-height: 1.55; margin-top: 3px;
  font-style: italic; }
/* 🔴 2026-10-18：同一句只渲染一次（观感，判据不动）——被别的类目先引过的只留一句指路，
   所以这里的"引文"其实是指路文字 ⇒ 去掉斜体、压低对比度，别让读者以为那是原句。 */
.dim-ev-dup, .dim-pass-quote-dup, .pub-fix-quote-dup {
  font-style: normal; opacity: .72; }
/* ══ 整篇级的逐段证据（2026-10-30 老板：「整篇级的应该是一段一段的」）═════════════
   为什么要单独一套：句级一条原句、段落级重写这一段，而整篇级的判定**天然由 2–3 个
   不同段落合起来支撑**（实测 10 个类目全部如此）。它需要的不是"再来一个折叠"，
   而是**左边段号、右边原句**的一列，让人一眼看出"这条是从这几处来的"。
   ⚠️ 原句**不截断**：截断（`…`）正是这次被点名的一半问题。
   ⚠️ 段号列固定宽度 —— 有没有段号都占位，否则引文左边缘会参差不齐。 */
.dim-wp-ev { margin: 6px 0 0 20px; }
.dim-wp-label { font-size: 10px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--muted); margin-bottom: 4px; }
.dim-wp-list { display: flex; flex-direction: column; gap: 4px; }
.dim-wp-row { display: flex; align-items: baseline; gap: 8px; }
.dim-wp-para { flex: 0 0 40px; font-size: 11px; color: var(--muted);
  font-variant-numeric: tabular-nums; text-align: right; }
.dim-wp-para.is-none { /* 定位不上 ⇒ 不编号，但**保留占位**让引文对齐 */ }
.dim-wp-quote { flex: 1 1 auto; font-size: 12.5px; color: var(--text);
  line-height: 1.55; font-style: italic; }
/* 🔴 2026-10-19（Round 2 · A 阶段）：证据范围标签（one sentence / paragraph / whole article）。
   "证据不足"那条要**看得见但不抢眼** —— 它是"我们不拿它当阻断依据"的说明，不是结论。 */
.dim-scope, .pub-fix-scope {
  font-size: 11px; color: var(--muted); margin: 4px 0 0 20px; letter-spacing: .02em; }
.pub-fix-scope { margin-left: 0; }
.pub-fix-weak { color: var(--gold); }
/* 🔴 2026-10-19：证据**全列**——前 3 句可见，其余折叠。折叠块要看着像"还有内容"，
   而不是像一条结论；点开就是全部原句（DOM 里一直是全量）。 */
.ev-more { margin: 4px 0 0 20px; }
.ev-more > summary { cursor: pointer; font-size: 11.5px; color: var(--muted); }
.ev-more > summary:hover { color: var(--text); }
.ev-more[open] > summary { margin-bottom: 3px; }
.dim-ev-wrap { margin: 0; }
/* 🔴 2026-10-19（老板令「改法一起上屏」）：写手给的改法块。
   和"To meet the standard"（判据要求）要**一眼分得开** —— 那是标准，这是可以拿去用的句子。 */
/* B4：可粘贴成品感 = 整框绿 + PASTE-READY 绿 chip */
.dim-fix { margin: 8px 0 0 20px; border: 1px solid color-mix(in srgb, var(--green) 35%, var(--border));
  background: color-mix(in srgb, var(--green) 7%, transparent); border-radius: 10px; padding: 10px 12px; }
/* 2026-10-19：方向（Recommended fix）与示例（Example copy）用**不同色条**分开，
   一眼能看出"这是一句能用的"还是"这是要我做的事"。 */
.dim-fix-direction { border-left-color: var(--blue); }
.dim-fix-example { border-left-color: var(--green); }
/* 评审详情里的判据标准（主区不再印） */
.details-std-row { padding: 7px 0; border-top: 1px solid var(--border); }
.details-std-row:first-child { border-top: 0; }
.details-std-head { display: flex; align-items: baseline; gap: 8px; font-size: 12.5px; }
.details-std-body { font-size: 12px; color: var(--muted); line-height: 1.55; margin-top: 3px; }
.dim-fix-skeleton { border-left-color: var(--gold); }
/* 2026-10-25 P0：新增事实就地标黄（fix_gate 报告 ⇒ .dim-fix-flag） */
/* 2026-10-25 Step2：行动章族（ABC 分家）—— 与优先级章正交 */
/* 2026-10-25 Step3：行动按钮（L1 右格 + L2 按钮组）/ 警示条 / tooltip */
.dq-rowsum-btn { padding: 8px 14px; border-radius: 10px; background: var(--panel, #161228);
  border: 1px solid var(--border, #2e2750); color: var(--text, #eceaf6);
  font-size: 12.5px; font-weight: 400; cursor: pointer; flex: 0 0 auto;
  font-family: inherit; }
.dq-rowsum-btn.primary { color: var(--blue, #7c9fff); font-weight: 700;
  border: 1px solid color-mix(in srgb, var(--blue, #7c9fff) 45%, transparent);
  background: color-mix(in srgb, var(--blue, #7c9fff) 18%, transparent); }
.dq-rowsum-btn:hover { border-color: color-mix(in srgb, var(--blue, #7c9fff) 45%, transparent); }
.dq-fix-btns { display: flex; gap: 8px; flex-wrap: wrap; margin: 10px 0 2px; }
.dim-fix-warn { margin: 8px 0 2px; padding: 7px 10px; border-radius: 8px; font-size: 12px;
  background: color-mix(in srgb, var(--amber, #fbbf24) 10%, transparent);
  border: 1px dashed color-mix(in srgb, var(--amber, #fbbf24) 45%, transparent);
  color: var(--amber, #fbbf24); line-height: 1.6; }
/* 2026-10-25 Step4：维度行左达标分章 + 右格动作（与修复区章色同谱） */
/* 2026-10-25 Step5：组头报账行 */
.dq-fixlist-tally { margin-top: 3px; font-size: 11.5px; color: var(--muted); }
/* 2026-10-26：`.dim-scorechip` 随诊断块改造删除（改为状态词 .dim-word） */
.dim-fixjump { margin-left: auto; font-size: 11.5px; flex: 0 0 auto; }
.dim-nothing { margin-left: auto; font-size: 11.5px; color: var(--green, #4ade80); flex: 0 0 auto; }
.dim-fix-tip { color: var(--muted); font-size: 11.5px; cursor: help; margin-left: 4px; }
.chip-act { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 10.5px;
  font-weight: 800; letter-spacing: .03em; }
.chip-paste { color: var(--green, #4ade80); border: 1px solid color-mix(in srgb, var(--green, #4ade80) 45%, transparent);
  background: transparent; }
.chip-check { color: var(--amber, #fbbf24); border: 1px solid color-mix(in srgb, var(--amber, #fbbf24) 55%, transparent);
  background: color-mix(in srgb, var(--amber, #fbbf24) 10%, transparent); }
.chip-fill { color: var(--amber, #fbbf24); border: 1px dashed color-mix(in srgb, var(--amber, #fbbf24) 55%, transparent);
  background: transparent; }
/* 2026-10-26（ABC 分家 · B 类条件章）：add/append 是"新加一句"，能粘但要先核数字/来源。
   与 chip-check 同色系（都是琥珀）但**实线浅底**，跟"闸门命中"的深底区分开。 */
.chip-add { color: var(--amber, #fbbf24); border: 1px solid color-mix(in srgb, var(--amber, #fbbf24) 40%, transparent);
  background: transparent; cursor: help; }
/* 🔴 2026-11-01：**remove / move 两枚章**（形态从 4 个扩到 6 个）。
   它们都不是"粘一句"：remove 是"删掉这段"，move 是"把这段挪过去"。
   用红/蓝区分，虚线边框表示"这不是可粘贴的成品"。 */
.chip-remove { color: var(--red, #f87171); border: 1px dashed color-mix(in srgb, var(--red, #f87171) 55%, transparent);
  background: transparent; cursor: help; }
.chip-move { color: var(--blue, #60a5fa); border: 1px dashed color-mix(in srgb, var(--blue, #60a5fa) 55%, transparent);
  background: transparent; cursor: help; }
/* 🔴 2026-10-27（`_改法质量修复_执行手册` 步骤 4）：**段落级成品章**。
   与 `PASTE-READY`（句子级）同为"能粘"的绿色系，但用**实心浅底 + 加粗**区分：
   它粘的是**一整段**，不是一句 —— 用户必须一眼看出量级不同。 */
.chip-passage { color: var(--green, #4ade80);
  border: 1.5px solid color-mix(in srgb, var(--green, #4ade80) 60%, transparent);
  background: color-mix(in srgb, var(--green, #4ade80) 14%, transparent);
  cursor: help; }
/* 🔴 2026-10-27（步骤 4）：文章级章（暂未接通，先留样式）。
   **不给复制** —— 它没有可粘的东西，只有处方。 */
.chip-struct { color: #b18cff;
  border: 1px solid color-mix(in srgb, #b18cff 55%, transparent);
  background: color-mix(in srgb, #b18cff 12%, transparent); }
/* 段落级补充行：保留了原段几句 + 用了哪几个操作（Bridwell 6 个名）。
   用户据此判断"我的原话还留了多少"，才敢整段替换。 */
.chip-kept { display: inline-block; font-size: 9.5px; font-weight: 800; letter-spacing: .03em;
  border-radius: 999px; padding: 1px 7px; color: var(--muted, #9aa);
  border: 1px solid var(--border, rgba(255,255,255,.12)); background: rgba(255,255,255,.05); }
.dim-fix-parmeta { font-size: 11px; color: var(--muted, #9aa); margin-top: 7px; line-height: 1.5; }
.chip-newsec { color: var(--gold, #e8c96a); border: 1px dashed color-mix(in srgb, var(--gold, #e8c96a) 55%, transparent);
  background: color-mix(in srgb, var(--gold, #e8c96a) 10%, transparent); }
.dim-fix-flag { background: color-mix(in srgb, var(--amber, #fbbf24) 22%, transparent);
  color: var(--amber, #fbbf24); border-bottom: 2px solid var(--amber, #fbbf24);
  padding: 0 2px; border-radius: 2px; }
.dim-fix-add { border-left-color: var(--blue); }
.dim-fix-label { font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); }
/* 2026-10-25 根治①：动作处方行（.dim-fix-before）已整行删除 ——
   语义并入 Recommended fix 标签短语（`Recommended fix · replace this sentence`）。 */
/* 2026-10-25 对比稿兑现：In your text 原句全文块 */
.dim-fix-quote { border-left: 3px solid var(--blue, #7c9fff);
  background: color-mix(in srgb, var(--blue, #7c9fff) 7%, transparent);
  border-radius: 0 8px 8px 0; padding: 6px 10px; margin-top: 6px; }
.dim-fix-quote .dim-fix-body { margin-top: 2px; }
/* 🔴 2026-11-01（老板令「把还没有展示出来的几态都做出来」）：
   **remove / move 的两个新块**。它们不是“替换句”，所以不能套 `.dim-fix-example` 的绿实框（那个形态
   告诉用户“这句可以直接粘”）。
     · `.dim-fix-remove-safe` = 为什么删了不塌（绿细边，但没有实底 ⇒ 不像成品）
     · `.dim-fix-move-to`     = 搬到哪（蓝细边，与 From 块同色系） */
.dim-fix-remove-safe { border: 1px solid color-mix(in srgb, var(--green, #4ade80) 30%, var(--border));
  border-left: 3px solid var(--green, #4ade80);
  background: transparent; border-radius: 0 8px 8px 0; padding: 7px 11px; }
.dim-fix-move-to { border: 1px solid color-mix(in srgb, var(--blue, #7c9fff) 30%, var(--border));
  border-left: 3px solid var(--blue, #7c9fff);
  background: transparent; border-radius: 0 8px 8px 0; padding: 7px 11px; }
/* “这行为什么没有按钮”的解释行（remove 与 skeleton 共用）。
   不能省：别的行都有按钮、这行没有，不说明就像功能坏了。 */
.dq-form-hint, .dq-fill-hint { font-size: 11.5px; color: var(--muted); margin: 8px 0 2px; line-height: 1.55; }
.dim-fix-body { font-size: 12.5px; color: var(--text); line-height: 1.55; margin-top: 4px; }
/* ══ 2026-10-19 顶部总表（老板令：一张总表，一行一个模块，点 View details 跳转）══
   形态照老板给的截图：模块名在左、主状态在右、一句灰字在下、`View details →` 右下，
   行与行之间一条浅分割线；**整行可点**。 */
.dq-sum { margin: 0 0 18px; }
.dq-sum-row { display: block; text-decoration: none; color: inherit;
  padding: 12px 2px 11px; border-top: 1px solid var(--border); }
.dq-sum-row:first-child { border-top: 0; }
.dq-sum-row:hover { background: rgba(255,255,255,.02); }
.dq-sum-top { display: flex; align-items: baseline; gap: 12px; }
.dq-sum-name { font-size: 15px; font-weight: 700; color: var(--text); flex: 1 1 auto; }
.dq-sum-state { flex: 0 0 auto; font-size: 11.5px; font-weight: 700; letter-spacing: .02em;
  padding: 2px 9px; border-radius: 999px; border: 1px solid var(--border); color: var(--muted); }
.dq-sum-row.tone-ok .dq-sum-state { color: #6fcf97; border-color: rgba(111,207,151,.45);
  background: rgba(111,207,151,.10); }
.dq-sum-row.tone-warn .dq-sum-state { color: #dfb457; border-color: rgba(223,180,87,.45);
  background: rgba(223,180,87,.10); }
.dq-sum-row.tone-bad .dq-sum-state { color: #e0736a; border-color: rgba(224,115,106,.45);
  background: rgba(224,115,106,.10); }
.dq-sum-line { font-size: 12.5px; color: var(--muted); line-height: 1.5; margin-top: 5px;
  max-width: 74ch; }
.dq-sum-go { font-size: 11px; color: var(--muted); opacity: .8; margin-top: 6px;
  text-align: right; }
.dq-sum-row:hover .dq-sum-go { color: var(--text); opacity: 1; text-decoration: underline; }
/* 总表这几个锚点要留出吸顶空间，不然跳过去会被顶部遮住 */
#dq-purpose, #dq-reader, #dq-claim, #dq-style, #dq-evidenceas, #dq-details {
  scroll-margin-top: 64px; }

/* ══ 2026-10-23 UI 重设 L3：拆叠后，内容直接平铺 ══ */
.dq-card { border: 1px solid var(--border); border-radius: 10px; margin: 0 0 12px;
  background: rgba(255,255,255,.015); }
.dq-card-top { display: flex; align-items: baseline; gap: 12px; }
.dq-card-name { font-size: 15px; font-weight: 700; color: var(--text); flex: 1 1 auto; }
.dq-card-arrow { flex: 0 0 auto; font-size: 19px; line-height: 1; color: var(--muted);
  font-weight: 700; transition: transform .15s ease; }
.dq-card-state { flex: 0 0 auto; font-size: 11.5px; font-weight: 700; letter-spacing: .02em;
  padding: 2px 9px; border-radius: 999px; border: 1px solid var(--border); color: var(--muted); }
.dq-card-state.tone-ok { color: #6fcf97; border-color: rgba(111,207,151,.45);
  background: rgba(111,207,151,.10); }
.dq-card-state.tone-warn { color: #dfb457; border-color: rgba(223,180,87,.45);
  background: rgba(223,180,87,.10); }
.dq-card-state.tone-bad { color: #e0736a; border-color: rgba(224,115,106,.45);
  background: rgba(224,115,106,.10); }
.dq-card-fact { font-size: 11.5px; color: var(--muted); margin-top: 3px;
  font-variant-numeric: tabular-nums; }
.ev-stat-nm { font-size: 12px !important; font-weight: 600; }
.dq-card-line { font-size: 12.5px; color: var(--muted); line-height: 1.55; margin-top: 5px;
  max-width: 78ch; }
/* 展开区 */
.dq-card > .ev-block, .dq-card > .dq-tbl-wrap, .dq-card > .dq-grades,
.dq-card > .dq-note { padding: 0 15px 13px; margin: 0; }
.dq-grades { }
/* 2026-10-25 修复行铺满：行内只装一个 details 卡，flex 收缩会让卡只有内容宽（截图病）⇒
   改 block，details 自然 100%。旧内联行式样（cat+chip 并排）已不在这里用。 */
.dq-grade-row { display: block; padding: 0; border-top: 0; }
.dq-grade-cat { flex: 1 1 220px; font-size: 13.5px; color: var(--text); font-weight: 700; }
.dq-grade-row.is-block .dq-grade-cat { color: #dfb457; }
.dq-grade-blk { font-size: 11px; font-weight: 700; color: #dfb457; }
.dq-note { font-size: 11.5px; color: var(--muted); line-height: 1.5; margin-top: 8px; }
/* Expression & AI Tone 表格 */
.dq-tbl { width: 100%; border-collapse: collapse; font-size: 12px; }
.dq-tbl th { text-align: left; font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em;
  color: var(--muted); font-weight: 600; padding: 4px 8px 6px 0; border-bottom: 1px solid var(--border); }
.dq-tbl td { padding: 7px 8px 7px 0; border-bottom: 1px dashed var(--border); vertical-align: top;
  color: var(--text); line-height: 1.45; }
.dq-td-name { width: 22%; font-weight: 600; }
.dq-td-num { width: 7%; font-variant-numeric: tabular-nums; color: var(--muted); }
.dq-td-quote { width: 40%; color: var(--muted); font-style: italic; }
.dq-td-fix { width: 31%; color: var(--muted); }
/* 🔴 2026-10-26（A 方案）：trust 轴没分时的状态位 + 单轴分的口径说明 */
.fr-axis-na { color: var(--muted); font-size: 12px; font-style: italic; cursor: help; }
.fr-score-note { margin: 6px 0 0; font-size: 12px; color: var(--muted); line-height: 1.5; }
/* 🔴 2026-10-26（老板）：Optional 组折叠 —— 直接复用 `.l3-block`（粗标题左／灰字右／圆角框），
   与 Content quality / Style & evidence / Evaluation details 三块同一个样子。
   这里只补"展开后"的留白与行间距。 */
.dq-opt-fold { margin-top: 12px; }
.dq-opt-fold > .l3-body, .dq-opt-body { padding: 6px 10px 10px; }
.dq-opt-body > .dq-fixlist-tally { padding: 4px 6px 8px; }
.dq-opt-body .dq-grade-row:first-of-type { padding-top: 2px; }
/* 🔴 2026-10-26：判定数据缺失时的说明条（旧缓存行回放）——
   以前这里是"什么都不印"（三块静默消失），现在必须有可见交代 */
.dq-incomplete { border-left: 2px solid var(--amber, #fbbf24); padding: 8px 12px;
  margin: 8px 15px 13px; background: color-mix(in srgb, var(--amber, #fbbf24) 8%, transparent);
  border-radius: 4px; font-size: 13px; color: var(--text); line-height: 1.55; }
.dq-incomplete b { color: var(--text); }
/* QC 卡：没有箭头，卡头下面紧接 `What this article is` —— 视觉上是一张卡 */
.dq-card-qc { padding-bottom: 4px; }
.dq-card-qc .am-block { border-top: 1px solid var(--border); margin-top: 10px; padding-top: 12px;
  padding-left: 15px; padding-right: 15px; }
.dq-card-qc .dq-card-top { padding: 13px 15px 0; }
.dq-card-qc > .dq-card-line { padding: 5px 15px 0; }
/* 深链锚点留出吸顶空间 */
#dq-pub, #dq-style, #dq-evidenceas, #dq-quality, #dq-details,
#dq-purpose, #dq-reader, #dq-claim { scroll-margin-top: 64px; }

.dim-fix-note { font-size: 11px; color: var(--muted); margin-top: 4px; }
/* 🔴 2026-10-19（老板选 A）：填空题形态下"你还需要补什么"——这是用户的活，要看得见 */
.dim-fix-need { font-size: 12px; color: var(--warn, #d69e2e); margin-top: 4px; font-weight: 600; }
.dim-wm { margin: 6px 0 0 20px; }
/* B3：段标签统一大写字距 */
.dim-wm-label { font-size: 10.5px; font-weight: 600; color: var(--muted);
  letter-spacing: .1em; text-transform: uppercase; }
.dim-wm-body { font-size: 13px; color: var(--muted); line-height: 1.7; margin-top: 2px; }
/* 🔴 2026-10-26（P3）：只给方向时必须说清"原文缺什么" */
.dim-wm-need { font-size: 12px; color: var(--text); margin-top: 4px;
  border-left: 2px solid var(--amber, #fbbf24); padding-left: 8px; }
/* 🔴 2026-10-26（P2）：同一句的第 2、3 条改法 —— 不重复印原句，只标"同上句" */
.dim-quote-dup { font-size: 12px; color: var(--muted); margin-top: 6px; }
.dim-stats { font-size: 12px; color: var(--muted); margin: 12px 0 4px; padding-top: 10px;
  border-top: 1px solid var(--border); }
.dim-checks { margin-top: 6px; }
.dim-checks > summary { cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--text); }
.dim-checks-list { margin: 6px 0 0; padding-left: 18px; }
.dim-checks-list li { font-size: 12.5px; color: var(--muted); line-height: 1.6; }
.dim-check-item { display: flex; gap: 8px; align-items: baseline; }
.dim-check-q { flex: 1; }
.dim-line .dim-grade { margin-left: auto; }
.dim-grade { border-radius: 999px; padding: 1px 8px; font-size: 11px; border: 1px solid currentColor; }
.dim-grade-2 { color: var(--green); }
.dim-grade-1 { color: var(--gold); }
.dim-grade-0 { color: var(--red); }
.dim-grade-u { color: var(--muted); }

/* ── What this article is（架构图 模块 3）──────────────────────────────── */
.am-block { border: 1px solid var(--border); border-radius: 12px; padding: 16px 18px 14px;
  margin: 0 0 16px; background: var(--panel); }
/* 🔴 2026-10-26（老板）：`What this article is` **不单独设立一块** —— 并入报告头的
   `CONTENT ANALYSIS`（`score.js` 的 `.score-assess-hero`）。⇒ `am-bare` 去掉外框与内边距，
   标题/说明也不出（标题就是那块 eyebrow），只剩 chips ＋ 三行 ＋ 分类依据。 */
.am-block.am-bare { border: 0; border-radius: 0; padding: 0; margin: 0; background: none; }
.am-block.am-bare .am-chips { margin: 0 0 10px; }
.am-block.am-bare .am-row:last-of-type { margin-bottom: 0; }
.am-head { display: flex; align-items: baseline; gap: 10px; margin: 0 0 10px; }
.am-title { font-size: 16px; font-weight: 700; color: var(--text); }
.am-note { font-size: 11px; color: var(--muted); }
.am-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px; }
.am-chip { font-size: 12px; border-radius: 999px; padding: 3px 10px; border: 1px solid var(--border-light);
  color: var(--text); }
.am-chip.main { background: var(--purple-subtle); border-color: var(--purple-border); color: var(--text); }
.am-chip.tag { background: var(--panel-2); }
.am-chip.soft { background: transparent; color: var(--muted); }
/* 🔴 2026-10-20（P2-1）：形式标签前加"format:"前缀 —— 否则 `list` / `FAQ` 会被读成第二个主类型。 */
.am-chip-prefix { font-size: 11.5px; color: var(--muted); align-self: center; margin-right: -2px; }
.am-row { margin: 0 0 8px; }
.am-row-label { font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.am-row-body { font-size: 13px; color: var(--text); line-height: 1.55; margin-top: 2px; }
.am-basis { margin-top: 8px; border-top: 1px solid var(--border); padding-top: 8px; }
.am-basis > summary { cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--text); }
.am-basis-in { margin-top: 6px; }
.am-why { font-size: 12.5px; color: var(--muted); line-height: 1.55; }
.am-quote { font-size: 12.5px; color: var(--muted); margin-top: 5px; }
.am-quote b { color: var(--text); }

/* ── Expression & AI Tone（架构图 模块 4：摘要式）──────────────────────── */
.qa-block { border: 1px solid var(--gold-border); border-radius: 12px; padding: 16px 18px 14px;
  margin: 0 0 16px; background: var(--gold-soft); }
.qa-head { display: flex; align-items: baseline; gap: 10px; margin: 0 0 6px; }
.qa-title { font-size: 16px; font-weight: 700; color: var(--text); }
.qa-tag { font-size: 11px; color: var(--gold); }
.qa-headline { font-size: 14px; font-weight: 600; color: var(--text); margin: 4px 0 12px; }
.qa-stats { display: flex; gap: 26px; margin: 0 0 10px; }
.qa-stat { display: flex; flex-direction: column; }
.qa-stat-num { font-size: 22px; font-weight: 700; color: var(--text); line-height: 1.1; }
.qa-stat-label { font-size: 11px; color: var(--muted); }
.qa-note { font-size: 12px; color: var(--muted); line-height: 1.5; }
.qa-more { margin-top: 10px; }
.qa-more > summary { cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--text); }
.qa-list { margin: 6px 0 0; }
.qa-row { padding: 6px 0; border-top: 1px solid var(--border); font-size: 13px; }
.qa-row:first-child { border-top: 0; }
.qa-label { color: var(--text); }
.qa-hits { color: var(--muted); margin-left: 6px; font-size: 12px; }
.qa-ev { font-size: 12.5px; color: var(--muted); margin-top: 3px; }

/* ── Evidence & search readiness（架构图 模块 5：三子模块）──────────────── */
.ev-block { border: 1px solid var(--border); border-radius: 12px; padding: 16px 18px 14px;
  margin: 0 0 16px; background: var(--panel); }
.ev-title { font-size: 16px; font-weight: 700; color: var(--text); }
.ev-note { font-size: 12.5px; color: var(--muted); margin: 4px 0 14px; }
.ev-sub { border-top: 1px dashed var(--border); padding: 9px 0 3px; }
.ev-sub:first-of-type { border-top: 0; }
.ev-sub-title { font-size: 13px; font-weight: 600; color: var(--text); }
.ev-sub-q { font-size: 12.5px; color: var(--muted); margin-top: 2px; }
.ev-sub-head { font-size: 12.5px; color: var(--text); margin-top: 6px; }
.ev-sub-note { font-size: 12px; color: var(--muted); margin-top: 4px; }
.ev-list { margin: 6px 0 0; }
.ev-row { padding: 4px 0; font-size: 13px; }
.ev-mark { display: inline-block; width: 16px; color: var(--muted); }
.ev-label { color: var(--text); }
/* 🔴 2026-10-20（F15）：计数必须与标签**有间隔**。原来状态词是不带前导空格的独立 span，
   两段文字直接粘在一起 ⇒ 卡面出现 `Question-shaped headingsnot recorded`。 */
.ev-count { color: var(--muted); font-size: 12px; margin-left: 7px; }

/* ── Evaluation details（架构图 模块 6：三个折叠面板）──────────────────── */
.details-block { border: 1px solid var(--border); border-radius: 12px; padding: 16px 18px 14px;
  background: var(--panel); }
.details-head { margin: 0 0 8px; }
.details-title { font-size: 16px; font-weight: 700; color: var(--text); }
.details-note { font-size: 11px; color: var(--muted); margin-top: 2px; }
/* details-panel 拆叠后：标题行 */
.details-panel-title { font-size: 13.5px; font-weight: 600; color: var(--text); margin: 8px 0 4px; }
.details-panel { border-top: 1px solid var(--border); padding: 8px 0; }
.details-summary { display: flex; gap: 22px; margin: 8px 0 4px; }
.details-sum-cell { display: flex; flex-direction: column; }
.details-sum-num { font-size: 18px; font-weight: 700; color: var(--text); }
.details-sum-label { font-size: 11px; color: var(--muted); }
.details-bydim { margin: 8px 0 4px; }
.details-dim { display: flex; justify-content: space-between; align-items: baseline;
  padding: 5px 0; border-bottom: 1px solid var(--border); }
.details-dim:last-child { border-bottom: 0; }
.details-dim-name { font-size: 13px; color: var(--text); }
.details-dim-count { font-size: 12px; color: var(--muted); }
.details-ind { margin: 8px 0 4px; }
.details-ind-row { padding: 7px 0; border-top: 1px solid var(--border); }
.details-ind-line { display: flex; gap: 8px; align-items: baseline; }
.details-ind-ask { color: var(--text); font-size: 13px; }
.details-ind-quote { font-size: 12.5px; color: var(--text); line-height: 1.55; margin: 4px 0 0; }
.details-ind-none { font-size: 12.5px; color: var(--muted); font-style: italic; margin: 4px 0 0; }
/* 🔴 2026-10-20（F18）：通过项收进折叠。标题必须一眼看出"这是查过且通过的 N 项"，
   不能长得像"没查的部分"。 */
.details-ind-pass { margin-top: 8px; border-top: 1px solid var(--border); padding-top: 6px; }
.details-ind-pass > summary { font-size: 12.5px; color: var(--muted); cursor: pointer; }
.details-ind-why { font-size: 12.5px; color: var(--muted); line-height: 1.55; margin: 3px 0 0; }

/* ── Quality standard（A3：解释「什么才算做好」）──────────────────────── */
.dim-standard { margin: 12px 0 0; padding: 12px 14px; border-radius: 9px;
  background: var(--panel-2); border: 1px solid var(--border); }
.dim-standard-title { font-size: 11px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); font-weight: 600; margin-bottom: 4px; }
.dim-standard-body { font-size: 12.5px; color: var(--muted); line-height: 1.55; }
.dim-standard-subtitle { font-size: 12px; font-weight: 600; color: var(--text); margin: 8px 0 4px; }
.dim-standard-list { margin: 0; padding-left: 18px; }
.dim-standard-list li { font-size: 12.5px; color: var(--muted); line-height: 1.6; }

/* ── Next step（A4：最优先的一个修改方向）────────────────────────────── */
.dim-next { margin-top: 10px; padding: 10px 14px; border-radius: 9px;
  background: color-mix(in srgb, var(--gold) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 26%, transparent); }
.dim-next-label { font-size: 10px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--gold); font-weight: 600; }
.dim-next-body { font-size: 12.5px; color: var(--text); line-height: 1.55; margin-top: 3px; }

/* ── Source support 四栏（A2）────────────────────────────────────────── */
.ev-stats { display: flex; gap: 22px; margin: 8px 0 6px; flex-wrap: wrap; }
.ev-stat { display: flex; flex-direction: column; }
.ev-stat-num { font-size: 20px; font-weight: 700; color: var(--text); line-height: 1.1; }
.ev-stat-label { font-size: 11px; color: var(--muted); }
.ev-unknown { color: var(--muted); font-size: 12px; }
/* 🔴 2026-10-21（ExpertQA `reason_missing_support` 吸收）：失败模式 + 短语
   形如 "evidence_vague: never described as metabolic activity"
   比只印 state 更 actionable —— 作者知道**为什么**不支撑、改哪一段。 */
.ev-why { color: var(--muted); font-size: 11.5px; font-style: italic; margin-left: 2px; }
/* 2026-11-04：下一步做什么（后端 `evidence_categories` 的 `action`）。
   比 why 更实，所以用正文色不用 muted —— 用户扫一眼先看到"该动哪里"。 */
.ev-action { color: var(--text); font-size: 11.5px; font-weight: 500; margin-left: 2px; }

/* ── Evaluation details 审计字段（A6）────────────────────────────────── */
.details-note2 { font-size: 12px; color: var(--muted); margin: 2px 0 8px; font-style: italic; }
.details-ind-fix { font-size: 12.5px; color: var(--text); margin: 4px 0 0; }
.details-ind-places { font-size: 12px; color: var(--muted); margin: 3px 0 0; }
.details-ind-conf { font-size: 12px; color: var(--muted); margin: 2px 0 0; }

/* ── To meet the standard（P1：每条未通过项的可执行改进方向）──────────── */
.dim-target { margin: 6px 0 0 20px; }
.dim-target-label { font-size: 11px; font-weight: 600; color: var(--green); }
.dim-target-body { font-size: 12.5px; color: var(--muted); line-height: 1.55; margin-top: 2px; }

/* ── 发布块：新链四态 ＋ 关键缺口（2026-10-18 切真源）────────────── */
.pub-coverage { font-size: 12px; color: var(--muted); line-height: 1.5; margin: 6px 0 0; }
.pub-fix-quote { font-size: 12px; color: var(--muted); margin: 4px 0 0; font-style: italic; }
.pub-fix-target { font-size: 12px; color: var(--text); margin: 4px 0 0; line-height: 1.5; }
.pub-fix-target b { color: var(--green); font-weight: 600; }

/* ══ 2026-10-19：Evidence 卡里三段改成可折叠（老板令「这些也都可以折叠」）══ */
/* ev-sub 拆叠后：不再折叠 */



.ev-row-quote { font-size: 11.5px; color: var(--muted); font-style: italic; padding: 0 0 6px 20px;
  line-height: 1.45; }

/* ══ 2026-10-19 S3：同一句的改法归并后，其余类目只给一句指路 ══ */
.dim-fix-pointer { font-size: 12px; color: var(--muted); margin-top: 6px; font-style: italic; }
.dim-fix-covers { font-size: 11.5px; color: var(--muted); margin-top: 3px; font-weight: 600; }
/* 2026-10-26（图3）：指路行撤掉后，`Also fixes: X` 是唯一出口 ⇒ 类目名可点（落到维度清单那一行） */
.dim-fix-covers-go { color: var(--dim); text-decoration: underline; text-underline-offset: 2px;
  text-decoration-style: dotted; }
.dim-fix-covers-go:hover { color: var(--text); }
/* 2026-10-26（图2）：why 常驻行（从 `Why it matters · show` 折叠里提出来的一句话） */
.dim-why { font-size: 12.5px; line-height: 1.5; color: var(--muted); margin: 4px 0 6px 20px; }

/* ══ 2026-10-19（老板裁 Q1＝B）：Content quality 右列是**分数位**（现在留白，等算法）══ */
/* 2026-10-25 同名两用拆开：此条是**分数数字格**样式（原来与卡容器同名互相污染） */
.dq-card-score-num { margin-left: auto; font-size: 20px; font-weight: 800; color: var(--text);
  font-variant-numeric: tabular-nums; }
.dq-card-score-den { font-size: 11px; font-weight: 600; color: var(--muted); }
.dq-verdict-note { font-size: 11.5px; color: var(--muted); margin-top: 6px; font-style: italic; }

/* ══ 2026-10-19（老板令 ①②）：一行的引文全被别处引过时，用"自己点名的缺口句"当定位锚；
   指路压成一行脚注（`Also cited in “X” (4) · “Y” (8).`）══ */
.dim-anchor-tag { font-size: 11px; color: var(--muted); font-style: italic; }
.dim-pass-quote-dup, .dim-ev-dup { font-size: 11.5px; color: var(--muted); margin-top: 3px; }

/* ══ 2026-10-19（老板令 ①②）：定位锚（位置＋前几个词），不是整句重复 ══ */
.dim-anchor { font-size: 11.5px; color: var(--muted); font-style: italic; padding: 2px 0 0 2px; }

/* ══ P0 信息架构（2026-10-20，老板令「按你的建议执行 P0」）══════════════════
   统一状态芯片 / Fix list 分组 / What's good 聚合 / 改法「原句灰显＋新增高亮」/
   维度折叠摘要 / 卡头总评。 */
.dq-card-summary { font-size: 12.5px; font-weight: 600; color: var(--text);
  margin: 2px 0 2px; line-height: 1.5; }
.dq-card-split { font-size: 11.5px; color: var(--muted); margin: 0 0 2px; line-height: 1.5; }
/* B2：组头混排（Suggested (N) 白 700 + hint 灰），不上全大写 */
.dq-fixlist-head { font-size: 13px; font-weight: 400; letter-spacing: 0;
  text-transform: none; color: var(--muted); margin: 14px 0 8px; }
/* ══ 两组组头**必须一眼分得开**（2026-10-30 老板：「用户看不出哪个是推荐修的
   哪个是可以选择修的」）═══════════════════════════════════════════════════════
   现场：`Suggested` 的组头被挪到标题行右边当药丸之后，它的条目失去组头、
   直接跟在 `Blocking` 条目后面 —— 两批长得一模一样。
   现在：① 组头各回各位（`_head` 两组都印名字+条数+一句动作说明）；
        ② 名字**分色**：Blocking 红（不能发）、Suggested 黄（能发但该修）；
        ③ 左侧一条 3px 色条，扫一眼就知道这一块属于哪档。
   颜色用 tokens 里两个主题都有的 `--bad` / `--warn`（dark 38-40 / light 152-154）。 */
.dq-fixlist-head b { color: var(--text); font-weight: 700; }
.dq-fixlist-block { color: var(--bad); padding-left: 9px; border-left: 3px solid var(--bad); }
.dq-fixlist-must { color: var(--warn); padding-left: 9px; border-left: 3px solid var(--warn); }
/* ⚠️ 必须写成 `.dq-fixlist-head.dq-fixlist-block b`（0,2,1）——
   上面通用那条 `.dq-fixlist-head b`（0,1,1）就压不住它了。
   第一版我把分色写在通用规则**之前**且同优先级 ⇒ 后出现的通用规则把分色全盖回去，
   两个组头颜色一模一样（就是这个 bug 的复刻）。 */
.dq-fixlist-head.dq-fixlist-block b { color: var(--bad); }
.dq-fixlist-head.dq-fixlist-must b { color: var(--warn); }
/* 🔴 2026-10-30（恢复 Optional 这一档）：**1 档 = 部分做到 = 可选修**，
   与 Blocking（0 档硬伤，不改不能发）/ Suggested（0 档非硬伤，该修但不拦发布）
   是**三种不同的东西**，必须三种颜色。灰 `--opt`（tokens 里现成，两主题都有）。 */
/* 🔴 2026-10-30（老板：「Blocking + Suggested 都是展开状态，optional 要折叠状态」）：
   Optional 改成**折叠块**（`<details class="l3-block dq-opt-fold">`），组头变成
   `<summary>` 里的标题 ⇒ 上面那套"平铺组头 + 左色条"的 `.dq-fixlist-opt` 不再使用，
   颜色改由 `.dq-opt-title` 落在标题那一段上（**同一个 `--opt` 灰**，两主题都有：
   dark `:43` / light `:157`）。
   ⚠️ 色条不留：折叠块自己有 `.l3-block` 的边框与圆角，再叠一条 3px 左条会像
   "半个卡片"——Blocking / Suggested 的色条是**平铺组头**的表达方式，两者形态不同不硬凑。 */
.dq-opt-title { color: var(--opt); font-weight: 700; }
/* 2026-10-26（F10 判据粒度）：篇章级条目的说明小标 —— 这条要动整篇，不是改一句。
   灰、小、不加底色：它是交代，不是状态芯片（别跟 Suggested/Optional 抢读）。 */
.dq-fill-chip { border-style: solid; }   /* A6a：填空题小标，实线边框跟 Whole piece 的虚线区分开 */
.dq-grain-chip { font-size: 10.5px; font-weight: 600; letter-spacing: .02em;
  color: var(--muted); border: 1px dashed var(--line); border-radius: 999px;
  padding: 1px 7px; margin-left: 6px; white-space: nowrap; }
.dq-fixlist-head:first-child { margin-top: 2px; }
/* 🔴 2026-10-21（P2-1）：recommended 组头 —— 不进「Must fix before publishing」 */
.dq-fixlist-rec { color: var(--blue, #6f9fff); }
.dq-grade-fix { border-radius: 999px; padding: 2px 9px; font-size: 10.5px; font-weight: 800;
  letter-spacing: .03em; border: 1px solid currentColor; flex: 0 0 auto; }
.dq-fix-0 { color: var(--red); background: color-mix(in srgb, var(--red) 12%, transparent); }
.dq-fix-1 { color: var(--gold); background: color-mix(in srgb, var(--gold) 16%, transparent); }
.dq-fix-2 { color: var(--muted); background: var(--panel-2); }
/* 🔴 2026-10-21（P2-1）：recommended = 关键但不阻断（支撑要求）——蓝灰色，区别于 optional */
.dq-fix-5 { color: var(--blue, #6f9fff); background: color-mix(in srgb, var(--blue, #6f9fff) 14%, transparent); }
/* P1-5：¶ 段落锚记号（2026-10-25 根治②：内联在 In your text 摘录行末，可点击定位） */
.dim-pass-no { display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 4px;
  font-size: 10px; font-weight: 700; letter-spacing: .04em; vertical-align: baseline;
  color: var(--blue, #6f9fff); background: color-mix(in srgb, var(--blue, #6f9fff) 14%, transparent); }
.dq-fix-3 { color: var(--muted); background: transparent; border-style: dashed; }
.dim-line .dq-grade-fix { margin-left: auto; }

/* ══ 2026-10-24 根治 C：紧凑行 + 选修跳转 + 落点闪烁 ═══════════════════ */
.dq-fix-6 { color: var(--blue, #6f9fff); background: transparent; border-style: dashed; }
.dq-fixlist-human { color: var(--blue, #6f9fff); }
/* 干活区：紧凑头（截图 4 形式）+ 点开 4 段 */
.dq-rowdet { border: 1px solid var(--border); border-radius: 10px;
  background: var(--panel-2); margin: 6px 0; overflow: hidden; }
.dq-rowdet[open] { border-color: color-mix(in srgb, var(--blue, #6f9fff) 45%, var(--border)); }
.dq-rowsum { list-style: none; cursor: pointer; padding: 10px 12px; display: block; }
.dq-rowsum::-webkit-details-marker { display: none; }
.dq-rowsum-line { display: flex; align-items: center; gap: 8px; }
.dq-rowsum-line .dq-grade-cat { font-weight: 700; }
.dq-rowsum-one { margin-top: 5px; font-size: 12px; color: var(--muted); line-height: 1.55;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;  /* 一行化：所有折叠行等高 */}
.dq-rowdet .dq-grade-act { border-top: 1px solid var(--border); padding: 10px 12px 12px; }
/* 指路区：选修行一键跳转 What to improve */
a.dq-jump { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  padding: 8px 10px; margin: 6px 0; border: 1px solid var(--border); border-radius: 10px;
  background: var(--panel-2); text-decoration: none; color: inherit; cursor: pointer;
  transition: background .15s, border-color .15s; }
a.dq-jump:hover { background: color-mix(in srgb, var(--blue, #6f9fff) 8%, var(--panel-2));
  border-color: color-mix(in srgb, var(--blue, #6f9fff) 35%, var(--border)); }
a.dq-jump .dq-jump-one { flex: 1 1 100%; font-size: 12px; color: var(--muted); line-height: 1.55; }
a.dq-jump .dq-jump-arrow { margin-left: auto; color: var(--blue, #6f9fff); font-size: 11px;
  flex: 0 0 auto; white-space: nowrap; }
.dq-grade-row > .dq-rowdet { width: 100%; margin: 6px 0; }
/* Optional = 一块 + 一个跳转按钮（明细在 Content quality） */
.dq-optblock { display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  margin: 12px 0 6px; padding: 13px 16px; border: 1px dashed var(--border);
  border-radius: 10px; background: var(--panel-2); }
.dq-optnote { font-size: 12px; color: var(--muted); line-height: 1.6; flex: 1 1 0; min-width: 0; }
.dq-optnote-sub { font-size: 12px; color: var(--muted); line-height: 1.6; margin-top: 4px; }
.dq-optnote b { color: var(--text); }
a.dq-optbtn { margin-left: auto; display: inline-block; padding: 8px 16px;
  border-radius: 999px; background: color-mix(in srgb, var(--blue, #6f9fff) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--blue, #6f9fff) 45%, transparent);
  color: var(--blue, #6f9fff); font-size: 12.5px; font-weight: 700;
  text-decoration: none; cursor: pointer; white-space: nowrap; flex: 0 0 auto;
  transition: background .15s; }
a.dq-optbtn:hover { background: color-mix(in srgb, var(--blue, #6f9fff) 24%, transparent); }
/* 落点闪烁（跳过去 1.6s 内亮一下，人眼能跟上） */
@keyframes wti-flash-anim {
  0% { background: color-mix(in srgb, var(--blue, #6f9fff) 26%, transparent); }
  100% { background: transparent; }
}
.wti-flash { animation: wti-flash-anim 1.6s ease-out; border-radius: 8px; }
/* skeleton 占位符 chip（2026-10-24 丙2：不许裸奔） */
.dim-fix-slot { display: inline-block; padding: 1px 7px; border-radius: 6px; margin: 0 2px;
  font-size: 11.5px; font-weight: 700; color: var(--gold);
  background: color-mix(in srgb, var(--gold) 14%, transparent);
  border: 1px dashed color-mix(in srgb, var(--gold) 45%, transparent); }
/* 网页残留告示（己） */
.dq-chrome-note { border-style: dashed; }
/* 人核句（review_required）：点名类目 + 要人看 */
/* 2026-10-26：`.dq-fixnote` 随"Human check"那句一起删除（无其它用处） */
/* Whats working visible block (2026-10-24 target mock: unfolded, rows carry Evidence) */
.dq-goodsec { margin: 16px 0 6px; }
.dq-goodsec-sub { text-transform: none; letter-spacing: 0; color: var(--muted); font-weight: 400; }
.dq-good-row { display: flex; gap: 10px; align-items: baseline; padding: 8px 12px;
  border: 1px solid var(--border); border-radius: 10px; margin: 8px 0;
  background: var(--panel-2); font-size: 13px; }
.dq-good-row .chip-met { display: inline-block; padding: 2px 9px; border-radius: 999px;
  font-size: 10.5px; font-weight: 800; letter-spacing: .03em; flex: 0 0 auto;
  color: var(--green, #4ade80); border: 1px solid color-mix(in srgb, var(--green, #4ade80) 45%, transparent);
  background: transparent; }
.dq-good-ev { color: var(--muted); font-size: 12px; margin-top: 2px; }
.dq-good-ev i { color: var(--text, #eceaf6); font-style: normal; }
/* 维度折叠（第④层） */
/* dim-block 拆叠后：不再折叠 */
.dim-sum { display: block; padding-bottom: 6px; }
/* 改法：原句灰显 ＋ 新增高亮（改动②三色：红橙=原段问题句，绿=改法新增，黄=要核） */
.dim-fix-keep { color: var(--muted); }
.dim-fix-add { color: var(--green); font-weight: 600;
  background: color-mix(in srgb, var(--green) 12%, transparent);
  border-radius: 3px; padding: 1px 3px; }
/* 2026-10-25 改动②：原段里的问题句标红（fix_before 逐字匹配才标；与绿=同色族对照） */
.dim-fix-problem { color: var(--red, #f87171); font-weight: 600;
  background: color-mix(in srgb, var(--red, #f87171) 12%, transparent);
  border-radius: 3px; padding: 1px 3px; }
/* ══ 2026-10-26 三段式（老板对照标注表单拍板：上下文 → 原句 → 改法）══════════════
   颜色分工，全卡唯一口径：
     蓝 = 这句原句在原文里的位置（上下文块里标出）
     红 = 原句这一句有问题 ／ 改法里被删掉的原词
     绿 = 改法里新加的词
     黄 = 新加但本文查不到的数字/专名（要你核） */
.dim-fix-ctx { border-left: 3px solid var(--border);
  background: color-mix(in srgb, var(--text) 5%, transparent);
  border-radius: 0 8px 8px 0; padding: 6px 10px; margin-top: 6px; }
.dim-fix-ctx .dim-fix-body { margin-top: 2px; color: var(--muted); }
.dim-ctx-hit { background: color-mix(in srgb, var(--blue, #7c9fff) 24%, transparent);
  color: var(--text); border-radius: 3px; padding: 1px 3px;
  box-shadow: inset 0 -2px 0 color-mix(in srgb, var(--blue, #7c9fff) 55%, transparent); }
.dim-fix-del { color: var(--red, #f87171);
  text-decoration: line-through;
  text-decoration-color: color-mix(in srgb, var(--red, #f87171) 70%, transparent);
  opacity: .9; margin-right: 2px; }

/* ══ P0 补刀（2026-10-20）：Fix list 行动内容（缺什么·在哪·加哪句）════════════
   用户：「Fix list — must fix before publishing (3) 这块没有」——清单行原来只有
   名字＋芯片，改法全在折叠的维度详情里。现在改法块挪进 Fix list，维度留指路。 */
.dq-fixlist-title { font-size: 12px; font-weight: 600; letter-spacing: .12em;
  text-transform: uppercase; color: var(--muted); margin: 2px 0 8px; }
.dq-grade-act { flex: 1 1 100%; margin-top: 4px; padding: 2px 0 6px 2px;
  border-top: 1px dashed var(--border); }
.dq-grade-act .dim-wm { margin-left: 0; }
.dq-grade-act .dim-fix { margin-left: 0; }
.dq-grade-act .dim-where { margin-top: 4px; }
.dq-grade-act .dim-fix-pointer { margin-top: 4px; }
.dq-grade-act .dim-fix-see, .dim-fix-see { font-size: 12px; color: var(--muted);
  margin-top: 6px; font-style: italic; }

/* ══ P0 补刀 2（2026-10-20 F25）：THE PASSAGE 标签块 ══════════════════════════
   2026-10-25 根治②：独立 `.dim-passage` 块废除（¶ 内联进 In your text 摘录行末）。
   保留样式规则以防旧卡缓存，但生产端已不再渲染该类。 */

/* ══ ForgeRankAI Score 报告卡（2026-10-22 解法三接线）═════════════════════════
   对齐 `_ForgeRank报告卡_预览_20261022.html` 的 fr-* 系样式；颜色走 tokens.css 变量，
   dark/light 自动切换（html[data-theme="light"]）。 */
/* ══ 2026-10-23 UI 重设：scoreCard 紧凑排（预览稿同款）══ */
.dq-card-score { border: 1px solid var(--purple-border); border-radius: 12px;
  background: var(--panel); padding: 16px 18px 14px; margin: 0 0 14px; }
.fr-score-num { font-size: 40px; font-weight: 800; letter-spacing: -.02em; line-height: 1; color: var(--text); }

/* ══ 2026-10-24 外壳重排（目标渲染稿）═════════════════════════════════════ */
/* 2026-10-26（老板：两块合成一块）：`.fr-eyebrow`（`ForgeRankAI · Content quality report`）
   与 `.fr-style-line`（`Style scan: …`）**已停止渲染** —— 前者与 `CONTENT ANALYSIS` 眉标重复，
   后者的同一组数在 q2 正文里写过。规则一并删掉，避免有人照着复活。 */
.fr-axis-inline { font-size: 12.5px; color: var(--muted); align-self: baseline; }
/* B1：旧 .fr-axis-tag 的 50px 定宽+胶囊会把 "· A" 裁掉 —— 内联轴一律解除 */
.fr-axis-inline .fr-axis-tag { width: auto; border: 0; padding: 0; background: none;
  text-align: left; font-size: 12.5px; font-weight: 600; color: var(--muted); }
.fr-axis-inline b { color: var(--text); font-size: 14px; margin-left: 5px; }
/* 2026-10-26（两块合成一块）：报告头 = 眉标 ＋ 分数行 ＋ 文章信息，同一个卡片壳。
   `.dq-card-score` 已经给了边框/底色/内边距，这里只补内部间距。 */
.dq-header .score-assess-eyerow { margin: 0 0 12px; }
.dq-header .fr-score-block { margin: 0 0 14px; }
.dq-header .fr-score-block .fr-score-row { margin-bottom: 0; }
.fr-score-row { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; margin-bottom: 12px; }
.fr-score-row .fr-badge { margin-left: auto; }
/* 三直答：两列 + 引用格全宽 */
.qa .qa-item.qa-wide { grid-column: 1 / -1; }
/* Why this verdict 折叠（Honest note 住在里面） */
.qa-why-fold, .qa-cit-fold { width: 100%; margin-top: 10px; text-align: left; }
.qa-why-fold summary, .qa-cit-fold summary { cursor: pointer; font-size: 11.5px; color: var(--blue, #7c9fff); }
.qa-why-fold .qa-disc { margin-top: 6px; font-size: 12px; color: var(--muted); line-height: 1.6; }
/* 🔴 2026-10-26（老板）：「3 / 6 citation signals 这个抓取到原句我建议折叠，要不然把卡片拉的太长了」。
   六条信号 + 原句收进 `details.qa-cit-fold`（复用 q1 `Why this verdict` 那套小字折叠，同卡视觉统一）。
   展开后清单跟 summary 之间留 8px，否则第一行贴着折叠头。 */
.qa-cit-fold .qa-cit { margin-top: 8px; }
/* L3 折叠头右侧计数 */
.l3-cnt { margin-left: auto; font-weight: 400; font-size: 11.5px; color: var(--muted); }
.l3-sum { display: flex; align-items: baseline; }
.fr-score-den { font-size: 16px; color: var(--muted); font-weight: 500; }
.fr-badge { font-size: 13px; font-weight: 700; padding: 6px 14px; border-radius: 999px;
  border: 1px solid var(--border); color: var(--muted); }
.fr-badge.tone-ok { color: var(--green); border-color: color-mix(in srgb, var(--green) 45%, transparent);
  background: color-mix(in srgb, var(--green) 10%, transparent); }
.fr-badge.tone-warn { color: var(--amber, #fbbf24); border-color: color-mix(in srgb, var(--amber, #fbbf24) 45%, transparent);
  background: color-mix(in srgb, var(--amber, #fbbf24) 16%, transparent); }
.fr-badge.tone-bad { color: var(--red); border-color: color-mix(in srgb, var(--red) 45%, transparent);
  background: color-mix(in srgb, var(--red) 10%, transparent); }
.fr-score-label { font-size: 13px; color: var(--muted); margin-left: 4px; }
.fr-axes { display: flex; flex-direction: column; gap: 10px; margin-bottom: 12px; }
.fr-axis { display: flex; align-items: center; gap: 12px; }
.fr-axis-name { font-size: 12.5px; color: var(--muted); width: 180px; flex-shrink: 0; }
.fr-axis-track { flex: 1; height: 7px; border-radius: 999px; background: var(--panel-2); overflow: hidden; }
.fr-axis-track > i { display: block; height: 100%; border-radius: 999px; }
.fr-axis-track.cq > i { background: var(--blue); }
.fr-axis-track.trust > i { background: var(--green); }
.fr-axis-val { font-size: 13px; font-weight: 600; width: 28px; text-align: right; color: var(--text); }
.fr-axis-tag { font-size: 10px; padding: 1px 8px; border-radius: 999px; width: 50px; text-align: center;
  border: 1px solid var(--border); color: var(--muted); font-weight: 600; }
/* §5：fr-note（3 项分类判 1 档）删掉 */


/* ══ 2026-10-23 UI 重设（§7.2）：三个直答 / 行动区 / 好在哪 / L3 折叠 ════════ */
/* ══ 2026-10-23 UI 重设：三个直答（对照预览稿 .qa / .qa-item / .qa-q / .badge / .qa-body）══ */
/* 2026-10-25 去重：原来这里 auto-fit 与上面 1.2fr 1fr 两条打架（后者被盖掉）⇒
   宽卡开 3 列、上排 2 格只占 2/3。现合并成唯一一条；窄屏回单列。 */
.qa { display: grid; grid-template-columns: 1.2fr 1fr; gap: 12px; margin: 12px 0; }
@media (max-width: 640px) { .qa { grid-template-columns: 1fr; } }
/* 2026-10-24 对齐目标渲染稿：左对齐 + 小灰标题 + 大字色判定词（不再是居中胶囊） */
.qa-item { background: var(--panel-2, var(--card, #fff)); border: 1px solid var(--border, var(--line, #e4e7f0)); border-radius: 12px; padding: 14px 16px; display: flex; flex-direction: column; align-items: flex-start; text-align: left; gap: 8px; }
.qa-q { font-weight: 500; font-size: 12px; line-height: 1.45; color: var(--muted); }
.badge { display: inline-block; padding: 0; border-radius: 0; background: transparent !important;
  font-size: 18px; font-weight: 800; letter-spacing: -.01em; line-height: 1.25; }
.badge.ok { color: var(--green, #4ade80); }
.badge.warn { color: var(--amber, #fbbf24); }
.badge.bad { color: var(--red, #f87171); }
.badge.none { color: var(--muted, #5b6172); }
/* ⚠️ 2026-11-02：原来是 `var(--text, #eceaf6)` —— 深色主题下没问题，
   但报告卡是浅色底，`#eceaf6` 在白底上几乎看不见（`Not measured` 实测就是灰白一团）。
   非结论态用中性灰，它本来就是"我们没有结论"，不该靠颜色抢注意力，但必须读得清。 */
.qa-body { font-size: 12px; color: var(--muted, var(--dim, #5b6172)); line-height: 1.6; flex: 1; }
.qa-body b { color: var(--ink, #1a1d29); }
.qa-disc { display: block; margin-top: 6px; font-size: 12px; color: var(--muted); line-height: 1.6; }
/* 🔴 2026-10-26（老板）：「3 / 6 citation signals 这里没法展示原句，我们之前的 6 个信号打钩
   他会展示原句的」⇒ q3 卡片的正文改成**六信号逐条 + 原句**（原来 Evidence 块里那份，搬进这张卡）。
   打钩/打叉走 tokens 的绿/红；原句左侧一条细竖线，跟正文分开。 */
.qa-cit { width: 100%; margin: 2px 0 0; }
.qa-cit-note { font-size: 12px; color: var(--muted); }
.qa-cit-row { display: flex; align-items: baseline; gap: 7px; margin: 8px 0 0; font-size: 12.5px; }
.qa-cit-mark { flex: 0 0 auto; font-weight: 700; font-size: 12px; line-height: 1.5; }
.qa-cit-mark.ok { color: var(--green); }
.qa-cit-mark.no { color: var(--red); }
.qa-cit-mark.unk { color: var(--muted); }
.qa-cit-label { color: var(--text); line-height: 1.5; }
.qa-cit-unk { font-size: 11.5px; color: var(--muted); font-style: italic; }
.qa-cit-quote { margin: 2px 0 0 19px; padding-left: 9px; border-left: 2px solid var(--line);
  font-size: 11.5px; line-height: 1.55; color: var(--muted); }

/* ══ 2026-10-23 UI 重设：分区标题（对照预览稿 .sec）══ */
.sec { margin: 22px 0 10px; display: flex; align-items: center; gap: 10px; }
.sec h2 { font-size: 13px; letter-spacing: .08em; text-transform: uppercase; color: var(--dim, #5b6172); }
.sec .hr { flex: 1; height: 1px; background: var(--line, #e4e7f0); }

/* ══ 2026-10-23 UI 重设：L2 行动区（对照预览稿 .fix / .fix-item / .pri / .quote / .example / .gain）══ */
.fix { background: var(--card, #fff); border: 1px solid var(--line, #e4e7f0); border-radius: 12px; padding: 4px 18px; margin: 12px 0; }
.fix-item { padding: 15px 0; border-bottom: 1px solid var(--line, #e4e7f0); }
.fix-item:last-child { border-bottom: 0; }
.fix-head { display: flex; align-items: center; gap: 10px; margin-bottom: 7px; }
.pri { font-size: 10.5px; font-weight: 800; letter-spacing: .06em; padding: 3px 9px; border-radius: 6px; color: #fff; }
.pri.now { background: var(--fixnow, #c0392b); }
.pri.next { background: var(--fixnext, #b45309); }
.pri.opt { background: var(--opt, #5b6172); }
.fix-head .t { font-weight: 700; font-size: 14.5px; color: var(--ink, #1a1d29); }
.fix-body { font-size: 13.5px; color: var(--dim, #5b6172); }
.fix-body b { color: var(--ink, #1a1d29); }
.quote { border-left: 3px solid var(--line, #e4e7f0); padding: 6px 12px; margin: 8px 0; font-size: 13px; color: var(--ink, #1a1d29); background: rgba(0,0,0,.03); border-radius: 0 8px 8px 0; }
.quote .tag { font-size: 10.5px; color: var(--dim, #5b6172); letter-spacing: .05em; display: block; margin-bottom: 2px; }
.example { border-left: 3px solid var(--ok, #158a4c); padding: 6px 12px; margin: 8px 0; font-size: 13px; background: var(--ok-bg, #e8f6ee); border-radius: 0 8px 8px 0; }
.example .tag { font-size: 10.5px; color: var(--ok, #158a4c); letter-spacing: .05em; display: block; margin-bottom: 2px; font-weight: 700; }
.gain { font-size: 12px; color: var(--dim, #5b6172); margin-top: 6px; }

/* ══ 2026-10-23 UI 重设：好在哪（对照预览稿 .good / .good li / .good .v）══ */
.good { background: var(--card, #fff); border: 1px solid var(--line, #e4e7f0); border-radius: 12px; padding: 6px 18px; margin: 12px 0; }
.good li { list-style: none; padding: 11px 0; border-bottom: 1px solid var(--line, #e4e7f0); font-size: 13.5px; display: flex; gap: 10px; }
.good li:last-child { border-bottom: 0; }
.good .v { color: var(--ok, #158a4c); font-weight: 800; }

/* ══ 2026-10-23 UI 重设：L3 折叠（对照预览稿 details.l3）══ */
.dq-l3 { margin: 14px 0; border: 1px solid var(--line, #e4e7f0); border-radius: 12px; background: var(--card, #fff); }
.dq-l3 > summary { cursor: pointer; padding: 15px 16px; font-weight: 700; font-size: 14px; color: var(--ink, #1a1d29); list-style: none; display: flex; justify-content: space-between; align-items: center; }
.dq-l3 > summary::after { content: "\25be"; color: var(--dim, #5b6172); }
.dq-l3[open] > summary::after { content: "\25b4"; }

/* 2026-10-23 UI 重设 L3：每块一行折叠，标题+状态芯片在折叠行上 */
.dq-l3-grid { display: flex; flex-direction: column; gap: 0; padding: 0; margin: 12px 0; }
.l3-block { border: 1px solid var(--border, var(--line, #e4e7f0)); border-radius: 12px; margin-bottom: 8px;
  background: var(--panel-2, var(--card, #fff)); overflow: hidden; }
.l3-block > .l3-sum { cursor: pointer; padding: 13px 16px; font-size: 13.5px; font-weight: 700;
  color: var(--ink, #1a1d29); list-style: none; display: flex; justify-content: space-between;
  align-items: center; user-select: none; gap: 10px; }
.l3-block > .l3-sum::-webkit-details-marker { display: none; }
.l3-block > .l3-sum:hover { background: color-mix(in srgb, var(--ink, #1a1d29) 3%, transparent); }
.l3-block[open] > .l3-sum { border-bottom: 1px solid var(--line, #e4e7f0); }
/* 🔴 2026-10-26（老板）：「每一个折叠的都值得补箭头，要不然用户都不知道这卡片能点开」。
   病根：上面那条 `::-webkit-details-marker { display:none }` 把浏览器自带的三角关了，
   却**从来没补 `::after`** ⇒ 这些块在 Chrome 里除了 hover 变色**没有任何"能点"的信号**。
   （`View classification evidence` / `N passages · show` 那类小折叠没被关掉，本来就有 ▶，不用补。）
   做法：**绝对定位**，不参与 flex / grid 布局 —— 否则维度行那套两列网格会被挤成三列。 */
.l3-block > .l3-sum { position: relative; padding-right: 34px; }
.l3-block > .l3-sum::after {
  content: "\25be";                 /* ▾ 收起时 */
  position: absolute; right: 14px; top: 50%;
  transform: translateY(-50%);
  font-size: 10px; line-height: 1; color: var(--muted);
  opacity: .9; pointer-events: none;
}
.l3-block[open] > .l3-sum::after { content: "\25b4"; }   /* ▴ 展开时 */
.l3-title { flex: 1; }
.l3-sum .dq-card-top { flex-shrink: 0; }
.l3-body { padding: 14px 16px; }

/* §1：结论句挪折叠行右边当状态芯片（收起也看得见） */
.l3-sum .dim-state { flex-shrink: 0; font-size: 11.5px; font-weight: 600;
  color: var(--muted); border: 1px solid var(--line); border-radius: 999px;
  padding: 2px 10px; white-space: nowrap; }

/* 🔴 2026-10-26（老板）：**诊断块** —— 每维给状态词 + 一句"缺什么"（允许换行）。
   旧样式 `.l3-sum .dim-state` 是个 nowrap 的药丸，长句会溢出 ⇒ 这里覆盖成可换行的正文。 */
.dq-dimdiag { margin-bottom: 14px; }
.dq-dimdiag > .l3-body { padding: 2px 10px 10px; }
.dq-dimdiag .l3-nested { border: 0; border-bottom: 1px solid var(--line);
  border-radius: 0; margin: 0; }
.dq-dimdiag .l3-nested:last-of-type { border-bottom: none; }
/* 🔴 2026-10-26（老板第四轮）：**两列** `名字 | 彩色芯片（靠右）`。
   第三轮的「状态词 + 组名·条数」两截被并成一串芯片 —— 状态词（Strong/Needs work/Weak）删掉，
   只留与 Changes to make 同一套组名的芯片，颜色分档：绿=没事、中性=可选、红=建议、实心红=必修。
   `Fix these →` 已删，右端不再有按钮占位。 */
.dq-dimdiag .l3-nested > .l3-sum,
.dq-dimdiag .is-flat > .l3-sum {
  display: grid; grid-template-columns: minmax(0, 1fr) auto;
  align-items: center; column-gap: 12px; padding: 11px 0;
}
.dq-dimdiag .l3-title { min-width: 0; }
/* 芯片组：永远贴右边；窄屏可以换行，但一组不拆开 */
.dq-dimdiag .dim-chips { display: flex; gap: 6px; align-items: center;
  justify-content: flex-end; flex-wrap: wrap; }
.dq-dimdiag .dim-chip { font-size: 10.5px; font-weight: 700; letter-spacing: .02em;
  padding: 2px 9px; border-radius: 999px; border: 1px solid; white-space: nowrap;
  line-height: 1.6; }
/* ✓ nothing to do —— 绿（这一维没事做） */
.dq-dimdiag .dim-chip.ok { color: var(--green, #4ade80);
  border-color: color-mix(in srgb, var(--green, #4ade80) 45%, transparent);
  background: color-mix(in srgb, var(--green, #4ade80) 10%, transparent); }
/* Optional (n) —— 中性灰蓝（看见了可以不管） */
.dq-dimdiag .dim-chip.opt { color: var(--muted); border-color: var(--line);
  background: transparent; font-weight: 600; }
/* Fill in (n) —— A6b：填空题单列，虚线边框表示"这条要你自己填"，跟 Optional 的实线中性区分开 */
.dq-dimdiag .dim-chip.fill { color: var(--muted); border: 1px dashed var(--line);
  background: transparent; font-weight: 600; }
/* Suggested (n) —— 红描边（该改） */
.dq-dimdiag .dim-chip.sug { color: var(--red, #f87171);
  border-color: color-mix(in srgb, var(--red, #f87171) 55%, transparent);
  background: color-mix(in srgb, var(--red, #f87171) 10%, transparent); }
/* Blocking (n) —— 红到底（整圈实边 + 更浓的红底；不改不能发，最重的一档）。
   ⚠️ 不用"实心红底 + 白字"：暗色主题 `--red: #ff7a7a` 是浅红，白字压不住（对比度 ~2.3:1）。 */
.dq-dimdiag .dim-chip.block { color: var(--red, #ff7a7a);
  border-color: var(--red, #ff7a7a);
  background: color-mix(in srgb, var(--red, #ff7a7a) 26%, transparent); }
/* 这一维没评（类型不查 / 判不出）—— 灰，不表示好坏 */
.dq-dimdiag .dim-chip.na { color: var(--muted); border-color: var(--line);
  background: transparent; font-weight: 600; }
/* 🔴 2026-10-26（老板）：**没东西可看就不给箭头** —— 无达标明细的维度渲染成纯行：
   同一个壳（边框/内边距一致），但没有 marker、不可点、没有 body。 */
.dq-dimdiag .l3-nested.is-flat { cursor: default; }
.dq-dimdiag .is-flat > .l3-sum::-webkit-details-marker { display: none; }
.dq-dimdiag .is-flat > .l3-sum { list-style: none; }
.dq-dimdiag .is-flat > .l3-sum:hover { background: transparent; }
/* 2026-10-26（老板）：维度行的箭头 —— 右端已经被彩色芯片占了，压上去就糊成一团
   ⇒ 箭头放**左边**（`▾ Purpose fulfillment … Optional (1)`），全部行统一左缩 16px 保持对齐；
   纯行（`.is-flat`，不可点）**不给箭头**。 */
.dq-dimdiag .l3-nested > .l3-sum,
.dq-dimdiag .is-flat > .l3-sum { padding-left: 16px; }
/* 🔴 2026-10-29：维度行下面多了「一句总结」之后，行高变成两行，
   原来 `top:50%` 会把箭头钉在**两行中间**（截图里那个孤零零的小点）。
   改成贴着**第一行**（标题）垂直居中：padding-top 11px + 标题行高的一半。 */
.dq-dimdiag .l3-nested > .l3-sum::after { right: auto; left: 0;
  top: 17px; transform: none; }
.dq-dimdiag .is-flat > .l3-sum::after { content: none; }
/* 全达标维度：不给空块，只给一行交代（明细在顶层 What's working） */
.dim-allmet { padding: 6px 2px 10px; font-size: 12.5px; color: var(--green, #4ade80); }
/* 🔴 2026-10-26（老板：「Suggested 跟 optional 本身就属于 content，放到一张卡片」）——
   Content quality 卡的第二段：一条细分割线 ＋ 一个小段标 ＋ 两组条目。
   原来它是一整块顶层 `CHANGES TO MAKE`（自带大标题），现在并进卡里，顶层少一个标题。 */
.dq-dimdiag .dq-seg { margin: 12px 0 2px; padding-top: 12px; border-top: 1px solid var(--line); }
.dq-seg-label { font-size: 10.5px; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; color: var(--muted); margin: 0 0 4px; }
.dq-grades-incard .dq-fixlist-head:first-child { margin-top: 8px; }
/* 2026-10-26：随诊断块定稿删除（判不出只在 Evaluation details） */
/* 2026-10-26：`.dim-fixjump`（Fix these →）已删，样式一并清掉 */
/* 2026-10-26：`.dim-word`（Strong/Needs work/Weak 状态词）已删 —— 老板第四轮：状态词不要了，
   一行只留维度名 + 靠右的彩色芯片（`.dim-chip`）。
   同轮删除：`.dq-dimdiag .l3-sum .dim-state` 及其 `b` 覆盖（这一行不再印组名·条数文字）。 */
/* 2026-10-26：随诊断块定稿删除（判不出只在 Evaluation details） */

/* §4：Content quality 内的三维度子折叠（嵌套层级） */
.l3-nested { margin: 10px 0 0; border: 1px solid var(--line); border-radius: 10px; }
.l3-nested > .l3-sum { padding: 11px 14px; font-size: 12.5px; font-weight: 700;
  background: var(--bg-soft, rgba(255,255,255,0.02)); }
.l3-nested > .l3-body { padding: 12px 14px; }
.l3-nested .dim-para-title { font-size: 11.5px; }
.l3-nested .dim-row { padding: 10px 0; }


/* 2026-10-23 L3 拆叠：details 全部换成 div，内容直接平铺 */
.dq-card > .dq-card-top,
.dq-card > .dq-card-line,
.dq-card > .dq-card-fact,
.dq-card > .dq-card-summary,
.dq-card > .dq-card-split,
.dq-card > .dq-card-note,
.dq-card > .ev-block,
.dq-card > .dq-tbl-wrap,
.dq-card > .dq-grades,
.dq-card > .dq-note { padding: 0 15px; margin: 0; }
.dq-card > .dq-card-top { padding: 13px 15px 0; }
.dq-card > .dq-card-line { padding: 5px 15px 0; }
.dq-card > .dq-card-fact,
.dq-card > .dq-card-summary,
.dq-card > .dq-card-split,
.dq-card > .dq-card-note { padding: 3px 15px 0; }
.dq-card > .ev-block,
.dq-card > .dq-tbl-wrap,
.dq-card > .dq-grades,
.dq-card > .dq-note { padding: 8px 15px 13px; }

/* dim-block 拆叠后：不再折叠，内容直接平铺 */


/* details-panel 拆叠后：标题行 */



/* ev-sub 拆叠后：不再折叠，内容直接平铺 */




.qa-cn { display: block; font-weight: 500; font-size: 11.5px; color: var(--dim, #5b6172); margin-top: 3px; }
.qa-why { display: block; margin-top: 8px; font-size: 11.5px; color: var(--blue, #7c9fff); text-decoration: none; }
.qa-why:hover { text-decoration: underline; }
.cta { margin-top: 22px; background: var(--card, #fff); border: 1px solid var(--line, #e4e7f0); border-radius: 12px; padding: 16px 18px; }
.cta .q { font-size: 13px; color: var(--dim, #5b6172); margin-bottom: 10px; }
.cta .btns { display: flex; gap: 8px; flex-wrap: wrap; }
.btn { border: 1px solid var(--line, #e4e7f0); background: transparent; color: var(--ink, #1a1d29); border-radius: 8px; padding: 7px 15px; font-size: 13px; cursor: pointer; }
.btn.primary { background: var(--accent, #5b5bd6); border-color: var(--accent, #5b5bd6); color: #fff; }
.note { margin-top: 10px; font-size: 12px; color: var(--dim, #5b6172); }

/* ══ A-2 precedence（2026-10-27，执行书第 1 步）═════════════════════════════════
   只在「存在篇章级 0 档」时出现两样东西：
     ① `Fix this first` 段标 + 一句说明（它上面那 / 下面那条要先解决）
     ② 其余条目收进 `.dq-held` 折叠（一条不删，条数印在 summary）
   依据：Flower et al. 的 precedence（🟠 二手）—— 见执行书 §0.15。 */
.dq-first-label { margin: 10px 0 2px; color: var(--text); }
.dq-grades-incard .dq-first-label:first-child { margin-top: 2px; }
.dq-first-note {
  font-size: 12px; line-height: 1.45; color: var(--muted);
  margin: 0 0 8px; max-width: 62ch;
}
.dq-held {
  margin: 10px 0 2px; border: 1px solid var(--line); border-radius: 10px;
}
.dq-held > .dq-held-sum {
  cursor: pointer; padding: 8px 12px; border-radius: 10px;
  font-size: 12.5px; font-weight: 600; color: var(--muted);
  list-style: none;
}
.dq-held > .dq-held-sum::-webkit-details-marker { display: none; }
.dq-held > .dq-held-sum::after {
  content: "\25be"; float: right; opacity: .65; font-weight: 400;
}
.dq-held[open] > .dq-held-sum::after { content: "\25b4"; }
.dq-held-body { padding: 0 12px 10px; }

/* ══ C-1 Unaddressed（2026-10-27，执行书第 2 步）════════════════════════════════
   92 条待改既没有可粘句子、也没有方向。Code Review Stage-2 把这种状态叫 `Unaddressed`
   （见执行书 §0.10）—— 它是**一种合法状态**，不是"缺数据"。
   小标用点线（跟 Fill in 的实线、Whole piece 的虚线三者可区分）。 */
.dq-grain-chip.dq-unaddressed-chip { border-style: dotted; }
.dq-rowsum-one.dq-unaddressed-note { color: var(--muted); opacity: .9; }

/* D-1 not_graded（2026-10-27，执行书第 3 步）：有检查没判出来时的一句交代（不许当成"算过了"） */
.dq-note.dq-ungraded-note { color: var(--muted); font-style: italic; }

/* B-1 标签分层（2026-10-27，执行书第 6 步）：四个互斥小标，只标不计数
   Reword（改词/改句，Bridwell 的"好文章"动作）· Needs source（要作者去查资料，Hayes 的 search） */
.dq-grain-chip.dq-reword-chip { border-style: solid; font-weight: 600; }
.dq-grain-chip.dq-source-chip { border-style: dashed; font-weight: 600; }

/* C-2 / C-3 grain 出口（2026-10-27，执行书第 7 步）：段落级也要说清"改这段，不是改这句" */
.dq-grain-chip.dq-para-chip { border-style: dotted; }
.dq-rowsum-one.dq-grain-note { color: var(--muted); }

/* ══ 第 7 步补漏（2026-10-27）：维度区（What to improve）也要说清粒度 ══════════════
   第一版只给清单行加了说明，`renderDim` 里 69 条（paragraph 46 + document 23）零说明。
   `.dim-meta` 本身没有样式定义（历史遗留），所以这里显式给一份低调样式，
   跟清单行的 `.dq-grain-note` 视觉等重（都是补充说明，不是改法正文）。 */
.dim-meta.dim-grain-note {
  font-size: 12px; line-height: 1.45; color: var(--muted);
  margin: 2px 0 6px; max-width: 62ch;
}

/* ══ Hattie「Feed Up」（2026-10-27 · 项 1.19）：这类要求文章做到什么 ══════════════
   原来卡面只有 gap（差在哪）和 fix（怎么改），没有"目标是什么" ⇒ 用户不知道为什么该照做。
   两处落点（清单行 `_renderRow` ／ 维度区 `renderDim`）共用这一个类，视觉等重：
   都是补充说明，不是改法正文，也不是判定结论。
   ⚠️ 用 `--muted` + 稍浅，压在 gap 之上但比 gap 弱 —— 它是"背景要求"，不是"你的问题"。 */
.dq-req-note {
  font-size: 12px; line-height: 1.45; color: var(--muted);
  margin: 2px 0 6px; max-width: 62ch; opacity: .85;
}
/* 维度区那条多一层 `.dim-meta`，两者同时存在时以本条为准（不叠加出双倍外边距） */
.dim-meta.dq-req-note { margin: 2px 0 6px; }

/* ══ B-2（2026-10-27 执行书第 6 步）：Changes to make 段标下一句层级说明 ══════════
   一句到底，不做图例、不占卡片。跟其他段标补充句同一视觉等重。 */
.dq-seg-note {
  font-size: 12px; line-height: 1.45; color: var(--muted);
  margin: -2px 0 8px; max-width: 62ch;
}

/* ══ D-2 Detection only（2026-10-27，执行书第 8 步救回的那一半）═════════════════
   比 Unaddressed 更弱一档：连"问题在哪"都说不清（`gap` 为空）。
   边框用 double（Unaddressed 是 dotted、Fill in 是 solid、粒度标是 dashed）——
   四种可凭边框样式分辨，不靠颜色。 */
.dq-grain-chip.dq-detection-chip { border-style: double; }

/* ── 🔴 2026-10-29（老板令）：4 组之上再加一层，分「措辞语义 / 格式痕迹」两块 ──
   依据 Wikipedia《Signs of AI writing》：em dash / 粗体 / 标题归 `Style`（排版）组，
   句式与词汇归 `Language and grammar` 组 —— 本仓 mechanics 与前者同域。
   块标题比组标题大一号，两块之间用一条细线分开（不靠颜色分辨）。 */
.dq-tone-block { margin: 18px 0 0; padding: 0 0 2px; }
.dq-tone-block:first-child { margin-top: 4px; }
.dq-tone-block + .dq-tone-block { border-top: 1px solid var(--line, rgba(127,127,140,.22));
  padding-top: 14px; }
.dq-tone-block-hd { font-size: 12.5px; font-weight: 800; letter-spacing: .01em;
  color: var(--text); margin: 0 0 2px; }
.dq-tone-block-hint { font-size: 11.5px; color: var(--muted); line-height: 1.5; margin: 0 0 4px; }
.dq-tone-block .dq-tone-group { margin: 11px 0 2px; }
.dq-tone-block .dq-tone-group:first-of-type { margin-top: 6px; }

/* ── 🔴 2026-10-29（S1+S2）：Style 块分组 + 严重度小标 ─────────────────────
   46 条 pattern 原来平铺一张表，机械项（数破折号）和判断题（你不够肯定）长得一样。
   现在按「用户要动什么」分 4 段；must_fix（出现即错）那一行带一枚小标。 */
.dq-tone-group { margin: 14px 0 2px; }
.dq-tone-group:first-child { margin-top: 4px; }
.dq-tone-group-hd { font-size: 11px; font-weight: 800; letter-spacing: .07em;
  text-transform: uppercase; color: var(--text); margin: 0 0 3px; }
.dq-tone-group-hint { font-size: 11.5px; color: var(--muted); line-height: 1.5; margin: 0 0 7px; }
.dq-tone-must { display: inline-block; margin-left: 6px; font-size: 8.5px; font-weight: 900;
  letter-spacing: .06em; color: #a8332b; background: rgba(200,60,50,.12);
  border: 1px solid rgba(200,60,50,.38); border-radius: 4px; padding: 1px 5px;
  vertical-align: 1px; white-space: nowrap; }
html[data-theme="light"] .dq-tone-must { color: #8f2a23; background: rgba(200,60,50,.09); }

/* 🔴 2026-10-29（老板令）：**整张评分卡唯一的免责声明**，固定在卡尾。
   原来散在 5 处（Style 块首 / evidence 三个子块 / Evaluation details 两个面板），
   同一件事被反着说好几遍。现在只留这一条，所以它要读得清：正文色、不缩成小灰字。 */
.dq-disclaimer { margin: 22px 0 4px; padding-top: 14px;
  border-top: 1px solid var(--line); font-size: 12.5px; line-height: 1.6;
  color: var(--muted); }

/* 🔴 2026-10-29（老板令）：维度行直接印一句总结（不再靠点开）。
   ⚠️ 这里**是 grid 不是 flex**（`.dq-dimdiag .l3-nested > .l3-sum` 定义了两列
   `minmax(0,1fr) auto`）。第一版按 flex 写了 `flex:1 0 100%`，结果被塞进第二列、
   和维度名**叠在一起**。正确做法是让它跨两列 ⇒ 自动落到第二行。 */
.dq-dimdiag .l3-sum .dim-summary { grid-column: 1 / -1; margin: -4px 0 0;
  font-size: 12.5px; line-height: 1.55; color: var(--muted); }

/* ── 下载报告（2026-10-29，老板令：免费、含 Style 明细）────────────────────
   按钮放在报告头下面，低调靠右 —— 它是个次要动作，不能跟"能不能发"抢注意力。 */
/* 2026-10-29（美化第 9 步）：Download 并进报告头眉标行右侧（原来自成一行、左右全空） */
.dq-dl { display: flex; margin: 0 0 0 auto; padding: 0; }
.dq-dl-btn { font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer;
  padding: 7px 13px; border-radius: 8px; color: var(--text);
  border: 1px solid var(--line); background: transparent; }
.dq-dl-btn:hover { border-color: color-mix(in srgb, var(--text) 35%, transparent);
  background: color-mix(in srgb, var(--text) 5%, transparent); }

/* 纸面专用的品牌抬头 —— 屏幕上永远不出现（2026-10-29 老板：位置居中放大） */
.dq-printhead { display: none; }

/* ══════ 美化 P0（2026-10-29 · 见 `_research/_评分端美化_执行单_20261029.md`）══════
   规矩：字号 7 级（11/12/13.5/16/22/34/56）／间距 6 档／状态色只用于状态／
   边框只留一层。本节**只覆盖样式**，不改任何判定与文案。                        */
:root{
  --r11:11px; --r12:12px; --r135:13.5px; --r16:16px; --r22:22px; --r34:34px; --r56:56px;
  --rs4:4px; --rs8:8px; --rs12:12px; --rs16:16px; --rs24:24px; --rs32:32px;
}

/* ① 分数区：78 独占第一行，两个轴降级成两张等宽小卡（原来三个数字挤一行、视觉同级） */
.fr-score-row{ display:grid; grid-template-columns:1fr 1fr; gap:12px; align-items:end;
  margin-bottom:12px; }
.fr-score-main{ grid-column:1 / -1; display:flex; align-items:baseline; gap:8px; }
.fr-score-num{ font-size:var(--r56); letter-spacing:-.03em; }
.fr-score-den{ font-size:var(--r22); }
.fr-score-row .fr-axis-inline{ display:block; border:1px solid var(--line);
  border-radius:10px; padding:9px 12px; min-width:0;
  background:color-mix(in srgb, var(--text) 3%, transparent); }
.fr-axis-inline .fr-axis-name{ display:block; width:auto; font-size:var(--r11); font-weight:700;
  letter-spacing:.08em; text-transform:uppercase; color:var(--muted); }
.fr-axis-inline b{ font-size:var(--r16); margin-left:0; }
.fr-axis-inline .fr-axis-na{ font-size:var(--r135); }
.fr-axis-inline .fr-axis-tag{ width:auto; border:0; background:none; padding:0;
  font-size:var(--r12); font-weight:600; color:var(--muted); }

/* ⑥ Style 表：三张表**共用一套列宽**，表头只在最上面出一次
   （原来 Wording / Formatting 各起一张表、各自重复一遍表头，一屏里出现 3 次）。
   不合并 DOM 的做法：`table-layout:fixed` + 同一套列宽 ⇒ 拆表也对得齐，只是把后两张的表头藏掉。 */
.dq-tbl-wrap table.dq-tbl{ table-layout:fixed; width:100%; }
.dq-tbl-wrap table.dq-tbl th:nth-child(1),
.dq-tbl-wrap table.dq-tbl td:nth-child(1){ width:31%; }
.dq-tbl-wrap table.dq-tbl th:nth-child(2),
.dq-tbl-wrap table.dq-tbl td:nth-child(2){ width:52px; }
.dq-tbl-wrap table.dq-tbl th:nth-child(3),
.dq-tbl-wrap table.dq-tbl td:nth-child(3){ width:32%; }
.dq-tbl-wrap table.dq-tbl thead{ display:none; }
/* 只有 JS 打了 `dq-tbl-first` 标记的那张表出头（`:first-of-type` 在这里不靠谱，见 qaTable 注释） */
.dq-tbl-wrap table.dq-tbl.dq-tbl-first thead{ display:table-header-group; }

/* ⑦ Style / Evidence 折叠行右侧那颗「状态词」降级成元信息文字。
   它是**说明**（"8 families · 12 hits" 这一档），不是可点的状态药丸；
   原来 `Some patterns` 用绿色、`3 need a source` 用橙色 —— 而绿色在这张卡里
   已经表示"通过"、橙色表示"建议改"，同一屏里同一个颜色指两件事。 */
.l3-sum .dq-card-state{ border:0; background:none; padding:0;
  font-size:var(--r12); font-weight:600; color:var(--muted); letter-spacing:0; }

/* ⑦ Style / Evidence 折叠行右侧那颗「状态词」降级成元信息文字。
   它是**说明**（"8 families · 12 hits" 这一档），不是可点的状态药丸；
   原来 `Some patterns` 用绿色、`3 need a source` 用橙色 —— 而绿色在这张卡里
   已经表示"通过"、橙色表示"建议改"，同一屏里同一个颜色指两件事。 */
.l3-sum .dq-card-state{ border:0; background:none; padding:0;
  font-size:var(--r12); font-weight:600; color:var(--muted); letter-spacing:0; }

/* ⑧ Next steps（2026-10-30 重做）：白卡细边 + **说明在前、按钮贴底**。
   原来三张卡是灰底、DOM 里按钮排在说明文字之前 ⇒ 卡片高度被撑开、按钮悬在中间。
   做法：
     · 面板 flex 列 + 白底细边；
     · `.score-rewrite-zone{ display:contents }` —— 把改写区**拆平**，让它的两个子节点
       （hint / button）直接参与父级 flex 排序，否则按钮和说明被绑在同一个盒子里排不动；
     · 说明 order:1、按钮 order:2 + `margin-top:auto` ⇒ 说明贴着标题、按钮统一贴底。
   位置、埋点、文案一个字没动。 */
.score-next .score-bottom{ display:grid; grid-auto-flow:column; grid-auto-columns:1fr;
  gap:12px; align-items:stretch; }
.score-next .score-bottom-panel{ display:flex; flex-direction:column;
  background:var(--card, #fff); border:1px solid var(--line); border-radius:var(--r12);
  padding:16px; }
.score-next .score-bottom-h{ order:0; margin-bottom:8px; }
.score-next .score-rewrite-zone{ display:contents; }
.score-next .score-rewrite-zone .score-rewrite-hint{ order:1; margin:0;
  font-size:var(--r12); color:var(--muted); }
.score-next .score-rewrite-zone .score-rewrite-btn{ order:2; margin-top:auto;
  align-self:flex-start; background:transparent; color:var(--ink);
  border:1px solid var(--border, var(--line)); box-shadow:none; font-weight:700; }
.score-next .score-rewrite-zone .score-rewrite-btn:hover{
  background:color-mix(in srgb, var(--text) 5%, transparent); filter:none; transform:none; }
.score-next .score-panel-note{ order:1; margin:0; font-size:var(--r12); color:var(--muted); }
.score-next .score-bottom-panel > .score-gen-btn{ order:2; margin-top:auto;
  align-self:flex-start; }
.score-next .score-pubwrap{ order:2; margin-top:auto; display:flex; flex-wrap:wrap; gap:8px; }
.score-next .score-pubwrap .score-wouldpub-guide{ order:-1; flex:1 1 100%; margin:0 0 4px;
  font-size:var(--r12); color:var(--muted); }

/* ⑬ Changes to make：段标从小 eyebrow 改成 16px 粗标题，计数变右侧橙色药丸。
   JS 把 `.dq-fixlist-head.dq-fixlist-must` 整块搬进 `.dq-seg-head`（沿用原文案与条数）。 */
.dq-seg-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
.dq-seg-head .dq-seg-label{ font-size:var(--r16); font-weight:800; text-transform:none;
  letter-spacing:-.01em; color:var(--ink); margin:0; }
.dq-seg-pill{ margin:0; padding:0; border:0; background:none; }
.dq-seg-pill b{ display:inline-block; font-size:var(--r12); font-weight:700;
  color:var(--sug, #9a4a12); border:1px solid currentColor; border-radius:999px;
  padding:2px 10px; line-height:1.6; }

/* ② 三条直答：不再拉等高（q1 原来被拉到和 q3 一样高，中间一大片白） */
.qa{ align-items:start; }

/* ③ 维度行：名字加粗、总结句独立、行距松开（原来三行糊成一块） */
.dq-dimdiag .l3-nested > .l3-sum{ padding:14px 0; }
.dq-dimdiag .l3-nested > .l3-sum .l3-title{ font-size:15px; font-weight:800; }
.dq-dimdiag .dim-summary{ font-size:var(--r135); line-height:1.6; margin-top:6px;
  color:var(--muted); }

/* ④ 改动清单：去掉最外层那个绿框（原来 行→绿框→浅框 三层），只留 `.dim-fix-ctx` 一层 */
.dim-fix{ border-color:transparent; background:transparent; }
.dim-fix-ctx{ border-left-width:2px; padding:10px 14px;
  background:color-mix(in srgb, var(--text) 4%, transparent); }

/* ⑤ 正文行高与段落节奏统一 */
.qa-body, .dim-summary, .dq-card-line{ line-height:1.6; }

/* ══════ 2026-10-30 补回（上一轮"替换 ⑧"把这几块一起删了，事故已记档）══════
   以后新增规则一律**追加到本段之前**，不再用"从某处替换到另一处"的范围替换 ——
   那种写法会把夹在中间的规则静默吃掉。                                          */

/* ⑩ 去掉每行重复的 `Suggested` 芯片：组头已经写着 Suggested (n)，每行再挂一个是同一句话说两遍。
   只藏 rank 1/2/5（Suggested 组）；Blocking(0) 与 Can't assess(3/6) 是真分类信息，保留。 */
.dq-grade-fix.dq-fix-1, .dq-grade-fix.dq-fix-2, .dq-grade-fix.dq-fix-5{ display:none; }

/* ⑪ 报告头信息行：左标签 + 右内容两列（原来"标签在上、内容在下"，三行糊成一段） */
.am-row{ display:grid; grid-template-columns:104px minmax(0,1fr); gap:12px;
  margin:0; padding:10px 0; border-top:1px solid var(--line); }
.am-row:first-of-type{ border-top:0; }
.am-row-label{ font-size:var(--r11); font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--muted); padding-top:2px; }
.am-row-body{ color:var(--ink2); line-height:1.6; }

/* ⑫ 文章类型：不再是独立卡片，是挂在总分行上的芯片（JS 已把 .am-chips 搬进 .fr-score-main） */
.fr-score-main{ flex-wrap:wrap; align-items:center; }
.fr-score-main .am-chips{ margin:0 0 0 16px; padding:0; border:0; background:none;
  display:inline-flex; flex-wrap:wrap; gap:8px; }
.fr-score-main .am-chips::before{ content:none; }
.fr-score-main .am-chip,
.fr-score-main .am-chip.main,
.fr-score-main .am-chip.tag,
.fr-score-main .am-chip.soft{ border:1px solid var(--line); border-radius:999px;
  padding:3px 11px; font-size:var(--r12); font-weight:600; color:var(--ink2);
  background:color-mix(in srgb, var(--text) 3%, transparent); }
.fr-score-main .am-chip-prefix{ display:none; }

/* ⑭ Style & AI tone 的两级标题：
   块级（Wording & meaning / Formatting & traces）= 16px 粗正文标题；
   组级（Sentence patterns / Word choice / …）= 11px 大写小标；
   两句 hint 统一 12px 灰。原来三级标题字号几乎一样，读不出层级。 */
.dq-tone-block-hd{ font-size:var(--r16); font-weight:800; letter-spacing:-.01em;
  text-transform:none; color:var(--ink); }
.dq-tone-block-hint{ font-size:var(--r12); color:var(--muted); margin:2px 0 14px; }
.dq-tone-group-hd{ font-size:var(--r11); font-weight:800; letter-spacing:.1em;
  text-transform:uppercase; color:var(--ink2); }
.dq-tone-group-hint{ font-size:var(--r12); color:var(--muted); margin:2px 0 8px; }

/* ⑮ 免责句移到卡片最末（JS 已挪）：它现在是 `.score-card` 的直接子节点，
   不再在 `.dq-framework` 里 ⇒ 需要自己撑起上下留白与那条分隔线。 */
.score-card > .dq-disclaimer{ margin:0; padding:16px 16px 18px;
  border-top:1px solid var(--line); }

/* ══════ 字号归一（2026-10-30 实测）══════════════════════════════════════════
   实测整卡有 **19 种字号**，规格只有 7 档（11 / 12 / 13.5 / 16 / 22 / 34 / 56）。
   归并规则（左=实测值 → 右=归到哪一档，括号是该值出现的元素数）：

     56 span.fr-score-num            → 56   ✓
     22 span.fr-score-den            → 22   ✓
     20 div.ev-stat-num              → 16   （统计数字不该比区块标题还大）
     18 span.badge / details-sum-num → 16
     15 span.l3-title                → 16   （维度名/区块名统一一档）
     14.4 基线（.dq-framework 等 187 个） → 13.5（`.score-card` 设基线，一次收掉）
     13 div.am-row-body / dq-fixlist-head / dim-wm-body → 13.5
     12.5 button.dq-dl-btn / fr-axis-inline / summary   → 12
     12.48 div.score-industry-line   → 12
     11.5 qa-cit-quote / qa-why      → 12
     11.2 score-assess-eyenote       → 11
     10.88 score-assess-eyebrow      → 11
     10.5 dq-grain-chip / dim-fix-label / chip-act → 11
     10  dim-pass-no                 → 11
     9.5 chip-kept                   → 11
   ⇒ 19 种压到 7 种。只动字号，不动任何字重/颜色/文案。                                */
.score-card{ font-size: var(--r135); }
.score-card .ev-stat-num, .score-card .details-sum-num,
.score-card .badge, .score-card .l3-title{ font-size: var(--r16); }
.score-card .am-row-body, .score-card .dq-fixlist-head,
.score-card .dim-wm-body{ font-size: var(--r135); }
.score-card .dq-dl-btn, .score-card .fr-axis-inline,
.score-card .score-industry-line, .score-card .qa-cit-quote,
.score-card .qa-why, .score-card .qa-cit-note{ font-size: var(--r12); }
.score-card .score-assess-eyenote, .score-card .score-assess-eyebrow,
.score-card .dq-grain-chip, .score-card .dim-fix-label,
.score-card .chip-act, .score-card .dim-pass-no,
.score-card .chip-kept{ font-size: var(--r11); }

/* 字号归一 · 第二遍（第一遍被老的"高特异性规则"打回去了：15/13/12.5/11.5/10.5 仍在）。
   这一层**故意用 `!important`**：它是一条"归一化"总闸，必须盖过各处的历史写法；
   作用域仍锁在 `.score-card` 内，不影响页面其它部分。                                */
.score-card .dim-fix-body, .score-card .dim-pass-quote, .score-card .details-ind-quote,
.score-card .details-std-head, .score-card .am-quote, .score-card .dq-td-fix,
.score-card .l3-cnt, .score-card .dim-fix-slot, .score-card .ev-why,
.score-card .dim-para-title, .score-card .dim-ev-dup,
.score-card summary{ font-size: var(--r12) !important; }
.score-card .details-ind-ask, .score-card .details-dim-name, .score-card .ev-row,
.score-card .ev-mark, .score-card .ev-label, .score-card .ev-sub-title{ font-size: var(--r135) !important; }
.score-card th, .score-card .dim-wm-label{ font-size: var(--r11) !important; }
.score-card .dq-dimdiag .l3-title{ font-size: var(--r16) !important; }

/* ══════ 颜色归一（2026-10-30 实测）══════════════════════════════════════════
   实测整卡 9 种文字色，两处真问题：

   ① **两个几乎一样的黑并存**：`rgb(27,27,27)`（238 处，来自 score.css 的 body 色 `#1b1b1b`）
      与 `rgb(26,26,26)`（174 处，token `--text`）。肉眼分不出，但它的代价是
      "同一张卡上有两种正文色" —— 一旦以后调其中一个，另一个不会跟着变。
      ⇒ `.score-card` 定一个正文色（继承的就全跟过来），显式写了老色的那批再压一道。

   ② **暖色三种并存**：琥珀 `#b45309`(21) / 黄 `#fbbf24`(7) / 橙 `#9a4a12`(1)。
      三种暖色在同一屏里分不清轻重 ⇒ 收到两档：
        · **warn（要注意）** = 琥珀 `#b45309`
        · **sug（建议改）** = 橙 `#9a4a12`
      黄 `#fbbf24` 并入琥珀（它在 `.chip-act` 与 `.badge` 上，语义本来就是"注意"）。       */
.score-card{ color: var(--text, #1a1a1a); }
.score-card .dq-td-name, .score-card .dq-td-num, .score-card .dq-td-quote,
.score-card .dq-td-fix, .score-card .details-ind-ask,
.score-card .details-ind-row, .score-card .details-ind-line,
.score-card .dim-meta, .score-card .details-std-row{ color: var(--text, #1a1a1a); }
.score-card .chip-act{ color: #b45309; }
.score-card .badge.warn{ color: #b45309; }

/* ══════ 区块间距归一（2026-10-30 实测）══════════════════════════════════════
   实测区块之间的纵向间距是 **14 / 12 / 8 / 24 混用**：
     #dq-score mb=14 · #dq-answers mt=12/mb=12 · .dq-dimdiag mb=14
     #dq-style / #dq-evidenceas / #dq-details mb=8 · .score-next mt=24
   相邻两块的 margin 还会**折叠**（取大的），所以实际间隙既不是 14 也不是 12。

   ⇒ 只收"区块之间"的节奏，**行内那些 2/3/5px 的微调一律不动**（它们是逐个元素调过的）：
     · 区块与区块之间统一 **16**
     · Next steps 之前留 **24**（它是另一个区，跟"读报告"不是同一件事）
   这样所有块间距只剩两档，且都落在 4/8/12/16/24/32 的梯子上。                          */
.score-card #dq-score, .score-card #dq-answers, .score-card .dq-dimdiag,
.score-card #dq-style, .score-card #dq-evidenceas, .score-card #dq-details{
  margin-top: 0; margin-bottom: var(--rs16); }
.score-card .score-next{ margin-top: var(--rs24); }

/* ── 打印 / 另存为 PDF ─────────────────────────────────────────────────────
   只印卡片本身：页面其它部分（导航、页脚、旧卡、弹窗）全部隐藏。
   用 `visibility` 而不是 `display:none`：前者保留布局盒，配合下面把卡片
   绝对定位到左上角，就不会留下一个大空洞。
   ⚠️ 打印前 JS 会把主题切成 light（暗色打印是一片黑底）并展开所有折叠。 */
@media print {
  @page { margin: 12mm 12mm; }
  html, body { background: #fff !important; }

  body * { visibility: hidden !important; }
  .score-card, .score-card * { visibility: visible !important; }
  .score-card { position: absolute !important; left: 0 !important; top: 0 !important;
    width: 100% !important; max-width: none !important; margin: 0 !important;
    border: 0 !important; box-shadow: none !important; }

  /* 屏幕上才需要的动作，一律不进纸面 */
  .dq-dl, .score-wouldpub, .score-cta, .score-recipe,
  .dq-copy-btn, .buy-modal, .auth-modal { display: none !important; }

  /* 折叠箭头在纸上没有意义 */
  .score-card summary::after, .score-card summary::marker { content: none !important; }

  /* 🔴 2026-10-29（老板：PDF 中间空白太多）：**只给"小条目"加不许切断**。
     原来把 `.l3-block / .qa-block / .details-panel` 这些**很高的整块**也标了 avoid，
     一块放不下就整体被推到下一页 ⇒ 上一页剩下大半个空白。
     高块必须允许跨页切断，只有行级/表格行级才不许切。 */
  .dim-row, .dq-fix, .dq-tbl tr, .ev-sub, .pub-block { break-inside: avoid; page-break-inside: avoid; }

  /* 纸面抬头：居中放大 */
  .dq-printhead { display: block; text-align: center; margin: 0 0 16px; }
  .dq-ph-brand { font-size: 22px; font-weight: 800; letter-spacing: .01em; color: #111; }
  .dq-ph-meta { font-size: 11.5px; color: #666; margin-top: 3px; }

  /* 老板令：「Next steps」那一段（Fix the phrasing / Re-score / Your call）不进纸面 ——
     它全是"下一步在网页上做什么"的动作入口，打印出来没有意义。 */
  .score-next { display: none !important; }

  /* 卡片头在换页时不重复，但别被切断 */
  .score-head, .dq-card-top { break-after: avoid; page-break-after: avoid; }

  a { text-decoration: none !important; color: inherit !important; }
}

/* ══ Word-level（词级替换）· 2026-11-02 ══════════════════════════════════════
   老板令：「Changes to make 下面跟 optional 一样，做一个词级的」。
   与 Optional 同一种折叠形态（复用 `.l3-block.dq-opt-fold`），这里只补行内样式。
   一行 = 原文（划掉） → 改后（绿） ｜ 一句为什么。
   ⚠️ 不用红色：红色在这张卡里等于"错/阻断"，而词级替换只是"换个说法"。 */
.dq-wl-row {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px;
  padding: 7px 0; border-top: 1px dashed var(--line, #e4e7f0); font-size: 13px;
}
.dq-wl-row:first-child { border-top: 0; }
.dq-wl-before {
  color: var(--muted, #6b7280); text-decoration: line-through;
  text-decoration-thickness: 1px; text-decoration-color: color-mix(in srgb, var(--muted, #6b7280) 55%, transparent);
}
.dq-wl-arw { color: var(--muted, #6b7280); font-size: 12px; }
.dq-wl-after {
  color: var(--good, #0f7b4f); font-weight: 600;
  background: color-mix(in srgb, var(--good, #0f7b4f) 9%, transparent);
  padding: 0 5px; border-radius: 5px;
}
.dq-wl-why { color: var(--muted, #6b7280); font-size: 12px; flex-basis: 100%; }

/* 词级行：只标变化的那几个词（前后缀留在原位），所以这里要压掉 del/ins 的默认妆。
   组头右侧有绝对定位的折叠箭头（`.l3-block > .l3-sum::after`），说明文字要留出避让位。 */
.dq-wl-fold > .l3-sum { padding-right: 30px; }
.dq-wl-seg { color: inherit; }
.dq-wl-after { text-decoration: none; }
.dq-wl-before { background: transparent; padding: 0; }

/* ══ 示例值标记（`{{...}}`）· 2026-11-02 ═════════════════════════════════════
   写手编的值必须**看得出来是编的**：标黄 + 块尾一句免责。
   ⚠️ 用黄不用绿：绿色在这张卡里 = "这是给你的新内容"，而示例值恰恰**不能**直接收下。
   ⚠️ 与 `.dim-fix-flag`（要核的新增事实）区分：那个是"可能编"，这个是"确定是编的示例"。 */
.dim-fix-ex {
  background: color-mix(in srgb, #f5b301 26%, transparent);
  color: inherit; border-radius: 4px; padding: 0 3px;
  box-shadow: inset 0 -1px 0 color-mix(in srgb, #f5b301 55%, transparent);
}
.dim-fix-ex-note {
  margin-top: 7px; font-size: 12px; line-height: 1.5;
  color: color-mix(in srgb, #8a6100 70%, var(--muted, #6b7280));
}

/* ⛔ 2026-11-02：`.dq-dir-line` 已停用（行头那句 "What to do:" 删掉，
   方向句改由体部改法块 `Your fix · what to do` 承担，规格 §5 只留三处出口）。 */

/* ══ 统一版式 · 2026-11-02（`_改法呈现统一规格_20261102.md`）════════════════════
   一行 = 一枚状态章（右上）+ 固定槽位 + 一句状态行 + 一个按钮位。
   状态只改章/状态行/按钮，**不改块数**。 */

/* 状态章靠右：行头是 flex，类目名后面直接排到最右。 */
.dq-rowsum-line .chip-act { margin-left: auto; flex: 0 0 auto; }

/* 第五枚章：只给方向（没有可粘句子）。蓝色虚线与 DELETE 的红虚线区分开 ——
   它不是"错"，是"这块材料只有你有"。 */
.chip-dir {
  color: var(--blue, #7c9fff);
  border: 1px dashed color-mix(in srgb, var(--blue, #7c9fff) 55%, transparent);
  background: transparent;
}

/* 状态行 + 按钮位：永远同一行、永远在最后。没有话说时整行不占位。 */
.dq-status-row {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin: 10px 0 2px;
}
.dq-status {
  font-size: 12px; line-height: 1.5; color: var(--muted, #9aa);
  flex: 1 1 auto; min-width: 0;
}
.dq-status.is-warn { color: var(--amber, #fbbf24); }
.dq-status-row .dq-fix-btns { margin: 0 0 0 auto; }

/* 整篇级：要改什么 → 要点，不是一坨 731 字。 */
.dq-steps { display: flex; flex-direction: column; gap: 5px; }
.dq-step { display: flex; gap: 6px; align-items: baseline; }
.dq-step-n { flex: 0 0 auto; color: var(--muted, #9aa); font-variant-numeric: tabular-nums; }

/* remove：原文块是"要删的那段"，不是"要改的那句" —— 左边框换红虚线。 */
.dim-fix-quote.is-cut { border-left-color: color-mix(in srgb, var(--red, #f87171) 55%, var(--border)); }
/* 🔴 2026-11-03：**落点块**（整篇级类目里"先动这里"那一块）。
   老板定的分工：类目层判 0/1/2，2 直接过；0/1 才走判据细则下落到句子。
   颜色与蓝色原文块区分开（琥珀 = "从这里开始"，不是"这句要替换"），
   并且**不做**绿实框 —— 那一框的意思是"这句可以直接粘"，而整篇级结论没变。 */
.dim-fix-quote.is-spot { border-left-color: var(--amber, #fbbf24);
  background: color-mix(in srgb, var(--amber, #fbbf24) 8%, transparent); }
.dim-fix-quote.is-spot .dim-fix-problem { background: transparent; color: var(--text);
  text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--amber, #fbbf24) 70%, transparent);
  text-underline-offset: 3px; }
.dim-spot-miss { margin-top: 4px; font-size: 12.5px; color: var(--muted); }
.dim-spot-fix { margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--border); }

/* ══ 整篇级 · 小节账本（2026-11-02 · `_整篇级结构式_小节账本_20261102.md`）════════
   一行 = 一个 ¶，动作挂在节下。跟 L1/L2 的"原文块 + 改法块"不是同一种东西：
   这里读的是**骨架**，所以用行结构而不是左右两栏。 */
.dim-fix-sections { border-left-color: var(--blue, #7c9fff); }
.dq-sec-list { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
.dq-sec { border-top: 1px dashed var(--border, #e6eaf3); padding-top: 7px; }
.dq-sec:first-child { border-top: 0; padding-top: 0; }
.dq-sec-hd { display: flex; align-items: baseline; gap: 8px; }

/* ¶ 与数字的辨识：12px 下 `¶63` 会被读成 `163`、`¶1` 会被读成 `11`（两版实测都栽过）。
   ⇒ 做成**一枚小药丸**：底色 + 内距 + ¶ 衬线体，读起来是"标记 + 数字"，不是一串数字。 */
.dq-pil { flex: 0 0 auto; display: inline-flex; align-items: baseline; gap: 2px;
          font-size: 11.5px; color: var(--blue, #7c9fff); font-variant-numeric: tabular-nums;
          font-weight: 700; background: color-mix(in srgb, var(--blue, #7c9fff) 12%, transparent);
          border-radius: 4px; padding: 0 5px; }
.dq-pil i { font-style: normal; opacity: .8; font-size: 12px; line-height: 1;
            font-family: Georgia, "Times New Roman", serif; }
.dq-sec-h { font-size: 12.5px; font-weight: 600; color: var(--text, #14181f); line-height: 1.45; }
.dq-sec-acts { padding: 2px 0 0 34px; }
.dq-sec-a { display: flex; gap: 6px; font-size: 12.5px; line-height: 1.58;
            color: var(--text, #14181f); padding: 1px 0; }
.dq-sec-dot { flex: 0 0 auto; color: var(--green, #4ade80); font-weight: 700; }
.dq-sec-whole .dq-sec-whole-t { font-size: 12px; font-weight: 700; color: var(--amber, #fbbf24); }
.dq-sec-foot { margin-top: 7px; font-size: 11.5px; color: var(--muted, #9aa); }
/* 抓取稿（无线空行）时编号是**行号**，不是段号 ⇒ 不印 ¶，改用 `Line N` 的素标注。 */
.dq-pil.is-line { font-size: 10.5px; font-weight: 600; letter-spacing: .01em;
                  color: var(--muted, #9aa); background: color-mix(in srgb, var(--muted, #9aa) 12%, transparent); }

/* ══ 审计面板：分组替代逐行档位词 · 2026-11-02 ════════════════════════════════════
   原来 13 行各挂一枚 `Met / Not met / Can't assess`，读起来是第二份分数表。
   现在结论只在**组标题**上说一次（`Needs a change · 3`），行内只留一颗状态点。
   ⚠️ 点很轻：它只用来扫读"哪几行是红的"，不承担措辞。 */
.details-ind-group {
  margin: 12px 0 2px; font-size: 11px; letter-spacing: .05em; text-transform: uppercase;
  color: var(--muted); font-weight: 700;
}
.details-ind-group:first-child { margin-top: 4px; }
.details-ind-dot {
  flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%;
  margin-top: 5px; background: var(--muted);
}
.details-ind-dot.is-needs_change { background: var(--red, #f87171); }
.details-ind-dot.is-unsure { background: var(--gold, #fbbf24); }
.details-ind-dot.is-not_owed { background: var(--border, #cbd5e1); }
.details-ind-dot.is-already { background: var(--green, #4ade80); }
/* 点与文字基线对齐（`.details-ind-line` 是 flex + baseline，点要往上提一点） */
.details-ind-line .details-ind-dot { align-self: flex-start; }

/* ══ 打印样式（2026-11-04 D 册：评分端 PDF 整理）══════════════════════════════
   原来完全没有 @media print ⇒ 浏览器默认样式打印：
   卡片被截断、暗色背景全黑、按钮/导航乱入、大片空白。
   现在加完整的打印规则。 */
@media print {
  /* ① 页面设置 */
  @page {
    size: A4;
    margin: 10mm 12mm;
  }

  /* ② 全局：浅色底 + 深色字（防暗色主题打成一片黑） */
  html, body {
    background: #fff !important;
    color: #1a1a2e !important;
    font-size: 10px !important;
    line-height: 1.5 !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  /* ③ 隐藏不需要打印的 UI 元素 */
  .dq-dl,                    /* 下载按钮栏 */
  .score-nav,                /* 导航 */
  .score-header-actions,     /* 头部按钮 */
  .no-print,
  button, .btn,
  .tab-bar, .tab-btn,
  .dark-toggle, .theme-toggle,
  .feedback-btn, .feedback-fab,
  nav, header nav, footer nav,
  .copy-btn, .copy-fix,
  [class*="toggle"], [class*="switch"] {
    display: none !important;
  }

  /* ④ 卡片分页控制：一张卡不被截断 */
  .score-card,
  .dq-framework,
  .category-card,
  .dim-block,
  .section-block {
    break-inside: avoid;
    page-break-inside: avoid;
    border: 1px solid #e0e0e0 !important;
    border-radius: 6px !important;
    padding: 8px 10px !important;
    margin-bottom: 8px !important;
    background: #fff !important;
    box-shadow: none !important;
  }

  /* ⑤ 大节之间分页 */
  .section-block + .section-block,
  h2 {
    break-before: auto;
    page-break-before: auto;
    break-after: avoid;
    page-break-after: avoid;
  }

  /* ⑥ 表格不截断 */
  table { break-inside: avoid; page-break-inside: avoid; }
  tr { break-inside: avoid; page-break-inside: avoid; }

  /* ⑦ 颜色调整：暗色变量在打印时强制浅色 */
  * {
    --bg: #fff !important;
    --surface: #fff !important;
    --surface2: #f8f9fa !important;
    --border: #e0e0e0 !important;
    --text: #1a1a2e !important;
    --text2: #555 !important;
    --text3: #888 !important;
  }

  /* ⑧ 修正暗色主题下的具体元素 */
  .score-card, .dq-framework,
  [style*="background"],
  [style*="color"] {
    background: #fff !important;
    color: #1a1a2e !important;
  }

  /* ⑨ 状态章/芯片：保留颜色但去掉阴影 */
  .chip, .status-chip, .badge {
    box-shadow: none !important;
    border: 1px solid #ccc !important;
    padding: 1px 6px !important;
    font-size: 9px !important;
  }

  /* ⑩ 缩减间距：让 PDF 更紧凑 */
  .score-card h1, .score-card h2, .score-card h3 {
    margin: 4px 0 2px !important;
  }
  .score-card p, .score-card div {
    margin: 2px 0 !important;
  }

  /* ⑪ 链接显示 URL（打印时可追溯） */
  a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-size: 8px;
    color: #999;
  }

  /* ⑫ 引文块：左边框加粗 */
  blockquote, .quote-block, .evidence-quote {
    border-left: 3px solid #2563eb !important;
    padding-left: 8px !important;
    margin: 4px 0 4px 8px !important;
    background: #f8fafc !important;
    font-style: italic !important;
  }

  /* ⑬ 改法块：清晰区分 */
  .fix-block, .fix-item, .direction-block {
    break-inside: avoid;
    page-break-inside: avoid;
    border: 1px solid #ddd !important;
    border-radius: 4px !important;
    padding: 6px 8px !important;
    margin: 4px 0 !important;
    background: #fafafa !important;
  }

  /* ⑭ 首页标题区：紧凑 */
  .report-header, .score-top {
    margin-bottom: 6px !important;
    padding-bottom: 4px !important;
    border-bottom: 2px solid #1a1a2e !important;
  }
}
