/* 梦境层：叠加在原有样式之上。夜空为主视觉，日间为晨曦。世界色随主题流动。 */
@property --dream-a{syntax:'<color>';inherits:true;initial-value:#c39bff}
@property --dream-b{syntax:'<color>';inherits:true;initial-value:#7aa2ff}
@property --dream-c{syntax:'<color>';inherits:true;initial-value:#ff9ed2}
@property --orb-spin{syntax:'<angle>';inherits:false;initial-value:0deg}

:root{--font-display:"Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","Source Han Serif SC","Source Han Serif CN","SimSun",serif;--dream-ease:cubic-bezier(.2,.8,.2,1)}
body{--dream-a:#c39bff;--dream-b:#7aa2ff;--dream-c:#ff9ed2;transition:--dream-a 1.4s ease,--dream-b 1.4s ease,--dream-c 1.4s ease}
body[data-world="free"]{--dream-a:#a99bff;--dream-b:#7ab4ff;--dream-c:#e7a2e0}
body[data-world="astrology"]{--dream-a:#b98cff;--dream-b:#6f8cff;--dream-c:#6fdcff}
body[data-world="tarot"]{--dream-a:#7fe0e8;--dream-b:#9a8bff;--dream-c:#ffd28a}
body[data-world="bazi"]{--dream-a:#ffcf7a;--dream-b:#ff8466;--dream-c:#78e0b8}
body[data-world="love"]{--dream-a:#ff8ec0;--dream-b:#c58cff;--dream-c:#ffb48a}

/* ---------- 天空画布 ---------- */
.cosmos-sky,.cosmos-dust{position:fixed;inset:0;width:100vw;height:100vh;height:100dvh;pointer-events:none;z-index:0}
.cosmos-sky{image-rendering:auto;filter:saturate(1.15)}
.has-cosmos .app-shell{position:relative;z-index:1}
.has-cosmos .main-panel{background:transparent}
.cosmos-webgl .ambient{display:none}
body.theme-dark{background:#0b0716}

/* ---------- 夜空色板 ---------- */
body.theme-dark{--bg:#0b0716;--sidebar:rgba(12,8,28,.55);--text:#f3ecff;--muted:#a99dc4;--soft-text:#d2c6ea;--accent:var(--dream-a);--accent-strong:color-mix(in srgb,var(--dream-a) 70%,#fff);--line:rgba(205,180,255,.14);--surface:rgba(24,16,50,.62);--surface-glass:rgba(26,18,54,.42);--hover:rgba(190,150,255,.12);--focus:var(--dream-a)}
body:not(.theme-dark){--bg:#f6f2fd;--sidebar:rgba(255,255,255,.5);--text:#2a2244;--muted:#6f6588;--soft-text:#5d5378;--accent:color-mix(in srgb,var(--dream-a) 55%,#3a2466);--accent-strong:color-mix(in srgb,var(--dream-a) 40%,#2a1650);--line:rgba(120,90,170,.16);--surface:rgba(255,255,255,.7);--surface-glass:rgba(255,255,255,.5);--hover:rgba(150,110,210,.1)}

/* ---------- 外框 ---------- */
.has-cosmos .sidebar{background:var(--sidebar);border-right:1px solid var(--line);backdrop-filter:blur(26px) saturate(1.4);-webkit-backdrop-filter:blur(26px) saturate(1.4)}
.has-cosmos.is-home .sidebar{background:color-mix(in srgb,var(--bg) 82%,transparent)}
.has-cosmos .topbar{background:transparent}
.brand-wordmark,.home-brand strong{font-family:var(--font-display);letter-spacing:4px}
.brand-symbol,.home-brand .icon{color:var(--dream-a);filter:drop-shadow(0 0 8px var(--dream-a))}
.demo-badge{background:var(--surface-glass)!important;border-color:var(--line)!important;backdrop-filter:blur(10px)}
.demo-badge>span{background:var(--dream-c)!important;box-shadow:0 0 8px var(--dream-c)}
.has-cosmos .icon-button:hover{background:var(--hover)}
.mode-nav-item:hover,.mode-nav-item[aria-pressed="true"]{background:var(--hover)}
.history-item.is-active{background:var(--hover);box-shadow:inset 2px 0 0 var(--dream-a)}

/* ---------- 首页：标题 ---------- */
.orbit-intro .eyebrow{color:var(--dream-a);text-shadow:0 0 14px color-mix(in srgb,var(--dream-a) 70%,transparent);letter-spacing:6px;animation:dream-fade 1.6s .1s both}
.orbit-intro h1{font-family:var(--font-display);font-weight:600;letter-spacing:6px;font-size:clamp(34px,4.2vw,62px)}
.orbit-intro h1 span{color:inherit}
.orbit-intro h1 .dream-char{display:inline-block!important;background:linear-gradient(100deg,var(--text) 0%,var(--text) 30%,var(--dream-a) 42%,#fff 50%,var(--dream-c) 58%,var(--text) 70%,var(--text) 100%);background-size:900% 100%;background-position:calc(100% - var(--i) * 4%) 0;-webkit-background-clip:text;background-clip:text;color:transparent;animation:char-rise 1.3s var(--dream-ease) both,char-shimmer 7s linear infinite;animation-delay:calc(var(--i) * 75ms + .25s),calc(var(--i) * 90ms + 2s)}
body.theme-dark .orbit-intro h1{filter:drop-shadow(0 0 22px color-mix(in srgb,var(--dream-a) 40%,transparent))}
.orbit-intro .welcome-subtitle{animation:dream-fade 1.6s 1.1s both;color:var(--soft-text);letter-spacing:2px}

/* ---------- 首页：星盘 ---------- */
.orbit-stage{--dream-tilt-x:0deg;--dream-tilt-y:0deg;perspective:1600px}
.orbit-track,.orbit-axis{opacity:.55}
.astrolabe-disc{position:absolute;left:50%;top:48%;width:min(1000px,130vw);aspect-ratio:1;transform:translate(-50%,-50%) rotateX(calc(62deg + var(--dream-tilt-x))) rotateY(var(--dream-tilt-y));transform-style:preserve-3d;transition:transform .9s var(--dream-ease);pointer-events:none;z-index:-1;animation:astrolabe-in 2.4s .2s var(--dream-ease) both}
.astrolabe{width:100%;height:100%;overflow:visible;color:var(--dream-a)}
.astrolabe-ring{transform-box:fill-box;transform-origin:center}
.ring-slow{animation:dream-spin 260s linear infinite}
.ring-reverse{animation:dream-spin 190s linear infinite reverse}
.ring-mid{animation:dream-spin 120s linear infinite}
.astro-line{fill:none;stroke:currentColor;stroke-opacity:.32;stroke-width:1.2}
.astro-line.strong{stroke:url(#astrolabe-sheen);stroke-opacity:.85;stroke-width:2.4}
.astro-line.faint{stroke-opacity:.16}
.astro-line.dashed{stroke-dasharray:2 10;stroke-opacity:.5;stroke-width:2}
.astro-line.sheen{stroke:url(#astrolabe-sheen);stroke-opacity:.55;stroke-width:1.6}
.astro-tick{stroke:currentColor;stroke-opacity:.28;stroke-width:1.2}
.astro-tick.strong{stroke-opacity:.7;stroke-width:2}
.astro-glyph{fill:var(--dream-b);fill-opacity:.85;font-family:"Segoe UI Symbol","Apple Symbols","Noto Sans Symbols",sans-serif}
.astro-term{fill:var(--soft-text);fill-opacity:.55;font-family:var(--font-display);letter-spacing:2px}
.astro-branch{fill:var(--dream-c);fill-opacity:.7;font-family:var(--font-display)}
.astro-constellation{fill:none;stroke:var(--dream-c);stroke-opacity:.35;stroke-width:1.2;stroke-dasharray:4 6}
.astro-star{fill:#fff;animation:star-twinkle 3.2s ease-in-out infinite;animation-delay:calc(var(--i) * -.6s)}
body:not(.theme-dark) .astro-star{fill:var(--dream-b)}

/* 中心光球：流动的虹彩 */
.portal-aura{width:420px;height:420px;background:radial-gradient(circle,color-mix(in srgb,var(--dream-a) 70%,transparent),color-mix(in srgb,var(--dream-b) 25%,transparent) 40%,transparent 68%)!important;opacity:.55!important;mix-blend-mode:screen}
body:not(.theme-dark) .portal-aura{mix-blend-mode:normal;opacity:.4!important}
.portal-rays{position:absolute;left:50%;top:85px;width:640px;height:640px;transform:translate(-50%,-50%);border-radius:50%;background:repeating-conic-gradient(from 0deg,color-mix(in srgb,var(--dream-a) 22%,transparent) 0deg 1.4deg,transparent 1.4deg 9deg);-webkit-mask:radial-gradient(circle,#000 8%,transparent 62%);mask:radial-gradient(circle,#000 8%,transparent 62%);animation:dream-spin 90s linear infinite;mix-blend-mode:screen;opacity:.8;pointer-events:none}
body:not(.theme-dark) .portal-rays{mix-blend-mode:normal;opacity:.5}
.has-cosmos .portal-sphere{width:170px;height:170px;background:radial-gradient(circle at 30% 24%,rgba(255,255,255,.95),rgba(255,255,255,.2) 22%,transparent 36%),radial-gradient(circle at 72% 78%,rgba(8,2,30,.65),transparent 55%),conic-gradient(from var(--orb-spin),var(--dream-a),var(--dream-b),var(--dream-c),#fff6,var(--dream-a))!important;box-shadow:0 0 50px 6px color-mix(in srgb,var(--dream-a) 55%,transparent),0 0 140px 30px color-mix(in srgb,var(--dream-b) 30%,transparent),inset -18px -24px 40px rgba(10,2,35,.55),inset 6px 8px 24px rgba(255,255,255,.55)!important;animation:orb-spin 14s linear infinite,orb-float 7s ease-in-out infinite}
.portal-sphere:after{content:'';position:absolute;inset:-10%;border-radius:50%;background:conic-gradient(from calc(var(--orb-spin) * -2),transparent,rgba(255,255,255,.35),transparent 30%,transparent);filter:blur(10px);mix-blend-mode:overlay}
.sphere-terrain{opacity:.45;mix-blend-mode:soft-light!important}
.sphere-orbit{border:1px solid transparent!important;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--dream-c) 80%,#fff),transparent) border-box;-webkit-mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;filter:drop-shadow(0 0 6px var(--dream-c))}
@media(min-width:769px){.sphere-orbit{width:250px!important;height:64px!important;top:62px!important}}
.orbit-preview:before{content:'';position:absolute;left:50%;top:50%;width:330px;height:190px;transform:translate(-50%,-50%);background:radial-gradient(ellipse,color-mix(in srgb,var(--bg) 82%,transparent) 30%,transparent 70%);z-index:-1;pointer-events:none}
.orbit-preview h2{font-family:var(--font-display);font-size:clamp(17px,2vw,26px);letter-spacing:4px;text-shadow:0 0 22px color-mix(in srgb,var(--dream-a) 50%,transparent)}
.orbit-preview-eyebrow{color:var(--dream-a)!important;letter-spacing:4px!important}
.orbit-preview p{color:var(--soft-text)}

/* 四个世界：漂浮的玻璃星球 */
body.theme-dark .orbit-node.astrology-card{--node-color:#c9a6ff}
body.theme-dark .orbit-node.tarot-card{--node-color:#8fe0f0}
body.theme-dark .orbit-node.bazi-card{--node-color:#f6cf86}
body.theme-dark .orbit-node.love-card{--node-color:#ffa0c8}
.orbit-node.explore-card{animation:node-bob 6.5s ease-in-out infinite}
.orbit-node.tarot-card{animation-delay:-1.6s}.orbit-node.bazi-card{animation-delay:-3.2s}.orbit-node.love-card{animation-delay:-4.8s}
.has-cosmos .orbit-node-art{width:96px;height:96px;border:1px solid rgba(255,255,255,.22)!important;background:radial-gradient(circle at 30% 24%,rgba(255,255,255,.42),transparent 42%),radial-gradient(circle at 50% 60%,color-mix(in srgb,var(--node-color) 38%,transparent),color-mix(in srgb,var(--node-color) 10%,rgba(10,6,26,.35)) 72%)!important;box-shadow:0 0 34px -4px color-mix(in srgb,var(--node-color) 70%,transparent),inset 0 0 22px rgba(255,255,255,.1),inset 0 -10px 20px rgba(0,0,0,.25)!important;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
body:not(.theme-dark) .orbit-node-art{background:radial-gradient(circle at 30% 24%,#fff,transparent 46%),radial-gradient(circle,color-mix(in srgb,var(--node-color) 22%,#fff),color-mix(in srgb,var(--node-color) 30%,#fff) 75%)!important;box-shadow:0 10px 40px -6px color-mix(in srgb,var(--node-color) 55%,transparent),inset 0 0 18px #fff!important}
.has-cosmos .orbit-node-art:before{inset:-9px;border:1.5px solid transparent;background:conic-gradient(from var(--orb-spin),var(--node-color),transparent 30%,#fff 50%,transparent 70%,var(--node-color)) border-box;-webkit-mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:orb-spin 6s linear infinite;opacity:.35;transform:none}
.orbit-node.is-preview .orbit-node-art:before,.orbit-node:focus-visible .orbit-node-art:before{opacity:1!important}
.orbit-node.is-preview .orbit-node-art,.orbit-node:focus-visible .orbit-node-art{transform:translateY(-8px) scale(1.12)!important;box-shadow:0 0 60px 4px color-mix(in srgb,var(--node-color) 75%,transparent),inset 0 0 22px rgba(255,255,255,.18)!important}
.orbit-node-art svg{filter:drop-shadow(0 0 6px color-mix(in srgb,var(--node-color) 80%,transparent))}
.orbit-node-title{font-family:var(--font-display);font-size:21px;letter-spacing:4px;font-weight:600}
.orbit-node.is-preview .orbit-node-title{text-shadow:0 0 18px var(--node-color)}
.orbit-node-english{color:var(--node-color)!important;letter-spacing:3px}
.orbit-free-start{color:var(--dream-a)!important}
.orbit-home-note,.orbit-interaction-note{color:var(--muted)}

/* 进入时的光门 */
.portal-transition-glow{background:radial-gradient(circle,#fff,var(--portal-colour) 35%,transparent 70%)!important;box-shadow:none!important;mix-blend-mode:screen}

/* ---------- 对话 ---------- */
.chat-topic{font-family:var(--font-display);letter-spacing:4px;color:var(--dream-a)}
.message.is-fresh{animation:message-in .9s var(--dream-ease) both}
.message-user.is-fresh{animation-name:message-in-user}
.message-avatar{position:relative;border-radius:50%!important;background:radial-gradient(circle at 30% 25%,rgba(255,255,255,.7),transparent 45%),conic-gradient(from var(--orb-spin),var(--dream-a),var(--dream-b),var(--dream-c),var(--dream-a))!important;color:#fff!important;text-shadow:0 0 6px #fff;box-shadow:0 0 18px -2px var(--dream-a);animation:orb-spin 9s linear infinite}
.message-assistant:not(:has(.natal-card,.tarot-spread,.birth-form)) .message-body{background:var(--surface-glass);border:1px solid var(--line);border-radius:4px 20px 20px 20px;padding:14px 20px 16px;backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);box-shadow:0 10px 40px -20px rgba(0,0,0,.5)}
.message-user .message-body{background:linear-gradient(135deg,color-mix(in srgb,var(--dream-a) 34%,transparent),color-mix(in srgb,var(--dream-b) 26%,transparent))!important;border:1px solid color-mix(in srgb,var(--dream-a) 40%,transparent)!important;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 0 30px -10px var(--dream-a)}
.rich-heading{font-family:var(--font-display);letter-spacing:2px;color:var(--dream-a)!important}
.rich-heading:before{color:var(--dream-c);text-shadow:0 0 8px var(--dream-c);opacity:1!important}
.rich-item:before{background:var(--dream-c)!important;box-shadow:0 0 6px var(--dream-c)}
.message-streaming .message-text>:last-child:after{background:var(--dream-c)!important;box-shadow:0 0 8px var(--dream-c)}
.loading-dots span{background:var(--dream-a)!important;box-shadow:0 0 10px var(--dream-a)}
.loading-dots span:nth-child(2){background:var(--dream-b)!important;box-shadow:0 0 10px var(--dream-b)}
.loading-dots span:nth-child(3){background:var(--dream-c)!important;box-shadow:0 0 10px var(--dream-c)}

.inline-button{background:var(--surface-glass)!important;border:1px solid var(--line)!important;color:var(--text)!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:box-shadow .3s,border-color .3s,transform .2s}
.inline-button:hover{border-color:color-mix(in srgb,var(--dream-a) 60%,transparent)!important;box-shadow:0 0 22px -6px var(--dream-a)}
.inline-button.primary{background:linear-gradient(120deg,var(--dream-a),var(--dream-b) 55%,var(--dream-c))!important;background-size:180% 100%!important;border-color:transparent!important;color:#140b2c!important;font-weight:600;box-shadow:0 0 26px -6px var(--dream-a);animation:button-flow 6s ease-in-out infinite}
.inline-button.primary:hover{transform:translateY(-1px);box-shadow:0 0 36px -4px var(--dream-a)}

.birth-form{background:var(--surface-glass)!important;border:1px solid var(--line)!important;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
body.theme-dark .birth-form input,body.theme-dark .birth-form select{background:rgba(10,6,26,.5)!important;border-color:var(--line)!important;color:var(--text)!important}
.birth-form input:focus,.birth-form select:focus{border-color:var(--dream-a)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--dream-a) 25%,transparent)!important}

/* 输入框 */
.has-cosmos .composer-area{background:linear-gradient(0deg,color-mix(in srgb,var(--bg) 88%,transparent) 45%,transparent)}
.composer{background:var(--surface-glass)!important;border:1px solid var(--line)!important;backdrop-filter:blur(22px) saturate(1.4)!important;box-shadow:0 10px 50px -20px rgba(0,0,0,.6)!important;position:relative}
.composer:focus-within{border-color:color-mix(in srgb,var(--dream-a) 55%,transparent)!important;box-shadow:0 0 0 1px color-mix(in srgb,var(--dream-a) 25%,transparent),0 0 50px -12px var(--dream-a)!important}
.composer textarea{color:var(--text)}
.send-button:not(:disabled){background:conic-gradient(from var(--orb-spin),var(--dream-a),var(--dream-b),var(--dream-c),var(--dream-a))!important;color:#140b2c!important;box-shadow:0 0 18px -2px var(--dream-a);animation:orb-spin 5s linear infinite}

/* ---------- 星盘卡片与八字卡片 ---------- */
.has-cosmos .natal-card{position:relative;overflow:hidden;background:linear-gradient(140deg,color-mix(in srgb,var(--dream-a) 14%,var(--surface)),color-mix(in srgb,var(--dream-b) 10%,var(--surface)))!important;border:1px solid color-mix(in srgb,var(--dream-a) 30%,transparent)!important;box-shadow:0 30px 80px -30px rgba(0,0,0,.6),0 0 90px -30px var(--dream-a)!important;backdrop-filter:blur(20px) saturate(1.3);-webkit-backdrop-filter:blur(20px) saturate(1.3)}
.natal-card:before{content:'';position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,var(--dream-a),#fff,var(--dream-c),transparent);opacity:.8}
.natal-header h3{font-family:var(--font-display);letter-spacing:4px!important}
.natal-eyebrow{color:var(--dream-a)!important;letter-spacing:4px!important}
.natal-badge{background:color-mix(in srgb,var(--dream-a) 14%,transparent)!important;border-color:color-mix(in srgb,var(--dream-a) 35%,transparent)!important;color:var(--accent-strong)!important}
.natal-core-item,.bazi-pillar{background:color-mix(in srgb,var(--surface) 60%,transparent)!important;border-color:var(--line)!important}
body.theme-dark .wheel-ring,body.theme-dark .wheel-divider{stroke:color-mix(in srgb,var(--dream-a) 45%,transparent)}
body.theme-dark .wheel-planet-dot{fill:var(--dream-c)}
body.theme-dark .wheel-planet-label{fill:#fff}
body.theme-dark .wheel-centre{fill:var(--dream-a)}
.natal-wheel{filter:drop-shadow(0 0 10px color-mix(in srgb,var(--dream-a) 35%,transparent))}
.is-fresh .natal-wheel .wheel-ring,.is-fresh .natal-wheel .wheel-aspect{stroke-dasharray:1000;animation:wheel-draw 2.4s var(--dream-ease) both}
.is-fresh .natal-wheel .wheel-aspect{animation-delay:1.2s}
.is-fresh .natal-wheel .wheel-planet-dot,.is-fresh .natal-wheel .wheel-planet-label,.is-fresh .natal-wheel .wheel-sign{animation:dream-pop .8s var(--dream-ease) both;animation-delay:1s}
.is-fresh .natal-wheel :nth-child(3n+1){animation-delay:1.25s}
.is-fresh .natal-wheel :nth-child(3n+2){animation-delay:1.5s}
.is-fresh .natal-core-item{animation:message-in .9s var(--dream-ease) both}
.is-fresh .natal-core-item:nth-child(2){animation-delay:.25s}.is-fresh .natal-core-item:nth-child(3){animation-delay:.5s}

/* 八字：五行之色，墨落金显 */
.bazi-chart{--wood:#7fe3a8;--fire:#ff8a78;--earth:#efc27a;--metal:#f4ecd4;--water:#7cbcff}
body:not(.theme-dark) .bazi-chart{--wood:#2f8f5a;--fire:#c4442f;--earth:#a8741e;--metal:#7c6a3e;--water:#2b6cb8}
.bazi-chart:after{content:'';position:absolute;right:-120px;top:-120px;width:320px;height:320px;border-radius:50%;background:repeating-conic-gradient(from 0deg,color-mix(in srgb,var(--dream-a) 30%,transparent) 0 .8deg,transparent .8deg 15deg);-webkit-mask:radial-gradient(circle,transparent 40%,#000 41%,#000 50%,transparent 51%,transparent 60%,#000 61%,#000 62%,transparent 63%);mask:radial-gradient(circle,transparent 40%,#000 41%,#000 50%,transparent 51%,transparent 60%,#000 61%,#000 62%,transparent 63%);animation:dream-spin 80s linear infinite;opacity:.6;pointer-events:none}
.bazi-pillar{position:relative;overflow:hidden}
.bazi-pillar.is-day{border-color:color-mix(in srgb,var(--dream-a) 60%,transparent)!important;box-shadow:0 0 30px -8px var(--dream-a),inset 0 0 20px color-mix(in srgb,var(--dream-a) 12%,transparent)}
.bazi-char{font-family:var(--font-display);font-size:30px!important;font-weight:700!important;text-shadow:0 0 18px currentColor}
body:not(.theme-dark) .bazi-char{text-shadow:0 0 12px color-mix(in srgb,currentColor 35%,transparent)}
.bazi-char[data-element="木"]{color:var(--wood)}.bazi-char[data-element="火"]{color:var(--fire)}.bazi-char[data-element="土"]{color:var(--earth)}.bazi-char[data-element="金"]{color:var(--metal)}.bazi-char[data-element="水"]{color:var(--water)}
.bazi-god{color:var(--dream-a)!important;letter-spacing:1px}
.is-fresh .bazi-pillar{animation:pillar-rise 1s var(--dream-ease) both;animation-delay:calc(var(--i) * .38s + .25s)}
.is-fresh .bazi-char{animation:ink-bloom 1.3s var(--dream-ease) both;animation-delay:calc(var(--i) * .38s + .5s)}
.is-fresh .bazi-char+.bazi-char{animation-delay:calc(var(--i) * .38s + .7s)}
.is-fresh .bazi-pillar:after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--dream-a) 45%,transparent),transparent);transform:translateY(-100%);animation:pillar-scan 1.2s ease-out both;animation-delay:calc(var(--i) * .38s + .3s);pointer-events:none}
@media(max-width:768px){.bazi-char{font-size:24px!important}}

/* ---------- 塔罗：翻牌与全息 ---------- */
.has-cosmos .tarot-face{overflow:visible;transform-style:preserve-3d;transform:perspective(800px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transition:transform .35s var(--dream-ease),box-shadow .35s;background:radial-gradient(ellipse at 50% 28%,rgba(255,214,150,.2),transparent 60%),linear-gradient(160deg,#211848,#0d0d2c 70%)!important;border:1px solid rgba(240,204,140,.55)!important;color:#f3d79c!important;box-shadow:0 18px 40px -16px rgba(0,0,0,.7),0 0 30px -10px rgba(240,204,140,.5);backface-visibility:hidden;-webkit-backface-visibility:hidden}
.has-cosmos .tarot-face:before,.has-cosmos .tarot-face:after{border-color:rgba(240,204,140,.4)!important;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.tarot-face>*{backface-visibility:hidden;-webkit-backface-visibility:hidden}
.tarot-glyph{filter:drop-shadow(0 0 8px rgba(255,214,150,.7))}
.tarot-face.is-tilting{transition:transform .08s linear;box-shadow:0 26px 50px -16px rgba(0,0,0,.75),0 0 46px -6px rgba(255,214,150,.7)}
.tarot-foil{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;background:radial-gradient(circle at var(--foil-x,50%) var(--foil-y,30%),rgba(255,255,255,.5),transparent 42%),linear-gradient(115deg,transparent 18%,rgba(255,110,200,.35) 34%,rgba(110,220,255,.35) 50%,rgba(255,230,130,.35) 66%,transparent 82%);background-size:100% 100%,260% 260%;background-position:center,var(--foil-x,0%) var(--foil-y,0%);mix-blend-mode:color-dodge;opacity:0;transition:opacity .3s}
.tarot-face.is-tilting .tarot-foil{opacity:.85}
.tarot-face:not(.is-tilting) .tarot-foil{animation:foil-sweep 6s ease-in-out infinite;animation-delay:calc(var(--i,0) * .8s + 2s)}
.tarot-back{position:absolute;inset:0;border-radius:inherit;transform:rotateY(180deg) translateZ(1px);background:radial-gradient(circle at 50% 50%,rgba(255,214,150,.55) 0 3px,transparent 4px),radial-gradient(circle at 50% 50%,transparent 20%,rgba(240,204,140,.45) 21%,transparent 22%,transparent 33%,rgba(240,204,140,.3) 34%,transparent 35%),repeating-conic-gradient(from 0deg,rgba(240,204,140,.16) 0 4deg,transparent 4deg 15deg),linear-gradient(160deg,#2a1d5c,#110e34);border:1px solid rgba(240,204,140,.6);box-shadow:inset 0 0 0 6px rgba(13,13,44,.9),inset 0 0 0 7px rgba(240,204,140,.4)}
.message.is-fresh .tarot-face{animation:tarot-flip 1.3s var(--dream-ease) backwards;animation-delay:calc(var(--i,0) * .55s + .35s)}
.message.is-fresh .tarot-caption,.message.is-fresh .tarot-reading,.message.is-fresh .tarot-position{animation:dream-fade 1s ease both;animation-delay:calc(var(--i,0) * .55s + 1.2s)}
.tarot-caption{font-family:var(--font-display);letter-spacing:2px}

/* ---------- 动画 ---------- */
@keyframes dream-spin{to{transform:rotate(360deg)}}
@keyframes orb-spin{to{--orb-spin:360deg}}
@keyframes orb-float{0%,100%{translate:0 0}50%{translate:0 -8px}}
@keyframes node-bob{0%,100%{translate:0 0}50%{translate:0 -10px}}
@keyframes dream-fade{from{opacity:0;filter:blur(6px)}to{opacity:1;filter:none}}
@keyframes char-rise{from{opacity:0;transform:translateY(.5em) scale(.9);filter:blur(10px)}to{opacity:1;transform:none;filter:none}}
@keyframes char-shimmer{0%{background-position:calc(100% - var(--i) * 4%) 0}100%{background-position:calc(-300% - var(--i) * 4%) 0}}
@keyframes astrolabe-in{from{opacity:0;transform:translate(-50%,-50%) rotateX(80deg) scale(.6) rotateZ(-40deg)}to{opacity:1}}
@keyframes star-twinkle{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes message-in{from{opacity:0;transform:translateY(16px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes message-in-user{from{opacity:0;transform:translateX(16px) scale(.96);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
@keyframes button-flow{0%,100%{background-position:0% 0}50%{background-position:100% 0}}
@keyframes wheel-draw{from{stroke-dashoffset:1000;opacity:.2}to{stroke-dashoffset:0;opacity:1}}
@keyframes dream-pop{from{opacity:0;transform:scale(.3)}to{opacity:1;transform:none}}
@keyframes pillar-rise{from{opacity:0;transform:translateY(30px) scale(.94);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
@keyframes ink-bloom{0%{opacity:0;transform:scale(1.8);filter:blur(14px)}60%{opacity:1;filter:blur(1px)}100%{opacity:1;transform:none;filter:none}}
@keyframes pillar-scan{to{transform:translateY(100%)}}
@keyframes tarot-flip{0%{opacity:0;transform:perspective(800px) translateY(-40px) rotateY(180deg) scale(.8)}20%{opacity:1}100%{opacity:1;transform:perspective(800px) rotateY(0) scale(1)}}
@keyframes foil-sweep{0%,70%{opacity:0;background-position:center,0% 0%}80%{opacity:.7}100%{opacity:0;background-position:center,100% 100%}}

@media(max-width:768px){
  .astrolabe-disc{width:150vw;top:46%}
  .portal-rays{width:380px;height:380px;top:50px}
  .portal-aura{width:260px;height:260px;top:50px}
  .has-cosmos .portal-sphere{width:100px;height:100px}
  .has-cosmos .orbit-node-art{width:72px;height:72px}
  .orbit-preview:before{width:220px;height:110px}
  .orbit-intro h1{letter-spacing:3px}
}
@media(prefers-reduced-motion:reduce){
  .orbit-intro .eyebrow,.orbit-intro .welcome-subtitle,.orbit-intro h1 .dream-char,.astrolabe-disc,.astrolabe-ring,.astro-star,.portal-rays,.has-cosmos .portal-sphere,.portal-sphere:after,.orbit-node.explore-card,.has-cosmos .orbit-node-art:before,.message,.message-avatar,.inline-button.primary,.send-button,.bazi-chart:after,.bazi-pillar,.bazi-char,.bazi-pillar:after,.tarot-face,.tarot-foil,.tarot-caption,.tarot-reading,.tarot-position,.natal-wheel *,.natal-core-item{animation:none!important}
  .orbit-intro h1 .dream-char{opacity:1}
}

/* ---------- 仪式：全屏覆盖，始终是夜色 ---------- */
.ritual{position:fixed;inset:0;z-index:200;display:grid;grid-template-rows:minmax(0,1fr) auto auto;justify-items:center;padding:calc(env(safe-area-inset-top,0px) + 20px) 16px calc(env(safe-area-inset-bottom,0px) + 26px);background:radial-gradient(ellipse at 50% 42%,rgba(46,24,100,.86),rgba(6,3,18,.96) 72%);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);color:#f3ecff;opacity:0;transition:opacity .6s ease;overflow:hidden;--font-display:"Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","Source Han Serif SC","SimSun",serif}
.ritual{overflow:clip}
.ritual.is-open{opacity:1}
.ritual.is-closing{opacity:0;transition-duration:.65s;pointer-events:none}
.ritual-stage{position:relative;width:100%;height:100%;min-height:0}
.ritual-caption{font-family:var(--font-display);font-size:clamp(16px,2.2vw,22px);letter-spacing:5px;text-align:center;margin:10px 0 14px;min-height:1.6em;color:#f6ecff;text-shadow:0 0 20px rgba(200,160,255,.7)}
.ritual-caption.is-changing{animation:dream-fade .9s ease both}
.ritual-actions{min-height:46px;display:flex;justify-content:center}
.ritual .ritual-continue{padding:12px 28px;font-size:15px;letter-spacing:3px;animation:dream-fade .8s ease both,button-flow 6s ease-in-out infinite}
.ritual-skip{position:absolute;top:calc(env(safe-area-inset-top,0px) + 14px);right:16px;z-index:5;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);color:#cfc3ea;border-radius:999px;padding:7px 15px;font:inherit;font-size:12px;letter-spacing:2px;cursor:pointer;transition:background .2s,color .2s}
.ritual-skip:hover,.ritual-skip:focus-visible{background:rgba(255,255,255,.14);color:#fff}

/* 塔罗：牌桌、洗牌、扇形、翻开 */
.ritual-table{position:absolute;inset:0;--cw:clamp(58px,8.6vw,94px);perspective:1600px}
.ritual-card{position:absolute;left:calc(50% - var(--cw) / 2);top:calc(50% - var(--cw) * .81);width:var(--cw);height:calc(var(--cw) * 1.62);padding:0;margin:0;border:0;background:none;color:inherit;transform-style:preserve-3d;transition:translate .28s cubic-bezier(.2,.8,.2,1)}
button.ritual-card{cursor:pointer}
button.ritual-card:not(:disabled):hover,button.ritual-card:not(:disabled):focus-visible{translate:0 -22px;outline:none}
button.ritual-card:not(:disabled):hover .ritual-card-back,button.ritual-card:not(:disabled):focus-visible .ritual-card-back{box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.6),0 0 34px 2px rgba(255,214,150,.6)}
.ritual-card-inner{position:absolute;inset:0;transform-style:preserve-3d;transition:transform 1s cubic-bezier(.3,.7,.2,1)}
.ritual-card.is-flipped .ritual-card-inner{transform:rotateY(180deg)}
.ritual-card-back,.ritual-card-front{position:absolute;inset:0;border-radius:calc(var(--cw) * .09);backface-visibility:hidden;-webkit-backface-visibility:hidden}
.ritual-card-back{background:radial-gradient(circle at 50% 50%,rgba(255,214,150,.6) 0 2px,transparent 3px),radial-gradient(circle at 50% 50%,transparent 20%,rgba(240,204,140,.45) 21%,transparent 22.5%,transparent 33%,rgba(240,204,140,.3) 34%,transparent 35.5%),repeating-conic-gradient(from 0deg,rgba(240,204,140,.16) 0 4deg,transparent 4deg 15deg),linear-gradient(160deg,#2c1e60,#110e34);border:1px solid rgba(240,204,140,.6);box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.4),0 10px 26px -10px rgba(0,0,0,.8);transition:box-shadow .3s}
.ritual-card.is-picked .ritual-card-back{box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.7),0 0 40px 6px rgba(255,214,150,.55);animation:picked-pulse 2.4s ease-in-out infinite}
.ritual-card-front{transform:rotateY(180deg);box-shadow:0 0 60px -6px rgba(255,214,150,.7)}
.ritual-card-front .tarot-face{width:100%;height:100%!important;border-radius:inherit}
.ritual-card.is-flipped .ritual-card-front{animation:card-flare 1.4s ease-out .5s both}
.ritual-slot{position:absolute;left:calc(50% - var(--cw) / 2);top:calc(50% - var(--cw) * .81);width:var(--cw);height:calc(var(--cw) * 1.62);box-sizing:border-box;border:1px dashed rgba(240,204,140,.4);border-radius:calc(var(--cw) * .09);display:grid;place-items:center;padding:6px;text-align:center;font-family:var(--font-display);font-size:11px;letter-spacing:1px;line-height:1.5;color:rgba(240,214,160,.75);animation:dream-fade 1s ease both;pointer-events:none}
.ritual-slot.is-filled{border-style:solid;border-color:rgba(240,204,140,.15)}
.ritual-card-name{position:absolute;left:50%;top:50%;width:180px;display:grid;gap:4px;text-align:center;pointer-events:none;animation:dream-fade 1s ease both}
.ritual-card-name strong{font-family:var(--font-display);font-size:17px;letter-spacing:3px;color:#f6dca4;text-shadow:0 0 16px rgba(255,214,150,.7)}
.ritual-card-name small{font-size:11px;letter-spacing:2px;color:#cfc3ea}

/* 占星：星空回溯 */
.ritual-sky .ritual-stage{position:absolute;inset:0}
.ritual-sky{background:#070414}
.ritual-canvas{position:absolute;inset:0;width:100%;height:100%;cursor:grab}
.ritual-canvas:active{cursor:grabbing}
.ritual-sky .ritual-caption,.ritual-sky .ritual-actions{position:relative;z-index:2}
.ritual-sky .ritual-caption{grid-row:2}.ritual-sky .ritual-actions{grid-row:3}
.ritual-clock{position:absolute;left:0;right:0;bottom:calc(env(safe-area-inset-bottom,0px) + 140px);display:grid;gap:6px;justify-items:center;pointer-events:none;z-index:1}
.ritual-date{font-family:var(--font-display);font-size:clamp(26px,5vw,50px);font-weight:600;letter-spacing:4px;font-variant-numeric:tabular-nums;color:#efe6ff;text-shadow:0 0 24px rgba(170,140,255,.8)}
.ritual-place{font-size:13px;letter-spacing:3px;color:#b9acd8}
.ritual-clock.is-arrived .ritual-date{color:#ffe2a8;text-shadow:0 0 30px rgba(255,200,120,.9);animation:arrive-pulse 1.2s ease-out both}

/* 八字：罗盘与转轮 */
.ritual-luopan{position:absolute;left:50%;top:50%;width:min(92vmin,660px);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;opacity:.6;transition:opacity 1.2s;background:radial-gradient(circle,rgba(255,200,120,.12),transparent 62%);pointer-events:none}
.ritual-luopan.is-settled{opacity:.42}
.luopan-ring{position:absolute;border-radius:50%;border:1px solid rgba(255,207,122,.32);box-shadow:inset 0 0 0 1px rgba(255,207,122,.06)}
.ring-trigram{inset:0}.ring-stem{inset:13%}.ring-branch{inset:25%;border-style:dashed}
.luopan-ring span{position:absolute;left:50%;top:0;height:50%;transform-origin:50% 100%;transform:translateX(-50%) rotate(var(--a));font-family:var(--font-display);line-height:1;padding-top:.5em;color:rgba(255,215,150,.75)}
.ring-trigram span{font-size:clamp(16px,3vmin,24px);color:rgba(255,230,190,.55)}
.ring-stem span{font-size:clamp(13px,2.4vmin,19px)}
.ring-branch span{font-size:clamp(11px,1.9vmin,15px);color:rgba(255,160,130,.7)}
.luopan-needle{position:absolute;left:50%;top:50%;width:2px;height:34%;margin-left:-1px;transform-origin:50% 0;background:linear-gradient(rgba(255,120,100,.9),transparent);animation:needle-seek 1.4s ease-in-out infinite alternate}
.is-settled .luopan-needle{animation:needle-settle 1.6s cubic-bezier(.2,.8,.2,1) forwards}
.ritual-pillars{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;gap:clamp(8px,2.2vw,22px);font-size:clamp(32px,5.6vw,52px)}
.ritual-pillar{display:grid;justify-items:center;gap:2px;padding:12px clamp(8px,1.4vw,14px) 14px;border-radius:14px;background:rgba(14,8,30,.66);border:1px solid rgba(255,207,122,.22);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:border-color .6s,box-shadow .6s}
.ritual-pillar-label{font-size:12px;letter-spacing:3px;color:#d9c7a4;margin-bottom:4px}
.ritual-reel{display:block;width:1.15em;height:1.3em;overflow:hidden;font-family:var(--font-display);text-align:center;-webkit-mask:linear-gradient(transparent,#000 32%,#000 68%,transparent);mask:linear-gradient(transparent,#000 32%,#000 68%,transparent)}
.ritual-reel:has(.ritual-char){-webkit-mask:none;mask:none;overflow:visible}
.ritual-strip{display:block;color:rgba(255,236,205,.6);filter:blur(.4px)}
.ritual-strip span{display:block;height:1.3em;line-height:1.3em}
.ritual-char{display:block;height:1.3em;line-height:1.3em;font-weight:700;text-shadow:0 0 22px currentColor;animation:ink-bloom 1s cubic-bezier(.2,.8,.2,1) both}
.ritual-char.is-unknown{color:rgba(220,210,240,.4);text-shadow:0 0 30px rgba(200,190,240,.5);font-weight:400}
.ritual-pillar.is-locked{border-color:rgba(255,207,122,.55);box-shadow:0 0 34px -8px rgba(255,200,120,.7)}
.ritual-pillar.is-unknown{border-style:dashed;box-shadow:none}
.ritual-pillar.is-day.is-locked{border-color:rgba(255,226,168,.9);box-shadow:0 0 50px -6px rgba(255,200,120,.95),inset 0 0 24px rgba(255,200,120,.18)}
.ritual-elements{position:absolute;left:0;right:0;bottom:4%;display:flex;justify-content:center;flex-wrap:wrap;gap:10px 18px}
.ritual-element{display:flex;align-items:center;gap:7px;font-family:var(--font-display);font-size:15px;letter-spacing:2px;color:var(--c);animation:dream-fade .8s ease both;animation-delay:calc(var(--i) * .12s)}
.ritual-element i{width:calc(7px + var(--n) * 5px);aspect-ratio:1;border-radius:50%;background:var(--c);box-shadow:0 0 14px var(--c);opacity:calc(.3 + var(--n) * .25)}

/* 对话里已经翻开过的牌，不再重复翻牌 */
.message.is-revealed .tarot-face{animation:none!important}
.message.is-revealed .tarot-caption,.message.is-revealed .tarot-reading,.message.is-revealed .tarot-position{animation-delay:calc(var(--i,0) * .15s + .2s)!important}

/* 牌义收进“查看牌义” */
@media(min-width:561px){.tarot-spread:has(.tarot-card-result:only-child){grid-template-columns:minmax(120px,150px)}}
.tarot-reading>summary{cursor:pointer;list-style:none;font-size:11px;letter-spacing:1px;color:var(--muted);text-align:center;padding:2px 0}
.tarot-reading>summary::-webkit-details-marker{display:none}
.tarot-reading>summary:after{content:' ▾';opacity:.6}
.tarot-reading[open]>summary:after{content:' ▴'}
.tarot-reading>summary:hover{color:var(--dream-a)}

/* 可转动的星盘 */
.natal-wheel-box{display:grid;justify-items:center;gap:6px;min-width:0}
.wheel-info{margin:0;min-height:1.5em;font-size:11px;letter-spacing:1px;text-align:center;color:var(--muted)}
.natal-wheel{cursor:grab;user-select:none;-webkit-user-select:none}
.natal-wheel.is-dragging{cursor:grabbing}
.wheel-planet-hit{fill:transparent;cursor:pointer}
.wheel-planet-dot,.wheel-planet-label,.wheel-aspect{transition:opacity .3s,stroke-width .3s,filter .3s}
.natal-wheel.has-focus .wheel-planet-dot:not(.is-lit),.natal-wheel.has-focus .wheel-planet-label:not(.is-lit){opacity:.28}
.natal-wheel.has-focus .wheel-aspect:not(.is-lit){opacity:.1}
.wheel-aspect.is-lit{opacity:1;stroke-width:1.8}
.wheel-planet-dot.is-lit,.wheel-planet-label.is-lit{filter:drop-shadow(0 0 4px #fff) drop-shadow(0 0 8px var(--dream-c))}

@keyframes picked-pulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.25)}}
@keyframes card-flare{0%{box-shadow:0 0 0 0 rgba(255,230,180,0)}30%{box-shadow:0 0 90px 20px rgba(255,230,180,.85)}100%{box-shadow:0 0 50px -8px rgba(255,214,150,.6)}}
@keyframes arrive-pulse{0%{transform:scale(1.15);filter:blur(4px)}100%{transform:none;filter:none}}
@keyframes needle-seek{from{transform:rotate(-40deg)}to{transform:rotate(220deg)}}
@keyframes needle-settle{to{transform:rotate(180deg)}}
@media(max-width:560px){.ritual-clock{bottom:calc(env(safe-area-inset-bottom,0px) + 120px)}.ritual-caption{letter-spacing:3px}}
@media(prefers-reduced-motion:reduce){.ritual,.ritual *{transition:none!important;animation:none!important}}

/* ---------- 牌桌：当前的牌阵或命盘固定在上方正中，对话在下方滚动 ---------- */
.altar{--altar-h:clamp(200px,31vh,330px);transition:height .45s var(--dream-ease);position:relative;flex:0 0 auto;height:var(--altar-h);display:flex;align-items:center;justify-content:center;padding:4px 32px 12px;overflow:hidden;z-index:1;background:radial-gradient(ellipse 55% 75% at 50% 52%,color-mix(in srgb,var(--dream-a) 13%,transparent),transparent 72%)}
.altar:after{content:'';position:absolute;left:8%;right:8%;bottom:0;height:1px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--dream-a) 55%,transparent),color-mix(in srgb,var(--dream-c) 45%,transparent),transparent)}
body.has-altar .chat-heading{display:none}
body.has-altar .chat-view{padding-top:22px}
body.has-altar .content-scroll{-webkit-mask:linear-gradient(transparent,#000 22px);mask:linear-gradient(transparent,#000 22px)}
@media(max-height:760px) and (min-width:769px){.altar{--altar-h:clamp(180px,28vh,250px)}}
.altar-main{position:relative;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-width:0;max-width:100%}
.altar-question{margin:0;max-width:min(680px,80vw);font-family:var(--font-display);font-size:15px;letter-spacing:2px;color:var(--soft-text);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.altar-eyebrow{margin:0 0 8px;font-size:11px;letter-spacing:2px;color:var(--muted);text-align:center}
.altar-empty{position:relative;z-index:1;display:grid;justify-items:center;gap:6px;text-align:center}
.altar-empty .inline-actions{justify-content:center;margin-top:8px}
.altar-title{margin:0;font-family:var(--font-display);font-size:clamp(18px,2.4vw,26px);letter-spacing:5px;color:var(--text);text-shadow:0 0 24px color-mix(in srgb,var(--dream-a) 60%,transparent)}
.altar-hint{margin:0;font-size:12px;letter-spacing:1px;color:var(--muted)}

/* 塔罗：大牌阵 */
.altar-tarot{position:relative;width:100%;height:100%;display:flex;justify-content:center}
.altar-spread{display:flex;align-items:flex-start;justify-content:center;gap:clamp(14px,3vw,40px)}
.altar-card{margin:0;display:grid;justify-items:center;gap:8px;--card-w:min(calc((var(--altar-h) - 120px) * .62),25vw)}
.altar-card .tarot-face{width:var(--card-w);height:auto!important;aspect-ratio:.62;border-radius:calc(var(--card-w) * .08)}
.altar-card .tarot-face:after{width:62%;height:auto;aspect-ratio:1}
.altar-card .tarot-glyph svg{width:calc(var(--card-w) * .42);height:auto}
.altar-card .tarot-index{top:9%;font-size:calc(var(--card-w) * .07)}
.altar-card-name{display:grid;justify-items:center;gap:1px;text-align:center;line-height:1.4}
.altar-position{font-size:10px;letter-spacing:2px;color:var(--muted)}
.altar-card-name strong{font-family:var(--font-display);font-size:15px;letter-spacing:2px;color:color-mix(in srgb,#f3d79c 75%,var(--text))}
body:not(.theme-dark) .altar-card-name strong{color:var(--accent-strong)}
.altar-card-name small{font-size:11px;letter-spacing:1px;color:var(--soft-text)}
.altar.is-entering.is-revealed .altar-card{animation:altar-rise .9s var(--dream-ease) both;animation-delay:calc(var(--i) * .12s)}
.altar.is-entering:not(.is-revealed) .altar-card .tarot-face{animation:tarot-flip 1.3s var(--dream-ease) backwards;animation-delay:calc(var(--i) * .5s + .2s)}
.altar.is-entering:not(.is-revealed) .altar-card-name{animation:dream-fade 1s ease both;animation-delay:calc(var(--i) * .5s + 1.1s)}
.altar-question{animation:dream-fade 1s ease both}
/* 一叠等待洗牌的牌 */
.altar-deck{position:relative;width:max(36px,calc((var(--altar-h) - 150px) * .55));aspect-ratio:.62;margin-bottom:6px;animation:orb-float 6s ease-in-out infinite}
.altar-deck-card{position:absolute;inset:0;border-radius:8px;background:radial-gradient(circle at 50% 50%,rgba(255,214,150,.6) 0 2px,transparent 3px),radial-gradient(circle at 50% 50%,transparent 20%,rgba(240,204,140,.45) 21%,transparent 22.5%,transparent 33%,rgba(240,204,140,.3) 34%,transparent 35.5%),repeating-conic-gradient(from 0deg,rgba(240,204,140,.16) 0 4deg,transparent 4deg 15deg),linear-gradient(160deg,#2c1e60,#110e34);border:1px solid rgba(240,204,140,.6);box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.4),0 14px 30px -12px rgba(0,0,0,.8)}
.altar-deck-card:nth-child(1){transform:translate(-14px,6px) rotate(-8deg)}
.altar-deck-card:nth-child(2){transform:translate(-5px,3px) rotate(-3deg)}
.altar-deck-card:nth-child(3){transform:translate(4px,1px) rotate(2deg)}
.altar-deck-card:nth-child(4){box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.5),0 0 40px -4px color-mix(in srgb,var(--dream-c) 70%,transparent)}
/* 之前抽过的牌：缩小放在左侧，指向时放大 */
.altar-rail{position:absolute;left:0;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:10px;z-index:4}
.rail-item{position:relative;display:block;padding:6px;border-radius:10px;background:transparent;border:1px solid transparent;transition:background .25s,border-color .25s}
.rail-item:hover,.rail-item:focus-visible{background:var(--surface-glass);border-color:var(--line)}
.rail-mini{display:flex}
.rail-mini .tarot-face{width:24px;height:auto!important;aspect-ratio:.62;border-radius:4px;margin-left:-10px;transform:none!important;animation:none!important;box-shadow:0 3px 8px rgba(0,0,0,.5)}
.rail-mini .tarot-face:first-child{margin-left:0}
.rail-mini .tarot-face>*,.rail-mini .tarot-face:before,.rail-mini .tarot-face:after{display:none}
.rail-pop{position:absolute;left:calc(100% + 10px);top:50%;display:flex;flex-wrap:wrap;gap:12px;width:max-content;max-width:min(420px,60vw);padding:14px;border-radius:14px;background:color-mix(in srgb,var(--bg) 80%,transparent);border:1px solid var(--line);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 20px 50px -20px rgba(0,0,0,.7);opacity:0;visibility:hidden;transform:translateY(-50%) scale(.4);transform-origin:left center;transition:opacity .25s,transform .35s var(--dream-ease),visibility .35s;pointer-events:none}
.rail-item:hover .rail-pop,.rail-item:focus .rail-pop{opacity:1;visibility:visible;transform:translateY(-50%) scale(1)}
.rail-pop-card{display:grid;justify-items:center;gap:6px;font-size:11px;color:var(--soft-text)}
.rail-pop-card .tarot-face{width:92px;height:auto!important;aspect-ratio:.62;animation:none!important}
.rail-pop-card .tarot-glyph svg{width:40px;height:40px}
.rail-pop-card .tarot-face:after{width:58px;height:58px}
.rail-pop-question{flex-basis:100%;font-size:12px;color:var(--muted);letter-spacing:1px}

/* 占星：大星盘 */
.altar-chart{position:relative;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}
.altar-astrology .natal-overview{display:grid;grid-template-columns:auto minmax(150px,230px);gap:clamp(16px,3vw,40px);align-items:center}
.altar-astrology .natal-wheel{width:calc(var(--altar-h) - 70px);max-width:none;height:auto}
.altar-astrology .wheel-info{font-size:10px;min-height:0}
.altar-astrology .natal-core{gap:6px}
.altar-astrology .natal-core-item{padding:6px 12px}
.altar-astrology .natal-core-item strong{font-size:15px;margin:1px 0}
.altar-astrology .natal-core-item small{display:none}
.altar-astrology .altar-eyebrow{margin-bottom:2px}
.altar-astrology .natal-core-item{background:var(--surface-glass)!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.altar.is-entering .natal-wheel .wheel-ring,.altar.is-entering .natal-wheel .wheel-aspect{stroke-dasharray:1000;animation:wheel-draw 2.4s var(--dream-ease) both}
.altar.is-entering .natal-wheel .wheel-aspect{animation-delay:1.2s}
.altar.is-entering .natal-wheel .wheel-planet-dot,.altar.is-entering .natal-wheel .wheel-planet-label,.altar.is-entering .natal-wheel .wheel-sign{animation:dream-pop .8s var(--dream-ease) both;animation-delay:1s}
.altar.is-entering .natal-core-item{animation:message-in .9s var(--dream-ease) both}
.altar.is-entering .natal-core-item:nth-child(2){animation-delay:.25s}.altar.is-entering .natal-core-item:nth-child(3){animation-delay:.5s}
.altar-ghost-wheel{position:absolute;left:50%;top:50%;width:calc(var(--altar-h) - 50px);aspect-ratio:1;margin:calc((var(--altar-h) - 50px) / -2) 0 0 calc((var(--altar-h) - 50px) / -2);border-radius:50%;border:1px solid color-mix(in srgb,var(--dream-a) 35%,transparent);box-shadow:inset 0 0 0 calc(var(--altar-h) * .07) color-mix(in srgb,var(--dream-a) 6%,transparent),inset 0 0 0 calc(var(--altar-h) * .07 + 1px) color-mix(in srgb,var(--dream-a) 25%,transparent);opacity:.7;animation:dream-spin 140s linear infinite}
.altar-ghost-wheel span{position:absolute;left:50%;top:0;height:50%;transform-origin:50% 100%;transform:translateX(-50%) rotate(var(--a));padding-top:calc(var(--altar-h) * .012);font-size:calc(var(--altar-h) * .05);color:color-mix(in srgb,var(--dream-b) 70%,transparent);font-family:"Segoe UI Symbol","Apple Symbols","Noto Sans Symbols",sans-serif}

/* 八字：大四柱 */
.altar-bazi .bazi-chart{position:relative;display:grid;justify-items:center}
.altar-bazi .bazi-chart:after{left:50%;top:50%;right:auto;width:calc(var(--altar-h) * 1.15);height:calc(var(--altar-h) * 1.15);margin:calc(var(--altar-h) * -.575) 0 0 calc(var(--altar-h) * -.575);opacity:.45;z-index:-1}
.altar-bazi .bazi-pillars{grid-template-columns:repeat(4,minmax(64px,108px));gap:clamp(8px,1.6vw,18px);margin:0 0 12px}
.altar-bazi .bazi-pillar{padding:12px 8px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.altar-bazi .bazi-char{font-size:clamp(22px,4.4vh,40px)!important}
.altar-bazi .bazi-pillar{gap:1px}
.altar-bazi .bazi-summary{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 18px;font-size:12px;letter-spacing:1px;color:var(--soft-text)}
.altar.is-entering .bazi-pillar{animation:pillar-rise 1s var(--dream-ease) both;animation-delay:calc(var(--i) * .3s + .1s)}
.altar.is-entering .bazi-char{animation:ink-bloom 1.3s var(--dream-ease) both;animation-delay:calc(var(--i) * .3s + .35s)}
.altar.is-entering .bazi-char+.bazi-char{animation-delay:calc(var(--i) * .3s + .55s)}
.altar-ghost-pillars{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);opacity:.28;margin:0}
.altar-ghost-pillars .bazi-char{color:var(--muted)}

/* 对话里的精简牌名 */
.tarot-inline{display:grid;gap:6px;margin-top:10px}
.tarot-inline-item{border:1px solid var(--line);border-radius:10px;background:var(--surface-glass);padding:0 12px}
.tarot-inline-item>summary{display:flex;align-items:baseline;gap:10px;padding:9px 0;cursor:pointer;list-style:none}
.tarot-inline-item>summary::-webkit-details-marker{display:none}
.tarot-inline-item>summary:after{content:'牌义 ▾';margin-left:auto;font-size:11px;color:var(--muted)}
.tarot-inline-item[open]>summary:after{content:'收起 ▴'}
.tarot-inline-position{font-size:11px;color:var(--muted);letter-spacing:1px;min-width:2.5em}
.tarot-inline-item strong{font-family:var(--font-display);letter-spacing:1px}
.tarot-inline-orientation{font-size:12px;color:var(--dream-a)}
.tarot-inline-item p,.tarot-inline-theme{font-size:12px;line-height:1.8;color:var(--soft-text);margin:0 0 8px}
.tarot-inline-theme{display:block;color:var(--text)}

@keyframes altar-rise{from{opacity:0;transform:translateY(24px) scale(.94);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}

@media(max-width:768px){
  .altar{--altar-h:clamp(170px,27dvh,230px);padding:2px 12px 8px}
  body.is-typing .altar{height:48px}
  body.is-typing .altar>:not(.altar-strip){display:none}
  body.is-typing .altar .altar-strip{display:flex}
  .altar-question{font-size:13px;letter-spacing:1px;max-width:86vw}
  .altar-card-name strong{font-size:13px;letter-spacing:1px}
  .altar-card-name small,.altar-position{font-size:10px}
  .altar-card{--card-w:min(calc((var(--altar-h) - 110px) * .62),25vw)}
  .altar-rail{top:4px;transform:none;flex-direction:row;gap:4px}
  .rail-item{padding:4px}
  .rail-mini .tarot-face{width:16px;margin-left:-7px}
  .rail-pop{left:0;top:calc(100% + 6px);transform:scale(.4);transform-origin:top left;max-width:calc(100vw - 32px)}
  .rail-item:hover .rail-pop,.rail-item:focus .rail-pop{transform:scale(1)}
  .rail-pop-card .tarot-face{width:70px}
  .altar-astrology .natal-overview{grid-template-columns:auto minmax(0,1fr);gap:10px}
  .altar-astrology .natal-wheel{width:min(calc(var(--altar-h) - 70px),56vw)}
  .altar-astrology .natal-core{grid-template-columns:1fr;gap:5px}
  .altar-astrology .natal-core-item{padding:6px 8px}
  .altar-astrology .wheel-info{display:none}
  .altar-eyebrow{font-size:10px;letter-spacing:1px;margin-bottom:4px}
  .altar-bazi .bazi-pillar{padding:8px 4px}
  .altar-bazi .bazi-hidden,.altar-bazi .bazi-alt{font-size:9px}
  .altar-bazi .bazi-summary{font-size:11px;gap:2px 10px}
  .altar-title{letter-spacing:3px}
  .altar-ghost-pillars{opacity:.16}
}
@media(prefers-reduced-motion:reduce){
  .altar *,.altar{animation:none!important}
}

/* 牌桌收起：只留一行摘要 */
.altar.is-collapsed{height:52px;padding-top:0;padding-bottom:0}
.altar.is-collapsed>:not(.altar-strip):not(.altar-toggle){display:none}
.altar-strip{display:none;align-items:center;gap:12px;max-width:calc(100% - 80px);height:100%;padding:0 6px;background:none;border:0;color:var(--soft-text);font-size:13px;letter-spacing:1px;cursor:pointer}
.altar.is-collapsed .altar-strip{display:flex}
.altar-strip-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font-display)}
.altar-strip .rail-mini .tarot-face{width:18px;margin-left:-6px}
.altar-strip .rail-mini .tarot-face:first-child{margin-left:0}
.altar-toggle{position:absolute;right:18px;top:8px;z-index:6;padding:4px 10px;border-radius:999px;background:var(--surface-glass);border:1px solid var(--line);color:var(--muted);font-size:11px;letter-spacing:1px;backdrop-filter:blur(8px)}
.altar-toggle:hover{color:var(--text);border-color:color-mix(in srgb,var(--dream-a) 50%,transparent)}
.altar.is-collapsed .altar-toggle{top:50%;transform:translateY(-50%)}
@media(max-width:768px){.altar-toggle{right:10px;top:4px}body.is-typing .altar-toggle{display:none}}

/* 每段对话下方的复制按钮：悬停或聚焦时出现，触屏上常显 */
.messages{gap:34px}
.message.has-tools .message-body{position:relative}
.message.has-tools{position:relative}
.message-tools{position:absolute;top:calc(100% + 2px);left:43px;display:flex;gap:4px;opacity:0;transition:opacity .2s}
.message-user .message-tools{left:auto;right:0}
.message:hover .message-tools,.message:focus-within .message-tools,.message:last-child .message-tools{opacity:1}
@media(hover:none){.message-tools{opacity:.75}}
.copy-button{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:transparent;color:var(--muted)}
.copy-button:hover,.copy-button:focus-visible{background:var(--hover);color:var(--text)}
.copy-button .icon{width:15px;height:15px}
.copy-button.is-done{color:var(--dream-c)}
@media(max-width:768px){.message-tools{left:36px}}

/* 极少量的重点标注 */
.key-mark{color:inherit;font-weight:700;padding:0 .2em;border-radius:4px;background:linear-gradient(transparent 58%,color-mix(in srgb,var(--dream-c) 42%,transparent) 58%);box-decoration-break:clone;-webkit-box-decoration-break:clone}
body.theme-dark .key-mark{color:#ffe6ad;background:linear-gradient(transparent 62%,color-mix(in srgb,var(--dream-c) 32%,transparent) 62%)}
.message-tools .copy-button{opacity:1;margin:0}
.messages+.chat-actions{margin-top:40px}

/* 塔罗仪式 · 按住洗牌、牌环选牌 */
.ritual-probe{position:absolute;visibility:hidden;width:var(--cw);height:1px}
.ritual-tarot .ritual-table{--cw:clamp(52px,6.4vw,82px)}
.ritual-question{position:absolute;top:0;left:0;right:0;margin:0;text-align:center;font-family:var(--font-display);font-size:clamp(14px,1.8vw,18px);letter-spacing:3px;color:#d9ccf2;opacity:.9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 24px}
.ritual-deck{position:absolute;left:calc(50% - var(--cw) * .65);top:calc(50% - var(--cw) * 1.05);width:calc(var(--cw) * 1.3);height:calc(var(--cw) * 2.1);padding:0;border:0;background:none;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;--charge:0}
.ritual-deck.is-holding{cursor:grabbing}
.ritual-deck:focus-visible{outline:none}
.ritual-deck:focus-visible .ritual-deck-halo{box-shadow:0 0 0 2px rgba(255,214,150,.7)}
.ritual-deck-card{position:absolute;inset:0;border-radius:calc(var(--cw) * .1)}
.ritual-deck-card .ritual-card-back{border-radius:inherit}
.ritual-deck-halo{position:absolute;left:50%;top:50%;width:calc(var(--cw) * 3.6);aspect-ratio:1;border-radius:50%;transform:translate(-50%,-50%) scale(calc(.7 + var(--charge) * .5));background:conic-gradient(from -90deg,#ffe2a8 calc(var(--charge) * 360deg),rgba(255,255,255,.08) 0);-webkit-mask:radial-gradient(circle,transparent 63%,#000 64%,#000 66%,transparent 67%);mask:radial-gradient(circle,transparent 63%,#000 64%,#000 66%,transparent 67%);filter:drop-shadow(0 0 calc(var(--charge) * 14px) #ffd28a);pointer-events:none}
.ritual-deck:before{content:'';position:absolute;left:50%;top:50%;width:calc(var(--cw) * 4);aspect-ratio:1;border-radius:50%;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(255,214,150,calc(.08 + var(--charge) * .35)),transparent 65%);pointer-events:none}
.ritual-deck:not(.is-holding) .ritual-deck-halo{animation:halo-breathe 2.6s ease-in-out infinite}
.ritual-deck.is-burst{pointer-events:none;animation:deck-burst .7s ease-out forwards}
.ritual-slots{position:absolute;left:0;right:0;top:calc(1.6em + 14px);display:flex;justify-content:center;gap:clamp(10px,2vw,22px);transition:opacity .6s}
.ritual-slots.is-leaving{opacity:0}
.ritual-slots .ritual-slot{position:static;width:calc(var(--cw) * .85);height:calc(var(--cw) * .85 * 1.62);--cw:clamp(52px,6.4vw,82px);font-size:11px;animation:dream-fade .9s ease both}
.ritual-ring-wrap{position:absolute;left:0;right:0;top:calc(50% + var(--cw) * 1.1);bottom:0;perspective:1300px;perspective-origin:50% -20%;touch-action:pan-y;cursor:grab}
.ritual-ring{position:absolute;left:50%;top:0;width:0;height:0;transform-style:preserve-3d;outline:none}
.ritual-ring:focus-visible .ritual-ring-card.is-front .ritual-card-back{outline:2px solid #ffe2a8;outline-offset:3px}
.ritual-ring-card{position:absolute;left:calc(var(--cw) / -2);top:calc(var(--cw) * -.81);width:var(--cw);height:calc(var(--cw) * 1.62);padding:0;border:0;background:none;cursor:pointer;transform:rotateY(var(--a)) translateZ(var(--r));transition:transform 1.3s cubic-bezier(.2,.8,.2,1);transition-delay:calc(var(--i) * 18ms)}
.ritual-ring.is-forming .ritual-ring-card{transform:rotateY(calc(var(--a) - 120deg)) translateZ(0) scale(.15);transition:none}
.ritual-ring-card .ritual-card-back{border-radius:calc(var(--cw) * .09);transition:box-shadow .3s,transform .3s}
.ritual-ring-card.is-front .ritual-card-back{box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.6),0 0 22px rgba(255,214,150,.35)}
.ritual-ring-card:hover .ritual-card-back,.ritual-ring:focus-visible .ritual-ring-card.is-front .ritual-card-back{transform:translateY(-14px);box-shadow:inset 0 0 0 5px rgba(13,13,44,.9),inset 0 0 0 6px rgba(240,204,140,.7),0 0 36px 4px rgba(255,214,150,.55)}
.ritual-flyer{position:absolute;z-index:20;pointer-events:none}
.ritual-flyer .ritual-card-back,.ritual-flyer .ritual-card-front{border-radius:9%/5.5%}
.ritual-flyer.is-flipped .ritual-card-inner{transform:rotateY(180deg)}
.ritual-spark,.ritual-burst{position:absolute;z-index:19;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;pointer-events:none;box-shadow:0 0 0 2px rgba(255,226,168,.9),0 0 30px 10px rgba(255,214,150,.6);animation:spark-out .9s ease-out forwards}
.ritual-burst{animation:burst-out 1.3s ease-out forwards;background:radial-gradient(circle,#fff,rgba(255,220,160,.6) 40%,transparent 70%)}
.ritual-tarot .ritual-card-name{position:absolute;z-index:21;transform:translateX(-50%);margin:0}
@keyframes halo-breathe{0%,100%{opacity:.55}50%{opacity:1}}
@keyframes deck-burst{0%{filter:brightness(1)}30%{filter:brightness(2.4)}100%{filter:brightness(1);opacity:0}}
@keyframes spark-out{to{transform:scale(9);opacity:0}}
@keyframes burst-out{0%{transform:scale(1);opacity:1}100%{transform:scale(40);opacity:0}}
/* 全局的 button:active 位移会覆盖牌环里每张牌的 3D 变换，按下时牌会跳走、点击落空。 */
.ritual .ritual-ring-card:active:not(:disabled){transform:rotateY(var(--a)) translateZ(var(--r))}
.ritual-flyer .tarot-face:after{width:64%;height:auto;aspect-ratio:1}
.ritual-flyer .tarot-glyph svg{width:30px;height:30px}
.ritual-flyer .tarot-index{top:9%;font-size:6px}
.ritual-flyer .tarot-face:before{inset:5%}

/* 出生日期与时间：滚轮与输入合一的数字格 */
.wheel-field{gap:7px}
.wheel-label{font-size:12px;color:var(--soft-text)}
.wheel-summary{margin:0;font-size:14px;color:var(--text)}
.wheel-hint{margin:0 0 0 2px;font-size:12px;color:var(--muted);white-space:nowrap}
.spin-row{display:flex;align-items:center;gap:6px}
.spin{position:relative;flex:1;min-width:0;height:50px;display:flex;align-items:center;justify-content:center;gap:2px;border-radius:11px;border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 72%,transparent);overflow:hidden;cursor:ns-resize;touch-action:none;transition:border-color .2s,box-shadow .2s,background .2s;-webkit-user-select:none;user-select:none}
.spin:first-child{flex:1.35}
.spin:hover{border-color:color-mix(in srgb,var(--dream-a) 45%,transparent)}
.spin.is-focused{border-color:var(--dream-a);box-shadow:0 0 0 3px color-mix(in srgb,var(--dream-a) 22%,transparent);cursor:text}
.spin.is-dragging{cursor:grabbing;background:color-mix(in srgb,var(--dream-a) 10%,var(--surface))}
.spin-input{min-width:0;padding:0;border:0;background:none;outline:none;text-align:right;font:inherit;font-size:17px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text);cursor:inherit}
.spin-unit{font-size:12px;color:var(--muted)}
.spin-peek{position:absolute;left:0;right:0;height:13px;line-height:13px;text-align:center;font-size:10px;font-variant-numeric:tabular-nums;color:var(--muted);opacity:.55;cursor:pointer;transition:opacity .2s}
.spin-above{top:2px}.spin-below{bottom:2px}
.spin:hover .spin-peek,.spin.is-dragging .spin-peek{opacity:.9}
.spin.is-focused .spin-peek{opacity:.35}
.spin.roll-up .spin-input{animation:spin-from-above .22s cubic-bezier(.2,.8,.2,1)}
.spin.roll-down .spin-input{animation:spin-from-below .22s cubic-bezier(.2,.8,.2,1)}
.spin.is-disabled{opacity:.35;pointer-events:none}
.wheel-field.is-unknown .wheel-hint{color:var(--muted)}
@keyframes spin-from-above{from{transform:translateY(-55%);opacity:.2}to{transform:none;opacity:1}}
@keyframes spin-from-below{from{transform:translateY(55%);opacity:.2}to{transform:none;opacity:1}}
@media(max-width:768px){.spin-input{font-size:18px}.spin{height:52px}}
/* 数字格里的输入框不继承表单输入框的边框、底色与内边距 */
.birth-form .spin .spin-input{border:0!important;background:none!important;box-shadow:none!important;padding:0!important;min-height:0!important;height:1.4em;border-radius:0;font-size:17px;color:var(--text)!important}
@media(max-width:768px){.birth-form .spin .spin-input{font-size:18px}}
.birth-form .spin .spin-input:focus-visible{outline:none}

/* ================= 减法：更安静的外框 ================= */
/* 输入框只留一行：文字与发送按钮 */
.composer{display:flex;align-items:flex-end;gap:10px;padding:10px 10px 10px 18px!important;border-radius:18px}
.composer #message-input{flex:1;margin:6px 0!important;min-height:26px}
.composer-bottom{display:block;margin:0}
.footnote{margin-top:8px;font-size:10px;opacity:.75}
/* 侧栏：去掉副标题与装饰卡片后收紧节奏 */
.mode-nav-item{min-height:48px;padding-top:8px;padding-bottom:8px}
.mode-nav{gap:4px}
.history-item{padding:9px 12px}
.history-item>span{min-width:0}
.history-item{display:flex;align-items:center;gap:10px}
.history-item>.icon{width:15px;height:15px;color:var(--muted);flex-shrink:0}
.sidebar-footer{padding-left:0}
/* 对话：去掉来源标签后，气泡更干净 */
.message-assistant:not(:has(.natal-card,.tarot-spread,.birth-form)) .message-body{padding-top:14px}
.chat-actions{padding-left:43px}
.natal-card .natal-header{margin-bottom:4px}
/* 首页：去掉提示文字后的留白 */
.orbit-footer{margin-top:6px}

/* 八字空牌桌：四柱放在文字上方，不再与文字重叠 */
.altar-bazi{gap:10px}
.altar-ghost-pillars{position:static;transform:none;opacity:.55;margin:0;grid-template-columns:repeat(4,52px)!important;gap:8px!important}
.altar-ghost-pillars .bazi-pillar{padding:6px 4px!important}
.altar-ghost-pillars .bazi-char{font-size:18px!important}
.altar-ghost-pillars .bazi-label{font-size:9px}
@media(max-width:768px){.altar-ghost-pillars{display:none!important}}

/* ================= 白天：晨曦 ================= */
body:not(.theme-dark){--dream-a:#8a5cf6;--dream-b:#5b7cfa;--dream-c:#e46aa9;--bg:#f6f2fb;--text:#1f1933;--muted:#6e6589;--soft-text:#4a4165;--line:rgba(90,64,170,.14);--surface:rgba(255,255,255,.86);--surface-glass:rgba(255,255,255,.66);--hover:rgba(120,90,210,.08);--accent:color-mix(in srgb,var(--dream-a) 82%,#2a1a60);--accent-strong:color-mix(in srgb,var(--dream-a) 60%,#1d1240);--sidebar:rgba(255,255,255,.58)}
body:not(.theme-dark)[data-world="free"]{--dream-a:#7c6cf0;--dream-b:#4f8be8;--dream-c:#d26ab8}
body:not(.theme-dark)[data-world="astrology"]{--dream-a:#7b4df0;--dream-b:#4f6bed;--dream-c:#1ea2d0}
body:not(.theme-dark)[data-world="tarot"]{--dream-a:#1a9fb2;--dream-b:#6b5cf0;--dream-c:#cf9124}
body:not(.theme-dark)[data-world="bazi"]{--dream-a:#c98522;--dream-b:#dd5c3c;--dream-c:#2a9e78}
body:not(.theme-dark)[data-world="love"]{--dream-a:#de4f8e;--dream-b:#9b5de5;--dream-c:#ee8657}
body:not(.theme-dark){background:var(--bg)}
/* 玻璃面板：白而透，带一点主题色的影子 */
body:not(.theme-dark) .sidebar{border-right-color:rgba(90,64,170,.1);box-shadow:8px 0 40px -30px rgba(80,50,160,.35)}
body:not(.theme-dark) .new-chat{background:linear-gradient(135deg,rgba(255,255,255,.9),color-mix(in srgb,var(--dream-a) 10%,#fff))!important;border-color:color-mix(in srgb,var(--dream-a) 22%,transparent)!important;color:var(--accent-strong)!important;box-shadow:0 8px 24px -16px color-mix(in srgb,var(--dream-a) 60%,transparent)}
body:not(.theme-dark) .mode-nav-item:hover,body:not(.theme-dark) .mode-nav-item[aria-pressed="true"],body:not(.theme-dark) .mode-nav-item.is-active,body:not(.theme-dark) .history-item.is-active{background:rgba(255,255,255,.75);box-shadow:0 6px 18px -12px rgba(80,50,160,.35)}
body:not(.theme-dark) .message-assistant:not(:has(.natal-card,.tarot-spread,.birth-form)) .message-body{background:rgba(255,255,255,.82);border-color:rgba(90,64,170,.1);box-shadow:0 14px 34px -22px rgba(70,40,150,.4)}
body:not(.theme-dark) .message-user .message-body{background:linear-gradient(135deg,color-mix(in srgb,var(--dream-a) 16%,#fff),color-mix(in srgb,var(--dream-b) 12%,#fff))!important;border-color:color-mix(in srgb,var(--dream-a) 26%,transparent)!important;box-shadow:0 10px 26px -18px color-mix(in srgb,var(--dream-a) 70%,transparent)}
body:not(.theme-dark) .message-user .message-text{color:var(--text)}
body:not(.theme-dark) .composer{background:rgba(255,255,255,.8)!important;border-color:rgba(90,64,170,.14)!important;box-shadow:0 16px 40px -24px rgba(70,40,150,.45)!important}
body:not(.theme-dark) .has-cosmos .composer-area,body:not(.theme-dark).has-cosmos .composer-area{background:linear-gradient(0deg,color-mix(in srgb,var(--bg) 80%,transparent) 40%,transparent)}
/* 主要按钮：白天用深一点的渐变配白字 */
body:not(.theme-dark) .inline-button.primary{background:linear-gradient(120deg,var(--dream-a),var(--dream-b))!important;color:#fff!important;box-shadow:0 10px 24px -12px color-mix(in srgb,var(--dream-a) 80%,transparent)}
body:not(.theme-dark) .send-button:not(:disabled){background:linear-gradient(135deg,var(--dream-a),var(--dream-b))!important;color:#fff!important;animation:none}
body:not(.theme-dark) .send-button:disabled{background:rgba(90,64,170,.08)!important;color:rgba(90,64,170,.4)!important}
body:not(.theme-dark) .inline-button{background:rgba(255,255,255,.75)!important;border-color:rgba(90,64,170,.16)!important;color:var(--accent-strong)!important}
/* 牌桌：清晨的光 */
body:not(.theme-dark) .altar{background:radial-gradient(ellipse 55% 75% at 50% 55%,color-mix(in srgb,var(--dream-c) 14%,transparent),color-mix(in srgb,var(--dream-a) 8%,transparent) 45%,transparent 72%)}
body:not(.theme-dark) .altar-title{text-shadow:none;color:var(--text)}
body:not(.theme-dark) .altar-ghost-wheel{border-color:color-mix(in srgb,var(--dream-a) 30%,transparent);box-shadow:inset 0 0 0 calc(var(--altar-h) * .07) color-mix(in srgb,var(--dream-a) 5%,transparent),inset 0 0 0 calc(var(--altar-h) * .07 + 1px) color-mix(in srgb,var(--dream-a) 18%,transparent);opacity:.8}
body:not(.theme-dark) .altar-toggle{background:rgba(255,255,255,.75)}
body:not(.theme-dark) .altar-card .tarot-face{box-shadow:0 18px 36px -16px rgba(40,20,90,.55)}
/* 星盘：白天加深线条与文字 */
body:not(.theme-dark) .wheel-ring,body:not(.theme-dark) .wheel-divider{stroke:color-mix(in srgb,var(--dream-a) 50%,transparent)}
body:not(.theme-dark) .wheel-house{stroke:color-mix(in srgb,var(--dream-a) 30%,transparent)}
body:not(.theme-dark) .wheel-axis{stroke:var(--dream-a)}
body:not(.theme-dark) .wheel-sign{fill:var(--soft-text)}
body:not(.theme-dark) .wheel-house-number{fill:var(--muted)}
body:not(.theme-dark) .wheel-planet-dot{fill:var(--dream-a)}
body:not(.theme-dark) .wheel-planet-label{fill:var(--text)}
body:not(.theme-dark) .wheel-centre{fill:var(--dream-a)}
body:not(.theme-dark) .natal-wheel{filter:drop-shadow(0 6px 18px color-mix(in srgb,var(--dream-a) 25%,transparent))}
body:not(.theme-dark) .has-cosmos .natal-card,body:not(.theme-dark).has-cosmos .natal-card{background:linear-gradient(140deg,rgba(255,255,255,.9),color-mix(in srgb,var(--dream-a) 7%,#fff))!important;box-shadow:0 20px 44px -28px rgba(70,40,150,.45)!important;border-color:rgba(90,64,170,.12)!important}
body:not(.theme-dark) .natal-core-item,body:not(.theme-dark) .bazi-pillar{background:rgba(255,255,255,.8)!important;border-color:rgba(90,64,170,.12)!important;box-shadow:0 10px 24px -20px rgba(70,40,150,.5)}
body:not(.theme-dark) .bazi-pillar.is-day{border-color:color-mix(in srgb,var(--dream-a) 60%,transparent)!important;box-shadow:0 10px 30px -14px color-mix(in srgb,var(--dream-a) 70%,transparent)}
body:not(.theme-dark) .bazi-chart:after{opacity:.35}
/* 表单 */
body:not(.theme-dark) .birth-form{background:rgba(255,255,255,.82)!important;box-shadow:0 16px 40px -28px rgba(70,40,150,.45)}
body:not(.theme-dark) .birth-form input:not(.spin-input),body:not(.theme-dark) .birth-form select{background:rgba(255,255,255,.9)!important;border-color:rgba(90,64,170,.16)!important}
body:not(.theme-dark) .spin{background:rgba(255,255,255,.9);border-color:rgba(90,64,170,.16)}
body:not(.theme-dark) .tarot-inline-item{background:rgba(255,255,255,.75)}
body:not(.theme-dark) .tarot-inline-item strong{color:var(--text)}
/* 首页 */
body:not(.theme-dark) .orbit-intro h1{filter:none}
body:not(.theme-dark) .orbit-preview:before{background:radial-gradient(ellipse,rgba(255,255,255,.75) 30%,transparent 70%)}
body:not(.theme-dark) .key-mark{background:linear-gradient(transparent 60%,color-mix(in srgb,var(--dream-c) 30%,transparent) 60%)}

/* 星灵：助手头像拟人形象 */
.message-avatar.is-mascot{width:34px!important;height:34px!important;overflow:visible;background:radial-gradient(circle at 30% 14%,rgba(255,255,255,.8),transparent 30%),conic-gradient(from var(--orb-spin),var(--dream-a),var(--dream-b),var(--dream-c),var(--dream-a))!important;box-shadow:0 0 18px -2px var(--dream-a),inset 0 -5px 9px rgba(40,10,80,.28);animation:orb-spin 9s linear infinite,mascot-bob 3.6s ease-in-out infinite}
.mascot{display:block;width:100%;height:100%;overflow:visible}
.mascot *{transform-box:fill-box;transform-origin:center}
.mascot-eye ellipse{fill:#22123d}
.mascot-glint{fill:#fff}
.mascot-star{fill:#fff;filter:drop-shadow(0 0 2px var(--dream-c));animation:mascot-twinkle 2.6s ease-in-out infinite}
.mascot-eyes{animation:mascot-look 7s ease-in-out infinite}
.mascot-eye{animation:mascot-blink 4.8s infinite}
.message-assistant:has(~ .message-assistant) .is-mascot{animation:orb-spin 9s linear infinite}
.message.is-fresh .is-mascot{animation:orb-spin 9s linear infinite,mascot-hop .7s cubic-bezier(.3,1.6,.5,1) both,mascot-bob 3.6s ease-in-out .7s infinite}
.message-loading .is-mascot{animation:orb-spin 3s linear infinite,mascot-think 1.6s ease-in-out infinite!important}
.message-loading .mascot-eyes{animation:none;transform:translate(1px,-1.6px)}
.message-loading .mascot-star{animation:mascot-spin 1.4s linear infinite}
@keyframes mascot-bob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-3px) rotate(3deg)}}
@keyframes mascot-hop{0%{transform:translateY(8px) scale(.4)}60%{transform:translateY(-4px) scale(1.12,.92)}100%{transform:none}}
@keyframes mascot-think{0%,100%{transform:translateY(0) rotate(-7deg)}50%{transform:translateY(-2px) rotate(7deg)}}
@keyframes mascot-blink{0%,91%,97%,100%{transform:scaleY(1)}94%{transform:scaleY(.1)}}
@keyframes mascot-look{0%,30%,84%,100%{transform:translate(0,0)}38%,52%{transform:translate(-1.4px,.3px)}60%,76%{transform:translate(1.4px,-.4px)}}
@keyframes mascot-twinkle{0%,100%{transform:scale(.8) rotate(0);opacity:.75}50%{transform:scale(1.2) rotate(45deg);opacity:1}}
@keyframes mascot-spin{to{transform:rotate(360deg)}}
@keyframes mascot-hum{50%{transform:scale(.6,.8)}}
@media(prefers-reduced-motion:reduce){.is-mascot,.is-mascot *{animation:none!important;transition:none!important}}/* 账户入口：右上角（登录按钮 / 头像 + 下拉菜单） */
.account-menu{position:relative;display:flex;align-items:center;margin-left:4px}
.account-signin{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 15px 0 11px;border:1px solid var(--line);border-radius:999px;background:var(--surface-glass);backdrop-filter:blur(10px);color:var(--text);font-size:13px;font-weight:500;letter-spacing:.3px;cursor:pointer;transition:background .15s,border-color .15s}
.account-signin:hover{background:var(--hover);border-color:var(--accent)}
.account-signin:disabled{opacity:.6;cursor:progress}
.google-mark{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#fff}
.google-mark svg{width:14px;height:14px}
.account-trigger{display:grid;place-items:center;width:44px;height:44px;padding:0;background:transparent;border-radius:50%;cursor:pointer}
.account-trigger .account-avatar{transition:box-shadow .15s}
.account-trigger:hover .account-avatar,.account-trigger[aria-expanded="true"] .account-avatar{box-shadow:0 0 0 3px var(--hover),0 0 0 4px var(--accent)}
.account-avatar{display:grid;place-items:center;width:32px;height:32px;flex-shrink:0;overflow:hidden;border-radius:50%;background:var(--hover);border:1px solid var(--line);color:var(--text);font-size:13px;font-weight:600}
.account-avatar img{width:100%;height:100%;object-fit:cover}
.account-avatar-large{width:40px;height:40px;font-size:16px}
.account-panel{position:absolute;top:calc(100% + 6px);right:0;z-index:40;width:288px;max-width:calc(100vw - 24px);padding:8px;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:0 18px 60px rgba(30,18,48,.22);animation:account-pop .14s ease-out}
@keyframes account-pop{from{opacity:0;transform:translateY(-4px)}}
.account-who{display:flex;align-items:center;gap:12px;padding:10px 10px 12px}
.account-names{display:flex;flex-direction:column;min-width:0}
.account-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:14px;font-weight:600}
.account-email{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:12px}
.account-plan{display:flex;flex-direction:column;gap:2px;margin:0 2px 6px;padding:12px 12px 4px;border:1px solid var(--line);border-radius:12px;background:var(--surface-glass)}
.account-plan-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.account-plan-name{font-size:13px;font-weight:600;color:var(--text)}
.account-plan-usage{font-size:11.5px;color:var(--muted)}
.account-plan .billing-meter{margin:6px 0 4px}
.account-menu-item{display:flex;align-items:center;gap:10px;width:100%;min-height:42px;padding:0 10px;border-radius:9px;background:transparent;color:var(--soft-text);font-size:13px;text-align:left;cursor:pointer}
.account-menu-item:hover,.account-menu-item:focus-visible{background:var(--hover);color:var(--text)}
.account-menu-item .icon{width:16px;height:16px}
.account-plan-action{margin-top:4px;padding-left:2px;color:var(--accent);font-weight:500}
.account-plan-action:hover,.account-plan-action:focus-visible{padding-left:8px;color:var(--accent-strong)}
.account-note{margin:2px 10px 6px;color:var(--muted);font-size:11.5px;line-height:1.6}
.account-panel .account-note+.account-menu-item{border-top:1px solid var(--line);border-radius:0 0 9px 9px;margin-top:4px}
@media(max-width:768px){.account-signin{height:34px;padding:0 12px 0 9px}.account-panel{position:fixed;top:60px;right:12px}}
@media(max-width:360px){.account-signin>span:last-child{display:none}.account-signin{padding:0 7px}}
/* 历史对话：每行右侧有删除按钮（悬停或聚焦时出现，触屏常显） */
.history-row{position:relative;display:flex;align-items:center;margin:3px 0;border-radius:9px}
.history-row .history-item{flex:1;min-width:0;margin:0;padding-right:36px}
.history-delete{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:transparent;color:var(--muted);opacity:0;cursor:pointer;transition:opacity .15s}
.history-delete .icon{width:14px;height:14px}
.history-row:hover .history-delete,.history-delete:focus-visible{opacity:1}
.history-delete:hover{background:var(--hover);color:var(--error)}
@media(hover:none){.history-delete{opacity:.7}}
/* 订阅（Stripe） */
.billing-meter{display:block;height:4px;margin:8px 0 2px;border-radius:4px;background:var(--hover);overflow:hidden}
.billing-meter>span{display:block;height:100%;border-radius:inherit;background:var(--accent)}
.plans-dialog{max-width:760px}
.plans-dialog .dialog-header .icon-button{font-size:22px;line-height:1}
.plan-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:0 0 16px}
.plan-card{display:flex;flex-direction:column;gap:6px;padding:18px 16px 16px;border:1px solid var(--line);border-radius:16px;background:var(--surface-glass)}
.plan-card.is-featured{border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.plan-card.is-current{box-shadow:inset 0 0 0 1px var(--accent)}
.plan-name{margin:0;font-size:15px;font-weight:600;letter-spacing:.5px}
.plan-price{margin:0;font-size:26px;font-weight:600;color:var(--text)}
.plan-price span{font-size:12px;font-weight:400;color:var(--muted)}
.plan-features{flex:1;margin:4px 0 10px;padding-left:18px;font-size:12px;line-height:1.9;color:var(--soft-text)}
.plan-card .inline-button{width:100%}
.plan-card .inline-button:disabled{opacity:.7}
.plans-dialog>.inline-button{width:100%;margin-bottom:12px}
.plans-dialog .dialog-note{font-size:11px;line-height:1.8;color:var(--soft-text)}
@media(max-width:640px){.plan-grid{grid-template-columns:1fr}.plan-card{padding:14px}}
/* 付费墙引导：核心总结下方的“免费登录，看完整解读” */
.gate-cta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:12px}
.gate-cta .inline-actions{margin:0}
.gate-bonus{font-size:12px;color:var(--accent);letter-spacing:.2px}
.gate-bonus::before{content:"✦ ";opacity:.8}

/* 塔罗解读排版：金句大字 → 小标题短块 → 行动卡片 → 快捷回复；只看大字、小标题和粗体就能拿走主要信息 */
.rich-text.is-reading{max-width:34em}
.rich-text .reading-quote{margin:2px 0 18px;font-family:var(--font-display);font-size:21px;font-weight:600;line-height:1.55;letter-spacing:.5px;color:var(--text);white-space:normal}
.reading-block{margin:0 0 14px}
.reading-label{margin:0 0 3px;font-size:13px;font-weight:600;line-height:1.6;letter-spacing:2px;color:var(--accent-strong)}
.rich-text .reading-block p{margin:0;line-height:1.85}
.reading-key{font-weight:700;color:var(--text)}
body.theme-dark .reading-key{color:#ffe6ad}
.reading-action{padding:11px 14px 12px;border-radius:14px;border:1px solid color-mix(in srgb,var(--dream-c) 40%,transparent);background:color-mix(in srgb,var(--dream-c) 10%,transparent)}
.reading-action .reading-label{color:var(--dream-c)}
body:not(.theme-dark) .reading-action .reading-label{color:color-mix(in srgb,var(--dream-c) 62%,#2a1438)}
.rich-text.is-reading>.reading-block:last-child{margin-bottom:0}
.quick-replies{margin-top:12px}
.quick-replies .inline-button{border-radius:999px}
@media(max-width:768px){.rich-text.is-reading{font-size:15px}.rich-text .reading-quote{font-size:19px;margin-bottom:14px}}

/* 生日档案：表单上方的一键调用、姻缘的双方生日选择、档案管理对话框 */
.profile-pick{display:flex;flex-direction:column;gap:8px;margin:0 0 14px;padding:10px 12px;border:1px dashed color-mix(in srgb,var(--dream-a) 36%,transparent);border-radius:14px}
.profile-pick-label{font-size:12.5px;letter-spacing:1px;color:var(--muted)}
.profile-chips{display:flex;flex-wrap:wrap;gap:8px}
.profile-chips .inline-button{display:inline-flex;align-items:baseline;gap:6px;border-radius:999px}
.profile-chip-date{font-size:11.5px;opacity:.7}
.profile-pick .profile-manage-link{align-self:flex-start;padding:0!important;min-height:0;border:0!important;background:none!important;box-shadow:none!important;backdrop-filter:none;font-size:12.5px;color:var(--accent-strong)!important;text-decoration:underline;text-underline-offset:3px}
.love-births{margin:12px 0 0}
.love-births .inline-button.is-selected{border-color:color-mix(in srgb,var(--dream-c) 70%,transparent)!important;background:color-mix(in srgb,var(--dream-c) 16%,transparent)!important;box-shadow:0 0 18px -8px var(--dream-c)}
.love-births .inline-button.is-selected:before{content:"✓";font-size:11px}
.profile-save{margin-top:10px}
.profiles-dialog{width:min(520px,calc(100vw - 24px))}
.profile-intro{margin:6px 0 14px;font-size:13px;line-height:1.75;color:var(--muted)}
.profile-list{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.profile-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px}
.profile-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.profile-name{display:flex;align-items:center;gap:6px;font-size:14.5px}
.profile-badge{padding:0 7px;border-radius:999px;font-size:11px;font-weight:600;line-height:1.7;color:#140b2c;background:linear-gradient(120deg,var(--dream-a),var(--dream-c))}
.profile-detail{font-size:12.5px;color:var(--muted);overflow-wrap:anywhere}
.profile-tools{display:flex;gap:6px;flex-shrink:0}
.profile-tools .inline-button{padding:5px 10px;min-height:0;font-size:12.5px}
.profile-empty{margin:0;font-size:13px;color:var(--muted)}
.profile-allowance{align-self:center;font-size:12.5px;color:var(--muted)}
.profile-full{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:12px;font-size:12.5px;color:var(--muted)}
.profile-form .form-grid{margin-bottom:6px}
@media(max-width:480px){.profile-row{flex-direction:column;align-items:stretch}.profile-tools{justify-content:flex-end}}
.profiles-dialog .inline-button:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;animation:none}

/* 姻缘：场景入口、合盘表单、合盘结果卡、分享卡片 */
.love-scenes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}
.love-scene{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-height:78px;padding:12px 14px;text-align:left;font:inherit;color:var(--text);cursor:pointer;border:1px solid var(--line);border-radius:16px;background:var(--surface-glass);transition:border-color .25s,box-shadow .25s,transform .2s}
.love-scene:hover,.love-scene:focus-visible{border-color:color-mix(in srgb,var(--dream-a) 60%,transparent);box-shadow:0 0 22px -8px var(--dream-a);transform:translateY(-1px)}
.love-scene-title{font-size:14.5px;font-weight:600;line-height:1.5}
.love-scene-method{font-size:12px;letter-spacing:.5px;color:var(--muted)}
.love-scene.is-featured{border-color:color-mix(in srgb,var(--dream-c) 55%,transparent);background:color-mix(in srgb,var(--dream-c) 10%,var(--surface-glass))}
.love-scene.is-featured .love-scene-method{color:var(--dream-c)}
.love-scene.is-other{border-style:dashed}
@media(max-width:380px){.love-scenes{grid-template-columns:1fr}.love-scene{min-height:0}}
.synastry-person{margin:0 0 14px;padding:12px 14px 4px;border:1px solid var(--line);border-radius:16px;min-width:0}
.synastry-person legend{padding:0 6px;font-family:var(--font-display);font-size:15px;letter-spacing:2px;color:var(--accent-strong)}
.synastry-person [hidden]{display:none!important}
.synastry-pick{margin-bottom:10px}
.synastry-privacy a{margin-left:4px;color:var(--accent-strong)}
.synastry-card{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid color-mix(in srgb,var(--dream-c) 35%,transparent);border-radius:18px;background:color-mix(in srgb,var(--dream-c) 6%,transparent)}
.synastry-eyebrow{font-size:12px;letter-spacing:2px;color:var(--muted)}
.synastry-title{margin:0;font-family:var(--font-display);font-size:22px;letter-spacing:2px}
.synastry-people{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.synastry-col{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:12px;background:var(--surface-glass);font-size:12.5px;color:var(--soft-text);min-width:0}
.synastry-col strong{font-size:14px;color:var(--text);margin-bottom:2px}
.synastry-pillars{font-family:var(--font-display);letter-spacing:1px;color:var(--text)}
.synastry-list h4{margin:0 0 6px;font-size:13px;letter-spacing:1px}
.synastry-list.is-harmony h4{color:var(--dream-a)}
.synastry-list.is-tension h4{color:var(--dream-c)}
.synastry-list.is-neutral h4{color:var(--muted)}
.synastry-chips{display:flex;flex-wrap:wrap;gap:6px}
.synastry-chip{padding:3px 10px;border-radius:999px;border:1px solid var(--line);font-size:12.5px;line-height:1.7}
.synastry-basis summary{cursor:pointer;font-size:13px;color:var(--accent-strong)}
.synastry-basis p{margin:6px 0 0;font-size:12.5px;line-height:1.75}
.share-dialog{width:min(420px,calc(100vw - 24px))}
.share-preview{display:block;width:100%;max-height:62vh;object-fit:contain;border-radius:14px;margin:4px 0 12px}
.synastry-pillars{display:flex;flex-wrap:wrap;gap:0 8px}.synastry-pillars>span{white-space:nowrap}
/* Nyxlet 品牌：彩色 logo 图片，不加发光滤镜 */
.brand-symbol{width:46px;height:34px;filter:none;display:block}.brand-symbol img,.home-logo{display:block;width:100%;height:100%;object-fit:contain}
.home-logo{width:38px;height:28px;flex-shrink:0}
.brand-wordmark,.home-brand strong{letter-spacing:1.5px}
/* 助手头像：IP 小绿人。去掉原来的彩色圆球底；只有浮动、呼吸、眨眼、张望和小手摆动，表情永远冷漠，不笑 */
.message-avatar.is-mascot{background:none!important;box-shadow:none!important;border-radius:0!important;animation:mascot-bob 3.6s ease-in-out infinite}
.message-assistant:has(~ .message-assistant) .is-mascot{animation:none}
.message.is-fresh .is-mascot{animation:mascot-hop .7s cubic-bezier(.3,1.6,.5,1) both,mascot-bob 3.6s ease-in-out .7s infinite}
.message-loading .is-mascot{animation:mascot-think 1.6s ease-in-out infinite!important}
.mascot-skin{fill:#5cc84e;stroke:#141018;stroke-width:1.2;stroke-linejoin:round}
.mascot-arm{fill:none;stroke:#141018;stroke-width:1.2;stroke-linecap:round}
.mascot-foot,.mascot-eye ellipse{fill:#141018}
.mascot-line{fill:none;stroke:#141018;stroke-width:1.1;stroke-linecap:round}
.mascot-star{fill:#ffc93c;filter:none}
/* 深色背景上黑线会看不见：给整只小人加一圈极细的浅色描边光 */
.theme-dark .mascot{filter:drop-shadow(0 0 .5px rgba(255,255,255,.55))}
.mascot-body{transform-origin:50% 100%!important;animation:mascot-breathe 3.6s ease-in-out infinite}
.mascot-arm-l{transform-origin:100% 0!important;animation:mascot-arm-l 3.6s ease-in-out infinite}
.mascot-arm-r{transform-origin:0 0!important;animation:mascot-arm-r 3.6s ease-in-out infinite}
.message-assistant:has(~ .message-assistant) .mascot-body,.message-assistant:has(~ .message-assistant) .mascot-arm{animation:none}
/* 鼠标移上去：不笑，只是瞥你一眼 */
.message-assistant:hover .mascot-eye{animation:none;transform:none}
.message-assistant:hover .mascot-eyes{animation:none;transform:translate(1.2px,0)}
.message-loading .mascot-eyes{animation:none;transform:translate(0,-1.2px)}
.message-loading .mascot-arm-l,.message-loading .mascot-arm-r{animation-duration:1.2s}
.message-loading .mascot-body{animation:mascot-breathe 1.2s ease-in-out infinite}
@keyframes mascot-breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.04,.96)}}
@keyframes mascot-arm-l{0%,100%{transform:rotate(0)}50%{transform:rotate(12deg)}}
@keyframes mascot-arm-r{0%,100%{transform:rotate(0)}50%{transform:rotate(-12deg)}}
@media(prefers-reduced-motion:reduce){.is-mascot,.is-mascot *{animation:none!important;transition:none!important}}
/* 首次登录弹窗：称呼 + 精确到分钟的生日 */
.onboarding-dialog{width:min(520px,calc(100vw - 24px));max-height:calc(100dvh - 24px);overflow-y:auto}
.onboarding-dialog .inline-button:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;animation:none}
.onboarding-dialog::backdrop{background:rgba(6,4,14,.72);backdrop-filter:blur(3px)}
/* 操作前的次数提示：抽牌、排盘、合盘按钮旁 */
.quota-note{margin:8px 0 0;font-size:12.5px;color:var(--muted,#9a93b5);line-height:1.6}
.quota-note.is-empty{color:var(--text);opacity:.9}
.altar-empty .quota-note{width:100%;text-align:center}
/* 塔罗分享卡片 */
.tarot-share-dialog{width:min(460px,calc(100vw - 24px));max-height:calc(100dvh - 24px);overflow-y:auto}
.tarot-share-dialog .share-preview{display:block;width:auto;max-width:100%;max-height:52dvh;margin:10px auto;border-radius:14px;box-shadow:0 12px 30px rgba(0,0,0,.35)}
.tarot-share-dialog .share-preview.is-square{max-height:none;width:100%}
.share-sizes{display:flex;gap:8px;justify-content:center;margin-top:4px}
.share-toggle{margin:6px 0 2px}
.share-privacy{opacity:.75}
.tarot-share-dialog .inline-button:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;animation:none}
.tarot-share-dialog .dialog-note:empty{display:none}
/* ===== 新版塔罗牌（素材：卡面框 + 78 张角色插画 + 卡背；scripts/optimize_cards.py 生成 WebP） ===== */
/* 牌面：奶油色底 → 插画 → 透明正面框 → 代码写的编号与牌名。比例 2:3（设计稿 1024×1536）。 */
.tarot-face.has-art{aspect-ratio:2/3!important;height:auto!important;background:none!important;border:0!important;container-type:inline-size;border-radius:6.5%/4.3%!important;box-shadow:0 14px 30px -14px rgba(0,0,0,.55)}
.tarot-face.has-art::before,.tarot-face.has-art::after,.tarot-face.has-art .tarot-glyph,.tarot-face.has-art .tarot-index{display:none!important}
.card-body{position:absolute;inset:0;border-radius:inherit;transition:transform .5s var(--dream-ease,ease)}
/* 牌面始终正向展示，包含旧记录中的逆位牌与无插画时的备用图案。 */
.tarot-face.is-reversed .card-body,.tarot-face.is-reversed .tarot-glyph{transform:none}
.card-base{position:absolute;inset:1.6% 2.3%;border-radius:6%/4%;background:#fff6e6}
.card-illus{position:absolute;left:12.4%;top:10.35%;width:75.1%;height:75.39%;object-fit:contain;user-select:none;pointer-events:none}
.card-frame{position:absolute;inset:0;width:100%;height:100%;user-select:none;pointer-events:none}
.card-number,.card-name{position:absolute;display:grid;place-items:center;color:#2a2132;font-family:var(--font-display,Georgia),"Songti SC",serif;font-weight:600;line-height:1;white-space:nowrap;overflow:hidden;pointer-events:none}
.card-number{left:35.06%;width:29.88%;top:3.39%;height:4.82%;font-size:6.6cqw;letter-spacing:.06em}
.card-name{left:14.16%;width:71.5%;top:89%;height:5.21%;font-size:6.6cqw;letter-spacing:.08em}
.card-name.is-long{font-size:5.2cqw;letter-spacing:.02em}
.tarot-face.has-art .tarot-foil{opacity:.35;mix-blend-mode:soft-light}
/* 极小的缩略图只显示奶油色牌面，不加载插画 */
.rail-mini .tarot-face.has-art .card-body{display:none}
.rail-mini .tarot-face.has-art{background:#fff6e6!important;border-radius:3px!important}
/* 卡背：所有背面（牌堆、牌环、飞行中的牌、对话里翻牌前）统一用新卡背；按屏幕清晰度选尺寸 */
.tarot-back,.ritual-card-back,.altar-deck-card{background:#2f2540 image-set(url("cards/back-200.webp") 1x,url("cards/back-400.webp") 2x,url("cards/back-640.webp") 3x) center/cover no-repeat!important;box-shadow:0 10px 24px -12px rgba(0,0,0,.6)!important}
.ritual-card-back,.altar-deck-card,.ritual-card-front{border-radius:6.5%/4.3%!important}
.altar-deck-card{aspect-ratio:2/3}
/* 抽牌仪式里的牌改成 2:3 */
/* 飞行中的牌由脚本按 2:3 设置位置和尺寸（不能用 !important 覆盖），这里只改未定位时的默认值 */
.ritual-card{top:calc(50% - var(--cw) * .75);height:calc(var(--cw) * 1.5)}
.ritual-ring-card{top:calc(var(--cw) * -.75)!important;height:calc(var(--cw) * 1.5)!important}
.ritual-card-front{background:none;box-shadow:0 0 60px -6px rgba(255,214,150,.65)}
/* 翻开后：轻微浮动 + 柔和发光 */
.tarot-card-result,.altar-card{animation:card-float 6s ease-in-out infinite;animation-delay:calc(var(--i,0) * .7s + 1.8s)}
@keyframes card-float{0%,100%{translate:0 0;filter:drop-shadow(0 0 8px rgba(255,214,150,.18))}50%{translate:0 -6px;filter:drop-shadow(0 0 20px rgba(255,214,150,.45))}}
.ritual-card.is-flipped .ritual-card-front{animation:card-flare 1.4s ease-out .5s both,card-glow 3.2s ease-in-out 1.9s infinite}
@keyframes card-glow{0%,100%{box-shadow:0 0 40px -10px rgba(255,214,150,.45)}50%{box-shadow:0 0 70px -4px rgba(255,214,150,.75)}}
/* 系统开启“减少动态效果”：不翻牌、不浮动、不发光，直接显示结果 */
@media (prefers-reduced-motion: reduce){
  .tarot-card-result,.altar-card,.ritual-card-front,.ritual-card.is-flipped .ritual-card-front,.tarot-face.has-art,.tarot-face.has-art .tarot-foil{animation:none!important}
  .ritual-card-inner,.card-body{transition:none!important}
}
/* 牌阵翻开后：先升起，再轻微浮动并发光（与原有的入场动画合并） */
.altar .altar-card{animation:card-float 6s ease-in-out infinite;animation-delay:calc(var(--i,0) * .7s + 1.8s)}
.altar.is-entering.is-revealed .altar-card{animation:altar-rise .9s var(--dream-ease) both,card-float 6s ease-in-out infinite;animation-delay:calc(var(--i) * .12s),calc(var(--i,0) * .7s + 1.8s)}
@media (prefers-reduced-motion: reduce){.altar .altar-card,.altar.is-entering.is-revealed .altar-card{animation:none!important}}
