/* RSVP (v2, 5 Oct 2026) — moved out of site.css, same tokens, no new colors.
   Tap targets are at least 44px and inputs 17px so iOS doesn't zoom. */
.rsvp-app { max-width: 34rem; margin: 2rem auto 0; text-align: left; }
.rsvp-lookup { display: flex; gap: .75rem; flex-wrap: wrap; justify-content: center; }
.rsvp-lookup input {
  flex: 1 1 16rem; min-height: 44px; font: inherit; font-size: 17px; color: var(--ink);
  background: transparent; border: 1px solid var(--rule); border-radius: 999px;
  padding: 0.7rem 1.2rem;
}
.rsvp-lookup input:focus-visible { border-color: var(--ink); }
.rsvp-lookup .btn, .rsvp-app .btn { min-height: 44px; }
.rsvp-app .btn[disabled] { opacity: .55; cursor: default; }

.rsvp-results { margin-top: 1.5rem; display: grid; gap: .75rem; }
.rsvp-results[hidden] { display: none; }
.rsvp-result-btn {
  display: block; width: 100%; min-height: 44px; text-align: left; font: inherit; font-size: 1rem;
  color: var(--ink); background: transparent; cursor: pointer;
  border: 1px solid var(--rule); border-radius: .5rem; padding: .9rem 1.1rem;
}
.rsvp-result-btn:hover { border-color: var(--ink); }
.rsvp-result-btn b { color: var(--ink-strong); font-weight: 400; }

.rsvp-form-wrap { margin-top: 1.5rem; border: 1px solid var(--rule); border-radius: .5rem; padding: 1.25rem; }
.rsvp-form-wrap[hidden] { display: none; }
.rsvp-form-wrap h3 { font-size: 1.25rem; margin-bottom: .6rem; }
.rsvp-party-name { color: var(--ink-strong); margin: 0 0 .5rem; }
h3.rsvp-party-name { font-size: 1.25rem; }
.rsvp-note { font-size: .92rem; color: var(--ink-soft); margin: .35rem 0; }

.rsvp-member-row {
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap;
  gap: .6rem 1rem; padding: .7rem 0; border-top: 1px solid var(--rule);
}
.rsvp-form > .rsvp-member-row:first-of-type { border-top: 0; }
.rsvp-person { color: var(--ink-strong); }
.rsvp-choice { display: flex; gap: .5rem; }
.rsvp-choice button {
  min-height: 44px; min-width: 44px; font: inherit; font-size: .92rem; padding: .45rem 1rem; border-radius: 999px;
  border: 1px solid var(--rule); background: transparent; color: var(--ink); cursor: pointer;
}
.rsvp-choice button.is-selected { border-color: var(--ink); background: var(--ink); color: var(--paper); }
.rsvp-guest-name { padding: 0 0 .6rem; }
.rsvp-guest-name[hidden] { display: none; }

.rsvp-form-wrap label { display: block; margin-top: 1.1rem; font-size: .8rem; color: var(--ink-soft); letter-spacing: .04em; text-transform: uppercase; }
.rsvp-guest-name label { margin-top: .2rem; }
.rsvp-form-wrap textarea, .rsvp-form-wrap input[type=text], .rsvp-form-wrap input[type=email] {
  display: block; width: 100%; min-height: 44px; margin-top: .4rem; font: inherit; font-size: 17px; color: var(--ink);
  background: transparent; border: 1px solid var(--rule); border-radius: .4rem; padding: .6rem .8rem;
}
.rsvp-form-wrap input:focus-visible, .rsvp-form-wrap textarea:focus-visible { border-color: var(--ink); }
.rsvp-form-wrap textarea { min-height: 4.5rem; resize: vertical; }
.rsvp-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 1rem; margin-top: 1.3rem; }
.rsvp-link {
  min-height: 44px; font: inherit; font-size: .95rem; color: var(--ink); background: none; border: 0; cursor: pointer;
  text-decoration: underline; text-decoration-color: var(--accent); text-underline-offset: 4px;
}

