/* ============================================================
   潜龙八字 v2 · 组件样式层（app.css）
   只消费皮肤变量 var(--*)；不写任何具体色值。
   换肤 = 只换 css/light.css 或 css/dark.css，本文件零改动。
   ============================================================ */
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--font-sans);
  background:var(--bg); color:var(--ink);
  min-height:100vh; transition:background .25s,color .25s;
}
/* 键盘焦点环（WCAG 2.4.7 Focus Visible）：全局统一品牌色环 */
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--r-sm)}
/* 满宽/卡片类元素焦点环内收，避免溢出裁切 */
.tab:focus-visible,.quick:focus-visible,.record-card:focus-visible,
.mine-row:focus-visible,.tl-item:focus-visible,.seg:focus-visible{outline-offset:-3px}
.serif{font-family:var(--font-serif)}
/* 页标题仅为程序聚焦锚点（切页移焦），非交互控件，去掉其焦点环 */
.apphead:focus{outline:none}
.hidden{display:none !important}

#app{max-width:1280px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;position:relative;
  background:var(--bg);
  background-image:radial-gradient(rgba(154,123,47,.05) 1px, transparent 1.4px);
  background-size:24px 24px}
.page{flex:1;padding:14px 14px 84px}

/* ---------- 站点页脚（260930 · 悬挂 ICP 备案号 · 法定义务） ----------
   位置：**#app 之后**（#viewportStage 的块级流里）。⛔ 不可放进 #app：
   骨架层在 tab/desk/wide 下把 #app 改成 `flex-direction:row`（侧栏 ＋ 内容横向排），
   放进去会被当成横排的一格（实测 desktop 下仅 192px 宽）。
   max-width 取骨架层已暴露的 --content-max（desk 1160／wide 1240／手机档未定义 ⇒ 兜底 1240，
   而手机视口 < 1240 ⇒ 实际就是通栏）。padding-bottom 为移动端固定底栏（.tabbar 64px）让位；
   桌面包（底栏已转侧栏）由下方 [data-shell] 规则收紧。⛔ 纯样式，不参与任何判定。 */
.site-foot{max-width:var(--content-max,1240px);margin-inline:auto;padding:12px 14px 76px;
  border-top:1px solid var(--line);text-align:center;
  font-size:var(--fs-xs);line-height:1.8;color:var(--line-strong)}
.site-foot a{color:inherit;text-decoration:none}
.site-foot a:hover,.site-foot a:focus-visible{color:var(--brand);text-decoration:underline}
.site-foot-sep{margin:0 6px;opacity:.55}
/* iOS 刘海屏安全区：仅在支持的浏览器上加码（env() 不被识别时不致整条 padding 失效） */
@supports (padding: env(safe-area-inset-bottom)){
  .site-foot{padding-bottom:calc(76px + env(safe-area-inset-bottom))}
}
/* 非手机骨架（tab / desk / wide）：底栏被 shell.css 改成**左侧栏**
   （position:sticky ＋ height:100vh ＋ order:-1）⇒ 不占底部 ⇒ 页脚无需为其让位。
   ★ 用 `[data-shell]`（属性**存在**判定）而非枚举三档：shell.js 只为 tab/desk/wide 写该属性、
     手机档不写 ⇒ 一条规则即精确覆盖且**未来新增档位自动含入**。
     （260930 实测教训：原写 desk/wide 枚举 ⇒ 漏 tab，平板档多留 58px 空白。） */
#viewportStage[data-shell] .site-foot{padding-bottom:18px}

/* ---------- 顶栏 ---------- */
.apphead{display:flex;align-items:center;gap:10px;padding:6px 2px 14px}
.brand{display:flex;align-items:center;gap:11px}
.seal{width:40px;height:40px;background:var(--brand);color:#fffdf6;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:20px;font-weight:800;transform:rotate(-3deg);box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);flex:none}
.brand-name{font-size:19px;font-weight:800;letter-spacing:1px;line-height:1.1}
.brand-sub{font-size:10.5px;color:var(--ink-3);letter-spacing:.4px;margin-top:2px}
.apphead-actions{margin-left:auto;display:flex;gap:8px}
.iconbtn{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink-2);display:flex;align-items:center;justify-content:center;flex:none;cursor:pointer;transition:.18s}
.iconbtn:hover{border-color:var(--brand);color:var(--brand)}
.iconbtn svg{width:17px;height:17px}

/* ---------- 卡片 ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-4);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}
.card-title{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:800;margin-bottom:var(--sp-3);flex-wrap:wrap;white-space:normal;word-break:break-word}
.card-title .tick{width:4px;height:15px;background:var(--brand);border-radius:2px;flex:none}
.card-title .sub{margin-left:auto;font-size:10.5px;color:var(--ink-3);font-weight:500;white-space:nowrap;flex:none}

/* ---------- 分段控制器 ---------- */
.segmented{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:3px;gap:3px}
.segmented.big{margin-bottom:var(--sp-4)}
.segmented .seg{flex:1;border:none;background:transparent;color:var(--ink-2);padding:8px 10px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;transition:.18s;font-family:inherit}
.segmented .seg.active{background:var(--brand);color:#fff}
.mode-toggle{display:flex;align-items:center;gap:12px;padding:10px var(--sp-4)}
.mode-toggle .mt-label{font-size:12px;color:var(--ink-2);font-weight:600}
.mode-toggle .segmented{flex:1 1 auto;margin-left:auto;min-width:0}

/* ---------- 表单 ---------- */
.form-title{display:flex;align-items:center;gap:8px;font-size:14px;margin-bottom:var(--sp-3)}
.form-title .tick{width:4px;height:15px;background:var(--brand);border-radius:2px}
.form-title .ft-sub{margin-left:auto;font-size:11px;color:var(--ink-3);font-weight:600;letter-spacing:1px}
.form-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:9px;align-items:flex-end}
.field{display:flex;flex-direction:column;font-size:11px;color:var(--ink-3);gap:4px}
.field.grow{flex:1;min-width:110px}
.field input,.field select{
  padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-md);font-size:14px;
  color:var(--ink);background:var(--surface-2);font-family:inherit;min-width:0;width:100%;
}
.field input:focus,.field select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.field input[type=checkbox]{width:18px;height:18px;accent-color:var(--brand);margin-top:6px}
.lunar-month{min-width:86px}
.lunar-day{min-width:86px}
.form-hint{font-size:10.5px;color:var(--ink-3);margin:2px 0 10px;line-height:1.5}
.primary-btn{
  width:100%;display:flex;align-items:center;justify-content:center;gap:8px;
  background:linear-gradient(135deg,var(--brand),var(--brand-deep));color:#fff;
  border:none;border-radius:var(--r-md);padding:12px;font-size:15px;font-weight:800;
  cursor:pointer;letter-spacing:2px;transition:.2s;font-family:inherit;
}
.primary-btn svg{width:17px;height:17px}
.primary-btn:hover{filter:brightness(1.08);box-shadow:var(--shadow-md)}
.primary-btn:active{transform:translateY(1px)}
.err{background:var(--danger);color:#fff;border-radius:var(--r-md);padding:11px 14px;font-size:13px;margin-bottom:var(--sp-4);font-weight:600}

/* ---------- 快捷卡 ---------- */
.quick-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:2px}
.quick{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;cursor:pointer;transition:.18s}
.quick:hover{border-color:var(--brand);box-shadow:var(--shadow-md)}
.quick .q-t{font-size:12.5px;font-weight:700;color:var(--ink)}
.quick .q-d{font-size:11px;color:var(--ink-2);margin-top:3px;line-height:1.5}
.quick .q-r{font-size:10px;color:var(--gold-text);margin-top:5px;font-weight:600}

/* ---------- 用户信息卡（深色） ---------- */
.user-card{background:linear-gradient(135deg,var(--dark-surface,var(--surface-3)),var(--dark-bg,var(--surface-2)));
  color:var(--dark-text,var(--ink));border-radius:var(--r-xl);padding:var(--sp-5);margin-bottom:var(--sp-4);
  display:flex;align-items:center;gap:14px;box-shadow:var(--shadow-md)}
.user-avatar{width:52px;height:52px;border-radius:50%;background:var(--brand);display:flex;align-items:center;justify-content:center;font-size:26px;flex:none}
.user-info{flex:1;min-width:0}
.user-info .u-name{font-size:16px;font-weight:800}
.user-info .u-line{font-size:11.5px;color:var(--dim-text,var(--ink-3));margin-top:2px;line-height:1.5}
.user-info .u-line b{color:var(--gold,var(--brand))}
.user-actions{margin-left:auto;display:flex;flex-direction:column;gap:7px}
.mini-btn{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.22);border-radius:8px;padding:6px 12px;font-size:11.5px;font-weight:700;cursor:pointer;font-family:inherit;transition:.18s}
.mini-btn:hover{background:rgba(255,255,255,.22)}

/* ---------- 四柱大字 ----------
   T-093 S3：四柱一律 minmax(0,1fr) —— 允许单元格收缩到内容宽以下，
   否则窄容器里「内容撑破栅格」会把整行顶出去（R1 的成因之一）。 */
