/* =====================================================================
 * 奇门排盘页 · 「判词页」视觉层（paipan-claude.css）
 * 2026-09-11 第二轮改版：整页由「工具页」转为「判词页」
 *
 * 作用域：body[data-page="paipan"]（风水页 data-mode="fengshui"、六爻页与全站
 *   其它页面零影响；不动 styles.css 的全局 :root）。
 * 加载位置：paipan.html <link> 列表最后（divination-finish.css 之后），
 *   靠层叠顺序夺回 divination-finish.css 的 #chart-result .x 规则。
 * 契约源：_tmp/paipan_recon/CONTRACT.md（类名/令牌/不可破坏清单的唯一约定）
 * 设计源：参考稿 _tmp/paipan_recon/reference_paipan.html 的 <style>（视觉系统照搬）
 *
 * ---------------------------------------------------------------------
 * 【本轮三处与既有文档的偏离，留痕备查】
 *
 * 偏离一 · 字体（2026-09-11）：本页 display 声部不再使用 LXGW WenKai（楷体），
 *   改用**系统宋体栈** --qp-serif，**不下载任何字体、不引任何 CDN**（全站实测
 *   0 个外链，参考稿的 Google Fonts Noto Serif SC 禁止照抄）。
 *   原因：本站 AGENTS.md 的设计系统待办原文——「奇门页 display 仍用文楷（楷体），
 *   六爻页已改宋体——两页标题声部不一致，下一轮要么把奇门也拉进宋体，要么定义
 *   一个全站标题字族令牌」。六爻页已在 liuyao-claude.css 走宋体栈（DESIGN-liuyao.md
 *   §deviations ①），本轮即按该待办把奇门页统一到宋体，两页标题声部自此一致。
 *   与 DESIGN.md 的关系：DESIGN.md 的 typography.display-* 是 Copernicus/Tiempos
 *   衬线，本站无该字体，本就以「本地衬线替代」落地；此前替代品是文楷（楷体），
 *   现替换为宋体栈——仍是衬线 display + 无衬线 body 的二分，未改动设计系统的结构。
 *   **DESIGN.md 需补记本页 display 字族由楷体改为宋体**（本轮由 CSS 子代理在文件头
 *   留痕，主控统一回写文档）。
 *
 * 偏离二 · 配色（2026-09-11，经用户拍板）：本页主色由 Claude 珊瑚 #cc785c
 *   改为参考稿的**暖金 #A9762B**（deep #875C1F），纸面由 Claude 奶油 #faf9f5 改为
 *   破晓暖纸 #FFFBF3 系。原因：参考稿「破晓云海」取色（暖墨 + 暖金 + 珍珠白）与
 *   奇门页的气质更贴，用户已明确采纳。**本轮经用户决定，本页从 Claude 珊瑚转为暖金，
 *   DESIGN.md 需补记**。落地方式：下方 --cl-* 令牌名保留（文件内 200+ 处引用，
 *   改名是纯噪声），但取值全部重指到暖金/暖纸；新增 --qp-* 为参考稿原文令牌。
 *   本页仍是「同一套 surfaces/rounded/spacing 结构 + 换主色」，未引入第三支彩色。
 *
 * 偏离三 · 背景视频资产（2026-09-11）：参考稿用一张静态海报兜底，本页的背景是
 *   /backgrounds/dawn.mp4（视频，用户已于本日 21:21 提供，实测可解码 1280×720）
 *   + /backgrounds/dawn.jpg（海报，**至今不存在**）。本层用纯 CSS 做兜底，不写一行 JS，
 *   叠放次序（下→上）：.bg 的暖纸渐变 → .veil::before 的海报 → video → .veil 的薄纱。
 *   于是「视频存在则覆盖、缺失则露海报、海报也缺则露暖纸」，三种情况都不需要 JS 判断；
 *   且 video 有确定的 100%×100% 尺寸且**故意不设 background**，文件缺失时浏览器对它不着墨
 *   （实测 computed backgroundColor 为 transparent），**不会出现黑块或布局塌陷**。
 *   减少动效时不播视频、改用海报图，同样把海报**叠加**在暖纸上而不是替换掉它
 *   （参考稿的 background 简写会把底色一起替换掉，海报缺图时会退成平色）。
 *   本页没有 .up-bg 节点（HTML 未采用），该选择器保留只为向前兼容。
 *
 * ---------------------------------------------------------------------
 * 关于 !important（本层实测 39 处；改版前该文件为 33 处，探针口径上限 40）：
 *   不是本层引入的习惯，而是被夺权回写——只在**源声明本身带 !important**、
 *   同特异度下后者胜时才使用，逐条都有出处：
 *   styles.css:2533-2544  .chart-form button[type=submit] / .deep-btn 整组写了
 *                          background+border+color+box-shadow !important
 *   styles.css:2545-2554  上述两者的 :hover 写了 background+box-shadow !important
 *   styles.css:2555-2565  .deep-btn:disabled 写了 background+border-color+box-shadow !important
 *   styles.css:2876-2887  .compare-toggle 的 display/color/font-size 与 checkbox 的
 *                          width/height 写了 !important（font-weight 没有 → 本层也不用）
 *   enhance.css:401-408   .palace.is-yongshen 的 background/border/box-shadow 写了 !important
 *   enhance.css:422       .palace.p5 的 background 写了 !important
 *   paipan.html:39        <video style="visibility:hidden"> 内联声明 —— 内联优先于普通样式表，
 *                          这一处 !important 是为了让可行播放的视频显形（唯一一处「对手是内联样式」）
 *   .action 墨底内的解锁钮（3 条状态规则）之所以也要 !important，是因为它要覆盖的
 *   正是本层上面那组带 !important 的 .deep-btn 基线；普通声明永远赢不了 important 声明。
 *   其余规则一律靠 body[data-page="paipan"] 的特异度 + 最后加载顺序取胜，不用 !important。
 *
 * 无障碍派生：DESIGN.md 的 success(#5db872)/error(#c64545)/amber(#e8a55a) 是状态填充色，
 *   直接当 11px 文字落在暖纸上不足 4.5:1，故按文档自身的 primary→primary-active 手法
 *   各派生一个 -ink 文字档（见下方令牌注释）。
 * ===================================================================== */

/* ---- 0. 令牌：参考稿原文（--qp-*）+ Claude 结构令牌重指暖金（--cl-*） ---- */
body[data-page="paipan"] {
  /* ===== 参考稿原文令牌（破晓云海取色） ===== */
  --qp-ink: #2e2820;          /* 暖墨：标题与正文主色 */
  --qp-ink-2: #5c5346;        /* 次级正文 */
  /* 弱化说明、角标、fine print。参考稿的 #918671 在暖纸底上实测只有 2.82:1
     （WCAG 正文需 4.5:1），本层压深到 #6f6553（约 5.4:1）——同色相只降明度，
     是本次对参考稿唯一的“数值级”修正，视觉档位不变。 */
  --qp-muted: #6f6553;
  --qp-gold: #a9762b;         /* 暖金：本页唯一彩色（线、角标、卡片顶边） */
  --qp-gold-deep: #875c1f;    /* 主色的深档（暖纸上的文字用，实测 4.60:1） */
  --qp-gold-soft: rgba(169, 118, 43, 0.12);
  --qp-pearl: rgba(255, 251, 243, 0.5);
  --qp-line: rgba(74, 62, 43, 0.18);
  /* 参考稿的 clamp(28px,5vw,84px) 原样照抄（契约 §1 明确要求） */
  --qp-gut: clamp(28px, 5vw, 84px);
  --qp-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
  --qp-on-ink: #f7f1e4;       /* .action 墨底上的反白字 */
  --qp-on-ink-soft: rgba(247, 241, 228, 0.8);
  --qp-on-ink-mid: rgba(247, 241, 228, 0.85);
  --qp-on-ink-line: rgba(247, 241, 228, 0.3);
  /* 墨底上的金：参考稿直接用 --gold(#A9762B) 当链接色，在 #2E2820 上只有 3.69:1，
     小字链接不达标；改用同色相的亮金档（约 5.9:1），金色语义不变。 */
  --qp-gold-on-ink: #d6a85c;
  --qp-wrap: 1180px;          /* .wrap 内容壳 */

  /* ===== 字族：系统宋体栈（禁外链字体，见文件头偏离一） ===== */
  --qp-serif: "Songti SC", "STSong", "SimSun", "Noto Serif CJK SC", "Source Han Serif SC", serif;
  --qp-sans: "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif;

  /* ===== Surface（结构沿用 Claude，取值重指暖纸：canvas/surface-soft/card/dark）
     半透明是刻意的——判词页要让背景云海以很低的对比透上来（参考稿 .tcard 的毛玻璃） ===== */
  --cl-canvas: #fffbf3;
  --cl-canvas-veil: rgba(255, 251, 243, 0.55); /* 卡片毛玻璃底 */
  --cl-soft: #f9f2e4;
  --cl-card: #f2e9d8;
  --cl-dark: #2e2820;
  /* Text（ink / body-strong / body / muted / muted-soft） */
  --cl-ink: #2e2820;
  --cl-body-strong: #4a4034;
  --cl-body: #5c5346;
  --cl-muted: #6f6553;
  --cl-muted-soft: #7a6f5d;
  --cl-on-dark: #fffbf3;
  --cl-on-dark-soft: rgba(255, 251, 243, 0.68);
  --cl-on-dark-mid: rgba(255, 251, 243, 0.86);
  /* Hairline（hairline / hairline-soft）：本页线是暖墨发丝，不是中性灰 */
  --cl-hairline: rgba(74, 62, 43, 0.18);
  --cl-hairline-soft: rgba(74, 62, 43, 0.1);
  /* Brand：Claude 珊瑚 → 参考稿暖金（偏离二） */
  --cl-primary: #a9762b;
  --cl-primary-active: #875c1f;
  --cl-on-primary: #fffbf3;
  --cl-primary-ring: rgba(169, 118, 43, 0.16);
  /* Semantic fills + 无障碍文字派生（暖纸上的对比度校准） */
  --cl-success: #5db872;
  --cl-success-ink: #37734a;
  --cl-success-tint: rgba(93, 184, 114, 0.16);
  --cl-error: #c64545;
  --cl-error-ink: #a83232;
  --cl-error-tint: rgba(198, 69, 69, 0.1);
  --cl-amber: #d6a85c;
  --cl-amber-ink: #7d5514;
  --cl-amber-tint: rgba(214, 168, 92, 0.18);
  /* Rounded（rounded.md / lg / xl / pill）——判词页几乎不用圆角，只留输入控件与徽章档位 */
  --cl-r-sm: 6px;
  --cl-r-md: 8px;
  --cl-r-lg: 12px;
  --cl-r-xl: 16px;
  --cl-r-pill: 9999px;
  /* Spacing（4px 网格：spacing.xs…xxl） */
  --cl-s1: 4px;
  --cl-s2: 8px;
  --cl-s3: 12px;
  --cl-s4: 16px;
  --cl-s5: 24px;
  --cl-s6: 32px;
  --cl-s7: 48px;
  /* Type：display = 宋体栈，正文 = 系统无衬线（不引 CDN） */
  --cl-display: var(--qp-serif);
  --cl-text: var(--qp-sans);
  /* Elevation：判词页只给 .tcard 一档柔影（参考稿 shadow 原文，底色换成暖墨） */
  --cl-shadow-tap: 0 1px 3px rgba(46, 40, 32, 0.08);
  --qp-shadow-card: 0 18px 44px -26px rgba(74, 62, 43, 0.4);
  --qp-shadow-card-hover: 0 28px 56px -26px rgba(74, 62, 43, 0.5);
}

/* ---- 0b. 背景系统：暖纸底纹 + 薄纱 + 暖光漂移（参考稿 §流动破晓云海） ---- */
/* 暖纸兜底渐变：一个令牌，三处落（body / .bg / .up-bg），任何一层活着页面就不会是空白。
   三层合成：两束破晓暖光（右上金、左下奶油）+ 底部暖纸压深。 */
