*{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100%}body{background:linear-gradient(180deg,var(--color-night-skyTop) 0%,var(--color-night-skyBottom) 100%);color:var(--color-night-textPrimary);font-family:var(--font-family);font-size:var(--font-size-lg);line-height:1.7;overflow-x:hidden;-webkit-font-smoothing:antialiased}.bday{max-width:520px;margin:0 auto;padding:0 var(--spacing-lg)}.bday-scene{position:relative;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--spacing-md);padding:var(--spacing-xxl) 0}.scene-copy{margin:0;font-size:var(--font-size-subtitle);font-weight:var(--font-weight-semibold);line-height:1.6}.scene-text{margin:0;color:var(--color-night-textSecondary)}.scene-hint{margin:0;color:var(--color-night-textFaint);font-size:var(--font-size-md)}.bday-btn{border:none;cursor:pointer;background:var(--color-warm-gold);color:var(--color-night-skyTop);border-radius:var(--radius-full);padding:var(--spacing-sm) var(--spacing-xl);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);font-family:inherit;transition:background var(--motion-fast) ease}.bday-btn:hover{background:var(--color-warm-goldHover)}.bday-btn:active{background:var(--color-warm-goldActive)}.bday-btn:disabled{opacity:.45;cursor:default}.bday-btn-ghost{background:transparent;cursor:pointer;color:var(--color-night-textSecondary);border:1px solid var(--color-night-line);border-radius:var(--radius-full);padding:var(--spacing-xs) var(--spacing-lg);font-size:var(--font-size-md);font-family:inherit;transition:color var(--motion-fast) ease,border-color var(--motion-fast) ease}.bday-btn-ghost:hover{color:var(--color-night-textPrimary);border-color:var(--color-night-textFaint)}.bday-btn:focus-visible,.bday-btn-ghost:focus-visible,.cake:focus-visible,.check-row:focus-visible,.letter-opened-head:focus-visible{outline:2px solid var(--color-warm-goldHover);outline-offset:3px}.storage-note{position:fixed;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm);background:color-mix(in srgb,var(--color-warm-ember) 32%,var(--color-night-card));color:var(--color-night-textPrimary);font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md)}.storage-note button{background:transparent;border:none;color:var(--color-night-textPrimary);font-size:var(--font-size-md);cursor:pointer;padding:0 var(--spacing-xs)}.bday-stars{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.star{position:absolute;width:3px;height:3px;border-radius:var(--radius-full);background:var(--color-night-textFaint);animation:twinkle 3.2s ease-in-out infinite}.star:nth-child(3n){background:var(--color-warm-gold)}.star:nth-child(4n){width:2px;height:2px}.star:nth-child(5n){width:4px;height:4px}.star:nth-child(1){left:8%;top:12%;animation-delay:0s}.star:nth-child(2){left:22%;top:28%;animation-delay:.4s}.star:nth-child(3){left:35%;top:9%;animation-delay:.8s}.star:nth-child(4){left:48%;top:22%;animation-delay:1.2s}.star:nth-child(5){left:62%;top:15%;animation-delay:.2s}.star:nth-child(6){left:75%;top:30%;animation-delay:.9s}.star:nth-child(7){left:88%;top:10%;animation-delay:1.5s}.star:nth-child(8){left:15%;top:45%;animation-delay:.6s}.star:nth-child(9){left:55%;top:36%;animation-delay:1.8s}.star:nth-child(10){left:70%;top:5%;animation-delay:.3s}.star:nth-child(11){left:82%;top:38%;animation-delay:1.1s}.star:nth-child(12){left:5%;top:30%;animation-delay:1.7s}.star:nth-child(13){left:42%;top:33%;animation-delay:.5s}.star:nth-child(14){left:93%;top:25%;animation-delay:2s}@keyframes twinkle{0%,to{opacity:.25}50%{opacity:1}}.moon{position:absolute;right:12%;top:10%;width:54px;height:54px;border-radius:var(--radius-full);background:var(--color-warm-flameCore);box-shadow:var(--shadow-glow);opacity:.9}.hero-title{margin:0;font-size:var(--font-size-display);font-weight:var(--font-weight-semibold);line-height:1.45}.hero-title span{display:inline-block}.nowrap{white-space:nowrap}.hero-sub{margin:0;color:var(--color-night-textSecondary)}.hero-sub b{color:var(--color-warm-gold);font-weight:var(--font-weight-semibold)}.hero-greeting{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-lg)}.hero-form{display:flex;flex-direction:column;gap:var(--spacing-md);width:100%;max-width:360px}.hero-field{display:flex;flex-direction:column;gap:var(--spacing-xs);text-align:left;font-size:var(--font-size-md);color:var(--color-night-textSecondary)}.hero-field input{width:100%;background:var(--color-night-card);border:1px solid var(--color-night-line);color:var(--color-night-textPrimary);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-lg);font-family:inherit;color-scheme:dark;outline:none;transition:border-color var(--motion-fast) ease}.hero-field input:focus{border-color:var(--color-warm-gold)}.hero-field input::placeholder{color:var(--color-night-textFaint)}.hero-form .bday-btn{margin-top:var(--spacing-sm)}.hero-edit{align-self:center}.cake-stage{position:relative;width:240px;height:250px;display:flex;align-items:flex-end;justify-content:center}.cake-glow{position:absolute;left:50%;top:26%;transform:translate(-50%,-50%);width:340px;height:340px;border-radius:var(--radius-full);background:radial-gradient(closest-side,color-mix(in srgb,var(--color-warm-flame) 24%,transparent),transparent 72%);opacity:0;transition:opacity var(--motion-slow) ease;pointer-events:none}.cake-stage.lit .cake-glow{opacity:1}.cake-stage.holding .cake-glow{opacity:.4;transition:opacity 1.2s linear}.cake{position:relative;width:220px;height:235px;background:transparent;border:none;cursor:pointer;padding:0;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}.plate{position:absolute;bottom:6px;left:50%;transform:translate(-50%);width:210px;height:24px;border-radius:var(--radius-full);background:color-mix(in srgb,var(--color-night-line) 70%,var(--color-night-card))}.cake-body{position:absolute;bottom:20px;left:50%;transform:translate(-50%);width:160px;height:62px;border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--color-warm-ember) 82%,var(--color-night-card)),color-mix(in srgb,var(--color-warm-ember) 55%,var(--color-night-card)))}.cake-top{position:absolute;bottom:66px;left:50%;transform:translate(-50%);width:160px;height:26px;background:var(--color-warm-flameCore);border-radius:var(--radius-md) var(--radius-md) 0 0}.cake-top:after{content:"";position:absolute;top:100%;left:0;width:100%;height:14px;background:radial-gradient(circle at 50% 0,var(--color-warm-flameCore) 9px,transparent 9.5px);background-size:calc(100% / 6) 14px;background-repeat:repeat-x}.candle-stick{position:absolute;bottom:90px;left:50%;transform:translate(-50%);width:12px;height:40px;border-radius:var(--radius-sm);background:repeating-linear-gradient(135deg,var(--color-warm-flameCore) 0 5px,var(--color-warm-ember) 5px 10px)}.candle-stick:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);width:2px;height:7px;background:var(--color-night-line)}.flame{position:absolute;bottom:136px;left:50%;width:18px;height:26px;transform:translate(-50%);transform-origin:50% 100%;background:var(--color-warm-flame);border-radius:48% 52% 50% 50%/68% 68% 32% 32%;box-shadow:var(--shadow-glow);opacity:0;transition:opacity var(--motion-normal) ease}.flame-core{position:absolute;bottom:3px;left:50%;transform:translate(-50%);width:9px;height:13px;background:var(--color-warm-flameCore);border-radius:inherit}.cake-stage.lit .flame{opacity:1;animation:flicker .5s ease-in-out infinite alternate}.cake-stage.holding .flame{animation-duration:.14s}@keyframes flicker{0%{transform:translate(-50%) scale(1) rotate(-2deg)}to{transform:translate(-50%,-2px) scale(1.06,1.12) rotate(2deg)}}.smoke{position:absolute;bottom:138px;left:50%;width:6px;height:26px;transform:translate(-50%);border-radius:var(--radius-full);background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--color-night-textFaint) 55%,transparent));opacity:0}.cake-stage.blown .smoke{animation:smoke-rise var(--motion-ceremony) ease-out both}@keyframes smoke-rise{0%{opacity:0;transform:translate(-50%) scaleY(.6)}25%{opacity:.8}to{opacity:0;transform:translate(-50%,-46px) scaleY(1.3)}}.bday-confetti{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.bday-confetti span{position:absolute;top:42%;left:50%;width:8px;height:13px;border-radius:var(--radius-sm);background:var(--color-warm-gold);opacity:0;animation:confetti-pop var(--motion-ceremony) cubic-bezier(.2,.7,.3,1) both}.bday-confetti span:nth-child(4n+1){background:var(--color-warm-ember)}.bday-confetti span:nth-child(4n+3){background:var(--color-warm-leaf)}.bday-confetti span:nth-child(4n){background:var(--color-warm-flameCore)}.bday-confetti span:nth-child(2n){animation-delay:60ms}.bday-confetti span:nth-child(3n){animation-delay:.12s}.bday-confetti span:nth-child(1){--tx: -120px;--ty: -40px;--rot: -220deg}.bday-confetti span:nth-child(2){--tx: -90px;--ty: 30px;--rot: 180deg}.bday-confetti span:nth-child(3){--tx: -60px;--ty: -80px;--rot: 260deg}.bday-confetti span:nth-child(4){--tx: -30px;--ty: 50px;--rot: -160deg}.bday-confetti span:nth-child(5){--tx: -10px;--ty: -100px;--rot: 200deg}.bday-confetti span:nth-child(6){--tx: 15px;--ty: -70px;--rot: -240deg}.bday-confetti span:nth-child(7){--tx: 40px;--ty: 45px;--rot: 150deg}.bday-confetti span:nth-child(8){--tx: 70px;--ty: -90px;--rot: -190deg}.bday-confetti span:nth-child(9){--tx: 95px;--ty: 20px;--rot: 230deg}.bday-confetti span:nth-child(10){--tx: 120px;--ty: -50px;--rot: -210deg}.bday-confetti span:nth-child(11){--tx: -140px;--ty: -10px;--rot: 170deg}.bday-confetti span:nth-child(12){--tx: 140px;--ty: -25px;--rot: -170deg}@keyframes confetti-pop{0%{opacity:1;transform:translate(-50%) rotate(0)}30%{opacity:1}to{opacity:0;transform:translate(calc(-50% + var(--tx)),var(--ty)) rotate(var(--rot))}}.noodle-stage{position:relative;width:230px;height:205px}.steam{position:absolute;bottom:118px;width:9px;height:64px;border-radius:var(--radius-full);background:linear-gradient(180deg,transparent 0%,color-mix(in srgb,var(--color-night-textPrimary) 40%,transparent) 70%);filter:blur(3px);opacity:.25}.steam.s1{left:74px}.steam.s2{left:108px;height:74px}.steam.s3{left:142px}.bday-noodle.steaming .steam{animation:steam-rise 2.8s ease-in-out infinite}.bday-noodle.steaming .steam.s2{animation-delay:.5s}.bday-noodle.steaming .steam.s3{animation-delay:1.1s}@keyframes steam-rise{0%{opacity:0;transform:translateY(10px)}35%{opacity:.7}to{opacity:0;transform:translateY(-34px)}}.bowl{position:absolute;left:50%;bottom:0;transform:translate(-50%);width:190px;height:130px}.bowl-body{position:absolute;top:34px;left:50%;transform:translate(-50%);width:190px;height:78px;background:linear-gradient(180deg,color-mix(in srgb,var(--color-night-card) 82%,var(--color-night-textFaint)),color-mix(in srgb,var(--color-night-card) 78%,var(--color-night-skyTop)));border-top:5px solid var(--color-warm-gold);border-radius:0 0 95px 95px/0 0 78px 78px}.bowl-body:after{content:"";position:absolute;top:18px;left:8%;width:84%;height:4px;border-radius:var(--radius-full);background:color-mix(in srgb,var(--color-warm-gold) 45%,transparent)}.bowl-foot{position:absolute;bottom:4px;left:50%;transform:translate(-50%);width:74px;height:14px;background:color-mix(in srgb,var(--color-night-card) 80%,var(--color-night-skyTop));border-radius:0 0 var(--radius-md) var(--radius-md)}.noodles{position:absolute;left:50%;transform:translate(-50%);border-radius:var(--radius-full);background:var(--color-warm-goldHover)}.noodles:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:repeating-linear-gradient(90deg,transparent 0 8px,color-mix(in srgb,var(--color-warm-goldActive) 45%,transparent) 8px 10px)}.noodles.n1{top:24px;width:172px;height:12px;background:color-mix(in srgb,var(--color-warm-goldHover) 88%,var(--color-warm-ember))}.noodles.n2{top:13px;width:150px;height:12px}.noodles.n3{top:3px;width:122px;height:12px;background:color-mix(in srgb,var(--color-warm-goldHover) 80%,var(--color-warm-flameCore))}.egg{position:absolute;top:-2px;left:30px;width:46px;height:30px;background:var(--color-warm-flameCore);border-radius:var(--radius-full)}.yolk{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:18px;height:16px;border-radius:var(--radius-full);background:var(--color-warm-gold)}.green{position:absolute;width:26px;height:9px;border-radius:var(--radius-full);background:var(--color-warm-leaf)}.green.g1{top:2px;right:36px;transform:rotate(-18deg)}.green.g2{top:15px;right:22px;width:20px;transform:rotate(14deg)}.bday-letter{gap:var(--spacing-lg)}.letter-paper{width:100%;max-width:420px;background:color-mix(in srgb,var(--color-warm-flameCore) 7%,var(--color-night-card));border:1px solid var(--color-night-line);border-radius:var(--radius-md);padding:var(--spacing-lg);display:flex;flex-direction:column;gap:var(--spacing-md);transition:border-color var(--motion-fast) ease}.letter-paper:focus-within{border-color:var(--color-warm-gold)}.letter-paper textarea{width:100%;min-height:200px;resize:vertical;border:none;outline:none;background:transparent;background-image:repeating-linear-gradient(transparent 0,transparent calc(2em - 1px),color-mix(in srgb,var(--color-night-line) 60%,transparent) calc(2em - 1px),color-mix(in srgb,var(--color-night-line) 60%,transparent) 2em);color:var(--color-night-textPrimary);caret-color:var(--color-warm-gold);font-family:var(--font-familySerif);font-size:var(--font-size-lg);line-height:2;text-align:left}.letter-paper textarea::placeholder{color:var(--color-night-textFaint)}.letter-paper .bday-btn{align-self:center}.letter-due{width:100%;max-width:420px;border:1px solid color-mix(in srgb,var(--color-warm-gold) 55%,var(--color-night-line));background:color-mix(in srgb,var(--color-warm-gold) 10%,var(--color-night-card));border-radius:var(--radius-md);padding:var(--spacing-lg);display:flex;flex-direction:column;align-items:center;gap:var(--spacing-md)}.letter-due p{margin:0;font-weight:var(--font-weight-semibold)}.letter-sealed{width:100%;max-width:420px;background:var(--color-night-card);border:1px solid var(--color-night-line);border-radius:var(--radius-md);padding:var(--spacing-xl);display:flex;flex-direction:column;align-items:center;gap:var(--spacing-md);color:var(--color-night-textSecondary)}.letter-sealed p{margin:0}.seal{width:52px;height:52px;border-radius:var(--radius-full);background:radial-gradient(closest-side,color-mix(in srgb,var(--color-warm-ember) 88%,var(--color-warm-flameCore)),var(--color-warm-ember));box-shadow:inset 0 0 0 3px color-mix(in srgb,var(--color-warm-flameCore) 35%,transparent);color:var(--color-warm-flameCore);display:flex;align-items:center;justify-content:center;font-family:var(--font-familySerif);font-size:var(--font-size-title)}.letter-opened{width:100%;max-width:420px;background:var(--color-night-card);border:1px solid var(--color-night-line);border-radius:var(--radius-md);overflow:hidden}.letter-opened-head{width:100%;background:transparent;border:none;color:var(--color-night-textSecondary);font-size:var(--font-size-md);font-family:inherit;padding:var(--spacing-md);cursor:pointer}.letter-opened.show .letter-opened-head{color:var(--color-warm-gold)}.letter-content{margin:0;padding:0 var(--spacing-lg) var(--spacing-lg);text-align:left;font-family:var(--font-familySerif);line-height:2;white-space:pre-wrap;color:var(--color-night-textPrimary)}.family-card{width:100%;max-width:420px;background:var(--color-night-card);border:1px solid var(--color-night-line);border-radius:var(--radius-md);padding:var(--spacing-lg)}.family-card p{margin:0}.dates-card p+p{margin-top:var(--spacing-xs)}.dates-card b{color:var(--color-warm-gold);font-weight:var(--font-weight-semibold)}.phone-card{border-color:color-mix(in srgb,var(--color-warm-leaf) 40%,var(--color-night-line));display:flex;flex-direction:column;gap:var(--spacing-xs)}.phone-title{font-weight:var(--font-weight-semibold)}.checklist-progress{margin:0;color:var(--color-night-textSecondary);font-size:var(--font-size-md)}.checklist-progress b{color:var(--color-warm-gold)}.checklist{list-style:none;margin:0;padding:0;width:100%;max-width:420px;display:flex;flex-direction:column;gap:var(--spacing-sm)}.check-row{width:100%;display:flex;align-items:center;gap:var(--spacing-md);text-align:left;background:color-mix(in srgb,var(--color-night-card) 75%,transparent);border:1px solid var(--color-night-line);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);color:var(--color-night-textSecondary);font-size:var(--font-size-md);font-family:inherit;line-height:1.6;cursor:pointer;transition:border-color var(--motion-fast) ease,color var(--motion-fast) ease,background var(--motion-fast) ease}.check-row:hover{border-color:var(--color-night-textFaint)}.check-row.on{color:var(--color-night-textPrimary);border-color:color-mix(in srgb,var(--color-warm-leaf) 55%,var(--color-night-line));background:color-mix(in srgb,var(--color-warm-leaf) 8%,var(--color-night-card))}.check-box{flex:none;width:22px;height:22px;border-radius:var(--radius-sm);border:2px solid var(--color-night-textFaint);position:relative;transition:background var(--motion-fast) ease,border-color var(--motion-fast) ease}.check-row.on .check-box{background:var(--color-warm-leaf);border-color:var(--color-warm-leaf)}.check-row.on .check-box:after{content:"";position:absolute;left:5px;top:1px;width:5px;height:10px;border-right:2px solid var(--color-night-skyTop);border-bottom:2px solid var(--color-night-skyTop);transform:rotate(45deg)}.bday-finale{gap:var(--spacing-lg)}.finale-line{margin:0;font-size:var(--font-size-subtitle);font-weight:var(--font-weight-semibold)}.fireworks{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.fw{position:absolute;width:4px;height:4px}.fw1{left:22%;top:24%}.fw2{left:72%;top:16%}.fw3{left:47%;top:9%}.spark{position:absolute;left:0;top:0;width:4px;height:16px;border-radius:var(--radius-full);background:var(--color-warm-gold);transform-origin:50% 0;opacity:0;animation:spark-fly var(--motion-ceremony) ease-out both}.fw2 .spark{background:var(--color-warm-ember)}.fw3 .spark{background:var(--color-warm-leaf)}.fw1 .spark{animation-delay:.1s}.fw2 .spark{animation-delay:.5s}.fw3 .spark{animation-delay:.9s}.spark:nth-child(1){--a: 0deg}.spark:nth-child(2){--a: 45deg}.spark:nth-child(3){--a: 90deg}.spark:nth-child(4){--a: 135deg}.spark:nth-child(5){--a: 180deg}.spark:nth-child(6){--a: 225deg}.spark:nth-child(7){--a: 270deg}.spark:nth-child(8){--a: 315deg}@keyframes spark-fly{0%{opacity:1;transform:rotate(var(--a)) translateY(0) scaleY(.5)}60%{opacity:1}to{opacity:0;transform:rotate(var(--a)) translateY(52px) scaleY(1)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.star{animation:none!important;opacity:.6}.steam{animation:none!important;opacity:.3}.cake-stage.lit .flame{animation:none!important}}
