@import url('https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,wght@0,400;0,500;1,400;1,500&family=DM+Sans:wght@400;500;600&display=swap');

:root{--paper:#f7f3ec;--ink:#262320;--muted:#6d665e;--rust:#b65b3b;--burgundy:#672b3b;--line:#d9d1c5;--serif:'Bodoni Moda',Georgia,serif;--sans:'DM Sans',Arial,sans-serif;--header-height:78px;--ease:cubic-bezier(.16,1,.3,1)}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-height) + 18px)}body{margin:0;background:var(--paper);color:var(--ink);font:400 16px/1.8 var(--sans);-webkit-font-smoothing:antialiased}::selection{background:#b65b3b35}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}button,a,summary{touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--rust);outline-offset:5px}img{display:block;max-width:100%}h1,h2,h3,h4,p,figure{margin:0}h1,h2,h3,h4{font-family:var(--serif);font-weight:400;line-height:1.12;letter-spacing:-.045em;text-wrap:balance;overflow-wrap:anywhere}h2{font-size:clamp(3rem,5.2vw,5.3rem)}em{font-weight:400;color:var(--rust)}p{overflow-wrap:break-word}p+p{margin-top:1.2rem}[hidden]{display:none!important}.eyebrow,.attire-label,.person-role{font:500 .75rem/1.6 var(--sans);text-transform:uppercase;letter-spacing:.14em}.section{padding:110px max(6%,calc((100vw - 1320px)/2))}.skip{position:absolute;top:-100px;left:20px;padding:12px 20px;background:var(--paper);color:var(--ink);z-index:100}.skip:focus{top:12px}

/* The cover is a photograph first; the names sit below the faces. */
.header{height:var(--header-height);padding:0 4%;display:flex;align-items:center;justify-content:space-between;gap:24px;position:sticky;top:0;z-index:30;background:var(--ink);color:var(--paper);border-bottom:1px solid #ffffff17}.monogram{display:inline-flex;align-items:center;justify-content:center;gap:11px;flex-shrink:0;min-height:44px;font:400 1.75rem/1 var(--serif);letter-spacing:0;white-space:nowrap;text-decoration:none}.monogram span{display:block;flex:0 0 1px;width:1px;height:24px;margin:0 2px;background:#d9a68e;transform:rotate(18deg);font-size:0;line-height:0;letter-spacing:0}.header nav{display:flex;align-items:center;gap:clamp(14px,1.6vw,27px);min-width:0}.header nav a{font-size:.875rem;white-space:nowrap;position:relative;padding:8px 0;color:#e7ded2}.header nav a:after{content:'';position:absolute;left:0;right:0;bottom:1px;height:1px;background:#d9a68e;transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease)}.header nav a:hover:after,.header nav a[aria-current]:after{transform:scaleX(1)}.header-date{font-size:.75rem;letter-spacing:.1em;white-space:nowrap;color:#d9a68e}.reading-progress{position:fixed;left:0;right:0;top:var(--header-height);height:2px;background:var(--rust);z-index:40;transform:scaleX(0);transform-origin:left}.menu-button{display:none;align-items:center;gap:13px;border:1px solid #ffffff40;border-radius:0;background:var(--ink);color:var(--paper);padding:9px 15px;min-height:44px;font-size:.875rem}.menu-lines{width:20px;height:14px;position:relative}.menu-lines:before,.menu-lines:after{content:'';position:absolute;left:0;width:20px;height:1px;background:currentColor;transition:transform .3s ease,top .3s ease}.menu-lines:before{top:3px}.menu-lines:after{top:11px}.menu-button[aria-expanded=true] .menu-lines:before{top:7px;transform:rotate(45deg)}.menu-button[aria-expanded=true] .menu-lines:after{top:7px;transform:rotate(-45deg)}
.hero{position:relative;background:#292320;min-height:690px;height:calc(100svh - var(--header-height));max-height:1080px;color:var(--paper);overflow:hidden}.hero-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 42%;animation:coverImage 2.2s var(--ease) both}.hero-shade{position:absolute;inset:0;background:linear-gradient(0deg,#1e1817ed 0%,#1e181787 18%,transparent 58%),linear-gradient(180deg,#1e18176b,transparent 25%)}.hero-content{position:relative;height:100%;padding:38px 5% 38px;display:flex;flex-direction:column;justify-content:end;z-index:1}.hero-topline{position:absolute;top:35px;left:5%;right:5%;display:flex;justify-content:space-between;gap:25px;font-size:.75rem;letter-spacing:.14em}.hero-intro{animation:fadeUp 1s .2s both}.hero-topline>span{font-size:.75rem;letter-spacing:.14em;animation:fadeUp 1s .3s both}.hero h1{display:flex;align-items:baseline;justify-content:space-between;gap:18px;font-size:clamp(5rem,10.5vw,11.8rem);letter-spacing:-.06em;line-height:1.03;margin:0 0 30px}.name-line{display:block;overflow:hidden;padding-bottom:.12em;margin-bottom:-.12em;min-width:0}.name-line>span{display:block;animation:nameEnter 1.8s var(--ease) .2s both}.name-line:last-child>span{animation-delay:.4s}.ampersand{font-size:.5em;font-style:italic;color:#dfb59f;line-height:1;animation:fadeUp 1.3s .7s both}.hero-bottom{display:grid;grid-template-columns:1fr 1fr auto;align-items:end;gap:25px;animation:fadeUp 1s .8s both}.hero-promise{font:italic 1.55rem/1.4 var(--serif);letter-spacing:-.01em}.hero-event{text-align:center}.hero-event>span{font-size:.75rem;letter-spacing:.12em}.hero-event p{font-size:1rem;margin-top:5px}.round-link{display:flex;flex-direction:column;align-items:center;justify-content:center;width:84px;height:84px;border:1px solid #e9d6c78c;border-radius:50%;text-align:center;font-size:.65rem;letter-spacing:.07em;line-height:1.5;transition:background .3s,transform .4s var(--ease)}.round-link:hover{background:#ffffff12;transform:translateY(-3px)}.scroll-line{height:15px;width:1px;background:var(--paper);margin-top:9px;animation:scrollNudge 1.5s 2s 3}

/* Invitation, countdown and a personal note. */
.invitation{display:grid;grid-template-columns:1.4fr 1fr;align-items:center;gap:12%;padding-top:120px;padding-bottom:100px}.invitation-copy .eyebrow{color:var(--rust);margin-bottom:25px}.invitation h2{font-size:clamp(3.5rem,5.8vw,6rem)}.invite-copy{margin-top:32px;max-width:600px;color:var(--muted);font-size:1.05rem}.full-names{font:italic 1.5rem/1.6 var(--serif);margin-top:26px}.full-names span{color:var(--rust);margin:0 .25em}.invitation-date{text-align:center;padding:32px;border-left:1px solid var(--line)}.date-seal>span{display:block;font-size:.75rem;letter-spacing:.19em}.date-seal strong{font:400 9rem/.95 var(--serif);letter-spacing:-.06em;display:block;margin:15px 0 25px;color:var(--rust)}.date-seal p{font-size:.95rem;margin-top:15px;color:var(--muted)}.invitation-date .button{margin-top:30px}.button{display:inline-flex;align-items:center;justify-content:center;gap:25px;min-height:52px;padding:14px 25px;font-size:.875rem;border:1px solid var(--ink);transition:background .3s,color .3s,transform .4s var(--ease);position:relative}.button:hover{transform:translateY(-2px)}.button-dark{background:var(--ink);color:var(--paper)}.button-dark:hover{background:var(--rust);border-color:var(--rust)}.button-light{background:var(--paper);border-color:var(--paper);color:var(--ink)}.button-light:hover{background:#e9d9c8}.button-outline{background:transparent;color:var(--ink)}.button-outline:hover{background:var(--ink);color:var(--paper)}.button>span{font-size:1.15rem;transition:transform .4s var(--ease)}.button:hover>span{transform:rotate(90deg)}.text-link{display:inline-block;font-size:.875rem;padding:4px 0;border-bottom:1px solid var(--rust);line-height:1.6;transition:color .3s}.text-link:hover{color:var(--rust)}
.countdown-section{padding:30px 6% 40px;display:grid;grid-template-columns:1fr 1.4fr;gap:20px 8%;align-items:center;margin:0 6%;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.countdown-heading .eyebrow{color:var(--rust)}.countdown-heading h2{font-size:2.8rem;margin-top:15px}.countdown{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,4.5rem),1fr));gap:25px 12px;text-align:center}.countdown>div{min-width:0}.countdown strong{display:block;font:400 4.8rem/1.05 var(--serif);letter-spacing:-.045em;font-variant-numeric:tabular-nums}.countdown span{display:block;font-size:.75rem;letter-spacing:.13em;margin-top:10px}.countdown-note{grid-column:1/-1;text-align:right;font-size:.75rem;color:var(--muted)}.countdown strong.tick{animation:fadeUp .35s var(--ease)}
.together{display:grid;grid-template-columns:1.15fr 1fr;gap:8%;align-items:center;padding-top:110px;padding-bottom:110px}.photo-wrap{position:relative}.photo-wrap img{width:100%;height:auto;border-radius:0}.photo-caption{display:block;font-size:.75rem;letter-spacing:.1em;color:var(--muted);margin-top:15px}.together-copy .eyebrow{color:var(--rust);margin-bottom:25px}.together-copy h2{font-size:clamp(3rem,4.5vw,4.7rem);margin-bottom:30px}.together-copy>p:not(.eyebrow){color:var(--muted);max-width:560px}.together-copy .signature{font:italic 1.8rem/1.4 var(--serif);color:var(--rust)!important;margin-top:25px}

/* Faith is a quiet, oversized typographic interlude. */
.scripture-section{background:var(--ink);color:var(--paper);display:grid;grid-template-columns:.8fr 1.4fr;gap:0 8%;align-items:start;padding-top:85px;padding-bottom:85px}.scripture-heading{grid-column:1;grid-row:1}.scripture-heading .eyebrow{color:#d7a38a;max-width:250px}.scripture-heading h2{font-size:4.5rem;margin-top:25px}.scripture-heading em{color:#dfb59f}.verse-buttons{grid-column:1;grid-row:2;display:flex;flex-direction:column;align-items:start;gap:5px;margin-top:28px}.verse-buttons button{font:400 .875rem var(--sans);background:transparent;color:#c3b6a8;border:0;border-bottom:1px solid #ffffff30;padding:12px 0;min-height:46px;text-align:left;transition:color .3s,border-color .3s}.verse-buttons button span{margin-left:20px}.verse-buttons button[aria-pressed=true]{color:var(--paper);border-color:#d7a38a}.verse-stage{grid-column:2;grid-row:1/3;min-width:0;border-left:1px solid #ffffff26;padding-left:50px}.verse{padding:0}.verse+.verse{margin-top:50px}.verse-stage.is-interactive{min-height:330px}.verse-stage.is-interactive .verse{margin:0}.quote-mark{font:italic 6rem/.9 var(--serif);color:#d7a38a;display:block;margin-bottom:15px}.verse blockquote{font:italic clamp(2.2rem,3.5vw,3.5rem)/1.24 var(--serif);letter-spacing:-.035em;text-wrap:balance}.verse figcaption{margin-top:32px;font-size:.875rem}.verse figcaption a{border-bottom:1px solid #d7a38a;padding-bottom:4px}.verse figcaption span{display:block;font-size:.75rem;letter-spacing:.1em;color:#c3b6a8;margin-top:12px}.verse.entering{animation:verseEnter .65s var(--ease) both}

/* Three acts, each with a clear beginning. */
.details{padding-top:90px;padding-bottom:50px}.section-heading{display:flex;align-items:start;justify-content:space-between;gap:40px;margin-bottom:40px}.section-heading>.eyebrow{color:var(--rust);padding-top:8px}.section-heading h2{font-size:3.8rem;max-width:710px}.detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px}.detail{border-top:1px solid var(--line);padding-top:24px;min-width:0}.detail-number{font-size:.75rem;letter-spacing:.12em;color:var(--rust)}.detail h3{font-size:2rem;margin:20px 0 10px}.detail p{font-size:.95rem;color:var(--muted)}.detail h3+p{font-size:.875rem}.detail .text-link{margin-top:18px}
.programme-section{background:#ebe4d9;padding-top:80px;padding-bottom:80px;margin-top:40px}.programme-heading{display:flex;justify-content:space-between;align-items:end;gap:40px;margin-bottom:45px}.programme-heading .eyebrow{color:var(--rust);margin-bottom:24px}.programme-heading h2{font-size:clamp(3.2rem,5vw,5rem)}.programme-date{text-align:right;font-size:.75rem;letter-spacing:.12em;line-height:2}.programme-date span{display:block;font:italic 1.6rem var(--serif);letter-spacing:-.02em;margin-top:5px}.programme-timeline{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0;padding:0;border-top:1px solid #b3a18c}.programme-item{padding:35px 30px 5px 0;min-width:0;position:relative}.programme-item+.programme-item{padding-left:30px;border-left:1px solid #d0c4b4}.programme-item:before{content:'';position:absolute;top:-3px;left:0;width:5px;height:5px;border-radius:50%;background:var(--rust)}.programme-item+.programme-item:before{left:-3px}.programme-step{font-size:.75rem;letter-spacing:.12em;color:var(--rust)}.programme-time>p{font:400 3.4rem/1.2 var(--serif);letter-spacing:-.05em;margin-top:20px}.time-until{display:block;font:italic 1.6rem/1.4 var(--serif);letter-spacing:-.02em;color:var(--muted);margin-top:5px}.programme-duration{display:block;font-size:.8rem;color:var(--muted);margin-top:12px}.programme-content{margin-top:35px;min-width:0}.programme-content h3{font-size:2rem;margin-bottom:18px}.programme-content>p{font-size:.95rem;color:var(--muted)}.programme-parallel{display:grid;grid-template-columns:minmax(0,1fr);gap:20px}.programme-parallel span{font-size:.75rem;letter-spacing:.09em;color:var(--rust)}.programme-parallel p{font-size:.95rem;line-height:1.7;color:var(--muted);margin-top:8px}.programme-note{font-size:.8rem;color:var(--muted);margin-top:35px;border-top:1px solid #d0c4b4;padding-top:20px}

/* The dress code as a colour and fabric moodboard. */
.dress-code-section{padding-top:100px;padding-bottom:100px}.attire-heading .eyebrow{color:var(--rust);margin-bottom:23px}.attire-heading h2{font-size:clamp(3.5rem,5.8vw,6rem);margin-bottom:45px}.attire-guidance{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:60px;margin-bottom:50px}.attire-label{color:var(--rust)}.attire-guidance p{font-size:1rem;color:var(--muted);margin-top:14px;max-width:570px}.palette-panel h3{font-size:1.75rem}.attire-palette{padding:0;list-style:none;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:15px;margin:25px 0}.attire-palette li{display:flex;flex-direction:column;gap:12px;min-width:0;font-size:.875rem;overflow-wrap:anywhere}.attire-palette li:nth-child(even){padding-top:25px}.colour-swatch{display:block;width:100%;height:180px;transition:transform .6s var(--ease)}.attire-palette li:hover .colour-swatch{transform:translateY(-5px)}.swatch-burgundy{background:#702738}.swatch-orange{background:#b85d32}.swatch-cream{background:#eadcc2;border:1px solid #d8c8ac}.swatch-brown{background:#72513d}.swatch-sage{background:#99a489}.black-option{font-size:.875rem;color:var(--muted);display:flex;align-items:center;gap:10px;margin-top:20px}.black-option>span{width:16px;height:16px;background:#242323;border-radius:50%;flex-shrink:0}.attire-examples-heading{display:flex;justify-content:space-between;align-items:baseline;gap:25px;margin:65px 0 30px}.attire-examples-heading h3{font-size:2.4rem}.attire-examples-heading p{font-size:.875rem;color:var(--muted)}.attire-examples{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:35px}.attire-example img{width:100%;aspect-ratio:3/2;height:auto;object-fit:contain}.attire-example figcaption{padding:25px 0 0;border-bottom:1px solid var(--line);padding-bottom:25px}.attire-example h4{font-size:2rem;margin:12px 0 16px}.attire-example ul{padding-left:19px;margin:0;color:var(--muted);font-size:.95rem}.attire-example li+li{margin-top:4px}.attire-closing{font:italic 1.9rem/1.45 var(--serif);text-align:center;margin-top:45px;color:var(--rust)}

/* A bold destination, then a real map. */
.venue-section{background:var(--burgundy);color:var(--paper);padding:80px 6%}.venue-inner{max-width:1320px;margin:auto;display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:10%}.venue-title .eyebrow{color:#e7b09c}.venue-title h2{font-size:clamp(5rem,8.5vw,9rem);margin:25px 0 30px;line-height:.98}.venue-title em{color:#e7b09c}.venue-title>p:last-child{font-size:1rem;color:#dec7bf}.venue-card{padding-left:35px;border-left:1px solid #e7b09c60}.venue-card>.eyebrow{color:#e7b09c}.venue-card h3{font-size:2.6rem;margin:22px 0}.venue-card p{color:#ead9d0;font-size:1rem}.venue-card .button{margin-top:28px}.map-note{display:block;font-size:.8rem;color:#dec7bf;margin-top:20px}
.journey-heading{display:grid;grid-template-columns:1.2fr 1fr;gap:10%;align-items:end;margin-bottom:55px}.journey-heading .eyebrow{color:var(--rust);margin-bottom:24px}.journey-heading h2{font-size:clamp(3.3rem,5.6vw,5.7rem)}.journey-intro p{color:var(--muted);max-width:520px}.journey-intro .text-link{margin-top:20px}.journey-overview{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px;position:relative}.journey-overview:before{content:'';position:absolute;top:26px;left:16.666%;right:16.666%;height:1px;background:var(--line)}.journey-overview li{text-align:center;min-width:0;position:relative}.journey-node{display:flex;align-items:center;justify-content:center;margin:0 auto 20px;width:54px;height:54px;border-radius:50%;background:var(--paper);border:1px solid var(--rust);font:italic 1.25rem var(--serif);position:relative;z-index:1}.journey-overview h3{font-size:1.7rem}.journey-overview p{font-size:.875rem;color:var(--muted);margin-top:9px}.journey-overview-note{font-size:.75rem;color:var(--muted);text-align:center;margin:25px 0 35px}.journey-map-block{background:#ebe4d9}.journey-map-heading{padding:25px 28px;display:flex;justify-content:space-between;align-items:center;gap:25px}.journey-map-heading .eyebrow{color:var(--rust)}.journey-map-heading p{font:400 1.8rem var(--serif);letter-spacing:-.025em;margin-top:10px}.journey-map-controls{display:flex;gap:7px;flex-wrap:wrap}.journey-map-controls button{font-size:.875rem;background:var(--paper);border:1px solid var(--line);padding:12px 18px;min-height:46px;color:var(--ink);transition:background .3s,color .3s}.journey-map-controls button[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}#journey-map{display:block;width:100%;height:500px;border:0;background:#dfd7ca}.journey-map-footer{display:flex;flex-wrap:wrap;align-items:center;gap:18px 25px;padding:25px 28px}.journey-map-footer p{flex-basis:100%;max-width:720px;font-size:.95rem;color:var(--muted)}.journey-arrival{margin-top:30px}.journey-arrival .eyebrow{color:var(--rust)}.journey-arrival p:nth-child(2){margin-top:12px}.journey-arrival p:nth-child(2)>a{display:inline-block;border-bottom:1px solid var(--rust);padding:3px 0}.journey-source{font-size:.75rem;color:var(--muted);max-width:760px}.journey-source a{border-bottom:1px solid var(--line)}

/* Guest notes and the last pages of the invitation. */
.questions{display:grid;grid-template-columns:1fr 1.35fr;gap:12%;border-top:1px solid var(--line);padding-top:80px;padding-bottom:80px}.question-heading .eyebrow{color:var(--rust);margin-bottom:25px}.question-heading h2{font-size:4.2rem}.question-heading>p:last-child{font-size:1rem;color:var(--muted);max-width:300px;margin-top:25px}.faq-list{counter-reset:faq;border-top:1px solid var(--line);min-width:0}.faq-list details{border-bottom:1px solid var(--line)}summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:20px;padding:26px 0;font-size:1rem;line-height:1.5}summary::-webkit-details-marker{display:none}summary:before{counter-increment:faq;content:'0' counter(faq);font-size:.75rem;color:var(--rust)}.plus{width:16px;height:16px;flex-shrink:0;position:relative;margin-left:auto}.plus:before,.plus:after{content:'';height:1px;width:14px;position:absolute;left:1px;top:7px;background:var(--ink);transition:transform .3s}.plus:after{transform:rotate(90deg)}details[open] .plus:after{transform:rotate(0)}details p{padding:0 22px 25px 35px;color:var(--muted);font-size:.95rem}details[open] p{animation:fadeUp .3s var(--ease) both}.gift-note{background:var(--ink);color:var(--paper);text-align:center;padding-top:75px;padding-bottom:75px}.gift-note-inner{max-width:850px;margin:auto}.gift-note .eyebrow{color:#d7a38a;margin-bottom:25px}.gift-note h2{font-size:4.5rem;margin-bottom:30px}.gift-note em{color:#dfb59f}.gift-note-inner>p:not(.eyebrow):not(.gift-thanks){color:#cfc2b5;max-width:650px;margin:auto}.gift-thanks{font:italic 1.6rem/1.5 var(--serif);color:#dfb59f;margin-top:25px}.party-teaser{display:grid;grid-template-columns:1.15fr 1fr;gap:8%;align-items:center}.teaser-photo img{width:100%;height:auto}.teaser-copy .eyebrow{color:var(--rust);margin-bottom:25px}.party-teaser h2{font-size:4.2rem}.teaser-copy>p:not(.eyebrow){color:var(--muted);margin-top:25px}.teaser-copy .button{margin-top:25px}.closing{text-align:center;padding:65px 6% 75px;border-top:1px solid var(--line)}.closing .eyebrow{color:var(--rust)}.closing h2{font-size:clamp(4.5rem,8.5vw,9rem);line-height:1.08;margin:30px 0 25px;letter-spacing:-.06em}.closing>p:not(.eyebrow){font-size:1rem;color:var(--muted)}.closing .button{margin-top:30px}.closing-monogram{font:italic 2.5rem var(--serif);margin-top:40px;color:var(--rust)}footer{background:var(--ink);color:#d7c9bb;padding:27px 4%;display:flex;justify-content:space-between;align-items:center;gap:20px}footer p{font:italic 1.4rem var(--serif)}footer span{font-size:.75rem;letter-spacing:.08em}footer a{font-size:.875rem;border-bottom:1px solid #d7a38a}

/* The wedding party becomes a gallery, rather than a stack of cards. */
.party-intro{background:var(--ink);color:var(--paper);display:grid;grid-template-columns:1.2fr 1fr;gap:0 10%;padding-top:75px;padding-bottom:70px}.party-intro>.eyebrow{grid-column:1/-1;color:#d7a38a;margin-bottom:30px}.party-intro h1{font-size:clamp(4rem,7vw,7rem)}.party-intro h1 em{color:#dfb59f}.party-intro-copy{align-self:center;color:#cfc2b5;font-size:1.1rem;max-width:420px}.party-jump{grid-column:1/-1;display:flex;gap:20px 35px;flex-wrap:wrap;margin-top:45px;padding-top:24px;border-top:1px solid #ffffff24}.party-jump a{font-size:.875rem;min-height:42px;padding:6px 0;border-bottom:1px solid #d7a38a60}.party-section-heading{display:flex;align-items:start;justify-content:space-between;gap:35px;margin-bottom:45px}.party-section-heading .eyebrow{color:var(--rust);padding-top:8px}.party-section-heading h2{font-size:4rem}.couple-section{padding-top:90px;padding-bottom:90px}.couple-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:920px;margin:auto;gap:65px}.couple-card:nth-child(2){padding-top:55px}.person-card{min-width:0}.person-photo{width:100%;aspect-ratio:4/5;overflow:hidden;position:relative;background:#e4dbce}.person-photo img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease)}.person-card:hover .person-photo img{transform:scale(1.018)}.couple-card .person-photo{aspect-ratio:auto}.groom-photo img,.bride-photo img{height:auto;object-fit:contain}.couple-card:hover .person-photo img{transform:none}.portrait-glenwill img{object-position:50% 18%}.portrait-charles img,.portrait-jason img{object-position:50% 20%}.portrait-estee img{object-position:55% 50%}.portrait-nicole img{object-position:50% 12%}.portrait-chiara img{object-position:50% 20%}.portrait-cadence img{object-position:50% 25%}.portrait-ellenique img{object-position:50% 35%}.portrait-ipondoka img{object-position:50% 45%}.portrait-llewellyn img{object-position:50% 20%}.photo-role{position:absolute;left:15px;bottom:15px;background:var(--paper);color:var(--ink);font-size:.75rem;letter-spacing:.08em;padding:7px 12px}.person-caption{padding-top:21px}.person-role{color:var(--rust);font-size:.75rem;letter-spacing:.1em}.person-caption h3{font-size:1.6rem;margin-top:10px;letter-spacing:-.035em}.couple-card .person-caption h3{font-size:2.4rem}.attendants-section{padding-top:70px;padding-bottom:70px;background:#ebe4d9}.bridal-section{background:var(--paper)}.attendants-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:25px}.attendants-grid.attendants-pair{grid-template-columns:repeat(2,minmax(0,300px));justify-content:center;gap:35px}.portrait-pending{aspect-ratio:4/5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:25px;background:#e0d6c7;border:1px solid #d6c8b5;text-align:center;padding:15px}.pending-initial{font:italic 3.5rem var(--serif);color:#9b7a62;letter-spacing:-.05em}.portrait-pending>span:last-child{font-size:.75rem;letter-spacing:.09em;color:var(--muted)}.party-update-note{font-size:.875rem;color:var(--muted);margin-top:30px}.party-ending{text-align:center;padding:70px 6%;background:var(--ink);color:var(--paper)}.party-ending>.eyebrow{color:#d7a38a}.party-ending h2{font-size:4.5rem;margin:25px 0 30px}.party-ending em{color:#dfb59f}.party-ending .button{border-color:#d7a38a;color:var(--paper)}

/* Motion has a beginning and an end, and never gates the invitation. */
.js-motion .reveal{opacity:0;transform:translateY(28px);transition:opacity .8s ease,transform 1s var(--ease);transition-delay:var(--reveal-delay,0ms)}.js-motion .reveal.visible{opacity:1;transform:none}.reveal:focus-within{opacity:1!important;transform:none!important}.js-motion .person-card.reveal{transform:translateY(35px)}.js-motion .person-card.reveal.visible{transform:none}.palette-panel.visible .colour-swatch{animation:swatchEnter .85s var(--ease) both}.palette-panel.visible li:nth-child(2) .colour-swatch{animation-delay:.1s}.palette-panel.visible li:nth-child(3) .colour-swatch{animation-delay:.2s}.palette-panel.visible li:nth-child(4) .colour-swatch{animation-delay:.3s}.palette-panel.visible li:nth-child(5) .colour-swatch{animation-delay:.4s}.programme-item.visible:before{animation:pointEnter .7s var(--ease) .2s both}.journey-overview.visible:after{content:'';position:absolute;width:5px;height:5px;background:var(--rust);border-radius:50%;top:24px;left:16.666%;animation:routeTravel 3s .4s ease-in-out 1 both;pointer-events:none}.closing-monogram.visible{animation:sealEnter 1s var(--ease) both}
@keyframes nameEnter{from{transform:translateY(115%);opacity:.3}to{transform:none;opacity:1}}@keyframes coverImage{from{transform:scale(1.07);opacity:.6}to{transform:scale(1);opacity:1}}@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes verseEnter{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:none}}@keyframes swatchEnter{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}@keyframes pointEnter{from{transform:scale(0)}to{transform:scale(1)}}@keyframes sealEnter{from{opacity:0;transform:scale(.9) rotate(-5deg)}to{opacity:1;transform:none}}@keyframes routeTravel{0%{left:16.666%;opacity:0}10%{opacity:1}90%{opacity:1}100%{left:83.333%;opacity:0}}@keyframes scrollNudge{50%{transform:translateY(4px);opacity:.5}}

@media(max-width:1200px) and (min-width:981px){.header{gap:16px;padding:0 3%}.header nav{gap:13px}.header nav a{font-size:.8rem}.hero h1{font-size:10.5vw}.attendants-grid{gap:18px}.person-caption h3{font-size:1.4rem}}
@media(max-width:980px){:root{--header-height:72px}.header{height:auto;min-height:var(--header-height);flex-wrap:wrap;padding:12px 5%;gap:18px}.header-date{margin-left:auto;order:1}.menu-button{order:2}.header nav{order:3;display:flex;flex-wrap:wrap;justify-content:center;width:100%;gap:10px 20px}.header nav a{white-space:normal;font-size:.875rem;min-height:44px}.js-menu .header{height:var(--header-height);min-height:0;flex-wrap:nowrap}.js-menu .menu-button{display:inline-flex}.js-menu .header nav{display:none;position:absolute;left:16px;right:16px;top:calc(var(--header-height) + 8px);width:auto;padding:16px 22px;background:#f7f3ec;color:var(--ink);border:1px solid var(--line);box-shadow:0 15px 40px #00000020}.js-menu .header nav.is-open{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px 20px;animation:fadeUp .3s var(--ease) both}.js-menu .header nav a{color:var(--ink);font-size:.95rem;min-height:46px}.hero{height:calc(100svh - var(--header-height));min-height:680px}.hero h1{font-size:10vw;gap:12px}.hero-topline{top:30px}.hero-bottom{grid-template-columns:1fr 1fr auto}.hero-promise{font-size:1.3rem}.hero-event p{font-size:.875rem}.hero-event>span{font-size:.65rem}.hero-image{object-position:54% center}.section{padding-top:80px;padding-bottom:80px}.invitation{gap:8%}.invitation-date{padding:20px}.date-seal strong{font-size:7rem}.invitation h2{font-size:4rem}.countdown-section{grid-template-columns:1fr;gap:25px;text-align:center;padding-top:35px;padding-bottom:35px}.countdown{width:100%;max-width:600px;margin:auto}.countdown-note{text-align:center}.together{gap:6%}.together-copy h2{font-size:3.3rem}.scripture-section{grid-template-columns:1fr;gap:30px}.scripture-heading{grid-column:1;grid-row:1}.scripture-heading h2{font-size:3.8rem}.verse-buttons{grid-column:1;grid-row:3;flex-direction:row;flex-wrap:wrap;gap:15px;margin:0}.verse-stage{grid-column:1;grid-row:2;padding:0;border:0}.verse-stage.is-interactive{min-height:255px}.verse blockquote{font-size:3rem}.detail-grid{gap:25px}.section-heading h2{font-size:3.2rem}.programme-date{font-size:.75rem}.programme-item{padding-right:20px}.programme-item+.programme-item{padding-left:20px}.programme-time>p{font-size:2.7rem}.programme-content h3{font-size:1.8rem}.attire-guidance{gap:35px}.colour-swatch{height:140px}.venue-inner{gap:7%}.venue-title h2{font-size:6rem}.venue-card{padding-left:28px}.venue-card h3{font-size:2.3rem}.journey-heading{gap:6%}.journey-map-heading{align-items:start}.journey-map-controls{max-width:290px}.questions{gap:7%}.question-heading h2{font-size:3.6rem}.party-teaser{gap:6%}.party-teaser h2{font-size:3.5rem}.party-intro{gap:0 6%}.party-intro h1{font-size:5rem}.party-intro-copy{font-size:1rem}.party-section-heading h2{font-size:3.3rem}.attendants-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:35px 25px}.couple-grid{gap:40px}.couple-card .person-caption h3{font-size:2rem}.person-caption h3{font-size:1.65rem}}
@media(max-width:700px){.together{grid-template-columns:1fr;gap:40px}.together-copy{max-width:580px}.programme-heading{display:block}.programme-date{text-align:left;margin-top:25px}.programme-timeline{grid-template-columns:minmax(0,1fr);border-top:0;gap:0}.programme-item,.programme-item+.programme-item{display:grid;grid-template-columns:165px minmax(0,1fr);gap:25px;padding:30px 0;border:0;border-top:1px solid #c7b8a5}.programme-item:before,.programme-item+.programme-item:before{left:0}.programme-content{margin:0}.programme-time>p{font-size:2.5rem}.programme-content h3{font-size:2rem}.programme-duration{font-size:.8rem}.attire-guidance{grid-template-columns:1fr;gap:28px}.attire-examples{gap:25px}.attire-examples-heading{display:block}.attire-examples-heading p{margin-top:10px}.attire-example h4{font-size:1.8rem}.venue-inner{grid-template-columns:1fr;gap:35px}.venue-card{padding-left:0;border-left:0;border-top:1px solid #e7b09c60;padding-top:25px}.journey-heading{grid-template-columns:1fr;gap:30px}.questions{grid-template-columns:1fr;gap:35px}.question-heading>p:last-child{max-width:500px}.party-teaser{grid-template-columns:1fr;gap:40px}.party-intro{grid-template-columns:1fr;gap:25px}.party-intro>.eyebrow{margin-bottom:0}.party-intro-copy{grid-column:1;margin-top:0}.party-jump{margin-top:15px;gap:10px 25px}.party-section-heading{display:block}.party-section-heading .eyebrow{margin-bottom:20px}.attendants-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:30px 20px}.couple-grid{gap:25px}.couple-card:nth-child(2){padding-top:25px}.person-caption h3{font-size:1.6rem}.couple-card .person-caption h3{font-size:1.8rem}}
@media(max-width:600px){.header{padding-left:6%;padding-right:6%;gap:15px}.header-date{display:none}.menu-button{margin-left:auto}.hero{height:calc(100svh - var(--header-height));min-height:680px;max-height:980px}.hero-content{padding:30px 6% 28px}.hero-image{object-position:57% center}.hero-shade{background:linear-gradient(0deg,#1e1817f2 0%,#1e181777 30%,transparent 63%),linear-gradient(180deg,#1e181780,transparent 25%)}.hero-topline{top:26px;left:6%;right:6%}.hero-topline>span{display:none}.hero-intro{font-size:.75rem;letter-spacing:.065em;max-width:280px}.hero h1{display:block;font-size:clamp(3.4rem,16vw,5.7rem);line-height:1.02;margin-bottom:28px}.hero .name-line:first-child{display:inline-block;max-width:100%}.hero .ampersand{display:inline-block;vertical-align:baseline;margin-left:.12em;font-size:.55em}.hero .name-line:last-child{display:block}.hero-bottom{grid-template-columns:minmax(0,1fr) auto;gap:22px}.hero-promise{display:none}.hero-event{text-align:left}.hero-event>span{font-size:.75rem;letter-spacing:.05em}.hero-event p{font-size:.95rem;margin-top:5px}.round-link{width:75px;height:75px;font-size:.65rem}.section{padding:65px 7%}.invitation{grid-template-columns:1fr;gap:40px}.invitation h2{font-size:3.5rem}.invite-copy{font-size:1rem;margin-top:25px}.full-names{font-size:1.35rem}.invitation-date{padding:30px 0 0;border-left:0;border-top:1px solid var(--line)}.date-seal strong{font-size:7.5rem;margin:15px 0 20px}.date-seal p{font-size:.95rem}.countdown-section{margin:0 7%;padding:30px 0;gap:25px}.countdown-heading h2{font-size:2.4rem}.countdown strong{font-size:3.2rem}.countdown span{font-size:.75rem;letter-spacing:.035em}.countdown-note{font-size:.75rem}.together-copy h2{font-size:3.1rem}.photo-caption{font-size:.75rem;letter-spacing:.035em}.scripture-heading h2{font-size:3.5rem}.verse blockquote{font-size:2.4rem}.verse-stage.is-interactive{min-height:350px}.verse-buttons{display:grid;grid-template-columns:1fr;gap:3px}.verse-buttons button{font-size:.875rem;padding:11px 0;width:100%}.quote-mark{font-size:5rem}.verse figcaption span{font-size:.75rem;letter-spacing:.07em}.section-heading{display:block;margin-bottom:35px}.section-heading>.eyebrow{margin-bottom:23px}.section-heading h2{font-size:3.1rem}.detail-grid{grid-template-columns:1fr;gap:28px}.detail{padding-top:23px}.detail h3{font-size:2rem;margin-top:15px}.detail p{font-size:.95rem}.details{padding-bottom:35px}.programme-section{margin-top:25px}.programme-heading h2{font-size:3.1rem}.programme-item,.programme-item+.programme-item{grid-template-columns:minmax(0,1fr);gap:25px;padding:28px 0}.programme-time>p{display:flex;align-items:baseline;flex-wrap:wrap;gap:12px;font-size:2.6rem}.time-until{display:inline;font-size:1.5rem;margin:0}.programme-duration{font-size:.875rem;margin-top:8px}.programme-content h3{font-size:2.1rem}.programme-parallel{gap:20px}.attire-heading h2{font-size:3.5rem;margin-bottom:30px}.attire-guidance{margin-bottom:35px}.attire-palette{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px 12px}.attire-palette li:nth-child(even){padding-top:0}.colour-swatch{height:125px}.attire-palette li{font-size:.8rem}.palette-panel h3{font-size:1.8rem}.attire-examples{grid-template-columns:1fr;gap:30px}.attire-examples-heading{margin-top:45px}.attire-examples-heading h3{font-size:2.2rem}.attire-example h4{font-size:2rem}.attire-closing{font-size:1.8rem}.attire-closing br{display:none}.venue-section{padding:60px 7%}.venue-title h2{font-size:5.5rem}.venue-card h3{font-size:2.4rem}.journey-heading h2{font-size:3.3rem}.journey-overview{grid-template-columns:1fr;gap:25px}.journey-overview:before{left:26px;top:26px;bottom:40px;width:1px;height:auto;right:auto}.journey-overview li{text-align:left;padding-left:75px;min-height:85px}.journey-node{position:absolute;left:0;top:0}.journey-overview h3{font-size:1.8rem}.journey-overview p{font-size:.875rem}.journey-overview-note{text-align:left;font-size:.75rem;margin:15px 0 30px}.journey-overview.visible:after{display:none}.journey-map-heading{flex-direction:column;padding:22px;gap:20px}.journey-map-controls{width:100%;max-width:none;gap:7px}.journey-map-controls button{flex:1;padding:12px 8px;font-size:.8rem}.journey-map-heading p{font-size:1.7rem}#journey-map{height:370px}.journey-map-footer{padding:22px;gap:20px}.journey-map-footer .button{width:100%;font-size:.8rem;padding:13px}.journey-arrival p:nth-child(2)>a{margin-top:8px}.question-heading h2{font-size:3.3rem}summary{font-size:.95rem;padding:23px 0;gap:15px}details p{padding-left:0;font-size:1rem}.gift-note h2{font-size:3.4rem}.gift-thanks{font-size:1.6rem}.party-teaser h2{font-size:3.3rem}.closing{padding:60px 7%}.closing h2{font-size:4rem;margin-top:25px}.closing .eyebrow{font-size:.75rem;letter-spacing:.055em}.button{font-size:.875rem;min-height:52px;padding:13px 22px}footer{flex-direction:column;text-align:center;gap:17px;padding:30px 7%}footer span{font-size:.75rem;letter-spacing:.035em}.party-intro{padding-top:55px;padding-bottom:50px}.party-intro h1{font-size:3.9rem}.party-intro-copy{font-size:1rem}.party-section-heading h2{font-size:3rem}.couple-grid{gap:20px}.couple-card .person-caption h3{font-size:1.5rem}.person-caption{padding-top:17px}.person-role{font-size:.75rem;letter-spacing:.045em}.person-caption h3{font-size:1.35rem;line-height:1.25;margin-top:8px}.photo-role{font-size:.65rem;letter-spacing:.02em;padding:5px 8px;left:8px;bottom:8px}.attendants-grid{gap:28px 18px}.attendants-grid.attendants-pair{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.portrait-pending{gap:18px;padding:10px}.pending-initial{font-size:2.6rem}.portrait-pending>span:last-child{font-size:.65rem;letter-spacing:.02em}.party-update-note{font-size:.8rem}.party-ending h2{font-size:3.2rem}}
.round-link{font-size:.75rem}.person-role{font-size:.875rem}.portrait-pending>span:last-child{font-size:.75rem}
@media(max-width:600px){.hero-image{object-position:42% center}.photo-role{font-size:.75rem}.round-link{font-size:.75rem}.person-role{font-size:.875rem}.portrait-pending>span:last-child{font-size:.75rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js-motion .reveal{opacity:1;transform:none}.person-card:hover .person-photo img,.button:hover,.round-link:hover,.attire-palette li:hover .colour-swatch{transform:none}.journey-overview.visible:after{display:none}}

/* Local wedding soundtrack: compact controls with guest preferences. */
.song-player{position:fixed;bottom:max(18px,env(safe-area-inset-bottom));left:20px;z-index:25;display:flex;align-items:stretch;background:#262320;color:#f7f3ec;border:1px solid #a28a73;border-radius:30px;box-shadow:0 6px 25px #0002;max-width:calc(100vw - 40px)}
.song-player button{background:transparent;color:inherit;border:0;min-height:46px;cursor:pointer;font:400 .8rem var(--sans)}.song-toggle{display:flex;align-items:center;gap:10px;padding:10px 16px}.song-symbol{font-size:1.4rem;color:#dfb59f}.song-settings{width:46px;border-left:1px solid #ffffff30!important;border-radius:0 30px 30px 0}.song-player button:focus-visible{outline:2px solid #dfb59f;outline-offset:3px}.song-panel{position:absolute;bottom:58px;left:0;background:#f7f3ec;color:#262320;border:1px solid #d8cbbc;padding:22px;width:280px;max-width:calc(100vw - 40px);box-shadow:0 10px 35px #0002}.song-panel[hidden]{display:none}.song-title{font:2rem var(--serif);margin:12px 0 20px}.song-title span{display:block;font:.85rem var(--sans);margin-top:5px;color:#6b6159}.song-panel label{font-size:.8rem}.song-panel input{display:block;width:100%;min-height:40px;accent-color:#a45035}.song-status{font-size:.8rem;line-height:1.5;margin-top:8px}.song-status:empty{display:none}.song-player.is-playing .song-symbol{animation:songPulse 2s ease-in-out infinite}body:has(.song-player) footer{padding-bottom:90px}@keyframes songPulse{50%{opacity:.45}}@media(prefers-reduced-motion:reduce){.song-player.is-playing .song-symbol{animation:none}}