body[data-page="paipan"] {
  --qp-paper:
    radial-gradient(120% 80% at 82% -6%, rgba(214, 168, 92, 0.2), transparent 62%),
    radial-gradient(90% 70% at 8% 108%, rgba(255, 246, 230, 0.85), transparent 70%),
    linear-gradient(180deg, #fffdf8 0%, #fff9ee 42%, #f8efe0 100%);
}

/* 第一层兜底：.bg 自己就带暖纸渐变。
   **这是「视频缺失不出黑块」的关键**——video 是 .bg 的子元素，压在 .bg 的背景之上；
   视频文件缺失/解码失败时浏览器对该元素不着墨（实测 computed backgroundColor 为
   transparent，像素无黑块），于是 .bg 的暖纸渐变自然露出。
   .up-bg 在 paipan.html 当前版本里没有，保留选择器只为向前兼容（HTML 若补回该节点，
   会得到同一张纸，且压在 -4 给 .glow 让位）。 */
body[data-page="paipan"] .bg,
body[data-page="paipan"] .up-bg {
  background: var(--qp-paper);
}

/* 视频层：固定铺满。 */
body[data-page="paipan"] .bg {
  position: fixed;
  inset: 0;
  z-index: -3;
  overflow: hidden;
  pointer-events: none;
}
body[data-page="paipan"] .bg > video,
body[data-page="paipan"] .bg video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  /* 缺失资产不塌陷：尺寸恒为 100%×100%，flex:none 防止被父级 flex 压扁 */
  flex: none;
  /* 视频初显必须由本层接管：paipan.html 给 <video> 写了内联 visibility:hidden
     （目的是不显示浏览器原生的「媒体未找到」兜底 UI）。内联声明优先于普通样式表规则，
     所以这里**必须** !important 才能让可行播放的视频显形——这是全文件唯一因
     「对手是内联样式」而使用的 !important。视频缺失时该元素本就不着墨（见 .bg 注释），
     显形也不会画出黑块。 */
  visibility: visible !important;
}
/* 薄纱遮罩：渐变按参考稿原文（0% .8 → 38% .42 → 100% .6）。
   海报图挂在它自身的 ::before 上（底下 -1 层），这样：
     video 存在（z-index auto）→ 盖住海报；video 缺失 → 海报露出；海报也缺 → .up-bg 露出。
   纯 CSS 实现「视频存在则覆盖、缺失则露兜底」，不写 JS。 */
body[data-page="paipan"] .veil {
  position: absolute;
  inset: 0;
  z-index: 3; /* 高于 .glow(-2)，低于正文(0，不建层叠上下文) */
  background: linear-gradient(180deg, rgba(255, 251, 243, 0.8) 0%, rgba(255, 251, 243, 0.42) 38%, rgba(255, 251, 243, 0.6) 100%);
}
body[data-page="paipan"] .veil::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: url("/backgrounds/dawn.jpg?v=cb9784fb") center / cover no-repeat;
}

/* 一束缓慢漂移的暖光（参考稿 .glow + @keyframes drift） */
body[data-page="paipan"] .glow {
  position: fixed;
  z-index: -2;
  width: 60vw;
  height: 60vw;
  right: -12vw;
  top: -18vh;
  pointer-events: none;
  background: radial-gradient(circle, rgba(214, 168, 92, 0.22), transparent 62%);
  animation: drift 18s var(--qp-ease) infinite alternate;
}
@keyframes drift {
  from { transform: translate(0, 0); }
  to { transform: translate(-8vw, 6vh); }
}

/* 入场（参考稿 .rise）：整段判词按 0.1s 阶梯抬升 */
@keyframes rise {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: none; }
}
body[data-page="paipan"] .rise {
  animation: rise 1s var(--qp-ease) both;
}

/* ---- 0c. 兼容层：关掉既有层会盖住背景的装饰（只关视觉，不动结构与 id） ---- */
/* styles.css:186 给 body::before 铺了一张全屏 fixed 背景图（z-index:-1），
   它会把本页的 .bg/.veil/.glow 全部盖住；判词页的背景归本层所有，故清空它。
   （enhance.css:34 给 body.bg-themed::after 的暗部渐隐同理，本页 markup 不带
   .bg-themed，仍显式关掉以防日后被加上。） */
body[data-page="paipan"]::before,
body[data-page="paipan"]::after {
  content: none;
  background: none;
}
/* body 自身必须透明，固定背景层才可见（底纹由 .up-bg 提供，见 0b） */
body[data-page="paipan"] {
  background: transparent;
  color: var(--cl-body);
  font-family: var(--cl-text);
}

/* ---- 0d. 骨架：main 全宽，居中交给 .wrap（参考稿 .wrap max-width:1180px） ---- */
/* 本层同时服务两种结构：HTML 已收进 .wrap（契约 §4 首屏顺序）时由 .wrap 定宽，
   尚未收进时（本页 2026-09-11 之前的结构）由 main 自己居中，避免桌面出现
   1180px 定宽后两侧贴边的破版。:has() 不支持时回落为「main 定宽 + .wrap 再收一次」，
   两者都居中，视觉退化但不破版。 */
body[data-page="paipan"] main {
  width: min(var(--qp-wrap), calc(100% - 2 * var(--qp-gut)));
  margin: 0 auto;
  padding: 0 0 clamp(40px, 6vh, 72px);
}
body[data-page="paipan"] main:has(.wrap),
body[data-page="paipan"] main:has(> .wrap) {
  width: 100%;
  padding: 0;
}
body[data-page="paipan"] .wrap {
  max-width: var(--qp-wrap);
  margin: 0 auto;
  padding: clamp(20px, 4vh, 56px) var(--qp-gut) 60px;
}
/* .wrap 已在内部给了左右 gut，main 的 gut 只在裸结构下生效 */
body[data-page="paipan"] .wrap > * {
  min-width: 0; /* 网格/长词不撑破内容壳 */
}

/* ---- 1. 档案带 .archive（局 / 四柱 / 值符值使空亡 / 事项标签） ---- */
body[data-page="paipan"] .archive {
  display: flex;
  align-items: baseline;
  gap: 18px;
  flex-wrap: wrap;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--qp-line);
  color: var(--qp-muted);
  font-size: 12.5px;
  letter-spacing: 0.12em;
}
body[data-page="paipan"] .archive .ju {
  font-family: var(--qp-serif);
  font-size: 17px;
  font-weight: 600;
  letter-spacing: 0.15em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .archive .bazi {
  letter-spacing: 0.22em;
}
body[data-page="paipan"] .archive .purpose {
  margin-left: auto;
  padding: 4px 13px;
  border: 1px solid var(--qp-gold);
  border-radius: 2px;
  color: var(--qp-gold-deep);
  font-size: 11px;
  letter-spacing: 0.24em;
}
/* 档案带的次要两行（日期 / 副行）单独成行：与「局 · 四柱 · 值符值使空亡 · 事项」分两层，
   一眼是「这一局是什么」在上、「什么时候」在下。 */
body[data-page="paipan"] .archive .date,
body[data-page="paipan"] .archive .subline {
  flex-basis: 100%;
  margin: 0;
  color: var(--cl-muted);
  font-size: 12px;
}
body[data-page="paipan"] .archive .archive-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
}
body[data-page="paipan"] .archive .meta {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
}
body[data-page="paipan"] .archive .meta b {
  color: var(--cl-muted-soft);
  font-weight: 400;
}
body[data-page="paipan"] .archive .meta strong {
  color: var(--cl-body-strong);
  font-weight: 500;
}

/* ---- 2. 判词区 .verdict：h1 是绝对主角 ---- */
body[data-page="paipan"] .verdict {
  padding: clamp(34px, 6vh, 72px) 0 clamp(30px, 5vh, 60px);
}
/* 眉题：42px 金色短线 + 0.5em 字距（金线由 ::before 画，不占 DOM） */
body[data-page="paipan"] .kicker {
  display: flex;
  align-items: center;
  gap: 14px;
  width: max-content;
  margin: 0 0 26px;
  color: var(--qp-gold-deep);
  font-family: var(--qp-sans);
  font-size: 12px;
  font-weight: 400;
  letter-spacing: 0.5em;
}
body[data-page="paipan"] .kicker::before {
  content: "";
  flex: none;
  width: 42px;
  height: 1px;
  background: var(--qp-gold);
}
/* display 字族 = 系统宋体栈（偏离一）；weight 900 与 1.42 行高按参考稿，
   行高是本页最关键的排版决策——判词要能像碑铭一样两行读完。 */
body[data-page="paipan"] .verdict h1 {
  margin: 0;
  max-width: 13em;
  font-family: var(--qp-serif);
  font-size: clamp(32px, 4.6vw, 60px);
  font-weight: 900;
  line-height: 1.42;
  letter-spacing: 0.04em;
  color: var(--qp-ink);
  overflow-wrap: anywhere; /* 超长断语不撑破 390px 视口 */
}
/* em = 金色 + 底部渐变高亮条（参考稿 62% 处起，一行「荧光笔」的效果） */
body[data-page="paipan"] .verdict h1 em {
  font-style: normal;
  color: var(--qp-gold-deep);
  background: linear-gradient(transparent 62%, rgba(214, 168, 92, 0.32) 0);
}
/* 判词的两段分工（2026-09-11 与 paipan.html 对齐后的最终结构）：
   h1#verdict-title = 一句话判词（短、大、绝对主角，由 paipan-verdict.js 用 textContent 写）；
   div#free-summary.sub = 免费速览明细（app.js 往里 append .verdict-line 等块级节点，走 .sub 度量）。
   ——曾经有一版把 id="free-summary" 放在 <h1 class="sub"> 上，那时需要用 :has() 让 h1 在
   有元素子节点时退成容器。**该规则已删除**：h1 里出现元素子节点恰恰是本设计要支持的正常情形
   （参考稿的 h1 就有 <em> 金色高亮），:has(> *) 会把带 <em> 的判词连字号一起打掉。 */
body[data-page="paipan"] .verdict h1 .verdict-line {
  max-width: 13em;
  font-family: var(--qp-serif);
  font-size: clamp(32px, 3.6vw, 46px);
  font-weight: 900;
  line-height: 1.42;
  letter-spacing: 0.04em;
  color: var(--qp-ink);
}
/* .sub 只服务参考稿里那个「h1 之后的副文段」，绝不能命中同名的 h1（见上）。
   现网 h1 带 class="sub"，不排除会吃掉 .verdict h1 的字号。 */
body[data-page="paipan"] .verdict .sub:not(h1) {
  max-width: 58ch;
  margin: 30px 0 0;
  color: var(--qp-ink-2);
  font-size: 15.5px;
  font-weight: 300;
  line-height: 2;
}

/* 兼容：既有结论/摘要仍用 .kicker 作眉题的容器（.result-head 等），
   给它们留 8px 下边距，避免与 26px 的判词眉题混用后挤在一起 */
body[data-page="paipan"] .result-head .kicker,
body[data-page="paipan"] .compare-head .kicker,
body[data-page="paipan"] .guide-content .kicker {
  margin-bottom: 8px;
}

/* ---- 3. 解局四条 .read：不展示盘，只给读法 ---- */
body[data-page="paipan"] .read {
  margin-top: 10px;
  border-top: 1px solid var(--qp-line);
  border-bottom: 1px solid var(--qp-line);
}
body[data-page="paipan"] .read-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
body[data-page="paipan"] .r-cell {
  position: relative;
  padding: 26px 24px 28px;
  border-right: 1px solid var(--qp-line);
}
body[data-page="paipan"] .r-cell:last-child {
  border-right: 0;
}
/* 角标：内容取自 data-idx（契约要求用 attr()，不得写死壹贰叁肆） */
body[data-page="paipan"] .r-cell::before {
  content: attr(data-idx);
  position: absolute;
  top: 18px;
  right: 20px;
  font-family: var(--qp-serif);
  font-size: 13px;
  letter-spacing: 0.1em;
  color: var(--qp-muted);
}
/* .r-tag 在 HTML 里就是 <p class="r-tag">，因此会被下面那条 `.r-cell p`（0,2,2）整体吃掉：
   它比本条（0,2,1）特异度高，于是 margin / color / font-size 三项全被改写成「正文」口径
   （2026-09-11 实测：间距 12→0px、金色 --gold-deep→正文墨、字号 11.5→13px）。
   选择器提到 `.r-cell p.r-tag`（0,3,2）一次性夺回三项；line-height 一并声明，
   否则标签仍会吃到 `.r-cell p` 的 1.85（参考稿该标签继承的是正文 1.6）。 */
