@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,500;0,600;0,700;1,500;1,600&display=swap');

:root{font-family:'DM Sans',Arial,sans-serif;color:#442b3e;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}
html,body{margin:0;min-width:320px;width:100%;height:100%;overflow:hidden}
button{font:inherit;-webkit-tap-highlight-color:transparent}
button:focus-visible{outline:3px solid #7256bd;outline-offset:4px}
body{background:#170e2a;transition:background .8s ease}
body.theme-light{background:#fce8ef}
.app-shell{position:relative;isolation:isolate;width:100%;max-width:520px;height:100vh;height:100dvh;min-height:530px;margin:auto;overflow:hidden;background:#170e2a;box-shadow:0 0 80px rgba(20,8,30,.2);transition:background .75s ease}
.app-shell.theme-blush{background:#ffe8ee}.app-shell.theme-cream{background:#fff8ee}.app-shell.theme-lilac{background:#f0e9ff}.app-shell.theme-peach{background:#fff0e3}.app-shell.theme-letter{background:#fce9eb}.app-shell.theme-final{background:#ffedf3}
.ambient{position:absolute;border-radius:50%;pointer-events:none;filter:blur(8px);opacity:.55;transition:opacity .5s}
.ambient-one{width:300px;height:300px;left:-160px;bottom:4%;background:radial-gradient(circle,#583078,transparent 70%)}
.ambient-two{width:260px;height:260px;right:-140px;top:10%;background:radial-gradient(circle,#63316e,transparent 70%)}
.app-shell:not(:has(.scene-night.is-active)) .ambient{opacity:0}
.site-header,.story-footer{position:absolute;left:0;right:0;z-index:40;display:flex;align-items:center;justify-content:space-between}
.site-header{top:0;height:76px;padding:18px 25px 10px;color:#fff6f9}
.brand{font-size:12px;font-weight:700;letter-spacing:.06em;white-space:nowrap}.brand-heart{font-size:21px;vertical-align:-3px;margin-right:3px;color:#ffa3c5}
.page-count{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.12em;opacity:.76}.page-count-line{width:22px;height:1px;background:currentColor;opacity:.6}
.app-shell:not(:has(.scene-night.is-active)) .site-header{color:#7a4667}
.story{position:absolute;inset:0}
.scene{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;opacity:0;visibility:hidden;transform:translateY(20px) scale(.985);transition:opacity .55s ease,transform .55s ease,visibility .55s;scrollbar-width:none}
.scene::-webkit-scrollbar{display:none}
.scene.is-active{opacity:1;visibility:visible;transform:translateY(0) scale(1);z-index:2}
.scene-content{position:relative;z-index:3;min-height:100%;padding:96px 28px 132px;display:flex;flex-direction:column;align-items:center;text-align:center}
.eyebrow{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:8px 14px;border:1px solid rgba(141,83,112,.17);border-radius:50px;background:rgba(255,255,255,.48);color:#a45678;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.16em;white-space:nowrap}
h1,h2,p{margin:0}h1,h2{font-family:'Playfair Display',Georgia,serif;letter-spacing:-.055em;font-weight:600;line-height:1.07}h1 em,h2 em{font-weight:500;color:#e75590}
h2{font-size:clamp(42px,12.5vw,61px)}
.section-subtitle{font-size:13px;line-height:1.65;color:#9a6980;max-width:285px;margin-top:15px}
.story-footer{bottom:0;padding:18px 26px calc(21px + env(safe-area-inset-bottom));min-height:103px;gap:18px;pointer-events:none}
.story-footer::before{content:"";position:absolute;z-index:-1;inset:-15px 0 0;background:linear-gradient(transparent,rgba(23,14,42,.92) 35%,#170e2a 100%);transition:background .5s}
.app-shell:not(:has(.scene-night.is-active)) .story-footer::before{background:linear-gradient(transparent,rgba(255,240,245,.92) 38%,#ffedf3 100%)}
.progress-dots{display:flex;align-items:center;gap:6px;pointer-events:auto}.progress-dots span{width:5px;height:5px;border-radius:10px;background:rgba(255,255,255,.35);transition:all .35s}.progress-dots span.active{width:18px;background:#ffaac9}.app-shell:not(:has(.scene-night.is-active)) .progress-dots span{background:#e4b8c9}.app-shell:not(:has(.scene-night.is-active)) .progress-dots span.active{background:#e6558d}
.next-button{pointer-events:auto;min-width:149px;height:55px;border:0;border-radius:18px;background:#ff8eb8;color:#3c1b36;display:flex;align-items:center;justify-content:center;gap:22px;box-shadow:0 7px 0 #ca648c,0 14px 24px rgba(252,113,159,.25);font-size:14px;font-weight:700;letter-spacing:.03em;cursor:pointer;transition:transform .2s,box-shadow .2s,opacity .2s}
.next-button:not(:disabled):active{transform:translateY(5px);box-shadow:0 2px 0 #ca648c,0 7px 14px rgba(252,113,159,.2)}.next-button:disabled{cursor:not-allowed;opacity:.48;box-shadow:none}.next-arrow{font-size:21px;font-weight:400;line-height:1}

/* The launch */
.scene-night{color:#fff7f8;background:radial-gradient(circle at 50% 50%,#342044 0,#1d1430 54%,#120c26 100%)}
#fireworks{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none}
.firework-message{position:absolute;z-index:6;top:46%;left:0;right:0;height:190px;pointer-events:none;opacity:0;transform:translateY(-50%) scale(.76);transition:opacity .65s ease,transform .85s cubic-bezier(.2,.8,.2,1)}
.app-shell.show-firework-message .firework-message{opacity:1;transform:translateY(-50%) scale(1)}
#spark-words{display:block;width:100%;height:100%}
.spark-words-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.night-stars{position:absolute;inset:0;overflow:hidden}.night-stars i{position:absolute;width:3px;height:3px;border-radius:50%;background:#fff4d3;box-shadow:0 0 9px #fff;animation:twinkle 3s ease-in-out infinite}.night-stars i:nth-child(1){top:16%;left:11%}.night-stars i:nth-child(2){top:23%;left:80%;animation-delay:.8s}.night-stars i:nth-child(3){top:34%;left:19%;animation-delay:1.5s}.night-stars i:nth-child(4){top:38%;left:90%;animation-delay:.2s}.night-stars i:nth-child(5){top:57%;left:8%;animation-delay:1s}.night-stars i:nth-child(6){top:72%;left:82%;animation-delay:2s}.night-stars i:nth-child(7){top:13%;left:65%;animation-delay:1.4s}.night-stars i:nth-child(8){top:68%;left:35%;animation-delay:2.3s}.night-stars i:nth-child(9){top:85%;left:18%;animation-delay:.6s}.night-stars i:nth-child(10){top:49%;left:69%;animation-delay:1.8s}.night-stars i:nth-child(11){top:80%;left:94%;animation-delay:1.3s}.night-stars i:nth-child(12){top:30%;left:54%;animation-delay:2.4s}
.intro-content{padding-top:100px}.eyebrow-night{color:#ffd2e2;background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.2)}.tiny-star{font-size:12px;color:#ffe2a0}
.intro-content h1{margin-top:25px;font-size:clamp(39px,10.5vw,55px);max-width:430px}.intro-content h1 em{display:inline-block;color:#ff99c6}.intro-subtitle{margin-top:18px;font-size:13px;line-height:1.6;color:#d9bbd9;max-width:240px}
.launch-zone{position:relative;width:270px;height:290px;max-height:37vh;min-height:240px;margin:auto 0 12px;display:flex;align-items:center;justify-content:center;flex-direction:column}.launch-zone::after{content:"";position:absolute;bottom:44px;width:170px;height:22px;border-radius:50%;background:radial-gradient(ellipse,#bd6f9a99,transparent 65%);filter:blur(5px)}
.launch-halo{position:absolute;width:220px;height:220px;top:6px;border:1px solid rgba(255,211,233,.14);border-radius:50%;box-shadow:0 0 0 26px rgba(255,255,255,.025),0 0 0 54px rgba(255,255,255,.016)}
.rocket-button{position:absolute;z-index:5;top:20px;width:140px;height:190px;display:grid;place-items:center;padding:0;border:0;background:transparent;cursor:pointer;filter:drop-shadow(0 12px 20px rgba(255,120,176,.22));animation:rocketHover 2.6s ease-in-out infinite}.rocket-svg{width:96px;height:160px;overflow:visible}.rocket-flame{transform-origin:center 141px;animation:flameWiggle .28s ease-in-out infinite alternate}.rocket-button.launching{animation:rocketFly 1.45s cubic-bezier(.5,.02,.8,.32) forwards;pointer-events:none}.rocket-button.launching .rocket-flame{animation:flameWiggle .1s ease-in-out infinite alternate}
.launch-smoke{position:absolute;bottom:54px;display:flex;gap:5px;opacity:0}.launch-smoke span{width:25px;height:25px;border-radius:50%;background:#d6b7d2}.launch-zone.launched .launch-smoke{animation:smokeShow 1.25s ease-out forwards}.launch-zone.launched .launch-smoke span:nth-child(1){transform:translate(-18px,2px)}.launch-zone.launched .launch-smoke span:nth-child(3){transform:translate(18px,2px)}
.launch-prompt{position:absolute;bottom:0;color:#fbd6e8;font-size:11px;font-weight:600;letter-spacing:.02em;white-space:nowrap;animation:softPulse 2.4s ease-in-out infinite}.prompt-arrow{display:block;color:#ffadce;font-size:23px;line-height:1.1}.intro-whisper{font-family:Georgia,serif;font-style:italic;font-size:12px;color:#bd9dbd}
.launch-zone.launched .launch-prompt{opacity:0}.intro-whisper.celebrating{color:#ffe1a5;font-size:14px}

/* Greeting card */
.scene-blush{background:radial-gradient(circle at 50% 38%,#fff4f5,#ffe5ee 75%)}.greeting-content{justify-content:center}.decoration{position:absolute;color:#ffc3d7;pointer-events:none;animation:floaty 5s ease-in-out infinite}.deco-heart-a{font-size:54px;top:18%;left:-10px;transform:rotate(-22deg)}.deco-heart-b{font-size:83px;right:-15px;bottom:24%;animation-delay:1.4s}
.sticker-bow{position:relative;z-index:3;font-size:52px;line-height:1;margin:17px 0 -7px;color:#e75f91;text-shadow:0 4px 0 #ffcadd}
.greeting-card{position:relative;width:100%;max-width:360px;padding:43px 26px 33px;border:1px solid rgba(230,112,153,.19);border-radius:30px;background:#fffdfa;box-shadow:0 17px 0 rgba(237,144,171,.13),0 24px 45px rgba(171,90,129,.14);transform:rotate(-1deg)}.greeting-card::before{content:"";position:absolute;inset:8px;border:1px dashed #f5ceda;border-radius:23px;pointer-events:none}
.card-sparkle{position:absolute;font-size:30px;color:#f5ab73}.sparkle-left{top:42px;left:21px}.sparkle-right{right:21px;bottom:48px}.card-pretitle{font-family:Georgia,serif;font-style:italic;font-size:16px;color:#b16d87}.greeting-card h2{margin:13px 0 20px;font-size:clamp(51px,14vw,70px);color:#4b2e43}.greeting-card h2 em{color:#e6548b}.greeting-card>p:not(.card-pretitle):not(.card-signature){font-size:14px;line-height:1.7;color:#8b6678;max-width:255px;margin:auto}.card-divider{display:flex;align-items:center;gap:12px;justify-content:center;margin:26px 0 18px;color:#f185aa}.card-divider::before,.card-divider::after{content:"";width:47px;height:1px;background:#edc2d1}.card-signature{font-family:Georgia,serif;font-style:italic;font-size:15px;color:#a15477}.bottom-doodle{margin-top:37px;font-size:22px;color:#ee9ab5;letter-spacing:.1em}

/* Love notes */
.scene-cream{background:radial-gradient(circle at 40% 40%,#fffdf9,#fff4e9 80%)}.notes-content h2{margin-top:22px}.note-stack{width:100%;max-width:355px;display:flex;flex-direction:column;gap:13px;margin:30px 0 16px}.love-note{position:relative;width:100%;min-height:83px;padding:16px 18px 16px 72px;border:1px solid #f8cbd6;border-radius:18px;background:#fff;box-shadow:0 7px 0 #f8dee2,0 12px 22px rgba(158,86,107,.08);color:#593847;text-align:left;cursor:pointer;transition:min-height .35s,transform .25s,box-shadow .25s}.love-note:active{transform:translateY(3px);box-shadow:0 3px 0 #f8dee2}.note-two{transform:rotate(1.5deg)}.note-three{transform:rotate(-1deg)}.note-two:active,.note-three:active{transform:translateY(3px)}.note-number{position:absolute;top:14px;right:17px;font-size:10px;font-weight:700;letter-spacing:.15em;color:#d9a2ad}.note-heart{position:absolute;left:17px;top:15px;width:40px;height:40px;border-radius:13px;background:#ffe5ec;display:grid;place-items:center;color:#ec6b98;font-size:20px}.note-title{display:block;padding-top:6px;font-family:Georgia,serif;font-size:19px;font-weight:bold}.note-reveal{display:block;max-height:0;overflow:hidden;opacity:0;color:#947181;font-size:12px;line-height:1.5;transition:max-height .35s,opacity .35s,margin .35s}.love-note.open .note-reveal{max-height:80px;opacity:1;margin-top:9px}.notes-footer{font-family:Georgia,serif;font-style:italic;color:#b88292;font-size:12px;margin-top:12px}

/* Star wishes */
.scene-lilac{background:radial-gradient(circle at 50% 50%,#fdf3ff,#eee5ff 80%)}.wishes-content h2{margin-top:23px}.wish-sky{position:relative;width:min(82vw,340px);height:clamp(220px,33vh,300px);margin:12px auto 6px}.orbit{position:absolute;border:1px dashed #d9bce7;border-radius:50%;pointer-events:none}.orbit-one{width:220px;height:170px;top:30px;left:50%;transform:translateX(-50%) rotate(18deg)}.orbit-two{width:145px;height:145px;top:42px;left:50%;transform:translateX(-50%)}.wish-star{position:absolute;z-index:2;width:72px;height:72px;border:0;background:transparent;color:#f9bd52;text-shadow:0 3px 0 #f29c80,0 0 25px #ffdf9b;font-size:70px;line-height:1;cursor:pointer;animation:starBob 2.8s ease-in-out infinite;transition:transform .3s,color .3s}.wish-star:active{transform:scale(.78)}.wish-star.found{color:#ec7aa4;text-shadow:0 0 23px #f9b5d3}.wish-one{left:11%;top:24%}.wish-two{right:8%;top:9%;animation-delay:.8s}.wish-three{left:39%;bottom:4%;animation-delay:1.5s}.wish-mini-star{position:absolute;color:#b386d2;font-size:24px}.mini-a{left:5%;bottom:20%}.mini-b{right:12%;bottom:19%}.mini-c{left:47%;top:6%}.wish-message{min-height:75px;display:flex;align-items:center;justify-content:center;max-width:285px;padding:14px 19px;border:1px solid #e8cce8;border-radius:18px;background:rgba(255,255,255,.7);font-family:Georgia,serif;font-style:italic;font-size:15px;line-height:1.4;color:#8b608c;box-shadow:0 8px 18px rgba(117,73,145,.08)}

/* Cake */
.scene-peach{background:radial-gradient(circle at 50% 43%,#fff9ef,#ffecdf 82%)}.cake-content h2{margin-top:22px}.cake-wrap{position:relative;width:min(83vw,340px);height:clamp(245px,36vh,300px);margin:15px auto 3px}.cake-plate{position:absolute;bottom:26px;left:6%;width:88%;height:27px;border-radius:50%;background:#e5a8b5;box-shadow:0 9px 0 #cf8b9f}.cake-layer{position:absolute;left:15%;width:70%;border:3px solid #9c5b70}.cake-layer-lower{height:88px;bottom:45px;border-radius:13px 13px 28px 28px;background:repeating-linear-gradient(90deg,#ffb2c6 0 24px,#ffcad7 24px 45px);box-shadow:inset 0 -18px rgba(213,102,130,.1)}.cake-layer-upper{z-index:2;height:70px;bottom:113px;border-radius:15px 15px 7px 7px;background:#ffe0e1;box-shadow:inset 0 19px #fff8ed}.icing-drop{position:absolute;top:14px;width:24px;height:22px;border-radius:0 0 16px 16px;background:#fff8ed}.drop-a{left:24px}.drop-b{left:95px;height:29px}.drop-c{right:25px;height:25px}.cake-top{position:absolute;z-index:3;bottom:178px;left:15%;width:70%;height:17px;border-radius:50%;background:#fff9ee;border:2px solid #a76879}.cake-cherry{position:absolute;top:-6px;width:12px;height:12px;border-radius:50%;background:#eb6686}.cherry-one{left:20%}.cherry-two{left:48%}.cherry-three{right:19%}
.candle-button{position:absolute;z-index:5;bottom:184px;left:calc(50% - 17px);width:34px;height:91px;border:0;background:transparent;cursor:pointer;padding:0}.candle-stick{position:absolute;bottom:0;left:11px;width:13px;height:48px;border:2px solid #a95e79;border-radius:4px;background:repeating-linear-gradient(135deg,#fff6c9 0 9px,#f7abb9 9px 17px)}.flame{position:absolute;top:5px;left:4px;width:27px;height:38px;border-radius:65% 35% 65% 35%;transform:rotate(45deg);background:#ffac47;box-shadow:0 0 18px #ffc363,0 0 35px #ffd68d;animation:candleFlicker .55s infinite alternate}.flame-inner{position:absolute;width:12px;height:18px;left:8px;bottom:4px;border-radius:65% 35% 65% 35%;background:#ffeab0}.candle-button.blown .flame{animation:blowOut .5s ease-out forwards}.cake-spark{position:absolute;font-size:32px;color:#f3a878;animation:twinkle 2s ease-in-out infinite}.cake-spark-a{top:28px;left:12%}.cake-spark-b{top:65px;right:9%;animation-delay:.8s}.cake-wish{font-family:Georgia,serif;font-style:italic;font-size:14px;color:#a9697b;max-width:270px;min-height:40px;line-height:1.45}.confetti-area{position:absolute;inset:0;z-index:10;pointer-events:none;overflow:hidden}.confetti-piece{position:absolute;top:-20px;width:8px;height:14px;border-radius:2px;animation:confettiFall 2.7s linear forwards}

/* Letter */
.scene-letter{background:linear-gradient(160deg,#fff4f0,#fbe6ec 75%)}.letter-content{padding-top:95px}.letter-envelope{width:82px;height:55px;margin:22px auto -11px;position:relative;z-index:5;background:#e989ad;border-radius:5px;transform:rotate(-8deg);box-shadow:0 6px 10px rgba(137,73,93,.13)}.letter-envelope::before{content:"";position:absolute;inset:0;clip-path:polygon(0 0,50% 60%,100% 0);background:#ffd1e0}.envelope-heart{position:absolute;left:34px;top:14px;color:#b74978;font-size:18px}.letter-paper{position:relative;width:100%;max-width:360px;padding:39px 30px 37px;border-radius:4px;background:#fffefa;box-shadow:0 15px 0 rgba(202,137,153,.09),0 20px 35px rgba(116,70,88,.13);text-align:left;transform:rotate(1deg)}.letter-paper::before{content:"";position:absolute;inset:12px;border:1px solid #f3d6dc;pointer-events:none}.letter-paper h2{font-size:clamp(33px,9vw,43px);margin-bottom:21px;color:#684559}.letter-paper p{font-family:Georgia,serif;font-size:14px;line-height:1.72;color:#735364;margin-top:15px}.letter-paper .letter-ending{font-style:italic;color:#a45678;margin-top:23px}.letter-ending span{font-size:13px}.letter-corner{position:absolute;right:22px;top:22px;color:#eca1b7;font-size:23px}

/* Finale */
.scene-final{background:radial-gradient(circle at 50% 42%,#fffdfb 0,#ffe8f0 63%,#ffd4e4 100%)}.final-content{justify-content:center}.final-medallion{width:110px;height:110px;margin:25px auto 23px;border:2px solid #e9adc3;border-radius:50%;display:grid;place-items:center;background:#fff7f7;box-shadow:0 0 0 12px #fff2f7,0 0 0 14px #ecc5d5,0 12px 29px rgba(185,87,125,.16)}.final-medallion span{font-size:60px;color:#ee729f;text-shadow:0 5px #ffd1df;animation:heartBeat 2.3s infinite}.final-content h2{color:#5f3a55;font-size:clamp(44px,11.8vw,60px)}.final-content h2 em{color:#e65088}.final-content>p{margin-top:18px;max-width:300px;color:#956a80;font-size:14px;line-height:1.65}.final-love{margin-top:25px;font-family:Georgia,serif;font-size:27px;font-style:italic;color:#ba537f}.final-love span{color:#e96e9c}.final-date{font-size:11px;letter-spacing:.3em;color:#b88a9d;margin-top:20px}.final-hearts span{position:absolute;color:#ef9ebc;opacity:.55;animation:floaty 4s ease-in-out infinite}.final-hearts span:nth-child(1){top:15%;left:12%;font-size:23px}.final-hearts span:nth-child(2){top:22%;right:7%;font-size:40px;animation-delay:1s}.final-hearts span:nth-child(3){top:55%;left:4%;font-size:16px;animation-delay:.6s}.final-hearts span:nth-child(4){bottom:19%;right:11%;font-size:27px;animation-delay:1.8s}.final-hearts span:nth-child(5){bottom:28%;left:15%;font-size:18px;animation-delay:1.3s}.final-hearts span:nth-child(6){top:45%;right:4%;font-size:18px;animation-delay:2.3s}

@keyframes twinkle{0%,100%{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1.3)}}
@keyframes rocketHover{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-8px) rotate(2deg)}}
@keyframes flameWiggle{from{transform:scaleX(.85) scaleY(.9)}to{transform:scaleX(1.12) scaleY(1.12)}}
@keyframes rocketFly{0%{transform:translateY(0) scale(1)}15%{transform:translateY(15px) scale(1.04)}100%{transform:translateY(-140vh) scale(.3)}}
@keyframes smokeShow{0%{opacity:.9;transform:scale(.4)}100%{opacity:0;transform:scale(2.3)}}
@keyframes softPulse{0%,100%{opacity:.55}50%{opacity:1}}
@keyframes floaty{0%,100%{translate:0 0}50%{translate:0 -13px}}
@keyframes starBob{0%,100%{translate:0 0}50%{translate:0 -10px}}
@keyframes candleFlicker{from{transform:rotate(40deg) scale(.94)}to{transform:rotate(49deg) scale(1.09)}}
@keyframes blowOut{to{opacity:0;transform:rotate(75deg) scale(.2) translateY(-18px)}}
@keyframes confettiFall{0%{transform:translateY(-10px) rotate(0);opacity:1}100%{transform:translateY(110vh) rotate(700deg);opacity:0}}
@keyframes heartBeat{0%,100%{transform:scale(1)}15%{transform:scale(1.13)}28%{transform:scale(1)}40%{transform:scale(1.09)}52%{transform:scale(1)}}

@media(max-height:720px){.scene-content{padding-top:80px;padding-bottom:108px}.intro-content{padding-top:78px}.intro-content h1{margin-top:17px;font-size:39px}.intro-subtitle{margin-top:12px}.launch-zone{min-height:210px;height:230px;margin-top:6px}.rocket-button{top:4px}.launch-halo{top:0;width:200px;height:200px}.launch-prompt{bottom:-3px}.greeting-card{padding-top:31px;padding-bottom:24px}.sticker-bow{margin:8px 0 -8px}.note-stack{gap:10px;margin-top:19px}.love-note{min-height:72px;padding-top:11px;padding-bottom:11px}.wish-sky{height:210px}.cake-wrap{height:240px}.letter-paper{padding-top:29px;padding-bottom:28px}.letter-paper p{font-size:13px;line-height:1.6;margin-top:10px}.final-medallion{width:90px;height:90px;margin-top:14px;margin-bottom:19px}.final-medallion span{font-size:48px}}
@media(max-height:590px){.scene-content{padding-top:74px}.intro-content h1{font-size:34px}.intro-subtitle{font-size:12px}.launch-zone{min-height:170px;height:180px}.launch-halo{width:165px;height:165px}.rocket-button{top:0;scale:.8}.launch-prompt{bottom:-12px}.intro-whisper{display:none}.story-footer{min-height:80px;padding-bottom:15px}.next-button{height:47px}.greeting-card h2{font-size:48px}.greeting-card{padding:26px 20px 18px}.bottom-doodle{margin-top:17px}.notes-content h2,.wishes-content h2,.cake-content h2{font-size:37px;margin-top:12px}.section-subtitle{margin-top:8px}.wish-sky{height:180px}.wish-message{min-height:60px}.cake-wrap{margin-top:0;height:205px;scale:.78;transform-origin:top center;margin-bottom:-38px}}
@media(min-width:521px){.app-shell{border-left:1px solid rgba(255,255,255,.08);border-right:1px solid rgba(255,255,255,.08)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* Mobile viewport and Diwali rocket refinements */
.app-shell{min-height:0}
.scene{-webkit-overflow-scrolling:touch}
.scene-content{padding-bottom:calc(132px + env(safe-area-inset-bottom))}
.next-button,.rocket-button,.knife-button,.love-note,.wish-star{touch-action:manipulation}
.intro-content h1{font-size:clamp(33px,9.2vw,47px)}
.rocket-button{top:-4px;width:150px;height:240px;filter:drop-shadow(0 8px 17px rgba(255,123,169,.3))}
.rocket-svg{width:114px;height:238px}
.launch-zone{height:clamp(230px,35vh,310px);min-height:230px;max-height:none}
.launch-halo{top:10px}
.launch-zone::after{bottom:36px}
.rocket-flame{transform-origin:60px 150px;animation:flameWiggle .22s ease-in-out infinite alternate}
.launch-bottle{position:absolute;z-index:2;bottom:28px;left:calc(50% - 24px);width:48px;height:62px;border:3px solid #b88caa;border-radius:8px 8px 14px 14px;background:linear-gradient(90deg,#3e294c,#6a3c68 45%,#3a244e);box-shadow:inset 8px 0 rgba(255,255,255,.12),0 5px 13px rgba(0,0,0,.3);transition:opacity .4s}
.launch-bottle::before{content:"";position:absolute;left:11px;top:-17px;width:20px;height:17px;border:3px solid #b88caa;border-bottom:0;border-radius:4px 4px 0 0;background:#543050}
.launch-bottle span{position:absolute;left:5px;right:5px;top:23px;height:18px;border-radius:4px;background:#f37ca7;box-shadow:0 0 0 2px #fbc7d8 inset}
.launch-bottle span::after{content:"✦";position:absolute;left:13px;top:0;color:#fff4b6;font-size:12px}
.app-shell.is-launching .intro-content>.eyebrow,.app-shell.is-launching .intro-content>h1,.app-shell.is-launching .intro-content>.intro-subtitle,.app-shell.is-launching .intro-content>.intro-whisper{opacity:0;transform:translateY(-12px);transition:opacity .32s ease,transform .32s ease}
.app-shell.is-launching .site-header{opacity:0;transition:opacity .3s ease}
.app-shell.is-launching .story-footer{opacity:0;pointer-events:none;transition:opacity .4s ease}
.app-shell.is-launching.launch-complete .story-footer{opacity:1;pointer-events:auto}
.app-shell.is-launching .launch-halo,.app-shell.is-launching .launch-prompt,.app-shell.is-launching .launch-bottle{opacity:0;transition:opacity .45s ease}

/* Press and hold birthday cake */
.cake-wrap{height:clamp(240px,35vh,300px)}
.cake-body{position:absolute;z-index:3;left:15%;width:70%;height:142px;bottom:54px}
.cake-half{position:absolute;inset:0;transition:transform .85s cubic-bezier(.18,.7,.27,1.1)}
.cake-half-left{clip-path:polygon(0 0,50% 0,50% 100%,0 100%)}
.cake-half-right{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%)}
.cake-art{position:absolute;inset:0;border:3px solid #9c5b70;border-radius:17px 17px 25px 25px;background:linear-gradient(to bottom,#fffaf0 0 18%,#ffe0e1 18% 46%,#f6aabe 46% 50%,transparent 50%),repeating-linear-gradient(90deg,#ffc3d4 0 25px,#f8adc4 25px 48px);box-shadow:inset 0 -18px rgba(197,82,118,.11),0 6px 14px rgba(135,69,89,.14)}
.cake-art::before{content:"";position:absolute;left:0;right:0;top:15px;height:28px;background:radial-gradient(ellipse 13px 28px at 14% 0,#fffaf0 98%,transparent 100%),radial-gradient(ellipse 13px 22px at 42% 0,#fffaf0 98%,transparent 100%),radial-gradient(ellipse 13px 31px at 70% 0,#fffaf0 98%,transparent 100%),radial-gradient(ellipse 13px 21px at 91% 0,#fffaf0 98%,transparent 100%)}
.cake-art::after{content:"";position:absolute;left:8%;right:8%;top:5px;height:13px;background:radial-gradient(circle at 15% 50%,#e85581 0 5px,transparent 6px),radial-gradient(circle at 47% 50%,#e85581 0 5px,transparent 6px),radial-gradient(circle at 80% 50%,#e85581 0 5px,transparent 6px)}
.cake-cut-line{position:absolute;z-index:-1;left:48%;top:7%;height:88%;width:15px;background:repeating-linear-gradient(to bottom,#e55f8b 0 13px,#ffe6ab 13px 19px);border-radius:7px;opacity:0;transition:opacity .4s}
.cake-wrap.cut .cake-half-left{transform:translateX(-16px) rotate(-4deg)}
.cake-wrap.cut .cake-half-right{transform:translateX(16px) rotate(4deg)}
.cake-wrap.cut .cake-cut-line{opacity:1}
.cake-plate{z-index:1;bottom:35px}
.knife-button{position:absolute;z-index:7;top:5px;right:3%;width:154px;height:130px;border:0;background:transparent;padding:0;cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;transform:rotate(-12deg);transition:transform 1.15s cubic-bezier(.3,.02,.58,1)}
.knife-button svg{width:100%;height:100%;filter:drop-shadow(0 8px 4px rgba(110,72,94,.22))}
.cake-wrap.holding .knife-button,.cake-wrap.cut .knife-button{transform:translate(-39px,64px) rotate(-30deg)}
.cut-progress{position:absolute;left:27%;right:27%;bottom:8px;height:7px;border-radius:10px;background:#f5c9d3;overflow:hidden}
.cut-progress span{display:block;width:0;height:100%;border-radius:10px;background:linear-gradient(90deg,#ef78a0,#ffd277);transition:width .12s}
.cake-wrap.holding .cut-progress span{width:100%;transition:width 1.2s linear}
.cake-wrap.cut .cut-progress span{width:100%;background:#f3b36f}
.party-popper{position:absolute;z-index:5;bottom:48px;width:25px;height:78px;border:2px solid #a96591;border-radius:7px;background:repeating-linear-gradient(to bottom,#eb73a4 0 12px,#ffe09a 12px 20px,#b88ce2 20px 30px);box-shadow:inset 6px 0 rgba(255,255,255,.22),0 5px 9px rgba(115,61,82,.15)}
.party-popper::before{content:"";position:absolute;left:-4px;right:-4px;top:-8px;height:13px;border-radius:5px;background:#ffde8b;border:2px solid #aa7a80}
.party-popper span{position:absolute;left:6px;bottom:5px;width:9px;height:9px;border:2px solid #fff3c7;border-radius:50%}
.popper-left{left:5%;transform:rotate(-37deg)}.popper-right{right:5%;transform:rotate(37deg)}
.cake-wrap.cut .popper-left{animation:popLeft .55s ease-out}.cake-wrap.cut .popper-right{animation:popRight .55s ease-out}
.party-piece{position:absolute;z-index:11;width:8px;height:14px;border-radius:2px;opacity:0;animation:partyBurst var(--duration,2s) cubic-bezier(.2,.65,.32,1) forwards;animation-delay:var(--delay,0s)}
.party-piece.round{width:8px;height:8px;border-radius:50%}
.cake-wrap.cut .cake-spark{animation:starBob .5s ease-in-out 4;filter:drop-shadow(0 0 9px #ffc861)}
@keyframes popLeft{0%,100%{transform:rotate(-37deg)}40%{transform:rotate(-54deg) translateY(-8px)}}
@keyframes popRight{0%,100%{transform:rotate(37deg)}40%{transform:rotate(54deg) translateY(-8px)}}
@keyframes partyBurst{0%{opacity:1;transform:translate(0,0) rotate(0) scale(.4)}18%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--spin)) scale(1)}}
@media(max-height:720px){.rocket-button{top:-12px}.rocket-svg{height:218px}.launch-zone{height:225px;min-height:225px}.launch-bottle{bottom:22px}.cake-wrap{height:235px}.cake-body{height:120px;bottom:48px}.cake-plate{bottom:30px}.knife-button{top:-7px;scale:.85}.party-popper{bottom:35px}}
@media(max-height:590px){.rocket-button{top:-10px;scale:.77}.rocket-svg{height:218px}.launch-zone{height:180px;min-height:180px}.launch-bottle{bottom:12px;scale:.75}.cake-wrap{height:205px;scale:.83;margin-bottom:-18px}.cake-body{height:115px}.knife-button{top:-14px}.scene-content{padding-bottom:calc(95px + env(safe-area-inset-bottom))}}
