/* Fourth pass: cinematic entrance, candlelight, and worlds with something to do. */
.opening-veil{position:fixed;inset:0;z-index:210;background:var(--paper);display:grid;place-items:center;pointer-events:none;animation:open-veil 1.65s cubic-bezier(.7,0,.2,1) both}.opening-veil span{font:italic 26px Georgia,serif;color:var(--rose);letter-spacing:.3em;animation:open-date 1.2s ease both}.invitation-content{animation:invite-arrive 1.8s .4s cubic-bezier(.16,1,.3,1) both}.aurora{position:absolute;width:80vw;height:55vh;filter:blur(75px);opacity:.42;mix-blend-mode:multiply;will-change:transform;animation:aurora-drift 20s ease-in-out infinite alternate}.aurora-one{left:-25%;top:-15%;background:radial-gradient(ellipse,#e6b2ce88,transparent 70%)}.aurora-two{right:-20%;bottom:-15%;background:radial-gradient(ellipse,#a7d1e470,transparent 70%);animation-delay:-9s}body[data-mode=night] .aurora{mix-blend-mode:screen;opacity:.2}.halo-a{animation:halo-drift 17s ease-in-out infinite alternate}.halo-b{animation:halo-drift 23s -10s ease-in-out infinite alternate}.orbit-a{animation:orbit-breathe 20s ease-in-out infinite alternate}.tiny-spark{animation:spark-float 6s ease-in-out infinite alternate}
@keyframes open-veil{0%,30%{opacity:1;clip-path:circle(150% at 50% 50%)}100%{opacity:0;clip-path:circle(0% at 50% 50%);visibility:hidden}}@keyframes open-date{0%{opacity:0;transform:translateY(9px)}35%,65%{opacity:1;transform:none}100%{opacity:0;transform:scale(1.06)}}@keyframes invite-arrive{from{opacity:0;transform:translateY(22px);filter:blur(8px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes aurora-drift{to{transform:translate(22vw,15vh) rotate(30deg) scale(1.2)}}@keyframes halo-drift{to{transform:translate(7vw,5vh) scale(1.2)}}@keyframes orbit-breathe{to{transform:translate(-50%,-50%) rotate(-13deg) scale(1.04)}}@keyframes spark-float{to{translate:0 -12px;rotate:20deg}}
.page-navigation{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:30px;padding:0 7px;background:var(--surface);backdrop-filter:blur(12px)}.page-arrow{font:27px/1 Georgia,serif;width:40px;height:40px;background:none;color:var(--rose)}.page-arrow:disabled{opacity:.23}.page-navigation #chapters{gap:1px}.page-navigation .chapter-dot{width:22px;height:24px}.page-navigation .chapter-dot:after{top:10px;left:9px;width:4px;height:4px}.asset-credit{font-size:12px;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.snowflake-secret:hover img,.snowflake-secret:focus-visible img,.snow-drag:hover img,.snow-drag:focus-visible img,.snow-drag.dragging img{animation:perpetual-snow 4s linear infinite;transition:none}.snowflake-secret:hover{filter:drop-shadow(0 0 12px #a8ced788)}@keyframes perpetual-snow{to{transform:rotate(360deg)}}
/* The wish scene has its own light: a candle in a dark room. */
body[data-scene=wish]{--ink:#f1e6d8;--muted:#afa39b;--rose:#d9ba91;--on-accent:#21180f;--surface:#171310dd;--line:#d8b78125;background:#030303;color:#f1e6d8}body[data-scene=wish] .ambient{background:#030303}body[data-scene=wish] .ambient>*{opacity:0}body[data-scene=wish] .wish-scene{inset:74px 3vw 76px}body[data-scene=wish] .cake-layout{width:100%;max-width:1280px;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(260px,1fr);gap:0;align-items:center}.cake-stage.is-3d{width:100%;height:min(70vh,650px);max-width:none;aspect-ratio:auto}.cake-view{inset:-10px -12px 15px;border-radius:0}.cake-controls{bottom:0;font-size:13px}.cake-copy{padding:10px 3vw;text-align:left}.cake-copy .section-title,.cake-copy .section-subtitle{text-align:left}.cake-copy .section-title{font-size:clamp(27px,3vw,42px);text-shadow:0 0 32px #f9d6a41a}.cake-copy .eyebrow{color:#d9ba91}.cake-copy .section-subtitle{margin:14px 0 22px}.cake-copy .mic-note{font-size:12px;margin:12px 0 4px}.cake-copy .wish-progress{font-size:14px}.cake-copy .sensitivity{display:flex;gap:8px;align-items:center;color:var(--muted);font-size:12px;margin:8px 0}.sensitivity select{background:#151310;border:1px solid #d8b78130;border-radius:8px;padding:6px;color:#d9c8b5;font-size:12px}.manual-blow{padding-left:0}.cake-copy .breath-meter{background:#ffedcc14}.cake-copy .breath-meter span{background:#eac799}.cake-copy .button{box-shadow:0 0 30px #eac79910}
.clap-side{position:relative}.my-side .clap-signature{left:50%;top:55%;width:64px;height:64px;z-index:0}.clap-zodiacs{position:absolute;left:50%;top:45%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:9px;opacity:0;color:#9ea9c8;pointer-events:none;font:24px Georgia,serif}.clap-zodiacs i{font-style:normal;color:#d5b680;font-size:12px}.constellations .clap-zodiacs{animation:constellation-reply .65s both}.highfive-pair.sending .hand-yours{animation:send-quick .42s ease-in both}.highfive-pair.returning .hand-yours{transform:translateX(48px) rotate(10deg);animation:none}.highfive-pair.returning .hand-mine{animation:return-quick .26s ease-out both}.highfive-pair.connected .hand-yours{animation:rebound-left .45s both}.highfive-pair.connected .hand-mine{animation:rebound-right .45s both}.highfive-pair.connected .clap-impact{animation:impact-quick .32s both}.highfive-button{touch-action:none;user-select:none;-webkit-user-select:none}.goodnight{margin:8px 0;font-size:14px}
@keyframes send-quick{to{transform:translateX(48px) rotate(10deg)}}@keyframes return-quick{from{opacity:.45;transform:scaleX(-1) rotate(-12deg)}to{opacity:1;transform:translateX(-48px) scaleX(-1) rotate(10deg)}}@keyframes rebound-left{from{transform:translateX(48px) rotate(10deg)}to{transform:rotate(-12deg)}}@keyframes rebound-right{from{opacity:1;transform:translateX(-48px) scaleX(-1) rotate(10deg)}to{opacity:.75;transform:scaleX(-1) rotate(-12deg)}}@keyframes impact-quick{0%{opacity:1;transform:translate(-50%,-50%) scale(.3)}50%{opacity:.8;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.4)}}@keyframes constellation-reply{0%{opacity:0;translate:0 6px}35%{opacity:.85;translate:0 0}100%{opacity:0;translate:0 -15px}}
/* One expanding lens carries the scene change, with a small breath before it. */
.bubble-transition{z-index:190}.bubble-performer{position:absolute;left:10%;bottom:12%;width:180px;height:200px;opacity:0;transform-origin:50% 85%}.bubble-transition .bubble-performer img{position:absolute;inset:0;width:100%;height:100%;opacity:1;animation:none;object-fit:contain}.playing .bubble-performer{animation:perform-breath 2.6s both}.bubble-wand{position:absolute;right:0;top:42%;width:29px;height:29px;border:3px solid #9ca0d8;border-radius:50%;transform:rotate(-18deg);box-shadow:inset 0 0 5px #fff9}.bubble-wand:after{content:'';position:absolute;width:3px;height:44px;background:#9ca0d8;left:11px;top:25px;border-radius:3px}.blowing-cheek{position:absolute;right:42px;top:42%;width:9px;height:12px;border-radius:50%;background:#f8e77a;opacity:0}.playing .blowing-cheek{animation:cheek-breath 2.6s both}.transition-bubbles i{left:calc(10% + 155px);top:calc(88% - 110px);backdrop-filter:none}.playing .transition-bubbles i{animation:small-bubble 1.35s var(--delay) cubic-bezier(.16,.5,.25,1) both}.bubble-lens{position:absolute;left:calc(10% + 170px);top:calc(88% - 110px);width:100px;height:100px;border:1px solid #d7e9f2aa;border-radius:50%;background:radial-gradient(circle at 25% 20%,#ffffffe0 0,transparent 14%,#e2f4edaa 65%,#eeddeeaa 93%);opacity:0;backdrop-filter:blur(12px)}.playing .bubble-lens{animation:lens-wipe 2.6s cubic-bezier(.4,0,.15,1) both}
@keyframes perform-breath{0%{opacity:0;transform:translateX(-40px) rotate(-8deg)}18%,27%{opacity:1;transform:none}38%{transform:scale(1.04,.96) rotate(-5deg)}48%{transform:scale(.96,1.035) rotate(5deg)}67%{opacity:1;transform:none}85%,100%{opacity:0;transform:translateY(18px)}}@keyframes cheek-breath{35%,45%{opacity:1;transform:scale(1.3)}55%,100%{opacity:0}}@keyframes small-bubble{0%{opacity:0;transform:translate(0,0) scale(.1)}18%{opacity:.85}75%{opacity:.8;transform:translate(var(--tx),var(--ty)) scale(1.25)}100%{opacity:0;transform:translate(var(--tx),calc(var(--ty) - 35px)) scale(1.4)}}@keyframes lens-wipe{0%,29%{opacity:0;transform:scale(.03)}40%{opacity:.9;transform:scale(.4)}72%{opacity:1;transform:scale(26)}100%{opacity:0;transform:scale(30)}}
/* Games share roomy surfaces and short controls. */
.eggs-dialog[data-game]{width:min(1040px,94vw);max-height:93dvh;padding:22px 28px}.eggs-dialog[data-game] .dialog-top{margin-bottom:8px}.eggs-dialog[data-game] .egg-hint{margin:6px 0 13px;font-size:14px;line-height:1.65;min-height:24px}.egg-detail{padding:0}.snow-world,.bubble-game,.dance-stage,.spell-board{position:relative;overflow:hidden;height:clamp(240px,48vh,460px);border-radius:21px;border:1px solid var(--line);isolation:isolate}.snow-world{background:#c2d5e2}.snow-viewport{position:absolute;inset:0;touch-action:none}.snow-viewport canvas{width:100%;height:100%;display:block;touch-action:none;cursor:grab!important}.snow-viewport[data-mode=write] canvas{cursor:crosshair!important}.snow-viewport[data-mode=build] canvas{cursor:grab!important}.snow-world .snow-drag{width:80px;height:80px}.snow-status{position:absolute;bottom:12px;left:12px;right:12px;text-align:center;font-size:13px;color:#466172;pointer-events:none;text-shadow:0 1px 8px #fff;background:#f5fcff99;border-radius:20px;margin:auto;max-width:490px;padding:7px 12px;backdrop-filter:blur(6px)}.snow-intro{display:flex;gap:14px;align-items:center;margin:0 0 10px;text-align:left}.snow-intro img{height:70px;width:125px;object-fit:cover;object-position:right;border-radius:12px}.snow-intro div{flex:1}.snow-intro small{font-size:10px;letter-spacing:.13em;color:var(--rose)}.snow-intro p{font-size:14px;line-height:1.6;color:var(--muted);margin:5px 0}.snow-modes,.spell-tabs{display:flex;align-items:center;justify-content:center;gap:7px;margin:0 0 10px}.snow-modes button,.spell-tabs button{font-size:14px;background:transparent;color:var(--muted);padding:9px 18px;border-radius:20px;border:1px solid var(--line);min-height:38px}.snow-modes [aria-pressed=true],.spell-tabs [aria-pressed=true]{background:var(--rose);color:var(--on-accent);border-color:var(--rose)}.snow-tools{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;margin-top:8px}.snow-tools .text-button{font-size:13px;min-height:38px;padding:8px 5px}.snow-tools .button{font-size:13px;min-height:38px;padding:8px 17px}.snow-tools button:disabled{opacity:.4}
.bubble-game{background:radial-gradient(ellipse at 10% 100%,#b5dddc,transparent 65%),linear-gradient(#d7e8f3,#edf6f7);touch-action:none}.bubble-game canvas,.spell-board canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}.sponge-actor{position:absolute;left:3%;bottom:9%;height:46%;width:21%;pointer-events:none;transform-origin:50% 90%}.sponge-actor img{width:100%;height:100%;object-fit:contain}.game-wand{position:absolute;right:-2%;top:23%;width:25px;height:25px;border:3px solid #af9ac9;border-radius:50%;transform:rotate(-20deg)}.game-wand:after{content:'';width:3px;height:35px;background:#af9ac9;position:absolute;top:21px;left:9px}.sponge-actor.inhaling{animation:inhale 1.2s ease-in-out infinite alternate}.sponge-actor.exhaling{animation:exhale .55s ease-out}.patrick-actor{position:absolute;right:5%;width:18%;height:46%;transform:translateY(-25%);pointer-events:none}.patrick-actor img{height:100%;width:100%;object-fit:contain}.catch-ring{position:absolute;left:-13%;top:3%;width:50%;aspect-ratio:1;border:2px dashed #e4c775;border-radius:50%;background:#fff7ca44}.patrick-actor.caught img{animation:patrick-catch .6s cubic-bezier(.2,.8,.2,1)}.game-score{position:absolute;right:20px;top:16px;color:#598092;font-size:15px;background:#fff9;padding:8px 13px;border-radius:20px}.bubble-game+.play-tools{gap:14px}.childhood-friends img:last-child{height:90px;width:70px}.childhood-friends{gap:17px}.childhood-friends span{max-width:230px;text-align:center;font-size:15px}
@keyframes inhale{to{transform:scale(1.08,.95) rotate(-4deg)}}@keyframes exhale{0%{transform:scale(1.08,.95) rotate(-4deg)}40%{transform:scale(.94,1.04) rotate(7deg)}100%{transform:none}}@keyframes patrick-catch{40%{transform:translateY(-18px) rotate(12deg) scale(1.05)}75%{transform:rotate(-6deg)}100%{transform:none}}
.dance-stage{display:grid;place-items:center;background:radial-gradient(ellipse at 50% 85%,#f2d7a455,transparent 60%),var(--paper)}.dance-spotlight{position:absolute;left:30%;right:30%;height:32px;bottom:11%;border-radius:50%;background:#ceae7c19;filter:blur(5px)}.dance-actor{position:relative;height:74%;width:38%;transform-origin:50% 92%;display:flex;align-items:center;justify-content:center}.dance-actor img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 10px 7px #5f3e6517)}.dance-note{position:absolute;top:2%;left:80%;white-space:nowrap;font-size:15px;color:var(--rose);padding:9px 13px;background:var(--surface);border-radius:14px}.dance-progress{position:absolute;left:20px;top:16px;font-size:14px;color:var(--muted)}.dance-controls{display:flex;justify-content:center;gap:10px;margin:13px 0}.dance-controls button{padding:12px 22px;min-height:44px;background:var(--surface);border:1px solid var(--line);border-radius:25px;font-size:14px}.dance-controls button:disabled{opacity:.4}.dance-controls button:active{transform:scale(.94)}.move-left{animation:dance-left .75s both}.move-right{animation:dance-right .75s both}.move-jump{animation:dance-jump .75s both}.move-spin{animation:dance-spin .75s both}@keyframes dance-left{25%,65%{transform:translateX(-45px) rotate(-15deg)}100%{transform:none}}@keyframes dance-right{25%,65%{transform:translateX(45px) rotate(15deg)}100%{transform:none}}@keyframes dance-jump{20%{transform:scale(1.08,.88)}50%{transform:translateY(-38px) scale(.94,1.08)}80%{transform:scale(1.08,.9)}100%{transform:none}}@keyframes dance-spin{to{transform:rotateY(360deg)}}
.spell-board{background:radial-gradient(ellipse at 50% 35%,#3b3054,#191b2e);height:clamp(240px,44vh,390px)}.spell-nodes{position:absolute;inset:0;pointer-events:none}.spell-node{position:absolute;width:36px;height:36px;transform:translate(-50%,-50%);border-radius:50%;background:transparent;border:0;color:#fff0;pointer-events:auto;font:12px Georgia,serif;padding:0}.spell-node:after{content:'';position:absolute;width:5px;height:5px;left:15px;top:15px;background:#d3c5df80;border-radius:50%;box-shadow:0 0 10px #d3c5df55}.spell-node.next{border:1px solid #e3c99566;color:#ead7ac;background:#b49ada19;box-shadow:0 0 20px #dac59d22;animation:node-pulse 1.8s infinite alternate}.spell-node.next:after{display:none}.spell-node.done:after{background:#f8dda3;box-shadow:0 0 14px #f8dda3}.spell-reward{position:absolute;left:8px;right:8px;bottom:3%;font:16px/1.6 var(--serif);text-align:center;color:#e6d7b7;pointer-events:none;margin:0}.spell-counter{font:13px Georgia,serif;color:var(--muted)}@keyframes node-pulse{to{box-shadow:0 0 25px #dec79b44;scale:1.08}}
@media(max-height:650px) and (orientation:landscape){.eggs-dialog[data-game]{padding:14px 22px}.snow-intro img{height:45px;width:90px}.snow-intro{gap:10px;margin-bottom:6px}.snow-intro p{font-size:13px;margin:0}.snow-intro small{display:none}.snow-world,.bubble-game,.dance-stage{height:45vh;min-height:180px}.spell-board{height:42vh;min-height:170px}.snow-modes,.spell-tabs{margin-bottom:6px}.snow-modes button,.spell-tabs button{padding:7px 14px;min-height:33px;font-size:13px}.snow-tools{gap:12px;margin-top:4px}.snow-world .snow-drag{width:65px;height:65px;margin:-32px}.snow-status{font-size:11px;padding:4px 9px;bottom:7px}.dance-controls{margin:7px 0}.dance-controls button{padding:9px 20px;min-height:38px;font-size:13px}.eggs-dialog[data-game] .egg-hint{font-size:13px;margin-bottom:8px}.childhood-friends img:last-child{height:58px;width:45px}.childhood-friends span{font-size:13px;max-width:200px}.cake-stage.is-3d{height:68vh;max-width:none}.cake-view{inset:-8px -15px 15px}.cake-copy{padding:4px 2vw}.cake-copy .section-title{font-size:28px}.cake-copy .section-subtitle{font-size:14px;margin:6px 0 13px}.cake-copy .eyebrow{margin-bottom:10px}.cake-copy .wish-progress{font-size:12px;margin:5px 0}.cake-copy .mic-note{font-size:11px;margin:7px 0}.cake-copy .sensitivity{font-size:11px;margin:3px 0}.cake-copy .manual-blow{font-size:12px;padding-block:7px}.page-arrow{height:34px;width:32px}.goodnight{font-size:12px}.bubble-performer{width:140px;height:155px}.transition-bubbles i,.bubble-lens{left:calc(10% + 125px);top:calc(88% - 85px)}}
@media(max-height:430px) and (orientation:landscape){.eggs-dialog[data-game]{max-height:96dvh;padding:10px 20px}.eggs-dialog[data-game] .dialog-top{margin-bottom:4px}.eggs-dialog[data-game] .dialog-top h2{font-size:19px}.eggs-dialog[data-game] .egg-hint{margin:2px 0 7px;font-size:12px}.snow-intro{display:none}.snow-world,.bubble-game,.dance-stage{height:44vh;min-height:155px}.spell-board{height:42vh;min-height:145px}.snow-tools .text-button,.snow-tools .button{min-height:32px;font-size:12px}.snow-modes button,.spell-tabs button{min-height:30px;padding:5px 14px}.play-tools{margin-top:4px;min-height:34px}.play-tools .button{min-height:35px;padding:7px 20px}.dance-controls button{min-height:32px;padding:5px 16px}.dance-note{font-size:12px}.cake-stage.is-3d{height:72vh}.cake-copy .section-title{font-size:23px;line-height:1.35}.cake-copy .section-subtitle{margin:4px 0 8px}.cake-copy .eyebrow{font-size:10px;margin-bottom:5px}.cake-copy .mic-note{display:none}.cake-copy .sensitivity{font-size:10px}.cake-copy .manual-blow{min-height:30px;font-size:11px;padding:5px 0}.cake-copy .primary{font-size:12px;min-height:36px}.cake-copy .breath-meter{margin-block:7px}.childhood-friends img:last-child{height:46px;width:37px}.childhood-friends span{font-size:12px}.page-navigation #chapters{display:none}.page-navigation{gap:15px}.page-arrow{height:30px}.bottom-bar{bottom:5px}.scene{bottom:46px}.goodnight{font-size:11px;line-height:1.4}.my-side .clap-signature{width:43px;height:43px}.clap-zodiacs{font-size:18px}}
@media(orientation:portrait) and (max-width:700px){.page-navigation #chapters{display:none}.bottom-bar .zodiac span{display:none}#footer-left{max-width:95px;font-size:9px}.page-navigation{gap:10px}.page-arrow{width:34px;height:34px}.childhood-friends{gap:6px}.childhood-friends img,.childhood-friends img:last-child{width:44px;height:69px}.childhood-friends span{max-width:125px;font-size:12px}.eggs-dialog[data-game]{padding:18px 14px;width:96vw;max-height:94dvh}.snow-intro img{width:85px;height:65px}.snow-intro small{display:none}.snow-intro p{font-size:12px}.snow-modes button,.spell-tabs button{font-size:12px;padding:8px 12px}.snow-world{height:44vh;min-height:260px}.snow-tools{gap:9px}.snow-status{font-size:11px;left:6px;right:6px;padding:6px}.bubble-game,.dance-stage{height:38vh;min-height:245px}.sponge-actor{width:28%}.patrick-actor{width:25%;right:3%}.game-score{font-size:12px;top:10px;right:10px}.dance-controls{gap:5px;flex-wrap:wrap}.dance-controls button{font-size:12px;padding:9px 13px}.dance-note{font-size:12px;left:75%}.spell-board{height:35vh;min-height:230px}.spell-reward{font-size:13px}.bubble-performer{width:125px;height:155px;left:6%}.transition-bubbles i,.bubble-lens{left:calc(6% + 110px);top:calc(88% - 80px)}body[data-scene=wish] .cake-layout{grid-template-columns:1fr;gap:0}body[data-scene=wish] .wish-scene{inset:75px 20px 66px;justify-content:flex-start}.cake-stage.is-3d{height:37vh;min-height:235px;width:100%;max-width:none}.cake-copy{text-align:center;padding:12px 0}.cake-copy .section-title,.cake-copy .section-subtitle{text-align:center}.cake-copy .section-title{font-size:25px}.cake-copy .eyebrow{display:none}.cake-copy .sensitivity{justify-content:center}.cake-copy .section-subtitle{font-size:14px;margin:6px 0 12px}.cake-copy .mic-note{font-size:11px}.cake-copy .wish-progress{font-size:12px}.cake-copy .manual-blow{font-size:12px}.cake-controls{font-size:11px}}
@media(prefers-reduced-motion:reduce){.opening-veil{display:none}.invitation-content{animation:none;opacity:1}.aurora,.halo,.orbit,.tiny-spark{animation:none}.snowflake-secret img,.snow-drag img{animation:none!important}.bubble-transition{display:none}.snow-world canvas{transition:none}.spell-node.next{animation:none}}