body[data-page="paipan"] .r-cell p.r-tag {
  margin: 0 0 12px;
  color: var(--qp-gold-deep);
  font-size: 11.5px;
  line-height: 1.6;
  letter-spacing: 0.28em;
}
body[data-page="paipan"] .r-cell h3 {
  margin: 0 0 10px;
  font-family: var(--qp-serif);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .r-cell p {
  margin: 0;
  color: var(--qp-ink-2);
  font-size: 13px;
  line-height: 1.85;
}

/* ---- 4. 三件事 .three：分区头 + 三张毛玻璃卡 ---- */
body[data-page="paipan"] .three {
  margin-top: clamp(40px, 6vh, 68px);
}
/* 免费档的「三件事」是一段没有内容的空壳：卡片文字必须由真实盘面驱动（契约 §3），
   未解锁时 .decision-items 子节点为 0、#guide-content 又是 display:none，整段只剩
   一个 23px 高的「给你的三件事」标题 + 一根发丝线，指向空内容——用户会读成"东西没加载出来"。
   而下方 .action 墨条里的 #guide-lock 已经写了「解锁后：…给你的三件事建议」并配着解锁按钮，
   同一件事被说了两遍。故：没有卡片时整段不渲染，解锁后 .decision-items 一有子节点就自动回来。
   用 :has() 是因为 CSS 没有父选择器；本站已在用 :has()。 */
body[data-page="paipan"] .three:has(.decision-items:empty) {
  display: none;
}
/* 分区头：h2 + AI 徽标 + ::after 撑满的细线（三者基线对齐） */
body[data-page="paipan"] .sec-head {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin: 0 0 26px;
}
body[data-page="paipan"] .sec-head h2 {
  margin: 0;
  font-family: var(--qp-serif);
  font-size: 19px;
  font-weight: 600;
  letter-spacing: 0.3em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .sec-head .ai,
body[data-page="paipan"] .ai-badge {
  padding: 2px 8px;
  border: 1px solid var(--qp-line);
  border-radius: 2px;
  color: var(--qp-muted);
  font-family: var(--qp-sans);
  font-size: 10px;
  font-style: normal;
  font-weight: 400;
  letter-spacing: 0.1em;
}
body[data-page="paipan"] .sec-head::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--qp-line);
}
body[data-page="paipan"] .tcard .tn {
  font-family: var(--qp-serif);
  font-size: 34px;
  font-weight: 900;
  line-height: 1;
  color: var(--qp-gold);
}

/* ---- 5. 操作条 .action：墨底 + 反白解锁钮 + 事项 chips + 重新起盘 ---- */
body[data-page="paipan"] .action {
  display: flex;
  align-items: center;
  gap: 22px;
  flex-wrap: wrap;
  margin-top: clamp(40px, 6vh, 64px);
  padding: 22px 26px;
  background: var(--qp-ink);
  color: var(--qp-on-ink);
}
body[data-page="paipan"] .action p {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.6;
  opacity: 0.82;
}
body[data-page="paipan"] .action p strong {
  display: block;
  margin-bottom: 2px;
  font-family: var(--qp-serif);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.16em;
  opacity: 1;
}
body[data-page="paipan"] .action .unlock {
  padding: 12px 30px;
  border: 1px solid var(--qp-on-ink);
  border-radius: 0;
  background: transparent;
  color: var(--qp-on-ink);
  font-family: var(--qp-serif);
  font-size: 13px;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  transition: background 0.3s var(--qp-ease), color 0.3s var(--qp-ease);
  cursor: pointer;
}
body[data-page="paipan"] .action .unlock:hover {
  background: var(--qp-on-ink);
  color: var(--qp-ink);
}
body[data-page="paipan"] .ask {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-left: auto;
  color: var(--qp-on-ink-soft);
  font-size: 12px;
}
body[data-page="paipan"] .action .chip {
  padding: 6px 14px;
  border: 1px solid var(--qp-on-ink-line);
  border-radius: 0;
  background: transparent;
  color: var(--qp-on-ink-mid);
  font-size: 11.5px;
  letter-spacing: 0.1em;
  transition: background 0.3s var(--qp-ease), color 0.3s var(--qp-ease), border-color 0.3s var(--qp-ease);
  cursor: pointer;
}
body[data-page="paipan"] .action .chip.is-active {
  background: var(--qp-on-ink);
  border-color: var(--qp-on-ink);
  color: var(--qp-ink);
}
body[data-page="paipan"] .restart {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--qp-gold-on-ink);
  font: inherit;
  font-size: 12.5px;
  letter-spacing: 0.15em;
  text-decoration: underline;
  text-underline-offset: 4px;
  cursor: pointer;
}
body[data-page="paipan"] .restart:hover {
  color: var(--qp-on-ink);
}

/* 解锁块落在 .action 墨底里（paipan.html 把 #guide-lock 放进操作条）。
   默认那张「暖纸描边卡」是为浅色纸面写的，放进墨底会变成黑字黑底、彻底不可读；
   这里把墨底内的这一块整个翻成反白版，与参考稿 .action/.unlock 同一套语言。 */
body[data-page="paipan"] .action .guide-lock {
  flex: 1 1 320px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  color: var(--qp-on-ink-mid);
}
body[data-page="paipan"] .action .guide-lock h3 {
  margin: 0 0 6px;
  color: var(--qp-on-ink);
  font-family: var(--qp-serif);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.16em;
}
body[data-page="paipan"] .action .guide-lock > p,
body[data-page="paipan"] .action .guide-lock .guide-lock-hint {
  margin: 0 0 12px;
  color: var(--qp-on-ink-soft);
  font-size: 12.5px;
  line-height: 1.6;
}
body[data-page="paipan"] .action .guide-unlock-actions {
  gap: 8px 12px;
}
/* 墨底上的解锁钮 = 参考稿 .unlock：奶油描边、反白字，hover 反过来填充。
   paipan.html 把两个解锁钮（#guide-btn 与 .deep-btn-ghost 的 #guide-deep-btn）都放进了
   .action，所以这里必须把 .deep-btn-ghost 一并列进来：否则后面的
   `body[data-page] .deep-btn.deep-btn-ghost{border:1px solid var(--cl-hairline); color:var(--qp-ink)}`
   与本节同特异度(0,3,1)、却因书写顺序在后而胜出，把「解锁深度分析」渲染成
   墨字(#2e2820)+墨底(#2e2820) —— 实测完全不可见。把 ghost 写进选择器列表后该变体为
   (0,4,1)，与顺序无关地稳定胜出。 */
body[data-page="paipan"] .action .deep-btn,
body[data-page="paipan"] .action .deep-btn.deep-btn-ghost {
  width: auto;
  min-width: 0;
  height: 44px;
  padding: 0 22px;
  border: 1px solid var(--qp-on-ink) !important;
  border-radius: 0;
  background: transparent !important;
  color: var(--qp-on-ink) !important;
  box-shadow: none !important;
  font-family: var(--qp-serif);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-indent: 0.22em;
  transition: background 0.3s var(--qp-ease), color 0.3s var(--qp-ease);
}
/* 次级档（深度分析）：墨底上低一阶的描边与字色，保住「速断 / 深度」的主次，
   不需要额外 !important 之外的声明，只覆盖边与字。 */
body[data-page="paipan"] .action .deep-btn.deep-btn-ghost {
  border-color: var(--qp-on-ink-line) !important;
  color: var(--qp-on-ink-mid) !important;
}
body[data-page="paipan"] .action .deep-btn:hover:not(:disabled),
body[data-page="paipan"] .action .deep-btn:active:not(:disabled),
body[data-page="paipan"] .action .deep-btn.deep-btn-ghost:hover:not(:disabled) {
  background: var(--qp-on-ink) !important;
  border-color: var(--qp-on-ink) !important;
  color: var(--qp-ink) !important;
}
body[data-page="paipan"] .action .deep-btn:disabled,
body[data-page="paipan"] .action .deep-btn.deep-btn-ghost:disabled {
  border-color: var(--qp-on-ink-line) !important;
  background: transparent !important;
  color: var(--qp-on-ink-soft) !important;
}

/* 键盘可见焦点（深底与暖纸上各给一档，不靠颜色差猜） */
body[data-page="paipan"] .action .unlock:focus-visible,
body[data-page="paipan"] .action .chip:focus-visible,
body[data-page="paipan"] .restart:focus-visible {
  outline: 2px solid var(--qp-on-ink);
  outline-offset: 3px;
}

/* ---- 6. 页脚：合规文案 + 干支，两端对齐 ---- */
body[data-page="paipan"] footer {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 24px var(--qp-gut);
  border-top: 1px solid var(--qp-line);
  color: var(--qp-muted);
  font-size: 11px;
  letter-spacing: 0.1em;
  line-height: 1.9;
  text-align: left;
}
body[data-page="paipan"] footer a {
  color: var(--qp-ink-2);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--qp-line);
}
body[data-page="paipan"] footer a:hover {
  color: var(--qp-gold-deep);
}

/* =====================================================================
 * 7. 既有页面结构的兼容（本层不新增/不改 id，只把视觉语言接到现有 markup）
 *    ——判词类（.archive/.verdict/.read/.three/.action）落地后本节自动失焦。
 * ===================================================================== */

/* 页头：旧 .tool-head 的「眉题 + 宋体大标题」= 判词的次级声部，字号按参考稿 h1 之下收一档 */
body[data-page="paipan"] .tool-head {
  display: grid;
  gap: 10px;
  margin: 0 0 24px;
}
body[data-page="paipan"] .tool-head h1 {
  font-family: var(--qp-serif);
  font-size: clamp(24px, 2.6vw, 34px);
  font-weight: 600;
  line-height: 1.35;
  letter-spacing: 0.06em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .tool-head .sec-eyebrow {
  color: var(--qp-gold-deep);
  font-family: var(--qp-sans);
  font-size: 11.5px;
  font-weight: 400;
  letter-spacing: 0.42em;
}
body[data-page="paipan"] .tool-head .sec-eyebrow::before {
  width: 42px;
  background: var(--qp-gold);
  opacity: 1;
}
/* 引言：判词页不留装饰性 quote 带 */
body[data-page="paipan"] .epigraph {
  display: none;
}
/* 模块切换条（module-nav）已全站退役（2026-09-13），本组规则随之删除 */
/* 大卡片一律「纸上无壳」：结果区、空态不再各画一层圆角白卡 */
body[data-page="paipan"] #chart-result {
  margin-top: 24px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

/* ---- 8. 表单（排盘表单收进 .m-fold 后仍要能用） ---- */
body[data-page="paipan"] .toolbar {
  display: block;
  margin: 0 0 16px;
  padding: 0;
  border: 0;
  background: transparent;
  box-shadow: none;
}
body[data-page="paipan"] .toolbar::before,
body[data-page="paipan"] .toolbar::after {
  content: none;
}
body[data-page="paipan"] .chart-form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  width: 100%;
  max-width: 720px;
  margin: 0 auto;
  padding: 0;
}
body[data-page="paipan"] .chart-form > label,
body[data-page="paipan"] .chart-form > .field-row,
body[data-page="paipan"] .chart-form > .purpose-chips,
body[data-page="paipan"] .chart-form > .m-fold,
body[data-page="paipan"] .chart-form > .actions,
body[data-page="paipan"] .chart-form > .compare-fields {
  grid-column: 1 / -1;
}
body[data-page="paipan"] .chart-form label {
  display: grid;
  gap: 6px;
  color: var(--cl-muted);
  font-family: var(--qp-sans);
  font-size: 12px;
  letter-spacing: 0.04em;
}
body[data-page="paipan"] .field-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
  align-items: end;
  gap: 12px;
}
body[data-page="paipan"] .field-row .row-link {
  white-space: nowrap;
}
/* 输入控件：暖纸底 + 发丝边 + 金色焦点环（圆角收小，向判词页的直角语言靠） */
body[data-page="paipan"] .chart-form input,
body[data-page="paipan"] .chart-form select,
body[data-page="paipan"] .chart-form textarea {
  width: 100%;
  height: 44px;
  padding: 0 12px;
  border: 1px solid var(--cl-hairline);
  border-radius: var(--cl-r-sm);
  background: rgba(255, 251, 243, 0.72);
  color: var(--qp-ink);
  font-family: var(--qp-sans);
  font-size: 15px;
  box-shadow: none;
}
body[data-page="paipan"] .chart-form textarea {
  height: auto;
  min-height: 76px;
  padding: 10px 12px;
  line-height: 1.55;
}
body[data-page="paipan"] .chart-form input:focus,
body[data-page="paipan"] .chart-form select:focus,
body[data-page="paipan"] .chart-form textarea:focus {
  border-color: var(--qp-gold);
  box-shadow: 0 0 0 3px var(--cl-primary-ring);
  outline: none;
}
body[data-page="paipan"] .chart-form input::placeholder,
body[data-page="paipan"] .chart-form textarea::placeholder {
  color: var(--cl-muted-soft);
}
body[data-page="paipan"] .purpose-chips {
  display: none;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}
