/* ============================================================
   其一 · 紫微页「观星」—— 夜空星图版式
   ------------------------------------------------------------------
   与八字页「展卷」同构的设计语言，昼夜姊妹篇：
   页面锁定暗色（body[data-theme-lock="dark"]，layout.js v11 支持），
   新星空图为底，十二宫为星宿节点，三合金色连线织成星图；
   分析区去框改跋文式；引言题头 + 金印落款收尾。
   v24：回字形 4×4 边环网格满宽铺排，中宫跨中央 2×2，宫格落格不再悬浮。
   v25：星幕化收尾——宫格去面板底（hover 极淡径向光替代）、盘面光体去圆弧硬边、
   中宫改软边辉光并收小直径、四角宫向盘心内收（--corner-pull）使轮廓读作圆。
   v26：消方框——盘底星尘贴边星点降 alpha 并加径向 mask 渐隐，杜绝方形边界感；
   中宫外圈辉光由 box-shadow 大羽化改伪元素圆形径向渐变；解读流桌面满宽两栏网格
   （--zw-stream-max 令牌收敛，:has 纯 CSS 分配，免改 JS）；大限分层去框改行式斑马；
   正文对齐八字页四级字号阶梯；排盘钮改夜空金阶 + 印章式疏排（赢过 cinema-dark 青绿）。
   v27：星息系统——盘下控制行（开关 + 缓/匀/疾三档滑杆），呼吸只动 opacity，
   keyframes 引用 --breath-period/--breath-lo 变量（帝星更深一档），负延迟错峰；
   聚星灯（.focus 其余宫位退隐）、触点星波（.zw-pulse 一次性）、鼠标星尘（.zw-dust）；
   设计令牌收敛（--zw-gold/--zw-gold-soft/--zw-mist 等，新效果一律取令牌）；
   观星台表单区（color-scheme dark + 楷体疏排标签）、解读流细节（菱形星点题头等）。
   加载顺序：styles.css → cinema-dark.css → … → 页内 <style> → 本文件（最后，赢得级联）
   ============================================================ */

/* ---------- 〇′ · 设计令牌（v27：新效果一律从此取值；既有色值不回改） ---------- */
:root {
  --zw-gold: 211, 172, 87;        /* 金发丝/连线/点缀 */
  --zw-gold-soft: 233, 213, 163;  /* 亮金（星点/光晕） */
  --zw-ivory: 240, 240, 233;      /* 星光象牙白 */
  --zw-mist: 200, 210, 226;       /* 星雾蓝灰（小字） */
  --zw-dur-fx: 0.45s;             /* 交互过渡时长 */
}

