:root {
  color-scheme: light;
  --bg: #f6faf7;
  --bg-top: #edf7f2;
  --surface: rgba(255, 255, 255, 0.92);
  --surface-strong: #ffffff;
  --text: #18312a;
  --muted: #66756f;
  --faint: #89968f;
  --line: #dce8e1;
  --jade: #2f836d;
  --jade-dark: #176553;
  --jade-soft: #dff1e9;
  --gold: #d3a84f;
  --gold-soft: #fbf0d4;
  --red: #c95849;
  --red-soft: #fbe7e3;
  --blue-soft: #edf4f7;
  --shadow: 0 16px 38px rgba(37, 77, 64, 0.12);
  --radius: 18px;
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --safe-top: env(safe-area-inset-top, 0px);
  --ask-nav-space: 86px;
  --ask-composer-space: 86px;
  font-family:
    Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
}

/* ===== Aeon · TODAY page (self-hosted fonts + tokens scoped to #page-home only) ===== */
@font-face {
  font-family: "Newsreader";
  src: url("./assets/fonts/Newsreader-Regular.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Newsreader";
  src: url("./assets/fonts/Newsreader-Medium.woff") format("woff");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Source Han Serif SC";
  src: url("./assets/fonts/source-han-serif-sc-400.woff") format("woff");
  font-weight: 400 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "JetBrains Mono Aeon";
  src: url("./assets/fonts/JetBrainsMono-Regular.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

#page-home {
  --aeon-bg: #f4f1e8;
  --aeon-ink: #201b16;
  --aeon-ink-soft: #7c736a;
  --aeon-raised: #fbf8f1;
  --aeon-sunken: #ece6da;
  --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn: #b0573a;
  --aeon-warn-hi: #c97a5c;
  --aeon-warn-deep: #8a402a;
  /* 月光银三档（front2）：节奏胶囊「稳」态宝石点等金属点缀专用——金属一律月光银，禁古铜金 */
  --aeon-silver: #b9c2c2;
  --aeon-silver-hi: #e9eeee;
  --aeon-silver-deep: #7f8c8c;
  --aeon-green-jade: radial-gradient(circle at 34% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 52%, var(--aeon-green-deep) 100%);
  --aeon-warn-jade: radial-gradient(circle at 34% 30%, var(--aeon-warn-hi) 0%, var(--aeon-warn) 52%, var(--aeon-warn-deep) 100%);
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  overflow: hidden;
  margin: 0 -16px 0;
  padding: 10px 24px 124px;
  min-height: 100vh; min-height: 100dvh;
  background: var(--aeon-bg);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}

#page-home .today-aura {
  position: absolute;
  top: 8px;
  right: -44px;
  width: 300px;
  height: 300px;
  z-index: 0;
  opacity: 0.4;
  pointer-events: none;
}
#page-home .today-ring {
  width: 100%;
  height: 100%;
  transform-origin: center;
  animation: aeon-aura-rotate 240s linear infinite;
}
@keyframes aeon-aura-rotate {
  to {
    transform: rotate(360deg);
  }
}
@media (prefers-reduced-motion: reduce) {
  #page-home .today-ring {
    animation: none;
  }
}

#page-home .today-content {
  position: relative;
  z-index: 1;
}

#page-home .today-kicker {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 18px;
}
#page-home .today-date {
  font-family: var(--aeon-mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-soft);
}
#page-home .today-eyebrow {
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-green);
}

/* （front7）.today-headline 抽象大标题退役——与每日一语签卡定调职责重复，且把四门挤出首屏（tasks/280 三单元宪法）。 */
#page-home .today-opening {
  margin: 0 0 14px;
  font-family: var(--aeon-serif);
  font-weight: 400;
  font-size: 17px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-home .today-body {
  margin: 0;
  font-size: 15.5px;
  line-height: 1.75;
  color: var(--aeon-ink);
}

/* （front6）旧 .today-divider 泰卦墨线已升格为全局卦象分隔符组件 .yao-divider（唯一定义见文件尾 front6 段） */

#page-home .today-mark {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin: 14px 0;
}
#page-home .today-dot {
  flex: 0 0 auto;
  width: 11px;
  height: 11px;
  margin-top: 5px;
  border-radius: 50%;
}
#page-home .today-dot.go {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 55%, var(--aeon-green-deep) 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(30, 24, 12, 0.34),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25),
    0 0 0 0.5px rgba(67, 92, 54, 0.5),
    0 1px 2px rgba(67, 92, 54, 0.24);
}
#page-home .today-dot.care {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-warn-hi) 0%, var(--aeon-warn) 55%, var(--aeon-warn-deep) 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(30, 18, 10, 0.34),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25),
    0 0 0 0.5px rgba(138, 64, 42, 0.5),
    0 1px 2px rgba(138, 64, 42, 0.24);
}
#page-home .today-mark-label {
  display: block;
  margin-bottom: 2px;
  font-family: var(--aeon-serif);
  font-size: 15px;
  color: var(--aeon-ink);
}
#page-home .today-mark p {
  margin: 0;
  font-size: 14px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}

#page-home .today-entries {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 26px;
}
#page-home .today-entry {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  padding: 14px 16px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 14px;
  background: var(--aeon-raised);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
  font-size: 14.5px;
  text-align: left;
}
#page-home .today-entry:active {
  transform: scale(0.99);
}
#page-home .today-entry-arrow {
  color: var(--aeon-green);
  font-size: 16px;
}

#page-home .today-nudge {
  margin: 20px 0 0;
  padding-left: 14px;
  border-left: 2px solid var(--aeon-green);
  border-radius: 0;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}

#page-home .today-loading {
  margin-top: 14px;
  font-size: 13px;
  color: var(--aeon-ink-soft);
}
#page-home .today-skeleton {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 8px;
}
#page-home .today-skeleton .sk {
  display: block;
  height: 14px;
  border-radius: 6px;
  background: var(--aeon-sunken);
}
#page-home .today-skeleton .sk-title {
  height: 26px;
  width: 70%;
}
#page-home .today-skeleton .sk-line.short {
  width: 55%;
}
/* 09-26 M8 · 生成中的定调位:同一套安静骨架(不闪不流光),下缀一句人话 */
#page-home .today-tone.is-generating {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 18px;
}
#page-home .today-tone.is-generating .sk {
  display: block;
  height: 14px;
  border-radius: 6px;
  background: var(--aeon-sunken);
}
#page-home .today-tone.is-generating .sk-title { height: 26px; width: 70%; }
#page-home .today-tone.is-generating .sk-line { width: 86%; }
#page-home .today-tone.is-generating .today-loading { margin-top: 2px; }
/* 生成中的四门行:只亮节奏词,句子位骨架,不可点 */
#page-home .today-gate-row.is-words { cursor: default; }
#page-home .today-gate-row.is-words .g-seal { margin-left: auto; }

/* 09-26 S4 · 命盘页末「就这张盘,问一件事」:暗轨细线行,银箭头,与今日页回看行同骨 */
#page-chart-bazi .chart-ask-entry {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  margin: 26px 0 6px;
  padding: 14px 16px;
  border: 0.5px solid var(--aeon-hair, rgba(233, 238, 238, 0.12));
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.03);
  color: inherit;
  font-family: var(--aeon-sans);
  font-size: 14.5px;
  text-align: left;
  cursor: pointer;
}
#page-chart-bazi .chart-ask-entry:active { transform: scale(0.99); }
#page-chart-bazi .chart-ask-entry .arrow { color: var(--aeon-silver, #b9c2c2); font-size: 16px; }

/* 09-26 M14 · 专科页暗场「先不等了」:8 秒后才浮现,银白细线胶囊,不抢仪式 */
/* 09-27 Ryan 真机(问事同款):专科暗场出口改「先去别处看看」——屏底、无框小字、长等后才浮现;不是取消 */
.cast-escape {
  position: absolute;
  left: 0;
  right: 0;
  bottom: calc(24px + env(safe-area-inset-bottom));
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 0 24px;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 1.8s ease;
  z-index: 2;
}
.cast-escape.show { opacity: 1; pointer-events: auto; }
.cast-escape-hint {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 12px;
  line-height: 1.7;
  letter-spacing: 0.05em;
  color: rgba(233, 229, 217, 0.72);
  opacity: 0.6;
}
.cast-escape-btn {
  padding: 6px 14px;
  border: 0;
  background: transparent;
  color: rgba(233, 229, 217, 0.72);
  font-family: var(--aeon-serif);
  font-size: 13px;
  letter-spacing: 0.1em;
  text-decoration: underline;
  text-underline-offset: 5px;
  text-decoration-color: rgba(233, 229, 217, 0.35);
  opacity: 0.85;
  cursor: pointer;
}
.cast-escape-btn:active { color: rgba(233, 229, 217, 0.95); }
/* 客户离开暗场后,亮场确认步的起局钮换成「结果在路上」一行 */
.cast-pending-line {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-soft, #7c736a);
}
.cast-pending-line .ask-dots { display: inline-flex; gap: 3px; }
.cast-pending-line .ask-dots i { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.25; animation: ask-breath 1.9s ease-in-out infinite; }
.cast-pending-line .ask-dots i:nth-child(2) { animation-delay: 0.32s; }
.cast-pending-line .ask-dots i:nth-child(3) { animation-delay: 0.64s; }

/* ===== 应验回音(09-26):信末附言 → 盖印时刻;朱只在这里出现 ===== */
#page-home .today-ps { margin-top: 30px; padding-top: 16px; border-top: 0.5px solid var(--aeon-line); }
#page-home .today-ps .ps-lab { display: flex; gap: 10px; font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.26em; color: var(--aeon-ink-faint); }
#page-home .today-ps .ps-lab .en { opacity: 0.8; }
#page-home .today-ps .ps-text { margin: 9px 0 0; font-family: var(--aeon-serif); font-size: 15px; line-height: 1.8; color: var(--aeon-ink); }
#page-home .today-ps .ps-opts { margin-top: 12px; display: flex; gap: 22px; }
#page-home .today-ps .ps-opts button {
  padding: 0 1px 3px;
  border: 0;
  border-bottom: 1px solid rgba(32, 27, 22, 0.35);
  background: none;
  font-family: var(--aeon-serif);
  font-size: 14.5px;
  color: var(--aeon-ink);
  cursor: pointer;
}
#page-home .today-ps .ps-opts button:active { color: var(--aeon-ink-soft); }
#page-home .today-ps .ps-opts button[disabled] { opacity: 0.45; cursor: default; }
#page-home .today-ps .ps-rec { margin: 10px 0 0; font-size: 13px; color: var(--aeon-ink-soft); }
#page-home .echo-veil {
  position: fixed;
  inset: 0;
  z-index: 90;
  display: grid;
  place-items: center;
  padding: 40px 28px;
  background: rgba(23, 18, 13, 0.34);
  opacity: 0;
  transition: opacity 0.32s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-home .echo-veil.on { opacity: 1; }
#page-home .echo-card {
  position: relative;
  width: 100%;
  max-width: 400px;
  padding: 34px 30px 26px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 4px;
  background: var(--aeon-raised);
  box-shadow: 0 24px 60px rgba(23, 18, 13, 0.32);
  transform: translateY(10px);
  transition: transform 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-home .echo-veil.on .echo-card { transform: none; }
#page-home .echo-card .clab { font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.26em; color: var(--aeon-ink-faint); }
#page-home .echo-card .verdict { margin: 14px 0 8px; font-family: var(--aeon-serif); font-size: 18px; line-height: 1.78; color: var(--aeon-ink); }
#page-home .echo-card .meta { margin: 0; font-size: 12px; color: var(--aeon-ink-soft); }
/* 落款行:文在左(所言已应 / AEON · 灵境),印在右,像信末落款;印不带投影(印是压在纸上的,不是浮着的徽章) */
#page-home .echo-card .seal-sign { margin-top: 18px; display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; }
#page-home .echo-card .seal-l { padding-bottom: 6px; min-width: 0; }
#page-home .echo-card .seal-sign canvas {
  display: block;
  flex: none;
  margin-right: -4px;
  opacity: 0;
  transform: scale(1.35);
  transition: opacity 0.18s ease-out, transform 0.34s cubic-bezier(0.2, 0.9, 0.2, 1.15);
}
#page-home .echo-veil.stamped .seal-sign canvas { opacity: 1; transform: none; }
#page-home .echo-card .szh { margin: 0; font-size: 12px; letter-spacing: 0.1em; color: var(--aeon-ink-soft); }
#page-home .echo-card .scap { margin: 6px 0 0; font-family: var(--aeon-mono); font-size: 9px; letter-spacing: 0.34em; color: var(--aeon-ink-faint); }
html[lang="en"] #page-home .echo-card .szh { letter-spacing: 0.02em; }
#page-home .echo-close {
  margin-top: 22px;
  width: 100%;
  padding: 12px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 12px;
  background: transparent;
  font-size: 14px;
  color: var(--aeon-ink);
  cursor: pointer;
}
/* Me · 应验录 */
#page-me .me-echo-head { display: flex; align-items: center; gap: 12px; }
#page-me .me-echo-seal { flex: none; width: 40px; height: 40px; }
#page-me .me-echo-stat { margin-top: 4px; }
#page-me .me-echo-list { margin-top: 6px; }
#page-me .me-erow { display: flex; align-items: flex-start; gap: 12px; padding: 12px 2px; border-bottom: 0.5px solid var(--aeon-line); }
#page-me .me-erow:last-child { border-bottom: 0; }
#page-me .me-emark {
  flex: none;
  width: 26px;
  height: 26px;
  margin-top: 2px;
  display: grid;
  place-items: center;
  border-radius: 4px;
  font-family: var(--aeon-serif);
  font-size: 14px;
  line-height: 1;
}
/* 09-28 Ryan:四种标记同一家素墨小框——应了=实心墨块纸色字;没应=空心墨线框;说不清=虚线框;记=沉底框。不再盖红章 */
#page-me .me-emark { font-size: 13px; font-weight: 500; }
#page-me .me-emark.hit { background: var(--aeon-ink); color: var(--aeon-bg); border: 0.5px solid var(--aeon-ink); }
#page-me .me-emark.miss { background: transparent; color: var(--aeon-ink); border: 0.5px solid var(--aeon-ink-soft); }
#page-me .me-emark.unclear { background: transparent; color: var(--aeon-ink-soft); border: 0.5px dashed var(--aeon-ink-soft); }
#page-me .me-emark.note { background: var(--aeon-sunken); color: var(--aeon-ink-soft); border: 0.5px solid var(--aeon-line); }
#page-me .me-erow-main { flex: 1; display: grid; gap: 4px; padding: 0; border: 0; background: none; text-align: left; cursor: pointer; }
#page-me .me-erow-main b { font-family: var(--aeon-serif); font-weight: 500; font-size: 14.5px; line-height: 1.55; color: var(--aeon-ink); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
#page-me .me-erow-main small { font-size: 12px; line-height: 1.6; color: var(--aeon-ink-soft); }
#page-me .me-erow-verdict { font-family: var(--aeon-serif); font-size: 13px; line-height: 1.6; color: var(--aeon-ink-soft); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
#page-me .me-echo-toggle { margin-top: 14px; padding-top: 12px; border-top: 0.5px solid var(--aeon-line); display: flex; align-items: center; justify-content: space-between; gap: 12px; }
#page-me .me-echo-toggle-label { font-size: 14px; color: var(--aeon-ink); }
#page-me .me-echo-toggle .language-switch.settings { margin-top: 0; }

/* ===================== 今日一笺(09-26,蓝本 fedesign/today-letter-master.html) =====================
   纸上写字,不是卡片堆:签居中衬线、动静四行细线、边注小字;一主(八卦环)一配(泰卦印);朱只在应验。 */
#page-home .today { position: relative; }
#page-home .today-kicker .today-ganzhi {
  font-family: var(--aeon-serif);
  font-size: 12.5px;
  letter-spacing: 0.12em;
  color: var(--aeon-ink-soft);
}
#page-home .today-sign { margin: 44px 0 0; text-align: center; }
#page-home .today-sign .sign-line {
  margin: 0;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 20.5px;
  line-height: 1.82;
  letter-spacing: 0.02em;
  color: var(--aeon-ink);
  text-wrap: balance;
}
#page-home .today-sign .sign-fall {
  margin: 18px auto 0;
  max-width: 30em;
  font-family: var(--aeon-serif);
  font-size: 14.5px;
  line-height: 1.8;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-soft);
}
#page-home .today-sign .why { margin-top: 10px; }
#page-home .today-sign .why button {
  padding: 0 0 2px;
  border: 0;
  border-bottom: 1px dotted rgba(67, 92, 54, 0.4);
  background: none;
  font-family: var(--aeon-mono);
  font-size: 9px;
  letter-spacing: 0.24em;
  color: var(--aeon-green-deep);
  cursor: pointer;
}
#page-home .today-sign.is-generating { display: flex; flex-direction: column; align-items: center; gap: 12px; margin-top: 44px; }
#page-home .today-sign.is-generating .sk { display: block; width: 58%; height: 14px; border-radius: 6px; background: var(--aeon-sunken); }
#page-home .today-sign.is-generating .sk-title { width: 72%; height: 24px; }
#page-home .today-sign.is-generating .today-loading { margin-top: 2px; }
#page-home .today-sign + .yao-divider { margin: 30px 2px 22px; }
#page-home .today-stir .lab {
  margin: 0 0 6px 2px;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.24em;
  color: var(--aeon-ink-faint);
}
/* 动静四行(09-27 Ryan 真机:字小、「情事财身」看不懂、四枚绿「顺」抢眼)
   → 眉行「感情 · ●顺」小字在上,句子放大做主角;节奏词退成一点一字,不再是四枚胶囊 */
#page-home .stir-row {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 5px;
  width: 100%;
  padding: 14px 2px 15px;
  border: 0;
  border-bottom: 0.5px solid var(--aeon-line);
  background: none;
  font-family: var(--aeon-serif);
  font-size: 16.5px;
  line-height: 1.7;
  color: var(--aeon-ink);
  text-align: left;
  cursor: pointer;
}
#page-home .stir-rows .stir-row:first-child { border-top: 0.5px solid var(--aeon-line); }
#page-home .stir-row .stir-eyebrow {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--aeon-sans);
  font-size: 12px;
  letter-spacing: 0.1em;
  color: var(--aeon-ink-soft);
}
#page-home .stir-row .stir-eyebrow small { font-family: inherit; font-size: 12px; letter-spacing: 0.12em; color: var(--aeon-ink-soft); }
html[lang="en"] #page-home .stir-row .stir-eyebrow small { font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.2em; }
#page-home .stir-row .stir-state { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; letter-spacing: 0.08em; color: var(--aeon-ink-soft); }
#page-home .stir-row .stir-state .today-gem { width: 7px; height: 7px; }
#page-home .stir-row .stir-text { display: block; min-width: 0; }
#page-home button.stir-row:active { background: var(--aeon-sunken); }
#page-home .stir-row.is-loading { cursor: default; }
#page-home .stir-row.is-loading .today-gate-sk { width: 70%; margin: 6px 0 5px; }
#page-home .stir-row.is-unavailable .stir-text { font-family: var(--aeon-sans); font-size: 13px; color: var(--aeon-ink-soft); }
#page-home .today-letter-body {
  margin: 26px 0 0;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.85;
  color: var(--aeon-ink);
}
#page-home .today-mnotes { margin-top: 22px; display: flex; flex-direction: column; gap: 12px; }
#page-home .mnote {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 0;
  border: 0;
  background: none;
  text-align: left;
  font-family: var(--aeon-sans);
  font-size: 13px;
  line-height: 1.75;
  color: var(--aeon-ink-soft);
  cursor: pointer;
}
#page-home .mnote .ico { flex: 0 0 auto; align-self: center; width: 12px; height: 12px; }
#page-home .mnote .ico svg { display: block; width: 12px; height: 12px; fill: none; stroke: var(--aeon-ink-faint); stroke-width: 1.4; stroke-linecap: round; }
#page-home .mnote b { font-family: var(--aeon-serif); font-weight: 500; color: var(--aeon-ink); }
#page-home .today-ps { margin-top: 30px; }

/* 开盘仪式(态 0):石轮=同环几何重着色(石影银灰垫底+纸白提亮),540° 转毕化入右上常驻八卦环;
   一天一次,二开直显;reduced/lite 不播。≈3s(转 1.5 + 静 0.3 + 入纸 1.3)。 */
#page-home .today-rite {
  position: absolute;
  inset: 0;
  z-index: 30;
  display: none;
  background: var(--aeon-bg);
  transition: background-color 0.6s ease;
}
#page-home .today-rite.on { display: block; }
#page-home .today-rite.morph { background-color: transparent; pointer-events: none; }
#page-home .today-rite .wheel {
  position: absolute;
  top: 250px;
  width: 208px;
  height: 208px;
  opacity: 0;
  filter: drop-shadow(0 10px 22px rgba(32, 27, 22, 0.16));
}
#page-home .today-rite.on .wheel { transition: opacity 0.3s ease-out; opacity: 0.92; }
#page-home .today-rite .wspin { position: absolute; inset: 0; }
#page-home .today-rite .wheel svg { position: absolute; inset: 0; width: 100%; height: 100%; }
#page-home .today-rite .w-trace { opacity: 0; }
/* 09-27 Ryan 定:石轮在中间「缓缓」转(不再 540° 快转),等今日生成;料到了挪向右上、隐入常驻环;落定转角由 JS 读当前角度承接 */
#page-home .today-rite.on .wspin { animation: today-wheel-slow 32s linear infinite; }
@keyframes today-wheel-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
#page-home .today-rite.morph .wheel {
  transition: left 1.3s cubic-bezier(0.22, 0.61, 0.36, 1), top 1.3s cubic-bezier(0.34, 0.45, 0.28, 1),
    width 1.3s cubic-bezier(0.22, 0.61, 0.36, 1), height 1.3s cubic-bezier(0.22, 0.61, 0.36, 1),
    opacity 1.3s cubic-bezier(0.65, 0, 0.85, 0.35), filter 0.5s ease;
  left: var(--rite-end-left, 134px) !important;
  top: 8px !important;
  width: 300px;
  height: 300px;
  opacity: 0.4;
  filter: drop-shadow(0 0 0 rgba(32, 27, 22, 0));
}
#page-home .today-rite.morph .w-solid { transition: opacity 1.1s ease; opacity: 0; }
#page-home .today-rite.morph .w-trace { transition: opacity 1.1s ease; opacity: 1; }
#page-home .today-rite .bloom {
  position: absolute;
  left: 50%;
  top: 354px;
  width: 60px;
  height: 60px;
  margin: -30px 0 0 -30px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(156, 143, 116, 0.32), rgba(156, 143, 116, 0) 68%);
  opacity: 0;
  pointer-events: none;
}
#page-home .today-rite.morph .bloom { animation: today-bloom-out 1s ease-out forwards; }
/* 09-28:转过 6s 还没料,轮下浮出一句「今日的话正在写，片刻就好。」;入纸时随题字一起隐 */
#page-home .today-rite .rnote {
  position: absolute;
  left: 28px;
  right: 28px;
  margin: 0;
  text-align: center;
  font-family: var(--aeon-serif);
  font-size: 13px;
  line-height: 1.7;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-soft);
  opacity: 0;
  transition: opacity 1.4s ease;
}
#page-home .today-rite .rnote.show { opacity: 1; }
#page-home .today-rite.morph .rnote { opacity: 0; transition: opacity 0.4s ease; }
@keyframes today-bloom-out { 0% { opacity: 0.55; transform: scale(0.5); } 100% { opacity: 0; transform: scale(3.4); } }
#page-home .today-rite .rcap {
  position: absolute;
  left: 0;
  right: 0;
  top: 500px;
  margin: 0;
  text-align: center;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.3em;
  color: var(--aeon-ink-soft);
  transition: opacity 0.5s ease;
}
#page-home .today-rite.morph .rcap { opacity: 0; }
#page-home .today.riting .today-aura { opacity: 0; transition: opacity 0.3s ease; }
#page-home .today.riting .today-content { opacity: 0; }
#page-home .today.riting.reveal .today-content { opacity: 1; transition: opacity 0.9s ease 0.15s; }
/* 常驻环转角可承接开盘石轮的落定角(--ring-start 由化入时写入) */
@keyframes aeon-aura-rotate {
  from { transform: rotate(var(--ring-start, 0deg)); }
  to { transform: rotate(calc(var(--ring-start, 0deg) + 360deg)); }
}
#page-home .today-quiet {
  margin-top: 30px;
  padding: 22px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
  background: var(--aeon-raised);
  text-align: center;
}
#page-home .today-quiet p {
  margin: 0 0 14px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-home .today-retry {
  padding: 10px 18px;
  border-radius: 12px;
  background: var(--aeon-ink);
  color: var(--aeon-bg);
  font-size: 14px;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  min-height: 100%;
  /* Aeon 重做:连贯宣纸底(替换老绿/白渐变,修复露底);暗态由 body::before 石盘层接管 */
  background: #f4f1e8;
  color: var(--text);
  font-size: 16px;
}

body {
  overflow-x: hidden;
}

/* 老品牌底纹水印已移除(露底残留装饰) */
body::before {
  content: "";
  display: none;
}

/* 底栏胶囊下沿柔和渐隐（Ryan 真机反馈：正文被浮空胶囊切成半行）。
   胶囊是刻意的浮空设计——下方留 max(10px, safe-bottom) 的缝，滚动时正文从缝里穿过、
   被胶囊边缘齐齐切断，观感像没做完。这里在「胶囊之下、正文之上」(z-index 19 < 底栏 20)
   铺一层与当前页同色的渐隐，让内容溶掉而不是被切断；胶囊照旧浮空，不改设计语言。
   底栏藏起来的页（detail / topic-advice / 四法·合盘起卦页）不铺。 */
body::after {
  content: "";
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: calc(92px + var(--safe-bottom));
  z-index: 19;
  pointer-events: none;
  background: linear-gradient(to top, #f4f1e8 0%, rgba(244, 241, 232, 0.9) 42%, rgba(244, 241, 232, 0) 100%);
}
/* 暗态取石盘径向渐变在屏底的实际落色 #100b06（不是 #17120d），否则会露出一条浅一档的横带 */
:is(body.shell-dark, body.ask-casting)::after {
  background: linear-gradient(to top, #100b06 0%, rgba(16, 11, 6, 0.9) 42%, rgba(16, 11, 6, 0) 100%);
}
body.nav-hidden::after {
  display: none;
}

/* ===== 白光根治 + 起卦浸黑整屏同步过渡 ===== */
/* 命盘(换页)= 即时暗;问事起卦(浸透)= 整屏统一 2.6s 同步渐暗,见下 page-ask 段 */
html:has(body.shell-dark) {
  background: #17120d;
  color-scheme: dark;
}
/* front3·顶底栏统一:首跑建档(onboarding 暗石屏)期间根画布同步转暗——
   状态栏身后、滚动回弹、safe-area 四边露出的都是这块画布,不再透宣纸亮边;
   theme-color 的暗值由 renderAll 首跑分支同步翻(见 app.js),二者同源 #17120d。 */
html:has(#onboarding:not([hidden])) {
  background: #17120d;
  color-scheme: dark;
}
/* 同拍把 body 也转暗:建档覆盖层(fixed)之下若还压着亮 body,真机旋转/键盘收起的
   重排瞬间会闪出宣纸底;首跑期间可见画布只允许这一种石色。 */
body:has(#onboarding:not([hidden])) {
  background: #17120d;
}
/* 命盘暗态底色 = 整屏石盘渐变(纵深+连贯,瞬间就位);进/出命盘的「整屏一起沉」由 #shell-dim 一层幕统一揭开,见下 */
body.shell-dark {
  background: radial-gradient(135% 80% at 50% 8%, #221913 0%, #17120d 56%, #100b06 100%) fixed;
}
/* ask 起卦态不显示命盘石盘层(ask 走自己的暗幕);命盘 shell-dark 的 ::before 显示见上方 opacity:1 */
body.ask-casting::before {
  opacity: 0;
}
/* ⑤ 白条根治·单一染暗源（R5 定稿）：问事浸暗全程只允许一个背景承载过渡——根画布 html
   （:has(body.page-ask) 态挂过渡）。body 与 #page-ask 在问事页一律透明：安全区条带、滚动回弹、
   键盘收起、任何重排暴露出来的永远是同一块画布渐变面，物理上不可能再"两块不同拍"。
   旧方案 html/body 瞬黑 + 主体 2.6s 缓暗，真机呈"顶部安全区条带先黑、主体后黑"两块分离
   （录屏逐帧定位：根画布 +39ms 瞬黑、主体 2.6s 才到位——见 R5 白条证据包）。
   注：命盘 shell-dark 的"瞬间就位"不受影响（page-ask 类移除即无过渡，且换场有 #shell-dim 幕遮蔽）。 */
html:has(body.page-ask) {
  transition: background-color 2.6s cubic-bezier(0.4, 0, 0.2, 1);
}
html:has(body.ask-casting) {
  background-color: #17120d;
  color-scheme: dark;
}
/* front3·顶底栏统一:上面这条 2.6s 过渡只属于问事页内的亮↔暗仪式。
   从暗壳页(命盘/门详情 shell-dark)切进问事时,根画布是暗→亮,若也走 2.6s,
   换场幕布(#shell-dim,0.92s)揭开后 html 还在灰中段(实测 rgb(183,179,171)),
   整页灰洗约 2s、顶底栏与内容不同拍。进场那一帧由 syncPage 挂 .chrome-snap 瞬切,
   双 rAF 后摘除,页内浸暗/回亮过渡不受影响(排在 page-ask 过渡之后,同特异性后者胜)。 */
html.chrome-snap,
html.chrome-snap:has(body.page-ask) {
  transition: none;
}
body.page-ask {
  background: transparent;
}

button,
input,
select,
textarea {
  font: inherit;
}

/* 施工卡 C·C-7①④:全站按压基线 ——
   touch-action: manipulation 掐掉双击缩放的等待判定(viewport 那道 user-scalable=no 已封住
   系统级 300ms,这一条是给会覆写 viewport 的内嵌 WebView 留的第二道闸);
   tap-highlight 关掉换成我们自己的按压态(见下方 button:active),两端观感才一致;
   长按不再弹选词/放大镜 —— 那一下"卡住"的错觉正是拖拽起手最容易被误判的地方。 */
button {
  border: 0;
  cursor: pointer;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
  user-select: none;
  -webkit-user-select: none;
}

button:disabled {
  cursor: not-allowed;
  opacity: 0.62;
}

button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  /* 兜底焦点环（旧全局层）：与文件末尾 A5 规则同款墨色细环；原退役旧绿 #2f836d 已撤 */
  outline: 2px solid rgba(32, 27, 22, 0.5);
  outline-offset: 2px;
}

.app-shell {
  min-height: 100vh; min-height: 100dvh;
}

.main-app {
  width: min(100%, 480px);
  min-height: 100vh; min-height: 100dvh;
  margin: 0 auto;
  padding: calc(18px + var(--safe-top)) 16px calc(98px + var(--safe-bottom));
}

body.page-ask .main-app {
  padding-bottom: 18px;
}

.screen[hidden],
.main-app[hidden],
[hidden] {
  display: none !important;
}

/* ===================== front-a · 登录门(aeon 宣纸版；旧 jade/gold gate 退役) =====================
   token 只挂页根 #alpha-gate,零 :root(考古清单 #6 作用域铁律)；单列居中 min(100%,390px),
   上留白 ~18vh,首屏一个焦点；复卦品牌印同 .me-fu 配方；错误态用警示赭,非错误红。 */
/* 登录门 · 暗色(09-27 Ryan 定稿):欢迎页 = 建档第一屏原稿(黑底、复卦大印、灵境、一句、呼吸「开始」)挪到登录前;
   登录 / 找回 = 暗底、左对齐小品牌、下划线表单(Ryan:这版好)。宣纸登录页撤(Ryan:很差的一版)。 */
#alpha-gate {
  --aeon-bg: #17120d;
  --aeon-ink: #f1ebe0;
  --aeon-ink-soft: #a89d8d;
  --aeon-raised: #1c1610;
  --aeon-sunken: #120d08;
  --aeon-line: rgba(233, 238, 238, 0.16);
  --aeon-silver: #b9c2c2;
  --aeon-silver-deep: #7f8c8c;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn: #c97a5c;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  padding: calc(14vh + var(--safe-top, 0px)) 28px calc(40px + var(--safe-bottom, 0px));
  background: radial-gradient(120% 70% at 50% 16%, #221913 0%, var(--aeon-bg) 60%, #100b06 100%);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}
#alpha-gate[hidden] { display: none; }
#alpha-gate[data-step="welcome"] { padding: calc(14px + var(--safe-top, 0px)) 24px calc(30px + var(--safe-bottom, 0px)); }

#alpha-gate .gate-stage {
  flex: 1 0 auto;
  display: flex;
  flex-direction: column;
  width: min(100%, 390px);
  margin: 0 auto;
}
#alpha-gate[data-step="welcome"] .gate-stage { width: 100%; max-width: 430px; }

/* —— 欢迎页:与 #onboarding 第一屏同一套值(ob-screen / ob-hero / ob-fu.big / ob-brand / ob-welcome / ob-langs / ob-foot / ob-cta) —— */
#alpha-gate .gate-welcome { display: none; }
#alpha-gate[data-step="welcome"] .gate-welcome { display: flex; flex-direction: column; flex: 1; }
#alpha-gate[data-step="welcome"] .gate-lang,
#alpha-gate[data-step="welcome"] .gate-brand,
#alpha-gate[data-step="welcome"] .gate-headline,
#alpha-gate[data-step="welcome"] .gate-card,
#alpha-gate[data-step="welcome"] .yao-divider,
#alpha-gate[data-step="welcome"] .gate-foot { display: none; }
#alpha-gate .gate-welcome .ob-screen { flex: 1; display: flex; flex-direction: column; padding-top: 9vh; animation: ob-screen-in 0.7s cubic-bezier(0.22, 0.61, 0.36, 1); }
#alpha-gate .gate-welcome .ob-hero { padding-top: 11vh; display: flex; flex-direction: column; align-items: center; text-align: center; }
#alpha-gate .gate-welcome .ob-fu { display: grid; gap: 9px; justify-items: center; }
#alpha-gate .gate-welcome .ob-fu i {
  display: block;
  width: 64px;
  height: 3.5px;
  border-radius: 1.5px;
  background: linear-gradient(90deg, rgba(185, 194, 194, 0.75) 0 42%, transparent 42% 58%, rgba(185, 194, 194, 0.75) 58%);
}
#alpha-gate .gate-welcome .ob-fu i.ret { background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep)); animation: ob-ret-breathe 4s ease-in-out infinite; }
#alpha-gate .gate-welcome .ob-brand { margin: 32px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 34px; line-height: 1.3; letter-spacing: 0.34em; text-indent: 0.34em; color: var(--aeon-ink); animation: ob-brand-in 1.2s cubic-bezier(0.22, 0.61, 0.36, 1) both; }
#alpha-gate .gate-welcome .ob-welcome { margin: 18px 0 0; font-family: var(--aeon-serif); font-size: 15px; line-height: 1.9; color: var(--aeon-ink-soft); max-width: 26ch; text-wrap: balance; }
#alpha-gate .gate-welcome .ob-langs { margin: 36px auto 0; border: 1px solid rgba(233, 238, 238, 0.2); background: transparent; }
#alpha-gate .gate-welcome .ob-langs button { color: var(--aeon-ink-soft); background: transparent; }
#alpha-gate .gate-welcome .ob-langs button.active { background: rgba(233, 238, 238, 0.1); color: var(--aeon-ink); }
#alpha-gate .gate-welcome .ob-foot { margin-top: auto; padding-top: 40px; display: grid; gap: 14px; justify-items: center; }
#alpha-gate .gate-welcome .ob-cta {
  width: 100%;
  padding: 16px;
  border: 1px solid rgba(233, 238, 238, 0.28);
  border-radius: 3px;
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 15px;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
  cursor: pointer;
  transition: border-color 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.3s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#alpha-gate .gate-welcome .ob-cta:active { background: rgba(233, 238, 238, 0.06); }
#alpha-gate .gate-welcome .ob-cta--breathe { animation: ob-cta-breathe 4s ease-in-out infinite; }

/* —— 登录 / 找回 —— */
#alpha-gate .gate-lang {
  position: absolute;
  top: calc(14px + var(--safe-top, 0px));
  right: 16px;
  border-color: var(--aeon-line);
  background: transparent;
}
#alpha-gate .gate-lang button { color: var(--aeon-ink-soft); }
#alpha-gate .gate-lang button.active { color: var(--aeon-ink); background: rgba(233, 238, 238, 0.1); }
#alpha-gate .gate-fu { display: grid; gap: 5px; width: 36px; }
#alpha-gate .gate-fu i {
  display: block;
  height: 2px;
  border-radius: 1px;
  background: linear-gradient(90deg, var(--aeon-silver) 0 42%, transparent 42% 58%, var(--aeon-silver) 58%);
  opacity: 0.5;
}
#alpha-gate .gate-fu i.ret {
  background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep));
  opacity: 0.95;
}
#alpha-gate .gate-wordmark {
  display: block;
  margin-top: 16px;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 26px;
  line-height: 1.4;
  letter-spacing: 0.04em;
  color: var(--aeon-ink);
}
#alpha-gate .gate-eyebrow {
  display: block;
  margin-top: 6px;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#alpha-gate .gate-headline {
  margin: 20px 0 0;
  max-width: 26ch;
  font-family: var(--aeon-serif);
  font-weight: 400;
  font-size: 15.5px;
  line-height: 1.7;
  letter-spacing: 0.02em;
  color: var(--aeon-ink-soft);
}
#alpha-gate[data-step="reset"] .gate-headline { display: none; }

/* 表单:不做卡片,两条下划线 + 一枚钮,与建档输入同法 */
#alpha-gate .gate-card {
  margin-top: 28px;
  padding: 0;
  display: grid;
  gap: 22px;
  background: transparent;
  border: 0;
  border-radius: 0;
}
#alpha-gate .field { display: grid; gap: 6px; }
#alpha-gate .field[hidden] { display: none; }
#alpha-gate .field span { font-size: 12px; letter-spacing: 0.08em; color: var(--aeon-ink-soft); }
#alpha-gate .field input {
  width: 100%;
  border: 0;
  border-bottom: 1px solid rgba(233, 238, 238, 0.16);
  border-radius: 0;
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 18px;
  line-height: 1.5;
  padding: 10px 2px;
  outline: none;
  -webkit-appearance: none;
  appearance: none;
  transition: border-bottom-color 0.4s ease;
}
#alpha-gate .field input:focus { border-bottom-color: var(--aeon-silver-deep); }
#alpha-gate .field input:focus-visible { outline: none; box-shadow: none; }
#alpha-gate .field input:-webkit-autofill {
  -webkit-text-fill-color: var(--aeon-ink);
  box-shadow: 0 0 0 1000px var(--aeon-bg) inset;
  transition: background-color 9999s ease-out;
}
#alpha-gate .gate-button {
  width: 100%;
  min-height: 54px;
  margin-top: 6px;
  padding: 0 16px;
  border: 1px solid rgba(233, 238, 238, 0.28);
  border-radius: 3px;
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 15px;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
  cursor: pointer;
  transition: border-color 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), opacity 0.16s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#alpha-gate .gate-button:active { background: rgba(233, 238, 238, 0.06); }
#alpha-gate .gate-button[aria-busy="true"] { padding-right: 16px; }
#alpha-gate .gate-button[aria-busy="true"]::after { content: none; }
#alpha-gate .gate-note { margin: -8px 0 0; font-size: 12px; line-height: 1.6; color: var(--aeon-ink-soft); }
#alpha-gate .form-error {
  min-height: 20px;
  margin: -6px 0 0;
  color: var(--aeon-warn);
  font-weight: 500;
  font-size: 13px;
  line-height: 1.55;
}
/* l1:忘记密码 / 返回登录 两条小链;找回密码表单只在 reset 步出现 */
#alpha-gate .gate-link { justify-self: start; margin: -4px 0 0; padding: 0; border: 0; background: none; color: var(--aeon-ink-soft); font-size: 12.5px; letter-spacing: 0.04em; text-decoration: underline dotted; text-underline-offset: 3px; cursor: pointer; }
#alpha-gate .gate-reset { display: none; }
#alpha-gate[data-step="reset"] .gate-reset { display: grid; }
#alpha-gate[data-step="reset"] #gate-form { display: none; }
#alpha-gate .gate-reset-title { margin: 0; font-family: var(--aeon-serif); font-weight: 400; font-size: 20px; line-height: 1.5; color: var(--aeon-ink); }
#alpha-gate .gate-reset-stage2 { display: grid; gap: 22px; }
#alpha-gate .gate-reset-stage2[hidden] { display: none; }
#alpha-gate .yao-divider { margin: auto 2px 22px; padding-top: 34px; color: var(--aeon-ink-soft); }
#alpha-gate .gate-foot {
  margin: 0;
  text-align: center;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}

@media (prefers-reduced-motion: no-preference) {
  #alpha-gate:not([data-step="welcome"]) .gate-stage { animation: aeon-gate-drift 0.9s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
  #alpha-gate[data-step="reset"] .gate-reset { animation: aeon-gate-drift 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
}
@media (prefers-reduced-motion: reduce) {
  #alpha-gate .gate-welcome .ob-screen,
  #alpha-gate .gate-welcome .ob-brand,
  #alpha-gate .gate-welcome .ob-fu i.ret,
  #alpha-gate .gate-welcome .ob-cta--breathe { animation: none; }
}

@keyframes aeon-gate-drift {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}

.today-card,
.profile-summary-card,
.core-card {
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: var(--shadow);
}

.page-title-row,
.detail-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
}

/* aeon 纸感胶囊（onboarding 暗场实例由 #onboarding .ob-langs 全量覆盖） */
.language-switch {
  display: inline-flex;
  padding: 3px;
  border: 0.5px solid #e1dacc;
  border-radius: 999px;
  background: #fbf8f1;
}

.language-switch button {
  min-width: 44px;
  padding: 8px 12px;
  border-radius: 999px;
  color: #7c736a;
  background: transparent;
  font-weight: 500;
  font-size: 12.5px;
  letter-spacing: 0.08em;
}

.language-switch button.active {
  color: #201b16;
  background: #ece6da;
}

.language-switch.compact button {
  min-width: 34px;
  padding: 6px 8px;
}

.page-title-row h1,
.detail-header h1 {
  margin: 0;
  font-size: 24px;
  line-height: 1.18;
  letter-spacing: 0;
}

.page-title-row p,
.detail-header p,
.today-card p,
.ask-cta p {
  margin: 8px 0 0;
  color: var(--muted);
  line-height: 1.55;
}

.field {
  display: grid;
  gap: 7px;
  color: #201b16;
  font-weight: 500;
}

.field span {
  font-size: 13px;
  color: #7c736a;
}

.field small {
  color: #7c736a;
  font-weight: 400;
  line-height: 1.45;
}

.date-input-pair {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 54px;
  gap: 8px;
  align-items: center;
}

.date-input-pair input[type="date"] {
  min-width: 0;
  padding: 13px 8px;
  color: transparent;
}

.date-input-pair input[type="date"]::-webkit-calendar-picker-indicator {
  opacity: 1;
  cursor: pointer;
}

.field input,
.field select,
.field textarea,
.ask-input-bar textarea {
  width: 100%;
  border: 0.5px solid #e1dacc;
  border-radius: 12px;
  background: #fbf8f1;
  color: #201b16;
  padding: 13px 14px;
  outline: none;
  font-size: 16px;
}

.field input:focus,
.field select:focus,
.field textarea:focus,
.ask-input-bar textarea:focus {
  border-color: rgba(92, 122, 75, 0.6);
  box-shadow: 0 0 0 3px rgba(92, 122, 75, 0.12);
}

.field.invalid input,
.field.invalid select,
.field.invalid textarea {
  border-color: rgba(176, 87, 58, 0.7);
  box-shadow: 0 0 0 3px rgba(176, 87, 58, 0.12);
}

.field-error {
  min-height: 18px;
  color: #b0573a;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.35;
}

/* —— 出生地联想下拉（搜索式；onboarding 暗场 / me 亮场分别着色） —— */
.loc-pop {
  margin-top: 8px;
  border-radius: 12px;
  overflow: hidden;
}
.loc-pop .loc-opt {
  display: block;
  width: 100%;
  text-align: left;
  padding: 12px 14px;
  border: 0;
  background: transparent;
  font-size: 14.5px;
  font-weight: 400;
  cursor: pointer;
}
.loc-pop .loc-hint {
  padding: 10px 14px 4px;
  font-size: 12px;
  letter-spacing: 0.02em;
}
.loc-note {
  margin: 8px 0 0;
  font-size: 12.5px;
  line-height: 1.6;
  font-weight: 400;
}
/* 选中确认：玉绿宝石点 + 一句确认（引导用户走向"选中"而非裸输） */
.loc-note.ok {
  display: flex;
  align-items: center;
  gap: 7px;
}
.loc-note.ok::before {
  content: "";
  flex: none;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, #93b077 0%, #5c7a4b 55%, #435c36 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(30, 24, 12, 0.34),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25),
    0 0 0 0.5px rgba(67, 92, 54, 0.5);
}
#page-me .loc-pop {
  border: 0.5px solid var(--aeon-line);
  background: var(--aeon-raised);
}
#page-me .loc-pop .loc-opt { color: var(--aeon-ink); }
#page-me .loc-pop .loc-opt:active,
#page-me .loc-pop .loc-opt.hot { background: var(--aeon-sunken); }
#page-me .loc-note.ok { color: var(--aeon-green-deep); }
#page-me .field input.loc-ok { border-color: rgba(92, 122, 75, 0.55); }
#page-me .loc-pop .loc-opt + .loc-opt { border-top: 0.5px solid var(--aeon-line); }
#page-me .loc-pop .loc-hint { color: var(--aeon-ink-soft); }
#page-meihua .loc-pop,
#page-xiaoliuren .loc-pop,
#page-qimen .loc-pop {
  border: 0.5px solid var(--aeon-line);
  background: var(--aeon-raised);
}
#page-meihua .loc-pop .loc-opt,
#page-xiaoliuren .loc-pop .loc-opt,
#page-qimen .loc-pop .loc-opt { color: var(--aeon-ink); }
#page-meihua .loc-pop .loc-opt:active,
#page-meihua .loc-pop .loc-opt.hot,
#page-xiaoliuren .loc-pop .loc-opt:active,
#page-xiaoliuren .loc-pop .loc-opt.hot,
#page-qimen .loc-pop .loc-opt:active,
#page-qimen .loc-pop .loc-opt.hot { background: var(--aeon-sunken); }
#page-meihua .loc-pop .loc-opt + .loc-opt,
#page-xiaoliuren .loc-pop .loc-opt + .loc-opt,
#page-qimen .loc-pop .loc-opt + .loc-opt { border-top: 0.5px solid var(--aeon-line); }
#page-meihua .loc-pop .loc-hint,
#page-xiaoliuren .loc-pop .loc-hint,
#page-qimen .loc-pop .loc-hint,
#page-meihua .loc-note,
#page-xiaoliuren .loc-note,
#page-qimen .loc-note { color: var(--aeon-ink-soft); }
#page-meihua .loc-note.ok,
#page-xiaoliuren .loc-note.ok,
#page-qimen .loc-note.ok { color: var(--aeon-green-deep); }
#page-meihua .mh-line.loc-ok,
#page-xiaoliuren .cast-line.loc-ok,
#page-qimen .cast-line.loc-ok { border-color: rgba(92, 122, 75, 0.55); }
#onboarding .loc-pop {
  border: 1px solid rgba(233, 238, 238, 0.14);
  background: rgba(28, 23, 16, 0.96);
}
#onboarding .loc-pop .loc-opt { color: var(--aeon-ink-ondark, #f1ebe0); }
#onboarding .loc-pop .loc-opt:active,
#onboarding .loc-pop .loc-opt.hot { background: rgba(233, 238, 238, 0.08); }
#onboarding .loc-note.ok { color: #93b077; }
#onboarding .ob-line.loc-ok { border-bottom-color: rgba(147, 176, 119, 0.7); }
#onboarding .loc-pop .loc-opt + .loc-opt { border-top: 0.5px solid rgba(233, 238, 238, 0.09); }
#onboarding .loc-pop .loc-hint { color: #a89d8d; }
#onboarding .loc-note { color: #a89d8d; }

.form-error {
  min-height: 22px;
  margin: 10px 0;
  color: var(--red);
  font-weight: 700;
  line-height: 1.4;
}

.change-summary {
  padding: 12px 14px;
  border: 1px solid rgba(211, 168, 79, 0.45);
  border-radius: 14px;
  background: var(--gold-soft);
  color: #4b3b15;
  line-height: 1.45;
}

.change-summary p {
  margin: 6px 0 0;
}

.form-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

.primary-button,
.secondary-button,
.ghost-button,
.send-button {
  position: relative;
  min-height: 44px;
  border-radius: 14px;
  padding: 0 16px;
  font-weight: 800;
  transition: transform 0.16s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow 0.16s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.16s cubic-bezier(0.2, 0.7, 0.2, 1);
}

button[aria-busy="true"] {
  padding-right: 38px;
}

button[aria-busy="true"]::after {
  content: "";
  position: absolute;
  right: 13px;
  top: 50%;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  border-radius: 50%;
  border: 2px solid currentColor;
  border-right-color: transparent;
  opacity: 0.85;
  animation: spin 0.72s linear infinite;
}

/* aeon 按钮族：主按钮=墨底纸字，次按钮=凹陷纸，幽灵/文字按钮=玉绿深 */
.primary-button,
.send-button {
  background: #201b16;
  color: #f4f1e8;
  box-shadow: none;
}

.secondary-button {
  background: #ece6da;
  color: #201b16;
}

.ghost-button,
.icon-button {
  color: #7c736a;
  background: transparent;
  border: 0.5px solid #e1dacc;
}

.text-button {
  min-height: 34px;
  padding: 0 8px;
  border: 0;
  background: transparent;
  color: #435c36;
  font-weight: 500;
}

.wide {
  width: 100%;
}

/* C-7①:按压即刻可见 —— 原来只有 1px 下沉 + 0.99 缩放,在 46–66px 的整行按钮上肉眼看不见,
   暗底页(暗壳/起卦暗场/术法页)更是一点亮度变化都没有。补一档轻压暗,任何底色上都读得出来。
   不给它加过渡:按下要"立刻",这一下的即时性就是跟手感本身。
   各处现役 :active(换底/换色)照旧叠加,本条只做那层共同的基线。 */
button:active {
  transform: translateY(1px) scale(0.99);
  opacity: 0.68;
}
/* 已禁用的按钮不吃按压态(它本来就 0.62,再压一下会闪) */
button:disabled:active {
  transform: none;
  opacity: 0.62;
}

.page {
  display: none;
}

.page.active {
  display: block;
  animation: page-in 0.22s ease both;
}

.today-card {
  position: relative;
  min-height: 128px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 20px;
  overflow: hidden;
}

.today-card::before {
  content: "";
  position: absolute;
  inset: -40px -30px auto auto;
  width: 190px;
  height: 190px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(223, 241, 233, 0.9), transparent 64%);
}

.section-label {
  display: inline-flex;
  color: var(--jade);
  font-weight: 800;
  font-size: 14px;
}

.today-card h1 {
  position: relative;
  margin: 8px 0 0;
  font-size: 24px;
  line-height: 1.28;
  letter-spacing: 0;
}

.sun-token {
  flex: 0 0 auto;
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 50% 50%, #fff7dc 0 32%, transparent 33%),
    conic-gradient(from 25deg, #eacb79, #fbf0d4, #d6a545, #eacb79);
  border: 4px solid #fff7e1;
  box-shadow: inset 0 0 0 1px rgba(180, 134, 44, 0.24);
}

.quick-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
  margin: 18px 0;
}

.quick-grid button {
  min-width: 0;
  display: grid;
  justify-items: center;
  gap: 5px;
  padding: 8px 2px;
  color: var(--text);
  background: transparent;
}

.quick-grid b {
  font-size: 16px;
}

.quick-grid small {
  color: var(--muted);
  font-size: 12px;
  white-space: nowrap;
}

.icon-button svg,
.section-title-icon svg,
.ask-cta-icon svg {
  width: 28px;
  height: 28px;
  stroke: currentColor;
  fill: none;
  stroke-width: 2.1;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.topic-grid-wrap h2 {
  margin: 0;
  font-size: 18px;
  line-height: 1.25;
}

.section-title-with-icon {
  display: inline-flex;
  align-items: center;
  gap: 9px;
}

.section-title-icon {
  width: 30px;
  height: 30px;
  border-radius: 12px;
  display: grid;
  place-items: center;
  color: var(--jade-dark);
  background: var(--jade-soft);
}

.section-title-icon svg {
  width: 20px;
  height: 20px;
  stroke-width: 2.2;
}

.window-list,
.continue-list {
  display: grid;
  gap: 10px;
}

.ask-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 120px;
  margin-top: 14px;
  padding: 18px;
  border-radius: var(--radius);
  color: #fff;
  background:
    linear-gradient(135deg, rgba(255, 255, 255, 0.12), transparent 42%),
    linear-gradient(135deg, var(--jade-dark), #2b8b73);
  box-shadow: 0 16px 32px rgba(23, 101, 83, 0.22);
}

.ask-cta > div {
  flex: 1 1 auto;
  min-width: 0;
}

.ask-cta-icon {
  flex: 0 0 auto;
  width: 54px;
  height: 54px;
  display: grid;
  place-items: center;
  border-radius: 18px;
  color: #fff;
  background: rgba(255, 255, 255, 0.16);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18);
}

.ask-cta-icon svg {
  width: 31px;
  height: 31px;
}

.ask-cta h2 {
  margin: 0;
  font-size: 23px;
  line-height: 1.2;
}

.ask-cta p {
  color: rgba(255, 255, 255, 0.82);
}

.round-arrow {
  flex: 0 0 auto;
  width: 58px;
  height: 58px;
  border-radius: 50%;
  background: #fbf0d4;
  color: var(--jade-dark);
  font-size: 28px;
  font-weight: 900;
}

.bottom-nav {
  position: fixed;
  left: 50%;
  bottom: max(10px, var(--safe-bottom));
  transform: translateX(-50%);
  z-index: 20;
  /* transform 一项是 A5 加的:底栏让位是"沉下去"不是"闪没";起卦态另有 2.6s 整组过渡覆盖本行。 */
  transition: opacity 0.28s ease, transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  width: min(calc(100% - 24px), 440px);
  min-height: 66px;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 4px;
  padding: 8px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 22px;
  background: var(--aeon-raised);
  box-shadow: 0 8px 26px rgba(32, 27, 22, 0.1);
  /* 施工卡 H·H1①:backdrop-filter: blur(10px) 撤。
     底色 --aeon-raised(#fbf8f1 / 暗态 #1c1610)本来就是不透明色,这层糊在正常渲染下
     一点用处都没有 —— 它只在 iOS 上作恶:opacity:0 并不停用 backdrop-filter,
     于是一个"看不见的底栏"仍在糊它身后的东西(Ryan 两图:会话底部、选人 sheet 下沿)。
     与 G10 顶栏同法:上下都不糊。 */
  /* 显示这一档不延时,隐藏那一档等淡出走完再撤 visibility(见下方各隐藏路径) */
  visibility: visible;
}

.bottom-nav button {
  position: relative;
  display: grid;
  place-items: center;
  gap: 2px;
  min-width: 0;
  min-height: 46px;
  border-radius: 17px;
  color: var(--aeon-ink-soft);
  background: transparent;
  transition: color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
}

/* 选中态:文字加深加重(无绿线、无光晕);未选中转淡灰,靠文字对比 */
.bottom-nav b {
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  letter-spacing: 0.01em;
  line-height: 1;
  color: var(--aeon-ink-soft);
  font-weight: 500;
}
.bottom-nav button.active b {
  color: var(--aeon-ink);
  font-weight: 700;
}

/* 中间「问事」核心键 = 复卦 + 文字 */
/* 施工卡 L·L1「签内落位与字距重校」:复卦标从 34px 缩到 24px 之后,钮内多出 5.9px 富余,
   而钮是 grid、align-content 缺省 stretch —— 富余被平摊进两行,把声明的 4px 字距顶成实测 6.95px
   (旧几何 50.5px 撑满钮高、无富余可摊,所以这条一直没露头)。改 align-content: center:
   富余一律留在整块之外,标与「问事」实测回到 4px,整块在钮内上下对称居中。 */
.bottom-nav .nav-center {
  gap: 4px;
  align-content: center;
}
/* 施工卡 I·I2「疏密点修」:隙 2.6→3.2(隙厚比 0.87→1.07,靠拢六爻水印的 1.18)——
   底栏这一枚是全族最挤的一件,六根条 3px 厚只留 2.6px 空,真机上读成"一坨"。条厚 3 不动。
   —— I2 的几何档已由施工卡 L 收走,下面 L1 为现行值;此段留作沿革。 */
/* 施工卡 L·L1「复卦标精修」(总控 08-26 终裁,母题 = 命盘六爻水印同比缩小):
   ① 条厚 3→2、行距 3.2→2.4(隙厚比 1.07→1.2,正落母题 5/3.5≈1.43 与旧值之间、贴住族内参照);
   ② 阳爻宽 22→19.5;总高 6×2 + 5×2.4 = 24px(旧 6×3 + 5×3.2 = 34px);
   ③ 阴爻缺口:旧 gradient 40%/60% 硬截 = 缺口占 20%,比母题(7/46 ≈ 15.2%)阔一截,
      读成"断得太开";改中缺 3px、两段各 8.25px → 缺口比 3/19.5 = 15.38%,与母题同口径。
      缺口端点写成 px 常量(见 --nav-yin-seg / --nav-yin-cut),比 42.3%/57.7% 更实,
      且亮暗两态共用同一处几何,不会各写各的漂开。
   ④ 端头 radius 1.5→0.5:1.5 = 条厚 3 的一半 = 全圆,药丸感的元凶;0.5 近方,回到"线条"。
   取色/透明度档照施工卡 I 终态不动(ink-soft;未选 .55 / 当前页 .8);
   暗态那两条规则只跟随本卡几何,取色(月光银)/透明度(.6)/box-shadow 三档零接触。 */
.bottom-nav .nav-fu {
  /* 阴爻缺口几何单一出处:亮态、暗态同引,暗态只换取色不换几何 */
  --nav-yin-seg: 8.25px; /* 左段终点 = 段长 */
  --nav-yin-cut: 11.25px; /* 缺口终点 = 8.25 + 中缺 3 */
  display: flex;
  flex-direction: column;
  gap: 2.4px;
  align-items: center;
}
.bottom-nav .nav-fu .ln {
  width: 19.5px;
  height: 2px;
  border-radius: 0.5px;
}
/* 亮态:阴爻 = 断线 + 0.5px 白高光浮雕;阳爻 = 玉绿三停渐变 + 微玉光 */
/* 施工卡 I·I1「材质两族制」:自定青灰 #8c9694 退役(它既不是月光银也不是墨,是族里第三套材质),
   改 --aeon-ink-soft 为基;未选 .55 档(与 me-fu 品牌印同档,底栏在非当前页时安静下去),
   当前页选中态 .8 档(总控 08-25 终裁③:实渲约 143,既贴住换材质前的现役观感 151、
   又与未选 .55 档拉开层次;先前照现役 opacity 的 .96 会把选中态压到 122,深过头)——
   选中靠"墨色加深"表达,与本栏文字选中态同一套语言。
   暗态(body.shell-dark)那条月光银规则在下方,同特异度后置,故暗态零接触。 */
.bottom-nav .nav-fu .ln.yin {
  background: linear-gradient(90deg, var(--aeon-ink-soft) 0 var(--nav-yin-seg), transparent var(--nav-yin-seg) var(--nav-yin-cut), var(--aeon-ink-soft) var(--nav-yin-cut));
  box-shadow: 0 0.5px 0 rgba(255, 255, 255, 0.55);
  opacity: 0.55;
}
.bottom-nav button.active .nav-fu .ln.yin {
  opacity: 0.8;
}
.bottom-nav .nav-fu .ln.yang {
  background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep));
  box-shadow: 0 0.5px 0 rgba(255, 255, 255, 0.4), 0 0 4px rgba(147, 176, 119, 0.28);
  opacity: 1;
}
/* 暗态(命盘):阴爻转月光银、去亮底高光;阳爻玉绿微光增强 */
/* 施工卡 L 注:本条只把缺口端点换成上面那对几何变量(同一枚小标不该亮暗两套缺口比)——
   取色 --aeon-silver、透明度 .6、box-shadow: none 三档一字不动,合"暗轨档零接触"。 */
body.shell-dark .bottom-nav .nav-fu .ln.yin {
  background: linear-gradient(90deg, var(--aeon-silver) 0 var(--nav-yin-seg), transparent var(--nav-yin-seg) var(--nav-yin-cut), var(--aeon-silver) var(--nav-yin-cut));
  box-shadow: none;
  opacity: 0.6;
}
body.shell-dark .bottom-nav .nav-fu .ln.yang {
  box-shadow: 0 0 5px rgba(147, 176, 119, 0.4);
}

/* ===== Aeon · 底栏 token(明暗联动) =====
   token 自挂 .bottom-nav 自身,绝不进全局 :root;
   亮态=暖宣纸系,暗态(命盘 chart, body.shell-dark)=暗底 + 月光银玉光。 */
.bottom-nav {
  --aeon-bg: #f4f1e8;
  --aeon-ink: #201b16;
  --aeon-ink-soft: #7c736a;
  --aeon-raised: #fbf8f1;
  --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
}
body.shell-dark .bottom-nav {
  --aeon-ink: #f1ebe0;
  --aeon-ink-soft: #b3a896;
  --aeon-raised: #1c1610;
  --aeon-line: rgba(185, 194, 194, 0.2);
  --aeon-silver: #b9c2c2;
}

/* 底部浮层(术语/线索/政策/确认)打开时底栏安静让位——不与浮层争底部,也根治真机上合成层导致的 z 序穿帮 */
/* H1②:淡出走完再撤 visibility(CSS 延时法,不挂 JS 监听)——只降 opacity 的元素在 iOS 上
   仍是一个活着的合成层,该占的位、该糊的糊一样不落。三条隐藏路径同法。 */
body.sheet-open .bottom-nav {
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  transition: opacity 0.16s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0.18s;
}

/* —— 底栏暗态描边/投影(极淡月光银玉光,非霓虹) —— */
body.shell-dark .bottom-nav {
  box-shadow:
    inset 0 0.5px 0 rgba(233, 238, 238, 0.06),
    0 10px 30px rgba(0, 0, 0, 0.45);
}


.ask-page {
  padding-bottom: calc(var(--ask-nav-space) + var(--ask-composer-space) + 32px + var(--safe-bottom));
  scroll-padding-bottom: calc(var(--ask-nav-space) + var(--ask-composer-space) + 18px + var(--safe-bottom));
}

.ask-thread {
  display: grid;
  gap: 12px;
  margin-top: 16px;
  min-height: 220px;
  padding-bottom: calc(var(--ask-nav-space) + var(--ask-composer-space) + 32px + var(--safe-bottom));
}

.ask-input-bar {
  position: fixed;
  left: 50%;
  bottom: calc(var(--ask-nav-space) + var(--safe-bottom));
  transform: translateX(-50%);
  z-index: 21;
  width: min(calc(100% - 24px), 440px);
  display: grid;
  /* 卡G·G1:三列 —— ＋钮 | textarea | 发送。原先只有两列(1fr auto),卡B 塞进 ＋钮后自动布局串位:
     ＋钮占了 1fr 那一格,textarea 被挤进 auto 窄格(实测仅 177px),发送键被顶到第二行。
     列位一律显式指派(见 #page-ask 段),不靠自动流 —— ＋钮会隐、chip 会现,自动流一变就散。 */
  grid-template-columns: auto 1fr auto;
  gap: 8px;
  padding: 8px;
  border: 1px solid var(--line);
  border-radius: 22px;
  background: rgba(255, 255, 255, 0.96);
  box-shadow: 0 10px 30px rgba(29, 65, 55, 0.14);
}

.ask-input-bar textarea {
  /* A13:起高 58→48(单行更轻);多行照旧自动长高,上限 132 不动。JS 侧 resizeAskInput 同值。 */
  min-height: 48px;
  max-height: 132px;
  resize: none;
  border-radius: 16px;
  line-height: 1.35;
  overflow: hidden;
}

.ask-input-bar.has-ask-answer {
  padding: 7px;
  border-radius: 20px;
}

.ask-input-bar.has-ask-answer textarea {
  min-height: 48px;
}

.ask-input-bar.composer-ready {
  border-color: rgba(47, 131, 109, 0.55);
  box-shadow: 0 12px 34px rgba(29, 65, 55, 0.2), 0 0 0 3px rgba(47, 131, 109, 0.1);
}

.ask-input-bar[aria-busy="true"] textarea,
.ask-input-bar textarea:disabled {
  background: #f5f8f6;
  color: var(--muted);
}

.send-button {
  align-self: end;
  min-width: 68px;
}

.message {
  max-width: 92%;
  border-radius: 18px;
  padding: 13px 14px;
  line-height: 1.55;
}

.message.user {
  justify-self: end;
  color: #fff;
  background: var(--jade);
  border-bottom-right-radius: 6px;
}

.message.assistant {
  justify-self: start;
  background: #fff;
  border: 1px solid var(--line);
  border-bottom-left-radius: 6px;
}

.message h3 {
  margin: 0 0 8px;
  font-size: 17px;
}

.message p {
  margin: 8px 0 0;
}

.answer-summary {
  display: grid;
  gap: 8px;
  margin: 10px 0;
}

.answer-chip {
  border-left: 3px solid var(--jade);
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--jade-soft);
}

.answer-product-note {
  color: var(--muted);
  font-size: 0.68rem;
  line-height: 1.35;
  margin: 2px 0 0;
  opacity: 0.68;
  text-align: center;
}

.answer-details {
  margin-top: 10px;
  border-top: 1px solid var(--line);
  padding-top: 10px;
}

.answer-details summary {
  font-weight: 800;
  color: var(--jade-dark);
}

.answer-flow {
  display: grid;
  gap: 12px;
  margin-top: 14px;
}

.followups {
  display: grid;
  gap: 8px;
  overflow: visible;
  padding: 10px 0 0;
  margin-top: 2px;
}

.followups.pending {
  color: var(--muted);
  font-size: 0.92rem;
  line-height: 1.5;
}

.followups button {
  width: 100%;
  border-radius: 14px;
  padding: 9px 12px;
  color: var(--jade-dark);
  background: var(--jade-soft);
  white-space: normal;
  text-align: left;
  line-height: 1.45;
}

.new-answer-cue {
  position: fixed;
  left: 50%;
  bottom: calc(174px + var(--safe-bottom));
  transform: translateX(-50%);
  z-index: 22;
  width: min(calc(100% - 48px), 360px);
  min-height: 42px;
  border: 0;
  border-radius: 999px;
  color: #fff;
  background: rgba(23, 101, 83, 0.96);
  font-weight: 900;
  box-shadow: 0 12px 26px rgba(23, 101, 83, 0.2);
  cursor: pointer;
  touch-action: manipulation;
  pointer-events: auto;
}

.new-answer-cue[hidden] {
  display: none;
}

/* 施工卡 C·C-2(版面纯洁令):.thinking-bubble / .advisor-pulse / .thinking-text /
   .wait-actions 四件整体退役 —— 老待答泡是六爻仪式之前的旧 UI(翡翠转圈+粗体判词),
   与暗场仪式并存就成了 Ryan 真机看见的那一闪。渲染路径已在 app.js 拆净,样式不留残件。
   随之无主的 @keyframes breathe 与 .thinking-dots / @keyframes dot-rise 一并撤下(见下方各处)。 */

.text-button.danger {
  color: #b0573a;
}

/* C-2:.thinking-dots(金色跳点)随老待答泡退役——暗场里的呼吸点是 #page-ask .ask-dots 那一套(仪式件) */

.profile-summary-card,
.core-card {
  padding: 16px;
  margin-top: 14px;
}

.profile-summary-card h2,
.core-card h2 {
  margin: 0 0 8px;
}

.profile-summary-card p,
.core-card p,
.chart-entry-list span,
.detail-body p {
  color: var(--muted);
  line-height: 1.55;
}

.tag-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}

.tag {
  display: inline-flex;
  align-items: center;
  min-height: 30px;
  padding: 0 10px;
  border-radius: 999px;
  color: var(--jade-dark);
  background: var(--jade-soft);
  font-weight: 700;
  font-size: 13px;
}

.chart-entry-list {
  display: grid;
  gap: 10px;
  margin-top: 14px;
}

.chart-entry-list button {
  min-height: 78px;
  display: grid;
  gap: 5px;
  text-align: left;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 16px;
  color: var(--text);
  background: #fff;
}

.topic-grid-wrap {
  margin-top: 18px;
}

.topic-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  margin-top: 10px;
}

.topic-grid button {
  min-height: 72px;
  border-radius: 16px;
  color: var(--jade-dark);
  background: var(--jade-soft);
  font-weight: 900;
}

.explore-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.explore-sections {
  grid-template-columns: 1fr;
  gap: 16px;
}

.explore-layer {
  display: grid;
  gap: 10px;
}

.explore-layer header {
  display: grid;
  gap: 4px;
}

.explore-layer h2 {
  margin: 0;
  font-size: 18px;
  line-height: 1.25;
}

.explore-layer p {
  margin: 0;
  color: var(--muted);
  line-height: 1.5;
}

.explore-card-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
}

/* （旧探索网格的 .explore-grid button 规则已删：它会命中新探索页里"看建议"等所有按钮，
    强加 min-height:132/display:grid 造成错位；新探索卡由 #page-explore .ex-* 全量自持。） */

.module-status {
  width: max-content;
  max-width: 100%;
  padding: 5px 8px;
  border-radius: 999px;
  color: var(--jade-dark);
  background: var(--jade-soft);
  font-size: 11px;
  font-weight: 900;
}

.explore-grid b {
  font-size: 17px;
}

.explore-grid small {
  color: var(--muted);
  line-height: 1.35;
}

.topic-score-ring {
  width: 92px;
  height: 92px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  text-align: center;
  background:
    radial-gradient(circle at center, #fff 0 55%, transparent 56%),
    conic-gradient(var(--jade) calc(var(--score) * 1%), #e8efeb 0);
  color: var(--jade-dark);
}

.topic-score-ring b {
  font-size: 24px;
  line-height: 1;
}

.topic-score-ring small {
  max-width: 58px;
  color: var(--muted);
  font-size: 10px;
  line-height: 1.15;
}

.basis-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}

.basis-list span {
  padding: 7px 10px;
  border-radius: 999px;
  color: var(--jade-dark);
  background: var(--jade-soft);
  font-size: 12px;
  font-weight: 800;
}

.chart-caption {
  margin: 10px 0 0;
  font-size: 13px;
}

.followups.stacked {
  display: grid;
  overflow: visible;
}

.followups.stacked button {
  width: 100%;
  display: grid;
  gap: 4px;
  border-radius: 14px;
  text-align: left;
  white-space: normal;
  line-height: 1.45;
}

.followups.stacked span {
  color: var(--jade-dark);
  font-size: 12px;
  font-weight: 900;
}

.basis-points {
  margin: 10px 0 0;
  padding-left: 20px;
  color: var(--muted);
  line-height: 1.6;
}

.muted-line {
  color: var(--muted);
  font-size: 13px;
}

.chart-page > .wide {
  margin-top: 12px;
}

.bazi-board header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}

.bazi-board h2 {
  margin: 3px 0 0;
}

.bazi-pillar-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
}

.chart-insight-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin-top: 12px;
}

.term-link {
  display: inline;
  min-height: 0;
  padding: 0 2px;
  border: 0;
  border-bottom: 1px dotted currentColor;
  border-radius: 0;
  background: transparent;
  color: var(--jade-dark);
  font: inherit;
  font-weight: 900;
  vertical-align: baseline;
}

.settings-row {
  display: grid;
  gap: 4px;
  text-align: left;
  padding: 10px 0;
  border: 0;
  border-bottom: 1px solid var(--line);
  border-radius: 0;
  background: transparent;
  color: var(--text);
}

.settings-row small {
  color: var(--muted);
  line-height: 1.35;
}

.desktop-context-panel {
  display: none;
  transition: opacity 2.6s cubic-bezier(0.4, 0, 0.2, 1);
}

.desktop-context-card {
  display: grid;
  gap: 9px;
  padding: 15px;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.92);
  box-shadow: 0 10px 24px rgba(29, 65, 55, 0.06);
}

.desktop-context-card h2 {
  margin: 0;
  font-size: 18px;
  line-height: 1.25;
}

.desktop-context-card p {
  margin: 0;
  color: var(--muted);
  line-height: 1.5;
}

.desktop-prompt-list {
  display: grid;
  gap: 8px;
}

.desktop-prompt-list button {
  min-height: 42px;
  border-radius: 13px;
  padding: 10px 12px;
  background: var(--jade-soft);
  color: var(--jade-dark);
  text-align: left;
  line-height: 1.4;
  font-weight: 800;
}
/* —— 桌面右栏 · Aeon 对齐(作用域仅右栏,旧全站样式不动):
   mono 小标 + 衬线正文;创造之绿只点不铺——追问从绿底块改发丝描边行,玉点作前缀。 —— */
.desktop-context-panel .desktop-context-card {
  border: 1px solid #e1dacc;
  border-radius: 14px;
  background: #fbf8f1;
  box-shadow: none;
}
.desktop-context-panel .section-label {
  font-family: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  font-size: 10px;
  font-weight: 400;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #7c736a;
  background: none;
  padding: 0;
}
.desktop-context-panel .desktop-context-card h2 {
  font-family: "Newsreader", "Source Han Serif SC", "Songti SC", Georgia, serif;
  font-weight: 500;
  color: #201b16;
}
.desktop-context-panel .desktop-context-card p {
  color: #7c736a;
  font-size: 13.5px;
}
.desktop-context-panel .basis-list span {
  background: transparent;
  border: 1px solid #e1dacc;
  color: #5d5346;
  font-weight: 500;
}
.desktop-context-panel .desktop-prompt-list button {
  background: transparent;
  border: 1px solid #e1dacc;
  color: #201b16;
  font-family: "Newsreader", "Source Han Serif SC", "Songti SC", Georgia, serif;
  font-weight: 400;
  font-size: 14px;
  position: relative;
  padding-left: 26px;
}
.desktop-context-panel .desktop-prompt-list button::before {
  content: "";
  position: absolute;
  left: 12px;
  top: 50%;
  width: 6px;
  height: 6px;
  margin-top: -3px;
  border-radius: 50%;
  background: radial-gradient(circle at 34% 30%, #93b077, #5c7a4b 58%, #435c36);
  box-shadow: inset -0.5px -0.5px 1px rgba(28, 42, 20, 0.5), inset 0.5px 0.5px 1px rgba(255, 255, 255, 0.55);
}
.desktop-context-panel .desktop-prompt-list button:hover {
  border-color: #5c7a4b;
  background: rgba(92, 122, 75, 0.05);
}


.detail-page {
  padding-bottom: calc(24px + var(--safe-bottom));
}

.detail-header {
  align-items: center;
  margin-bottom: 16px;
}

.icon-button {
  flex: 0 0 auto;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 24px;
  font-weight: 900;
}

.detail-body {
  display: grid;
  gap: 12px;
}

.detail-section {
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: #fff;
}

.detail-section h2,
.detail-section h3 {
  margin: 0 0 8px;
}

.pillar-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}

.pillar-card {
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 12px;
  background: #fff;
}

.pillar-card b {
  display: block;
  font-size: 22px;
}

/* 共享底部浮层（设计系统 §三配方）：遮罩 + 自底升起的暖宣纸卡；policy / term / confirm 共用 */
.sheet {
  position: fixed;
  inset: 0;
  z-index: 60;
  background: rgba(23, 18, 13, 0.42);
  animation: aeon-sheet-fade 0.32s ease;
}

.sheet article {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  width: auto;
  max-width: 480px;
  margin: 0 auto;
  max-height: 78vh;
  overflow-y: auto;
  padding: 24px 24px calc(28px + var(--safe-bottom, 0px));
  border-radius: 22px 22px 0 0;
  background: #fbf8f1;
  color: #201b16;
  box-shadow: 0 -18px 44px rgba(23, 18, 13, 0.3);
  animation: aeon-sheet-up 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
}

@keyframes aeon-sheet-fade { from { opacity: 0; } }
@keyframes aeon-sheet-up { from { transform: translateY(102%); } }
@media (prefers-reduced-motion: reduce) {
  .sheet,
  .sheet article { animation: none; }
}

#policy-close {
  position: absolute;
  top: 12px;
  right: 12px;
}

/* 法律文档页(隐私政策/服务条款/免责声明):日常亮色纯排版——标题 serif、正文 sans、既有纸色 token。
   文档较长,面板较普通 sheet 加宽加高;DRAFT 抬头、草稿注记与占位符按 Ryan 指示原样呈现。
   变量作用域守则:--aeon-serif 定义在本 sheet 根上,不入全局 :root。 */
#policy-sheet article {
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  max-width: 640px;
  max-height: 88vh;
}
#policy-sheet #policy-title {
  margin: 2px 0 0;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #7c736a;
}
.policy-doc {
  font-family: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
}
.policy-doc h1 {
  margin: 8px 0 4px;
  font-family: var(--aeon-serif);
  font-size: 21px;
  font-weight: 600;
  line-height: 1.4;
}
.policy-doc h2 {
  margin: 22px 0 6px;
  font-family: var(--aeon-serif);
  font-size: 16.5px;
  font-weight: 600;
  line-height: 1.45;
}
.policy-doc p {
  margin: 10px 0;
  font-size: 14px;
  line-height: 1.7;
  color: #201b16;
}
.policy-doc .doc-note {
  font-size: 12.5px;
  color: #7c736a;
  border-left: 2px solid #e1dacc;
  padding-left: 10px;
}
.policy-doc ul {
  margin: 10px 0;
  padding-left: 20px;
  display: grid;
  gap: 6px;
}
.policy-doc li {
  font-size: 14px;
  line-height: 1.65;
}
.policy-doc strong {
  font-weight: 600;
}

/* front-a·临时协议眉行：占位页顶部一行 mono 小字(正式协议上线前适用) */
.policy-doc .doc-interim {
  margin: 0 0 2px;
  font-family: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #7c736a;
}

#term-close {
  position: absolute;
  top: 12px;
  right: 12px;
}

.term-sheet {
  align-items: end;
}

.term-sheet article {
  width: min(100%, 520px);
  max-height: min(78vh, 680px);
  overflow: auto;
  border-radius: 22px 22px 0 0;
}

.term-sheet h2 {
  margin: 10px 44px 12px 0;
  font-size: 24px;
}

.term-section {
  padding: 12px 0;
  border-top: 1px solid var(--line);
}

.term-section h3 {
  margin: 0 0 7px;
  color: var(--jade-dark);
  font-size: 15px;
}

.term-section p {
  margin: 0 0 8px;
  color: var(--text);
  line-height: 1.65;
}

.term-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding-top: 10px;
}

.term-chip-row .term-link {
  display: inline-flex;
  min-height: 32px;
  align-items: center;
  padding: 0 10px;
  border: 1px solid rgba(47, 131, 109, 0.2);
  border-radius: 999px;
  background: var(--jade-soft);
  font-size: 13px;
}

/* aeon 安静提示：纸感药丸，一句话，不打钩不喊叫 */
.toast {
  position: fixed;
  left: 50%;
  bottom: calc(170px + var(--safe-bottom));
  transform: translateX(-50%);
  z-index: 70;
  min-width: 140px;
  max-width: calc(100% - 40px);
  padding: 11px 18px;
  border-radius: 999px;
  color: #201b16;
  background: rgba(251, 248, 241, 0.97);
  border: 0.5px solid #e1dacc;
  text-align: center;
  font-weight: 500;
  font-size: 13.5px;
  box-shadow: 0 10px 24px rgba(23, 18, 13, 0.14);
  animation: toast-in 0.2s ease both;
}

.empty-state {
  padding: 22px;
  border: 1px dashed var(--line);
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.72);
  text-align: center;
}

.empty-state.with-art::before {
  content: "";
  display: block;
  width: 88px;
  height: 64px;
  margin: 0 auto 10px;
  background: var(--empty-art) center / contain no-repeat;
}

.empty-state.empty-saved {
  --empty-art: url("./assets/lingjing-empty-saved-alpha.svg");
}

.empty-state p {
  color: var(--muted);
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes slow-rotate {
  to {
    transform: rotate(360deg);
  }
}

@keyframes counter-rotate {
  to {
    transform: rotate(-360deg);
  }
}

/* C-2:@keyframes breathe(advisor-pulse 的呼吸环)与 @keyframes dot-rise(thinking-dots 的跳点)
   两支随老待答泡退役,全库已无引用。ob-*-breathe / obr-plate-breathe 是另一支(起盘揭示),不受影响。 */

@keyframes orbit-left {
  0%,
  100% {
    transform: translateX(0);
  }
  55% {
    transform: translateX(30px);
  }
}

@keyframes orbit-right {
  0%,
  100% {
    transform: translateX(0);
  }
  55% {
    transform: translateX(-30px);
  }
}

@keyframes relation-node {
  0%,
  35%,
  100% {
    opacity: 0;
    transform: scale(0.78);
  }
  55%,
  82% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes pulse-dot {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(47, 131, 109, 0);
    transform: scale(0.86);
  }
  50% {
    box-shadow: 0 0 0 7px rgba(47, 131, 109, 0.12);
    transform: scale(1);
  }
}

@keyframes page-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes toast-in {
  from {
    opacity: 0;
    transform: translate(-50%, 8px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}

@media (min-width: 860px) {
  .main-app {
    max-width: 980px;
  }

  .page.active {
    max-width: 760px;
    margin: 0 auto;
  }

  .ask-page {
    padding-bottom: calc(var(--ask-composer-space) + 32px);
    scroll-padding-bottom: calc(var(--ask-composer-space) + 32px);
  }

  .ask-input-bar {
    bottom: 18px;
  }

  .quick-grid {
    max-width: 520px;
  }

  .bottom-nav {
    left: max(18px, calc(50% - 540px));
    top: 132px;
    bottom: auto;
    transform: none;
    width: 86px;
    min-height: 0;
    grid-template-columns: 1fr;
    gap: 6px;
    border-radius: 24px;
  }

  .bottom-nav button {
    min-height: 62px;
  }

  .bottom-nav b {
    font-size: 11px;
  }

  .explore-card-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .explore-layer[data-layer="core"] .explore-card-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (min-width: 1180px) {
  .main-app {
    width: min(100% - 48px, 1240px);
    max-width: none;
    display: grid;
    grid-template-columns: 86px minmax(0, 760px) minmax(260px, 320px);
    gap: 22px;
    align-items: start;
    padding-left: 0;
    padding-right: 0;
  }

  .page.active {
    grid-column: 2;
    width: 100%;
    max-width: none;
    margin: 0;
  }

  .desktop-context-panel {
    display: grid;
    grid-column: 3;
    gap: 12px;
    position: sticky;
    top: 18px;
  }

  .bottom-nav {
    left: auto;
    right: calc(50% + 514px);
    top: 96px;
  }

  .ask-input-bar {
    left: calc(50% - 78px);
    width: min(760px, calc(100% - 470px));
  }

  .new-answer-cue {
    left: calc(50% - 78px);
  }
}

@media (max-width: 560px) {
  .explore-grid {
    grid-template-columns: 1fr;
  }

  /* 施工卡 C·C-3(D2):键盘让位整组迁出本断点 —— 见文件尾「C-3 键盘不遮」段。
     原四条的病:①composer 按布局视口算底距,iOS 上直接坐进键盘里 ②滚动锚点写在 .ask-page
     (它不是滚动容器,那句从未生效) ③聚焦即抽掉底栏那 86px 让位空间,文档一涨一缩,收键盘就跳
     ④底栏那条没有 :not(.ask-casting) 守卫,暗场里与 2.6s 染暗过渡打架
     ⑤断点 ≤560px 比 A5 底栏让位的 ≤859.98px 窄,561–859 的机器根本没让位。 */

  .topic-score-ring {
    width: 86px;
    height: 86px;
    justify-self: start;
  }

  .new-answer-cue {
    bottom: calc(174px + var(--safe-bottom));
  }

  .bazi-board header {
    display: grid;
  }

  .bazi-pillar-grid,
  .chart-insight-grid {
    grid-template-columns: 1fr;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation: none !important;
    transition: none !important;
  }
}

/* ===== Aeon · ASK page (self-hosted fonts + tokens scoped to #page-ask only) ===== */
#page-ask {
  --aeon-bg: #f4f1e8;
  --aeon-ink: #201b16;
  --aeon-ink-soft: #7c736a;
  --aeon-ink-faint: #a89d8d; /* 施工卡 A:比次墨再退一档的落款级灰(免责一行/分组眉/复制 icon 用) */
  --aeon-raised: #fbf8f1;
  --aeon-sunken: #ece6da;
  --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn: #b0573a;
  --aeon-green-jade: radial-gradient(circle at 34% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 52%, var(--aeon-green-deep) 100%);
  --aeon-bg-dark: #17120d;
  --aeon-ink-ondark: #f1ebe0;
  --aeon-ink-ondark-soft: #a89d8d;
  --aeon-silver: #b9c2c2;
  --aeon-silver-hi: #e9eeee;
  --aeon-silver-deep: #7f8c8c;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  margin: -18px -16px 0;
  padding: 22px 24px calc(var(--ask-nav-space) + var(--ask-composer-space) + 22px + var(--safe-bottom));
  min-height: 100vh; min-height: 100dvh;
  /* 白条根治·单一染暗源：问事页底色统一由根画布 html 一个源承载（html:has(body.page-ask) 挂
     2.6s 过渡，常态同为 #f4f1e8；body 与本层皆透明）。本层绝不再画第二份背景——两个背景就有两拍。 */
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}
/* 内容层在水印之上；起卦时整体柔和淡出，让位给水印 + 静心 */
#page-ask .page-title-row,
#page-ask .ask-thread {
  position: relative;
  z-index: 2;
  transition: opacity 0.85s cubic-bezier(0.22, 0.61, 0.36, 1);
}
#page-ask.ask-casting .page-title-row,
#page-ask.ask-casting .ask-thread {
  opacity: 0;
  pointer-events: none;
}
#page-ask.ask-casting .ask-input-bar {
  opacity: 0;
  transform: translate(-50%, 14px);
  pointer-events: none;
}
/* 09-27 复验截图:暗场里低余量提示条(还剩 N 次)亮着一块,随输入条一起隐去 */
#page-ask.ask-casting .ask-quota-note { opacity: 0; pointer-events: none; transition: opacity 0.6s ease; }
/* 起卦仪式时隐去底部导航(仅 ask 起卦态,作用域 body.ask-casting,不影响其它页常态);
   2.6s 淡出与 #page-ask 背景变暗同步——底栏一边淡出、一边露出其下变暗的页面背景,自然带暗、不割裂。 */
body.ask-casting .bottom-nav {
  opacity: 0;
  pointer-events: none;
  /* H1②:暗场里这条尤其要紧 —— 一个看不见却仍在糊的底栏,正压在仪式最需要干净的那一刻。
     既有 2.6s 各项时长一字未动,只在过渡链末尾追加 visibility,等染暗走完再撤。 */
  visibility: hidden;
  background: rgba(23, 18, 13, 0);
  border-color: transparent;
  box-shadow: none;
  -webkit-backdrop-filter: blur(0px);
  backdrop-filter: blur(0px);
  transition:
    opacity 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    background-color 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    border-color 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-backdrop-filter 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    backdrop-filter 2.6s cubic-bezier(0.4, 0, 0.2, 1),
    visibility 0s linear 2.6s;
}
/* 桌面右侧上下文栏(档案/追问/收藏)同属日常亮层:起卦仪式须与底栏同拍让位,
   否则桌面宽度下暗场旁悬着三块亮卡、仪式不成立(移动端单列不显示此栏,不受影响)。 */
body.ask-casting .desktop-context-panel {
  opacity: 0;
  pointer-events: none;
}

/* —— header ——
   施工卡 C·C-1:眉行/说明文的 DOM 已在 index.html 整块退役(见该处注),原三条选择器
   (.ask-eyebrow / html[lang=zh-CN] .ask-eyebrow / .page-title-row p)一并撤下,不留死规则。
   题名从此恒是窄栏那一枚 serif 15px:空态显「问事/Ask」,会话中显线程题名——同一副面孔。 */
#page-ask .page-title-row {
  align-items: center;
}
#page-ask .page-title-row h1 {
  margin: 0;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: 0.05em;
  color: var(--aeon-ink);
}
#page-ask .icon-button {
  border: 0.5px solid var(--aeon-line);
  background: var(--aeon-raised);
  color: var(--aeon-ink-soft);
}

/* —— thread —— */
#page-ask .ask-thread {
  display: flex;
  flex-direction: column;
  gap: 18px;
  /* C-1:窄栏成常态后,空态/会话中同取 16px(原空态 18/会话 16 两档并作一档) */
  margin-top: 16px;
  min-height: 200px;
  padding-bottom: 8px;
}

/* —— cardASKUX 空态：一句引导 + 三个可见开头，不再轮播隐藏语料 ——
   施工卡 C·C-1 按样张三(ask-shell-panorama e1)重定比例:大标题块已撤,问候块整体下移出呼吸,
   开头三句短句化后一行一条,水印从此落在开头条之后、不再夹在两段文字中间。
   段间距由 .yao-divider 的上下 margin 独任(故 .ask-rest 的 flex gap 归零,避免双计)。
   卡G·G6:段距 26→18 收紧。上距仍取 58 —— 实测过三档后按数收的:
     · 真·垂直居中(margin auto 得到自由空间时)在 375×812 上算出来开头条首条落 345,
       水印(fixed top 43% = 286–412)正好压在「提示行~开头条」那道缝上,违 G6 断言;
     · 上距 42 断言过得去,但整块贴到 135,离 composer 空出 238px,头重脚轻;
     · 上距 58 = 问候 h2 顶落 150,与样张三 .empty padding-top 同值,首条开头落 273 < 286,
       缝与水印不相交 —— 断言与样张两头都对得上,取这一档。
   margin: auto 0 原样留着(有自由空间时仍居中,这是原版行为)。 */
#page-ask .ask-rest {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 0;
  margin: auto 0;
  padding: 58px 2px 30px;
}
#page-ask .ask-empty-copy {
  max-width: 330px;
}
#page-ask .ask-empty-copy h2 {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: clamp(20px, 5.6vw, 22px);
  font-weight: 500;
  line-height: 1.42;
  letter-spacing: 0.02em;
  color: var(--aeon-ink);
}
#page-ask .ask-empty-copy p {
  max-width: 300px;
  margin: 10px auto 0;
  font-size: 13px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-starters {
  display: grid;
  width: min(100%, 390px);
  gap: 8px;
}
#page-ask .ask-starter {
  width: 100%;
  padding: 12px 14px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 14px;
  background: rgba(251, 248, 241, 0.72);
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 14px;
  line-height: 1.5;
  text-align: left;
  cursor: pointer;
  transition: border-color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1), background-color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-starter:active {
  background: var(--aeon-sunken);
  transform: translateY(1px);
}

/* —— messages —— */
#page-ask .message {
  max-width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
}
#page-ask .message.user {
  align-self: flex-end;
  max-width: 82%;
  color: var(--aeon-ink);
  background: var(--aeon-sunken);
  font-family: var(--aeon-serif);
  font-size: 16px;
  line-height: 1.5;
  padding: 11px 15px;
  border-radius: 15px 15px 4px 15px;
}
/* 卡G·G2:助手正文撤卡 —— 底/边/影/内 padding 全撤,回到样张三定稿的「无框直排」。
   原来这张 rgba(251,248,241,.82) 白卡 + 0 8px 24px 投影同时罩住现答与回放,
   Ryan 真机点破的「大白卡」就是它;两者本就该同一体例,撤了自然同。
   上距取 10px,与 .ask-thread 的 18px gap 合成 28px = 样张三 .ans 的 margin-top。 */
#page-ask .message.assistant {
  align-self: flex-start;
  width: min(100%, 620px);
  margin-top: 10px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  /* 起卦回亮时把答案起点锚到接近顶部（见 anchorAskAnswerStart），留一点呼吸。
     G10:28→88 —— 顶栏是 sticky 且高 ≈76px,原来 28 的留白等于把答案首行锚到栏底下,
     首句被压住。糊一撤这事就藏不住了,索性把留白让到栏下 12px。 */
  scroll-margin-top: 88px;
}
#page-ask .ask-time-divider {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 5px 0 1px;
  color: var(--aeon-ink-soft);
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
#page-ask .ask-time-divider::before,
#page-ask .ask-time-divider::after {
  content: "";
  height: 0.5px;
  flex: 1;
  background: linear-gradient(90deg, transparent, var(--aeon-line));
}
#page-ask .ask-time-divider::after {
  background: linear-gradient(90deg, var(--aeon-line), transparent);
}

/* —— answer (编辑式正文 + 参考线索 + 追问) —— */
#page-ask .ask-answer {
  display: flex;
  flex-direction: column;
}
/* 施工卡 A·A3:署名标缩成角落细字 —— 标不删(它是"这句话谁说的"的落款),但退到次墨、
   字距放到 .22em、三爻小标压薄一档;每屏的绿只留给发送键,署名不再抢眼。 */
#page-ask .ask-answer-tag {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
  margin-bottom: 13px;
}
#page-ask .ask-mk {
  display: flex;
  flex-direction: column;
  gap: 2.5px;
}
/* 施工卡 I·I1「材质两族制」:标识语言归墨族 —— 自定灰 #9c948a 退役,改 --aeon-ink-soft 为基、
   靠 opacity 分阶(本件 .8,比 me-fu 的 .55 深一阶:小标嵌在正文行里,浅了就断气)。
   几何(14×1.5、隙 2.5、圆角 1)按 I3 一概不动 —— 病根是三套取色材质,不是这一件压扁。 */
#page-ask .ask-mk span {
  width: 14px;
  height: 1.5px;
  border-radius: 1px;
  background: var(--aeon-ink-soft);
  opacity: 0.8;
}
#page-ask .ask-mk span.yin {
  background: linear-gradient(90deg, var(--aeon-ink-soft) 0 38%, transparent 38% 62%, var(--aeon-ink-soft) 62%);
}
/* 施工卡 A·A1:.ask-answer-headline 一族样式已退役 —— 答案不再有标题位,判词就是正文首句
   (走下面的 .ask-answer-body p.lead)。揭示序列里那几处 .ask-answer-headline 选择器留着不动:
   元素已不产出,选择器自然空转,动它就等于动零接触的流式揭示节奏。
   注意「静心行原位开口 19px」那条(本文件 .ask-status.speak)不受影响,它是仪式件。 */
#page-ask .ask-answer-body p {
  margin: 0 0 11px;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.72;
  color: var(--aeon-ink);
}
#page-ask .ask-answer-body p:last-child {
  margin-bottom: 0;
}
/* 施工卡 A·A11:短列表回来了 —— 不用浏览器默认圆点(那是网页味),用一枚素点「·」挂在行首,
   与正文同 serif、同墨色,只是行距略紧一档。粗体同理:加重半档,不换色不换字体。 */
#page-ask .ask-answer-body ul,
#page-ask .ask-answer-body ol {
  margin: 2px 0 13px;
  padding-left: 0;
  list-style: none;
}
#page-ask .ask-answer-body li {
  position: relative;
  padding-left: 16px;
  font-family: var(--aeon-serif);
  font-size: 15px;
  line-height: 1.8;
  color: var(--aeon-ink);
}
/* R4 孤点根治:素点从 li 挪到它的文本单元 .ask-sent 上 ——
   原先点挂在 li(不受揭示门控),文本却在 .ask-sent 里(被门控按到 opacity:0),
   于是整个揭示窗口(最长 7.3 秒)里每条列表项都是「一枚点 + 看不见的字」,
   就是 Ryan 23:56 截图里那个只剩「·」的第二项。
   现在点与文同属一个元素、同一份 animation-delay,同生共死:没有文本就没有点。
   定位仍解到 li(li 是 position:relative,.ask-sent 是 inline、不产生包含块),
   left:3px 与原值一致,几何一像素不动。 */
#page-ask .ask-answer-body li > .ask-sent::before {
  content: "·";
  position: absolute;
  left: 3px;
  font-weight: 700;
  color: var(--aeon-ink-soft);
}
/* 09-26:数字序号列表保留序号(素字、不加重),点位与素点同几何 */
#page-ask .ask-answer-body ol.ask-list-num { counter-reset: aeon-li; list-style: none; }
#page-ask .ask-answer-body ol.ask-list-num > li { counter-increment: aeon-li; }
#page-ask .ask-answer-body ol.ask-list-num > li > .ask-sent::before {
  content: counter(aeon-li) ".";
  left: 0;
  font-weight: 400;
  font-family: var(--aeon-mono);
  font-size: 12.5px;
  top: 0.18em;
}
#page-ask .ask-answer-body b {
  font-weight: 600;
}
/* 收尾短语（后端 reading.closingLine 存在才显示；小字、克制、留白，不抢答案风头）*/
#page-ask .ask-closing {
  margin: 14px 0 0;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  font-style: italic;
  line-height: 1.62;
  color: var(--aeon-ink-soft);
}

/* —— 揭示态：逐句慢浮（答案单元默认隐藏，仅 .go 才逐个浮入；从空白开始、消除整篇闪现穿帮）—— */
#page-ask .ask-answer.pending .ask-answer-tag,
#page-ask .ask-answer.pending .ask-boundary-rule,
#page-ask .ask-answer.pending .ask-caveat,
#page-ask .ask-answer.pending .ask-answer-headline,
#page-ask .ask-answer.pending .ask-sent,
#page-ask .ask-answer.pending .ask-closing,
#page-ask .ask-answer.pending .ask-traceback,
#page-ask .ask-answer.pending .ask-psignal,
#page-ask .ask-answer.pending .ask-amend,
#page-ask .ask-answer.pending .ask-clarify-hint,
#page-ask .ask-answer.pending .ask-followups,
#page-ask .ask-answer.pending .ask-answer-foot {
  opacity: 0;
}
#page-ask .ask-answer.go .ask-sent {
  opacity: 0;
  animation: ask-sent-fade 1s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;
}
#page-ask .ask-answer.go .ask-answer-tag,
#page-ask .ask-answer.go .ask-boundary-rule,
#page-ask .ask-answer.go .ask-caveat,
#page-ask .ask-answer.go .ask-answer-headline,
#page-ask .ask-answer.go .ask-closing,
#page-ask .ask-answer.go .ask-traceback,
#page-ask .ask-answer.go .ask-psignal,
#page-ask .ask-answer.go .ask-amend,
#page-ask .ask-answer.go .ask-clarify-hint,
#page-ask .ask-answer.go .ask-followups,
#page-ask .ask-answer.go .ask-answer-foot {
  opacity: 0;
  animation: ask-unit-rise 0.95s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;
}
@keyframes ask-sent-fade {
  from { opacity: 0; filter: blur(2px); }
  to { opacity: 1; filter: blur(0); }
}
@keyframes ask-unit-rise {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}

/* —— 直答段轻加重:首段=结论,字级+半档;详解段常规——结构分层靠排版,不加标签 —— */
#page-ask .ask-answer-body p.lead {
  font-size: 17px;
  line-height: 1.66;
  font-weight: 500;
}

/* —— 流式出答:正文随流生长;段落一次性浮入,银墨光标呼吸 —— */
#page-ask .ask-stream-body p.rise {
  animation: ask-sent-fade 0.9s cubic-bezier(0.22, 0.61, 0.36, 1) backwards;
}
#page-ask .ask-stream-body p.live::after {
  content: "";
  display: inline-block;
  width: 2px;
  height: 1.02em;
  margin-left: 3px;
  vertical-align: -0.16em;
  border-radius: 1px;
  background: linear-gradient(180deg, var(--aeon-silver-hi), var(--aeon-silver-deep));
  animation: ask-caret-breath 1.15s ease-in-out infinite;
}
@keyframes ask-caret-breath {
  0%, 100% { opacity: 0.15; }
  45% { opacity: 0.85; }
}
#page-ask .message.stream-out {
  opacity: 0;
  transition: opacity 0.6s ease;
}
/* 低端机/手动轻量(body.lite-motion,单源见 aeonReduceMotion):
   常驻循环动画一律停——呼吸点/光标/环转保留终态,不再耗合成帧;一次性揭示动效由 JS 侧同源归零。 */
body.lite-motion .ask-dots i,
body.lite-motion #page-ask .ask-stream-body p.live::after,
body.lite-motion .today-ring,
body.lite-motion .obr-spin,
body.lite-motion #page-ask.ask-casting .ask-wm.hold .bar.ret.lit .seg {
  animation: none !important;
}
body.lite-motion #page-ask .ask-stream-body p.rise {
  animation: none !important;
}
body.lite-motion #page-ask .ask-drawer,
body.lite-motion #page-ask .ask-drawer-backdrop,
body.lite-motion #page-ask .ask-starter {
  transition: none !important;
}
/* —— 定稿交接:正文与品牌标已在眼前不重播;补充单元(标题/收尾/线索/追问/脚注)错拍浮入 —— */
#page-ask .ask-answer.pending-x .ask-answer-headline,
#page-ask .ask-answer.pending-x .ask-caveat,
#page-ask .ask-answer.pending-x .ask-closing,
#page-ask .ask-answer.pending-x .ask-traceback,
#page-ask .ask-answer.pending-x .ask-psignal,
#page-ask .ask-answer.pending-x .ask-amend,
#page-ask .ask-answer.pending-x .ask-clarify-hint,
#page-ask .ask-answer.pending-x .ask-followups,
#page-ask .ask-answer.pending-x .ask-answer-foot {
  opacity: 0;
}
#page-ask .ask-answer.go-x .ask-answer-headline,
#page-ask .ask-answer.go-x .ask-caveat,
#page-ask .ask-answer.go-x .ask-closing,
#page-ask .ask-answer.go-x .ask-traceback,
#page-ask .ask-answer.go-x .ask-psignal,
#page-ask .ask-answer.go-x .ask-amend,
#page-ask .ask-answer.go-x .ask-clarify-hint,
#page-ask .ask-answer.go-x .ask-followups,
#page-ask .ask-answer.go-x .ask-answer-foot {
  opacity: 0;
  animation: ask-unit-rise 0.95s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;
}

/* —— 合规边界应答:有温度的界线,不是错误 ——
   暖赭短痕(爻形一笔)+ 柔化标题色;绝不用错误红/警告图标/加框。正文文案由后端温和书写。 */
#page-ask .ask-answer-boundary .ask-boundary-rule {
  display: block;
  width: 34px;
  height: 2px;
  border-radius: 1px;
  margin: 2px 0 12px;
  background: linear-gradient(90deg, var(--aeon-warn-hi, #c97a5c), var(--aeon-warn) 62%, transparent);
  opacity: 0.6;
}
/* A1:界线卡的标题降档规则随标题位一并退役;界线的语气现由暖赭短痕 + 正文承担。 */
#page-ask .ask-answer-boundary .ask-closing {
  color: #8a6a55; /* 收尾回暖:欢迎继续问的那句,带一点暖赭 */
}

/* —— 参考线索回溯（玉绿宝石点 + 宫名，可点解释）—— */
#page-ask .ask-sub-label {
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
  margin-bottom: 9px;
}
#page-ask .ask-traceback {
  margin-top: 16px;
  padding-top: 14px;
  border-top: 0.5px solid var(--aeon-line);
}
#page-ask .ask-traceback .ask-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
#page-ask .ask-chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 12px 6px 9px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 999px;
  background: var(--aeon-raised);
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  color: var(--aeon-ink);
  cursor: pointer;
}
#page-ask .ask-chip:active {
  background: var(--aeon-sunken);
}
#page-ask .ask-traceback-wait {
  font-size: 12.5px;
  color: var(--aeon-ink-soft);
}
#page-ask .jade-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: 0 0 auto;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 55%, var(--aeon-green-deep) 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(30, 24, 12, 0.34),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25),
    0 0 0 0.5px rgba(67, 92, 54, 0.5),
    0 1px 2px rgba(67, 92, 54, 0.24);
}

/* —— 渐进追问 —— */
#page-ask .ask-followups {
  margin-top: 18px;
}
#page-ask .ask-followups button {
  display: block;
  width: 100%;
  margin-top: 8px;
  padding: 10px 14px;
  border: 0.5px solid var(--aeon-green);
  border-radius: 14px;
  background: transparent;
  color: var(--aeon-green-deep);
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  line-height: 1.45;
  text-align: left;
  cursor: pointer;
}
#page-ask .ask-followups button:active {
  background: rgba(92, 122, 75, 0.08);
}

/* —— retry / foot —— */
#page-ask .ask-retry {
  margin-top: 14px;
  padding: 11px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 12px;
  background: var(--aeon-raised);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  cursor: pointer;
}
/* 施工卡 A·A2+A9:答案尾栏只剩一枚复制 icon —— 免责注上移成 composer 下方全局一行,
   分隔的横线也一并撤(没有第二样东西要隔开了),尾栏靠留白收口。 */
#page-ask .ask-answer-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 10px;
}
#page-ask .ask-copy {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--aeon-ink-faint);
  cursor: pointer;
  transition: color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-copy:active {
  background: var(--aeon-sunken);
}
#page-ask .ask-copy .ic-tick,
#page-ask .ask-copy.copied .ic-copy {
  display: none;
}
#page-ask .ask-copy.copied .ic-tick {
  display: block;
}
#page-ask .ask-copy.copied {
  color: var(--aeon-green-deep);
}
/* 只给读屏的轻播报口:不占位、不进视觉,也不用 display:none(那样读屏也听不见) */
.ask-live-quiet {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* —— Ask 合参 · 起课停顿（素行定稿）：停顿生在起卦仪式暗场里——六爻凝住、静心行原位开口、四径素行 ——
   全部取既有语言:正文行排版(.ask-answer-body 同值)、揭示单元浮现(ask-unit-rise/ask-sent-fade 复用)、
   暗场发丝线族 rgba(185,194,194,0.14)、mono 记录行、text-button 形确认钮。 */
/* 让位:水印上移(top 过渡已并入 .ask-wm 本体),静心行随行 */
#page-ask.ask-pausing .ask-wm { top: 31%; }
#page-ask.ask-pausing .ask-status { top: calc(31% + 118px); }
/* 静心行原位开口:同元素同 serif,升为答案标题字级(19px=.ask-answer-headline 同值) */
#page-ask .ask-status.speak { font-size: 19px; color: var(--aeon-ink-ondark); letter-spacing: 0.02em; }
#page-ask .ask-status.speak .ask-dots { display: none; }
/* 六爻凝住:玉绿阳爻辉光微呼吸(既有 lit 辉光的呼吸化,无新材质) */
#page-ask.ask-casting .ask-wm.hold .bar.ret.lit .seg { animation: ask-wm-ret-breath 3.4s ease-in-out infinite; }
@keyframes ask-wm-ret-breath {
  0%, 100% { box-shadow: 0 0 18px rgba(147, 176, 119, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.5); }
  50% { box-shadow: 0 0 12px rgba(147, 176, 119, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.5); }
}
/* 四径块:静心行下方,素行无卡 */
#page-ask .ask-pause {
  position: fixed;
  left: 50%;
  top: calc(31% + 118px + 44px);
  transform: translateX(-50%);
  width: min(calc(100vw - 56px), 340px);
  z-index: 3;
  text-align: left;
  transition: opacity 0.85s cubic-bezier(0.22, 0.61, 0.36, 1); /* 退场=内容让位同拍 */
}
#page-ask .ask-pause[hidden] { display: none; }
#page-ask .ask-pause.out { opacity: 0; pointer-events: none; }
/* 单元浮现=现役揭示语言(关键帧复用上方 ask-unit-rise/ask-sent-fade,错拍由 JS 赋 delay) */
#page-ask .ask-pause .u { opacity: 0; }
#page-ask .ask-pause.go .u { animation: ask-unit-rise 0.95s cubic-bezier(0.22, 0.61, 0.36, 1) forwards; }
/* LOCK-H8 #10:危险题停顿面板顶部一句现实建议——比邀请句更实、更亮一档,下方发丝线与起局四径分开 */
#page-ask .ask-pause .pz-reality {
  margin: 0 0 14px;
  padding: 0 0 12px;
  border-bottom: 0.5px solid rgba(233, 229, 217, 0.16);
  font-family: var(--aeon-serif);
  font-size: 15px;
  line-height: 1.72;
  color: var(--aeon-ink-ondark, #f1ebe0);
}
#page-ask .ask-pause .pz-msg {
  margin: 0 0 14px;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.72;
  color: var(--aeon-ink-ondark-soft);
}
/* 素行四径:正文行语言 + 暗场发丝线;四路同级同形 */
#page-ask .ask-pause .pz-opt {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  width: 100%;
  padding: 12px 2px;
  border: 0;
  background: transparent;
  text-align: left;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.5;
  color: var(--aeon-ink-ondark);
  border-bottom: 0.5px solid rgba(185, 194, 194, 0.14);
  cursor: pointer;
}
#page-ask .ask-pause .pz-rows .pz-opt:first-child { border-top: 0.5px solid rgba(185, 194, 194, 0.14); }
#page-ask .ask-pause .pz-opt:active { color: var(--aeon-silver-hi); }
/* 回显记录行(mono)与输入 */
#page-ask .ask-pause .pz-echo {
  margin: 4px 0 0;
  font-family: var(--aeon-mono);
  font-size: 13px;
  letter-spacing: 0.06em;
  color: var(--aeon-silver);
  opacity: 0;
  min-height: 18px;
}
#page-ask .ask-pause .pz-echo.in { animation: ask-sent-fade 1s cubic-bezier(0.22, 0.61, 0.36, 1) forwards; }
/* 报数轻提示:填了但不合规时就地一行"差在哪"——温和引导,不用警示色、不打断 */
#page-ask .ask-pause .pz-nudge {
  margin: 4px 0 0;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--aeon-ink-ondark-soft);
}
#page-ask .ask-pause .pz-input {
  width: 100%;
  margin-top: 6px;
  padding: 10px 0;
  background: transparent;
  border: 0;
  border-bottom: 0.5px solid rgba(185, 194, 194, 0.3);
  border-radius: 0;
  font-family: var(--aeon-mono);
  font-size: 16px;
  letter-spacing: 0.06em;
  color: var(--aeon-ink-ondark);
  outline: none;
}
#page-ask .ask-pause .pz-input::placeholder { color: var(--aeon-ink-ondark-soft); opacity: 0.7; }
/* 外应多行输入(梅花第五径):长文本用正文 serif、发丝线下边界——mono 不合长文本,仍是既有语言 */
#page-ask .ask-pause .pz-omen {
  width: 100%;
  margin-top: 6px;
  padding: 10px 0;
  min-height: 76px;
  background: transparent;
  border: 0;
  border-bottom: 0.5px solid rgba(185, 194, 194, 0.3);
  border-radius: 0;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.72;
  color: var(--aeon-ink-ondark);
  outline: none;
  resize: none;
}
#page-ask .ask-pause .pz-omen::placeholder { color: var(--aeon-ink-ondark-soft); opacity: 0.7; }
/* 确认/换一种:text-button 形,暗场取既有 token 色;未输入完整时确认钮不可用(红线:无预填、有门禁) */
#page-ask .ask-pause .pz-actions { display: flex; gap: 18px; margin-top: 16px; align-items: center; }
#page-ask .ask-pause .pz-actions .go-btn { min-height: 34px; padding: 0 8px; background: transparent; border: 0; color: var(--aeon-green-hi); font-weight: 500; font-size: 14.5px; font-family: var(--aeon-sans); cursor: pointer; }
#page-ask .ask-pause .pz-actions .go-btn:disabled { opacity: 0.35; pointer-events: none; }
#page-ask .ask-pause .pz-actions .back-btn { min-height: 34px; padding: 0 8px; background: transparent; border: 0; color: var(--aeon-ink-ondark-soft); font-size: 13.5px; font-family: var(--aeon-sans); cursor: pointer; }
/* 报数三框(008 号令):框式门禁,不足不亮确认;mono 居中,窄框同语言 */
#page-ask .ask-pause .pz-num-row { display: flex; gap: 12px; }
#page-ask .ask-pause .pz-num-row .pz-input { flex: 1; min-width: 0; text-align: center; }
/* 后端打回一行(bounce):温和暖赭,人话说明差在哪——不用惊叹号、不露技术名 */
#page-ask .ask-pause .pz-nudge.pz-bounce { color: rgba(201, 122, 92, 0.92); }
/* 停顿面板内地点联想下拉:暗场皮肤(与 onboarding 同语言)+ 选中玉痕;裸文本不算已确认地址 */
#page-ask .ask-pause .loc-pop { border: 1px solid rgba(233, 238, 238, 0.14); background: rgba(28, 23, 16, 0.96); }
#page-ask .ask-pause .loc-pop .loc-opt { color: var(--aeon-ink-ondark, #f1ebe0); }
#page-ask .ask-pause .loc-pop .loc-opt:active,
#page-ask .ask-pause .loc-pop .loc-opt.hot { background: rgba(233, 238, 238, 0.08); }
#page-ask .ask-pause .loc-pop .loc-opt + .loc-opt { border-top: 0.5px solid rgba(233, 238, 238, 0.09); }
#page-ask .ask-pause .loc-pop .loc-hint { color: #a89d8d; }
#page-ask .ask-pause .loc-note { color: #a89d8d; }
#page-ask .ask-pause .loc-note.ok { color: #93b077; }
#page-ask .ask-pause .pz-input.loc-ok { border-bottom-color: rgba(147, 176, 119, 0.7); }
/* 减弱动效:直接给终态(全局 reduce 规则会杀动画,这里补透明度终点,与现役揭示同法) */
@media (prefers-reduced-motion: reduce) {
  #page-ask .ask-pause .u,
  #page-ask .ask-pause .pz-echo.in { opacity: 1; }
}

/* —— input bar (Aeon raised) —— */
#page-ask .ask-input-bar {
  border: 0.5px solid var(--aeon-line);
  background: rgba(251, 248, 241, 0.97);
  box-shadow: 0 10px 30px rgba(46, 38, 28, 0.12);
  border-radius: 22px;
  /* bottom 一项是 A5 加的:底栏让位时 composer 贴底,要跟着底栏一个拍子走。
     opacity/transform 两项是起卦让位原值,一字未动。 */
  transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.22, 0.61, 0.36, 1), bottom 0.32s cubic-bezier(0.22, 0.61, 0.36, 1);
}
/* 施工卡 A·A2:免责收成 composer 下方一行(全局唯一一处),不再逐答重复。
   它是 composer 的第二行、跨满两列 —— composer 自己是 fixed,所以各断点/键盘让位/起卦淡出
   全都天然带着它走,不需要第二套定位。 */
#page-ask .ask-lawline {
  grid-column: 1 / -1;
  margin: 3px 0 1px;
  font-family: var(--aeon-sans);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  line-height: 1.4;
  text-align: center;
  /* G10:落款级灰在 10.5px 上已经读不清了,升一档到次墨;字级不动(样张三同为小字一行) */
  color: var(--aeon-ink-soft);
}
#page-ask .ask-input-bar textarea {
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
  background: var(--aeon-raised);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
  font-size: 14.5px;
}
#page-ask .ask-input-bar textarea::placeholder {
  color: var(--aeon-ink-soft);
}
#page-ask .ask-input-bar.composer-ready {
  border-color: rgba(92, 122, 75, 0.5);
  box-shadow: 0 12px 34px rgba(46, 38, 28, 0.16), 0 0 0 3px rgba(92, 122, 75, 0.12);
}
/* 玉绿宝石发送键(DESIGN-SYSTEM §3.4;A12 按 composer 新比例收到 38px,并补"无字=灰玉不亮"态) */
#page-ask .send-button {
  position: relative;
  align-self: end;
  width: 38px;
  min-width: 38px;
  height: 38px;
  /* 按钮族基样式给了 min-height:44px(触达尺寸兜底);圆钮 38 比它小,不解掉这道闸
     珠子就会被撑成椭圆(38×44)。触达面由 composer 内的留白与整条输入条承担。 */
  min-height: 38px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  color: transparent;
  font-size: 0;
  cursor: pointer;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 56%, var(--aeon-green-deep) 100%);
  box-shadow:
    inset -1px -2px 3px rgba(30, 24, 12, 0.32),
    inset 1px 1.4px 1.6px rgba(255, 255, 255, 0.3),
    0 0 0 0.5px rgba(67, 92, 54, 0.5),
    0 2px 6px rgba(67, 92, 54, 0.3);
  transition: background 0.24s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow 0.24s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .send-button::after {
  content: "→";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  font-weight: 600;
  color: #f4f6f1;
}
/* 卡G·G9:「空文=灰玉不亮」整套退役 —— 那是卡A 我方超出样张三的发挥,样张里玉珠常亮。
   现在无字时珠子照亮,点它无动作、不发送、不弹提示(见 app.js handleAsk 的静默守卫)。
   真被 disabled 的那一档保留:那是"这颗钮此刻按不动"的如实回执,与"没写字"不是一回事。 */
#page-ask .send-button:disabled {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.72) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, #cfd3c9 0%, #b4b8ad 56%, #8f9488 100%);
  box-shadow:
    inset -1px -2px 3px rgba(30, 24, 12, 0.2),
    inset 1px 1.4px 1.6px rgba(255, 255, 255, 0.28),
    0 0 0 0.5px rgba(124, 115, 106, 0.36),
    0 1px 3px rgba(46, 38, 28, 0.14);
}
#page-ask .send-button:disabled::after {
  color: #f2f1ec;
  opacity: 0.9;
}
/* 旧全局 button[aria-busy="true"]::after 是一圈 0.72s 无限旋转的加载环(styles.css:788)。
   它和发送键自己的 ::after 箭头撞在同一个伪元素上:箭头被套上 border-radius:50% + border + spin,
   发送时右下角就冒出一个「转圈的白色小东西」——Ryan 真机反馈说不认识这是什么,因为它不是任何人
   设计的,是两套样式互撞的产物。设计纲领也明确要求加载态「安静、不闪不转」。
   这里让发送键在忙碌态保持箭头静止;等待感由「静心 / Be still」那一行承载。 */
#page-ask .send-button[aria-busy="true"] {
  padding-right: 0;
}
#page-ask .send-button[aria-busy="true"]::after {
  border: 0;
  border-radius: 0;
  animation: none;
  width: auto;
  height: auto;
  margin-top: 0;
  opacity: 1;
}
#page-ask .new-answer-cue {
  background: rgba(67, 92, 54, 0.96);
  box-shadow: 0 12px 26px rgba(67, 92, 54, 0.22);
}

/* —— 六爻水印（背景母题，常驻若隐若现；起卦时凝实显形 A2 清晰 + 循环渐次生成）—— */
#page-ask .ask-wm {
  position: fixed;
  left: 50%;
  top: 43%;
  transform: translate(-50%, -50%) scale(0.96);
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 13px;
  align-items: center;
  opacity: 0.05;
  filter: blur(0.3px);
  /* top 过渡供起课停顿"让位"(43%→31%)使用,时长曲线与凝实 transform 同款;常态 top 恒定,不受影响 */
  transition: opacity 1.6s cubic-bezier(0.22, 0.61, 0.36, 1), transform 1.7s cubic-bezier(0.22, 0.61, 0.36, 1), filter 1.6s cubic-bezier(0.22, 0.61, 0.36, 1), top 1.7s cubic-bezier(0.22, 0.61, 0.36, 1);
  pointer-events: none;
}
#page-ask.ask-casting .ask-wm {
  opacity: 0.96;
  transform: translate(-50%, -50%) scale(1);
  filter: blur(0);
}
#page-ask .ask-wm .bar {
  display: flex;
  gap: 16px;
  justify-content: center;
  height: 11px;
}
#page-ask .ask-wm .seg {
  height: 11px;
  border-radius: 3px;
  opacity: 0.4;
  background: linear-gradient(180deg, var(--aeon-silver-hi), var(--aeon-silver) 55%, var(--aeon-silver-deep));
  box-shadow: 0 1px 3px rgba(40, 32, 22, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4);
  transition: opacity 0.55s ease, box-shadow 0.55s ease, filter 0.55s ease;
}
#page-ask .ask-wm .bar.yin .seg { width: 44px; }
#page-ask .ask-wm .bar.yang .seg { width: 108px; }
/* 玉绿阳爻（一阳来复） */
#page-ask .ask-wm .bar.ret .seg {
  background: radial-gradient(circle at 34% 30%, var(--aeon-green-hi), var(--aeon-green) 58%, var(--aeon-green-deep));
}
#page-ask.ask-casting .ask-wm .seg { opacity: 0; }
#page-ask.ask-casting .ask-wm .bar.lit .seg {
  opacity: 1;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 11px rgba(185, 194, 194, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
#page-ask.ask-casting .ask-wm .bar.ret.lit .seg {
  box-shadow: 0 0 18px rgba(147, 176, 119, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}

/* —— 静心（单句稳定 + 呼吸点；起卦时浮现）—— */
#page-ask .ask-status {
  position: fixed;
  left: 50%;
  top: calc(43% + 128px);
  transform: translateX(-50%);
  z-index: 3;
  font-family: var(--aeon-serif);
  font-size: 16px;
  letter-spacing: 0.08em;
  color: var(--aeon-ink-ondark-soft);
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 13px;
  opacity: 0;
  /* top/字级/字色过渡供起课停顿"静心行原位开口"使用;常态取值恒定,不受影响 */
  transition: opacity 1s cubic-bezier(0.22, 0.61, 0.36, 1), top 1.7s cubic-bezier(0.22, 0.61, 0.36, 1), font-size 0.9s cubic-bezier(0.22, 0.61, 0.36, 1), color 0.9s cubic-bezier(0.22, 0.61, 0.36, 1);
  pointer-events: none;
  white-space: nowrap;
}
/* —— 等待叙事:三段推演(起盘→布局→推演),事件驱动、时间兜底;银墨爻痕作段标 —— */
#page-ask .ask-stage-line {
  display: inline-flex;
  align-items: baseline;
  gap: 2px;
  transition: opacity 0.42s ease;
}
#page-ask .ask-stage-line.dim { opacity: 0; }
#page-ask .ask-stage-marks { display: inline-flex; gap: 7px; }
#page-ask .ask-stage-marks i {
  width: 15px;
  height: 2px;
  border-radius: 1px;
  background: linear-gradient(180deg, var(--aeon-silver-hi), var(--aeon-silver) 55%, var(--aeon-silver-deep));
  opacity: 0.14;
  transition: opacity 0.9s ease, box-shadow 0.9s ease;
}
#page-ask .ask-stage-marks i.on { opacity: 0.72; box-shadow: 0 0 7px rgba(185, 194, 194, 0.35); }
#page-ask .ask-stage-sub {
  max-width: 272px;
  white-space: normal;
  text-align: center;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.6;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-ondark-soft);
  opacity: 0;
  transition: opacity 1.4s ease;
}
#page-ask .ask-stage-sub.show { opacity: 0.85; }
/* 09-27 Ryan 真机:暗场出口改「先去别处看看」——屏底、无框小字、长等后才浮现;不是取消 */
#page-ask .ask-wait-leave {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(24px + env(safe-area-inset-bottom));
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 0 24px;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 1.8s ease;
}
#page-ask.ask-casting .ask-wait-leave.show { opacity: 1; pointer-events: auto; }
#page-ask .ask-wait-leave-hint {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 12px;
  line-height: 1.7;
  letter-spacing: 0.05em;
  color: var(--aeon-ink-ondark-soft);
  opacity: 0.6;
}
#page-ask .ask-wait-leave-btn {
  padding: 6px 14px;
  border: 0;
  background: transparent;
  color: var(--aeon-ink-ondark-soft);
  font-family: var(--aeon-serif);
  font-size: 13px;
  letter-spacing: 0.1em;
  text-decoration: underline;
  text-underline-offset: 5px;
  text-decoration-color: rgba(185, 194, 194, 0.35);
  opacity: 0.85;
}
#page-ask .ask-wait-leave-btn:active { color: var(--aeon-ink-ondark); }
/* 客户离开暗场后,亮场对话末尾留一行「答案在路上」(呼吸点同暗场静心行) */
#page-ask .message.ask-pending { margin-top: 14px; }
#page-ask .ask-pending-line {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-soft, #7c736a);
}
#page-ask .ask-pending-line .ask-dots { display: inline-flex; gap: 3px; }
#page-ask .ask-pending-line .ask-dots i { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.25; animation: ask-breath 1.9s ease-in-out infinite; }
#page-ask .ask-pending-line .ask-dots i:nth-child(2) { animation-delay: 0.32s; }
#page-ask .ask-pending-line .ask-dots i:nth-child(3) { animation-delay: 0.64s; }
/* 离场期间后端要客户补一步:亮场对话末尾的「继续这一问」卡 */
#page-ask .message.ask-resume { margin-top: 14px; }
#page-ask .ask-resume-line { margin: 0 0 10px; font-family: var(--aeon-serif); font-size: 15px; line-height: 1.7; color: var(--aeon-ink, #201b16); }
#page-ask .ask-resume-btn { padding: 9px 18px; border: 0.5px solid var(--aeon-ink, #201b16); border-radius: 999px; background: transparent; color: var(--aeon-ink, #201b16); font-family: var(--aeon-serif); font-size: 13.5px; letter-spacing: 0.08em; cursor: pointer; }
#page-ask .ask-resume-btn:active { background: var(--aeon-ink, #201b16); color: var(--aeon-bg, #f4f1e8); }
/* lock-r4:答案后的「补出生地/时辰」可选卡(与回写条同体例) */
#page-ask .ask-clarify-hint { margin-top: 20px; padding: 13px 2px 3px; border-top: 0.5px solid var(--aeon-line); }
#page-ask .ask-clarify-hint-q { margin: 0; font-family: var(--aeon-sans); font-size: 13px; line-height: 1.7; color: var(--aeon-ink-soft); }
#page-ask .ask-clarify-hint-btn { margin-top: 8px; padding: 7px 14px; border: 0.5px solid var(--aeon-ink); border-radius: 999px; background: transparent; color: var(--aeon-ink); font-family: var(--aeon-serif); font-size: 13px; letter-spacing: 0.06em; cursor: pointer; }
#page-ask .ask-clarify-hint-btn:active { background: var(--aeon-ink); color: var(--aeon-bg); }
#page-ask.ask-casting .ask-status { opacity: 1; }
#page-ask .ask-status .ask-dots { display: inline-flex; gap: 3px; margin-left: 4px; }
#page-ask .ask-status .ask-dots i {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.25;
  animation: ask-breath 1.9s ease-in-out infinite;
}
#page-ask .ask-status .ask-dots i:nth-child(2) { animation-delay: 0.32s; }
#page-ask .ask-status .ask-dots i:nth-child(3) { animation-delay: 0.64s; }
@keyframes ask-breath {
  0%, 80%, 100% { opacity: 0.22; }
  40% { opacity: 1; }
}

/* —— 参考线索解释浮层（底部上滑）—— */
#page-ask .ask-sheet {
  position: fixed;
  inset: 0;
  z-index: 70;
}
#page-ask .ask-sheet[hidden] {
  display: none;
}
#page-ask .ask-sheet-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(23, 18, 13, 0.42);
  opacity: 0;
  transition: opacity 0.36s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-sheet.show .ask-sheet-backdrop {
  opacity: 1;
}
#page-ask .ask-sheet-card {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 22px 22px calc(26px + var(--safe-bottom));
  background: var(--aeon-raised);
  border-radius: 22px 22px 0 0;
  box-shadow: 0 -18px 50px rgba(23, 18, 13, 0.3);
  transform: translateY(102%);
  transition: transform 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-sheet.show .ask-sheet-card {
  transform: translateY(0);
}
#page-ask .ask-sheet-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 30px;
  height: 30px;
  border: 0;
  border-radius: 50%;
  background: var(--aeon-sunken);
  color: var(--aeon-ink-soft);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
}
#page-ask .ask-sheet-lead {
  margin: 4px 40px 12px 0;
  font-family: var(--aeon-serif);
  font-size: 20px;
  font-weight: 500;
  color: var(--aeon-ink);
}
#page-ask .ask-sheet-body p {
  margin: 0 0 10px;
  font-size: 14.5px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-sheet-body p:last-child {
  margin-bottom: 0;
}

/* —— 无障碍：减弱动效时给静止终态 —— */
@media (prefers-reduced-motion: reduce) {
  #page-ask .ask-wm .seg { opacity: 0.4; }
  #page-ask.ask-casting .ask-wm .seg { opacity: 0.9; }
  #page-ask .ask-answer.pending .ask-answer-tag,
  #page-ask .ask-answer.pending .ask-caveat,
  #page-ask .ask-answer.pending .ask-answer-headline,
  #page-ask .ask-answer.pending .ask-sent,
  #page-ask .ask-answer.pending .ask-closing,
  #page-ask .ask-answer.pending .ask-traceback,
  #page-ask .ask-answer.pending .ask-psignal,
  #page-ask .ask-answer.pending .ask-amend,
#page-ask .ask-answer.pending .ask-clarify-hint,
  #page-ask .ask-answer.pending .ask-followups,
  #page-ask .ask-answer.pending .ask-answer-foot,
  #page-ask .ask-answer.go .ask-sent,
  #page-ask .ask-answer.go .ask-answer-tag,
  #page-ask .ask-answer.go .ask-caveat,
  #page-ask .ask-answer.go .ask-answer-headline,
  #page-ask .ask-answer.go .ask-closing,
  #page-ask .ask-answer.go .ask-traceback,
  #page-ask .ask-answer.go .ask-psignal,
  #page-ask .ask-answer.go .ask-amend,
#page-ask .ask-answer.go .ask-clarify-hint,
  #page-ask .ask-answer.go .ask-followups,
  #page-ask .ask-answer.go .ask-answer-foot {
    opacity: 1;
    transform: none;
    filter: none;
  }
}

/* ===== Aeon · CHART page (dark ritual; --aeon- tokens scoped to chart roots, not :root) ===== */
#page-chart {
  --aeon-bg: #17120d;
  --aeon-ink: #f1ebe0;
  --aeon-ink-soft: #b3a896;
  --aeon-ink-dim: #7d7363;
  --aeon-silver: #b9c2c2;
  --aeon-silver-hi: #e7ecec;
  --aeon-silver-deep: #7e8a89;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-jade: linear-gradient(150deg, #93b077, #5c7a4b 55%, #435c36);
  --aeon-warn: #a8634a;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  margin: -18px -16px 0;
  padding: 12px 22px calc(108px + var(--safe-bottom));
  min-height: 100vh; min-height: 100dvh;
  /* 命盘页自身透明,改由整屏 body.shell-dark 石盘底统一供给 → 顶到底无缝(露底修复) */
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}
#page-chart::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(1.1px 1.1px at 16% 9%, rgba(231, 236, 236, 0.3), transparent 60%),
    radial-gradient(1px 1px at 84% 12%, rgba(231, 236, 236, 0.22), transparent 60%),
    radial-gradient(1px 1px at 26% 84%, rgba(231, 236, 236, 0.16), transparent 60%),
    radial-gradient(1px 1px at 76% 90%, rgba(231, 236, 236, 0.16), transparent 60%);
}
#page-chart > * {
  position: relative;
  z-index: 1;
}

/* —— 进/出命盘「整屏一起沉」:一层盖住整个屏幕(含底栏)的幕,做一次 opacity 揭开。
   命盘暗态(石盘 + 底栏暗)瞬间就位、被这层幕盖住;幕在同一时长 / 缓动 / 同刻起步下整体揭开
   → 中间、四周、底栏同时落定,人眼看不出先后。进命盘盖暖宣纸(揭开露暗),出命盘盖石盘暗(揭开露亮)。 —— */
#shell-dim {
  position: fixed;
  inset: 0;
  z-index: 60;
  pointer-events: none;
  opacity: 0;
}
#shell-dim.dim-warm {
  background: radial-gradient(120% 100% at 50% 16%, #f7f1e6 0%, #efe7d8 56%, #e6ebe3 100%);
}
#shell-dim.dim-dark {
  background: radial-gradient(135% 100% at 50% 8%, #221913 0%, #17120d 56%, #100b06 100%);
}
#shell-dim.dim-play {
  animation: shellDimReveal 0.92s cubic-bezier(0.34, 0.05, 0.2, 1) forwards;
}
@keyframes shellDimReveal {
  0% { opacity: 1; }
  14% { opacity: 1; }
  100% { opacity: 0; }
}

/* —— 局部玉光:从选中处中心柔和晕开、向外虚化到全透明、可溢出格子,无方形硬边(像玉被点亮) —— */
#page-chart .jade-pulse {
  position: relative;
  overflow: visible;
}
#page-chart .jade-pulse::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 170%;
  height: 155%;
  border-radius: 50%;
  background: radial-gradient(ellipse at center,
    rgba(147, 176, 119, 0.5) 0%,
    rgba(147, 176, 119, 0.22) 36%,
    rgba(147, 176, 119, 0) 70%);
  pointer-events: none;
  animation: jadeGlow 1.3s cubic-bezier(0.25, 0.6, 0.25, 1) forwards;
}
@keyframes jadeGlow {
  0% { opacity: 0; transform: translate(-50%, -50%) scale(0.5); }
  26% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.2); }
}
@media (prefers-reduced-motion: reduce) {
  #shell-dim.dim-play { animation: none; opacity: 0; }
  #page-chart .jade-pulse::after { animation: none; opacity: 0; }
}
#page-chart .page-title-row h1 {
  font-family: var(--aeon-serif);
  font-weight: 500;
  color: var(--aeon-ink);
}
#page-chart .page-title-row p {
  color: var(--aeon-ink-soft);
}

/* —— Chart view toggle (BaZi | Zi Wei) —— */
#page-chart .chart-view-toggle {
  display: flex;
  gap: 4px;
  margin: 16px auto 4px;
  padding: 3px;
  width: fit-content;
  border: 0.5px solid rgba(185, 194, 194, 0.28);
  border-radius: 999px;
  background: rgba(20, 15, 9, 0.5);
}
#page-chart .chart-view-toggle button {
  min-width: 92px;
  padding: 8px 16px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: var(--aeon-ink-soft);
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  cursor: pointer;
}
#page-chart .chart-view-toggle button.active {
  background: linear-gradient(150deg, rgba(185, 194, 194, 0.2), rgba(185, 194, 194, 0.1));
  color: var(--aeon-ink);
  box-shadow: inset 0 0 0 0.5px rgba(185, 194, 194, 0.4);
}

/* —— Zi Wei view —— */
/* 紫微头部改左上对齐 + 补与八字同款复卦,两子页对齐统一(八字那个复卦不动) */
#page-chart-ziwei .chart-head {
  padding: 6px 0 4px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
#page-chart-ziwei .fu {
  display: flex;
  flex-direction: column;
  gap: 3.5px;
  margin-bottom: 14px;
}
#page-chart-ziwei .fu .ln {
  width: 30px;
  height: 3px;
  border-radius: 1px;
}
#page-chart-ziwei .fu .ln.yin {
  background: linear-gradient(90deg, var(--aeon-silver-deep) 0 40%, transparent 40% 60%, var(--aeon-silver-deep) 60%);
  opacity: 0.5;
}
#page-chart-ziwei .fu .ln.yang {
  background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep));
  opacity: 0.95;
}
#page-chart-ziwei .eyebrow {
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--aeon-silver);
  opacity: 0.85;
}
#page-chart-ziwei .sub {
  margin: 5px 0 0;
  font-size: 11px;
  color: var(--aeon-ink-soft);
}
#page-chart-ziwei .plate-area {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px 0 6px;
}
#page-chart-ziwei .plate-frame {
  padding: 7px;
  border-radius: 11px;
  background: radial-gradient(120% 120% at 30% 16%, #221a11, #150f08 72%);
  box-shadow:
    inset 0 0 0 1px rgba(185, 194, 194, 0.26),
    inset 0 1px 0 rgba(231, 236, 236, 0.05),
    0 0 0 1px rgba(0, 0, 0, 0.5),
    0 0 26px rgba(185, 194, 194, 0.05),
    0 18px 46px rgba(0, 0, 0, 0.5);
}
#page-chart-ziwei .plate {
  position: relative;
  width: min(300px, 82vw);
  height: min(300px, 82vw);
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(4, 1fr);
  gap: 1px;
  padding: 1px;
  border-radius: 5px;
  background: linear-gradient(150deg, rgba(185, 194, 194, 0.32), rgba(185, 194, 194, 0.12) 50%, rgba(185, 194, 194, 0.26));
}
#page-chart-ziwei .plate.anim {
  transition: opacity 0.9s ease, transform 0.9s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-chart-ziwei .cell {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 7px 6px 6px;
  overflow: hidden;
  background: linear-gradient(150deg, #1f1810 0%, #171008 60%, #120c06 100%);
  box-shadow: inset 0.5px 0.5px 0 rgba(231, 236, 236, 0.045), inset -1px -1px 2.5px rgba(0, 0, 0, 0.5);
  opacity: 0;
  transition: opacity 0.55s ease, background 0.45s ease, box-shadow 0.45s ease;
  cursor: pointer;
}
#page-chart-ziwei .cell.in {
  opacity: 1;
}
#page-chart-ziwei .cell .star {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  text-align: center;
  opacity: 0;
  transform: translateY(3px);
  transition: opacity 0.6s ease 0.18s, transform 0.6s ease 0.18s;
}
#page-chart-ziwei .cell.in .star {
  opacity: 1;
  transform: none;
}
#page-chart-ziwei .cell .star .s {
  font-family: var(--aeon-serif);
  font-size: 14.5px;
  line-height: 1.18;
  color: var(--aeon-silver-hi);
  white-space: nowrap;
}
#page-chart-ziwei .cell .star .empty {
  font-family: var(--aeon-serif);
  font-size: 12px;
  color: var(--aeon-ink-dim);
}
#page-chart-ziwei .cell .foot {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 4px;
}
#page-chart-ziwei .cell .foot .pn {
  font-family: var(--aeon-serif);
  font-size: 10.5px;
  color: var(--aeon-silver);
}
#page-chart-ziwei .cell .foot .zh {
  font-family: var(--aeon-serif);
  font-size: 9px;
  color: var(--aeon-silver-deep);
}
#page-chart-ziwei .cell.ming {
  box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.55), inset 0.5px 0.5px 0 rgba(231, 236, 236, 0.05), inset -1px -1px 2.5px rgba(0, 0, 0, 0.5);
}
#page-chart-ziwei .cell.shen::after {
  content: "";
  position: absolute;
  top: 6px;
  right: 6px;
  width: 9px;
  height: 9px;
  border-top: 1px solid rgba(185, 194, 194, 0.7);
  border-right: 1px solid rgba(185, 194, 194, 0.7);
}
#page-chart-ziwei .cell.major {
  border-color: rgba(147, 176, 119, 0.58);
}
#page-chart-ziwei .cell.related {
  background: linear-gradient(150deg, #2a2418 0%, #1f1810 60%, #17110a 100%);
  box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.5), inset 0.5px 0.5px 0 rgba(231, 236, 236, 0.06), inset -1px -1px 2.5px rgba(0, 0, 0, 0.48);
}
#page-chart-ziwei .cell.related .star .s {
  color: #e7ecec;
}
#page-chart-ziwei .cell.active {
  background: linear-gradient(150deg, #2b271b 0%, #201a10 60%, #17110a 100%);
  box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.7), inset 0.5px 0.5px 0 rgba(231, 236, 236, 0.06), inset -1px -1px 2.5px rgba(0, 0, 0, 0.45);
}
#page-chart-ziwei .cell.active .star .s {
  color: var(--aeon-green-hi);
}
#page-chart-ziwei .cell.active.ming {
  box-shadow: inset 0 0 0 1.3px rgba(185, 194, 194, 0.85), inset 0.5px 0.5px 0 rgba(231, 236, 236, 0.06), inset -1px -1px 2.5px rgba(0, 0, 0, 0.45);
}
#page-chart-ziwei .cell .flow {
  position: absolute;
  top: 6px;
  left: 6px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--aeon-jade);
  opacity: 0.78;
  animation: zw-breath 6s ease-in-out infinite;
}
@keyframes zw-breath {
  0%, 100% { opacity: 0.5; }
  50% { opacity: 0.9; }
}
#page-chart-ziwei .center {
  grid-row: 2 / 4;
  grid-column: 2 / 4;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 8px;
  padding: 14px 16px;
  background: radial-gradient(circle at 50% 40%, #1a140f, #0e0a06 82%);
  box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.16), inset 0 2px 12px rgba(0, 0, 0, 0.6);
  opacity: 0;
  transition: opacity 0.9s ease;
}
#page-chart-ziwei .center.in {
  opacity: 1;
}
#page-chart-ziwei .center .wm {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  opacity: 0.045;
  pointer-events: none;
}
#page-chart-ziwei .center .wm .ln {
  width: 46px;
  height: 3.5px;
  border-radius: 1px;
  display: flex;
  justify-content: center;
  gap: 7px;
  background: var(--aeon-silver);
}
#page-chart-ziwei .center .wm .ln.yin {
  background: transparent;
}
#page-chart-ziwei .center .wm .ln.yin::before,
#page-chart-ziwei .center .wm .ln.yin::after {
  content: "";
  width: 19px;
  height: 3.5px;
  border-radius: 1px;
  background: var(--aeon-silver);
}
#page-chart-ziwei .center .wm .ln.yang {
  background: var(--aeon-green-deep);
}
#page-chart-ziwei .center .ttl {
  position: relative;
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
  text-align: center;
}
#page-chart-ziwei .center .row {
  position: relative;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
}
#page-chart-ziwei .center .row .k {
  font-family: var(--aeon-mono);
  font-size: 8px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#page-chart-ziwei .center .row .v {
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  color: var(--aeon-ink);
}
#page-chart-ziwei .center .row .v.jade {
  color: var(--aeon-green-hi);
}
#page-chart-ziwei .center .pending {
  position: relative;
  margin-top: 2px;
  padding-top: 6px;
  border-top: 0.5px solid rgba(185, 194, 194, 0.13);
  font-size: 8px;
  font-style: italic;
  color: var(--aeon-ink-dim);
  text-align: center;
  letter-spacing: 0.02em;
}
#page-chart-ziwei .foot-area {
  padding: 12px 0 0;
}
#page-chart-ziwei .detail {
  border-radius: 15px;
  padding: 14px 16px;
  background: linear-gradient(160deg, rgba(40, 32, 21, 0.5), rgba(20, 15, 9, 0.5));
  border: 1px solid rgba(185, 194, 194, 0.15);
}
#page-chart-ziwei .d-head {
  display: flex;
  align-items: baseline;
  gap: 9px;
  flex-wrap: wrap;
}
#page-chart-ziwei .d-name {
  font-family: var(--aeon-serif);
  font-size: 18px;
  color: var(--aeon-ink);
}
#page-chart-ziwei .d-en {
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#page-chart-ziwei .d-meta {
  margin-left: auto;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  color: var(--aeon-silver-deep);
}
#page-chart-ziwei .d-badges {
  display: flex;
  gap: 6px;
  margin-top: 9px;
  flex-wrap: wrap;
}
#page-chart-ziwei .badge {
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  border-radius: 999px;
  border: 0.5px solid rgba(185, 194, 194, 0.4);
  color: var(--aeon-silver);
}
#page-chart-ziwei .d-rows {
  margin-top: 11px;
  display: flex;
  flex-direction: column;
  gap: 7px;
}
#page-chart-ziwei .d-row {
  display: flex;
  gap: 10px;
  align-items: baseline;
}
#page-chart-ziwei .d-row .lab {
  flex: 0 0 84px;
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
  padding-top: 2px;
}
#page-chart-ziwei .d-row .val {
  flex: 1;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--aeon-ink);
}
#page-chart-ziwei .d-row.malefic .val {
  color: #cf9a86;
}
#page-chart-ziwei .term {
  cursor: pointer;
  text-decoration: underline dotted;
  text-decoration-color: rgba(185, 194, 194, 0.4);
  text-underline-offset: 3px;
}
#page-chart-ziwei .term:active {
  color: var(--aeon-silver-hi);
}
#page-chart-ziwei .sh {
  display: inline-block;
  font-family: var(--aeon-serif);
  font-size: 9px;
  padding: 1px 4px;
  border-radius: 4px;
  margin-left: 3px;
  color: #16110b;
  vertical-align: 1px;
  cursor: pointer;
  text-decoration: none;
}
#page-chart-ziwei .sh.lu,
#page-chart-ziwei .sh.quan,
#page-chart-ziwei .sh.ke {
  background: var(--aeon-jade);
}
#page-chart-ziwei .sh.ji {
  background: linear-gradient(150deg, #c08a72, #a8634a);
}
/* 09-26:盘底常驻术语链「四化」——解释入口不因某盘无签而消失;取色用 --aeon-ink-dim(紫微侧有定义) */
#page-chart-ziwei .d-terms {
  margin-top: 11px;
  font-family: var(--aeon-serif);
  font-size: 10.5px;
  line-height: 1.5;
  color: var(--aeon-ink-dim);
}
#page-chart-ziwei .d-clue {
  margin: 11px 0 0;
  padding-top: 9px;
  border-top: 0.5px solid rgba(185, 194, 194, 0.12);
  font-size: 10.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-chart-ziwei .zw-flow-state,
#page-chart-bazi .flow-state {
  margin-top: 12px;
}
#page-chart-ziwei .zw-flow-state {
  padding-top: 11px;
  border-top: 0.5px solid rgba(185, 194, 194, 0.12);
}
#page-chart-ziwei .flow-k,
#page-chart-bazi .flow-k {
  display: block;
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
  margin-bottom: 6px;
}
#page-chart-ziwei .zw-flow-picks {
  display: flex;
  gap: 5px;
  overflow-x: auto;
  padding-bottom: 4px;
  margin-bottom: 6px;
}
#page-chart-ziwei .zw-flow-picks button {
  flex: 0 0 auto;
  border: 1px solid rgba(185, 194, 194, 0.16);
  background: rgba(255, 255, 255, 0.02);
  color: var(--aeon-ink-soft);
  border-radius: 8px;
  padding: 5px 8px;
  font-family: var(--aeon-mono);
  font-size: 9px;
  cursor: pointer;
}
#page-chart-ziwei .zw-flow-picks button.active {
  border-color: rgba(147, 176, 119, 0.58);
  color: var(--aeon-silver);
}
#page-chart-ziwei .zw-flow-state p {
  margin: 8px 0;
  font-size: 11px;
  line-height: 1.55;
  color: var(--aeon-ink-soft);
}
#page-chart-ziwei .flow-lines,
#page-chart-bazi .flow-lines {
  display: grid;
  gap: 4px;
  font-family: var(--aeon-mono);
  font-size: 9px;
  line-height: 1.45;
  color: var(--aeon-ink-faint);
}
#page-chart-ziwei .zw-partial {
  margin: 20px 0;
  padding: 22px;
  border-radius: 16px;
  border: 1px solid rgba(185, 194, 194, 0.18);
  background: linear-gradient(160deg, rgba(40, 32, 21, 0.45), rgba(20, 15, 9, 0.45));
  text-align: center;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
/* term explanation sheet (bottom, fixed — aligned with Ask, §3.1) */
#page-chart-ziwei .term-backdrop {
  position: fixed;
  inset: 0;
  z-index: 70;
  background: rgba(10, 8, 5, 0.55);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), visibility 0.3s;
}
#page-chart-ziwei .term-backdrop.on {
  opacity: 1;
  visibility: visible;
}
#page-chart-ziwei .term-pop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 71;
  max-width: 480px;
  margin: 0 auto;
  padding: 24px 26px calc(26px + var(--safe-bottom));
  background: linear-gradient(180deg, #1c1610, #161009);
  border-top: 1px solid rgba(185, 194, 194, 0.3);
  border-radius: 22px 22px 0 0;
  transform: translateY(102%);
  transition: transform 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
  box-shadow: 0 -18px 40px rgba(0, 0, 0, 0.5);
}
#page-chart-ziwei .term-pop.on {
  transform: none;
}
#page-chart-ziwei .tp-close {
  position: absolute;
  top: 16px;
  right: 18px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 1px solid rgba(185, 194, 194, 0.3);
  background: none;
  color: var(--aeon-ink-soft);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
}
#page-chart-ziwei .tp-lead {
  margin: 0 0 14px;
  font-family: var(--aeon-serif);
  font-size: 19px;
  line-height: 1.4;
  color: var(--aeon-ink);
}
#page-chart-ziwei .tp-word {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding-bottom: 12px;
  margin-bottom: 12px;
  border-bottom: 1px solid rgba(185, 194, 194, 0.18);
}
#page-chart-ziwei .tp-word .hz {
  font-family: var(--aeon-serif);
  font-size: 20px;
  color: var(--aeon-silver-hi);
}
#page-chart-ziwei .tp-word .py {
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--aeon-silver-deep);
}
#page-chart-ziwei .tp-body {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  line-height: 1.62;
  color: var(--aeon-ink-soft);
}
@media (prefers-reduced-motion: reduce) {
  #page-chart-ziwei .cell,
  #page-chart-ziwei .cell .star,
  #page-chart-ziwei .center,
  #page-chart-ziwei .plate.anim {
    transition: none;
  }
  #page-chart-ziwei .cell .flow {
    animation: none;
    opacity: 0.8;
  }
}

/* —— BaZi view (four pillars; moonlit-mineral five phases; restrained radar) —— */
#page-chart-bazi {
  --aeon-ink-soft: #988f80;
  --aeon-ink-faint: #6f685c;
  --aeon-hair: rgba(233, 238, 238, 0.1);
  --el-wood: #8fa088;
  --el-fire: #ad8d79;
  --el-earth: #a89a7b;
  --el-metal: #bfc6c4;
  --el-water: #7f94a1;
}
#page-chart-bazi .term {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  border-bottom: 1px dotted rgba(185, 194, 194, 0.42);
  line-height: 1.1;
}
#page-chart-bazi .term:active {
  color: var(--aeon-silver-hi);
}
#page-chart-bazi .chart-head {
  padding: 6px 0 4px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
#page-chart-bazi .fu {
  display: flex;
  flex-direction: column;
  gap: 3.5px;
  margin-bottom: 14px;
}
#page-chart-bazi .fu .ln {
  width: 30px;
  height: 3px;
  border-radius: 1px;
}
#page-chart-bazi .fu .ln.yin {
  background: linear-gradient(90deg, var(--aeon-silver-deep) 0 40%, transparent 40% 60%, var(--aeon-silver-deep) 60%);
  opacity: 0.5;
}
#page-chart-bazi .fu .ln.yang {
  background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep));
  opacity: 0.95;
}
#page-chart-bazi .eyebrow {
  font-family: var(--aeon-mono);
  font-size: 10.5px;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--aeon-silver-deep);
}
#page-chart-bazi h1 {
  margin: 7px 0 5px;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 27px;
  letter-spacing: 0.01em;
  color: var(--aeon-ink);
}
#page-chart-bazi .lede {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 14px;
  font-style: italic;
  line-height: 1.5;
  color: var(--aeon-ink-soft);
  max-width: 280px;
}
#page-chart-bazi .pillars {
  display: flex;
  gap: 6px;
  padding: 26px 0 8px;
}
#page-chart-bazi .pillar {
  flex: 1;
  min-width: 0;
  text-align: center;
  padding: 0 2px;
  position: relative;
}
#page-chart-bazi .pillar + .pillar::before {
  content: "";
  position: absolute;
  left: -3px;
  top: 14%;
  height: 72%;
  width: 1px;
  background: var(--aeon-hair);
}
#page-chart-bazi .plabel {
  font-family: var(--aeon-mono);
  font-size: 9px;
  letter-spacing: 0.14em;
  color: var(--aeon-ink-faint);
  text-transform: uppercase;
}
#page-chart-bazi .role {
  display: inline-block;
  margin-top: 8px;
  font-family: var(--aeon-serif);
  font-size: 11.5px;
  color: var(--aeon-silver);
  min-height: 14px;
}
#page-chart-bazi .glyph {
  display: block;
  font-family: var(--aeon-serif);
  font-weight: 500;
  line-height: 1.1;
}
#page-chart-bazi .glyph.gan {
  font-size: 31px;
  margin-top: 12px;
}
#page-chart-bazi .glyph.zhi {
  font-size: 31px;
  margin-top: 10px;
}
#page-chart-bazi .eltag {
  display: block;
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.05em;
  margin-top: 2px;
  opacity: 0.62;
}
/* K2 英文干支单行(09-26 重做自 fe-chart-j):拼音 + 汉字 + 五行短词共处一行盒,nowrap 绝不折成两行。
   中文走上面的 .glyph/.eltag 老体例,不受此段影响。 */
#page-chart-bazi .gzline {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 3px;
  width: 100%;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font-family: var(--aeon-serif);
  font-weight: 500;
  line-height: 1.15;
  white-space: nowrap;
  cursor: pointer;
}
#page-chart-bazi .gzline.gan { margin-top: 12px; }
#page-chart-bazi .gzline.zhi { margin-top: 10px; }
#page-chart-bazi .gzline i { font-style: normal; }
#page-chart-bazi .gzline .py { font-size: 18px; }
#page-chart-bazi .gzline .hz { font-size: 12px; opacity: 0.7; }
#page-chart-bazi .gzline .elw {
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.03em;
  opacity: 0.62;
}
#page-chart-bazi .gzline .elw::before { content: "·"; margin-right: 3px; opacity: 0.7; }
/* 格宽不足即降级「Ding 丁」;470px 是量出来的门:主壳封顶 480,四柱一格净宽 101px,最长「Chou 丑 · Earth」95.8px */
@media (max-width: 470px) {
  #page-chart-bazi .gzline .elw { display: none; }
}
/* 大运/流年格:英文干支与元信息各自锁定单行 */
#page-chart-bazi .step .gz,
#page-chart-bazi .step .meta { white-space: nowrap; }
#page-chart-bazi .hidden {
  margin-top: 14px;
  padding-top: 11px;
  border-top: 1px solid var(--aeon-hair);
}
#page-chart-bazi .hidden .hk {
  font-family: var(--aeon-mono);
  font-size: 8px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
  display: block;
  margin-bottom: 5px;
}
#page-chart-bazi .hidden .hchars {
  font-family: var(--aeon-serif);
  font-size: 14px;
  letter-spacing: 0.14em;
}
#page-chart-bazi .pillar.day .plabel {
  color: var(--aeon-green-hi);
}
#page-chart-bazi .pillar.day::after {
  content: "";
  position: absolute;
  left: 18%;
  right: 18%;
  top: -9px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--aeon-silver), transparent);
  opacity: 0.6;
}
#page-chart-bazi .yao-rule {
  border: 0;
  margin: 28px 0;
  height: 3px;
  display: flex;
  gap: 14px;
  justify-content: center;
  opacity: 0.4;
}
#page-chart-bazi .yao-rule i {
  height: 3px;
  border-radius: 1px;
  background: var(--aeon-silver-deep);
}
#page-chart-bazi .yao-rule i.s {
  width: 120px;
}
#page-chart-bazi .yao-rule i.b {
  width: 53px;
}
#page-chart-bazi .sec-h {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 14px;
}
#page-chart-bazi .sec-h h2 {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--aeon-ink);
}
#page-chart-bazi .sec-h .en {
  font-family: var(--aeon-mono);
  font-size: 9px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
  margin-left: auto;
}
#page-chart-bazi .readline {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 15px;
  line-height: 1.55;
  color: var(--aeon-ink);
}
#page-chart-bazi .dm {
  display: flex;
  gap: 18px;
  align-items: center;
}
#page-chart-bazi .dm-id {
  flex: 0 0 auto;
  text-align: center;
}
#page-chart-bazi .dm-g {
  display: block;
  font-family: var(--aeon-serif);
  font-size: 50px;
  font-weight: 500;
  line-height: 1;
  color: var(--el-metal);
}
#page-chart-bazi .dm-eln {
  display: block;
  margin-top: 4px;
  font-family: var(--aeon-mono);
  font-size: 9px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
}
#page-chart-bazi .dm-main {
  flex: 1;
  min-width: 0;
}
#page-chart-bazi .dm-scale {
  height: 1px;
  background: var(--aeon-hair);
  position: relative;
  margin: 6px 0 0;
}
#page-chart-bazi .dm-scale .tick {
  position: absolute;
  top: -4px;
  transform: translateX(-50%);
  width: 1px;
  height: 8px;
  background: var(--aeon-silver-deep);
  opacity: 0.4;
}
#page-chart-bazi .dm-scale .marker {
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: radial-gradient(circle at 34% 30%, var(--aeon-silver-hi), var(--aeon-silver) 60%, var(--aeon-silver-deep));
  box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.4);
}
#page-chart-bazi .dm-scalelabels {
  display: flex;
  justify-content: space-between;
  font-family: var(--aeon-mono);
  font-size: 8px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
  margin: 8px 0 14px;
}
#page-chart-bazi .dm-scalelabels b {
  color: var(--aeon-silver);
  font-weight: 400;
}
#page-chart-bazi .dm-line {
  margin: 0 0 11px;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--aeon-ink);
}
#page-chart-bazi .leans {
  display: flex;
  align-items: center;
  gap: 9px;
  flex-wrap: wrap;
}
#page-chart-bazi .leans .lk {
  font-family: var(--aeon-mono);
  font-size: 9px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
}
#page-chart-bazi .el-term {
  font-family: var(--aeon-serif);
  font-size: 14px;
  border: 0;
  border-bottom: 1px dotted rgba(185, 194, 194, 0.42);
  cursor: pointer;
  background: none;
  padding: 0;
}
#page-chart-bazi .wx-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
}
#page-chart-bazi #bz-wuxingSvg {
  width: 230px;
  height: 230px;
  display: block;
}
#page-chart-bazi #bz-wuxingSvg .grid {
  fill: none;
  stroke: var(--aeon-hair);
  stroke-width: 1;
}
#page-chart-bazi #bz-wuxingSvg .spoke {
  stroke: var(--aeon-hair);
  stroke-width: 1;
}
#page-chart-bazi #bz-wuxingSvg .poly {
  fill: rgba(185, 194, 194, 0.05);
  stroke: rgba(233, 238, 238, 0.5);
  stroke-width: 1.1;
  stroke-linejoin: round;
}
#page-chart-bazi #bz-wuxingSvg .node {
  stroke: rgba(23, 18, 13, 0.6);
  stroke-width: 0.5;
}
#page-chart-bazi #bz-wuxingSvg .node-ring {
  fill: none;
  stroke: var(--aeon-silver);
  stroke-width: 0.7;
  opacity: 0.55;
}
#page-chart-bazi #bz-wuxingSvg .lbl {
  font-family: var(--aeon-serif);
  font-size: 12.5px;
  text-anchor: middle;
  dominant-baseline: middle;
  cursor: pointer;
}
#page-chart-bazi .wx-read {
  margin: 6px 0 0;
  text-align: center;
}
#page-chart-bazi .timing + .timing {
  margin-top: 22px;
}
#page-chart-bazi .flowrow {
  display: flex;
  gap: 7px;
  overflow-x: auto;
  padding-bottom: 6px;
  margin-top: 12px;
}
#page-chart-bazi .flowrow::-webkit-scrollbar {
  height: 0;
}
#page-chart-bazi .step {
  flex: 0 0 auto;
  min-width: 54px;
  text-align: center;
  padding: 9px 6px;
  border-radius: 11px;
  border: 1px solid transparent;
  background: transparent;
  color: inherit;
  cursor: pointer;
}
#page-chart-bazi .step .gz {
  font-family: var(--aeon-serif);
  font-size: 19px;
  line-height: 1.15;
  display: block;
}
#page-chart-bazi .step .meta {
  display: block;
  margin-top: 5px;
  font-family: var(--aeon-mono);
  font-size: 8.5px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-faint);
}
#page-chart-bazi .step.cur {
  border-color: var(--aeon-hair);
}
#page-chart-bazi .step.cur .meta {
  color: var(--aeon-silver);
}
#page-chart-bazi .step .dot {
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  margin-bottom: 4px;
  visibility: hidden;
  background: radial-gradient(circle at 34% 30%, var(--aeon-green-hi), var(--aeon-green) 58%, var(--aeon-green-deep));
}
#page-chart-bazi .flow-card {
  padding: 11px 12px;
  border: 1px solid var(--aeon-hair);
  border-radius: 11px;
  background: rgba(255, 255, 255, 0.02);
}
#page-chart-bazi .flow-card b {
  display: block;
  font-family: var(--aeon-serif);
  font-size: 16px;
  color: var(--aeon-ink);
}
#page-chart-bazi .flow-card p {
  margin: 6px 0 8px;
  font-family: var(--aeon-serif);
  font-size: 12px;
  line-height: 1.55;
  color: var(--aeon-ink-soft);
}
/* 今日流日（引擎真实字段） */
#page-chart-bazi .flow-day { margin-top: 10px; }
#page-chart-bazi .flow-day .fd-meta {
  display: block;
  margin-top: 3px;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.08em;
  color: var(--aeon-ink-faint);
  text-transform: uppercase;
}
#page-chart-bazi .flow-day .fd-line {
  display: flex;
  align-items: baseline;
  gap: 7px;
  margin: 8px 0 0;
}
#page-chart-bazi .flow-day .fd-line + .flow-lines { margin-top: 8px; }
#page-chart-bazi .flow-day .fd-dot {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  transform: translateY(-0.5px);
}
#page-chart-bazi .flow-day .fd-dot.go {
  background: radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 58%, var(--aeon-green-deep) 100%);
  box-shadow: 0 0 0 0.5px rgba(67, 92, 54, 0.5);
}
#page-chart-bazi .flow-day .fd-dot.care {
  background: radial-gradient(circle at 33% 30%, #c97a5c 0%, #b0573a 58%, #8a402a 100%);
  box-shadow: 0 0 0 0.5px rgba(138, 64, 42, 0.5);
}
#page-chart-bazi .step.cur .dot {
  visibility: visible;
}
#page-chart-bazi .honest {
  margin: 26px 0 0;
  padding-top: 16px;
  border-top: 1px solid var(--aeon-hair);
  font-size: 11px;
  line-height: 1.65;
  color: var(--aeon-ink-faint);
}
/* term sheet (bottom, fixed — aligned with Ask, §3.1) */
#page-chart-bazi .term-backdrop {
  position: fixed;
  inset: 0;
  z-index: 70;
  background: rgba(10, 8, 5, 0.55);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), visibility 0.3s;
}
#page-chart-bazi .term-backdrop.on {
  opacity: 1;
  visibility: visible;
}
#page-chart-bazi .term-pop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 71;
  max-width: 480px;
  margin: 0 auto;
  padding: 24px 26px calc(26px + var(--safe-bottom));
  background: linear-gradient(180deg, #1c1610, #161009);
  border-top: 1px solid var(--aeon-hair);
  border-radius: 22px 22px 0 0;
  transform: translateY(102%);
  transition: transform 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
  box-shadow: 0 -18px 40px rgba(0, 0, 0, 0.5);
}
#page-chart-bazi .term-pop.on {
  transform: none;
}
#page-chart-bazi .term-pop .close {
  position: absolute;
  top: 16px;
  right: 18px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 1px solid var(--aeon-hair);
  background: none;
  color: var(--aeon-ink-soft);
  font-size: 14px;
  cursor: pointer;
  line-height: 1;
}
#page-chart-bazi .term-pop .lead {
  margin: 0 0 14px;
  font-family: var(--aeon-serif);
  font-size: 19px;
  line-height: 1.4;
  color: var(--aeon-ink);
}
#page-chart-bazi .term-pop .word {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding-bottom: 12px;
  margin-bottom: 12px;
  border-bottom: 1px solid var(--aeon-hair);
}
#page-chart-bazi .term-pop .word .hz {
  font-family: var(--aeon-serif);
  font-size: 20px;
  color: var(--aeon-silver-hi);
}
#page-chart-bazi .term-pop .word .py {
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--aeon-silver-deep);
}
#page-chart-bazi .term-pop .body {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  line-height: 1.62;
  color: var(--aeon-ink-soft);
}
/* one-time cast reveal (staggered; static end-state under reduced-motion) */
#page-chart-bazi.anim .pillar {
  opacity: 0;
  transform: translateY(10px);
  animation: bz-rise 0.9s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}
#page-chart-bazi.anim .pillar:nth-child(1) { animation-delay: 0.3s; }
#page-chart-bazi.anim .pillar:nth-child(2) { animation-delay: 0.52s; }
#page-chart-bazi.anim .pillar:nth-child(3) { animation-delay: 0.74s; }
#page-chart-bazi.anim .pillar:nth-child(4) { animation-delay: 0.96s; }
#page-chart-bazi.anim .dm-sec,
#page-chart-bazi.anim .wx-sec,
#page-chart-bazi.anim .timing-sec,
#page-chart-bazi.anim .honest {
  opacity: 0;
  transform: translateY(12px);
  animation: bz-rise 1s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}
#page-chart-bazi.anim .dm-sec { animation-delay: 1.25s; }
#page-chart-bazi.anim .wx-sec { animation-delay: 1.6s; }
#page-chart-bazi.anim .timing-sec { animation-delay: 1.95s; }
#page-chart-bazi.anim .honest { animation-delay: 2.2s; }
@keyframes bz-rise {
  to { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  #page-chart-bazi.anim .pillar,
  #page-chart-bazi.anim .dm-sec,
  #page-chart-bazi.anim .wx-sec,
  #page-chart-bazi.anim .timing-sec,
  #page-chart-bazi.anim .honest {
    animation: none !important;
    opacity: 1;
    transform: none;
  }
}

/* ============================================================
   探索页（亮·自然问答）+ 梅花易数（亮起卦/暗仪式·样板）
   作用域：变量挂页根，组件写 <页根> .xxx，不污染 :root
   ============================================================ */
#page-explore {
  --aeon-bg: #f4f1e8; --aeon-ink: #201b16; --aeon-ink-soft: #7c736a;
  --aeon-raised: #fbf8f1; --aeon-sunken: #ece6da; --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b; --aeon-green-hi: #93b077; --aeon-green-deep: #435c36;
  --aeon-silver: #b9c2c2; --aeon-silver-deep: #7f8c8c;
  --aeon-green-jade: radial-gradient(circle at 34% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 52%, var(--aeon-green-deep) 100%);
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative; overflow: hidden; margin: 0 -16px 0; padding: 10px 24px 172px; min-height: 100vh; min-height: 100dvh;
  /* 底距 172：自然问答输入和建议必须能完全滚出悬浮底栏（66px 栏+安全区+呼吸位） */
  background: var(--aeon-bg); color: var(--aeon-ink); font-family: var(--aeon-sans);
}
/* 解除旧全局 .explore-grid 两列网格，改回块级直排（页眉/卡列/分区垂直流） */
#page-explore .explore-grid.aeon-explore { display: block; gap: 0; grid-template-columns: none; }

/* 背景氛围层：两团墨晕 + 右上「地雷复」水印 + 纸纹；只在卡片外的留白处透出 */
#page-explore .ex-atmos { position: absolute; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; }
#page-explore .ex-atmos-wash { position: absolute; top: -50px; left: -6%; width: 112%; height: 78%; display: block; background: url("./assets/explore-ink-atmos.png") center / cover no-repeat; }
#page-explore .ex-fugua { position: absolute; top: 110px; right: 22px; width: 44px; height: auto; opacity: .6; }
#page-explore .ex-fugua line { opacity: .5; }
#page-explore .ex-fugua .ret { opacity: .7; }

/* 页眉：灵境·AEON 小标 + 大「探索/EXPLORE」+ 副标题 */
#page-explore .ex-head { position: relative; z-index: 2; margin: 6px 0 32px; animation: ex-rise .8s cubic-bezier(.2,.7,.2,1) both; animation-delay: .04s; }
#page-explore .ex-eyebrow { font-family: var(--aeon-mono); font-size: 10.5px; letter-spacing: .32em; text-transform: uppercase; color: var(--aeon-green); opacity: .92; }
#page-explore .ex-title { font-family: var(--aeon-serif); font-weight: 500; font-size: 42px; letter-spacing: .04em; line-height: 1; margin-top: 16px; color: var(--aeon-ink); }
#page-explore .ex-title small { display: block; font-family: var(--aeon-mono); font-weight: 400; font-size: 11px; letter-spacing: .46em; text-transform: uppercase; color: var(--aeon-ink-soft); margin-top: 15px; }
#page-explore .ex-sub { font-family: var(--aeon-serif); font-size: 14.5px; line-height: 1.75; color: var(--aeon-ink-soft); margin-top: 18px; max-width: 17em; }

/* 四法术卡：统一浮起亮态（实暖宣纸 + 卡内湿墨晕 + 月光银玉光顶边 + micro 落影）
   裁切根治（标题不被裁 + 墨晕不漏 + 不闪）：卡片 overflow:visible（文字永不被卡裁）；
   墨晕做成纯背景层 .ex-wash（absolute inset:0，墨晕走 background-image，border-radius 裁在卡内）——
   背景天然不溢出盒子→脏斑不回来；全程零 overflow:hidden→既不触发 WebKit 行盒裁字、
   也不触发 iOS「圆角溢出层裹 opacity 动画子元素」的合成闪烁；背景层 z-index:0 永在文字之下。 */
#page-explore .ex-methods { position: relative; z-index: 2; display: flex; flex-direction: column; gap: 11px; }
#page-explore .ex-method { position: relative; display: block; width: 100%; min-height: 0; text-align: left; cursor: pointer; border-radius: 16px; padding: 22px 18px; overflow: visible; border: .5px solid rgba(185,194,194,.34); isolation: isolate; background: linear-gradient(180deg, #fbf8f1, #f5f1e6); box-shadow: inset 0 1px 0 rgba(233,238,238,.55), 0 10px 28px rgba(40,30,20,.10); transition: transform .16s cubic-bezier(0.2, 0.7, 0.2, 1); animation: ex-rise .85s cubic-bezier(.2,.7,.2,1) both; animation-delay: calc(var(--ei, 0) * .12s + .16s); }
#page-explore .ex-method::before { content: ""; position: absolute; left: 18px; right: 18px; top: 0; height: 1px; z-index: 3; background: linear-gradient(90deg, transparent, rgba(185,194,194,.72), transparent); }
#page-explore .ex-method.is-live:active { transform: scale(.99); }
#page-explore .ex-method.is-soon { cursor: default; }
/* 墨晕=纯背景层：absolute inset:0 贴满卡片，墨晕走 background-image；
   background-size:74% 150% + position:-30px center 复刻原墨晕的尺度与位置（与旧版视觉一致）；
   border-radius:16px 让背景裁在卡片圆角内（背景不溢出盒子→脏斑不回来，无需 overflow:hidden）。 */
#page-explore .ex-wash { position: absolute; inset: 0; z-index: 0; border-radius: 16px; background: url("./assets/explore-ink-wash.png") -30px center / 74% 150% no-repeat; animation: ex-breath 7s ease-in-out infinite; pointer-events: none; }
#page-explore .ex-in { position: relative; z-index: 2; display: block; }
#page-explore .ex-status { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 13px; font-family: var(--aeon-serif); letter-spacing: .12em; }
#page-explore .ex-status.live { font-size: 12.5px; color: var(--aeon-green-deep); }
#page-explore .ex-status.soon { font-size: 11px; letter-spacing: .2em; color: var(--aeon-silver-deep); opacity: .9; }
/* 绿点：静态玉珠（玉质/立体/绿色由 box-shadow 等基样式承载，全部保留）。
   原 ex-pulse 呼吸动画会把梅花 live 卡提升为合成层、触发 iOS 裁掉中文标题顶（真机已证），
   故彻底去掉动画；绿点不再呼吸，其余视觉不变。 */
#page-explore .ex-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: radial-gradient(circle at 30% 24%, rgba(255,255,255,.92) 0%, rgba(255,255,255,0) 24%), radial-gradient(circle at 33% 32%, var(--aeon-green-hi) 0%, var(--aeon-green) 56%, var(--aeon-green-deep) 100%); box-shadow: inset -1px -1.4px 2.2px rgba(30,24,12,.34), inset 1px 1.1px 1.3px rgba(255,255,255,.28), 0 0 0 .5px rgba(67,92,54,.5), 0 1px 2px rgba(67,92,54,.22); }
#page-explore .ex-name { display: block; font-family: var(--aeon-serif); font-weight: 500; font-size: 27px; letter-spacing: .07em; line-height: 1.12; color: var(--aeon-ink); }
#page-explore .ex-latin { display: block; font-family: var(--aeon-mono); font-size: 10px; letter-spacing: .28em; text-transform: uppercase; color: var(--aeon-ink-soft); margin-top: 10px; }
#page-explore .ex-essence { display: block; font-family: var(--aeon-serif); font-size: 13.5px; line-height: 1.68; color: var(--aeon-ink-soft); margin-top: 13px; max-width: 19em; }
#page-explore .ex-yao-mark { display: flex; justify-content: center; align-items: center; gap: 8px; margin-bottom: 18px; }
#page-explore .ex-yao-mark i { width: 22px; height: 1.5px; border-radius: 1px; background: linear-gradient(90deg, rgba(127,140,140,.2), var(--aeon-silver-deep), rgba(127,140,140,.2)); }
#page-explore .ex-yao-mark s { width: 5px; height: 5px; border-radius: 50%; background: radial-gradient(circle at 34% 30%, var(--aeon-green-hi), var(--aeon-green) 58%, var(--aeon-green-deep)); box-shadow: 0 0 0 .5px rgba(67,92,54,.45); }

@keyframes ex-rise { from { opacity: 0; transform: translateY(11px); } to { opacity: 1; transform: none; } }
@keyframes ex-breath { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  #page-explore .ex-head,
#page-explore .ex-method,
#page-explore .ex-wash { animation: none !important; }
}

/* ============================================================
   梅花易数 · 水墨（判语为魂）— 探索/结果=亮(暖宣纸黑墨)，起卦动效=暗(石盘银墨)
   作用域：变量挂 #page-meihua，组件写 #page-meihua .xxx，不污染 :root
   ============================================================ */
#page-meihua {
  --paper: #f4f1ea; --paper-2: #ece7da; --ink: #1c1a15; --ink-soft: #6b6860; --ink-faint: #a59f93; --hair: rgba(28,26,21,.10);
  --stone: #17120d; --moon: #e9e5d9; --moon-soft: #b8b2a3; --moon-faint: #6f6a5c; --ink-on-stone: #cfcabb; --hair-d: rgba(185,179,164,.14);
  --mh-serif: "Songti SC", "Source Han Serif SC", "STSong", "SimSun", Georgia, serif;
  --mh-serif-en: "Newsreader", "Georgia", serif;
  --mh-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, sans-serif;
  --mh-seal: #b0573a; --jade: #5c7a4b;
  position: relative; overflow: hidden; margin: -18px -16px 0; min-height: 100vh; min-height: 100dvh;
  background: var(--paper); color: var(--ink); font-family: var(--mh-sans);
}
#page-meihua .mh-serif { font-family: var(--mh-serif); }
#page-meihua .mh-stage { position: relative; z-index: 1; }
#page-meihua .mh-bar { padding: 14px 24px 4px; display: flex; align-items: center; justify-content: space-between; font-size: 11px; letter-spacing: .2em; color: var(--ink-faint); text-transform: uppercase; min-height: 30px; }
#page-meihua .mh-back { background: none; border: none; font-size: 24px; line-height: 1; color: var(--ink-soft); cursor: pointer; padding: 0 4px; }
#page-meihua .mh-screen { display: flex; flex-direction: column; min-height: calc(100vh - 40px); min-height: calc(100dvh - 40px); padding: 0 24px 30px; }
#page-meihua .mh-foot { margin-top: auto; padding-top: 28px; }
#page-meihua .mh-eyebrow { margin-top: 44px; font-size: 11px; letter-spacing: .46em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-h1 { margin-top: 20px; font-size: 27px; line-height: 1.45; font-weight: 500; letter-spacing: .02em; color: var(--ink); }
#page-meihua .mh-sub { margin-top: 14px; font-size: 14.5px; line-height: 1.9; color: var(--ink-soft); max-width: 30ch; }
#page-meihua .mh-qbox { margin-top: 38px; width: 100%; border: none; background: transparent; font-size: 20px; line-height: 1.7; color: var(--ink); border-bottom: 1px solid var(--hair); padding: 10px 2px; resize: none; outline: none; }
#page-meihua .mh-qbox::placeholder { color: var(--ink-faint); }
#page-meihua .mh-qbox:focus { border-bottom-color: var(--ink-soft); }
#page-meihua .mh-timing { margin-top: 24px; display: grid; gap: 7px; color: var(--ink-soft); }
#page-meihua .mh-timing > span { font-size: 12px; letter-spacing: .08em; }
#page-meihua .mh-timing small { font-size: 11px; line-height: 1.55; color: var(--ink-faint); }
#page-meihua .mh-timing-select { width: 100%; border: 0; border-bottom: 1px solid var(--hair); border-radius: 0; background: transparent; padding: 9px 2px; color: var(--ink); font-size: 16px; outline: none; }
#page-meihua .mh-cta { width: 100%; padding: 17px; border: none; border-radius: 3px; background: var(--ink); color: var(--paper); font-size: 16px; letter-spacing: .4em; cursor: pointer; transition: opacity .35s cubic-bezier(0.2, 0.7, 0.2, 1), transform .15s cubic-bezier(0.2, 0.7, 0.2, 1); }
#page-meihua .mh-cta:active { transform: scale(.99); }
#page-meihua .mh-cta[disabled] { opacity: .26; pointer-events: none; }
#page-meihua .mh-sources { margin-top: 40px; }
#page-meihua .mh-src { padding: 22px 2px; border-top: 1px solid var(--hair); display: flex; align-items: baseline; gap: 16px; cursor: pointer; transition: padding-left .35s cubic-bezier(.22,.61,.36,1); }
#page-meihua .mh-src:last-child { border-bottom: 1px solid var(--hair); }
#page-meihua .mh-src:active { padding-left: 12px; }
#page-meihua .mh-src .zh { font-size: 18px; }
#page-meihua .mh-src .ds { font-size: 12.5px; color: var(--ink-faint); }
#page-meihua .mh-src .en { margin-left: auto; font-size: 10px; letter-spacing: .22em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-vow { margin: 44px 0 0; font-size: 12.5px; line-height: 1.9; color: var(--ink-faint); font-style: italic; text-align: center; }
#page-meihua .mh-cells { margin-top: 36px; display: flex; justify-content: center; gap: 18px; }
#page-meihua .mh-cell { width: 64px; height: 78px; border-bottom: 1.5px solid var(--hair); display: flex; align-items: center; justify-content: center; font-size: 36px; color: var(--ink-faint); transition: all .4s cubic-bezier(.22,.61,.36,1); }
#page-meihua .mh-cell.f { color: var(--ink); border-color: var(--ink-soft); }
#page-meihua .mh-clab { margin-top: 11px; display: flex; justify-content: center; gap: 18px; }
#page-meihua .mh-clab span { width: 64px; text-align: center; font-size: 10px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-pad { margin-top: 30px; display: grid; grid-template-columns: repeat(3,1fr); gap: 2px; }
#page-meihua .mh-k { padding: 17px 0; text-align: center; font-size: 22px; color: var(--ink); cursor: pointer; border-radius: 3px; transition: background .2s cubic-bezier(0.2, 0.7, 0.2, 1); }
#page-meihua .mh-k:active { background: var(--paper-2); }
#page-meihua .mh-now { margin-top: 34px; width: 100%; padding: 26px; border: 1px dashed var(--hair); border-radius: 4px; background: transparent; font-size: 17px; color: var(--ink-soft); cursor: pointer; }
#page-meihua .mh-now.f { border-style: solid; border-color: var(--ink-soft); color: var(--ink); }
#page-meihua .mh-line { margin-top: 34px; width: 100%; border: none; background: transparent; border-bottom: 1px solid var(--hair); padding: 10px 2px; font-size: 18px; color: var(--ink); outline: none; }
#page-meihua .mh-line:focus { border-bottom-color: var(--ink-soft); }
/* 外应（external_omen）多行原文输入：正文 serif、发丝线下边界，与 mh-line 同语言、长文本可展 */
#page-meihua .mh-omen { margin-top: 34px; width: 100%; border: none; background: transparent; border-bottom: 1px solid var(--hair); padding: 10px 2px; font-size: 18px; line-height: 1.7; color: var(--ink); outline: none; resize: none; }
#page-meihua .mh-omen::placeholder { color: var(--ink-faint); }
#page-meihua .mh-omen:focus { border-bottom-color: var(--ink-soft); }
#page-meihua .mh-maplab { margin-top: 26px; font-size: 10px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; display: flex; justify-content: space-between; align-items: center; }
#page-meihua .mh-why { font-size: 11px; color: var(--jade); background: none; border: none; cursor: pointer; text-decoration: underline dotted; text-underline-offset: 3px; text-transform: none; letter-spacing: 0; }
#page-meihua .mh-echo { margin: 32px 0 8px; text-align: center; font-size: 15px; color: var(--ink-soft); min-height: 1.5em; }
#page-meihua .mh-echo b { color: var(--ink); }
#page-meihua .mh-confbox { margin-top: 30px; display: grid; gap: 13px; }
#page-meihua .mh-confrow { padding: 15px 16px; border-radius: 4px; background: var(--paper-2); }
#page-meihua .mh-confrow .k2 { font-size: 10px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-confrow .v2 { margin-top: 5px; font-size: 17px; color: var(--ink); }

/* —— 起卦动效（石盘暗仪式浮层）—— */
/* 起卦暗场全屏无缝盖住：底色用星盘引擎同款石盘黑 #13110b（画布缩放铺满后即便有边也同色）→ 杜绝两种黑 */
#page-meihua .mh-ritual { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; overflow: hidden; background: #13110b; }
#page-meihua .mh-ritual[hidden] { display: none; }
#page-meihua #mh-rcanvas { display: block; }
#page-meihua .mh-rword { position: absolute; bottom: 120px; left: 0; right: 0; text-align: center; opacity: 0; transition: opacity 1s; }
#page-meihua .mh-rword.show { opacity: 1; }
#page-meihua .mh-rword .w { display: block; font-family: var(--mh-serif); font-size: 15px; letter-spacing: .5em; color: var(--moon-faint); }

/* —— 结果（判语为魂·亮）—— */
#page-meihua .mh-result { position: relative; }
#page-meihua [data-reveal] { opacity: 0; transform: translateY(7px); filter: blur(1.5px); }
#page-meihua [data-reveal].shown { opacity: 1; transform: none; filter: none; transition: opacity 1s cubic-bezier(.22,.61,.36,1), transform .95s cubic-bezier(.22,.61,.36,1), filter 1s ease; }
#page-meihua .mh-act-one { position: relative; min-height: calc(100vh - 52px); min-height: calc(100dvh - 52px); display: flex; flex-direction: column; justify-content: center; padding: 0 40px; }
#page-meihua .mh-wash { position: absolute; inset: 0; pointer-events: none; opacity: .55; z-index: 0; }
#page-meihua .mh-act-one > *:not(.mh-wash):not(.mh-scrollcue) { position: relative; z-index: 1; }
#page-meihua .mh-veyebrow { font-size: 11px; letter-spacing: .46em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 26px; }
#page-meihua .mh-verdict { font-weight: 500; font-size: 33px; line-height: 1.58; letter-spacing: .01em; color: #16140f; text-shadow: 0 .5px 0 rgba(0,0,0,.16); }
#page-meihua .mh-verdict.en { font-family: var(--mh-serif-en); font-size: 27px; line-height: 1.45; letter-spacing: 0; max-width: 20ch; text-wrap: balance; text-shadow: 0 .5px 0 rgba(0,0,0,.16); }
#page-meihua .mh-vsub { margin-top: 26px; font-size: 16px; line-height: 2; color: var(--ink-soft); max-width: 30ch; }
#page-meihua .mh-vsub.en { font-family: var(--mh-serif-en); font-size: 16.5px; line-height: 1.85; max-width: 34ch; }
#page-meihua .mh-scrollcue { position: absolute; left: 0; right: 0; bottom: 28px; z-index: 2; text-align: center; font-size: 11px; letter-spacing: .26em; color: var(--ink-faint); text-transform: uppercase; animation: mh-bob 2.4s ease-in-out infinite; }
@keyframes mh-bob { 0%,100% { transform: translateY(0); opacity: .5; } 50% { transform: translateY(5px); opacity: 1; } }
#page-meihua .mh-act-two { padding: 6px 24px 56px; }
#page-meihua .mh-aiun { padding: 30px 0 6px; }
#page-meihua .mh-a2head { text-align: center; padding: 38px 0 4px; }
#page-meihua .mh-a2e { font-size: 11px; letter-spacing: .4em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-a2z { margin-top: 7px; font-size: 13.5px; color: var(--ink-soft); }
#page-meihua .mh-triptych { margin-top: 32px; display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 6px; align-items: start; }
#page-meihua .mh-gua { display: flex; flex-direction: column; align-items: center; }
#page-meihua .mh-gua.mid { opacity: .42; transform: scale(.84); }
#page-meihua .mh-gua .cap { font-size: 10px; letter-spacing: .26em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-gua .capzh { font-size: 10px; color: var(--ink-faint); margin-top: 3px; }
#page-meihua .mh-gua canvas { margin-top: 14px; display: block; }
#page-meihua .mh-gua .nm { margin-top: 14px; font-size: 16px; color: var(--ink); cursor: pointer; border-bottom: 1px dotted var(--hair); }
#page-meihua .mh-mvnote { margin: 40px 0 0; text-align: center; }
#page-meihua .mh-mk { font-size: 10px; letter-spacing: .4em; color: var(--jade); text-transform: uppercase; }
#page-meihua .mh-mt { display: block; margin-top: 13px; font-size: 16px; line-height: 1.9; color: var(--ink); }
#page-meihua .mh-bu { margin: 40px 0 0; padding:30px 0; border-top: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }
#page-meihua .mh-bucap { display: block; text-align: center; font-size: 10px; letter-spacing: .4em; color: var(--ink-faint); text-transform: uppercase; margin: 0 auto; }
#page-meihua .mh-burow { margin-top: 24px; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 8px; }
#page-meihua .mh-side { text-align: center; display: flex; flex-direction: column; align-items: center; }
#page-meihua .mh-side .role { font-size: 10px; color: var(--ink-faint); letter-spacing: .12em; text-transform: uppercase; }
#page-meihua .mh-trisym { margin: 11px 0 8px; font-size: 30px; line-height: 1; color: var(--ink); }
#page-meihua .mh-side .nm { font-size: 15px; color: var(--ink); }
#page-meihua .mh-side .el { font-size: 10px; color: var(--ink-faint); margin-left: 3px; }
#page-meihua .mh-bumid { text-align: center; }
#page-meihua .mh-budot { display: block; width: 8px; height: 8px; border-radius: 50%; margin: 0 auto 10px; }
#page-meihua .mh-burel { font-size: 16px; color: var(--ink); cursor: pointer; border-bottom: 1px dotted var(--hair); }
#page-meihua .mh-bursub { display: block; margin-top: 8px; font-size: 12px; color: var(--ink-soft); }
#page-meihua .mh-reading { padding: 40px 0 0; }
#page-meihua .mh-rdsec { margin-top: 28px; }
#page-meihua .mh-rdsec:first-child { margin-top: 0; }
#page-meihua .mh-rdsec .t { font-size: 10px; letter-spacing: .3em; color: var(--jade); text-transform: uppercase; }
#page-meihua .mh-rdsec .b { margin-top: 11px; font-size: 15.5px; line-height: 2; color: var(--ink); }
#page-meihua .mh-rdsec.en .b { font-family: var(--mh-serif-en); line-height: 1.85; }
#page-meihua .mh-fq { margin-top: 34px; padding-top: 24px; border-top: 1px solid var(--hair); }
#page-meihua .mh-fq .fl { font-size: 10px; letter-spacing: .24em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-fq .q { margin-top: 13px; font-size: 14.5px; line-height: 1.85; color: var(--ink-soft); cursor: pointer; }
#page-meihua .mh-fq.en .q { font-family: var(--mh-serif-en); }
#page-meihua .mh-conf { margin-top: 30px; font-size: 12px; line-height: 1.9; color: var(--ink-faint); font-style: italic; }
#page-meihua .mh-rfoot { margin-top: 34px; display: flex; flex-wrap: wrap; gap: 10px; }
#page-meihua .mh-ghost { font-size: 14px; padding: 12px 20px; border-radius: 3px; border: 1px solid var(--ink-soft); background: transparent; color: var(--ink); cursor: pointer; }
#page-meihua .mh-ghost.subtle { border-color: transparent; color: var(--ink-soft); }
#page-meihua .mh-term { background: none; border: none; cursor: pointer; font: inherit; color: inherit; padding: 0; }
#page-meihua .mh-seal-zone { margin-top: 56px; display: flex; flex-direction: column; align-items: center; }
#page-meihua .mh-seal-zone canvas { display: block; }
#page-meihua .mh-seal-cap { margin-top: 16px; font-size: 10px; letter-spacing: .34em; color: var(--ink-faint); text-transform: uppercase; }
#page-meihua .mh-seal-zh { margin-top: 6px; font-size: 13px; color: var(--ink-soft); letter-spacing: .1em; }
#page-meihua .mh-state { min-height: calc(100vh - 120px); min-height: calc(100dvh - 120px); display: flex; flex-direction: column; justify-content: center; text-align: center; }
#page-meihua .mh-state .mh-sub { margin-left: auto; margin-right: auto; }
#page-meihua .mh-state .mh-rfoot { justify-content: center; }

/* —— 术语浮层 —— */
#page-meihua .mh-sheet { position: absolute; inset: 0; z-index: 70; }
#page-meihua .mh-sheet[hidden] { display: none; }
#page-meihua .mh-sheet-backdrop { position: absolute; inset: 0; background: rgba(10,8,5,.5); opacity: 0; transition: opacity .34s cubic-bezier(0.2, 0.7, 0.2, 1); }
#page-meihua .mh-sheet.on .mh-sheet-backdrop { opacity: 1; }
#page-meihua .mh-sheet-card { position: absolute; left: 0; right: 0; bottom: 0; padding: 26px 24px calc(26px + var(--safe-bottom, 0px)); border-radius: 22px 22px 0 0; background: linear-gradient(180deg, #1c1610, #161009); border-top: 1px solid rgba(185,179,164,.25); transform: translateY(102%); transition: transform .42s cubic-bezier(.2,.7,.2,1); box-shadow: 0 -18px 44px rgba(23,18,13,.4); }
#page-meihua .mh-sheet.on .mh-sheet-card { transform: translateY(0); }
#page-meihua .mh-sheet-close { position: absolute; top: 16px; right: 18px; width: 30px; height: 30px; border-radius: 50%; border: none; background: rgba(255,255,255,.06); color: var(--moon-soft); font-size: 20px; cursor: pointer; }
#page-meihua .mh-sheet-lead { font-family: var(--mh-serif); font-size: 19px; line-height: 1.5; color: var(--moon); padding-right: 30px; }
#page-meihua .mh-sheet-orig { font-family: var(--mh-serif); font-size: 20px; color: var(--moon-soft); margin: 14px 0 0; padding-bottom: 12px; border-bottom: .5px solid rgba(185,179,164,.2); }
#page-meihua .mh-sheet-orig[hidden] { display: none; }
#page-meihua .mh-sheet-body { font-family: var(--mh-serif); font-size: 13.5px; line-height: 1.62; color: var(--moon-soft); margin-top: 14px; }
@media (prefers-reduced-motion: reduce) {
  #page-meihua [data-reveal] { opacity: 1 !important; transform: none !important; filter: none !important; }
  #page-meihua .mh-scrollcue { animation: none; }
}

/* ============================================================
   三法共用骨架 cast-*（小六壬/奇门/紫微）· 判语为魂 · 水墨
   作用域：变量与组件全挂 .cast-page，不污染 :root、不与梅花 mh-* 冲突。
   皮肤差异：.cast-silver / .cast-gold 只改仪式金属色与极小点缀；亮态页共用暖宣纸。
   ============================================================ */
.cast-page {
  --paper: #f4f1ea; --paper-2: #ece7da; --ink: #1c1a15; --ink-soft: #6b6860; --ink-faint: #a59f93; --hair: rgba(28,26,21,.10);
  --stone: #17120d; --moon: #e9e5d9; --moon-soft: #b8b2a3; --moon-faint: #6f6a5c; --ink-on-stone: #cfcabb; --hair-d: rgba(185,179,164,.14);
  --cast-serif: "Songti SC", "Source Han Serif SC", "STSong", "SimSun", Georgia, serif;
  --cast-serif-en: "Newsreader", "Georgia", serif;
  --cast-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, sans-serif;
  --cast-seal: #b0573a; --jade: #5c7a4b; --cast-metal: #b9c2c2;
  position: relative; overflow: hidden; margin: -18px -16px 0; min-height: 100vh; min-height: 100dvh;
  background: var(--paper); color: var(--ink); font-family: var(--cast-sans);
}
.cast-page.cast-silver { --cast-metal: #b9c2c2; }
.cast-page.cast-gold { --cast-metal: #c4a34f; }
.cast-page .cast-serif { font-family: var(--cast-serif); }
.cast-page .cast-stage { position: relative; z-index: 1; }
.cast-page .cast-bar { padding: 14px 24px 4px; display: flex; align-items: center; justify-content: space-between; font-size: 11px; letter-spacing: .2em; color: var(--ink-faint); text-transform: uppercase; min-height: 30px; }
.cast-page .cast-back { background: none; border: none; font-size: 24px; line-height: 1; color: var(--ink-soft); cursor: pointer; padding: 0 4px; }
.cast-page .cast-screen { display: flex; flex-direction: column; min-height: calc(100vh - 40px); min-height: calc(100dvh - 40px); padding: 0 24px 30px; }
.cast-page .cast-foot { margin-top: auto; padding-top: 28px; }
.cast-page .cast-eyebrow { margin-top: 44px; font-size: 11px; letter-spacing: .46em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-h1 { margin-top: 20px; font-size: 27px; line-height: 1.45; font-weight: 500; letter-spacing: .02em; color: var(--ink); }
.cast-page .cast-h1.en { font-family: var(--cast-serif-en); font-size: 25px; line-height: 1.32; letter-spacing: 0; }
.cast-page .cast-sub { margin-top: 14px; font-size: 14.5px; line-height: 1.9; color: var(--ink-soft); max-width: 32ch; }
.cast-page .cast-sub.en { font-family: var(--cast-serif-en); }
.cast-page .cast-qbox { margin-top: 38px; width: 100%; border: none; background: transparent; font-size: 20px; line-height: 1.7; color: var(--ink); border-bottom: 1px solid var(--hair); padding: 10px 2px; resize: none; outline: none; }
.cast-page .cast-qbox::placeholder { color: var(--ink-faint); }
.cast-page .cast-qbox:focus { border-bottom-color: var(--ink-soft); }
.cast-page .cast-cta { width: 100%; padding: 17px; border: none; border-radius: 3px; background: var(--ink); color: var(--paper); font-size: 16px; letter-spacing: .4em; cursor: pointer; transition: opacity .35s cubic-bezier(0.2, 0.7, 0.2, 1), transform .15s cubic-bezier(0.2, 0.7, 0.2, 1); }
.cast-page .cast-cta.en { letter-spacing: .2em; font-family: var(--cast-serif-en); }
.cast-page .cast-cta:active { transform: scale(.99); }
.cast-page .cast-cta[disabled] { opacity: .26; pointer-events: none; }
/* —— 选项行（来源）/ 主题胶囊（场景·事件类·主题）—— */
.cast-page .cast-sources { margin-top: 40px; }
.cast-page .cast-src { padding: 22px 2px; border-top: 1px solid var(--hair); display: flex; align-items: baseline; gap: 16px; cursor: pointer; transition: padding-left .35s cubic-bezier(.22,.61,.36,1); }
.cast-page .cast-src:last-child { border-bottom: 1px solid var(--hair); }
.cast-page .cast-src:active { padding-left: 12px; }
.cast-page .cast-src .zh { font-size: 18px; }
.cast-page .cast-src .ds { font-size: 12.5px; color: var(--ink-faint); }
.cast-page .cast-src .en { margin-left: auto; font-size: 10px; letter-spacing: .22em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-chips { margin-top: 34px; display: flex; flex-wrap: wrap; gap: 10px; }
.cast-page .cast-chip { padding: 12px 18px; border-radius: 999px; border: 1px solid var(--hair); background: transparent; color: var(--ink-soft); font-size: 14.5px; cursor: pointer; transition: border-color .3s cubic-bezier(0.2, 0.7, 0.2, 1), color .3s cubic-bezier(0.2, 0.7, 0.2, 1), background .3s cubic-bezier(0.2, 0.7, 0.2, 1); font-family: var(--cast-serif); }
.cast-page .cast-chip.en { font-family: var(--cast-serif-en); letter-spacing: .01em; }
.cast-page .cast-chip:active { background: var(--paper-2); }
.cast-page .cast-chip.sel { border-color: var(--ink-soft); color: var(--ink); }
.cast-page .cast-vow { margin: 44px 0 0; font-size: 12.5px; line-height: 1.9; color: var(--ink-faint); font-style: italic; text-align: center; }
/* —— 报数/输入 —— */
.cast-page .cast-cells { margin-top: 36px; display: flex; justify-content: center; gap: 18px; }
.cast-page .cast-cell { width: 64px; height: 78px; border-bottom: 1.5px solid var(--hair); display: flex; align-items: center; justify-content: center; font-size: 36px; color: var(--ink-faint); transition: all .4s cubic-bezier(.22,.61,.36,1); }
.cast-page .cast-cell.f { color: var(--ink); border-color: var(--ink-soft); }
.cast-page .cast-clab { margin-top: 11px; display: flex; justify-content: center; gap: 18px; }
.cast-page .cast-clab span { width: 64px; text-align: center; font-size: 10px; letter-spacing: .1em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-pad { margin-top: 30px; display: grid; grid-template-columns: repeat(3,1fr); gap: 2px; }
.cast-page .cast-k { padding: 17px 0; text-align: center; font-size: 22px; color: var(--ink); cursor: pointer; border-radius: 3px; transition: background .2s cubic-bezier(0.2, 0.7, 0.2, 1); }
.cast-page .cast-k:active { background: var(--paper-2); }
.cast-page .cast-now { margin-top: 34px; width: 100%; padding: 26px; border: 1px dashed var(--hair); border-radius: 4px; background: transparent; font-size: 17px; color: var(--ink-soft); cursor: pointer; }
.cast-page .cast-now.f { border-style: solid; border-color: var(--ink-soft); color: var(--ink); }
.cast-page .cast-line { margin-top: 30px; width: 100%; border: none; background: transparent; border-bottom: 1px solid var(--hair); padding: 10px 2px; font-size: 18px; color: var(--ink); outline: none; }
.cast-page .cast-line:focus { border-bottom-color: var(--ink-soft); }
.cast-page .cast-flabel { margin-top: 26px; font-size: 10px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-echo { margin: 32px 0 8px; text-align: center; font-size: 15px; color: var(--ink-soft); min-height: 1.5em; }
.cast-page .cast-echo b { color: var(--ink); }
.cast-page .cast-confbox { margin-top: 30px; display: grid; gap: 13px; }
.cast-page .cast-confrow { padding: 15px 16px; border-radius: 4px; background: var(--paper-2); }
.cast-page .cast-confrow .k2 { font-size: 10px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-confrow .v2 { margin-top: 5px; font-size: 17px; color: var(--ink); }
/* —— 起局动效（石盘暗仪式浮层，与星盘引擎同底色）—— */
.cast-page .cast-ritual { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; overflow: hidden; background: #13110b; }
.cast-page .cast-ritual[hidden] { display: none; }
.cast-page #xlr-rcanvas, .cast-page #qm-rcanvas, .cast-page #zw-rcanvas { display: block; }
.cast-page .cast-rword { position: absolute; bottom: 120px; left: 0; right: 0; z-index: 2; text-align: center; opacity: 0; transition: opacity 1s; }
.cast-page .cast-rword.show { opacity: 1; }
.cast-page .cast-rword .w { display: block; font-family: var(--cast-serif); font-size: 15px; letter-spacing: .5em; color: var(--moon-faint); }
/* 克制透出：仪式为绝对主体；headline 成句后在盘下一次安静浮现（单句、不更新）；settle=final 成象时退场 */
.cast-page .cast-stream {
  position: absolute;
  left: 44px;
  right: 44px;
  bottom: 178px; /* 让位陪等行（两条路径统一常显于 120px 处） */
  z-index: 2;
  font-family: var(--cast-serif);
  font-size: 14.5px;
  line-height: 1.85;
  letter-spacing: 0.06em;
  color: rgba(214, 205, 189, 0.85);
  text-align: center;
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 1.6s cubic-bezier(0.22, 0.61, 0.36, 1), transform 1.6s cubic-bezier(0.22, 0.61, 0.36, 1);
  pointer-events: none;
}
.cast-page .cast-stream.on { opacity: 1; transform: none; }
.cast-page .cast-stream.settle { opacity: 0; transition: opacity 0.9s ease; }
/* —— 结果（判语为魂·亮）—— */
.cast-page .cast-result { position: relative; }
.cast-page [data-reveal] { opacity: 0; transform: translateY(7px); filter: blur(1.5px); }
.cast-page [data-reveal].shown { opacity: 1; transform: none; filter: none; transition: opacity 1s cubic-bezier(.22,.61,.36,1), transform .95s cubic-bezier(.22,.61,.36,1), filter 1s ease; }
.cast-page .cast-act-one { position: relative; min-height: calc(100vh - 52px); min-height: calc(100dvh - 52px); display: flex; flex-direction: column; justify-content: center; padding: 0 40px; }
.cast-page .cast-wash { position: absolute; inset: 0; pointer-events: none; opacity: .55; z-index: 0; }
.cast-page .cast-act-one > *:not(.cast-wash):not(.cast-scrollcue) { position: relative; z-index: 1; }
.cast-page .cast-veyebrow { font-size: 11px; letter-spacing: .46em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 26px; }
.cast-page .cast-verdict { font-weight: 500; font-size: 32px; line-height: 1.58; letter-spacing: .01em; color: #16140f; text-shadow: 0 .5px 0 rgba(0,0,0,.16); text-wrap: balance; }
.cast-page .cast-verdict.en { font-family: var(--cast-serif-en); font-size: 27px; line-height: 1.45; letter-spacing: 0; max-width: 20ch; text-wrap: balance; }
/* 长判语（>16 汉字 / >72 英文字符）：降一档字级，行数收住、不再把词硬拆得支离 */
.cast-page .cast-verdict.long { font-size: 26px; line-height: 1.7; letter-spacing: .015em; }
.cast-page .cast-verdict.en.long { font-size: 22.5px; line-height: 1.52; max-width: 26ch; }
.cast-page .cast-vsub { margin-top: 26px; font-size: 16px; line-height: 2; color: var(--ink-soft); max-width: 30ch; }
.cast-page .cast-vsub.en { font-family: var(--cast-serif-en); font-size: 16.5px; line-height: 1.85; max-width: 34ch; }
.cast-page .cast-scrollcue { position: absolute; left: 0; right: 0; bottom: 28px; z-index: 2; text-align: center; font-size: 11px; letter-spacing: .26em; color: var(--ink-faint); text-transform: uppercase; animation: cast-bob 2.4s ease-in-out infinite; }
@keyframes cast-bob { 0%,100% { transform: translateY(0); opacity: .5; } 50% { transform: translateY(5px); opacity: 1; } }
.cast-page .cast-act-two { padding: 6px 24px 56px; }
.cast-page .cast-aiun { padding: 30px 0 6px; }
.cast-page .cast-a2head { text-align: center; padding: 38px 0 4px; }
.cast-page .cast-a2e { font-size: 11px; letter-spacing: .4em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-a2z { margin-top: 7px; font-size: 13.5px; color: var(--ink-soft); }
/* —— 盘式（中心象·亮态）通用容器 —— */
.cast-page .cast-plate { margin-top: 30px; display: flex; flex-direction: column; align-items: center; }
.cast-page .cast-plate canvas { display: block; }
.cast-page .cast-plate .pt-name { margin-top: 18px; font-size: 22px; color: var(--ink); font-family: var(--cast-serif); }
.cast-page .cast-plate .pt-name.en { font-family: var(--cast-serif-en); }
.cast-page .cast-plate .pt-sub { margin-top: 6px; font-size: 12.5px; letter-spacing: .12em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-legend { margin-top: 26px; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 14px; }
.cast-page .cast-legend .lg { font-size: 12px; color: var(--ink-faint); letter-spacing: .04em; }
.cast-page .cast-legend .lg.on { color: var(--jade); }
/* —— 判语正文/追问/印/脚 —— */
.cast-page .cast-reading { padding: 40px 0 0; }
.cast-page .cast-rdsec { margin-top: 28px; }
.cast-page .cast-rdsec:first-child { margin-top: 0; }
.cast-page .cast-rdsec .t { font-size: 10px; letter-spacing: .3em; color: var(--jade); text-transform: uppercase; }
.cast-page .cast-rdsec .b { margin-top: 11px; font-size: 15.5px; line-height: 2; color: var(--ink); }
.cast-page .cast-rdsec.en .b { font-family: var(--cast-serif-en); line-height: 1.85; }
.cast-page .cast-fq { margin-top: 34px; padding-top: 24px; border-top: 1px solid var(--hair); }
.cast-page .cast-fq .fl { font-size: 10px; letter-spacing: .24em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-fq .q { margin-top: 13px; font-size: 14.5px; line-height: 1.85; color: var(--ink-soft); cursor: pointer; }
.cast-page .cast-fq.en .q { font-family: var(--cast-serif-en); }
.cast-page .cast-conf { margin-top: 30px; font-size: 12px; line-height: 1.9; color: var(--ink-faint); font-style: italic; }
.cast-page .cast-rfoot { margin-top: 34px; display: flex; flex-wrap: wrap; gap: 10px; }
.cast-page .cast-ghost { font-size: 14px; padding: 12px 20px; border-radius: 3px; border: 1px solid var(--ink-soft); background: transparent; color: var(--ink); cursor: pointer; font-family: var(--cast-serif); }
.cast-page .cast-ghost.en { font-family: var(--cast-serif-en); }
.cast-page .cast-ghost.subtle { border-color: transparent; color: var(--ink-soft); }
.cast-page .cast-term { background: none; border: none; cursor: pointer; font: inherit; color: inherit; padding: 0; }
.cast-page .cast-evrow { margin: 34px 0 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 18px; }
.cast-page .cast-evrow .ev { font-size: 12px; color: var(--ink-soft); }
.cast-page .cast-evrow .ev b { color: var(--ink); font-weight: 500; }
.cast-page .cast-seal-zone { margin-top: 56px; display: flex; flex-direction: column; align-items: center; }
.cast-page .cast-seal-zone canvas { display: block; }
.cast-page .cast-seal-cap { margin-top: 16px; font-size: 10px; letter-spacing: .34em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .cast-seal-zh { margin-top: 6px; font-size: 13px; color: var(--ink-soft); letter-spacing: .1em; }
.cast-page .cast-state { min-height: calc(100vh - 120px); min-height: calc(100dvh - 120px); display: flex; flex-direction: column; justify-content: center; text-align: center; }
.cast-page .cast-state .cast-sub { margin-left: auto; margin-right: auto; }
.cast-page .cast-state .cast-rfoot { justify-content: center; }
/* —— 术语浮层 —— */
.cast-page .cast-sheet { position: absolute; inset: 0; z-index: 70; }
.cast-page .cast-sheet[hidden] { display: none; }
.cast-page .cast-sheet-backdrop { position: absolute; inset: 0; background: rgba(10,8,5,.5); opacity: 0; transition: opacity .34s cubic-bezier(0.2, 0.7, 0.2, 1); }
.cast-page .cast-sheet.on .cast-sheet-backdrop { opacity: 1; }
.cast-page .cast-sheet-card { position: absolute; left: 0; right: 0; bottom: 0; padding: 26px 24px calc(26px + var(--safe-bottom, 0px)); border-radius: 22px 22px 0 0; background: linear-gradient(180deg, #1c1610, #161009); border-top: 1px solid rgba(185,179,164,.25); transform: translateY(102%); transition: transform .42s cubic-bezier(.2,.7,.2,1); box-shadow: 0 -18px 44px rgba(23,18,13,.4); }
.cast-page .cast-sheet.on .cast-sheet-card { transform: translateY(0); }
.cast-page .cast-sheet-close { position: absolute; top: 16px; right: 18px; width: 30px; height: 30px; border-radius: 50%; border: none; background: rgba(255,255,255,.06); color: var(--moon-soft); font-size: 20px; cursor: pointer; }
.cast-page .cast-sheet-lead { font-family: var(--cast-serif); font-size: 19px; line-height: 1.5; color: var(--moon); padding-right: 30px; }
.cast-page .cast-sheet-orig { font-family: var(--cast-serif); font-size: 20px; color: var(--moon-soft); margin: 14px 0 0; padding-bottom: 12px; border-bottom: .5px solid rgba(185,179,164,.2); }
.cast-page .cast-sheet-orig[hidden] { display: none; }
.cast-page .cast-sheet-body { font-family: var(--cast-serif); font-size: 13.5px; line-height: 1.62; color: var(--moon-soft); margin-top: 14px; }
/* 奇门事之倾向标记（顺势玉绿 / 留意朱赭 / 中性）—— 跨文化：色+字 */
.cast-page .qm-tendency { margin-top: 22px; display: flex; align-items: center; justify-content: center; gap: 9px; }
.cast-page .qm-tdot { width: 9px; height: 9px; border-radius: 50%; }
.cast-page .qm-tlab { font-size: 17px; letter-spacing: .02em; }
.cast-page .qm-tsub { font-size: 11px; letter-spacing: .16em; color: var(--ink-faint); text-transform: uppercase; }
/* 紫微焦点主宫盘：主宫 + 三方四正相关宫（水墨，克制） */
.cast-page .zw-focuscol { margin-top: 6px; text-align: center; }
.cast-page .zw-related { margin-top: 22px; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 12px; }
.cast-page .zw-related .rp { font-size: 12px; color: var(--ink-faint); letter-spacing: .04em; }
.cast-page .zw-note { margin-top: 20px; text-align: center; font-size: 12.5px; line-height: 1.8; color: var(--ink-faint); font-style: italic; max-width: 32ch; margin-left: auto; margin-right: auto; }
@media (prefers-reduced-motion: reduce) {
  .cast-page [data-reveal] { opacity: 1 !important; transform: none !important; filter: none !important; }
  .cast-page .cast-scrollcue { animation: none; }
}

/* ===================== Onboarding · 一次只问一件事（暗 · 仪式；作用域 #onboarding，不进 :root） ===================== */
#onboarding {
  --aeon-bg-dark: #17120d;
  --aeon-ink-ondark: #f1ebe0;
  --aeon-ink-ondark-soft: #a89d8d;
  --aeon-silver: #b9c2c2;
  --aeon-silver-hi: #e9eeee;
  --aeon-silver-deep: #7f8c8c;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn-hi: #c97a5c;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  position: fixed;
  inset: 0;
  z-index: 40;
  overflow-y: auto;
  background: radial-gradient(120% 70% at 50% 16%, #221913 0%, var(--aeon-bg-dark) 60%, #100b06 100%);
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-sans);
}
#onboarding[hidden] { display: none; }
#onboarding::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(1.1px 1.1px at 16% 10%, rgba(231, 236, 236, 0.3), transparent 60%),
    radial-gradient(1px 1px at 84% 13%, rgba(231, 236, 236, 0.24), transparent 60%),
    radial-gradient(1px 1px at 26% 90%, rgba(231, 236, 236, 0.18), transparent 60%),
    radial-gradient(1px 1px at 76% 92%, rgba(231, 236, 236, 0.18), transparent 60%);
}
#onboarding .ob-stage {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh; /* iOS Safari 100vh 含工具栏身后那截，会把底部锚定的 Begin 压进工具栏——dvh 根治；
                         本轮已把全站另外 18 处 100vh 一并补上 dvh 伴行声明（vh 留作老浏览器兜底） */
  max-width: 430px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  padding: calc(14px + env(safe-area-inset-top)) 24px calc(30px + env(safe-area-inset-bottom));
}
#onboarding .ob-bar { display: flex; align-items: center; justify-content: space-between; min-height: 36px; }
#onboarding .ob-back { background: none; border: 0; color: var(--aeon-ink-ondark-soft); font-size: 26px; line-height: 1; padding: 2px 10px 2px 0; cursor: pointer; }
#onboarding .ob-bar-pad { width: 26px; }
#onboarding .ob-yao { display: flex; gap: 7px; }
#onboarding .ob-yao i { width: 16px; height: 2px; border-radius: 1px; background: rgba(233, 238, 238, 0.14); transition: background 0.6s ease; }
#onboarding .ob-yao i.lit { background: linear-gradient(90deg, var(--aeon-silver-hi), var(--aeon-silver)); }
#onboarding .ob-screen { flex: 1; display: flex; flex-direction: column; padding-top: 9vh; animation: ob-screen-in 0.7s cubic-bezier(0.22, 0.61, 0.36, 1); }
@keyframes ob-screen-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
#onboarding .ob-foot { margin-top: auto; padding-top: 40px; display: grid; gap: 14px; justify-items: center; }
#onboarding .ob-foot .ob-cta { width: 100%; }
#onboarding .ob-h1 { margin: 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 27px; line-height: 1.5; letter-spacing: 0.01em; }
#onboarding .ob-sub { margin: 14px 0 0; font-size: 14px; line-height: 1.85; color: var(--aeon-ink-ondark-soft); max-width: 30ch; }
#onboarding .ob-line {
  margin-top: 44px;
  width: 100%;
  border: 0;
  border-radius: 0;
  background: transparent;
  border-bottom: 1px solid rgba(233, 238, 238, 0.16);
  color: var(--aeon-ink-ondark);
  font-size: 20px;
  line-height: 1.6;
  padding: 10px 2px;
  outline: none;
}
#onboarding .ob-line:focus { border-bottom-color: var(--aeon-silver-deep); }
#onboarding .ob-err { margin: 14px 0 0; font-size: 13px; line-height: 1.7; color: var(--aeon-warn-hi); }
#onboarding .ob-cta {
  padding: 16px;
  border: 1px solid rgba(233, 238, 238, 0.28);
  border-radius: 3px;
  background: transparent;
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-serif);
  font-size: 15px;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
  cursor: pointer;
  transition: border-color 0.3s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.3s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#onboarding .ob-cta:active { background: rgba(233, 238, 238, 0.06); }
#onboarding .ob-skip { background: none; border: 0; color: var(--aeon-ink-ondark-soft); font-size: 13px; letter-spacing: 0.1em; cursor: pointer; padding: 6px 10px; }
#onboarding .ob-opts { margin-top: 40px; display: grid; gap: 12px; }
#onboarding .ob-opt {
  text-align: left;
  padding: 17px 18px;
  border: 1px solid rgba(233, 238, 238, 0.13);
  border-radius: 4px;
  background: transparent;
  color: var(--aeon-ink-ondark);
  cursor: pointer;
  display: grid;
  gap: 5px;
  transition: border-color 0.25s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#onboarding .ob-opt b { font-weight: 500; font-size: 16px; font-family: var(--aeon-serif); }
#onboarding .ob-opt small { color: var(--aeon-ink-ondark-soft); font-size: 12.5px; line-height: 1.6; }
#onboarding .ob-opt.on { border-color: var(--aeon-silver-deep); }
#onboarding .ob-timewrap { margin-top: 26px; }
#onboarding .ob-timelabel { display: block; font-size: 13px; color: var(--aeon-ink-ondark-soft); }
#onboarding .ob-hero { padding-top: 11vh; display: flex; flex-direction: column; align-items: center; text-align: center; }
#onboarding .ob-brand { margin: 32px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 34px; letter-spacing: 0.34em; text-indent: 0.34em; }
#onboarding .ob-welcome { margin: 18px 0 0; font-family: var(--aeon-serif); font-size: 15px; line-height: 1.9; color: var(--aeon-ink-ondark-soft); max-width: 26ch; text-wrap: balance; } /* 09-26:两行均分,不留「你。」孤字 */
#onboarding .ob-langs { margin: 36px auto 0; border: 1px solid rgba(233, 238, 238, 0.2); background: transparent; }
#onboarding .ob-langs button { color: var(--aeon-ink-ondark-soft); background: transparent; }
#onboarding .ob-langs button.active { background: rgba(233, 238, 238, 0.1); color: var(--aeon-ink-ondark); }
#onboarding .ob-consent-body { margin: 22px 0 0; font-size: 14.5px; line-height: 2; color: var(--aeon-ink-ondark-soft); max-width: 32ch; }
/* 法律三链接行(A 案):小字一行,链接下划线可点,直开对应文档页 */
#onboarding .ob-consent-legal { margin: 18px 0 0; font-size: 12px; line-height: 1.9; color: var(--aeon-ink-ondark-soft); opacity: 0.85; max-width: 34ch; }
#onboarding .ob-legal-link {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  color: var(--aeon-ink-ondark);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 0.5px;
  cursor: pointer;
}
/* 复卦标：五阴一阳（阴=断线、阳=整线），一阳来复取玉绿 */
#onboarding .ob-fu { display: grid; gap: 9px; justify-items: center; }
#onboarding .ob-fu i {
  display: block;
  width: 58px;
  height: 3px;
  border-radius: 1.5px;
  background: linear-gradient(90deg, rgba(185, 194, 194, 0.75) 0 42%, transparent 42% 58%, rgba(185, 194, 194, 0.75) 58%);
}
#onboarding .ob-fu i.ret { background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep)); }
#onboarding .ob-fu.big i { width: 64px; height: 3.5px; }
@media (prefers-reduced-motion: reduce) {
  #onboarding .ob-screen { animation: none; }
}

/* ===================== 起盘揭示转场（一次性庄重揭示；作用域 #ob-reveal） ===================== */
#ob-reveal {
  position: fixed;
  /* 真全屏幕布:viewport-fit=cover 下 fixed inset:0 即已盖住含上下安全区(状态栏/底部横条)的整个视口
     (与 #onboarding 自身盖满安全区同一做法);再向四周溢出 20px,杜绝视口换算/边缘取整的发丝缝。
     幕布必须全遮蔽——theme-color 的系统级变色要在这块幕下走完(见 app.js SHELL_TONE_SETTLE_MS)。 */
  inset: -20px;
  z-index: 90;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: radial-gradient(120% 70% at 50% 16%, #221913 0%, #17120d 60%, #100b06 100%);
  opacity: 1;
  transition: opacity 0.9s ease;
}
#ob-reveal[hidden] { display: none; }
#ob-reveal.out { opacity: 0; pointer-events: none; }
/* 星点两层视差：近层稍亮漂得快一点，远层更淡更慢——石盘悬在星夜里的纵深 */
#ob-reveal::before {
  content: "";
  position: absolute;
  inset: -40px;
  pointer-events: none;
  background:
    radial-gradient(1.2px 1.2px at 18% 12%, rgba(231, 236, 236, 0.3), transparent 60%),
    radial-gradient(1.1px 1.1px at 82% 16%, rgba(231, 236, 236, 0.24), transparent 60%),
    radial-gradient(1px 1px at 40% 30%, rgba(231, 236, 236, 0.18), transparent 60%),
    radial-gradient(1px 1px at 28% 88%, rgba(231, 236, 236, 0.18), transparent 60%),
    radial-gradient(1.1px 1.1px at 74% 90%, rgba(231, 236, 236, 0.18), transparent 60%);
  animation: obr-star-near 46s ease-in-out infinite alternate;
}
#ob-reveal::after {
  content: "";
  position: absolute;
  inset: -40px;
  pointer-events: none;
  background:
    radial-gradient(0.9px 0.9px at 12% 34%, rgba(231, 236, 236, 0.14), transparent 60%),
    radial-gradient(0.8px 0.8px at 62% 8%, rgba(231, 236, 236, 0.12), transparent 60%),
    radial-gradient(0.9px 0.9px at 90% 46%, rgba(231, 236, 236, 0.12), transparent 60%),
    radial-gradient(0.8px 0.8px at 8% 70%, rgba(231, 236, 236, 0.1), transparent 60%),
    radial-gradient(0.9px 0.9px at 52% 96%, rgba(231, 236, 236, 0.11), transparent 60%);
  animation: obr-star-far 78s ease-in-out infinite alternate;
}
@keyframes obr-star-near {
  from { transform: translate(0, 0); }
  to { transform: translate(-14px, 9px); }
}
@keyframes obr-star-far {
  from { transform: translate(0, 0); }
  to { transform: translate(8px, -6px); }
}
#ob-reveal .obr-plate {
  position: relative;
  width: 236px;
  height: 236px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 石面/盘沿/刻纹=单一 SVG（.obr-disc）；容器只留弥散投影（模糊光影无对位问题） */
  background: transparent;
  box-shadow:
    0 0 26px rgba(185, 194, 194, 0.05),
    0 18px 46px rgba(0, 0, 0, 0.5);
  opacity: 0;
  transform: scale(0.94) rotate(-3deg);
}
/* 盘面做减法：盘沿（box-shadow 收边）+ 一道刻纹环带（SVG），严格同一圆心；中央留白，复卦只在收官浮现一次。 */
/* 石盘单一 SVG：铺满盘容器；刻纹组（.obr-spin）淡入并缓转（似动非动），盘身盘沿静止 */
#ob-reveal .obr-disc {
  position: absolute;
  inset: 0;
}
#ob-reveal .obr-disc .carve-d { stroke: rgba(0, 0, 0, 0.6); }
#ob-reveal .obr-disc .carve-l { stroke: rgba(233, 238, 238, 0.10); }
#ob-reveal .obr-spin {
  opacity: 0;
  transform-box: view-box;
  transform-origin: 50% 50%;
}
#ob-reveal.play .obr-spin {
  animation:
    obr-ring-in 2.4s cubic-bezier(0.22, 0.61, 0.36, 1) 0.9s forwards,
    obr-ring-spin 240s linear infinite;
}
@keyframes obr-ring-in { to { opacity: 0.85; } }
@keyframes obr-ring-spin { to { transform: rotate(360deg); } }
/* 收官落笔：数据就绪的最后一拍，复卦六爻自下而上逐爻凝现、六爻齐后停半拍、一阳最后点玉绿（约 4s 一拍）再落入 today。
   全程唯一一次出场（揭示途中复卦不在场）；常速与切档快版共用本编排。
   节拍：最底爻 0s 起、每爻错 0.6s、单爻凝现 1.4s → 顶爻约 4.4s 凝齐；停约一个错拍；玉绿 5s 点起、1.2s 缓透落定；JS sealHold 7000ms 收拍。 */
#ob-reveal.seal .obr-fu { opacity: 1; transform: scale(1); }
#ob-reveal.seal .obr-fu i { animation: obr-yao-condense 1.4s cubic-bezier(0.22, 0.61, 0.36, 1) both; }
#ob-reveal.seal .obr-fu i:nth-child(6) { animation-delay: 0s; }
#ob-reveal.seal .obr-fu i:nth-child(5) { animation-delay: 0.6s; }
#ob-reveal.seal .obr-fu i:nth-child(4) { animation-delay: 1.2s; }
#ob-reveal.seal .obr-fu i:nth-child(3) { animation-delay: 1.8s; }
#ob-reveal.seal .obr-fu i:nth-child(2) { animation-delay: 2.4s; }
#ob-reveal.seal .obr-fu i:nth-child(1) { animation-delay: 3s; }
#ob-reveal.seal .obr-fu i.ret::after { animation: obr-ret-ignite 1.2s cubic-bezier(0.22, 0.61, 0.36, 1) 5s forwards; }
@keyframes obr-yao-condense {
  from { opacity: 0; transform: translateY(4px); filter: blur(2px); }
  to { opacity: 1; transform: translateY(0); filter: blur(0); }
}
@keyframes obr-ret-ignite {
  0% { opacity: 0; }
  55% { opacity: 1; filter: brightness(1.45); box-shadow: 0 0 14px rgba(147, 176, 119, 0.42); }
  100% { opacity: 1; }
}

/* 落定微旋：浮现途中轻微过冲半度，再稳稳落回——石盘"坐定"的手感 */
#ob-reveal.play .obr-plate { animation: obr-plate-in 2.6s cubic-bezier(0.22, 0.61, 0.36, 1) forwards; }
@keyframes obr-plate-in {
  0% { opacity: 0; transform: scale(0.94) rotate(-3deg); }
  62% { opacity: 1; }
  78% { transform: scale(1.004) rotate(0.6deg); }
  100% { opacity: 1; transform: scale(1) rotate(0deg); }
}
#ob-reveal .obr-fu {
  display: grid;
  gap: 10px;
  justify-items: center;
  opacity: 0;
  transform: scale(0.97);
  /* 容器只留整体微缩落定；显隐交给六爻各自凝现（opacity 不过渡，seal 一到即让位给逐爻） */
  transition: transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);
}
#ob-reveal .obr-fu i {
  position: relative;
  display: block;
  width: 62px;
  height: 3px;
  border-radius: 1.5px;
  opacity: 0;
  background: linear-gradient(90deg, rgba(185, 194, 194, 0.8) 0 42%, transparent 42% 58%, rgba(185, 194, 194, 0.8) 58%);
}
/* 一阳来复那根：凝现时先与五阴同料的整线月光银；玉绿由 ::after 承载，收官最后一拍才点亮 */
#ob-reveal .obr-fu i.ret { background: linear-gradient(90deg, rgba(233, 238, 238, 0.85), rgba(185, 194, 194, 0.85) 55%, rgba(127, 140, 140, 0.85)); }
#ob-reveal .obr-fu i.ret::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(90deg, #93b077, #5c7a4b 55%, #435c36);
  opacity: 0;
}
@keyframes obr-yao-in { to { opacity: 1; } }
#ob-reveal .obr-line {
  margin: 44px 0 0;
  font-family: "Newsreader", "Source Han Serif SC", "Songti SC", Georgia, serif;
  font-size: 14.5px;
  letter-spacing: 0.18em;
  color: #a89d8d;
  opacity: 0;
}
#ob-reveal.play .obr-line { animation: obr-yao-in 1.4s ease 2.5s forwards; }
@media (prefers-reduced-motion: reduce) {
  #ob-reveal.play .obr-plate,
  #ob-reveal.play .obr-line { animation: none; opacity: 1; transform: none; }
  #ob-reveal.play .obr-spin { animation: none; opacity: 0.85; }
  #ob-reveal.play .obr-fu { transition: none; }
  #ob-reveal.seal .obr-fu { transform: none; }
  #ob-reveal.seal .obr-fu i { animation: none; opacity: 1; transform: none; filter: none; }
  #ob-reveal.seal .obr-fu i.ret::after { animation: none; opacity: 1; }
  #ob-reveal::before,
  #ob-reveal::after { animation: none; }
}

/* ===================== TODAY V2「卡片呼吸感」（front2；作用域 #page-home，token 挂页根不进 :root）
   结构：底色（定调）→ 四门单卡节奏条 → [轮换位·留位] → 周气轻图（真数据聚合才出）→ 宜忌抽屉 → 昨日回看。
   胶囊三态宝石点：玉绿(go) / 月光银(hold) / 警示赭(watch)——禁分数、禁红绿灯。 ===================== */
/* front7 信息效率：定调压缩为一体，正文散文下沉深读区（分隔符已给 46px 换气，正文不再自垫） */
#page-home .today-opening { margin: 18px 0 0; font-size: 16px; line-height: 1.66; }
#page-home .today-body { margin-top: 0; }

#page-home .today-eyebrow2 {
  margin: 0 0 10px;
  font-family: var(--aeon-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-green);
}
#page-home .today-eyebrow2 .sub {
  margin-left: 8px;
  letter-spacing: 0.08em;
  text-transform: none;
  color: var(--aeon-ink-soft);
}

/* ---------- 单元一 · 定调（front7 压缩为一体：日期眉行+干支日名+签卡+一句话；hero 40vh 退役） ---------- */
#page-home .today-tone { margin-top: 10px; }
/* 干支日名：紧凑一行身份（serif 名 + mono 拉丁小注同行基线），不是大标 */
#page-home .today-day-name { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
#page-home .today-day-name .dn {
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 20px;
  letter-spacing: 0.02em;
  color: var(--aeon-ink);
}
#page-home .today-day-latin {
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
/* 仪式焦点卡（每日一语）：上下卦象分隔符夹持、原句衬线居中、白话小字——像一枚签，不是一个新闻块。
   front7 收紧外距与内垫：签卡是定调焦点，但定调整体只占首屏一口气，不许把四门推下去。 */
#page-home .today-quote-rite { margin: 20px 0 0; text-align: center; }
#page-home .today-quote-rite .yao-divider { margin: 0 14px; }
#page-home .today-quote-body { padding: 16px 10px 14px; }
#page-home .today-quote-rite .q {
  margin: 0 0 10px;
  font-family: var(--aeon-serif);
  font-size: 17.5px;
  line-height: 1.66;
  letter-spacing: 0.02em;
  color: var(--aeon-ink);
}
#page-home .today-quote-rite .src {
  margin: 0 0 12px;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.3em;
  color: var(--aeon-ink-soft);
}
#page-home .today-quote-rite .v {
  margin: 0;
  font-size: 13px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-home .today-why-link {
  display: inline-block;
  padding: 0 0 1px;
  border: 0;
  background: none;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  color: var(--aeon-green-deep);
  border-bottom: 1px dotted rgba(92, 122, 75, 0.55);
  cursor: pointer;
}
#page-home .today-why-link:active { opacity: 0.65; }

/* ---------- 单元二 · 四门单卡节奏条 ---------- */
#page-home .today-doors { margin-top: 34px; }
#page-home .today-door-topic { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
#page-home .today-door-topic span { font-family: var(--aeon-serif); font-size: 15px; color: var(--aeon-green-deep); }
#page-home .today-door-topic small { font-family: var(--aeon-mono); font-size: 9.5px; letter-spacing: 0.2em; color: var(--aeon-ink-soft); }
#page-home .today-gates-card {
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
  background: var(--aeon-raised);
  box-shadow: 0 9px 24px rgba(32, 27, 22, 0.045);
  overflow: hidden;
}
#page-home .today-gate-row {
  display: block;
  width: 100%;
  min-width: 0;
  padding: 11px 16px 10px;
  border: 0;
  border-bottom: 0.5px solid var(--aeon-line);
  background: none;
  text-align: left;
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
  cursor: pointer;
  overflow-wrap: anywhere;
}
#page-home .today-gate-row:last-child { border-bottom: 0; }
#page-home button.today-gate-row:active { background: var(--aeon-sunken); }
#page-home .today-gate-row .r1 { display: flex; align-items: center; gap: 8px; min-width: 0; }
#page-home .today-gate-row .g-name { font-family: var(--aeon-serif); font-size: 16px; letter-spacing: 0.05em; }
#page-home .today-gate-row .g-latin {
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#page-home .today-gate-row .g-seal { margin-left: auto; }
#page-home .today-gate-row .r2 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  margin-top: 3px;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-home .today-gate-row.is-unavailable .r2 { color: var(--aeon-ink-soft); }
#page-home .today-gate-sk {
  display: block;
  width: 68%;
  height: 12px;
  margin: 4px 0 3px;
  border-radius: 6px;
  background: var(--aeon-sunken);
}

/* 节奏词章：胶囊 + 三态宝石点（同 .today-dot 材质语言，8px 更细） */
#page-home .today-seal {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 11px 4px 8px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 999px;
  background: var(--aeon-bg);
  font-family: var(--aeon-serif);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: var(--aeon-ink);
  white-space: nowrap;
}
#page-home .today-gem { flex: 0 0 auto; width: 8px; height: 8px; border-radius: 50%; }
#page-home .today-gem.go {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 55%, var(--aeon-green-deep) 100%);
  box-shadow: inset -1px -1.2px 2px rgba(30, 24, 12, 0.34), inset 1px 1px 1.2px rgba(255, 255, 255, 0.25), 0 0 0 0.5px rgba(67, 92, 54, 0.5);
}
#page-home .today-gem.hold {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, var(--aeon-silver-hi) 0%, var(--aeon-silver) 55%, var(--aeon-silver-deep) 100%);
  box-shadow: inset -1px -1.2px 2px rgba(30, 30, 30, 0.3), inset 1px 1px 1.2px rgba(255, 255, 255, 0.4), 0 0 0 0.5px rgba(127, 140, 140, 0.55);
}
#page-home .today-gem.watch {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-warn-hi) 0%, var(--aeon-warn) 55%, var(--aeon-warn-deep) 100%);
  box-shadow: inset -1px -1.2px 2px rgba(30, 18, 10, 0.34), inset 1px 1px 1.2px rgba(255, 255, 255, 0.25), 0 0 0 0.5px rgba(138, 64, 42, 0.5);
}

/* 依据 nudge：左绿竖线，不做卡片 */
#page-home .today-basis-nudge {
  margin: 10px 0 0;
  padding-left: 14px;
  border-left: 2px solid var(--aeon-green);
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft);
}
#page-home .today-basis-nudge button {
  border: 0;
  background: none;
  padding: 0 0 1px;
  font: inherit;
  color: var(--aeon-green-deep);
  border-bottom: 1px dotted rgba(92, 122, 75, 0.55);
  cursor: pointer;
}

/* ---------- 单元三 · 今日轮换位（front6 降为轻行：单行+展开；front5 旧卡形 rc-kicker/rc-main/rc-span 三条死规则一并清） ---------- */
#page-home .today-rotate { margin: 0 0 34px; }
#page-home .today-rotate-line {
  border-top: 0.5px solid var(--aeon-line);
  border-bottom: 0.5px solid var(--aeon-line);
}
#page-home .today-rotate-line summary {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 2px 11px;
  list-style: none;
  cursor: pointer;
}
#page-home .today-rotate-line summary::-webkit-details-marker { display: none; }
#page-home .today-rotate-line .rc-ico { display: inline-flex; flex: 0 0 auto; width: 17px; height: 17px; color: var(--aeon-ink-soft); }
#page-home .today-rotate-line .rc-ico svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.3; stroke-linecap: round; stroke-linejoin: round; }
#page-home .today-rotate-line .rc-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--aeon-serif); font-size: 15.5px; letter-spacing: 0.02em; color: var(--aeon-ink); }
#page-home .today-rotate-line .tag { margin-left: auto; flex: 0 0 auto; font-family: var(--aeon-mono); font-size: 9.5px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--aeon-ink-soft); }
#page-home .today-rotate-line .rc-caret { flex: 0 0 auto; font-size: 14px; line-height: 1; color: var(--aeon-ink-soft); transition: transform 0.25s cubic-bezier(0.2, 0.7, 0.2, 1); }
#page-home .today-rotate-line[open] .rc-caret { transform: rotate(90deg); }
#page-home .today-rotate-line .rc-body { padding: 4px 2px 14px; }
#page-home .today-rotate-line .rc-note { margin: 0 0 10px; font-size: 13.5px; line-height: 1.65; color: var(--aeon-ink); }
#page-home .today-rotate-line .rc-fine {
  margin: 0;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  font-size: 11.5px;
  color: var(--aeon-ink-soft);
}
@media (prefers-reduced-motion: reduce) {
  #page-home .today-rotate-line .rc-caret { transition: none; }
}

/* ---------- 周气轻图（真数据聚合才出） ---------- */
#page-home .today-week { margin-top: 4px; }
#page-home .today-week-card {
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
  background: var(--aeon-raised);
  padding: 16px 14px 12px;
}
#page-home .today-week-card svg { display: block; width: 100%; height: auto; }
#page-home .qi-line { stroke: var(--aeon-silver-deep); }
#page-home .qi-base { stroke: var(--aeon-line); }
#page-home .qi-daylabel { fill: var(--aeon-ink-soft); font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.04em; }
#page-home .qi-daylabel.now { fill: var(--aeon-ink); }
#page-home .qi-dot-hi { fill: var(--aeon-green-hi); }
#page-home .qi-dot { fill: var(--aeon-green); stroke: var(--aeon-green-deep); stroke-width: 0.5; }
#page-home .today-week-cap { margin: 10px 2px 0; font-size: 12.5px; line-height: 1.65; color: var(--aeon-ink-soft); }

/* ---------- 传统宜忌抽屉（二屏） ---------- */
#page-home .today-almanac { margin-top: 8px; }
#page-home .today-almanac summary {
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
  cursor: pointer;
}
#page-home .today-almanac[open] summary { color: var(--aeon-green); }
#page-home .today-almanac .today-mark { margin: 12px 0 6px; }
/* 09-27 个人黄历上屏:节奏一句首行(衬线)、方位衬色一句收尾(小字)、话头=字面链可点进问事 */
#page-home .today-almanac-rhythm {
  margin: 14px 0 4px;
  font-family: var(--aeon-serif);
  font-size: 15px;
  line-height: 1.75;
  color: var(--aeon-ink);
}
#page-home .today-almanac-dir {
  margin: 10px 0 0;
  font-size: 12.5px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-home .today-almanac-talk { margin-top: 14px; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
#page-home .today-almanac-talk .lab {
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.24em;
  color: var(--aeon-ink-faint);
}
#page-home .today-almanac-talk button {
  padding: 0 1px 2px;
  border: 0;
  border-bottom: 1px dotted rgba(32, 27, 22, 0.35);
  background: none;
  font-family: var(--aeon-serif);
  font-size: 14px;
  line-height: 1.6;
  color: var(--aeon-ink);
  text-align: left;
  cursor: pointer;
}
#page-home .today-almanac-talk button:active { color: var(--aeon-ink-soft); }

/* ---------- 昨日回看（被动入口 + 只读卡 + 应验轻标记） ---------- */
#page-home .today-lookback {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  margin-top: 26px;
  padding: 14px 16px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 14px;
  background: var(--aeon-raised);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
  font-size: 14.5px;
  text-align: left;
  cursor: pointer;
}
#page-home .today-lookback:active { transform: scale(0.99); }
#page-home .today-lookback-arrow { color: var(--aeon-green); font-size: 16px; }
#page-home .today-review-bar { margin-bottom: 12px; }
#page-home .today-review-back {
  padding: 6px 10px 6px 0;
  border: 0;
  background: none;
  font-family: var(--aeon-sans);
  font-size: 14px;
  color: var(--aeon-ink-soft);
  cursor: pointer;
}
#page-home .today-review-list { display: flex; flex-direction: column; gap: 14px; margin-top: 22px; }
#page-home .today-review-card {
  min-width: 0;
  padding: 16px 16px 14px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
  background: var(--aeon-raised);
  overflow-wrap: anywhere;
}
#page-home .today-review-head h2 {
  margin: 10px 0 0;
  font-family: var(--aeon-serif);
  font-size: 19px;
  font-weight: 500;
  line-height: 1.4;
  color: var(--aeon-ink);
}
#page-home .today-review-prose { margin: 12px 0 0; font-size: 14.5px; line-height: 1.75; color: var(--aeon-ink); }
#page-home .today-review-sec-title {
  margin: 14px 0 0;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#page-home .today-review-anchor {
  margin: 12px 0 0;
  font-family: var(--aeon-mono);
  font-size: 10.5px;
  letter-spacing: 0.12em;
  color: var(--aeon-ink-soft);
}
#page-home .today-verify { margin-top: 14px; padding-top: 12px; border-top: 0.5px solid var(--aeon-line); }
#page-home .today-verify p { margin: 0 0 8px; font-size: 12px; color: var(--aeon-ink-soft); }
#page-home .today-verify .chips { display: flex; flex-wrap: wrap; gap: 8px; }
#page-home .today-verify-chip {
  padding: 6px 14px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 999px;
  background: var(--aeon-bg);
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  color: var(--aeon-ink);
  cursor: pointer;
}
#page-home .today-verify-chip:active { background: var(--aeon-sunken); }
#page-home .today-verify-chip.on {
  border-color: var(--aeon-green);
  color: var(--aeon-green-deep);
  background: rgba(92, 122, 75, 0.07);
}
#page-home .today-review-note {
  margin: 22px 0 0;
  text-align: center;
  font-size: 11.5px;
  color: var(--aeon-ink-soft);
  opacity: 0.85;
}

/* ---------- 晚间轻回访页脚（Ryan 未批，默认不渲染；样式随开关备用） ---------- */
#page-home .today-evening { margin-top: 34px; text-align: center; }
#page-home .today-evening p { margin: 0 0 10px; font-size: 12.5px; color: var(--aeon-ink-soft); }
#page-home .today-evening .fine { font-size: 11px; opacity: 0.8; }

/* ---------- 底部上滑浮层（共享件 §3.1 亮色版） ---------- */
#page-home .today-sheet-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(23, 18, 13, 0.42);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.32s cubic-bezier(0.2, 0.7, 0.2, 1);
  z-index: 80;
}
#page-home .today-sheet-backdrop.on { opacity: 1; pointer-events: auto; }
#page-home .today-sheet {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  margin: 0 auto;
  max-width: 440px;
  padding: 24px 24px calc(28px + env(safe-area-inset-bottom));
  border-radius: 22px 22px 0 0;
  background: var(--aeon-raised);
  box-shadow: 0 -18px 44px rgba(23, 18, 13, 0.3);
  transform: translateY(102%);
  transition: transform 0.36s cubic-bezier(0.2, 0.7, 0.2, 1);
  will-change: transform;
  backface-visibility: hidden;
  z-index: 81;
}
#page-home .today-sheet.on { transform: translateY(0); }
#page-home .today-sheet-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 28px;
  height: 28px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 50%;
  background: var(--aeon-bg);
  color: var(--aeon-ink-soft);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
}
#page-home .today-sheet .sheet-lead {
  margin: 2px 40px 14px 0;
  font-family: var(--aeon-serif);
  font-size: 19px;
  line-height: 1.5;
  color: var(--aeon-ink);
}
#page-home .today-sheet .sheet-term {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding-bottom: 12px;
  margin-bottom: 12px;
  border-bottom: 0.5px solid var(--aeon-line);
}
#page-home .today-sheet .sheet-term .t-cn { font-family: var(--aeon-serif); font-size: 20px; }
/* 浮层装得下深读整段:限高可滚(原先内容短,没设过) */
#page-home .today-sheet { max-height: 82vh; max-height: 82dvh; overflow-y: auto; -webkit-overflow-scrolling: touch; }
/* 「取今日之气 · 为什么」浮层排版(09-27 Ryan:放这里可以,排版要做好) */
#page-home .today-why { padding: 26px 24px calc(30px + env(safe-area-inset-bottom)); }
#page-home .today-why .why-eyebrow {
  margin: 2px 0 10px;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.26em;
  color: var(--aeon-ink-faint);
}
#page-home .today-why .why-title {
  margin: 0 0 18px;
  padding-right: 40px;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 20px;
  line-height: 1.5;
  letter-spacing: 0.01em;
  color: var(--aeon-ink);
  text-wrap: balance;
}
#page-home .today-why .why-para {
  margin: 0 0 14px;
  font-family: var(--aeon-serif);
  font-size: 15.5px;
  line-height: 1.9;
  color: var(--aeon-ink);
}
#page-home .today-why .why-para:last-of-type { margin-bottom: 0; }
#page-home .today-why .why-basis { margin-top: 22px; padding-top: 16px; border-top: 0.5px solid var(--aeon-line); }
#page-home .today-why .why-basis-lab {
  display: block;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.24em;
  color: var(--aeon-ink-faint);
}
#page-home .today-why .why-basis-term {
  display: block;
  margin-top: 8px;
  font-family: var(--aeon-serif);
  font-size: 17px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink);
}
#page-home .today-why .why-basis-note { margin: 8px 0 0; font-size: 12.5px; line-height: 1.7; color: var(--aeon-ink-soft); }
#page-home .today-why .today-sheet-ask { margin-top: 22px; }
#page-home .today-sheet .sheet-body {
  margin: 0 0 10px;
  font-family: var(--aeon-serif);
  font-size: 14px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-home .today-sheet-ask {
  display: inline-block;
  margin-top: 8px;
  padding: 9px 14px;
  border: 0.5px solid var(--aeon-green);
  border-radius: 14px;
  background: none;
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  color: var(--aeon-green-deep);
  text-align: left;
  cursor: pointer;
}
#page-home .today-sheet-ask:active { background: rgba(92, 122, 75, 0.08); }
@media (prefers-reduced-motion: reduce) {
  #page-home .today-sheet,
  #page-home .today-sheet-backdrop { transition: none; }
}

/* ---------- 门详情沉浸页 · v4 散文 + anchorNote 轻标注 + 暗色浮层（作用域 #page-topic-advice） ---------- */
#page-topic-advice .ta-prose .b { font-size: 15.5px; }
/* LOCK-TODAY2 boundary 段:免责句正文末尾小字一次(可选段,占位卡/旧缓存卡没有) */
#page-topic-advice .ta-boundary {
  margin: 18px 0 0;
  font-family: var(--aeon-sans);
  font-size: 12px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
  opacity: 0.85;
}
#page-home .today-review-boundary {
  margin: 10px 0 0;
  font-size: 12px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-topic-advice .ta-anchor {
  display: inline-block;
  margin-top: 26px;
  padding: 0 0 3px;
  border: 0;
  background: none;
  border-bottom: 1px dotted rgba(185, 194, 194, 0.42);
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  color: var(--aeon-ink-ondark-soft);
  cursor: pointer;
}
#page-topic-advice .ta-anchor:active { color: var(--aeon-silver-hi); }
#page-topic-advice .ta-sheet-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(10, 8, 5, 0.55);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.32s cubic-bezier(0.2, 0.7, 0.2, 1);
  z-index: 80;
}
#page-topic-advice .ta-sheet-backdrop.on { opacity: 1; pointer-events: auto; }
#page-topic-advice .ta-sheet {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  margin: 0 auto;
  max-width: 440px;
  padding: 24px 24px calc(28px + env(safe-area-inset-bottom));
  border-radius: 22px 22px 0 0;
  background: linear-gradient(180deg, #1c1610, #161009);
  border-top: 1px solid rgba(185, 194, 194, 0.2);
  box-shadow: 0 -18px 44px rgba(0, 0, 0, 0.55);
  transform: translateY(102%);
  transition: transform 0.42s cubic-bezier(0.2, 0.7, 0.2, 1);
  z-index: 81;
}
#page-topic-advice .ta-sheet.on { transform: translateY(0); }
#page-topic-advice .ta-sheet-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 28px;
  height: 28px;
  border: 0.5px solid rgba(185, 194, 194, 0.3);
  border-radius: 50%;
  background: none;
  color: var(--aeon-ink-ondark-soft);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
}
#page-topic-advice .ta-sheet-lead {
  margin: 2px 40px 14px 0;
  font-family: var(--aeon-serif);
  font-size: 19px;
  line-height: 1.5;
  color: var(--aeon-ink-ondark);
}
#page-topic-advice .ta-sheet-term {
  padding-bottom: 12px;
  margin-bottom: 12px;
  border-bottom: 1px solid rgba(233, 238, 238, 0.1);
}
#page-topic-advice .ta-sheet-term .t-cn { font-family: var(--aeon-serif); font-size: 20px; color: var(--aeon-ink-ondark); }
#page-topic-advice .ta-sheet-body {
  margin: 0 0 10px;
  font-family: var(--aeon-serif);
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--aeon-ink-ondark-soft);
}
#page-topic-advice .ta-sheet-ask {
  display: inline-block;
  margin-top: 8px;
  padding: 9px 14px;
  border: 0.5px solid rgba(185, 194, 194, 0.4);
  border-radius: 14px;
  background: none;
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  color: var(--aeon-silver-hi);
  text-align: left;
  cursor: pointer;
}
@media (prefers-reduced-motion: reduce) {
  #page-topic-advice .ta-sheet,
  #page-topic-advice .ta-sheet-backdrop { transition: none; }
}
@keyframes ta-breath { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }
@keyframes ta-yao-breath { 0%, 100% { opacity: 0.35; } 50% { opacity: 0.95; } }

/* ===================== ME · 档案库 + 历史 + 设置（亮 · aeon；作用域 #page-me，不进 :root） ===================== */
#page-me {
  --aeon-bg: #f4f1e8;
  --aeon-ink: #201b16;
  --aeon-ink-soft: #7c736a;
  --aeon-raised: #fbf8f1;
  --aeon-sunken: #ece6da;
  --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn: #b0573a;
  --aeon-warn-hi: #c97a5c;
  --aeon-warn-deep: #8a402a;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  overflow: hidden;
  margin: 0 -16px 0;
  padding: 10px 24px 124px;
  min-height: 100vh; min-height: 100dvh;
  background: var(--aeon-bg);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}
#page-me .me-stage { max-width: 430px; margin: 0 auto; }
#page-me .me-head { padding-top: 18px; }
#page-me .me-head h1 { margin: 18px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 28px; letter-spacing: 0.01em; }
#page-me .me-head p { margin: 10px 0 0; font-size: 12.5px; line-height: 1.7; color: var(--aeon-ink-soft); max-width: 34ch; }
/* 主文化符号：复卦小标（纯线条，一阳来复取玉绿） */
#page-me .me-fu { display: grid; gap: 5px; width: 36px; }
#page-me .me-fu i {
  display: block;
  height: 2px;
  border-radius: 1px;
  background: linear-gradient(90deg, var(--aeon-ink-soft) 0 42%, transparent 42% 58%, var(--aeon-ink-soft) 58%);
  opacity: 0.55;
}
#page-me .me-fu i.ret { background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 55%, var(--aeon-green-deep)); opacity: 0.9; }
/* 配角符号：爻线分隔（纯线条） */
/* （front6）旧 .me-divider 横排三短横已废——Ryan 点名的"糙短横"病灶；统一走全局 .yao-divider 卦象分隔符 */
#page-me .yao-divider { margin: 34px 2px 26px; }
#page-me .me-card {
  margin-top: 24px;
  padding: 18px;
  background: var(--aeon-raised);
  border: 0.5px solid var(--aeon-line);
  border-radius: 16px;
}
#page-me .me-card-label {
  margin: 0;
  font-family: var(--aeon-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-green);
}
/* front5·额度卡（契约 accountQuota 四字段；front1 四字段网格旧形退役）。
   形态：raised 卡 + mono eyebrow + serif 档位行 + 2px 细线安静进度（line 底 + 玉绿已用段，非血条）。 */
#page-me .me-quota { position: relative; overflow: hidden; }
#page-me .me-quota::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 2px; background: var(--aeon-line); }
#page-me .me-quota.is-ok::before,
#page-me .me-quota.is-unlimited::before { background: var(--aeon-green); }
#page-me .me-quota.is-depleted::before { background: var(--aeon-warn); }
#page-me .me-quota-eyebrow {
  margin: 0 0 10px;
  font-family: var(--aeon-mono);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-green);
}
#page-me .me-quota-plan { margin: 0 0 6px; font-family: var(--aeon-serif); font-size: 18px; line-height: 1.4; color: var(--aeon-ink); }
#page-me .me-quota-line { margin: 0 0 8px; font-size: 13.5px; line-height: 1.6; color: var(--aeon-ink); }
#page-me .me-quota-line.soft { color: var(--aeon-ink-soft); }
#page-me .me-quota-bar { height: 2px; margin: 2px 0 12px; border-radius: 1px; background: var(--aeon-line); overflow: hidden; }
#page-me .me-quota-bar span { display: block; height: 100%; border-radius: 1px; background: linear-gradient(90deg, var(--aeon-green-hi), var(--aeon-green) 60%, var(--aeon-green-deep)); }
#page-me .me-quota-reset { margin: 0; font-family: var(--aeon-mono); font-size: 11px; letter-spacing: 0.05em; color: var(--aeon-ink-soft); }
#page-me .me-quota-soft { margin: 8px 0 0; font-size: 12.5px; line-height: 1.6; color: var(--aeon-ink-soft); }
#page-me .me-quota-skeleton { display: grid; gap: 9px; }
#page-me .me-quota-skeleton .sk { display: block; height: 13px; border-radius: 6px; background: var(--aeon-sunken); }
#page-me .me-quota-retry {
  margin-top: 4px;
  padding: 9px 16px;
  border: 0;
  border-radius: 12px;
  background: var(--aeon-ink);
  color: var(--aeon-bg);
  font-family: var(--aeon-sans);
  font-size: 13px;
  cursor: pointer;
}
#page-me .me-quota-retry:active { opacity: 0.85; }
#page-me .me-name { margin: 12px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 22px; }
#page-me .me-meta { margin: 6px 0 0; font-size: 13.5px; color: var(--aeon-ink-soft); }
#page-me .me-core { margin: 12px 0 0; font-family: var(--aeon-serif); font-size: 14.5px; line-height: 1.7; color: var(--aeon-ink); }
#page-me .me-soft { margin: 8px 0 0; font-size: 12.5px; line-height: 1.7; color: var(--aeon-ink-soft); }
#page-me .me-soft-inline { display: block; margin-top: 5px; font-size: 12px; line-height: 1.6; color: var(--aeon-ink-soft); }
#page-me .text-button { color: var(--aeon-green-deep); }
#page-me .me-prow { display: flex; align-items: center; gap: 6px; border-bottom: 0.5px solid var(--aeon-line); }
#page-me .me-prow:last-of-type { border-bottom: 0; }
#page-me .me-prow-main {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 13px 2px;
  background: none;
  border: 0;
  text-align: left;
  cursor: pointer;
}
#page-me .me-prow-main span { display: grid; gap: 3px; }
#page-me .me-prow-main b { font-family: var(--aeon-serif); font-weight: 500; font-size: 15.5px; color: var(--aeon-ink); }
#page-me .me-prow-main small { font-size: 12px; color: var(--aeon-ink-soft); }
#page-me .me-pdot { flex: none; width: 9px; height: 9px; border-radius: 50%; border: 1px solid var(--aeon-line); background: transparent; }
#page-me .me-prow.on .me-pdot {
  border: 0;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 55%, var(--aeon-green-deep) 100%);
  box-shadow: inset -1px -1.4px 2.2px rgba(30, 24, 12, 0.34), inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25), 0 0 0 0.5px rgba(67, 92, 54, 0.5);
}
#page-me .me-prow-x { flex: none; width: 30px; height: 30px; border: 0; border-radius: 50%; background: none; color: var(--aeon-ink-soft); font-size: 18px; cursor: pointer; }
#page-me .me-add {
  margin-top: 12px;
  width: 100%;
  padding: 13px;
  border: 1px dashed var(--aeon-line);
  border-radius: 12px;
  background: transparent;
  color: var(--aeon-ink-soft);
  font-size: 14px;
  cursor: pointer;
}
#page-me .me-hrow { display: flex; align-items: flex-start; gap: 6px; border-bottom: 0.5px solid var(--aeon-line); }
#page-me .me-hrow:last-of-type { border-bottom: 0; }
#page-me .me-hrow-main { flex: 1; display: grid; gap: 4px; padding: 12px 2px; background: none; border: 0; text-align: left; cursor: pointer; }
#page-me .me-hrow-main b { font-family: var(--aeon-serif); font-weight: 500; font-size: 14.5px; line-height: 1.5; color: var(--aeon-ink); }
#page-me .me-hrow-main small { font-size: 12px; line-height: 1.6; color: var(--aeon-ink-soft); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
#page-me .me-star { flex: none; margin-top: 9px; width: 30px; height: 30px; border: 0; background: none; color: var(--aeon-ink-soft); font-size: 16px; cursor: pointer; opacity: 0.7; }
#page-me .me-star.on { color: var(--aeon-green-deep); opacity: 1; }
#page-me .me-ed .field { margin-top: 14px; }
#page-me .me-adv { margin-top: 18px; border-top: 0.5px solid var(--aeon-line); padding-top: 12px; }
#page-me .me-adv summary { font-size: 13px; color: var(--aeon-ink-soft); cursor: pointer; }
/* 三入口改竖排:全名标签(隐私政策/服务条款/免责声明,EN 更长)横排 390 宽必挤,竖排读感更稳 */
#page-me .me-policy-row { margin-top: 10px; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
#page-me .me-reset {
  margin-top: 32px;
  width: 100%;
  padding: 13px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 12px;
  background: transparent;
  color: var(--aeon-warn-deep);
  font-size: 13.5px;
  cursor: pointer;
}
#page-me .language-switch.settings { margin-top: 12px; }
/* front-a·账户卡+退出登录(设计稿 ②-2)：邮箱行 serif 500 16px 主墨;退出钮对齐 .me-reset 形态、
   先于它、色用次墨,:active 转警示赭;皆在 #page-me 页根 token 作用域内 */
#page-me .me-account-line {
  margin: 12px 0 0;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 16px;
  color: var(--aeon-ink);
  overflow-wrap: anywhere;
}
#page-me .me-signout {
  margin-top: 26px;
  width: 100%;
  padding: 13px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 12px;
  background: transparent;
  color: var(--aeon-ink-soft);
  font-size: 13.5px;
  cursor: pointer;
}
#page-me .me-signout:active {
  color: var(--aeon-warn-deep);
  border-color: rgba(176, 87, 58, 0.35);
}
#page-me .me-signout + .me-reset { margin-top: 14px; }

/* 二次确认弹层（沿用 .sheet 骨架） */
.confirm-sheet article { max-width: 340px; }
.confirm-sheet h2 { margin: 0; font-size: 18px; }
.confirm-sheet p { margin: 12px 0 0; font-size: 13.5px; line-height: 1.8; color: #7c736a; }
.confirm-actions { margin-top: 22px; display: flex; gap: 10px; justify-content: flex-end; }
.confirm-actions .primary-button.danger { background: #8a402a; }
/* detail 页历史全列表复用 me 行样式 */
.detail-history .me-hrow { display: flex; align-items: flex-start; gap: 6px; border-bottom: 0.5px solid #e1dacc; }
.detail-history .me-hrow-main { flex: 1; display: grid; gap: 4px; padding: 12px 2px; background: none; border: 0; text-align: left; cursor: pointer; }
.detail-history .me-hrow-main b { font-weight: 600; font-size: 14.5px; line-height: 1.5; }
.detail-history .me-hrow-main small { font-size: 12px; line-height: 1.6; color: #7c736a; }
.detail-history .me-star { flex: none; margin-top: 9px; width: 30px; height: 30px; border: 0; background: none; color: #7c736a; font-size: 16px; cursor: pointer; }
.detail-history .me-star.on { color: #435c36; }

/* ===================== 探索页 · 自然问答入口（不展示术法选择） ===================== */
#page-explore .ex-natural {
  position: relative;
  z-index: 2;
  padding: 23px 20px 20px;
  border: 0.5px solid rgba(185, 194, 194, 0.42);
  border-radius: 16px;
  background: linear-gradient(180deg, rgba(251, 248, 241, 0.94), rgba(245, 241, 230, 0.94));
  box-shadow: 0 10px 28px rgba(40, 30, 20, 0.08);
  animation: ex-rise 0.85s cubic-bezier(.2, .7, .2, 1) both 0.12s;
}
#page-explore .ex-natural h2 { margin: 0; font-family: var(--aeon-serif); font-size: 23px; font-weight: 500; line-height: 1.4; }
#page-explore .ex-natural-form { margin-top: 18px; display: grid; gap: 14px; }
#page-explore .ex-natural-input {
  width: 100%;
  min-width: 0;
  resize: vertical;
  border: 0;
  border-bottom: 1px solid rgba(28, 26, 21, 0.18);
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 17px;
  line-height: 1.7;
  padding: 9px 2px 12px;
}
#page-explore .ex-natural-input:focus { border-bottom-color: var(--aeon-green); }
#page-explore .ex-natural-go {
  justify-self: stretch;
  padding: 13px 18px;
  border: 0;
  border-radius: 11px;
  background: var(--aeon-ink);
  color: var(--aeon-bg);
  font-size: 14px;
  letter-spacing: 0.12em;
  cursor: pointer;
}
#page-explore .ex-natural-prompts { margin-top: 24px; padding-top: 17px; border-top: 0.5px solid var(--aeon-line); }
#page-explore .ex-natural-prompts > p { margin: 0 0 8px; font-family: var(--aeon-mono); font-size: 9.5px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--aeon-ink-soft); }
#page-explore .ex-natural-prompts button {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  padding: 12px 1px;
  border: 0;
  border-top: 0.5px solid var(--aeon-line);
  background: transparent;
  color: var(--aeon-ink);
  font-size: 13.5px;
  line-height: 1.55;
  text-align: left;
  cursor: pointer;
}
#page-explore .ex-natural-prompts button:first-of-type { border-top: 0; }
#page-explore .ex-natural-prompts button span { flex: none; color: var(--aeon-green); }
@media (prefers-reduced-motion: reduce) {
  #page-explore .ex-natural { animation: none; }
}

/* ===================== 合盘 · 双列对照 ===================== */
.cast-page .syn-duo {
  margin-top: 30px;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 10px;
}
.cast-page .syn-col { display: grid; gap: 5px; justify-items: center; text-align: center; }
.cast-page .syn-col .role { font-size: 10px; letter-spacing: 0.24em; color: var(--ink-faint); text-transform: uppercase; }
.cast-page .syn-col b { font-size: 18px; font-weight: 500; color: var(--ink); }
.cast-page .syn-col .dm { font-size: 12.5px; color: var(--ink-soft); }
.cast-page .syn-col .ph { font-size: 11.5px; color: var(--ink-faint); }
/* 双柱经卦对照：左右三画卦柱 + 中缝生克关系符（相生=玉绿渐亮连线；相克=银线中断一口；比和=双银线并行） */
.cast-page .syn-col .syn-trigram { display: grid; gap: 7px; justify-items: center; margin: 4px 0 8px; }
.cast-page .syn-col .syn-trigram i { display: block; width: 44px; height: 2.5px; border-radius: 1.5px; background: var(--ink-soft); opacity: 0.75; }
.cast-page .syn-col .syn-trigram i.yin { background: linear-gradient(90deg, var(--ink-soft) 0 40%, transparent 40% 60%, var(--ink-soft) 60%); }
/* —— 关系符 · 光的生克（学理规矩：孤爻不成卦，关系表意一律用"光的行为"，不用孤线/孤爻）——
   生 = 玉绿光从生方徐徐注入受方（有方向有过程，受方被点亮）；
   克 = 银光中途受阻、顿挫回缩；
   比和 = 无光束，两卦同频微光呼吸。 */
.cast-page .syn-rel { position: relative; width: 56px; height: 44px; align-self: center; overflow: hidden; }
.cast-page .syn-rel .pulse {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 26px;
  height: 5px;
  margin: -2.5px 0 0 -13px;
  border-radius: 999px;
  opacity: 0;
}
.cast-page .syn-duo.rel-sheng .syn-rel .pulse {
  background: linear-gradient(90deg, rgba(92, 122, 75, 0), rgba(122, 152, 95, 0.8) 55%, rgba(92, 122, 75, 0));
  animation: syn-flow 3s cubic-bezier(0.45, 0.05, 0.4, 0.95) infinite;
}
.cast-page .syn-duo.rel-sheng.reverse .syn-rel .pulse { animation-name: syn-flow-rev; }
@keyframes syn-flow {
  0% { transform: translateX(-26px); opacity: 0; }
  22% { opacity: 0.95; }
  78% { opacity: 0.95; }
  100% { transform: translateX(26px); opacity: 0; }
}
@keyframes syn-flow-rev {
  0% { transform: translateX(26px); opacity: 0; }
  22% { opacity: 0.95; }
  78% { opacity: 0.95; }
  100% { transform: translateX(-26px); opacity: 0; }
}
/* 生：受方三爻在光到达时被轻轻点亮（明度呼吸，无辉光） */
.cast-page .syn-duo.rel-sheng .syn-col:last-child .syn-trigram i,
.cast-page .syn-duo.rel-sheng.reverse .syn-col:first-child .syn-trigram i { animation: syn-receive 3s ease-in-out infinite; }
.cast-page .syn-duo.rel-sheng.reverse .syn-col:last-child .syn-trigram i { animation: none; }
@keyframes syn-receive {
  0%, 68%, 100% { opacity: 0.75; }
  86% { opacity: 1; }
}
/* 克：银光中途受阻、顿挫回缩后散去 */
.cast-page .syn-duo.rel-ke .syn-rel .pulse {
  background: linear-gradient(90deg, rgba(127, 140, 140, 0), rgba(127, 140, 140, 0.75) 55%, rgba(127, 140, 140, 0));
  animation: syn-check 3.4s cubic-bezier(0.5, 0.05, 0.55, 0.95) infinite;
}
.cast-page .syn-duo.rel-ke.reverse .syn-rel .pulse { animation-name: syn-check-rev; }
@keyframes syn-check {
  0% { transform: translateX(-26px); opacity: 0; }
  30% { transform: translateX(-8px); opacity: 0.85; }
  46% { transform: translateX(3px); opacity: 0.85; }
  52% { transform: translateX(1px) scaleX(0.82); }
  58% { transform: translateX(4px) scaleX(0.7); opacity: 0.55; }
  70% { transform: translateX(0px) scaleX(0.6); opacity: 0.28; }
  100% { transform: translateX(0px) scaleX(0.55); opacity: 0; }
}
@keyframes syn-check-rev {
  0% { transform: translateX(26px); opacity: 0; }
  30% { transform: translateX(8px); opacity: 0.85; }
  46% { transform: translateX(-3px); opacity: 0.85; }
  52% { transform: translateX(-1px) scaleX(0.82); }
  58% { transform: translateX(-4px) scaleX(0.7); opacity: 0.55; }
  70% { transform: translateX(0px) scaleX(0.6); opacity: 0.28; }
  100% { transform: translateX(0px) scaleX(0.55); opacity: 0; }
}
/* 比和：两卦同频微光呼吸 */
.cast-page .syn-duo.rel-same .syn-rel .pulse { display: none; }
.cast-page .syn-duo.rel-same .syn-trigram i { animation: syn-same-breath 3.6s ease-in-out infinite; }
@keyframes syn-same-breath {
  0%, 100% { opacity: 0.55; }
  50% { opacity: 1; }
}
.cast-page .syn-duo.rel-none .syn-rel .pulse { display: none; }
@media (prefers-reduced-motion: reduce) {
  /* 静止终态：生=完整玉光轨迹；克=只走到中途的银光；比和/受方=静止 */
  .cast-page .syn-rel .pulse { animation: none !important; opacity: 0.8; }
  .cast-page .syn-duo.rel-sheng .syn-rel .pulse { width: 48px; margin-left: -24px; }
  .cast-page .syn-duo.rel-ke .syn-rel .pulse { width: 24px; margin-left: -26px; opacity: 0.5; }
  .cast-page .syn-duo.rel-ke.reverse .syn-rel .pulse { margin-left: 2px; }
  .cast-page .syn-duo .syn-trigram i { animation: none !important; }
}
.cast-page .syn-relcap { margin: 14px 0 0; text-align: center; font-size: 12.5px; letter-spacing: 0.06em; color: var(--ink-soft); }

/* ===================== 紫微 · 时辰补录引导（资料不全态，非错误页） ===================== */
/* chart 紫微视图（暗）：安静卡片 + 三条人话建议 + 去补全入口 */
#page-chart-ziwei .zw-needtime {
  margin: 30px auto 0;
  max-width: 340px;
  padding: 24px 22px 26px;
  border-radius: 16px;
  background: rgba(233, 238, 238, 0.04);
  border: 1px solid rgba(185, 194, 194, 0.16);
}
#page-chart-ziwei .zw-needtime h3 {
  margin: 0;
  font-family: "Newsreader", "Source Han Serif SC", "Songti SC", Georgia, serif;
  font-weight: 500;
  font-size: 19px;
  line-height: 1.5;
  color: #f1ebe0;
}
#page-chart-ziwei .zw-needtime p {
  margin: 12px 0 0;
  font-size: 13.5px;
  line-height: 1.9;
  color: #a89d8d;
}
#page-chart-ziwei .zw-needtime ul {
  margin: 18px 0 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 10px;
}
#page-chart-ziwei .zw-needtime li {
  position: relative;
  padding-left: 16px;
  font-size: 12.5px;
  line-height: 1.8;
  color: #a89d8d;
}
#page-chart-ziwei .zw-needtime li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.75em;
  width: 7px;
  height: 2px;
  border-radius: 1px;
  background: rgba(185, 194, 194, 0.55);
}
#page-chart-ziwei .zw-needtime button {
  margin-top: 22px;
  width: 100%;
  padding: 13px;
  border: 1px solid rgba(233, 238, 238, 0.26);
  border-radius: 3px;
  background: transparent;
  color: #f1ebe0;
  font-family: "Newsreader", "Source Han Serif SC", "Songti SC", Georgia, serif;
  font-size: 14px;
  letter-spacing: 0.18em;
  text-indent: 0.18em;
  cursor: pointer;
}
#page-chart-ziwei .zw-needtime button:active { background: rgba(233, 238, 238, 0.06); }

/* explore 紫微方法页（亮）：cast-state 内的建议列表 */
.cast-page .cast-tips {
  margin: 26px auto 0;
  max-width: 34ch;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 10px;
  text-align: left;
}
.cast-page .cast-tips li {
  position: relative;
  padding-left: 16px;
  font-size: 13.5px;
  line-height: 1.8;
  color: var(--ink-soft);
}
.cast-page .cast-tips li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.75em;
  width: 7px;
  height: 2px;
  border-radius: 1px;
  background: var(--ink-faint);
}
.cast-page .cast-tips.en li { font-family: var(--cast-serif-en); }

/* ===================== 滚轮选择器（出生日期 / 时辰共用；onboarding 暗 / me 亮 两种着色） ===================== */
.aw-wheels { display: flex; gap: 12px; margin-top: 34px; }
.aw-wheels.aw-time { max-width: 260px; }
.aw-wheel { position: relative; flex: 1; height: 180px; }
.aw-scroll {
  height: 100%;
  overflow-y: auto;
  scroll-snap-type: y mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 28%, #000 72%, transparent 100%);
  mask-image: linear-gradient(180deg, transparent 0, #000 28%, #000 72%, transparent 100%);
}
.aw-scroll::-webkit-scrollbar { display: none; }
.aw-pad { height: 72px; }
.aw-item {
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  scroll-snap-align: center;
  font-size: 17px;
  font-variant-numeric: tabular-nums;
  opacity: 0.32;
  transition: opacity 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
  cursor: pointer;
  user-select: none;
}
.aw-item.on { opacity: 1; }
.aw-focus {
  position: absolute;
  left: 0;
  right: 0;
  top: 72px;
  height: 36px;
  pointer-events: none;
  border-top: 0.5px solid rgba(127, 140, 140, 0.38);
  border-bottom: 0.5px solid rgba(127, 140, 140, 0.38);
}
#onboarding .aw-item { color: var(--aeon-ink-ondark); font-family: var(--aeon-serif); }
#onboarding .aw-focus { border-color: rgba(233, 238, 238, 0.22); }
#page-me .aw-wheels { margin-top: 12px; }
#page-me .aw-wheel { height: 156px; }
#page-me .aw-scroll { -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 26%, #000 74%, transparent 100%); mask-image: linear-gradient(180deg, transparent 0, #000 26%, #000 74%, transparent 100%); }
#page-me .aw-pad { height: 60px; }
#page-me .aw-focus { top: 60px; border-color: var(--aeon-line); }
#page-me .aw-item { color: var(--aeon-ink); font-family: var(--aeon-serif); font-size: 16px; }

/* 时辰三态分段控件（me 编辑器；与 onboarding 三选同语义） */
.aw-seg { display: flex; gap: 8px; margin-top: 8px; }
.aw-seg-btn {
  flex: 1;
  padding: 11px 6px;
  border-radius: 10px;
  border: 0.5px solid;
  background: transparent;
  font-size: 13px;
  cursor: pointer;
  transition: border-color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1), color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-me .aw-seg-btn { border-color: var(--aeon-line); color: var(--aeon-ink-soft); }
#page-me .aw-seg-btn.on { border-color: var(--aeon-green-deep); color: var(--aeon-ink); }

/* 出生双历确认：一张安静的校对纸，不与会话主流争抢视觉层级。 */
.calendar-kind { margin-top: 22px; }
.calendar-stated { display: grid; gap: 7px; margin-top: 16px; font-size: 12px; line-height: 1.5; }
.calendar-stated input {
  width: 100%;
  border: 0;
  border-bottom: 0.5px solid currentColor;
  border-radius: 0;
  padding: 8px 1px;
  background: transparent;
  color: inherit;
  font-size: 14px;
  outline: none;
  opacity: 0.82;
}
.calendar-leap { display: flex; align-items: center; gap: 8px; margin-top: 12px; font-size: 12.5px; line-height: 1.5; }
/* 09-27:家中记录的农历默认收起,只留一句问话(与滚轮上的农历不重复);点开才出输入 */
.calendar-stated-toggle { margin-top: 16px; padding: 0; border: 0; background: none; color: inherit; opacity: 0.72; font-size: 12.5px; line-height: 1.6; text-decoration: underline dotted; text-underline-offset: 3px; cursor: pointer; }
#onboarding .calendar-stated-toggle { color: var(--aeon-ink-ondark-soft); }
.calendar-proof { margin-top: 18px; padding: 15px 0 2px; border-top: 0.5px solid currentColor; color: inherit; }
.calendar-proof p { margin: 0; }
.calendar-dual { font-family: var(--aeon-serif); font-size: 15px; line-height: 1.75; letter-spacing: 0.01em; }
.calendar-clock { margin-top: 7px !important; font-size: 12.5px; line-height: 1.75; opacity: 0.72; }
.calendar-proof--warn { border-top-color: var(--aeon-warn-deep); }
.calendar-conflict { margin-top: 13px; padding: 12px 13px; border-radius: 10px; background: rgba(159, 109, 69, 0.08); font-size: 12.5px; line-height: 1.7; }
.calendar-candidates { display: grid; gap: 8px; margin-top: 10px; }
.calendar-candidates label { display: grid; grid-template-columns: 18px 1fr; gap: 7px; align-items: start; cursor: pointer; }
.calendar-candidates input { margin-top: 4px; accent-color: var(--aeon-green); }
.calendar-confirm { display: grid; grid-template-columns: 20px 1fr; gap: 9px; align-items: start; margin-top: 18px; font-size: 13px; line-height: 1.7; cursor: pointer; }
.calendar-confirm input { margin-top: 4px; accent-color: var(--aeon-green); }
.calendar-confirm.is-muted { opacity: 0.46; cursor: default; }
#onboarding .calendar-kind .aw-seg-btn { border-color: rgba(233, 238, 238, 0.18); color: var(--aeon-ink-ondark-soft); }
#onboarding .calendar-kind .aw-seg-btn.on { border-color: var(--aeon-silver); color: var(--aeon-ink-ondark); background: rgba(233, 238, 238, 0.08); }
#onboarding .calendar-stated,
#onboarding .calendar-leap,
#onboarding .calendar-proof { color: var(--aeon-ink-ondark-soft); }
#onboarding .calendar-dual { color: var(--aeon-ink-ondark); }
#onboarding .calendar-conflict { background: rgba(192, 137, 87, 0.1); }
#page-me .calendar-editor .calendar-kind { margin-top: 10px; }
#page-me .calendar-proof { color: var(--aeon-ink-soft); }
#page-me .calendar-dual { color: var(--aeon-ink); }

/* 出生地等 datalist 输入：去掉原生下拉指示器（暗底上会渲染成黑色块） */
#onboarding .ob-line,
#page-me input[list] {
  appearance: none;
  -webkit-appearance: none;
}
#onboarding .ob-line::-webkit-calendar-picker-indicator,
#page-me input[list]::-webkit-calendar-picker-indicator {
  display: none !important;
  opacity: 0;
}

/* 命盘术语浮层被 #page-chart > * 的层叠上下文困在底栏之下：仅浮层开启时抬升该子树（关闭即还原，不动底栏/其它页） */
#page-chart-bazi:has(#bz-term-pop.on),
#page-chart-ziwei:has(#zw-term-pop.on) {
  z-index: 75;
}

/* 紫微流盘时段行：真机横向滑动与点击手感 */
#page-chart-ziwei .zw-flow-picks {
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
}
#page-chart-ziwei .zw-flow-picks button {
  touch-action: manipulation;
  min-height: 32px;
}

/* 揭示转场收尾等待：数据未就绪时石盘静置微光呼吸 */
#ob-reveal.breathe .obr-plate {
  animation: obr-plate-breathe 2.8s ease-in-out infinite;
  opacity: 1;
  transform: scale(1);
}
@keyframes obr-plate-breathe {
  0%, 100% { box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.26), inset 0 1px 0 rgba(231, 236, 236, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.5), 0 0 26px rgba(185, 194, 194, 0.05), 0 18px 46px rgba(0, 0, 0, 0.5); }
  50% { box-shadow: inset 0 0 0 1px rgba(185, 194, 194, 0.38), inset 0 1px 0 rgba(231, 236, 236, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.5), 0 0 34px rgba(185, 194, 194, 0.1), 0 18px 46px rgba(0, 0, 0, 0.5); }
}
/* 切档快版：同一庄重语言，节奏收紧（盘 1.6s 浮现；收官复卦逐爻凝现与常速共用同一编排，见 #ob-reveal.seal） */
#ob-reveal.fast.play .obr-plate { animation-duration: 1.6s; }
#ob-reveal.fast.play .obr-line { animation-delay: 1.2s; animation-duration: 1s; }
@media (prefers-reduced-motion: reduce) {
  #ob-reveal.breathe .obr-plate { animation: none; }
}

/* ===================== 主题建议 · topic-advice（暗 · 仪式 · 两幕式；作用域 #page-topic-advice，不进 :root）
   注意：此前清理脚本曾以 "#page-topic" 子串误伤本块——重清死类时 token 必须写成 "#page-topic-advice" 全名。 ===================== */
#page-topic-advice {
  --aeon-bg-dark: #17120d;
  --aeon-ink-ondark: #f1ebe0;
  --aeon-ink-ondark-soft: #a89d8d;
  --aeon-silver: #b9c2c2;
  --aeon-silver-hi: #e9eeee;
  --aeon-silver-deep: #7f8c8c;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  overflow: hidden;
  margin: -18px -16px 0;
  min-height: 100vh; min-height: 100dvh;
  background: radial-gradient(120% 70% at 50% 16%, #221913 0%, var(--aeon-bg-dark) 60%, #100b06 100%);
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-sans);
}
#page-topic-advice::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(1.1px 1.1px at 16% 10%, rgba(231, 236, 236, 0.3), transparent 60%),
    radial-gradient(1px 1px at 84% 13%, rgba(231, 236, 236, 0.24), transparent 60%),
    radial-gradient(1px 1px at 26% 90%, rgba(231, 236, 236, 0.18), transparent 60%),
    radial-gradient(1px 1px at 76% 92%, rgba(231, 236, 236, 0.18), transparent 60%);
}
#page-topic-advice .ta-stage {
  position: relative;
  z-index: 1;
  max-width: 430px;
  margin: 0 auto;
  min-height: 100vh; min-height: 100dvh;
  display: flex;
  flex-direction: column;
  padding: calc(12px + env(safe-area-inset-top)) 24px calc(40px + env(safe-area-inset-bottom));
}
#page-topic-advice .ta-bar { display: flex; align-items: center; justify-content: space-between; min-height: 36px; }
#page-topic-advice .ta-back { background: none; border: 0; color: var(--aeon-ink-ondark-soft); font-size: 26px; line-height: 1; padding: 2px 10px 2px 0; cursor: pointer; }
#page-topic-advice .ta-eyebrow { font-family: var(--aeon-mono); font-size: 11px; letter-spacing: 0.46em; text-indent: 0.46em; color: var(--aeon-ink-ondark-soft); text-transform: uppercase; }
#page-topic-advice .ta-bar-pad { width: 26px; }

/* —— 陪等：主题经卦（三画）逐爻呼吸，自下而上错相位 —— */
#page-topic-advice .ta-wait {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding-bottom: 10vh;
  transition: opacity 0.6s ease;
}
/* final 落定：陪等舞台整体安静退场，结果再登场 */
#page-topic-advice .ta-wait.settle { opacity: 0; }
#page-topic-advice .ta-wait p { margin: 34px 0 0; font-family: var(--aeon-serif); font-size: 15px; letter-spacing: 0.12em; color: var(--aeon-ink-ondark-soft); animation: ta-breath 2.4s ease-in-out infinite; }
/* 克制透出：headline 成句后一次安静浮现（单句、居中、不更新、不直播） */
#page-topic-advice .ta-wait p.ta-stream {
  margin: 30px 32px 0;
  max-width: 30ch;
  font-size: 15px;
  line-height: 1.85;
  letter-spacing: 0.04em;
  text-align: center;
  color: var(--aeon-ink-ondark);
  opacity: 0.9;
  animation: ta-hint-in 1.6s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}
@keyframes ta-hint-in {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 0.9; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  #page-topic-advice .ta-wait p.ta-stream { animation: none; }
}
@keyframes ta-breath { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }
#page-topic-advice .ta-trigram { display: grid; gap: 12px; justify-items: center; }
#page-topic-advice .ta-trigram i {
  display: block;
  width: 66px;
  height: 3px;
  border-radius: 1.5px;
  background: linear-gradient(180deg, var(--aeon-silver-hi), var(--aeon-silver) 55%, var(--aeon-silver-deep));
}
#page-topic-advice .ta-trigram i.yin { background: linear-gradient(90deg, var(--aeon-silver) 0 42%, transparent 42% 58%, var(--aeon-silver) 58%); opacity: 0.8; }
#page-topic-advice .ta-trigram.wait i { animation: ta-yao-breath 3.2s ease-in-out infinite; }
#page-topic-advice .ta-trigram.wait i:nth-child(3) { animation-delay: 0s; }
#page-topic-advice .ta-trigram.wait i:nth-child(2) { animation-delay: 0.55s; }
#page-topic-advice .ta-trigram.wait i:nth-child(1) { animation-delay: 1.1s; }
@keyframes ta-yao-breath { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.95; } }
#page-topic-advice .ta-trigram.mini { display: inline-grid; gap: 4px; }
#page-topic-advice .ta-trigram.mini i { width: 22px; height: 2px; opacity: 0.8; animation: none; }

/* —— 资料不全 / 稍后再看：安静态 —— */
#page-topic-advice .ta-quiet {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  gap: 26px;
  padding-bottom: 10vh;
}
#page-topic-advice .ta-quiet p { margin: 0; font-family: var(--aeon-serif); font-size: 15.5px; line-height: 2; color: var(--aeon-ink-ondark-soft); max-width: 26ch; }
#page-topic-advice .ta-retry {
  padding: 12px 26px;
  border: 1px solid rgba(233, 238, 238, 0.24);
  border-radius: 3px;
  background: transparent;
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-serif);
  font-size: 14px;
  letter-spacing: 0.2em;
  text-indent: 0.2em;
  cursor: pointer;
}

/* —— 两幕式结果：第一幕经卦小符 + 判语；第二幕逐节读述 —— */
#page-topic-advice .ta-result { display: flex; flex-direction: column; }
#page-topic-advice .ta-act-one {
  min-height: calc(100vh - 120px); min-height: calc(100dvh - 120px);
  display: flex;
  flex-direction: column;
  justify-content: center;
  position: relative;
  padding-bottom: 8vh;
}
#page-topic-advice .ta-veyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.44em;
  color: var(--aeon-ink-ondark-soft);
  text-transform: uppercase;
  margin-bottom: 30px;
}
#page-topic-advice .ta-h1 { margin: 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 30px; line-height: 1.6; letter-spacing: 0.01em; }
#page-topic-advice .ta-h1.en { font-size: 26px; line-height: 1.42; max-width: 19ch; text-wrap: balance; }
#page-topic-advice .ta-scrollcue {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 26px;
  text-align: center;
  font-family: var(--aeon-mono);
  font-size: 11px;
  letter-spacing: 0.26em;
  color: var(--aeon-ink-ondark-soft);
  text-transform: uppercase;
  animation: ta-cue-bob 2.6s ease-in-out infinite;
  opacity: 0.7;
}
@keyframes ta-cue-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(4px); } }
#page-topic-advice .ta-act-two { padding: 10px 0 40px; }
#page-topic-advice .ta-sec { margin-top: 30px; }
#page-topic-advice .ta-sec:first-child { margin-top: 0; }
#page-topic-advice .ta-sec .t {
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--aeon-green-hi);
}
#page-topic-advice .ta-sec .b { margin-top: 11px; font-size: 15px; line-height: 2.05; color: var(--aeon-ink-ondark); }
#page-topic-advice .ta-sec.en .b { font-family: var(--aeon-serif); line-height: 1.9; }
#page-topic-advice .ta-foot { margin-top: 46px; display: flex; flex-wrap: wrap; gap: 10px; }
#page-topic-advice .ta-ghost {
  padding: 12px 20px;
  border: 1px solid rgba(233, 238, 238, 0.26);
  border-radius: 3px;
  background: transparent;
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-serif);
  font-size: 14px;
  cursor: pointer;
}
#page-topic-advice .ta-ghost.subtle { border-color: transparent; color: var(--aeon-ink-ondark-soft); }
#page-topic-advice [data-reveal] { opacity: 0; transform: translateY(7px); filter: blur(1.5px); }
#page-topic-advice [data-reveal].shown {
  opacity: 1;
  transform: none;
  filter: none;
  transition: opacity 1s cubic-bezier(0.22, 0.61, 0.36, 1), transform 0.95s cubic-bezier(0.22, 0.61, 0.36, 1), filter 1s ease;
}
@media (prefers-reduced-motion: reduce) {
  #page-topic-advice .ta-trigram.wait i,
  #page-topic-advice .ta-wait p,
  #page-topic-advice .ta-scrollcue { animation: none; opacity: 1; }
  #page-topic-advice [data-reveal] { opacity: 1; transform: none; filter: none; }
}

/* ===================== Onboarding 视觉升级（课题 C；作用域 #onboarding / #ob-reveal） ===================== */
/* 启动：AEON 字距一次性收拢入场；复卦阳爻 4s 玉光呼吸；Begin 细银边呼吸 */
#onboarding .ob-brand { animation: ob-brand-in 1.2s cubic-bezier(0.22, 0.61, 0.36, 1) both; }
@keyframes ob-brand-in {
  from { opacity: 0; letter-spacing: 0.5em; }
  to { opacity: 1; letter-spacing: 0.34em; }
}
#onboarding .ob-fu.big i.ret { animation: ob-ret-breathe 4s ease-in-out infinite; }
@keyframes ob-ret-breathe { 0%, 100% { opacity: 0.78; } 50% { opacity: 1; } }
#onboarding .ob-cta--breathe { animation: ob-cta-breathe 4s ease-in-out infinite; }
@keyframes ob-cta-breathe {
  0%, 100% { border-color: rgba(233, 238, 238, 0.22); }
  50% { border-color: rgba(233, 238, 238, 0.42); }
}
/* 输入行聚焦：底线银 → 玉绿 0.4s 滑入 */
#onboarding .ob-line { transition: border-bottom-color 0.4s ease; }
#onboarding .ob-line:focus { border-bottom-color: var(--aeon-silver-deep); } /* 09-27 Ryan:聚焦不要泛绿框;绿只作语义点缀不当描边 */
/* 滚轮选中行：压印进石面的极淡凹槽（浮雕手法：内上亮、内下暗） */
#onboarding .aw-focus {
  background: rgba(0, 0, 0, 0.16);
  border-radius: 6px;
  border-top-color: rgba(0, 0, 0, 0.35);
  border-bottom-color: rgba(231, 236, 236, 0.08);
  box-shadow: inset 0 1.5px 2.5px rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(231, 236, 236, 0.05);
}
/* 时辰三选：纯线条小符（准确=实心点、大概=半环、未知=空环） */
#onboarding .ob-opt { grid-template-columns: auto 1fr; align-items: center; column-gap: 14px; display: grid; }
#onboarding .ob-opt-tx { display: grid; gap: 5px; }
/* 时辰三态 · 月相银珠（玉/宝石圆点同配方、月光银基色）：准确=满月，大概=半明，未知=无光之珠 */
#onboarding .ob-ic { width: 13px; height: 13px; border-radius: 50%; position: relative; flex: none; }
#onboarding .ob-ic.dot {
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, var(--aeon-silver-hi) 0%, var(--aeon-silver) 55%, var(--aeon-silver-deep) 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(6, 5, 3, 0.55),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.3),
    0 0 0 0.5px rgba(127, 140, 140, 0.55),
    0 1px 3px rgba(0, 0, 0, 0.4);
}
#onboarding .ob-ic.half {
  background:
    linear-gradient(100deg, rgba(23, 18, 13, 0) 44%, rgba(16, 11, 6, 0.82) 56%),
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, var(--aeon-silver-hi) 0%, var(--aeon-silver) 55%, var(--aeon-silver-deep) 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(6, 5, 3, 0.55),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.22),
    0 0 0 0.5px rgba(127, 140, 140, 0.5),
    0 1px 3px rgba(0, 0, 0, 0.4);
}
#onboarding .ob-ic.ring {
  background: radial-gradient(circle at 33% 30%, rgba(233, 238, 238, 0.16) 0%, rgba(35, 30, 24, 0.9) 58%, rgba(12, 9, 5, 0.95) 100%);
  box-shadow:
    inset -1px -1.2px 2px rgba(0, 0, 0, 0.5),
    inset 1px 1px 1.2px rgba(233, 238, 238, 0.14),
    0 0 0 0.5px rgba(185, 194, 194, 0.5);
  opacity: 0.9;
}
/* 时辰选定后时间轮苏醒示意（选择被接住） */
#onboarding .ob-timewrap.wake { animation: ob-wake 1.1s cubic-bezier(0.22, 0.61, 0.36, 1); }
@keyframes ob-wake {
  from { opacity: 0.35; transform: translateY(8px); }
}
@media (prefers-reduced-motion: reduce) {
  #onboarding .ob-timewrap.wake { animation: none; }
}

/* 授权：两行节奏 + 同意键玉绿宝石点 */
#onboarding .ob-consent-body.second { margin-top: 14px; }
#onboarding .ob-cta--gem { display: flex; align-items: center; justify-content: center; gap: 12px; }
#onboarding .ob-gem {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: none;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, var(--aeon-green-hi) 0%, var(--aeon-green) 55%, var(--aeon-green-deep) 100%);
  box-shadow: inset -1px -1.4px 2.2px rgba(0, 0, 0, 0.4), inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25), 0 0 0 0.5px rgba(67, 92, 54, 0.55);
}
/* 进度爻线：点亮时一次 0.6s 玉光扫过 */
#onboarding .ob-yao i.lit {
  background: linear-gradient(90deg, var(--aeon-silver-hi), var(--aeon-silver) 45%, var(--aeon-green-hi) 50%, var(--aeon-silver) 55%, var(--aeon-silver-hi));
  background-size: 300% 100%;
  animation: ob-yao-sweep 0.6s ease-out both;
}
@keyframes ob-yao-sweep {
  from { background-position: 100% 0; }
  to { background-position: 0% 0; }
}
/* 揭示：星点第二层极缓视差 */
#ob-reveal::after {
  content: "";
  position: absolute;
  inset: -6%;
  pointer-events: none;
  background:
    radial-gradient(1px 1px at 34% 26%, rgba(231, 236, 236, 0.18), transparent 60%),
    radial-gradient(1px 1px at 64% 72%, rgba(231, 236, 236, 0.14), transparent 60%),
    radial-gradient(1.1px 1.1px at 12% 62%, rgba(231, 236, 236, 0.12), transparent 60%);
  animation: obr-stars-drift 12s ease-in-out infinite alternate;
}
@keyframes obr-stars-drift {
  from { transform: translateY(-4px); }
  to { transform: translateY(4px); }
}
@media (prefers-reduced-motion: reduce) {
  #onboarding .ob-brand,
  #onboarding .ob-fu.big i.ret,
  #onboarding .ob-cta--breathe,
  #onboarding .ob-yao i.lit,
  #ob-reveal::after { animation: none; }
  #onboarding .ob-brand { opacity: 1; letter-spacing: 0.34em; }
}

/* A5：只在键盘式焦点出现时给出稳定焦点环；放在文件末尾并提高作用域权重，
   避免各页面后置的 outline:none 覆盖，同时不改变鼠标点击观感。
   焦点环改墨色细环（撤旧绿方框 + 白光晕 + 绿光圈）：绿只作语义点缀（顺势 / 当前 / 就绪），
   绝不当描边用（守「绿 ≤5%、只点不铺」）。暗色仪式页墨色不可见，换月光银。 */
/* 手指 / 鼠标点进文本框也会命中 :focus-visible（浏览器对文本框一律视作需要可见焦点），
   于是「填字就被框住」。指针交互时撤掉文本框的环，只留各页自带的聚焦底线；键盘走查照旧有环。
   标记默认不打 → 万一脚本没跑，环照常出现（失败方向偏「可访问」，不偏「看不见焦点」）。
   这条特意排在下面的焦点环规则之前：它特异性更高（1,2,2 > 1,1,1）不靠顺序取胜，
   同时让「最后一条 :focus-visible 晚于最后一条 outline:none」这一 ui-contract 断言继续成立。 */
html.pointer-nav :is(#app-shell, #alpha-gate, #policy-sheet, #term-sheet, #confirm-sheet) :is(input, textarea):focus-visible {
  outline: none;
}
:is(#policy-sheet, #term-sheet, #confirm-sheet) :is(button, input, select, textarea, [tabindex]):focus-visible,
:is(#app-shell, #alpha-gate) :is(button, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid rgba(32, 27, 22, 0.5);
  outline-offset: 3px; /* 3px 由 ui-contract「键盘焦点可见」断言钉住，勿改小 */
}
:is(body.shell-dark, body.ask-casting) :is(#app-shell, #policy-sheet, #term-sheet, #confirm-sheet) :is(button, input, select, textarea, [tabindex]):focus-visible {
  outline-color: rgba(185, 194, 194, 0.72);
}

/* ===================== front5 · 三组件按图施工（作用域样式，零 :root；无 outline 规则，焦点环断言不受扰） ===================== */

/* ---------- cardASKUX · 会话优先壳：标题栏 / 左抽屉 / 单一消息流 ---------- */
#page-ask .ask-titlebar {
  position: sticky;
  top: -1px;
  z-index: 12;
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr) 40px;
  /* C-1:窄栏成常态,三件横向对齐取 center(原 start 是给大标题块留的) */
  align-items: center;
  gap: 10px;
  margin: -4px -4px 0;
  /* G12⑤ 栏内节奏:原 5/13 的偏心是给那条渐隐尾巴留的落脚地,尾巴撤了它就没有道理了 ——
     改上下同 9px,40px 圆钮正落在band 正中,底沿那条发丝线才站得住。 */
  padding: 9px 4px;
  /* 卡G·G10(Ryan 裁「上边沿模糊吃信息」):撤 backdrop-filter blur(10px) 与那条渐隐尾巴
     (78%→100% 全透明段)。糊是原版遗留(b27626bc 同款),不是本波新增,按裁定一并改掉:
     实底 0.98,未滚动时无线;滚起来才在底沿落一条 0.5px 发丝线,说明「上头还有内容」。
     糊一撤,从栏底钻过去的正文不再被抹成半糊的一截,栏本身也不再吃掉下面那行字。
     H2:0.98 改全不透明 —— 那 2% 的透底在滚动内容上会随身后深浅浮动出色差,
     Ryan 二验点的"米白不一致"就是它。栏底必须与页身同一个 token,像素同值。 */
  background: var(--aeon-bg);
  border-bottom: 0.5px solid transparent;
  transition: border-bottom-color 0.2s cubic-bezier(0.2, 0.7, 0.2, 1);
}
body.ask-scrolled #page-ask .ask-titlebar {
  border-bottom-color: var(--aeon-line);
}
#page-ask .ask-title-copy { grid-column: 2; min-width: 0; }
#page-ask .ask-title-copy h1 {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
#page-ask .ask-drawer-trigger { grid-column: 1; }
#page-ask .ask-topbar { grid-column: 3; display: flex; justify-content: flex-end; }
#page-ask .ask-topbar-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 50%;
  background: rgba(251, 248, 241, 0.86);
  color: var(--aeon-ink-soft);
  cursor: pointer;
}
#page-ask .ask-topbar-btn[hidden] { display: none; }
#page-ask .ask-topbar-btn svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
#page-ask .ask-topbar-btn:active { background: var(--aeon-sunken); }
#page-ask .ask-recents { margin: 0; }
body.ask-drawer-open { overflow: hidden; }
#page-ask .ask-drawer-backdrop {
  position: fixed;
  inset: 0;
  z-index: 60;
  background: rgba(23, 18, 13, 0.46);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.28s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-drawer-backdrop.on { opacity: 1; pointer-events: auto; }
#page-ask .ask-drawer {
  position: fixed;
  inset: 0 auto 0 0;
  z-index: 70;
  width: min(86vw, 346px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding: calc(18px + env(safe-area-inset-top)) 14px calc(18px + env(safe-area-inset-bottom));
  border-radius: 0 22px 22px 0;
  background: var(--aeon-raised);
  box-shadow: 18px 0 44px rgba(23, 18, 13, 0.28);
  transform: translateX(-103%);
  transition: transform 0.38s cubic-bezier(0.2, 0.7, 0.2, 1);
}
#page-ask .ask-drawer.on { transform: translateX(0); }
#page-ask .ask-drawer-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 2px 4px 14px;
  border-bottom: 0.5px solid var(--aeon-line);
}
#page-ask .ask-drawer-head h2 {
  margin: 0;
  font-family: var(--aeon-serif);
  font-size: 21px;
  font-weight: 500;
  color: var(--aeon-ink);
}
#page-ask .ask-drawer-close,
#page-ask .ask-drawer-manage,
#page-ask .ask-drawer-actions button,
#page-ask .ask-drawer-edit-actions button {
  border: 0;
  background: transparent;
  color: var(--aeon-ink-soft);
  font: 12px/1.2 var(--aeon-sans);
  cursor: pointer;
}
#page-ask .ask-drawer-close { padding: 8px 4px; }
#page-ask .ask-drawer-list {
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 8px 0 20px;
}
#page-ask .ask-drawer-row {
  position: relative;
  display: grid;
  /* F1:行尾多一列给星钮(管理钮之后)。菜单块仍是 grid-column:1/-1,不受列数变化影响。 */
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 4px;
  width: 100%;
  padding: 3px 4px 3px 8px;
  border-bottom: 0.5px solid var(--aeon-line);
  border-radius: 12px;
}
#page-ask .ask-drawer-row:last-child { border-bottom: 0; }
#page-ask .ask-drawer-row.active { background: rgba(236, 230, 218, 0.8); }
#page-ask .ask-drawer-row-main {
  min-width: 0;
  padding: 10px 2px;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
}
#page-ask .ask-drawer-row .row-title { display: flex; align-items: center; gap: 8px; min-width: 0; font-family: var(--aeon-serif); font-size: 15px; color: var(--aeon-ink); }
#page-ask .ask-drawer-row .row-title .tx { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#page-ask .ask-drawer-row .row-meta { display: block; margin-top: 3px; font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.06em; color: var(--aeon-ink-soft); }
#page-ask .ask-drawer-manage { padding: 9px 5px; font-size: 11px; }
/* F1 行尾星钮:未星=空心落款灰,已星=实心次墨。不加框不加底,只是一枚记号。 */
#page-ask .ask-drawer-star {
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--aeon-ink-faint);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
}
#page-ask .ask-drawer-star.on { color: var(--aeon-ink-soft); }
#page-ask .ask-drawer-actions {
  grid-column: 1 / -1;
  display: flex;
  justify-content: flex-end;
  gap: 14px;
  padding: 1px 5px 9px;
}
#page-ask .ask-drawer-actions button { padding: 5px 0; }
#page-ask .ask-drawer-actions button.danger { color: var(--aeon-warn); }
#page-ask .ask-drawer-row.editing { display: block; padding: 10px 8px; }
#page-ask .ask-drawer-rename label {
  display: grid;
  gap: 6px;
  color: var(--aeon-ink-soft);
  font-size: 11px;
}
#page-ask .ask-drawer-rename input {
  width: 100%;
  min-height: 40px;
  padding: 8px 10px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 10px;
  background: #fffdf8;
  color: var(--aeon-ink);
  font: 14px/1.35 var(--aeon-serif);
}
#page-ask .ask-drawer-edit-actions { display: flex; gap: 16px; margin-top: 8px; }
#page-ask .ask-drawer-edit-actions button:first-child { color: var(--aeon-green-deep); }
/* 施工卡 A·A4 → 施工卡 C·C-1 扩面:窄栏原只在会话中成立,现空态同款——
   左抽屉钮(现役 svg icon 原样不换)、中间题名、右新对话钮。题名居中、serif 15px,
   有真题名时它同时是改名入口(点开仍是抽屉里那套现役改名表单)。
   字级/字距/居中三条已上提至 header 段作常态值,此处只余「有题名才可点改名」这一对。 */
#page-ask .page-title-row h1[data-thread-title] { cursor: pointer; }
#page-ask .page-title-row h1[data-thread-title]:active { color: var(--aeon-ink-soft); }
/* A7:抽屉列表的时间组眉(今天/昨天/更早)——mono 小字距,退到落款级灰,只做分组不抢行 */
#page-ask .ask-drawer-group {
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-ink-faint);
  margin: 16px 2px 4px;
}
#page-ask .ask-drawer-list > .ask-drawer-group:first-child { margin-top: 6px; }
#page-ask .ask-recents { transition: opacity 0.7s ease; }
#page-ask.ask-casting .ask-recents { opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: reduce) {
  #page-ask .ask-starter { transition: none; }
  #page-ask .ask-recents { transition: none; }
  #page-ask .ask-drawer, #page-ask .ask-drawer-backdrop { transition: none; }
}

/* ---------- 组件三 · Today 每日一语（front6 仪式焦点卡增补：en 双语与出处行居中版式） ---------- */
#page-home .today-quote-rite .q-cn { margin: -4px 0 12px; font-family: var(--aeon-serif); font-size: 13px; letter-spacing: 0.06em; color: var(--aeon-ink-soft); }
#page-home .today-quote-rite .src-row { margin: 14px 0 0; text-align: center; }

/* ===================== front6 · 精致化专轮（卦象分隔符组件 + 呼吸间距；作用域样式，零 :root，无 outline 规则） ===================== */

/* ---------- 卦象分隔符（全局唯一定义 · 地天泰 ䷊：上坤下乾，天地交而万物通） ----------
   考古复原：DESIGN-SYSTEM §一.6（泰卦爻线分隔：阳爻整线/阴爻断线）+ §二.9（爻线分隔·银）+ 探索稿 V2/V3 同款纹样。
   Ryan 训令落地：吉卦爻线纹样、月光银 #B9C2C2 细线、居中、极轻。
   两翼发丝线向纹样收拢、向页缘淡出——它是一枚章节印，不是一根尺子；亮暗底皆立（银在暗底即"石中透光"）。
   好坏语义绝不用爻线表达（§一.5），它只承担"呼吸与仪式"，故 aria-hidden 由调用方标注。 */
.yao-divider {
  display: flex;
  align-items: center;
  gap: 18px;
  margin: 40px 2px;
}
/* 发丝线取 1px 而非 0.5px：0.5px 背景线在 2x 屏会随子像素对位时隐时现（实测取证），
   1px + 更低透明度视觉等重、栅格化稳定——"极轻"靠透明度实现，不靠赌半像素。 */
.yao-divider .ln {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, rgba(185, 194, 194, 0), rgba(185, 194, 194, 0.45));
}
.yao-divider .ln:last-child {
  background: linear-gradient(90deg, rgba(185, 194, 194, 0.45), rgba(185, 194, 194, 0));
}
/* 施工卡 I·I2「疏密点修」:厚 1.5→2、隙 3→2.5(隙厚比 2.00→1.25,靠拢六爻水印的 1.18)。
   泰卦章印是族里唯一一件真被压扁的:六根条 1.5px 薄、隙却给到 3px,读成"六条断线"而不是一枚卦。
   整枚总高 6×1.5+5×3=24 → 6×2+5×2.5=24.5,占位几乎不动,不牵动任何页的段距。
   取色 --aeon-silver 按 I1「分隔线语言=月光银族」原样不动。 */
.yao-divider .gua {
  display: flex;
  flex-direction: column;
  gap: 2.5px;
}
.yao-divider .gua i {
  display: block;
  width: 30px;
  height: 2px;
  border-radius: 1px;
  background: var(--aeon-silver, #b9c2c2);
}
.yao-divider .gua i.yin {
  background: linear-gradient(90deg, var(--aeon-silver, #b9c2c2) 0 40%, transparent 40% 60%, var(--aeon-silver, #b9c2c2) 60% 100%);
}

/* ---------- Today 呼吸间距细则（front7 收束：呼吸让位信息效率——首屏三单元 1.5 屏内全见） ---------- */
#page-home .today-kicker { margin-bottom: 20px; }
#page-home .yao-divider { margin: 46px 2px; }
#page-home .today-doors { margin-top: 30px; }
#page-home .today-almanac { margin-top: 22px; }
#page-home .today-lookback { margin-top: 30px; }

/* ===================== front7 · 信息架构修正轮（tasks/280 首屏三单元宪法回归；作用域样式，零 :root，无 outline 规则） ===================== */

/* 主题词眉题：签卡上方一行小字（曾经的 31px 大标降位——它是签卡的目录行，不是版面的主角） */
#page-home .today-theme-eyebrow {
  margin: 22px 0 0;
  text-align: center;
  font-family: var(--aeon-mono);
  font-size: 10.5px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--aeon-ink-soft);
}
#page-home .today-theme-eyebrow + .today-quote-rite { margin-top: 8px; }
/* 定调紧凑行（签卡开关 false 的交付默认态）：headline 以中量衬线出场，一行定调，不占半屏 */
#page-home .today-tone-lead {
  margin: 14px 0 0;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 21px;
  line-height: 1.5;
  letter-spacing: 0.01em;
  color: var(--aeon-ink);
}
/* 单元三 · 轮换轻行回宪法排位（四门之后）：上距一口气，下方由深读分隔符换气 */
#page-home .today-rotate { margin: 26px 0 0; }

/* ===================== front-a · Ask 外壳收口（第 4 步；全部追加不改既有行；#page-ask 作用域，零 :root；
   答案卡红线（设计考古 ①-E 全清单选择器）一个不触——本段只含空态章节印/抽屉尾行/额度提示行三件新组件） ===================== */

/* 空态章节印：引导句与三个开头之间落一枚泰卦印(全局 .yao-divider 组件原样复用,此处只定间距收窄) */
#page-ask .ask-rest .yao-divider { margin: 18px 14px; } /* G6:26→18,段距收紧 */

/* 历史抽屉尾行：账户与额度轻入口(mono 小字;内测期看剩余次数的捷径,供给数字只住 Me 页) */
#page-ask .ask-drawer-account {
  margin: 2px 18px calc(14px + var(--safe-bottom, 0px));
  padding: 13px 2px 4px;
  border: 0;
  border-top: 0.5px solid var(--aeon-line, #e1dacc);
  background: transparent;
  text-align: left;
  font-family: var(--aeon-mono, "JetBrains Mono Aeon", ui-monospace, monospace);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.14em;
  color: var(--aeon-ink-soft, #7c736a);
  cursor: pointer;
}
#page-ask .ask-drawer-account:active { color: var(--aeon-green-deep, #435c36); }

/* 额度尽头态：composer 上方一行温和提示(次墨 sans 12.5px+文字链去 Me 兑换;不弹层不红字,无动效) */
#page-ask .ask-quota-note {
  position: fixed;
  left: 50%;
  bottom: calc(var(--ask-nav-space) + var(--safe-bottom) + 92px);
  transform: translateX(-50%);
  z-index: 20;
  width: min(calc(100% - 40px), 420px);
  padding: 7px 14px;
  border-radius: 12px;
  background: rgba(244, 241, 232, 0.94);
  text-align: center;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--aeon-ink-soft, #7c736a);
}
#page-ask .ask-quota-note .ask-quota-link {
  border: 0;
  padding: 0;
  background: transparent;
  color: var(--aeon-green-deep, #435c36);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
}

/* Phase D 裁定#1(CONSULTATION 眉行双语收起)已由施工卡 C·C-1 上位:眉行 DOM 整块退役,
   规则无处可挂,故一并撤下。顶栏双语同构同高的初衷不变——现在是同一条窄栏,天然等高。 */

/* ===================== 施工卡 A(fe-shell-a)· 追加段 ===================== */

/* —— A5 底栏让位:会话流里有内容,五页签就沉下去,composer 贴底;上滑即回,回到顶部常显 ——
   只在窄屏成立:≥860px 那条导航已是左侧竖栏、不是底栏,没有"让位"这回事。
   起卦态(body.ask-casting)一律避让本组规则——暗场里的底栏归 2.6s 单一染暗源那套管,
   两套过渡不许同时压在同一个元素上(这是白条根治那条注释的老教训)。 */
/* C-7⑤ 补闸:底距三件(composer + 两条提示行)在「底栏让位」与「键盘让位」之间必须互斥 ——
   nav-away 那条选择器权重(0,3,1)本来压过键盘那条(0,2,1),于是"先滚了几屏、再点输入框"
   这个再常见不过的次序里,composer 会落回 max(10px, safe),正好被键盘吞掉。加 :not() 断开。
   底栏本身不加这道闸:两态同向(都要沉下去),让它们叠着反而稳。 */
@media (max-width: 859.98px) {
  body.ask-nav-away:not(.ask-casting) .bottom-nav {
    opacity: 0;
    pointer-events: none;
    transform: translate(-50%, calc(100% + 24px));
    visibility: hidden;
    transition: opacity 0.28s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0.32s;
  }
  body.ask-nav-away:not(.ask-casting):not(.visual-keyboard-open) .ask-input-bar {
    bottom: max(10px, var(--safe-bottom));
  }
  body.ask-nav-away:not(.ask-casting):not(.visual-keyboard-open) #page-ask .ask-quota-note {
    bottom: calc(max(10px, var(--safe-bottom)) + 92px);
  }
}
/* 减动效不必在此另立规则:本文件已有一条全局 `*{transition:none!important}` 的 reduce 兜底。 */

/* —— A14 合盘入口不藏:卡片原位、原样,右上角一行细字说"暂不开放";点一下就地展开一句说明 ——
   .ex-in 补的上边距 = 原 .ex-status 那一行的行高 + 下边距,腾出被 absolute 抽走的那段,
   卡片其余部分一像素不移。 */
#page-explore .ex-method.is-notopen { cursor: pointer; }
#page-explore .ex-method.is-notopen .ex-in { padding-top: 30px; }
#page-explore .ex-method .ex-flag {
  position: absolute;
  top: 0;
  right: 0;
  margin-bottom: 0;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--aeon-silver-deep);
}
#page-explore .ex-notopen-line {
  display: none;
  margin-top: 12px;
  font-family: var(--aeon-serif);
  font-size: 13px;
  line-height: 1.66;
  color: var(--aeon-ink-soft);
  max-width: 19em;
}
#page-explore .ex-method.note-open .ex-notopen-line { display: block; }

/* ===================== 施工卡 B(fe-ask-b)· Ask 链路波 ===================== */

/* —— B-1 澄清槽通道B:与通道A同一座暗场舞台,只补三样这条路才有的件 —— */
/* 时间轮进暗场:轮子本体沿用建档 aw-* 一套,这里只把颜色换到暗场token(与 #onboarding 同法) */
#page-ask .ask-pause .pz-wheelwrap { display: flex; justify-content: center; margin: 6px 0 2px; }
#page-ask .ask-pause .aw-wheels { margin-top: 0; }
#page-ask .ask-pause .aw-wheel { height: 148px; }
#page-ask .ask-pause .aw-pad { height: 56px; }
#page-ask .ask-pause .aw-focus { top: 56px; border-color: rgba(233, 238, 238, 0.22); }
#page-ask .ask-pause .aw-item {
  color: var(--aeon-ink-ondark);
  font-family: var(--aeon-mono);
  font-size: 18px;
}
/* 三径行右侧的小注(「清晨 · 下午 · 深夜…」):次墨、不抢主行 */
#page-ask .ask-pause .pz-opt small {
  font-family: var(--aeon-sans);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--aeon-ink-ondark-soft);
}
/* 「不知道也不要紧」那一屏:正题在静心行(19px)上,这里只承次行 */
#page-ask .ask-pause .pz-know-sub {
  margin: 2px 0 0;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.75;
  color: var(--aeon-ink-ondark-soft);
}

/* —— B-1 降级说明:只在该线程首答出现,竖线引一句诚实话,不是警告 —— */
#page-ask .ask-caveat {
  margin: 0 0 14px;
  padding-left: 13px;
  border-left: 2px solid rgba(185, 194, 194, 0.65);
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--aeon-ink-soft);
}

/* —— B-2 回写确认条:一行温和,不弹层不红字;成功后化一句轻回执再淡出 —— */
#page-ask .ask-amend {
  margin-top: 20px;
  padding: 13px 2px 3px;
  border-top: 0.5px solid var(--aeon-line);
  transition: opacity 0.9s ease;
}
#page-ask .ask-amend.out { opacity: 0; pointer-events: none; }
#page-ask .ask-amend-q {
  margin: 0;
  font-family: var(--aeon-sans);
  font-size: 13px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-amend-q b {
  font-family: var(--aeon-mono);
  font-weight: 500;
  font-size: 12.5px;
  letter-spacing: 0.05em;
  color: var(--aeon-ink);
}
#page-ask .ask-amend-row { display: flex; gap: 22px; margin-top: 8px; }
#page-ask .ask-amend-row button {
  padding: 4px 0;
  border: 0;
  background: none;
  font-family: var(--aeon-sans);
  font-size: 13px;
  cursor: pointer;
}
#page-ask .ask-amend-yes { color: var(--aeon-green-deep); border-bottom: 1px dotted rgba(92, 122, 75, 0.55) !important; }
#page-ask .ask-amend-no { color: var(--aeon-ink-soft); }
#page-ask .ask-amend-row button:disabled { opacity: 0.45; cursor: default; }
#page-ask .ask-amend-done {
  margin: 0;
  font-family: var(--aeon-sans);
  font-size: 13px;
  color: var(--aeon-ink-soft);
}

/* —— B-3 资料信号操作链:一行墨色文字链(不用绿,绿只留给发送钮) —— */
#page-ask .ask-psignal {
  margin-top: 16px;
  padding-top: 13px;
  border-top: 0.5px solid var(--aeon-line);
  font-family: var(--aeon-sans);
  font-size: 13px;
  line-height: 1.7;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-psignal button {
  padding: 0 0 1px;
  border: 0;
  border-bottom: 1px dotted rgba(32, 27, 22, 0.4);
  background: none;
  font: inherit;
  font-size: 13px;
  color: var(--aeon-ink);
  cursor: pointer;
}

/* —— B-4 挂档案:零印章体例(细线胶囊 + 银宝石点 + 文字);全屏的绿仍只有发送钮 —— */
#page-ask .ask-attach-btn {
  align-self: end;
  width: 34px;
  min-width: 34px;
  height: 34px;
  min-height: 34px;
  margin-bottom: 2px;
  padding: 0 0 2px;
  display: grid;
  place-items: center;
  border: 0.5px solid var(--aeon-line);
  border-radius: 50%;
  background: transparent;
  color: var(--aeon-ink-soft);
  font-size: 19px;
  line-height: 1;
  cursor: pointer;
}
#page-ask .ask-attach-btn[hidden] { display: none; }
#page-ask .ask-attach-btn:active { background: var(--aeon-sunken); }
#page-ask .ask-subject-chip { grid-column: 1 / -1; margin: 1px 2px 6px; }
#page-ask .ask-subject-chip[hidden] { display: none; }
#page-ask .ask-subject-pill {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 8px 5px 9px;
  border: 0.5px solid var(--aeon-line);
  border-radius: 999px;
  background: var(--aeon-raised);
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  color: var(--aeon-ink);
}
/* 银宝石点=档案行原银配方(非玉绿:绿只留发送钮) */
#page-ask .silver-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex: 0 0 auto;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 24%),
    radial-gradient(circle at 33% 30%, var(--aeon-silver-hi) 0%, var(--aeon-silver) 55%, var(--aeon-silver-deep) 100%);
  box-shadow:
    inset -1px -1.2px 1.8px rgba(30, 24, 12, 0.28),
    inset 1px 1px 1.2px rgba(255, 255, 255, 0.3),
    0 0 0 0.5px rgba(127, 140, 140, 0.45);
}
#page-ask .ask-subject-x {
  padding: 0 0 0 2px;
  border: 0;
  background: none;
  color: var(--aeon-ink-faint);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
}
/* 答案署名行右侧:mono 一行「看的是 · 妈妈」,零印章 */
#page-ask .ask-answer-subject {
  margin-left: auto;
  font-family: var(--aeon-mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  color: var(--aeon-ink-faint);
}
/* 选人 sheet:与线索 sheet 同一套配方,只补行体例 */
#page-ask .ask-who-sub {
  margin: 4px 0 14px;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-who-row {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  padding: 13px 2px;
  border: 0;
  border-bottom: 0.5px solid var(--aeon-line);
  background: transparent;
  text-align: left;
  cursor: pointer;
}
#page-ask .ask-who-row:first-child { border-top: 0.5px solid var(--aeon-line); }
#page-ask .ask-who-row:active { background: var(--aeon-sunken); }
#page-ask .ask-who-name { min-width: 0; }
#page-ask .ask-who-name b {
  display: block;
  font-family: var(--aeon-serif);
  font-weight: 500;
  font-size: 15px;
  color: var(--aeon-ink);
}
#page-ask .ask-who-name small {
  display: block;
  margin-top: 2px;
  font-family: var(--aeon-sans);
  font-size: 12px;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-who-cur {
  margin-left: auto;
  font-family: var(--aeon-mono);
  font-size: 9.5px;
  letter-spacing: 0.18em;
  color: var(--aeon-ink-faint);
}
/* 卡G·G5 绿收敛:选中行的名字原是玉绿(--aeon-green-deep),全页的绿只该留给发送钮。
   改墨色;选中态改由一条极细的墨色左缘承担(与「当前」那枚 mono tag 并存,互不抢)。 */
#page-ask .ask-who-row.on .ask-who-name b { color: var(--aeon-ink); }
#page-ask .ask-who-row.on { box-shadow: inset 2px 0 0 var(--aeon-ink-faint); }
/* 「＋ 新增一位档案」=纯文字行(全屏圆圈只剩 +钮与发送钮,不再多一个圈) */
#page-ask .ask-who-add {
  border-bottom: 0;
  color: var(--aeon-ink-soft);
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  letter-spacing: 0.02em;
}

/* —— B-5 软限一行:额度尽头态同体例,常驻不闪不弹 —— */
#page-ask .ask-soft-note {
  position: fixed;
  left: 50%;
  bottom: calc(var(--ask-nav-space) + var(--safe-bottom) + 92px);
  transform: translateX(-50%);
  z-index: 20;
  width: min(calc(100% - 40px), 420px);
  margin: 0;
  font-family: var(--aeon-sans);
  font-size: 12.5px;
  line-height: 1.65;
  text-align: center;
  color: var(--aeon-ink-soft);
}
#page-ask .ask-soft-note[hidden] { display: none; }
#page-ask .ask-soft-link {
  padding: 0 0 1px;
  border: 0;
  border-bottom: 1px dotted rgba(32, 27, 22, 0.4);
  background: none;
  font: inherit;
  color: var(--aeon-ink);
  cursor: pointer;
}
#page-ask.ask-casting .ask-soft-note { opacity: 0; pointer-events: none; }
@media (max-width: 859.98px) {
  body.ask-nav-away:not(.ask-casting):not(.visual-keyboard-open) #page-ask .ask-soft-note {
    bottom: calc(max(10px, var(--safe-bottom)) + 92px);
  }
}
/* 两条提示同屏时(额度尽头 + 软限)不叠罗汉:软限让到上一格。二者是兄弟节点,用通用兄弟选择器即可。 */
#page-ask .ask-quota-note:not([hidden]) ~ .ask-soft-note {
  bottom: calc(var(--ask-nav-space) + var(--safe-bottom) + 92px + 42px);
}
@media (max-width: 859.98px) {
  body.ask-nav-away:not(.ask-casting):not(.visual-keyboard-open) #page-ask .ask-quota-note:not([hidden]) ~ .ask-soft-note {
    bottom: calc(max(10px, var(--safe-bottom)) + 92px + 42px);
  }
}

/* ===================== 施工卡 C(fe-ask-c)· 追加段 ===================== */

/* —— C-3(D2)键盘不遮:composer 锚 visualViewport 上沿 ——
   --ask-kb 由 app.js 的 askKeyboardInset() 实测写入(布局视口高 − 可视视口高 − 可视视口上偏移);
   --ask-kb-pad 是同一份数,但收键盘时延后 360ms 才归零(文档高度在键盘退场那一拍不缩=不跳)。
   断点取 ≤859.98px,与 A5 底栏让位同闸(原键盘组关在 ≤560px 里,561–859 的机器根本没让位)。 */
@media (max-width: 859.98px) {
  body.visual-keyboard-open .ask-input-bar {
    bottom: calc(var(--ask-kb, 0px) + 10px);
  }
  /* 有焦点但没键盘(桌面/外接键盘):照旧贴底,不吃 --ask-kb */
  body.ask-input-focused:not(.visual-keyboard-open) .ask-input-bar {
    bottom: max(10px, var(--safe-bottom));
  }
  /* 两条提示行(额度尽头/软限)跟着 composer 一起抬,别被键盘吞掉 */
  body.visual-keyboard-open #page-ask .ask-quota-note,
  body.visual-keyboard-open #page-ask .ask-soft-note {
    bottom: calc(var(--ask-kb, 0px) + 10px + 92px);
  }
  body.visual-keyboard-open #page-ask .ask-quota-note:not([hidden]) ~ .ask-soft-note {
    bottom: calc(var(--ask-kb, 0px) + 10px + 92px + 42px);
  }
  /* 让位空间只加不减:基线 padding 一像素不动,键盘那一份加在其上;ask-kb-hold 让它晚一拍再撤。
     选择器必须带上 #page-ask —— 底距的真源是 `#page-ask { padding: … }`(ID 权重 1,0,0),
     原来那两条 `body.ask-input-focused .ask-page`(0,2,0)压根压不过它,从来没生效过(潜伏缺陷,顺手修)。 */
  body.visual-keyboard-open #page-ask,
  body.ask-kb-hold #page-ask {
    padding-bottom: calc(var(--ask-nav-space) + var(--ask-composer-space) + 22px + var(--safe-bottom) + var(--ask-kb-pad, 0px));
  }
  /* 底栏让位补上 :not(.ask-casting) 守卫 —— 暗场里底栏归 2.6s 单一染暗源那套管,
     两套过渡不许同时压在同一个元素上(A5 那条老教训,键盘组原先漏了这一闸)。 */
  body.ask-input-focused:not(.ask-casting) .bottom-nav,
  body.visual-keyboard-open:not(.ask-casting) .bottom-nav {
    opacity: 0;
    pointer-events: none;
    transform: translate(-50%, calc(100% + 24px));
    visibility: hidden;
    transition: opacity 0.28s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0.32s;
  }
}
/* 滚动锚点归文档滚动条本人 —— 原先写在 .ask-page 上,而它不是滚动容器,那句从来没生效过。
   有了它,scrollIntoView({block:"end"}) 才会把末条停在 composer 上沿而不是键盘底下。 */
html:has(body.visual-keyboard-open) {
  scroll-padding-bottom: calc(var(--ask-kb, 0px) + var(--ask-composer-space) + 18px);
}

/* —— C-4(D4)抽屉跟手拖关 ——
   pan-y:竖向照旧交给列表自己滚,横向留给我们判手势(不写它,浏览器会先把横划吞成滚动)。
   dragging 期间掐掉过渡=位移严丝合缝跟着手指;松手一摘,余下那段仍由现役 0.38s 曲线走完。 */
#page-ask .ask-drawer { touch-action: pan-y; }
#page-ask .ask-drawer.dragging,
#page-ask .ask-drawer-backdrop.dragging { transition: none; }

/* —— C-6(D6)深链锚点的「轻高亮一拍」——
   1.5s 一拍就褪:只用现役玉绿(--aeon-green-hi)在卡外描一圈柔光,不改底色、不加边框、不闪。
   box-shadow 自带跟随元素圆角,故各卡形状原样不动。
   减动效不必在此另立规则:本文件已有一条全局 `*{animation:none!important}` 的 reduce 兜底,
   届时只剩「滚到那张卡」这一件——信息不丢,动效归零。 */
.anchor-flash {
  animation: aeon-anchor-flash 1.5s cubic-bezier(0.22, 0.61, 0.36, 1) 1;
}
@keyframes aeon-anchor-flash {
  0% { box-shadow: 0 0 0 0 rgba(147, 176, 119, 0); }
  16% { box-shadow: 0 0 0 3px rgba(147, 176, 119, 0.42), 0 0 18px rgba(147, 176, 119, 0.2); }
  100% { box-shadow: 0 0 0 0 rgba(147, 176, 119, 0); }
}

/* —— C-7③ 滚动容器补齐:惯性 + 不外溢 ——
   全库原只有两处(紫微流盘行、抽屉列表)做过这两件事,其余滚动层都在漏:
   滚到头会把手势接力给身后的整页(sheet 尤其明显——读到条款末尾,底下的页跟着走),
   iOS 老 WebView 里还会失去惯性、变成一格一格的生硬滚动。
   一处一条补齐,不改任何几何。 */
#alpha-gate,
#onboarding,
.sheet article,
.term-sheet article {
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}
#page-chart-bazi .flowrow {
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
}
/* 紫微流盘行原只挡了横向:斜着一甩仍会带着整页竖滚 */
#page-chart-ziwei .zw-flow-picks { overscroll-behavior: contain; }
/* 抽屉列表原有 contain,补上惯性 */
#page-ask .ask-drawer-list { -webkit-overflow-scrolling: touch; }
/* 根滚动条:挡掉下拉刷新与滚动链(起卦暗场里手一带就刷新整页=最伤的一种打断);
   iOS 的橡皮筋回弹保留,contain 只断链不禁弹。 */
html { overscroll-behavior-y: contain; }

/* ===================== 施工卡 G(热修)· 追加段 ===================== */

/* —— G1 composer 三列显式定位 ——
   ＋钮会隐(挂上档案后)、chip 会现,自动流一变就散;列位一律写死,状态怎么变都不串位。
   chip 与免责行各自成行、跨满全宽;三件主件同处一行。 */
#page-ask .ask-subject-chip { grid-column: 1 / -1; }
#page-ask .ask-attach-btn { grid-column: 1; }
#page-ask .ask-input-bar textarea { grid-column: 2; min-width: 0; }
#page-ask .ask-input-bar .send-button { grid-column: 3; }
#page-ask .ask-lawline { grid-column: 1 / -1; }
/* 挂上档案后 ＋钮隐去,首列没人 —— 连列带缝一起收,免得 composer 左边空一格 */
#page-ask .ask-input-bar.has-subject { grid-template-columns: 1fr auto; }
#page-ask .ask-input-bar.has-subject textarea { grid-column: 1; }
#page-ask .ask-input-bar.has-subject .send-button { grid-column: 2; }

/* —— G3 回放静态直出:历史本就该即刻可读,不走逐单元浮入 ——
   回放本来就不挂 pending/go,这条是写死的保险:任何门控/动画都到不了回放身上。 */
#page-ask .ask-answer-static,
#page-ask .ask-answer-static * {
  opacity: 1;
  animation: none;
}

/* —— G12 窄栏题名靠左(A 案,原版骨血)——
   构型 = [乾卦钮][题名] …………… [＋],iOS 经典;撤 C-1 那条 text-align:center。
   ① 间距:栏内既有 column-gap 10px + 题名自身 padding-left 2px = 12px。
      贴死了像挤在一起,豁开了又断成两件;12px 让钮与题名读成一个单元。
   ② 光学垂直居中:题名 serif 15px,与 40px 圆钮同处 align-items:center。
      衬线字的墨迹重心偏上(无降部时行盒下半截是空的),几何居中会显得"浮着";
      故整体下压 0.5px —— 只这一点点,肉眼不觉得移动,只觉得站稳了。
   ③ 长题名照旧 ellipsis(.ask-title-copy h1 已有 overflow/text-overflow/nowrap)。
   ④ 没有历史时乾卦钮不在场,首列连列带缝收掉,题名不往右豁。 */
#page-ask .ask-title-copy { text-align: left; }
#page-ask .ask-title-copy h1 {
  padding-left: 2px;
  /* 光学下压半像素:用 padding 不用 transform —— transform 会把这行字推进合成层,
     非整数位移下衬线会发虚;padding 走正常排版,字口保持锐利。
     量(canvas 真墨迹):基线 ≈48.1,「问事」墨迹 35.1–50.1(心 42.6)、"Ask" 37.1–49.1(心 43.1),
     圆钮心 43.0 —— 下压半像素后中文差 0.44px、英文差 0.06px,都在一个设备像素以内。 */
  padding-top: 1px;
}
#page-ask .ask-titlebar { grid-template-columns: 0 minmax(0, 1fr) 40px; }
#page-ask.ask-has-history .ask-titlebar { grid-template-columns: 40px minmax(0, 1fr) 40px; }

/* —— G6 补:英文空态另收一档上距 ——
   英文两句引导语在 375 上各占两行,整块比中文高 51px;上距若照中文的 58,
   三条开头会被推到 322,常驻水印(286–412)就正好卡在「提示行~开头条」那道缝里 —— 犯 G6 断言。
   注:样张三的英文态量出来是同一个毛病(缝 262–338 / 水印 300–426),属样张未覆盖的口径,
   这里按 G6 断言收,不按样张收;中文一档仍与样张同值(问候 h2 顶 151 ≈ 样张 150)。
   门用 html[lang]——applyLanguage 会把 documentElement.lang 设成 state.lang,与既有体例同源。 */
html[lang="en"] #page-ask .ask-rest { padding-top: 20px; }

/* ===================================================================
   施工卡 H(收尾四件)· 追加段
   =================================================================== */

/* —— H1③ composer 以下直至页底:不留任何模糊/渐变遮罩 ——
   body::after 那层 92px 渐隐(front7 为「正文被浮空胶囊切成半行」而设)在问事页要撤:
   会话一滚底栏就自己让位(A5),本就不存在被胶囊切的场面,那层雾反而成了 Ryan 说的"糊"。
   其余页面照旧保留 —— 它们没有 composer,也没有底栏让位,渐隐仍在解真问题。 */
body.page-ask::after {
  display: none;
}

/* —— H1④ 选人 sheet 贴底:下沿不许露出暗带 ——
   safe-area 内边距本就在(padding-bottom: 26px + safe)。这里再补一道封底:
   用与卡同色的实心投影往下铺 80px,iOS 上视口高度抖动(URL 栏收放)那一瞬也不会露出身后暗幕。 */
#page-ask .ask-sheet-card {
  box-shadow: 0 -18px 50px rgba(23, 18, 13, 0.3), 0 80px 0 0 var(--aeon-raised);
}

/* ===== 09-26 前端收官 · 追问收口(软限)——话与「另起一问」坐进 composer 卡内,输入框让位 ===== */
#page-ask .ask-soft-inbar {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: center;
  gap: 4px 14px;
  min-height: 48px;
  padding: 10px 12px 6px;
  text-align: center;
}
#page-ask .ask-soft-inbar .ask-soft-line {
  font-family: var(--aeon-serif);
  font-size: 15px;
  line-height: 1.6;
  color: var(--aeon-ink);
}
#page-ask .ask-soft-inbar .ask-soft-link {
  padding: 0 0 1px;
  border: 0;
  border-bottom: 1px solid rgba(92, 122, 75, 0.55);
  background: none;
  font: inherit;
  font-family: var(--aeon-sans);
  font-size: 13.5px;
  color: var(--aeon-green-deep, #435c36);
  cursor: pointer;
}
#page-ask.ask-soft-closed #ask-question,
#page-ask.ask-soft-closed #ask-submit,
#page-ask.ask-soft-closed #ask-attach-btn,
#page-ask.ask-soft-closed #ask-subject-chip,
#page-ask.ask-soft-closed #ask-source-chip { display: none; }

/* ===== 09-26 前端收官 · 探索页「不确定用哪个」导诊——此前从未套样式(裸原生控件) ===== */
#page-explore .ex-sel { position: relative; z-index: 2; margin: 30px 0 6px; }
#page-explore .ex-sel-label {
  margin: 12px 0 12px;
  font-family: var(--aeon-serif, "Newsreader", "Source Han Serif SC", serif);
  font-size: 15.5px;
  letter-spacing: 0.01em;
  color: var(--aeon-ink, #201b16);
}
#page-explore .ex-sel-form {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 38px;
  gap: 10px;
  align-items: center;
  padding: 6px 6px 6px 16px;
  border: 0.5px solid var(--aeon-line, #e1dacc);
  border-radius: 22px;
  background: rgba(251, 248, 241, 0.97);
  box-shadow: 0 8px 24px rgba(32, 27, 22, 0.06);
}
#page-explore .ex-sel-form:focus-within {
  border-color: rgba(92, 122, 75, 0.55);
  box-shadow: 0 0 0 3px rgba(92, 122, 75, 0.12), 0 8px 24px rgba(32, 27, 22, 0.06);
}
#page-explore .ex-sel-input {
  min-width: 0;
  width: 100%;
  padding: 9px 0;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: 15px;
  color: var(--aeon-ink, #201b16);
  outline: none;
}
#page-explore .ex-sel-input::placeholder { color: var(--aeon-ink-soft, #7c736a); opacity: 0.8; }
#page-explore .ex-sel-go {
  position: relative;
  width: 38px;
  height: 38px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  font-size: 0;
  color: transparent;
  cursor: pointer;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 22%),
    radial-gradient(circle at 33% 30%, #93b077 0%, #5c7a4b 55%, #435c36 100%);
  box-shadow:
    inset -1px -1.4px 2.2px rgba(30, 24, 12, 0.34),
    inset 1px 1.1px 1.3px rgba(255, 255, 255, 0.25),
    0 0 0 0.5px rgba(67, 92, 54, 0.5),
    0 1px 2px rgba(67, 92, 54, 0.24);
}
#page-explore .ex-sel-go::after {
  content: "\2192";
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-size: 16px;
  line-height: 1;
  color: #f4f1e8;
}
#page-explore .ex-sel-go:active { transform: scale(0.96); }
#page-explore .ex-sel-out { margin-top: 14px; }
#page-explore .ex-sel-wait { margin: 4px 2px 0; font-size: 13px; color: var(--aeon-ink-soft, #7c736a); }
#page-explore .ex-sel-und {
  margin: 0 2px 10px;
  font-family: var(--aeon-serif, serif);
  font-size: 14.5px;
  line-height: 1.7;
  color: var(--aeon-ink, #201b16);
}
#page-explore .ex-sel-rec,
#page-explore .ex-sel-fallback {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  padding: 14px 16px;
  border: 0.5px solid var(--aeon-line, #e1dacc);
  border-radius: 14px;
  background: var(--aeon-raised, #fbf8f1);
  color: var(--aeon-ink, #201b16);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
#page-explore .ex-sel-rec:active,
#page-explore .ex-sel-fallback:active { transform: scale(0.99); }
#page-explore .ex-sel-rec > span:first-child { min-width: 0; }
#page-explore .ex-sel-rec b {
  display: block;
  margin-bottom: 4px;
  font-family: var(--aeon-serif, serif);
  font-weight: 500;
  font-size: 16px;
}
#page-explore .ex-sel-rec small { display: block; font-size: 13px; line-height: 1.6; color: var(--aeon-ink-soft, #7c736a); }
#page-explore .ex-sel-rec .arr { flex: none; font-size: 18px; color: var(--aeon-green, #5c7a4b); }

/* 09-27 真机(Ryan):问事侧栏入口常在;没有会话时抽屉给一句空态 */
#page-ask .ask-drawer-empty { margin: 0; padding: 18px 6px; font-size: 13.5px; line-height: 1.7; color: var(--aeon-ink-soft); }

/* 09-27 真机(Ryan):页面像应用不像网页——禁双击缩放(捏合缩放由 app.js 手势事件拦) */
html, body { touch-action: manipulation; }

/* 09-27 我的页编辑器:闰月勾选框不吃表单输入的通栏/描边样式(之前被拉成一整条空框,勾在正中、文字被挤到右侧折行) */
#page-me .me-ed .calendar-leap { display: flex; align-items: center; gap: 10px; }
#page-me .me-ed .calendar-leap input[type="checkbox"],
.calendar-leap input[type="checkbox"] {
  flex: none;
  width: 18px;
  height: 18px;
  min-height: 0;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 3px;
  background: none;
  box-shadow: none;
  appearance: auto;
  -webkit-appearance: checkbox;
  accent-color: #435c36;
}
#onboarding .calendar-leap input[type="checkbox"] { accent-color: #93b077; }

/* ===================== lock-q1:额度卡追加行 + 购买页「次数与会员」(Ryan 09-27 定样张) ===================== */
#page-me .me-quota.is-low::before { background: var(--aeon-warn); }
#page-me .me-quota-dim { color: var(--aeon-ink-soft); }
#page-me .me-quota-low { margin: 4px 0 8px; font-size: 13px; line-height: 1.6; color: var(--aeon-warn); }
/* 09-27 Ryan 真机「充值入口在哪」:虚线小字改整行实按钮 */
#page-me .me-quota-plan-link {
  display: block;
  width: 100%;
  margin-top: 14px;
  padding: 11px 16px;
  border: 0.5px solid var(--aeon-ink);
  border-radius: 12px;
  background: transparent;
  color: var(--aeon-ink);
  font-family: var(--aeon-serif);
  font-size: 14px;
  letter-spacing: 0.08em;
  text-align: center;
  cursor: pointer;
}
#page-me .me-quota-plan-link:active { background: var(--aeon-ink); color: var(--aeon-bg); }

#page-plan {
  --aeon-bg: #f4f1e8;
  --aeon-ink: #201b16;
  --aeon-ink-soft: #7c736a;
  --aeon-ink-faint: #a89d8d;
  --aeon-raised: #fbf8f1;
  --aeon-sunken: #ece6da;
  --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b;
  --aeon-green-hi: #93b077;
  --aeon-green-deep: #435c36;
  --aeon-warn: #b0573a;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative;
  margin: 0 -16px 0;
  padding: 10px 16px 0;
  min-height: 100vh; min-height: 100dvh;
  background: var(--aeon-bg);
  color: var(--aeon-ink);
  font-family: var(--aeon-sans);
}
#page-plan .plan-stage { max-width: 430px; margin: 0 auto; padding: 14px 20px calc(120px + var(--safe-bottom, 0px)); }
#page-plan .plan-bar { display: flex; align-items: center; justify-content: space-between; min-height: 40px; }
#page-plan .plan-back { background: none; border: 0; color: var(--aeon-ink-soft); font-size: 28px; line-height: 1; padding: 2px 10px 2px 0; cursor: pointer; }
#page-plan .plan-eyebrow { font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.26em; color: var(--aeon-ink-faint); }
#page-plan .plan-title { margin: 10px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 26px; line-height: 1.4; color: var(--aeon-ink); }
#page-plan .plan-lead { margin: 8px 0 0; font-size: 13.5px; line-height: 1.75; color: var(--aeon-ink-soft); }
#page-plan .plan-card { margin-top: 18px; padding: 20px; background: var(--aeon-raised); border: 0.5px solid var(--aeon-line); border-radius: 16px; }
#page-plan .plan-lab { font-family: var(--aeon-mono); font-size: 9.5px; letter-spacing: 0.24em; color: var(--aeon-ink-faint); text-transform: uppercase; }
#page-plan .plan-bal { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-top: 12px; }
#page-plan .plan-bal div { padding: 12px 10px; border-radius: 12px; background: var(--aeon-sunken); }
#page-plan .plan-bal b { display: block; font-family: var(--aeon-serif); font-size: 22px; line-height: 1.2; color: var(--aeon-ink); }
#page-plan .plan-bal b small { font-size: 12px; color: var(--aeon-ink-soft); }
#page-plan .plan-bal > div > small { display: block; margin-top: 4px; font-size: 11px; color: var(--aeon-ink-soft); }
#page-plan .plan-offer { position: relative; margin-top: 14px; padding: 20px; background: var(--aeon-raised); border: 0.5px solid var(--aeon-line); border-radius: 16px; }
#page-plan .plan-offer.best { border-color: var(--aeon-green); }
#page-plan .plan-tag { position: absolute; top: -9px; right: 16px; padding: 2px 9px; border-radius: 999px; background: var(--aeon-green); color: #fff; font-size: 10.5px; letter-spacing: 0.08em; }
#page-plan .plan-offer h2 { margin: 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 19px; color: var(--aeon-ink); }
#page-plan .plan-sub { margin: 4px 0 0; font-size: 12.5px; color: var(--aeon-ink-soft); }
#page-plan .plan-price { margin-top: 14px; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
#page-plan .plan-price .now { font-family: var(--aeon-serif); font-size: 30px; line-height: 1; color: var(--aeon-ink); }
#page-plan .plan-price .now small { font-size: 14px; margin-left: 2px; }
#page-plan .plan-price .list { font-size: 12.5px; color: var(--aeon-ink-soft); }
#page-plan .plan-price .until { width: 100%; font-size: 12px; color: var(--aeon-ink-faint); margin-top: 2px; }
#page-plan .plan-per { margin: 10px 0 0; font-size: 13px; color: var(--aeon-ink); }
#page-plan .plan-benefits { margin: 12px 0 0; padding: 0; list-style: none; display: grid; gap: 7px; }
#page-plan .plan-benefits li { position: relative; padding-left: 16px; font-size: 13px; line-height: 1.6; color: var(--aeon-ink); }
#page-plan .plan-benefits li::before { content: ""; position: absolute; left: 2px; top: 9px; width: 5px; height: 5px; border-radius: 50%; background: var(--aeon-green); }
#page-plan .plan-note { margin: 10px 0 0; font-size: 12px; line-height: 1.65; color: var(--aeon-ink-soft); }
#page-plan .plan-compare { margin: 14px 2px 0; font-size: 12.5px; color: var(--aeon-ink-soft); letter-spacing: 0.02em; }
#page-plan .plan-cta { margin-top: 12px; width: 100%; min-height: 46px; border-radius: 12px; border: 0.5px solid var(--aeon-ink); background: var(--aeon-ink); color: var(--aeon-bg); font-size: 14px; font-family: var(--aeon-sans); cursor: pointer; }
#page-plan .plan-rule { margin-top: 22px; padding: 16px 18px; border-left: 2px solid var(--aeon-line); }
#page-plan .plan-rule h3 { margin: 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 15px; color: var(--aeon-ink); }
#page-plan .plan-rule p { margin: 6px 0 0; font-size: 13px; line-height: 1.75; color: var(--aeon-ink-soft); }
#page-plan .plan-foot { margin-top: 26px; font-size: 11.5px; line-height: 1.7; color: var(--aeon-ink-faint); }

/* 09-27 Ryan:起局时刻/地点不再当必填步——「此刻 14:32 · 长沙 (改)」一行,点「改」才展开 */
.cast-page .cast-prefill,
#page-meihua .mh-prefill {
  margin-top: 28px;
  width: 100%;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 2px;
  border: 0;
  border-bottom: 1px solid var(--aeon-line, rgba(233, 238, 238, 0.16));
  background: transparent;
  color: inherit;
  font-size: 18px;
  line-height: 1.5;
  text-align: left;
  cursor: pointer;
}
.cast-page .cast-prefill .pf-main,
#page-meihua .mh-prefill .pf-main { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cast-page .cast-prefill .pf-edit,
#page-meihua .mh-prefill .pf-edit { flex: none; font-size: 12.5px; letter-spacing: 0.08em; color: var(--aeon-ink-soft, #a89d8d); text-decoration: underline dotted; text-underline-offset: 3px; }

/* r2:结果页眉行下一行,服务端实际采用的起局时刻·地点 */
.cast-page .cast-ctx, #page-meihua .mh-ctx { margin: 6px 0 0; font-size: 12px; letter-spacing: 0.06em; color: var(--aeon-ink-soft, #7c736a); }

/* ===================== lock-a1:管理台(我的 → 管理;只有管理员账号看得到) ===================== */
#page-admin {
  --aeon-bg: #f4f1e8; --aeon-ink: #201b16; --aeon-ink-soft: #7c736a; --aeon-ink-faint: #a89d8d; --aeon-raised: #fbf8f1; --aeon-sunken: #ece6da; --aeon-line: #e1dacc;
  --aeon-green: #5c7a4b; --aeon-green-hi: #93b077; --aeon-green-deep: #435c36; --aeon-warn: #b0573a;
  --aeon-serif: "Newsreader", "Source Han Serif SC", "Songti SC", "STSong", Georgia, serif;
  --aeon-sans: "PingFang SC", "Source Han Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aeon-mono: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace;
  position: relative; margin: 0 -16px 0; padding: 10px 16px 0; min-height: 100vh; min-height: 100dvh; background: var(--aeon-bg); color: var(--aeon-ink); font-family: var(--aeon-sans);
}
#page-admin .admin-stage { max-width: 430px; margin: 0 auto; padding: 14px 20px calc(120px + var(--safe-bottom, 0px)); }
#page-admin .admin-bar { display: flex; align-items: center; justify-content: space-between; min-height: 40px; }
#page-admin .admin-back { background: none; border: 0; color: var(--aeon-ink-soft); font-size: 28px; line-height: 1; padding: 2px 10px 2px 0; cursor: pointer; }
#page-admin .admin-eyebrow { font-family: var(--aeon-mono); font-size: 10px; letter-spacing: 0.26em; color: var(--aeon-ink-faint); }
#page-admin .admin-title { margin: 10px 0 0; font-family: var(--aeon-serif); font-weight: 500; font-size: 26px; line-height: 1.4; }
#page-admin .admin-lead { margin: 8px 0 0; font-size: 13.5px; line-height: 1.75; color: var(--aeon-ink-soft); }
#page-admin .admin-card { margin-top: 18px; padding: 18px; background: var(--aeon-raised); border: 0.5px solid var(--aeon-line); border-radius: 16px; }
#page-admin .admin-lab { font-family: var(--aeon-mono); font-size: 9.5px; letter-spacing: 0.24em; color: var(--aeon-ink-faint); text-transform: uppercase; margin-bottom: 12px; }
#page-admin .admin-sub { margin: 18px 0 8px; font-size: 12px; letter-spacing: 0.08em; color: var(--aeon-ink-soft); }
#page-admin .admin-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; }
#page-admin .admin-num b { display: block; font-family: var(--aeon-serif); font-weight: 500; font-size: 24px; line-height: 1.2; }
#page-admin .admin-num small { display: block; margin-top: 2px; font-size: 11.5px; color: var(--aeon-ink-soft); }
#page-admin .admin-chips { display: flex; flex-wrap: wrap; gap: 8px; }
#page-admin .admin-chip { padding: 8px 14px; border: 0.5px solid var(--aeon-line); border-radius: 999px; background: transparent; color: var(--aeon-ink); font-family: var(--aeon-serif); font-size: 14px; letter-spacing: 0.04em; cursor: pointer; }
#page-admin .admin-chip.sel { border-color: var(--aeon-ink); background: var(--aeon-ink); color: var(--aeon-bg); }
#page-admin .admin-hint { margin: 10px 0 0; font-size: 12px; line-height: 1.7; color: var(--aeon-ink-soft); }
#page-admin .admin-row { display: flex; gap: 10px; align-items: flex-end; margin-top: 12px; }
#page-admin .admin-row > .admin-field { flex: 1; min-width: 0; }
#page-admin .admin-row > .admin-field.grow { flex: 2; }
#page-admin .admin-field { display: block; margin-top: 12px; }
#page-admin .admin-row .admin-field { margin-top: 0; }
#page-admin .admin-field span { display: block; margin-bottom: 5px; font-size: 11.5px; letter-spacing: 0.06em; color: var(--aeon-ink-soft); }
#page-admin .admin-field input { width: 100%; box-sizing: border-box; height: 42px; padding: 0 12px; border: 0.5px solid var(--aeon-line); border-radius: 10px; background: #fff; color: var(--aeon-ink); font-size: 15px; font-family: var(--aeon-sans); }
#page-admin .admin-field input:focus { outline: none; border-color: var(--aeon-ink-soft); }
#page-admin .admin-btn { flex: none; margin-top: 14px; min-height: 42px; padding: 0 18px; border: 0.5px solid var(--aeon-ink); border-radius: 10px; background: var(--aeon-ink); color: var(--aeon-bg); font-family: var(--aeon-serif); font-size: 14px; letter-spacing: 0.08em; cursor: pointer; }
#page-admin .admin-row .admin-btn { margin-top: 0; }
#page-admin .admin-btn.ghost { background: transparent; color: var(--aeon-ink); }
#page-admin .admin-btn.danger { border-color: var(--aeon-warn); color: var(--aeon-warn); background: transparent; }
#page-admin .admin-btn.danger:not(.ghost) { background: var(--aeon-warn); color: #fff; }
#page-admin .admin-btn[disabled] { opacity: 0.5; cursor: default; }
#page-admin .admin-msg { margin: 12px 0 0; font-size: 13px; line-height: 1.7; color: var(--aeon-ink-soft); }
#page-admin .admin-msg.ok { color: var(--aeon-green-deep); }
#page-admin .admin-msg.err { color: var(--aeon-warn); }
#page-admin .admin-warn { margin: 8px 0 0; padding: 10px 12px; border-left: 2px solid var(--aeon-warn); background: rgba(176, 87, 58, 0.06); font-size: 12.5px; line-height: 1.7; color: var(--aeon-ink); }
#page-admin .admin-codes { margin: 10px 0 0; padding: 12px; max-height: 260px; overflow: auto; border: 0.5px solid var(--aeon-line); border-radius: 10px; background: #fff; font-family: var(--aeon-mono); font-size: 11.5px; line-height: 1.9; letter-spacing: 0.01em; white-space: pre-wrap; word-break: break-all; -webkit-user-select: all; user-select: all; }
#page-admin .mono { font-family: var(--aeon-mono); font-size: 12px; }
#page-admin .admin-list { border-top: 0.5px solid var(--aeon-line); }
#page-admin .admin-item { border-bottom: 0.5px solid var(--aeon-line); }
#page-admin .admin-item-head { display: grid; grid-template-columns: auto 1fr auto; grid-template-areas: "k n d" "c c s"; gap: 3px 10px; width: 100%; padding: 12px 2px; border: 0; background: transparent; text-align: left; font: inherit; color: var(--aeon-ink); cursor: pointer; }
#page-admin .admin-item-head .k { grid-area: k; font-family: var(--aeon-serif); font-size: 15px; }
#page-admin .admin-item-head .n { grid-area: n; font-size: 13px; color: var(--aeon-ink-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#page-admin .admin-item-head .d { grid-area: d; font-size: 11.5px; color: var(--aeon-ink-faint); }
#page-admin .admin-item-head .c { grid-area: c; font-size: 12px; color: var(--aeon-ink-soft); }
#page-admin .admin-item-head .s { grid-area: s; font-size: 11.5px; color: var(--aeon-green-deep); }
#page-admin .admin-item-head .s.expired, #page-admin .admin-item-head .s.voided { color: var(--aeon-ink-faint); }
#page-admin .admin-detail { padding: 2px 2px 14px; }
#page-admin .admin-code-row { display: grid; grid-template-columns: 1fr auto; gap: 2px 10px; padding: 7px 0; border-top: 0.5px dashed var(--aeon-line); font-size: 12.5px; }
#page-admin .admin-code-row .st { color: var(--aeon-ink-soft); }
#page-admin .admin-code-row.used .st { color: var(--aeon-green-deep); }
#page-admin .admin-code-row.void .st { color: var(--aeon-ink-faint); }
#page-admin .admin-code-row .who { grid-column: 1 / -1; font-size: 11.5px; color: var(--aeon-ink-faint); }
#page-admin .admin-confirm { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 12px; padding: 12px; border: 0.5px solid var(--aeon-line); border-radius: 10px; background: var(--aeon-sunken); font-size: 13px; line-height: 1.6; }
#page-admin .admin-confirm span { flex: 1 1 100%; }
#page-admin .admin-confirm .admin-btn { margin-top: 0; min-height: 36px; padding: 0 14px; font-size: 13px; }
#page-admin .admin-kv { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 0.5px dashed var(--aeon-line); font-size: 13.5px; }
#page-admin .admin-kv span { color: var(--aeon-ink-soft); flex: none; }
#page-admin .admin-kv b { font-weight: 500; text-align: right; word-break: break-all; }
#page-me .me-admin .me-quota-plan-link { margin-top: 12px; }

/* 09-28 Ryan:登录后先空白再出石盘 → 启动层石盘(index 内联,会话一确认就转);正式开盘同角接手后淡掉 */
.boot-rite { position: fixed; inset: 0; z-index: 60; background: #f4f1e8; transition: opacity 0.38s ease; }
.boot-rite[hidden] { display: none; }
.boot-rite.out { opacity: 0; pointer-events: none; }
.boot-rite .wheel { position: absolute; left: calc(50% - 104px); top: calc(46vh - 104px); top: calc(46dvh - 104px); width: 208px; height: 208px; opacity: 0.92; filter: drop-shadow(0 10px 22px rgba(32, 27, 22, 0.16)); }
.boot-rite .wspin { position: absolute; inset: 0; animation: today-wheel-slow 32s linear infinite; }
.boot-rite svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.boot-rite .rcap { position: absolute; left: 0; right: 0; top: calc(46vh + 160px); top: calc(46dvh + 160px); margin: 0; text-align: center; font-family: "JetBrains Mono Aeon", "SF Mono", ui-monospace, monospace; font-size: 10px; letter-spacing: 0.3em; color: #7c736a; }

/* 09-28 Ryan 定:兑换/入账后的小仪式——滑到额度卡、数字滚到新值、左侧玉绿线呼吸一次、一句浮出;不盖章 */
#page-me .me-quota .me-quota-n { font-variant-numeric: tabular-nums; }
#page-me .me-quota.is-credited::before { animation: me-quota-breathe 1.8s ease-in-out 1; transform-origin: center; }
@keyframes me-quota-breathe { 0% { opacity: 1; transform: scaleY(1); } 40% { opacity: 0.4; transform: scaleY(0.7); } 100% { opacity: 1; transform: scaleY(1); } }
#page-me .me-quota-credit { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 12px 0 2px; opacity: 0; transform: translateY(6px); animation: me-credit-rise 0.9s ease-out 0.8s forwards; }
#page-me .me-quota-credit p { margin: 0; font-family: var(--aeon-serif); font-size: 14px; letter-spacing: 0.04em; color: var(--aeon-ink); }
#page-me .me-quota-credit-seal { flex: none; display: block; }
@keyframes me-credit-rise { to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) { #page-me .me-quota-credit { animation: none; opacity: 1; transform: none; } #page-me .me-quota.is-credited::before { animation: none; } }

/* 09-28 Ryan:「我的」页语言+动效并成一张「设置」卡 */
#page-me .me-set-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 12px; }
#page-me .me-set-row .language-switch.settings { margin-top: 0; }
#page-me .me-set-lab { font-size: 14px; color: var(--aeon-ink); }

/* 09-28 Ryan 定稿:应验录行标=爻线(应了阳爻/没应阴爻/说不清淡阴爻/回访一点);结论词在日期行;卡顶近六问叠成一卦 */
#page-me .me-echo-head { justify-content: space-between; }
#page-me .me-eyao { flex: none; position: relative; width: 22px; height: 22px; margin-top: 1px; }
#page-me .me-eyao::before, #page-me .me-eyao::after { content: ""; position: absolute; top: 10px; height: 2.4px; border-radius: 1px; background: var(--aeon-ink); }
#page-me .me-eyao.hit::before { left: 0; right: 0; }
#page-me .me-eyao.hit::after { display: none; }
#page-me .me-eyao.miss::before { left: 0; width: 8.5px; }
#page-me .me-eyao.miss::after { right: 0; width: 8.5px; }
#page-me .me-eyao.unclear::before { left: 0; width: 8.5px; background: var(--aeon-ink-faint); }
#page-me .me-eyao.unclear::after { right: 0; width: 8.5px; background: var(--aeon-ink-faint); }
#page-me .me-eyao.note::before { left: 9px; top: 9px; width: 4px; height: 4px; border-radius: 50%; background: var(--aeon-ink-faint); }
#page-me .me-eyao.note::after { display: none; }
#page-me .me-erow-main small i { font-style: normal; color: var(--aeon-ink); }
/* 近六问横排记号(自左到右由早到新):实线应了、断线没应、淡线说不清;横排不成卦(忌讳:无事不占) */
#page-me .me-etrail { flex: none; display: flex; align-items: center; gap: 4px; align-self: flex-start; margin-top: 10px; }
#page-me .me-etrail i { display: block; width: 14px; height: 2.4px; border-radius: 1px; background: var(--aeon-ink); }
#page-me .me-etrail i.miss { background: linear-gradient(90deg, var(--aeon-ink) 0 36%, transparent 36% 64%, var(--aeon-ink) 64% 100%); }
#page-me .me-etrail i.unclear { background: linear-gradient(90deg, var(--aeon-ink-faint) 0 36%, transparent 36% 64%, var(--aeon-ink-faint) 64% 100%); }

/* 09-28 x7:命盘「正在起盘 / 命盘需联网」——盘在服务端起,离线不回退;八字页沿用紫微的卡形 */
#page-chart .chart-net { margin: 20px 0; padding: 22px; border-radius: 16px; border: 1px solid rgba(185, 194, 194, 0.18); background: linear-gradient(160deg, rgba(40, 32, 21, 0.45), rgba(20, 15, 9, 0.45)); text-align: center; font-size: 13.5px; line-height: 1.6; color: var(--aeon-ink-soft); }
#page-chart .chart-net b { display: block; font-family: var(--aeon-serif); font-weight: 500; font-size: 16px; color: var(--aeon-ink); margin-bottom: 6px; }
#page-chart .chart-net p { margin: 0 0 10px; }
#page-chart .chart-net.loading { letter-spacing: .08em; }
#bz-pillars .chart-net { flex: 1; }

/* 09-28 a4:门页验证码步 / 我的页就地验证 */
#alpha-gate .gate-verify { display: grid; gap: 18px; }
#alpha-gate .gate-verify[hidden] { display: none; }
#alpha-gate .gate-link[disabled] { opacity: .45; cursor: default; text-decoration: none; }
#page-me .me-verify { margin-top: 10px; display: grid; gap: 10px; }
#page-me .me-verify .field { margin: 0; }
#page-me .me-verify-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
#page-me .me-verify .text-button[disabled] { opacity: .45; cursor: default; }
#page-me .me-verify .form-error { margin: 0; }

/* 09-28 注销账户(Ryan 点头) */
#page-me .me-delete { border-color: rgba(176, 87, 58, 0.35); }
#page-me .me-delete .field { margin: 8px 0 10px; }
#page-me .me-delete-confirm { color: #b0573a; border-color: rgba(176, 87, 58, 0.55); margin: 0; }
#page-me #me-delete-account { margin-top: 6px; opacity: .7; }

/* 09-28 360:答案下应验一行 / 应验录行高亮 */
#page-ask .ask-echo-line { margin: 10px 0 0; font-size: 12px; letter-spacing: .02em; }
#page-ask .ask-echo-line .text-button { color: var(--aeon-ink-soft); }
#page-me .me-erow-flash { background: rgba(67, 92, 54, 0.10); border-radius: 12px; transition: background .6s ease; }