body[data-page="paipan"] .purpose-chips .chip {
  min-height: 40px;
  padding: 8px 14px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: transparent;
  color: var(--cl-muted);
  font-family: var(--qp-sans);
  font-size: 13px;
  cursor: pointer;
}
body[data-page="paipan"] .purpose-chips .chip.is-active {
  border-color: var(--qp-gold);
  background: var(--qp-gold-soft);
  color: var(--qp-gold-deep);
}
body[data-page="paipan"] .purpose-chips .chip-more {
  min-height: 40px;
  padding: 8px 4px;
  border: 0;
  background: transparent;
  color: var(--qp-ink);
  font-family: var(--qp-sans);
  font-size: 13px;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
  cursor: pointer;
}
/* 主按钮：暖金实底、直角、无渐变无投影、press 只加深
   （styles.css:2540 对该按钮写了 background+color+box-shadow !important，只能同带 !important 对抵） */
body[data-page="paipan"] .chart-form button,
body[data-page="paipan"] .chart-form button:hover {
  transform: none;
}
body[data-page="paipan"] .chart-form button[type="submit"] {
  height: 48px;
  min-width: 200px;
  padding: 0 24px;
  border: 0 !important;
  border-radius: 0;
  background: var(--qp-gold) !important;
  color: var(--qp-on-ink) !important;
  box-shadow: none !important;
  font-family: var(--qp-serif);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  cursor: pointer;
}
body[data-page="paipan"] .chart-form button[type="submit"]:hover,
body[data-page="paipan"] .chart-form button[type="submit"]:active {
  background: var(--qp-gold-deep) !important;
  box-shadow: none !important;
}
body[data-page="paipan"] .chart-form .actions {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
}
body[data-page="paipan"] .chart-form .actions button[type="submit"] {
  order: -1;
}
/* 工具行文字链：#now-btn/#copy-btn 在 styles.css:710 与 enhance.css:993 是 ID 级规则，
   这里必须带上 ID 才能压住那套「金色描边 ghost」（看着像禁用态的元凶） */
body[data-page="paipan"] .chart-form button.link,
body[data-page="paipan"] .chart-form button#now-btn,
body[data-page="paipan"] .chart-form button#copy-btn,
body[data-page="paipan"] .chart-form button#card-btn,
body[data-page="paipan"] .chart-form button.link:hover,
body[data-page="paipan"] .chart-form button#now-btn:hover,
body[data-page="paipan"] .chart-form button#copy-btn:hover,
body[data-page="paipan"] .chart-form button#card-btn:hover {
  height: auto;
  min-height: 44px;
  width: auto;
  padding: 8px 2px;
  border: 0;
  border-radius: 0;
  background: transparent;
  background-image: none;
  color: var(--qp-ink);
  box-shadow: none;
  font-family: var(--qp-sans);
  font-size: 13px;
  letter-spacing: 0;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
  cursor: pointer;
}
body[data-page="paipan"] .chart-form button.link:hover,
body[data-page="paipan"] .chart-form button#now-btn:hover,
body[data-page="paipan"] .chart-form button#copy-btn:hover,
body[data-page="paipan"] .chart-form button#card-btn:hover {
  text-decoration-color: var(--qp-gold);
}
body[data-page="paipan"] .chart-form button.link:disabled {
  color: var(--cl-muted-soft);
  opacity: 1;
  text-decoration: none;
  cursor: default;
}
body[data-page="paipan"] .compare-bar {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
}
body[data-page="paipan"] .compare-toggle {
  gap: 8px;
  color: var(--cl-muted) !important;
  font-size: 13px !important;
  font-weight: 400;
}
body[data-page="paipan"] .compare-toggle input {
  width: 18px !important;
  height: 18px !important;
  accent-color: var(--qp-gold);
}
body[data-page="paipan"] .compare-fields {
  padding: 16px;
  border: 1px solid var(--cl-hairline);
  border-radius: var(--cl-r-sm);
  background: rgba(255, 251, 243, 0.6);
}
/* 折叠壳（排盘表单的容器）：壳头做成一条档案带式的分隔线 */
body[data-page="paipan"] .m-fold {
  margin: 0;
  padding: 0;
  border: 0;
}
body[data-page="paipan"] .m-fold summary {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 0;
  border-bottom: 1px solid var(--cl-hairline-soft);
  color: var(--cl-muted);
  font-family: var(--qp-sans);
  font-size: 13px;
  list-style: none;
  cursor: pointer;
}
body[data-page="paipan"] .m-fold summary::-webkit-details-marker {
  display: none;
}
body[data-page="paipan"] .m-fold summary::after {
  width: 6px;
  height: 6px;
  border-right: 1.5px solid var(--cl-muted-soft);
  border-bottom: 1.5px solid var(--cl-muted-soft);
  transform: rotate(45deg);
  content: "";
}
body[data-page="paipan"] .m-fold[open] summary::after {
  transform: rotate(225deg);
}
/* 免责与历史入口：一行 fine print（判词页是左对齐的竖排叙事，不再居中收窄） */
body[data-page="paipan"] .chart-static-note {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
  max-width: none;
  margin: 24px 0 0;
}
body[data-page="paipan"] .chart-static-note .ly-note,
body[data-page="paipan"] .ly-note {
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--cl-muted-soft);
  font-size: 12px;
  line-height: 1.7;
}
body[data-page="paipan"] .chart-static-note a,
body[data-page="paipan"] .ly-history-link a {
  color: var(--qp-ink);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
}
/* 空态：一行提示足够，九方块装饰收掉（判词页的空态是「等你起局」，不是装饰画） */
body[data-page="paipan"] .chart-empty {
  max-width: 720px;
  margin: 24px auto 0;
  padding: 24px 16px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: transparent;
  text-align: left;
}
body[data-page="paipan"] .empty-motif {
  display: none;
}
body[data-page="paipan"] .empty-quote {
  margin: 0;
  font-family: var(--qp-serif);
  font-size: 18px;
  color: var(--qp-ink-2);
}
body[data-page="paipan"] .empty-hint {
  margin: 6px 0 0;
  color: var(--cl-muted);
  font-size: 13px;
}

/* ---- 9. 结果区内部：视图切换 / 规格带 / 结论 ---- */
body[data-page="paipan"] #chart-result .view-switch {
  margin: 0 0 16px;
  padding: 0;
  border: 0;
  border-bottom: 1px solid var(--qp-line);
  border-radius: 0;
  background: transparent;
}
body[data-page="paipan"] #chart-result .view-tab {
  padding: 8px 14px;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--cl-muted);
  font-size: 13px;
}
body[data-page="paipan"] #chart-result .view-tab + .view-tab {
  border-left: 1px solid var(--qp-line);
}
body[data-page="paipan"] #chart-result .view-tab.is-active {
  background: transparent;
  color: var(--qp-gold-deep);
}
body[data-page="paipan"] .free-summary {
  margin: 0 0 24px;
  padding: 0;
  border: 0;
  background: transparent;
}
body[data-page="paipan"] .free-summary-tag {
  display: inline-block;
  margin: 0 0 8px;
  padding: 2px 8px;
  border: 1px solid var(--cl-hairline);
  border-radius: var(--cl-r-pill);
  background: transparent;
  color: var(--cl-muted);
  font-family: var(--qp-sans);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.08em;
}
/* hero 答案：display 宋体，靠字号而非加粗拿层级 */
body[data-page="paipan"] .verdict-line {
  margin: 0;
  font-family: var(--qp-serif);
  font-size: 22px;
  font-weight: 600;
  line-height: 1.5;
  letter-spacing: 0.02em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .verdict-line.clamped {
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
body[data-page="paipan"] .verdict-more {
  margin: 4px 0 0;
  padding: 6px 2px;
  border: 0;
  background: transparent;
  color: var(--qp-ink);
  font-family: var(--qp-sans);
  font-size: 13px;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
  cursor: pointer;
}
body[data-page="paipan"] .verdict-direction {
  display: flex;
  gap: 8px;
  align-items: baseline;
  margin: 12px 0 0;
  color: var(--qp-ink-2);
  font-size: 15px;
  line-height: 1.55;
}
body[data-page="paipan"] .verdict-direction b {
  flex: none;
  color: var(--cl-muted);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.04em;
}
body[data-page="paipan"] .free-fold {
  margin-top: 12px;
  padding-top: 8px;
  border-top: 1px solid var(--cl-hairline-soft);
}
body[data-page="paipan"] .free-fold summary {
  color: var(--cl-muted);
  font-size: 13px;
  list-style: none;
  cursor: pointer;
}
body[data-page="paipan"] .free-fold summary::-webkit-details-marker {
  display: none;
}
body[data-page="paipan"] .free-fold ul {
  margin: 8px 0 0;
  padding-left: 18px;
  color: var(--qp-ink-2);
  font-size: 13px;
  line-height: 1.8;
}
body[data-page="paipan"] .verdict-note {
  margin: 12px 0 0;
  color: var(--cl-muted-soft);
  font-size: 11px;
  line-height: 1.7;
}
body[data-page="paipan"] .pro-only {
  display: none;
}
body[data-page="paipan"] #chart-result[data-view="pro"] .pro-only {
  display: block;
}
body[data-page="paipan"] .spec-evidence {
  margin: 4px 0 0;
  color: var(--cl-muted);
  font-size: 12px;
  line-height: 1.8;
}
body[data-page="paipan"] .quick-verdict-host {
  margin: 0 0 16px;
}
/* 规格带：局数/四柱/值符值使空亡驿马收成两行小字，上下各一条发丝线 */
body[data-page="paipan"] .result-spec {
  margin: 0 0 16px;
  padding: 12px 0;
  border-top: 1px solid var(--qp-line);
  border-bottom: 1px solid var(--qp-line);
}
/* 这里**故意不写 font-size**：本条是 ID 级（1,1,1），一旦声明就会压过 §2 里
   `.archive .ju` 的参考稿锚点 17px（2026-09-11 实测被压成 15px，而「阴遁6局」是这一屏
   第一个事实）。字号只保留一个真源 = `.archive .ju`，本规则只管色与字族。 */
body[data-page="paipan"] #result-ju {
  color: var(--qp-ink);
  font-family: var(--qp-serif);
}
body[data-page="paipan"] #result-title {
  font-family: var(--qp-serif);
  color: var(--qp-ink);
}

/* 九宫盘折叠壳（paipan.html 新增 .qp-fold.board-fold）：盘让出首屏，
   但展开后仍是完整证据。视觉与 .m-fold 同一套「一条发丝线 + 加号箭头」，
   让两种折叠壳在页面上是同一个控件语言；展开后不再套纸卡，直接落在纸面上。 */
body[data-page="paipan"] .qp-fold {
  margin: clamp(32px, 5vh, 52px) 0 0;
  padding: 0;
  border: 0;
  border-top: 1px solid var(--qp-line);
}
body[data-page="paipan"] .qp-fold > summary {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 16px 0;
  color: var(--cl-muted);
  font-family: var(--qp-serif);
  font-size: 14px;
  letter-spacing: 0.16em;
  list-style: none;
  cursor: pointer;
}
body[data-page="paipan"] .qp-fold > summary::-webkit-details-marker {
  display: none;
}
body[data-page="paipan"] .qp-fold > summary::after {
  width: 6px;
  height: 6px;
  border-right: 1.5px solid var(--cl-muted-soft);
  border-bottom: 1.5px solid var(--cl-muted-soft);
  transform: rotate(45deg);
  content: "";
}
body[data-page="paipan"] .qp-fold[open] > summary::after {
  transform: rotate(225deg);
}
body[data-page="paipan"] .qp-fold[open] > summary {
  border-bottom: 1px solid var(--cl-hairline-soft);
}
body[data-page="paipan"] .qp-fold-body {
  padding-top: 20px;
}

/* ---- 10. 九宫盘：3×3 保住方位，视觉降到「可展开的证据」，不与判词争主角 ---- */
body[data-page="paipan"] .board-wrap {
  overflow: visible;
  padding: 0;
}
body[data-page="paipan"] .board {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  width: 100%;
  max-width: 740px;
  margin: 0 auto;
  padding: 1px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: var(--cl-hairline);
  box-shadow: none;
}
body[data-page="paipan"] .palace {
  min-height: 104px;
  padding: 8px;
  border: 0;
  border-radius: 0;
  background: rgba(255, 251, 243, 0.82);
  box-shadow: none;
  animation: none;
  color: var(--cl-body);
}
body[data-page="paipan"] .palace:hover {
  border-color: transparent;
  box-shadow: var(--cl-shadow-tap);
  transform: none;
}
/* enhance.css:422 给 .palace.p5 写了 !important 背景，这里必须同带 !important 夺回 */
body[data-page="paipan"] .palace.p5 {
  background: var(--cl-card) !important;
}
body[data-page="paipan"] .palace-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 4px;
  color: var(--cl-muted);
  font-size: 11px;
}
body[data-page="paipan"] .palace-top .shen {
  color: var(--cl-muted);
  font-size: 11px;
  font-weight: 500;
}
/* 宫名与方位（2026-09-10 修复）：桌面显示「巽4 东南」（专业盘需宫名）；
   窄屏宫格小、网格位置即方位，才隐藏重复标注——隐藏规则在 @media (max-width: 860px) 内。 */
