@font-face{font-family:WeddingScript;src:url('assets/fonts/chancery.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
:root{color-scheme:light;--paper:#fffdf8;--cream:#f7f0e5;--ivory:#f3ede1;--navy:#24364d;--gold:#907044;--line:#d8c5a7;--muted:#65676a;--script:WeddingScript,'Segoe Script',cursive}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth;scroll-padding-top:24px}
body{margin:0;background:var(--paper);color:var(--navy);font:18px/1.8 Georgia,'Times New Roman',serif}
body.opening-active{overflow:hidden}
button,input,textarea,select{font:inherit}
button,a{-webkit-tap-highlight-color:transparent}
button{cursor:pointer}
a{color:inherit;text-underline-offset:4px}
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--gold);outline-offset:4px}
img{max-width:100%}
p{margin:0 0 1em}
h1,h2,h3,h4{font-weight:400;line-height:1.25;margin:0 0 .6em}
h2{font-size:clamp(30px,4vw,47px)}
h3{font-size:27px}
.script-name{font-family:var(--script);font-weight:400;line-height:1.2}
.section{width:min(1120px,calc(100% - 64px));margin:auto;padding:85px 0}
.section-heading{text-align:center;margin-bottom:44px}
.section-heading>p:last-child:not(.eyebrow){max-width:520px;margin:20px auto 0;color:var(--muted)}
.eyebrow{font:13px/1.8 Arial,sans-serif;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin-bottom:16px}
.button{display:inline-flex;justify-content:center;align-items:center;min-height:48px;padding:12px 20px;border:1px solid var(--gold);border-radius:3px;background:var(--navy);color:var(--paper);font:14px/1.6 Arial,sans-serif;text-align:center;text-decoration:none;transition:transform .25s,background .25s}
.button:hover{transform:translateY(-2px);background:#354b65}
.button:disabled{opacity:.55;cursor:default;transform:none}
.button.secondary{background:transparent;color:var(--navy);border-color:var(--line)}
.button.secondary:hover{background:#eee2d0}
.text-button,.dialog-close{background:none;border:0;color:var(--navy);font:14px Arial,sans-serif;padding:13px;min-height:44px}
.actions{display:flex;flex-direction:column;gap:10px}
.actions.horizontal{flex-direction:row;flex-wrap:wrap}
.actions.horizontal>*{flex:1}
.full{width:100%}
.cross{display:block;font-size:38px;color:var(--gold);line-height:1.3;margin-bottom:24px}
.cross.small{font-size:30px}
.divider{display:block;width:140px;height:auto;margin:24px auto 0}
.skip-link{position:fixed;top:10px;left:10px;z-index:40;padding:10px 18px;background:var(--paper);transform:translateY(-160%)}
.skip-link:focus{transform:none}
.topbar{min-height:68px;padding:10px 5vw;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}
.topbar>span{font:13px Arial,sans-serif;letter-spacing:.16em;color:var(--gold)}
.small-monogram{font:36px var(--script);text-decoration:none}
.topbar button{border:0;background:transparent;color:var(--navy);font:13px Arial,sans-serif;min-height:44px}
.hero{position:relative;max-width:640px;width:100%;aspect-ratio:941/1672;margin:auto;isolation:isolate;overflow:hidden}
.hero-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1;animation:satin-breathe 18s ease-in-out infinite alternate}
.hero-content{position:absolute;top:27%;left:18%;right:18%;text-align:center}
.hero-content .eyebrow{font-size:clamp(11px,1.9vw,14px);letter-spacing:.15em;margin-bottom:9px}
.hero-content .praise{margin-bottom:15px}
.hero h1{font-size:clamp(46px,12vw,78px);line-height:1.02;margin:14px 0 12px}
.hero h1>span{display:block}
.hero h1 i{font-family:Georgia,serif;font-size:.32em;display:block;margin:2px 0 6px}
.hero-date{font-size:clamp(15px,3.8vw,23px);line-height:1.5;margin:0}
.weekday{font:12px/1.8 Arial,sans-serif;letter-spacing:.2em;text-transform:uppercase;margin:6px 0 17px;color:var(--gold)}
.text-link{font-size:14px;line-height:1.5;text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:6px}
.text-link span{display:inline-block;margin-left:7px}
.petals{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.petal{position:absolute;top:-40px;width:24px;height:28px;object-fit:contain;opacity:0;pointer-events:none;animation:petal-drift 13s linear infinite}
.verse{max-width:800px;text-align:center;padding-top:76px;padding-bottom:70px}
.verse blockquote{font-family:var(--script);font-size:clamp(30px,4.8vw,44px);line-height:1.5;margin:0 0 25px}
.verse .eyebrow{margin:0}
.announcement{max-width:960px;text-align:center;border-top:1px solid var(--line)}
.parents{font-size:23px;line-height:1.6}
.parents .eyebrow{margin-top:35px}
.amp{font-family:var(--script);color:var(--gold)}
.invite-copy{max-width:670px;margin:24px auto 0;font-size:20px;line-height:1.9;color:#59616c}
.couple-announcement{display:grid;grid-template-columns:1fr 50px 1fr;align-items:center;gap:18px;margin:58px 0 30px}
.person .script-name{font-size:clamp(45px,5vw,64px);margin-bottom:10px}
.person .qualifications{font-size:20px;margin-bottom:6px;color:var(--gold)}
.person>p:last-child{font-size:18px;line-height:1.6}
.person .eyebrow{margin-bottom:24px}
.together{font-family:var(--script);font-size:28px;color:var(--gold)}
.monogram-section{padding:65px 24px;text-align:center;background:linear-gradient(110deg,#f9f3e9,var(--paper),#f9f3e9);border-block:1px solid #e9ddca}
.monogram-frame{width:290px;height:150px;max-width:90vw;margin:0 auto 26px;background:url('assets/prayer-illustration.webp') center top/100% auto no-repeat;overflow:hidden;display:flex;align-items:center;justify-content:center}
.monogram-frame span{font-size:69px;margin-top:5px;color:var(--gold);animation:gold-shimmer 7s ease-in-out infinite}
.monogram-section h2{font-size:48px;margin:12px 0 0}
.monogram-section .eyebrow{margin-bottom:0}
.countdown{text-align:center;max-width:780px}
.counter{display:grid;grid-template-columns:repeat(4,1fr);margin:35px auto 24px;max-width:610px}
.counter>div+div{border-left:1px solid var(--line)}
.counter strong{font:52px/1.2 Georgia,serif;font-variant-numeric:tabular-nums;display:block}
.counter span{font:13px Arial,sans-serif;color:var(--gold);display:block;margin-top:12px;text-transform:uppercase;letter-spacing:.12em}
#countdown-note{font-size:16px;color:var(--muted)}
.event-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.event-card{border:1px solid var(--line);padding:20px 24px 30px;text-align:center;display:flex;flex-direction:column;align-items:center;background:var(--paper)}
.event-art{width:100%;max-width:235px;aspect-ratio:1;background-image:url('assets/ceremony-atlas.webp');background-size:300% 100%;background-repeat:no-repeat;margin:0 auto 24px}
.event-art.rings{background-position:0 0}.event-art.church{background-position:50% 0}.event-art.arch{background-position:100% 0}
.event-art.small-art{width:64px;margin-bottom:20px}
.event-card h3{font-family:var(--script);font-size:39px;line-height:1.3;margin:3px 0 15px}
.event-card .eyebrow{font-size:12px;letter-spacing:.1em}
.event-time{color:var(--gold);font-size:19px;line-height:1.6}
.event-card h4{font-size:22px;margin:20px 0 8px}
.address{font-size:17px;line-height:1.8;color:var(--muted)}
.event-note{font-style:italic;font-size:17px;line-height:1.9;margin:10px 0 27px;color:#59616c}
.event-card .actions{margin-top:auto;width:100%}
.event-card small{font:12px/1.7 Arial,sans-serif;display:block;margin-top:15px;color:var(--muted)}
.family-section{background:var(--cream)}
.family-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;max-width:900px;margin:auto}
.family-card{position:relative;text-align:center;padding:35px 24px;background:var(--paper);border:1px solid var(--line);overflow:hidden}
.family-card::before{content:'';position:absolute;right:-12px;top:-12px;width:90px;height:90px;background:url('assets/ceremony-atlas.webp') left center/300% 100%;opacity:.16;pointer-events:none}
.family-card h3{font:14px/1.7 Arial,sans-serif;color:var(--gold);margin-bottom:18px;position:relative}
.family-card p{font-size:21px;line-height:1.85;margin-bottom:5px;position:relative}
.family-card small{font:14px Arial,sans-serif;color:var(--muted)}
.cousins{grid-column:1/-1}
.photo-grid,.card-gallery{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
.photo-placeholder{margin:0;text-align:center}
.photo-placeholder>div{display:grid;place-items:center;aspect-ratio:3/4;border:1px solid var(--line);border-radius:100px 100px 14px 14px;background:linear-gradient(150deg,#fdfaf4,#f1e9dc);box-shadow:0 10px 24px #24364d08}
.photo-placeholder .script-name{font-size:48px;color:#a88a63}
.photo-placeholder figcaption{font-size:17px;margin-top:17px}
.photo-frame{border:0;background:none;padding:0;color:var(--navy);text-align:center}
.photo-frame img{width:100%;aspect-ratio:3/4;object-fit:cover;border:1px solid var(--line);border-radius:16px;display:block}
.photo-frame span{display:block;font:16px/1.6 Georgia,serif;margin-top:13px}
.location-grid{display:grid;grid-template-columns:1fr 1fr;gap:30px}
.location-card{text-align:center;padding:35px;border:1px solid var(--line);background:var(--cream)}
.location-card .cross{height:64px;display:grid;place-items:center;margin-bottom:20px}
.location-card h3{font-size:27px}
.location-card p:not(.eyebrow){font-size:18px;color:var(--muted)}
.location-card .button{margin-top:12px}
.rsvp-section{background:var(--cream)}
.rsvp-layout{display:grid;grid-template-columns:.85fr 1.15fr;gap:60px;align-items:start}
.contact{padding:24px 0 35px;border-bottom:1px solid var(--line);margin-bottom:22px}
.contact h3{font-size:24px;line-height:1.5}
.phone{display:inline-block;font-size:20px;margin-bottom:25px;text-decoration:none}
.rsvp-form{background:var(--paper);border:1px solid var(--line);padding:35px}
.rsvp-form h3{font-size:30px;margin-bottom:30px}
label{display:block;font:14px/1.7 Arial,sans-serif;margin-bottom:20px}
label small{font-size:12px;color:var(--muted)}
input,select,textarea{width:100%;display:block;margin-top:8px;min-height:48px;border:1px solid var(--line);background:var(--paper);border-radius:3px;padding:11px 12px;color:var(--navy);font:16px/1.5 Arial,sans-serif}
textarea{resize:vertical}
fieldset{margin:24px 0;padding:20px 0 0;border:0;border-top:1px solid var(--line)}
legend{font:14px/1.7 Arial,sans-serif;padding-top:14px}
fieldset label{display:grid;grid-template-columns:1fr 1.1fr;gap:10px;align-items:center;margin:10px 0}
fieldset select{margin:0}
.form-row{display:grid;grid-template-columns:1.2fr .8fr;gap:15px}
.form-notice{font:13px/1.8 Arial,sans-serif;color:var(--muted);margin:18px 0 0}
#rsvp-feedback{border-top:1px solid var(--line);margin-top:25px;padding-top:20px;font-size:16px}
#rsvp-feedback .button{display:flex}
.closing{display:grid;grid-template-columns:1fr 1fr;gap:65px;align-items:center}
.closing-art{width:100%;height:auto}
.closing-copy p:not(.eyebrow){font-size:19px;line-height:1.9}
.closing-copy .script-name{font-size:49px;margin:30px 0 8px}
.closing-copy .closing-date{font-size:18px;color:var(--gold)}
.final-actions{display:flex;flex-wrap:wrap;gap:13px;justify-content:center;padding-top:10px;padding-bottom:65px}
footer{text-align:center;padding:20px 24px 120px}
.footer-monogram{font-size:55px;color:var(--gold)}
footer>p{max-width:520px;margin:15px auto 18px;font-size:18px}
footer>img{display:block;width:270px;height:auto;margin:auto}
.guest-tools{position:fixed;z-index:10;bottom:max(12px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;max-width:calc(100vw - 20px);padding:4px;border:1px solid var(--line);background:#fffdf8f5;box-shadow:0 6px 24px #24364d15;backdrop-filter:blur(10px);border-radius:4px}
.guest-tools a,.guest-tools button{border:0;background:none;font:14px/1.4 Arial,sans-serif;min-height:44px;padding:10px 15px;white-space:nowrap;text-decoration:none;color:var(--navy)}
.guest-tools [aria-pressed=true]{background:var(--cream)}
dialog{max-height:90svh;max-width:calc(100% - 28px);width:560px;border:1px solid var(--line);padding:26px;background:var(--paper);color:var(--navy)}
dialog::backdrop{background:#24364d99;backdrop-filter:blur(4px)}
.dialog-close{display:block;margin-left:auto}
dialog h2{font-size:30px}
dialog p{font-size:16px;line-height:1.8;margin:18px 0}
dialog .button{margin-top:8px}
#lightbox{width:900px;text-align:center}
#lightbox img{display:block;max-height:70svh;width:100%;object-fit:contain}
.lightbox-nav{display:flex;justify-content:space-between}
.lightbox-nav button{background:none;border:1px solid var(--line);padding:10px 16px;color:var(--navy);min-height:44px;font:14px Arial,sans-serif}
#share-dialog .button{width:100%}
.toast{position:fixed;z-index:50;left:50%;bottom:90px;transform:translateX(-50%);max-width:calc(100vw - 32px);margin:0;padding:0;background:var(--navy);color:white;border-radius:4px;font:14px/1.6 Arial,sans-serif;text-align:center;pointer-events:none}
.toast:not(:empty){padding:12px 18px}
.motion-ready .reveal{opacity:0;transform:translateY(22px);transition:opacity 1.1s ease,transform 1.1s ease}
.motion-ready .reveal.in-view{opacity:1;transform:none}
.motion-ready .person:nth-of-type(2){transition-delay:.2s}
@keyframes satin-breathe{to{transform:scale(1.018) translateY(-2px)}}
@keyframes gold-shimmer{50%{color:#b18c50;text-shadow:0 0 16px #e3c99b60}}
@keyframes petal-drift{0%{transform:translate3d(0,-40px,0) rotate(0);opacity:0}10%{opacity:.6}50%{transform:translate3d(28px,420px,0) rotate(160deg);opacity:.5}100%{transform:translate3d(-24px,1080px,0) rotate(340deg);opacity:0}}
/* The supplied key-opening film and its fade/zoom timing are preserved. */
.opening{position:fixed;inset:0;z-index:60;background:#f3ede1;overflow:hidden;opacity:1;transform:scale(1);transition:opacity 1400ms cubic-bezier(.22,1,.36,1),transform 1600ms cubic-bezier(.22,1,.36,1)}
.opening.leaving{opacity:0;transform:scale(1.5);pointer-events:none}
.opening-trigger{position:absolute;inset:0;display:block;width:100%;height:100%;border:0;padding:0;background:transparent;color:var(--gold);cursor:pointer}
.opening-trigger:disabled{cursor:default}
.opening-stage{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100vw,calc(100svh * .5625));height:max(100svh,calc(100vw / .5625));display:block}
.opening video{display:block;width:100%;height:100%;max-width:672px;margin:auto;object-fit:cover}
.opening-copy{position:absolute;top:79%;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:0 18px;opacity:1;transition:opacity 900ms ease-out}
.opening-names{display:block;font-family:Georgia,'Times New Roman',serif;font-size:clamp(21px,5.6vw,38px);font-weight:400;text-transform:uppercase;letter-spacing:.12em;color:#9c7a3c;line-height:1.4;animation:name-arrive 1.4s .55s both}
.opening-hint{font:12px/1.8 Georgia,serif;letter-spacing:.28em;text-transform:uppercase;color:#8a6a46;animation:hint-arrive 1.2s 1.1s both}
.opening.playing .opening-copy{opacity:0}
.skip-opening{position:absolute;right:max(16px,env(safe-area-inset-right));top:max(16px,env(safe-area-inset-top));min-height:44px;padding:9px 15px;border:1px solid var(--line);border-radius:24px;background:#fffdf8e6;color:#674c2a;font:14px Arial,sans-serif}
@keyframes name-arrive{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes hint-arrive{from{opacity:0}to{opacity:1}}
@media(min-width:768px){.opening-stage{width:100%;height:100%}.opening video{object-fit:contain}}
@media(max-width:1000px){.event-grid{grid-template-columns:1fr;max-width:650px;margin:auto}.event-card{padding:28px 36px 35px}.event-art{max-width:210px}.event-card .actions{width:min(100%,350px)}.event-card h3{font-size:42px}.event-note{max-width:480px}.rsvp-layout{gap:30px}.closing{gap:35px}}
@media(max-width:700px){
 .section{width:calc(100% - 40px);padding:58px 0}.section-heading{margin-bottom:34px}.eyebrow{font-size:12px}
 .topbar{padding:8px 18px;min-height:62px}.topbar>span{font-size:12px}.topbar button{font-size:12px}
 .couple-announcement{display:flex;flex-direction:column;gap:20px;margin:40px 0 20px}.person .script-name{font-size:55px}.person .eyebrow{margin-bottom:12px}.together{margin:5px 0 20px}.parents{font-size:22px}.invite-copy{font-size:18px}.monogram-section{padding:48px 20px}.monogram-section h2{font-size:42px}
 .counter{gap:0}.counter strong{font-size:37px}.counter span{font-size:12px;letter-spacing:.05em}.countdown>p:last-child{font-size:14px}
 .family-grid{grid-template-columns:1fr;gap:17px}.family-card{padding:27px 20px}.family-card p{font-size:20px}
 .photo-grid{grid-template-columns:1fr 1fr;gap:24px 16px}.card-gallery{grid-template-columns:1fr 1fr}.photo-placeholder .script-name{font-size:42px}
 .location-grid,.rsvp-layout,.closing{grid-template-columns:1fr}.location-card{padding:30px 22px}.rsvp-layout{gap:20px}.rsvp-form{padding:25px 20px}.contact{padding:10px 0 25px}.form-row{grid-template-columns:1fr}
 .closing-art{width:min(420px,100%);margin:auto}.closing-copy{text-align:center}.closing-copy .script-name{font-size:44px}.closing{gap:35px}
 .final-actions{padding-top:5px;padding-bottom:35px}.final-actions>*{flex:1 1 calc(50% - 14px)}.final-actions>.button:first-child{flex-basis:100%}
 .guest-tools{width:calc(100% - 20px)}.guest-tools a,.guest-tools button{font-size:12px;padding:10px 9px}
 .opening-names{font-size:22px;letter-spacing:.09em}.opening-hint{letter-spacing:.2em}
}
@media(max-width:360px){.hero h1{font-size:43px;margin:10px 0}.hero-content .eyebrow{font-size:10px;margin-bottom:8px}.hero-content .praise{margin-bottom:10px}.hero-date{font-size:14px}.weekday{font-size:11px;margin-bottom:10px}.text-link{font-size:12px}.event-card{padding:25px 20px}.form-row{display:block}.guest-tools a,.guest-tools button{padding:10px 7px}.counter strong{font-size:32px}}
.reduce-motion *,.reduce-motion *::before,.reduce-motion *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
.reduce-motion .reveal{opacity:1!important;transform:none!important}.reduce-motion .petals{display:none}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.motion-ready .reveal{opacity:1;transform:none}.petals{display:none}}

/* Individual petals use small windows into the original supplied artwork. */
.petals{position:fixed;inset:0;z-index:45;pointer-events:none;overflow:hidden;mix-blend-mode:multiply;opacity:1}
.air-petal{position:absolute;top:-65px;left:var(--left);width:40px;height:34px;opacity:0;animation:petal-descent var(--duration) linear var(--delay) infinite;pointer-events:none}
.air-petal span{display:block;width:40px;height:34px;background-image:url('assets/petal-sheet.png');background-repeat:no-repeat;background-size:514.5px 1024px;background-position:var(--crop);animation:petal-turn var(--turn) ease-in-out var(--delay) infinite alternate;transform-origin:50% 60%}
@keyframes petal-descent{0%{transform:translate3d(0,-50px,0);opacity:0}12%{opacity:var(--alpha)}45%{transform:translate3d(var(--sway),48vh,0)}85%{opacity:var(--alpha)}100%{transform:translate3d(var(--end),calc(100vh + 110px),0);opacity:0}}
@keyframes petal-turn{0%{transform:rotate(-28deg) rotateY(15deg) scale(var(--scale))}50%{transform:rotate(35deg) rotateY(65deg) scale(var(--scale))}100%{transform:rotate(110deg) rotateY(-25deg) scale(var(--scale))}}
@media(max-width:600px){.air-petal:nth-child(n+7){display:none}}
.reduce-motion .petals{display:none}
@media(prefers-reduced-motion:reduce){.petals{display:none}}