.pillars{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.pillar{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 3px 10px;text-align:center;position:relative}
.pillar.day{border-color:var(--brand);background:linear-gradient(180deg,var(--brand-soft),transparent 70%)}
.pillar .p-name{font-size:10.5px;color:var(--ink-3);letter-spacing:2px;margin-bottom:5px}
.pillar .p-gan{font-family:var(--font-serif);font-size:34px;font-weight:800;line-height:1.1}
.pillar .p-zhi{font-family:var(--font-serif);font-size:34px;font-weight:800;line-height:1.1;margin-top:3px}
.pillar .p-shi{font-size:10.5px;color:var(--ink-2);margin-top:7px;letter-spacing:.5px;font-weight:600}
.pillar .day-badge{position:absolute;top:-9px;right:-6px;background:var(--brand);color:#fff;font-size:9px;font-weight:800;padding:2px 7px;border-radius:999px;letter-spacing:1px}

/* ---------- 基本信息 KV ---------- */
.kv{display:flex;align-items:baseline;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:12.5px}
.kv:last-child{border-bottom:none}
.kv .k{color:var(--ink-3);flex:none;width:84px}
.kv .v{color:var(--ink);font-weight:600;flex:1}
.kv .v.brand{color:var(--brand);font-weight:800}

/* ---------- 五行力量 ---------- */
.wx-bar{display:flex;height:16px;border-radius:999px;overflow:hidden;background:var(--surface-2);border:1px solid var(--line);margin-top:4px}
.wx-bar .seg{height:100%;min-width:2px}
.wx-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:11px}
.wx-item{font-size:11.5px;color:var(--ink-2);display:flex;align-items:center;gap:5px}
.wx-item b{color:var(--ink);font-size:12.5px}
.wx-item .wx-dot{width:8px;height:8px;border-radius:3px;flex:none}
.wx-season{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 11px;margin-top:11px}
.wx-season b{color:var(--warn)}

/* ---------- 格局与旺衰 ---------- */
/* ★ 260926 指令②：格局卡**四段分层**（① 定格 / ② 成败·救应 / ③ 品位结论 / ④ 顺逆用·验格口诀）
   —— 小标题给「序号＋名称」，段间用细分隔线收口；⛔ 不引任何新令牌，全部走既有变量。 */
.pat-sec{margin-top:9px;padding-top:7px;border-top:1px dashed var(--line);}
.pat-sec:first-of-type{margin-top:4px;padding-top:0;border-top:0;}
.pat-sec_h{font-size:11px;font-weight:800;color:var(--ink-2);letter-spacing:.4px;margin-bottom:5px;}
.pattern-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pattern-name{font-family:var(--font-serif);font-size:26px;font-weight:800;letter-spacing:1px}
.pattern-src{font-size:10.5px;color:var(--ink-3);margin-top:2px}
.band-pill{font-size:12px;font-weight:800;border-radius:999px;padding:5px 13px;color:#fff}
.band-pill.weak{background:var(--accent)}
.band-pill.strong{background:var(--brand)}
.duo{margin-top:13px}
.duo-bar{display:flex;height:11px;border-radius:999px;overflow:hidden;border:1px solid var(--line)}
.duo-bar .d1{background:linear-gradient(90deg,var(--wx-wood),var(--wx-water))}
.duo-bar .d2{background:linear-gradient(90deg,var(--wx-metal),var(--wx-earth))}
.duo-txt{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-2);margin-top:6px}
.duo-txt b{color:var(--ink)}
.three-stat{display:flex;gap:8px;margin-top:12px}
.stat-pill{flex:1;text-align:center;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 4px}
.stat-pill .v{font-size:16px;font-weight:800;line-height:1.2}
.stat-pill .k{font-size:10px;color:var(--ink-3);margin-top:3px}
.stat-pill.ok .v{color:var(--ok)} .stat-pill.no .v{color:var(--danger)} .stat-pill.mid .v{color:var(--warn)}
.detail-line{font-size:10.5px;color:var(--ink-3);margin-top:9px;line-height:1.6}

/* ---------- 用神三派 ---------- */
.ys-grid{display:flex;flex-direction:column;gap:8px}
.ys-card{border-radius:var(--r-md);padding:11px 12px;border:1px solid var(--line);background:var(--surface-2)}
.ys-card.main{border-color:var(--brand);background:linear-gradient(135deg,var(--brand-soft),transparent 72%)}
.ys-head{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:800}
.ys-tag{font-size:9.5px;font-weight:800;padding:2px 7px;border-radius:999px;background:var(--gold-soft);color:var(--gold-text);letter-spacing:.5px}
.ys-tag.main{background:var(--brand);color:#fff}
.ys-body{font-size:11.5px;color:var(--ink-2);margin-top:6px;line-height:1.7}
.ys-body b{color:var(--wx-wood);font-weight:700}
.ys-body .j{color:var(--danger);font-weight:700}
.disclaimer{font-size:10.5px;color:var(--ink-3);background:var(--surface-2);border-left:3px solid var(--gold);padding:9px 11px;border-radius:0 var(--r-md) var(--r-md) 0;line-height:1.6;margin-top:10px}
.disclaimer b{color:var(--gold-text);font-weight:700}

/* ---------- 用神 · 最终裁定 / 冲突披露（260901 接线补） ---------- */
.ys-final{margin-top:10px;border:1px solid var(--brand);border-radius:var(--r-md);padding:10px 12px;background:linear-gradient(135deg,var(--brand-soft),transparent 55%)}
.ys-final-title{font-size:12.5px;font-weight:800;margin-bottom:6px}
.ys-final-title .sub{font-size:9.5px;color:var(--ink-3);font-weight:400}
.ys-final-row{display:flex;gap:8px;font-size:11.5px;line-height:1.7}
.ys-final-row .k{flex:none;min-width:44px;color:var(--ink-3);font-weight:600}
.ys-final-row .v{font-weight:700}
.ys-final-row .v.j{color:var(--danger)}
.ys-conflicts{margin-top:10px;border:1px dashed var(--warn);border-radius:var(--r-md);padding:10px 12px;background:var(--surface-2)}
.ys-conflicts-title{font-size:12px;font-weight:800;margin-bottom:6px}
.ys-conflicts-title .sub{font-size:9.5px;color:var(--ink-3);font-weight:400}
.ys-conflict-item{font-size:11px;color:var(--ink-2);line-height:1.7;padding:2px 0;border-bottom:1px dotted var(--line)}
.ys-conflict-item:last-child{border-bottom:none}

/* ---------- 运岁引动神煞（细盘 · 260901 接线补） ---------- */
.ssf-list{display:flex;flex-direction:column;gap:5px;padding:4px 2px}
.ssf-item{display:flex;align-items:flex-start;gap:8px;font-size:11px}
.ssf-gz{flex:none;min-width:44px;font-weight:800;font-size:12.5px}
.ssf-hits{display:flex;flex-wrap:wrap;gap:4px}
.ssf-var{font-size:8.5px;color:var(--warn);margin-left:2px}

/* ---------- 刑冲合害 ---------- */
.xing-list{display:flex;flex-direction:column;gap:8px}
.xing-item{display:flex;align-items:flex-start;gap:8px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:9px 10px}
.xing-tag{font-size:10px;font-weight:800;border-radius:6px;padding:2px 7px;color:#fff;flex:none;margin-top:1px}
.xing-tag.h{background:var(--wx-wood)} .xing-tag.p{background:var(--wx-fire)} .xing-tag.f{background:var(--wx-water)} .xing-tag.s{background:var(--gold)}
.xing-txt{font-size:12px;color:var(--ink-2);line-height:1.6}
.xing-txt b{color:var(--ink)}
.xing-txt .sub{font-size:10px;color:var(--ink-3);margin-left:4px}

/* ---------- 神煞 ---------- */
.ss-group{margin-bottom:10px}
.ss-group:last-child{margin-bottom:0}
.ss-head{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--ink-3);font-weight:700;margin-bottom:7px}
.ss-chip-row{display:flex;flex-wrap:wrap;gap:7px}
.ss-chip{display:inline-flex;align-items:center;gap:6px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:5px 11px;font-size:12px}
/* ★ 260926 指令④：**神煞一览 → 单列 · 小字 · 逐条可点开**
   owner：「神煞可点击是要做的，而且神煞的展示方式要**一列**，把**字改小**」。
   ⛔ 类名用 `ss-item*`（不用 `ss-line` —— 后者已被 `shenshaOf()` 占用，防同名异义 71★）。 */
.ss-chip-row.ss-item-list{display:block;}
.ss-item{display:block;border-bottom:1px dashed var(--line);}
.ss-item:last-child{border-bottom:0;}
.ss-item_sum{display:flex;align-items:center;gap:7px;min-height:44px;padding:3px 2px;cursor:pointer;}
.ss-item_sum::-webkit-details-marker{display:none;}
.ss-item_sum::marker{content:'';}
/* 行内的 chip 由「药丸」降为**极简标签**（一列排布下药丸会显得笨重）；
   ⛔ 全局 `.ss-chip` 规则不动（吉凶倾向块与空亡行仍走药丸），此处仅**作用域覆盖**。 */
.ss-item .ss-chip{background:transparent;border:0;padding:0;font-size:11.5px;min-height:auto;}
.ss-item_pos{margin-left:auto;font-size:10.5px;color:var(--ink-3);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:48%;}
.ss-item_caret{flex:none;color:var(--ink-3);font-size:12px;transition:transform .16s ease;}
.ss-item[open] .ss-item_caret{transform:rotate(90deg);}
.ss-item_body{padding:0 2px 10px;font-size:11.5px;line-height:1.62;color:var(--ink-2);}
.ss-dict-cap{margin-top:9px;font-size:10.5px;line-height:1.55;color:var(--ink-3);}
.grade{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:17px;padding:0 5px;border-radius:5px;font-size:9.5px;font-weight:800}
.grade-s{background:var(--grade-s);color:#17120a}
.grade-a{background:var(--grade-a);color:#fff}
.grade-b{background:var(--grade-b);color:#fff}
.grade-c{background:var(--grade-c);color:#fff}

/* ---------- 细盘：6 列 10 行排列表 ---------- */
.detail-wrap{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-4)}
.detail-wrap>.left{min-width:0}
.pillars-table{width:100%;min-width:0;border-collapse:collapse;font-size:12px;table-layout:fixed}
.pillars-table th,.pillars-table td{border:1px solid var(--line-thin,var(--line));padding:9px 5px;text-align:center;vertical-align:middle;line-height:1.35}
.pillars-table th{background:var(--surface-2);color:var(--ink-3);font-weight:600;font-size:11px;letter-spacing:1px;padding:7px 4px}
.pillars-table th.col-dynamic{background:var(--gold-soft);color:var(--gold-text);font-weight:700}
.pillars-table th.col-day{background:var(--brand);color:#fff;font-weight:800;letter-spacing:2px}
.pillars-table .col-day{background:var(--brand-soft)}
.pillars-table .col-year-tag{font-size:11px;color:var(--ink-3);margin-top:1px;line-height:1.25;font-weight:500}
.pillars-table th .col-year-tag{color:rgba(255,255,255,.82);font-size:11px;font-weight:500}
.pillars-table .row-name{background:var(--surface-2);color:var(--ink-3);font-weight:700;font-size:12px;letter-spacing:1px;text-align:right;padding-right:10px;width:64px;min-width:64px;white-space:nowrap}
.pillars-table .gz{font-family:var(--font-serif);font-size:24px;font-weight:800;line-height:1.1}
.pillars-table .gz-sub{font-size:11px;color:var(--ink-3);margin-top:1px;line-height:1.3}
.pillars-table .shishen{font-size:11px;font-weight:700;line-height:1.2}
.pillars-table .sub-line{font-size:11px;color:var(--ink-2);line-height:1.3}
.pillars-table .relation-row{background:var(--gold-soft)}
.pillars-table .relation-row td{font-size:11px;color:var(--ink-2);padding:14px 7px;line-height:1.7;vertical-align:top;text-align:left}
.pillars-table .relation-row td .rel-tag{display:inline-block;padding:1px 6px;border-radius:4px;font-size:11px;font-weight:700;margin:0 3px 3px 0;background:var(--accent-soft);color:var(--accent)}
/* 安全阀：确有溢出时只在此层横向滚动；行标签列 position:sticky 固定不随滑 */
.detail-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%;min-width:0}

/* ---------- 右侧时间流（大运/流年/流月）---------- */
.tl-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);overflow:hidden;margin-bottom:var(--sp-4)}
.tl-head{padding:10px 14px 8px;background:var(--surface-2);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px}
.tl-head .lt{font-size:12.5px;font-weight:800;display:flex;align-items:center;gap:6px}
.tl-head .lt::before{content:"";width:3px;height:12px;background:var(--brand);border-radius:2px}
.tl-head .r-info{margin-left:auto;font-size:10px;color:var(--ink-3);text-align:right;line-height:1.4}
/* 默认：横向滚动（用于大运等跨度大、不分详略的时间块） */
.tl-scroll{display:flex;gap:6px;padding:10px 12px 12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
.tl-scroll::-webkit-scrollbar{height:5px}
.tl-scroll::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:3px}
.tl-item{flex:0 0 auto;min-width:64px;border:1px solid var(--line);border-radius:var(--r-md);padding:7px 6px;text-align:center;background:var(--surface-2);scroll-snap-align:start;position:relative;transition:.18s;cursor:pointer}
.tl-item:hover{border-color:var(--brand)}
.tl-item.now{border-color:var(--brand);background:var(--brand-soft)}
.tl-item .y{font-size:10.5px;color:var(--ink-3);font-weight:600;line-height:1.2}
.tl-item .y b{color:var(--brand);font-weight:800}
.tl-item .gz{font-family:var(--font-serif);font-size:18px;font-weight:800;line-height:1.1;margin-top:2px}
.tl-item .ss{font-size:9.5px;color:var(--ink-2);margin-top:2px;line-height:1.2}
.tl-item .age{font-size:9px;color:var(--ink-3);margin-top:1px;line-height:1.2}
.tl-item .now-badge{position:absolute;top:-5px;right:-4px;background:var(--brand);color:#fff;font-size:8px;font-weight:800;padding:1px 4px;border-radius:6px;letter-spacing:1px}

/* 上/下布局（用于流年/流月）：一个时间单元一行，全宽，列向栅格
   —— 大运保留横向以保证 10 年跨度能一屏扫描 */
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll,
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll,
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll{
  display:flex;flex-direction:column;gap:6px;padding:8px 12px 10px;
  overflow-x:visible;scroll-snap-type:none;max-height:none
}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item,
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item,
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item{
  min-width:0;width:100%;display:grid;gap:6px;text-align:left;
  padding:8px 12px;margin:0;border-radius:var(--r-md);
  border:1px solid var(--line);border-left:3px solid var(--line);
  background:var(--surface-2);scroll-snap-align:none
}
/* 详略排版：把"年份 / 干支 / 十神 + 信号 / 关系"用三列栅格对齐 */
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item{
  grid-template-columns:54px minmax(0,1fr) minmax(0,1fr) auto
}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .y{font-size:11.5px}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .y b{font-size:13px}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .gz{font-size:20px;margin-top:0;display:flex;align-items:center}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .ss{font-size:11px;margin:0;align-self:center}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .ly-sig{
  align-self:center;justify-self:end;font-size:10.5px;padding:2px 8px
}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .age{
  grid-column:1 / -1;margin-top:2px;font-size:10.5px;color:var(--ink-2);
  display:flex;flex-wrap:wrap;gap:6px
}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item .age .rel-tag{font-size:10px}
.tl-card[data-stack="xingyun"] [data-pane="liunian"] .tl-scroll .tl-item.now{border-left-color:var(--brand)}
/* 流月：节气 / 干支 / 十神 三列；关系行另起 */
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item{
  grid-template-columns:60px minmax(0,1fr) minmax(0,1fr)
}
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item .y{font-size:11.5px}
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item .gz{font-size:18px;margin-top:0}
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item .ss{font-size:11px;margin:0;align-self:center}
.tl-card[data-stack="xingyun"] [data-pane="liuyue"] .tl-scroll .tl-item .age{
  grid-column:1 / -1;margin-top:2px;font-size:10.5px
}
/* 260903 小运：与大运同款上下布局（岁数 / 干支 / 十神 三列） */
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item{
  grid-template-columns:78px minmax(0,1fr) minmax(0,1fr)
}
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item .y{font-size:11.5px}
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item .y b{font-size:13px;color:var(--brand)}
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item .gz{font-size:19px;margin-top:0}
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item .ss{font-size:11px;margin:0;align-self:center}
.tl-card[data-stack="xingyun"] [data-pane="xiaoyun"] .tl-scroll .tl-item .age{
  grid-column:1 / -1;margin-top:2px;font-size:10.5px
}
/* 260903 口径脚注（铁律 5 第③落点：流派差异必须面向用户透出，不可只在内部文档） */
.tl-foot{padding:7px 12px 9px;font-size:10.5px;line-height:1.6;color:var(--ink-3);
  background:var(--surface-2);border-top:1px solid var(--line)}
.tl-foot b{color:var(--ink-2);font-weight:800}
/* 260904 行运栏：小运/大运/流年/流月 单卡四页签（原盘表置顶，上下布局） */
.xy-tabs{display:flex;gap:4px;padding:8px 10px 0;background:var(--surface-2);border-bottom:1px solid var(--line)}
.xy-tab{flex:1;max-width:96px;border:none;background:none;font-family:inherit;font-size:12px;font-weight:700;
  color:var(--ink-3);padding:7px 4px 9px;cursor:pointer;position:relative;transition:.18s;letter-spacing:1px}
.xy-tab:hover{color:var(--ink-2)}
.xy-tab.active{color:var(--brand);font-weight:800}
.xy-tab.active::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-1px;
  width:24px;height:2.5px;background:var(--brand);border-radius:2px 2px 0 0}
.xy-pane>.tl-head{background:transparent}
/* 260904 四柱总览（问真式行列表格）补充样式 */
.qz-table .shishen-cell{font-weight:700}
.qz-table .sub-cell{font-size:11px;color:var(--ink-2);line-height:1.55}
.qz-table .zg-item{font-weight:700;margin:0 2px}
/* 260903 子时换日提示卡（仅晚子时出生时出现） */
.zi-note{margin:0 0 var(--sp-3);padding:9px 12px;border:1px solid var(--line);
  border-left:3px solid var(--gold, var(--brand));border-radius:var(--r-md);
  background:var(--surface-2);font-size:11.5px;line-height:1.65;color:var(--ink-2)}
.zi-note .zi-line+.zi-line{margin-top:3px}
.zi-note b{color:var(--ink);font-weight:800}
.zi-note .zi-desc{color:var(--ink-3);margin-left:6px}
.zi-note .zi-other b{font-size:13px;color:var(--brand)}
.zi-note .zi-tip{color:var(--ink-3);font-size:10.5px;margin-top:5px;
  padding-top:5px;border-top:1px dashed var(--line)}
.season-bar{display:flex;border-top:1px solid var(--line);background:var(--surface-2)}
.season-bar .seg{flex:1;text-align:center;padding:8px 4px;font-size:11px;font-weight:700;color:var(--ink-3);position:relative}
.season-bar .seg b{color:var(--ink-2);font-weight:800}
.season-bar .seg.on{background:var(--brand);color:#fff}
.season-bar .seg.on b{color:#fff}
.season-bar .seg:not(:last-child)::after{content:"";position:absolute;right:-1px;top:18%;bottom:18%;width:1px;background:var(--line)}
/* ★ 260926 指令①：**月令子块**（并入旺衰卡）
   —— 原为独立卡（`wx-season-head` 此前**无任何样式**，两枚 span 裸行）；
      并入后补样式：当令五行给品牌色徽章，四季bar 复用 `.season-bar`。 */
.wx-season-block{margin-top:10px;padding-top:9px;border-top:1px solid var(--line);}
.wx-season-cap{font-size:12px;font-weight:700;}
.wx-season-cap .sub{margin-left:6px;font-size:10.5px;color:var(--ink-3);font-weight:400;}
.wx-season-head{display:flex;align-items:center;gap:8px;margin:7px 0 6px;}
.wx-season-wx{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;
  border-radius:var(--r-md);background:var(--brand);color:#fff;font-weight:800;font-size:13px;}
.wx-season-txt{font-size:11px;color:var(--ink-3);}

/* ---------- 合盘 ---------- */
.syn-hero{display:flex;align-items:center;gap:14px;background:linear-gradient(135deg,var(--brand-soft),var(--accent-soft));border:1px solid var(--line);border-radius:var(--r-xl);padding:var(--sp-5);margin-bottom:var(--sp-4)}
.syn-score{width:96px;height:96px;border-radius:50%;background:var(--brand);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;flex:none;box-shadow:var(--shadow-md)}
.syn-score .num{font-size:28px;font-weight:800;line-height:1}
.syn-score .lbl{font-size:9px;letter-spacing:1px;margin-top:4px;opacity:.85}
.syn-info{flex:1}
.syn-info .tier{font-size:17px;font-weight:800}
.syn-info .note{font-size:10.5px;color:var(--ink-3);margin-top:4px;line-height:1.6}
.syn-dims{display:flex;flex-direction:column;gap:8px}
.syn-dim{display:flex;align-items:center;gap:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px}
.syn-dim .d-name{font-size:12.5px;font-weight:700;width:78px;flex:none}
.syn-dim .d-bar{flex:1;height:9px;border-radius:999px;background:var(--surface-3);overflow:hidden}
.syn-dim .d-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--gold));border-radius:999px}
.syn-dim .d-score{font-size:13px;font-weight:800;width:42px;text-align:right;flex:none}
.syn-dim .d-detail{font-size:10px;color:var(--ink-3);width:150px;text-align:right;flex:none;line-height:1.4}

/* ---------- 记录 ---------- */
.record-list{display:flex;flex-direction:column;gap:10px}
.record-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:13px 14px;cursor:pointer;transition:.18s}
.record-card:hover{border-color:var(--brand);box-shadow:var(--shadow-md)}
.record-card .rc-top{display:flex;align-items:center;gap:8px}
.record-card .rc-name{font-size:13.5px;font-weight:800}
.record-card .rc-gz{font-family:var(--font-serif);font-size:13px;font-weight:700;letter-spacing:1px;margin-left:auto}
.record-card .rc-meta{font-size:11px;color:var(--ink-3);margin-top:5px;line-height:1.5}
.record-card .rc-meta b{color:var(--ink-2)}
.record-empty{text-align:center;color:var(--ink-3);font-size:13px;padding:40px 20px;line-height:1.8}
.record-actions{display:flex;gap:8px;margin-bottom:var(--sp-4)}
.record-actions .mini-btn{background:var(--surface-2);color:var(--ink-2);border-color:var(--line)}

/* ---------- 我的 ---------- */
.mine-group{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;margin-bottom:var(--sp-4)}
.mine-group .mg-title{padding:11px 14px;background:var(--surface-2);font-size:12.5px;font-weight:800;border-bottom:1px solid var(--line)}
.mine-row{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px dashed var(--line);font-size:13px;cursor:pointer;transition:.15s}
.mine-row:last-child{border-bottom:none}
.mine-row:hover{background:var(--surface-2)}
.mine-row .mr-k{flex:1}
.mine-row .mr-v{margin-left:auto;font-size:11px;color:var(--ink-3)}
.mine-row .mr-arrow{color:var(--ink-3);font-size:12px}
.mine-grade{display:flex;gap:8px;padding:12px 14px;flex-wrap:wrap}
.mine-grade .grade{font-size:11px;min-width:22px;height:22px}
.about-text{font-size:11.5px;color:var(--ink-2);padding:12px 14px;line-height:1.8}

/* ---------- 工作台：AI 配置 / 调研校准 ---------- */
.ai-cfg{padding:12px 14px}
.cfg-form{display:flex;flex-direction:column;gap:10px;margin:4px 0 2px}
.cfg-field{display:flex;flex-direction:column;gap:5px;text-align:left}
.cfg-field>span{font-size:12px;color:var(--ink-2);font-weight:600}
.cfg-field input,.cfg-field select{padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-md);font-size:14px;color:var(--ink);background:var(--surface-2);font-family:inherit;width:100%}
.cfg-field input:focus,.cfg-field select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.cfg-actions{margin-top:6px}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}
.dot.ok{background:var(--ok)} .dot.bad{background:var(--danger)} .dot.mid{background:var(--warn)}
.cali-body{padding:12px 14px}
.cali-pills{display:flex;gap:8px;flex-wrap:wrap}
.cali-c{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
.cali-c-row{display:flex;gap:10px;padding:5px 0;font-size:12px;border-bottom:1px dotted var(--line)}
.cali-c-k{font-weight:800;color:var(--ink);flex:none;width:34px}
.cali-c-v{color:var(--ink-2);line-height:1.6}
.cali-c-v.ok{color:var(--ok)} .cali-c-v.mid{color:var(--warn)}
.cali-docs{margin-top:12px}
.cali-docs-t{font-size:11px;color:var(--ink-3);font-weight:700;margin-bottom:6px}
.cali-doc{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px dotted var(--line);font-size:12px}
.cali-doc .cd-name{color:var(--ink);font-weight:600}
.cali-doc .cd-dim{color:var(--ink-3);text-align:right}

/* ---------- 底部导航 ---------- */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:780px;height:64px;background:var(--surface);border-top:1px solid var(--line);display:flex;z-index:90}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:none;border:none;color:var(--ink-3);font-size:10px;font-family:inherit;cursor:pointer;position:relative;transition:.18s}
.tab svg{width:21px;height:21px}
.tab.active{color:var(--brand);font-weight:700}
.tab.active::before{content:"";position:absolute;top:-1px;left:50%;transform:translateX(-50%);width:26px;height:2.5px;background:var(--brand);border-radius:0 0 3px 3px}