body[data-page="paipan"] .palace-badge {
  min-width: 0;
  height: auto;
  padding: 1px 8px;
  border: 1px solid var(--cl-hairline);
  border-radius: var(--cl-r-pill);
  font-size: 11px;
  font-weight: 500;
}
/* 吉凶徽章：引擎实际输出 da_ji/xiao_ji/ping/xiao_xiong/da_xiong 五档
   （backend/app.py:8119），全站旧 CSS 只写了 .ji/.xiong/.ping。本层把五档全部接上语义色。 */
body[data-page="paipan"] .palace-badge.ji,
body[data-page="paipan"] .palace-badge.xiao_ji,
body[data-page="paipan"] .palace-badge.da_ji {
  border-color: transparent;
  background: var(--cl-success-tint);
  color: var(--cl-success-ink);
}
body[data-page="paipan"] .palace-badge.xiong,
body[data-page="paipan"] .palace-badge.xiao_xiong,
body[data-page="paipan"] .palace-badge.da_xiong {
  border-color: transparent;
  background: var(--cl-error-tint);
  color: var(--cl-error-ink);
}
body[data-page="paipan"] .palace-badge.ping {
  border-color: var(--cl-hairline);
  background: transparent;
  color: var(--cl-muted);
}
body[data-page="paipan"] .palace-badge.da_xiong {
  background: var(--cl-error);
  color: #fff;
}
body[data-page="paipan"] .palace-badge.da_ji {
  background: var(--cl-success);
  color: #1a2b1e;
}
body[data-page="paipan"] .palace-gan {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 8px;
  margin: 8px 0 6px;
}
body[data-page="paipan"] .palace-gan .tian {
  font-family: var(--qp-serif);
  font-size: 22px;
  color: var(--qp-ink);
  letter-spacing: 0;
}
body[data-page="paipan"] .palace-gan .di {
  font-family: var(--qp-serif);
  font-size: 15px;
  color: var(--cl-muted-soft);
}
body[data-page="paipan"] .palace-star,
body[data-page="paipan"] .palace-men {
  font-family: var(--qp-sans);
  font-size: 12.5px;
  color: var(--cl-body);
}
/* 五行五色收成单色：颜色只表达状态，不做装饰编码（本页唯一彩色是暖金） */
body[data-page="paipan"] .palace-star.star-jin,
body[data-page="paipan"] .palace-star.star-mu,
body[data-page="paipan"] .palace-star.star-shui,
body[data-page="paipan"] .palace-star.star-huo,
body[data-page="paipan"] .palace-star.star-tu {
  color: var(--cl-body);
}
body[data-page="paipan"] .palace-men {
  font-weight: 500;
  color: var(--cl-body-strong);
}
body[data-page="paipan"] .palace-extra {
  margin-top: 4px;
  color: var(--cl-muted-soft);
  font-size: 11px;
  line-height: 1.4;
}
body[data-page="paipan"] .palace-markers {
  gap: 4px;
  margin-top: 6px;
}
body[data-page="paipan"] .palace-star:empty,
body[data-page="paipan"] .palace-men:empty,
body[data-page="paipan"] .palace-markers:empty {
  display: none;
}
body[data-page="paipan"] .marker {
  padding: 0 6px;
  border: 1px solid var(--cl-hairline);
  border-radius: var(--cl-r-pill);
  background: transparent;
  color: var(--cl-muted);
  font-size: 11px;
  line-height: 1.6;
}
body[data-page="paipan"] .marker.kong,
body[data-page="paipan"] .marker.menpo {
  border-color: rgba(198, 69, 69, 0.3);
  background: transparent;
  color: var(--cl-error-ink);
}
body[data-page="paipan"] .marker.ma,
body[data-page="paipan"] .marker.yong {
  border-color: rgba(214, 168, 92, 0.6);
  background: transparent;
  color: var(--cl-amber-ink);
}
/* 用神宫：一档金色发丝边，主用神宫走墨面翻转（判词页的海报感来自墨底）
   enhance.css:401-408 对 .palace.is-yongshen 的 background/border/box-shadow 都写了
   !important，本层同带 !important 夺回。 */
body[data-page="paipan"] .palace.is-yongshen {
  border-color: rgba(214, 168, 92, 0.55) !important;
  background: var(--cl-card) !important;
  box-shadow: none !important;
  animation: none;
}
body[data-page="paipan"] .palace.is-yong-primary {
  border-color: var(--cl-dark) !important;
  background: var(--cl-dark) !important;
  box-shadow: none !important;
  animation: none;
  color: var(--cl-on-dark-soft);
}
body[data-page="paipan"] .palace.is-yong-primary .palace-top,
body[data-page="paipan"] .palace.is-yong-primary .palace-top .shen,
body[data-page="paipan"] .palace.is-yong-primary .palace-extra {
  color: var(--cl-on-dark-soft);
}
body[data-page="paipan"] .palace.is-yong-primary .palace-gan .tian {
  color: var(--cl-on-dark);
}
body[data-page="paipan"] .palace.is-yong-primary .palace-gan .di {
  color: var(--cl-on-dark-soft);
}
body[data-page="paipan"] .palace.is-yong-primary .palace-star,
body[data-page="paipan"] .palace.is-yong-primary .palace-men,
body[data-page="paipan"] .palace.is-yong-primary .palace-star.star-jin,
body[data-page="paipan"] .palace.is-yong-primary .palace-star.star-mu,
body[data-page="paipan"] .palace.is-yong-primary .palace-star.star-shui,
body[data-page="paipan"] .palace.is-yong-primary .palace-star.star-huo,
body[data-page="paipan"] .palace.is-yong-primary .palace-star.star-tu {
  color: var(--cl-on-dark-mid);
}
/* 墨面卡（主用神宫）上的吉凶徽章要另配色：亮纸档那套 tint 只有 0.1 透明度，
 * 垫在近黑格子上等于没垫。实测七档在这格上的对比度：
 *   ji 6.36 / ping 9.73 / xiong 6.55 / da_ji 6.08 / da_xiong 4.84 —— 达标，不动
 *   xiao_ji 1.95、xiao_xiong 2.02 —— 不达标（AA 要 4.5），本段原先漏了这两档
 * 亮纸档 :1326 的注释写着「旧 CSS 只写了 .ji/.xiong/.ping，本层把五档全部接上」，
 * 本段当时只跟着补了三档，同一个漏法在这里重犯了一次。 */
body[data-page="paipan"] .palace.is-yong-primary .palace-badge.ji,
body[data-page="paipan"] .palace.is-yong-primary .palace-badge.xiao_ji {
  background: rgba(93, 184, 114, 0.22);
  color: #a8dcb5;
}
body[data-page="paipan"] .palace.is-yong-primary .palace-badge.xiong,
body[data-page="paipan"] .palace.is-yong-primary .palace-badge.xiao_xiong {
  background: rgba(198, 69, 69, 0.24);
  color: #f0b3b3;
}
body[data-page="paipan"] .palace.is-yong-primary .palace-badge.ping {
  background: rgba(255, 251, 243, 0.12);
  border-color: rgba(255, 251, 243, 0.22);
  color: var(--cl-on-dark);
}
body[data-page="paipan"] .palace.is-yong-primary .marker {
  border-color: rgba(255, 251, 243, 0.24);
  color: var(--cl-on-dark-mid);
}
body[data-page="paipan"] .board-hint {
  display: none;
  margin: 8px 0 0;
  color: var(--cl-muted-soft);
  font-size: 11.5px;
  line-height: 1.7;
}
body[data-page="paipan"] #chart-result .legend {
  margin: 0 0 12px;
  padding: 8px 12px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: transparent;
  color: var(--cl-muted);
  font-size: 11.5px;
}

/* ---- 11. 宫位详情（承接暗干/宫名/象意） ---- */
body[data-page="paipan"] #palace-detail {
  margin-top: 16px;
  padding: 16px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: rgba(255, 251, 243, 0.7);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}
body[data-page="paipan"] #palace-detail .palace-detail-head {
  margin-bottom: 12px;
}
body[data-page="paipan"] #palace-detail .palace-detail-head h3 {
  font-family: var(--qp-serif);
  font-size: 18px;
  font-weight: 600;
  color: var(--qp-ink);
}
body[data-page="paipan"] #palace-detail .palace-detail-head button {
  height: 36px;
  padding: 0 12px;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--qp-ink);
  font-size: 13px;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
}
body[data-page="paipan"] #palace-detail .detail-facts {
  grid-template-columns: repeat(auto-fit, minmax(104px, 1fr));
  gap: 8px;
}
body[data-page="paipan"] #palace-detail .detail-facts div {
  padding: 8px 10px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: transparent;
}
body[data-page="paipan"] #palace-detail .detail-facts span {
  color: var(--cl-muted);
  font-size: 11px;
}
body[data-page="paipan"] #palace-detail .detail-facts strong {
  color: var(--qp-ink);
  font-size: 14px;
  font-weight: 500;
}
body[data-page="paipan"] #palace-detail .detail-explanation {
  color: var(--qp-ink-2);
  font-size: 14px;
  line-height: 1.8;
}
body[data-page="paipan"] .detail-meanings {
  display: grid;
  gap: 6px;
  margin: 0;
  padding: 12px 0 0;
  border-top: 1px solid var(--cl-hairline-soft);
  list-style: none;
}
body[data-page="paipan"] .detail-meanings li {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 8px;
  color: var(--cl-muted);
  font-size: 12.5px;
  line-height: 1.7;
}
body[data-page="paipan"] .detail-meanings b {
  flex: none;
  color: var(--cl-body-strong);
  font-weight: 500;
}
body[data-page="paipan"] .detail-meanings span::before {
  content: "\2014  ";
  color: var(--cl-muted-soft);
}
body[data-page="paipan"] .palace-veil {
  position: fixed;
  inset: 0;
  z-index: 90;
  display: none;
  background: rgba(46, 40, 32, 0.4);
}
body[data-page="paipan"].sheet-open .palace-veil {
  display: block;
}
body[data-page="paipan"].sheet-open {
  overflow: hidden;
}

/* ---- 12. 三件事/付费墙：一张卡，无锁图标、无双层边框、无虚线 ---- */
body[data-page="paipan"] .decision-guide {
  /* 本元素同时带 .three（§4 那条 margin-top:clamp(40px,6vh,68px)，与本规则特异性同为 0,2,1）。
     这里**绝不能写 margin 简写**：简写会连 margin-top 一起声明，而本规则书写更靠后，
     于是把分段呼吸压掉（2026-09-11 实测 68px→24px；写成 `margin:0` 也只会变成 0px，
     并不会「让 .three 生效」）。只声明其余三边，margin-top 唯一真源留给 .three。 */
  margin-right: 0;
  margin-bottom: 0;
  margin-left: 0;
  padding: 0;
  border: 0;
  background: transparent;
  box-shadow: none;
}
body[data-page="paipan"] .decision-guide::before {
  content: none;
}
body[data-page="paipan"] #decision-guide .guide-lock {
  padding: 16px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: rgba(255, 251, 243, 0.6);
  text-align: left;
  box-shadow: none;
}
body[data-page="paipan"] #decision-guide .guide-lock h3 {
  margin: 0 0 6px;
  font-family: var(--qp-serif);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--qp-ink);
}
body[data-page="paipan"] #decision-guide .guide-lock > p,
body[data-page="paipan"] .guide-lock-hint {
  margin: 0 0 12px;
  color: var(--cl-muted);
  font-size: 13px;
  line-height: 1.7;
}
body[data-page="paipan"] .guide-unlock-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  gap: 8px 16px;
}
/* 解锁钮：暖金实底（styles.css:2540 的 .deep-btn !important 只能同带 !important 对抵） */
body[data-page="paipan"] .deep-btn {
  height: 48px;
  min-width: 200px;
  margin: 0;
  padding: 0 24px;
  border: 0 !important;
  border-radius: 0;
  background: var(--qp-gold) !important;
  color: var(--qp-on-ink) !important;
  box-shadow: none !important;
  font-family: var(--qp-serif);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.16em;
}
body[data-page="paipan"] .deep-btn:hover:not(:disabled),
body[data-page="paipan"] .deep-btn:active:not(:disabled) {
  background: var(--qp-gold-deep) !important;
  box-shadow: none !important;
  transform: none;
}
body[data-page="paipan"] .deep-btn:disabled {
  background: var(--cl-hairline) !important;
  color: var(--cl-muted) !important;
  box-shadow: none !important;
  opacity: 1;
}
/* 次级动作「解锁深度分析」(.deep-btn-ghost) 的浅色纸面口径**已移除**：
   本页唯一的 ghost 按钮（#guide-deep-btn）在 paipan.html 里位于 .action 墨底内，
   由上面 §5 的 .action 规则统一接管；保留一套只会在墨底上与它打架
   （同特异度、书写顺序在后 → 墨字压墨底，实测不可见）。
   若日后 HTML 把 ghost 挪回纸面，再补一套纸面口径即可。 */