.rsvp-card { outline: none; }
.rsvp-card .btn { margin-top: 1rem; }
.rsvp-summary { list-style: none; margin: .4rem 0 .6rem; padding: 0; }
.rsvp-summary li { display: flex; justify-content: space-between; gap: 1rem; padding: .5rem 0; border-top: 1px solid var(--rule); }
.rsvp-summary li:first-child { border-top: 0; }
.rsvp-summary li span:first-child { color: var(--ink-strong); }
.rsvp-nomatch p { margin: 0 0 1rem; }
.rsvp-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ---------- Round 1 (Oct 2026): food per person, stay, mobile ----------
   One compact block under the Attending rows, shown only once someone in
   the party is coming. Same tokens; the only gold is the Schedule's hex dot. */
.rsvp-details { margin-top: .4rem; }
.rsvp-details[hidden] { display: none; }
.rsvp-food { border: 0; border-top: 1px solid var(--rule); margin: .9rem 0 0; padding: .9rem 0 0; min-width: 0; }
.rsvp-food legend, .rsvp-form-wrap .rsvp-food legend {
  padding: 0; font-size: .8rem; color: var(--ink-soft); letter-spacing: .04em; text-transform: uppercase;
}
.rsvp-hint { font-size: .85rem; color: var(--ink-soft); margin: .35rem 0 .2rem; }
.rsvp-food-person { padding: .55rem 0 .2rem; }
.rsvp-food-person + .rsvp-food-person { border-top: 1px dashed var(--rule); margin-top: .5rem; }
.rsvp-food-person .rsvp-person { margin: 0 0 .2rem; }
.rsvp-food-line { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .4rem .9rem; margin-top: .45rem; }
.rsvp-form-wrap .rsvp-mini, .rsvp-mini {
  display: inline; margin: 0; font-size: .95rem; color: var(--ink); letter-spacing: 0; text-transform: none;
}
.rsvp-choice button { padding-inline: .9rem; }
.rsvp-food input[type=text] { margin-top: .45rem; }
.rsvp-food input[hidden], .rsvp-phone input[hidden] { display: none; }
.rsvp-form-wrap select {
  min-height: 44px; font: inherit; font-size: 17px; color: var(--ink); background: var(--paper);
  border: 1px solid var(--rule); border-radius: .4rem; padding: .45rem .7rem; max-width: 100%;
}
.rsvp-field select { display: block; width: 100%; margin-top: .4rem; }
.rsvp-form-wrap input[type=tel] {
  display: block; width: 100%; min-height: 44px; margin-top: .4rem; font: inherit; font-size: 17px; color: var(--ink);
  background: transparent; border: 1px solid var(--rule); border-radius: .4rem; padding: .6rem .8rem;
}
.rsvp-form-wrap select:focus-visible, .rsvp-form-wrap input[type=tel]:focus-visible { border-color: var(--ink); }
.rsvp-onfile { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .4rem .9rem; margin-top: .45rem; }
.rsvp-form-wrap label.rsvp-check {
  display: flex; align-items: flex-start; gap: .6rem; min-height: 44px; margin-top: .7rem;
  font-size: .95rem; color: var(--ink); letter-spacing: 0; text-transform: none; cursor: pointer;
}
.rsvp-check input { flex: none; width: 20px; height: 20px; margin: .12rem 0 0; accent-color: var(--ink-strong); }

/* nav: "Your weekend" appears only on a remembered device. It is no longer the
   last item (the honeycomb bookend is, 8 Oct 2026), so the row stays centred
   whether it is hidden or not. */
.rsvp-anchor { display: block; height: 0; scroll-margin-top: calc(var(--nav-h) + 1rem); }