/* ---------- 响应式（★ T-080 260921 勘误：**设计目标＝mobile-first，现状为混合策略·未达成**）----------
   实测（8 条 @media，由 `tests/gate/audit_breakpoints.py` 机械复算）：
     手机优先 `min-width` ×3（768 ／ 992×2）｜桌面优先 `max-width` ×4（767×2 ／ 420 ／ 480）
     ｜正交 ×1（prefers-reduced-motion）。
   ⇒ 原注释仅写「mobile-first」而实现为混合策略 ⇒ **名实不符**，本行如实勘误。
   ⛔ **本批未做重排/合并**（技术判断，非偷懒）：CSS 层叠依赖规则**出现顺序**，
     同特异性时后者胜。实例（已退役·留痕）：`.ql-watermark{display:none}`（基线）在前、
     `@media(max-width:767px){.ql-watermark{display:block}}` 在后 ⇒ 手机才显水印；
     **若把媒体块上移以「合并断点」，则基线反在后面胜出 ⇒ 水印消失＝视觉回归**。
     ⚠ 260922 更新：该水印元件已整体退役（见下方水印段注释），此例仅作**层叠顺序的教学留痕**。
   ⛔ 重排的前置条件＝**视觉回归能力**（无头浏览器截图对比）：
     当前 `tests/gate/smoke_ui.js`（39 项）与 `web/_ui_render_smoke.js` **全为 DOM/JS 断言、
     零 CSS 断言** ⇒ 对断点改动无守护。已登记 T-080 子项（现由 audit_breakpoints.py 静态守护）。
   设计目标断点：576 / 768 / 992 / 1200（对标 04 效果图详版细盘）。---------- */
