:root {
  --ink: #2b2924;
  --ink-soft: #5e5a52;
  --muted: #8a8479;
  --paper: #f7f5f0;
  --paper-deep: #ece9e0;
  --white: #fff;
  --line: #d7d2c8;
  --sage: #aab0a0;
  --sage-deep: #768071;
  --blush: #c99386;
  --serif: Iowan Old Style, Baskerville, Georgia, serif;
  --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --measure: 76rem;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; overflow-x: clip; }
body { margin: 0; background: var(--paper); color: var(--ink); font-family: var(--sans); font-size: 16px; line-height: 1.6; overflow-x: clip; }
body.is-loading { overflow: hidden; }
img, video { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; }
button, input, select, textarea { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
h1, h2, h3, p { margin: 0; }
h1, h2, h3, .brand-name, .invitation-card__date { font-family: var(--serif); font-weight: 400; }
h1 em, h2 em { color: var(--sage-deep); font-style: italic; }
h1 { font-size: clamp(3.25rem, 7vw, 7.5rem); line-height: .88; letter-spacing: -.055em; }
h2 { font-size: clamp(2.2rem, 4.6vw, 4.2rem); line-height: .98; letter-spacing: -.04em; }
h3 { font-size: clamp(1.45rem, 2.3vw, 2.1rem); line-height: 1.05; }
p { max-width: 62ch; }
:focus-visible { outline: 2px solid var(--blush); outline-offset: 4px; }
.skip-link { position: fixed; top: .5rem; left: .5rem; z-index: 1000; padding: .7rem 1rem; background: var(--ink); color: var(--white); transform: translateY(-180%); }
.skip-link:focus { transform: translateY(0); }
.kicker { color: var(--sage-deep); font-size: .65rem; font-weight: 700; letter-spacing: .2em; line-height: 1.3; text-transform: uppercase; }
.text-link { display: inline-flex; gap: .6rem; align-items: center; border-bottom: 1px solid currentColor; color: var(--ink); font-size: .7rem; font-weight: 700; letter-spacing: .16em; padding-bottom: .4rem; text-decoration: none; text-transform: uppercase; transition: gap .25s ease, color .25s ease; }
.text-link:hover { color: var(--sage-deep); gap: .9rem; }
.text-link--light { border-color: rgba(255,255,255,.7); color: var(--white); }
.button { display: inline-flex; align-items: center; justify-content: center; gap: .8rem; min-height: 3.1rem; padding: .75rem 1.4rem; border: 1px solid var(--ink); background: var(--ink); color: var(--white); font-size: .68rem; font-weight: 700; letter-spacing: .14em; line-height: 1.2; text-decoration: none; text-transform: uppercase; transition: background .25s ease, color .25s ease, border-color .25s ease, transform .25s ease; }
.button:hover { background: var(--sage-deep); border-color: var(--sage-deep); transform: translateY(-2px); }
.button--light { border-color: var(--white); background: var(--white); color: var(--ink); }
.button--light:hover { background: transparent; color: var(--white); }
.loader { position: fixed; inset: 0; z-index: 999; display: grid; place-items: center; align-content: center; gap: 1rem; background: var(--paper); opacity: 1; transition: opacity .45s ease, visibility .45s ease; }
.loader.is-done { opacity: 0; pointer-events: none; visibility: hidden; }
.loader p { color: var(--sage-deep); font-family: var(--serif); font-size: 1.1rem; letter-spacing: .15em; text-transform: uppercase; }
.loader-mark, .brand-stamp, .invitation-card__mark { display: grid; place-items: center; border: 1px solid currentColor; color: var(--sage-deep); transform: rotate(45deg); }
.loader-mark { width: 4rem; height: 4rem; animation: mark-pulse 1.5s ease-in-out infinite; }
.loader-mark span, .brand-stamp span, .invitation-card__mark span { transform: rotate(-45deg); font-family: var(--serif); font-size: 1.4rem; }
@keyframes mark-pulse { 50% { transform: rotate(45deg) scale(1.08); } }
.site-header { position: relative; z-index: 20; background: var(--white); border-bottom: 1px solid var(--line); }
.site-header__top { display: flex; align-items: center; justify-content: center; min-height: 6.4rem; padding: 1rem 2rem; }
.brand { display: inline-flex; align-items: center; gap: .75rem; text-decoration: none; }
.brand-name { font-size: 1.65rem; letter-spacing: .02em; }
.brand-mark { display: grid; place-items: center; width: 3rem; height: 3rem; border: 1px solid var(--sage-deep); color: var(--sage-deep); transform: rotate(45deg); }
.brand-mark span { transform: rotate(-45deg); font-family: var(--serif); font-size: 1.15rem; }
.brand-mark--small { width: 2rem; height: 2rem; }
.brand-mark--small span { font-size: .8rem; }
.menu-toggle { position: absolute; right: 1.3rem; display: none; border: 0; background: transparent; color: var(--ink); cursor: pointer; font-size: .65rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; }
.menu-toggle span { color: var(--sage-deep); font-size: 1rem; margin-left: .3rem; }
.primary-nav, .repeat-nav { display: flex; align-items: center; justify-content: center; gap: clamp(1rem, 3vw, 2.8rem); min-height: 3rem; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--white); }
.primary-nav a, .repeat-nav a { color: var(--ink-soft); font-size: .62rem; font-weight: 700; letter-spacing: .1em; text-decoration: none; text-transform: uppercase; transition: color .2s ease; }
.primary-nav a:hover, .primary-nav a[aria-current="page"], .repeat-nav a:hover { color: var(--sage-deep); }
.primary-nav .nav-rsvp { color: var(--ink); }
.primary-nav .nav-rsvp span { color: var(--blush); }
.home-page .site-header { position:absolute; top:0; right:0; left:0; background:linear-gradient(180deg,rgba(23,28,24,.6),transparent); border-bottom-color:rgba(255,255,255,.2); }
.home-page .site-header .brand-name, .home-page .site-header .primary-nav a, .home-page .site-header .menu-toggle { color:#fff; }
.home-page .site-header .brand-mark { color:#fff; border-color:rgba(255,255,255,.8); }
.home-page .site-header .primary-nav { border-color:rgba(255,255,255,.2); background:transparent; }
.home-page .site-header .primary-nav .nav-rsvp { color:#fff; }
.home-page .site-header .primary-nav.is-open { background:#171c18; border-color:rgba(255,255,255,.22); }
.home-page .site-header .primary-nav.is-open a { color:#fff; }
.repeat-nav { position: relative; z-index: 10; min-height: 2.8rem; gap: clamp(1rem, 4vw, 3.5rem); }
.hero, .page-hero { position: relative; overflow: hidden; color: var(--white); }
.hero--home { min-height: min(76rem, calc(100vh - 9.4rem)); }
.hero__image, .page-hero > img { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; object-fit: cover; }
.hero__image { object-position: center; }
.hero__video { position:absolute; inset:0; z-index:0; width:100%; height:100%; object-fit:cover; object-position:center; opacity:.92; }
.hero__video + .hero__image { opacity:0; pointer-events:none; }
.hero__veil, .page-hero__veil { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(23,28,24,.66), rgba(23,28,24,.16) 68%, rgba(23,28,24,.35)); }
.hero__content, .page-hero__content { position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: center; min-height: inherit; max-width: var(--measure); margin: 0 auto; padding: 7rem 6vw 10rem; }
.hero__content { align-items: flex-start; }
.hero__kicker { color: #d9ddd2; }
.hero h1, .page-hero h1 { color: var(--white); max-width: 8ch; margin-top: 1.4rem; }
.hero__intro, .page-hero__content > p:last-child { max-width: 34rem; margin-top: 1.8rem; color: rgba(255,255,255,.9); font-family: var(--serif); font-size: clamp(1.1rem, 2vw, 1.45rem); line-height: 1.3; }
.hero__signature { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: .5rem .8rem; max-width: 36rem; margin-top: 1.25rem; color: rgba(255,255,255,.78); font-size: .68rem; font-weight: 700; letter-spacing: .12em; line-height: 1.45; text-transform: uppercase; }
.hero__signature span { color: #f2c5b7; }
.hero__couple { margin-top:1.2rem; color:rgba(255,255,255,.96); font:400 clamp(1.4rem,3vw,2.7rem)/1 var(--serif); letter-spacing:.08em; text-transform:uppercase; }
.hero__couple span { color:#f2c5b7; font-style:italic; }
.hero__date { margin-top:1.05rem; color:#f2c5b7; font-size:.68rem; font-weight:800; letter-spacing:.18em; text-transform:uppercase; }
.hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 1.4rem; margin-top: 2.4rem; }
.hero__caption { position: absolute; right: 1.5rem; bottom: 1.2rem; z-index: 1; color: rgba(255,255,255,.75); font-size: .59rem; letter-spacing: .08em; text-transform: uppercase; }
.page-hero { min-height: 36rem; }
.page-hero--compact { min-height: 31rem; }
.page-hero__content { padding-top: 6rem; padding-bottom: 6rem; }
.page-hero h1 { font-size: clamp(3rem, 7vw, 6.4rem); }
.intro-section { display: flex; flex-direction: column; align-items: center; max-width: 65rem; margin: 0 auto; padding: 8rem 2rem 7rem; text-align: center; }
.intro-section--short { padding-bottom: 5rem; }
.brand-stamp { width: 3.8rem; height: 3.8rem; margin-bottom: 2.3rem; }
.intro-section h2 { max-width: 17ch; margin-top: 1.2rem; }
.intro-section__lead { max-width: 48ch; margin: 1.7rem auto 2rem; color: var(--ink-soft); font-family: var(--serif); font-size: 1.15rem; line-height: 1.55; }
.venue-feature {
  display: grid;
  grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
  gap: clamp(3rem, 8vw, 8rem);
  width: 100%;
  max-width: calc(var(--measure) + 12vw);
  margin: 0 auto;
  padding: 3rem 6vw 9rem;
  align-items: center;
}
.venue-feature__copy { max-width: 30rem; }
.venue-feature__copy h2 { max-width: 10ch; margin: 1rem 0 1.5rem; }
.venue-feature__copy > p:not(.kicker) { max-width: 36ch; color: var(--ink-soft); }
.venue-feature__copy .text-link { margin-top: 2rem; }
.venue-feature__image { min-width: 0; }
.venue-feature__image img { width: 100%; height: clamp(28rem, 42vw, 38rem); object-fit: cover; }
.detail-list { margin: 2.2rem 0 0; border-top: 1px solid var(--line); }
.detail-list div { display: grid; grid-template-columns: minmax(6.5rem, .7fr) minmax(0, 1fr); gap: 1rem; padding: .85rem 0; border-bottom: 1px solid var(--line); }
.detail-list dt { color: var(--sage-deep); font-size: .62rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.detail-list dd { margin: 0; color: var(--ink-soft); font-family: var(--serif); }
.full-image { padding: 0 6vw 1rem; }
.full-image img { width: min(100%, var(--measure)); height: clamp(20rem, 42vw, 38rem); margin: 0 auto; object-fit: cover; }
.full-image p { width: min(100%, var(--measure)); margin: .8rem auto 0; color: var(--muted); font-size: .62rem; letter-spacing: .13em; text-align: right; text-transform: uppercase; }
.space-ledger { padding: 8rem 6vw 9rem; background: var(--paper-deep); }
.space-ledger > .section-heading { margin: 0 auto; }
.space-ledger > .section-heading--split { padding-bottom: 2rem; border-bottom: 1px solid var(--line); }
.space-ledger .section-heading--split > p { max-width: 34ch; margin: 0; color: var(--ink-soft); }
.ledger-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(1rem, 2.4vw, 2.2rem); max-width: var(--measure); margin: 3.8rem auto 0; }
.ledger-grid article { min-width: 0; padding-bottom: 1.7rem; overflow: hidden; background: var(--white); border: 1px solid var(--line); }
.ledger-grid article img { width: 100%; aspect-ratio: 7 / 4.5; object-fit: cover; }
.ledger-grid article .kicker,
.ledger-grid article h3,
.ledger-grid article > p:last-child { margin-right: 1.25rem; margin-left: 1.25rem; }
.ledger-grid article .kicker { margin-top: 1.35rem; }
.ledger-grid article h3 { margin-top: .75rem; }
.ledger-grid article > p:last-child { margin-top: .85rem; color: var(--ink-soft); font-family: var(--serif); }

.editorial-spread { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: clamp(3rem, 9vw, 9rem); max-width: var(--measure); margin: 0 auto; padding: 2rem 6vw 9rem; align-items: center; }
.editorial-spread__copy { max-width: 28rem; justify-self: end; }
.editorial-spread__copy h2 { margin: 1rem 0 1.5rem; }
.editorial-spread__copy p:not(.kicker) { color: var(--ink-soft); margin-top: .9rem; }
.editorial-spread__copy .text-link { margin-top: 2rem; }
.editorial-spread__media { position: relative; }
.editorial-spread__media img { width: 78%; object-fit: cover; }
.editorial-spread__media img:first-child { margin-left: auto; height: 36rem; }
.editorial-spread__media img:last-child { position: absolute; left: 0; bottom: -5rem; width: 42%; height: 18rem; border: .5rem solid var(--paper); }
.media-break { position: relative; min-height: clamp(21rem, 52vw, 42rem); overflow: hidden; background: var(--ink); }
.media-break > img, .media-break > video { width: 100%; height: 100%; min-height: inherit; object-fit: cover; opacity: .88; }
.media-break__caption { position: absolute; right: 5vw; bottom: 2rem; left: 5vw; display: flex; justify-content: space-between; color: var(--white); font-size: .62rem; letter-spacing: .13em; text-transform: uppercase; }
.media-break__caption span { color: var(--blush); }
.section-heading { max-width: var(--measure); }
.section-heading--centred { margin: 0 auto; text-align: center; }
.section-heading--centred > p:last-child { max-width: 50ch; margin: 1.3rem auto 0; color: var(--ink-soft); }
.section-heading--split { display: flex; align-items: end; justify-content: space-between; gap: 2rem; }
.section-heading--split h2 { margin-top: .8rem; }
.day-section { max-width: var(--measure); margin: 0 auto; padding: 9rem 6vw; }
.day-rail { margin-top: 6rem; }
.day-row { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(15rem, .8fr); gap: clamp(3rem, 8vw, 8rem); align-items: center; margin-bottom: 8rem; }
.day-row--reverse { grid-template-columns: minmax(15rem, .8fr) minmax(0, 1.1fr); }
.day-row--reverse .day-row__image { order: 2; }
.day-row__image { position: relative; }
.day-row__image img { width: 100%; height: clamp(18rem, 36vw, 31rem); object-fit: cover; }
.day-row__image span { position: absolute; right: 1rem; bottom: 1rem; padding: .35rem .55rem; background: var(--white); color: var(--sage-deep); font-family: var(--serif); font-size: 1rem; }
.day-row__copy { max-width: 25rem; }
.day-row__copy h3 { margin: .9rem 0 1rem; }
.day-row__copy p:not(.kicker) { color: var(--ink-soft); }
.quote-band { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 25rem; padding: 4rem 2rem; background: var(--sage); color: var(--white); text-align: center; }
.quote-band p { max-width: 24ch; font-family: var(--serif); font-size: clamp(2rem, 5vw, 4.3rem); line-height: .98; letter-spacing: -.04em; }
.quote-band span { margin-top: 2rem; font-size: .62rem; letter-spacing: .16em; text-transform: uppercase; }
.stay-section { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1fr); max-width: 63rem; margin: 0 auto; padding: 9rem 6vw; align-items: center; gap: clamp(3rem, 9vw, 9rem); }
.stay-section__image img { width: 100%; height: 43rem; object-fit: cover; }
.stay-section__copy { max-width: 27rem; }
.stay-section__copy h2 { margin: 1rem 0 1.3rem; }
.stay-section__copy > p:not(.kicker) { color: var(--ink-soft); }
.feature-list { display: grid; gap: .7rem; margin: 2rem 0 2.3rem; padding: 1.3rem 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); list-style: none; }
.feature-list li { color: var(--ink-soft); font-family: var(--serif); }
.feature-list li::before { content: "—"; color: var(--blush); margin-right: .7rem; }
.spaces-section { padding: 8rem 6vw 9rem; background: var(--paper-deep); }
.spaces-section > .section-heading { max-width: var(--measure); margin: 0 auto; }
.space-strip { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; max-width: var(--measure); margin: 3.8rem auto 0; background: var(--line); }
.space-tile { position: relative; display: block; min-height: 25rem; overflow: hidden; background: var(--ink); color: var(--white); text-decoration: none; }
.space-tile img { width: 100%; height: 100%; min-height: 25rem; object-fit: cover; opacity: .8; transition: transform .55s ease, opacity .35s ease; }
.space-tile::after { position: absolute; inset: auto 0 0; height: 48%; background: linear-gradient(transparent, rgba(0,0,0,.6)); content: ""; }
.space-tile span { position: absolute; bottom: 1.6rem; left: 1.6rem; z-index: 1; font-family: var(--serif); font-size: 1.55rem; }
.space-tile:hover img { opacity: .95; transform: scale(1.04); }
.rsvp-panel { position: relative; display: grid; min-height: 34rem; overflow: hidden; background: var(--ink); color: var(--white); }
.rsvp-panel > img { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; object-fit: cover; opacity: .48; }
.rsvp-panel::after { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(28,30,26,.86), rgba(28,30,26,.25)); content: ""; }
.rsvp-panel__copy { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: flex-start; justify-content: center; width: min(100%, 36rem); padding: 5rem 6vw; }
.rsvp-panel__copy h2 { margin: 1rem 0; color: var(--white); }
.rsvp-panel__copy p:not(.kicker) { max-width: 34ch; color: rgba(255,255,255,.8); }
.rsvp-panel__copy .button { margin-top: 2rem; }
.site-footer { padding: 3rem 6vw 1.6rem; background: var(--ink); color: #dedbd3; }
.footer-rule { position: relative; display: flex; align-items: center; justify-content: center; max-width: var(--measure); margin: 0 auto 3.2rem; }
.footer-rule::before { position: absolute; left: 0; right: 0; height: 1px; background: #4c4a43; content: ""; }
.footer-rule .brand-mark { position: relative; z-index: 1; background: var(--ink); }
.footer-grid { display: grid; grid-template-columns: 1.5fr repeat(3, 1fr); gap: 2rem; max-width: var(--measure); margin: 0 auto; }
.footer-brand .brand-name { display: inline-block; color: var(--white); font-size: 2rem; }
.footer-brand p, .footer-col { color: #bdb9af; font-size: .85rem; }
.footer-brand p { max-width: 27ch; margin-top: .6rem; }
.footer-brand .footer-note { color: #817f76; font-size: .7rem; }
.footer-col { display: flex; flex-direction: column; gap: .45rem; }
.footer-col h2 { margin-bottom: .5rem; color: #8e9586; font-family: var(--sans); font-size: .62rem; font-weight: 700; letter-spacing: .17em; text-transform: uppercase; }
.footer-col a { text-decoration: none; }
.footer-col a:hover, .footer-base a:hover { color: var(--blush); }
.footer-base { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; max-width: var(--measure); margin: 3rem auto 0; padding-top: 1.2rem; border-top: 1px solid #4c4a43; color: #817f76; font-size: .68rem; }
.footer-base a { color: var(--white); text-decoration: none; }
.form-section { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: clamp(3rem, 9vw, 8rem); max-width: var(--measure); margin: 0 auto; padding: 8rem 6vw; }
.form-intro { max-width: 27rem; }
.form-intro h2 { margin: 1rem 0 1.5rem; }
.form-intro > p:not(.kicker) { color: var(--ink-soft); }
.form-aside { display: grid; grid-template-columns: auto 1fr; gap: .7rem 1rem; margin-top: 3rem; padding-top: 1.3rem; border-top: 1px solid var(--line); }
.form-aside span { color: var(--blush); font-family: var(--serif); font-size: 1.2rem; }
.form-aside p { color: var(--ink-soft); font-family: var(--serif); }
.event-form, .rsvp-form { display: grid; grid-template-columns: 1fr 1fr; gap: 1.3rem 1rem; align-content: start; }
.event-form label, .rsvp-form label { display: grid; gap: .4rem; color: var(--ink-soft); font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.event-form input, .event-form select, .event-form textarea, .rsvp-form input, .rsvp-form select, .rsvp-form textarea { width: 100%; min-height: 3rem; padding: .7rem .8rem; border: 1px solid var(--line); border-radius: 0; background: var(--white); color: var(--ink); font-size: .95rem; letter-spacing: 0; text-transform: none; }
.event-form textarea, .rsvp-form textarea { resize: vertical; }
.field-wide, .event-form > .button, .event-form > .form-status, .rsvp-form > .button, .rsvp-form > .form-status { grid-column: 1 / -1; }
.form-status { min-height: 1.3rem; color: var(--sage-deep); font-family: var(--serif); font-size: 1rem; }
.split-callout, .rsvp-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center; padding: 6rem max(6vw, calc((100vw - var(--measure)) / 2)); background: var(--sage); color: var(--white); }
.split-callout h2, .rsvp-strip h2 { max-width: 13ch; }
.split-callout p:not(.kicker), .rsvp-strip p:not(.kicker) { max-width: 42ch; color: rgba(255,255,255,.85); }
.split-callout .button { margin-top: 1.7rem; background: var(--white); border-color: var(--white); color: var(--ink); }
.split-callout--soft { background: var(--paper-deep); color: var(--ink); }
.split-callout--soft p:not(.kicker) { color: var(--ink-soft); }
.split-callout--soft .text-link { margin-top: 1.7rem; }
.split-callout--soft .kicker { color: var(--sage-deep); }
.faq-section { max-width: 61rem; margin: 0 auto; padding: 8rem 6vw; }
.faq-list { margin-top: 4rem; border-top: 1px solid var(--line); }
.faq-list details { border-bottom: 1px solid var(--line); }
.faq-list summary { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.5rem 0; cursor: pointer; font-family: var(--serif); font-size: clamp(1.3rem, 2.5vw, 2rem); list-style: none; }
.faq-list summary::-webkit-details-marker { display: none; }
.faq-list summary::after { color: var(--sage-deep); content: "+"; font-family: var(--sans); font-size: 1.2rem; }
.faq-list details[open] summary::after { content: "−"; }
.faq-list details p { max-width: 55ch; padding: 0 3rem 1.8rem 0; color: var(--ink-soft); }
.rsvp-strip { background: var(--paper-deep); color: var(--ink); }
.rsvp-strip p:not(.kicker) { color: var(--ink-soft); }
.invitation-hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); min-height: 45rem; background: var(--paper-deep); }
.invitation-card { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 6rem 7vw; text-align: center; }
.invitation-card__mark { width: 3.3rem; height: 3.3rem; margin: 1.7rem 0 1.8rem; }
.invitation-card h1 { font-size: clamp(3rem, 6vw, 5.8rem); }
.invitation-card > p:not(.kicker):not(.invitation-card__date) { max-width: 30ch; margin-top: 1.4rem; color: var(--ink-soft); font-family: var(--serif); font-size: 1.15rem; }
.invitation-card__date { margin-top: 1.8rem; color: var(--sage-deep); font-size: 1.05rem; line-height: 1.35; }
.invitation-card .button { margin-top: 2rem; }
.invitation-hero > img { width: 100%; height: 100%; min-height: 45rem; object-fit: cover; }
.invitation-details { padding: 8rem 6vw; }
.detail-cards { display: grid; grid-template-columns: repeat(3, 1fr); max-width: 64rem; margin: 4rem auto 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.detail-cards article { padding: 2rem clamp(1rem, 4vw, 3rem); border-right: 1px solid var(--line); }
.detail-cards article:last-child { border-right: 0; }
.detail-cards span { color: var(--blush); font-size: .7rem; font-weight: 700; letter-spacing: .16em; }
.detail-cards h3 { margin: 1.5rem 0 .6rem; }
.detail-cards p { color: var(--ink-soft); font-family: var(--serif); }
.attendance-section { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); gap: clamp(3rem, 8vw, 8rem); padding: 8rem max(6vw, calc((100vw - var(--measure)) / 2)); background: var(--sage); color: var(--white); }
.attendance-section__copy h2 { margin: 1rem 0 1.2rem; }
.attendance-section__copy > p:not(.kicker) { color: rgba(255,255,255,.82); }
.attend-choice { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: 2rem; }
.attend-choice button { padding: .8rem 1rem; border: 1px solid rgba(255,255,255,.7); background: transparent; color: var(--white); cursor: pointer; font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.attend-choice button[aria-pressed="true"] { background: var(--white); color: var(--ink); }
.attendance-status { min-height: 1.5rem; margin-top: 1rem; color: var(--white) !important; font-family: var(--serif); }
.rsvp-form label { color: rgba(255,255,255,.85); }
.rsvp-form input, .rsvp-form select, .rsvp-form textarea { border-color: rgba(255,255,255,.5); background: rgba(255,255,255,.95); }
.rsvp-form .button { background: var(--ink); border-color: var(--ink); }
.rsvp-form .form-status { color: var(--white); }
.invitation-close { display: flex; flex-direction: column; align-items: center; gap: 1.5rem; padding: 8rem 2rem; text-align: center; }
.invitation-close h2 { max-width: 12ch; }
@media (max-width: 1199px) {
  .ledger-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 960px) {
  .space-ledger .section-heading--split { align-items: flex-start; flex-direction: column; }
}
@media (min-width: 820px) { .site-header { position: sticky; top: 0; } }
@media (max-width: 819px) {
  .site-header__top { justify-content: flex-start; min-height: 5rem; padding: .8rem 1.3rem; }
  .menu-toggle { display: block; }
  .primary-nav { display: none; flex-direction: column; align-items: stretch; gap: 0; padding: .5rem 1.3rem 1rem; }
  .primary-nav.is-open { display: flex; }
  .primary-nav a { padding: .75rem 0; border-bottom: 1px solid var(--line); }
  .primary-nav .nav-rsvp { border-bottom: 0; }
  .repeat-nav { justify-content: flex-start; overflow-x: auto; gap: 1.5rem; padding: 0 1.2rem; white-space: nowrap; }
  .hero--home { min-height: 45rem; }
  .hero__content, .page-hero__content { padding: 5rem 1.3rem 7rem; }
  .hero__signature { max-width: 25rem; }
  .hero__caption { right: 1.3rem; left: 1.3rem; }
  .editorial-spread, .stay-section, .form-section, .attendance-section { grid-template-columns: 1fr; }
  .editorial-spread { padding: 4rem 1.3rem 8rem; }
  .editorial-spread__copy { justify-self: start; }
  .editorial-spread__media { margin-top: 2rem; }
  .editorial-spread__media img:first-child { height: 28rem; }
  .editorial-spread__media img:last-child { bottom: -4rem; height: 15rem; }
  .venue-feature { grid-template-columns: 1fr; gap: 3.5rem; max-width: none; padding: 4rem 1.3rem 7rem; }
  .venue-feature__copy { max-width: none; }
  .venue-feature__copy h2 { max-width: 12ch; }
  .venue-feature__image img { height: clamp(20rem, 84vw, 28rem); }
  .full-image { padding: 0 1.3rem 1rem; }
  .full-image img { height: clamp(16rem, 62vw, 24rem); }
  .full-image p { width: 100%; }
  .day-section, .faq-section { padding: 7rem 1.3rem; }
  .day-rail { margin-top: 4rem; }
  .day-row, .day-row--reverse { display: flex; flex-direction: column; gap: 1.7rem; margin-bottom: 5rem; align-items: stretch; }
  .day-row--reverse .day-row__image { order: initial; }
  .day-row__image img { height: 24rem; }
  .day-row__copy { max-width: none; }
  .stay-section { padding: 7rem 1.3rem; gap: 3rem; }
  .stay-section__image img { height: 31rem; }
  .spaces-section { padding: 6rem 1.3rem 7rem; }
  .section-heading--split { align-items: flex-start; flex-direction: column; }
  .space-ledger { padding: 6rem 1.3rem 7rem; }
  .space-ledger > .section-heading--split { padding-bottom: 1.5rem; }
  .ledger-grid { grid-template-columns: 1fr; gap: 1.25rem; margin-top: 3rem; }
  .space-strip { grid-template-columns: 1fr; }
  .space-tile, .space-tile img { min-height: 16rem; height: 16rem; }
  .rsvp-panel__copy { padding: 5rem 1.3rem; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .form-section { padding: 7rem 1.3rem; }
  .split-callout, .rsvp-strip { grid-template-columns: 1fr; padding: 5rem 1.3rem; gap: 1.5rem; }
  .invitation-hero { grid-template-columns: 1fr; }
  .invitation-card { min-height: 37rem; padding: 5rem 1.3rem; }
  .invitation-hero > img { min-height: 24rem; max-height: 30rem; }
  .invitation-details { padding: 7rem 1.3rem; }
  .detail-cards { grid-template-columns: 1fr; }
  .detail-cards article { border-right: 0; border-bottom: 1px solid var(--line); }
  .detail-cards article:last-child { border-bottom: 0; }
  .attendance-section { padding: 7rem 1.3rem; }
}

/* S301 wedding-opening parity: keep the locally authored sunset role visible when a browser
   cannot decode the decorative film. A slow editorial drift gives the still a calm cinematic
   life in reduced-free mode. */
.hero__video { opacity:0; pointer-events:none; }
.hero__video + .hero__image { opacity:1; animation:vowbarn-hero-drift 16s ease-in-out infinite alternate; }
@keyframes vowbarn-hero-drift { from { transform:scale(1.02) translate3d(0,0,0); } to { transform:scale(1.08) translate3d(-1.2%, -1%, 0); } }
@media (prefers-reduced-motion: reduce) { .hero__video + .hero__image { animation:none; transform:none; } }
@media (max-width: 560px) {
  h1 { font-size: clamp(3rem, 16vw, 5rem); }
  .brand-name { font-size: 1.45rem; }
  .hero__actions { align-items: flex-start; flex-direction: column; }
  .hero__couple { font-size:1.35rem; }
  .footer-grid { grid-template-columns: 1fr; }
  .event-form, .rsvp-form { grid-template-columns: 1fr; }
  .field-wide, .event-form > .button, .event-form > .form-status, .rsvp-form > .button, .rsvp-form > .form-status { grid-column: auto; }
  .event-form > .button, .rsvp-form > .button { width: 100%; }
}

@media (min-width:621px) {
  .home-page .hero--home { min-height:min(76rem,100vh); }
}

/* S301 signature motion — invitation fold.
   Vowbarn moves like a physical invitation: the opening image settles under the copy, then
   editorial bands turn in on a clipped paper edge as the guest travels down the page. The
   pointer offset is deliberately tiny and only applies to the photographic hero, so it reads as
   a considered lens shift rather than a game-like parallax trick. */
@keyframes vow-invitation-fold {
  from { opacity: 0; clip-path: inset(0 0 18% 0); transform: translateY(2.2rem) rotate(.35deg); }
  to { opacity: 1; clip-path: inset(0); transform: none; }
}
@keyframes vow-hero-open {
  from { opacity: 0; clip-path: inset(0 100% 0 0); transform: scale(1.06); }
  to { opacity: 1; clip-path: inset(0); transform: scale(1); }
}
@media (prefers-reduced-motion: no-preference) {
  .hero__image { transform: scale(1.055) translate3d(var(--vow-drift-x, 0px), var(--vow-drift-y, 0px), 0); transition: transform .22s ease-out; }
  .hero__content, .page-hero__content { animation: vow-hero-open 1.15s cubic-bezier(.77, 0, .175, 1) both; }
}
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    main > section:not(.hero), .day-row, .space-tile, .faq-list details, .form-section > *, .attendance-section > *, .venue-feature > * {
      animation: vow-invitation-fold linear both;
      animation-timeline: view();
      animation-range: entry 8% cover 30%;
    }
    .day-row:nth-child(even), .space-tile:nth-child(even), .form-section > :nth-child(even) { animation-range: entry 14% cover 38%; }
  }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
  .loader { transition: none; }
  .hero__image { transform: none !important; }
  .hero__video { display:none; }
  .hero__video + .hero__image { opacity:1; }
}

/* Accessibility palette hooks — keep the wedding palette calm while making the roles explicit. */
html[data-a11y-contrast="high"] {
  --ink: #000; --ink-soft: #333; --muted: #333; --paper: #fff; --paper-deep: #fff;
  --white: #fff; --line: #000; --sage: #000; --sage-deep: #000; --blush: #000;
}
html[data-a11y-colour="safe"] {
  --ink: #23282a; --ink-soft: #3a4245; --muted: #4b4b4b;
  --sage: #0072b2; --sage-deep: #005a8d; --blush: #e69f00;
}

/* S301 parity repair: make the invitation/RSVP idea visible in the opening like the strongest
   venue references. It is an original rebrand card over original local media, not a copied venue
   badge. The overlap is deliberately removed on narrow phones so the invitation remains readable. */
.hero__invitation-card { display: grid; gap: .4rem; width: min(19rem, 100%); margin-top: 1.6rem; padding: 1rem 1.15rem; color: var(--ink); background: rgba(255,255,255,.93); border-left: 3px solid var(--blush); box-shadow: 1rem 1rem 0 rgba(23,28,24,.18); transform: rotate(-1.5deg); }
.hero__invitation-kicker { color: var(--sage-deep); font-size: .58rem; font-weight: 800; letter-spacing: .15em; text-transform: uppercase; }
.hero__invitation-card strong { font-family: var(--serif); font-size: 1.35rem; letter-spacing: .02em; }
.hero__invitation-card > span:not(.hero__invitation-kicker) { color: var(--ink-soft); font-family: var(--serif); font-size: .88rem; }
.hero__invitation-card a { width: fit-content; margin-top: .15rem; color: var(--sage-deep); font-size: .62rem; font-weight: 800; letter-spacing: .12em; text-decoration: none; text-transform: uppercase; }
.hero__invitation-card a:hover { color: var(--ink); }
@media (max-width: 620px) { .hero__invitation-card { width: min(17rem, 100%); margin-top: 1.2rem; padding: .8rem .9rem; box-shadow: .55rem .55rem 0 rgba(23,28,24,.16); transform: none; } }
/* S301 parity repair — keep the RSVP invitation teaser fully visible in the opening frame. */
@media (min-width:621px) {
  .hero__invitation-card { position:absolute; left:clamp(1.3rem,6vw,6rem); bottom:clamp(3.9rem,7vw,6.4rem); margin-top:0; width:min(19rem,36vw); }
}
@media (max-width:620px) { .hero__invitation-card { margin-top:1rem; } }

/* S301 RSVP closeout — the invitation is the signature product idea, so its paper/card role
   must read before the venue story on desktop and remain legible on phones. */
@media (min-width:621px) {
  .hero__invitation-card { left:auto; right:clamp(1.3rem,6vw,6rem); width:min(23rem,30vw); padding:1.35rem 1.45rem; bottom:clamp(4.8rem,8vw,7.2rem); box-shadow:1.2rem 1.2rem 0 rgba(23,28,24,.22); }
  .hero__invitation-card strong { font-size:1.65rem; }
  .hero__invitation-card > span:not(.hero__invitation-kicker) { font-size:1rem; }
}
@media (max-width:620px) { .hero__invitation-card { width:min(18.5rem,100%); } }

/* S301 readability closeout — the sunset still is approved; only the italic chapter cue
   needed a lighter wedding-paper accent so it does not recede into the dark image. */
.hero--home h1 em { color:#f2c5b7; }

/* S301 cinematic closeout — the authored sunset still now has a local, silent motion
   derivative. The poster/image remains the no-video fallback and reduced-motion state. */
.hero--home { isolation:isolate; }
.hero--home .hero__video { z-index:1; opacity:.94; pointer-events:none; }
.hero--home .hero__video + .hero__image { z-index:0; opacity:0; animation:none; }
.hero--home .hero__veil { z-index:2; }
.hero--home .hero__content { z-index:3; }
@media (prefers-reduced-motion: reduce) {
  .hero--home .hero__video { display:none; }
  .hero--home .hero__video + .hero__image { display:block; opacity:1; transform:none; }
}

/* S301 invitation-parity closeout — let the wedding opening read as a full-screen
   invitation/video first, with the RSVP paper card preserved as the secondary action. */
@media (min-width:621px) {
  .hero--home .hero__content { max-width:none; align-items:center; padding-inline:6vw; text-align:center; }
  .hero--home .hero__content::before { content:"VOWBARN / WEDDING WEEKEND"; color:#f2c5b7; font-size:.62rem; font-weight:800; letter-spacing:.18em; }
  .hero--home .hero__kicker { display:none; }
  .hero--home h1 { max-width:12ch; margin-top:1.25rem; font-size:clamp(4rem,8.4vw,8rem); }
  .hero--home .hero__intro { max-width:39rem; }
  .hero--home .hero__signature { justify-content:center; }
  .hero--home .hero__actions { justify-content:center; }
  .hero--home .hero__invitation-card { text-align:left; }
}

/* S301 tablet repair — the RSVP teaser is part of the opening hierarchy, but at 621–819px it
   must follow the actions in the content flow rather than float across the discovery link. */
@media (min-width:621px) and (max-width:819px) {
  .hero--home .hero__content { padding-top:6.2rem; padding-bottom:5.4rem; }
  .hero--home .hero__actions { margin-top:1.8rem; }
  .hero--home .hero__invitation-card { position:static; align-self:center; width:min(24rem,78vw); margin-top:1.45rem; padding:1rem 1.15rem; transform:rotate(-1deg); }
  .hero--home .hero__invitation-card strong { font-size:1.35rem; }
  .hero--home .hero__invitation-card > span:not(.hero__invitation-kicker) { font-size:.88rem; }
}

/* Keep the shared accessibility launcher in the header chrome for Vowbarn, never over a
   signature form or confirmation state. Its panel opens below that chrome. */
.vowbarn-page .site-header__top { position:relative; }
.vowbarn-page .a11y-dock { position:absolute; top:1rem; right:1rem; bottom:auto; left:auto; z-index:42; }
.vowbarn-page .a11y-panel { position:absolute; top:calc(100% + .75rem); right:0; margin-bottom:0; }
@media (max-width:819px) {
  .vowbarn-page .a11y-dock { top:1rem; right:6.3rem; }
}

/* S301 visual identity follow-up — the mark is authored geometry, not a rotated text glyph.
   The wordmark remains live HTML, while the same readable gable/door symbol travels through
   the header, loader, invitation, intro stamp and footer. */
.loader-mark, .brand-mark, .brand-stamp, .invitation-card__mark { border: 0; transform: none; }
.loader-mark .logo-art, .brand-mark .logo-art, .brand-stamp .logo-art, .invitation-card__mark .logo-art { display: block; width: 100%; height: 100%; object-fit: contain; }
.loader-mark .logo-art { animation: mark-pulse 1.5s ease-in-out infinite; }
.brand-mark { width: 3.2rem; height: 3.2rem; }
.brand-mark--small { width: 2.2rem; height: 2.2rem; }
.brand-stamp { width: 4.2rem; height: 4.2rem; }
.invitation-card__mark { width: 3.7rem; height: 3.7rem; margin: 1.7rem 0 1.8rem; }
.home-page .site-header .brand-mark { border-color: transparent; }
.footer-rule .brand-mark { background: transparent; }
@media (prefers-reduced-motion: reduce) { .loader-mark .logo-art { animation: none; } }

/* The generated concept is used once in the invitation as the large identity presentation;
   the clean SVG remains the header, loader, footer and favicon-safe delivery. */
.invitation-card__mark .logo-art { content: url("media/vowbarn-mark-generated.png"); }

/* S301 RSVP follow-up — make the invitation read as a warm local venue journey rather than
   a washed-out preview card. The paper note is authored HTML over an approved local plate. */
.invitation-hero__visual { position: relative; min-height: 45rem; overflow: hidden; isolation: isolate; background: var(--ink); }
.invitation-hero__visual > img { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; object-fit: cover; object-position: center; }
.invitation-hero__visual::after { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(23,28,24,.05), rgba(23,28,24,.72)); content: ""; }
.invitation-hero__visual-note { position: absolute; right: clamp(1.2rem, 4vw, 4rem); bottom: clamp(1.2rem, 4vw, 4rem); z-index: 2; width: min(19rem, calc(100% - 2.4rem)); padding: 1.1rem 1.2rem; background: rgba(247,245,240,.94); color: var(--ink); box-shadow: .9rem .9rem 0 rgba(23,28,24,.22); transform: rotate(-2deg); }
.invitation-hero__visual-note strong { display: block; color: var(--sage-deep); font-family: var(--serif); font-size: 1.5rem; line-height: 1; }
.invitation-hero__visual-note span { display: block; margin-top: .55rem; color: var(--ink-soft); font-family: var(--serif); font-size: .92rem; }
.invitation-hero__visual-note small { display: block; margin-top: .8rem; color: var(--sage-deep); font-size: .58rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
@media (max-width: 819px) {
  .invitation-hero__visual { min-height: 27rem; }
  .invitation-hero__visual-note { right: 1.1rem; bottom: 1.1rem; width: min(18rem, calc(100% - 2.2rem)); padding: .9rem 1rem; }
  .invitation-hero__visual-note strong { font-size: 1.25rem; }
}

/* S301 RSVP parity repair — the opening action now behaves like a real invitation flow:
   a focused guest-response surface over the venue image, followed by the longer local-only
   response form. The hierarchy is original to Vowbarn and borrows only the reference grammar. */
.rsvp-dialog { width: min(72rem, calc(100vw - 3rem)); max-width: none; max-height: calc(100vh - 3rem); padding: 0; border: 1px solid rgba(206, 220, 210, .22); border-radius: 1.45rem; background: #0e211b; color: var(--paper); box-shadow: 0 2rem 7rem rgba(10, 18, 14, .42); overflow: hidden; }
.rsvp-dialog::backdrop { background: rgba(9, 18, 14, .74); backdrop-filter: blur(10px); }
.rsvp-dialog__shell { display: grid; height: min(44rem, calc(100vh - 3rem)); min-height: 0; grid-template-rows: auto minmax(0, 1fr); }
.rsvp-dialog__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 2rem; padding: 2rem clamp(1.4rem, 4vw, 4rem) 1.6rem; border-bottom: 1px solid rgba(206, 220, 210, .16); }
.rsvp-dialog__header .kicker { color: #efb7a6; }
.rsvp-dialog__header h2 { max-width: 15ch; margin-top: .45rem; color: var(--paper); font-size: clamp(2.35rem, 3.8vw, 4.25rem); line-height: .88; }
.rsvp-dialog__close { display: grid; place-items: center; flex: 0 0 auto; width: 2.8rem; height: 2.8rem; border: 1px solid rgba(226, 239, 229, .28); border-radius: 50%; background: rgba(255,255,255,.06); color: var(--paper); cursor: pointer; font-size: 1.7rem; line-height: 1; }
.rsvp-dialog__close:hover { background: var(--paper); color: var(--ink); }
.rsvp-dialog__form { display: grid; min-height: 0; grid-template-rows: minmax(0, 1fr) auto; }
.rsvp-dialog__body { min-height: 0; padding: 1.5rem clamp(1.4rem, 4vw, 4rem) 1.1rem; overflow: auto; scrollbar-gutter: stable; }
.rsvp-dialog__intro { max-width: 56ch; color: rgba(247,245,240,.76); font-family: var(--serif); font-size: clamp(1rem, 1.7vw, 1.3rem); line-height: 1.3; }
.rsvp-dialog__choice { margin: 1.25rem 0 .75rem; padding: 0; border: 0; }
.rsvp-dialog__choice legend { margin-bottom: .7rem; color: #efb7a6; font-size: .62rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; }
.rsvp-dialog__choice-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .7rem; }
.rsvp-dialog__choice-grid button { min-height: 2.85rem; padding: .65rem 1rem; border: 1px solid rgba(226,239,229,.2); border-radius: .75rem; background: rgba(255,255,255,.06); color: var(--paper); cursor: pointer; text-align: left; transition: background .2s ease, border-color .2s ease, color .2s ease; }
.rsvp-dialog__choice-grid button:hover, .rsvp-dialog__choice-grid button[aria-pressed="true"] { border-color: #b8e6ca; background: #b8e6ca; color: #112119; }
.rsvp-dialog__status { min-height: 1.1rem; margin-top: .35rem; color: rgba(247,245,240,.72); font-family: var(--serif); font-size: .96rem; }
.rsvp-dialog__guest-card { padding: .85rem; border: 1px solid rgba(226,239,229,.2); border-radius: 1rem; background: rgba(255,255,255,.065); }
.rsvp-dialog__guest-heading { display: flex; align-items: center; gap: .8rem; }
.rsvp-dialog__guest-heading .kicker { color: #f0c4b5; font-size: .58rem; }
.rsvp-dialog__guest-heading strong { display: block; margin-top: .18rem; color: var(--paper); font-family: var(--serif); font-size: 1.45rem; font-weight: 400; }
.rsvp-dialog__guest-icon { display: grid; place-items: center; width: 2.6rem; height: 2.6rem; border-radius: .7rem; background: rgba(184,230,202,.14); color: #b8e6ca; font-size: 1.25rem; }
.rsvp-dialog__guest-count { margin-left: auto; color: rgba(247,245,240,.5); font-size: .62rem; font-weight: 800; letter-spacing: .14em; }
.rsvp-dialog__fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .7rem; margin-top: .85rem; }
.rsvp-dialog__fields label { display: grid; gap: .4rem; color: rgba(247,245,240,.72); font-size: .62rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
.rsvp-dialog__fields input, .rsvp-dialog__fields select { width: 100%; min-height: 3.1rem; padding: .75rem .8rem; border: 1px solid rgba(226,239,229,.2); border-radius: .55rem; background: rgba(5,17,13,.36); color: var(--paper); font-size: .95rem; letter-spacing: 0; text-transform: none; }
.rsvp-dialog__fields input::placeholder { color: rgba(247,245,240,.5); }
.rsvp-dialog__fields select option { color: var(--ink); }
.rsvp-dialog__field-wide { grid-column: 1 / -1; }
.rsvp-dialog__local-note { margin-top: .8rem; color: rgba(247,245,240,.52); font-size: .58rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.rsvp-dialog__footer { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; padding: 1.2rem clamp(1.4rem, 4vw, 4rem) 1.35rem; border-top: 1px solid rgba(206, 220, 210, .16); }
.rsvp-dialog__footer .rsvp-dialog__status { flex: 1 1 auto; margin-top: 0; }
.rsvp-dialog__footer .button { flex: 0 0 auto; min-width: 10rem; border-color: #b8e6ca; background: #b8e6ca; color: #112119; }
.rsvp-dialog__footer .button:hover { border-color: var(--paper); background: var(--paper); color: var(--ink); }
@media (max-width: 620px) {
  .rsvp-dialog { width: calc(100vw - 1.2rem); max-height: calc(100vh - 1.2rem); border-radius: 1rem; }
  .rsvp-dialog__shell { height: calc(100vh - 1.2rem); }
  .rsvp-dialog__header { padding: 1.35rem 1.1rem 1.1rem; }
  .rsvp-dialog__header h2 { max-width: 17ch; font-size: clamp(2.2rem, 10vw, 3.2rem); }
  .rsvp-dialog__close { width: 2.45rem; height: 2.45rem; }
  .rsvp-dialog__body { padding: 1.05rem 1.1rem 1rem; }
  .rsvp-dialog__choice { margin-top: 1.1rem; margin-bottom: .7rem; }
  .rsvp-dialog__choice-grid, .rsvp-dialog__fields { grid-template-columns: 1fr; }
  .rsvp-dialog__field-wide { grid-column: auto; }
  .rsvp-dialog__choice-grid button { min-height: 3rem; }
  .rsvp-dialog__guest-card { padding: .9rem; }
  .rsvp-dialog__fields { gap: .6rem; margin-top: .75rem; }
  .rsvp-dialog__footer { align-items: stretch; flex-direction: column; gap: .55rem; padding: .8rem 1.1rem .9rem; }
  .rsvp-dialog__footer .button { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .rsvp-dialog__choice-grid button, .rsvp-dialog__close { transition: none; }
}

/* Scroll-linked reveals are progressive enhancement only. A settled capture or a direct
   anchor visit must never leave a section looking like an empty dark plate. */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    main > section:not(.hero), .day-row, .space-tile, .faq-list details, .form-section > *, .attendance-section > *, .venue-feature > * {
      animation: none;
      opacity: 1;
      clip-path: none;
      transform: none;
    }
  }
}

/* S301 RSVP rebuild — the route is now a page-led invitation rather than a modal-first demo.
   The existing Vowbarn palette, mark and local photography stay in charge; these rules only add
   the long-form story cadence and the progressive name-first response surface observed in the
   reference packet. */
.rsvp-opening .invitation-card { background: var(--paper); }
.rsvp-opening .invitation-card h1 { max-width: 9ch; }
.rsvp-opening .invitation-hero__visual { min-height: 45rem; }
.rsvp-story { padding-top: 9rem; }
.rsvp-story__rail { max-width: 70rem; margin-right: auto; margin-left: auto; }
.rsvp-story__step { margin-bottom: 9rem; }
.rsvp-story__step:last-child { margin-bottom: 0; }
.rsvp-quote { min-height: 28rem; background: var(--sage-deep); }
.rsvp-details { padding-top: 8rem; padding-bottom: 8rem; }
.rsvp-detail-notes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.5rem; max-width: 64rem; margin: 4rem auto 0; padding-top: 1.5rem; border-top: 1px solid var(--line); }
.rsvp-detail-notes > div { min-width: 0; }
.rsvp-detail-notes > div + div { padding-left: 1.5rem; border-left: 1px solid var(--line); }
.rsvp-detail-notes p:last-child { margin-top: .75rem; color: var(--ink-soft); font-family: var(--serif); }
.rsvp-stay { max-width: 76rem; }
.rsvp-spaces { padding-top: 8rem; }
.rsvp-cta { min-height: 36rem; }
.rsvp-journey { scroll-margin-top: 4rem; background: var(--paper); }
.rsvp-form--journey { align-content: start; }
.rsvp-form--journey > .rsvp-step { grid-column: 1 / -1; min-width: 0; }
.rsvp-form--journey .rsvp-step--name { display: grid; max-width: 34rem; grid-template-columns: minmax(0, 1fr); gap: .85rem; }
.rsvp-form--journey .rsvp-step--details { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.3rem 1rem; }
.rsvp-form--journey .rsvp-step[hidden] { display: none; }
.rsvp-form--journey .rsvp-step--name > label { grid-column: 1 / -1; }
.rsvp-form--journey .rsvp-step--name > .button,
.rsvp-form--journey .rsvp-step--name > .form-status { grid-column: 1 / -1; }
.rsvp-form--journey .rsvp-attendance-fieldset { grid-column: 1 / -1; margin: 0 0 .2rem; padding: 0; border: 0; }
.rsvp-attendance-fieldset legend { margin-bottom: .7rem; color: var(--ink-soft); font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.rsvp-attendance-fieldset .attend-choice { margin-top: 0; }
.rsvp-attendance-fieldset .attend-choice button { border-color: var(--sage-deep); background: transparent; color: var(--ink); }
.rsvp-attendance-fieldset .attend-choice button[aria-pressed="true"] { background: var(--sage-deep); color: var(--white); }
.rsvp-form--journey .rsvp-step--details > label:nth-of-type(1),
.rsvp-form--journey .rsvp-step--details > label:nth-of-type(2) { min-width: 0; }
.rsvp-step__actions { display: flex; grid-column: 1 / -1; align-items: center; justify-content: space-between; gap: 1rem; margin-top: .4rem; }
.rsvp-step__actions .text-link { border: 0; padding: 0; background: transparent; cursor: pointer; }
.rsvp-hint { color: var(--muted); font-size: .68rem; line-height: 1.5; }
.rsvp-form--journey .rsvp-step--details > .rsvp-hint { grid-column: 1 / -1; }
.rsvp-journey .rsvp-form--journey label { color: var(--ink-soft); }
.rsvp-journey .rsvp-form--journey .attendance-status,
.rsvp-journey .rsvp-form--journey .form-status { color: var(--ink-soft) !important; }
.rsvp-journey .rsvp-form--journey .rsvp-hint { color: var(--muted); }
.rsvp-success { grid-column: 1 / -1; padding: 1.25rem 1.35rem; border: 1px solid var(--sage-deep); background: var(--paper-deep); color: var(--sage-deep); font-family: var(--serif); font-size: 1.15rem; }
.rsvp-success[hidden] { display: none; }
.rsvp-gift { border-top: 1px solid var(--line); }

@media (max-width: 819px) {
  .rsvp-opening .invitation-card { min-height: 37rem; }
  .rsvp-story { padding-top: 7rem; }
  .rsvp-story__step { margin-bottom: 5rem; }
  .rsvp-detail-notes { grid-template-columns: 1fr; margin-top: 3rem; }
  .rsvp-detail-notes > div + div { padding-top: 1.3rem; padding-left: 0; border-top: 1px solid var(--line); border-left: 0; }
  .rsvp-cta { min-height: 30rem; }
  .rsvp-form--journey .rsvp-step--details { grid-template-columns: 1fr; }
  .rsvp-step__actions { align-items: stretch; flex-direction: column-reverse; }
  .rsvp-step__actions .button, .rsvp-step__actions .text-link { width: 100%; }
  .rsvp-step__actions .text-link { min-height: 2.7rem; }
}