/* ---------- Your weekend ---------- */
.rsvp-form-wrap.is-weekend { padding: clamp(1.4rem, 5vw, 2.4rem) clamp(1.1rem, 5vw, 2.6rem); }
.wk { outline: none; }
.wk-kicker { text-align: center; margin: 0; font-size: .8rem; letter-spacing: .22em; text-transform: uppercase; color: var(--ink-soft); }
.rsvp-form-wrap h3.wk-names {
  text-align: center; font-family: var(--font-script); font-weight: 400; color: var(--ink-strong);
  font-size: clamp(2.1rem, 8vw, 2.8rem); line-height: 1.15; margin: .2rem 0 .4rem;
}
.wk-thanks { text-align: center; color: var(--ink-strong); margin: 0 0 .6rem; }
.wk-note { margin: .8rem auto 0; max-width: 26rem; text-align: center; font-style: italic; }
.wk-note p { margin: 0; color: var(--ink-strong); }
.wk-note footer { margin-top: .3rem; font-style: normal; font-size: .85rem; color: var(--ink-soft); }
.wk-facts { display: flex; justify-content: center; flex-wrap: wrap; gap: .6rem 2.2rem; margin: 1.1rem 0 0; }
.wk-facts div { text-align: center; }
.wk-facts dt { font-size: .75rem; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-soft); }
.wk-facts dd { margin: .1rem 0 0; font-size: 1.25rem; color: var(--ink-strong); }
.wk-days { margin-top: 1.3rem; }
.wk-day + .wk-day { margin-top: 1.2rem; }
.rsvp-form-wrap h4.wk-day-label { font-size: .85rem; letter-spacing: .2em; text-transform: uppercase; font-weight: 400; color: var(--ink); margin: 0 0 .7rem; }
.wk-timeline { list-style: none; margin: 0 0 0 .35rem; padding: 0; border-left: 1px solid var(--rule); }
.wk-event { position: relative; padding: 0 0 1.1rem 1.6rem; }
.wk-event:last-child { padding-bottom: .2rem; }
.wk-event::before {
  content: ""; position: absolute; left: -.3rem; top: .45rem; width: .55rem; height: .55rem; background: var(--accent);
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
.wk-time { margin: 0; font-size: .85rem; letter-spacing: .08em; color: var(--ink-soft); }
.wk-title { margin: .05rem 0 .15rem; font-size: 1.2rem; color: var(--ink-strong); }
.wk-place, .wk-dress, .wk-line { margin: .1rem 0 0; font-size: .95rem; }
.wk-place a { text-decoration: underline; text-decoration-color: var(--rule); text-underline-offset: 3px; }
.wk-place a:hover { text-decoration-color: var(--ink); }
.wk-addr { color: var(--ink-soft); }
.wk-cal { text-align: center; margin: 1.2rem 0 0; }
.wk-section { margin-top: 1.5rem; padding-top: 1.1rem; border-top: 1px solid var(--rule); }
.rsvp-form-wrap .wk-section h4 { margin: 0 0 .5rem; font-size: .8rem; letter-spacing: .16em; text-transform: uppercase; font-weight: 400; color: var(--ink-soft); }
.wk-section .btn { margin-top: .8rem; }
.wk-hotel + .wk-hotel { margin-top: 1rem; }
.wk-hotel .btn { margin-top: .55rem; }
.wk-foot { text-align: center; margin: 1.2rem 0 0; }
.wk-foot .rsvp-link { font-size: .9rem; color: var(--ink-soft); }

/* ---------- Dinner (Oct 2026): entrée per person + one optional "Allergies or dietary needs" line ----------
   Entrées stack as full-width choices (they wrap badly as pills on a phone). The
   placeholder's examples (gluten-free, vegan, nut allergy) do the reassuring;
   Chef's plate and the "severe" box appear only once something is typed. */
.rsvp-entree .rsvp-choice { flex-direction: column; gap: .4rem; margin-top: .45rem; }
.rsvp-entree .rsvp-choice button {
  width: 100%; text-align: left; border-radius: .5rem; padding: .6rem .9rem;
  display: flex; align-items: baseline; justify-content: space-between; gap: .75rem;
}
.rsvp-tag { font-size: .78rem; color: var(--ink-soft); white-space: nowrap; }
.rsvp-choice button.is-selected .rsvp-tag { color: inherit; opacity: .8; }
.rsvp-form-wrap .rsvp-needs-label, .rsvp-needs-label { display: block; margin: .8rem 0 .1rem; }
.rsvp-optional { color: var(--ink-soft); font-size: .85rem; }
.rsvp-food .rsvp-check[hidden], .rsvp-food .rsvp-hint[hidden] { display: none; }
.rsvp-ask { color: var(--ink-strong); }
.wk-cake .rsvp-choice { flex-direction: column; gap: .4rem; }
/* the rest of the weekend + travel (Oct 2026) */
.rsvp-extra-row { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .4rem .9rem; padding: .55rem 0; }
.rsvp-extra-row + .rsvp-extra-row { border-top: 1px dashed var(--rule); }
/* the Yes / Maybe / No pills always sit under the event's name and time, so both rows line up at every
   width (beside it, a longer time line pushed one row's pills down and not the other's) */
.rsvp-extra-row { flex-direction: column; align-items: flex-start; }
.rsvp-extra-row > div:first-child { display: flex; flex-direction: column; }
.rsvp-when { font-size: .85rem; color: var(--ink-soft); }
.rsvp-extra .rsvp-choice button, .rsvp-travel .rsvp-choice button { min-height: 40px; font-size: .88rem; padding: .35rem .8rem; }
.rsvp-travel { border-top: 1px solid var(--rule); margin-top: .9rem; padding-top: .7rem; }
/* the travel line reads as a soft, tappable card: title, a quiet "tap to open" line, and a gold +
   that turns into a − when open; same pill border and gold accent as the rest of the form */
.rsvp-travel summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: .9rem;
  min-height: 52px; padding: .7rem .95rem; border: 1px solid var(--rule); border-radius: .6rem; color: var(--ink-strong);
  transition: border-color .2s ease, background-color .2s ease;
}
.rsvp-travel summary::-webkit-details-marker { display: none; }
.rsvp-travel summary:hover, .rsvp-travel summary:focus-visible { border-color: var(--accent); }
.rsvp-travel[open] summary { border-color: var(--accent); }
.rsvp-travel-text { display: flex; flex-direction: column; gap: .1rem; }
.rsvp-travel-title { font-size: 1rem; }
.rsvp-travel-sub { font-size: .82rem; color: var(--ink-soft); }
.rsvp-travel-icon { position: relative; flex: none; width: 1.6rem; height: 1.6rem; border: 1px solid var(--accent); border-radius: 50%; }
.rsvp-travel-icon::before, .rsvp-travel-icon::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: .7rem; height: 1px; background: var(--accent);
  transform: translate(-50%, -50%); transition: transform .25s ease, opacity .25s ease;
}
.rsvp-travel-icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.rsvp-travel[open] .rsvp-travel-icon::after { transform: translate(-50%, -50%) rotate(0deg); opacity: 0; }
@media (prefers-reduced-motion: reduce) { .rsvp-travel summary, .rsvp-travel-icon::before, .rsvp-travel-icon::after { transition: none; } }
.rsvp-travel-line { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .4rem .9rem; margin-top: .55rem; }
.rsvp-travel-line .rsvp-choice { flex-wrap: wrap; gap: .35rem; }
.wk-cake .rsvp-choice button { width: 100%; text-align: left; border-radius: .5rem; display: flex; justify-content: space-between; align-items: baseline; gap: .75rem; }

