/* v8.13 衬线字体子集（Noto Serif CJK SC 约 900 个常用字，OFL 见 fonts/OFL.txt）：本机装了完整字体就直接用本机的；
   font-display:optional——首屏约 100ms 内没到就本次先用系统字体、不中途换字（避免整页重排），下次从缓存直接用 */
@font-face{font-family:"XP Serif";font-weight:100 549;font-display:optional;
  src:local("Noto Serif CJK SC"),local("NotoSerifCJKsc-Regular"),local("Noto Serif SC"),url(/static/fonts/xp-serif-400.woff2) format("woff2")}
@font-face{font-family:"XP Serif";font-weight:550 900;font-display:optional;
  src:local("Noto Serif CJK SC Bold"),local("NotoSerifCJKsc-Bold"),local("Noto Serif SC Bold"),url(/static/fonts/xp-serif-700.woff2) format("woff2")}
:root{
  --fs:1; /* v8.15 字号倍数：html[data-fs] 由 theme.js 在首次绘制前设定 */
  /* v8.11 动效统一：缓动与时长 */
  --ease-out:cubic-bezier(.2,.8,.2,1);--ease-spring:cubic-bezier(.34,1.56,.64,1);--ease-io:cubic-bezier(.65,0,.35,1);
  --t-fast:.18s;--t-mid:.3s;--t-slow:.55s;
  --bg0:#090b17; --bg1:#11162e; --ink:#ebe8f6; --muted:#9c9abb; --faint:#85839f;
  --line:rgba(235,232,246,.09); --line2:rgba(235,232,246,.16);
  --gold:#e8cb8f; --sakura:#f5b8ca; --lav:#b8a9ff;
  --glass:rgba(22,26,52,.55);
  --wood:#86dba6; --fire:#ff9191; --earth:#e6c27c; --metal:#f3f0e4; --water:#86bcff;
  --serif:"XP Serif","Noto Serif SC","Source Han Serif SC","Songti SC","STSong","SimSun",serif;
  --sans:"Inter","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",system-ui,sans-serif;
  --r:18px;--r-sm:10px;--r-md:14px;
  --shadow-1:0 8px 24px -12px rgba(0,0,0,.45);--shadow-2:0 18px 48px -16px rgba(0,0,0,.55);
}
*{box-sizing:border-box}
html{color-scheme:dark}
body{margin:0;min-height:100vh;color:var(--ink);font:calc(15px*var(--fs,1))/1.65 var(--sans);
  background:radial-gradient(1200px 700px at 78% -10%,#2a2457 0%,transparent 60%),
             radial-gradient(900px 600px at -10% 110%,#1d2a52 0%,transparent 60%),
             linear-gradient(180deg,var(--bg1),var(--bg0));overflow-x:hidden}
#sky,#petals{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}
#sky{z-index:0}#petals{z-index:1}
.hidden{display:none!important}

/* 背景星盘 */
.halo{position:fixed;right:-160px;top:-120px;width:760px;height:760px;z-index:0;pointer-events:none;opacity:.55}
.ring{position:absolute;inset:0;width:100%;height:100%;will-change:transform}
.ring circle{fill:none;stroke:rgba(232,203,143,.18);stroke-width:1}
.ring text{fill:rgba(232,203,143,.32);font:16px var(--serif)}
.ring line{stroke:rgba(232,203,143,.2)}
.ring-outer{animation:rot 240s linear infinite}
.ring-inner{animation:rot 160s linear infinite reverse}
@keyframes rot{to{transform:rotate(360deg)}}

.top{position:relative;z-index:2;display:flex;align-items:baseline;gap:16px;padding:26px clamp(20px,5vw,64px)}
.brand{font:600 calc(18px*var(--fs,1)) var(--serif);letter-spacing:.2em}
.brand-mark{color:var(--sakura);display:inline-block;animation:twinkle 3s ease-in-out infinite}
.top-sub{color:var(--faint);font-size:calc(11px*var(--fs,1));letter-spacing:.35em}
@keyframes twinkle{50%{opacity:.4;transform:scale(.85) rotate(20deg)}}

main{position:relative;z-index:2;padding:0 clamp(20px,5vw,64px) 40px;max-width:1240px;margin:0 auto}

/* 首屏 */
.hero{display:grid;grid-template-columns:minmax(0,560px) 1fr;grid-template-areas:"text stage" "form stage";column-gap:40px;align-items:start;min-height:calc(100vh - 140px)}
.hero-text{grid-area:text;padding-top:2vh}
.eyebrow{color:var(--gold);letter-spacing:.3em;font-size:calc(12px*var(--fs,1));margin:0 0 14px}
h1{font:600 calc(clamp(30px,4.2vw,50px)*var(--fs,1))/1.25 var(--serif);margin:0 0 16px;letter-spacing:.04em}
h1 em{font-style:normal;background:linear-gradient(90deg,var(--sakura),var(--lav) 60%,var(--gold));-webkit-background-clip:text;background-clip:text;color:transparent}
.lede{color:var(--muted);max-width:30em;margin:0 0 26px}

.stage{grid-area:stage;position:sticky;top:20px;display:flex;justify-content:center}
.mascot-wrap{position:relative;width:min(440px,100%);height:min(78vh,760px);display:flex;justify-content:center}
.mascot-box{position:relative;height:100%;aspect-ratio:482/900;cursor:pointer;animation:float 6s ease-in-out infinite}
.mascot{position:absolute;inset:0;display:block;height:100%;width:100%;filter:drop-shadow(0 20px 40px rgba(0,0,0,.45));transform-origin:50% 90%;z-index:1;user-select:none;-webkit-user-drag:none;opacity:0;transition:opacity .45s ease}
.mascot.on{opacity:1}
.mascot-box.cast .mascot.on{animation:cast 1.4s ease-in-out infinite}
.mascot-box.cast .glow{animation-duration:.9s;transform:scale(1.4)}
.mascot-box.hop .mascot.on{animation:hop .6s ease-out 2}
@keyframes float{0%,100%{translate:0 0}50%{translate:0 -14px}}
@keyframes cast{50%{filter:drop-shadow(0 0 26px rgba(245,184,202,.55)) brightness(1.08)}}
@keyframes hop{40%{transform:translateY(-18px) scaleY(1.02)}70%{transform:translateY(0) scaleY(.98)}}
.glow{position:absolute;left:37%;top:32.5%;width:110px;height:110px;margin:-55px 0 0 -55px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,240,200,.75),rgba(245,184,202,.25) 40%,transparent 70%);filter:blur(4px);animation:pulse 2.8s ease-in-out infinite;z-index:2;pointer-events:none;mix-blend-mode:screen}
@keyframes pulse{50%{transform:scale(1.35);opacity:.6}}
.sparkles{position:absolute;inset:0;pointer-events:none;z-index:3}
.sparkles i{position:absolute;color:var(--gold);font-style:normal;font-size:calc(12px*var(--fs,1));animation:spark 1.8s ease-out forwards}
@keyframes spark{from{opacity:1;transform:translate(0,0) scale(.6)}to{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.2) rotate(90deg)}}
.bubble{position:absolute;top:2%;right:-40px;z-index:3;max-width:210px;padding:10px 14px;border-radius:var(--r) 16px 4px 16px;
  background:rgba(255,255,255,.92);color:#2a2650;font-size:calc(13px*var(--fs,1));line-height:1.5;box-shadow:0 8px 30px rgba(0,0,0,.3);
  animation:pop .5s var(--ease-spring)}
@keyframes pop{from{transform:scale(.6);opacity:0}}

