@font-face{font-family:Pinyon;src:url('assets/fonts/PinyonScript-Regular.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:Cormorant;src:url('assets/fonts/CormorantGaramond.ttf') format('truetype');font-weight:300 700;font-display:swap}
:root{--wine:#681c32;--dark-wine:#300c16;--gold:#b18c58;--paper:#f7efe6;--ink:#655044;--muted:#8b7666;--page-width:520px;--script:Pinyon,'Brush Script MT',cursive;--serif:Cormorant,Georgia,serif;color-scheme:light}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:24px}
body{margin:0;color:var(--ink);background:radial-gradient(ellipse at 50% 10%,#642536 0,#3c1320 45%,#230b12 100%);font:400 19px/1.5 var(--serif);-webkit-font-smoothing:antialiased}
body.envelope-closed,body.dialog-open{overflow:hidden}
button,input{font:inherit}
button,a{-webkit-tap-highlight-color:transparent}
button{cursor:pointer}
button:disabled{cursor:wait}
a{color:inherit;text-underline-offset:5px}
button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:6px}
[hidden]{display:none!important}
img{display:block;max-width:100%;height:auto}
p,h1,h2,h3{margin:0}
.script{font-family:var(--script);font-weight:400;line-height:1.25;color:var(--wine)}
.eyebrow{font-family:var(--serif);font-size:12px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:2.6px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:fixed;left:16px;top:-80px;background:var(--paper);color:var(--wine);padding:10px 16px;z-index:20}
.skip-link:focus{top:16px}
.invitation{width:min(100%,var(--page-width));margin:0 auto;background:var(--paper);box-shadow:0 0 100px #10040980;overflow:hidden;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' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.045' filter='url(%23n)'/%3E%3C/svg%3E")}
.entrance{position:fixed;inset:0;z-index:10;display:grid;place-items:center;background:var(--dark-wine);transition:background .8s .75s}
.envelope{position:relative;width:min(100%,var(--page-width));height:100svh;min-height:480px;max-height:1000px;overflow:hidden;perspective:1000px;--pull:0px;--tension:0}
.envelope-panel{position:absolute;inset:0;background:#380d17 url('assets/envelope.webp') center/100% 100% no-repeat}
.panel-top{clip-path:polygon(0 0,100% 0,100% 6%,50% 46.7%,0 6%);transform-origin:50% 0;z-index:2}
.panel-left{clip-path:polygon(0 6%,50% 46.7%,0 84%);transform-origin:0 50%}
.panel-right{clip-path:polygon(100% 6%,100% 84%,50% 46.7%);transform-origin:100% 50%}
.panel-bottom{clip-path:polygon(0 84%,50% 46.7%,100% 84%,100% 100%,0 100%);transform-origin:50% 100%;z-index:1}
.envelope:after{content:'';position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 90px #19040a45}
.envelope-shimmer{position:absolute;inset:0;background:linear-gradient(125deg,transparent 20%,#efd08c14 40%,transparent 60%);background-size:250% 250%;animation:shimmer 8s ease-in-out infinite;pointer-events:none;z-index:3}
.wax-seal{position:relative;width:118px;height:118px;border:0;border-radius:50%;display:grid;place-items:center;padding:25px;background-color:transparent;background-size:contain;background-position:center;background-repeat:no-repeat;filter:drop-shadow(0 5px 5px #25081265);transition:transform .3s,filter .3s}
.wax-seal:hover{transform:scale(1.04) rotate(-3deg)}
.wax-seal:active{transform:scale(.97)}
.seal-ring{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column}
.ribbon-band{position:absolute;top:calc(46.7% - 19px);height:38px;width:52%;background:linear-gradient(0deg,#89643e,#cead79 12%,#fff1cb 42%,#e4c697 55%,#ba955f 88%,#7b5735);box-shadow:0 4px 9px #18050980,inset 0 1px #ffe9b6,inset 0 -1px #64442f;z-index:4;overflow:hidden}
.ribbon-band-left{left:0;transform-origin:0 50%;transform:rotate(calc(var(--tension)*9deg))}
.ribbon-band-right{right:0;transform-origin:100% 50%;transform:rotate(calc(var(--tension)*-9deg))}
.ribbon-sheen{position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,#fff9de55 45%,transparent 65%);background-size:250% 100%;animation:satin-shimmer 5s ease-in-out infinite alternate}
.ribbon-pull{position:absolute;top:46.7%;left:50%;width:min(88%,340px);transform:translate(-50%,-36.7%);padding:0;border:0;background:transparent;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;z-index:6;outline-offset:-30px}
.ribbon-pull.is-dragging{cursor:grabbing}
.ribbon-pull:focus-visible{outline:0}
.ribbon-pull:focus-visible .ribbon-art{filter:drop-shadow(0 0 3px #fff0bc) drop-shadow(0 0 12px #ebc97790)}
.ribbon-pull:disabled{cursor:default;pointer-events:none}
.ribbon-art{display:block;width:100%;height:auto;overflow:visible;filter:drop-shadow(0 6px 4px #16050b60)}
.ribbon-loop,.ribbon-loop-fabric,.ribbon-knot{transform-origin:160px 110px}
.ribbon-loop-left{transform:translateY(calc(var(--pull)*.15)) rotate(calc(var(--tension)*-9deg)) scaleX(calc(1 - var(--tension)*.12))}
.ribbon-loop-right{transform:translateY(calc(var(--pull)*.15)) rotate(calc(var(--tension)*9deg)) scaleX(calc(1 - var(--tension)*.12))}
.ribbon-loop-fabric{animation:bow-breathe 4s ease-in-out infinite alternate}
.ribbon-loop-right .ribbon-loop-fabric{animation-delay:-2s}
.ribbon-tail{transform-origin:160px 110px;transform:translateY(calc(var(--pull)*.85)) scaleY(calc(1 + var(--tension)*.08));transition:transform .75s cubic-bezier(.22,1,.36,1)}
.ribbon-tail-fabric{transform-origin:160px 110px;animation:tail-sway 3.8s ease-in-out infinite alternate}
.ribbon-tail-left .ribbon-tail-fabric{animation-duration:4.7s;animation-direction:alternate-reverse}
.ribbon-knot{transform:translateY(calc(var(--pull)*.18)) scaleX(calc(1 - var(--tension)*.16));transition:transform .65s cubic-bezier(.22,1,.36,1)}
.ribbon-monogram{font:16px var(--script);fill:#82613f;opacity:.8}
.ribbon-arrow{animation:ribbon-cue 1.8s ease-in-out infinite;transition:opacity .2s}
.ribbon-pull.is-dragging .motion{animation-play-state:paused}
.ribbon-pull.is-dragging .ribbon-tail,.ribbon-pull.is-dragging .ribbon-knot{transition:none}
.ribbon-pull.is-dragging .ribbon-arrow,.is-untying .ribbon-arrow{visibility:hidden}
.ribbon-loop,.ribbon-band{transition:transform .7s cubic-bezier(.22,1,.36,1)}
.ribbon-is-dragging .ribbon-band,.ribbon-is-dragging .ribbon-loop{transition:none}
.is-dragging~.envelope-caption .small-flourish{opacity:0}
.envelope-caption{position:absolute;top:78%;left:20px;right:20px;text-align:center;color:var(--gold);z-index:4}
.envelope-caption .script{color:#e8d3ab;font-size:29px;margin-bottom:16px}
.envelope-caption .eyebrow{font-size:10px;letter-spacing:3px;color:#e8d3aba8}
.small-flourish{display:block;font-size:22px;margin-top:18px;color:#e4c591}
.opening-light{position:absolute;top:46.7%;left:50%;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,#fff1caa0,transparent 70%);transform:translate(-50%,-50%) scale(.2);opacity:0;z-index:5;pointer-events:none}
.opening-light:before{content:'';position:absolute;inset:20%;border-radius:inherit;background:radial-gradient(circle,#fff 0%,#ffe7b4 42%,transparent 72%)}
.is-untying .ribbon-pull .motion{animation:none}
.entrance.is-opening .opening-light{animation:bloom 3.1s ease forwards}
.entrance.is-opening .ribbon-loop-left{animation:bow-release-left 1.2s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .ribbon-loop-right{animation:bow-release-right 1.2s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .ribbon-tail{animation:tail-release 1.5s .05s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .ribbon-knot{animation:knot-release .9s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .ribbon-band-left{animation:band-release-left 1.25s .1s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .ribbon-band-right{animation:band-release-right 1.25s .1s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .panel-top{animation:flap-lift 1.8s .4s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .envelope-panel{will-change:transform}
.entrance.is-opening .panel-left{animation:panel-open-left 1.8s .7s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .panel-right{animation:panel-open-right 1.8s .7s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .panel-bottom{animation:panel-open-bottom 1.8s .8s cubic-bezier(.22,1,.36,1) forwards}
.entrance.is-opening .envelope-caption,.entrance.is-opening .envelope-shimmer,.entrance.is-opening .envelope:after{transition:opacity .65s;opacity:0}
.entrance.is-opening{background:transparent;animation:entrance-out .65s 2.4s ease forwards}
.hero{position:relative;height:100svh;min-height:720px;max-height:1100px;background:#efe0c8;isolation:isolate}
.hero-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1}
.hero-copy{position:absolute;top:15%;left:11%;right:11%;text-align:center;z-index:2}
.hero-eyebrow{display:flex;align-items:center;justify-content:center;gap:10px;font-size:11px;letter-spacing:2.4px;color:#7d6548}
.hero-eyebrow:before,.hero-eyebrow:after{content:'';width:28px;height:1px;background:linear-gradient(90deg,transparent,#b18c58)}
.hero-eyebrow:after{background:linear-gradient(90deg,#b18c58,transparent)}
.hero-label{display:block;font-size:54px;color:var(--wine);margin-top:2px;line-height:1.05}
.couple-names{margin-top:18px;font:500 clamp(30px,8.2vw,42px)/1.12 var(--serif);color:var(--wine);outline:none;text-shadow:0 1px 0 #fff9ed}
.couple-names>span{display:block}
.couple-names .groom-name,.couple-names .bride-name{white-space:nowrap;letter-spacing:-.015em}
.couple-names .parentage{margin-top:8px;font:400 13px/1.35 var(--serif);color:#6a5644}
.parentage>span{display:block;white-space:nowrap;margin-top:1px;font-size:clamp(13px,3.6vw,16px);letter-spacing:.01em;color:#5c4a3a}
.couple-names .ampersand{margin:12px 0 8px;font:400 30px/1 var(--script);color:#9a7b4f}
.hero-tagline{margin-top:16px;font-size:15px;font-style:italic;line-height:1.4;color:#5e4d3e}
.hero-tagline:after{content:'';display:block;width:64px;height:1px;margin:12px auto 0;background:linear-gradient(90deg,transparent,var(--gold),transparent)}
.scroll-cue{margin:12px auto 0;display:flex;flex-direction:column;align-items:center;gap:8px;text-decoration:none;color:#8a7052}
.scroll-cue .script{font-family:var(--serif);font-size:11px;font-weight:600;letter-spacing:2.2px;text-transform:uppercase;line-height:1.4;color:#8a7052}
.chevron{width:10px;height:10px;border-right:1px solid var(--wine);border-bottom:1px solid var(--wine);transform:rotate(45deg);animation:cue 2.5s ease-in-out infinite}
.section{position:relative;text-align:center;padding:64px 0 68px}
.section-inner{position:relative;width:100%;padding:0 44px;z-index:1}
.section h2{font-size:48px;margin:12px 0 21px}
.section p:not(.eyebrow):not(.script){max-width:350px;margin-left:auto;margin-right:auto}
.section .eyebrow{color:var(--muted)}
.ornament{display:flex;align-items:center;justify-content:center;gap:15px;margin:27px auto;color:var(--gold);width:150px}
.ornament:before,.ornament:after{content:'';height:1px;flex:1;background:linear-gradient(90deg,transparent,#b18c5860)}
.ornament:after{transform:rotate(180deg)}
.ornament span{font-size:26px;line-height:1}
.welcome{padding-top:155px;padding-bottom:70px}
.floral-top{position:absolute;top:-10px;left:0;width:100%;height:190px;object-fit:cover;object-position:bottom;transform:rotate(180deg);pointer-events:none}
.welcome h2{font-size:39px;margin:18px 0 15px;line-height:1.35}
.date-coupon{width:min(100%,360px);margin:30px auto 0;text-align:center}
.date-coupon>.eyebrow{font-size:10px;letter-spacing:2px}
.date-coupon h3{font-size:35px;line-height:1.2;margin:7px 0 17px}
.coupon-ticket{position:relative;display:grid;place-items:center;isolation:isolate;width:100%;min-height:126px;padding:20px 12px;border:0;border-radius:3px;background:radial-gradient(ellipse at center,#fffcf2,#f0e3cf);color:var(--wine);box-shadow:inset 0 0 0 1px #b18c586e,inset 0 0 0 5px #fffcf580,0 7px 21px #624b3620;overflow:hidden;touch-action:none;cursor:crosshair;user-select:none;-webkit-user-select:none}
.coupon-ticket:before,.coupon-ticket:after{content:'✦';position:absolute;top:50%;transform:translateY(-50%);font-size:16px;color:#b18c58;opacity:.8;z-index:1}
.coupon-ticket:before{left:14px}.coupon-ticket:after{right:14px}
.coupon-date{position:relative;z-index:0;display:block;max-width:100%;font:clamp(23px,7vw,32px)/1.2 var(--script);color:var(--wine)}
.scratch-coating{position:absolute;inset:0;display:block;width:100%;height:100%;z-index:2;pointer-events:none;transition:opacity .4s}
.scratch-label{position:absolute;z-index:3;left:0;right:0;top:50%;transform:translateY(-50%);pointer-events:none;font-size:12px;font-weight:600;letter-spacing:2.5px;color:#6f5435;text-shadow:0 1px #fff0d0;transition:opacity .3s,visibility .3s}
.coupon-ticket:focus-visible{outline:2px solid var(--gold);outline-offset:4px}
.coupon-caption{margin-top:12px!important;font-size:14px;color:var(--muted)}
.coupon-reveal{margin-top:8px;padding:8px 16px;border:0;background:transparent;color:var(--wine);font-size:14px;font-weight:600;text-decoration:underline;text-underline-offset:4px}
.coupon-ticket.is-revealed .scratch-label{opacity:0;visibility:hidden}
.countdown-heading{font-size:32px;margin-bottom:20px}
.countdown{display:flex;justify-content:center;gap:0;color:#93764d;line-height:1}
.countdown>div{position:relative;flex:1;max-width:85px}
.countdown>div+div:before{content:':';position:absolute;left:-3px;top:1px;font-size:29px;color:#b6a081}
.countdown span{font-size:35px;font-variant-numeric:tabular-nums;letter-spacing:1px}
.countdown small{display:block;margin-top:12px;font-size:12px;color:var(--muted);letter-spacing:.5px}
.quiet-note{font-size:14px;color:var(--muted);margin-top:24px}
.paper-edge{background-color:#f0e4dc60}
.paper-edge:before{content:'';position:absolute;left:0;right:0;top:-12px;height:14px;background:#f0e4dc60;clip-path:polygon(0 65%,3% 48%,6% 63%,10% 22%,15% 44%,21% 15%,25% 42%,31% 28%,34% 56%,41% 12%,46% 30%,51% 0,57% 42%,62% 18%,68% 33%,74% 18%,79% 46%,84% 25%,89% 54%,93% 31%,97% 49%,100% 25%,100% 100%,0 100%)}
.schedule{padding-top:74px;padding-bottom:59px}
.timeline{list-style:none;margin:35px auto 0;padding:0;max-width:355px;text-align:left}
.timeline li{position:relative;display:grid;grid-template-columns:73px 35px 1fr;align-items:center;min-height:89px}
.timeline li:before{content:'';position:absolute;width:1px;left:90px;top:0;bottom:0;background:#b299735c}
.timeline li:first-child:before{top:50%}
.timeline li:last-child:before{bottom:50%}
.timeline-number{font-size:24px;color:var(--gold);font-weight:400;font-variant-numeric:tabular-nums;white-space:nowrap}
.timeline h3{font-size:19px;font-weight:500;line-height:1.2;color:var(--wine)}
.timeline p{font-size:14px;margin-top:4px!important;line-height:1.4;color:var(--muted)}
.timeline-dot{position:relative;justify-self:center;width:6px;height:6px;border-radius:50%;background:#a18a63}
.rose-dot{width:19px;height:19px;background:radial-gradient(ellipse at 45% 45%,#ac5a68 0 12%,#661528 13% 27%,#9b3e51 28% 43%,#571325 44% 61%,#7d273e 62% 100%);border-radius:40% 55% 43% 53%;box-shadow:2px 2px 0 #63203745;transform:rotate(28deg)}
.location{background-color:transparent;padding-bottom:73px}
.location:before{background:var(--paper)}
.venue-crest{display:block;font-size:40px;line-height:1;color:var(--gold);margin:26px 0 20px}
.venue-name{font-size:27px;font-weight:500;color:var(--wine);margin-bottom:8px}
.venue-city{font-size:13px;letter-spacing:2px;text-transform:uppercase;margin-bottom:16px;color:var(--gold)}
.map-card{width:calc(100% - 64px);margin:30px auto 0;overflow:hidden;border:1px solid #b9a18560;background:#f9f3e9;box-shadow:0 4px 18px #7357380a}
.map-card iframe{display:block;width:100%;height:260px;border:0}
.directions-button{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;font-size:16px;text-decoration:none;background:var(--wine);color:var(--paper)}
.rsvp{background-color:transparent;padding-bottom:58px}
.rsvp:before{background:var(--paper)}
.burgundy-seal{margin:34px auto 22px;color:#e8d3ab;background-image:url('assets/seal-burgundy.webp')}
.burgundy-seal .seal-ring{text-shadow:0 -1px 1px #290a16}
.seal-label{font-size:24px;letter-spacing:1px;line-height:1.1}
.seal-small{font:18px/1.2 var(--script);color:#d4b19a}
.seal-hint{font-size:27px}
.form-unavailable{font-size:14px;color:var(--muted);margin-top:18px}
.closing{position:relative;text-align:center;padding:45px 30px 255px}
.closing>.script{font-size:33px;line-height:1.4}
.closing .closing-names{font-size:36px;max-width:340px;margin:auto}
.closing .eyebrow{margin-top:8px;color:var(--muted);font-size:10px}
.closing-florals{position:absolute;bottom:0;left:0;width:100%;pointer-events:none}
.music-button{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));right:max(14px,calc((100vw - var(--page-width))/2 + 14px));width:40px;height:40px;border-radius:50%;border:1px solid #c1a67d8c;background:#f7efe6e8;color:var(--wine);display:grid;place-items:center;box-shadow:0 3px 14px #39111b26;z-index:4;transition:transform .2s}
.music-button:hover{transform:scale(1.06)}
.pause-icon{display:none;font-family:Georgia,serif;font-size:21px;line-height:1}
.music-button[aria-pressed=true] .music-icon{display:none}
.music-button[aria-pressed=true] .pause-icon{display:block}
.atmosphere{position:fixed;top:0;left:50%;width:min(100%,var(--page-width));height:100dvh;transform:translateX(-50%);pointer-events:none;z-index:11}
.motion-button{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));left:max(14px,calc((100vw - var(--page-width))/2 + 14px));width:40px;height:40px;border-radius:50%;border:1px solid #c1a67d8c;background:#f7efe6e8;color:var(--wine);display:grid;place-items:center;box-shadow:0 3px 14px #39111b26;z-index:12;font-size:18px;line-height:1}
.motion-play{display:none}
.motion-button[aria-pressed=false] .motion-pause{display:none}
.motion-button[aria-pressed=false] .motion-play{display:block}
.living-garden{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.hanging-branch{position:absolute;top:1%;width:27%;transform-origin:12% 0;animation:branch-sway 9s ease-in-out infinite alternate;filter:drop-shadow(1px 3px 2px #74543218)}
.branch-left{left:-7%;rotate:-10deg}
.branch-right{right:-7%;transform-origin:88% 0;rotate:10deg;animation-duration:11s;animation-delay:-5s}
.branch-right img{transform:scaleX(-1)}
.swan{position:absolute;width:29%;bottom:8%;animation:swan-glide 9s ease-in-out infinite alternate;filter:drop-shadow(0 4px 3px #4b422923)}
.swan-left{left:20%}
.swan-right{right:20%;animation-name:swan-glide-back;animation-duration:11s;animation-delay:-3s}
.swan-right .swan-image{transform:scaleX(-1)}
.swan-reflection{position:absolute;top:87%;left:0;width:100%;height:80%;background:url('assets/swan.webp') center top/100% auto no-repeat;transform:scaleY(-1);opacity:.22;mask-image:linear-gradient(transparent,#0008 70%,#000);filter:blur(1px)}
.swan-right .swan-reflection{transform:scale(-1)}
.water-motion{position:absolute;width:88%;height:18%;left:6%;bottom:0;overflow:hidden;opacity:.8}
.water-current{animation:water-flow 7s ease-in-out infinite alternate}
.water-current-back{animation-direction:alternate-reverse;animation-duration:11s;opacity:.7}
.water-ripple{transform-box:fill-box;transform-origin:center;animation:ripple 5s ease-out infinite}
.ripple-late{animation-delay:-2.5s}
.motion{animation-play-state:paused}
.motion-enabled .motion{animation-play-state:running}
.motion-paused .motion{animation-play-state:paused!important}
.rsvp-dialog{border:1px solid #dac5af;padding:45px 34px 28px;width:min(440px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow-y:auto;background:var(--paper);color:var(--ink);box-shadow:0 20px 80px #19060d66;border-radius:4px}
.rsvp-dialog::backdrop{background:#230a16b8;backdrop-filter:blur(5px)}
.dialog-close{position:absolute;right:13px;top:9px;width:40px;height:40px;border:0;background:transparent;color:var(--wine);font-size:30px;line-height:1}
.dialog-heading{text-align:center;margin-bottom:22px}
.dialog-heading .eyebrow{font-size:10px;color:var(--muted)}
.dialog-heading h2{font-size:49px;margin:8px 0}
.dialog-heading p{font-size:17px}
.rsvp-dialog label,.rsvp-dialog legend{font-size:17px;font-weight:500}
.rsvp-dialog input[type=text],.rsvp-dialog input[type=number]{display:block;width:100%;border:0;border-bottom:1px solid #b79c7b;background:#fffaf040;border-radius:0;padding:12px 8px;margin:8px 0 24px;color:var(--wine);font-size:18px}
.rsvp-dialog input::placeholder{color:#93816f;font-size:14px}
.rsvp-dialog input[type=radio]{accent-color:var(--wine);width:18px;height:18px;margin:0}
.rsvp-dialog fieldset{border:0;margin:0 0 24px;padding:0}
.rsvp-dialog legend{margin-bottom:13px}
.radio-option{display:flex;gap:12px;align-items:center;min-height:44px;cursor:pointer}
.submit-button{display:flex;align-items:center;justify-content:space-between;width:100%;border:1px solid #772139;background:var(--wine);color:var(--paper);padding:13px 20px;font-size:17px}
.submit-button:hover{background:#551429}
.form-status{font-size:16px;line-height:1.5;margin-top:15px;color:var(--wine)}
.form-status:empty{display:none}
.dialog-signature{text-align:center;font-size:29px;margin-top:25px}
.contact-panel{margin-top:28px;padding-top:19px;border-top:1px solid #b18c5866}
.rsvp .contact-panel{max-width:390px;margin:18px auto 20px}
.contact-panel>h3{text-align:center;font-family:var(--serif);font-size:16px;font-weight:600;letter-spacing:1.8px;text-transform:uppercase;color:var(--wine)}
.contact-groups{display:grid;grid-template-columns:1fr 1fr;gap:20px 18px;margin-top:20px}
.contact-group h4{margin:0 0 12px;font-family:var(--serif);font-size:20px;font-weight:600;color:var(--wine)}
.contact-group a{display:block;margin:0 0 16px;font:600 18px/1.2 var(--serif);text-decoration:none;color:var(--dark-wine)}
.contact-group a span{display:block}
.contact-group a span+span{margin-top:2px;color:var(--wine);font-weight:600;font-size:17px;letter-spacing:.04em;font-variant-numeric:tabular-nums}
body.invitation-emerging .invitation{animation:invitation-emerge 2.85s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .hero-eyebrow{animation:line-rise .85s 1.15s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .couple-names>.groom-name{animation:line-rise .85s 1.28s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .couple-names>.parentage:nth-child(2){animation:line-rise .85s 1.4s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .couple-names>.ampersand{animation:line-rise .85s 1.52s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .couple-names>.bride-name{animation:line-rise .85s 1.66s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .couple-names>.parentage:nth-child(5){animation:line-rise .85s 1.78s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .hero-tagline{animation:line-rise .85s 1.94s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .scroll-cue{animation:line-rise .85s 2.12s cubic-bezier(.16,1,.3,1) both}
.chapters-enabled .invitation{overflow:clip;background-color:var(--dark-wine)}
.chapters-enabled .chapter-stage{position:relative;margin-bottom:-100svh}
.chapters-enabled .chapter-runway{height:100svh}
.chapters-enabled .chapter-stage:last-child{margin-bottom:0}
.chapters-enabled .chapter-stage:last-child .chapter-runway{display:none}
.chapter-frame{display:contents}
.chapters-enabled .chapter-panel{--enter:1;--exit:0;position:sticky;top:var(--pin-top,0);background-color:var(--paper);overflow:clip;box-shadow:0 -18px 28px #300c1614}
.chapters-enabled .hero.chapter-panel{background:#efe0c8}
.chapters-enabled .chapter-frame{display:block;position:relative;height:100%;min-height:inherit;transform-origin:50% 42%;scale:calc(1 - var(--exit)*.06);filter:blur(calc(max(0,var(--exit) - .55)*5px))}
.chapters-enabled .section>.chapter-frame,.chapters-enabled .closing>.chapter-frame{min-height:inherit;display:flex;flex-direction:column;justify-content:center}
.chapters-enabled .section.chapter-panel{min-height:100svh}
.chapters-enabled .closing.chapter-panel{min-height:90svh}
.chapters-enabled .hero-art{scale:calc(1 + var(--exit)*.18);translate:0 calc(var(--exit)*-8%)}
.chapters-enabled .hero-copy{transform-origin:50% 28%;scale:calc(1 + var(--exit)*.08);translate:0 calc(var(--exit)*-42px)}
.chapters-enabled .hero .scroll-cue{opacity:calc(1 - min(var(--exit)*2.4,1));translate:0 calc(var(--exit)*18px)}
.chapters-enabled .groom-name{translate:0 calc(var(--exit)*-6px)}
.chapters-enabled .bride-name{translate:0 calc(var(--exit)*-16px)}
.chapters-enabled .hero-label{scale:calc(1 + var(--exit)*.2);translate:0 calc(var(--exit)*-22px)}
.chapters-enabled .hanging-branch{translate:0 calc(var(--exit)*-48px)}
.chapters-enabled .swan{translate:0 calc(var(--exit)*36px)}
.chapters-enabled .water-motion{translate:0 calc(var(--exit)*20px)}
body.invitation-emerging .hero-art{animation:scene-settle 2.4s .35s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .hero-label{animation:title-bloom 1s 1.85s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .swan-left{animation:swan-glide 9s ease-in-out infinite alternate,swan-rise 1.45s 1.2s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .swan-right{animation:swan-glide-back 11s -3s ease-in-out infinite alternate,swan-rise 1.45s 1.38s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .branch-left{animation:branch-sway 9s ease-in-out infinite alternate,branch-drop 1.15s .85s cubic-bezier(.16,1,.3,1) both}
body.invitation-emerging .branch-right{animation:branch-sway 11s -5s ease-in-out infinite alternate,branch-drop 1.15s 1s cubic-bezier(.16,1,.3,1) both}
.chapters-enabled .section-inner{transform-origin:50% 36%;scale:calc(1 + max(0,var(--exit) - .24)*.22);translate:0 calc(max(0,var(--exit) - .24)*-14px)}
.chapters-enabled .section-inner>*{--n:0;--p:clamp(0,(var(--enter) - var(--n))/.72,1);opacity:clamp(.15,(var(--enter) - var(--n))/.34,1);translate:0 calc((1 - var(--p))*26px)}
.chapters-enabled .section-inner>:nth-child(2){--n:.07}
.chapters-enabled .section-inner>:nth-child(3){--n:.13}
.chapters-enabled .section-inner>:nth-child(4){--n:.19}
.chapters-enabled .section-inner>:nth-child(5){--n:.25}
.chapters-enabled .section-inner>:nth-child(6){--n:.31}
.chapters-enabled .section-inner>:nth-child(7){--n:.37}
.chapters-enabled .section-inner>:nth-child(8){--n:.43}
.chapters-enabled .section-inner>:nth-child(n+9){--n:.48}
.chapters-enabled .section-inner>.script{scale:calc(.94 + var(--p)*.06)}
.chapters-enabled .section-inner>.ornament{scale:calc(.5 + var(--enter)*.5)}
.chapters-enabled .timeline li{--n:.1;--p:clamp(0,(var(--enter) - var(--n))/.55,1);opacity:clamp(.2,(var(--enter) - var(--n))/.4,1);translate:calc((1 - var(--p))*-36px) calc((1 - var(--p))*12px)}
.chapters-enabled .timeline li:nth-child(2){--n:.26;translate:calc((1 - var(--p))*36px) calc((1 - var(--p))*12px)}
.chapters-enabled .timeline li:nth-child(3){--n:.42}
.chapters-enabled .map-card{--p:clamp(0,(var(--enter) - .18)/.62,1);opacity:clamp(.2,(var(--enter) - .18)/.4,1);translate:0 calc((1 - var(--p))*40px);scale:calc(.9 + var(--p)*.1)}
.chapters-enabled .section-inner>.venue-crest{scale:calc(.55 + var(--enter)*.45)}
.chapters-enabled .section-inner>.burgundy-seal{scale:calc(.35 + clamp(0,(var(--enter) - .1)/.65,1)*.65)}
.chapters-enabled .floral-top{translate:0 calc((1 - var(--enter))*-24px);scale:calc(.94 + var(--enter)*.06)}
.chapters-enabled .closing>.script,.chapters-enabled .closing>.ornament,.chapters-enabled .closing>.eyebrow{opacity:clamp(.2,var(--enter)/.4,1);translate:0 calc((1 - var(--enter))*28px);scale:calc(.94 + var(--enter)*.06)}
.chapters-enabled .closing-names{scale:calc(.9 + var(--enter)*.1)}
.chapters-enabled .closing-florals{translate:0 calc((1 - var(--enter))*48px);scale:calc(.96 + var(--enter)*.04)}
@keyframes shimmer{0%,100%{background-position:100% 100%;opacity:.2}50%{background-position:0 0;opacity:.8}}
@keyframes cue{0%,100%{translate:0 0;opacity:.5}50%{translate:0 5px;opacity:1}}
@keyframes satin-shimmer{from{background-position:100% 0;opacity:.25}to{background-position:0 0;opacity:.9}}
@keyframes bow-breathe{from{transform:rotate(-1.5deg) scale(.985)}to{transform:rotate(1.5deg) scale(1.015)}}
@keyframes tail-sway{from{transform:rotate(-2deg)}to{transform:rotate(2deg)}}
@keyframes ribbon-cue{0%,100%{transform:translateY(0);opacity:.3}50%{transform:translateY(6px);opacity:.85}}
@keyframes bow-release-left{0%{transform:translateY(calc(var(--pull)*.15)) rotate(calc(var(--tension)*-9deg)) scaleX(calc(1 - var(--tension)*.12))}40%{transform:translate(-18px,30px) rotate(-22deg) scale(.8,.5);opacity:1}100%{transform:translate(-220px,110px) rotate(-45deg) scale(.3,.1);opacity:0}}
@keyframes bow-release-right{0%{transform:translateY(calc(var(--pull)*.15)) rotate(calc(var(--tension)*9deg)) scaleX(calc(1 - var(--tension)*.12))}40%{transform:translate(18px,30px) rotate(22deg) scale(.8,.5);opacity:1}100%{transform:translate(220px,110px) rotate(45deg) scale(.3,.1);opacity:0}}
@keyframes tail-release{0%{transform:translateY(calc(var(--pull)*.85)) scaleY(calc(1 + var(--tension)*.08));opacity:1}45%{transform:translateY(165px) rotate(-10deg) scale(.65,1.2);opacity:1}100%{transform:translate(65px,700px) rotate(-28deg) scale(.4,1.1);opacity:0}}
@keyframes knot-release{from{transform:translateY(calc(var(--pull)*.18)) scaleX(calc(1 - var(--tension)*.16))}to{transform:translateY(65px) scale(.15,.5);opacity:0}}
@keyframes band-release-left{to{transform:translateX(-115%) rotate(-15deg);opacity:0}}
@keyframes band-release-right{to{transform:translateX(115%) rotate(15deg);opacity:0}}
@keyframes flap-lift{to{transform:rotateX(160deg);opacity:0}}
@keyframes panel-open-left{to{transform:translateX(-85%) rotateY(-35deg);opacity:0}}
@keyframes panel-open-right{to{transform:translateX(85%) rotateY(35deg);opacity:0}}
@keyframes panel-open-bottom{to{transform:translateY(70%) rotateX(-35deg);opacity:0}}
@keyframes bloom{0%{opacity:0;transform:translate(-50%,-50%) scale(.12)}18%{opacity:1;transform:translate(-50%,-50%) scale(.7)}48%{opacity:.62;transform:translate(-50%,-50%) scale(2.2)}100%{opacity:0;transform:translate(-50%,-50%) scale(6.5)}}
@keyframes entrance-out{to{opacity:0;visibility:hidden}}
@keyframes invitation-emerge{0%,30%{opacity:0;transform:translateY(7%) scale(.9)}100%{opacity:1;transform:none}}
@keyframes line-rise{from{opacity:0;translate:0 22px}to{opacity:1;translate:0 0}}
@keyframes scene-settle{from{scale:1.12}to{scale:1}}
@keyframes title-bloom{from{opacity:0;scale:.9;translate:0 18px}to{opacity:1;scale:1;translate:0 0}}
@keyframes swan-rise{from{opacity:0;translate:0 46px}to{opacity:1;translate:0 0}}
@keyframes branch-drop{from{opacity:0;translate:0 -36px}to{opacity:1;translate:0 0}}
@keyframes branch-sway{from{transform:rotate(-3deg) translateX(-2px)}to{transform:rotate(4deg) translateX(3px)}}
@keyframes swan-glide{0%{transform:translate(-9px,1px) rotate(-1deg)}50%{transform:translate(1px,-3px) rotate(.5deg)}100%{transform:translate(10px,2px) rotate(1deg)}}
@keyframes swan-glide-back{0%{transform:translate(9px,-2px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-.5deg)}100%{transform:translate(-10px,-1px) rotate(-1deg)}}
@keyframes water-flow{from{transform:translateX(-25px) scaleY(.95)}to{transform:translateX(25px) scaleY(1.05)}}
@keyframes ripple{0%{transform:scale(.65);opacity:.6}100%{transform:scale(1.7,1.4);opacity:0}}
@media(min-width:700px){body{padding:34px 0}.invitation{border:1px solid #e2caa632}.hero{height:1040px}.envelope{height:min(850px,100svh)}.hero-copy{top:22%}}
@media(max-width:360px){.section-inner{padding:0 28px}.section h2{font-size:42px}.welcome h2{font-size:36px}.hero-eyebrow{font-size:9px;letter-spacing:1.6px}.hero-label{font-size:40px}.hero-tagline{font-size:14px}.scroll-cue{margin-top:20px}.scroll-cue .script{font-size:23px}.timeline h3{font-size:18px}.countdown span{font-size:30px}.closing{padding-bottom:210px}.rsvp-dialog{padding-left:24px;padding-right:24px}}
@media(max-width:699px){
  .hero{height:100svh;min-height:100svh;max-height:none}
  .hero-copy{top:12%;left:9%;right:9%}
  .hero-eyebrow:before,.hero-eyebrow:after{width:18px}
  .hero-label{font-size:48px}
  .couple-names{margin-top:14px}
  .couple-names .parentage{margin-top:5px}
  .couple-names .ampersand{margin:8px 0 4px}
  .hero-tagline{margin-top:12px}
  .hero-tagline:after{margin-top:10px}
  .scroll-cue{margin-top:10px;gap:7px}
  .section{padding:28px 0 32px}
  .section-inner{padding:0 20px}
  .section h2{margin:2px 0 8px;font-size:40px}
  .welcome{padding-top:150px;padding-bottom:16px}
  .floral-top{top:0;height:108px}
  .coupon-date{font-size:clamp(20px,5.4vw,26px)}
  .welcome h2{margin:6px 0 6px}
  .ornament{margin:12px auto}
  .date-coupon{margin-top:14px}
  .date-coupon h3{margin:2px 0 8px}
  .venue-crest{margin:8px 0 6px;font-size:30px}
  .venue-name{margin-bottom:4px}
  .venue-city{margin-bottom:8px}
  .location{padding-bottom:28px}
  .map-card{width:calc(100% - 40px);margin-top:14px}
  .map-card iframe{height:180px}
  .schedule{padding-top:28px;padding-bottom:24px}
  .timeline{margin-top:12px}
  .timeline li{min-height:62px}
  .rsvp{padding-bottom:24px}
  .burgundy-seal{margin:16px auto 10px}
  .contact-panel{margin-top:14px;padding-top:12px}
  .quiet-note{margin-top:12px}
  .closing{padding:20px 18px 156px}
  .closing-florals{height:148px;object-fit:cover;object-position:center top}
  .chapters-enabled .section.chapter-panel,.chapters-enabled .closing.chapter-panel{min-height:0}
  .chapters-enabled .section>.chapter-frame,.chapters-enabled .closing>.chapter-frame{min-height:0;display:block}
  .chapters-enabled .chapter-runway{height:100svh}
  .chapters-enabled .chapter-stage{margin-bottom:-100svh}
}
@media(max-height:700px) and (max-width:699px){.hero{height:100svh;min-height:100svh}.hero-copy{top:8%}.hero-tagline{margin-top:8px}.scroll-cue{margin-top:8px}.envelope-caption .script{font-size:25px}}
@media(max-width:480px){.rsvp-dialog{width:100%;max-width:none;max-height:100dvh;height:100dvh;margin:0;border:0;border-radius:0;padding-top:65px;padding-bottom:max(30px,env(safe-area-inset-bottom))}.dialog-close{top:max(12px,env(safe-area-inset-top));right:15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.entrance.is-opening{opacity:0}.entrance.is-opening .opening-light{display:none}}

.submit-button:disabled{opacity:.65;cursor:wait}

.rsvp-dialog[open]{animation:rsvp-arrive .25s ease-out}
@keyframes rsvp-arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
body.motion-paused .rsvp-dialog[open]{animation:none}
@media(prefers-reduced-motion:reduce){.rsvp-dialog[open]{animation:none}}
