:root{color-scheme:dark;--bg:#12030e;--rose:#d78da9;--cream:#f2e4e9;--muted:#a0919c;--serif:'Cormorant Garamond',Georgia,serif;--sans:'Jost',sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-color:#704051 var(--bg)}body{margin:0;background:#000;color:var(--cream);font-family:var(--sans);font-weight:300}.locked{overflow:hidden}[hidden]{display:none!important}button,a,input{-webkit-tap-highlight-color:transparent}button{color:inherit;font:inherit;cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #ffb8d2;outline-offset:6px}button{touch-action:manipulation}p,h1,h2,h3,figure{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:400}em{color:var(--rose);font-weight:400}button svg{width:18px;height:18px;fill:currentColor;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.entrance{position:fixed;inset:0;z-index:20;background:#000;overflow:hidden}.start-screen{position:absolute;inset:0;display:grid;place-items:center;background:#000;z-index:3}.start-button{border:1px solid #f791a2;background:linear-gradient(110deg,#ff4f76,#ed6585);font-family:var(--sans);font-size:28px;font-weight:400;letter-spacing:1px;padding:15px 58px;border-radius:24px;color:white;box-shadow:0 0 18px #ff477f65,inset 0 1px 2px #ffffff60;transition:transform .2s,box-shadow .2s}.start-button:hover{transform:scale(1.03);box-shadow:0 0 27px #ff477f80}.start-button:active{transform:scale(.98)}.floral-screen{position:absolute;inset:0;background:#030205;opacity:0;transition:opacity .65s}.floral-screen.active{opacity:1}#floral-art{width:100%;height:100%;display:block}.floral-camera{transform-origin:65% 65%;animation:camera-drift 10s ease-in-out both}.vine{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw-vine 2s cubic-bezier(.22,.6,.4,1) both;animation-delay:var(--delay)}.floral-leaf,.floral-blossom{opacity:0;transform-box:fill-box;transform-origin:center;animation:flower-grow 1.1s ease-out both;animation-delay:var(--delay)}.floral-ring{fill:none;stroke:#eb78aa;opacity:0;transform-box:fill-box;transform-origin:center;animation:ring-grow 5.5s ease-out both;animation-delay:var(--delay)}.floral-spark{animation:sparkle 2s ease-in-out infinite alternate;animation-delay:var(--delay);fill:#ffe9f5}.gift-screen{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 45%,#641338 0,#370820 42%,#170511 100%);display:grid;place-items:center;opacity:0;transition:opacity .85s}.gift-screen.active{opacity:1}.gift-button{position:relative;background:none;border:0;display:flex;align-items:center;flex-direction:column;padding:50px;z-index:2}.gift-box{display:block;position:relative;width:122px;height:116px;filter:drop-shadow(0 14px 8px #08000870);animation:gift-float 3s ease-in-out infinite}.gift-body{position:absolute;inset:23px 4px 0;background:linear-gradient(90deg,#b52156,#e24076 48%,#a7194d);border-radius:2px 2px 5px 5px;box-shadow:inset 0 -5px 4px #8d113d,inset 0 3px 5px #6c073e}.gift-body:before,.gift-lid:before{content:'';position:absolute;width:12px;inset:0 auto 0 47%;background:linear-gradient(90deg,#db9c30,#ffe879,#d8a231)}.gift-body:after{content:'';position:absolute;left:0;right:0;top:40%;height:11px;background:linear-gradient(#ffe575,#dca33c)}.gift-lid{position:absolute;top:10px;left:0;right:0;height:26px;border-radius:3px;background:linear-gradient(#f16b96,#ce3167);border-bottom:4px solid #f3bd4e;box-shadow:0 4px 5px #580c4260;transform-origin:80% 50%}.bow{position:absolute;top:-15px;width:31px;height:21px;border:7px solid #edc34e;background:#b48223;border-radius:60% 60% 40% 60%;box-shadow:inset 0 2px 2px #654016,0 1px 2px #ffec91}.bow-left{left:31px;transform:rotate(22deg)}.bow-right{left:58px;transform:rotate(-22deg)}.gift-label{display:block;margin-top:26px;font-family:var(--serif);font-style:italic;font-size:16px;color:#d68aa6;letter-spacing:1px}.gift-label small{display:block;margin-top:9px;font:10px var(--sans);letter-spacing:2px;color:#bf7d99}.opening .gift-box{animation:gift-shake .5s ease-in-out}.opening .gift-lid{animation:lid-open 1.2s .35s cubic-bezier(.25,.6,.4,1) both}.opening .gift-label{opacity:0;transition:opacity .3s}.gift-particle{position:absolute;left:50%;top:50%;font-size:30px;animation:gift-burst 2.3s cubic-bezier(.1,.4,.4,1) both;animation-delay:var(--delay)}.gift-stars i{position:absolute;width:3px;height:3px;border-radius:50%;background:#efb1c7;box-shadow:0 0 7px #efb1c7;animation:sparkle 2.3s infinite alternate}.flash{pointer-events:none;position:absolute;inset:0;background:#fff6f5;opacity:0;z-index:5}.flash.active{animation:flash 1.1s ease-in-out both}
body[data-stage=main]{background:var(--bg)}main{position:relative;z-index:1;overflow:hidden;background:radial-gradient(ellipse at 50% 18%,#26071945,transparent 48%);padding-bottom:32px}.hero{min-height:100svh;min-height:640px;padding:100px 24px 70px;text-align:center;display:flex;align-items:center;flex-direction:column;justify-content:center}.eyebrow{color:#b07890;font-family:var(--serif);font-style:italic;font-size:21px;line-height:1.4}.hero h1{font-size:clamp(64px,7.7vw,94px);line-height:1.02;margin:24px 0 24px;letter-spacing:-2px}.hero h1 em{display:inline-block}.hero-description{font-size:15px;color:var(--muted);line-height:1.7}.hero-flower{position:relative;width:74px;height:74px;margin:48px 0 45px;filter:drop-shadow(0 0 16px #fc80bb7a);animation:flower-breathe 4s ease-in-out infinite}.hero-flower span{position:absolute;width:24px;height:43px;left:25px;top:0;background:linear-gradient(#f6bbd1,#d47aa2);border-radius:55%;transform-origin:50% 37px}.hero-flower span:nth-child(2){transform:rotate(72deg)}.hero-flower span:nth-child(3){transform:rotate(144deg)}.hero-flower span:nth-child(4){transform:rotate(216deg)}.hero-flower span:nth-child(5){transform:rotate(288deg)}.hero-flower i{position:absolute;top:27px;left:27px;width:20px;height:20px;border-radius:50%;background:#ffdaa0}.scroll-cue{font:10px var(--sans);letter-spacing:2px;text-decoration:none;color:#a08494}.scroll-cue span{display:block;font-size:25px;margin-top:7px;animation:arrow-down 2s ease-in-out infinite}.letter{width:min(540px,calc(100% - 48px));margin:10px auto 0;text-align:center;padding:42px 38px 36px;border:1px solid #d690ad12;border-radius:19px;background:linear-gradient(145deg,#211820b8,#21141bb3);box-shadow:0 10px 55px #07000525,inset 0 1px 0 #fff2}.flower-line{font-size:24px;margin-bottom:17px;letter-spacing:3px}.letter .eyebrow{font-size:17px;margin-bottom:22px}h2{font-size:46px;line-height:1.12;letter-spacing:-.6px}.letter h2{font-size:38px;line-height:1.22;margin-bottom:30px}.letter>p:not(.eyebrow):not(.signature){font-size:14px;line-height:1.9;color:var(--muted);margin-bottom:19px}.signature{font:italic 23px/1.5 var(--serif);color:var(--rose);margin-top:24px}.section-wrap{width:min(900px,calc(100% - 64px));margin:90px auto 0}.section-heading{text-align:center;margin-bottom:44px}.section-heading .eyebrow{margin-bottom:12px}.reason-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.reason-card{border:1px solid #d690ad0c;border-radius:17px;background:linear-gradient(140deg,#251922b3,#20121bd4);text-align:center;padding:29px 23px 28px;min-height:187px;box-shadow:inset 0 1px #ffffff05;transition:background .4s,transform .4s}.reason-card>span{display:block;font-size:30px;margin-bottom:17px}.reason-card h3{font-size:22px;margin-bottom:11px}.reason-card p{font-size:13px;line-height:1.7;color:var(--muted)}.reason-card:hover{background:#2e1a26;transform:translateY(-3px)}.garden{margin-top:80px;text-align:center}.garden .section-heading{margin-bottom:68px}.garden-flowers{display:flex;gap:20px;justify-content:center;align-items:flex-start;height:115px}.garden-flowers span{font-size:38px;position:relative;transform-origin:50% 100%;animation:stem-sway 4s ease-in-out infinite alternate;animation-delay:calc(var(--i)*-.7s)}.garden-flowers span:after{content:'';position:absolute;width:2px;top:42px;left:50%;height:67px;background:linear-gradient(#678240,#445329);z-index:-1}.garden-flowers span:nth-child(2n){padding-top:9px}.garden-flowers span:nth-child(2n):after{top:52px;height:58px}.garden-caption{margin-top:35px;font-size:16px;color:#966780}.gallery{width:min(700px,calc(100% - 64px));margin-top:95px}.gallery-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.gallery figure{border-radius:14px;overflow:hidden;background:#23161e;border:1px solid #eeb3cc0b}.gallery img{width:100%;height:auto;aspect-ratio:1;display:block;object-fit:cover;transition:transform .65s}.gallery figure:hover img{transform:scale(1.025)}.gallery figcaption{text-align:center;font:italic 17px var(--serif);color:#cda1b4;padding:12px}.closing{text-align:center;max-width:650px;margin-top:90px}.closing .eyebrow{font-size:18px;margin-bottom:13px}.closing h2{font-size:46px;margin-bottom:25px}.closing>p:not(.eyebrow):not(.signature):not(.footer-note){color:var(--muted);font-size:14px;line-height:1.9;max-width:560px;margin:auto}.closing-heart{font-size:39px;margin-top:40px;animation:flower-breathe 2.5s ease-in-out infinite}.closing .signature{font-size:21px}.footer-note{font:italic 13px var(--serif);color:#9b6f85;margin-top:100px}.petals{position:fixed;inset:0;z-index:2;pointer-events:none;overflow:hidden}.petal{position:absolute;top:-50px;left:var(--x);width:var(--size);height:calc(var(--size)*.48);border-radius:80% 10% 80% 15%;background:linear-gradient(120deg,#a5638040,#d68aa655);filter:blur(var(--blur));animation:petal-fall var(--duration) linear infinite;animation-delay:var(--delay)}.petal.tiny-flower{background:none;border-radius:0;height:auto;filter:none;font-size:var(--size);opacity:.55}.reveal{opacity:0;translate:0 22px;transition:opacity 1s ease,translate 1s ease}.reveal.visible{opacity:1;translate:0 0}.reason-card:nth-child(3n + 2){transition-delay:.1s}.reason-card:nth-child(3n){transition-delay:.2s}
.player{position:fixed;z-index:10;left:20px;bottom:40px;width:160px;padding:11px 10px 9px;border-radius:13px;border:1px solid #c694aa16;background:linear-gradient(145deg,#242125ed,#0b090deb);box-shadow:0 10px 30px #0008,inset 0 0 12px #ffffff04;backdrop-filter:blur(18px);animation:player-in .8s ease both}.player-cover{width:100%;height:auto;aspect-ratio:1;object-fit:cover;border-radius:7px;display:block;filter:saturate(.65)}.track-info{text-align:center;margin:12px 0 8px}.track-info p{font:14px var(--serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track-info>span{font:8px var(--sans);color:#a18c96;letter-spacing:1.2px}.player input{display:block;width:100%;height:3px;margin:8px 0;appearance:none;background:linear-gradient(to right,#d38ba7 var(--fill,0%),#59404d var(--fill,0%));border-radius:3px;cursor:pointer;accent-color:#e0a4bf}.player input::-webkit-slider-thumb{appearance:none;background:#f9e7ed;width:7px;height:7px;border-radius:50%;box-shadow:0 0 6px #fff7}.player input::-moz-range-thumb{background:#f9e7ed;border:0;width:7px;height:7px;border-radius:50%}.track-times{display:flex;justify-content:space-between;color:#ae94a1;font-size:8px}.player-controls{display:flex;justify-content:center;align-items:center;gap:12px;margin:9px 0 8px}.player button{border:0;background:none;display:grid;place-items:center;color:#d1a8bb;width:28px;height:30px;padding:5px}.player button:hover{color:white}.player .play-pause{border-radius:50%;width:35px;height:35px;background:#67324940;border:1px solid #d38caa28;box-shadow:0 0 10px #b36a8b12}.player svg{width:13px;height:13px}.volume-control{display:flex;align-items:center;gap:6px}.volume-control button{width:19px;height:20px;padding:1px}.volume-control svg{fill:none;width:12px}.volume-control input{--fill:65%;height:2px}.volume-control input::-webkit-slider-thumb{width:5px;height:5px}.player-status{font-size:10px;color:#efb0c8;line-height:1.3}.player-status:empty{display:none}.player-status:not(:empty){margin-top:7px}noscript{position:fixed;z-index:50;bottom:15px;padding:10px;color:white}
@keyframes draw-vine{to{stroke-dashoffset:0}}@keyframes flower-grow{from{opacity:0;scale:.05;rotate:-20deg}to{opacity:1;scale:1;rotate:0deg}}@keyframes ring-grow{0%{opacity:0;scale:.1}20%{opacity:.6}75%{opacity:.4}100%{opacity:0;scale:2.3}}@keyframes camera-drift{0%{transform:scale(.82) translate(120px,80px)}40%{transform:scale(1.03) translate(-5px,0)}70%{transform:scale(1.3) translate(-75px,-35px)}100%{transform:scale(1.07) translate(15px,10px)}}@keyframes sparkle{from{opacity:.1}to{opacity:.9}}@keyframes gift-float{50%{transform:translateY(-9px) rotate(2deg)}}@keyframes gift-shake{25%{transform:rotate(-8deg)}60%{transform:rotate(8deg)}85%{transform:rotate(-4deg)}}@keyframes lid-open{to{transform:translate(25px,-190px) rotate(35deg);opacity:0}}@keyframes gift-burst{0%{transform:translate(-50%,-50%) scale(.1);opacity:0}15%{opacity:1}100%{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) rotate(var(--rot)) scale(.8);opacity:0}}@keyframes flash{0%{opacity:0}40%{opacity:1}100%{opacity:0}}@keyframes flower-breathe{50%{transform:scale(1.09) rotate(5deg)}}@keyframes arrow-down{50%{transform:translateY(6px)}}@keyframes stem-sway{from{transform:rotate(-4deg)}to{transform:rotate(4deg)}}@keyframes petal-fall{from{transform:translate3d(0,-8vh,0) rotate(0)}to{transform:translate3d(var(--drift),115vh,0) rotate(var(--spin))}}@keyframes player-in{from{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}
@media(min-width:1100px){.hero{min-height:100svh}.player{width:172px;bottom:50px;left:24px}.hero h1{font-size:94px}}
@media(max-width:600px){.start-button{font-size:25px;padding:15px 48px;border-radius:22px}.hero{min-height:100svh;padding:75px 22px 100px}.hero h1{font-size:68px;letter-spacing:-1px}.eyebrow{font-size:19px}.hero-description{font-size:13px;max-width:285px}.hero-flower{margin:40px 0}.letter{width:calc(100% - 36px);padding:34px 23px 30px}.letter h2{font-size:36px}.letter>p:not(.eyebrow):not(.signature){font-size:14px}.section-wrap{width:calc(100% - 36px);margin-top:70px}h2,.closing h2{font-size:37px}.section-heading{margin-bottom:30px}.reason-grid{grid-template-columns:repeat(2,1fr);gap:12px}.reason-card{padding:23px 13px;min-height:180px}.reason-card h3{font-size:21px}.reason-card p{font-size:12px}.reason-card>span{font-size:27px}.garden .section-heading{margin-bottom:48px}.garden-flowers{gap:9px}.garden-flowers span{font-size:30px}.garden-flowers span:after{top:35px}.garden-flowers span:nth-child(2n):after{top:44px}.garden-caption{font-size:14px;margin-top:17px}.gallery-grid{gap:12px}.gallery figcaption{font-size:16px;padding:9px}.closing{padding:0 12px 120px}.closing h2{font-size:35px}.closing>p:not(.eyebrow):not(.signature):not(.footer-note){font-size:13px}.footer-note{margin-top:65px}.player{left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));width:auto;padding:10px 12px;display:grid;grid-template-columns:52px minmax(0,1fr) 112px;column-gap:12px;row-gap:5px;border-radius:14px;background:#170f17f5}.player-cover{width:52px;grid-row:1/3;align-self:center;border-radius:5px}.track-info{text-align:left;margin:0;align-self:center}.track-info p{font-size:16px}.track-info>span{font-size:8px}.player-controls{grid-column:3;grid-row:1;margin:0;gap:7px;align-self:center}.track-progress{grid-column:2;grid-row:2}.track-times{font-size:8px}.player input{margin:4px 0}.volume-control{grid-column:3;grid-row:2;align-self:center}.player-status{grid-column:1/-1}.player .play-pause{width:34px;height:34px}.player button{width:30px;height:34px}.volume-control button{height:24px}.volume-control input{margin:8px 0}.player svg{width:14px;height:14px}.player input{height:4px}.player input::-webkit-slider-thumb{width:10px;height:10px}.player-status:not(:empty){margin-top:0}.gift-box{width:110px;height:106px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.petals{display:none!important}.hero-flower,.closing-heart,.garden-flowers span,.gift-box,.scroll-cue span,.floral-camera{animation:none}.reveal{transition:none;translate:none}.floral-ring{animation-duration:8s}.floral-spark{animation:none;opacity:.3}}
/* Intro: keep one opaque background throughout, and avoid expensive camera zooms. */
.floral-screen{background:#08040a;opacity:1;transition:none}
.floral-camera{animation:floral-drift 9.8s ease-in-out both}
@keyframes floral-drift{from{transform:translate(0,0)}to{transform:translate(-8px,-5px)}}
@media(max-aspect-ratio: 17/20){.floral-camera{animation:floral-drift-mobile 9.8s ease-in-out both}@keyframes floral-drift-mobile{from{transform:translate(0,0)}to{transform:translate(-3px,-7px)}}}
@media(prefers-reduced-motion:reduce){.floral-camera{animation:none}}
