@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;1,400&family=DM+Sans:wght@400;500&family=Caveat:wght@400&display=swap');
:root{--paper:#f8f5ef;--ink:#4b453f;--muted:#837970;--rose:#b28c80}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans',sans-serif;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:2px solid var(--rose);outline-offset:6px}button:disabled{cursor:wait}h1,h2,p{margin:0}h1,h2{font-family:'Cormorant Garamond',Georgia,serif;font-weight:400}h2{font-size:clamp(40px,5vw,66px);line-height:1.08}body:has(.intro:not(.gone)){overflow:hidden}.ambient{position:fixed;inset:0;pointer-events:none;z-index:-1;background:radial-gradient(ellipse at 76% 35%,#e7cfc036,transparent 48%),radial-gradient(ellipse at 15% 70%,#e4c5c024,transparent 50%);animation:breathe 14s ease-in-out infinite alternate}.music{position:fixed;z-index:20;right:max(24px,env(safe-area-inset-right));top:max(24px,env(safe-area-inset-top));border:1px solid #bbaa9630;background:#fcfaf780;backdrop-filter:blur(12px);width:44px;height:44px;border-radius:50%;display:grid;place-items:center}.music svg{width:18px;height:18px}.music-state{position:absolute;white-space:nowrap;right:54px;font-size:12px;color:var(--muted);opacity:0;transition:opacity .3s}.music:hover .music-state,.music:focus-visible .music-state{opacity:1}.music[aria-pressed=true]{background:#eadbd380}.intro{min-height:100svh;display:grid;place-items:center;text-align:center;padding:80px 24px;position:relative;transition:opacity 1s,filter 1s}.intro-content{width:100%;transform:translateY(-12px)}.small-line{display:block;width:1px;height:48px;background:linear-gradient(transparent,#bba396);margin:0 auto 36px;animation:appear 1.8s both}h1{font-size:clamp(66px,10vw,108px);letter-spacing:-3px;animation:appear 1.7s both}h1 span{color:#a99486}.intro-sub{font-size:16px;font-weight:400;line-height:1.8;color:var(--muted);margin:24px auto 0;max-width:300px;animation:appear 1.6s 1s both}.intro-action{margin-top:48px;animation:appear 1.6s 2s both}.gift{border:1px solid #c9b6a84d;border-radius:15px;padding:20px 32px;background:linear-gradient(135deg,#fffdfa,#ede3d9);box-shadow:0 10px 35px #80644c0a,inset 0 1px 0 #fff;font-size:16px;transition:transform .4s,box-shadow .4s}.gift span{margin-left:12px;font-size:15px}.gift:hover{transform:translateY(-3px);box-shadow:0 15px 35px #80644c15}.gift:active{transform:scale(.97)}.hint{font-size:12px;color:#93867a;margin-top:18px}.intro-bottom{position:absolute;bottom:36px;font-size:10px;letter-spacing:2.6px;color:#998b7c;animation:appear 2s 2.6s both}.intro.leaving{opacity:0;filter:blur(10px);pointer-events:none}.intro.gone{display:none}.transition-light{position:fixed;inset:0;pointer-events:none;z-index:15;opacity:0;background:radial-gradient(circle at 50% 62%,#fff7e399,transparent 20%),#302821}.transition-light.active{animation:veil 2.6s ease-in-out both}.flower-section{position:relative;min-height:100svh;padding:45px 6vw 65px;display:flex;align-items:center;justify-content:center;gap:1vw;overflow:hidden}.bouquet-stage{position:relative;width:min(50vw,650px);flex-shrink:0;text-align:center;animation:rise 2.8s cubic-bezier(.16,1,.3,1) both}.bouquet{border:0;background:transparent;padding:0;width:100%;display:block;transition:transform 1s;mix-blend-mode:multiply}.bouquet img{width:100%;height:auto;max-height:78svh;object-fit:contain;display:block;mix-blend-mode:multiply}.bouquet:hover{transform:scale(1.015)}.bouquet.touched{transform:scale(1.04)}.touch-hint{display:block;font-size:12px;letter-spacing:.3px;color:var(--muted);animation:appear 1.5s 5s both}.gift-copy{max-width:490px;padding-right:30px}.eyebrow{font-size:10px;letter-spacing:2.5px;color:#978474;line-height:1.7}.gift-copy .eyebrow{animation:appear 1.5s 2s both;margin-bottom:24px}.gift-copy h2{animation:appear 1.7s 2.6s both}.promise{font-size:17px;line-height:1.9;margin-top:28px;color:var(--muted);animation:appear 1.7s 3.6s both}.greeting{font-size:16px;margin-top:36px;animation:appear 1.7s 4.5s both}.small{font-size:13px;line-height:1.8;color:var(--muted);margin-top:14px;animation:appear 1.7s 5.1s both}.scroll-hint{position:absolute;bottom:20px;left:50%;height:28px;width:1px;background:#c1b4a655;animation:appear 2s 6s both}.scroll-hint span{display:block;height:10px;background:#b19b8d;animation:scroll 2.6s infinite}.personal{text-align:center;min-height:88svh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:90px 24px;background:radial-gradient(ellipse at 50% 50%,#e9d9cd24,transparent 65%)}.rule{height:1px;width:48px;background:#c7b9aa65;margin:0 auto 66px}.personal .rule:last-child{margin:66px auto 0}.personal h2{margin:20px 0 30px}.personal p:not(.eyebrow){font-size:16px;line-height:2;color:var(--muted)}.personal .emphasis{margin-top:32px;color:var(--ink)!important;font-weight:500}.ending{text-align:center;min-height:85svh;padding:100px 24px 30px;display:flex;flex-direction:column;align-items:center;justify-content:center}.end-star{color:#b49a84;font-size:27px;margin-bottom:40px}.ending h2{font-size:clamp(58px,7vw,90px);letter-spacing:-1.5px}.ending h2 em{color:#ac8b7e;font-weight:400}.ending>p{font-size:15px;color:var(--muted);margin-top:32px}footer{font-size:12px;line-height:2;color:#95897e;margin-top:100px}footer span{display:block;font-size:10px;letter-spacing:1.5px}.reveal{opacity:0;transform:translateY(25px);transition:opacity 1.4s,transform 1.4s}.reveal.visible{opacity:1;transform:none}.note{border:1px solid #ffffffa8;border-radius:7px;background:#fcf8f1f5;box-shadow:0 30px 100px #43312424;text-align:center;padding:64px 32px 52px;width:min(88vw,440px);color:var(--ink);overflow:visible}.note[open]{animation:appear .8s both}.note::backdrop{background:#3d322540;backdrop-filter:blur(9px)}.note p{font-family:'Cormorant Garamond',Georgia,serif;font-size:34px;line-height:1.35;margin-top:30px}.close{position:absolute;right:12px;top:10px;font-size:24px;width:44px;height:44px;border:0;background:transparent;color:var(--muted)}.note-rule{width:32px;height:1px;background:#c5ac9655;margin:30px auto}.handwriting{font-family:'Caveat',cursive;font-size:25px;color:#9c7d6b}.flying-petal{position:fixed;left:45%;top:45%;width:70px;height:90px;object-fit:cover;z-index:30;pointer-events:none;animation:petal 1.6s ease-out both;clip-path:ellipse(35% 45% at 50% 50%)}@keyframes petal{from{opacity:0;transform:translate(0,60px) scale(.2) rotate(-25deg)}30%{opacity:.8}to{opacity:0;transform:translate(100px,-180px) scale(1.8) rotate(70deg)}}@keyframes appear{from{opacity:0;filter:blur(7px);transform:translateY(12px)}to{opacity:1;filter:blur(0);transform:translateY(0)}}@keyframes rise{from{opacity:0;transform:translateY(180px) scale(.92);filter:blur(7px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes veil{0%,100%{opacity:0}35%{opacity:.35}60%{opacity:.12}}@keyframes breathe{to{transform:scale(1.12) translateY(-2%)}}@keyframes scroll{to{transform:translateY(18px);opacity:0}}@media(max-width:700px){.flower-section{padding:54px 22px 62px;flex-direction:column;gap:12px;min-height:100svh}.bouquet-stage{width:min(92vw,390px)}.bouquet img{max-height:49svh;width:100%}.gift-copy{text-align:center;padding:0;max-width:100%}.gift-copy .eyebrow{margin-bottom:13px;font-size:9px}.gift-copy h2{font-size:42px;letter-spacing:-1px}.promise{margin-top:18px;font-size:15px;line-height:1.7}.greeting{margin-top:23px;font-size:15px}.small{font-size:12px;margin-top:11px}.touch-hint{font-size:10px;margin-top:-2px}.personal{min-height:85svh}.personal h2{font-size:44px}.personal p:not(.eyebrow){font-size:15px}.intro-bottom{font-size:8px;letter-spacing:2px}.note p{font-size:32px}.music{right:18px;top:max(18px,env(safe-area-inset-top))}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-delay:0ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.reveal{opacity:1;transform:none}}

.bouquet img{mask-image:radial-gradient(ellipse 64% 58% at 50% 49%,#000 64%,transparent 99%)}
.flying-petal{object-fit:none;object-position:51% 47%;}
/* A living bouquet, with an unhurried rhythm. */
.bouquet-stage{isolation:isolate;animation-duration:3.2s}.bouquet{transform:translateY(var(--lift,0px)) rotate(var(--lean,0deg));transition:transform 1.2s cubic-bezier(.2,.7,.3,1);position:relative;z-index:2;mix-blend-mode:normal}.bouquet img{mask-image:none;mix-blend-mode:normal;filter:drop-shadow(0 20px 22px #70614e12);transform-origin:50% 85%;animation:flowerSway 8s 3s ease-in-out infinite}.bouquet:hover{transform:translateY(var(--lift,0px)) rotate(var(--lean,0deg)) scale(1.025)}.bouquet.touched{transform:translateY(-9px) scale(1.065)}.bouquet.touched img{animation-play-state:paused}.bouquet-glow{position:absolute;inset:14% 0 18%;border-radius:50%;background:radial-gradient(ellipse,#f1d2bd55,transparent 67%);filter:blur(20px);animation:flowerGlow 7s ease-in-out infinite;z-index:-1}.glints{position:absolute;inset:10% 3% 20%;pointer-events:none;z-index:3}.glints i{position:absolute;left:calc(10% + var(--i)*19%);top:calc(18% + var(--i)*11%);width:3px;height:3px;border-radius:50%;background:#fff9e4;box-shadow:0 0 10px 3px #eed8b45e;opacity:0;animation:glimmer 6s calc(var(--i)*1.25s) ease-in-out infinite}.sparkle .glints i{animation:touchGlint 1s calc(var(--i)*.06s) ease-out both}.personal{min-height:68svh}.personal h2{font-size:clamp(40px,5vw,58px)}.personal .emphasis{font-family:'Cormorant Garamond',Georgia,serif;font-weight:400;font-size:26px!important;color:#9e8170!important}.ending{min-height:65svh;padding-bottom:90px}.gift-copy h2:focus{outline:none}.gift-copy h2{animation-delay:2.5s}.gift-copy .promise{animation-delay:3.5s}.gift-copy .greeting{animation-delay:4.3s}.gift-copy .small{animation-delay:4.9s}.note .handwriting{display:block}.note p{margin-top:4px}@keyframes flowerSway{0%,100%{transform:translateY(0) rotate(-1.3deg) scale(1)}50%{transform:translateY(-10px) rotate(1.3deg) scale(1.018)}}@keyframes flowerGlow{50%{transform:scale(1.14);opacity:.6}}@keyframes glimmer{0%,100%{opacity:0;transform:translateY(12px) scale(.4)}45%{opacity:.75}70%{opacity:0;transform:translateY(-24px) scale(1)}}@keyframes touchGlint{0%{opacity:0;transform:scale(.2)}30%{opacity:1}100%{opacity:0;transform:translateY(-65px) scale(1.5)}}@media(max-width:700px){.bouquet-stage{width:min(100vw,440px);margin-left:-16px;margin-right:-16px}.bouquet img{max-height:52svh}.flower-section{gap:20px}.personal{min-height:66svh}.personal .rule{margin-bottom:40px}.personal .rule:last-child{margin-top:40px}}@media(prefers-reduced-motion:reduce){.bouquet img,.bouquet-glow,.glints i{animation:none!important}.bouquet:hover,.bouquet.touched{transform:none}}
.music-panel{position:fixed;z-index:19;right:max(20px,env(safe-area-inset-right));top:80px;width:min(360px,calc(100vw - 40px));padding:18px;background:#fcf9f3f5;backdrop-filter:blur(18px);border:1px solid #d8c9bc66;border-radius:18px;box-shadow:0 20px 60px #55433418}.music-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.music-heading>span{font-family:'Cormorant Garamond',Georgia,serif;font-size:25px}.music-close{border:0;background:none;font-size:24px;width:36px;height:36px}.music-panel iframe{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:10px}.music-links{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;font-size:12px}.music-links a{color:var(--muted);text-underline-offset:4px}.music-stop{border:0;background:transparent;font-size:12px;padding:10px 0}.music-state{opacity:1}.music[aria-expanded=true]{background:#eadbd3}.music-panel[hidden]{display:none}
.music-panel{max-height:calc(100dvh - 100px);overflow-y:auto}.music-panel iframe{height:352px;aspect-ratio:auto}.music-choices{display:flex;gap:8px;margin-bottom:14px}.music-choices button{border:1px solid #c9b6a84d;background:transparent;padding:10px 14px;border-radius:10px;font-size:13px}.music-choices button[aria-pressed=true]{background:#eadbd3;border-color:#c9b6a880}
.reach-out{text-align:center;padding:25px 24px 110px}.reach-button{padding:19px 34px;border:1px solid #c9b6a866;border-radius:14px;background:linear-gradient(135deg,#fffdfa,#ede3d9);box-shadow:0 12px 32px #80644c0b;font-family:'Cormorant Garamond',Georgia,serif;font-size:30px;transition:transform .35s,box-shadow .35s}.reach-button span{font:16px 'DM Sans',sans-serif;margin-left:8px}.reach-button:hover{transform:translateY(-2px);box-shadow:0 16px 35px #80644c15}.reach-button:active{transform:scale(.97)}.reach-button:disabled{opacity:.6;cursor:wait}.reach-out form>p{font-size:16px;color:var(--muted);line-height:1.9;margin-top:24px}.reach-hint{display:block;margin-top:16px;font-size:12px;color:var(--muted)}#reach-status{font-size:14px;min-height:54px;max-width:340px;margin:20px auto 0}.honeypot{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