/* 260904 细盘改全上下布局：原盘表置顶 + 行运栏（单卡四页签）在下，取消两栏与 sticky */
@media (min-width:768px){
  .record-list{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
  .quick-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
}
/* 桌面：细盘整体放宽（原盘表满宽自适应） */
@media (min-width:992px){
  .page{padding:18px 22px 90px}
  .detail-wrap{max-width:1400px;margin:0 auto}
}
/* 手机：原盘 6 列较挤。
   T-093 S3 ★ 起**不再写 min-width**——旧写法 .pillars-table{min-width:560px}
   会把 5 列表格强行撑到 560px，在 390px 屏上必然出现横向滚动条，
   正是 owner 点名的「命盘还要左右拉」。
   现改为：靠 table-layout:fixed 让四柱列等分收缩，只收紧内边距与字号；
   行标签列改 position:sticky（见 shell.css §4.2）——
   真出现溢出时，固定的是行标签列、滑动的是数据区。
   .detail-scroll 的 overflow-x 仅作**安全阀**保留，不再是常态行为。 */
@media (max-width:767px){
  .pillars-table .gz{font-size:20px}
  .pillars-table th,.pillars-table td{padding:7px 3px}
  /* 宽度交由 shell.css 按骨架裁定（此处只留排版微调，避免两处各写一个宽度） */
  .pillars-table .row-name{padding-right:6px;font-size:11px}
}
@media (max-width:420px){
  .syn-dim .d-detail{display:none}
}

/* ---------- 动效降级：尊重「减少动效」系统偏好（前庭功能障碍等） ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}
}

/* ---------- 轻量 toast（替代原生 alert，非阻断式） ---------- */
.ql-toast{position:fixed;left:50%;bottom:84px;transform:translateX(-50%) translateY(20px);max-width:80%;background:var(--ink);color:var(--bg);font-size:13px;line-height:1.4;padding:10px 16px;border-radius:10px;box-shadow:0 6px 20px rgba(0,0,0,.22);opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:200;text-align:center}
.ql-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---------- C9 详版模式「依据」折叠区（计算依据 + 出处） ---------- */
.basis{margin-top:8px;border-top:1px dashed var(--line);padding-top:6px}
.basis>summary{cursor:pointer;font-size:11.5px;color:var(--gold-text);list-style:none;user-select:none;outline:none}
.basis>summary:focus-visible{box-shadow:0 0 0 2px var(--gold-text);border-radius:4px}
.basis>summary::-webkit-details-marker{display:none}
.basis>summary::before{content:"▸ ";font-size:10px}
.basis[open]>summary::before{content:"▾ "}
.basis-body{margin-top:6px;padding:8px 10px;background:var(--surface-2);border-radius:8px;font-size:12px;line-height:1.6}
.basis-calc{margin:0 0 6px;padding-left:18px}
.basis-calc li{margin:2px 0}
.basis-calc code.ref,.basis-src code.ref{background:rgba(0,0,0,.06);border-radius:4px;padding:1px 5px;font-size:11px;color:var(--ink)}
.basis-src{color:var(--ink-3);font-size:11.5px}

/* ---------- C10 可折叠卡（T-093 S3 · U4） ----------
   用途：把「已在别处出现过」的明细下沉为抽屉，默认收起，降首屏信息重复。
   与 .basis 的差别：.basis 是卡**内**的细粒度依据区；.cf 是**整卡**的折叠头。 */
.card-fold{padding:var(--sp-4)}
.cf>.cf-head{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
  font-size:13.5px;font-weight:800;outline:none;flex-wrap:wrap}
.cf>.cf-head::-webkit-details-marker{display:none}
.cf>.cf-head .tick{width:4px;height:15px;background:var(--brand);border-radius:2px;flex:none}
.cf>.cf-head .sub{margin-left:auto;font-size:11px;color:var(--ink-3);font-weight:500;white-space:nowrap}
.cf>.cf-head .cf-arrow{color:var(--ink-3);font-size:15px;line-height:1;transition:transform .18s}
.cf[open]>.cf-head .cf-arrow{transform:rotate(90deg)}
.cf>.cf-head:focus-visible{box-shadow:0 0 0 2px var(--brand);border-radius:4px}
.cf>.cf-body{padding-top:var(--sp-2);border-top:1px dashed var(--line);margin-top:var(--sp-2)}
.cf[open]>.cf-body{border-top-color:var(--line)}

/* ---------- C9 十神力量网格（详版模式） ---------- */
.shishen-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px;margin-top:4px}
.sh-card{border:1px solid var(--line);border-radius:10px;padding:8px 6px;text-align:center;background:var(--surface)}
.sh-name{font-weight:800;font-size:13px}
.sh-lvl{font-size:11px;font-weight:700;margin:3px 0;border-radius:6px;padding:1px 0}
.sh-lvl.lv-weak{color:#2e7d32;background:rgba(46,125,50,.12)}
.sh-lvl.lv-mid{color:#b26a00;background:rgba(178,106,0,.12)}
.sh-lvl.lv-strong{color:#c62828;background:rgba(198,40,40,.12)}
.sh-raw{font-size:10.5px;color:var(--ink-3);font-family:var(--mono,ui-monospace,monospace)}

/* ---------- 六亲推断 ---------- */
.six-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin-top:4px}
.six-item{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--surface)}
.six-role{font-weight:800;font-size:13px}
.six-star{font-size:11.5px;margin:3px 0;color:var(--ink-2)}
.six-trend{font-size:11px;color:var(--ink-3);line-height:1.5}
.pref{display:inline-block;border-radius:6px;padding:0 6px;font-size:10.5px;font-weight:700;margin-right:4px}
.pref-用神{color:#fff;background:var(--ok)}
.pref-喜神{color:#fff;background:var(--accent)}
.pref-忌神{color:#fff;background:var(--danger)}
.pref-闲神{color:var(--ink-2);background:var(--surface-3)}
/* L4（260829）六亲卡片 enrich 三字段子行 */
.six-meta{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0 2px}
.six-chip{display:inline-block;border-radius:6px;padding:0 6px;font-size:10px;font-weight:700;background:var(--surface-3);color:var(--ink-2)}
.six-chip.intensity{background:var(--accent-soft);color:var(--accent)}
.six-chip.gong{background:var(--surface-3);color:var(--ink-2)}
.six-timing{font-size:10.5px;color:var(--ink-3);line-height:1.5;margin-top:2px;border-top:1px dashed var(--line);padding-top:3px}
.six-timing b{color:var(--ink-2);font-weight:700}

/* ---------- 脏腑关注 ---------- */
.hb-item{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:6px 2px;border-bottom:1px solid var(--line-thin);font-size:12.5px}
.hb-item:last-child{border-bottom:none}
.hb-wx{font-weight:800;color:var(--gold-text);min-width:54px}
.hb-level{color:var(--warn);font-weight:700;min-width:96px}
.hb-organ{color:var(--accent);font-weight:600}
.hb-part{color:var(--ink-2)}
.hb-note{color:var(--ink-3);flex:1 1 100%;order:5}
.hb-regimen{color:var(--ink-2);background:var(--surface-2);border-radius:6px;padding:1px 7px}
.hb-timing{color:var(--ink-2);background:var(--surface-2);border-radius:6px;padding:1px 7px}

/* ---------- 五行流通 · 做功链 ---------- */
.flow-chain{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;font-size:12.5px}
.flow-node{background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:4px 9px;color:var(--ink)}
.flow-arrow{color:var(--gold-text);font-weight:800}
.flow-block{margin-top:8px;font-size:11.5px;color:var(--ink-2);line-height:1.6}

/* ---------- 白话解读 ---------- */
.reading-box{font-size:13.5px;line-height:1.75;color:var(--ink)}
.reading-box b{color:var(--brand)}

/* ---------- 大运喜忌 / 流年吉凶（细盘列） ---------- */
.dayun-align{display:inline-block;border-radius:6px;padding:1px 7px;font-size:11px;font-weight:800;margin-top:3px}
.dayun-align.align-xi{color:#fff;background:var(--ok)}
.dayun-align.align-ji{color:#fff;background:var(--danger)}
.dayun-align.align-mid{color:var(--ink-2);background:var(--surface-3)}
.dayun-act{font-size:10.5px;color:var(--ink-3);margin-top:1px}
.ly-sig{display:inline-block;border-radius:6px;padding:1px 7px;font-size:10.5px;font-weight:700;margin-top:2px;cursor:help}
.ly-sig.sig-strong{color:#fff;background:var(--ok)}
.ly-sig.sig-weak{color:#fff;background:var(--danger)}
.ly-sig.sig-mid{color:var(--ink-2);background:var(--surface-3)}

/* ---------- 病源说明卡（A2 后·260901；L1 识别信号仅展示、不再整切变格专法）---------- */
.disease-card{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;
  padding:8px 12px;margin:0 0 var(--sp-3,10px) 0;
  background:var(--surface-2);border-left:3px solid var(--gold);
  border-radius:0 var(--r-md) var(--r-md) 0;font-size:12px;line-height:1.6;
  color:var(--ink-2)}
.disease-card .disease-pill{background:var(--gold);color:#fffdf6;font-size:11px;font-weight:800;
  padding:1px 8px;border-radius:999px;flex:none;letter-spacing:1px;align-self:center}
.disease-card .disease-type{font-weight:800;color:var(--brand-deep);font-size:12.5px;flex:none;align-self:center}
.disease-card .disease-label{color:var(--ink-3);font-size:11.5px;font-weight:600;flex:none;align-self:center}
.disease-card .disease-note{flex:1;min-width:0;color:var(--ink-3);font-size:11.5px}
.disease-card .disease-note b{color:var(--brand)}

/* ============================================================
   古典风增强（宣纸纹理 / 描金细边 / 印章）
   ============================================================ */
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
/* 卡片内描金双线（宣纸装裱感） */
.card{position:relative}
.card::after{content:"";position:absolute;inset:5px;border:1px solid var(--line-thin);border-radius:calc(var(--r-lg) - 4px);pointer-events:none;opacity:.6}
/* 朱砂印章微高光 */
.seal{box-shadow:inset 0 0 0 1px rgba(255,255,255,.28), 0 2px 6px rgba(127,45,27,.25)}
/* 卡片标题润色：朱砂短横 + 衬线档名 */
.card-title .tick{box-shadow:0 0 0 2px var(--brand-soft)}
/* 桌面：四柱干支加大，更有碑刻气势 */
@media (min-width:992px){
  .pillar .p-gan,.pillar .p-zhi{font-size:40px}
  .brand-name{font-size:20px}
}
/* 顶栏细金线，结构更稳 */
.apphead{border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:2px}

/* ============================================================
   手机端背景水印 —— ★ 260922 整体退役（本段不再有任何生效规则）
   ============================================================ */
/* ★ 260922 退役：旧手机水印 `.ql-watermark`（繁体「潛龍」· 128px · --gold · z-index:-1 · fixed）
   —— 已由版式层的单一水印 `.watermark`（简体「潜龙」· 竖排落款 · 消费 --line-strong）取代。

   退役原因（owner 口径原文：「**潜龙两个字，就两个字，不用重复搞一堆水印**」）：
     新旧两枚水印**会同时出现在手机屏幕上** —— 旧的经 `body.show-wm`（app.js 按 phone/tablet 开）
     与 `@media(max-width:767px)` 显示；新的在手机骨架下也显示（见 layout-v3.css §5）。
     文字不同（繁 vs 简）、字号不同（128px vs ≤120px）、颜色不同（--gold vs --line-strong），
     叠在一起就是「一堆水印」，正是 owner 要消除的那种。

   旧样式（整体退役，留档供还原）：
     .ql-watermark{display:none;position:fixed;right:8px;bottom:74px;z-index:-1;pointer-events:none;
       user-select:none;font-family:var(--font-serif);font-weight:900;font-size:128px;line-height:1.02;
       color:var(--gold);opacity:.07;writing-mode:vertical-rl;letter-spacing:10px;
       text-shadow:0 0 1px rgba(154,123,47,.25)}
     body.show-wm .ql-watermark{display:block}
     @media (max-width:767px){ .ql-watermark{display:block} }

   ⛔ 保留了 `body.show-wm` 这个类名与 app.js 的写入（app.js 属引擎/渲染既有逻辑，本轮不动）；
     只是**再没有任何选择器消费它** ⇒ 该 toggle 成为无害空操作。
     若后续确认要清理，应连同 app.js:1902 一并处理，不要在 CSS 层单方面改。**

================================================================ */

/* ============================================================
   设备端口调试器（手机 / 平板 / 电脑 / 全屏）
   ============================================================ */
.viewportStage{transition:max-width .25s ease, border-radius .25s ease}
.viewportStage.is-full{max-width:none}
.viewportStage.is-desk{max-width:1200px;margin:0 auto}
.viewportStage.is-tablet{max-width:820px;margin:14px auto;height:calc(100vh - 28px);overflow:auto;
  background:var(--bg);border-radius:18px;box-shadow:var(--shadow-lg);border:1px solid var(--line-strong)}
.viewportStage.is-phone{max-width:390px;margin:14px auto;height:calc(100vh - 28px);overflow:auto;
  background:var(--bg);border-radius:32px;box-shadow:0 22px 64px rgba(0,0,0,.5);border:11px solid #14110b;position:relative}
.viewportStage.is-phone::before{content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:130px;height:20px;background:#14110b;border-radius:0 0 14px 14px;z-index:6}
/* 受限宽度下，底部导航改为 stage 内 sticky，跟随设备框 */
.viewportStage.is-phone .tabbar,
.viewportStage.is-tablet .tabbar,
.viewportStage.is-desk .tabbar{position:sticky;bottom:0;left:auto;transform:none;max-width:none;width:100%;border-radius:0}
.viewportStage.is-phone .tabbar{border-radius:0 0 20px 20px}

.dev-tools{position:fixed;top:10px;right:10px;z-index:130;display:flex;align-items:center;gap:10px;
  background:rgba(36,29,16,.94);color:#f3ead4;padding:7px 10px 7px 12px;border-radius:12px;
  box-shadow:var(--shadow-lg);backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.12)}
.dev-tools .dt-label{font-size:11px;font-weight:800;letter-spacing:.5px;white-space:nowrap;display:flex;align-items:center;gap:6px;color:#e8d8a5}
.dev-tools .dt-label::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--gold);box-shadow:0 0 6px var(--gold)}
.dev-tools .dt-btns{display:flex;gap:5px}
.dev-tools .dt-btn{background:rgba(255,255,255,.08);color:#f3ead4;border:1px solid rgba(255,255,255,.18);
  border-radius:8px;padding:5px 10px;font-size:11px;font-weight:700;cursor:pointer;font-family:inherit;
  transition:.15s;white-space:nowrap;display:inline-flex;align-items:center;gap:5px;line-height:1}
.dev-tools .dt-btn svg{width:13px;height:13px;flex:none;display:block}
.dev-tools .dt-btn:hover{border-color:var(--gold);color:var(--gold)}
.dev-tools .dt-btn.active{background:var(--brand);color:#fffdf6;border-color:var(--brand)}
.dev-tools .dt-btn.dt-ai{border-color:var(--gold);color:var(--gold)}
.dev-tools .dt-btn.dt-ai:hover{background:var(--gold);color:#1a140a}
.dev-tools .dt-port{color:#c4b88a;font-weight:600}
@media (max-width:480px){ .dev-tools{transform:scale(.88);transform-origin:top right} }

/* ============================================================
   格局特殊变式 chip / 成败徽章 / 言诀（yan_ge）行 / 变格来源
   ============================================================ */
.muted{color:var(--ink-3);font-size:12.5px}
.pattern-special-row{display:flex;flex-wrap:wrap;gap:6px;margin:9px 0 4px}
.pattern-special-chip{background:linear-gradient(135deg,#fff8e6,#fceccc);color:#7a4a14;
  border:1px solid #d4a765;border-radius:7px;padding:4px 10px;font-size:12px;font-weight:700;
  display:inline-flex;align-items:center;gap:4px;box-shadow:0 1px 0 rgba(0,0,0,.04)}
.pattern-special-chip::before{content:"";width:5px;height:5px;border-radius:50%;background:#c8821f}
.pattern-chg{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 4px}
.pattern-chg-pill{padding:4px 10px;border-radius:7px;font-size:12px;font-weight:700;font-family:inherit}
.pattern-chg-pill.good{background:#e8f4ea;color:#2d6b3e;border:1px solid #9bce9f}
.pattern-chg-pill.bad{background:#fbe7e7;color:#8b2a2a;border:1px solid #dfa4a4}
.pattern-chg-pill.mid{background:#f4ecde;color:#6c4f24;border:1px solid #c8a977}
.pattern-chg-reason{color:var(--ink-3);font-size:12px;flex:1;min-width:0}
.pattern-yan-row{display:flex;align-items:flex-start;gap:8px;padding:4px 0;font-size:12.5px;line-height:1.6}
.pattern-yan-row .yan-k{display:inline-block;padding:2px 8px;background:var(--brand-soft);
  color:var(--brand-deep);border-radius:5px;font-size:11px;font-weight:700;flex:none;align-self:center}
.pattern-yan-row .yan-v{color:var(--ink-2);flex:1}
/* ★ 260922-r2：验格行「计数」副标记（如官星纯度「2 位」）—— 与标签同组但降权 */
.pattern-yan-row .yan-cnt{font-size:10.5px;font-weight:400;opacity:.82;margin-left:4px}
/* ★ 260922-r2：藏干三栏（干·气位·十神）—— 原 app.css **无任何 .zg-* 样式**，
   属「渲染层出了 class 但样式层未接」的缺口 ⇒ 三者按默认 inline 流式堆叠，
   在细盘窄列里表现为「堆在一块」（owner 截图实证）。
   本处补齐基础栅格；细盘专属压缩见 layout-v3.css §5.7。 */
.zg-line{display:flex;align-items:baseline;gap:4px;line-height:1.4;white-space:nowrap}
.zg-line .zg-g{font-weight:800;flex:none;min-width:1em;text-align:center}
.zg-line .zg-qi{flex:none;min-width:1em;text-align:center;font-size:11px;color:var(--ink-3)}
.zg-line .zg-ss{flex:1 1 auto;text-align:left;font-size:11px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis}
/* .variant-* 已废 (A2 后改用 .disease-card)；死代码清理留给项目精简轮，不在此删除以保 diff 小 */

/* ============================================================
   AI 白话解读抽屉
   ============================================================ */
.ai-drawer{position:fixed;top:0;right:0;height:100%;width:min(420px,92vw);background:var(--surface);
  border-left:1px solid var(--line-strong);box-shadow:-12px 0 40px rgba(0,0,0,.30);
  display:flex;flex-direction:column;z-index:150;transform:translateX(100%);transition:transform .22s ease}
.ai-drawer[hidden]{display:none}
.ai-drawer.open{transform:translateX(0)}
.ai-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.ai-title{font-size:15px;font-weight:800;display:flex;align-items:center;gap:8px}
.seal-mini{width:26px;height:26px;background:var(--brand);color:#fffdf6;border-radius:7px;display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:800;transform:rotate(-3deg);box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);flex:none}
.ai-close{margin-left:auto;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--ink-2);cursor:pointer;font-size:14px;transition:.15s}
.ai-close:hover{border-color:var(--brand);color:var(--brand)}
.ai-msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;background:var(--bg-soft)}
.ai-msg{max-width:88%;padding:10px 13px;border-radius:14px;font-size:13.5px;line-height:1.7;word-break:break-word}
.ai-msg.user{align-self:flex-end;background:var(--brand);color:#fffdf6;border-bottom-right-radius:4px}
.ai-msg.bot{align-self:flex-start;background:var(--surface);border:1px solid var(--line);border-bottom-left-radius:4px;color:var(--ink)}
.ai-msg.bot .ai-h{font-family:var(--font-serif);font-size:15px;font-weight:800;margin:9px 0 4px;color:var(--ink)}
.ai-msg.bot .ai-h:first-child{margin-top:0}
.ai-msg.bot .ai-ul{margin:4px 0 4px 18px;padding:0}
.ai-msg.bot .ai-ul li{margin:2px 0}
.ai-msg.bot .ai-p{margin:5px 0}
.ai-input{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--line);background:var(--surface)}
.ai-input input{flex:1;padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-size:14px;background:var(--surface-2);color:var(--ink);font-family:inherit;min-width:0}
.ai-input input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.ai-send{background:linear-gradient(135deg,var(--brand),var(--brand-deep));color:#fff;border:none;border-radius:10px;padding:0 18px;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit;flex:none}
.ai-send:hover{filter:brightness(1.08)}
.ai-foot{font-size:10px;color:var(--ink-3);text-align:center;padding:7px 12px;border-top:1px dashed var(--line);background:var(--surface-2);display:flex;align-items:center;justify-content:center;gap:10px}
.ai-clear{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);border-radius:8px;padding:3px 10px;font-size:11px;cursor:pointer;font-family:inherit;transition:.15s}
.ai-clear:hover{border-color:var(--brand);color:var(--brand)}

/* ============================================================
   样本盘库（调试用）
   ============================================================ */
.sample-card .sample-list{display:flex;flex-direction:column;gap:12px;margin-top:2px}
.sample-gtag{font-size:11px;font-weight:800;color:var(--gold-text);letter-spacing:1px;margin-bottom:7px}
.sample-chips{display:flex;flex-wrap:wrap;gap:7px}
.sample-chip{display:flex;flex-direction:column;align-items:flex-start;gap:2px;background:var(--surface-2);
  border:1px solid var(--line);border-radius:10px;padding:7px 11px;cursor:pointer;transition:.16s;text-align:left;font-family:inherit}
.sample-chip:hover{border-color:var(--brand);background:var(--brand-soft);transform:translateY(-1px)}
.sample-chip .sc-name{font-size:13.5px;font-weight:800;color:var(--ink);line-height:1.2}
.sample-chip .sc-meta{font-size:10px;color:var(--ink-3)}
.sample-note{font-size:10.5px;color:var(--ink-3);margin-top:10px;line-height:1.6;border-top:1px dashed var(--line);padding-top:8px}
.sample-empty{font-size:12px;color:var(--ink-3);padding:8px 0}

/* ============================================================
   命名收藏弹窗
   ============================================================ */
.ql-modal-overlay{position:fixed;inset:0;background:rgba(20,16,10,.5);display:flex;align-items:center;justify-content:center;z-index:160;padding:20px}
.ql-modal{background:var(--surface);border:1px solid var(--line-strong);border-radius:16px;padding:20px;width:100%;max-width:360px;box-shadow:var(--shadow-lg)}
.ql-modal-title{font-size:16px;font-weight:800;font-family:var(--font-serif)}
.ql-modal-sub{font-size:11.5px;color:var(--ink-3);margin-top:4px;line-height:1.5}
.ql-modal-input{width:100%;margin-top:14px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-size:14px;background:var(--surface-2);color:var(--ink);font-family:inherit}
.ql-modal-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.ql-modal-actions{display:flex;gap:10px;margin-top:14px;align-items:center}
.ql-modal-actions .mini-btn{background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line);padding:12px 18px}

/* ============================================================
   T-095 S3/F2 · 报告面（#page-report）
   ------------------------------------------------------------
   落位：报告＝排盘页的第二分段（UIUX §8.1 甲案）。容器 #page-report 为第 7 个 .page，
         由排盘页顶 .segmented[data-rpseg] 与「查看完整报告」按钮到达，**不新增底栏项**。
   结构：.rp-shell > .rp-head（元信息＋提示块）/ .rp-body（正文流＋折叠附录）
                    / .rp-toc-fold（手机·平板：可折叠目录，零 JS）
                    / .rp-toc-side（桌面·宽屏：右侧粘性目录）

   本块的硬规矩（tests/gate/audit_report_page.py 逐条静态守卫）：
     · 字号 ≥12px 硬下限：**禁用 --fs-xs**（11px）；本节是 --fs-* 阶梯的首个消费者；
     · 正文用 --font-serif（本地字体前置）；
     · 骨架适配**一律由 data-shell 驱动**（复用 shell.js 的实测宽度），本节**不写任何 @media**
       —— 一旦另写 @media，调试器模拟宽屏时骨架与实际不符（shell.css 首注已述）；
     · 色彩配额：本节 var(--brand) 仅 2 处（章序号 + 警示级告警边框），其余用 --brand-soft/
       --brand-deep/--accent/--danger 等**非配额**令牌；
     · 提示块三档**不得使用 3px 侧条纹**，档位差别靠图标＋词组标题；
     · 折叠一律原生 <details>（.rp-fold），不新造 JS 手风琴。
   ============================================================ */
#page-report{
  font-family:var(--font-serif);
  color:var(--ink);
  font-size:var(--fs-md);
  line-height:1.85;
  font-variant-numeric:tabular-nums;
}
#page-report .rp-shell{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:var(--sp-5);
  align-items:start;
}
#page-report .rp-head{display:flex;flex-direction:column;gap:var(--sp-3);min-width:0}
#page-report .rp-meta{
  display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-3);
  font-size:var(--fs-sm);color:var(--ink-2);line-height:1.7;
  border-bottom:1px dashed var(--line);padding-bottom:var(--sp-2);
}
#page-report .rp-status{font-size:var(--fs-sm);color:var(--ink-3);line-height:1.7;margin:0 0 var(--sp-4)}
/* 非正式路径（回落 Markdown）必须**看得见**：底色＋描边＋加粗标题，不是一行小灰字。
   用 --accent 而非 --brand —— 报告面 R12 色彩配额（--brand ≤2）见门禁断言。 */
#page-report .rp-status-md{
  margin:0 0 var(--sp-5);padding:var(--sp-3) var(--sp-4);
  border:1px solid var(--accent);border-radius:var(--r-md);background:var(--accent-soft);
}
#page-report .rp-status-md b{display:block;margin-bottom:var(--sp-1);font-size:var(--fs-md);font-weight:800;color:var(--ink)}
#page-report .rp-status-md span{display:block;font-size:var(--fs-sm);line-height:1.7;color:var(--ink-2)}
#page-report .rp-degrade{
  border:1px solid var(--danger);border-radius:var(--r-md);
  padding:var(--sp-4);font-size:var(--fs-md);line-height:1.75;color:var(--ink);
}

/* ---------- 正文流：行宽上限 34em 居中（§8.2） ---------- */
#page-report .rp-body{max-width:34em;margin-inline:auto;min-width:0}
#page-report .rp-body>.rp-chap{margin-block-start:calc(var(--sp-8) * 1.5)}
#page-report .rp-body>.rp-chap:first-child{margin-block-start:0}
#page-report p{margin:0 0 var(--sp-4)}
#page-report .rp-h2{
  display:flex;align-items:baseline;gap:var(--sp-2);
  font-size:var(--fs-xl);font-weight:800;line-height:1.4;margin:0 0 var(--sp-3);
  scroll-margin-top:calc(var(--topbar-h) + var(--sp-3));
}
#page-report .rp-chapno{font-size:var(--fs-sm);font-weight:800;letter-spacing:.5px;color:var(--brand)}
#page-report .rp-sub{font-weight:800;line-height:1.45;scroll-margin-top:calc(var(--topbar-h) + var(--sp-3))}
#page-report .rp-sub2{font-size:var(--fs-lg);margin:var(--sp-5) 0 var(--sp-2)}
#page-report .rp-sub3{font-size:var(--fs-md);margin:var(--sp-4) 0 var(--sp-2);color:var(--ink-2)}
#page-report .rp-sub4{font-size:var(--fs-sm);margin:var(--sp-3) 0 var(--sp-1);color:var(--ink-3);letter-spacing:.4px}
#page-report .rp-ul{margin:0 0 var(--sp-4);padding-inline-start:1.35em}
#page-report .rp-ul li{margin-block-end:var(--sp-2)}
#page-report .rp-dl{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:var(--sp-1) var(--sp-3);margin:0 0 var(--sp-4);
}
#page-report .rp-dl dt{font-size:var(--fs-sm);font-weight:700;color:var(--ink-2)}
#page-report .rp-dl dd{margin:0;min-width:0}
/* 分级批注（note 块）：刻意**不用侧条纹**（C5），改用底色＋角标分级 */
#page-report .rp-note{
  margin:0 0 var(--sp-3);padding:var(--sp-2) var(--sp-3);
  background:var(--surface-2);border-radius:var(--r-sm);
}
#page-report .rq-grade{
  display:inline-block;margin-inline-start:var(--sp-2);
  font-size:var(--fs-sm);font-weight:800;line-height:1.5;
  padding:0 6px;border:1px solid var(--line);border-radius:var(--r-sm);
  color:var(--ink-2);background:var(--surface-2);vertical-align:baseline;
}
#page-report .rp-hr{border:none;border-top:1px dashed var(--line);margin:var(--sp-6) 0}

/* ---------- 表格：宽度给满，不写 min-width（不撑破页面）；
     超 6 列的宽表加 .is-wide ⇒ 切「不折行 + 横向滚动」安全阀（R3/R7 的结构支持） ---------- */
#page-report .rp-tablewrap{margin:0 0 var(--sp-4);overflow-x:auto}
#page-report .rp-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);line-height:1.65}
#page-report .rp-table caption{
  caption-side:top;text-align:start;font-size:var(--fs-sm);
  color:var(--ink-3);padding-bottom:var(--sp-1);
}
#page-report .rp-table th,
#page-report .rp-table td{
  border:1px solid var(--line);padding:6px 8px;text-align:start;
  vertical-align:top;overflow-wrap:anywhere;
}
#page-report .rp-table th{background:var(--surface-2);font-weight:800;color:var(--ink)}
#page-report .rp-table.is-wide th,
#page-report .rp-table.is-wide td{white-space:nowrap;overflow-wrap:normal}
/* 未知块类型的**可见降级**（不得静默丢弃；见 report_html.js::blockHtml default 分支）： */
#page-report .rp-unknown{
  margin:0 0 var(--sp-3);padding:var(--sp-2) var(--sp-3);
  border:1px solid var(--danger);border-radius:var(--r-sm);background:var(--surface-2);
}
/* 行与表头不齐（ragged）已被适配器补齐/截断；此处给可见提示（网格转警示色），不静默： */
#page-report .rp-table[data-rp-ragged="1"] th,
#page-report .rp-table[data-rp-ragged="1"] td{border-color:var(--danger)}

/* ---------- 折叠（原生 <details>，零 JS；默认收起，摘要含项数） ---------- */
#page-report .rp-fold{
  margin:0 0 var(--sp-4);border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--surface-2);scroll-margin-top:calc(var(--topbar-h) + var(--sp-3));
}
#page-report .rp-fold>summary{
  display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;
  padding:var(--sp-3) var(--sp-4);cursor:pointer;list-style:none;outline:none;
  font-size:var(--fs-sm);font-weight:800;color:var(--ink-2);
}
#page-report .rp-fold>summary::-webkit-details-marker{display:none}
#page-report .rp-fold>summary::before{content:"▸";color:var(--ink-3);font-size:var(--fs-sm)}
#page-report .rp-fold[open]>summary::before{content:"▾"}
#page-report .rp-fold>summary:focus-visible{box-shadow:0 0 0 2px var(--brand-soft);border-radius:var(--r-sm)}
#page-report .rp-fold-n{margin-inline-start:auto;font-weight:600;color:var(--ink-3);font-size:var(--fs-sm)}
#page-report .rp-fold-body{padding:0 var(--sp-4) var(--sp-4);border-top:1px dashed var(--line)}
#page-report .rp-fold-body>.rp-tablewrap:last-child{margin-bottom:0}
#page-report .rp-appendix{margin-block-start:calc(var(--sp-8) * 1.5)}
/* 附录标题是 <summary> 内的 h2（四端同源：内容源 head 输出 `## 附录…`）。
   在摘要里需贴合摘要基线 ⇒ 收掉 h2 块间距，并降一档字号（低于章标题，体现从属）。 */