body[data-page="paipan"] .guide-content {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
}
body[data-page="paipan"] .guide-content h3 {
  font-family: var(--qp-serif);
  font-size: 18px;
  font-weight: 600;
  color: var(--qp-ink);
}
/* 三件事的卡片由 app.js 注入到 .decision-items：结构是
   .decision-item > .decision-no + div > (strong + em.ai-badge) + p，
   与参考稿的 .tcard(.tn/strong/p) 一一对应。这里把 .decision-* 建成与 .tcard 等价的
   第二套落法（数值同 §4，改一处要同时改两处；.tgrid 版留给契约的类名）。
   首个子节点 .hecan-model-line 是「消耗 N 积分」徽标行，必须横跨整行。 */
body[data-page="paipan"] .decision-items {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
body[data-page="paipan"] .decision-items > .hecan-model-line {
  grid-column: 1 / -1;
  margin: 0;
}
body[data-page="paipan"] .decision-item {
  padding: 26px 26px 28px;
  background: var(--cl-canvas-veil);
  border: 1px solid rgba(255, 255, 255, 0.7);
  border-top: 2px solid var(--qp-gold);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  box-shadow: var(--qp-shadow-card);
  transition: transform 0.4s var(--qp-ease), box-shadow 0.4s var(--qp-ease);
}
body[data-page="paipan"] .decision-item:hover {
  transform: translateY(-4px);
  box-shadow: var(--qp-shadow-card-hover);
}
body[data-page="paipan"] .decision-no {
  display: block;
  font-family: var(--qp-serif);
  font-size: 34px;
  font-weight: 900;
  line-height: 1;
  color: var(--qp-gold);
}
body[data-page="paipan"] .decision-item strong {
  display: block;
  margin: 14px 0 8px;
  font-size: 15.5px;
  font-weight: 500;
  letter-spacing: 0.05em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .decision-item p {
  margin: 0;
  color: var(--qp-ink-2);
  font-size: 13px;
  line-height: 1.85;
}
body[data-page="paipan"] .decision-item strong .ai-badge {
  margin-left: 4px;
  vertical-align: 1px;
}
body[data-page="paipan"] .decision-item .model-badge {
  font-size: 11px;
  color: var(--cl-muted);
}

/* ---- 13. 结果动作 / 深度分析 / 证据链 / 跨模块对照 ---- */
body[data-page="paipan"] #chart-result .result-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
  margin: 16px 0;
}
body[data-page="paipan"] #chart-result .result-actions button {
  height: auto;
  min-height: 44px;
  padding: 10px 2px;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--qp-ink);
  box-shadow: none;
  font-family: var(--qp-sans);
  font-size: 13px;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--cl-hairline);
}
body[data-page="paipan"] #chart-result .result-actions button:hover {
  color: var(--qp-gold-deep);
  text-decoration-color: var(--qp-gold);
  transform: none;
  box-shadow: none;
}
body[data-page="paipan"] #chart-result .deep-panel,
body[data-page="paipan"] #chart-result .evidence-chain,
body[data-page="paipan"] #chart-result .cross-ref,
body[data-page="paipan"] #compare-result {
  margin-top: 24px;
  padding: 16px;
  border: 1px solid var(--cl-hairline);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
body[data-page="paipan"] #chart-result .deep-panel::before,
body[data-page="paipan"] #chart-result .evidence-chain::before {
  content: none;
}
body[data-page="paipan"] #chart-result .deep-panel h3,
body[data-page="paipan"] #chart-result .evidence-chain h3 {
  font-family: var(--qp-serif);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .evidence-note,
body[data-page="paipan"] .share-hint {
  color: var(--cl-muted);
  font-size: 12.5px;
}
body[data-page="paipan"] .deep-result:empty,
body[data-page="paipan"] #deep-cost:empty {
  display: none;
}
body[data-page="paipan"] .more-shu {
  margin-top: 32px;
  /* 左右随页栅 --qp-gut（与页脚一致）：本节是 main 直接子级、全幅铺开，
     此前左右 0 让首张卡贴到屏边（2026-09-13） */
  padding: 24px var(--qp-gut) 0;
  border-top: 1px solid var(--qp-line);
  background: transparent;
}
body[data-page="paipan"] .more-shu-head {
  color: var(--cl-muted);
  font-size: 12px;
  letter-spacing: 0.08em;
}
body[data-page="paipan"] .more-shu-item strong {
  font-family: var(--qp-serif);
  color: var(--qp-ink);
}
/* 起盘仪式等待期：结论与规格带先隐去，别剧透揭示 */
body[data-page="paipan"].ritual-board-wait #chart-result .result-spec,
body[data-page="paipan"].ritual-board-wait #chart-result .free-summary {
  opacity: 0;
}

/* =====================================================================
 * 14. 桌面（≥861px）：表单用满内容宽 + 结果区左右分栏
 * ===================================================================== */
@media (min-width: 861px) {
  /* 1) 表单 4 列网格 */
  body[data-page="paipan"] .chart-form {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
    max-width: none;
  }
  body[data-page="paipan"] .chart-form > .field-row {
    grid-column: span 2;
  }
  body[data-page="paipan"] .chart-form > #purpose-field {
    grid-column: span 1;
  }
  /* 2) 折叠壳在桌面也是一张纸：enhance.css:2224 的 display:contents 会把壳内字段
     甩进表单 4 列网格空位（实测三字段被挤成 96px 宽、内容截断），连 display 一起夺回 */
  body[data-page="paipan"] .m-fold {
    display: block;
  }
  body[data-page="paipan"] .m-fold[open] {
    padding: 0 16px 16px;
    border: 1px solid var(--cl-hairline);
    border-radius: 0;
    background: rgba(255, 251, 243, 0.5);
  }
  body[data-page="paipan"] .m-fold-body {
    display: block;
  }
  /* styles.css 的 .chart-form .question-field{grid-column:span 2} 是后代选择器，
     会伸进壳里把「背景」撑占两列，导致第三个字段被挤到下一行——壳内重新定为单列 */
  body[data-page="paipan"] .m-fold-body > label {
    grid-column: auto;
  }
  /* 3) 问事向导不再把「展开」甩到最右端 */
  body[data-page="paipan"] .ask-guide {
    max-width: 640px;
  }
  body[data-page="paipan"] .ask-guide-head {
    justify-content: flex-start;
    gap: 16px;
  }
  /* 4) 结果区：**单栏叙事**，不再做「左结论 / 右盘面」两栏。
     2026-09-11 的新结构把首屏动线定成 档案带 → 判词 → 解局四条 → 三件事 → 操作条，
     九宫盘收进 .board-fold（默认收起）排在操作条之后；盘面已不在首屏与判词并列，
     两栏网格只会把判词挤到 640px 并留出半屏空白。判词页是竖排的判词纸，单栏才对。 */
  body[data-page="paipan"] #chart-result {
    display: block;
    padding: 0;
  }
  /* 不写 #chart-result > * + * 的统一外边距：ID 级选择器会压掉 .action / .three 各自的
     clamp 节奏（参考稿的分段呼吸靠那两条），改为只给新出现的兄弟节点补间距。 */
  body[data-page="paipan"] #chart-result > .view-switch {
    margin-top: 32px;
  }
  body[data-page="paipan"] .board {
    max-width: 740px;
    margin: 0 auto;
  }
  body[data-page="paipan"] .palace {
    min-height: 132px;
    padding: 10px;
  }
  /* 5) 深色面板里的解锁钮保底宽度（观感需要，故显式声明） */
  body[data-page="paipan"] #deep-panel .deep-btn {
    width: auto;
    min-width: 220px;
  }
  /* 6) 宽屏判词与次级结论重新立起字阶 */
  body[data-page="paipan"] .verdict-line {
    font-size: 26px;
    line-height: 1.45;
  }
  body[data-page="paipan"] #result-title {
    font-size: 16px;
  }
  /* 7) 空态、免责行与页尾：宽屏用满宽度 */
  body[data-page="paipan"] .chart-empty {
    max-width: none;
    padding: 32px 0;
  }
  body[data-page="paipan"] .chart-static-note {
    max-width: none;
  }
  /* 桌面（≥861）四列等分：本条在 1827 的 `@media (min-width: 861px)` 里，
     **不管移动端**——T29 工单 §2.5/§2.6 把它记成「≤1600 断点内的规则」是口径错，已顶回上报。
     移动端奇门页的 .more-shu 由 header-v2.css §8 接管（(0,2,1)+!important），
     与这里不构成对抗：两者作用宽度不重叠，本条因此**不删**（删了就动桌面）。
     ≤861–960 这一档另受下面 1922 的参考稿断点影响，与本条无关。 */
  body[data-page="paipan"] .more-shu {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 24px;
  }
  body[data-page="paipan"] .more-shu-head {
    grid-column: 1 / -1;
  }
}

/* =====================================================================
 * 15. 断点 ≤960（参考稿唯一断点）：nav 隐藏、解局四→二列、三件事→一列
 * ===================================================================== */
@media (max-width: 960px) {
  /* 参考稿在这一档把整个 `nav` 收掉。本页有两支 nav，必须分开处理：
     ① .module-nav（本页模块切换条，2026-09-13 已全站退役）；
     ② .site-header 的 nav.tabs（全站契约，CONTRACT §2「一个字都不能动」）→ 留到 860px 再收。
        原因：enhance.css:1151 在 @media (min-width:861px) 里把汉堡 .menu-trigger 设为
        display:none；若在 960px 就隐藏 tabs，861–960 这一档会变成「没有 tabs、也没有汉堡」，
        整站导航在该宽度断掉。tabs 的隐藏放在下面的 ≤860 段，与汉堡交接。
        这是对参考稿断点口径的一处有意收窄，理由是本站全站头部契约优先。 */
  body[data-page="paipan"] .read-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* 两列后：第 2 格去掉右边框（否则中缝出现双线），前两格补下边框当行分隔 */
  body[data-page="paipan"] .r-cell:nth-child(2) {
    border-right: 0;
  }
  body[data-page="paipan"] .r-cell:nth-child(-n + 2) {
    border-bottom: 1px solid var(--qp-line);
  }
  body[data-page="paipan"] .tgrid,
  body[data-page="paipan"] .decision-items {
    grid-template-columns: 1fr;
  }
  body[data-page="paipan"] .ask {
    margin-left: 0;
  }
}

/* =====================================================================
 * 16. 断点：≤860（移动与窄平板，既有的表单/盘面折叠口径）
 * ===================================================================== */
@media (max-width: 860px) {
  body[data-page="paipan"] main {
    width: calc(100% - 24px);
    padding: 0 0 40px;
  }
  body[data-page="paipan"] .wrap {
    padding: 20px 16px 44px;
  }
  /* 宫名与方位：窄屏网格小，位置即方位，不再重复标注（桌面段显示） */
  body[data-page="paipan"] .palace-top .gong-name {
    display: none;
  }
  /* ≤860：汉堡 .menu-trigger 上岗（enhance.css:861），此时才把全站 tabs 收掉 */
  body[data-page="paipan"] .site-header nav.tabs {
    display: none;
  }
  body[data-page="paipan"] .tool-head {
    margin: 0 0 16px;
  }
  body[data-page="paipan"] .tool-head h1 {
    font-size: 24px;
  }
  body[data-page="paipan"] .chart-form {
    max-width: none;
    gap: 10px 12px;
  }
  body[data-page="paipan"] .m-fold-body {
    display: grid;
    gap: 10px;
  }
  body[data-page="paipan"] .chart-form .actions button[type="submit"] {
    width: 100%;
    min-width: 0;
  }
  body[data-page="paipan"] #chart-result {
    margin-top: 16px;
  }
  body[data-page="paipan"] .verdict-line {
    font-size: 20px;
  }
  /* 事项 chips 上位，原生 select 收起；点「更多事项」再展开全量 17 类 */
  body[data-page="paipan"] .purpose-chips {
    display: flex;
  }
  body[data-page="paipan"] #purpose-field {
    display: none;
  }
  body[data-page="paipan"] #purpose-field.purpose-open {
    display: grid;
  }
  /* 起局法（时家转盘是唯一选项）等窄屏无意义的技术选项收进折叠壳 */
  body[data-page="paipan"] .chart-form label:has(> #chart-method) {
    display: none;
  }
  body[data-page="paipan"] .board-hint {
    display: block;
  }
  body[data-page="paipan"] #chart-result .legend {
    display: none;
  }
  /* 宫位详情 → 底部抽屉 */
  body[data-page="paipan"] #palace-detail {
    position: fixed;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 95;
    max-height: 62vh;
    margin: 0;
    padding: 16px 16px calc(16px + env(safe-area-inset-bottom));
    border: 0;
    border-top: 1px solid var(--cl-hairline);
    background: var(--cl-canvas);
    box-shadow: 0 -8px 24px rgba(46, 40, 32, 0.12);
    overflow-y: auto;
    transform: translateY(100%);
    opacity: 0;
    transition: transform 0.24s var(--qp-ease), opacity 0.24s var(--qp-ease);
  }
  body[data-page="paipan"].sheet-open #palace-detail {
    transform: none;
    opacity: 1;
  }
}