/* 卡片 & 表单 */
.card{background:var(--glass);border:1px solid var(--line);border-radius:var(--r);backdrop-filter:blur(16px) saturate(130%);-webkit-backdrop-filter:blur(16px) saturate(130%);box-shadow:0 20px 60px rgba(0,0,0,.25)}
.form-card{grid-area:form;padding:24px 26px 18px}
.row{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.lbl{width:calc(52px*var(--fs,1));color:var(--muted);font-size:calc(13px*var(--fs,1));letter-spacing:.1em;flex:none}
.hint{color:var(--faint);font-size:calc(12px*var(--fs,1))}
input,select{font:inherit;color:var(--ink);background:rgba(255,255,255,.04);border:1px solid var(--line2);border-radius:var(--r-sm);padding:8px 11px;outline:none;transition:border-color var(--t-fast) var(--ease-out),box-shadow var(--t-mid) var(--ease-out)}
input:focus,select:focus{border-color:var(--sakura);box-shadow:0 0 0 3px rgba(245,184,202,.16),0 0 22px -4px rgba(184,169,255,.35)}
input::placeholder{color:var(--faint)}
input[type=number]{appearance:textfield;-moz-appearance:textfield}
input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none}
select option{background:#1a1f3d}
.date3{display:flex;align-items:center;gap:6px}
.date3 input{width:64px;text-align:center}.date3 input#y{width:82px}
.date3 span{color:var(--muted);font-size:calc(13px*var(--fs,1));margin-right:4px}
.time{width:130px}
.seg{display:inline-flex;padding:3px;border-radius:var(--r-md);background:rgba(255,255,255,.04);border:1px solid var(--line)}
.seg button{all:unset;cursor:pointer;padding:6px 16px;border-radius:var(--r-sm);color:var(--muted);font-size:calc(14px*var(--fs,1));transition:var(--t-mid) var(--ease-out)}
.seg button.on{background:linear-gradient(135deg,rgba(245,184,202,.25),rgba(184,169,255,.22));color:var(--ink);box-shadow:inset 0 0 0 1px rgba(245,184,202,.35)}
.leap{color:var(--muted);font-size:calc(13px*var(--fs,1));display:flex;gap:6px;align-items:center}
.chips{display:grid;grid-template-columns:repeat(7,auto);gap:6px}
.chips button{all:unset;cursor:pointer;text-align:center;padding:5px 9px;border-radius:var(--r-sm);border:1px solid var(--line);font:calc(15px*var(--fs,1)) var(--serif);color:var(--muted);transition:var(--t-fast) var(--ease-out)}
.chips button small{display:block;font:calc(10px*var(--fs,1)) var(--sans);color:var(--faint)}
.chips button.on{border-color:var(--sakura);color:var(--ink);background:rgba(245,184,202,.12)}
.place{position:relative;flex:1;min-width:200px}.place input{width:100%}
.dropdown{position:absolute;z-index:10;left:0;right:0;top:calc(100% + 6px);list-style:none;margin:0;padding:6px;border-radius:var(--r-md);background:#171c3a;border:1px solid var(--line2);box-shadow:0 18px 40px rgba(0,0,0,.4)}
.dropdown li{padding:7px 10px;border-radius:8px;cursor:pointer;display:flex;justify-content:space-between;gap:10px}
.dropdown li small{color:var(--faint)}
.dropdown li:hover,.dropdown li.act{background:rgba(245,184,202,.12)}
.adv{margin:6px 0 16px;border-top:1px dashed var(--line);padding-top:12px}
.adv summary{cursor:pointer;color:var(--muted);font-size:calc(13px*var(--fs,1));list-style:none}
.adv summary::before{content:"＋ ";color:var(--sakura)}.adv[open] summary::before{content:"－ "}
.adv-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.adv-grid label{display:flex;flex-direction:column;gap:5px;font-size:calc(12px*var(--fs,1));color:var(--muted)}
.adv-grid label.sw{flex-direction:row;align-items:center;gap:8px;font-size:calc(13px*var(--fs,1))}
input[type=checkbox]{accent-color:#f5b8ca;width:16px;height:16px}
.go{all:unset;cursor:pointer;display:block;width:100%;text-align:center;padding:13px 0;border-radius:var(--r-md);position:relative;overflow:hidden;
  font:600 calc(17px*var(--fs,1)) var(--serif);letter-spacing:.6em;color:#1b1838;background:linear-gradient(110deg,var(--sakura),#e8d3ff 45%,var(--gold));box-shadow:0 10px 30px rgba(245,184,202,.25);transition:transform var(--t-fast) var(--ease-out)}
.go:hover{transform:translateY(-1px)}.go:active{transform:translateY(1px) scale(.985)}
.go::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.6) 50%,transparent 70%);transform:translateX(-100%);animation:shine 3.5s ease-in-out infinite}
@keyframes shine{60%,100%{transform:translateX(100%)}}
.tiny{text-align:center;color:var(--faint);font-size:calc(11px*var(--fs,1));margin:10px 0 0;letter-spacing:.15em}

/* 加载 */
.loading{position:fixed;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;background:rgba(9,11,23,.72);backdrop-filter:blur(6px)}
.spin{position:relative;width:180px;height:180px}
.spin svg{width:100%;height:100%;animation:rot 6s linear infinite}
.spin circle{fill:none;stroke:rgba(232,203,143,.5);stroke-width:1}
.spin circle.dash{stroke:var(--sakura);stroke-dasharray:4 10;animation:rot 3s linear infinite reverse;transform-origin:center}
.spin text{fill:var(--gold);font:14px var(--serif)}
.spin-core{position:absolute;inset:0;display:grid;place-items:center;font-size:calc(34px*var(--fs,1));color:var(--sakura);animation:twinkle 1.2s ease-in-out infinite}
#loadText{color:var(--muted);letter-spacing:.2em}

/* 结果 */
.result{margin-top:30px;display:flex;flex-direction:column;gap:22px}
.reveal{opacity:0;transform:translateY(18px);animation:rise .7s var(--ease-out) forwards}
@keyframes rise{to{opacity:1;transform:none}}
.sec{padding:24px 26px}
.sec-h{display:flex;align-items:baseline;gap:12px;margin:0 0 18px}
.sec-h h2{font:600 calc(20px*var(--fs,1)) var(--serif);margin:0;letter-spacing:.12em}
.sec-h .tag{color:var(--faint);font-size:calc(12px*var(--fs,1));letter-spacing:.15em}
.sec-h .num{font:calc(12px*var(--fs,1)) var(--serif);color:var(--gold);border:1px solid rgba(232,203,143,.4);border-radius:50%;width:24px;height:24px;display:grid;place-items:center}

.summary-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.pill{white-space:nowrap;display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;font-size:calc(13px*var(--fs,1));border:1px solid var(--line2)}
.pill.ok{color:#a9f0c6;border-color:rgba(134,219,166,.35);background:rgba(134,219,166,.08)}
.pill.warn{color:#ffd99a;border-color:rgba(230,194,124,.4);background:rgba(230,194,124,.08)}
.pill.bad{color:#ffb0b0;border-color:rgba(255,145,145,.4);background:rgba(255,145,145,.08)}
.notice{margin-top:14px;display:flex;flex-direction:column;gap:8px}
.notice .w{padding:10px 14px;border-radius:var(--r-md);background:rgba(230,194,124,.07);border-left:2px solid var(--earth);color:#e9dcc0;font-size:calc(13.5px*var(--fs,1))}
.ask{padding:14px 16px;border-radius:var(--r-md);background:rgba(184,169,255,.08);border:1px solid rgba(184,169,255,.25);display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between}
.ask p{margin:0;font-size:calc(14px*var(--fs,1));flex:1;min-width:220px}
.ask .btns{display:flex;gap:8px}
.btn{all:unset;cursor:pointer;padding:7px 16px;border-radius:var(--r-sm);font-size:calc(13px*var(--fs,1));border:1px solid var(--line2);transition:var(--t-fast) var(--ease-out)}
.btn:hover{border-color:var(--sakura);background:rgba(245,184,202,.1)}
.btn.pri{background:linear-gradient(135deg,rgba(245,184,202,.3),rgba(184,169,255,.3));border-color:transparent}

.timeline{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border-radius:var(--r-md);overflow:hidden}
.timeline div{background:rgba(14,17,36,.85);padding:12px 14px}
.timeline small{display:block;color:var(--faint);font-size:calc(11px*var(--fs,1));letter-spacing:.1em}
.timeline b{font:500 calc(15px*var(--fs,1)) var(--serif)}
.timeline .main b{color:var(--gold)}

/* 八字 */
.pillars{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.pillar{position:relative;text-align:center;padding:16px 8px 14px;border-radius:var(--r);background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.01));border:1px solid var(--line)}
.pillar.day{border-color:rgba(245,184,202,.4);box-shadow:0 0 0 1px rgba(245,184,202,.15),0 10px 30px rgba(245,184,202,.08)}
.pillar .pos{font-size:calc(11px*var(--fs,1));color:var(--faint);letter-spacing:.3em}
.pillar .ss{font-size:calc(12px*var(--fs,1));color:var(--muted);margin:6px 0 2px;height:18px}
.pillar .gz{font:600 calc(44px*var(--fs,1))/1.15 var(--serif);display:flex;flex-direction:column;align-items:center}
.pillar .cg{font-size:calc(11px*var(--fs,1));color:var(--faint);margin-top:8px;min-height:2.6em}
.wx-木{color:var(--wood)}.wx-火{color:var(--fire)}.wx-土{color:var(--earth)}.wx-金{color:var(--metal)}.wx-水{color:var(--water)}
.bg-木{background:var(--wood)}.bg-火{background:var(--fire)}.bg-土{background:var(--earth)}.bg-金{background:var(--metal)}.bg-水{background:var(--water)}
.bazi-meta>*,.result>*,.hero>*{min-width:0}
.bazi-meta{display:grid;grid-template-columns:260px minmax(0,1fr);gap:22px;margin-top:20px;align-items:start}
.wx-bars{display:flex;flex-direction:column;gap:7px}
.wx-bars .b{display:grid;grid-template-columns:22px 1fr 20px;align-items:center;gap:8px;font:calc(13px*var(--fs,1)) var(--serif)}
.wx-bars .track{height:7px;border-radius:var(--r-sm);background:rgba(255,255,255,.06);overflow:hidden}
.wx-bars .fill{height:100%;border-radius:var(--r-sm);width:0;transition:width 1.2s var(--ease-out)}
.kv{color:var(--muted);font-size:calc(13.5px*var(--fs,1));margin:0 0 8px}.kv b{color:var(--ink);font-weight:500}
.dayun{display:flex;gap:8px;overflow-x:auto;padding:4px 0 6px;scrollbar-width:thin}
.dayun div{flex:none;text-align:center;padding:8px 12px;border-radius:var(--r-md);border:1px solid var(--line);min-width:72px}
.dayun b{display:block;font:500 calc(18px*var(--fs,1)) var(--serif)}.dayun small{color:var(--faint);font-size:calc(11px*var(--fs,1))}

/* 紫微 */
.zw{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(4,minmax(118px,auto));gap:6px}
.pal{position:relative;padding:9px 10px 8px;border-radius:var(--r-md);background:rgba(255,255,255,.025);border:1px solid var(--line);font-size:calc(12px*var(--fs,1));display:flex;flex-direction:column;transition:transform var(--t-mid) var(--ease-out),border-color var(--t-mid) var(--ease-out)}
.pal:hover{transform:translateY(-2px);border-color:var(--line2)}
.pal.ming{border-color:rgba(245,184,202,.55);background:linear-gradient(160deg,rgba(245,184,202,.12),rgba(255,255,255,.02))}
.pal .stars{display:flex;flex-wrap:wrap;gap:2px 8px;align-content:flex-start}
.pal .minor{flex:1;margin-top:4px;color:var(--faint);font:calc(11px*var(--fs,1))/1.5 var(--serif);letter-spacing:.04em}
.star{font:500 calc(15px*var(--fs,1)) var(--serif);color:var(--ink);white-space:nowrap}
.star small{font:calc(10px*var(--fs,1)) var(--sans);color:var(--faint);margin-left:1px}
.sh{display:inline-block;font:calc(10px*var(--fs,1))/1 var(--sans);padding:2px 4px;border-radius:5px;margin-left:3px;vertical-align:2px;color:#151230}
.sh-禄{background:var(--wood)}.sh-权{background:var(--lav)}.sh-科{background:var(--water)}.sh-忌{background:var(--fire)}
.pal .foot-row{display:flex;justify-content:space-between;align-items:flex-end;margin-top:6px;color:var(--faint);font-size:calc(11px*var(--fs,1))}
.pal .pname{font:600 calc(13px*var(--fs,1)) var(--serif);color:var(--gold);letter-spacing:.1em}
.pal .pname em{font-style:normal;font-size:calc(10px*var(--fs,1));color:var(--sakura);margin-left:3px;border:1px solid rgba(245,184,202,.5);border-radius:4px;padding:0 3px}
.pal .gz{font:calc(12px*var(--fs,1)) var(--serif);color:var(--muted)}
.zw-center{grid-column:2/4;grid-row:2/4;border-radius:var(--r-md);padding:18px;text-align:center;display:flex;flex-direction:column;justify-content:center;gap:6px;
  background:radial-gradient(circle at 50% 40%,rgba(184,169,255,.12),transparent 70%);border:1px dashed var(--line2)}
.zw-center .big{font:600 calc(26px*var(--fs,1)) var(--serif);letter-spacing:.15em}
.zw-center p{margin:0;color:var(--muted);font-size:calc(13px*var(--fs,1))}
.sihua{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-top:6px}

/* 表格 */
table{width:100%;border-collapse:collapse;font-size:calc(13.5px*var(--fs,1))}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
th{color:var(--faint);font-weight:400;font-size:calc(12px*var(--fs,1));letter-spacing:.1em}
td .st{font-size:calc(12px*var(--fs,1))}
.witness{margin-top:12px;color:var(--muted);font-size:calc(13px*var(--fs,1))}

.alts{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.alt{padding:16px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.02)}
.alt.main{border-color:rgba(245,184,202,.4)}
.alt h3{margin:0 0 4px;font:600 calc(18px*var(--fs,1)) var(--serif)}
.alt .why{color:var(--faint);font-size:calc(12px*var(--fs,1));margin-bottom:10px}
.alt .gzs{font:500 calc(20px*var(--fs,1)) var(--serif);letter-spacing:.12em;margin-bottom:6px}

.qm{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;max-width:640px}
.gong{padding:12px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.025);font-size:calc(12px*var(--fs,1));min-height:118px;display:flex;flex-direction:column;gap:3px}
.gong .h{display:flex;justify-content:space-between;color:var(--gold);font:600 calc(13px*var(--fs,1)) var(--serif)}
.gong .l{font:calc(15px*var(--fs,1)) var(--serif)}
.gong .s{color:var(--faint)}
.gong.zf{border-color:rgba(232,203,143,.5)}

.actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;padding:6px 0}
.disc{color:var(--faint);font-size:calc(12px*var(--fs,1));text-align:center;max-width:46em;margin:0 auto}
.foot{position:relative;z-index:2;text-align:center;color:var(--faint);font-size:calc(11px*var(--fs,1));padding:24px 20px 34px;letter-spacing:.08em}

/* 响应式 */
@media (max-width:960px){
  .hero{grid-template-columns:1fr;grid-template-areas:"stage" "text" "form";min-height:0}
  .stage{position:relative;top:0}
  .mascot-wrap{height:300px}
  .bubble{right:0;top:0}
  .halo{width:520px;height:520px;right:-200px}
  .bazi-meta{grid-template-columns:minmax(0,1fr)}
  .timeline{grid-template-columns:1fr 1fr}
}
@media (max-width:620px){
  .form-card,.sec{padding:18px 16px}
  .chips{grid-template-columns:repeat(5,auto)}
  .pillar .gz{font-size:calc(34px*var(--fs,1))}
  .pillars{gap:8px}
  .zw{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
  .pal{padding:6px;font-size:calc(10px*var(--fs,1))}.star{font-size:calc(12px*var(--fs,1))}.pal .minor{font-size:calc(9.5px*var(--fs,1))}.pal .foot-row{flex-direction:column;align-items:flex-start;gap:0}
  .zw-center .big{font-size:calc(18px*var(--fs,1))}
  .adv-grid{grid-template-columns:1fr}
  table{font-size:calc(12px*var(--fs,1))}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* 头部按钮 */
.top .ghost{margin-left:auto;font-size:calc(12px*var(--fs,1));padding:5px 14px;color:var(--muted)}
.grow{flex:1;min-width:180px}
.link{all:unset;cursor:pointer;color:var(--faint);font-size:calc(12px*var(--fs,1))}.link:hover{color:var(--sakura)}

/* 历史记录 */
.history{margin:-4px 0 16px;padding-bottom:14px;border-bottom:1px dashed var(--line)}
.hist-head{display:flex;justify-content:space-between;color:var(--muted);font-size:calc(12px*var(--fs,1));letter-spacing:.12em;margin-bottom:8px}
.hist-list{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}
.hist{position:relative;flex:none;cursor:pointer;padding:8px 26px 8px 12px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.03);transition:.2s;max-width:200px}
.hist:hover{border-color:rgba(245,184,202,.45);background:rgba(245,184,202,.07)}
.hist b{display:block;font:500 calc(14px*var(--fs,1)) var(--serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hist small{color:var(--faint);font-size:calc(11px*var(--fs,1));white-space:nowrap}
.hist .x{position:absolute;right:7px;top:5px;color:var(--faint);font-size:calc(14px*var(--fs,1));line-height:1;padding:2px}
.hist .x:hover{color:var(--fire)}

/* 解读 */
.interp-cta{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between}
.interp-cta p{margin:0;color:var(--muted)}
.interp-body{font-size:calc(15px*var(--fs,1));line-height:1.95;max-width:46em}
.interp-body h3{font:600 calc(17px*var(--fs,1)) var(--serif);color:var(--gold);letter-spacing:.1em;margin:22px 0 6px}
.interp-body h3:first-child{margin-top:0}
.interp-body p{margin:0 0 10px}
.interp-body ul{margin:0 0 10px;padding-left:1.3em}.interp-body li{margin:3px 0}
.interp-body li::marker{color:var(--sakura)}
.interp-body b{color:#fff;font-weight:600}
.interp-body blockquote{margin:12px 0;padding:8px 14px;border-left:2px solid var(--line2);color:var(--faint);font-size:calc(13px*var(--fs,1))}
.interp-body.typing>*:last-child::after{content:"";display:inline-block;width:8px;height:1.05em;margin-left:3px;vertical-align:-2px;background:var(--sakura);border-radius:2px;animation:caret .9s steps(1) infinite}
@keyframes caret{50%{opacity:0}}
.interp-again{margin-top:16px}

/* 登录页 */
.login-body{display:flex;align-items:center;justify-content:center}
.halo.center{left:50%;top:50%;right:auto;margin:-380px 0 0 -380px}
.login-wrap{position:relative;z-index:2;display:flex;align-items:center;gap:30px;padding:24px}
.login-mascot{height:min(70vh,620px)}
.login-mascot .bubble{right:-30px}
.login-card{width:min(360px,86vw);padding:30px 28px 22px;display:flex;flex-direction:column;gap:16px}
.login-card .brand{font-size:calc(22px*var(--fs,1))}
.login-sub{margin:-6px 0 4px;color:var(--muted);font-size:calc(13px*var(--fs,1))}
.login-card input{padding:12px 14px;font-size:calc(16px*var(--fs,1));letter-spacing:.2em}
.login-msg{min-height:1.2em;margin:0;color:var(--fire);font-size:calc(13px*var(--fs,1));text-align:center}
.shake{animation:shake .45s}
@keyframes shake{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}
@media (max-width:720px){
  .login-wrap{flex-direction:column;gap:0}
  .login-mascot{height:300px}
}

::selection{background:rgba(245,184,202,.35);color:#fff}
.brand,.btn{white-space:nowrap}
@media (max-width:620px){.top-sub{display:none}.top{padding:18px 16px}}

/* ---------- v3：模式切换 / 双人 / 流年 / 追问 / 历史 ---------- */
.hist-ops{display:flex;gap:14px;align-items:center}
.hist-empty{margin:0;color:var(--faint);font-size:calc(12px*var(--fs,1))}
.hist.pair{border-color:rgba(245,184,202,.28)}
.mode-row{display:flex;justify-content:center;margin:0 0 14px}
.seg.mode button{padding:7px 22px;font-family:var(--serif);letter-spacing:.12em}
.slot-tabs{display:flex;align-items:stretch;gap:10px;margin:0 0 18px}
.slot-tabs button{all:unset;cursor:pointer;flex:1;min-width:0;padding:10px 14px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.03);transition:var(--t-mid) var(--ease-out)}
.slot-tabs button b{display:block;font:600 calc(15px*var(--fs,1)) var(--serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.slot-tabs button small{color:var(--faint);font-size:calc(11px*var(--fs,1));white-space:nowrap}
.slot-tabs button.on{border-color:rgba(245,184,202,.55);background:linear-gradient(135deg,rgba(245,184,202,.14),rgba(184,169,255,.1));box-shadow:0 0 24px rgba(245,184,202,.12)}
.slot-tabs .amp{align-self:center;color:var(--sakura);font-family:var(--serif);font-size:calc(18px*var(--fs,1))}

.pair-table{overflow-x:auto}
.pair-table table{width:100%;border-collapse:collapse;font-size:calc(14px*var(--fs,1))}
.pair-table th,.pair-table td{padding:11px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
.pair-table thead th{font:600 calc(16px*var(--fs,1)) var(--serif);color:var(--sakura)}
.pair-table tbody th{color:var(--muted);font-weight:400;white-space:nowrap;width:6em}
.gzc{font:600 calc(20px*var(--fs,1)) var(--serif);margin-right:8px;letter-spacing:.04em}
.mini{display:inline-flex;align-items:center;gap:4px;margin-right:10px;font-size:calc(12px*var(--fs,1))}
.mini i{display:inline-block;height:6px;border-radius:3px;opacity:.85}
.cmps{display:grid;gap:12px}
.cmp{display:grid;grid-template-columns:5.5em 1fr;gap:12px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--line)}
.cmp:last-child{border:0}
.cmp small{color:var(--faint);letter-spacing:.1em}
.cmp .pill{margin-left:4px}
.echo{margin:0 0 10px;padding-left:1.2em;line-height:1.9}.echo li::marker{color:var(--sakura)}

.ln-bar{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:14px}
.ln-bar span{font:600 calc(16px*var(--fs,1)) var(--serif);color:var(--gold);min-width:8em;text-align:center}
.ln-box{display:flex;gap:12px;overflow-x:auto;padding:4px 2px 12px;scroll-snap-type:x proximity;scrollbar-width:thin;transition:opacity .3s}
.ln-box.busy{opacity:.4}
.ln{flex:none;width:200px;scroll-snap-align:center;padding:14px;border-radius:var(--r);border:1px solid var(--line);background:rgba(255,255,255,.03);display:flex;flex-direction:column;gap:10px}
.ln{cursor:pointer;transition:transform var(--t-mid) var(--ease-out),border-color var(--t-mid) var(--ease-out)}
.ln:hover{transform:translateY(-2px);border-color:rgba(184,169,255,.45)}
.ln:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.ln.sel{border-color:var(--gold)!important;box-shadow:0 0 0 1px rgba(232,200,130,.35),0 0 28px rgba(232,200,130,.15)}
.ln.cur{border-color:rgba(245,184,202,.6);background:linear-gradient(160deg,rgba(245,184,202,.12),rgba(184,169,255,.06));box-shadow:0 0 30px rgba(245,184,202,.12)}
.ln-y{font:600 calc(18px*var(--fs,1)) var(--serif);display:flex;align-items:center;gap:8px}
.ln-y em{font-style:normal;font-size:calc(11px*var(--fs,1));color:#151230;background:var(--sakura);padding:1px 7px;border-radius:8px}
.ln small{color:var(--faint);font-size:calc(11px*var(--fs,1));letter-spacing:.08em}
.ln p{margin:2px 0;font-size:calc(13px*var(--fs,1));color:var(--muted)}
.ln p b{color:var(--ink)}
.ln-gz{font:600 calc(26px*var(--fs,1)) var(--serif);display:flex;align-items:baseline;gap:8px}
.ln-gz b{font-weight:600}.ln-gz i{font:400 calc(12px*var(--fs,1)) var(--sans);font-style:normal;color:var(--muted)}
.ln-z{border-top:1px dashed var(--line);padding-top:8px}
.lnshs{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:6px}
.lnsh{font-size:calc(12px*var(--fs,1));display:flex;align-items:center;gap:3px;white-space:nowrap}
.lnsh small{color:var(--faint)}

.interp-cta small.quota,.interp-again .quota{display:block;margin-top:6px;color:var(--faint);font-size:calc(11px*var(--fs,1));text-align:right}
.interp-again{display:flex;align-items:center;gap:12px}
.interp-again .quota{margin:0}
.chat{margin-top:22px;padding-top:18px;border-top:1px dashed var(--line2)}
.chat-log{display:flex;flex-direction:column;gap:12px;margin-bottom:14px}
.msg{max-width:85%;padding:10px 14px;border-radius:var(--r);font-size:calc(14px*var(--fs,1));line-height:1.85}
.msg.me{align-self:flex-end;background:linear-gradient(135deg,rgba(245,184,202,.22),rgba(184,169,255,.18));border-bottom-right-radius:4px}
.msg.her{align-self:flex-start;background:rgba(255,255,255,.05);border:1px solid var(--line);border-bottom-left-radius:4px}
.msg p{margin:0 0 6px}.msg p:last-child{margin:0}.msg ul{margin:4px 0;padding-left:1.2em}
.msg h3{font:600 calc(14px*var(--fs,1)) var(--serif);color:var(--gold);margin:6px 0 2px}
.msg.typing:empty::before{content:"···";letter-spacing:.3em;color:var(--sakura);animation:caret 1s steps(1) infinite}
.msg.typing>*:last-child::after{content:"";display:inline-block;width:7px;height:1em;margin-left:3px;vertical-align:-2px;background:var(--sakura);border-radius:2px;animation:caret .9s steps(1) infinite}
.chat-in{display:flex;gap:10px}
.chat-in input{flex:1;padding:11px 14px}
.chat-sug{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.chat-sug .chip{all:unset;cursor:pointer;font-size:calc(12px*var(--fs,1));padding:5px 12px;border-radius:20px;border:1px solid var(--line);color:var(--muted);transition:var(--t-fast) var(--ease-out)}
.chat-sug .chip:hover{border-color:rgba(245,184,202,.5);color:var(--ink)}
.btn:disabled{opacity:.5;cursor:default}
#backPair{margin-bottom:4px}
@media (max-width:620px){
  .slot-tabs{gap:6px}.slot-tabs button{padding:8px 10px}
  .cmp{grid-template-columns:1fr;gap:4px}
  .ln{width:170px}
  .msg{max-width:92%}
  .gzc{display:inline-block;font-size:calc(17px*var(--fs,1));margin:0 6px 2px 0}
  .pair-table th,.pair-table td{padding:9px 6px}
}

/* 流年详情卡 */
.ln-detail{margin:6px 0 14px;padding:18px;border-radius:18px;border:1px solid rgba(232,200,130,.35);background:linear-gradient(160deg,rgba(232,200,130,.07),rgba(184,169,255,.05));animation:lndIn .35s ease}
@keyframes lndIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.lnd-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.lnd-h h3{margin:0;font:600 calc(22px*var(--fs,1)) var(--serif);letter-spacing:.06em}
.lnd-g{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.lnd-g small{color:var(--faint);font-size:calc(11px*var(--fs,1));letter-spacing:.08em}
.lnd-g p{margin:6px 0;font-size:calc(14px*var(--fs,1));color:var(--muted)}
.lnd-g p b{color:var(--ink)}
.lnd-l{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:5px;font-size:calc(13px*var(--fs,1));color:var(--muted)}
.lnd-l li{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.lnd-l li b{color:var(--ink)}
.lnd-l .muted{color:var(--faint)}
.lnd-a{display:flex;align-items:center;gap:12px;margin-top:14px}
.lnd-a small{color:var(--faint);font-size:calc(11px*var(--fs,1))}
.btn.ghost{padding:5px 12px;font-size:calc(12px*var(--fs,1))}
/* 盘面对比 */
.cmp-box>.btn{margin-top:8px}
.cmp-wrap{overflow-x:auto;border-radius:var(--r-md);border:1px solid var(--line);scrollbar-width:thin}
.cmp-t{border-collapse:collapse;width:100%;font-size:calc(13px*var(--fs,1))}
.cmp-same{margin:0 0 10px;padding:10px 14px;border-radius:var(--r-md);background:rgba(140,220,170,.08);border:1px solid rgba(140,220,170,.25);font-size:calc(13px*var(--fs,1));color:var(--muted)}
.cmp-hint{margin:0 0 8px;font-size:calc(12px*var(--fs,1));color:var(--faint)}
.cmp-t th,.cmp-t td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:center;white-space:nowrap}
.cmp-t tbody th{position:sticky;left:0;background:rgba(14,17,36,.96);color:var(--faint);font-weight:500;text-align:left;font-size:calc(12px*var(--fs,1))}
.cmp-t thead th{vertical-align:top;font:600 calc(14px*var(--fs,1)) var(--serif);background:rgba(255,255,255,.03)}
.cmp-t thead th small{display:block;font:400 calc(11px*var(--fs,1)) var(--sans);color:var(--faint);margin:3px 0 6px}
.cmp-t thead th.main{color:var(--sakura)}
.cmp-t td{color:var(--muted)}
.cmp-t td.dif{color:var(--gold);background:rgba(232,200,130,.09);font-weight:600}
.cmp-t tr.grp th{text-align:left;color:var(--lav);font:600 calc(12px*var(--fs,1)) var(--sans);letter-spacing:.1em;background:rgba(184,169,255,.06);position:static}
@media (max-width:640px){.cmp-t{font-size:calc(12px*var(--fs,1))}.cmp-t th,.cmp-t td{padding:7px 8px}.lnd-g{grid-template-columns:1fr;gap:12px}.ln-detail{padding:14px}}

/* v5 UI：表单减重 */
.seg.sm button{padding:5px 12px;font-size:calc(13px*var(--fs,1))}
.hint .link{font-size:calc(12px*var(--fs,1))}
.sc-back{font-size:calc(12px*var(--fs,1))}
.history.empty{margin:-10px 0 6px;padding:0;border:0}
.history.empty .hist-head{margin:0}
.history.empty .hist-head>span:first-child,.history.empty .hist-list{display:none}
.history.empty .hist-head{justify-content:flex-end}
#label.grow{flex:1;min-width:150px}
@media (max-width:620px){.date3{flex:1 1 100%}.date3 input{flex:1;min-width:0;width:auto}.date3 input#y{flex:1.3;width:auto}}
/* 结果章节导航 */
.rnav{position:sticky;top:8px;z-index:6;display:flex;gap:4px;align-items:center;overflow-x:auto;scrollbar-width:none;margin:0 0 16px;padding:6px;border-radius:var(--r-md);
  background:rgba(14,17,36,.78);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--line);box-shadow:0 10px 30px rgba(0,0,0,.25)}
.rnav::-webkit-scrollbar{display:none}
.rnav a{flex:none;padding:6px 12px;border-radius:var(--r-sm);color:var(--muted);font-size:calc(13px*var(--fs,1));text-decoration:none;white-space:nowrap;transition:var(--t-fast) var(--ease-out)}
.rnav a:hover{color:var(--ink);background:rgba(255,255,255,.05)}
.rnav a.on{color:var(--ink);background:linear-gradient(135deg,rgba(245,184,202,.22),rgba(184,169,255,.2));box-shadow:inset 0 0 0 1px rgba(245,184,202,.3)}
.rnav .rnav-top{margin-left:auto;color:var(--gold)}
.sec{scroll-margin-top:70px}
/* 对比表：手机只并排主盘 + 一个候选 */
.cmp-pick{display:none;gap:6px;flex-wrap:wrap;margin:0 0 10px}
@media (max-width:640px){.cmp-pick{display:flex}.cmp-t .m-off{display:none}.cmp-t td,.cmp-t thead th{white-space:normal;width:40%}}
.cmp-pick .chip{all:unset;cursor:pointer;font-size:calc(12px*var(--fs,1));padding:5px 12px;border-radius:20px;border:1px solid var(--line);color:var(--muted)}
.cmp-pick .chip.on{border-color:var(--gold);color:var(--gold);background:rgba(232,200,130,.08)}
@media (max-width:620px){
  .row .seg.sm{order:1;margin-left:auto}
  .row .date3{order:2}
  #leapWrap{order:1}
  #label.grow{min-width:110px}
}

/* ---------- v6 特效 ---------- */
.fx-canvas{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}
body.fx-off #petals,body.fx-off .fx-canvas{display:none}
.fx-tg{all:unset;cursor:pointer;margin-left:auto;font-size:calc(12px*var(--fs,1));color:var(--faint);padding:5px 12px;border-radius:20px;border:1px solid var(--line);transition:.25s;white-space:nowrap}
.fx-tg span{display:inline-block;transition:var(--t-slow) var(--ease-out)}
.fx-tg.on{color:var(--gold);border-color:rgba(232,203,143,.35);background:rgba(232,203,143,.06)}
.fx-tg.on span{animation:twinkle 2.4s ease-in-out infinite;color:var(--sakura)}
.fx-tg:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.top .fx-tg + .ghost{margin-left:8px}
.mascot-box{rotate:var(--tilt,0deg);transition:rotate .35s ease}
/* 起盘仪式：十二地支依次点亮 */
.loading.fx .spin text{animation:zhiOn 1.7s ease-in-out infinite;fill:rgba(232,203,143,.35)}
.loading.fx #loadZhi text:nth-child(1){animation-delay:0.00s}.loading.fx #loadZhi text:nth-child(2){animation-delay:0.14s}.loading.fx #loadZhi text:nth-child(3){animation-delay:0.28s}.loading.fx #loadZhi text:nth-child(4){animation-delay:0.42s}.loading.fx #loadZhi text:nth-child(5){animation-delay:0.56s}.loading.fx #loadZhi text:nth-child(6){animation-delay:0.70s}.loading.fx #loadZhi text:nth-child(7){animation-delay:0.84s}.loading.fx #loadZhi text:nth-child(8){animation-delay:0.98s}.loading.fx #loadZhi text:nth-child(9){animation-delay:1.12s}.loading.fx #loadZhi text:nth-child(10){animation-delay:1.26s}.loading.fx #loadZhi text:nth-child(11){animation-delay:1.40s}.loading.fx #loadZhi text:nth-child(12){animation-delay:1.54s}
@keyframes zhiOn{0%,100%{fill:rgba(232,203,143,.35)}12%{fill:#fff6dc;filter:drop-shadow(0 0 6px #f5b8ca)}30%{fill:var(--gold)}}
.loading.fx .spin::before{content:"";position:absolute;inset:-30px;border-radius:50%;background:radial-gradient(circle,rgba(245,184,202,.22),rgba(184,169,255,.08) 45%,transparent 70%);animation:pulse 1.8s ease-in-out infinite}
.loading.fx .spin svg{animation-duration:3.2s}
.loading.fx #loadText{background:linear-gradient(90deg,var(--muted),#fff6dc,var(--muted));background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:textShine 1.6s linear infinite}
@keyframes textShine{to{background-position:-200% 0}}
/* 揭晓闪光 */
.fx-flash{position:fixed;inset:0;z-index:25;pointer-events:none;background:radial-gradient(circle at 50% 50%,rgba(255,246,220,.55),rgba(245,184,202,.18) 35%,transparent 70%);animation:flashOut .9s ease-out forwards}
@keyframes flashOut{from{opacity:1;transform:scale(.9)}to{opacity:0;transform:scale(1.25)}}
/* 卡片流光、日主与命宫泛光、四化星闪烁 */
.fx-reveal .card.sec{position:relative}
.fx-reveal .card.sec::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(105deg,transparent 35%,rgba(255,246,220,.10) 48%,rgba(245,184,202,.12) 52%,transparent 65%) no-repeat;background-size:250% 100%;background-position:150% 0;
  animation:sweep 1.6s ease-out forwards;animation-delay:inherit}
@keyframes sweep{to{background-position:-150% 0}}
.fx-reveal .pillar.day{animation:goldGlow 1.6s ease-in-out .9s 2}
.fx-reveal .pal.ming{animation:pinkGlow 1.6s ease-in-out 1.35s 2}
@keyframes goldGlow{50%{box-shadow:0 0 0 1px rgba(232,203,143,.7),0 0 36px rgba(232,203,143,.45);transform:translateY(-3px)}}
@keyframes pinkGlow{50%{box-shadow:0 0 0 1px rgba(245,184,202,.8),0 0 36px rgba(245,184,202,.45)}}
.fx-reveal .zw .sh,.fx-reveal .sihua .sh{animation:glint 1s ease 1.9s 2}
@keyframes glint{50%{transform:scale(1.45);filter:brightness(1.6) drop-shadow(0 0 6px currentColor)}}
/* 今年流年卡呼吸光 */
/* v8.11：呼吸光改为伪元素只动 opacity（交给合成层），不再每帧重绘 box-shadow */
.ln.cur{position:relative}
.ln.cur::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:0 0 0 1px rgba(245,184,202,.45),0 0 40px rgba(245,184,202,.22);opacity:0}
body:not(.fx-off) .ln.cur::after{animation:curBreath 3.2s ease-in-out infinite}
@keyframes curBreath{50%{opacity:1}}
/* 主按钮悬停星辉 */
body:not(.fx-off) .btn.pri:hover{box-shadow:0 0 0 1px rgba(245,184,202,.4),0 0 24px rgba(245,184,202,.25)}
body:not(.fx-off) .go:hover{box-shadow:0 10px 40px rgba(245,184,202,.35),0 0 0 1px rgba(255,246,220,.4)}
@media (max-width:620px){.fx-tg{padding:4px 10px}}
@media (prefers-reduced-motion:reduce){.fx-reveal *,.fx-reveal .card.sec::after,.loading.fx *{animation:none!important}.fx-tg{display:none}}

/* ---------- v7 动画 ---------- */
/* 四柱翻牌：年→月→时，日柱最后落定 */
.fx-reveal .pillars{perspective:900px}
.fx-reveal .pillar{animation:flipIn .7s var(--ease-out) both}
.fx-reveal .pillar:nth-child(1){animation-delay:.35s}.fx-reveal .pillar:nth-child(2){animation-delay:.5s}.fx-reveal .pillar:nth-child(4){animation-delay:.65s}
.fx-reveal .pillar.day{animation:flipIn .85s var(--ease-out) .9s both,goldGlow 1.6s ease-in-out 1.75s 2}
@keyframes flipIn{from{opacity:0;transform:rotateY(-100deg) translateY(-24px)}55%{opacity:1}to{opacity:1;transform:none}}
/* 十二宫依次点亮 + 四化飞线 */
.zw{position:relative}
.zw.fx-light .pal{animation:palOn .6s ease both;animation-delay:calc(.6s + var(--pi,0) * 110ms)}
.zw.fx-light .pal.ming{animation:palOn .6s ease .6s both,pinkGlow 1.6s ease-in-out 2.1s 2}
@keyframes palOn{from{opacity:.12;filter:brightness(.4)}55%{opacity:1;border-color:rgba(232,203,143,.7);box-shadow:0 0 24px rgba(232,203,143,.35)}to{opacity:1;filter:none}}
.fx-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:3;animation:fadeL .8s ease 3.2s forwards}
.fx-lines path{fill:none;stroke-width:1.6;stroke-linecap:round;stroke-dasharray:1200;stroke-dashoffset:1200;opacity:.9;filter:drop-shadow(0 0 4px currentColor);animation:draw .8s ease-out both}
.fx-lines circle{fill:none;stroke-width:1.5;opacity:0;transform-box:fill-box;transform-origin:center;animation:hitRing .7s ease-out both}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes hitRing{0%{opacity:1;transform:scale(.3)}100%{opacity:0;transform:scale(1.9)}}
@keyframes fadeL{to{opacity:0}}
.sh.fx-hit{animation:glint .7s ease}
/* 双人星盘交汇 */
.fx-merge{position:fixed;inset:0;z-index:26;pointer-events:none;background:radial-gradient(circle,rgba(9,11,23,.78),rgba(9,11,23,.35) 60%,transparent 80%);animation:mergeOut 2s ease forwards}
@keyframes mergeOut{0%,72%{opacity:1}100%{opacity:0}}
.fx-m{position:absolute;top:50%;left:50%;width:180px;margin:-110px 0 0 -90px;text-align:center}
.fx-m svg{width:180px;height:180px;animation:rot 3s linear infinite}
.fx-m circle{fill:rgba(11,13,26,.45);stroke:rgba(232,203,143,.75)}.fx-m circle.d{fill:none;stroke:var(--sakura);stroke-dasharray:3 6}
.fx-m text{fill:var(--gold);font:7px var(--serif);text-anchor:middle}
.fx-m b{display:block;margin-top:8px;color:var(--text);font:600 calc(15px*var(--fs,1)) var(--serif);letter-spacing:.2em}
.fx-m.l{animation:flyL 1.1s var(--ease-out) both}.fx-m.r{animation:flyR 1.1s var(--ease-out) both}
@keyframes flyL{from{opacity:0;transform:translateX(-60vw) scale(.6)}to{opacity:1;transform:translateX(-62px) scale(.9)}}
@keyframes flyR{from{opacity:0;transform:translateX(60vw) scale(.6)}to{opacity:1;transform:translateX(62px) scale(.9)}}
.fx-m-line{position:absolute;left:50%;top:50%;height:1px;width:0;transform:translateX(-50%);background:linear-gradient(90deg,transparent,#fff6dc,transparent);animation:mline .9s ease .75s forwards}
@keyframes mline{to{width:80vw}}
@media (max-width:620px){.fx-m{width:130px;margin:-85px 0 0 -65px}.fx-m svg{width:130px;height:130px}@keyframes flyL{from{opacity:0;transform:translateX(-80vw) scale(.6)}to{opacity:1;transform:translateX(-50px) scale(.9)}}@keyframes flyR{from{opacity:0;transform:translateX(80vw) scale(.6)}to{opacity:1;transform:translateX(50px) scale(.9)}}}
/* 流年时间轴：滑入、今年脉冲、详情卡卷轴 */
.ln-box .ln:nth-child(1){--d:0ms}.ln-box .ln:nth-child(2){--d:60ms}.ln-box .ln:nth-child(3){--d:120ms}.ln-box .ln:nth-child(4){--d:180ms}.ln-box .ln:nth-child(5){--d:240ms}.ln-box .ln:nth-child(6){--d:300ms}.ln-box .ln:nth-child(7){--d:360ms}.ln-box .ln:nth-child(8){--d:420ms}.ln-box .ln:nth-child(9){--d:480ms}.ln-box .ln:nth-child(10){--d:540ms}.ln-box .ln:nth-child(11){--d:600ms}.ln-box .ln:nth-child(12){--d:660ms}.ln-box .ln:nth-child(13){--d:720ms}
body:not(.fx-off) .ln-box .ln{animation:lnSlide .55s var(--ease-out) var(--d,0ms) both}
body:not(.fx-off) .ln-box .ln.cur::after{animation-delay:1s}
@keyframes lnSlide{from{opacity:0;transform:translateX(44px)}}
.ln.cur .ln-y em{position:relative}
.ln.cur .ln-y em::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:0 0 0 2px rgba(245,184,202,.65);opacity:0}
body:not(.fx-off) .ln.cur .ln-y em::after{animation:emPulse 1.8s ease-out infinite}
@keyframes emPulse{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.35,1.9)}}
.ln-detail.fx-unroll{animation:unroll .65s var(--ease-out) both}
@keyframes unroll{from{clip-path:inset(0 0 100% 0 round 18px);opacity:.3}to{clip-path:inset(0 0 0 0 round 18px);opacity:1}}
/* 对比表：差异格翻转 */
body:not(.fx-off) .cmp-t td.dif{animation:cellFlip .6s ease both}
.cmp-t td.fx-flip{animation:cellFlip .6s ease both}
@keyframes cellFlip{from{transform:rotateX(90deg);opacity:.2}to{transform:none;opacity:1}}
/* 星见解读：手中星盘发光旋转，读完鞠躬 */
.fx-astro{position:absolute;left:28.5%;top:33%;width:17%;aspect-ratio:1;translate:-50% -50%;z-index:2;pointer-events:none;opacity:0;transition:opacity .5s}
.fx-astro::before{content:"";position:absolute;inset:-60%;border-radius:50%;background:radial-gradient(circle,rgba(255,240,200,.55),rgba(245,184,202,.18) 40%,transparent 70%);animation:pulse 1.6s ease-in-out infinite}
.fx-astro i{position:absolute;inset:0;border-radius:50%;border:1.5px dashed rgba(255,236,190,.9);animation:rot 2.4s linear infinite}
.fx-astro i+i{inset:-25%;border:1px dotted rgba(245,184,202,.7);animation-duration:4s;animation-direction:reverse}
.mascot-box.reading .fx-astro{opacity:1}
.mascot-box.bow .mascot.on{animation:bow 1.2s ease}
@keyframes bow{35%,60%{transform:translateY(9px) scaleY(.955) scaleX(1.01)}}
@media (prefers-reduced-motion:reduce){.fx-merge,.fx-lines,.fx-astro{display:none}.zw.fx-light .pal,.ln-detail.fx-unroll,.cmp-t td.fx-flip{animation:none!important}}

/* ---------- v8 流月 ---------- */
.lnd-m{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line);display:flex;flex-direction:column;gap:8px}
.lnd-m > .btn{align-self:flex-start}.lnd-m > small{color:var(--faint);font-size:calc(12px*var(--fs,1))}
.ly-h{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.ly-h h4{margin:0;font:600 calc(16px*var(--fs,1)) var(--serif);letter-spacing:.1em}.ly-h small{color:var(--faint);font-size:calc(12px*var(--fs,1))}
.ly-head{display:grid;grid-template-columns:34px 1fr 1fr;gap:12px;padding:0 12px;font-size:calc(11px*var(--fs,1));color:var(--faint);letter-spacing:.15em}
.ly-list{display:flex;flex-direction:column;gap:6px;max-height:560px;overflow-y:auto;padding-right:4px;scrollbar-width:thin}
.ly{display:grid;grid-template-columns:34px 1fr 1fr;gap:12px;padding:10px 12px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.025);cursor:pointer;transition:border-color var(--t-mid) var(--ease-out),background var(--t-mid) var(--ease-out)}
.ly:hover{border-color:rgba(232,203,143,.35)}
.ly.cur{border-color:rgba(245,184,202,.45);background:linear-gradient(160deg,rgba(245,184,202,.09),rgba(255,255,255,.02))}
.ly.sel{border-color:var(--gold);box-shadow:0 0 0 1px rgba(232,203,143,.35)}
.ly:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.ly-i{font:600 calc(18px*var(--fs,1)) var(--serif);color:var(--gold);opacity:.7;padding-top:2px}
.ly-t{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ly-t b{font:600 calc(15px*var(--fs,1)) var(--serif)}.ly-t i{font-style:normal;font-size:calc(12px*var(--fs,1));color:var(--lav)}
.ly-t em{font-style:normal;font-size:calc(10.5px*var(--fs,1));color:#151230;background:var(--sakura);padding:1px 6px;border-radius:8px}
.ly small{color:var(--faint);font-size:calc(11.5px*var(--fs,1))}
.ly p{margin:4px 0;font-size:calc(12.5px*var(--fs,1));color:var(--muted)}.ly p b{color:var(--text)}
.ly-r{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}.ly-r .pill{font-size:calc(11px*var(--fs,1));padding:1px 7px}.ly-r .muted{font-size:calc(11.5px*var(--fs,1));color:var(--faint)}
.lyshs{display:flex;flex-wrap:wrap;gap:4px 10px}.lysh{font-size:calc(12px*var(--fs,1));display:inline-flex;align-items:center;gap:3px}.lysh small{font-size:calc(11px*var(--fs,1))}
.ly-ask{margin-top:4px;position:sticky;bottom:10px;z-index:3;padding:8px 10px;border-radius:var(--r-md);background:rgba(14,16,34,.85);backdrop-filter:blur(8px)}
.ly-k summary{cursor:pointer;color:var(--faint);font-size:calc(12px*var(--fs,1))}.ly-k ul{margin:6px 0 0;padding-left:18px;color:var(--muted);font-size:calc(12px*var(--fs,1));line-height:1.7}
body:not(.fx-off) .ly{animation:lnSlide .5s var(--ease-out) var(--d,0ms) both}
@media (max-width:640px){.ly,.ly-head{grid-template-columns:24px 1fr;gap:8px}.ly-head span:last-child{display:none}.ly-z{grid-column:2;border-top:1px dashed var(--line);padding-top:6px}.ly-head span:nth-child(2)::after{content:" / 紫微"}.ly-list{max-height:none}}

/* 家庭盘 */
.slot-tabs.family{flex-wrap:wrap}
.slot-tabs.family button{flex:1 1 140px;position:relative}
.slot-tabs button .x{position:absolute;top:4px;right:8px;color:var(--faint);font-size:calc(14px*var(--fs,1));line-height:1;padding:2px}
.slot-tabs button .x:hover{color:var(--sakura)}
.slot-tabs button.add{flex:0 0 auto;text-align:center;border-style:dashed;color:var(--muted)}
.fam-table td,.fam-matrix td{min-width:9em}
.fam-matrix td{vertical-align:top;font-size:calc(13px*var(--fs,1));line-height:1.7}
.fam-matrix td small{display:block;color:var(--muted)}
.fam-matrix td.cell{cursor:pointer;transition:.2s;border-radius:8px}
.fam-matrix td.cell:hover{background:rgba(245,184,202,.08)}
.fam-matrix td.self,.fam-matrix td.mirror{color:var(--faint);text-align:center}
.fam-matrix .pill{font-size:calc(11px*var(--fs,1));padding:1px 7px;margin:1px 2px 1px 0}

/* v8.7 从记录里选人 */
.pick{margin:-8px 0 16px;font-size:calc(12px*var(--fs,1))}
.pick .hist-list{margin-top:8px}
.pick .hist{padding-right:12px}
.pick .hist.used{opacity:.55}
.pick .hist{font:inherit;color:inherit;text-align:left}

/* v8.8 无障碍：统一键盘焦点框；--faint 由 #6d6b8c 提亮到 #85839f（对深底对比度 ≥4.5:1） */
:where(button, a, input, select, [role="button"], td.cell):focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.hist button.x{all:unset;position:absolute;right:7px;top:5px;color:var(--faint);font-size:calc(14px*var(--fs,1));line-height:1;padding:2px;cursor:pointer}
.hist button.x:hover,.hist button.x:focus-visible{color:var(--fire)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.hist .hist-main{all:unset;display:block;cursor:pointer;min-width:0}
.hist .hist-main:focus-visible{outline:2px solid var(--lav);outline-offset:4px;border-radius:6px}
.chat-tools{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:8px 0 4px;color:var(--faint);font-size:calc(12px*var(--fs,1))}
.chat-tools.hidden{display:none}

/* ---------- v8.9 浅色主题：html[data-theme="light"]（theme.js 按“自动 / 浅色 / 深色”设置）。分享图、打印版自带配色，不受影响 ---------- */
.theme-tg{all:unset;cursor:pointer;margin-left:auto;font-size:calc(12px*var(--fs,1));color:var(--faint);padding:5px 12px;border-radius:20px;border:1px solid var(--line);transition:.25s;white-space:nowrap}
.theme-tg:hover{color:var(--ink)}
.theme-tg b{font-weight:500}
.theme-tg + .fx-tg{margin-left:8px}
@media (max-width:620px){.theme-tg{padding:4px 10px}}
html[data-theme="light"]{
  color-scheme:light;
  --bg0:#f3eee4; --bg1:#fbf8f2; --ink:#24213a; --muted:#56536e; --faint:#66637d;
  --line:rgba(36,33,58,.12); --line2:rgba(36,33,58,.22);
  --gold:#8a6416; --sakura:#b0416a; --lav:#5b47c8;
  --glass:rgba(255,255,255,.72);
  --shadow-1:0 8px 22px -12px rgba(60,48,90,.22);--shadow-2:0 14px 34px -14px rgba(60,48,90,.3);
  --wood:#1f7a45; --fire:#bf3434; --earth:#8a6416; --metal:#6a6450; --water:#1d5ea8;
}
html[data-theme="light"] body{background:radial-gradient(1200px 700px at 78% -10%,#efe4f7 0%,transparent 60%),
  radial-gradient(900px 600px at -10% 110%,#e5edf8 0%,transparent 60%),linear-gradient(180deg,var(--bg1),var(--bg0))}
html[data-theme="light"] #sky{opacity:.18}
html[data-theme="light"] .halo{opacity:.4}
html[data-theme="light"] .ring circle,html[data-theme="light"] .ring line{stroke:rgba(138,100,22,.3)}
html[data-theme="light"] .ring text{fill:rgba(138,100,22,.45)}
html[data-theme="light"] .card{box-shadow:0 14px 40px rgba(60,48,90,.10)}
html[data-theme="light"] input,html[data-theme="light"] select{background:#fff}
html[data-theme="light"] select option{background:#fff;color:var(--ink)}
html[data-theme="light"] .dropdown{background:#fff;box-shadow:0 12px 30px rgba(60,48,90,.15)}
html[data-theme="light"] .bubble{background:#fff;color:#2a2650;box-shadow:0 8px 24px rgba(60,48,90,.15)}
html[data-theme="light"] .loading{background:rgba(251,248,242,.82)}
html[data-theme="light"] .fx-merge{background:radial-gradient(circle,rgba(251,248,242,.85),rgba(251,248,242,.4) 60%,transparent 80%)}
html[data-theme="light"] .pillar,html[data-theme="light"] .pal{background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.6))}
html[data-theme="light"] .pal.ming{background:linear-gradient(160deg,rgba(176,65,106,.08),rgba(255,255,255,.7))}
html[data-theme="light"] .pill.ok{color:#1b6b3d;border-color:rgba(31,122,69,.35);background:rgba(31,122,69,.07)}
html[data-theme="light"] .pill.warn{color:#7a5510;border-color:rgba(138,100,22,.4);background:rgba(138,100,22,.07)}
html[data-theme="light"] .pill.bad{color:#a52a2a;border-color:rgba(191,52,52,.4);background:rgba(191,52,52,.07)}
html[data-theme="light"] .notice .w{color:#5a4518;background:rgba(138,100,22,.07)}
html[data-theme="light"] .interp-body b{color:#16132b}
html[data-theme="light"] ::selection{background:rgba(176,65,106,.25);color:#16132b}
html[data-theme="light"] .ln-y em,html[data-theme="light"] .ly-t em{color:#fff}
html[data-theme="light"] .go{color:#1b1838;background:linear-gradient(110deg,#f5b8ca,#e8d3ff 45%,#e8cb8f)}
html[data-theme="light"] .loading.fx #loadText{background:linear-gradient(90deg,var(--muted),#b0416a,var(--muted));background-size:200% 100%;-webkit-background-clip:text;background-clip:text}
html[data-theme="light"] input[type=checkbox]{accent-color:#b0416a}
html[data-theme="light"] .timeline div{background:rgba(255,255,255,.88)}
html[data-theme="light"] .cmp-t tbody th{background:rgba(251,248,242,.97)}
html[data-theme="light"] .rnav{background:rgba(255,255,255,.82);box-shadow:0 8px 24px rgba(60,48,90,.12)}
html[data-theme="light"] .ly-ask{background:rgba(255,255,255,.88)}
html[data-theme="light"] .fx-m circle{fill:rgba(251,248,242,.5)}
html[data-theme="light"] .sh{color:#fff}
html[data-theme="light"] .mascot{filter:drop-shadow(0 18px 30px rgba(60,48,90,.22))}
/* 眨眼差分：叠在 idle 图上瞬间切换，不淡入；不重复画投影，免得眨眼时影子闪一下 */
.mascot.m-blink{transition:none;filter:none!important}
/* v8.11 低性能自动降档（common.js 持续掉帧时给 body 加 lowfx）：去掉毛玻璃模糊，玻璃底色加深一点补偿可读性 */
body.lowfx{--glass:rgba(22,26,52,.86)}
html[data-theme="light"] body.lowfx{--glass:rgba(255,255,255,.93)}
body.lowfx .card,body.lowfx .loading,body.lowfx .rnav,body.lowfx .ly-ask{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
body.stage-off .stage,body.stage-off .stage *{animation-play-state:paused!important}
/* v8.11 B：按下回弹、滚动入场、视图过渡 */
.btn,.seg button,.chips button,.hist .hist-main{transition:transform var(--t-mid) var(--ease-spring),background var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out)}
.btn:active:not(:disabled),.seg button:active,.chips button:active,.hist .hist-main:active{transform:scale(.96);transition-duration:.08s}
.reveal.wait{animation:none!important;opacity:0;transform:translateY(18px)}
::view-transition-old(root),::view-transition-new(root){animation:none}
::view-transition-group(vt-main){animation:none}
::view-transition-old(vt-main){animation:vtOut .2s var(--ease-io) both}
::view-transition-new(vt-main){animation:vtIn .34s var(--ease-out) both}
@keyframes vtOut{to{opacity:0;transform:translateY(-6px)}}
@keyframes vtIn{from{opacity:0;transform:translateY(10px)}}
@media print{.reveal,.reveal.wait{opacity:1!important;transform:none!important;animation:none!important}}
@media (prefers-reduced-motion:reduce){.btn:active,.seg button:active,.chips button:active,.hist .hist-main:active{transform:none}}
/* v8.11 C1 加载：整屏遮罩改为右下角小星盘胶囊 + 结果区骨架 */
.loading{inset:auto 22px 22px auto;flex-direction:row;gap:12px;padding:8px 18px 8px 8px;border-radius:999px;background:var(--glass);border:1px solid var(--line2);
  box-shadow:var(--shadow-2);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);animation:pillIn .35s var(--ease-spring) both;transition:opacity .25s var(--ease-io),transform .25s var(--ease-io)}
.loading.out{opacity:0;transform:translateY(8px) scale(.96)}
.loading .spin{width:46px;height:46px}
.loading .spin text{display:none}
.loading .spin-core{font-size:calc(15px*var(--fs,1))}
.loading .spin::before{inset:-8px!important}
.loading #loadText{font-size:calc(13px*var(--fs,1));letter-spacing:.12em;white-space:nowrap;margin:0}
@keyframes pillIn{from{opacity:0;transform:translateY(14px) scale(.92)}}
html[data-theme="light"] .loading{background:rgba(255,255,255,.9);box-shadow:0 12px 32px -12px rgba(60,48,90,.3)}
@media (max-width:620px){.loading{left:50%;right:auto;bottom:calc(14px + env(safe-area-inset-bottom));translate:-50% 0;max-width:calc(100vw - 32px)}.loading #loadText{letter-spacing:.06em}}
.go:disabled{cursor:progress;filter:saturate(.6) brightness(.92)}
.go:disabled::after{animation-duration:1.2s}
.skel-wrap{display:grid;gap:18px}
.card.skel{display:grid;gap:12px;pointer-events:none}
.sk{display:block;border-radius:8px;background:linear-gradient(100deg,rgba(255,255,255,.05) 30%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.05) 70%);background-size:300% 100%;animation:skShine 1.4s var(--ease-io) infinite}
.sk-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.sk-row.sk-2{grid-template-columns:1fr 1fr;gap:18px}
.sk-row.sk-12{grid-template-columns:repeat(6,1fr)}
.sk-row.sk-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.sk-tile{height:86px;border-radius:var(--r-md)}.sk-tile.tall{height:150px}.sk-tile.sm{height:58px}
@keyframes skShine{from{background-position:100% 0}to{background-position:-50% 0}}
html[data-theme="light"] .sk{background:linear-gradient(100deg,rgba(60,48,90,.06) 30%,rgba(60,48,90,.13) 50%,rgba(60,48,90,.06) 70%);background-size:300% 100%}
body.lowfx .loading{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
/* v8.11 C2 触屏：可点元素至少 44px 高；底部吸附区域避开 iPhone 底部安全区 */
@media (pointer:coarse){
  .btn,.seg button,.theme-tg,.fx-tg,.rnav a{min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
  .chips button{min-height:44px;box-sizing:border-box}
  .hist button.x{min-width:40px;min-height:40px;display:grid;place-items:center;right:0;top:0}
  .go{padding:15px 0}
}
body{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
.foot{padding-bottom:calc(34px + env(safe-area-inset-bottom))}
.ly-ask{bottom:calc(10px + env(safe-area-inset-bottom))}
/* v8.11 C3 浅色主题：虚线分隔线加深一档，避免在米白底上几乎看不见 */
html[data-theme="light"] .adv,html[data-theme="light"] .history,html[data-theme="light"] .cmp,html[data-theme="light"] .ln-z,html[data-theme="light"] .lnd-m,html[data-theme="light"] .chat{border-color:var(--line2)}
.staged{display:none!important}
/* v8.12 分段按钮滑块 */
.seg.has-ind{position:relative;isolation:isolate}
.seg-ind{position:absolute;top:3px;bottom:3px;left:0;width:0;border-radius:var(--r-sm);pointer-events:none;z-index:-1;
  background:linear-gradient(135deg,rgba(245,184,202,.25),rgba(184,169,255,.22));box-shadow:inset 0 0 0 1px rgba(245,184,202,.35)}
.seg.ind-ready .seg-ind{transition:transform .38s var(--ease-spring),width .3s var(--ease-out),opacity var(--t-fast)}
.seg.has-ind button.on{background:none;box-shadow:none}
@media (prefers-reduced-motion:reduce){.seg.ind-ready .seg-ind{transition:none}}
.lnd-hint{margin:0 12px 0 auto;font-size:calc(11px*var(--fs,1));color:var(--faint);letter-spacing:.04em}
/* v8.12 切换到双人/家庭时，填写位卡片轻轻入场 */
body:not(.fx-off) #slotTabs:not(.hidden){animation:slotIn .36s var(--ease-out) both}
@keyframes slotIn{from{opacity:0;transform:translateY(-6px)}}
/* v8.13 轻提示条 / 确认框 / 离线提示 */
.toast{position:fixed;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));z-index:90;display:flex;align-items:center;gap:14px;max-width:min(92vw,460px);
  padding:10px 12px 10px 18px;border-radius:999px;background:rgba(22,20,44,.94);border:1px solid var(--line2);box-shadow:var(--shadow-2);color:var(--ink);font-size:calc(14px*var(--fs,1));
  transform:translate(-50%,16px);opacity:0;pointer-events:none;transition:transform var(--t-mid) var(--ease-spring),opacity var(--t-fast)}
.toast.on{transform:translate(-50%,0);opacity:1;pointer-events:auto}
.toast span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.toast-act{flex:none;border:0;border-radius:999px;padding:6px 14px;background:rgba(245,184,202,.2);color:var(--sakura);font:600 calc(13px*var(--fs,1)) var(--sans);cursor:pointer}
.toast-act:hover{background:rgba(245,184,202,.32)}
dialog.confirm{border:1px solid var(--line2);border-radius:var(--r);padding:22px 22px 18px;max-width:min(90vw,380px);background:#17152e;color:var(--ink);box-shadow:var(--shadow-2)}
dialog.confirm::backdrop{background:rgba(6,6,18,.55);backdrop-filter:blur(2px)}
dialog.confirm[open]{animation:dlgIn .26s var(--ease-spring)}
@keyframes dlgIn{from{opacity:0;transform:translateY(8px) scale(.97)}}
dialog.confirm p{margin:0 0 18px;line-height:1.7}
.confirm-b{display:flex;justify-content:flex-end;gap:10px}
.btn.danger{background:rgba(255,145,145,.18);border-color:rgba(255,145,145,.45);color:#ffc2c2}
.netbar{position:fixed;top:0;left:0;right:0;z-index:95;padding:calc(6px + env(safe-area-inset-top)) 12px 6px;text-align:center;font-size:calc(13px*var(--fs,1));
  background:rgba(230,194,124,.92);color:#2a2008;transform:translateY(-100%);transition:transform var(--t-mid) var(--ease-out)}
.netbar.on{transform:none}
body.is-offline button.go{filter:saturate(.35);opacity:.75}
html[data-theme="light"] .toast{background:rgba(255,253,248,.97);color:#2b2740}
html[data-theme="light"] dialog.confirm{background:#fffdf8;color:#2b2740}
html[data-theme="light"] .toast-act{color:#a3405e;background:rgba(214,110,140,.14)}
html[data-theme="light"] .btn.danger{color:#a12d2d;background:rgba(214,70,70,.1);border-color:rgba(214,70,70,.4)}
@media (prefers-reduced-motion:reduce){.toast,.netbar{transition:none}dialog.confirm[open]{animation:none}}
dialog.keys dl{display:grid;grid-template-columns:auto 1fr;gap:10px 16px;margin:0 0 18px;font-size:calc(14px*var(--fs,1))}
dialog.keys dt{margin:0}dialog.keys dd{margin:0;color:var(--muted);align-self:center}
kbd{display:inline-block;padding:2px 8px;border-radius:6px;border:1px solid var(--line2);border-bottom-width:2px;font:calc(12px*var(--fs,1))/1.6 ui-monospace,Menlo,Consolas,monospace;color:var(--ink);white-space:nowrap}
.keys-hint{margin-left:12px;font-size:calc(12px*var(--fs,1))}.keys-hint kbd{padding:0 6px;font-size:calc(11px*var(--fs,1))}
@media (pointer:coarse){.keys-hint{display:none}}
/* v8.14 记录搜索 / 置顶 / 编辑、装到桌面 */
.hist-search{margin:0 0 8px}
.hist-search input{width:100%;padding:8px 12px;border-radius:var(--r-md);border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--ink);font:calc(14px*var(--fs,1)) var(--sans)}
.hist-search input:focus-visible{outline:2px solid var(--lav);outline-offset:1px}
.hist-none{color:var(--faint);font-size:calc(13px*var(--fs,1));margin:6px 2px}
.hist{padding-right:46px}
.hist.pinned{border-color:rgba(230,194,124,.45)}
.hist .pin{font-style:normal;color:var(--earth);font-size:calc(9px*var(--fs,1));vertical-align:2px;margin-right:4px}
.hist button.ed{all:unset;position:absolute;right:24px;top:5px;color:var(--faint);font-size:calc(12px*var(--fs,1));line-height:1;padding:2px;cursor:pointer}
.hist button.ed:hover,.hist button.ed:focus-visible{color:var(--lav)}
dialog.hist-edit form{display:grid;gap:12px;margin:0}
dialog.hist-edit p{margin:0;display:flex;align-items:baseline;gap:10px}
dialog.hist-edit p small{color:var(--muted);font-size:calc(12px*var(--fs,1))}
dialog.hist-edit label{display:grid;gap:6px;font-size:calc(13px*var(--fs,1));color:var(--muted)}
dialog.hist-edit label.chk{display:flex;align-items:center;gap:8px;color:var(--ink)}
dialog.hist-edit input:not([type]),dialog.hist-edit textarea{padding:8px 10px;border-radius:var(--r-md);border:1px solid var(--line2);background:rgba(255,255,255,.04);color:var(--ink);font:calc(14px*var(--fs,1)) var(--sans);resize:vertical}
html[data-theme="light"] dialog.hist-edit input:not([type]),html[data-theme="light"] dialog.hist-edit textarea,html[data-theme="light"] .hist-search input{background:#fff;color:#2b2740}
.install-btn{margin-left:12px;font-size:calc(12px*var(--fs,1))}
@media (pointer:coarse){.hist{padding-right:80px}.hist button.ed{min-width:40px;min-height:40px;display:grid;place-items:center;right:38px;top:0}}
.install-btn[hidden]{display:none}

/* ---------- v8.15 字号四档（theme.js 设 html[data-fs]）、设置面板、记录标签与多选、打印 ---------- */
html[data-fs="sm"]{--fs:.9}html[data-fs="lg"]{--fs:1.15}html[data-fs="xl"]{--fs:1.3}
.set-tg{all:unset;cursor:pointer;margin-left:auto;font-size:calc(12px*var(--fs,1));color:var(--faint);padding:5px 12px;border-radius:20px;border:1px solid var(--line);transition:.25s;white-space:nowrap}
.set-tg:hover{color:var(--ink)}.set-tg:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.set-tg + .theme-tg{margin-left:8px}
@media (max-width:620px){.set-tg{padding:4px 10px}.top{flex-wrap:wrap;row-gap:8px}}
@media (pointer:coarse){.set-tg{min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center}}
dialog.settings{max-width:min(92vw,420px)}
dialog.settings p{margin-bottom:14px}
.set-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 16px}
.set-row.col{flex-direction:column;align-items:stretch;gap:8px;padding-top:14px;border-top:1px dashed var(--line2)}
.set-row small{color:var(--muted);font-size:calc(12px*var(--fs,1));line-height:1.6}
.set-row .sync-state{color:var(--gold)}
.set-l{color:var(--muted);font-size:calc(13px*var(--fs,1))}
.set-sw{display:flex;align-items:center;gap:8px;font-size:calc(14px*var(--fs,1));cursor:pointer}
.set-sw input{width:18px;height:18px;accent-color:var(--sakura)}
html[data-theme="light"] .set-row .sync-state{color:#8a6420}
.hist-tags{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}
.tagchip{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;border:1px solid var(--line);color:var(--muted);font-size:calc(12px*var(--fs,1));transition:var(--t-fast) var(--ease-out)}
.tagchip small{color:var(--faint);font-size:calc(10px*var(--fs,1))}
.tagchip:hover{color:var(--ink);border-color:var(--line2)}
.tagchip.on{color:var(--ink);border-color:rgba(245,184,202,.55);background:rgba(245,184,202,.12)}
.tagchip:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
html[data-theme="light"] .tagchip.on{color:#2b2740;background:rgba(214,110,140,.12);border-color:rgba(214,110,140,.45)}
.hist-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin:0 0 8px;padding:8px 12px;border-radius:var(--r-md);border:1px solid rgba(245,184,202,.3);background:rgba(245,184,202,.06);font-size:calc(13px*var(--fs,1))}
.hist-bar .sel-n{color:var(--ink);margin-right:auto}
.hist-bar .link{font-size:calc(13px*var(--fs,1));color:var(--muted)}
.hist-bar .link:hover:not(:disabled){color:var(--sakura)}
.hist-bar .link.danger:not(:disabled){color:var(--fire)}
.hist-bar .link:disabled{opacity:.45;cursor:not-allowed}
.hist-bar .link:focus-visible,.hist-ops .link:focus-visible{outline:2px solid var(--lav);outline-offset:3px;border-radius:4px}
.hist-bar .sel-why{flex-basis:100%;color:var(--faint);font-size:calc(11px*var(--fs,1))}
html[data-theme="light"] .hist-bar{background:rgba(214,110,140,.06);border-color:rgba(214,110,140,.3)}
html[data-theme="light"] .hist-bar .link.danger:not(:disabled){color:#a12d2d}
.hist.sel{display:flex;align-items:center;gap:10px;padding:8px 12px}
.hist.sel input{flex:none;width:18px;height:18px;margin:0;accent-color:var(--sakura);cursor:pointer}
.hist.sel input:focus-visible{outline:2px solid var(--lav);outline-offset:2px}
.hist.sel .hist-txt{display:block;min-width:0}
.hist.sel.on{border-color:rgba(245,184,202,.6);background:rgba(245,184,202,.1)}
html[data-theme="light"] .hist.sel.on{background:rgba(214,110,140,.08)}
@media (pointer:coarse){.hist.sel{padding-right:12px;min-height:44px}.hist-bar .link,.tagchip{min-height:40px}}
.tag-field{display:grid;gap:6px}
.tag-field>label{font-size:calc(13px*var(--fs,1));color:var(--muted)}
.tag-field small{color:var(--faint);font-size:calc(11px*var(--fs,1))}
.tag-box{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--r-md);border:1px solid var(--line2);background:rgba(255,255,255,.04)}
.tag-box:focus-within{outline:2px solid var(--lav);outline-offset:1px}
.tag-list{display:contents}
.tag-box .tag{display:inline-flex;align-items:center;gap:2px;padding:1px 4px 1px 9px;border-radius:999px;background:rgba(245,184,202,.14);color:var(--ink);font-size:calc(12px*var(--fs,1))}
.tag-box .tag button{all:unset;cursor:pointer;padding:0 5px;color:var(--faint);font-size:calc(13px*var(--fs,1));line-height:1.4;border-radius:50%}
.tag-box .tag button:hover,.tag-box .tag button:focus-visible{color:var(--fire);outline:1px solid currentColor}
.tag-box input{flex:1;min-width:8em;border:0;background:transparent;color:var(--ink);font:calc(14px*var(--fs,1)) var(--sans);padding:3px 2px;outline:0}
html[data-theme="light"] .tag-box{background:#fff}
html[data-theme="light"] .tag-box .tag{background:rgba(214,110,140,.12);color:#2b2740}
html[data-theme="light"] .tag-box input{color:#2b2740}
.chat-tools>span{display:inline-flex;gap:8px}
.print-head{display:none}
/* 大字号下防溢出：长词换行、记录卡与导航条跟着变宽 */
html[data-fs="lg"] .hist,html[data-fs="xl"] .hist{max-width:240px}
html[data-fs="xl"] .top-sub{display:none}
html[data-fs="lg"] .seg button,html[data-fs="xl"] .seg button{padding:6px 12px}
@media print{
  :root{--fs:1}
  html,body{background:#fff!important;color:#000!important;color-scheme:light}
  body>*:not(main){display:none!important}
  main>*:not(#result){display:none!important}
  #result{display:block!important;margin:0!important;padding:0!important;max-width:none!important}
  *,*::before,*::after{animation:none!important;transition:none!important;box-shadow:none!important;text-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
  #result *{color:#000!important;background:transparent!important;border-color:#bbb!important;-webkit-text-fill-color:#000!important}
  .reveal,.reveal.wait,.staged,.card{opacity:1!important;transform:none!important;visibility:visible!important}
  .rnav,.actions,#result .btn,#result .link,#result .chip,.chat-in,.chat-sug,.chat-tools,.interp-again,.interp-cta,.ln-bar,.cmp-pick,.toast,.netbar,.loading,.mascot-box,.stage,.sk,.skel-wrap,.fx-canvas,.fx-flash,.fx-merge,dialog,[aria-hidden="true"].fx-canvas{display:none!important}
  .card,.sec{border:1px solid #bbb!important;border-radius:6px!important;margin:0 0 10pt!important;padding:10pt!important;break-inside:avoid;page-break-inside:avoid}
  .pillar,.pal,.zw,.pillars,table,tr,.dayun,.ln,.ly,.fam-card,.ask,.cmp-wrap{break-inside:avoid;page-break-inside:avoid}
  .sec-h{break-after:avoid}
  details>*{display:block!important}details>summary{list-style:none}
  .hidden.ln-detail{display:none!important}
  .print-head{display:block!important;margin:0 0 12pt;padding:0 0 8pt;border-bottom:1.5pt solid #000}
  .print-head b{display:block;font:600 16pt var(--serif)}
  .print-head span{display:block;font-size:10pt;margin-top:2pt}
  .print-head p{margin:4pt 0 0;font-size:9pt}
  @page{size:A4;margin:14mm 12mm}
}
