:root{--paper:#f7f4e9;--paper-deep:#eeeada;--olive:#71742c;--ink:#515521;--forest:#3d482c;--line:rgba(100,105,45,.25);--serif:'Cormorant Garamond',Georgia,serif;--script:'Pinyon Script','Brush Script MT',cursive;--ease:cubic-bezier(.22,1,.36,1)}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0;background:var(--paper);color:var(--ink);font:400 21px/1.55 var(--serif);-webkit-font-smoothing:antialiased}body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:200;opacity:.034;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='.88' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23515521' filter='url(%23n)' opacity='.75' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}body.envelope-closed{overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-decoration:none}button{border:0}button:disabled{cursor:wait;opacity:.6}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--olive);outline-offset:6px}img,video{display:block;max-width:100%}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-weight:400}button svg,a svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.2}::selection{background:#d9dab9;color:var(--forest)}[hidden]{display:none!important}.script{font-family:var(--script);font-weight:400}.eyebrow{font-size:14px;letter-spacing:.28em;line-height:1.8;font-weight:500}.section-pad{padding:110px 40px}.section-script{font-size:clamp(68px,9vw,110px);line-height:1.1}.horizontal-rule{display:block;width:60px;height:1px;background:var(--olive);margin:32px auto}.vertical-rule{display:block;width:1px;height:45px;margin:0 auto;background:var(--olive)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip-link{position:fixed;left:16px;top:-80px;background:var(--forest);color:var(--paper);padding:12px 20px;z-index:1000}.skip-link:focus{top:12px}.svg-definitions{position:absolute;width:0;height:0;overflow:hidden}
/* The supplied stamp is the entire first scene. It never autoplays. */
.opening{display:none;position:fixed;inset:0;background:var(--paper);z-index:500;align-items:center;justify-content:center;isolation:isolate;transition:opacity 1.2s ease,visibility 1.2s;overflow:hidden}.js .opening{display:flex}.opening::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 20%,#eae5d6 100%);opacity:.5;z-index:-1}.opening-frame{height:100%;height:100svh;width:min(100vw,56.305vh);max-width:620px;position:relative;transition:transform 1.5s var(--ease),filter 1.2s}.stamp-video{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}.open-invitation{position:absolute;inset:0;background:transparent}.open-invitation:focus-visible{outline-offset:-12px}.seal-halo{position:absolute;left:50%;top:60.6%;width:46px;height:46px;border:1px solid rgba(247,244,233,.85);border-radius:50%;transform:translate(-50%,-50%);animation:sealPulse 2.6s ease-out infinite}.opening.is-playing .open-invitation{pointer-events:none}.opening.is-playing .seal-halo{display:none}.opening.is-leaving{opacity:0;visibility:hidden;pointer-events:none}.opening.is-leaving .opening-frame{transform:scale(1.07);filter:blur(5px)}.opening-status{position:absolute;bottom:95px;left:20px;right:20px;text-align:center;font-size:15px}.skip-opening{position:absolute;bottom:30px;bottom:max(30px,env(safe-area-inset-bottom));right:32px;background:transparent;font-size:13px;letter-spacing:.12em;text-transform:uppercase;border-bottom:1px solid var(--line);padding:9px 0}.skip-opening span{margin-left:10px}.opening:not(.is-playing) .skip-opening{opacity:.6;font-size:11px}.js .invitation-site{visibility:hidden}.js .invitation-site.is-open{visibility:visible}.site-header{height:78px;display:flex;align-items:center;justify-content:space-between;padding:0 5%;border-bottom:1px solid var(--line);background:rgba(247,244,233,.93);backdrop-filter:blur(14px);position:sticky;top:0;z-index:80}.brand{width:48px}.monogram-crop{display:block;position:relative;width:44px;height:44px;overflow:hidden;mix-blend-mode:multiply}.monogram-crop img{position:absolute;width:190%;max-width:none;height:190%;left:-45%;top:-45%;object-fit:contain}.header-date{position:absolute;left:50%;transform:translateX(-50%);font-size:15px;letter-spacing:.16em}.header-date span{margin:0 6px}.site-header nav{display:flex;align-items:center;gap:30px;font-size:11px;letter-spacing:.16em;text-transform:uppercase}.site-header nav a{padding:10px 0}.header-rsvp{border-bottom:1px solid var(--olive)}.header-rsvp span{margin-left:10px}.intro{text-align:center}.intro-heading{padding:85px 24px 70px;overflow:hidden}.intro-kicker{font-size:10px;letter-spacing:.32em;margin-bottom:35px}.intro-title{color:var(--olive);font-size:clamp(110px,13.5vw,170px);line-height:.9;max-width:680px;margin:0 auto;outline:none}.intro-title span{display:block}.intro-title span:first-child{padding-right:40px}.intro-title span:last-child{padding-left:45px}.intro-subtitle{font-size:26px;margin:35px auto 0}.film-wrap{position:relative;width:min(100%,1100px);aspect-ratio:832/464;margin:0 auto;overflow:hidden;background:#b0b29a}.couple-video{width:100%;height:100%;object-fit:cover}.film-vignette{position:absolute;inset:50% 0 0;background:linear-gradient(transparent,rgba(31,38,19,.25));pointer-events:none}.film-caption{position:absolute;bottom:22px;left:25px;font-family:var(--serif);font-size:10px;letter-spacing:.23em;color:var(--paper);text-shadow:0 1px 6px #222}.film-controls{position:absolute;right:20px;bottom:18px;display:flex;gap:8px}.round-control{width:36px;height:36px;border:1px solid rgba(255,255,255,.5);border-radius:50%;display:grid;place-items:center;background:rgba(30,40,24,.16);color:white;backdrop-filter:blur(8px)}.round-control svg{width:15px;height:15px;stroke-width:1.4}.sound-on{display:none}.is-unmuted .sound-off{display:none}.is-unmuted .sound-on{display:block}.countdown-wrap{padding:70px 20px 25px}.countdown-title{font-size:clamp(39px,6vw,65px);color:var(--olive);line-height:1.3}.countdown{display:flex;align-items:flex-start;justify-content:center;gap:14px;margin:12px auto 0;color:var(--olive);max-width:650px}.countdown>div{flex:1;max-width:130px;min-width:0;display:flex;flex-direction:column}.count-value{font-size:clamp(54px,8.8vw,92px);font-variant-numeric:tabular-nums;line-height:1.1}.count-label{font-size:11px;letter-spacing:.25em;text-transform:uppercase;margin-top:5px}.count-colon{font-size:50px;line-height:1.5;font-weight:400;opacity:.8}.countdown-message{font-size:25px;margin:20px}.scroll-cue{display:block;width:30px;height:65px;margin:35px auto 0;position:relative}.scroll-cue::before{content:'';position:absolute;top:0;left:50%;width:1px;height:50px;background:var(--line)}.scroll-cue span{display:block;width:1px;height:22px;background:var(--olive);position:absolute;left:50%;animation:scrollDrop 2.5s ease infinite}
/* Live typography, rather than a flattened image of the invitation. */
.invitation-section{padding-top:70px;background:radial-gradient(ellipse at 50% 50%,#eee9d860,transparent 70%)}.invitation-card{position:relative;margin:0 auto;max-width:760px;background:rgba(255,253,246,.34);padding:75px 32px 60px;text-align:center;box-shadow:0 9px 60px rgba(74,72,38,.055)}.card-corner{position:absolute;width:22px;height:22px;border-color:var(--line);border-style:solid}.corner-tl{top:14px;left:14px;border-width:1px 0 0 1px}.corner-tr{top:14px;right:14px;border-width:1px 1px 0 0}.corner-bl{bottom:14px;left:14px;border-width:0 0 1px 1px}.corner-br{bottom:14px;right:14px;border-width:0 1px 1px 0}.invitation-eyebrow{font-size:15px;line-height:1.9;letter-spacing:.25em}.couple-names{display:flex;flex-direction:column;color:var(--olive);margin:75px 0 40px;line-height:.96}.groom-name{font-size:clamp(67px,11.5vw,120px);white-space:nowrap}.and{font-size:64px;line-height:1.4}.bride-name{font-size:clamp(100px,15vw,158px)}.wedding-date{position:relative;height:180px;display:flex;align-items:center;justify-content:center;isolation:isolate}.date-backdrop{position:absolute;font-size:clamp(115px,22vw,205px);letter-spacing:-.065em;white-space:nowrap;color:var(--olive);opacity:.14;line-height:1;z-index:-1;transform:translateY(-4px)}.weekday{font-size:22px;letter-spacing:.25em}.date-line{font-size:30px;letter-spacing:.13em;line-height:1.6}.card-venue{margin-top:35px;font-size:18px;letter-spacing:.23em}.venue-garden{font-size:25px;font-style:italic;letter-spacing:.18em;margin-top:2px}.text-button{font-family:var(--serif);background:none;padding:10px 0;border-bottom:1px solid var(--line);font-size:11px;letter-spacing:.18em;font-weight:500;transition:border-color .3s}.text-button:hover{border-color:var(--olive)}#add-calendar{margin-top:30px}#add-calendar span{margin-left:12px}
.timeline-section{text-align:center;padding-top:40px;padding-bottom:100px;max-width:1300px;margin:auto}.section-heading .eyebrow{font-size:16px;letter-spacing:.35em}.section-heading .section-script{margin:8px 0 0}.heading-bottom{margin-top:15px}.timeline{list-style:none;display:grid;grid-template-columns:repeat(5,1fr);margin:70px auto 0;padding:0;position:relative;max-width:1120px}.timeline::before{content:'';height:1px;position:absolute;left:10%;right:10%;top:140px;background:var(--line)}.timeline-event{position:relative;text-align:center;display:flex;flex-direction:column;align-items:center}.event-icon{width:95px;height:115px;margin:0 auto 21px;color:var(--olive)}.event-icon svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.15;stroke-linecap:round;stroke-linejoin:round}.timeline-dot{position:relative;z-index:1;width:9px;height:9px;box-shadow:0 0 0 6px var(--paper);background:var(--olive);border-radius:50%;margin-bottom:23px}.event-copy time{font-size:37px;color:var(--olive);line-height:1.15;white-space:nowrap}.event-copy small{font-size:26px}.event-copy h3{font-size:14px;line-height:1.5;letter-spacing:.2em;text-transform:uppercase;margin-top:14px}.timeline-note{font-style:italic;font-size:21px;margin-top:50px;opacity:.75}
.story-section{padding-top:100px;border-top:1px solid var(--line);max-width:1380px;margin:auto;text-align:center}.story-letter{max-width:850px;margin:0 auto}.story-letter .eyebrow{font-size:14px;letter-spacing:.22em;margin-bottom:24px}.story-letter>p:not(.signature){font-size:29px;line-height:1.45}.story-letter .horizontal-rule{margin:32px auto}.signature{font-size:52px;line-height:1.25;margin:62px auto 55px}.signature span{display:block;font-size:42px;margin-bottom:8px}.gallery{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}.photo-card{display:block;position:relative;overflow:hidden;padding:0;background:var(--paper-deep);aspect-ratio:0.65;color:var(--paper);text-align:left}.photo-card:nth-child(even){margin-top:35px;margin-bottom:-35px}.photo-card img{width:100%;height:100%;object-fit:cover;transition:transform 1.3s var(--ease),filter .7s}.photo-card:nth-child(2) img{object-position:50% center}.photo-card:hover img{transform:scale(1.045)}.photo-card::after{content:'';position:absolute;inset:70% 0 0;background:linear-gradient(transparent,#1b281650)}.photo-number{position:absolute;bottom:15px;left:17px;font-size:15px;letter-spacing:.1em;z-index:1}.photo-expand{position:absolute;bottom:13px;right:17px;font-size:24px;z-index:1}.gallery-footer{display:flex;justify-content:space-between;align-items:center;margin-top:62px}.gallery-hint{font-style:italic;font-size:18px;opacity:.7}.gallery-navigation,.swipe-hint{display:none}
.location-section{text-align:center;padding-top:30px;overflow:hidden}.location-section .horizontal-rule{margin:25px auto 10px}.venue-illustration{position:relative;overflow:hidden;width:min(850px,100%);aspect-ratio:927/700;margin:30px auto 45px;mix-blend-mode:multiply}.venue-illustration img{width:100%;max-width:none;height:auto;position:absolute;top:-61.43%;left:0}.location-details h3{font-size:47px;line-height:1.25}.location-details>.eyebrow{font-size:15px;letter-spacing:.33em;margin:17px 0 38px}.outline-button{display:inline-flex;justify-content:center;align-items:center;gap:27px;min-height:54px;padding:12px 35px;border:1px solid var(--olive);font-size:12px;letter-spacing:.26em;font-weight:500;transition:background .3s,color .3s}.outline-button:hover{background:var(--olive);color:var(--paper)}.outline-button svg{width:16px;height:16px}.location-note{margin-top:22px;font-size:18px;font-style:italic;opacity:.75}
.rsvp-section{background:#efeddf;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding-top:100px;padding-bottom:100px}.rsvp-inner{max-width:620px;margin:0 auto}.rsvp-heading{text-align:center}.rsvp-heading .eyebrow{font-size:11px;letter-spacing:.27em}.rsvp-heading .section-script{font-size:94px;margin:25px 0 18px;line-height:1}.rsvp-heading>p:last-child{font-size:23px;line-height:1.4}.rsvp-form{margin-top:50px}.field{display:flex;flex-direction:column;margin-bottom:28px;text-align:left;min-width:0}.field label,fieldset legend{font-size:10px;letter-spacing:.17em;font-weight:500;line-height:1.7;margin-bottom:9px}.optional{font-size:8px;letter-spacing:.1em;opacity:.6;margin-left:8px}.field input,.field select,.field textarea{border:0;border-radius:0;background:transparent;border-bottom:1px solid #aeb08e;min-height:45px;padding:8px 0;outline:none;width:100%;font-size:21px;box-shadow:none;transition:border .3s}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--forest);outline:none;box-shadow:0 1px 0 var(--forest)}.field input::placeholder,.field textarea::placeholder{color:#656a4a;opacity:.65}.field textarea{resize:vertical;min-height:75px}.attendance-field{border:0;padding:0;margin:3px 0 30px;min-width:0}.attendance-options{display:grid;grid-template-columns:1fr 1fr;gap:12px}.attendance-choice{position:relative;cursor:pointer}.attendance-choice input{position:absolute;opacity:0;inset:0;width:100%;height:100%;margin:0;cursor:pointer}.attendance-choice>span{display:flex;align-items:center;justify-content:center;gap:10px;padding:14px 10px;border:1px solid #bdc0a2;font-size:19px;transition:all .3s;line-height:1.3;min-height:56px}.attendance-choice input:checked+span{background:var(--olive);border-color:var(--olive);color:var(--paper)}.attendance-choice input:focus-visible+span{outline:2px solid var(--olive);outline-offset:4px}.radio-mark{width:11px;height:11px;flex:none;border:1px solid currentColor;border-radius:50%}.attendance-choice input:checked+span .radio-mark{background:currentColor;box-shadow:inset 0 0 0 3px var(--olive)}.form-row{display:grid;grid-template-columns:1.6fr 1fr;gap:30px}.field select{appearance:none;padding-right:25px;cursor:pointer}.select-wrap{position:relative}.select-wrap:after{content:'';position:absolute;right:5px;top:18px;width:6px;height:6px;border:solid currentColor;border-width:0 1px 1px 0;transform:rotate(45deg);pointer-events:none}.honeypot{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.solid-button{background:var(--olive);color:var(--paper);border:1px solid var(--olive);display:flex;justify-content:center;align-items:center;gap:30px;width:100%;min-height:58px;font-size:11px;letter-spacing:.23em;font-weight:500;transition:background .3s,transform .3s}.solid-button:hover{background:var(--forest)}.solid-button:active{transform:scale(.99)}.rsvp-status{font-size:17px;text-align:center;line-height:1.4;margin-top:15px;min-height:5px}.rsvp-status.error{color:#8a3f2f}.rsvp-success{text-align:center;padding:60px 15px 20px}.success-mark{display:grid;place-items:center;width:50px;height:50px;margin:0 auto 30px;border:1px solid var(--olive);border-radius:50%;font-size:24px}.rsvp-success h3{font-size:58px;line-height:1.2}.rsvp-success p{font-size:22px;line-height:1.45;margin:20px 0 25px}
.site-footer{text-align:center;padding:70px 20px 45px}.footer-monogram{width:80px;height:80px;margin:0 auto 25px}.footer-names{font-size:45px;line-height:1.4}.site-footer .eyebrow{font-size:10px;letter-spacing:.22em;margin-top:10px}.footer-line{display:block;width:30px;height:1px;background:var(--line);margin:30px auto}.footer-last{font-style:italic;font-size:19px;opacity:.75}.replay-button{margin-top:30px;font-size:9px;opacity:.6}.scroll-progress{position:fixed;left:0;right:0;bottom:0;height:2px;background:transparent;z-index:100}.scroll-progress span{display:block;width:100%;height:100%;background:var(--olive);transform-origin:left;transform:scaleX(0)}
.lightbox{padding:0;border:0;width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;background:#20271df7;color:var(--paper);overflow:hidden}.lightbox::backdrop{background:#20271d}.lightbox-inner{height:100%;display:flex;justify-content:center;align-items:center;padding:65px 65px 70px;position:relative}.lightbox img{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain}.lightbox-close{position:absolute;right:22px;top:15px;background:none;color:var(--paper);font-size:38px;width:44px;height:44px;line-height:1;z-index:2}.lightbox-arrow{position:absolute;top:50%;transform:translateY(-50%);background:none;color:var(--paper);font-size:28px;width:48px;height:55px;z-index:2}.lightbox-arrow.previous{left:10px}.lightbox-arrow.next{right:10px}.lightbox-counter{position:absolute;bottom:25px;font-size:13px;letter-spacing:.22em}.toast{position:fixed;left:50%;bottom:25px;transform:translate(-50%,20px);background:var(--forest);color:var(--paper);padding:13px 22px;font-size:17px;line-height:1.3;opacity:0;visibility:hidden;transition:.3s;z-index:900;max-width:calc(100% - 32px);width:max-content;text-align:center;box-shadow:0 6px 25px #0001}.toast.is-visible{opacity:1;visibility:visible;transform:translate(-50%,0)}.noscript-message{padding:20px;background:var(--paper-deep);text-align:center}
/* Scroll choreography remains progressive: without JavaScript, all content is visible. */
.js .reveal{opacity:0;transform:translateY(32px);transition:opacity 1.15s var(--ease) var(--delay,0ms),transform 1.15s var(--ease) var(--delay,0ms)}.js .reveal.is-visible{opacity:1;transform:translateY(0)}.js .site-entering .intro-kicker,.js .site-entering .intro-title,.js .site-entering .intro-subtitle{animation:unfold 1.4s var(--ease) both}.js .site-entering .intro-title{animation-delay:.15s}.js .site-entering .intro-subtitle{animation-delay:.3s}.photo-card.reveal{transform:translateY(50px);transition-duration:1.4s}.is-leaving~.invitation-site .intro-heading{will-change:transform,opacity}
@keyframes sealPulse{0%{box-shadow:0 0 0 0 #f7f4e950;opacity:.8}80%{box-shadow:0 0 0 17px #f7f4e900;opacity:0}100%{box-shadow:0 0 0 0 #f7f4e900;opacity:0}}@keyframes unfold{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes scrollDrop{0%,100%{transform:translateY(0);opacity:.2}50%{transform:translateY(28px);opacity:.8}}
@media(min-width:1500px){.section-pad{padding-top:130px;padding-bottom:130px}.intro-heading{padding-top:95px}.invitation-section{padding-top:70px}}
@media(max-width:900px){.site-header nav{gap:20px}.desktop-link{display:none}.timeline{gap:10px}.event-copy time{font-size:30px}.event-copy small{font-size:22px}.event-copy h3{font-size:11px}.gallery{gap:12px}.section-pad{padding-left:26px;padding-right:26px}.signature{font-size:46px}.story-letter>p:not(.signature){font-size:26px}}
@media(max-width:699px){
  html{scroll-padding-top:65px}body{font-size:20px}.section-pad{padding:75px 22px}.eyebrow{font-size:11px}.section-script{font-size:72px}.horizontal-rule{width:42px}.site-header{height:64px;padding:0 22px}.brand{width:38px}.monogram-crop{width:36px;height:36px}.header-date{font-size:12px;letter-spacing:.12em}.header-date span{margin:0 3px}.site-header nav{font-size:10px}.header-rsvp span{margin-left:5px}.opening-frame{width:100%;height:100%;max-width:none}.stamp-video{object-fit:contain}.seal-halo{display:none}.skip-opening{right:24px;bottom:22px;font-size:10px}.opening-status{font-size:13px;bottom:62px}.intro-heading{padding:64px 20px 47px}.intro-kicker{font-size:8px;letter-spacing:.24em;margin-bottom:35px}.intro-title{font-size:110px;line-height:.9}.intro-title span:first-child{padding-right:25px}.intro-title span:last-child{padding-left:25px}.intro-subtitle{font-size:21px;margin-top:30px}.film-wrap{aspect-ratio:1.65}.film-caption{font-size:7px;letter-spacing:.12em;left:15px;bottom:17px;max-width:65%}.film-controls{right:12px;bottom:12px;gap:6px}.round-control{width:29px;height:29px}.round-control svg{width:12px;height:12px}.countdown-wrap{padding:45px 18px 15px}.countdown-title{font-size:40px;white-space:nowrap}.countdown{gap:5px;margin-top:13px;max-width:390px}.count-value{font-size:57px;line-height:1}.count-colon{font-size:35px;line-height:1.25}.count-label{font-size:8px;letter-spacing:.17em;margin-top:10px}.scroll-cue{margin-top:26px;height:52px}.scroll-cue::before{height:40px}.invitation-section{padding:40px 14px 75px}.invitation-card{padding:53px 13px 44px;box-shadow:0 5px 30px #4a482608}.invitation-eyebrow{font-size:11px;letter-spacing:.19em;line-height:1.9}.couple-names{margin:55px 0 30px}.groom-name{font-size:clamp(49px,16.2vw,110px);line-height:1.12;letter-spacing:-.025em}.and{font-size:45px;line-height:1.3}.bride-name{font-size:100px;line-height:1}.vertical-rule{height:29px}.wedding-date{height:125px}.date-backdrop{font-size:clamp(106px,28vw,165px);letter-spacing:-.075em}.weekday{font-size:16px}.date-line{font-size:21px;letter-spacing:.08em}.card-venue{font-size:12px;letter-spacing:.16em;margin-top:26px}.venue-garden{font-size:20px;letter-spacing:.12em}#add-calendar{font-size:9px;margin-top:23px}.card-corner{width:15px;height:15px}.timeline-section{padding-top:25px;padding-bottom:65px}.section-heading .eyebrow{font-size:11px}.section-heading .section-script{font-size:75px;margin-top:10px}.heading-bottom{margin-top:12px}.timeline{display:block;max-width:360px;margin-top:42px}.timeline:before{top:25px;bottom:30px;left:50%;right:auto;width:1px;height:auto}.timeline-event{display:grid;grid-template-columns:1fr 1fr;align-items:center;min-height:140px;padding:12px 0}.event-icon{width:76px;height:92px;margin:0 auto}.event-copy{text-align:left;padding-left:35px}.event-copy time{font-size:31px}.event-copy small{font-size:22px}.event-copy h3{font-size:11px;margin-top:9px;line-height:1.5;letter-spacing:.18em}.timeline-dot{position:absolute;top:50%;left:50%;margin:0;transform:translate(-50%,-50%);width:7px;height:7px}.timeline-event:nth-child(even) .event-icon{grid-column:2;grid-row:1}.timeline-event:nth-child(even) .event-copy{grid-column:1;grid-row:1;text-align:right;padding-left:0;padding-right:35px}.timeline-note{font-size:19px;margin-top:30px}.story-section{padding-top:65px;padding-left:0;padding-right:0;overflow:hidden}.story-letter{padding:0 25px}.story-letter .eyebrow{font-size:11px;letter-spacing:.15em;line-height:1.9;margin-bottom:25px}.story-letter>p:not(.signature){font-size:24px;line-height:1.42}.desktop-break{display:none}.signature{margin:45px auto 38px;font-size:37px;line-height:1.4}.signature span{font-size:34px;margin-bottom:0}.gallery{display:flex;overflow-x:auto;gap:14px;padding:0 12vw 12px;scroll-snap-type:x mandatory;scrollbar-width:none;scroll-padding:12vw;-webkit-overflow-scrolling:touch}.gallery::-webkit-scrollbar{display:none}.photo-card{flex:0 0 76vw;aspect-ratio:.7;scroll-snap-align:center;max-width:460px;--delay:0ms!important}.photo-card:nth-child(even){margin:0}.photo-card:nth-child(2) img{object-position:50% center}.photo-number{font-size:14px;bottom:16px;left:18px}.photo-expand{bottom:15px;right:18px}.gallery-footer{flex-wrap:wrap;justify-content:center;gap:14px;margin:15px 25px 0}.gallery-footer>.gallery-hint:first-child{display:none}.gallery-navigation{display:flex;gap:3px;justify-content:center;width:100%}.gallery-dot{position:relative;width:28px;height:28px;background:none;padding:0}.gallery-dot:before{content:'';width:5px;height:5px;position:absolute;top:50%;left:50%;border:1px solid var(--olive);border-radius:50%;transform:translate(-50%,-50%);transition:all .3s}.gallery-dot.active:before{background:var(--olive);width:7px;height:7px}.swipe-hint{display:block;font-size:8px;letter-spacing:.22em;font-style:normal}.swipe-hint span{font-size:17px;vertical-align:middle;margin-left:6px}.location-section{padding:35px 20px 75px}.location-section .section-script{font-size:76px}.location-section .horizontal-rule{margin-top:20px}.venue-illustration{width:calc(100% + 24px);max-width:none;margin:24px -12px 35px}.location-details h3{font-size:32px;line-height:1.25}.location-details>.eyebrow{font-size:10px;letter-spacing:.25em;margin:15px 0 30px}.outline-button{min-height:52px;font-size:10px;padding:12px 27px;gap:25px}.location-note{font-size:16px;margin-top:21px}.rsvp-section{padding:65px 24px}.rsvp-heading .eyebrow{font-size:9px;letter-spacing:.2em}.rsvp-heading .section-script{font-size:76px;margin:26px 0 20px}.rsvp-heading>p:last-child{font-size:21px}.rsvp-form{margin-top:38px}.field{margin-bottom:25px}.field label,fieldset legend{font-size:9px;letter-spacing:.12em}.optional{font-size:7px}.field input,.field select,.field textarea{font-size:20px}.attendance-options{gap:10px}.attendance-choice>span{font-size:17px;gap:8px;padding:13px 8px}.radio-mark{width:9px;height:9px}.form-row{grid-template-columns:1.35fr 1fr;gap:20px}.solid-button{font-size:10px;letter-spacing:.17em;gap:20px}.rsvp-success h3{font-size:48px}.rsvp-success p{font-size:21px}.site-footer{padding:55px 20px 35px}.footer-monogram{width:68px;height:68px;margin-bottom:24px}.footer-names{font-size:36px}.site-footer .eyebrow{font-size:8px}.footer-last{font-size:18px}.lightbox-inner{padding:70px 10px 85px}.lightbox-arrow{top:auto;bottom:15px;transform:none}.lightbox-arrow.previous{left:22px}.lightbox-arrow.next{right:22px}.lightbox-counter{bottom:32px}.lightbox-close{top:max(12px,env(safe-area-inset-top));right:15px}
}
@media(max-width:360px){.intro-title{font-size:96px}.intro-subtitle{font-size:19px}.countdown-title{font-size:35px}.count-value{font-size:48px}.count-colon{font-size:29px}.count-label{font-size:7px}.invitation-eyebrow{font-size:10px}.date-line{font-size:19px}.card-venue{font-size:11px}.story-letter>p:not(.signature){font-size:22px}.signature{font-size:32px}.section-heading .section-script{font-size:65px}.attendance-options{grid-template-columns:1fr}.attendance-choice>span{justify-content:flex-start;padding-left:18px}.form-row{grid-template-columns:1fr;gap:0}.location-details h3{font-size:28px}.footer-names{font-size:31px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0ms!important}.js .reveal{opacity:1;transform:none}.seal-halo{display:none}.opening.is-leaving .opening-frame{transform:none;filter:none}}
.gallery-play{width:32px;height:28px;padding:0;background:none;color:var(--olive);font-size:15px;line-height:28px;margin-left:8px}

/* Keep calligraphic overhangs inside narrow phone screens. */
@media(max-width:699px){.intro-title{font-size:clamp(74px,24vw,106px)}.intro-title span{white-space:nowrap;padding-left:0!important;padding-right:0!important}.intro-title span:first-child{transform:translateX(-6px)}.intro-title span:last-child{transform:translateX(6px)}}

.venue-illustration img,.monogram-crop img{filter:brightness(1.07)}
@media(max-width:699px){.rsvp-heading .section-script{font-size:clamp(54px,18vw,76px);white-space:nowrap}}

/* The complete introduction fits in the visible screen, including the header.
   svh accounts for mobile browser bars; vh remains the fallback. */
:root { --site-header-height: 78px; }
.site-header { height: var(--site-header-height); }
#intro {
  height: calc(100vh - var(--site-header-height));
  height: calc(100svh - var(--site-header-height));
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-evenly;
  gap: clamp(8px, 1.8svh, 18px);
  padding: clamp(12px, 2svh, 20px) 0;
}
#intro .intro-heading { padding: 0 20px; flex: 0 0 auto; width: 100%; overflow: visible; }
#intro .intro-kicker { display: none; }
#intro .intro-title {
  font-size: clamp(54px, min(24vw, 11.5svh), 112px);
  line-height: .88;
}
#intro .intro-title span { white-space: nowrap; padding: 0; }
#intro .intro-subtitle {
  font-size: clamp(17px, min(5.3vw, 2.8svh), 24px);
  line-height: 1.25;
  margin: clamp(8px, 1.6svh, 14px) auto 0;
}
#intro .film-wrap {
  width: min(100%, 62svh);
  height: auto;
  min-height: 0;
  max-height: 36svh;
  aspect-ratio: 832 / 464;
  flex: 0 1 auto;
  margin: 0 auto;
}
#intro .countdown-wrap { flex: 0 0 auto; padding: 0 18px; width: 100%; }
#intro .countdown-title { font-size: clamp(28px, min(10.5vw, 5svh), 48px); line-height: 1.15; white-space: nowrap; }
#intro .countdown { margin-top: 8px; gap: clamp(5px, 1.5vw, 12px); max-width: 500px; }
#intro .count-value { font-size: clamp(34px, min(14.5vw, 7svh), 68px); line-height: 1; }
#intro .count-colon { font-size: clamp(23px, min(9vw, 4.6svh), 44px); line-height: 1.1; }
#intro .count-label { font-size: clamp(7px, 1svh, 10px); letter-spacing: .18em; margin-top: 5px; }
#intro .countdown-message { font-size: 17px; margin: 5px 0 0; }
#intro .scroll-cue { display: none; }

/* A quiet crossfade from the shortened stamp into the complete intro. */
.opening { transition: opacity 1.1s ease-in-out, visibility 1.1s; }
.opening.is-leaving .opening-frame { transform: none; filter: none; }
.js .site-entering #intro { animation: introFade 1.1s ease-in-out both; }
.js .site-entering .intro-kicker,
.js .site-entering .intro-title,
.js .site-entering .intro-subtitle { animation: none; }
@keyframes introFade { from { opacity: 0; } to { opacity: 1; } }

@media (max-width: 699px) { :root { --site-header-height: 64px; } }
@media (orientation: landscape) and (max-height: 540px) {
  :root { --site-header-height: 56px; }
  #intro {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: minmax(0, 1fr) auto;
    padding: 10px 24px;
    gap: 8px 24px;
  }
  #intro .intro-heading { grid-column: 1; padding: 0; }
  #intro .intro-title { font-size: clamp(38px, 10svh, 54px); }
  #intro .intro-subtitle { font-size: 16px; }
  #intro .film-wrap { grid-column: 2; width: 100%; max-height: 100%; }
  #intro .countdown-wrap { grid-column: 1 / -1; }
  #intro .countdown-title { font-size: 27px; }
  #intro .count-value { font-size: 34px; }
  #intro .count-label { font-size: 7px; margin-top: 3px; }
  #intro .countdown { margin-top: 4px; max-width: 340px; }
  #intro .film-caption { display: none; }
}

/* Personalized invitation details */
.personal-greeting{max-width:720px;margin:0 auto 36px;text-align:center;font-size:clamp(23px,4vw,34px);line-height:1.35;color:var(--olive,#71742c);overflow-wrap:anywhere}
.invitation-access{max-width:460px;margin:26px auto;text-align:center;font-size:20px;line-height:1.6}
.locked-details{font-size:15px;line-height:1.5;margin:-5px 0 24px;opacity:.75}
.rsvp-form input[readonly]{background:rgba(113,116,44,.065);color:inherit;cursor:default;text-overflow:ellipsis}
[hidden]{display:none!important}