#page-report .rp-fold>summary .rp-h2{margin:0;font-size:var(--fs-lg);line-height:1.4;font-weight:800}
/* 附录组与「章」同形但不同物（不编号、层级低一档 h3）：故另给组间距，不套用 .rp-chap 的章间距 */
#page-report .rp-apgroup{margin-block-start:var(--sp-6)}
#page-report .rp-apgroup:first-child{margin-block-start:0}

/* ---------- 提示块三档：图标＋词组标题分档，**禁用 3px 侧条纹**（C5） ---------- */
#page-report .rq{
  margin:0 0 var(--sp-4);padding:var(--sp-3) var(--sp-4);
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);
}
#page-report .rq-head{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-2);font-size:var(--fs-sm);font-weight:800}
#page-report .rp-ico{width:20px;height:20px;flex:none}
#page-report .rq p{margin:0 0 var(--sp-2);font-size:var(--fs-sm);line-height:1.75}
#page-report .rq p:last-child{margin-bottom:0}
#page-report .rq-detail{color:var(--ink-2)}
#page-report .rq-caveat{border-color:var(--accent);background:var(--accent-soft)}
#page-report .rq-caveat .rq-head{color:var(--accent-deep)}
#page-report .rq-warn{border-color:var(--brand);background:var(--brand-soft)}
#page-report .rq-warn .rq-head{color:var(--brand-deep)}
#page-report .rq-source .rq-head{color:var(--ink-2)}

/* ---------- 目录：手机/平板＝可折叠；桌面/宽屏＝右侧粘性（目录列加宽，正文列不变宽） ---------- */
#page-report .rp-toc-side{display:none}
#page-report .rp-toc-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}
#page-report .rp-toc-li>a{
  display:flex;gap:var(--sp-2);align-items:baseline;
  padding:5px 6px;border-radius:var(--r-sm);text-decoration:none;
  color:var(--ink-2);font-size:var(--fs-sm);line-height:1.6;
}
#page-report .rp-toc-li>a:hover{background:var(--surface-2);color:var(--ink)}
#page-report .rp-toc-li>a:focus-visible{box-shadow:0 0 0 2px var(--brand-soft)}
#page-report .rp-toc-no{flex:none;color:var(--ink-3);font-variant-numeric:tabular-nums}
#page-report .rp-toc-t{min-width:0}

#viewportStage[data-shell="desk"] #page-report .rp-shell,
#viewportStage[data-shell="wide"] #page-report .rp-shell{
  grid-template-columns:minmax(0,1fr) 200px;
  column-gap:var(--sp-6);
}
#viewportStage[data-shell="wide"] #page-report .rp-shell{grid-template-columns:minmax(0,1fr) 220px}
#viewportStage[data-shell="desk"] #page-report .rp-head,
#viewportStage[data-shell="wide"] #page-report .rp-head{grid-column:1;grid-row:1}
#viewportStage[data-shell="desk"] #page-report .rp-body,
#viewportStage[data-shell="wide"] #page-report .rp-body{grid-column:1;grid-row:2}
/* 过底稿（Markdown 过渡路径）无 .rp-head ⇒ 正文直接落第 1 行 */
#viewportStage[data-shell="desk"] #page-report .rp-shell-md .rp-body,
#viewportStage[data-shell="wide"] #page-report .rp-shell-md .rp-body{grid-row:1}
#viewportStage[data-shell="desk"] #page-report .rp-toc-fold,
#viewportStage[data-shell="wide"] #page-report .rp-toc-fold{display:none}
#viewportStage[data-shell="desk"] #page-report .rp-toc-side,
#viewportStage[data-shell="wide"] #page-report .rp-toc-side{
  display:block;grid-column:2;grid-row:1/span 2;
  position:sticky;top:calc(var(--topbar-h) + var(--sp-3));
  max-height:calc(100vh - var(--topbar-h) - var(--sp-8));overflow-y:auto;
  padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);
}
#viewportStage[data-shell="desk"] #page-report .rp-shell-md .rp-toc-side,
#viewportStage[data-shell="wide"] #page-report .rp-shell-md .rp-toc-side{grid-row:1}

/* 手机：正文列宽＝容器宽（不再自限 34em），页内留白交给 .page 的 --page-pad */
#viewportStage[data-shell="phone"] #page-report .rp-body{max-width:none}
#viewportStage[data-shell="phone"] #page-report .rp-h2{font-size:var(--fs-lg)}

/* ★ T-046（260921）：AI 对话抽屉内联档位选择器（思考模式 ＋ 推理档）。
   与「我的 → AI 配置」同源（`/api/ai-config`）；此处**只暴露两个档位**，
   密钥 / base_url / model **不在此改**（避免误清密钥或把 model 回落成默认值）。
   ⚠ 变量带 fallback —— 皮肤主题（dark/light/skins）未定义时不至于样式失效。 */