/* ---------- Readability floor for the RSVP (9 Oct 2026) ----------
   Easy to read for older guests without looking oversized: nothing in the RSVP or "Your weekend"
   below ~15px; small uppercase labels at ~14px with their tracking; body-size hints at 16px.
   Same fonts, colors and spacing rhythm; only sizes move. (Gray contrast is the typography pass's job.) */
.rsvp-form-wrap label, .rsvp-food legend, .rsvp-form-wrap .rsvp-food legend,
.wk-kicker, .rsvp-form-wrap .wk-section h4 { font-size: .9rem; }
.rsvp-form-wrap h4.wk-day-label { font-size: .95rem; }
.wk-facts dt { font-size: .85rem; }
.rsvp-hint, .rsvp-when, .rsvp-optional, .rsvp-note, .wk-time, .wk-note footer, .wk-foot .rsvp-link { font-size: 1rem; }
.rsvp-tag { font-size: .9rem; }
.rsvp-choice button { font-size: 1rem; }
.rsvp-extra .rsvp-choice button, .rsvp-travel .rsvp-choice button { font-size: .98rem; min-height: 44px; }
.rsvp-form-wrap .rsvp-mini, .rsvp-mini { font-size: 1.05rem; }
.rsvp-form-wrap label.rsvp-check { font-size: 1.02rem; }
.rsvp-travel-title { font-size: 1.08rem; }
.rsvp-travel-sub { font-size: .95rem; }
.rsvp-travel[open] .rsvp-travel-tap { display: none; }
.wk-place, .wk-dress, .wk-line { font-size: 1.02rem; }