/* ---------- 〇 · 夜空画布 ---------- */
html { background-color: #0d1424; }
body.bg-themed { background-color: #0d1424 !important; }
body.bg-themed::before {
  content: "" !important;
  position: fixed !important;
  inset: 0 !important;
  z-index: 0 !important;
  opacity: 0.92 !important;
  background-image:
    linear-gradient(180deg, rgba(9, 15, 30, 0.22) 0%, rgba(9, 15, 30, 0.08) 30%, rgba(9, 15, 30, 0.05) 60%, rgba(9, 15, 30, 0.28) 100%),
    url("/backgrounds/ziwei-bg.jpg?v=80f668f2") !important;
  background-size: cover !important;
  background-position: center top !important;
  background-repeat: no-repeat !important;
  pointer-events: none !important;
}
/* 星图上的暗纱：中心透亮、四周暗角（vignette），盘面从星空中浮现而非贴上（选择器提权压过 cinema-dark） */
html:not([data-theme="light"]) body.bg-themed::after,
body.bg-themed::after {
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  background:
    radial-gradient(ellipse 62% 55% at 50% 42%, rgba(10, 16, 30, 0) 40%, rgba(10, 16, 30, 0.18) 78%, rgba(10, 16, 30, 0.32) 100%),
    linear-gradient(180deg,
      rgba(10, 16, 30, 0.2) 0%,
      rgba(10, 16, 30, 0.05) 26%,
      rgba(10, 16, 30, 0.04) 62%,
      rgba(10, 16, 30, 0.28) 100%) !important;
  pointer-events: none !important;
}

/* 文字基色：星光象牙白 */
body.bg-themed,
body.bg-themed main { color: rgba(240, 240, 233, 0.92); }

/* ---------- 一 · 眉题与表单 ---------- */
.zw-tool-head h1 {
  font-family: var(--serif);
  letter-spacing: 0.42em; text-indent: 0.42em;
  color: rgba(240, 240, 233, 0.95) !important;
}
.zw-tool-head h1::before, .zw-tool-head h1::after { display: none !important; }
.zw-tool-head::after {
  content: '';
  display: block;
  width: min(430px, 72%);
  height: 1px;
  margin: 1.3rem auto 0;
  background: linear-gradient(90deg, transparent, rgba(211, 172, 87, 0.55) 30%, rgba(211, 172, 87, 0.55) 70%, transparent);
}
.zw-tool-head p { color: rgba(226, 229, 224, 0.78) !important; }
.zw-form { color-scheme: dark; }
/* 观星台表单 v27：参照八字页 bz-form 下划线字段——透明底、发丝底线、focus 金线升起；
   标签同步八字 0.74rem 疏排，楷体点缀；行距/列宽对齐 bz-form 节奏 */
.zw-form-wrap { max-width: 720px; padding: 1.2rem 1rem 1.6rem; }
.zw-form { grid-template-columns: 1.2fr 1fr 0.6fr auto; gap: 1rem 1.3rem; }
@media (max-width: 860px) {
  .zw-form { grid-template-columns: 1fr 1fr; }
}
.zw-form label {
  display: block;
  color: rgba(226, 229, 224, 0.85) !important;
  font-size: 0.8rem;
  letter-spacing: 0.18em;
}
.zw-form label > span:first-child {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
}
.zw-form input, .zw-form select {
  display: block;
  width: 100%;
  box-sizing: border-box;
  margin-top: 0.4rem;
  background: transparent !important;
  border: none !important;
  border-bottom: 1px solid rgba(190, 205, 230, 0.3) !important;
  border-radius: 0 !important;
  color: rgba(var(--zw-ivory), 0.94) !important;
  font-size: 1rem;
  padding: 0.45rem 0.15rem;
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
}
.zw-form input:focus, .zw-form select:focus {
  outline: none;
  border-bottom-color: rgba(var(--zw-gold), 0.85) !important;
  box-shadow: 0 1px 0 0 rgba(var(--zw-gold), 0.85) !important;
  background: transparent !important;
}
.zw-form select option { color: #e8e8e0; background: #14203a; }
.zw-status { color: rgba(226, 229, 224, 0.72) !important; }
.zw-status.error { color: #e08a76 !important; }

/* ---------- 三 · 跋文版式：分析区全去框，金色发丝线 ---------- */
.zw-card,
.zw-pay,
.zw-notice {
  background: transparent !important;
  border: none !important;
  border-top: 1px solid rgba(211, 172, 87, 0.3) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 1.05rem 0.2rem 0.4rem !important;
}
.zw-card h3, .zw-pay h3 {
  font-family: var(--serif);
  color: rgba(240, 240, 233, 0.95) !important;
  letter-spacing: 0.1em;
  /* serif 题头级：统一 1rem（覆盖内联 .zw-pay h3 的 1.05rem），对齐四级阶梯 */
  font-size: 1rem;
}
/* 卡题头：菱形星点（静态烘焙微金光晕），呼应星图语汇 */
.zw-card h3::before {
  content: '';
  display: inline-block;
  width: 6px; height: 6px;
  margin-right: 0.6rem;
  background: linear-gradient(135deg, rgba(var(--zw-gold-soft), 1), rgba(var(--zw-gold), 0.75));
  border-radius: 1px;
  transform: rotate(45deg);
  box-shadow: 0 0 6px rgba(var(--zw-gold-soft), 0.4);
  vertical-align: 1px;
}
/* 正文级：0.8rem / 1.7（四级阶梯：标签疏排小字 → serif 题头 → 正文 → 小注） */
.zw-card p, .zw-pay p {
  color: rgba(226, 229, 224, 0.88) !important;
  font-size: 0.8rem;
  line-height: 1.7;
}
.zw-card p b, .zw-pay p b { color: #e9d5a3 !important; }
/* 小注级：0.78rem 亮色（v34：字号与亮度一起上，不看不清） */
.zw-card .zw-src {
  color: rgba(226, 229, 224, 0.85) !important;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
}
.zw-card .zw-src::before {
  content: '';
  display: inline-block;
  width: 4px; height: 4px;
  margin-right: 0.5rem;
  background: rgba(var(--zw-gold), 0.55);
  transform: rotate(45deg);
  vertical-align: 2px;
}
/* 免责降调：跋文式弱化（字号降、线更淡），保留橙系语义 */
.zw-notice { border-top-color: rgba(224, 138, 118, 0.28) !important; }
.zw-notice, .zw-notice strong { font-size: 0.78rem !important; }
.zw-notice strong { font-size: 0.82rem !important; color: #e0b46a !important; }

/* 免费解读卡：金线题头 */
.zw-free {
  background: transparent !important;
  border: none !important;
  border-top: 1px solid rgba(211, 172, 87, 0.55) !important;
  border-radius: 0 !important;
  padding: 1.05rem 0.2rem 0.4rem 0.2rem !important;
}
.zw-free h3 { color: #e9d5a3 !important; font-family: var(--serif); }
.zw-free h3::after { background: linear-gradient(90deg, rgba(211, 172, 87, 0.4), transparent) !important; }
.zw-free p {
  color: rgba(236, 236, 229, 0.9) !important;
  font-size: 0.8rem;
  line-height: 1.75;
}
.zw-free .zw-src { color: rgba(236, 236, 229, 0.55) !important; font-size: 0.7rem; }
.zw-free .zw-jump {
  background: rgba(10, 18, 34, 0.4) !important;
  border: 1px solid rgba(211, 172, 87, 0.45) !important;
  color: #e9d5a3 !important;
}
.zw-free .zw-jump:hover { background: rgba(211, 172, 87, 0.14) !important; border-color: rgba(211, 172, 87, 0.75) !important; }

/* 大限分层 / 流年：v26 去框改行式——border-top 发丝线 + 隔行斑马（对齐八字页排版纪律），
   cur 态金阶保留但收敛（金发丝 + 极淡金底 + 小范围辉光）；默认态无底色强调 */
.zw-dy-item {
  background: transparent !important;
  border: none !important;
  border-top: 1px solid rgba(255, 255, 255, 0.07) !important;
  border-radius: 0 !important;
  color: rgba(226, 229, 224, 0.85) !important;
  padding: 0.45rem 0.4rem !important;
  font-size: 0.8rem;
}
/* 隔行斑马：极淡白纱，cur 规则随后覆盖其底色 */
.zw-dy-item:nth-child(even) { background: rgba(255, 255, 255, 0.03) !important; }
.zw-dy-item b { color: #e9d5a3 !important; }
.zw-dy-item.cur {
  border-top-color: rgba(211, 172, 87, 0.6) !important;
  background: rgba(211, 172, 87, 0.08) !important;
  box-shadow: 0 0 12px rgba(211, 172, 87, 0.1) !important;
}
/* reason 小注：0.74rem 小注级（!important 压过 JS 模板的内联 style） */
.zw-dy-item span:not(.lvl) {
  font-size: 0.8rem !important;
  color: rgba(226, 229, 224, 0.85) !important;
  letter-spacing: 0.02em;
}
.zw-dy-item .lvl {
  background: rgba(150, 172, 208, 0.14) !important;
  color: rgba(226, 229, 224, 0.75) !important;
  font-size: 0.68rem;
  letter-spacing: 0.12em;
}
.zw-dy-item .lvl.guankou { background: rgba(224, 138, 118, 0.16) !important; color: #e08a76 !important; }
.zw-dy-item .lvl.zhuti { background: rgba(211, 172, 87, 0.16) !important; color: #e9d5a3 !important; }
.zw-yearly-tag {
  background: rgba(10, 18, 34, 0.4) !important;
  border: 1px dashed rgba(211, 172, 87, 0.35) !important;
  color: rgba(236, 236, 229, 0.88) !important;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
}

/* 付费区：表单件保留边框（可点感） */
.zw-pay .pay-badge { background: rgba(169, 58, 46, 0.9) !important; color: #f7f1e2 !important; }
.zw-question {
  background: rgba(10, 18, 34, 0.55) !important;
  border: 1px solid rgba(190, 205, 230, 0.28) !important;
  color: rgba(240, 240, 233, 0.94) !important;
}
.zw-question:focus { border-color: rgba(211, 172, 87, 0.65) !important; box-shadow: 0 0 0 3px rgba(211, 172, 87, 0.16) !important; }
.zw-save {
  background: rgba(10, 18, 34, 0.4) !important;
  border: 1px solid rgba(190, 205, 230, 0.28) !important;
  color: rgba(226, 229, 224, 0.85) !important;
}
.zw-save:hover { border-color: rgba(211, 172, 87, 0.65) !important; color: #e9d5a3 !important; }
#zw-deep-result { color: rgba(236, 236, 229, 0.88) !important; }
#zw-deep-result .zw-sec { color: #e9d5a3 !important; }
#zw-deep-result .zw-li { color: rgba(226, 229, 224, 0.78) !important; }
#zw-deep-result .zw-src-line { color: rgba(200, 210, 226, 0.45) !important; }
.zw-saved { color: #9ec49a !important; }

/* 双盘互证：去框金线 */
#zw-result > section.more-shu,
.more-shu {
  background: transparent !important;
  border: none !important;
  border-top: 1px solid rgba(211, 172, 87, 0.3) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 1.05rem 0.2rem 0.4rem !important;
}
.more-shu-head { color: #e9d5a3 !important; border-right-color: rgba(190, 205, 230, 0.14) !important; }
.more-shu-item {
  background: rgba(150, 172, 208, 0.06) !important;
  border: 1px solid rgba(190, 205, 230, 0.12) !important;
  transition: background var(--zw-dur-fx) ease, border-color var(--zw-dur-fx) ease;
}
.more-shu-item:hover { border-color: rgba(var(--zw-gold), 0.5) !important; background: rgba(var(--zw-gold), 0.05) !important; }
.more-shu-item strong { color: rgba(240, 240, 233, 0.92) !important; }
.more-shu-item span { font-size: 0.82rem; color: rgba(226, 229, 224, 0.85) !important; }

/* ---------- 四 · 卷首引言 + 卷尾落款（金印配夜空） ---------- */
/* 卷首引言：定调文案，字号提上来 */
.zw-quote {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  text-align: center;
  font-size: 1.15rem;
  letter-spacing: 0.18em;
  color: rgba(238, 238, 231, 0.88);
  text-shadow: 0 0 18px rgba(150, 180, 230, 0.35);
  margin: 0 0 1.8rem;
}
.zw-quote-src {
  display: block;
  font-size: 0.74rem;
  margin-top: 0.5rem;
  letter-spacing: 0.14em;
  color: rgba(211, 172, 87, 0.7);
}
.bz-colophon {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  margin: 2.4rem 0 0.6rem;
}
.bz-colophon-seal {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-weight: 700;
  writing-mode: vertical-rl;
  width: 28px; height: 28px;
  display: inline-flex; align-items: center; justify-content: center;
  /* v50：金印改淡紫蓝印，与头部 CTA/排盘钮同色系 */
  background: rgba(170, 189, 232, 0.95); color: #141d33;
  border-radius: 5px 3px 4px 3px;
  font-size: 0.62rem; line-height: 1.15;
  letter-spacing: 0.08em;
  transform: rotate(-2deg);
  box-shadow:
    inset 0 0 0 1px rgba(20, 29, 51, 0.35),
    inset 0 0 0 3px rgba(170, 189, 232, 1),
    0 1px 3px rgba(0, 0, 0, 0.35);
}
.bz-colophon-text {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-size: 0.8rem;
  letter-spacing: 0.3em; text-indent: 0.3em;
  color: rgba(226, 229, 224, 0.6);
}

/* ---------- 五 · 页脚（夜空自然延伸，与 cinema-dark 渐隐过渡一致） ---------- */
body[data-theme-lock="dark"] footer {
  background: transparent !important;
  border-top: 1px solid rgba(211, 172, 87, 0.22) !important;
}
body[data-theme-lock="dark"] footer,
body[data-theme-lock="dark"] footer * { color: rgba(200, 210, 226, 0.62) !important; }
body[data-theme-lock="dark"] footer .footer-brand strong { color: #e9d5a3 !important; }

/* ============================================================
   六 · 边环天幕 + 满宽天幕（v8 废弃双栏；v23 去环化散星；v24 回字形 4×4 边环网格满宽）
   ============================================================ */

/* 整面天：星盘区无栏无边，直接融进页面星空背景 */
#zw-result > section.zw-columns {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  max-width: none;
  margin: 0 0 1.2rem;
  padding: 0;
  display: block;
}
.zw-col-dial { display: block; margin-bottom: 2.6rem; }
/* 回字形边环：4×4 网格满宽（占满 main 内容区，消除左右大留白），
   十二宫占边环 12 格（上排 4 → 右列 2 → 下排 4 → 左列 2，顺时针），中宫跨中央 2×2 */
.zw-dial {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(4, 1fr);
  gap: clamp(2px, 0.35vw, 6px);
  /* 四角内收量（v25）：cqw 随盘等比，四角宫向盘心位移后 12 宫中心呈八边形≈圆轨迹 */
  --corner-pull: 9cqw;
  /* 星盘成为查询容器：节点全部文字用 cqw 等比缩放，盘多大字多大 */
  container-type: inline-size;
}
/* 小盘径压缩档：盘 <560px 时收紧节点（cqw 下限兜底导致字号不再缩，改降密度） */
/* 小盘档：不再隐藏庙旺标注与辅星名（v36，用户点名不能少）；仅收字距保空间 */
@container (max-width: 560px) {
  /* 小盘档四角内收减半：保住八边形轮廓同时避免小格文字拥挤 */
  .zw-star { padding: 0.4cqw; gap: 0; --corner-pull: 4cqw; }
  .zw-star-name { letter-spacing: 0.1em; text-indent: 0.1em; }
  .zw-star-field { gap: clamp(3px, 0.7cqw, 6px); margin-top: 0.12rem; }
  .zw-maj-name { font-size: clamp(10px, calc((2 + 0.9 * var(--b)) * 1cqw), 14px); letter-spacing: 0.12em; }
  .zw-maj-name u { font-size: 0.56rem; }
  .zw-star-minorfield { gap: 1px 4px; }
  .zw-star-decofield { display: none; }
  .zw-star-tag { font-size: 0.52rem; padding: 1px 3px; }
  .zw-dial-center { width: 88%; }
  .zdc-master { font-size: clamp(0.95rem, 2.6cqw, 1.3rem); }
  .zdc-title { font-size: 0.58rem; letter-spacing: 0.18em; text-indent: 0.18em; }
  .zdc-sub { font-size: 0.62rem; }
}
/* 盘面光体已废弃（v25）：inset 3% 圆形光体的反向暗角（transparent 46% → 暗 100%）
   会在盘缘带出硬边弧线（用户实测「四分之一圆」来源之一），
   极淡中心辉光与星云微光已并入下方盘底星尘层（无边缘版） */
/* 宽度令牌：解读流窄栏宽度统一 --zw-stream-max（ziwei.html 内联 .zw-section 同源引用，一处定义收敛） */
:root { --zw-stream-max: 780px; }
/* ≤1100px：单栏窄排居中 */
.zw-col-stream { max-width: var(--zw-stream-max); margin: 0 auto; padding: 0 1.2rem; }
@media (max-width: 1100px) {
  .zw-col-stream { padding: 0 0.6rem; }
}
/* 桌面 ≥1101px：解读流满宽两栏网格（v26，用户核心诉求——1240px main 下放弃窄栏居中）：
   免费解读 / 宫位详解面板 / 付费区 / 免责跨双栏（总结性与交互焦点），
   5 张 zw-card（当前大限定位/命盘总览/四化/大限分层/流年重点）落两栏自动流；
   最后一张卡由 ziwei.js v28 按奇偶加 .zw-card-wide 跨双栏收尾——
   卡片数为奇时收尾跨栏、偶时自然成对，任何组合都无右栏空洞；
   卡片保持金线题头无框风，仅靠 hairline 与间距区隔，不加框 */
@media (min-width: 1101px) {
  .zw-col-stream {
    max-width: none;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 2rem;
    align-items: start;
  }
  .zw-col-stream > .zw-free,
  .zw-col-stream > .zw-panel,
  .zw-col-stream > .zw-pay,
  .zw-col-stream > .zw-notice,
  .zw-col-stream > .zw-card-wide { grid-column: 1 / -1; }
}
.zw-dial-svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; }
/* 回字形：盘面无环无刻度，SVG overlay 铺满网格容器，仅承载三合连线（点击织星交互） */
/* v26：三合线与对宫虚线统一金系 rgba 写法（同源 rgba(211,172,87,…)），消除色值歧义 */
/* v49：三合线提亮加粗（0.8/1.5px → 亮金 1 实 / 2px）；对宫虚线同步提亮 */
#zw-trines line { stroke: rgba(233, 200, 110, 0.95); opacity: 1; stroke-width: 2px; vector-effect: non-scaling-stroke; }
#zw-trines line.zw-oppose { stroke: rgba(233, 200, 110, 0.95); stroke-dasharray: 4 3; opacity: 0.6; }

/* 宫名降一档但保下限：字号上限提高、颜色改亮象牙白（v34，用户点名要大要亮） */
.zw-star-name {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-size: clamp(12px, 1.65cqw, 20px);
  letter-spacing: 0.18em; text-indent: 0.18em;
  color: rgba(244, 246, 240, 0.96);
  text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9), 0 0 6px rgba(10, 16, 30, 0.6);
  margin-bottom: clamp(2px, 0.4cqw, 3px);
}
.zw-star-gz {
  font-size: clamp(10.5px, 1.2cqw, 14px);
  /* v26 疏排纪律：字距 .14em + text-indent 补偿居中，与宫名小签同呼吸 */
  letter-spacing: 0.14em;
  text-indent: 0.14em;
  color: rgba(230, 234, 228, 0.88);
  /* 暗色描边：压过背景星点干扰，小字可读性第一（与主星名同款手法） */
  text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9), 0 0 6px rgba(10, 16, 30, 0.6);
  margin-bottom: 2px;
}
/* 宫格：边环网格单元——v25 去面板底：全透明、无边框、无圆角面板，靠文字层级自组织，
   hover 只给极淡径向光（伪元素 opacity 过渡）；
   落位由内联 grid-area 指定；显式列出定位类名（禁用 > * 通配，保住 SVG overlay 的 absolute）；
   四角宫 --pull-x/--pull-y 向盘心内收：transform 常规态与 hover 态都带位移，hover 缩放不跳位 */
.zw-star {
  position: relative;
  z-index: 1;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  padding: 0.3rem 0.2rem;
  background: transparent;
  cursor: pointer;
  text-align: center;
  user-select: none;
  transform: translate(var(--pull-x, 0px), var(--pull-y, 0px));
  transition: opacity 0.45s ease, filter 0.25s ease, transform 0.25s ease;
}
/* 聚星灯 v27：选中宫时其余宫位退隐（纯 opacity 过渡，取消选中恢复），
   退隐宫同步抑制 hover 光斑与缩放——夜里只看选中那一宿；
   三合组（.tri）不退隐且额外金晕——连线连到谁，谁就亮（v49） */
.zw-dial.focus .zw-star:not(.sel) { opacity: 0.38; }
.zw-dial.focus .zw-star.tri { opacity: 1; }
.zw-star.tri { filter: drop-shadow(0 0 12px rgba(var(--zw-gold), 0.5)); }
.zw-dial.focus .zw-star:not(.sel):hover {
  filter: none;
  transform: translate(var(--pull-x, 0px), var(--pull-y, 0px));
}
.zw-dial.focus .zw-star:not(.sel):hover::after { opacity: 0; }
/* hover 径向光：opacity 过渡的伪元素光斑（无面板感，渐变羽化到透明无边缘）；
   （v32 曾改常驻夜纱垫底，用户不要——v35 恢复原样，可读性靠 v34 的字号+亮色+描边） */
.zw-star::after {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 50% 55%, rgba(233, 213, 163, 0.09), transparent 72%);
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
}
.zw-star:hover::after { opacity: 1; }
.zw-star:hover {
  filter: drop-shadow(0 0 9px rgba(211, 172, 87, 0.4));
  transform: translate(var(--pull-x, 0px), var(--pull-y, 0px)) scale(1.04);
}
/* 四角内收：--corner-pull 由 .zw-dial 定义（小盘档减半），对角方向指向盘心 */
.zw-star.c-tl { --pull-x: var(--corner-pull); --pull-y: var(--corner-pull); }
.zw-star.c-tr { --pull-x: calc(-1 * var(--corner-pull)); --pull-y: var(--corner-pull); }
.zw-star.c-bl { --pull-x: var(--corner-pull); --pull-y: calc(-1 * var(--corner-pull)); }
.zw-star.c-br { --pull-x: calc(-1 * var(--corner-pull)); --pull-y: calc(-1 * var(--corner-pull)); }
.zw-star.sel { filter: drop-shadow(0 0 11px rgba(211, 172, 87, 0.45)); }
.zw-star.ming.sel { filter: drop-shadow(0 0 15px rgba(211, 172, 87, 0.55)); }
.zw-star.cur { filter: drop-shadow(0 0 13px rgba(211, 172, 87, 0.4)); }
.zw-star:focus-visible { outline: 1px solid rgba(211, 172, 87, 0.7); outline-offset: 2px; }
/* 命/身小签（v31）：随宫名同行内联，不再绝对定位悬在卡角——任何盘径下都与文字对齐；
   背景变亮（背景纱层减淡）后，标签自身底色保证可读 */
.zw-star-tag {
  display: inline-block;
  padding: 2px 4px;
  margin-right: 3px;
  font-size: clamp(9px, 0.8cqw, 11px);
  font-weight: 700;
  line-height: 1;
  border-radius: 3px;
  background: rgba(10, 18, 34, 0.85);
  border: 1px solid rgba(211, 172, 87, 0.5);
  color: #e9d5a3;
  letter-spacing: 0;
  text-indent: 0;
  vertical-align: 2px;
}
.zw-star-tag.ming { background: rgba(169, 58, 46, 0.92); border-color: rgba(247, 241, 226, 0.4); color: #f7f1e2; }
.zw-star-tag.body { background: rgba(150, 172, 208, 0.3); border-color: rgba(190, 205, 230, 0.45); color: rgba(228, 233, 242, 0.95); }
/* 竖排发光主星：亮金大字（层级最高），字号随盘等比（cqw），亮度定大小与光晕（--b 庙 1 → 陷 0.28） */
.zw-star-field {
  display: flex; flex-direction: row; justify-content: center; align-items: flex-start;
  gap: clamp(4px, 0.9cqw, 8px);
  margin-top: clamp(2px, 0.4cqw, 4px);
}
.zw-maj {
  --b: 0.5;
  display: flex; flex-direction: column; align-items: center; gap: clamp(2px, 0.35cqw, 3px);
}
.zw-maj-name {
  writing-mode: vertical-rl;
  font-family: var(--serif);
  font-size: clamp(10.5px, calc((1.7 + 0.75 * var(--b)) * 1cqw), 32px);
  font-weight: 700;
  letter-spacing: 0.2em;
  color: rgba(246, 238, 216, calc(0.78 + 0.22 * var(--b)));
  text-shadow:
    0 0 calc(5px + 14px * var(--b)) rgba(233, 213, 163, calc(0.3 + 0.5 * var(--b))),
    0 0 2px rgba(10, 16, 30, 0.85);
}
.zw-maj-name u {
  text-decoration: none;
  /* 庙旺标注 v36：0.52rem 太小看不清——提下限到 9px、亮暖金色 + 描边 */
  font-size: clamp(9px, 0.85cqw, 12px);
  font-weight: 400;
  letter-spacing: 0.05em;
  color: rgba(242, 228, 184, 0.95);
  text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9), 0 0 4px rgba(10, 16, 30, 0.5);
}
.zw-maj-name u.mu { color: #e08a76; }
.zw-maj-dot {
  width: clamp(3px, calc((0.35 + 0.5 * var(--b)) * 1cqw), 9px);
  height: clamp(3px, calc((0.35 + 0.5 * var(--b)) * 1cqw), 9px);
  border-radius: 50%;
  background: radial-gradient(circle at 40% 35%, #fffaf0, rgba(233, 213, 163, calc(0.4 + 0.5 * var(--b))));
  box-shadow: 0 0 calc(4px + 9px * var(--b)) rgba(233, 213, 163, calc(0.2 + 0.5 * var(--b)));
}
.zw-maj.mut .zw-maj-dot { box-shadow: 0 0 0 2px rgba(224, 138, 118, 0.28), 0 0 calc(4px + 9px * var(--b)) rgba(233, 213, 163, calc(0.2 + 0.5 * var(--b))); }
.zw-star-empty { font-size: 0.82rem; color: rgba(230, 234, 228, 0.82); text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9); }
/* 命宫焦点：朱砂光晕 + 宫名转暖金，视觉入口 */
.zw-star.ming::before {
  content: '';
  position: absolute;
  inset: -16%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(169, 58, 46, 0.2), transparent 70%);
  pointer-events: none;
}
.zw-star.ming .zw-star-name { color: rgba(238, 200, 178, 0.95); }
.zw-star.ming .zw-star-gz { color: rgba(232, 185, 168, 0.6); }

/* 辅星：微光点 + 小字名（全部随盘等比） */
.zw-star-minorfield {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: clamp(1px, 0.25cqw, 2px) clamp(6px, 1.2cqw, 12px);
  margin-top: clamp(1px, 0.3cqw, 3px);
}
.zw-minor {
  --b: 0.4;
  display: inline-flex; align-items: center; gap: clamp(2px, 0.35cqw, 3px);
}
.zw-min {
  width: clamp(2px, calc((0.25 + 0.35 * var(--b)) * 1cqw), 7px);
  height: clamp(2px, calc((0.25 + 0.35 * var(--b)) * 1cqw), 7px);
  border-radius: 50%;
  background: radial-gradient(circle at 40% 35%, rgba(255, 248, 230, 0.75), rgba(211, 172, 87, calc(0.22 + 0.35 * var(--b))));
  box-shadow: 0 0 calc(2px + 3px * var(--b)) rgba(233, 213, 163, calc(0.1 + 0.26 * var(--b)));
}
.zw-minor em {
  font-style: normal;
  font-size: clamp(9.5px, 1cqw, 13px);
  color: rgba(242, 228, 184, 0.92);
  text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9), 0 0 5px rgba(10, 16, 30, 0.5);
  white-space: nowrap;
}
/* 杂曜行（v36）：红鸾天喜天刑天姚等，仅名无点无亮度，比辅星再小一号、退一档亮度 */
.zw-star-decofield {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: 1px clamp(3px, 0.7cqw, 6px);
  margin-top: clamp(1px, 0.25cqw, 2px);
}
.zw-deco {
  font-size: clamp(8.5px, 0.8cqw, 11px);
  color: rgba(226, 229, 224, 0.7);
  text-shadow: 0 1px 2px rgba(10, 16, 30, 0.9);
  white-space: nowrap;
}

/* 地支字金色提亮：宫牌压在自身的地支位上，牌内干支自答对应关系 */
.zw-gz-zhi {
  color: rgba(233, 213, 163, 0.9) !important;
  font-weight: 700;
  text-shadow: 0 0 6px rgba(233, 213, 163, 0.35);
}

/* 四化专属色：禄朱 / 权琥珀 / 科青玉 / 忌黛蓝（v40：低调宝石色，柔光描边） */
.mu-lu { color: #eb6a5a !important; text-shadow: 0 0 6px rgba(224, 86, 74, 0.5), 0 1px 2px rgba(10, 16, 30, 0.9) !important; }
.mu-qu { color: #e89a3f !important; text-shadow: 0 0 6px rgba(224, 145, 63, 0.5), 0 1px 2px rgba(10, 16, 30, 0.9) !important; }
.mu-ke { color: #56b8a0 !important; text-shadow: 0 0 6px rgba(86, 184, 160, 0.5), 0 1px 2px rgba(10, 16, 30, 0.9) !important; }
.mu-ji { color: #8091d6 !important; text-shadow: 0 0 6px rgba(125, 159, 214, 0.5), 0 1px 2px rgba(10, 16, 30, 0.9) !important; }
.zw-panel b.mu-lu, .zw-panel b.mu-qu, .zw-panel b.mu-ke, .zw-panel b.mu-ji { text-shadow: none !important; }
/* 四化字：主星竖排内缀尾；辅星带四化的整体下移到独立第二行（.zw-minorfield-mu），
   行内纵向小组：星名+亮度在上，四化字在其下（v48；u 标签必须显式去下划线） */
.zw-maj-name u.mu {
  font-weight: 700;
  font-size: clamp(9px, 0.85cqw, 12px);
  letter-spacing: 0;
}
.zw-minorfield-mu { margin-top: clamp(2px, 0.4cqw, 4px); }
.zw-minor.has-mu {
  flex-direction: column;
  align-items: center;
  gap: 1px;
}
.zw-minor.has-mu .zw-min-line {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
.zw-minor.has-mu u.mu {
  font-weight: 700;
  font-size: clamp(9px, 0.85cqw, 12px);
  letter-spacing: 0;
  text-decoration: none;
}

/* 星息呼吸 v27：--breath-period/--breath-lo/--breath-lo-emperor 由 ziwei.js 挂在 .zw-dial；
   关闭态不挂 .breathing-on，星图全静（星点 opacity .82 / 帝星 .65 静态回落）；
   负延迟错峰：--i 由 JS 内联传入，加载即处于相位中，无启动齐步感；
   命名沿用原 zw-twinkle/zw-emperor 的守卫纪律：animation 声明全部包 media 查询 */
.zw-star .zw-maj-dot { opacity: 0.82; }
@media (prefers-reduced-motion: no-preference) {
  .zw-dial.breathing-on .zw-maj-dot {
    animation: zw-breath var(--breath-period, 5.5s) ease-in-out infinite;
    animation-delay: calc(var(--i, 0) * -0.9s);
  }
  /* 同宫第二颗主星错开相位，避免双星同步闪 */
  .zw-dial.breathing-on .zw-star-field .zw-maj:nth-child(2n) .zw-maj-dot {
    animation-delay: calc(var(--i, 0) * -0.9s - 1.6s);
  }
  .zw-dial.breathing-on .zw-dial-center::after {
    animation: zw-emperor var(--breath-period, 5.5s) ease-in-out infinite;
  }
  /* 选中三合实线微幅呼吸；排除织线描入期（.zw-trine-draw），否则呼吸动画
    覆盖描线动画导致入场描线永不播放（v50 修复） */
  .zw-dial.breathing-on #zw-trines line.zw-trine:not(.zw-trine-draw) {
    animation: zw-line-breath var(--breath-period, 5.5s) ease-in-out infinite;
  }
}
@keyframes zw-breath {
  0%, 100% { opacity: var(--breath-lo, 0.55); }
  50% { opacity: 1; }
}
@keyframes zw-emperor {
  0%, 100% { opacity: var(--breath-lo-emperor, 0.35); }
  50% { opacity: 0.95; }
}
@keyframes zw-line-breath {
  0%, 100% { opacity: 0.78; }
  50% { opacity: 1; }
}

/* 中宫：跨中央 2×2 的光源本体——v25 改软边辉光：无 border、无 inset 收边、
   background/box-shadow 全部大范围羽化到透明，不留任何可见圆环边缘（避免读作大圆框）；
   直径 74% → 58%，弱化「圈」的存在感；帝星呼吸照旧 */
.zw-dial-center {
  position: relative;
  z-index: 1;
  grid-area: 2 / 2 / 4 / 4;
  place-self: center;
  width: 58%; aspect-ratio: 1;
  border-radius: 50%;
  /* v26：外圈辉光弃 box-shadow 大羽化（72px/150px 亮区直径逼近方形盘缘，
     参与「大方框」错觉），改下方 ::before 纯圆形径向渐变（羽化到 transparent 无边缘） */
  background: radial-gradient(circle at 50% 46%,
    rgba(233, 213, 163, 0.11) 0%,
    rgba(233, 213, 163, 0.05) 36%,
    transparent 70%);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.35rem;
  text-align: center;
  padding: 0.8rem;
}
/* 中宫外圈辉光：负 z 垫在文字下、自身背景上；圆形渐变在 72% 处收透明，
   可见光斑半径 ≈44% 盘宽，触不到方形盘缘，彻底杜绝方形绘制可能 */
.zw-dial-center::before {
  content: '';
  position: absolute;
  inset: -55%;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(233, 213, 163, 0.09) 0%,
    rgba(211, 172, 87, 0.045) 45%,
    transparent 72%);
  pointer-events: none;
  z-index: -1;
}
.zdc-title { font-size: 0.72rem; letter-spacing: 0.3em; text-indent: 0.3em; color: rgba(230, 234, 228, 0.85); }
.zdc-master {
  font-family: var(--serif);
  font-size: clamp(1.35rem, 2.2cqw, 2.4rem);
  font-weight: 700;
  letter-spacing: 0.14em;
  color: #f2e4bb;
  text-shadow:
    0 0 30px rgba(233, 213, 163, 0.55),
    0 0 8px rgba(255, 248, 230, 0.6);
}
/* 小注级 0.74rem，对齐四级阶梯 */
.zdc-sub { font-size: 0.74rem; color: rgba(226, 229, 224, 0.75); }

/* 宫位详解面板：右栏顶部，金色题签 */
.zw-panel {
  border-top: 1px solid rgba(211, 172, 87, 0.55) !important;
  padding-top: 1.05rem !important;
  min-height: 5.2rem;
}
.zw-panel h3 {
  font-family: var(--serif);
  font-size: 1.05rem; font-weight: 700;
  letter-spacing: 0.1em;
  color: rgba(240, 240, 233, 0.95) !important;
  display: flex; align-items: center; gap: 0.5rem;
  margin: 0 0 0.6rem;
}
.zw-panel-tag {
  font-size: 0.62rem; font-weight: 600;
  padding: 0.1rem 0.45rem;
  border-radius: 4px;
  background: rgba(10, 18, 34, 0.6);
  border: 1px solid rgba(211, 172, 87, 0.45);
  color: #e9d5a3;
  letter-spacing: 0.1em;
}
.zw-panel-tag.ming { background: rgba(169, 58, 46, 0.92); border-color: rgba(247, 241, 226, 0.4); color: #f7f1e2; }
.zw-panel-minors, .zw-panel-dec { font-size: 0.82rem !important; color: rgba(226, 229, 224, 0.88) !important; }
.zw-panel-mutnote { font-size: 0.78rem; color: rgba(226, 229, 224, 0.8); font-weight: 400 !important; }
.zw-panel-bright {
  text-decoration: none;
  font-size: 0.72rem;
  color: rgba(211, 172, 87, 0.85);
  margin-left: 3px;
}
.zw-panel-meaning {
  border-top: 1px dashed rgba(190, 205, 230, 0.14);
  margin-top: 0.55rem;
  padding-top: 0.55rem;
  color: rgba(226, 229, 224, 0.8) !important;
}

/* ≤480px：盘已满宽（width:100%），节点文字由 cqw 与容器查询自适应，无额外档位 */

/* ============================================================
   七 · 标志性增强 v24（回字形边环改版）
   ------------------------------------------------------------------
   v23：去环化——外环/60 格刻度/主环全部从模板删除（无死节点）；
   v24：散星升格为回字形——十二宫按地支序落进 4×4 边环网格（顺时针），
   盘面满宽消除左右留白；中宫跨中央 2×2 承接帝星呼吸与光源；
   三合线几何由极坐标改为网格单元中心（viewBox 400），织星交互不变；
   v27 起织线坐标由 ziwei.js 按星牌实际渲染中心 DOM 测量绘制（线端含四角内收偏移）。
   v25：四角宫内收（--corner-pull，cqw 随盘等比）+ 中宫软边辉光 + 盘缘去弧线，
   轮廓由正方形读作近圆天幕。
   （v22 240s 星轨缺 transform-box/origin 的教训：仍不引入任何旋转环）
   原则：新动画只动 opacity / transform / stroke-dashoffset，
   光晕静态烘焙进伪元素，不动画 box-shadow / text-shadow / filter；
   全部 animation 声明包 prefers-reduced-motion 守卫（keyframes 定义不触发动画）；
   填充模式用 backwards：delay 期间隐藏，结束后回落常规规则，
   不占用 transform/filter，hover 与静态样式不受影响。
   ============================================================ */

/* 1 · 紫微帝星呼吸：中宫暖金光点，光晕烘焙进伪元素背景，仅 opacity 呼吸 */
.zw-dial-center::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 46%;
  width: clamp(10px, 3.4cqw, 20px);
  height: clamp(10px, 3.4cqw, 20px);
  border-radius: 50%;
  transform: translate(-50%, -50%);
  background: radial-gradient(circle at 42% 38%,
    rgba(255, 248, 230, 0.95) 0%,
    rgba(233, 213, 163, 0.55) 32%,
    rgba(233, 213, 163, 0.14) 62%,
    transparent 78%);
  pointer-events: none;
  /* v27：静态回落 opacity .65；开启星息后由星息段的 zw-emperor 动画接手（变量驱动深浅） */
  opacity: 0.65;
}

/* 2 · 入场编排：宫格错峰升起，边环自星空浮现（环已移除，无描线入场） */
@media (prefers-reduced-motion: no-preference) {
  /* 宫格：--i 由 JS 内联传入，错峰升起；结束回落常规 transform，hover 缩放不受影响 */
  .zw-dial > .zw-star { animation: zw-rise 0.5s ease-out backwards; animation-delay: calc(var(--i, 0) * 40ms); }
}
/* keyframes 内引用 --pull-x/--pull-y：四角宫从内收位升起、结束回落同位，不跳位 */
@keyframes zw-rise {
  from { opacity: 0; transform: translate(var(--pull-x, 0px), calc(var(--pull-y, 0px) + 6px)); }
  to { opacity: 1; transform: translate(var(--pull-x, 0px), var(--pull-y, 0px)); }
}

/* 3 · 点击织星：三合线描入 0.4s，对宫虚线延迟 0.15s 滑入；
   终态保障：dasharray 500 覆盖最长线（对角 424）只挂实线（:not(.zw-oppose)，对宫虚线语义不受染），
   动画只动 dashoffset/opacity；结束后由 JS（ziwei.js armTrineCleanup）
   移除 zw-trine-draw 类，实线 dasharray 回落为无（真·实线）、
   对宫回落 4 3 / opacity .45——animationend + 900ms 兜底双保险，
   即使兜底未跑，dasharray 500 + offset 0 的残留态在视觉上也是完整实线 */
#zw-trines .zw-trine-draw:not(.zw-oppose) { stroke-dasharray: 500; }
@media (prefers-reduced-motion: no-preference) {
  #zw-trines .zw-trine-draw:not(.zw-oppose) { animation: zw-trine-draw 0.4s ease-out backwards; }
  #zw-trines line.zw-oppose.zw-trine-draw { animation: zw-oppose-flow 0.4s ease-out 0.15s backwards; }
}
@keyframes zw-trine-draw {
  from { stroke-dashoffset: 500; }
  to { stroke-dashoffset: 0; }
}
@keyframes zw-oppose-flow {
  from { stroke-dashoffset: 14; opacity: 0; }
  to { stroke-dashoffset: 0; opacity: 0.45; }
}

/* 4 · 盘底星尘（v25 重写）：仅静态微星点 + 无边缘的极淡中心辉光；
   旧版 inset 3% 圆形光体的反向暗角（transparent 46% → 暗 100%）在盘缘带出硬边弧线
   （「四分之一圆」另一来源），随 border-radius: 50% 裁切更显形——整层废弃；
   改 inset: 0 无裁切、辉光半径大到看不出边界（transparent 收尾），星尘点保留；
   （v22 的 240s 星轨仅由外环/刻度环承载，随环一并删除） */
/* v26 消方框：贴边星点 alpha 全部 ≤.4（原 0.55/0.5/0.45 的离散亮点贴近方形
   inset:0 边界，曾被读作「角标」连成淡方框），并给整层加径向 mask——
   星点与光晕在靠容器边界处淡出，杜绝任何方形边界感；星云斑半径同步收紧 */
.zw-dial::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(1.5px 1.5px at 22% 18%, rgba(255, 248, 230, 0.38), transparent 60%),
    radial-gradient(1px 1px at 78% 30%, rgba(211, 172, 87, 0.36), transparent 60%),
    radial-gradient(1.2px 1.2px at 68% 84%, rgba(226, 229, 224, 0.32), transparent 60%),
    radial-gradient(1px 1px at 15% 62%, rgba(211, 172, 87, 0.34), transparent 60%),
    radial-gradient(1.4px 1.4px at 86% 62%, rgba(255, 248, 230, 0.3), transparent 60%),
    radial-gradient(circle at 50% 50%, rgba(233, 213, 163, 0.06) 0%, rgba(233, 213, 163, 0.02) 34%, transparent 62%),
    radial-gradient(circle at 32% 22%, rgba(96, 128, 188, 0.07), transparent 45%),
    radial-gradient(circle at 70% 74%, rgba(211, 172, 87, 0.04), transparent 50%);
  -webkit-mask-image: radial-gradient(circle, #000 62%, transparent 88%);
  mask-image: radial-gradient(circle, #000 62%, transparent 88%);
  pointer-events: none;
}

/* 5 · 命宫/选中态光晕小幅提亮：只改参数，机制不变（同特异性靠后覆盖） */
.zw-star.sel { filter: drop-shadow(0 0 13px rgba(211, 172, 87, 0.55)); }
.zw-star.ming.sel { filter: drop-shadow(0 0 17px rgba(211, 172, 87, 0.65)); }
.zw-star.cur { filter: drop-shadow(0 0 15px rgba(211, 172, 87, 0.5)); }

/* ============================================================
   八 · 排盘按钮：淡紫蓝调（v27，与头部 CTA 同色系；替代原夜空金阶）
   同特异性前缀 html:not([data-theme="light"]) + 本文件最后加载 → 赢过
   cinema-dark.css 的青绿主行动钮（不用 !important）；
   印章式疏排借八字页 .bz-submit 做法（letter-spacing + text-indent）
   ============================================================ */
/* 2026-09-07 终版审计 P0#6：排盘钮从浅蓝阶改为夜空金阶（浅蓝是"不属于此页"的元素） */
html:not([data-theme="light"]) .zw-submit {
  background: linear-gradient(180deg, #d3ac57, #b8923e);
  color: #1a1f2e;
  border: 1px solid rgba(211, 172, 87, 0.75);
  font-family: var(--serif);
  box-shadow:
    0 8px 22px rgba(211, 172, 87, 0.28),
    inset 0 1px 0 rgba(255, 255, 255, 0.4);
  letter-spacing: 0.3em;
  text-indent: 0.3em;
}
html:not([data-theme="light"]) .zw-submit:hover:not(:disabled),
html:not([data-theme="light"]) .zw-submit:focus-visible {
  background: linear-gradient(180deg, #ddb969, #c49c46);
  box-shadow:
    0 12px 30px rgba(211, 172, 87, 0.35),
    inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
html:not([data-theme="light"]) .zw-submit:active:not(:disabled) {
  background: linear-gradient(180deg, #c49c46, #a8843a);
  box-shadow:
    0 6px 16px rgba(211, 172, 87, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
html:not([data-theme="light"]) .zw-submit:disabled {
  background: linear-gradient(180deg, #6d6a58, #57544a);
  color: rgba(20, 29, 51, 0.7);
  border-color: rgba(211, 172, 87, 0.3);
  box-shadow: none;
}
/* 2026-09-07 终版审计：紫微页底部 tab 跟随暗色主体（消除浅色断裂） */
[data-theme-lock="dark"] .site-bottom-tabs {
  background: rgba(13, 20, 36, 0.95);
  border-top-color: rgba(211, 172, 87, 0.25);
}
[data-theme-lock="dark"] .site-bottom-tabs a {
  color: rgba(226, 229, 224, 0.62);
}
[data-theme-lock="dark"] .site-bottom-tabs a.is-active {
  color: #e9d5a3;
}

/* ---------- 十 · 头部 CTA：归 header-v2 标准层夜适配段（2026-09-13 统一批）----------
   夜幕薄纱头部 + 夜金 ghost，与其余页结构完全一致，本层不再覆盖。 */
/* 解锁深度分析钮：同样换淡紫蓝调（v50，与头部 CTA/排盘钮统一） */
html:not([data-theme="light"]) .zw-pay-btn {
  background: linear-gradient(180deg, #aabde8, #8699cc);
  color: #141d33;
  border: 1px solid rgba(170, 189, 232, 0.55);
  box-shadow:
    0 8px 24px rgba(134, 153, 204, 0.3),
    inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
html:not([data-theme="light"]) .zw-pay-btn:hover:not(:disabled) {
  background: linear-gradient(180deg, #b8c9f0, #93a6d6);
  box-shadow:
    0 12px 30px rgba(134, 153, 204, 0.42),
    inset 0 1px 0 rgba(255, 255, 255, 0.45);
}

/* ============================================================
   九 · 星息控制行 + 交互微光（v27/v29）
   ------------------------------------------------------------------
   控制行在盘面正下方文档流内，不与 SVG overlay/四角内收布局重叠；
   呼吸动画本体见第六段「星息呼吸」，这里只收控制件与一次性微光；
   REDUCED_MOTION 时 JS 不渲染控制行，星波/星尘也不挂载。
   ============================================================ */

/* 1 · 星息控制行：楷体疏排小签 + 自绘开关 + 金发丝三档滑杆 */
.zw-breath-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.7rem;
  max-width: 340px;
  margin: 1rem auto 0;
  user-select: none;
}
.zw-breath-label {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-size: 0.7rem;
  letter-spacing: 0.3em; text-indent: 0.3em;
  color: rgba(226, 229, 224, 0.85);
}
/* 自绘开关：发丝胶囊 + 内嵌小星点，开启时星点亮金（纯 background/border 过渡，无发光动画） */
.zw-breath-toggle {
  position: relative;
  width: 30px; height: 16px;
  padding: 0;
  border-radius: 999px;
  background: rgba(var(--zw-mist), 0.08);
  border: 1px solid rgba(var(--zw-mist), 0.22);
  cursor: pointer;
  transition: background 0.25s ease, border-color 0.25s ease;
}
.zw-breath-toggle i {
  position: absolute;
  left: 2px; top: 50%;
  width: 8px; height: 8px;
  margin-top: -4px;
  border-radius: 50%;
  background: rgba(var(--zw-mist), 0.45);
  transition: left 0.25s ease, background 0.25s ease;
}
.zw-breath-toggle.on {
  background: rgba(var(--zw-gold), 0.14);
  border-color: rgba(var(--zw-gold), 0.55);
}
.zw-breath-toggle.on i {
  left: 16px;
  background: rgba(var(--zw-gold), 0.95);
  box-shadow: 0 0 6px rgba(var(--zw-gold), 0.5);
}
.zw-breath-toggle:focus-visible {
  outline: 1px solid rgba(var(--zw-gold), 0.7);
  outline-offset: 2px;
}
/* 滑杆：金发丝轨道 + 小金圆滑块（webkit/firefox 双写） */
.zw-breath-scale { display: inline-flex; align-items: center; width: 92px; }
.zw-breath-scale input {
  appearance: none;
  -webkit-appearance: none;
  width: 100%; height: 14px;
  margin: 0;
  background: transparent;
  cursor: pointer;
}
.zw-breath-scale input::-webkit-slider-runnable-track {
  height: 1px;
  background: linear-gradient(90deg, rgba(var(--zw-gold), 0.15), rgba(var(--zw-gold), 0.55));
}
.zw-breath-scale input::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 9px; height: 9px;
  margin-top: -4px;
  border-radius: 50%;
  background: #d3ac57;
  box-shadow: 0 0 6px rgba(var(--zw-gold), 0.45);
}
.zw-breath-scale input::-moz-range-track {
  height: 1px;
  background: rgba(var(--zw-gold), 0.35);
}
.zw-breath-scale input::-moz-range-thumb {
  width: 9px; height: 9px;
  border: none;
  border-radius: 50%;
  background: #d3ac57;
}
.zw-breath-scale input:focus-visible {
  outline: 1px solid rgba(var(--zw-gold), 0.7);
  outline-offset: 3px;
}
/* 档位小字：当前档亮金（由 JS data-level 驱动） */
.zw-breath-steps { display: inline-flex; gap: 0.55rem; }
.zw-breath-steps b {
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-size: 0.68rem;
  font-weight: 400;
  letter-spacing: 0.1em;
  color: rgba(226, 229, 224, 0.78);
  transition: color 0.25s ease;
}
.zw-breath-bar[data-level="1"] .zw-breath-steps b:nth-child(1),
.zw-breath-bar[data-level="2"] .zw-breath-steps b:nth-child(2),
.zw-breath-bar[data-level="3"] .zw-breath-steps b:nth-child(3) { color: rgba(var(--zw-gold), 0.9); }
/* 关闭态：滑杆与档位退隐，只留开关可回开 */
.zw-breath-bar.breath-off .zw-breath-scale,
.zw-breath-bar.breath-off .zw-breath-steps {
  opacity: 0.35;
  transition: opacity 0.25s ease;
}

/* 2 · 触点星波：选中织线时一次性金环扩散（scale+opacity，0.7s 后 JS 自清理节点） */
.zw-pulse {
  fill: none;
  stroke: rgba(var(--zw-gold), 0.55);
  stroke-width: 1px;
  vector-effect: non-scaling-stroke;
  transform-box: fill-box;
  transform-origin: center;
}
@media (prefers-reduced-motion: no-preference) {
  .zw-pulse { animation: zw-pulse 0.7s ease-out forwards; }
}
@keyframes zw-pulse {
  from { transform: scale(0.25); opacity: 0.6; }
  to { transform: scale(1); opacity: 0; }
}

/* 3 · 鼠标星尘：目光照亮夜空——极淡光斑跟随（只动 transform，进出 opacity 过渡），
   非常驻循环：仅 pointer 在盘内时可见；触屏/reduce 下 JS 不挂载此元素 */
.zw-dust {
  position: absolute;
  left: 0; top: 0;
  width: 190px; height: 190px;
  margin: -95px 0 0 -95px;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(var(--zw-gold-soft), 0.1) 0%,
    rgba(var(--zw-gold), 0.04) 45%,
    transparent 72%);
  opacity: 0;
  transition: opacity 0.6s ease;
  pointer-events: none;
  z-index: 0;
}
.zw-dust.zw-dust-on { opacity: 0.55; }

/* 4 · 大限联动点亮：悬停大限分层行时盘面对应宫位临时亮起（视觉同 .cur，类名分离不互染） */
.zw-star.link { filter: drop-shadow(0 0 13px rgba(var(--zw-gold), 0.4)); }

/* ============================================================
   v51 · 大限分层折叠（用户反馈：12 段全展开撑爆结果页）
   制式同八字页 .bz-detail：details + 居中楷体签条 + 尾箭头；
   收起/展开文案由 .zwdy-sum-* 双 span 按 [open] 切换。
   色彩沿用本页夜幕令牌（象牙白次级 + 金 hover）。 */
.zw-dy-details { margin-top: 0.2rem; }
.zw-dy-details summary {
  cursor: pointer;
  text-align: center;
  font-family: "Kaiti SC", "STKaiti", "KaiTi", "SimKai", var(--serif);
  font-size: 0.82rem;
  letter-spacing: 0.24em; text-indent: 0.24em;
  color: rgba(226, 229, 224, 0.78);
  padding: 0.7rem 0;
  background: transparent;
  border: none;
  list-style: none;
  transition: color 0.2s ease;
  user-select: none;
}
.zw-dy-details summary::-webkit-details-marker { display: none; }
.zw-dy-details summary::after {
  content: "▾";
  display: inline-block;
  margin-left: 0.45em;
  font-size: 0.7rem;
  color: rgba(211, 172, 87, 0.8);
  transition: transform 0.25s ease;
}
.zw-dy-details[open] summary::after { transform: rotate(180deg); }
.zw-dy-details summary:hover { color: #e9d5a3; }
.zw-dy-details summary:focus-visible {
  outline: 1px solid rgba(211, 172, 87, 0.7);
  outline-offset: 3px;
}
.zw-dy-details .zwdy-sum-open { display: none; }
.zw-dy-details[open] .zwdy-sum-closed { display: none; }
.zw-dy-details[open] .zwdy-sum-open { display: inline; }
/* 展开后列表与签条留出呼吸 */
.zw-dy-details[open] .zw-dy { margin-top: 0.4rem; }

/* ============================================================
   v52 · 小盘压缩的媒体查询兜底 + 线端校准配合
   @container(max-width:560px) 在部分移动端 WebView/内核未命中
   （实测桌面 Chromium 也未命中，原因待查），小盘档压缩整体失效，
   盘面被杂曜行撑成 549px 高的长方形，连线随非正方纵横比错位。
   此处以 @media ≤720px 复写同一组压缩规则（cqw 仍可用，盘仍是容器）；
   配合 ziwei.js v47 的 preserveAspectRatio="none"，线端恒贴宫位中心。 */
@media (max-width: 860px) {
  .zw-star { padding: 2px 2px; gap: 0; --corner-pull: 4cqw; }
  .zw-star-name { font-size: clamp(11px, 3.4cqw, 15px); letter-spacing: 0.1em; text-indent: 0.1em; margin-bottom: 1px; }
  .zw-star-gz { font-size: clamp(9.5px, 3cqw, 12px); margin-bottom: 1px; }
  .zw-star-field { gap: clamp(3px, 1.6cqw, 6px); margin-top: 2px; }
  .zw-maj-name { font-size: clamp(10px, calc((2 + 0.9 * var(--b)) * 1cqw), 14px); letter-spacing: 0.12em; }
  .zw-maj-name u { font-size: clamp(8px, 2.4cqw, 10px); }
  .zw-star-minorfield { gap: 1px 4px; }
  .zw-star-decofield { display: none; }
  .zw-star-tag { font-size: 9px; padding: 1px 3px; }
  .zw-dial-center { width: 86%; padding: 0.5rem; }
  .zdc-master { font-size: clamp(0.95rem, 7cqw, 1.3rem); }
  .zdc-title { font-size: 0.58rem; letter-spacing: 0.18em; text-indent: 0.18em; }
  .zdc-sub { font-size: 0.62rem; }
  .zw-star-empty { font-size: 0.72rem; }
}
[data-theme-lock="dark"] .module-nav-item.is-active {
  background: rgba(211, 172, 87, 0.16);
  color: #e9d5a3;
}
.zw-form input:focus, .zw-form select:focus {
  box-shadow: 0 1px 0 0 rgba(var(--zw-gold), 0.85), 0 0 0 3px rgba(211, 172, 87, 0.22) !important;
}
@media (max-width: 620px) {
  .zw-submit { grid-column: 1 / -1; width: 100%; min-height: 44px; }
}