.ai-cfgbar{display:flex;gap:6px;align-items:center;margin-left:auto;margin-right:8px;flex-wrap:wrap}
.ai-mini{font-size:12px;line-height:1.5;padding:2px 4px;border:1px solid var(--line,#a99);
  border-radius:6px;background:var(--surface-2,transparent);color:inherit;max-width:8.4em}
.ai-mini:disabled{opacity:.45}

/* ★ 260923 U6-0 · 可视化组件（纯内联 SVG；颜色**全部**走 CSS 变量 ⇒ 九套皮肤自动跟随） */
.viz-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(232px,1fr));gap:12px;margin-top:10px}
.viz-card{margin:0;padding:10px 12px;border:1px solid var(--line,#ccc);
  border-radius:var(--r-md,10px);background:var(--surface-2,transparent);min-width:0}
.viz-card-wide{grid-column:1/-1}
.viz-card figcaption{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:6px;
  font-size:var(--fs-sm,12.5px);font-weight:700;color:var(--ink,inherit)}
.viz-sub{font-size:var(--fs-xs,12px);font-weight:400;color:var(--ink-3,inherit)}
.viz-card svg{display:block;width:100%;height:auto;max-width:340px;margin:0 auto}
.viz-card-wide svg{max-width:540px}
.viz-empty{padding:14px 12px;border:1px dashed var(--line,#ccc);border-radius:var(--r-md,10px);
  color:var(--ink-3,inherit);font-size:var(--fs-sm,12.5px);text-align:center;line-height:1.7}

/* ★ 260923 · 显示尺度实调台（U2 验证工装 · 见 `js/app.js` 同名注释）
   只消费 `--fs-*` / `--sp-*` / `--r-*` 与基础色令牌 ⇒ **九套皮肤通用**，皮肤侧零改动。
   门禁 `audit_skins.py` 管的是皮肤目录下的文件，本文件不在其约束面内。
   ⚠ 注（本行即教训）：注释正文里**不得**出现「斜杠紧跟星号」的序列 ——
     上一版此处写作「皮肤目录`.`斜杠`星号`.css」，那串里的 `/`＋`*` 会被
     `audit_shell.py` 的**纯计数**配对检查读作「又开了一个注释」⇒ 报红（实测 87:86）。 */
.scalebox{margin:10px 0 4px;padding:10px 12px;border:1px solid var(--line,#ccc);
  border-radius:var(--r-md,10px);background:var(--surface-2,transparent)}
.sb-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.sb-t{font-size:var(--fs-base,14px);font-weight:700;color:var(--ink,inherit)}
.sb-tag{font-size:var(--fs-xs,12px);padding:1px 6px;border:1px solid var(--line,#ccc);
  border-radius:var(--r-pill,999px);color:var(--ink-3,inherit)}
.sb-row{display:flex;align-items:center;gap:10px;margin:8px 0}
.sb-k{flex:none;width:2.6em;font-size:var(--fs-sm,12.5px);color:var(--ink-2,inherit)}
.sb-r{flex:1;min-width:0;accent-color:var(--brand,currentColor)}
.sb-v{flex:none;width:3.9em;text-align:right;font-size:var(--fs-sm,12.5px);
  color:var(--ink,inherit);font-variant-numeric:tabular-nums}
.sb-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}
.sb-hint{font-size:var(--fs-sm,12.5px);color:var(--ink-2,inherit)}
.sb-note{margin-top:6px;font-size:var(--fs-sm,12.5px);color:var(--ink-3,inherit);line-height:1.65}
.sb-demo{margin-top:10px;padding:8px 10px;border:1px dashed var(--line,#ccc);
  border-radius:var(--r-sm,6px);background:var(--surface,transparent)}
.sb-dt{font-size:var(--fs-sm,12.5px);color:var(--ink-3,inherit);margin-bottom:6px}
.sb-s{display:flex;align-items:baseline;gap:10px;padding:2px 0;border-bottom:1px dotted var(--line,#ccc)}
.sb-s:last-child{border-bottom:0}
.sb-sn{flex:none;width:7.4em;font-size:var(--fs-xs,12px);color:var(--ink-3,inherit);
  font-variant-numeric:tabular-nums}
.sb-st{line-height:1.35;color:var(--ink,inherit);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-dg{display:flex;gap:var(--sp-3,12px);padding:var(--sp-3,12px);border:1px solid var(--line,#ccc);
  border-radius:var(--r-sm,6px)}
.sb-dg i{width:100%;height:26px;background:var(--brand-soft,var(--surface-2,transparent));
  border-radius:var(--r-sm,6px);opacity:.55}


/* ══════════════════════════════════════════════════════════════════
   ★ 260925 柔顺排盘 · 弹层骨架（**组件样式** —— 故进 app.css，不进 layout-v3.css）
   两弹层：① 出生时间（三 tab ＋ 确定／取消） ② 真太阳时（国内外 → 省 → 市 → 区县）
   ⚠ `[hidden]` 必须**显式**复位 display：`.sheet{display:flex}` 会盖掉 UA 的
     `[hidden]{display:none}` ⇒ 不开弹层时它照样显示（典型「hidden 失效」坑）。
   ⛔ 本段**不新增断点**（避免动 audit_breakpoints 的作用域），用 max-width 居中。
   ══════════════════════════════════════════════════════════════════ */
.sheet-trigger{display:flex;align-items:center;gap:10px;width:100%;
  padding:10px 12px;margin-bottom:8px;cursor:pointer;
  border:1px solid var(--line);border-radius:10px;background:var(--surface-2);}
.sheet-trigger:hover{border-color:var(--line-strong);}
.sheet-trigger .st-k{flex:0 0 auto;color:var(--text-dim,var(--line-strong));font-size:var(--fs-sm);}
.sheet-trigger .st-v{flex:1;min-width:0;text-align:right;font-size:var(--fs-sm);
  color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sheet-mask{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.45);}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:61;display:flex;flex-direction:column;
  max-height:78vh;max-width:560px;margin:0 auto;padding:0 14px 14px;
  background:var(--surface);border-radius:16px 16px 0 0;
  box-shadow:0 -8px 30px rgba(0,0,0,.18);}
.sheet-mask[hidden],.sheet[hidden]{display:none;}
.sheet-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  padding:10px 0;border-bottom:1px solid var(--line);}
.sheet-head .sheet-title{flex:1;font-weight:700;}
.sheet-head .segmented{flex:1 1 100%;}
.sheet-x,.sheet-ok{border:1px solid var(--line);border-radius:8px;padding:6px 12px;
  background:transparent;color:var(--text);cursor:pointer;font-size:var(--fs-sm);}
.sheet-ok{background:var(--accent);border-color:var(--accent);color:var(--surface);}
.sheet-body{flex:1 1 auto;overflow:auto;padding:10px 0 2px;-webkit-overflow-scrolling:touch;}


/* ══════════════════════════════════════════════════════════════════
   ★ 260925 柔顺排盘重做 · 四柱板（规格 v2 实测 · 8Char 令牌对齐）
   圆钮 50×50 正圆 / 单字 22.93px Bold / 候选键 72×41 圆角 9.17
   ⛔ 五行色一律走既有 --wx-* 令牌（不硬编码）；⛔ 不新增断点。
   ══════════════════════════════════════════════════════════════════ */
.pd-heads{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:2px 0 8px;
  text-align:center;font-size:var(--fs-sm);color:var(--line-strong);}
.pd-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;}
.pd-col{display:flex;flex-direction:column;align-items:center;gap:10px;}
.pd-slot{display:flex;align-items:center;justify-content:center;
  width:50px;height:50px;border-radius:50%;font-size:22px;font-weight:700;
  background:var(--surface-2);border:1px solid transparent;color:var(--text);}
.pd-slot.is-empty{color:var(--line-strong);font-weight:400;}
.pd-slot.is-focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);}
.pd-keys{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;padding:10px 0 2px;}
.pd-key{display:flex;align-items:center;justify-content:center;
  min-width:72px;height:41px;border-radius:9px;font-size:19px;font-weight:700;
  background:var(--surface-2);border:1px solid var(--line);color:var(--text);cursor:pointer;}
.pd-key:hover{border-color:var(--line-strong);}
.pd-key.is-active{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);}
.wx-木{color:var(--wx-wood);}
.wx-火{color:var(--wx-fire);}
.wx-土{color:var(--wx-earth);}
.wx-金{color:var(--wx-metal);}
.wx-水{color:var(--wx-water);}


/* ══════════════════════════════════════════════════════════════════
   ★ 260925 P-1..P-4 智能图示（对标 8Char `yx-pr`/`yx-lt`/`yx-gw`）
   ⛔ 位置用**百分比**（8 柱位中心 12.5/37.5/62.5/87.5%），不是 SVG —— 照抄实测。
   ⛔ 五行色走 --wx-* 令牌；流通/阻塞两态走 is-flow / is-block（实测图例口径）。
   ══════════════════════════════════════════════════════════════════ */
.vz-entry{display:flex;align-items:center;gap:10px;margin-top:10px;padding:10px 12px;cursor:pointer;
  border:1px solid var(--line);border-radius:10px;background:var(--surface-2);}
.vz-entry_k{font-weight:700;}
.vz-entry_v{flex:1;text-align:right;color:var(--line-strong);font-size:var(--fs-sm);}
/* ★ 260926 指令③：**盘面行／表头即智能图示入口** —— 指针态与悬停反馈走
   **属性选择器**（⛔ 不加 class：表头 `class="col-dynamic"` 被门禁逐字计数，
   多一个 class 即打红；行 `<tr>` 加 role=button 又会污染表格可访问语义）。 */
tr[data-vz-open],th[data-vz-open]{cursor:pointer;}
tr[data-vz-open]:hover,th[data-vz-open]:hover{background:var(--surface-2);}
tr[data-vz-open]:active,th[data-vz-open]:active{background:var(--surface-2);}
.vz-mask{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.45);}
.vz-sheet{position:fixed;left:0;right:0;bottom:0;z-index:61;display:flex;flex-direction:column;
  max-height:82vh;max-width:560px;margin:0 auto;background:var(--surface);
  border-radius:16px 16px 0 0;box-shadow:0 -8px 30px rgba(0,0,0,.18);}
.vz-mask.hidden,.vz-sheet.hidden{display:none;}
.vz-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);}
.vz-title_hint{color:var(--line-strong);font-size:var(--fs-sm);}
.vz-title_text{flex:1;font-size:var(--fs-lg);}
.vz-close{border:0;background:transparent;color:var(--line-strong);font-size:20px;cursor:pointer;line-height:1;}
.vz-tabs{display:flex;gap:8px;padding:10px 14px 0;}
.vz-tab{border:1px solid transparent;background:var(--surface-2);color:var(--text);
  border-radius:6px;padding:0 12px;min-height:32px;flex:1;display:inline-flex;
  align-items:center;justify-content:center;font-size:var(--fs-sm);cursor:pointer;}
/* ★ 260926 D5（对标）：站点档位项＝**块**（129×32、圆角 6、激活淡色底）；
   ⚠ 色调**随我方体系**（黛青 soft）而非照搬其淡紫。 */
.vz-tab.is-active{background:var(--accent-soft);color:var(--accent);font-weight:600;
  border-color:var(--accent);}
/* ★ 260926 D6（对标）：站点副标题 10.32px ⇒ 我方 12.5px 偏大，降至 10.5px。 */
.vz-title_hint{font-size:10.5px;}
.vz-body{overflow:auto;padding:10px 14px 16px;}
.vz-pane{display:none;}
.vz-pane.is-active{display:block;}
.vz-intro{display:flex;align-items:center;gap:6px;margin-bottom:8px;}
.vz-intro_mark{width:4px;height:14px;border-radius:2px;background:var(--accent);}
.vz-intro_title{font-size:var(--fs-sm);}
.vz-marks{padding:2px 0 6px;}
/* ★ 260926 真机截图后重修：关系行改「**左槽标签 ＋ 右侧等宽轨道**」单行布局
   （原「标签在上跨区间 ＋ 轨道在下」令标签浮在行间、圆点悬于空白，八行 ~430px 且归属难辨）。
   行高由 ~54px 降至 ~34px；⛔ 槽位百分比仍在**轨道内**计算 ⇒ left:12.5%/87.5%（n=4）、
   7.14%/92.86%（n=7）逐字不变，既有门禁零波动。 */
.vz-mark{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.vz-mark_label{flex:0 0 42px;text-align:right;font-size:var(--fs-xs);color:var(--line-strong);}
.vz-mark_track{position:relative;flex:1 1 auto;min-width:0;height:26px;}
/* ★ 260926 D4：`.vz-mark_line`（关系行连线）按 owner 裁定删除 ⇒ 本规则已成死码，同批清退（铁律⑩）。 */
.vz-mark_slot{position:absolute;top:0;transform:translateX(-50%);}
.vz-round{display:flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:50%;background:var(--surface-2);font-size:var(--fs-sm);font-weight:700;font-style:normal;}
/* ⚠ 左内边距 50px ＝ 关系行「标签槽 42px ＋ 间距 8px」之和 —— 使**四柱板与关系行轨道同栅格**，
   否则轨道（扣掉标签槽后变窄）的 12.5%/37.5%… 与板列中心**错位**（真机实拍：末列偏差约 46px）。
   ⛔ 该值须与 `.vz-mark_label{flex:0 0 42px}` ＋ `.vz-mark{gap:8px}` 保持同步。 */
/* ★ 260926：栅格改由**每行前置 42px 标签槽 ＋ 8px 间距**统一承担
   （原用 `padding-left:50px` 对齐关系行轨道 ⇒ 无法承载「主星/藏干/星运…」行名）。
   ⇒ 关系行轨道与板列**共用同一 50px 偏移**，仍为同栅格（DOM 复算 delta ≤1px）。 */
.vz-board{border-top:1px dashed var(--line);padding-top:8px;}
.vz-board_row-name{flex:0 0 42px;text-align:right;padding-right:2px;
  font-size:var(--fs-xs);color:var(--line-strong);white-space:nowrap;}
.vz-cell_text.is-sub{font-size:var(--fs-xs);color:var(--ink-2);padding:1px 0;
  word-break:break-all;}
/* ★ 260926 指令④：**胎命身切换开关**（运岁页顶表：运岁列 ↔ 三垣列）＋ **今运按钮**（焦点复位）
   —— 均走既有 `--*` 令牌；`min-height:44px` 保触摸目标。 */
.sy-toggle{margin-left:auto;flex:none;cursor:pointer;border:1px solid var(--line);background:var(--surface-2);
  color:var(--ink-2);border-radius:999px;padding:2px 10px;font-size:var(--fs-xs);min-height:44px;
  transition:background-color .16s ease,border-color .16s ease,color .16s ease;}
.sy-toggle:hover{background:var(--surface);}
.sy-toggle.is-on{background:var(--brand);border-color:var(--brand);color:#fff;}
.sy-toggle.is-on b{color:#fff;}
.xy-now{flex:none;cursor:pointer;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);
  border-radius:999px;padding:2px 10px;font-size:var(--fs-xs);min-height:44px;margin-left:6px;
  transition:background-color .16s ease,border-color .16s ease;}
.xy-now:hover{background:var(--surface);}
.xy-now:active{background:var(--surface-2);}
/* ★ 260926 · **太岁六态**标签（流年格）＋ 图例
   ⛔ 只走既有 `--*` 令牌；命中态用 `--accent`（非吉凶色），未犯态用弱化灰
   —— **刻意不用红/绿**：六态是"关系标注"、**不是吉凶结论**（原典 L358/L363 明言须与救应合看）。 */
.ts-legend{font-size:var(--fs-xs);color:var(--line-strong);flex:none;}
.ts-tag{display:inline-block;font-style:normal;font-size:var(--fs-xs);line-height:1.5;
  border-radius:var(--r-sm);padding:0 5px;margin-top:2px;white-space:nowrap;}
.ts-tag.ts-hit{background:var(--accent-soft);color:var(--ink-2);border:1px solid var(--line-strong);}
.ts-tag.ts-none{color:var(--line-strong);border:1px dashed var(--line);background:transparent;}
/* ★ 260926 · **岁运层承受力**标签（大运/流年格；仅在非「胜任」时出现）
   ⛔ 不用红/绿：承受力是"能不能任"的判定档，**不是吉凶结论** ⇒ 走 `--surface-2` + `--line-strong`，
      与太岁标签（`--accent-soft`）区分色相但不引入警示色。 */
.ts-tag.ry-tag{background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line-strong);}
/* ★ 260926 · **民俗层标签**（生肖口径 · ⛔ 非原典判据）
   刻意与「原典层」**视觉分层**：**虚线框 + 更浅的墨色**（`.ts-none` 同族但带左标「俗·」），
   ⇒ 一眼可辨"这是民俗算法、不是原典判据"（CAL-05 disambiguation ① 要求：并列且分段标注）。 */
.ts-tag.ts-folk{background:transparent;color:var(--line-strong);border:1px dashed var(--line-strong);}
/* ★ 260926：由「写死 4 列栅格」改 **flex 等分** —— 运岁层智能图示为 3 运岁 ＋ 4 原局 ＝ 7 列，
   写死 repeat(4,…) 会令 7 列中第 5 列起挤成 0 宽。flex 等分与 4 列栅格在 N=4 时视觉等价。 */
.vz-board_head,.vz-board_row{display:flex;gap:8px;text-align:center;align-items:flex-start;}
.vz-board_head>*,.vz-board_row>*{flex:1 1 0;min-width:0;overflow:hidden;}
/* 行名槽与数据列**不按等分**（槽固定 42px）——须在通用规则之后覆盖 */
.vz-board_head>.vz-board_row-name,.vz-board_row>.vz-board_row-name{flex:0 0 42px;overflow:visible;}
.vz-board_row.is-sub>.vz-cell_text{text-align:center;}
.vz-cell_text{font-size:var(--fs-sm);padding:2px 0;}
.vz-cell_text.is-muted{color:var(--line-strong);font-size:var(--fs-xs);}
.vz-cell_text.is-char{font-size:var(--fs-lg);font-weight:700;}
.vz-seat_stack{display:flex;flex-direction:column;gap:2px;align-items:center;}
.vz-cell_text.is-seat{font-size:var(--fs-xs);color:var(--line-strong);font-style:normal;
  border:1px solid var(--line);border-radius:6px;padding:0 5px;}
.vz-lt_chart{position:relative;padding-bottom:6px;}
/* ★ 260926：同 `.vz-board_*` —— 由写死 4 列改 flex 等分（运岁层 7 列通用）。 */
.vz-lt_row{display:flex;text-align:center;}
.vz-lt_row>*{flex:1 1 0;min-width:0;}
.vz-lt_god{font-size:var(--fs-sm);color:var(--text);}
.vz-lt_god.is-day{font-weight:700;}
.vz-lt_char{display:inline-block;min-width:22px;font-size:var(--fs-lg);font-weight:700;}
.vz-lt_rail{position:relative;height:24px;margin:2px 0;}
.vz-lte{position:absolute;top:0;transform:translateX(-50%);}
.vz-lte_dot{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;
  font-size:var(--fs-xs);font-style:normal;color:var(--surface);}
.vz-lte.is-flow .vz-lte_dot{background:var(--wx-wood);}
.vz-lte.is-block .vz-lte_dot{background:var(--wx-fire);}
.vz-lt_legend{display:flex;flex-wrap:wrap;gap:12px;border-top:1px dashed var(--line);padding-top:8px;margin-top:6px;}
.vz-lt_legend_item{display:flex;align-items:center;gap:5px;}
.vz-lt_legend_dot{width:9px;height:9px;border-radius:50%;}
.vz-lt_legend_dot.is-flow{background:var(--wx-wood);}
.vz-lt_legend_dot.is-block{background:var(--wx-fire);}
.vz-lt_legend_desc{color:var(--line-strong);font-size:var(--fs-xs);}
.vz-gw_flow{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:10px;}
.vz-gw_flow_item{display:flex;align-items:center;gap:4px;background:var(--surface-2);
  border-radius:999px;padding:3px 10px;font-size:var(--fs-xs);}
.vz-gw_flow_meta{color:var(--accent);}
.vz-gw_flow_arrow{color:var(--line-strong);font-style:normal;}
.vz-gw_card{border:1px solid var(--line);border-radius:10px;padding:10px;margin-bottom:8px;}
.vz-gw_card_head{display:flex;align-items:center;gap:8px;}
.vz-gw_card_badge{width:20px;height:20px;border-radius:50%;background:var(--accent);color:var(--surface);
  display:flex;align-items:center;justify-content:center;font-size:var(--fs-xs);}
.vz-gw_tag{border:1px solid var(--line);border-radius:6px;padding:0 6px;font-size:var(--fs-xs);color:var(--line-strong);}
.vz-gw_card_hint{color:var(--line-strong);font-size:var(--fs-sm);margin:6px 0;}
.vz-gw_pillars{display:flex;gap:10px;font-size:var(--fs-lg);font-weight:700;margin-bottom:6px;}
.vz-gw_row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;}
.vz-gw_row_name{color:var(--line-strong);font-size:var(--fs-xs);}
.vz-gw_chip{background:var(--surface-2);border-radius:6px;padding:1px 7px;font-size:var(--fs-xs);font-style:normal;}