/* song + contact sections (9 Oct 2026) */
.rsvp-song-label { display: flex !important; align-items: center; gap: .5rem; }
.rsvp-form-wrap .rsvp-song-label { margin-top: .6rem; font-size: 1.05rem; color: var(--ink); letter-spacing: 0; text-transform: none; }
.rsvp-note-icon { flex: none; color: var(--accent); }
.rsvp-contact .rsvp-field:first-of-type label { margin-top: .6rem; }
.rsvp-phone[hidden] { display: none; }

/* ---------- The form in sections (9 Oct 2026) ----------
   Each part of the reply is its own soft panel: a hairline border, a warm paper tint drawn from the
   honeycomb gold, generous padding, and a small gold hexagon before the section name (the same mark as
   the Schedule's timeline). Grouping by "common region" with a light hand: no shadows, no heavy rules,
   fields stay white so they read as things to fill in. */
.rsvp-form .rsvp-food {
  border: 1px solid var(--rule); border-radius: .8rem; margin: 1.1rem 0 0; padding: 1rem 1.15rem 1.15rem; min-width: 0;
  background: #fcfaf5;
}
@supports (background: color-mix(in srgb, red, blue)) {
  .rsvp-form .rsvp-food { background: color-mix(in srgb, var(--paper) 95%, var(--accent) 5%); }
}
.rsvp-form .rsvp-food > legend, .rsvp-form-wrap .rsvp-form .rsvp-food > legend {
  float: left; width: 100%; display: flex; align-items: center; gap: .55rem; padding: 0; margin: 0 0 .35rem;
  font-size: .9rem; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-strong);
}
.rsvp-form .rsvp-food > legend::before {
  content: ""; flex: none; width: .62rem; height: .62rem; background: var(--accent);
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
.rsvp-form .rsvp-food > legend + * { clear: both; }
.rsvp-form .rsvp-food input[type=text], .rsvp-form .rsvp-food input[type=email], .rsvp-form .rsvp-food input[type=tel],
.rsvp-form .rsvp-food select, .rsvp-form .rsvp-food .rsvp-choice button:not(.is-selected) { background: var(--paper); }
.rsvp-form .rsvp-who .rsvp-member-row:first-of-type { border-top: 0; }
.rsvp-form .rsvp-food .rsvp-food-person + .rsvp-food-person { border-top-color: var(--rule); }
.rsvp-form .rsvp-travel { border-top: 0; margin-top: .9rem; padding-top: 0; }
.rsvp-form .rsvp-travel summary { background: var(--paper); }
.rsvp-form .rsvp-details { margin-top: 0; }
.rsvp-fine { font-size: .9rem; line-height: 1.45; color: var(--ink-soft); margin: .5rem 0 0; }
.rsvp-form .rsvp-actions { margin-top: 1.4rem; }
@media (max-width: 560px) {   /* a little more room for the fields inside the card on a phone */
  .rsvp-form .rsvp-food { margin-inline: -.45rem; padding-inline: .9rem; }
}
