:root {
  --paper: #e5e2dc; --ink: #292d28; --accent: #465d48; --accent2: #8a392e;
  --font-display: "League Gothic", Impact, sans-serif; --font-body: "Libre Baskerville", Georgia, serif;
  --text: var(--font-body); --label: Montserrat, sans-serif;
  --w: min(840px, max(560px, (100svh - 56px) * .73)); --pad: calc(var(--w) * .058);
  --salt: url(letterpress-ink-texture.webp);
}
html { background: color-mix(in srgb,var(--paper) 80%,var(--ink)); }
body { color: var(--ink); font: 400 16px/1.55 var(--text); font-variant-numeric: lining-nums; }
.vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
#page { display: grid; justify-items: center; gap: 56px; padding: 28px 0 100px; }
.poster { position: relative; isolation: isolate; width: var(--w); min-height: calc(var(--w) / .73); padding: var(--pad) var(--pad) calc(var(--pad) * .7); display: flex; flex-direction: column; gap: calc(var(--w) * .025); background: var(--paper); box-shadow: 0 1px 2px #0003,0 22px 44px -30px #0008; }
.poster::before { content:""; position:absolute; inset:0; z-index:-1; background: url(fine-cotton.webp) center / 1000px; mix-blend-mode: multiply; opacity:.55; pointer-events:none; }
.poster:nth-child(even)::before { background-position:18% 72%; }
.push { flex:1 1 auto; min-height:24px; }
.fill { flex:1; display:flex; flex-direction:column; justify-content:space-between; gap:18px; }
.hero-names { display:grid; gap:12px; }
.stack { display:grid; gap:12px; min-width:0; }
.ln { position:relative; width:100%; text-align:center; color:var(--ink); -webkit-mask:var(--salt) var(--mx,0) var(--my,0) / 720px; mask:var(--salt) var(--mx,0) var(--my,0) / 720px; }
.ln svg { width:100%; overflow:visible; font-kerning:normal; text-rendering:geometricPrecision; }
.rule { min-height:4px; background:var(--ink); -webkit-mask:var(--salt) 30% 60% / 720px; mask:var(--salt) 30% 60% / 720px; }
.s { transform:translate(2px,-1px); transition:transform 1000ms cubic-bezier(.16,.72,.2,1); }
.ln.s { color:var(--accent); }
.rule.s { background:var(--accent); min-height:8px; }
.is-in .s { transform:none; }
.lab { font:600 11px/1.4 var(--label); letter-spacing:.18em; text-transform:uppercase; }
.foot { margin-top:auto; padding-top:18px; display:grid; grid-template-columns:1fr auto auto; align-items:end; gap:12px; font:600 9px/1.5 var(--label); letter-spacing:.12em; text-transform:uppercase; }
.foot span { overflow-wrap:anywhere; }
.body, .v-small, .v-prose, .course dd { font-size:clamp(16px, calc(var(--w) * .025), 21px); line-height:1.55; text-wrap:pretty; }
.v-prose { max-width:60ch; }
.v-prose p+p { margin-top:1em; }
.row { display:flex; justify-content:space-between; align-items:end; gap:20px; margin-top:24px; }
address { font-style:normal; font-size:17px; }
.btn,.v-copy { display:inline-flex; justify-content:center; align-items:center; min-height:48px; flex:none; border:1px solid var(--ink); padding:14px 18px; background:transparent; color:var(--ink); font:600 11px/1.4 var(--label); letter-spacing:.12em; text-transform:uppercase; text-decoration:none; cursor:pointer; }
.btn:hover,.v-copy:hover {background:var(--ink);color:var(--paper);}
.count-days { flex:1; display:flex; flex-direction:column; justify-content:center; text-align:center; }
.count-days b { font:400 calc(var(--w) * .64)/1 var(--font-display); color:var(--accent); }
.count-days span {font:400 calc(var(--w) * .12)/1.3 "Abril Fatface",Georgia,serif;}
.tally {display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--ink);}
.tally>div {padding:14px 0 0 14px;display:grid;border-left:1px solid var(--ink);}
.tally>div:first-child {border:0;padding-left:0;}
.tally b {font:400 64px/1.1 var(--font-display);font-variant-numeric:tabular-nums;}
.tally span {font:600 10px/1.4 var(--label);letter-spacing:.12em;text-transform:uppercase;}
.times,.carte,.questions { display:grid; gap:22px; flex:1; align-content:space-between; }
.times li,.course,.qa {display:grid;gap:14px;border-top:1px solid var(--ink);padding-top:18px;}
.course dd {text-align:center;}
.v-iban {font-size:clamp(15px,3vw,23px);overflow-wrap:anywhere;font-variant-numeric:tabular-nums;border-block:1px solid var(--ink);padding:18px 0;}
.v-gallery {display:grid;gap:20px;}
.v-gallery img {width:100%;height:auto;}
.v-extra__img {max-height:500px;object-fit:contain;}
.poster--story .v-prose,.poster--dress .v-prose {margin:auto 0;font-size:clamp(22px,calc(var(--w) * .055),42px);line-height:1.45;}
.poster--rsvp {--line:color-mix(in srgb,var(--ink) 40%,transparent);}
.poster--rsvp .v-rsvp {flex:1;min-width:0;}
.poster--rsvp input,.poster--rsvp textarea,.poster--rsvp select {border-radius:0;background:color-mix(in srgb,var(--paper) 85%,white);}
.poster--rsvp button {border-radius:0;min-height:44px;}
.poster--rsvp .vf-submit {font:400 36px/1 var(--font-display);text-transform:uppercase;}
.guide button {min-width:44px;height:44px;}
@media(max-width:719px) {
  :root {--w:calc(100vw - 16px);--pad:18px;}
  #page {gap:10px;padding:8px 0 100px;}
  .poster {min-height:calc(100svh - 16px);gap:18px;}
  .fill {gap:12px;}
  .stack {gap:10px;}
  .foot {font-size:8px;gap:8px;letter-spacing:.08em;}
  .row {flex-direction:column;align-items:stretch;}
  .lab {font-size:10px;}
  .body,.v-small,.v-prose,.course dd {font-size:16px;}
  .tally b {font-size:46px;}
  .tally span {font-size:8px;}
  .poster--story .v-prose,.poster--dress .v-prose {font-size:23px;}
}
@media(prefers-reduced-motion:reduce) {.s {transform:none;transition:none;}}

.poster--story .ln { color: var(--accent2); }
.poster--rsvp .vf-btn--quiet { min-height: 44px; }
.poster--rsvp .vf-btn--primary { font: 400 32px/1.2 var(--font-display); text-transform: uppercase; }
