@layer reset,base,components,scenes,responsive,motion;@layer reset{*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth}body,h1,h2,h3,p{margin:0}button,input{font:inherit}button{color:inherit}img,canvas,svg{display:block;max-width:100%}}@layer base{:root{--color-background: #090507;--color-burgundy: #240910;--color-rose: #ef6f91;--color-red: #9e1738;--color-gold: #d8b574;--color-champagne: #f4e2c2;--color-ivory: #fff8f3;--font-display: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;--font-body: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--page-gutter: clamp(1.25rem, 4vw, 5rem);--ease-out: cubic-bezier(.22, 1, .36, 1);color-scheme:dark;font-family:var(--font-body);background:var(--color-background)}body{min-width:320px;min-height:100vh;overflow-x:hidden;color:var(--color-ivory);background:radial-gradient(circle at 12% 10%,rgba(111,12,39,.16),transparent 32rem),var(--color-background);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}body.experience-locked,body.modal-open{overflow:hidden}button,a,label{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--color-champagne);outline-offset:4px}::selection{color:var(--color-background);background:var(--color-rose)}.skip-link{position:fixed;top:1rem;left:1rem;z-index:1000;padding:.75rem 1rem;color:#111;background:var(--color-ivory);border-radius:.4rem;transform:translateY(-150%);transition:transform .18s ease}.skip-link:focus{transform:translateY(0)}.global-noise{position:fixed;inset:0;z-index:90;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.85'/%3E%3C/svg%3E")}.scroll-progress{position:fixed;inset:0 0 auto;z-index:120;height:2px;pointer-events:none;background:linear-gradient(90deg,var(--color-red),var(--color-rose),var(--color-gold));box-shadow:0 0 14px #ef6f918c;transform:scaleX(0);transform-origin:left}noscript{position:fixed;inset:auto 1rem 1rem;z-index:1000;padding:1rem;color:#111;background:#fff;border-radius:.5rem}}@layer components{.button,.icon-button,.text-button,.gallery-controls__open{border:0;cursor:pointer}.button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.65rem;min-height:3.6rem;padding:.9rem 1.45rem;overflow:hidden;border:1px solid transparent;border-radius:999px;font-size:.75rem;font-weight:700;letter-spacing:.15em;line-height:1.1;text-transform:uppercase;transition:transform .3s var(--ease-out),border-color .3s ease,background .3s ease,box-shadow .3s ease}.button:before{position:absolute;inset:0;content:"";background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.26) 50%,transparent 75%);transform:translate(-120%);transition:transform .8s var(--ease-out)}.button:hover:before{transform:translate(120%)}.button:hover{transform:translateY(-3px)}.button:disabled{cursor:default;opacity:.72;transform:none}.button svg{width:1rem;height:1rem}.button--primary{color:var(--color-ivory);background:linear-gradient(135deg,#c83258,#8e1233);border-color:#ffbccc52;box-shadow:0 1rem 2.6rem #9c113659,inset 0 1px #ffffff38}.button--light{color:#260b12;background:linear-gradient(135deg,var(--color-ivory),var(--color-champagne));box-shadow:0 1rem 3rem #f4e2c22e}.button--ghost{background:#ffffff0e;border-color:#ffffff2e;backdrop-filter:blur(12px)}.button--ghost:hover{border-color:#ef6f918c;background:#ef6f9117}.icon-button{display:inline-grid;width:2.8rem;height:2.8rem;padding:0;color:var(--color-ivory);background:#fff1;border:1px solid rgba(255,255,255,.12);border-radius:50%;place-items:center;transition:transform .25s var(--ease-out),background .25s ease,border-color .25s ease}.icon-button:hover{background:#ef6f9124;border-color:#ef6f9173;transform:translateY(-2px)}.icon-button svg{width:1rem;height:1rem}.text-button{display:inline-flex;align-items:center;gap:.5rem;padding:.4rem 0;color:#fff8f3b3;background:transparent;border-bottom:1px solid rgba(216,181,116,.28);font-size:.75rem;font-weight:600;letter-spacing:.11em;text-transform:uppercase;transition:color .2s ease,border-color .2s ease}.text-button:hover{color:var(--color-champagne);border-color:var(--color-gold)}.text-button svg{width:1rem;height:1rem}.scene{position:relative;isolation:isolate;display:grid;min-height:100svh;overflow:hidden;place-items:center;scroll-margin-top:0}.scene__inner{position:relative;z-index:2;width:min(100%,90rem);padding-inline:var(--page-gutter)}.display-title{max-width:18ch;font-family:var(--font-display);font-size:clamp(2.85rem,6.2vw,7.6rem);font-weight:400;letter-spacing:-.052em;line-height:.94;text-wrap:balance}.display-title em{color:var(--color-rose);font-weight:400}.scene__body{max-width:38rem;color:#fff8f3a6;font-size:clamp(.95rem,1.3vw,1.12rem);line-height:1.85}.eyebrow{display:flex;align-items:center;gap:.8rem;margin-bottom:1.5rem;color:var(--color-gold);font-size:.66rem;font-weight:700;letter-spacing:.24em;text-transform:uppercase}.eyebrow span{width:2.5rem;height:1px;background:linear-gradient(90deg,transparent,currentColor)}.eyebrow span:last-child{background:linear-gradient(90deg,currentColor,transparent)}.scene-number{position:absolute;right:clamp(1rem,3vw,3rem);bottom:1.5rem;z-index:4;color:#fff8f34d;font-family:var(--font-display);font-size:.8rem;letter-spacing:.22em}.scene-number span{color:#d8b57480}.scene-nav{position:fixed;top:50%;right:clamp(.75rem,2vw,2rem);z-index:80;display:grid;gap:.5rem;opacity:0;pointer-events:none;transform:translateY(-50%) translate(1rem);transition:opacity .5s ease,transform .5s var(--ease-out)}.experience-started .scene-nav{opacity:1;pointer-events:auto;transform:translateY(-50%) translate(0)}.scene-nav button{display:grid;width:2rem;height:2rem;padding:0;color:#fff8f352;background:transparent;border:0;cursor:pointer;place-items:center}.scene-nav button:before{width:.35rem;height:.35rem;content:"";background:currentColor;border-radius:50%;transition:transform .3s var(--ease-out),color .3s ease,box-shadow .3s ease}.scene-nav button span{position:absolute;right:2.1rem;padding:.28rem .45rem;color:var(--color-champagne);background:#0d0709bf;border-radius:.25rem;font-size:.58rem;letter-spacing:.12em;opacity:0;transform:translate(.4rem);transition:opacity .2s ease,transform .2s ease}.scene-nav button:hover span,.scene-nav button:focus-visible span{opacity:1;transform:translate(0)}.scene-nav button.is-active{color:var(--color-rose)}.scene-nav button.is-active:before{box-shadow:0 0 0 5px #ef6f911f,0 0 15px #ef6f91b3;transform:scale(1.25)}.reveal:not(.is-visible){opacity:0}}@layer scenes{.intro{position:fixed;inset:0;z-index:100;display:grid;overflow:hidden;background:radial-gradient(circle at 50% 45%,rgba(117,20,48,.23),transparent 33rem),linear-gradient(145deg,#070406,#10070a 55%,#050304);clip-path:circle(150% at 50% 52%);place-items:center}.intro__aurora{position:absolute;top:50%;left:50%;width:min(80vw,55rem);aspect-ratio:1;background:radial-gradient(circle at 36% 35%,rgba(239,111,145,.22),transparent 28%),radial-gradient(circle at 64% 65%,rgba(216,181,116,.14),transparent 26%);filter:blur(55px);border-radius:50%;transform:translate(-50%,-50%);animation:aurora-breathe 8s ease-in-out infinite alternate}.intro__grain{position:absolute;inset:0;opacity:.11;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.02) 1px,transparent 1px);background-size:4rem 4rem;mask-image:radial-gradient(circle,#000 20%,transparent 75%)}.intro__orbits{position:absolute;top:50%;left:50%;width:min(82vw,48rem);aspect-ratio:1;transform:translate(-50%,-50%)}.intro__orbits span{position:absolute;inset:7%;border:1px solid rgba(216,181,116,.13);border-radius:50%;animation:intro-orbit 24s linear infinite}.intro__orbits span:after{position:absolute;top:14%;right:14%;width:.36rem;height:.36rem;content:"";background:var(--color-rose);border-radius:50%;box-shadow:0 0 1.2rem var(--color-rose)}.intro__orbits span:nth-child(2){inset:17%;animation-direction:reverse;animation-duration:18s}.intro__orbits span:nth-child(3){inset:-5%;border-style:dashed;opacity:.42;animation-duration:34s}.intro__content{position:relative;z-index:2;display:flex;width:min(90vw,63rem);padding:clamp(1.4rem,4vw,3rem);align-items:center;flex-direction:column;text-align:center}.intro__eyebrow{display:flex;align-items:center;gap:.8rem;margin-bottom:1.75rem;color:#f4e2c2b8;font-size:.65rem;font-weight:700;letter-spacing:.28em;text-transform:uppercase}.eyebrow-line{width:clamp(1.5rem,5vw,4rem);height:1px;background:linear-gradient(90deg,transparent,var(--color-gold))}.eyebrow-line:last-child{background:linear-gradient(90deg,var(--color-gold),transparent)}.intro__heart{margin-bottom:.7rem;color:var(--color-rose);font-size:1.25rem;filter:drop-shadow(0 0 14px rgba(239,111,145,.7));animation:heart-pulse 2.4s ease-in-out infinite}.intro__title{max-width:13ch;font-family:var(--font-display);font-size:clamp(3rem,7vw,7.9rem);font-weight:400;letter-spacing:-.052em;line-height:.91;text-wrap:balance}.intro__subtitle{max-width:37rem;margin-top:1.6rem;color:#fff8f396;font-family:var(--font-display);font-size:clamp(1rem,1.8vw,1.35rem);font-style:italic;line-height:1.6}.music-consent{display:inline-flex;margin-top:1.7rem;padding:.65rem .9rem;align-items:center;gap:.7rem;color:#fff8f3b8;cursor:pointer;background:#ffffff09;border:1px solid rgba(255,255,255,.08);border-radius:999px;backdrop-filter:blur(12px)}.music-consent input{position:absolute;opacity:0;pointer-events:none}.music-consent__switch{position:relative;width:2rem;height:1.05rem;background:#ffffff1f;border:1px solid rgba(255,255,255,.12);border-radius:1rem;transition:background .22s ease}.music-consent__switch:after{position:absolute;top:.15rem;left:.16rem;width:.65rem;height:.65rem;content:"";background:#ffffffb3;border-radius:50%;transition:transform .25s var(--ease-out),background .25s ease}.music-consent input:checked+.music-consent__switch{background:#ef6f9173}.music-consent input:checked+.music-consent__switch:after{background:#fff;transform:translate(.84rem)}.music-consent input:focus-visible+.music-consent__switch{outline:2px solid var(--color-champagne);outline-offset:3px}.music-consent>span:last-child{display:grid;gap:.08rem;text-align:left}.music-consent strong{font-size:.68rem;font-weight:650;letter-spacing:.04em}.music-consent small{color:#fff8f36b;font-size:.58rem}.intro__open{min-width:min(100%,18rem);margin-top:1.1rem}.button__heart{font-size:.95rem;animation:heart-pulse 1.7s ease-in-out infinite}.intro__hint{margin-top:1.1rem;color:#fff8f347;font-family:var(--font-display);font-size:.72rem;font-style:italic;letter-spacing:.04em}.intro__corner{position:absolute;width:8rem;height:8rem;border-color:#d8b5742e}.intro__corner--top{top:1.5rem;left:1.5rem;border-top:1px solid;border-left:1px solid}.intro__corner--bottom{right:1.5rem;bottom:1.5rem;border-right:1px solid;border-bottom:1px solid}.music-dock{position:fixed;bottom:max(1rem,env(safe-area-inset-bottom));left:max(1rem,env(safe-area-inset-left));z-index:75;display:flex;min-width:17rem;padding:.55rem;align-items:center;gap:.6rem;background:#0d0709c7;border:1px solid rgba(255,255,255,.09);border-radius:999px;box-shadow:0 1rem 4rem #00000057;opacity:0;pointer-events:none;transform:translateY(1rem);backdrop-filter:blur(18px);transition:opacity .4s ease,transform .4s var(--ease-out)}.music-dock.is-visible{opacity:1;pointer-events:auto;transform:translateY(0)}.music-dock__playing{display:flex;width:2.2rem;height:2.2rem;align-items:center;justify-content:center;gap:2px;color:var(--color-rose);background:#ef6f911a;border-radius:50%}.music-dock__playing i{width:2px;height:.35rem;background:currentColor;border-radius:1rem;transform-origin:center}.music-dock.is-playing .music-dock__playing i{animation:music-bars .7s ease-in-out infinite alternate}.music-dock__playing i:nth-child(2){animation-delay:-.4s}.music-dock__playing i:nth-child(3){animation-delay:-.2s}.music-dock__playing i:nth-child(4){animation-delay:-.55s}.music-dock__meta{display:grid;min-width:6.3rem;gap:.07rem}.music-dock__meta span{font-family:var(--font-display);font-size:.76rem}.music-dock__meta small{color:#fff8f366;font-size:.55rem;letter-spacing:.08em;text-transform:uppercase}.music-dock .icon-button{width:2.15rem;height:2.15rem}.music-icon--pause,.music-icon--muted,.music-dock.is-playing .music-icon--play,.music-dock.is-muted .music-icon--volume{display:none}.music-dock.is-playing .music-icon--pause,.music-dock.is-muted .music-icon--muted{display:block}.music-dock.has-error .music-dock__playing{color:#ffffff59}.birthday{padding-block:clamp(5rem,10vh,8rem);background:radial-gradient(circle at 78% 44%,rgba(154,25,62,.18),transparent 28rem),linear-gradient(145deg,#090507,#14070b 58%,#090507)}.scene__glow{position:absolute;width:35rem;aspect-ratio:1;filter:blur(80px);border-radius:50%;opacity:.15}.scene__glow--rose{right:-10rem;bottom:-12rem;background:var(--color-red)}.birthday__layout{display:grid;align-items:center;grid-template-columns:minmax(0,1.06fr) minmax(20rem,.94fr);gap:clamp(3rem,8vw,9rem)}.birthday__date{margin-bottom:.9rem;color:#fff8f361;font-family:var(--font-display);font-size:.9rem;font-style:italic}.birthday__message{margin-top:1.8rem}.birthday__actions{display:flex;margin-top:2.2rem;align-items:center;flex-wrap:wrap;gap:1.4rem}.birthday__hearts span{position:absolute;z-index:0;color:#ef6f911f;font-size:clamp(1rem,3vw,2.5rem);animation:floating-heart 7s ease-in-out infinite}.birthday__hearts span:nth-child(1){top:18%;left:8%;animation-delay:-1s}.birthday__hearts span:nth-child(2){top:67%;left:5%;animation-delay:-3.5s}.birthday__hearts span:nth-child(3){top:15%;right:9%;animation-delay:-5s}.birthday__hearts span:nth-child(4){right:18%;bottom:10%;animation-delay:-2s}.birthday__hearts span:nth-child(5){top:47%;left:49%;animation-delay:-4s;font-size:.9rem}.birthday-confetti{position:absolute;inset:0;z-index:5;overflow:hidden;pointer-events:none}.birthday-confetti i{position:absolute;top:-1rem;left:var(--x);width:.38rem;height:.8rem;border-radius:1px;animation:confetti-fall var(--duration) var(--delay) ease-in forwards}.birthday-confetti i.is-round{width:.5rem;height:.5rem;border-radius:50%}.cake-stage{position:relative;display:grid;min-height:33rem;place-items:center}.cake-stage__halo{position:absolute;top:46%;left:50%;width:min(30rem,100%);aspect-ratio:1;background:radial-gradient(circle,rgba(239,111,145,.17),transparent 63%);border:1px solid rgba(216,181,116,.08);border-radius:50%;transform:translate(-50%,-50%)}.cake-stage__halo:before,.cake-stage__halo:after{position:absolute;inset:12%;content:"";border:1px dashed rgba(216,181,116,.1);border-radius:50%;animation:intro-orbit 30s linear infinite}.cake-stage__halo:after{inset:27%;animation-direction:reverse;animation-duration:18s}.cake{position:relative;width:min(100%,23rem);height:24rem;margin-top:2rem;filter:drop-shadow(0 2rem 2rem rgba(0,0,0,.48))}.cake__tier{position:absolute;left:50%;overflow:hidden;background:radial-gradient(circle at 25% 20%,rgba(255,255,255,.2),transparent 15%),linear-gradient(90deg,#7d1633,#bd3458 46%,#7e122f);border:1px solid rgba(255,183,201,.2);border-radius:.8rem .8rem 1.3rem 1.3rem;box-shadow:inset 0 -1rem 1.8rem #3e031352;transform:translate(-50%)}.cake__tier--top{top:6.4rem;width:48%;height:4.2rem;z-index:3}.cake__tier--middle{top:10rem;width:68%;height:5.2rem;z-index:2}.cake__tier--bottom{top:14.5rem;width:88%;height:6.3rem;z-index:1}.cake__icing{position:absolute;inset:0 0 auto;height:1rem;background:linear-gradient(90deg,#fff0e6,#f8d7ca 60%,#eabeb2);box-shadow:0 .35rem .7rem #4407162e}.cake__icing:before,.cake__icing:after{position:absolute;top:.55rem;width:1.2rem;height:1.4rem;content:"";background:#f5d2c7;border-radius:0 0 1rem 1rem}.cake__icing:before{left:18%}.cake__icing:after{right:23%;height:.9rem}.cake__pearls{position:absolute;top:1.8rem;left:10%;width:.35rem;height:.35rem;background:var(--color-champagne);border-radius:50%;box-shadow:2rem 0 var(--color-champagne),4rem 0 var(--color-champagne),6rem 0 var(--color-champagne),8rem 0 var(--color-champagne),10rem 0 var(--color-champagne),12rem 0 var(--color-champagne),14rem 0 var(--color-champagne);opacity:.56}.cake__plate{position:absolute;bottom:2rem;left:50%;z-index:0;width:100%;height:1.3rem;background:linear-gradient(#f0d9ad,#93703f);border-radius:50%;box-shadow:0 1rem 2rem #00000061;transform:translate(-50%)}.cake__candles{position:absolute;top:2rem;left:50%;z-index:5;display:flex;width:8rem;justify-content:space-between;transform:translate(-50%)}.candle{position:relative;width:.42rem;height:4.5rem;background:repeating-linear-gradient(135deg,#f9dfb5 0 .42rem,#b83655 .42rem .8rem);border-radius:.2rem;box-shadow:inset 2px 0 #fff3}.candle--two{height:5rem;margin-top:-.5rem}.flame{position:absolute;bottom:calc(100% + .2rem);left:50%;width:1rem;height:1.7rem;background:radial-gradient(circle at 50% 74%,#fff 0 10%,#ffd369 28%,#f36a34 62%,transparent 65%);border-radius:60% 40% 58% 42%/70% 60% 40% 30%;filter:drop-shadow(0 0 .8rem rgba(255,179,73,.9));transform:translate(-50%) rotate(4deg);transform-origin:center bottom;animation:candle-flicker .16s ease-in-out infinite alternate;transition:opacity .4s ease,transform .4s ease}.wish-made .flame{opacity:0;transform:translate(-50%) scale(.1)}.cake-stage__wish{position:absolute;bottom:0;left:50%;width:100%;color:#fff8f380;font-family:var(--font-display);font-size:.9rem;font-style:italic;text-align:center;transform:translate(-50%)}.gallery{min-height:auto;padding-block:clamp(6rem,11vh,9rem);background:radial-gradient(circle at 50% 35%,rgba(71,11,28,.4),transparent 34rem),#070406}.gallery__ambient{position:absolute;inset:0;background-image:linear-gradient(rgba(216,181,116,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(216,181,116,.02) 1px,transparent 1px);background-size:5rem 5rem;mask-image:linear-gradient(transparent,#000 25%,#000 75%,transparent)}.gallery__heading{display:grid;margin-bottom:3rem;justify-items:center;text-align:center}.gallery__heading .display-title{max-width:19ch;font-size:clamp(2.7rem,5.3vw,6rem)}.gallery__heading .scene__body{margin-top:1.5rem}.gallery-shell{position:relative;z-index:3;width:min(calc(100% - 2 * var(--page-gutter)),96rem)}.gallery-viewport{position:relative;height:min(70rem,74svh);min-height:39rem;overflow:hidden;cursor:grab;background:radial-gradient(circle at 50% 48%,rgba(117,26,49,.18),transparent 42%),#0a050794;border:1px solid rgba(216,181,116,.14);border-radius:clamp(1.1rem,2.5vw,2.2rem);box-shadow:0 2.5rem 8rem #00000094,inset 0 1px #ffffff09;touch-action:none}.gallery-viewport:focus-visible{outline-offset:6px}.gallery-canvas{width:100%;height:100%;max-width:none;cursor:grab}.gallery-canvas.is-dragging{cursor:grabbing}.gallery-viewport__vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,rgba(7,4,6,.58),transparent 14%,transparent 86%,rgba(7,4,6,.58)),linear-gradient(rgba(7,4,6,.42),transparent 20%,transparent 80%,rgba(7,4,6,.5))}.gallery-loading{position:absolute;inset:0;z-index:8;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:.7rem;color:#fff8f3a8;background:#070406e8;font-family:var(--font-display);font-style:italic;pointer-events:none;transition:opacity .7s ease,visibility .7s ease}.gallery-loading.is-complete{opacity:0;visibility:hidden}.gallery-loading__ring{width:3.6rem;height:3.6rem;border:1px solid rgba(255,255,255,.09);border-top-color:var(--color-rose);border-right-color:var(--color-gold);border-radius:50%;animation:intro-orbit 1.3s linear infinite}.gallery-loading strong{color:var(--color-gold);font-family:var(--font-body);font-size:.65rem;letter-spacing:.18em}.gallery-gesture{position:absolute;top:1.4rem;left:50%;display:flex;padding:.55rem .8rem;align-items:center;gap:.45rem;color:#fff8f373;background:#0905078c;border:1px solid rgba(255,255,255,.08);border-radius:999px;font-size:.6rem;letter-spacing:.12em;pointer-events:none;text-transform:uppercase;transform:translate(-50%);backdrop-filter:blur(8px)}.gallery-gesture svg{width:.9rem;height:.9rem}.gallery-controls{position:relative;z-index:5;display:flex;width:min(calc(100% - 2rem),28rem);margin:-2rem auto 0;padding:.55rem;align-items:center;justify-content:space-between;gap:.5rem;background:#11080be0;border:1px solid rgba(255,255,255,.1);border-radius:999px;box-shadow:0 1rem 3rem #0006;backdrop-filter:blur(18px)}.gallery-controls__open{display:flex;padding:.4rem .8rem;align-items:center;gap:.7rem;color:var(--color-champagne);background:transparent;font-size:.64rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}.gallery-controls__open svg{width:.95rem;height:.95rem}.gallery-controls__index{display:grid;width:2.25rem;height:2.25rem;color:var(--color-rose);background:#ef6f911a;border-radius:50%;place-items:center;font-family:var(--font-display);font-size:.8rem}.gallery__count{margin-top:1.3rem;color:#fff8f352;font-family:var(--font-display);font-size:.82rem;font-style:italic;text-align:center}.gallery__count span{color:var(--color-gold)}.gallery-fallback{position:absolute;inset:0;z-index:7;overflow:auto;padding:2rem;background:#0d0709;cursor:default;touch-action:auto}.gallery-fallback>p{margin-bottom:1.4rem;color:#fff8f3a6;text-align:center}.gallery-fallback__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));gap:1rem}.gallery-fallback__card{padding:.5rem;color:var(--color-ivory);background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:.6rem;cursor:pointer}.gallery-fallback__card img{width:100%;aspect-ratio:4 / 5;object-fit:cover;border-radius:.35rem}.gallery-fallback__card span{display:block;padding:.65rem .25rem .25rem;font-family:var(--font-display);font-size:.85rem}.photo-detail{position:fixed;inset:0;z-index:200;display:grid;padding:clamp(1rem,4vw,3rem);opacity:0;visibility:hidden;place-items:center;transition:opacity .45s ease,visibility .45s ease}.photo-detail.is-open{opacity:1;visibility:visible}.photo-detail__backdrop{position:absolute;inset:0;background:#040203e0;backdrop-filter:blur(18px)}.photo-detail__panel{position:relative;display:grid;width:min(100%,72rem);max-height:min(88svh,55rem);overflow:hidden;background:linear-gradient(145deg,#240f15f7,#0c0709fa);border:1px solid rgba(216,181,116,.2);border-radius:1.5rem;box-shadow:0 3rem 10rem #000000bf;grid-template-columns:minmax(0,1.3fr) minmax(18rem,.7fr);transform:translateY(2rem) scale(.97);transition:transform .55s var(--ease-out)}.photo-detail.is-open .photo-detail__panel{transform:translateY(0) scale(1)}.photo-detail__close{position:absolute;top:1rem;right:1rem;z-index:4;background:#070406a8;backdrop-filter:blur(10px)}.photo-detail__media{position:relative;display:grid;min-height:34rem;overflow:hidden;background:#090507;place-items:center}.photo-detail__media img{width:100%;height:100%;max-height:88svh;object-fit:contain}.photo-detail__media:after{position:absolute;inset:0;content:"";pointer-events:none;box-shadow:inset 0 0 4rem #00000047}.photo-detail__number{position:absolute;bottom:1rem;left:1rem;z-index:2;color:#fff8f3b3;font-family:var(--font-display);font-size:.8rem;letter-spacing:.18em;text-shadow:0 2px 15px #000}.photo-detail__missing{display:grid;color:#fff8f373;gap:.8rem;place-items:center;font-size:.8rem}.photo-detail__missing[hidden]{display:none}.photo-detail__copy{display:flex;padding:clamp(2rem,5vw,4rem);justify-content:center;flex-direction:column}.photo-detail__eyebrow{margin-bottom:1rem;color:var(--color-gold);font-size:.6rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase}.photo-detail__copy h3{font-family:var(--font-display);font-size:clamp(2.2rem,4vw,4.5rem);font-weight:400;letter-spacing:-.04em;line-height:.98}.photo-detail__copy>p:not(.photo-detail__eyebrow){margin-top:1.4rem;color:#fff8f39c;line-height:1.7}.photo-detail__copy time{margin-top:1rem;color:#d8b57494;font-family:var(--font-display);font-style:italic}.photo-detail__nav{display:flex;margin-top:auto;padding-top:3rem;align-items:center;justify-content:space-between;gap:.7rem}.photo-detail__nav>span{color:#fff8f357;font-family:var(--font-display);font-size:.75rem;white-space:nowrap}.letter{min-height:auto;padding-block:clamp(7rem,12vh,11rem);background:radial-gradient(circle at 20% 20%,rgba(216,181,116,.08),transparent 25rem),linear-gradient(145deg,#12080b,#200a11 55%,#0d0608)}.letter__wash{position:absolute;inset:0;background-image:linear-gradient(115deg,transparent 0 48%,rgba(255,255,255,.018) 48% 49%,transparent 49% 100%);background-size:4rem 4rem;opacity:.6}.letter__layout{display:grid;align-items:center;grid-template-columns:minmax(0,.9fr) minmax(20rem,1.1fr);column-gap:clamp(3rem,8vw,9rem)}.letter__heading .display-title{font-size:clamp(2.8rem,5.4vw,6.2rem)}.letter__heading .scene__body{margin-top:1.7rem}.envelope-scene{display:grid;min-height:29rem;place-items:center}.envelope{position:relative;width:min(90%,29rem);aspect-ratio:1.48;filter:drop-shadow(0 2.4rem 2.2rem rgba(0,0,0,.4));perspective:900px}.envelope__back,.envelope__front,.envelope__flap{position:absolute;inset:0;border-radius:.45rem}.envelope__back{background:linear-gradient(145deg,#e9cfb3,#b98f76)}.envelope__front{z-index:3;overflow:hidden;background:linear-gradient(34deg,#d8b99c 49.5%,transparent 50%) 0 100% / 50.2% 100% no-repeat,linear-gradient(-34deg,#caa589 49.5%,transparent 50%) 100% 100% / 50.2% 100% no-repeat}.envelope__flap{z-index:4;background:linear-gradient(150deg,#f1d7bb,#c9a486);clip-path:polygon(0 0,100% 0,50% 72%);transform-origin:top;transition:transform .9s var(--ease-out),z-index 0ms .42s}.envelope__paper-preview{position:absolute;inset:8% 7%;z-index:2;display:grid;padding-top:16%;align-content:start;justify-items:center;color:#3d1f25;background:#fff9ef;border-radius:.2rem;box-shadow:0 .5rem 1rem #270c1329;font-family:var(--font-display);transition:transform .9s var(--ease-out)}.envelope__paper-preview span{font-size:clamp(1.4rem,3vw,2.4rem)}.envelope__paper-preview small{margin-top:.3rem;color:#9d5266;font-style:italic}.envelope__seal{position:absolute;top:57%;left:50%;z-index:5;display:grid;width:3.3rem;height:3.3rem;color:#f5d8a8;background:radial-gradient(circle at 35% 30%,#c64b69,#7e102f);border:3px double rgba(255,219,166,.44);border-radius:50%;box-shadow:0 .4rem .8rem #41061761;place-items:center;font-family:var(--font-display);font-size:1.2rem;transform:translate(-50%,-50%);transition:opacity .35s ease,transform .5s var(--ease-out)}.envelope__button{margin-top:-2rem}.letter-open .envelope__flap{z-index:1;transform:rotateX(180deg)}.letter-open .envelope__paper-preview{transform:translateY(-30%)}.letter-open .envelope__seal{opacity:0;transform:translate(-50%,-50%) scale(.7)}.letter-open .envelope__button{opacity:0;pointer-events:none}.letter-paper{position:relative;z-index:5;display:none;width:min(100%,55rem);margin:4rem auto 0;padding:clamp(2rem,6vw,5rem);color:#321b20;background:linear-gradient(rgba(154,84,99,.045) 1px,transparent 1px),#fff9ef;background-size:100% 2rem;border:1px solid rgba(216,181,116,.5);border-radius:.5rem;box-shadow:0 3rem 8rem #00000059;grid-column:1 / -1}.letter-open .letter-paper{display:block}.letter-paper:before{position:absolute;inset:1rem;content:"";border:1px solid rgba(157,82,102,.18);pointer-events:none}.letter-paper__ornament{margin-bottom:2rem;color:#a62e50;font-size:1rem;text-align:center}.letter-paper__content{position:relative;z-index:1}.letter-paper__content p{margin-bottom:1.3rem;font-family:var(--font-display);font-size:clamp(1.05rem,1.6vw,1.27rem);line-height:1.78}.letter-paper__content p:first-child{font-size:clamp(1.5rem,2.5vw,2.2rem)}.letter-paper__content p:last-child{margin-top:2rem;margin-bottom:0;color:#8f2f4b;font-style:italic}.letter-paper__close{position:relative;z-index:2;display:flex;margin:2rem auto 0;padding:.65rem 1rem;align-items:center;gap:.45rem;color:#70424d;background:transparent;border:1px solid rgba(112,66,77,.2);border-radius:999px;cursor:pointer;font-size:.65rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.letter-paper__close svg{width:.9rem}.letter__continue{margin-top:2.5rem;text-align:center;grid-column:1 / -1}.future{padding-block:clamp(6rem,12vh,10rem);background:radial-gradient(circle at 50% 15%,rgba(166,196,226,.1),transparent 23rem),linear-gradient(#08080f,#0b0810 52%,#160911)}.starfield{position:absolute;inset:0}.starfield i{position:absolute;top:var(--y);left:var(--x);width:var(--size);height:var(--size);background:#fff;border-radius:50%;box-shadow:0 0 .8rem #dae5ffd9;opacity:.25;animation:star-twinkle 3.2s var(--delay) ease-in-out infinite alternate}.future__moon{position:absolute;top:8%;right:10%;width:clamp(5rem,10vw,9rem);aspect-ratio:1;background:radial-gradient(circle at 38% 32%,#fffdf1,#cbd2dd 70%,#7b8191);border-radius:50%;box-shadow:0 0 4rem #d4e0f633,0 0 12rem #bccde91f}.future__moon span{position:absolute;top:25%;left:20%;width:20%;aspect-ratio:1;background:#646d7e29;border-radius:50%;box-shadow:2.5rem 1.8rem 0 -.3rem #646d7e21,1rem 3.6rem 0 -.4rem #646d7e1f}.future__horizon{position:absolute;right:-10%;bottom:-17%;left:-10%;height:35%;background:radial-gradient(ellipse at 50% 0%,rgba(126,26,57,.4),transparent 55%);border-top:1px solid rgba(239,111,145,.1);border-radius:50% 50% 0 0}.future__content{display:flex;align-items:center;flex-direction:column;text-align:center}.future__content .display-title{max-width:18ch;font-size:clamp(3rem,6.5vw,7rem)}.future__content .scene__body{max-width:36rem;margin-top:2rem;color:#fff8f394}.future__content .button{margin-top:2.2rem}.future__quote{position:absolute;bottom:1.5rem;left:50%;color:#fff8f329;font-family:var(--font-display);font-size:clamp(2rem,6vw,6rem);font-style:italic;white-space:nowrap;transform:translate(-50%)}.finale{min-height:100svh;padding-block:6rem;background:radial-gradient(circle at 50% 48%,rgba(159,25,63,.24),transparent 25rem),#060304}.finale__canvas,.finale__vignette{position:absolute;inset:0;width:100%;height:100%}.finale__canvas{z-index:1}.finale__vignette{z-index:2;pointer-events:none;background:radial-gradient(circle,transparent 28%,rgba(4,2,3,.6) 100%)}.finale__content{position:relative;z-index:3;display:flex;width:min(90%,70rem);align-items:center;flex-direction:column;text-align:center}.finale__lead{color:var(--color-champagne);font-family:var(--font-display);font-size:clamp(1rem,2vw,1.4rem);font-style:italic;letter-spacing:.03em}.glowing-heart{position:relative;display:grid;width:clamp(10rem,20vw,15rem);aspect-ratio:1;margin:1.4rem 0 .6rem;place-items:center}.glowing-heart>span{color:#e74e75;font-size:clamp(5rem,10vw,8rem);filter:drop-shadow(0 0 1.4rem rgba(231,78,117,.65)) drop-shadow(0 0 4rem rgba(161,20,57,.4));animation:finale-heart 2.2s ease-in-out infinite}.glowing-heart__orbit{position:absolute;inset:0;border:1px solid rgba(239,111,145,.17);border-radius:50%;animation:finale-orbit 4s ease-in-out infinite}.glowing-heart__orbit--two{inset:14%;border-color:#d8b57433;animation-delay:-1.3s}.finale__title{max-width:12ch;font-family:var(--font-display);font-size:clamp(3.5rem,9vw,9rem);font-weight:400;letter-spacing:-.06em;line-height:.88;text-wrap:balance}.finale__signature{margin-top:1.3rem;color:var(--color-champagne);font-family:var(--font-display);font-size:clamp(1rem,2vw,1.45rem);font-style:italic}.finale__signature span{color:var(--color-rose)}.finale__rule{display:flex;margin:1.6rem 0;align-items:center;gap:.8rem;color:#d8b57480}.finale__rule i{width:clamp(2rem,7vw,5rem);height:1px;background:linear-gradient(90deg,transparent,currentColor)}.finale__rule i:last-child{background:linear-gradient(90deg,currentColor,transparent)}}@layer responsive{@media(max-width:900px){.birthday__layout,.letter__layout{grid-template-columns:1fr}.birthday__copy,.letter__heading{display:flex;align-items:center;flex-direction:column;text-align:center}.birthday__message,.letter__heading .scene__body{text-align:center}.birthday__actions{justify-content:center}.cake-stage{min-height:30rem}.letter__heading{margin-bottom:3rem}.letter__heading .display-title{max-width:16ch}.envelope-scene{min-height:25rem}.photo-detail__panel{overflow-y:auto;grid-template-columns:1fr}.photo-detail__media{min-height:48svh;max-height:55svh}.photo-detail__copy{padding:2rem}.photo-detail__nav{padding-top:2rem}}@media(max-width:720px){:root{--page-gutter: 1.1rem}.scene-nav{top:auto;right:50%;bottom:max(.8rem,env(safe-area-inset-bottom));display:flex;padding:.2rem .45rem;background:#0a0507c7;border:1px solid rgba(255,255,255,.08);border-radius:999px;transform:translate(50%) translateY(1rem);backdrop-filter:blur(12px)}.experience-started .scene-nav{transform:translate(50%) translateY(0)}.scene-nav button span{display:none}.music-dock{bottom:auto;top:max(.75rem,env(safe-area-inset-top));min-width:0;padding:.4rem}.music-dock__meta{display:none}.music-dock__playing,.music-dock .icon-button{width:2rem;height:2rem}.intro__content{width:100%}.intro__eyebrow{margin-bottom:1.2rem;font-size:.56rem;letter-spacing:.19em}.intro__title{font-size:clamp(2.8rem,14vw,5.2rem)}.intro__subtitle{margin-top:1.1rem;font-size:.96rem}.music-consent{margin-top:1.2rem}.intro__corner{width:4rem;height:4rem}.intro__corner--top{top:.8rem;left:.8rem}.intro__corner--bottom{right:.8rem;bottom:.8rem}.display-title{font-size:clamp(2.7rem,13vw,4.6rem)}.birthday{padding-block:6rem}.birthday__layout{gap:2rem}.birthday__actions{flex-direction:column}.cake-stage{min-height:26rem}.cake{width:19rem;height:22rem;transform:scale(.9)}.cake-stage__wish{bottom:-.5rem;padding-inline:1rem;font-size:.82rem}.gallery{padding-block:6rem 7rem}.gallery__heading{margin-bottom:2rem}.gallery__heading .display-title{font-size:clamp(2.55rem,11.5vw,4rem)}.gallery-viewport{height:68svh;min-height:32rem;border-radius:1rem}.gallery-controls{width:calc(100% - 1rem);margin-top:-1.5rem}.gallery-controls__open{gap:.45rem;padding-inline:.3rem;font-size:.56rem;letter-spacing:.07em}.gallery-controls__index{width:1.9rem;height:1.9rem;font-size:.7rem}.gallery-gesture{top:.8rem}.photo-detail{padding:.6rem}.photo-detail__panel{max-height:94svh;border-radius:1rem}.photo-detail__media{min-height:52svh;max-height:58svh}.photo-detail__copy h3{font-size:2.45rem}.photo-detail__copy{padding:1.5rem}.photo-detail__nav .text-button{font-size:0;width:2.6rem;height:2.6rem;justify-content:center;border:1px solid rgba(255,255,255,.1);border-radius:50%}.photo-detail__nav .text-button svg{width:1.1rem;height:1.1rem}.letter{padding-block:7rem 8rem}.letter__heading .display-title{font-size:clamp(2.65rem,12vw,4rem)}.envelope-scene{min-height:21rem}.envelope{width:100%}.envelope__button{margin-top:-1.2rem}.letter-paper{margin-top:3rem;padding:2.3rem 1.5rem}.future__moon{top:10%;right:-1rem;opacity:.72}.future__content .display-title{font-size:clamp(2.7rem,12.5vw,4.7rem)}.future__content .scene__body{max-width:21rem}.finale{padding-block:6rem 8rem}.finale__lead{max-width:20rem}.glowing-heart{margin-top:.7rem}.finale__title{font-size:clamp(3.5rem,16vw,5.8rem)}.scene-number{display:none}}@media(max-width:420px){.button{min-height:3.35rem;padding-inline:1.05rem;font-size:.66rem}.music-consent{padding:.55rem .7rem}.cake{width:17rem;transform:scale(.86)}.gallery-viewport{height:62svh}.gallery-controls__open>span:nth-child(2){display:none}.gallery-controls__open{padding-inline:1rem}.envelope-scene{min-height:18rem}}}@layer motion{@keyframes aurora-breathe{0%{opacity:.7;transform:translate(-50%,-50%) scale(.9) rotate(-5deg)}to{opacity:1;transform:translate(-50%,-50%) scale(1.1) rotate(5deg)}}@keyframes intro-orbit{to{transform:rotate(360deg)}}@keyframes heart-pulse{0%,to{transform:scale(1)}45%{transform:scale(1.13)}}@keyframes music-bars{0%{transform:scaleY(.5)}to{transform:scaleY(1.7)}}@keyframes floating-heart{0%,to{opacity:.08;transform:translateY(0) rotate(-8deg)}50%{opacity:.24;transform:translateY(-1.8rem) rotate(8deg)}}@keyframes confetti-fall{0%{opacity:0;transform:translate3d(0,-1rem,0) rotate(0)}8%{opacity:1}to{opacity:0;transform:translate3d(var(--drift),110vh,0) rotate(var(--spin))}}@keyframes candle-flicker{0%{transform:translate(-50%) rotate(-4deg) scaleY(.93)}to{transform:translate(-50%) rotate(5deg) scaleY(1.06)}}@keyframes star-twinkle{0%{opacity:.15;transform:scale(.8)}to{opacity:.75;transform:scale(1.3)}}@keyframes finale-heart{0%,to{transform:scale(1)}35%{transform:scale(1.08)}48%{transform:scale(1)}60%{transform:scale(1.04)}}@keyframes finale-orbit{0%,to{opacity:.25;transform:scale(.82)}50%{opacity:.75;transform:scale(1.1)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.reveal:not(.is-visible){opacity:1}}}