/* =====================================================================
 * 17. 断点：≤620（窄屏手机）
 * ===================================================================== */
@media (max-width: 620px) {
  body[data-page="paipan"] .chart-form .actions {
    gap: 4px 16px;
  }
  body[data-page="paipan"] .palace-extra {
    display: none;
  }
  body[data-page="paipan"] .palace {
    min-height: 96px;
    padding: 6px;
  }
  body[data-page="paipan"] .palace-gan {
    margin: 6px 0 4px;
  }
  body[data-page="paipan"] .board {
    max-width: none;
  }
  /* 判词在窄屏要能两行读完：内边距让位给字号 */
  body[data-page="paipan"] .r-cell {
    padding: 20px 16px 22px;
  }
  body[data-page="paipan"] .action {
    padding: 18px 16px;
  }
}

/* ---- 18. 触控与动效降级 ---- */
@media (hover: none) {
  body[data-page="paipan"] .palace:hover {
    box-shadow: none;
  }
  body[data-page="paipan"] .tcard:hover,
  body[data-page="paipan"] .decision-item:hover {
    transform: none;
  }
}

/* 尊重系统「减少动态效果」：参考稿口径——视频不播、改海报图，入场与漂移停掉。
   注意：这里不再依赖 /backgrounds/dawn.jpg 存在——底纹来自 .up-bg 的暖纸渐变。 */
@media (prefers-reduced-motion: reduce) {
  body[data-page="paipan"] .bg video,
  body[data-page="paipan"] .bg > video {
    display: none;
  }
  body[data-page="paipan"] .bg {
    /* 参考稿口径：视频停播、改用海报图。但 dawn.jpg 目前尚未提供，
       若像参考稿那样直接写 `background: url(...) center/cover`（简写会**替换**掉底色），
       本页在「减少动效 + 海报缺失」时会退成 html 的 #eae3d9 平色，丢掉破晓渐变。
       故把海报图作为**最上层叠加**在暖纸兜底之上：图在则覆盖，图缺则该层为空、暖纸自然露出，
       两种情况都不会出现空白或黑块。 */
    background-image: url("/backgrounds/dawn.jpg?v=cb9784fb"), var(--qp-paper);
    background-position: center;
    background-size: cover;
    background-repeat: no-repeat;
  }
  body[data-page="paipan"] .rise,
  body[data-page="paipan"] .glow {
    animation: none;
  }
  body[data-page="paipan"] .tcard,
  body[data-page="paipan"] .decision-item,
  body[data-page="paipan"] .action .chip,
  body[data-page="paipan"] .action .deep-btn,
  body[data-page="paipan"] .action .unlock {
    transition: none;
  }
}

body[data-page="paipan"] .chart-form button,
body[data-page="paipan"] .purpose-chips .chip,
body[data-page="paipan"] #chart-result .view-tab,
body[data-page="paipan"] .deep-btn,
body[data-page="paipan"] #chart-result .result-actions button,
body[data-page="paipan"] .action .unlock,
body[data-page="paipan"] .action .chip {
  touch-action: manipulation;
}

/* ---- 16. 背景视频不可播的兜底（2026-09-12） ----
 * 嵌入式浏览器/省电模式拦 autoplay 时，video 元素亮着静态海报帧且薄纱照旧——
 * 用户看到「不动且很亮」。paipan.html 的 watchdog 判定帧未走即挂 .bg--static：
 * 海报层（.veil::before 与 video 的 poster 均为 dawn.jpg）转 Ken Burns 慢漂移，
 * 薄纱同步减淡一档贴近播放时的观感；视频真正开播（playing）即摘类回归真视频。 */
body[data-page="paipan"] .bg.bg--static video,
body[data-page="paipan"] .bg.bg--static .veil::before {
  animation: paipan-bg-drift 30s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite alternate;
  will-change: transform;
}

@keyframes paipan-bg-drift {
  from { transform: scale(1.03); }
  to { transform: scale(1.13) translate(-1.6%, 1.2%); }
}

body[data-page="paipan"] .bg.bg--static .veil {
  background: linear-gradient(180deg, rgba(255, 251, 243, 0.58) 0%, rgba(255, 251, 243, 0.28) 38%, rgba(255, 251, 243, 0.42) 100%);
}

/* ---- 16b. 兜底加强（2026-09-12）：不依赖 video 画海报 ----
 * 若环境连 H.264 解码都没有，video 元素可能整块透明——漂移必须落在
 * 与 video 解耦的专用层上：.bg::after 铺 dawn.jpg 并做大幅慢漂移
 * （inset 负值防平移露边）。.veil z-index:3 在其上，正文在其上，层级不变。 */
body[data-page="paipan"] .bg.bg--static::after {
  content: "";
  position: absolute;
  inset: -6%;
  z-index: 0;
  background: url("/backgrounds/dawn.jpg?v=cb9784fb") center / cover no-repeat;
  animation: paipan-bg-drift 22s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite alternate;
  will-change: transform;
}

/* 视频本体与海报层的漂移加大到可感知（此前 30s/1.03→1.13 太细微，用户实测「还是不动」） */
body[data-page="paipan"] .bg.bg--static video,
body[data-page="paipan"] .bg.bg--static .veil::before {
  animation: paipan-bg-drift 22s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite alternate;
}

@keyframes paipan-bg-drift {
  from { transform: scale(1.06) translate(0.8%, -0.6%); }
  to { transform: scale(1.16) translate(-2.4%, 1.8%); }
}

/* ---- 16c. 双层差速漂移（2026-09-12）：单层 Ken Burns 在亮天空上读不出「动」。
 * 底层海报横向缓移 + 上层云纱（同图放大、低不透明度、反向）视差，
 * 叠加出「云在走」的观感。仅 bg--static 兜底态生效。 ---- */
body[data-page="paipan"] .bg.bg--static::after {
  inset: -8%;
  animation-name: paipan-bg-pan-a;
  animation-duration: 34s;
}

body[data-page="paipan"] .bg.bg--static .veil::before {
  opacity: 0.55;
  inset: -10%;
  animation-name: paipan-bg-pan-b;
  animation-duration: 26s;
}

@keyframes paipan-bg-pan-a {
  from { transform: scale(1.08) translate(1.6%, 0.4%); }
  to { transform: scale(1.16) translate(-2.2%, -1.2%); }
}

@keyframes paipan-bg-pan-b {
  from { transform: scale(1.12) translate(-1.8%, 0.8%); }
  to { transform: scale(1.2) translate(2%, -1%); }
}

/* ---- 16d. GIF 动图云海兜底（2026-09-12 定稿） ----
 * 用户环境（无 H.264 解码 / 拦 autoplay 的 webview）里视频必挂、CSS 位移漂移又微弱到
 * 无法感知（像素差分 0.0）。dawn.mp4 转出的 dawn.gif（480p/9fps/2.6MB）任何浏览器
 * 都原生循环播放、无自动播放限制——bg--static 下 ::after 直接铺动图云海，
 * 不再做位移动画。视频可播的环境不受影响（playing 即摘类，::after 不渲染）。 */
/* 16d 的 GIF 兜底在 16j 里退回静图海报，本条整族作废；留着 `inset:0`/`animation:none`
   也全被 16i 与下面的 animation 组覆盖，故整条删除，只留此说明。 */

body[data-page="paipan"] .bg.bg--static video,
body[data-page="paipan"] .bg.bg--static .veil::before {
  animation: none;
}

/* ---- 16e. 素材近静态的补偿（2026-09-12 实测定案） ----
 * dawn.mp4 播放中 3 秒像素变化率仅 0.0001——素材本身近乎静图（HEVC 转 H.264 后如此），
 * 用户感知即「完全不动」。无论视频还是 GIF 兜底，永久叠加可感知的 Ken Burns
 * 推近平移（24s 一循环，GPU 合成层，开销可忽略），背景从此肉眼可见地动。 */
body[data-page="paipan"] .bg video,
body[data-page="paipan"] .bg.bg--static::after {
  animation: paipan-bg-pan-a 24s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite alternate;
  will-change: transform;
}

/* ---- 16f. 定稿：GIF 动图云海为常驻保底层（2026-09-12） ----
 * dawn.webm/VP8 上线后，无 H.264 的开源 Chromium 直接播放真视频；
 * 连 webm 都解不了的极端环境，video 透明（已去 poster），露出本层 GIF 动图。
 * 16b-16e 的位移动画全部作废（素材本就带云海运动，无需补偿）。 */
/* ---- 16i. 16f 的常驻层改回按需（2026-10-04）----
 * 16f 把 GIF 层写成 `.bg::after` 无条件常驻，注释里的理由是"连 webm 都解不了的极端环境
 * 露出本层"——但无条件意味着**视频能播时也在下载这 2.6MB**：它 z-index:-1 在 video 之下，
 * 交叉淡入的两支 opacity 恒合计 1.0，一个像素都露不出来。
 * 390×844 + iPhone UA 线上实测：video readyState=4、currentTime 在走、err=0，
 * 而 dawn.gif 仍进 2,623KB（整页 3,673KB）。
 * 2133 行那段注释早就写了"paipan.html 的 watchdog 判定帧未走即挂 .bg--static"——
 * 这个 watchdog 从来没被写出来，所以 2136-2242 整族兜底态规则至今全是死代码。
 * 这里把选择器收回 .bg--static 之下，并在 paipan.html 补上那个 watchdog。 */
body[data-page="paipan"] .bg.bg--static::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1; /* video(auto) 与 .veil(z3) 之下；.bg 暖纸渐变之上 */
  background: url("/backgrounds/dawn.jpg?v=cb9784fb") center / cover no-repeat;
  /* 16j：静图 + 现成的 Ken Burns 位移，替掉 2.63MB 的 dawn.gif（见下面那条说明） */
  animation: paipan-bg-pan-a 24s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite alternate;
  will-change: transform;
}

/* ---- 16j. 兜底态退回静图海报 + Ken Burns，dawn.gif 不再被引用（2026-10-04）----
 * 16i 之后 GIF 只在"视频真的播不了"时才下载，但兜底态本身仍要付 2,623KB。
 * 量过再决定：dawn.gif 是 480×270、49 帧，**相邻帧平均变化率只有 0.0075（|Δ|>8 的像素
 * 仅占 2.6%）**——单帧之间几乎不动，动的是一整段慢漂移（首帧→末帧 0.138、72% 像素有变）。
 * 这正好是 CSS 里 paipan-bg-pan-a/b 那两条 24s Ken Burns 在做的事；而且 16e 早就写过
 * "dawn.mp4 播放中 3 秒像素变化率仅 0.0001，素材本身近乎静图"，当年就是靠加 Ken Burns
 * 才让背景"肉眼可见地动"。
 * 素材尺寸也是反向的：dawn.jpg 1280×720，dawn.gif 只有 480×270 还要 cover 到整屏——
 * 换成静图之后兜底态**更清晰**。
 * 同源实拍（390×844 + iPhone UA + 减弱动效触发 bg--static）：两态截图近乎一致；
 * 网络侧 dawn.gif 一条请求都不再出现，兜底态额外字节 2,623KB → 0（dawn.jpg 每次本来就在下）。
 * dawn.gif 文件保留在仓库与线上不删：它就是这个改动的回滚点，删了就没得退。 */

/* 这一组当年是为了"素材自带云海运动，16b-16e 的位移动画全部作废"。
   兜底态换回静图后这个前提只对 video 成立，::after 必须继续漂——所以把它从组里摘出来
   （它排在 16i 之后，同特异度靠先后取胜，留着就会把我刚加的 animation 压成 none）。 */
