:root{--night: #07060b;--ink: #f7efe3;--muted: rgba(247, 239, 227, .68);--gold: #e8c36a;--gold-soft: #f3d59a;--blush: #ff8fab;--glass: rgba(255, 247, 230, .06);--line: rgba(243, 213, 154, .22);--serif: "Cormorant Garamond", "Times New Roman", serif;--script: "Great Vibes", cursive;--sans: "Outfit", system-ui, sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}html,body,#root{min-height:100%}body{margin:0;min-width:320px;color:var(--ink);background:var(--night);font-family:var(--sans);line-height:1.6;overflow-x:hidden}button,a{font-family:inherit}button{cursor:pointer}::selection{background:#e8c36a59;color:#fff8e8}.night{position:relative;min-height:100vh;isolation:isolate}.fireworks,.cursor-trail,.vignette,.grain,.aurora,.spotlight,.floaties,.confetti{position:fixed;inset:0;pointer-events:none}.fireworks{z-index:0;background:radial-gradient(ellipse at 50% 120%,#1b1028 0%,transparent 52%),radial-gradient(circle at 15% 20%,#2a1638 0%,transparent 28%),#07060b}.aurora{z-index:1;overflow:hidden}.aurora__blob{position:absolute;width:28rem;height:28rem;border-radius:50%;filter:blur(70px);opacity:.45;mix-blend-mode:screen}.aurora__blob--gold{background:#e8c36a;top:-8%;left:10%;animation:drift 16s ease-in-out infinite}.aurora__blob--pink{background:#ff8fab;right:-6%;top:28%;animation:drift 19s ease-in-out infinite reverse}.aurora__blob--violet{background:#7c3aed;bottom:-12%;left:32%;animation:drift 22s ease-in-out infinite}.spotlight{z-index:1;background:radial-gradient(circle 18rem at var(--mx, 50%) var(--my, 38%),rgba(255,215,106,.14),transparent 58%)}.floaties{z-index:4}.floaty{position:absolute;bottom:-10%;color:#fff1c1;font-family:var(--script);animation:float-up linear infinite;opacity:.75;text-shadow:0 8px 20px rgba(0,0,0,.35)}.confetti{z-index:4}.confetti__bit{position:absolute;top:-8%;border-radius:2px;animation:confetti-fall ease-in forwards}.cursor-trail{z-index:4}.vignette{z-index:2;background:radial-gradient(ellipse at center,transparent 42%,rgba(0,0,0,.55) 100%),linear-gradient(180deg,rgba(7,6,11,.15),transparent 18%,transparent 82%,rgba(7,6,11,.55))}.grain{z-index:3;opacity:.16;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.topbar,main,.intro{position:relative;z-index:5}.topbar,main{opacity:0;pointer-events:none;transform:translateY(12px);transition:opacity .7s ease,transform .7s ease}.night.is-open .topbar,.night.is-open main{opacity:1;pointer-events:auto;transform:none}.topbar{position:sticky;top:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.75rem;padding:.85rem 1.4rem;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#07060b47;border-bottom:1px solid transparent}.topbar__end{display:flex;align-items:center;justify-content:flex-end;gap:1rem}.topbar__mark{font-family:var(--script);font-size:2rem;line-height:1;color:var(--gold-soft)}@media(max-width:640px){.topbar{grid-template-columns:auto 1fr auto;padding:.75rem .9rem}.topbar__mark{font-size:1.45rem}.topbar .countdown--compact .countdown__kicker{display:none}}.topbar__nav{display:none;gap:1.4rem}.topbar__nav a{color:var(--muted);text-decoration:none;font-size:.86rem;letter-spacing:.08em;text-transform:uppercase}.topbar__nav a:hover{color:var(--gold-soft)}.ghost-btn,.wish-btn,.intro__btn{border:1px solid var(--line);background:#fff1c10f;color:var(--gold-soft);border-radius:999px;padding:.75rem 1.2rem;letter-spacing:.08em;text-transform:uppercase;font-size:.72rem;transition:transform .2s ease,background .2s ease,box-shadow .2s ease}.ghost-btn:hover,.wish-btn:hover,.intro__btn:hover{transform:translateY(-2px);background:#ffd76a24;box-shadow:0 10px 40px #e8c36a29}.ghost-btn--icon{width:2.6rem;height:2.6rem;padding:0;display:grid;place-items:center}.ghost-btn--icon svg{width:1.05rem;height:1.05rem}.ghost-btn--icon.is-off{opacity:.55}.intro__music{margin:.9rem 0 0;font-family:var(--script);font-size:2rem;letter-spacing:.12em;text-transform:none;color:var(--gold-soft);animation:puss-bounce 1.05s ease-in-out infinite}.intro__name{animation:title-in 1s cubic-bezier(.2,.8,.2,1) both}.intro-shell{position:fixed;inset:0;z-index:8;transition:opacity .6s ease}.intro-shell.is-leaving{opacity:0;pointer-events:none}.intro{position:absolute;inset:0;z-index:8;display:grid;place-items:center;text-align:center;padding:2rem;background:radial-gradient(circle at 50% 40%,rgba(232,195,106,.16),transparent 38%),#07060bb3;animation:fade-in .9s ease both}.intro__glow{position:absolute;width:28rem;height:28rem;border-radius:50%;background:radial-gradient(circle,rgba(255,143,171,.18),transparent 68%);filter:blur(12px);animation:pulse 4.8s ease-in-out infinite;pointer-events:none}.intro__eyebrow,.eyebrow{letter-spacing:.28em;text-transform:uppercase;font-size:.72rem;color:var(--gold-soft);margin:0 0 1rem}.intro__name,.close__script{font-family:var(--script);font-size:clamp(2.6rem,9vw,6.2rem);font-weight:400;margin:0;line-height:.95;color:#fff6d8;text-shadow:0 10px 50px rgba(255,215,106,.28)}.close__script{font-size:clamp(5rem,16vw,9rem)}.intro__line,.lede,.hint,.letter__card p,.ritual__copy p{color:var(--muted)}.intro__line{max-width:22rem;margin:1rem auto 2rem}.intro__btn{font-size:.78rem;padding:.95rem 1.6rem}.intro__actions{position:relative;z-index:2;display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;align-items:center}.midnight-flash{position:fixed;inset:0;z-index:9999;display:grid;place-content:center;text-align:center;pointer-events:none;background:radial-gradient(circle at 50% 42%,#ffd76a47,#07060bc7 60%)}.midnight-flash__kicker{margin:0;letter-spacing:.32em;text-transform:uppercase;color:var(--gold-soft)}.midnight-flash__twelve{margin:0;font-family:var(--script);font-size:clamp(8rem,28vw,16rem);line-height:.78;color:#fff6d8;text-shadow:0 12px 60px rgba(255,215,106,.4);animation:puss-bounce 1s ease-in-out infinite}.midnight-flash__gag{margin:.4rem 0 0;font-family:var(--script);font-size:clamp(2.4rem,8vw,4.4rem);color:var(--blush)}@keyframes midnight-in{0%{opacity:0;transform:scale(1.06)}}.hero,.letter,.ritual,.wishes-wrap,.close{padding:5rem 1.3rem}.hero{position:relative;min-height:calc(100svh - 4.5rem);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;overflow:hidden}.balloons{position:absolute;inset:0;pointer-events:none}.balloon{position:absolute;top:8%;left:var(--x);width:2.4rem;height:3rem;border-radius:50% 50% 48% 48%;background:radial-gradient(circle at 30% 24%,rgba(255,255,255,.7),transparent 36%),var(--c);animation:float var(--d) ease-in-out var(--delay) infinite;box-shadow:inset -8px -10px 16px #0000002e}.balloon:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:3.2rem;background:#fff1c166}.display{margin:0;display:grid;gap:.1rem;font-family:var(--serif);font-weight:500;line-height:.88}.night.is-open .display span,.night.is-open .display em,.night.is-open .display strong{animation:title-in .9s cubic-bezier(.2,.8,.2,1) both}.night.is-open .display em{animation-delay:.12s}.night.is-open .display strong{animation-delay:.24s}.display span,.display em{font-style:normal;font-size:clamp(3.2rem,10vw,6.8rem);text-transform:uppercase}.display strong{font-size:clamp(3.6rem,12vw,8rem);font-family:var(--script);font-weight:400}.gold-foil{background:linear-gradient(110deg,#c9a227,#fff1c1 28%,#e8c36a 52%,#ffe9a5 68%,#c9a227);background-size:220% auto;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer 6s linear infinite}.lede{max-width:34rem;margin:1.4rem auto 2.2rem;font-size:1.05rem}.countdown{width:min(44rem,100%);text-align:center}.countdown__kicker,.countdown__note,.countdown__label{display:block;margin:0;letter-spacing:.16em;text-transform:uppercase;font-size:.7rem;color:var(--gold-soft)}.countdown__kicker{margin-bottom:.85rem}.countdown__note{margin-top:.85rem}.countdown__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.countdown__cell{min-width:0;padding:.85rem .35rem .75rem;border:1px solid var(--line);border-radius:1rem;background:var(--glass);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.countdown__value{display:block;font-family:var(--serif);font-size:clamp(1.7rem,6vw,3.4rem);line-height:1;font-variant-numeric:tabular-nums}.countdown__label{margin-top:.4rem;font-size:.58rem}.countdown--live{padding:.2rem 0 0}.countdown--compact{width:max-content;max-width:100%;display:flex;flex-direction:column;align-items:center;gap:.2rem}.countdown--compact .countdown__kicker{margin:0;font-size:.58rem}.countdown__strip{display:flex;align-items:center;justify-content:center;white-space:nowrap;font-variant-numeric:tabular-nums}.countdown__unit{display:inline-flex;align-items:center}.countdown__digits{display:inline-block;min-width:2ch;font-family:var(--serif);font-size:1.2rem;line-height:1;text-align:center}.countdown__colon{width:.7rem;color:var(--gold-soft);text-align:center;animation:pulse 1.2s steps(1) infinite}.intro .countdown--compact{margin:0 auto 1.6rem;padding:.75rem 1.15rem .85rem;border:1px solid var(--line);border-radius:1.1rem;background:#fff7e60d}.hint{margin-top:1.4rem;font-size:.88rem}.letter{display:grid;place-items:center}.tilt-wrap{width:min(40rem,100%);perspective:900px}.wishes .tilt-wrap,.wishes .reveal{width:100%}.tilt-card{transform-style:preserve-3d;transition:transform .18s ease}.letter__card,.wish{width:100%;padding:2.2rem 1.6rem;border:1px solid var(--line);border-radius:1.6rem;background:linear-gradient(180deg,#fff7e614,#fff7e608);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:0 30px 80px #00000047}.letter__date{letter-spacing:.2em;text-transform:uppercase;font-size:.72rem;color:var(--gold-soft)}.letter__card h2,.ritual__copy h2,.section-head h2{font-family:var(--serif);font-size:clamp(2.2rem,6vw,4rem);line-height:1.05;font-weight:500;margin:.3rem 0 1.1rem}.letter__sign{margin-top:1.6rem;font-style:italic}.letter__from{font-family:var(--script);font-size:2.4rem;margin:0;color:var(--gold-soft)}.ritual{display:grid;gap:2.4rem;justify-items:center;text-align:center}.ritual__copy{max-width:36rem}.cake-scene{display:grid;justify-items:center;gap:1.6rem}.cake{position:relative;width:min(22rem,88vw);height:18rem;display:grid;place-items:end center;animation:cake-bob 3.6s ease-in-out infinite}.cake__plate{width:100%;height:1.1rem;border-radius:999px;background:linear-gradient(180deg,#f3d59a,#b98a3d);box-shadow:0 16px 24px #00000059}.cake__tier{position:absolute;border-radius:1.2rem 1.2rem .8rem .8rem;background:repeating-linear-gradient(90deg,rgba(255,255,255,.06) 0 10px,transparent 10px 20px),linear-gradient(180deg,#ffe4ef,#f4a6c1 55%,#e56b92);box-shadow:inset 0 8px 18px #ffffff40,0 10px 18px #00000040}.cake__tier--bottom{width:78%;height:5.4rem;bottom:1.1rem}.cake__tier--top{width:54%;height:4.2rem;bottom:6.3rem}.cake__drip{position:absolute;inset:auto 8% -.7rem;height:1.1rem;background:radial-gradient(circle at 20% 0,#fff7fb 0 18px,transparent 19px),radial-gradient(circle at 50% 0,#fff7fb 0 16px,transparent 17px),radial-gradient(circle at 80% 0,#fff7fb 0 18px,transparent 19px)}.cake__candles{position:absolute;left:26%;right:26%;bottom:10.2rem;display:flex;justify-content:space-between}.candle{position:relative;width:.42rem;display:grid;justify-items:center}.candle__stick{width:.38rem;height:2rem;border-radius:999px;background:linear-gradient(180deg,#fff1c1,#e8c36a)}.candle__flame{width:.7rem;height:1.1rem;border-radius:50%/55% 55% 45% 45%;background:radial-gradient(circle at 50% 70%,#fff6d2,#ffb703 38%,#ff5d73);transform-origin:center bottom;animation:flicker .7s var(--delay) infinite;box-shadow:0 0 16px #ffb703}.candle__smoke{position:absolute;top:-.4rem;width:.2rem;height:0;border-radius:999px;background:#fff6;opacity:0}.cake.is-wished .candle__flame{animation:none;transform:scale(0);opacity:0}.cake.is-wished .candle__smoke{animation:smoke 1.4s var(--delay) ease forwards}.wish-btn:disabled{opacity:.7;cursor:default;transform:none}.section-head{text-align:center;margin-bottom:2rem}.wishes{display:grid;gap:1rem}.wish{width:100%}.wish__index{font-family:var(--serif);color:var(--gold);font-size:1.2rem}.wish h3{margin:.2rem 0 .5rem;font-family:var(--serif);font-size:1.8rem;font-weight:500}.wish p{margin:0;color:var(--muted)}.close{min-height:70vh;display:grid;place-content:center;justify-items:center;text-align:center;gap:1.4rem}.close .reveal{display:grid;justify-items:center;gap:1.4rem}.reveal{opacity:0;transform:translateY(36px) scale(.98);filter:blur(8px);transition:opacity .7s ease,transform .7s ease,filter .7s ease}.reveal.is-in{opacity:1;transform:none;filter:none}@keyframes shimmer{to{background-position:200% center}}@keyframes float{0%,to{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-28px) rotate(5deg)}}@keyframes flicker{0%,to{transform:scale(1) rotate(-6deg)}50%{transform:scale(1.12) rotate(7deg)}}@keyframes smoke{0%{opacity:.7;height:.2rem}to{opacity:0;height:2.4rem;transform:translateY(-18px)}}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.04);opacity:.82}}@keyframes fade-in{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(18px)}}@keyframes title-in{0%{opacity:0;transform:translateY(36px) scale(.94);filter:blur(10px)}to{opacity:1;transform:none;filter:none}}@keyframes puss-bounce{0%,to{transform:scale(1) rotate(-6deg)}40%{transform:scale(1.2) rotate(7deg)}70%{transform:scale(.92) rotate(-3deg)}}@keyframes drift{0%,to{transform:translate(0) scale(1)}50%{transform:translate(8%,-12%) scale(1.18)}}@keyframes float-up{0%{transform:translateY(0) rotate(-8deg);opacity:0}12%{opacity:.8}to{transform:translateY(-115vh) rotate(18deg);opacity:0}}@keyframes confetti-fall{0%{transform:translateZ(0) rotate(0);opacity:1}to{transform:translate3d(var(--drift),110vh,0) rotate(var(--spin));opacity:0}}@keyframes cake-bob{0%,to{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-10px) rotate(1.5deg)}}@media(min-width:800px){.topbar{padding:1.1rem 2.4rem}.topbar__nav{display:flex}.hero,.letter,.ritual,.wishes-wrap,.close{padding:6.5rem 2.4rem}.letter__card{padding:3rem 3.2rem}.wishes{grid-template-columns:repeat(2,1fr)}.ritual{grid-template-columns:1fr 1fr;align-items:center;text-align:left}}@media(min-width:1100px){.wishes{grid-template-columns:repeat(3,1fr)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