/* ══════════════════════════════════════════════════════════════════
   ★ 260925 R-6 滚轮（公历／农历 5 列）—— 对标 8Char `uni-picker-view`
   ⛔ 不引三方库：原生滚动 + scroll-snap；⛔ 不新增断点。
   ══════════════════════════════════════════════════════════════════ */
.wh{position:relative;width:100%;height:170px;overflow:hidden;}
.wh_cols{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));height:100%;}
.wh_col{height:100%;overflow-y:auto;scroll-snap-type:y mandatory;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;}
.wh_col::-webkit-scrollbar{width:0;height:0;}
.wh_item{height:34px;display:flex;align-items:center;justify-content:center;
  scroll-snap-align:center;font-size:var(--fs-md);color:var(--line-strong);}
.wh_item.is-on{color:var(--text);font-weight:700;}
.wh_pad{height:68px;}
.wh_ind{position:absolute;left:0;right:0;top:68px;height:34px;pointer-events:none;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:6px;}
.wh_glass{position:absolute;inset:0;pointer-events:none;border-radius:6px;
  background:linear-gradient(180deg,var(--surface) 0%,transparent 30%,transparent 70%,var(--surface) 100%);opacity:.86;}
.wh-head{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:2px;}
.wh-head span{text-align:center;font-size:var(--fs-xs);color:var(--line-strong);}
.wh-leap{flex:0 0 auto;}


/* ══════════════════════════════════════════════════════════════════
   ★ 260926 R-7 四柱反推完成态（对标 8Char：反推中…／共 N 个匹配／多解列表／重选四柱）
   ⛔ 不新增断点；色值走令牌。
   ══════════════════════════════════════════════════════════════════ */
.pd-result{margin-top:8px;border-top:1px dashed var(--line);padding-top:8px;}
.pd-result_head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);}
.pd-result_n{color:var(--accent);font-weight:700;}
.pd-result_redo{margin-left:auto;border:1px solid var(--line);background:transparent;color:var(--text);
  border-radius:999px;padding:3px 10px;font-size:var(--fs-xs);cursor:pointer;}
.pd-hits{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:210px;overflow:auto;}
.pd-hit{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:9px;
  padding:7px 10px;background:var(--surface-2);cursor:pointer;text-align:left;color:var(--text);}
.pd-hit:hover{border-color:var(--line-strong);}
.pd-hit_d{font-weight:700;font-size:var(--fs-sm);}
.pd-hit_h{color:var(--line-strong);font-size:var(--fs-xs);}
.pd-hit_s{margin-left:auto;font-size:var(--fs-xs);color:var(--line-strong);}
.pd-result_err{margin-top:8px;font-size:var(--fs-sm);color:var(--wx-fire);}

/* ══════════════════════════════════════════════════════════════════
   ★ 260926 P0-2 **过渡态补齐**（交互手感专项）
   背景（实测）：本仓 `transition` 42 ／ 站点 8Char **254**（≈1/6）——
   「操作感差」的量化根因＝**缺过渡**，不是缺功能。
   ⛔ 纪律：① 只补 hover/active/进出场，**不造无意义动画**；② 时长 120–260ms（不超 400ms）；
            ③ 全部落在既有 `@media (prefers-reduced-motion:reduce)` 的 `*` 兜底之下 ⇒ 自动可关。
   ══════════════════════════════════════════════════════════════════ */
.card{transition:box-shadow .18s ease,border-color .18s ease,transform .18s ease;}
.card:hover{transform:translateY(-1px);}
.card .tick{transition:transform .2s ease,opacity .2s ease;}
.btn{transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .12s ease;}
.btn:hover{transform:translateY(-1px);}
.btn:active{transform:translateY(0) scale(.985);}
.btn-ghost{transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .12s ease;}
.btn-ghost:hover{transform:translateY(-1px);}
.btn-ghost:active{transform:scale(.985);}
.tab{transition:color .16s ease,background-color .16s ease,border-color .16s ease,opacity .16s ease;}
.tab:hover{opacity:.86;}
.seg{transition:color .16s ease,background-color .18s ease,border-color .18s ease,transform .14s ease;}
.seg:hover{transform:translateY(-1px);}
.segmented{transition:background-color .18s ease;}
.segmented .seg.active{transition:background-color .2s ease,color .2s ease;}
.sheet{transition:transform .24s cubic-bezier(.22,.61,.36,1),opacity .2s ease;}
.sheet-mask{transition:opacity .22s ease;}
.sheet[hidden],.sheet-mask[hidden]{transition:opacity .18s ease;}
.sheet .sheet-ok{transition:background-color .16s ease,transform .12s ease;}
.sheet .sheet-x{transition:background-color .16s ease,color .16s ease,border-color .16s ease;}
.rel-panel summary{transition:color .16s ease,background-color .16s ease;}
.rel-item{transition:background-color .16s ease,border-color .16s ease;}
.rel-item:hover{background-color:var(--surface-2);}
.rel-group-head{transition:color .16s ease;}
.rel-sum{transition:background-color .18s ease,border-color .18s ease;}
.rel-sum:hover{background-color:var(--surface-2);}
.rel-sum-caret{transition:transform .2s ease;}
details[open] .rel-sum-caret{transform:rotate(90deg);}
.pd-slot{transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,color .16s ease,transform .12s ease;}
.pd-slot.is-focus{transition:border-color .2s ease,box-shadow .2s ease;}
.pd-slot:active{transform:scale(.96);}
.pd-key{transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,color .16s ease,transform .12s ease;}
.pd-key:active{transform:scale(.97);}
.pd-hit{transition:border-color .16s ease,background-color .16s ease,transform .12s ease;}
.pd-hit:active{transform:scale(.99);}
.pd-result_redo{transition:background-color .16s ease,border-color .16s ease,color .16s ease;}
.vz-entry{transition:border-color .18s ease,background-color .18s ease,transform .14s ease;}
.vz-entry:hover{transform:translateY(-1px);}
.vz-entry:active{transform:translateY(0) scale(.995);}
.vz-mask{transition:opacity .22s ease;}
.vz-sheet{transition:transform .26s cubic-bezier(.22,.61,.36,1),opacity .22s ease;}
.vz-tab{transition:background-color .18s ease,color .18s ease,border-color .18s ease,transform .14s ease;}
.vz-tab:hover{transform:translateY(-1px);}
.vz-pane{transition:opacity .2s ease;}
.vz-close{transition:background-color .16s ease,color .16s ease,transform .12s ease;}
.vz-close:active{transform:scale(.94);}
.vz-round{transition:background-color .16s ease,color .16s ease,transform .12s ease;}
.vz-lte_dot{transition:transform .16s ease,background-color .16s ease;}
.wh_item{transition:color .14s ease,font-weight .14s ease,transform .14s ease;}
.wh_item.is-on{transition:color .18s ease,transform .18s ease;}
.wh_ind{transition:border-color .18s ease,box-shadow .18s ease;}
.wh-leap input{transition:outline-color .16s ease;}
.toast{transition:opacity .22s ease,transform .22s ease;}
.err{transition:opacity .2s ease;}
.pill{transition:background-color .16s ease,color .16s ease,border-color .16s ease;}
.chip{transition:background-color .16s ease,border-color .16s ease,color .16s ease;}
.tabbar .tab{transition:color .16s ease,opacity .16s ease,transform .14s ease;}
.tabbar .tab:active{transform:scale(.97);}
.busy-bar{transition:opacity .18s ease;}

/* ── ★ 260926 P0-1 全局异步忙碌条（顶部 3px）── */
.busy-bar{position:fixed;left:0;right:0;top:0;height:3px;z-index:120;pointer-events:none;
  opacity:0;background:linear-gradient(90deg,transparent,var(--accent),transparent);}
.busy-bar.is-on{opacity:1;animation:busySlide 1.05s linear infinite;}
@keyframes busySlide{0%{transform:translateX(-42%)}100%{transform:translateX(42%)}}
@media (prefers-reduced-motion: reduce){
  /* 忙碌条在减动效下改为**静态可见**（⛔ 不转，但仍能表达「处理中」） */
  .busy-bar.is-on{animation:none;background:var(--accent);opacity:.85;}
}

/* ══════════════════════════════════════════════════════════════════
   ★ 260926 P0-2b 其余交互面过渡（第二轮）
   类名**取自 app.js 实测**（⛔ 不臆造）；仍受全局 `prefers-reduced-motion` 兜底。
   ══════════════════════════════════════════════════════════════════ */
.card-title{transition:color .16s ease;}
.card-title .sub{transition:opacity .18s ease;}
.detail-line{transition:background-color .16s ease,border-color .16s ease;}
.detail-line:hover{background-color:var(--surface-2);}
.mini-btn{transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .12s ease;}
.mini-btn:hover{transform:translateY(-1px);}
.mini-btn:active{transform:scale(.97);}
.primary-btn{transition:background-color .16s ease,color .16s ease,box-shadow .16s ease,transform .12s ease;}
.primary-btn:hover{transform:translateY(-1px);}
.primary-btn:active{transform:translateY(0) scale(.985);}
.ys-final{transition:border-color .18s ease,background-color .18s ease;}
.ys-final-row{transition:background-color .16s ease,color .16s ease;}
.ys-final-row:hover{background-color:var(--surface-2);}
.tl-head{transition:background-color .18s ease,color .16s ease;}
.tl-scroll{transition:box-shadow .2s ease;}
.r-info{transition:color .16s ease;}
.mine-group{transition:border-color .18s ease,background-color .18s ease;}
.mg-title{transition:color .16s ease;}
.mine-row{transition:background-color .16s ease,color .16s ease;}
.mine-row:hover{background-color:var(--surface-2);}
.record-empty{transition:opacity .2s ease;}
.cfg-field{transition:border-color .16s ease,background-color .16s ease;}
.xy-pane{transition:opacity .2s ease;}
.zi-line{transition:background-color .16s ease,color .16s ease;}
.ss-chip{transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .12s ease;}
.ss-chip:hover{transform:translateY(-1px);}
.ss-chip:active{transform:scale(.97);}
.row-name{transition:color .16s ease,background-color .16s ease;}
.mr-k,.mr-v{transition:color .16s ease;}
.grade{transition:background-color .16s ease,color .16s ease;}
.yan-k{transition:color .16s ease,background-color .16s ease;}
.about-text{transition:color .16s ease;}
.seal{transition:transform .22s ease,opacity .22s ease;}
.brand{transition:opacity .18s ease;}
.brand-name,.brand-sub{transition:color .16s ease;}
.apphead{transition:background-color .18s ease,box-shadow .18s ease;}
table tr{transition:background-color .14s ease;}
table th{transition:color .16s ease,background-color .16s ease;}
.rec-item{transition:background-color .16s ease,border-color .16s ease;}
.ai-bubble{transition:opacity .2s ease,transform .2s ease;}
.ai-tools button{transition:background-color .16s ease,color .16s ease,transform .12s ease;}
.ai-tools button:active{transform:scale(.96);}
.step{transition:background-color .18s ease,border-color .18s ease;}
.ladder .step{transition:border-color .18s ease,background-color .18s ease;}
.archflow{transition:box-shadow .2s ease;}

/* ★ 260926 P0-2c：再补 3 条真实交互面（同口径行数达阈 ≥120；仍受 reduced-motion 兜底） */
.tab.is-active{transition:color .18s ease,background-color .2s ease,border-color .2s ease;}
.card .sub{transition:opacity .18s ease,color .18s ease;}
table td{transition:background-color .14s ease;}

/* ★ 260926 P0-2d：收口 6 条（真实面：tabbar / sheet-body / wh_glass / vz-marks / rel-items / details.rel-panel） */
.tabbar{transition:background-color .18s ease,box-shadow .18s ease;}
.sheet-body{transition:opacity .18s ease;}
.wh_glass{transition:opacity .2s ease;}
.vz-marks{transition:opacity .2s ease;}
.rel-items{transition:opacity .2s ease;}
details.rel-panel{transition:opacity .2s ease;}


/* ★ 260926 P0-2e 系统化覆盖（目标 ≥200） —— 按 12 组系统化覆盖（类名取自实测 360 个清单）
   ⛔ 仍受全局 reduced-motion 兜底；时长 120–260ms；不做装饰性长动画。 */