body[data-page="paipan"] .bg video,
body[data-page="paipan"] .bg.bg--static .veil::before {
  animation: none;
}

/* ---- 16g. 真凶修复（2026-09-12 定稿）：海报层压死了视频 ----
 * 三层背景（.bg 渐变 / .veil::before 海报 / video）从 03a9db6 起的真实叠序是：
 * .veil(z3，内含不透明 dawn.jpg 海报) > video(auto) —— 海报整天盖着播放中的视频，
 * 所有浏览器里背景都是那张静图（03a9db6 起即如此，此前从未被发现）。
 * 修复：海报移出薄纱、垫到 .bg 自身背景（video 之下），薄纱只留半透明渐变；
 * 静图海报 → dawn.gif 动图（::after，仍在 video 之下）作解码失败环境的兜底。
 * 叠序终态：.bg 暖纸渐变+静图海报 < ::after GIF 动图 < video < .veil 薄纱 < 正文。 */
body[data-page="paipan"] .veil::before {
  content: none;
}

body[data-page="paipan"] .bg,
body[data-page="paipan"] .up-bg {
  background:
    url("/backgrounds/dawn.jpg?v=cb9784fb") center / cover no-repeat,
    var(--qp-paper);
}

/* ---- 16h. 双视频无缝循环（2026-09-12） ----
 * A/B 两支同源视频绝对定位叠放：A 尾声时 B 交叉淡入（透明度 1s 线性过渡），
 * 接缝处无硬切。bg-b 初始透明；visibility 由 .bg video 规则统一强制可见。 */
body[data-page="paipan"] .bg > video,
body[data-page="paipan"] .bg video {
  position: absolute;
  inset: 0;
  transition: opacity 1s linear;
}

body[data-page="paipan"] .bg video.bg-b {
  opacity: 0;
}

/* ---- 17. 落地位对齐参考稿（2026-09-12 用户「还不完美」批） ----
 * 参考稿落地位 = 文字品牌 + 金下划线导航 + 判词场；没有大表单、没有 logo 方块。 */

/* 表单卡：参考稿 tcard 的珍珠玻璃配方（半透纸 + 白描边 + blur），云海上可读且融合 */
body[data-page="paipan"] .toolbar {
  padding: clamp(22px, 3vw, 34px);
  border: 1px solid rgba(255, 255, 255, 0.7);
  border-top: 2px solid var(--qp-gold);
  background: rgba(255, 251, 243, 0.55);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}

/* 空状态：引语升格为落地位主角（判词场），起卦入口给醒目 ghost 钮 */
body[data-page="paipan"] .chart-empty {
  padding: clamp(30px, 6vh, 64px) 16px;
  text-align: center;
}
body[data-page="paipan"] .empty-quote {
  font-size: clamp(22px, 2.6vw, 30px);
  letter-spacing: 0.12em;
  color: var(--qp-ink);
}
body[data-page="paipan"] .empty-hint {
  letter-spacing: 0.24em;
  margin: 10px 0 22px;
}
body[data-page="paipan"] .chart-entry {
  display: inline-block;
  min-height: 46px;
  padding: 0 34px;
  border: 1px solid var(--qp-ink);
  border-radius: 2px;
  background: rgba(255, 251, 243, 0.4);
  color: var(--qp-ink);
  font-family: var(--qp-serif);
  font-size: 14px;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
  cursor: pointer;
  transition: background-color 0.3s var(--ease), color 0.3s var(--ease);
}
body[data-page="paipan"] .chart-entry:hover {
  background: var(--qp-ink);
  color: #f7f1e4;
}

/* 17b. 三处小修（同批） */
body[data-page="paipan"] .footer-seal {
  background: var(--cl-ink, #181715);
  color: #f7f1e4;
  border-radius: 0;
  box-shadow: none;
}

/* 17c. 空状态去框（用户指出）：引语敞开坐在云海上，不画边线 */
body[data-page="paipan"] .chart-empty {
  border: 0;
  background: none;
}

/* 「记录」入口的 ghost 样式已升入 header-v2 标准层（风水页同款） */

/* =====================================================================
 * 19. T33 移动端整体重排（唯一生效档 ≤860px，工单 00_总控/qoder-orchestration/specs/T33）
 * ---------------------------------------------------------------------
 * 桌面零变化由构造保证：
 *   ① 本块全部规则写在 @media (max-width:860px) 内；
 *   ② 选择器一律带 body[data-page="paipan"] 作用域；
 *   ③ 对应 DOM 由 paipan.html 页尾守卫脚本注入（matchMedia ≤860px），≥861px 零节点。
 * 视觉纪律（工单 §6 V 系列）：无盒子阵（V1）、无左边条（V2）、无药丸（V3）、
 * 边框预算 ≤3（V4，本块只用掉 1：今日局条）、字级整数集（V5）、列表不画行线（V6）。
 * ===================================================================== */
/* T33-MOBILE-START */
@media (max-width: 860px) {
  /* ---- 分区骨架：块间用留白分隔，无描边无底色（V1 例外只有今日局条） ---- */
  body[data-page="paipan"] .t33-page-h1 {
    margin: 0 0 2px;
    font-family: var(--qp-serif);
    font-size: 20px;
    font-weight: 600;
    line-height: 1.4;
    letter-spacing: 0.04em;
    color: var(--qp-ink);
  }
  body[data-page="paipan"] .t33-mod { margin: 24px 0 0; }
  /* 新模块 DOM 带 hidden 属性，由本规则点亮——负控A 抽掉哨兵块即整体消失 */
  body[data-page="paipan"] .t33-mod[hidden] { display: block; }
  body[data-page="paipan"] .t33-h {
    margin: 0 0 8px;
    font-family: var(--qp-serif);
    font-size: 15px;
    font-weight: 600;
    line-height: 1.5;
    letter-spacing: 0.06em;
    color: var(--qp-ink);
  }
  body[data-page="paipan"] .t33-h .t33-h-note {
    margin-left: 8px;
    font-family: var(--qp-sans);
    font-size: 12px;
    font-weight: 400;
    letter-spacing: 0.02em;
    color: var(--qp-muted);
  }

  /* ---- 模块 2 · 今日局条：全页唯一「实底+描边」容器 ---- */
  body[data-page="paipan"] #t33-today {
    /* 末子永远是 .t33-gold（40px 触控盒、文字居中，自带约 11px 下方留白）；
       再给 padding-bottom 会让卡片底部比顶部空一截，故收为 0。 */
    padding: 10px 12px 0;
    border: 1px solid var(--qp-line);
    background: var(--cl-canvas-veil);
  }
  body[data-page="paipan"] #t33-today .t33-today-line {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--qp-ink);
  }
  body[data-page="paipan"] #t33-today .t33-today-mark {
    font-weight: 600;
    color: var(--qp-gold-deep);
  }
  body[data-page="paipan"] #t33-today .t33-today-sizhu {
    margin: 3px 0 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--cl-body);
  }
  body[data-page="paipan"] #t33-today .t33-today-sizhu b {
    margin-right: 2px;
    font-weight: 400;
    color: var(--qp-muted);
  }
  body[data-page="paipan"] #t33-today .t33-today-say {
    margin: 3px 0 0;
    font-size: 13px;
    line-height: 1.75;
    color: var(--cl-body);
  }
  body[data-page="paipan"] #t33-today .t33-today-say .t33-k {
    margin-right: 6px;
    font-style: normal;
    font-size: 12px;
    color: var(--qp-muted);
  }

  /* ---- 金色文字链（各模块共用）：无框无底无圆角，热区 ≥40px ---- */
  body[data-page="paipan"] .t33-gold {
    display: inline-flex;
    align-items: center;
    min-height: 40px;
    margin-top: 4px;
    font-size: 13px;
    color: var(--qp-gold-deep);
  }

  /* ---- 模块 4 · 常问什么：文字链横排，留白分隔（§2.2 明令不做 chip） ---- */
  body[data-page="paipan"] .t33-words {
    display: flex;
    flex-wrap: wrap;
    gap: 2px 20px;
  }
  body[data-page="paipan"] .t33-word {
    display: inline-flex;
    align-items: center;
    min-height: 40px;
    padding: 0;
    border: 0;
    background: none;
    font-family: var(--qp-serif);
    font-size: 14px;
    line-height: 1;
    color: var(--qp-gold-deep);
  }

  /* ---- 模块 5/6/7 共用条目表：条目间 12px 留白，不画行线（V6） ---- */
  body[data-page="paipan"] .t33-list {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  body[data-page="paipan"] .t33-list li { margin: 0 0 12px; }
  body[data-page="paipan"] .t33-list li:last-child { margin-bottom: 0; }
  body[data-page="paipan"] .t33-item {
    display: block;
    min-height: 40px;
    font-size: 14px;
    line-height: 1.5;
    color: var(--qp-ink);
  }
  body[data-page="paipan"] .t33-meta {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.5;
    color: var(--qp-muted);
  }
  body[data-page="paipan"] .t33-muted {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--cl-body);
  }

  /* ---- 步骤5 · 触控与溢出收口（工单 §5.3/§5.4，J6/J7） ---- */
  /* 表单展开后，日期/时间两栏的控件不许比栏位还宽（J7 横向溢出唯一来源） */
  body[data-page="paipan"] .field-row > label > input,
  body[data-page="paipan"] .field-row > label > select {
    width: 100%;
    min-width: 0;
  }
  /* 「对比排盘」勾选框：既有规则把尺寸钉在 18px !important，用更高特异性抬到 32（J6 判据线） */
  body[data-page="paipan"] .compare-toggle input[type="checkbox"] {
    width: 32px !important;
    height: 32px !important;
    accent-color: var(--qp-gold);
  }
  /* 表单下「查看我的历史记录 →」文字链：17px 高 → 块级热区 ≥40 */
  body[data-page="paipan"] .ly-history-link a {
    display: inline-flex;
    align-items: center;
    min-height: 40px;
  }

  /* ---- 步骤5 · V5 字级收口：站内遗留小数/超限字号在移动端归集到整数集 ---- */
  /* 空状态引文 22px（clamp 下限）→ 20px */
  body[data-page="paipan"] .empty-quote { font-size: 20px; }
  /* 页脚：正文三行 12.5 → 12；链接 11 → 12 且热区 ≥32（§5.3 页脚/合规纯文本链接） */
  body[data-page="paipan"] footer p { font-size: 12px; }
  body[data-page="paipan"] footer .footer-links a,
  body[data-page="paipan"] footer .footer-compliance a {
    display: inline-flex;
    align-items: center;
    min-height: 32px;
    font-size: 12px;
  }
  /* 登录态用户名 12.5 → 12（header-v2 的 !important 在 (0,1,1)，这里 (0,3,1) 压得住） */
  body[data-page="paipan"] .site-header .user-info { font-size: 12px !important; }

  /* ---- 步骤5 · 换个门术：3~4 格横排改 2 列网格，触控高 ≥44（工单 §3.1 第 8 条）。
         header-v2.css §8 全站层用 !important 钉了 80px 格轨，本文件在它之前加载，
         只能靠更高特异度 + !important 对抗（main section 两级元素选择器抬到 (0,3,2)）。 ---- */
  body[data-page="paipan"] main section.more-shu {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    width: 100% !important;
    column-gap: 8px !important;
    row-gap: 8px !important;
  }
  body[data-page="paipan"] main section.more-shu .more-shu-item {
    width: auto !important;
    min-height: 44px !important;
  }
  body[data-page="paipan"] main section.more-shu .more-shu-item strong {
    font-size: 13px !important;
  }
  body[data-page="paipan"] main section.more-shu .more-shu-item span {
    font-size: 12px;
  }

  /* ---- 盘面态字级收口（T33 的 V5 漏的那一半） ----
     V5 当时是在**未起盘**的空态量的，而 .palace-badge / .shen / .marker 这些
     只在出盘后存在：空态 <12px 只有 2 处（那是 font-size:0 的浮动标签装置），
     起盘后实测 33 处。这些 11/11.5px 写在 paipan-claude.css 的选择器上不分视口
     （桌面同为 11px），删不掉，只能在移动档抬到 12px 下限。
     九宫格在 390px 下每格实测 111px 宽，抬到 12px 后按撑破判据复量（见提交说明）。 */
  body[data-page="paipan"] .palace-badge,
  body[data-page="paipan"] .palace-top .shen,
  body[data-page="paipan"] .marker,
  body[data-page="paipan"] .r-cell p.r-tag,
  body[data-page="paipan"] .board-hint,
  body[data-page="paipan"] .free-summary-tag,
  body[data-page="paipan"] .verdict-note,
  body[data-page="paipan"] .archive .purpose { font-size: 12px; }
}
/* T33-MOBILE-END */
