:root{--sage:#b4cba5;--deep:#315d45;--gold:#ad8540;--ink:#252d27;--paper:#fffefb}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:75px}body{margin:0;color:var(--ink);font:16px/1.7 'Manrope',sans-serif;background:#f6f5f3 url('assets/marble.jpg') center top/1400px auto repeat}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--gold);outline-offset:5px}h1,h2,h3,h4,p{margin-top:0}h1,h2,h3{font-family:'Great Vibes',cursive;font-weight:400}h2{font-size:clamp(42px,5vw,64px);line-height:1.25;margin-bottom:25px;color:var(--deep)}header{display:flex;align-items:center;justify-content:space-between;padding:14px 6%;border-bottom:1px solid #ae8b4130;background:#fffcf8b0;backdrop-filter:blur(10px);position:relative;z-index:2}.monogram{font:32px 'Cormorant Garamond',serif;letter-spacing:-2px;color:var(--deep)}.monogram span{color:var(--gold);padding:0 4px;font-style:italic}nav{display:flex;gap:32px;font-size:13px}.nav-rsvp{border-bottom:1px solid var(--gold)}.eyebrow{font-size:11px;font-weight:500;letter-spacing:2px;color:var(--deep);line-height:1.8;margin-bottom:24px}.hero{position:relative;display:grid;grid-template-columns:1fr 1fr;align-items:center;max-width:1200px;margin:auto;min-height:680px;padding:65px 6% 45px;gap:65px}.hero-copy{text-align:center;position:relative;padding:55px 0}.hero-copy:before{content:'';position:absolute;inset:-25px -45px;background:url('assets/wreath.png') center/contain no-repeat;opacity:.75;pointer-events:none}.hero-copy>*{position:relative}h1{font-size:clamp(70px,7vw,105px);line-height:1.2;margin:12px 0 25px;color:#202a22;font-weight:400}h1 i{font:italic .6em 'Cormorant Garamond',serif;color:var(--gold)}.date{display:flex;flex-direction:column;gap:8px;letter-spacing:3px;font-size:11px;margin:25px auto}.date strong{font:24px 'Cormorant Garamond',serif;letter-spacing:3px}.hero .eyebrow{font-size:10px;margin-bottom:16px}.hero-photo{height:460px;position:relative;max-width:330px;width:100%;justify-self:center;border-radius:45px 45px 35px 35px;border:9px solid #789e86;box-shadow:12px 15px 0 #b4cba570;overflow:hidden;transform:rotate(2deg)}.hero-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 40%}.photo-caption{display:none}.hero-bottom{grid-column:1/-1;border-top:1px solid #ae8b4145;display:flex;justify-content:space-between;font-size:9px;letter-spacing:2px;padding-top:16px;color:#65715f}.button{display:inline-flex;align-items:center;justify-content:center;padding:12px 25px;border-radius:26px;min-height:46px;font-size:13px;border:1px solid transparent;transition:transform .3s,box-shadow .3s,background .3s}.button:hover{transform:translateY(-3px);box-shadow:0 7px 20px #315d4520}.light,.dark{background:var(--sage);color:#234a35}.dark:hover,.light:hover{background:#9fbe8e}.intro{max-width:1000px;margin:auto;padding:85px 7%;text-align:center}.intro h2{font:40px/1.3 'Cormorant Garamond',serif;color:#252d27}.quote{font:italic 28px/1.4 'Cormorant Garamond',serif}.intro>p:last-child{font-size:15px;max-width:640px;margin:auto}.fine-line{height:45px;width:1px;background:var(--gold);margin:30px auto;transform-origin:top}.countdown{text-align:center;max-width:590px;min-height:590px;margin:0 auto 65px;padding:155px 65px 120px;background:url('assets/wreath.png') center/contain no-repeat}.countdown h2{font:34px 'Cormorant Garamond',serif;text-transform:uppercase;color:var(--ink);margin:0 0 22px}.clock{display:flex;justify-content:center;gap:12px;align-items:center}.clock strong{display:block;font:600 42px/1.2 'Cormorant Garamond',serif;color:#769b84;font-variant-numeric:tabular-nums}.clock span{font-size:9px;letter-spacing:1px;color:var(--deep)}.clock b{font:28px 'Cormorant Garamond',serif;color:#769b84}.countdown>p{font-size:12px;margin:18px 0 0}.celebration{padding:45px 7% 85px;max-width:1200px;margin:auto}.section-top{text-align:center}.section-top .eyebrow{margin-bottom:10px}.events{display:grid;grid-template-columns:1fr 1fr;gap:80px;margin-top:30px}.events article{text-align:center;padding:30px 20px;position:relative}.events article+article:before{content:'';width:1px;position:absolute;left:-40px;top:35px;bottom:35px;background:linear-gradient(transparent,#bda16a,transparent)}.event-no{font-size:10px;color:var(--gold);letter-spacing:2px}.events h3{font-size:47px;background:var(--sage);color:var(--deep);padding:5px 25px 0;max-width:300px;margin:18px auto 20px;border-radius:2px;clip-path:polygon(0 0,100% 0,95% 50%,100% 100%,0 100%,5% 50%)}.event-time{font:46px 'Cormorant Garamond',serif;margin:15px 0}.event-time small{font-size:22px}.events h4{font:26px/1.3 'Cormorant Garamond',serif;margin:20px 0 10px}.events article>p:not(.event-time){font-size:14px}.actions{display:flex;flex-direction:column;align-items:center;gap:18px;margin-top:24px}.text-button{border:0;border-bottom:1px solid var(--gold);background:none;color:var(--deep);font-size:13px;padding:4px}.portraits-party{display:grid;grid-template-columns:1.2fr 1fr;gap:60px;max-width:1200px;margin:0 auto;padding:40px 7% 90px;align-items:center}.gallery-section{text-align:center;min-width:0}.gallery-heading h2{font-size:45px;margin-bottom:20px}.gallery-heading>p{font-size:14px;max-width:300px;margin:0 auto 28px}.gallery{display:flex;overflow:auto;scroll-snap-type:x mandatory;scrollbar-width:none;max-width:330px;margin:0 auto;border:1px solid #d4d1c6;background:#f6f5ed;padding:12px 12px 45px;box-shadow:0 12px 30px #38392815;transform:rotate(-2deg);gap:12px}.gallery::-webkit-scrollbar{display:none}.gallery button{flex:0 0 100%;width:100%;height:400px;padding:0;border:0;scroll-snap-align:center;background:#eee;overflow:hidden}.gallery img{width:100%;height:100%;object-fit:cover}.gallery-controls{display:flex;gap:15px;align-items:center;justify-content:center;margin-top:22px;font-size:12px;color:var(--deep)}.gallery-controls button{border:1px solid #adc09d;background:#fffdf9b0;color:var(--deep);border-radius:20px;min-width:40px;min-height:40px;font-size:22px}.gallery-controls #gallery-pause{font-size:12px;padding:0 15px}.gallery-hint{font-size:11px;color:#687b67;margin:12px 0 0}.party{text-align:center}.party-img{display:none}.party-copy{background:var(--sage);border-radius:38px;padding:40px 28px;max-width:330px;margin:auto;box-shadow:0 10px 20px #315d4510}.party-copy .eyebrow{font-size:10px;margin-bottom:18px}.party-copy h2{color:white;font-size:48px;margin-bottom:5px}.music-note{display:block;font:68px/1.1 Georgia,serif;color:var(--deep);margin:12px 0}.party-copy>p:not(.eyebrow){font:20px/1.5 'Cormorant Garamond',serif}.party-copy .button{background:var(--deep);color:white;font-size:12px}.family{padding:60px 6%;max-width:1100px;text-align:center;margin:auto}.family h2{font-size:45px}.family-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:25px;margin-top:35px}.family h3{font:500 13px 'Manrope',sans-serif;color:var(--deep)}.family-grid p{font:22px/1.5 'Cormorant Garamond',serif}.details-cards{display:flex;flex-direction:column;align-items:center;gap:35px;padding:45px 20px 70px}.dress,.gift{background:var(--sage);border-radius:34px;text-align:center;width:330px;max-width:100%;padding:32px 25px}.dress h2,.gift h2{color:#fff;font-size:45px;margin-bottom:18px}.dress .eyebrow,.gift .eyebrow{font-size:10px;letter-spacing:1px}.dress-label{background:var(--deep);color:white;font-weight:400;font-size:12px;border-radius:30px;padding:8px 22px;display:inline-block}.dress>p:last-child,.gift>p{font:20px/1.5 'Cormorant Garamond',serif;margin:20px 0 0}.alias{display:block;font:600 19px/1.5 'Manrope',sans-serif;letter-spacing:1px;margin:20px 0;color:var(--deep)}.gift button{border:0;background:var(--deep);color:white;border-radius:25px;padding:10px 25px;font-size:12px}.gift #copy-status{font:12px 'Manrope',sans-serif;min-height:18px;margin-top:15px}.rsvp{text-align:center;padding:85px 20px 100px;max-width:1000px;margin:auto}.rsvp h2{font:46px/1.2 'Cormorant Garamond',serif}.rsvp>p{font:25px/1.5 'Cormorant Garamond',serif}.rsvp .eyebrow{font:11px 'Manrope',sans-serif}.rsvp .button{background:var(--deep);color:white;margin:10px 0 25px}.rsvp-small{font-family:'Great Vibes',cursive!important;font-size:36px!important}footer{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:30px;border-top:1px solid #ae8b4150;padding:30px 6%;font-size:11px;color:var(--deep);background:#fffdf7a0}footer p{font:28px 'Great Vibes',cursive;margin:0}dialog{padding:0;border:0;background:#182c23f5;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;color:white}dialog::backdrop{background:#182c23f5}dialog[open]{display:flex;align-items:center;justify-content:center}dialog img{max-width:85vw;max-height:88dvh;object-fit:contain}dialog button{position:absolute;background:#ffffff15;border:0;color:white;font-size:40px;width:48px;height:48px;line-height:1}#close{top:15px;right:20px}#prev{left:10px}#next{right:10px}#photo-count{position:absolute;bottom:5px;font-size:13px}.wedding-music{position:fixed;right:15px;bottom:15px;z-index:10;background:#fffdf7;color:var(--deep);border:1px solid #b39960;border-radius:22px;box-shadow:0 4px 24px #0002;font-size:13px}.wedding-music summary{cursor:pointer;padding:12px 18px}.wedding-music>div{padding:0 16px 16px}.wedding-music p{margin-bottom:8px}.wedding-music iframe{display:block;border:0;max-width:100%}.wedding-music a{display:block;font-size:12px;margin-top:10px;text-decoration:underline}.reveal{opacity:0;transform:translateY(45px);filter:blur(5px);transition:opacity 1s,transform 1.1s cubic-bezier(.2,.65,.25,1),filter 1s}.reveal.visible{opacity:1;transform:none;filter:none}.reveal h2{transition:transform 1.2s cubic-bezier(.2,.65,.25,1),opacity 1s;transform:translateY(20px);opacity:0}.reveal.visible h2{transform:none;opacity:1;transition-delay:.12s}.events article,.family-grid>div{opacity:0;transform:translateY(28px);transition:opacity .9s,transform 1s}.visible .events article,.visible .family-grid>div{opacity:1;transform:none}.visible .events article:nth-child(2),.visible .family-grid>div:nth-child(2){transition-delay:.2s}.visible .family-grid>div:nth-child(3){transition-delay:.4s}.scroll-progress{position:fixed;z-index:20;top:0;left:0;height:3px;width:100%;background:linear-gradient(90deg,#b4cba5,#b58d35,#ead9a9);transform:scaleX(0);transform-origin:left;pointer-events:none}.hero-photo{animation:photo-entrance 1.5s both}.hero-copy{animation:copy-entrance 1.3s both}@keyframes photo-entrance{from{opacity:0;transform:translateY(25px) rotate(5deg)}to{opacity:1;transform:translateY(0) rotate(2deg)}}@keyframes copy-entrance{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(max-width:700px){header{padding:12px 6%}nav{gap:15px}nav>a:not(.nav-rsvp){display:none}.hero{grid-template-columns:1fr;gap:25px;padding:35px 7% 20px;min-height:0}.hero-copy{padding:25px 0 10px;order:1}.hero-copy:before{inset:-30px -12px;opacity:.45}.hero h1{font-size:78px;line-height:1.15;margin:5px 0 15px}.hero-copy .eyebrow{font-size:9px}.hero-copy .button{font-size:12px}.hero-photo{order:2;height:420px;max-width:285px;margin:15px 0 25px}.hero-bottom{order:3;font-size:8px;letter-spacing:1px}.date{margin:20px auto}.intro{padding:65px 7%}.intro h2{font-size:33px}.quote{font-size:24px}.intro>p:last-child{font-size:14px}.countdown{width:96vw;max-width:440px;min-height:440px;padding:120px 38px 90px;margin-bottom:30px}.countdown h2{font-size:29px}.clock{gap:9px}.clock strong{font-size:34px}.clock span{font-size:8px}.clock b{font-size:22px}.celebration{padding:30px 6% 50px}.events{grid-template-columns:1fr;gap:25px;margin-top:15px}.events article{padding:15px 8px 30px}.events article+article:before{width:60%;height:1px;left:20%;top:-15px;background:linear-gradient(90deg,transparent,#bda16a,transparent)}.events h3{font-size:43px}.portraits-party{grid-template-columns:1fr;gap:55px;padding:30px 6% 50px}.gallery-heading h2{font-size:42px}.gallery{max-width:300px}.gallery button{height:380px}.family{padding:45px 7%}.family h2{font-size:40px}.family-grid{grid-template-columns:1fr;gap:20px}.details-cards{padding:35px 6% 45px}.rsvp{padding:55px 7% 80px}.rsvp h2{font-size:37px}.rsvp>p{font-size:22px}.rsvp br{display:none}footer{gap:20px;padding-bottom:85px}dialog img{max-width:95vw}#prev,#next{top:auto;bottom:30px}.wedding-music{right:10px;bottom:10px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.reveal,.reveal h2,.events article,.family-grid>div{opacity:1;transform:none;filter:none}}
/* Layered gold-frame reveals and a restrained metallic type highlight. */
.hero h1{color:#796127;background:linear-gradient(110deg,#745820 15%,#d5b967 36%,#8e6c2c 52%,#ddc98c 70%,#745820 85%);background-size:220% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:gold-light 9s ease-in-out infinite}.hero h1 i{-webkit-text-fill-color:#9c7c39}.hero-photo:after{content:'';position:absolute;inset:11px;border:1px solid #e9d7a0;border-radius:30px;pointer-events:none;clip-path:inset(0 0 100% 0);animation:frame-reveal 1.6s .5s forwards}.countdown{position:relative;background:none}.countdown:before{content:'';position:absolute;inset:0;background:url('assets/wreath.png') center/contain no-repeat;pointer-events:none;transform:rotate(-10deg) scale(.92);transition:transform 1.8s cubic-bezier(.16,1,.3,1)}.countdown.visible:before{transform:rotate(0deg) scale(1)}.countdown>*{position:relative}.portraits-party .party-copy{transition:transform 1.2s,opacity 1s;transform:translateY(35px);opacity:0}.portraits-party .visible .party-copy{transform:none;opacity:1}.dress,.gift{position:relative}.dress:after,.gift:after{content:'';position:absolute;inset:10px;border:1px solid #fff8;border-radius:25px;pointer-events:none;clip-path:inset(0 0 100% 0);transition:clip-path 1.5s .2s}.dress.visible:after,.gift.visible:after{clip-path:inset(0)}@keyframes gold-light{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}@keyframes frame-reveal{to{clip-path:inset(0)}}@media(prefers-reduced-motion:reduce){.hero-photo:after,.dress:after,.gift:after{clip-path:inset(0)}.countdown:before,.portraits-party .party-copy{transform:none;opacity:1}}
/* Cinematic depth, layered entrances, and scroll-linked photography. */
.hero{perspective:1200px}.hero-photo{will-change:transform}.hero-copy>*{animation:layer-in 1.4s cubic-bezier(.16,1,.3,1) both}.hero-copy h1{animation:layer-in 1.6s .15s cubic-bezier(.16,1,.3,1) both,gold-light 9s 1.8s ease-in-out infinite}.hero-copy .date{animation-delay:.35s}.hero-copy .button{animation-delay:.55s}.hero-copy:before{animation:wreath-in 2.2s cubic-bezier(.16,1,.3,1) both}.reveal{transition-duration:1.3s;transform:translateY(65px) scale(.97);filter:blur(7px)}.reveal.visible{transform:none;filter:none}.events article{transition:opacity 1s,transform 1.4s cubic-bezier(.16,1,.3,1);transform:translateY(55px) rotateX(8deg);transform-origin:center bottom}.visible .events article{transform:none}.events h3{transition:clip-path 1.4s .2s;clip-path:polygon(50% 0,50% 0,50% 50%,50% 100%,50% 100%,50% 50%)}.visible .events h3{clip-path:polygon(0 0,100% 0,95% 50%,100% 100%,0 100%,5% 50%)}.gallery{transition:transform 1.5s cubic-bezier(.16,1,.3,1),box-shadow .5s}.gallery-section:not(.visible) .gallery{transform:translateY(70px) rotate(-8deg) scale(.92)}.gallery-section.visible .gallery{transform:rotate(-2deg)}.gallery:hover{box-shadow:0 20px 45px #315d4528}.gallery img{transition:transform 5s ease}.gallery button.is-current img{transform:scale(1.035)}.countdown .clock>div{opacity:0;transform:translateY(20px);transition:transform .9s,opacity .9s}.countdown.visible .clock>div{opacity:1;transform:none}.countdown .clock>div:nth-of-type(2){transition-delay:.15s}.countdown .clock>div:nth-of-type(3){transition-delay:.3s}.countdown .clock>div:nth-of-type(4){transition-delay:.45s}.party-copy,.dress,.gift{box-shadow:0 16px 36px #315d4518}.button{position:relative;overflow:hidden}.button:after{content:'';position:absolute;inset:-50%;background:linear-gradient(100deg,transparent 35%,#ffffff60 50%,transparent 65%);transform:translateX(-110%) rotate(15deg);transition:transform .7s;pointer-events:none}.button:hover:after{transform:translateX(110%) rotate(15deg)}@keyframes layer-in{from{opacity:0;transform:translateY(35px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}@keyframes wreath-in{from{opacity:0;transform:scale(.85) rotate(-12deg)}to{opacity:.75;transform:scale(1) rotate(0)}}@media(max-width:700px){@keyframes wreath-in{from{opacity:0;transform:scale(.9) rotate(-8deg)}to{opacity:.45;transform:none}}}@media(prefers-reduced-motion:reduce){.hero-copy>*,.hero-copy:before{animation:none!important}.reveal,.events article,.countdown .clock>div{opacity:1;transform:none;filter:none}.events h3{clip-path:polygon(0 0,100% 0,95% 50%,100% 100%,0 100%,5% 50%)}.gallery button.is-current img{transform:none}.button:after{display:none}}
.audio-toggle{position:fixed;right:15px;bottom:15px;z-index:10;border:1px solid #b39960;border-radius:25px;padding:10px 20px;background:#fffdf7;color:var(--deep);box-shadow:0 4px 24px #0002;font-size:13px;text-align:left;min-height:48px}.audio-toggle>span:first-child{display:inline-block;margin-right:5px;font-size:19px}.audio-toggle small{display:block;font-size:10px;letter-spacing:.2px;opacity:.75}.audio-toggle[aria-pressed=true]>span:first-child{animation:note-pulse 2s ease-in-out infinite}@keyframes note-pulse{50%{transform:rotate(12deg) scale(1.12)}}@media(max-width:700px){.audio-toggle{right:10px;bottom:10px;padding:9px 16px}}@media(prefers-reduced-motion:reduce){.audio-toggle>span{animation:none!important}}
body.intro-locked{overflow:hidden}.envelope-intro{position:fixed;inset:0;z-index:100;background:#f4f3ee url('assets/marble.jpg') center/cover;display:flex;align-items:center;justify-content:center;flex-direction:column;perspective:1500px;overflow:hidden;transition:opacity 1s .9s,visibility 0s 2s}.intro-heading{text-align:center;margin-bottom:45px;animation:layer-in 1.2s both}.intro-heading p{font-size:10px;letter-spacing:3px;color:var(--deep);margin-bottom:15px}.intro-heading h2{font-size:68px;color:var(--gold);margin:0}.envelope{position:relative;width:min(460px,82vw);height:290px;border:0;background:none;perspective:1200px;filter:drop-shadow(0 22px 25px #243c352c);animation:envelope-arrive 1.5s cubic-bezier(.16,1,.3,1) both;isolation:isolate}.envelope-back{position:absolute;inset:0;border-radius:8px;background:#789d83;border:1px solid #b79a57}.envelope-front{position:absolute;inset:0;border-radius:8px;background:linear-gradient(145deg,#c6d8b9,#acc49e);clip-path:polygon(0 0,50% 55%,100% 0,100% 100%,0 100%);z-index:4}.envelope-front:after{content:'';position:absolute;inset:14px;border:1px solid #cbb474;border-radius:3px;opacity:.75}.envelope-flap{position:absolute;inset:0;background:linear-gradient(155deg,#d4e0c8,#b6cba8);clip-path:polygon(0 0,100% 0,50% 58%);transform-origin:top;z-index:5;transition:transform 1s cubic-bezier(.4,0,.2,1),filter 1s;backface-visibility:visible}.invitation-card{position:absolute;inset:15px 24px 5px;background:#fffdf9 url('assets/marble.jpg') center/cover;border:1px solid #c5a65b;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;z-index:3;transition:transform 1.4s .55s cubic-bezier(.16,1,.3,1),box-shadow 1.4s}.invitation-card>span{font:11px 'Cormorant Garamond',serif;letter-spacing:2px;color:var(--deep)}.invitation-card strong{font:47px/1.2 'Great Vibes',cursive;font-weight:400;color:#a07d35}.invitation-card i{font:italic 26px 'Cormorant Garamond',serif}.gold-seal{position:absolute;left:50%;top:51%;transform:translate(-50%,-50%);width:88px;height:88px;border-radius:48% 52% 45% 55% / 54% 45% 55% 46%;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 30% 20%,#f9e8ac 0%,#d2a943 30%,#ae7b27 62%,#e8ca75 90%);border:2px solid #d2ac53;box-shadow:0 5px 10px #59401650,inset 0 0 0 5px #e8ca7580,inset 0 0 0 7px #a87a3770;z-index:6;transition:transform .65s,opacity .45s,filter .65s}.gold-seal>span{font:30px 'Cormorant Garamond',serif;color:#78501d;text-shadow:0 1px #ffe6a0}.gold-seal>span>span{font-style:italic;font-size:21px}.envelope:hover .gold-seal{filter:brightness(1.1);transform:translate(-50%,-50%) scale(1.06)}.intro-instruction{font-size:12px;letter-spacing:1px;color:var(--deep);margin-top:35px;animation:soft-pulse 2.5s infinite}.envelope-intro.opening .gold-seal{transform:translate(-50%,-30%) scale(1.2);opacity:0}.envelope-intro.opening .envelope-flap{transform:rotateX(175deg);filter:brightness(.85);z-index:2}.envelope-intro.opening .invitation-card{transform:translateY(-140px) scale(1.08);box-shadow:0 15px 35px #243c3530;z-index:4}.envelope-intro.opening .intro-heading,.envelope-intro.opening .intro-instruction{opacity:0;transition:opacity .4s}.envelope-intro.opening{opacity:0;visibility:hidden;pointer-events:none}.intro-locked header,.intro-locked main,.intro-locked footer,.intro-locked .audio-toggle{visibility:hidden}.invite-entering .hero-copy{animation:copy-entrance 1.4s both}.invite-entering .hero-photo{animation:photo-entrance 1.7s .2s both}@keyframes envelope-arrive{from{opacity:0;transform:translateY(80px) rotateX(18deg) rotate(-5deg) scale(.8)}to{opacity:1;transform:translateY(0) rotateX(0) rotate(0) scale(1)}}@keyframes soft-pulse{50%{opacity:.45}}@media(max-width:700px){.envelope{height:225px}.intro-heading{margin-bottom:35px}.intro-heading h2{font-size:58px}.gold-seal{width:76px;height:76px}.invitation-card strong{font-size:38px}.invitation-card>span{font-size:9px}.envelope-intro.opening .invitation-card{transform:translateY(-100px) scale(1.05)}}@media(prefers-reduced-motion:reduce){.envelope-intro{transition:opacity .2s,visibility 0s .2s}.envelope-intro.opening .invitation-card{transform:none}.envelope-flap,.gold-seal{transition:none}.intro-instruction{animation:none}}
.countdown{max-width:690px;min-height:690px;padding:180px 60px 150px}.countdown:before{opacity:.45}.countdown .count-kicker{font:9px 'Manrope',sans-serif;letter-spacing:2px;color:#80622b;margin:0 0 12px}.countdown h2{font:50px 'Great Vibes',cursive;text-transform:none;color:#9f7c35;margin:0 0 28px}.countdown .clock{gap:12px;perspective:700px}.clock>div{width:88px;min-height:105px;padding:15px 5px 12px;border:1px solid #d2b366;background:linear-gradient(145deg,#fffefaed,#f5edd8e8);border-radius:14px;box-shadow:0 8px 20px #9f7c3518,inset 0 1px #fff;position:relative;overflow:hidden}.clock>div:before{content:'';position:absolute;inset:0;background:linear-gradient(115deg,transparent 25%,#fff9 45%,transparent 65%);transform:translateX(-150%);animation:clock-sheen 7s ease-in-out infinite}.clock>div:nth-of-type(2):before{animation-delay:.25s}.clock>div:nth-of-type(3):before{animation-delay:.5s}.clock>div:nth-of-type(4):before{animation-delay:.75s}.clock strong{font-size:46px;color:#a47e30;position:relative;text-shadow:0 1px #fff;transform-origin:center}.clock span{position:relative;display:block;font-size:8px;letter-spacing:1.2px;margin-top:8px;color:#705b32}.clock b{color:#bb984c;animation:colon-pulse 2s ease-in-out infinite}.countdown .count-orbit{position:absolute;inset:10%;width:80%;height:80%;overflow:visible;pointer-events:none;transform:rotate(-90deg)}.count-orbit circle{fill:none;stroke-width:.7}.orbit-track{stroke:#c7a55644}.seconds-progress{stroke:#c49b3e;stroke-width:1.2;stroke-dasharray:628.32;stroke-dashoffset:0;transition:stroke-dashoffset .9s linear;filter:drop-shadow(0 0 2px #d9b75a)}.countdown>p:last-child{color:#7c6535;letter-spacing:1px;margin-top:26px}.countdown.visible .clock>div{animation:tile-breathe 6s 1.5s ease-in-out infinite}.countdown.visible .clock>div:nth-of-type(2){animation-delay:1.8s}.countdown.visible .clock>div:nth-of-type(3){animation-delay:2.1s}.countdown.visible .clock>div:nth-of-type(4){animation-delay:2.4s}@keyframes clock-sheen{0%,55%{transform:translateX(-150%)}85%,100%{transform:translateX(150%)}}@keyframes colon-pulse{50%{opacity:.3}}@keyframes tile-breathe{50%{box-shadow:0 12px 28px #9f7c3530,inset 0 1px #fff;transform:translateY(-4px)}}@media(max-width:700px){.countdown{max-width:440px;min-height:440px;padding:108px 24px 85px}.countdown h2{font-size:38px;margin-bottom:18px}.countdown .clock{gap:5px}.clock>div{width:59px;min-height:81px;padding:10px 3px;border-radius:10px}.clock strong{font-size:34px}.clock span{font-size:7px;letter-spacing:.4px;margin-top:4px}.countdown .clock b{font-size:17px}.countdown .count-kicker{font-size:8px;letter-spacing:1px}.countdown>p:last-child{font-size:10px;margin-top:18px}}@media(prefers-reduced-motion:reduce){.clock>div:before,.clock b,.countdown.visible .clock>div{animation:none!important}.seconds-progress{transition:none}}
.details-cards{gap:55px}.envelope-detail{width:430px;max-width:100%;min-height:450px;border-radius:28px;padding:35px 28px 180px;position:relative;isolation:isolate;overflow:hidden;background:#b4cba5;perspective:1200px}.envelope-detail:after{display:none}.detail-backdrop{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;z-index:-3;opacity:.65;transform:scale(1.08);transition:transform 2.2s cubic-bezier(.16,1,.3,1)}.detail-shade{position:absolute;inset:0;z-index:-2;background:linear-gradient(#eaf0e4a0,#f8f6ed65 45%,#244d39a8);backdrop-filter:blur(1px)}.mini-envelope{position:absolute;left:7%;right:7%;height:175px;bottom:25px;perspective:800px;z-index:3;filter:drop-shadow(0 8px 12px #142e2438);pointer-events:none}.mini-back{position:absolute;inset:0;background:#7e9f84;border:1px solid #d9bd7f;border-radius:6px}.mini-front{position:absolute;inset:0;background:linear-gradient(145deg,#c4d5b8,#adc59e);clip-path:polygon(0 0,50% 52%,100% 0,100% 100%,0 100%);border-radius:6px;z-index:4}.mini-front:after{content:'';position:absolute;inset:12px;border:1px solid #d6c18d;border-radius:3px}.mini-flap{position:absolute;inset:0;clip-path:polygon(0 0,100% 0,50% 55%);background:linear-gradient(145deg,#d4e1c8,#b2c8a3);transform-origin:top;z-index:5;transition:transform 1.1s .4s cubic-bezier(.4,0,.2,1)}.mini-seal{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);width:55px;height:55px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 30% 20%,#f4e1a1,#bd913b 60%,#d8b765);border:2px solid #d8b765;box-shadow:inset 0 0 0 4px #e8ce8b80,0 4px 8px #61491c40;font:19px 'Cormorant Garamond',serif;color:#77521f;z-index:6;transition:opacity .4s .3s,transform .6s .3s}.detail-letter{position:relative;background:#fffdf8e8;border:1px solid #d4bc82;border-radius:5px;padding:30px 18px 22px;box-shadow:0 12px 28px #183c3320;backdrop-filter:blur(8px);transform:translateY(190px) scale(.82);opacity:0;transition:transform 1.6s .8s cubic-bezier(.16,1,.3,1),opacity .7s .8s;z-index:2}.envelope-detail.visible .detail-letter{transform:translateY(0) scale(1);opacity:1}.envelope-detail.visible .mini-flap{transform:rotateX(175deg);z-index:1}.envelope-detail.visible .mini-seal{opacity:0;transform:translate(-50%,-20%) scale(1.2)}.envelope-detail.visible .detail-backdrop{transform:scale(1)}.envelope-detail h2{color:#a27e34;margin-bottom:18px;font-size:44px}.envelope-detail .eyebrow{color:#315d45}.envelope-detail .detail-letter>p{color:#294a37;font:20px/1.5 'Cormorant Garamond',serif}.envelope-detail .detail-letter>p.eyebrow{font:9px/1.8 'Manrope',sans-serif;letter-spacing:1.5px;margin:0 0 15px}.envelope-detail h2{opacity:1!important;transform:none!important}.envelope-detail .alias{font-size:18px}.envelope-detail #copy-status{font:12px 'Manrope',sans-serif;min-height:18px;margin:12px 0 0}.envelope-detail .dress-label{font-size:11px}.envelope-detail.visible .detail-letter h2{animation:layer-in 1.1s 1.1s both}.envelope-detail.visible .detail-letter>p,.envelope-detail.visible .detail-letter>strong,.envelope-detail.visible .detail-letter>button{animation:layer-in 1s 1.3s both}.envelope-detail.visible .detail-letter>p.eyebrow{animation-delay:1s}@media(max-width:700px){.envelope-detail{min-height:440px;padding:28px 22px 165px}.mini-envelope{height:155px;bottom:20px}.detail-letter{padding:25px 14px 18px}.envelope-detail h2{font-size:42px}}@media(prefers-reduced-motion:reduce){.detail-letter{opacity:1;transform:none;transition:none}.mini-flap{transform:rotateX(175deg);transition:none}.mini-seal{display:none}.detail-backdrop{transform:none;transition:none}.envelope-detail.visible .detail-letter>*{animation:none!important}}
/* Motion-graphics countdown: depth pullback, close-up, then settle. */
.countdown{perspective:1100px;isolation:isolate}.countdown.visible{animation:countdown-depth 2.1s cubic-bezier(.16,1,.3,1) both}.countdown .clock strong{font-family:'Cormorant Garamond',Georgia,serif;font-weight:600;font-size:54px;font-style:italic;letter-spacing:-2px;line-height:1.05;background:linear-gradient(115deg,#795315 5%,#d3ae50 30%,#f4dfa1 44%,#a77b24 60%,#d6b15b 80%,#77531d);background-size:260% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:none;animation:gold-light 5s ease-in-out infinite}.countdown h2{font-size:62px;background:linear-gradient(110deg,#8d6825,#d6b354 35%,#f7e8b6 50%,#957029 70%);background-size:230% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:gold-light 6s ease-in-out infinite}.countdown .clock>div{border-color:#c7a556;background:linear-gradient(145deg,#fffdf8f2,#f2e4c7c9);box-shadow:0 9px 28px #b7923e25,inset 0 1px #fff}.countdown.visible .clock{animation:digits-focus 1.8s .18s cubic-bezier(.16,1,.3,1) both}.gold-sparkles{position:absolute;inset:0;pointer-events:none;overflow:hidden;border-radius:inherit;z-index:7}.gold-spark{position:absolute;width:15px;height:15px;background:linear-gradient(45deg,#c3942e,#fff5cb 50%,#c3942e);clip-path:polygon(50% 0,59% 40%,100% 50%,59% 60%,50% 100%,41% 60%,0 50%,41% 40%);filter:drop-shadow(0 0 4px #e6c56b);opacity:0;animation:gold-spark 5.2s var(--spark-delay,0s) ease-in-out infinite}.gold-spark:after{content:'';position:absolute;inset:6px;background:#fff}.gold-sparkles-count{inset:8%;border-radius:50%;z-index:0}.hero h1,.hero .date,.detail-letter h2{position:relative}.gold-seal .gold-sparkles{inset:-10px;overflow:visible}.gold-seal .gold-spark{width:11px;height:11px}.envelope-detail .gold-sparkles{z-index:8}.countdown>div.clock,.countdown>h2,.countdown>p{z-index:2}.countdown .count-orbit{filter:drop-shadow(0 0 4px #e7c77288)}@keyframes countdown-depth{0%{opacity:0;transform:perspective(1100px) translateZ(130px) scale(1.13);filter:blur(9px)}32%{opacity:1;transform:perspective(1100px) translateZ(-110px) scale(.88);filter:blur(1px)}72%{transform:perspective(1100px) translateZ(30px) scale(1.035);filter:blur(0)}100%{opacity:1;transform:perspective(1100px) translateZ(0) scale(1);filter:blur(0)}}@keyframes digits-focus{0%{opacity:0;transform:scale(.72);filter:blur(7px)}65%{opacity:1;transform:scale(1.06);filter:blur(0)}100%{opacity:1;transform:scale(1);filter:blur(0)}}@keyframes gold-spark{0%,65%,100%{opacity:0;transform:scale(.15) rotate(0deg)}75%{opacity:.95;transform:scale(1) rotate(35deg)}83%{opacity:.2;transform:scale(.55) rotate(65deg)}90%{opacity:.7;transform:scale(.8) rotate(90deg)}}@media(max-width:700px){.countdown .clock strong{font-size:39px;letter-spacing:-1px}.countdown h2{font-size:47px;margin-bottom:12px}.gold-spark{width:12px;height:12px}}@media(prefers-reduced-motion:reduce){.countdown.visible,.countdown.visible .clock,.countdown .clock strong,.countdown h2{animation:none!important}.gold-sparkles{display:none}}
/* Envelopes withdraw after the reveal, leaving the full letter unobstructed. */
.envelope-detail.visible .mini-envelope{animation:envelope-withdraw 1s 1.8s cubic-bezier(.4,0,.2,1) forwards}.envelope-detail .detail-letter{z-index:4}.envelope-detail .mini-envelope{z-index:5}.envelope-detail.visible .detail-letter{transition-delay:.7s}.envelope-detail{padding-bottom:55px;min-height:430px}.envelope-detail .detail-letter{margin-bottom:12px}@keyframes envelope-withdraw{to{transform:translateY(190px) scale(.9);opacity:0;visibility:hidden}}.party-copy{position:relative;overflow:hidden;background:linear-gradient(145deg,#d4e1c6e6,#a9c39be8);border:1px solid #c8af70;border-radius:28px;padding:36px 28px;box-shadow:0 18px 45px #315d4520;backdrop-filter:blur(8px)}.party-copy:before{content:'';position:absolute;inset:0;background:url('assets/3587.jpg') center/cover;opacity:.11;z-index:-1}.party-copy h2{color:#846225;font-size:55px}.party-copy .music-note{width:82px;height:82px;border-radius:50%;margin:15px auto 23px;background:linear-gradient(145deg,#f3df9b,#b78c32);color:#fff9e7;display:grid;place-items:center;font:54px Georgia,serif;box-shadow:0 7px 22px #a9843335}.music-equalizer{display:flex;justify-content:center;align-items:center;gap:5px;height:35px;margin:14px 0 22px}.music-equalizer span{width:4px;height:12px;border-radius:4px;background:linear-gradient(#dfc477,#6c8f6d);animation:music-wave 1.2s var(--bar-delay) ease-in-out infinite;transform-origin:center}.party-copy .button{border:1px solid #e1d2a4;box-shadow:0 5px 18px #315d4528}.party.visible .music-note{animation:music-disc-enter 1.3s .4s both}.party.visible .party-copy>p{animation:layer-in 1.2s .6s both}.party.visible .party-copy>.button{animation:layer-in 1.2s .8s both}@keyframes music-wave{50%{height:32px;opacity:.6}}@keyframes music-disc-enter{from{transform:scale(.5) rotate(-80deg);opacity:0}to{transform:scale(1) rotate(0);opacity:1}}@media(max-width:700px){.envelope-detail{padding-bottom:35px;min-height:410px}}@media(prefers-reduced-motion:reduce){.envelope-detail.visible .mini-envelope{display:none}.music-equalizer span{animation:none}.party.visible .music-note,.party.visible .party-copy>*{animation:none!important}}
.envelope .real-envelope{position:absolute;inset:-12% -9%;width:118%;height:124%;object-fit:contain;z-index:8;pointer-events:none;filter:drop-shadow(0 15px 18px #263c3322);transition:opacity .55s .12s,transform .8s cubic-bezier(.4,0,.2,1)}.envelope:not(:hover) .real-envelope{transform:translateY(0)}.envelope:hover .real-envelope{transform:translateY(-4px)}.envelope-intro.opening .real-envelope{opacity:0;transform:translateY(14px) scale(1.04)}.envelope:not(.unused) .gold-seal{opacity:0}.envelope-intro.opening .envelope-flap{transition-delay:.25s}.envelope-intro.opening .invitation-card{transition-delay:.7s}.envelope-intro{background-color:#f6f5f0}.intro-heading h2{text-shadow:0 2px 14px #fff9}.envelope{filter:none}@media(prefers-reduced-motion:reduce){.envelope .real-envelope{transition:none}.envelope:hover .real-envelope{transform:none}}

.audio-toggle{background:linear-gradient(120deg,#b88b31,#f1d88d 42%,#c79d47 75%,#e9cc7d);color:#563d17;border:1px solid #c8a450;box-shadow:0 5px 20px #94712630,inset 0 1px #fff6;text-align:center;font-weight:600;padding:12px 22px}.audio-toggle>span:first-child{display:none}.audio-toggle:hover{filter:brightness(1.06)}

/* One photographic envelope, split into its actual body and hinged flap. */
.envelope{width:min(500px,86vw);height:auto;aspect-ratio:3/2;isolation:isolate;perspective:1400px}.envelope .envelope-back,.envelope .envelope-front,.envelope .envelope-flap,.envelope .gold-seal{display:none}.photo-envelope-base,.photo-envelope-flap{position:absolute;inset:0;background:url('assets/wedding-envelope.png') center/100% 100% no-repeat;pointer-events:none}.photo-envelope-base{z-index:4;clip-path:polygon(0 0,2.3% 10.5%,50% 65%,97.7% 10.5%,100% 0,100% 100%,0 100%)}.photo-envelope-flap{z-index:6;clip-path:polygon(2.3% 10.5%,97.7% 10.5%,50% 73%);transform-origin:50% 10.5%;transition:transform 1.15s .15s cubic-bezier(.4,0,.2,1),filter 1.15s;backface-visibility:visible}.envelope .invitation-card{inset:16% 7% 10%;z-index:2;opacity:0;transform:translateY(8px) scale(.96);transition:transform 1.3s .65s cubic-bezier(.16,1,.3,1),opacity .5s .5s}.envelope-intro.opening .photo-envelope-flap{transform:rotateX(175deg);filter:brightness(.82);z-index:1}.envelope-intro.opening .invitation-card{opacity:1;transform:translateY(-48%) scale(1.03);z-index:3}.envelope-intro.opening .photo-envelope-base{animation:photo-envelope-withdraw .7s 1.1s forwards}.envelope-intro.opening{transition:opacity .65s 1.35s,visibility 0s 2s}@keyframes photo-envelope-withdraw{to{transform:translateY(70px);opacity:.3}}@media(max-width:700px){.envelope{height:auto}.envelope .invitation-card strong{font-size:34px}.envelope .invitation-card>span{font-size:8px}}@media(prefers-reduced-motion:reduce){.photo-envelope-flap,.envelope .invitation-card{transition:none}.envelope-intro.opening .photo-envelope-base{animation:none}}
/* Opening sequence: editorial title, depth, a gold light sweep, then invitation. */
.envelope-intro{isolation:isolate}.envelope-intro:before{content:'';position:absolute;inset:18px;border:1px solid #b89b5566;pointer-events:none;z-index:-1;animation:intro-frame 1.8s .2s cubic-bezier(.16,1,.3,1) both}.envelope-intro:after{content:'';position:absolute;inset:-80%;background:linear-gradient(110deg,transparent 44%,#f8df9240 49%,#fff9df88 50%,#ead08230 51%,transparent 56%);pointer-events:none;z-index:10;transform:translateX(-70%);animation:intro-gold-sweep 2.8s .35s ease-in-out both}.intro-heading{animation:intro-title-arrive 1.6s .2s cubic-bezier(.16,1,.3,1) both}.intro-heading p{animation:layer-in 1.2s .6s both}.intro-heading h2{background:linear-gradient(115deg,#806022 20%,#d5b564 43%,#fff0b9 50%,#a88435 65%);background-size:240% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:gold-light 6s ease-in-out infinite;letter-spacing:.5px}.envelope{animation:intro-envelope-depth 2s .35s cubic-bezier(.16,1,.3,1) both;transform-style:preserve-3d}.intro-instruction{animation:layer-in 1s 1.7s both,soft-pulse 2.5s 2.7s infinite}.intro-heading:after{content:'';display:block;width:90px;height:1px;margin:19px auto 0;background:linear-gradient(90deg,transparent,#b99544,transparent);transform-origin:center;animation:intro-line 1.3s 1s both}.invite-entering header{animation:layer-in 1s both}.invite-entering .hero-copy .eyebrow{animation:layer-in 1.3s .15s both}.invite-entering .hero-copy h1{animation:invitation-name 1.7s .25s cubic-bezier(.16,1,.3,1) both,gold-light 9s 2s infinite}.invite-entering .hero-copy .date{animation:layer-in 1.2s .7s both}.invite-entering .hero-copy .button{animation:layer-in 1.2s .9s both}.invite-entering .hero-photo{animation:invitation-photo 1.9s .3s cubic-bezier(.16,1,.3,1) both}.invite-entering .audio-toggle{animation:layer-in 1s 1.4s both}@keyframes intro-title-arrive{from{opacity:0;transform:translateY(-35px) scale(1.15);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes intro-envelope-depth{0%{opacity:0;transform:perspective(1200px) translateZ(-350px) translateY(70px) rotateX(22deg) rotateZ(-7deg);filter:blur(7px)}65%{opacity:1;transform:perspective(1200px) translateZ(20px) translateY(-7px) rotateX(-2deg) rotateZ(1deg);filter:blur(0)}100%{opacity:1;transform:perspective(1200px) translateZ(0) translateY(0) rotateX(0) rotateZ(0);filter:blur(0)}}@keyframes intro-gold-sweep{0%{transform:translateX(-70%);opacity:0}25%{opacity:.7}75%{opacity:.7}100%{transform:translateX(70%);opacity:0}}@keyframes intro-frame{from{opacity:0;clip-path:inset(0 50%)}to{opacity:1;clip-path:inset(0)}}@keyframes intro-line{from{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}@keyframes invitation-name{from{opacity:0;transform:translateY(40px) scale(.88);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes invitation-photo{from{opacity:0;clip-path:inset(100% 0 0 0);transform:translateY(50px) rotate(6deg) scale(1.08)}to{opacity:1;clip-path:inset(0);transform:translateY(0) rotate(2deg) scale(1)}}@media(max-width:700px){.envelope-intro:before{inset:12px}.intro-heading{margin-bottom:25px}.intro-heading:after{margin-top:12px}}@media(prefers-reduced-motion:reduce){.envelope-intro:before,.envelope-intro:after,.intro-heading,.intro-heading:after,.intro-heading>* ,.envelope,.intro-instruction,.invite-entering header,.invite-entering .hero-copy>*,.invite-entering .hero-photo,.invite-entering .audio-toggle{animation:none!important}.envelope-intro:after{display:none}}
/* Gold link buttons with a soft halo and tactile highlight. */
a.button,.party-copy a.button,.rsvp a.button{background:linear-gradient(115deg,#b88a2e 0%,#efd58c 35%,#d1aa52 65%,#e7c578 100%);color:#493615;border:1px solid #c9a34d;box-shadow:0 0 16px #d7b45b40,0 5px 16px #97702b24,inset 0 1px #fff8;font-weight:600;transition:transform .3s,box-shadow .4s,filter .3s}a.button:hover,.party-copy a.button:hover,.rsvp a.button:hover{background:linear-gradient(115deg,#c79b40,#f8e1a4 40%,#d9b45f 75%,#efd28c);box-shadow:0 0 28px #d7b45b80,0 8px 24px #97702b30,inset 0 1px #fffa;transform:translateY(-3px)}a.button:active{transform:translateY(0) scale(.98);box-shadow:0 0 32px #e1be6690}a.button:focus-visible{outline:3px solid #806020;outline-offset:5px;box-shadow:0 0 25px #d7b45b80}.nav-rsvp{color:#826225;border-color:#bd9846;text-shadow:0 0 12px #dfc17650}
#rsvp{position:relative;gap:10px;min-width:270px;overflow:visible;isolation:isolate}#rsvp:after{display:none}.wa-send-icon{font-size:18px;display:inline-block;transform:rotate(-25deg);transition:transform .4s}.wa-message{position:absolute;left:50%;bottom:calc(100% + 13px);padding:10px 16px;border:1px solid #d5b872;border-radius:16px 16px 4px 16px;background:#fffcf2;color:#4f643e;font:13px 'Manrope',sans-serif;white-space:nowrap;box-shadow:0 8px 28px #b7943b25;opacity:0;pointer-events:none;transform:translate(-50%,20px) scale(.6);transform-origin:bottom center}.wa-message>span{color:#b4913d;font-size:17px;margin-left:5px}#rsvp:hover .wa-send-icon{transform:translate(3px,-3px) rotate(-35deg)}#rsvp:hover .wa-message{animation:wa-preview 2.8s ease-in-out infinite}#rsvp.wa-launching .wa-send-icon{animation:wa-plane 1s cubic-bezier(.4,0,.2,1)}#rsvp.wa-launching .wa-message{animation:wa-bubble 1.8s cubic-bezier(.16,1,.3,1) both}#rsvp.wa-launching{animation:wa-halo 1.4s ease-out}.wa-launch-status{font:12px/1.5 'Manrope',sans-serif!important;min-height:20px;margin:0 0 15px;color:#587249}@keyframes wa-preview{0%,100%{opacity:0;transform:translate(-50%,14px) scale(.85)}25%,70%{opacity:1;transform:translate(-50%,0) scale(1)}}@keyframes wa-plane{0%{opacity:1;transform:translate(0,0) rotate(-25deg)}55%{opacity:0;transform:translate(70px,-65px) rotate(-30deg) scale(.65)}60%{opacity:0;transform:translate(-15px,15px) rotate(-25deg)}100%{opacity:1;transform:translate(0,0) rotate(-25deg)}}@keyframes wa-bubble{0%{opacity:0;transform:translate(-50%,30px) scale(.6)}40%,80%{opacity:1;transform:translate(-50%,0) scale(1)}100%{opacity:0;transform:translate(-50%,-12px) scale(.96)}}@keyframes wa-halo{30%{box-shadow:0 0 0 12px #d7b45b20,0 0 35px #d7b45b80}100%{box-shadow:0 0 0 28px #d7b45b00,0 0 16px #d7b45b40}}@media(prefers-reduced-motion:reduce){#rsvp,.wa-send-icon,.wa-message{animation:none!important;transition:none}.wa-message{display:none}}
.hero-copy>.eyebrow{font-size:13px;font-weight:600;letter-spacing:2.4px;line-height:1.8;max-width:340px;margin:0 auto 24px;text-align:center;color:#35583e;text-shadow:0 1px 8px #fff;display:block}.hero-copy>.eyebrow:after{content:'';display:block;width:70px;height:1px;margin:12px auto 0;background:linear-gradient(90deg,transparent,#b6964e,transparent)}@media(max-width:700px){.hero-copy>.eyebrow{font-size:12px;font-weight:600;letter-spacing:1.7px;max-width:290px;margin-bottom:20px}}
/* Prominent, replayable motion that remains readable once settled. */
.reveal{transition:opacity .95s,transform 1.35s cubic-bezier(.16,1,.3,1),filter .95s}.reveal:not(.visible){opacity:0;transform:translateY(90px) scale(.9);filter:blur(12px)}.reveal.visible{opacity:1;transform:none;filter:none}.reveal h2{will-change:translate,scale;transform-origin:center;transition:translate .15s linear,scale .15s linear}.countdown.visible{animation:countdown-depth 2.5s cubic-bezier(.16,1,.3,1) both}.intro.visible .fine-line{animation:intro-rule-grow 1.6s .3s both}.events article{transition-duration:1.5s}.visible .events article:nth-child(2){transition-delay:.45s}.gallery-section.visible .gallery{animation:portrait-reveal 1.7s cubic-bezier(.16,1,.3,1) both}.party.visible .party-copy{animation:music-card-reveal 1.6s cubic-bezier(.16,1,.3,1) both}@keyframes intro-rule-grow{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}@keyframes portrait-reveal{0%{opacity:0;transform:translateY(85px) rotate(-12deg) scale(.75)}70%{opacity:1;transform:translateY(-8px) rotate(1deg) scale(1.03)}100%{opacity:1;transform:translateY(0) rotate(-2deg) scale(1)}}@keyframes music-card-reveal{from{opacity:0;transform:perspective(900px) rotateY(-20deg) translateX(50px) scale(.85)}to{opacity:1;transform:perspective(900px) rotateY(0) translateX(0) scale(1)}}@media(prefers-reduced-motion:reduce){.reveal:not(.visible){opacity:1;transform:none;filter:none}.reveal h2{translate:none!important;scale:1!important}.countdown.visible,.gallery-section.visible .gallery,.party.visible .party-copy{animation:none!important}}
.film-opening{position:fixed;inset:0;z-index:110;background:#f6f4ed;display:grid;place-items:center;overflow:hidden;transition:opacity 1.1s,visibility 0s 1.1s}.film-opening>video{width:100%;height:100%;object-fit:cover;object-position:center 40%;filter:saturate(.8) brightness(.93);animation:film-drift 7s ease-out both}.film-vignette{position:absolute;inset:0;background:linear-gradient(#f7f5ed95 0%,transparent 23%,transparent 55%,#e9e8dcba 90%,#f5f4ed);box-shadow:inset 0 0 120px 40px #f4f2e9a0;pointer-events:none}.film-opening-copy{position:absolute;bottom:18%;text-align:center;color:#fffdf3;text-shadow:0 2px 25px #263a2d90;animation:layer-in 2s .5s both}.film-opening-copy p{font-size:10px;letter-spacing:3px}.film-opening-copy h2{font-size:65px;color:#fffbe9;margin:0}.film-opening>button{position:absolute;bottom:6%;border:1px solid #b79751;background:#fff9e8cf;color:#594520;border-radius:30px;padding:12px 22px;font-size:12px;backdrop-filter:blur(8px)}.film-opening.finished{opacity:0;visibility:hidden;pointer-events:none}.video-opening .envelope-intro{visibility:hidden}.video-opening .envelope-intro *{animation-play-state:paused!important}.film-ending{height:640px;max-width:1100px;margin:30px auto 0;position:relative;overflow:hidden;isolation:isolate}.film-ending>video{width:100%;height:100%;object-fit:cover;object-position:center 38%;filter:saturate(.72) brightness(.85);mask-image:linear-gradient(transparent,#000 20%,#000 75%,transparent)}.ending-vignette{position:absolute;inset:0;background:linear-gradient(#f7f5ef90,transparent 30%,#183c3340 65%,#f7f5ef80);box-shadow:inset 0 0 70px 25px #f4f2e980}.film-ending-copy{position:absolute;left:5%;right:5%;bottom:14%;text-align:center;color:white;text-shadow:0 2px 20px #153a2b}.film-ending-copy h2{color:#fff7df;font-size:62px}.film-ending-copy>p{font-size:12px;letter-spacing:2px}.gallery-film-button{margin:22px auto 0;display:flex;align-items:center;gap:12px;border:1px solid #c5a655;border-radius:30px;padding:12px 22px;background:linear-gradient(115deg,#bd984b,#f1d990,#caa450);color:#493615;box-shadow:0 0 18px #cbaa4f40;font-size:13px}.film-play{width:25px;height:25px;display:grid;place-items:center;border:1px solid #89652e;border-radius:50%;font-size:10px}#film-dialog{background:#14251ff5;padding:15px}#film-dialog video{max-width:95vw;max-height:88dvh;width:auto;height:auto;display:block}#close-film{top:12px;right:15px;z-index:2}@keyframes film-drift{from{transform:scale(1.08);opacity:0;filter:blur(6px) saturate(.8)}20%{opacity:1;filter:blur(0) saturate(.8)}to{transform:scale(1);opacity:1}}@media(min-width:900px){.film-opening>video{width:58%;mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}.film-ending>video{object-fit:contain}.film-opening-copy h2{font-size:85px}}@media(max-width:700px){.film-opening-copy h2{font-size:52px}.film-ending{height:540px}.film-ending-copy h2{font-size:43px}.film-vignette{box-shadow:inset 0 0 65px 15px #f4f2e970}}@media(prefers-reduced-motion:reduce){.film-opening>video{animation:none}.film-opening{transition:none}}
/* Show every photograph in full, preserving its original aspect ratio. */
.gallery button{background:#f7f5ee;display:flex;align-items:center;justify-content:center}.gallery img{object-fit:contain;width:100%;height:100%;transform:none!important}.gallery button.is-current img{transform:none}.gallery{background:#faf8f1}.gallery button:nth-child(3) img{object-position:center}
/* Crossfade moving footage over the live envelope, without a blank frame. */
.film-opening{transition:opacity 1.6s cubic-bezier(.4,0,.2,1),visibility 0s 1.6s;will-change:opacity}.film-opening.finished{opacity:0;visibility:hidden}.film-opening.finished>video{animation-play-state:running}.film-opening-copy{transition:opacity 1s,transform 1.4s}.film-opening.finished .film-opening-copy{opacity:0;transform:translateY(-12px)}.film-opening>button{transition:opacity .5s}.film-opening.finished>button{opacity:0}.video-opening .envelope-intro{visibility:visible;pointer-events:none}.video-opening .envelope-intro *{animation-play-state:paused!important}.envelope-intro{transition:opacity 1.1s 1s,visibility 0s 2.1s}.film-opening>video{backface-visibility:hidden;transform:translateZ(0);will-change:transform,opacity}@media(prefers-reduced-motion:reduce){.film-opening{transition:opacity .25s,visibility 0s .25s}.film-opening-copy{transition:none}}
.gallery-video-slide{flex:0 0 100%;width:100%;height:400px;scroll-snap-align:center;background:#f7f5ee;display:flex;align-items:center;justify-content:center;overflow:hidden}.gallery-video-slide video{width:100%;height:100%;object-fit:contain;display:block}.gallery-film-button{display:none}@media(max-width:700px){.gallery-video-slide{height:380px}}
/* Closing film: preserve the full portrait frame, with only soft edge fading. */
.film-ending{height:auto;aspect-ratio:9/16;max-width:560px;width:100%;margin:45px auto 0;overflow:hidden}.film-ending>video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center;filter:saturate(.88) brightness(.98);mask-image:linear-gradient(transparent 0%,#000 7%,#000 93%,transparent 100%)}.ending-vignette{background:linear-gradient(#f7f5ef55,transparent 15%,transparent 72%,#183c3345 92%,#f7f5ef55);box-shadow:inset 0 0 30px 5px #f4f2e940;pointer-events:none}.film-ending-copy{bottom:7%;left:6%;right:6%}.film-ending-copy h2{font-size:46px;margin-bottom:15px}.film-ending-copy>p{font-size:10px}@media(max-width:700px){.film-ending{height:auto;aspect-ratio:9/16;max-width:100%}.film-ending-copy h2{font-size:38px}.film-ending-copy>p{font-size:9px}}
/* Individual centered Polaroids follow each image's orientation. */
.gallery{max-width:440px;width:100%;padding:0;border:0;background:transparent;box-shadow:none;transform:none!important;gap:20px;align-items:center;transition:height .55s ease}.gallery button,.gallery-video-slide{flex:0 0 100%;height:460px;width:100%;border:0;background:transparent;position:relative;padding:16px 35px 42px;display:flex;align-items:center;justify-content:center;isolation:isolate}.gallery button:before,.gallery-video-slide:before{content:'';position:absolute;inset:3px 23px 18px;background:#fffdf7;border:1px solid #d4bf86;box-shadow:0 10px 25px #5b54231c,0 1px 3px #5b542314;z-index:-1;border-radius:2px}.gallery button:after,.gallery-video-slide:after{content:'';position:absolute;bottom:29px;left:calc(50% - 26px);width:52px;height:1px;background:linear-gradient(90deg,transparent,#c6a04d,transparent)}.gallery img,.gallery-video-slide video{width:100%;height:100%;object-fit:contain;object-position:center;border:1px solid #e1d6ba;background:#f4f1e8;box-shadow:none}.gallery.is-landscape{height:325px}.gallery.is-landscape button,.gallery.is-landscape .gallery-video-slide{height:325px;padding:16px 12px 42px}.gallery.is-landscape button:before,.gallery.is-landscape .gallery-video-slide:before{inset:3px 0 18px}.gallery-section{width:100%;min-width:0}.gallery-controls{margin-top:10px}.gallery:hover{box-shadow:none}@media(max-width:700px){.gallery{max-width:360px}.gallery button,.gallery-video-slide{height:430px;padding:16px 27px 42px}.gallery button:before,.gallery-video-slide:before{inset:3px 15px 18px}.gallery.is-landscape{height:285px}.gallery.is-landscape button,.gallery.is-landscape .gallery-video-slide{height:285px;padding:14px 10px 42px}}@media(prefers-reduced-motion:reduce){.gallery{transition:none}}

/* Programmatic heading focus must not paint a browser rectangle. */
.hero h1[tabindex="-1"]:focus{outline:none}.envelope:focus:not(:focus-visible){outline:none}

/* Keep the RSVP phrase readable at every viewport size. */
.rsvp h2>span{display:block;line-height:1.25}.rsvp h2>span+span{margin-top:.08em}
