:root{--paper:#f8e8e4;--rose:#c76578;--wine:#67343f;--ink:#563d42;--ease:cubic-bezier(.22,.74,.18,1);--soft:cubic-bezier(.33,1,.68,1)}*{box-sizing:border-box}html{scroll-behavior:smooth;background:#d5a4a9}body{margin:0;color:var(--ink);background:#d5a4a9;font-family:Montserrat,sans-serif}body.locked{overflow:hidden}button,input{font:inherit}.paper-grain{position:fixed;inset:0;z-index:90;pointer-events:none;opacity:.13;mix-blend-mode:multiply;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='.72' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E")}
.intro{--p:0;position:fixed;inset:0;z-index:80;overflow:hidden;background:#d77f8d;transition:opacity .75s var(--soft),visibility .75s}.intro.done{opacity:0;visibility:hidden;pointer-events:none}.intro-envelope{position:absolute;inset:0;perspective:1200px;transform-style:preserve-3d}.intro-envelope>div{position:absolute;inset:0}.env-back{background:linear-gradient(145deg,rgba(255,255,255,.18),transparent 42%),#d17b88}.env-back:after,.env-flap:after{content:"";position:absolute;inset:0;opacity:.18;background-image:radial-gradient(ellipse at 15% 30%,#8e4656 0 1px,transparent 2px),radial-gradient(ellipse at 68% 65%,#8e4656 0 1.3px,transparent 2.2px);background-size:42px 56px,55px 48px}.env-gold{z-index:1;background:linear-gradient(160deg,#f8dc51,#d69922 58%,#b75842);clip-path:polygon(0 0,50% 52%,100% 0,100% 100%,0 100%);opacity:calc(var(--p)*1.5)}.env-side{z-index:3;background:#cf7382}.env-side--left{clip-path:polygon(0 0,53% 51%,0 100%)}.env-side--right{clip-path:polygon(100% 0,47% 51%,100% 100%);filter:brightness(.94)}.env-bottom{z-index:4;background:linear-gradient(15deg,#c76b7c,#b7566d);clip-path:polygon(0 100%,50% 49%,100% 100%)}.env-flap{z-index:6;background:linear-gradient(160deg,#dd8e99,#bd5b6f);clip-path:polygon(0 0,100% 0,50% 53%);transform-origin:top;transform:rotateX(calc(var(--p)*-178deg));filter:brightness(calc(1 + var(--p)*.12));will-change:transform}.env-light{z-index:2;inset:10% 0 25%!important;background:radial-gradient(ellipse,rgba(255,232,109,.8),transparent 67%);opacity:var(--p);filter:blur(16px)}.emboss{position:absolute;color:rgba(105,49,61,.18);font-size:3rem}.emboss--one{left:17%;top:20%}.emboss--two{right:17%;top:17%;font-size:4rem;transform:rotate(22deg)}.emboss--three{left:45%;top:6%;font-size:2.2rem}.seal{position:absolute;z-index:8;left:50%;top:52%;display:grid;place-items:center;width:92px;aspect-ratio:1;border:0;border-radius:48% 52% 45% 55%;color:#7a3948;background:radial-gradient(circle at 35% 28%,#efa6ad,#cb6476 60%,#984357);box-shadow:0 8px 17px rgba(85,34,45,.34),inset 0 0 0 5px rgba(255,202,207,.22),inset 0 0 0 7px rgba(103,40,54,.16);transform:translate(-50%,-50%) translateY(calc(var(--p)*-43vh)) rotate(calc(var(--p)*18deg)) scale(calc(1 - var(--p)*.12));opacity:calc(1 - max(0,var(--p) - .72)*3.5);cursor:pointer;will-change:transform,opacity}.seal span{font-size:2rem}.seal small{position:absolute;top:120%;width:160px;color:#fff;font-size:.52rem;letter-spacing:.22em;text-transform:uppercase;animation:hint 1.7s var(--soft) infinite}@keyframes hint{50%{transform:translateY(-4px);opacity:.46}}
main{width:min(100%,620px);margin:auto;background:var(--paper);box-shadow:0 0 80px rgba(67,35,42,.2)}main[aria-hidden=true]{visibility:hidden}.full{position:relative;min-height:100svh;overflow:hidden}.hero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.hero-tint{position:absolute;inset:0;background:linear-gradient(180deg,rgba(154,60,83,.16),rgba(151,48,74,.17) 62%,rgba(92,36,53,.4));mix-blend-mode:multiply}.hero-copy{position:absolute;z-index:2;top:6%;left:7%;right:7%;text-align:center;color:#5f3840;text-shadow:0 1px rgba(255,255,255,.34)}.script{margin:0;font:400 clamp(2.2rem,10vw,4rem)/1 Parisienne,cursive}.tiny{margin:3px 0;font:italic 400 .8rem Cormorant Garamond,serif}.hero h1{margin:3px 0 10px;font:400 clamp(2.3rem,11vw,4.5rem)/.94 Italiana,serif;letter-spacing:.03em}.hero h1 i{font:400 .65em Parisienne,cursive;color:#a34159}.invitation-copy{font:italic 500 clamp(.75rem,2.7vw,1rem)/1.45 Cormorant Garamond,serif}.hero time{display:inline-block;margin-top:10px;padding:6px 12px;border-block:1px solid rgba(89,51,59,.45);font:500 .62rem Montserrat,sans-serif;letter-spacing:.14em}.hero-bottom{position:absolute;z-index:2;left:0;right:0;bottom:2.5%;text-align:center;color:#fff}.hero-bottom p{margin:0;font:500 1.05rem/1.1 Cormorant Garamond,serif;letter-spacing:.06em}.hero-bottom em{font-family:Parisienne,cursive;font-size:1.35em}.mouse,.scroll-more span{display:block;margin-top:9px;animation:hint 1.7s var(--soft) infinite}.audio{position:fixed;z-index:70;right:max(16px,calc((100vw - 620px)/2 + 16px));bottom:18px;width:43px;aspect-ratio:1;border:0;border-radius:50%;color:#fff;background:rgba(75,42,51,.78);box-shadow:0 8px 24px rgba(73,38,46,.2);cursor:pointer;opacity:0;pointer-events:none;transition:.3s}.audio.show{opacity:1;pointer-events:auto}.audio.playing{background:#a44b62}
.section{position:relative;min-height:100svh;padding:96px clamp(28px,8vw,62px) 72px;text-align:center;overflow:hidden;background:linear-gradient(170deg,#faece8,#f2d8d6)}.section:before,.section:after{content:"";position:absolute;z-index:0;width:270px;height:270px;pointer-events:none;opacity:.28;background:radial-gradient(ellipse at 45% 80%,transparent 0 46%,#627c61 47% 49%,transparent 50%),repeating-conic-gradient(from 18deg at 50% 100%,#8da286 0 3deg,transparent 3deg 19deg);border-radius:50%}.section:before{left:-175px;top:-70px;transform:rotate(22deg)}.section:after{right:-185px;bottom:-90px;transform:rotate(205deg)}.section>*{position:relative;z-index:1}.section h2{margin:45px 0 25px;font:400 clamp(3rem,13vw,5.3rem)/.9 Parisienne,cursive}.section h3{margin:16px 0 6px;font:500 clamp(1.5rem,6vw,2.1rem) Cormorant Garamond,serif}.subtitle{margin:9px 0 30px;font:italic 400 .85rem Cormorant Garamond,serif}.body-copy{max-width:450px;margin:15px auto;color:#755b60;font:400 1rem/1.75 Cormorant Garamond,serif}.scroll-more{margin:54px 0 0;font-size:.47rem;letter-spacing:.16em}.counter{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin:35px 0 45px}.counter span{padding:13px 3px;border-right:1px solid rgba(94,54,62,.19)}.counter span:last-child{border:0}.counter b{display:block;font:400 clamp(1.6rem,7vw,2.5rem) Cormorant Garamond,serif}.counter small{font-size:.43rem;letter-spacing:.13em}.art{width:min(100%,440px);aspect-ratio:1.1;margin:18px auto 0;background-image:url('./assets/wedding-illustrations.png');background-repeat:no-repeat;background-size:200% 200%;filter:drop-shadow(0 18px 20px rgba(88,48,52,.09))}.art--chapel{background-position:0 0}.art--guests{background-position:100% 0;aspect-ratio:1.35}.art--table{background-position:0 100%;aspect-ratio:1.2}.art--villa{background-position:100% 100%;aspect-ratio:1.2}.pin{width:38px;height:38px;margin:-12px auto 0;border-radius:50%;display:grid;place-items:center;background:#e7c1c0}.pill{display:inline-flex;align-items:center;gap:20px;margin-top:12px;padding:12px 18px;border:1px solid rgba(89,53,60,.23);border-radius:999px;color:inherit;text-decoration:none;font-size:.52rem;letter-spacing:.16em}.timeline{position:relative;width:min(100%,430px);margin:45px auto}.timeline:before{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:rgba(90,57,63,.2)}.timeline article{position:relative;display:grid;grid-template-columns:1fr 23px 1fr;align-items:center;min-height:118px}.timeline time{text-align:right;padding-right:18px;font:italic 400 1.7rem Cormorant Garamond,serif}.timeline i{z-index:2;width:10px;aspect-ratio:1;margin:auto;border:3px solid var(--paper);border-radius:50%;background:var(--rose);box-shadow:0 0 0 1px rgba(103,52,63,.2)}.timeline article p{margin:0;padding-left:18px;text-align:left}.timeline b{display:block;font:500 .65rem Montserrat,sans-serif;letter-spacing:.1em}.timeline small{display:block;margin-top:5px;font:italic 400 .8rem Cormorant Garamond,serif}.swatches{display:flex;justify-content:center;gap:12px;margin:24px 0}.swatches i{width:34px;aspect-ratio:1;border:3px solid rgba(255,255,255,.6);border-radius:50%;background:#eccbc3;box-shadow:0 0 0 1px rgba(88,50,57,.08)}.swatches i:nth-child(2){background:#c67d83}.swatches i:nth-child(3){background:#82495a}.swatches i:nth-child(4){background:#73836a}.swatches i:nth-child(5){background:#404f48}.menu-copy{font:400 .88rem/2.25 Cormorant Garamond,serif}.menu-copy b{font:500 .53rem Montserrat,sans-serif;letter-spacing:.13em}.gift-buttons{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:28px}.gift-buttons button{padding:12px 16px;border:1px solid rgba(93,51,61,.2);border-radius:999px;background:#d47d8b;color:#fff;font-size:.51rem;letter-spacing:.12em}.travel-line{display:flex;align-items:center;justify-content:center;gap:12px;margin:75px auto 35px;font:500 .62rem Montserrat,sans-serif;letter-spacing:.1em}.travel-line i{width:48px;height:1px;background:#a9797d}.travel-line b{display:grid;place-items:center;width:55px;aspect-ratio:1;border-radius:50%;background:#dca0a5;color:white}.accordions{margin:35px auto;max-width:470px;text-align:left}.accordions details{border-bottom:1px solid rgba(88,54,60,.18)}.accordions summary{padding:18px 2px;cursor:pointer;font:500 1rem Cormorant Garamond,serif;list-style:none}.accordions summary:after{content:'+';float:right}.accordions details[open] summary:after{content:'−'}.accordions details p{margin:0 0 18px;color:#755d61;font:400 .85rem/1.65 Montserrat,sans-serif}.rsvp{display:grid;place-content:center;min-height:105svh}.rsvp-button{display:inline-flex;align-items:center;gap:30px;justify-self:center;margin-top:20px;padding:14px 20px;border:0;border-radius:999px;color:white;background:#b4566d;font-size:.55rem;letter-spacing:.15em}.final-mark{margin-top:60px;font:400 2rem Italiana,serif}.final-mark i{font-family:Parisienne,cursive;color:#ad5168}
[data-reveal]{opacity:0;transform:translateY(22px);filter:blur(6px);clip-path:inset(0 0 16%);transition:opacity .7s var(--soft),transform .9s var(--ease),filter .7s var(--soft),clip-path .9s var(--ease)}[data-reveal].visible{opacity:1;transform:none;filter:none;clip-path:inset(0)}dialog{width:min(90vw,480px);padding:0;border:0;color:var(--ink);background:#f8e8e4;box-shadow:0 30px 90px rgba(63,34,41,.36)}dialog::backdrop{background:rgba(62,35,41,.5);backdrop-filter:blur(7px)}dialog form{position:relative;display:flex;flex-direction:column;gap:17px;padding:50px 34px}dialog h2{margin:0 0 8px;font:400 2.4rem Cormorant Garamond,serif}dialog label{font-size:.63rem;letter-spacing:.08em}dialog input[name=name]{display:block;width:100%;margin-top:7px;padding:10px 0;border:0;border-bottom:1px solid rgba(80,48,55,.25);background:transparent;outline:0}.close{position:absolute;right:12px;top:8px;border:0;background:transparent;font-size:1.7rem}.submit{min-height:46px;border:0;color:white;background:#a94e65;font-size:.56rem;letter-spacing:.15em}.toast{position:fixed;z-index:100;left:50%;bottom:22px;width:min(90vw,420px);padding:14px;border-radius:999px;color:white;background:#5c3c43;text-align:center;font-size:.63rem;opacity:0;transform:translate(-50%,12px);pointer-events:none;transition:.3s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(min-width:621px){.intro{left:50%;width:620px;transform:translateX(-50%);box-shadow:0 0 90px rgba(64,34,40,.32)}.section{padding-inline:65px}.seal{width:104px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}[data-reveal]{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important}}

/* Photoreal frame sequences */
.intro{background:#b96f70}.envelope-sprite{position:absolute;left:50%;top:50%;width:min(100vw,620px);aspect-ratio:1;transform:translate(-50%,-50%);background-image:url('./assets/envelope-frames.png');background-size:300% 200%;background-repeat:no-repeat;filter:drop-shadow(0 26px 35px rgba(76,35,39,.22));transition:filter .45s var(--soft)}.envelope-sprite.frame-0{background-position:0 0}.envelope-sprite.frame-1{background-position:50% 0}.envelope-sprite.frame-2{background-position:100% 0}.envelope-sprite.frame-3{background-position:0 100%}.envelope-sprite.frame-4{background-position:50% 100%}.envelope-sprite.frame-5{background-position:100% 100%;filter:drop-shadow(0 25px 55px rgba(255,207,71,.42))}.intro-glow{position:absolute;left:50%;top:54%;width:min(92vw,570px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(255,222,104,.45),transparent 65%);transform:translate(-50%,-50%) scale(.6);opacity:0;filter:blur(25px);transition:opacity .55s var(--soft),transform 1s var(--soft);pointer-events:none}.intro.opening .intro-glow{opacity:1;transform:translate(-50%,-50%) scale(1.15)}.seal-hit{position:absolute;z-index:4;left:50%;top:52%;width:130px;height:130px;border:0;border-radius:50%;background:transparent;transform:translate(-50%,-50%);cursor:pointer}.seal-hit span{position:absolute;left:50%;top:105%;width:150px;color:#fff;text-shadow:0 1px 8px rgba(73,34,40,.45);transform:translateX(-50%);font-size:.52rem;letter-spacing:.19em;text-transform:uppercase;animation:hint 1.7s var(--soft) infinite}.intro.opening .seal-hit{pointer-events:none}.intro.opening .seal-hit span{opacity:0}
.kiss-sprite{position:absolute;inset:0;background-image:url('./assets/kiss-frames.png');background-size:300% 200%;background-repeat:no-repeat;background-color:#eca6aa;transition:filter .4s var(--soft);will-change:background-position}.kiss-sprite.kiss-0{background-position:0 0}.kiss-sprite.kiss-1{background-position:50% 0}.kiss-sprite.kiss-2{background-position:100% 0}.kiss-sprite.kiss-3{background-position:0 100%}.kiss-sprite.kiss-4{background-position:50% 100%}.kiss-sprite.kiss-5{background-position:100% 100%}.birds{position:absolute;z-index:3;inset:0;pointer-events:none;overflow:hidden}.birds i{position:absolute;left:-16%;top:18%;width:20px;height:8px;border-top:2px solid rgba(83,49,55,.78);border-radius:50%;animation:bird-flight 8s linear infinite}.birds i:after{content:"";position:absolute;left:10px;top:-2px;width:18px;height:8px;border-top:2px solid rgba(83,49,55,.78);border-radius:50%;transform:rotate(16deg)}.birds i:nth-child(2){top:25%;animation-delay:-2.7s;animation-duration:9.5s;transform:scale(.75)}.birds i:nth-child(3){top:12%;animation-delay:-5.2s;animation-duration:11s;transform:scale(.55)}.birds i:nth-child(4){top:33%;animation-delay:-7.1s;animation-duration:10s;transform:scale(.65)}.birds i:nth-child(5){top:20%;animation-delay:-8.7s;animation-duration:12s;transform:scale(.45)}@keyframes bird-flight{0%{translate:-15vw 10px}45%{translate:55vw -22px}100%{translate:125vw 5px}}
.date-cta{display:inline-flex;align-items:center;gap:26px;margin:-12px auto 24px;padding:13px 18px 13px 22px;border:0;border-radius:999px;color:#fff;background:#b45368;box-shadow:0 12px 24px rgba(125,61,75,.16);font-size:.53rem;letter-spacing:.16em;cursor:pointer;transition:transform .18s var(--soft),box-shadow .2s}.date-cta span{font-size:1rem}.date-cta:active{transform:scale(.96)}.date-cta:hover{box-shadow:0 15px 30px rgba(125,61,75,.24)}
.section:nth-of-type(even) [data-reveal]{transform:translate3d(-48px,8px,0)}.section:nth-of-type(odd) [data-reveal]{transform:translate3d(48px,8px,0)}.section [data-reveal].visible{transform:none}.timeline article:nth-child(odd)[data-reveal]{transform:translate3d(-55px,0,0)}.timeline article:nth-child(even)[data-reveal]{transform:translate3d(55px,0,0)}.timeline article.visible{transform:none!important}.section .art{transition:transform 1.1s var(--ease),opacity .8s var(--soft),filter .8s var(--soft)}
@media(prefers-reduced-motion:reduce){.kiss-sprite{background-position:100% 100%!important}.envelope-sprite{background-position:100% 100%!important}.birds{display:none}.section [data-reveal]{transform:none!important}}
.section .art{opacity:0;transform:translate3d(64px,0,0) rotate(1.5deg);filter:blur(6px) drop-shadow(0 18px 20px rgba(88,48,52,.09))}.section:nth-of-type(even) .art{transform:translate3d(-64px,0,0) rotate(-1.5deg)}.section .art.visible{opacity:1;transform:none;filter:blur(0) drop-shadow(0 18px 20px rgba(88,48,52,.09))}@media(prefers-reduced-motion:reduce){.section .art{opacity:1!important;transform:none!important;filter:none!important}}

/* Kiss-first title choreography */
.hero .hero-copy{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important}.hero .hero-copy>*{opacity:0;transform:translate3d(0,-26px,0);filter:blur(7px);transition:opacity .75s var(--soft),transform .95s var(--ease),filter .75s var(--soft)}.hero.kiss-complete .hero-copy>*{opacity:1;transform:none;filter:none}.hero.kiss-complete .hero-copy>*:nth-child(1){transition-delay:.12s}.hero.kiss-complete .hero-copy>*:nth-child(2){transition-delay:.28s}.hero.kiss-complete .hero-copy>*:nth-child(3){transition-delay:.42s}.hero.kiss-complete .hero-copy>*:nth-child(4){transition-delay:.62s}.hero.kiss-complete .hero-copy>*:nth-child(5){transition-delay:.82s}.hero:not(.kiss-complete) .hero-bottom{opacity:0!important;transform:translateY(24px)!important;filter:blur(6px)!important}.hero.kiss-complete .hero-bottom{opacity:1!important;transform:none!important;filter:none!important;transition-delay:1.05s}

/* Illustrated plan */
.timeline article{min-height:205px}.plan-art{display:block;width:132px;height:112px;margin:0 0 9px -7px;background-image:url('./assets/timeline-illustrations.png');background-repeat:no-repeat;background-size:200% 200%;filter:drop-shadow(0 9px 10px rgba(90,48,55,.1));transform:scale(.88);opacity:0;transition:transform .8s var(--ease) .25s,opacity .65s var(--soft) .25s}.timeline article.visible .plan-art{transform:scale(1);opacity:1}.plan-art--drinks{background-position:0 0}.plan-art--ceremony{background-position:100% 0}.plan-art--dinner{background-position:0 100%}.plan-art--dance{background-position:100% 100%}@media(max-width:430px){.timeline article{grid-template-columns:.82fr 19px 1.18fr}.plan-art{width:112px;height:95px}.timeline time{padding-right:10px}.timeline article p{padding-left:10px}}
@media(prefers-reduced-motion:reduce){.hero .hero-copy>*,.hero .hero-bottom,.plan-art{opacity:1!important;transform:none!important;filter:none!important}}