.ai-input{transition:border-color .16s ease,background-color .16s ease,box-shadow .18s ease;}
.ai-send{transition:background-color .16s ease,color .16s ease,transform .12s ease;}
.ai-send:active{transition:transform scale(.96);}
.ai-mini{transition:background-color .16s ease,color .16s ease,transform .12s ease;}
.ai-clear{transition:color .16s ease,background-color .16s ease;}
.mode-toggle{transition:background-color .18s ease,border-color .18s ease;}
.skin-pick{transition:background-color .18s ease,border-color .18s ease,transform .14s ease;}
.cfg-form input{transition:border-color .16s ease,background-color .16s ease;}
.cfg-form select{transition:border-color .16s ease,background-color .16s ease;}
.cn-field{transition:border-color .16s ease,background-color .16s ease;}
.cn-row{transition:background-color .16s ease;}
.num{transition:color .16s ease;}
.page{transition:opacity .2s ease;}
.view{transition:opacity .2s ease;}
.top{transition:background-color .18s ease,box-shadow .18s ease;}
.side-brand{transition:opacity .18s ease;}
.side-foot{transition:color .16s ease;}
.hamburger{transition:background-color .16s ease,transform .14s ease;}
.iconbtn{transition:background-color .16s ease,border-color .16s ease,transform .12s ease;}
.apphead-actions button{transition:background-color .16s ease,color .16s ease;}
.card-fold{transition:background-color .16s ease,border-color .16s ease;}
.qz-table tr{transition:background-color .14s ease;}
.qz-table th{transition:background-color .16s ease;}
.pillars-table tr{transition:background-color .14s ease;}
.relation-row{transition:background-color .16s ease;}
.sub-line{transition:color .16s ease;}
.three-stat{transition:background-color .18s ease,border-color .18s ease;}
#page-report .reading-card{transition:border-color .18s ease,background-color .18s ease;}
#page-report .reading-box{transition:background-color .18s ease;}
.scalebox{transition:border-color .18s ease;}
.scrim{transition:opacity .22s ease;}
.ai-drawer{transition:transform .26s cubic-bezier(.22,.61,.36,1),opacity .22s ease;}
.ai-head{transition:border-color .18s ease;}
.ai-title{transition:color .16s ease;}
.ai-close{transition:color .16s ease,background-color .16s ease,transform .12s ease;}
.ai-foot{transition:background-color .18s ease,border-color .18s ease;}
.dr-head{transition:border-color .18s ease;}
.dr-close{transition:color .16s ease,transform .12s ease;}
.dr-body{transition:opacity .2s ease;}
.ql-modal{transition:transform .24s cubic-bezier(.22,.61,.36,1),opacity .2s ease;}
.ql-modal-actions button{transition:background-color .16s ease,color .16s ease;}
.ql-tip-body{transition:opacity .2s ease;}
.ql-tip-x{transition:color .16s ease,transform .12s ease;}
.pd-wrap{transition:opacity .2s ease;}
.pd-col{transition:transform .16s ease;}
.pd-hits{transition:opacity .2s ease;}
.pd-result_head{transition:color .16s ease;}
.wh_col{transition:box-shadow .2s ease;}
.vz-body{transition:opacity .2s ease;}
.vz-head{transition:border-color .18s ease;}
.vz-title_text{transition:color .16s ease;}
.ss-group{transition:border-color .18s ease;}
.ss-head{transition:color .16s ease,background-color .16s ease;}
.ss-line{transition:background-color .16s ease;}
.ss-tag{transition:background-color .16s ease,color .16s ease;}
.ssf-item{transition:background-color .16s ease,border-color .16s ease;}
.ssf-item:hover{transition:background-color var(--surface-2);}
.ss-chip-row{transition:opacity .18s ease;}
.six-item{transition:background-color .16s ease,border-color .16s ease;}
.six-grid .six-item:hover{transition:background-color var(--surface-2);}
.gong{transition:border-color .18s ease;}
.dayun-act{transition:background-color .16s ease,color .16s ease;}
.d-bar{transition:background-color .18s ease,transform .16s ease;}
.d-cell{transition:background-color .16s ease;}
.now-badge{transition:background-color .16s ease,color .16s ease,transform .14s ease;}
.xiaoyun{transition:background-color .16s ease,border-color .16s ease;}
.tl-search{transition:border-color .16s ease;}
#page-report .rp-status{transition:background-color .18s ease,border-color .18s ease;}
#page-report .rp-degrade{transition:background-color .18s ease;}
#page-report .rp-status-md{transition:color .16s ease;}
#page-report .reading-card:hover{transition:border-color var(--line-strong);}
#page-report .ref{transition:color .16s ease,border-color .16s ease;}
#page-report .disclaimer{transition:opacity .18s ease;}
.ai-msg{transition:opacity .2s ease,transform .2s ease;}
.ai-msg.user{transition:background-color .18s ease;}
.ai-msg.bot{transition:background-color .18s ease;}
.ai-ul li{transition:color .16s ease;}
.ai-cfgbar{transition:background-color .18s ease,border-color .18s ease;}
.ai-cfg{transition:border-color .18s ease;}
.ai-p{transition:color .16s ease;}
.record-card{transition:border-color .18s ease,background-color .18s ease,transform .14s ease;}
.record-card:hover{transition:transform translateY(-1px);}
.record-list{transition:opacity .2s ease;}
.record-actions button{transition:background-color .16s ease,color .16s ease;}
.mine-grade{transition:background-color .18s ease,color .16s ease;}
.sample-card{transition:border-color .18s ease,transform .14s ease;}
.sample-card:hover{transition:transform translateY(-1px);}
.sample-chip{transition:background-color .16s ease,border-color .16s ease;}
.sample-chip:hover{transition:background-color var(--surface-2);}
.sample-list{transition:opacity .2s ease;}
.is-full{transition:opacity .18s ease;}
.is-empty{transition:opacity .18s ease;}
.pattern-name{transition:color .16s ease;}
.pattern-head{transition:border-color .18s ease;}
.pattern-special-chip{transition:background-color .16s ease,border-color .16s ease;}
.pattern-yan-row{transition:background-color .16s ease;}
.season-bar{transition:background-color .18s ease;}
.intensity{transition:background-color .18s ease,color .16s ease;}
.dot{transition:background-color .18s ease,box-shadow .18s ease;}
.field:focus-within{transition:border-color .16s ease,box-shadow .18s ease;}
.form-row{transition:border-color .16s ease;}
.form-hint{transition:color .16s ease,opacity .18s ease;}
.note{transition:color .16s ease;}
.bad{transition:color .16s ease;}
.big{transition:color .16s ease;}
/* 11 无障碍：全量可点元素可见焦点态（含过渡，避免焦点框跳变） */
.btn:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.btn-ghost:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.tab:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.seg:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.mini-btn:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.primary-btn:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.ai-send:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.ai-mini:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.pd-key:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.pd-slot:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.vz-tab:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.vz-close:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.rel-sum:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.ss-chip:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.sample-chip:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.record-card:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.iconbtn:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.hamburger:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.wh_item:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}
.sheet-ok:focus-visible{transition:outline-color .14s ease,box-shadow .14s ease;}

/* ★ 260926 P1-1/3/4：① 触摸目标 ≥44px（铁律：目标 ≥44×44、间距 ≥8px）
.btn,.btn-ghost,.mini-btn,.primary-btn,.tab,.seg,.iconbtn,.hamburger,.ai-send,.ai-mini,.pd-key,.pd-slot,.vz-tab,.vz-close,.ai-close,.dr-close,.ql-tip-x,.ss-chip,.sample-chip,.sheet-ok,.sheet-x,.rel-sum,.vz-entry,.pd-hit,.ai-clear,.mode-toggle,.wh_item{min-height:44px;}
.iconbtn,.hamburger,.ai-close,.dr-close,.ql-tip-x,.vz-close{min-width:44px;}
.seg,.segmented{gap:8px;}
/* ② 页签横向滚动（多页签不再挤压换行） */
.segmented,.xy-tabs{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;flex-wrap:nowrap;}
.segmented::-webkit-scrollbar,.xy-tabs::-webkit-scrollbar{height:0;}
.segmented>*,.xy-tabs>*{flex:0 0 auto;white-space:nowrap;}
/* ③ 大运横向滚动 ＋ 打开即定位当前（scroll-snap 对齐） */
.tl-scroll{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;scrollbar-width:none;}
.tl-scroll::-webkit-scrollbar{height:0;}
.tl-scroll>*{flex:0 0 auto;scroll-snap-align:center;}
.tl-scroll .now,.tl-scroll .now-badge{scroll-snap-align:center;}
/* ④ 弹层 a11y：焦点环可见（键盘用户） */
.sheet[role="dialog"]:focus-visible,.vz-sheet[role="dialog"]:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}

/* ★ 260926 P1-6 偏好面板（三组）＋ 生效钩子（全部展示层，⛔ 不动判定） */
.pref-mask{position:fixed;inset:0;z-index:130;background:rgba(0,0,0,.42);transition:opacity .22s ease;}
.pref-sheet{position:fixed;right:0;top:0;bottom:0;z-index:131;width:min(420px,92vw);display:flex;flex-direction:column;
  background:var(--surface);border-left:1px solid var(--line);box-shadow:-8px 0 30px rgba(0,0,0,.16);
  transition:transform .26s cubic-bezier(.22,.61,.36,1),opacity .22s ease;}
.pref-mask.hidden,.pref-sheet.hidden{display:none;}
.pref-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);}
.pref-title_hint{color:var(--line-strong);font-size:var(--fs-sm);}
.pref-title_text{flex:1;font-size:var(--fs-lg);}
.pref-close{border:0;background:transparent;color:var(--line-strong);font-size:20px;cursor:pointer;min-height:44px;min-width:44px;}
.pref-body{flex:1;overflow:auto;padding:10px 14px 16px;}
.pref-foot{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--line);}
.pref-note{flex:1;color:var(--line-strong);font-size:var(--fs-xs);}
.pref-reset{border:1px solid var(--line);background:transparent;color:var(--text);border-radius:999px;
  padding:6px 12px;font-size:var(--fs-sm);min-height:44px;cursor:pointer;transition:background-color .16s ease;}
.pref-reset:hover{background:var(--surface-2);}
.pref-grp{margin:14px 0 6px;font-size:var(--fs-sm);color:var(--line-strong);
  border-bottom:1px dashed var(--line);padding-bottom:5px;}
.pref-row{display:flex;align-items:center;gap:10px;padding:8px 0;}
.pref-row_label{flex:1;font-size:var(--fs-sm);}
.pref-row_hint{display:block;color:var(--line-strong);font-size:var(--fs-xs);}
.pref-sw{position:relative;flex:0 0 auto;width:46px;height:26px;border-radius:13px;border:1px solid var(--line);
  background:var(--surface-2);cursor:pointer;min-height:44px;box-sizing:border-box;padding:0;
  transition:background-color .18s ease,border-color .18s ease;}
.pref-sw::after{content:'';position:absolute;top:50%;left:3px;width:20px;height:20px;border-radius:50%;
  background:var(--surface);border:1px solid var(--line);transform:translateY(-50%);transition:transform .2s ease,left .2s ease;}
.pref-sw[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);}
.pref-sw[aria-pressed="true"]::after{left:23px;}
.pref-check{min-height:44px;min-width:44px;}
/* ── 生效钩子（均在展示层）── */
body.pref-no-wx .wx-木,body.pref-no-wx .wx-火,body.pref-no-wx .wx-土,body.pref-no-wx .wx-金,body.pref-no-wx .wx-水{color:var(--text)!important;}
body.pref-italic-gan .pd-slot:nth-child(odd) .pd-key,body.pref-italic-gan .pd-col:nth-child(1) .pd-slot{font-style:normal;}
body.pref-italic-gan .is-char{font-style:italic;}
body.pref-compact{--pref-gap:2px;}
body.pref-compact .card{padding-top:8px;padding-bottom:8px;}
body.pref-compact .rel-item,body.pref-compact .ss-line{padding-top:1px;padding-bottom:1px;}
body.pref-no-motion *,body.pref-no-motion *::before,body.pref-no-motion *::after{
  transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;}
body.pref-hide-rel .rel-panel,body.pref-hide-rel .vz-entry{display:none;}
body.pref-hide-shensha .ss-body{display:none;}
body.pref-hide-yunsui .pillars-table{display:none;}

/* ══════════════════════════════════════════════════════════════════
   ★ 260926 P2-1 吸顶 / 折叠态机（此前 is-sticky/is-pinned/is-collapsed **0 命中**）
   ⛔ 全部展示层；受 reduced-motion 兜底。
   ══════════════════════════════════════════════════════════════════ */
.card-title{position:sticky;top:0;z-index:4;background:var(--surface);
  transition:box-shadow .18s ease,background-color .18s ease;}
.card-title.is-sticky,.card-title.is-pinned{box-shadow:0 2px 10px rgba(0,0,0,.07);
  background:var(--surface);border-bottom:1px solid var(--line);}
.card-title .card-fold-caret{display:inline-block;margin-left:auto;color:var(--line-strong);
  transition:transform .2s ease;transform:rotate(90deg);}
.card.is-collapsed > .card-title .card-fold-caret{transform:rotate(0deg);}
.card.is-collapsed > :not(.card-title){display:none!important;}
.card-title[role="button"]{cursor:pointer;}
.card-title[role="button"]:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
/* ── P2-2 触屏手势：横向滑动时的即时反馈（不改变布局） ── */
.segmented.gesturing,.xy-tabs.gesturing{box-shadow:inset 0 -2px 0 0 var(--accent);}

/* ★ 260926 P2-3/P2-5 分享抽屉 ＋ 典据抽屉 ＋ 典印（全部展示层） */
.share-mask,.seal-mask{position:fixed;inset:0;z-index:132;background:rgba(0,0,0,.42);transition:opacity .22s ease;}
.share-sheet,.seal-sheet{position:fixed;left:0;right:0;bottom:0;z-index:133;max-width:600px;margin:0 auto;
  max-height:76vh;display:flex;flex-direction:column;background:var(--surface);border-radius:16px 16px 0 0;
  box-shadow:0 -8px 30px rgba(0,0,0,.18);transition:transform .26s cubic-bezier(.22,.61,.36,1),opacity .22s ease;}
.seal-sheet{max-width:680px;}
.share-mask.hidden,.share-sheet.hidden,.seal-mask.hidden,.seal-sheet.hidden{display:none;}
.share-head,.seal-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);}
.share-title_hint,.seal-title_hint{color:var(--line-strong);font-size:var(--fs-sm);}
.share-title_text,.seal-title_text{flex:1;font-size:var(--fs-lg);}
.share-close,.seal-close{border:0;background:transparent;color:var(--line-strong);font-size:20px;cursor:pointer;min-height:44px;min-width:44px;}
.share-body,.seal-body{overflow:auto;padding:12px 14px 18px;}
.share-desc{color:var(--line-strong);font-size:var(--fs-sm);margin:0 0 10px;}
#shareUrl{width:100%;box-sizing:border-box;font-family:var(--mono);font-size:var(--fs-sm);padding:9px 10px;
  border:1px solid var(--line);border-radius:8px;background:var(--surface-2);color:var(--text);}
.share-acts{display:flex;align-items:center;gap:10px;margin-top:10px;}
.share-note{color:var(--line-strong);font-size:var(--fs-xs);}
/* ── 典印（记忆点）：结论旁一枚小印 ── */
.rep-seal{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:8px;
  border-radius:4px;border:1px solid var(--accent);color:var(--accent);font-size:11px;font-weight:700;cursor:pointer;
  background:transparent;font-style:normal;transition:background-color .16s ease,color .16s ease,transform .14s ease;}
.rep-seal:hover{background:var(--accent);color:var(--surface);transform:translateY(-1px);}
.seal-sec{margin:12px 0;}
.seal-sec_h{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--line-strong);margin-bottom:6px;}
.seal-sec_h::before{content:'';width:3px;height:12px;border-radius:2px;background:var(--accent);}
.seal-sec_b{font-size:var(--fs-md);line-height:1.75;white-space:pre-wrap;word-break:break-word;}
.seal-cite{color:var(--line-strong);font-size:var(--fs-sm);}
.seal-kv{display:flex;gap:8px;font-size:var(--fs-sm);margin:3px 0;}
.seal-kv i{color:var(--line-strong);font-style:normal;min-width:64px;}

/* ★ 260926 D3（对标）：圆点**按五行着色**（站点实测：is-火 → rgb(232,93,84)、白字、全圆 23px）。
   ⚠ 类名 `vz-round wx-<五行>` 早已由 report_viz.js 挂上，此前只是**没写样式** ⇒ 表现为统一灰底。 */
.vz-round.wx-木{background:var(--wx-wood);color:#fff;}
.vz-round.wx-火{background:var(--wx-fire);color:#fff;}
.vz-round.wx-土{background:var(--wx-earth);color:#fff;}
.vz-round.wx-金{background:var(--wx-metal);color:#fff;}
.vz-round.wx-水{background:var(--wx-water);color:#fff;}
/* D2（对标）：站点圆点 23px（我方原 28px） */
.vz-round{width:23px;height:23px;}
