/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   MAX & ARIADNA · 05.12.2026 · GUAYAQUIL
   Cinematic editorial · dark always · 70/20/10 · no AI-slop.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */


/* ── DESIGN TOKENS ─────────────────────────────────────────────── */
:root {
  /* ── PAPER (cream — for inverse contexts / OG / favicon) ────── */
  --paper:           #F4F1E8;
  --paper-card:      #FBFAF6;
  --paper-warm:      #EFE8D7;
  --paper-deep:      #E8E0CC;

  /* ── INK (dark mode primary background) ─────────────────────── */
  --ink:             #1A1814;
  --ink-deep:        #0A0908;
  --ink-soft:        rgba(26, 24, 20, 0.62);
  --ink-mute:        rgba(26, 24, 20, 0.38);
  --ink-ghost:       rgba(26, 24, 20, 0.18);
  --ink-trace:       rgba(26, 24, 20, 0.08);

  /* ── CREAM (text on ink) ────────────────────────────────────── */
  --cream:           #F4F1E8;
  --cream-soft:      rgba(244, 241, 232, 0.72);
  --cream-mute:      rgba(244, 241, 232, 0.42);
  --cream-ghost:     rgba(244, 241, 232, 0.18);
  --cream-trace:     rgba(244, 241, 232, 0.08);
  --cream-veil:      rgba(244, 241, 232, 0.04);

  /* ── OLIVE (sage clarito · structure / mono accents) ────────── */
  --olive:           #8DA078;
  --olive-soft:      #A4B594;
  --olive-deep:      #6B7C5A;

  /* ── WINE (concho de vino · the 10%) ────────────────────────── */
  --wine:            #722F37;
  --wine-bright:     #722F37;   /* concho de vino — antes #A03A47 */
  --wine-deep:       #5C252C;
  --wine-pale:       #E5B4BA;
  --wine-soft:       rgba(114, 47, 55, 0.55);

  /* ── TYPOGRAPHY ─────────────────────────────────────────────── */
  --f-display:       'Fraunces', Georgia, serif;
  --f-mark:          'Bodoni Moda', Didot, serif;
  --f-body:          'DM Sans', system-ui, -apple-system, sans-serif;
  --f-mono:          'JetBrains Mono', ui-monospace, monospace;

  /* ── EASINGS ────────────────────────────────────────────────── */
  --ease-out:        cubic-bezier(0.23, 1, 0.32, 1);
  --ease-morph:      cubic-bezier(0.65, 0, 0.35, 1);
  --ease-in-out:     cubic-bezier(0.77, 0, 0.175, 1);

  /* ── DURATIONS ──────────────────────────────────────────────── */
  --d-fast:          180ms;
  --d-base:          280ms;
  --d-slow:          480ms;
  --d-cinematic:     1200ms;

  /* ── SHADOWS (tinted) ───────────────────────────────────────── */
  --shadow-1:        0 1px 2px rgba(5, 4, 3, 0.45),
                     0 8px 24px rgba(5, 4, 3, 0.35);
  --shadow-2:        0 2px 4px rgba(5, 4, 3, 0.55),
                     0 24px 60px rgba(92, 37, 44, 0.18);
  --shadow-wine:     0 18px 48px rgba(114, 47, 55, 0.35);

  /* ── SPACE / RADII ──────────────────────────────────────────── */
  --hairline:        0.5px solid var(--cream-ghost);
  --hairline-thin:   0.5px solid var(--cream-trace);
  --page-pad:        clamp(20px, 5vw, 64px);
  --section-y:       clamp(120px, 18vh, 200px);
  --r-0:             0;
}


/* ── RESET ─────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
::selection { background: var(--wine); color: var(--cream); }

html {
  background: var(--ink-deep);
  color: var(--cream);
  font-size: 16px;
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  text-rendering: optimizeLegibility;
}

body {
  font-family: var(--f-body);
  font-weight: 300;
  line-height: 1.55;
  background: var(--ink-deep);
  color: var(--cream);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

img, picture { display: block; max-width: 100%; height: auto; }
button, input, textarea, select { font: inherit; color: inherit; }
button { background: none; border: 0; cursor: pointer; }
a { color: inherit; text-decoration: none; }

em { font-style: italic; }
strong { font-weight: 400; }

/* Skip link */
.skip {
  position: fixed;
  top: -100px;
  left: 16px;
  z-index: 9000;
  padding: 10px 14px;
  font-family: var(--f-mono);
  font-size: 11px;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  background: var(--cream);
  color: var(--ink);
  border: var(--hairline);
  transition: top var(--d-base) var(--ease-out);
}
.skip:focus { top: 16px; outline: none; }


/* ── INTRO · A|M → AM morph · matches sistema-marca-v10 exactly ─── */
/* Background = cream (paper) so mix-blend-mode: multiply on A reads
   wine-on-paper behind M ink — same visual as v10. */
.intro {
  position: fixed;
  inset: 0;
  z-index: 700;
  background: var(--paper);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.intro-morph {
  font-family: var(--f-mark);
  font-variation-settings: "opsz" 96;
  font-style: italic;
  font-weight: 400;
  color: var(--ink);                       /* ink default — v10 */
  text-transform: uppercase;
  font-size: clamp(96px, 14vw, 200px);
  line-height: 1;
  display: inline-flex;
  align-items: center;
  /* letter-spacing: 0.04em → -0.42em · v10 final state */
  letter-spacing: calc(0.04em + var(--morph-progress, 0) * -0.46em);
  /* Initial entrance · fade in */
  opacity: 0;
  transform: translateY(6px);
  transition:
    opacity 400ms var(--ease-out),
    transform 400ms var(--ease-out);
  will-change: opacity, transform, letter-spacing;
}
body.is-intro-ready .intro-morph {
  opacity: 1;
  transform: translateY(0);
}

.intro-morph .a,
.intro-morph .m {
  display: inline-block;
  will-change: transform, color;
}

.intro-morph .sep {
  display: inline-block;
  height: 0.78em;
  background: var(--wine);                 /* v10 pipe = --wine */
  margin: 0 0.22em;
  width: calc(1.5px * max(0, 1 - var(--morph-progress, 0) * 1.6));
  opacity: calc(1 - var(--morph-progress, 0) * 1.8);
}

/* A: shifts color ink → wine + translates RIGHT (+0.1em) · v10 final */
.intro-morph .a {
  color: color-mix(in srgb,
    var(--ink) calc(100% - var(--morph-progress, 0) * 100%),
    var(--wine));
  transform: translateX(calc(var(--morph-progress, 0) * 0.1em));
}
/* Multiply blend kicks in near the end for the wine-on-paper interlock */
body.is-morphed .intro-morph .a {
  mix-blend-mode: multiply;
}

/* M: stays ink, translates LEFT (-0.18em) · v10 final */
.intro-morph .m {
  color: var(--ink);
  transform: translateX(calc(var(--morph-progress, 0) * -0.18em));
}

@supports not (color: color-mix(in srgb, white, black)) {
  .intro-morph .a {
    color: var(--ink);
    transition: color 1400ms var(--ease-morph);
  }
  body.is-morphed .intro-morph .a { color: var(--wine); }
}


/* ── LETTERBOX CURTAIN ──────────────────────────────────────────── */
/* Default: bars off-screen. Two states: letterbox-in (close), letterbox-out (open). */
.letterbox {
  position: fixed;
  inset: 0;
  z-index: 800;
  pointer-events: none;
}
.letterbox-bar {
  position: fixed;
  left: 0;
  right: 0;
  height: 50vh;
  background: var(--ink-deep);
  will-change: transform;
}
.letterbox-top { top: 0;    transform: translateY(-100%); }
.letterbox-bot { bottom: 0; transform: translateY(100%); }

/* PHASE IN: bars slide in to cover (600ms) */
body.letterbox-in .letterbox-bar { transition: transform 600ms var(--ease-morph); }
body.letterbox-in .letterbox-top { transform: translateY(0); }
body.letterbox-in .letterbox-bot { transform: translateY(0); }

/* PHASE OUT: bars slide out (1200ms) revealing hero */
body.letterbox-out .letterbox-bar { transition: transform 1200ms var(--ease-morph); }
/* No transform rule — bars revert to default off-screen position */


/* ── GENERIC REVEAL ON VIEW ─────────────────────────────────────── */
[data-reveal] {
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity 900ms var(--ease-out),
    transform 900ms var(--ease-out);
  will-change: opacity, transform;
}
[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}
[data-reveal][data-reveal-delay="1"].is-visible { transition-delay: 80ms; }
[data-reveal][data-reveal-delay="2"].is-visible { transition-delay: 160ms; }
[data-reveal][data-reveal-delay="3"].is-visible { transition-delay: 240ms; }
[data-reveal][data-reveal-delay="4"].is-visible { transition-delay: 320ms; }


/* ── CUSTOM CURSOR ──────────────────────────────────────────────── */
.cursor {
  position: fixed;
  top: 0; left: 0;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--cream);
  opacity: 0.85;
  pointer-events: none;
  z-index: 9999;
  transform: translate(-50%, -50%);
  transition:
    width var(--d-base) var(--ease-out),
    height var(--d-base) var(--ease-out),
    background 220ms var(--ease-out),
    opacity 220ms var(--ease-out);
  display: none;
  mix-blend-mode: difference;
  will-change: transform;
}
.cursor.is-hover {
  width: 32px;
  height: 32px;
  background: var(--wine-bright);
  opacity: 0.7;
}
.cursor.is-click { transform: translate(-50%, -50%) scale(0.8); }

@media (hover: hover) and (pointer: fine) {
  .cursor { display: block; }
  html.has-custom-cursor,
  html.has-custom-cursor * { cursor: none !important; }
}


/* ── TOOLTIP ────────────────────────────────────────────────────── */
.tooltip {
  position: fixed;
  top: 0; left: 0;
  background: var(--cream);
  color: var(--ink);
  padding: 10px 14px;
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 13px;
  letter-spacing: -0.005em;
  line-height: 1.3;
  white-space: nowrap;
  pointer-events: none;
  z-index: 9000;
  opacity: 0;
  transform: translate(-50%, calc(-100% - 10px));
  transition:
    opacity 220ms var(--ease-out),
    transform 220ms var(--ease-out);
  box-shadow: var(--shadow-1);
}
.tooltip::before {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 50%;
  width: 8px;
  height: 8px;
  background: var(--wine);
  transform: translateX(-50%) rotate(45deg);
}
.tooltip.is-visible {
  opacity: 1;
  transform: translate(-50%, calc(-100% - 14px));
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   HERO
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.hero {
  position: relative;
  min-height: 100vh;
  min-height: 100lvh;
  overflow: hidden;
  background: var(--ink-deep);
  display: flex;
  flex-direction: column;
}

.hero-photo {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
}
.hero-photo-img {
  position: absolute;
  inset: -2%;
  background-image: url('/photos/hero-silueta.jpg');
  background-image: image-set(
    url('/photos/hero-silueta.avif') type('image/avif'),
    url('/photos/hero-silueta.webp') type('image/webp'),
    url('/photos/hero-silueta.jpg') type('image/jpeg')
  );
  background-position: center 62%;   /* la silueta del beso queda en cuadro en desktop */
  background-size: cover;
  background-repeat: no-repeat;
  transform: scale(1.04);
  will-change: transform;
}
.hero-photo::after {
  content: '';
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg,
      rgba(10, 9, 8, 0.60) 0%,
      rgba(10, 9, 8, 0.18) 22%,
      rgba(10, 9, 8, 0.30) 55%,
      rgba(10, 9, 8, 0.95) 100%),
    radial-gradient(ellipse 100% 60% at 50% 75%,
      rgba(10, 9, 8, 0.25) 0%,
      transparent 70%);
  pointer-events: none;
}
.hero-grain {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.06;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* hero frame · cinematic viewfinder · top + bottom captions, corner brackets */
.hero-frame {
  position: absolute;
  left: 0; right: 0;
  z-index: 3;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 22px clamp(28px, 5vw, 64px);
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
  pointer-events: none;
}
.hero-frame-top { top: 0; }
.hero-frame-bot { bottom: 0; }
.hero-frame-c {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  color: var(--cream-trace);
  letter-spacing: 0.32em;
}
.hero-corner {
  position: absolute;
  width: 18px;
  height: 18px;
  border-color: var(--cream-mute);
  border-style: solid;
  border-width: 0;
}
.hero-corner.tl { top: 16px;    left: 18px;  border-top-width: 1px;    border-left-width: 1px;  }
.hero-corner.tr { top: 16px;    right: 18px; border-top-width: 1px;    border-right-width: 1px; }
.hero-corner.bl { bottom: 16px; left: 18px;  border-bottom-width: 1px; border-left-width: 1px;  }
.hero-corner.br { bottom: 16px; right: 18px; border-bottom-width: 1px; border-right-width: 1px; }

.hero-content {
  position: relative;
  z-index: 2;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 0 clamp(28px, 5vw, 64px) clamp(72px, 11vh, 132px);
  max-width: 1320px;
  width: 100%;
}

[data-anim="hero-1"], [data-anim="hero-2"], [data-anim="hero-3"] {
  opacity: 0;
  transform: translateY(14px);
  transition:
    opacity 1000ms var(--ease-out),
    transform 1000ms var(--ease-out);
  will-change: opacity, transform;
}
body.is-loaded [data-anim="hero-1"] { transition-delay: 0ms;   opacity: 1; transform: translateY(0); }
body.is-loaded [data-anim="hero-2"] { transition-delay: 120ms; opacity: 1; transform: translateY(0); }
body.is-loaded [data-anim="hero-3"] { transition-delay: 240ms; opacity: 1; transform: translateY(0); }

.hero-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--cream);
  margin-bottom: 36px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.hero-eyebrow-rule {
  width: 32px;
  height: 1px;
  background: var(--wine-bright);
  display: inline-block;
}
html[data-guest] #guestEyebrow { display: inline; }

.hero-title {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 144;
  font-style: italic;
  font-weight: 300;
  font-size: clamp(64px, 13vw, 220px);
  line-height: 0.86;
  letter-spacing: -0.05em;
  color: var(--cream);
  margin-bottom: 36px;
}
.hero-title .amp,
.hero-title .dot { color: var(--wine-bright); }
.hero-title .amp { margin: 0 0.01em; }

.hero-sub {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(17px, 1.7vw, 22px);
  line-height: 1.5;
  color: var(--cream-soft);
  max-width: 560px;
  margin-bottom: 32px;
}
.hero-sub strong {
  font-style: normal;
  font-family: var(--f-body);
  font-weight: 400;
  color: var(--cream);
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   01 · STATS
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.stats {
  background: var(--ink-deep);
  border-top: var(--hairline-thin);
  border-bottom: var(--hairline-thin);
}
.stats-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  max-width: 1400px;
  margin: 0 auto;
}
.stat {
  padding: 36px clamp(20px, 3vw, 40px);
  border-left: var(--hairline-thin);
  position: relative;
  transition: background var(--d-base) var(--ease-out);
}
.stat:first-child { border-left: 0; }
@media (hover: hover) and (pointer: fine) {
  .stat:hover { background: var(--cream-veil); }
}

.stat-label {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 10px;
}
.stat-num { color: var(--cream-mute); }

.stat-value {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(22px, 2.6vw, 36px);
  line-height: 1.05;
  letter-spacing: -0.015em;
  color: var(--cream);
}

.stat-note {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.24em;
  color: var(--cream-mute);
  margin-top: 10px;
  text-transform: lowercase;
}

.stat-cta { display: flex; flex-direction: column; justify-content: space-between; }
.stat-cta .stat-label { color: var(--wine-pale); }

.stat-btn {
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.22em;
  color: var(--cream);
  text-transform: uppercase;
  margin-top: 16px;
  transition: gap var(--d-base) var(--ease-out);
}
.stat-btn .arr {
  display: inline-block;
  transition: transform var(--d-base) var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .stat-btn:hover { gap: 14px; }
  .stat-btn:hover .arr { transform: translateX(4px); }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   02 · STORY · word by word
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.story {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink-deep);
}
.story-inner {
  max-width: 1240px;
  margin: 0 auto;
}
.story-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 56px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.story-eyebrow-num { color: var(--cream-mute); }
.story-eyebrow-bar {
  width: 24px;
  height: 1px;
  background: var(--wine-bright);
  display: inline-block;
}

.story-h {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 96;
  font-style: italic;
  font-weight: 300;
  font-size: clamp(32px, 5.5vw, 84px);
  line-height: 1.08;
  letter-spacing: -0.025em;
  color: var(--cream);
  max-width: 1040px;
}
.story-h .w {
  display: inline-block;
  opacity: 0.18;
  transform: translateY(8px);
  transition:
    opacity 700ms var(--ease-out),
    transform 700ms var(--ease-out);
}
.story-h .w.lit { opacity: 1; transform: translateY(0); }
.story-h .accent {
  color: var(--wine-bright);
  font-size: 1.06em;
  letter-spacing: -0.035em;
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   03 · PINNED
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.pinned {
  background: var(--ink);
  padding: clamp(100px, 14vh, 160px) 0;
  position: relative;
}
.pinned-wrap {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(36px, 5vw, 80px);
  max-width: 1380px;
  margin: 0 auto;
  padding: 0 var(--page-pad);
  align-items: flex-start;
}
.pinned-photo {
  position: sticky;
  top: 80px;
  height: 80vh;
  min-height: 520px;
  overflow: hidden;
}
.pinned-photo-img {
  position: absolute;
  inset: -2%;
  background-image: url('/photos/kiss-vertical.jpg');
  background-image: image-set(
    url('/photos/kiss-vertical.avif') type('image/avif'),
    url('/photos/kiss-vertical.webp') type('image/webp'),
    url('/photos/kiss-vertical.jpg') type('image/jpeg')
  );
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  will-change: transform;
}
.pinned-photo::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(10, 9, 8, 0) 60%, rgba(10, 9, 8, 0.55) 100%);
  pointer-events: none;
}
.pinned-caption {
  position: absolute;
  bottom: 18px;
  left: 20px;
  right: 20px;
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream-soft);
  display: flex;
  justify-content: space-between;
  text-transform: uppercase;
}

.pinned-content { padding: 40px 0; }
.pinned-block {
  margin-bottom: clamp(80px, 14vh, 140px);
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 1000ms var(--ease-out), transform 1000ms var(--ease-out);
}
.pinned-block.is-visible { opacity: 1; transform: translateY(0); }
.pinned-block:last-child { margin-bottom: 0; }

.pinned-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 20px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.pinned-eyebrow-num { color: var(--cream-mute); }
.pinned-eyebrow-bar { width: 24px; height: 1px; background: var(--wine-bright); display: inline-block; }

.pinned-h {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 96;
  font-style: normal;
  font-weight: 300;
  font-size: clamp(28px, 3.6vw, 50px);
  line-height: 1.08;
  letter-spacing: -0.022em;
  color: var(--cream);
  margin-bottom: 18px;
}
.pinned-h em { font-style: italic; color: var(--cream); }

.pinned-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 16px;
  line-height: 1.6;
  color: var(--cream-soft);
  max-width: 440px;
}

/* VENUE BLOCK · interactive map (lazy) + venue info card */
.venue-block {
  margin-top: 36px;
  max-width: 460px;
  display: grid;
  gap: 0;
}
.venue-map {
  position: relative;
  height: 240px;
  border: var(--hairline);
  overflow: hidden;
  background: var(--ink);
}
.venue-map.is-live > :not(.mapboxgl-canvas-container):not(.mapboxgl-control-container) {
  display: none !important;
}
.venue-info {
  display: grid;
  gap: 10px;
  padding: 20px 22px;
  border: var(--hairline);
  border-top: 0;
  background: var(--ink-deep);
}
.venue-row {
  display: grid;
  grid-template-columns: 100px 1fr;
  gap: 16px;
  align-items: baseline;
  padding-bottom: 10px;
  border-bottom: var(--hairline-thin);
}
.venue-row:last-of-type { border-bottom: 0; padding-bottom: 0; }
.venue-label {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
}
.venue-name {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(16px, 1.8vw, 19px);
  line-height: 1.2;
  color: var(--cream);
}
.venue-link {
  margin-top: 14px;
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream);
  text-transform: uppercase;
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
  border-bottom: var(--hairline);
  padding-bottom: 4px;
  align-self: start;
  transition: gap var(--d-base) var(--ease-out), color 220ms var(--ease-out);
}
.venue-link .arr { transition: transform var(--d-base) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .venue-link:hover { gap: 14px; color: var(--wine-pale); }
  .venue-link:hover .arr { transform: translateX(4px); }
}

/* Custom marker for Mapbox AM monogram */
.venue-marker {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--ink-deep);
  border: 1px solid var(--wine-bright);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--f-mark);
  font-variation-settings: "opsz" 96;
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  color: var(--cream);
  letter-spacing: 0;
  box-shadow: 0 0 0 4px rgba(160, 58, 71, 0.18);
}
.venue-marker .a { color: var(--wine-bright); margin-right: 1px; }
.venue-marker .m { color: var(--cream); margin-left: -2px; }

/* MAP locked layers · used as cartographic placeholder before Mapbox loads */
.map-locked {
  margin-top: 36px;
  position: relative;
  height: 240px;
  max-width: 460px;
  border: var(--hairline);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--ink);
}
.map-locked-frame {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 60% 50% at center, rgba(160, 58, 71, 0.18) 0%, transparent 70%);
  pointer-events: none;
}
.map-locked-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(to right, var(--cream-trace) 1px, transparent 1px),
    linear-gradient(to bottom, var(--cream-trace) 1px, transparent 1px);
  background-size: 36px 36px;
  opacity: 0.6;
  pointer-events: none;
  -webkit-mask-image: radial-gradient(ellipse at center, black 0%, transparent 85%);
          mask-image: radial-gradient(ellipse at center, black 0%, transparent 85%);
}
.map-locked-pin {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 10px;
  height: 10px;
  margin: -5px 0 0 -5px;
  border-radius: 50%;
  background: var(--wine-bright);
  box-shadow:
    0 0 0 4px rgba(160, 58, 71, 0.18),
    0 0 0 12px rgba(160, 58, 71, 0.08);
  pointer-events: none;
  animation: mapPulse 2.8s var(--ease-out) infinite;
}
@keyframes mapPulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(160, 58, 71, 0.20), 0 0 0 12px rgba(160, 58, 71, 0.08); }
  50%      { box-shadow: 0 0 0 6px rgba(160, 58, 71, 0.28), 0 0 0 18px rgba(160, 58, 71, 0.04); }
}
.map-locked-content {
  position: relative;
  z-index: 2;
  text-align: center;
  padding: 0 28px;
}
.map-locked-text {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(18px, 2.1vw, 24px);
  line-height: 1.3;
  color: var(--cream);
  margin-bottom: 18px;
}
.map-locked-text em { color: var(--wine-bright); font-style: italic; }
.map-locked-meta {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
  margin-bottom: 14px;
}
.map-locked-coords {
  font-family: var(--f-mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.36em;
  color: var(--cream-trace);
  text-transform: uppercase;
}
.map-locked-corner {
  position: absolute;
  font-family: var(--f-mono);
  font-size: 8px;
  letter-spacing: 0.36em;
  color: var(--cream-trace);
  text-transform: uppercase;
  pointer-events: none;
}
.map-locked-corner.tl { top: 10px; left: 12px; }
.map-locked-corner.tr { top: 10px; right: 12px; }
.map-locked-corner.bl { bottom: 10px; left: 12px; }
.map-locked-corner.br { bottom: 10px; right: 12px; }
@media (prefers-reduced-motion: reduce) {
  .map-locked-pin { animation: none; }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   04 · DATE BIG + COUNTDOWN
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.date {
  position: relative;
  padding: clamp(140px, 20vh, 220px) var(--page-pad) 0;
  background: var(--ink-deep);
  overflow: hidden;
  text-align: center;
}
.date-bg {
  position: absolute;
  inset: 0;
  background-image: url('/photos/walking-wide.jpg');
  background-image: image-set(
    url('/photos/walking-wide.avif') type('image/avif'),
    url('/photos/walking-wide.webp') type('image/webp'),
    url('/photos/walking-wide.jpg') type('image/jpeg')
  );
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  opacity: 0.16;
  filter: grayscale(0.5) brightness(0.55);
  will-change: transform;
}
.date::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse at center,
      rgba(10, 9, 8, 0.35) 0%,
      rgba(10, 9, 8, 0.92) 70%);
  pointer-events: none;
}

.date-inner {
  position: relative;
  z-index: 2;
  max-width: 1240px;
  margin: 0 auto;
}

.date-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.36em;
  color: var(--cream-mute);
  text-transform: uppercase;
  margin-bottom: 48px;
}

.date-big {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 144;
  font-style: italic;
  font-weight: 300;
  font-size: clamp(80px, 16vw, 240px);
  line-height: 0.86;
  letter-spacing: -0.06em;
  color: var(--cream);
  margin-bottom: 36px;
  font-variant-numeric: oldstyle-nums;
}
.date-big .date-d,
.date-big .date-dot { display: inline-block; }
.date-big .date-dot { color: var(--wine-bright); }

.date-sub {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(18px, 2vw, 26px);
  line-height: 1.45;
  color: var(--cream-soft);
  max-width: 620px;
  margin: 0 auto;
}
.date-sub em { color: var(--wine-bright); font-style: italic; }

/* Countdown sits flush below date-big, same dark section */
.countdown {
  position: relative;
  z-index: 2;
  margin-top: clamp(80px, 12vh, 140px);
  padding: 56px var(--page-pad);
  display: grid;
  grid-template-columns: auto 1fr;
  gap: clamp(28px, 4vw, 64px);
  align-items: center;
  max-width: 1240px;
  margin-left: auto;
  margin-right: auto;
  border-top: var(--hairline-thin);
  border-bottom: var(--hairline-thin);
}
.countdown-label {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.36em;
  color: var(--olive);
  text-transform: uppercase;
  text-align: left;
}
.countdown-grid {
  display: flex;
  justify-content: flex-end;
  align-items: baseline;
  gap: clamp(16px, 2.5vw, 36px);
}
.cd-cell {
  text-align: right;
  min-width: 84px;
  font-variant-numeric: tabular-nums;
}
.cd-num {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(40px, 5vw, 76px);
  line-height: 1;
  color: var(--cream);
  letter-spacing: -0.02em;
}
.cd-lbl {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream-mute);
  margin-top: 10px;
  text-transform: uppercase;
}
.cd-sep {
  font-family: var(--f-display);
  font-style: italic;
  color: var(--wine-bright);
  font-size: clamp(24px, 3vw, 40px);
  line-height: 1;
  align-self: flex-start;
  margin-top: clamp(12px, 1.5vw, 20px);
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   05 · MONTAGE
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.montage {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink);
  position: relative;
}
.montage-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(38px, 6vw, 88px);
  line-height: 1.04;
  letter-spacing: -0.03em;
  color: var(--cream);
  margin-bottom: clamp(56px, 8vh, 88px);
  max-width: 820px;
}
.montage-h em { font-style: italic; color: var(--cream); }

.montage-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: clamp(12px, 2vw, 24px);
  max-width: 1400px;
  margin: 0 auto;
}
.m-tile {
  position: relative;
  overflow: hidden;
  background: var(--ink-deep);
  will-change: transform;
}
.m-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 800ms var(--ease-out);
  will-change: transform;
}
.m-tile::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 60%, rgba(5, 4, 3, 0.55) 100%);
  pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  .m-tile:hover img { transform: scale(1.04); }
}
.m-1 { grid-column: 1 / 9;  aspect-ratio: 16 / 10; }
.m-2 { grid-column: 9 / 13; aspect-ratio: 3 / 4; }
.m-3 { grid-column: 1 / 5;  aspect-ratio: 3 / 4; }
.m-4 { grid-column: 5 / 13; aspect-ratio: 16 / 10; }

.m-caption {
  position: absolute;
  bottom: 16px;
  left: 16px;
  z-index: 2;
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream);
  text-transform: uppercase;
  background: rgba(5, 4, 3, 0.55);
  padding: 6px 10px;
  backdrop-filter: blur(6px) saturate(120%);
  -webkit-backdrop-filter: blur(6px) saturate(120%);
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   06 · DETAILS
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.details {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink-deep);
}
.details-inner { max-width: 1240px; margin: 0 auto; }

.details-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 32px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.details-eyebrow-num { color: var(--cream-mute); }
.details-eyebrow-bar { width: 24px; height: 1px; background: var(--wine-bright); display: inline-block; }

.details-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(40px, 6vw, 84px);
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: var(--cream);
  margin-bottom: 72px;
  max-width: 720px;
}
.details-h em { font-style: italic; color: var(--cream); }

.detail-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  border-top: var(--hairline);
}
.d-card {
  padding: 46px 38px 46px 0;
  border-bottom: var(--hairline);
  position: relative;
  transition: background var(--d-base) var(--ease-out);
}
.d-card:nth-child(2n) {
  padding-left: 38px;
  border-left: var(--hairline);
}
.d-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--wine);
  opacity: 0;
  transition: opacity 320ms var(--ease-out);
  pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  .d-card:hover::before { opacity: 0.06; }
}
.d-card:active::before { opacity: 0.04; }

.d-num {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
  margin-bottom: 18px;
}
.d-h {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(26px, 3vw, 38px);
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--cream);
  margin-bottom: 14px;
}
.d-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cream-soft);
  max-width: 400px;
}
.d-more {
  margin-top: 20px;
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream);
  text-transform: uppercase;
  border-bottom: var(--hairline);
  padding-bottom: 4px;
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  transition: gap var(--d-base) var(--ease-out), color 220ms var(--ease-out);
}
.d-more .arr { transition: transform var(--d-base) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .d-more:hover { gap: 12px; color: var(--wine-pale); }
  .d-more:hover .arr { transform: translateX(4px); }
}

/* Card 5 · Preguntas → opens FAQ modal. Spans both columns under the 2×2 grid. */
.d-card-faq {
  grid-column: 1 / -1;
  padding-left: 0 !important;
  padding-right: 0 !important;
  border-left: 0 !important;
}
.d-card-faq .d-more {
  /* slightly more present, since this is a CTA card */
  margin-top: 22px;
}

/* FAQ modal · widened panel + reuse .faq-list accordion styles inside */
.modal-faq-wide .modal-panel {
  max-width: 820px;
}
.modal-faq-wide .faq-list {
  margin-top: 8px;
  border-top: var(--hairline);
}
.modal-faq-wide .faq-item { border-bottom: var(--hairline); }
.modal-faq-wide .faq-q {
  padding: 22px 0;
  grid-template-columns: 44px 1fr auto;
  gap: 14px;
  font-size: clamp(17px, 1.7vw, 22px);
}
.modal-faq-wide .faq-a-inner {
  padding: 0 0 26px 58px;
}
.modal-faq-wide .faq-a-inner em {
  color: var(--cream);
  font-style: italic;
}

/* Color swatches in Details · Card 2 (Colores a evitar) */
.d-swatches {
  display: flex;
  gap: 12px;
  margin-top: 22px;
}
.d-sw {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 0.5px solid var(--cream-ghost);
  display: inline-block;
  transition: transform var(--d-base) var(--ease-out);
}
.d-sw-white { background: #FFFFFF; }
.d-sw-olive { background: var(--olive); }
.d-sw-wine  { background: var(--wine); }
.d-sw-brown { background: #5A3E2B; }   /* marrón profundo */
@media (hover: hover) and (pointer: fine) {
  .d-sw:hover { transform: scale(1.12); }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   07 · GALLERY · editorial asymmetric grid + lightbox triggers
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.gallery {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink);
}
.gallery-inner { max-width: 1400px; margin: 0 auto; }

.gallery-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 32px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.gallery-eyebrow-num { color: var(--cream-mute); }
.gallery-eyebrow-bar { width: 24px; height: 1px; background: var(--wine-bright); display: inline-block; }

.gallery-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(36px, 5.5vw, 76px);
  line-height: 1.04;
  letter-spacing: -0.028em;
  color: var(--cream);
  margin-bottom: clamp(56px, 8vh, 80px);
  max-width: 820px;
}
.gallery-h em { font-style: italic; color: var(--cream); }

.gallery-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: clamp(12px, 2vw, 24px);
}
.g-tile {
  position: relative;
  overflow: hidden;
  background: var(--ink-deep);
  cursor: pointer;
  text-align: left;
  padding: 0;
  transition: transform 380ms var(--ease-out);
  will-change: transform;
}
.g-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 800ms var(--ease-out), filter 600ms var(--ease-out);
  will-change: transform;
}
.g-tile::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 60%, rgba(5, 4, 3, 0.6) 100%);
  pointer-events: none;
  transition: opacity 280ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .g-tile:hover img { transform: scale(1.04); }
  .g-tile:hover::after { opacity: 0.6; }
}
.g-tile:active { transform: scale(0.998); }

.g-tag {
  position: absolute;
  bottom: 14px;
  left: 14px;
  z-index: 2;
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream);
  text-transform: uppercase;
}

/* layout (12-col, editorial asymmetric)                          */
/* walking-wide landscape big · proposal-moment landscape         */
/* proposal-vertical | kiss-vertical | ring-horizontal            */
.g-1 { grid-column: 1 / 8;  aspect-ratio: 16 / 10; }
.g-2 { grid-column: 8 / 13; aspect-ratio: 16 / 11; }
.g-3 { grid-column: 1 / 5;  aspect-ratio: 3 / 4; }
.g-4 { grid-column: 5 / 9;  aspect-ratio: 3 / 4; }
.g-5 { grid-column: 9 / 13; aspect-ratio: 3 / 4; }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   08 · GIFTS
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.gifts {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink-deep);
}
.gifts-inner { max-width: 1240px; margin: 0 auto; }

.gifts-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 32px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.gifts-eyebrow-num { color: var(--cream-mute); }
.gifts-eyebrow-bar { width: 24px; height: 1px; background: var(--wine-bright); display: inline-block; }

.gifts-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(40px, 6vw, 84px);
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: var(--cream);
  margin-bottom: 24px;
  max-width: 800px;
}
.gifts-h em { font-style: italic; color: var(--cream); }

.gifts-lead {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(18px, 1.9vw, 24px);
  line-height: 1.5;
  color: var(--cream-soft);
  max-width: 640px;
  margin-bottom: 72px;
}

.gifts-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  border-top: var(--hairline);
}
.gift-card {
  padding: 48px 38px 48px 0;
  border-bottom: var(--hairline);
  position: relative;
}
.gift-card:nth-child(2n) {
  padding-left: 38px;
  border-left: var(--hairline);
}
.gift-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--wine);
  opacity: 0;
  transition: opacity 320ms var(--ease-out);
  pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  .gift-card:hover::before { opacity: 0.06; }
}

.gift-num {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
  margin-bottom: 14px;
}
.gift-tag {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 22px;
}
.gift-h {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(26px, 3vw, 40px);
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--cream);
  margin-bottom: 14px;
}
.gift-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cream-soft);
  max-width: 400px;
  margin-bottom: 26px;
}
.gift-link {
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.22em;
  color: var(--cream);
  text-transform: uppercase;
  position: relative;
  z-index: 1;
  border-bottom: var(--hairline);
  padding-bottom: 4px;
  transition: gap var(--d-base) var(--ease-out), color 220ms var(--ease-out);
}
.gift-link .arr { transition: transform var(--d-base) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .gift-link:hover { gap: 14px; color: var(--wine-pale); }
  .gift-link:hover .arr { transform: translateX(4px); }
}
.gift-link[aria-disabled="true"] { color: var(--cream-mute); pointer-events: none; }
.gift-todo {
  margin-top: 8px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 12px;
  color: var(--cream-mute);
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   09 · FAQ
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.faq {
  padding: var(--section-y) var(--page-pad);
  background: var(--ink);
}
.faq-inner { max-width: 1100px; margin: 0 auto; }

.faq-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 32px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.faq-eyebrow-num { color: var(--cream-mute); }
.faq-eyebrow-bar { width: 24px; height: 1px; background: var(--wine-bright); display: inline-block; }

.faq-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(40px, 6vw, 80px);
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: var(--cream);
  margin-bottom: 64px;
  max-width: 720px;
}
.faq-h em { font-style: italic; color: var(--cream); }

.faq-list { border-top: var(--hairline); }
.faq-item { border-bottom: var(--hairline); }
.faq-q {
  width: 100%;
  padding: 28px 0;
  background: none;
  border: 0;
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(19px, 2.1vw, 28px);
  line-height: 1.3;
  color: var(--cream);
  letter-spacing: -0.012em;
  text-align: left;
  cursor: pointer;
  display: grid;
  grid-template-columns: 56px 1fr auto;
  gap: 16px;
  align-items: center;
  transition: color 220ms var(--ease-out);
}
.faq-q-num {
  font-family: var(--f-mono);
  font-style: normal;
  font-weight: 500;
  font-size: 10px;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
}
@media (hover: hover) and (pointer: fine) {
  .faq-q:hover { color: var(--wine-pale); }
}

.faq-icon {
  position: relative;
  width: 22px;
  height: 22px;
  flex-shrink: 0;
}
.faq-icon .bar {
  position: absolute;
  left: 50%;
  top: 50%;
  background: var(--wine-bright);
  transition: transform 320ms var(--ease-out);
}
.faq-icon .bar.h { width: 14px; height: 1px; transform: translate(-50%, -50%); }
.faq-icon .bar.v { width: 1px; height: 14px; transform: translate(-50%, -50%); }
.faq-item.open .faq-icon .bar.v { transform: translate(-50%, -50%) scaleY(0); }

.faq-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height 460ms var(--ease-out);
}
.faq-a-inner {
  padding: 0 0 32px 72px;
  max-width: 760px;
}
.faq-a p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 16px;
  line-height: 1.65;
  color: var(--cream-soft);
}
.faq-item.open .faq-a { max-height: 600px; }

.faq-more {
  margin-top: 48px;
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--cream);
  text-transform: uppercase;
  padding: 14px 22px;
  border: var(--hairline);
  display: inline-flex;
  align-items: baseline;
  gap: 12px;
  transition:
    background var(--d-base) var(--ease-out),
    color var(--d-base) var(--ease-out),
    border-color var(--d-base) var(--ease-out),
    gap var(--d-base) var(--ease-out);
}
.faq-more .arr { transition: transform var(--d-base) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .faq-more:hover {
    background: var(--cream);
    color: var(--ink);
    border-color: var(--cream);
    gap: 16px;
  }
  .faq-more:hover .arr { transform: translateX(4px); }
}
.faq-more:active { transform: scale(0.998); }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   10 · RSVP · wine dramatic close
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.rsvp {
  position: relative;
  padding: clamp(160px, 22vh, 260px) var(--page-pad) clamp(120px, 16vh, 180px);
  background: var(--wine-deep);
  color: var(--cream);
  overflow: hidden;
  text-align: center;
}
.rsvp-glow {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 80% 60% at 50% 42%, rgba(160, 58, 71, 0.55) 0%, transparent 70%);
  pointer-events: none;
}
.rsvp-inner {
  position: relative;
  z-index: 2;
  max-width: 760px;
  margin: 0 auto;
}

.rsvp-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.36em;
  color: rgba(244, 241, 232, 0.62);
  text-transform: uppercase;
  margin-bottom: 32px;
}

.rsvp-h {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 144;
  font-style: italic;
  font-weight: 300;
  font-size: clamp(56px, 11vw, 180px);
  line-height: 0.92;
  letter-spacing: -0.045em;
  color: var(--cream);
  margin-bottom: 32px;
}
.rsvp-accent { color: var(--wine-pale); font-style: italic; }

.rsvp-sub {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(17px, 1.8vw, 22px);
  line-height: 1.55;
  color: rgba(244, 241, 232, 0.84);
  max-width: 540px;
  margin: 0 auto 64px;
}

/* form */
.rsvp-form {
  display: grid;
  gap: 22px;
  text-align: left;
  max-width: 540px;
  margin: 0 auto;
}
.field { display: grid; gap: 8px; }
.field-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 18px;
  transition: grid-template-columns 280ms var(--ease-out);
}
.field-row.is-single { grid-template-columns: 1fr; }
#ninosField {
  transition:
    opacity 280ms var(--ease-out),
    transform 280ms var(--ease-out);
}
#ninosField.is-hidden {
  display: none;
  opacity: 0;
  pointer-events: none;
}
.field label {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 14px;
  letter-spacing: 0;
  color: rgba(244, 241, 232, 0.88);
}
.field label em { color: var(--cream); font-style: italic; }
.field-opt {
  font-family: var(--f-mono);
  font-size: 10px;
  font-style: normal;
  letter-spacing: 0.24em;
  color: rgba(244, 241, 232, 0.5);
  text-transform: uppercase;
  margin-left: 6px;
}
.field input,
.field textarea {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.4;
  background: rgba(10, 9, 8, 0.18);
  color: var(--cream);
  border: 0.5px solid rgba(244, 241, 232, 0.22);
  padding: 14px 16px;
  outline: none;
  transition:
    border-color 220ms var(--ease-out),
    background 220ms var(--ease-out);
}
.field input:focus,
.field textarea:focus {
  border-color: var(--cream);
  background: rgba(10, 9, 8, 0.32);
}
.field textarea { resize: vertical; min-height: 76px; }

.rsvp-actions { margin-top: 12px; text-align: center; }
.btn-submit {
  display: inline-flex;
  align-items: baseline;
  gap: 12px;
  font-family: var(--f-mono);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.24em;
  color: var(--wine-deep);
  background: var(--cream);
  text-transform: uppercase;
  padding: 18px 28px;
  transition:
    transform var(--d-base) var(--ease-out),
    box-shadow var(--d-slow) var(--ease-out),
    background 220ms var(--ease-out),
    color 220ms var(--ease-out);
  will-change: transform;
  cursor: pointer;
}
.btn-submit .arr { transition: transform var(--d-base) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .btn-submit:hover {
    transform: translateY(-1px);
    box-shadow: var(--shadow-wine);
  }
  .btn-submit:hover .arr { transform: translateX(4px); }
}
.btn-submit:active { transform: scale(0.997); }
.btn-submit[disabled] { opacity: 0.6; cursor: progress; }

.rsvp-error {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 14px;
  color: var(--wine-pale);
  text-align: center;
  margin-top: 8px;
}

/* success overlay */
.rsvp-success {
  position: absolute;
  inset: 0;
  z-index: 5;
  background: var(--wine-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 600ms var(--ease-out);
}
.rsvp-success.is-visible {
  opacity: 1;
  pointer-events: auto;
}
.rsvp-success-inner { text-align: center; max-width: 560px; padding: 0 var(--page-pad); }
.rsvp-success-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.36em;
  color: var(--wine-pale);
  text-transform: uppercase;
  margin-bottom: 28px;
}
.rsvp-success-h {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(40px, 6vw, 76px);
  line-height: 1.02;
  letter-spacing: -0.03em;
  color: var(--cream);
  margin-bottom: 18px;
}
.rsvp-success-sub {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 18px;
  color: rgba(244, 241, 232, 0.82);
  line-height: 1.5;
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   FOOTER
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   LIGHTBOX
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: rgba(5, 4, 3, 0.94);
  backdrop-filter: blur(10px) saturate(120%);
  -webkit-backdrop-filter: blur(10px) saturate(120%);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(20px, 5vw, 60px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 320ms var(--ease-out);
}
.lightbox.is-open {
  opacity: 1;
  pointer-events: auto;
}

.lb-figure {
  position: relative;
  max-width: min(1200px, 100%);
  max-height: 88vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  transform: scale(0.97);
  opacity: 0;
  transition:
    transform 380ms var(--ease-out),
    opacity 380ms var(--ease-out);
}
.lightbox.is-open .lb-figure { transform: scale(1); opacity: 1; }

.lb-img {
  max-width: 100%;
  max-height: 84vh;
  object-fit: contain;
  background: var(--ink-deep);
}
.lb-caption {
  margin-top: 18px;
  display: flex;
  align-items: center;
  gap: 18px;
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
}
.lb-counter { color: var(--cream); }

.lb-close, .lb-nav {
  position: absolute;
  z-index: 2;
  width: 48px;
  height: 48px;
  background: transparent;
  border: var(--hairline);
  color: var(--cream);
  font-family: var(--f-display);
  font-style: italic;
  font-size: 22px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  transition:
    background 220ms var(--ease-out),
    color 220ms var(--ease-out),
    border-color 220ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .lb-close:hover, .lb-nav:hover {
    background: var(--cream);
    color: var(--ink);
    border-color: var(--cream);
  }
}
.lb-close { top: 20px; right: 20px; }
.lb-prev { left: 20px; top: 50%; transform: translateY(-50%); }
.lb-next { right: 20px; top: 50%; transform: translateY(-50%); }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   MODAL (vestimenta + faq extended)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.modal {
  position: fixed;
  inset: 0;
  z-index: 1100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(20px, 5vw, 60px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 320ms var(--ease-out);
}
.modal.is-open {
  opacity: 1;
  pointer-events: auto;
}
.modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(5, 4, 3, 0.78);
  backdrop-filter: blur(8px) saturate(120%);
  -webkit-backdrop-filter: blur(8px) saturate(120%);
}
.modal-panel {
  position: relative;
  max-width: 680px;
  width: 100%;
  max-height: 88vh;
  overflow-y: auto;
  background: var(--ink);
  border: var(--hairline);
  padding: clamp(32px, 5vw, 64px);
  transform: translateY(24px) scale(0.96);
  opacity: 0;
  transition:
    transform 400ms var(--ease-out),
    opacity 400ms var(--ease-out);
}
.modal.is-open .modal-panel {
  transform: translateY(0) scale(1);
  opacity: 1;
}

.modal-close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 36px;
  height: 36px;
  border: var(--hairline);
  color: var(--cream);
  font-family: var(--f-display);
  font-style: italic;
  font-size: 18px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  transition:
    background 220ms var(--ease-out),
    color 220ms var(--ease-out),
    border-color 220ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .modal-close:hover { background: var(--cream); color: var(--ink); border-color: var(--cream); }
}

.modal-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive);
  text-transform: uppercase;
  margin-bottom: 22px;
}
.modal-h {
  font-family: var(--f-display);
  font-style: normal;
  font-weight: 300;
  font-size: clamp(28px, 4vw, 48px);
  line-height: 1.05;
  letter-spacing: -0.025em;
  color: var(--cream);
  margin-bottom: 36px;
}
.modal-h em { font-style: italic; color: var(--cream); }

.modal-section {
  padding: 24px 0;
  border-top: var(--hairline);
}
.modal-section:first-of-type { border-top: 0; padding-top: 0; }
.modal-section p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cream-soft);
  max-width: 540px;
}
.modal-section strong { color: var(--cream); font-weight: 400; }

.modal-section-label {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--cream-mute);
  text-transform: uppercase;
  margin-bottom: 12px;
}
.modal-fine {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 13px;
  color: var(--cream-mute);
  margin-top: 14px;
}
.modal-section-warn .modal-section-label { color: var(--wine-pale); }

.swatches {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.sw {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: inline-block;
  border: 0.5px solid var(--cream-ghost);
}
.sw-1 { background: #D9CBB0; }      /* beige arena */
.sw-2 { background: #5A3E2B; }      /* marrón profundo */
.sw-3 { background: #2A3550; }      /* navy */
.sw-4 { background: #3A3A3A; }      /* gris carbón */
.sw-5 { background: #B85C3E; }      /* terracota */
.sw-6 { background: #6E3D55; }      /* plum */

.modal-faq { display: grid; gap: 28px; }
.mq { padding-bottom: 24px; border-bottom: var(--hairline); }
.mq:last-child { border-bottom: 0; padding-bottom: 0; }
.mq-q {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(18px, 1.9vw, 22px);
  line-height: 1.3;
  letter-spacing: -0.012em;
  color: var(--cream);
  margin-bottom: 10px;
}
.mq-a {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cream-soft);
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   FOCUS · accessibility
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--wine-bright);
  outline-offset: 3px;
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   RESPONSIVE · mobile cinematic
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
@media (max-width: 920px) {
  .stats-grid { grid-template-columns: 1fr 1fr; }
  .stat:nth-child(3) { border-top: var(--hairline-thin); }
  .stat:nth-child(2n + 1) { border-left: 0; }

  .pinned-wrap { grid-template-columns: 1fr; }
  .pinned-photo {
    position: relative;
    top: auto;
    height: 64vh;
    min-height: 400px;
  }
  .pinned-content { padding: 32px 0 0; }
  .pinned-block { margin-bottom: clamp(56px, 10vh, 90px); }

  .countdown { grid-template-columns: 1fr; gap: 28px; }
  .countdown-grid {
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: 24px;
  }
  .cd-cell { text-align: left; min-width: auto; flex: 1 1 calc(50% - 12px); }
  .cd-sep { display: none; }

  .montage-grid { grid-template-columns: 1fr; }
  .m-1, .m-2, .m-3, .m-4 {
    grid-column: 1 / -1;
    aspect-ratio: 4 / 3;
  }

  .detail-grid { grid-template-columns: 1fr; }
  .d-card { padding: 36px 0 !important; border-left: 0 !important; }
  .d-card:nth-child(2n) { padding-left: 0 !important; }

  .gallery-grid { grid-template-columns: 1fr; }
  .g-1, .g-2, .g-3, .g-4, .g-5 {
    grid-column: 1 / -1;
    aspect-ratio: 16 / 11;
  }

  .gifts-grid { grid-template-columns: 1fr; }
  .gift-card { padding: 36px 0 !important; border-left: 0 !important; }
  .gift-card:nth-child(2n) { padding-left: 0 !important; }

  .faq-q { grid-template-columns: 38px 1fr auto; gap: 12px; }
  .faq-a-inner { padding-left: 50px; }

  .field-row { grid-template-columns: 1fr; }


  .hero-frame-bot,
  .hero-frame-c { display: none; }
  .hero-corner { width: 14px; height: 14px; }
  .hero-corner.tl, .hero-corner.bl { left: 12px; }
  .hero-corner.tr, .hero-corner.br { right: 12px; }
  .hero-corner.tl, .hero-corner.tr { top: 12px; }
  .hero-corner.bl, .hero-corner.br { bottom: 12px; }

  .lb-close { top: 12px; right: 12px; }
  .lb-prev { left: 8px; }
  .lb-next { right: 8px; }
}

@media (max-width: 560px) {
  .stats-grid { grid-template-columns: 1fr; }
  .stat { border-left: 0 !important; border-top: var(--hairline-thin); padding: 28px var(--page-pad); }
  .stat:first-child { border-top: 0; }

  .cd-cell { flex: 1 1 100%; }
  .countdown-grid { gap: 18px; }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   REDUCED MOTION · graceful degradation
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
  /* Word-by-word and reveals → show immediately */
  .story-h .w { opacity: 1; transform: none; }
  .pinned-block { opacity: 1; transform: none; }
  [data-anim] { opacity: 1; transform: none; }
  /* Disable parallax */
  .hero-photo-img,
  .pinned-photo-img,
  .date-bg { transform: none !important; }
  /* No custom cursor under reduced-motion */
  .cursor { display: none !important; }
  html.has-custom-cursor,
  html.has-custom-cursor * { cursor: auto !important; }
  /* Letterbox: skip animation, vanish */
  .letterbox-bar { transition: none; }
  /* Intro morph: skip entirely, go straight to hero */
  .intro { display: none; }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V2 · LA CARTA — paper-first override layer
   Veredicto del consejo: de case study a carta.
   Cream dominante (la regla 70/20/10 del brand), ink como tinta,
   wine como acento. Voz tipográfica Fraunces italic en vez de mono.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* ── 1 · TOKEN SWAP · backgrounds become paper, text becomes ink ── */
:root {
  --ink:        #F4F1E8;                    /* main background → paper   */
  --ink-deep:   #EFE8D7;                    /* deep background → warm    */
  --cream:      #1A1814;                    /* main text → ink           */
  --cream-soft: rgba(26, 24, 20, 0.72);
  --cream-mute: rgba(26, 24, 20, 0.46);
  --cream-ghost:rgba(26, 24, 20, 0.20);
  --cream-trace:rgba(26, 24, 20, 0.09);
  --cream-veil: rgba(26, 24, 20, 0.04);
  --wine-bright:#722F37;                    /* richer wine on light bg   */
  --wine-pale:  #722F37;                    /* accent on light bg — concho de vino */
  --shadow-1:   0 1px 2px rgba(26, 24, 20, 0.08),
                0 8px 24px rgba(26, 24, 20, 0.07);
  --shadow-2:   0 2px 4px rgba(26, 24, 20, 0.10),
                0 24px 60px rgba(114, 47, 55, 0.10);
}
::selection { background: var(--wine); color: #F4F1E8; }

/* ── 2 · SCOPED RESTORES · contexts that stay dark/photographic ─── */

/* Intro morph: ink letters on paper (matches sistema-marca-v10) */
.intro {
  --ink: #1A1814;
  background: #F4F1E8;
}

/* Hero: photo with dark gradient + cream text — photographic context */
.hero {
  --cream:      #F4F1E8;
  --cream-soft: rgba(244, 241, 232, 0.72);
  --cream-mute: rgba(244, 241, 232, 0.42);
  --wine-bright:#722F37;   /* concho de vino también sobre la foto */
}
.hero { background: #0A0908; }

/* RSVP: wine dramatic close stays — the wax seal of the letter */
.rsvp, .rsvp-success {
  --cream:      #F4F1E8;
  --cream-soft: rgba(244, 241, 232, 0.72);
  --cream-mute: rgba(244, 241, 232, 0.42);
  --cream-ghost:rgba(244, 241, 232, 0.18);
  --wine-pale:  #E5B4BA;
  --ink:        #1A1814;
}

/* Lightbox: dark photographic overlay */
.lightbox {
  --cream:      #F4F1E8;
  --cream-mute: rgba(244, 241, 232, 0.42);
  --cream-ghost:rgba(244, 241, 232, 0.18);
  --ink:        #1A1814;
}

/* Chips over photos keep cream text */
.m-caption, .pinned-caption { color: #F4F1E8; }

/* ── 3 · DATE section · paper vignette instead of dark ──────────── */
.date::before {
  background: radial-gradient(ellipse at center,
    rgba(244, 241, 232, 0.25) 0%,
    rgba(244, 241, 232, 0.95) 72%);
}
.date-bg { opacity: 0.20; filter: grayscale(0.35) brightness(1.02); }

/* ── 4 · LETTER VOICE · Fraunces italic replaces mono labels ────── */
.story-eyebrow, .pinned-eyebrow, .details-eyebrow,
.gallery-eyebrow, .gifts-eyebrow {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  letter-spacing: 0.01em;
  text-transform: none;
  color: var(--olive-deep);
}
.stat-label {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 15px;
  letter-spacing: 0.01em;
  text-transform: none;
  color: var(--olive-deep);
}
.stat-note, .cd-lbl {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 13px;
  letter-spacing: 0.01em;
  text-transform: none;
}
.countdown-label, .date-eyebrow {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  letter-spacing: 0.02em;
  text-transform: none;
}
.hero-eyebrow {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  letter-spacing: 0.02em;
  text-transform: none;
}
.m-caption, .pinned-caption {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 13px;
  letter-spacing: 0.01em;
  text-transform: none;
}
.venue-label, .gift-tag {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 14px;
  letter-spacing: 0.01em;
  text-transform: none;
  color: var(--olive-deep);
}
.modal-eyebrow, .modal-section-label {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 14px;
  letter-spacing: 0.02em;
  text-transform: none;
}
.rsvp-eyebrow, .rsvp-success-eyebrow {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  letter-spacing: 0.02em;
  text-transform: none;
}
.field-opt {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 12px;
  letter-spacing: 0.01em;
  text-transform: none;
}

/* CTAs: DM Sans suave en vez de mono uppercase */
.stat-btn, .d-more, .gift-link, .venue-link, .faq-more, .btn-submit {
  font-family: var(--f-body);
  font-weight: 400;
  font-size: 14px;
  letter-spacing: 0.04em;
  text-transform: none;
}
.btn-submit { font-weight: 500; font-size: 15px; }

/* ── 5 · FAQ modal · sin columna de numeración ───────────────────── */
.modal-faq-wide .faq-q { grid-template-columns: 1fr auto; }
.modal-faq-wide .faq-a-inner { padding-left: 0; }

/* ── 6 · BOTANICAL · anthurium line-art (moodboard de Ariadna) ──── */
.botanical {
  display: flex;
  justify-content: center;
  margin-top: clamp(56px, 9vh, 96px);
}
.botanical-svg {
  width: clamp(64px, 7vw, 92px);
  height: auto;
  opacity: 0.85;
}
.bot-stem, .bot-spadix { color: var(--olive-deep); }
.bot-spathe { color: var(--wine); }

/* ── 7 · Field note (acompañantes, lenguaje humano) ──────────────── */
.field-note {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 13px;
  line-height: 1.5;
  color: rgba(244, 241, 232, 0.62);
  margin-top: -8px;
}

/* ── 8 · Hairline tweaks on paper ────────────────────────────────── */
.stats { border-color: rgba(26, 24, 20, 0.12); }
.tooltip { box-shadow: 0 4px 18px rgba(26, 24, 20, 0.18); }

/* ── 9 · Botanical relocated to date section close ───────────────── */
.date .botanical {
  position: relative;
  z-index: 2;
  margin: clamp(48px, 8vh, 80px) auto 0;
  padding-bottom: clamp(56px, 8vh, 88px);
}

/* ── 10 · Spacing after text removals ────────────────────────────── */
.rsvp-h { margin-bottom: clamp(48px, 7vh, 72px); }     /* sin sub debajo */
.details-eyebrow { margin-bottom: 48px; }              /* sin heading debajo */

/* ── 11 · Registro de invitados · estados del RSVP ───────────────── */
.rsvp-form[hidden] { display: none; }

.rsvp-cupo {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(15px, 1.6vw, 18px);
  color: rgba(244, 241, 232, 0.78);
  margin: -28px auto 48px;
  max-width: 540px;
}

.rsvp-state {
  max-width: 540px;
  margin: 0 auto;
  padding: 36px 32px;
  border: 0.5px solid rgba(244, 241, 232, 0.22);
  background: rgba(10, 9, 8, 0.14);
  text-align: center;
}
.rsvp-state-h {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(20px, 2.4vw, 28px);
  line-height: 1.25;
  color: #F4F1E8;
  margin-bottom: 12px;
}
.rsvp-state-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(244, 241, 232, 0.74);
}
.rsvp-state-loading { padding: 8px 0; }

.rsvp-edit {
  margin-top: 22px;
  font-family: var(--f-body);
  font-weight: 400;
  font-size: 14px;
  letter-spacing: 0.04em;
  color: #F4F1E8;
  border-bottom: 0.5px solid rgba(244, 241, 232, 0.4);
  padding-bottom: 4px;
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  transition: gap 280ms var(--ease-out), color 220ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .rsvp-edit:hover { gap: 12px; color: #E5B4BA; }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V2 · MOBILE LAYER — invitación de primera en el celular
   (la mayoría de los invitados abre esto desde WhatsApp en un teléfono)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* taps limpios en todo el sitio */
a, button { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }

@media (max-width: 700px) {
  :root {
    --section-y: clamp(88px, 13vh, 120px);
    --page-pad: 20px;
  }

  /* ── Fotos móviles (~4x más livianas) ─────────────────────────── */
  .hero-photo-img {
    background-image: url('/photos/hero-silueta-m.jpg');
    background-image: image-set(
      url('/photos/hero-silueta-m.avif') type('image/avif'),
      url('/photos/hero-silueta-m.webp') type('image/webp'),
      url('/photos/hero-silueta-m.jpg') type('image/jpeg'));
    background-position: center 40%;   /* silueta + torre en cuadro en portrait */
  }
  .pinned-photo-img {
    background-image: url('/photos/kiss-vertical-m.jpg');
    background-image: image-set(
      url('/photos/kiss-vertical-m.avif') type('image/avif'),
      url('/photos/kiss-vertical-m.webp') type('image/webp'),
      url('/photos/kiss-vertical-m.jpg') type('image/jpeg'));
  }
  .date-bg {
    background-image: url('/photos/walking-wide-m.jpg');
    background-image: image-set(
      url('/photos/walking-wide-m.avif') type('image/avif'),
      url('/photos/walking-wide-m.webp') type('image/webp'),
      url('/photos/walking-wide-m.jpg') type('image/jpeg'));
  }

  /* ── Hero · título seguro + viewport visible real ─────────────── */
  .hero { min-height: 100svh; }
  .hero-title {
    font-size: clamp(42px, 12.5vw, 64px);
    letter-spacing: -0.04em;
    line-height: 0.94;
  }
  .hero-sub { font-size: 16px; max-width: 100%; }
  .hero-content {
    padding-bottom: calc(clamp(56px, 9vh, 96px) + env(safe-area-inset-bottom));
  }

  /* ── Intro morph proporcionado al ancho ───────────────────────── */
  .intro-morph { font-size: clamp(56px, 21vw, 96px); }

  /* ── Date + countdown en una fila de 3 ────────────────────────── */
  /* más chica que el ancho disponible → deja aire a los lados, no apretada */
  .date-big { font-size: clamp(38px, 11.5vw, 90px); letter-spacing: -0.01em; }
  .countdown { padding: 40px var(--page-pad); gap: 18px; }
  .countdown-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 14px;
  }
  .cd-cell { text-align: center; min-width: 0; flex: none; }
  .cd-num { font-size: clamp(34px, 10vw, 46px); }

  /* ── Forms · sin zoom de iOS + touch targets generosos ────────── */
  .field input, .field textarea { font-size: 16px; padding: 15px 16px; }
  .btn-submit { width: 100%; justify-content: center; padding: 18px 24px; }
  /* Toques cómodos de pulgar: mínimo 44px de alto (WCAG / iOS HIG). */
  .stat-btn, .d-more, .gift-link, .venue-link, .faq-more {
    min-height: 44px;
    padding-top: 11px;
    padding-bottom: 11px;
  }
  .faq-q { padding: 20px 0; }

  /* ── Modales → bottom sheet ───────────────────────────────────── */
  .modal { align-items: flex-end; padding: 0; }
  .modal-panel {
    max-width: 100%;
    width: 100%;
    max-height: 92dvh;
    border-radius: 16px 16px 0 0;
    border-left: 0;
    border-right: 0;
    border-bottom: 0;
    padding: 32px 22px calc(44px + env(safe-area-inset-bottom));
    transform: translateY(100%);
  }
  .modal.is-open .modal-panel { transform: translateY(0); }
  .modal-close { top: 14px; right: 14px; width: 40px; height: 40px; }

  /* ── RSVP ──────────────────────────────────────────────────────── */
  .rsvp-cupo { margin: -20px auto 40px; }
  .rsvp-state { padding: 28px 20px; }

  /* ── Pinned + venue ───────────────────────────────────────────── */
  .pinned-photo { height: 56vh; min-height: 340px; }
  .venue-row { grid-template-columns: 84px 1fr; gap: 12px; }
}

/* ── Stats compactos 2×2 en pantallas chicas ─────────────────────── */
@media (max-width: 560px) {
  .stats-grid { grid-template-columns: 1fr 1fr; }
  .stat {
    padding: 24px 18px !important;
    border-left: 0.5px solid rgba(26, 24, 20, 0.12) !important;
    border-top: 0.5px solid rgba(26, 24, 20, 0.12);
  }
  .stat:nth-child(2n + 1) { border-left: 0 !important; }
  .stat:nth-child(-n + 2) { border-top: 0; }
  .stat-value { font-size: clamp(19px, 5.5vw, 24px); }
}

/* ── Teléfonos muy angostos ──────────────────────────────────────── */
@media (max-width: 360px) {
  .hero-title { font-size: clamp(36px, 12vw, 44px); }
  .date-big { font-size: clamp(34px, 10.5vw, 50px); letter-spacing: -0.01em; }
  .intro-morph { font-size: clamp(48px, 20vw, 64px); }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V2 · MOBILE DENSITY — los vh de desktop dejaban vacíos enormes
   en pantallas chicas. Medido sobre 375×812: ahorra ~600px de aire.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
@media (max-width: 700px) {
  :root { --section-y: clamp(64px, 9vh, 84px); }

  /* Pinned · era 114px por lado + 81px entre bloques */
  .pinned { padding-top: 72px; padding-bottom: 72px; }
  .pinned-block { margin-bottom: 56px; }
  .pinned-content { padding-top: 28px; }

  /* Date · era 162px arriba + 97px al countdown + 130px del anthurium */
  .date { padding-top: 80px; }
  .countdown { margin-top: 44px; }
  .date .botanical {
    margin-top: 28px;
    padding-bottom: 44px;
  }
  .botanical-svg { width: 56px; }

  /* RSVP · era 179px arriba / 130px abajo */
  .rsvp {
    padding-top: 96px;
    padding-bottom: calc(88px + env(safe-area-inset-bottom));
  }
  .rsvp-h { margin-bottom: 36px; }
  .rsvp-cupo { margin: -16px auto 32px; }
}

/* ── 12 · Fixes del recorrido visual móvil ───────────────────────── */
@media (max-width: 560px) {
  /* La celda Confirmar ocupa la fila completa — el CTA respira en una línea */
  .stat-cta {
    grid-column: 1 / -1;
    border-top: 0.5px solid rgba(26, 24, 20, 0.12);
    border-left: 0 !important;
  }
  .stat-btn { white-space: nowrap; }
}
@media (max-width: 700px) {
  .botanical-svg { width: 68px; }
}

/* ── 13 · Stats móviles · grilla sin huérfanos ───────────────────── */
/* Fecha + Hora (cortos) arriba · Lugar y Confirmar a fila completa   */
@media (max-width: 560px) {
  .stat:nth-child(1) { order: 1; border-top: 0; }
  .stat:nth-child(3) {
    order: 2;
    border-top: 0;
    border-left: 0.5px solid rgba(26, 24, 20, 0.12) !important;
  }
  .stat:nth-child(2) {
    order: 3;
    grid-column: 1 / -1;
    border-top: 0.5px solid rgba(26, 24, 20, 0.12);
  }
  .stat-cta { order: 4; }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V3 · SUITE DE PAPELERÍA — materialidad + interacciones de papel
   La invitación se toca: cards que se voltean, programa que se
   despliega, sello de cera al confirmar, caligrafía que se escribe.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* ── 1 · PAPEL · textura de algodón + sombras de cartulina ───────── */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='280' height='280'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='280' height='280' filter='url(%23p)'/%3E%3C/svg%3E");
}
main, footer { position: relative; z-index: 2; }

:root {
  --paper-shadow:
    0 0.5px 0 rgba(26, 24, 20, 0.10),
    0 1px 2px rgba(26, 24, 20, 0.05),
    0 10px 28px rgba(26, 24, 20, 0.07),
    0 24px 56px rgba(114, 47, 55, 0.05);
  --paper-shadow-lift:
    0 1px 2px rgba(26, 24, 20, 0.07),
    0 16px 36px rgba(26, 24, 20, 0.10),
    0 32px 72px rgba(114, 47, 55, 0.08);
}

/* tarjetas con cuerpo de cartulina */
.venue-info,
.gift-card,
.rsvp-state,
.modal-panel {
  background: var(--paper-card, #FBFAF6);
  border-radius: 4px;
  box-shadow: var(--paper-shadow);
  border: 0;
}
.venue-info { padding: 24px 26px; }
.gift-card {
  padding: 40px 34px !important;
  border: 0 !important;
}
.gifts-grid {
  border-top: 0;
  gap: 20px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
}
.gift-card::before { border-radius: 4px; }
.rsvp-state {
  background: rgba(10, 9, 8, 0.14);
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.22);
  border-radius: 6px;
}

@media (hover: hover) and (pointer: fine) {
  .gift-card { transition: box-shadow 360ms var(--ease-out), transform 360ms var(--ease-out); }
  .gift-card:hover { box-shadow: var(--paper-shadow-lift); transform: translateY(-2px); }
}

/* ── 2 · CALIGRAFÍA · el título se escribe con pluma ─────────────── */
.hero-title .L {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.10em) rotate(2.5deg);
  clip-path: inset(-25% 105% -25% -10%);
}
.hero-title .Lsp { display: inline-block; white-space: pre; }
body.is-loaded .hero-title .L {
  opacity: 1;
  transform: translateY(0) rotate(0deg);
  clip-path: inset(-25% -10% -25% -10%);
  transition:
    opacity 60ms linear var(--d, 0ms),
    transform 340ms var(--ease-out) var(--d, 0ms),
    clip-path 300ms var(--ease-out) var(--d, 0ms);
}
/* el punto final cae con peso de sello */
.hero-title .L.dot { transform: translateY(-0.25em) scale(1.4); clip-path: none; }
body.is-loaded .hero-title .L.dot {
  transform: translateY(0) scale(1);
  transition:
    opacity 50ms linear var(--d, 0ms),
    transform 420ms cubic-bezier(0.34, 1.46, 0.54, 1) var(--d, 0ms);
}
/* sub espera a que termine la escritura */
body.is-loaded [data-anim="hero-3"] { transition-delay: 1750ms; }

/* ── 3 · FLIP CARDS · detalles que se voltean ────────────────────── */
.d-card.flip {
  padding: 0 !important;
  border: 0 !important;
  perspective: 1100px;
  min-height: 300px;
  cursor: pointer;
  outline-offset: 4px;
}
.d-card.flip::before { display: none; }
/* Control accesible del giro · cubre la tarjeta por debajo de las caras:
   el mouse/dedo toca las caras (el click burbujea al article) y el teclado
   enfoca este botón. El anillo de foco se dibuja en la tarjeta. */
.flip-toggle {
  position: absolute;
  inset: 0;
  -webkit-appearance: none;
  appearance: none;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
}
.flip-toggle:focus-visible { outline: none; }
.d-card.flip:has(> .flip-toggle:focus-visible) {
  outline: 2px solid var(--wine-bright);
  outline-offset: 4px;
  border-radius: 4px;
}
.flip-inner {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: inherit;
  transform-style: preserve-3d;
  transition: transform 640ms cubic-bezier(0.4, 0.2, 0.2, 1);
}
.d-card.flip.is-flipped .flip-inner { transform: rotateY(180deg); }

.paper-face {
  position: absolute;
  inset: 0;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  background: var(--paper-card, #FBFAF6);
  border-radius: 4px;
  box-shadow: var(--paper-shadow);
  padding: 38px 32px;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  gap: 12px;
}
.flip-back {
  transform: rotateY(180deg);
  justify-content: center;
  text-align: center;
  align-items: center;
}
@media (hover: hover) and (pointer: fine) {
  .d-card.flip:hover .paper-face { box-shadow: var(--paper-shadow-lift); }
  .d-card.flip:not(.is-flipped):hover .flip-inner { transform: rotateY(7deg); }
}

/* dog-ear · esquina doblada como invitación a voltear */
.d-corner {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 0 0 26px 26px;
  border-color: transparent transparent var(--paper-deep, #E8E0CC) transparent;
  border-bottom-right-radius: 4px;
  transition: border-width 240ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .d-card.flip:hover .d-corner { border-width: 0 0 34px 34px; }
}
.flip-hint {
  position: absolute;
  bottom: 14px;
  right: 38px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 12px;
  color: var(--cream-mute);
}
.flip-back-label {
  font-family: var(--f-display);
  font-style: italic;
  font-size: 14px;
  color: var(--olive-deep);
}
.flip-back-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 14px;
  line-height: 1.55;
  color: var(--cream-soft);
}
.flip-back-big {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(40px, 5vw, 56px);
  letter-spacing: -0.03em;
  color: var(--cream);
  line-height: 1;
}
.flip-back-list {
  list-style: none;
  display: grid;
  gap: 8px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 15px;
  color: var(--cream-soft);
}
.d-swatches-lg { justify-content: center; margin-top: 4px; }
.d-swatches-lg .d-sw { width: 30px; height: 30px; }

/* ── 4 · PROGRAMA · papel doblado que se despliega ───────────────── */
.programa { margin-top: 26px; max-width: 440px; }
.programa-toggle {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  color: var(--cream);
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
  border-bottom: 0.5px solid var(--cream-ghost);
  padding-bottom: 4px;
  transition: color 220ms var(--ease-out);
}
.programa-arr {
  display: inline-block;
  transition: transform 360ms var(--ease-out);
}
.programa-toggle[aria-expanded="true"] .programa-arr { transform: rotate(180deg); }
@media (hover: hover) and (pointer: fine) {
  .programa-toggle:hover { color: var(--wine-pale); }
}

.programa-fold {
  perspective: 900px;
  max-height: 0;
  overflow: hidden;
  transition: max-height 700ms var(--ease-morph);
}
.programa.is-open .programa-fold { max-height: 420px; }

.fold-slat {
  display: grid;
  grid-template-columns: 76px 1fr;
  gap: 16px;
  align-items: baseline;
  padding: 16px 20px;
  margin-top: 10px;
  background: var(--paper-card, #FBFAF6);
  border-radius: 4px;
  box-shadow: var(--paper-shadow);
  transform-origin: top center;
  transform: rotateX(-96deg);
  opacity: 0;
  transition:
    transform 560ms var(--ease-morph),
    opacity 360ms linear;
}
.fold-slat:first-child { margin-top: 18px; }
.programa.is-open .fold-slat { transform: rotateX(0deg); opacity: 1; }
.programa.is-open .fold-slat:nth-child(1) { transition-delay: 0ms; }
.programa.is-open .fold-slat:nth-child(2) { transition-delay: 120ms; }
.programa.is-open .fold-slat:nth-child(3) { transition-delay: 240ms; }
.programa.is-open .fold-slat:nth-child(4) { transition-delay: 360ms; }

.fold-h {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 400;
  font-size: 20px;
  color: var(--wine);
  letter-spacing: -0.01em;
}
.fold-slat em {
  font-family: var(--f-body);
  font-style: normal;
  font-weight: 300;
  font-size: 15px;
  color: var(--cream-soft);
}

/* ── 5 · SELLO DE CERA · confirma con peso ───────────────────────── */
.wax-seal {
  width: 104px;
  height: 104px;
  margin: 0 auto 30px;
  border-radius: 46% 54% 52% 48% / 53% 46% 54% 47%;
  background:
    radial-gradient(circle at 36% 30%, #8d3d48 0%, #722F37 52%, #5C252C 100%);
  box-shadow:
    inset 0 2px 5px rgba(244, 241, 232, 0.16),
    inset 0 -5px 12px rgba(0, 0, 0, 0.30),
    inset 3px 0 8px rgba(0, 0, 0, 0.12),
    0 8px 22px rgba(0, 0, 0, 0.30);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--f-mark);
  font-variation-settings: "opsz" 96;
  font-style: italic;
  font-weight: 400;
  font-size: 38px;
  line-height: 1;
  letter-spacing: -0.12em;
  transform: rotate(-6deg);
}
.wax-seal .ws-a { color: #E5B4BA; }
.wax-seal .ws-m { color: #F4F1E8; }

/* estampado al aparecer el success */
.rsvp-success.is-visible .wax-seal {
  animation: sealStamp 640ms cubic-bezier(0.34, 1.3, 0.5, 1) both;
}
@keyframes sealStamp {
  0%   { transform: rotate(-14deg) scale(1.9); opacity: 0; }
  55%  { transform: rotate(-5deg) scale(0.94); opacity: 1; }
  78%  { transform: rotate(-7deg) scale(1.04); }
  100% { transform: rotate(-6deg) scale(1); }
}

/* sello chico en el estado "ya confirmaron" */
.wax-seal-mini {
  width: 56px;
  height: 56px;
  margin: 0 auto 18px;
  border-radius: 46% 54% 52% 48% / 53% 46% 54% 47%;
  background: radial-gradient(circle at 36% 30%, #8d3d48 0%, #722F37 52%, #5C252C 100%);
  box-shadow:
    inset 0 1px 3px rgba(244, 241, 232, 0.16),
    inset 0 -3px 7px rgba(0, 0, 0, 0.30),
    0 4px 12px rgba(0, 0, 0, 0.25);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--f-mark);
  font-style: italic;
  font-size: 20px;
  letter-spacing: -0.12em;
  transform: rotate(-6deg);
}
.wax-seal-mini .ws-a { color: #E5B4BA; }
.wax-seal-mini .ws-m { color: #F4F1E8; }

/* ── 6 · TILT · cartulina en la mano (desktop) ───────────────────── */
[data-tilt] { will-change: transform; transition: transform 280ms var(--ease-out); }
[data-tilt].is-tilting { transition: none; }

/* ── 7 · Mobile adjustments para las nuevas piezas ───────────────── */
@media (max-width: 700px) {
  .d-card.flip { min-height: 280px; }
  .paper-face { padding: 30px 24px; }
  .gifts-grid { grid-template-columns: 1fr; }
  .gift-card { padding: 32px 26px !important; }
  .fold-slat { grid-template-columns: 64px 1fr; padding: 14px 16px; }
  .wax-seal { width: 88px; height: 88px; font-size: 32px; }
}

/* ── 8 · Reduced motion · todo visible, nada gira ───────────────── */
@media (prefers-reduced-motion: reduce) {
  .hero-title .L {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
    transition: none !important;
  }
  .flip-inner { transition: none !important; }
  .fold-slat { transform: none !important; opacity: 1 !important; transition: none !important; }
  .programa-fold { transition: none !important; }
  .rsvp-success.is-visible .wax-seal { animation: none; }
  [data-tilt] { transition: none !important; }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V3.1 · PLATE MARK — el panel repujado de la invitación física
   (cartulina de algodón con marco hundido a presión, tinta grabada)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* El intro ES el frente de la tarjeta: A|M centrado dentro del panel */
.intro::after {
  content: '';
  position: absolute;
  inset: clamp(18px, 4.5vw, 52px);
  pointer-events: none;
  border: 1px solid rgba(26, 24, 20, 0.085);
  border-radius: 1px;
  /* surco hundido: highlight desplazado abajo-derecha del trazo */
  box-shadow:
    1px 1px 0 rgba(255, 255, 255, 0.85),
    inset 1px 1px 0 rgba(255, 255, 255, 0.85),
    inset -0.5px -0.5px 0 rgba(26, 24, 20, 0.04);
}

/* Los modales (tarjetas que se entregan en mano) llevan el mismo panel */
.modal-panel::after {
  content: '';
  position: absolute;
  inset: 12px;
  pointer-events: none;
  border: 1px solid rgba(26, 24, 20, 0.07);
  border-radius: 1px;
  box-shadow:
    1px 1px 0 rgba(255, 255, 255, 0.8),
    inset 1px 1px 0 rgba(255, 255, 255, 0.8);
}
.modal-panel { position: relative; }
.modal-content { position: relative; z-index: 1; }

/* Las caras de las flip cards: doble filo letterpress sutil */
.paper-face::after {
  content: '';
  position: absolute;
  inset: 9px;
  pointer-events: none;
  border: 0.5px solid rgba(26, 24, 20, 0.06);
  border-radius: 2px;
  box-shadow: 0.5px 0.5px 0 rgba(255, 255, 255, 0.7);
}

/* La venue card también es una pieza de la suite */
.venue-info { position: relative; }
.venue-info::after {
  content: '';
  position: absolute;
  inset: 8px;
  pointer-events: none;
  border: 0.5px solid rgba(26, 24, 20, 0.055);
  border-radius: 2px;
  box-shadow: 0.5px 0.5px 0 rgba(255, 255, 255, 0.7);
}

/* En móvil el panel del intro respira menos margen, como la tarjeta real */
@media (max-width: 700px) {
  .intro::after { inset: 14px; }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V3.2 · PEN WRITE — "Max & Ariadna." escrito a pluma de verdad
   SVG text + máscara de trazo continuo. El dashoffset recorre el
   path con ritmo de escritura: palabra · pluma arriba · palabra.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.hero-title-svg {
  display: block;
  width: 100%;
  max-width: 1020px;
  height: auto;
  overflow: visible;
}
.ht-text {
  font-family: var(--f-display);
  font-variation-settings: "opsz" 144;
  font-style: italic;
  font-weight: 300;
  font-size: 150px;
  letter-spacing: -0.05em;
  fill: #F4F1E8;
}
.ht-amp, .ht-dot { fill: #722F37; }   /* concho de vino */

/* tinta oculta hasta que las fonts cargaron y el intro terminó */
.ht-text { opacity: 0; }
body.fonts-in .ht-text { opacity: 1; }

/* El trazo lo anima SMIL (<animate> en el SVG) — atributos, no CSS:
   WebKit respeta pathLength en atributos pero no siempre en CSS. */

/* el sub entra un beat después del título — sin esperar a que la pluma termine.
   La info ("Nos casamos. Cinco de diciembre. Guayaquil") es lo primero que un
   invitado necesita; no debe quedar ~4s detrás de toda la animación. */
body.is-loaded [data-anim="hero-3"] { transition-delay: 1100ms; }

/* reduced motion / fallback: tinta completa, sin teatro */
@media (prefers-reduced-motion: reduce) {
  .pen-path { stroke-dashoffset: 0 !important; animation: none !important; }
  .ht-text { opacity: 1 !important; }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V3.3 · ANTHURIUM ACUARELA — pintado sobre la cartulina
   multiply funde el blanco del papel de la acuarela con el cream
   del sitio: los pigmentos quedan "pintados" sobre la invitación.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
/* Alpha real en el PNG/AVIF — no depende de blend modes (iOS-safe).
   Es un detalle, no una protagonista: tamaño de sello. */
.date .botanical { position: relative; z-index: 2; }
.botanical-art {
  width: clamp(58px, 8vw, 88px);
  height: auto;
  transform: rotate(-3deg);
  opacity: 0.92;
}


/* ── date eyebrow · hairlines en vez de dashes (mobile-safe) ────── */
.date-eyebrow {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
}
.de-rule {
  width: 26px;
  height: 1px;
  background: currentColor;
  opacity: 0.45;
  flex-shrink: 0;
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V3.1 · REESTRUCTURA — invitación formal, dónde en tarjetas,
   tarjetas de papel reformateadas, FAQ al final. Papel de verdad.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
:root { --f-script: 'Pinyon Script', 'Snell Roundhand', cursive; }

/* ── Papel de verdad · textura fotográfica real (tile seamless) ────
   /photos/paper-tile.webp · espejado 2×2, multiply sobre cada superficie. */
.paper-real { position: relative; isolation: isolate; }
.paper-real::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  border-radius: inherit;
  mix-blend-mode: multiply;
  opacity: 0.65;
  background-image:
    url('/photos/paper-tile.webp'),
    radial-gradient(120% 120% at 50% 30%, transparent 55%, rgba(26,24,20,0.09) 100%);
  background-size: 440px 440px, cover;
}

/* fondos cream de secciones · misma textura, más suave */
.invite, .donde, .cards, .faq-section, .pinned-content { position: relative; }
.invite::before, .donde::before, .cards::before,
.faq-section::before, .pinned-content::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  mix-blend-mode: multiply;
  opacity: 0.45;
  background-image: url('/photos/paper-tile.webp');
  background-size: 440px 440px;
}
.invite > *, .donde > *, .cards > *, .faq-section > *, .pinned-content > * {
  position: relative;
  z-index: 1;
}

/* verjurado · solo la invitación formal (papel fino de papelería) */
.invite-frame {
  background-image:
    repeating-linear-gradient(180deg,
      rgba(26, 24, 20, 0.022) 0px, rgba(26, 24, 20, 0.022) 1px,
      transparent 1px, transparent 4px);
}

/* modal de vestimenta · también es papel */
.modal-panel { position: relative; isolation: isolate; }
.modal-panel::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  border-radius: inherit;
  mix-blend-mode: multiply;
  opacity: 0.55;
  background-image: url('/photos/paper-tile.webp');
  background-size: 440px 440px;
}

/* ── 02 · INVITACIÓN FORMAL ──────────────────────────────────────── */
.invite {
  padding-top: clamp(56px, 9vh, 104px);
  padding-bottom: 0;
  /* compensa el ancho del scrollbar (100vw - 100%) SOLO a la izquierda:
     así la tarjeta queda centrada respecto al viewport, no corrida por la barra.
     En móvil (scrollbar overlay) el término es 0 → sin efecto. */
  padding-left: calc(var(--page-pad) + (100vw - 100%));
  padding-right: var(--page-pad);
  display: flex;
  justify-content: center;
}
.invite-paper {
  width: min(720px, 100%);
  background: var(--paper-card, #FBFAF6);
  padding: clamp(16px, 3vw, 26px);
  border-radius: 3px;
  box-shadow: var(--paper-shadow);
}
.invite-frame {
  border: 1px solid rgba(26, 24, 20, 0.34);
  outline: 1px solid rgba(26, 24, 20, 0.16);
  outline-offset: 4px;
  padding: clamp(44px, 7vw, 72px) clamp(22px, 5vw, 52px);
  text-align: center;
  /* contenido centrado verticalmente en la plancha */
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: clamp(400px, 56vh, 560px);
  /* relieve · plancha hundida en la cartulina */
  box-shadow:
    inset 0 1px 3px rgba(26, 24, 20, 0.11),
    inset 0 -1px 2px rgba(255, 255, 255, 0.7);
}
.invite-parents {
  display: flex;
  justify-content: center;
  gap: clamp(14px, 4vw, 96px);
  /* empuja el resto hacia abajo → los novios quedan centrados en la plancha */
  margin-bottom: auto;
  padding-bottom: clamp(28px, 5vw, 52px);
}
.invite-parent p {
  font-family: var(--f-mark);
  /* cada nombre en UNA línea en móvil: se achica lo que haga falta */
  font-size: clamp(8px, 2.5vw, 14px);
  letter-spacing: 0.06em;
  font-variant: small-caps;
  text-transform: lowercase;
  white-space: nowrap;
  line-height: 1.4;
  margin: 0 0 10px;
  color: #1A1814;
}
/* separación clara ENTRE los dos padres de cada columna */
.invite-parent p:last-child { margin-bottom: 0; }
.invite-names {
  font-family: var(--f-script);
  font-weight: 400;
  font-size: clamp(56px, 12vw, 92px);
  line-height: 1;
  color: #1A1814;
  margin-bottom: 0;
}
.invite-names .invite-y { color: var(--wine); }
.invite-line {
  font-family: var(--f-mark);
  font-size: clamp(13px, 1.7vw, 16px);
  letter-spacing: 0.2em;
  font-variant: small-caps;
  text-transform: lowercase;
  color: var(--ink-soft, rgba(26,24,20,0.72));
  /* pegada hacia abajo → los novios quedan al centro de la plancha */
  margin-top: auto;
  padding-top: clamp(28px, 5vw, 44px);
}

/* ── 04 · DÓNDE · dos tarjetas de papel ──────────────────────────── */
.donde { padding: var(--section-y) var(--page-pad); }
.donde-inner { max-width: 1100px; margin: 0 auto; }
.donde-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive-deep);
  text-transform: uppercase;
  margin-bottom: 22px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.donde-eyebrow-bar { width: 24px; height: 1px; background: var(--wine); display: inline-block; }
.donde-h {
  font-family: var(--f-display);
  font-weight: 300;
  font-size: clamp(34px, 5.5vw, 68px);
  line-height: 1.04;
  letter-spacing: -0.03em;
  color: #1A1814;
  margin-bottom: clamp(44px, 6vw, 64px);
}
.donde-h em { font-style: italic; color: var(--wine); }
.donde-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: clamp(18px, 3vw, 32px);
}
.venue-card {
  background: var(--paper-card, #FBFAF6);
  border-radius: 4px;
  box-shadow: var(--paper-shadow);
  padding: clamp(30px, 4vw, 46px) clamp(24px, 3.5vw, 40px) clamp(36px, 4.5vw, 52px);
  text-align: center;
  position: relative;
  transition: box-shadow 400ms var(--ease-out), transform 400ms var(--ease-out);
  transform-style: preserve-3d;
}
.venue-card-art {
  height: clamp(140px, 20vw, 172px);   /* alto del área = tarjeta se mantiene */
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
}
.venue-card-art picture {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
}
.venue-card-art img {
  width: auto;
  height: auto;
  max-height: clamp(84px, 12vw, 104px);   /* la flor más chica, dentro del área grande */
  max-width: 100%;
  object-fit: contain;
  transform: rotate(-3deg);
  opacity: 0.94;
}
.venue-card-art-empty {
  border: 1px dashed rgba(26, 24, 20, 0.18);
  border-radius: 3px;
  background:
    repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(26,24,20,0.02) 10px, rgba(26,24,20,0.02) 20px);
}
/* Ceremonia · ramo acuarela flotante protagonista (alpha real, sin marco) */
.venue-card-art-ramo img {
  max-height: clamp(140px, 20vw, 170px);
  transform: rotate(-2deg);
}

/* Recepción · foto de la Estación Fluvial que llena el marco (postal) */
.venue-card-art-photo picture { display: block; width: 100%; height: 100%; }
.venue-card-art-photo img {
  width: 100%;
  height: 100%;
  max-height: none;
  max-width: 100%;
  object-fit: cover;
  border-radius: 6px;
  transform: none;
  opacity: 1;
  box-shadow: 0 2px 12px rgba(26, 24, 20, 0.12);
}
.venue-card-time {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--olive-deep);
  margin-bottom: 10px;
}
.venue-card-kind {
  font-family: var(--f-mark);
  font-size: 13px;
  letter-spacing: 0.14em;
  font-variant: small-caps;
  text-transform: lowercase;
  color: var(--ink-soft, rgba(26,24,20,0.6));
  margin-bottom: 8px;
}
.venue-card-name {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(22px, 2.8vw, 30px);
  line-height: 1.14;
  letter-spacing: -0.01em;
  color: #1A1814;
}
@media (hover: hover) and (pointer: fine) {
  .venue-card:hover { box-shadow: var(--paper-shadow-lift); }
}

/* ── 05 · TARJETAS · inserto impreso, más chicas, marco de tinta ─── */
.cards {
  padding: var(--section-y) var(--page-pad);
  background: #ECE3D0;   /* banda cálida más profunda · separa la sección, las tarjetas resaltan */
}
.cards-strip {
  max-width: 1100px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(16px, 2.6vw, 28px);
}
.cards-strip .d-card.flip {
  min-height: 320px;   /* piso · el grid iguala frente y dorso, giro SIEMPRE en el mismo lugar */
  perspective: 1200px;
}
/* Ambas caras en la MISMA celda de grid → idéntica altura sin importar el contenido.
   Inmune al override de position de .paper-real; el giro nunca desplaza la tarjeta. */
.cards-strip .flip-inner {
  display: grid;
  grid-template: minmax(0, 1fr) / minmax(0, 1fr);
  height: auto;
  min-height: inherit;
}
/* marco interior de tinta · como el inserto impreso */
.cards-strip .paper-face {
  position: relative;
  inset: auto;
  grid-area: 1 / 1;
  padding: 14px;
  gap: 0;
  text-align: center;
  align-items: stretch;
  justify-content: stretch;
}
.d-frame {
  flex: 1;
  border: 1px solid rgba(26, 24, 20, 0.22);
  border-radius: 2px;
  padding: 30px 22px 40px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  position: relative;
}
/* Frente · distribución vertical: eyebrow ARRIBA · título CENTRO ·
   descripción ABAJO · "tocar" al fondo (boceto del usuario) */
.cards-strip .flip-front .d-frame {
  justify-content: flex-start;
  gap: 0;
  padding-bottom: 44px;   /* despeja el "tocar" absoluto */
}
.d-eyebrow {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--olive-deep);
  margin-bottom: 0;
}
/* el título flota al centro geométrico entre eyebrow y descripción */
.cards-strip .flip-front .d-h { margin: auto 0; }
.cards-strip .flip-front .d-p { margin: 0; }
.cards-strip .d-h {
  font-family: var(--f-mark);
  font-weight: 500;
  font-size: clamp(21px, 2.4vw, 26px);
  letter-spacing: 0.02em;
  font-variant: small-caps;
  text-transform: lowercase;
  color: #1A1814;
  font-style: normal;
}
.cards-strip .d-p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--ink-soft, rgba(26,24,20,0.66));
  max-width: 240px;
}
/* "tocar" · centrado abajo, visible */
.cards-strip .flip-hint {
  position: absolute;
  left: 50%;
  right: auto;
  bottom: 12px;
  transform: translateX(-50%);
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 13px;
  color: var(--ink-mute, rgba(26,24,20,0.42));
}
.cards-strip .flip-hint::before,
.cards-strip .flip-hint::after {
  content: '';
  width: 16px;
  height: 1px;
  background: rgba(26, 24, 20, 0.22);
}
.cards-strip .flip-back-label {
  font-family: var(--f-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  font-style: normal;
  color: var(--olive-deep);
  margin-bottom: 4px;
}
.cards-strip .flip-back-p { color: var(--ink-soft, rgba(26,24,20,0.66)); }
.cards-strip .flip-back-big {
  font-family: var(--f-display);
  font-style: italic;
  font-size: clamp(34px, 4vw, 46px);
  color: #1A1814;
}
.flip-back-names {
  font-family: var(--f-mark);
  font-size: clamp(17px, 2vw, 20px);
  letter-spacing: 0.08em;
  font-variant: small-caps;
  text-transform: lowercase;
  line-height: 1.5;
  color: #1A1814;
}
.flip-back-brand {
  font-family: var(--f-mark);
  font-size: clamp(22px, 2.6vw, 28px);
  letter-spacing: 0.16em;
  font-variant: small-caps;
  text-transform: lowercase;
  color: var(--wine);
  margin-top: 2px;
}
.cards-strip .d-more {
  margin-top: 6px;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--f-body);
  font-size: 13px;
  letter-spacing: 0.02em;
  color: var(--wine);
}
/* auto-flip · un pelín más suave y notorio */
.d-card.flip.is-autoflip .flip-inner { transition-duration: 720ms; }

/* ── 08 · FAQ · sección al final ─────────────────────────────────── */
.faq-section { padding: clamp(64px, 10vh, 112px) var(--page-pad); }
.faq-section-inner { max-width: 760px; margin: 0 auto; }
.faq-section-eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.32em;
  color: var(--olive-deep);
  text-transform: uppercase;
  margin-bottom: 22px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.faq-section-bar { width: 24px; height: 1px; background: var(--wine); display: inline-block; }
.faq-section-h {
  font-family: var(--f-display);
  font-weight: 300;
  font-size: clamp(34px, 5.5vw, 64px);
  line-height: 1.04;
  letter-spacing: -0.03em;
  color: #1A1814;
  margin-bottom: clamp(26px, 3.5vw, 40px);
}
.faq-section-h em { font-style: italic; color: var(--wine); }
.faq-section .faq-list { display: block; }
.faq-section .faq-item { border-bottom: 1px solid rgba(26, 24, 20, 0.12); }
.faq-section .faq-q {
  width: 100%;
  background: none;
  border: 0;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  padding: 18px 0;
  text-align: left;
}
.faq-section .faq-q-text {
  font-family: var(--f-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(16px, 2vw, 19px);
  color: #1A1814;
  line-height: 1.32;
}
.faq-section .faq-icon { position: relative; width: 16px; height: 16px; flex-shrink: 0; }
.faq-section .faq-icon .bar { position: absolute; background: var(--wine); transition: transform 300ms var(--ease-out), opacity 300ms var(--ease-out); }
.faq-section .faq-icon .h { top: 50%; left: 0; width: 16px; height: 1.5px; transform: translateY(-50%); }
.faq-section .faq-icon .v { left: 50%; top: 0; width: 1.5px; height: 16px; transform: translateX(-50%); }
.faq-section .faq-item.open .faq-icon .v { transform: translateX(-50%) scaleY(0); opacity: 0; }
.faq-section .faq-a {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 420ms var(--ease-out);
}
.faq-section .faq-item.open .faq-a { grid-template-rows: 1fr; }
.faq-section .faq-a-inner { overflow: hidden; }
.faq-section .faq-a-inner > p {
  font-family: var(--f-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--ink-soft, rgba(26,24,20,0.72));
  padding-bottom: 8px;
}
.faq-section .faq-a-inner > p:last-child { padding-bottom: 22px; }
/* "Más preguntas" · despliega el resto (solo 2 visibles por defecto) */
.faq-extra[hidden] { display: none; }
.faq-more-toggle {
  margin-top: 22px;
  background: none;
  border: 0;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: 44px;
  font-family: var(--f-body);
  font-size: 14px;
  letter-spacing: 0.02em;
  color: var(--wine);
}
.faq-more-arr { transition: transform 300ms var(--ease-out); display: inline-block; }
.faq-more-toggle.is-open .faq-more-arr { transform: rotate(180deg); }
.faq-section .faq-a-inner em { font-style: italic; color: #1A1814; }
.faq-maps { display: flex; flex-wrap: wrap; gap: 20px; padding-top: 4px; }
.faq-maps a {
  font-family: var(--f-body);
  font-size: 14px;
  color: var(--wine);
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-height: 44px;
}

/* ── responsive · reestructura en móvil ──────────────────────────── */
@media (max-width: 760px) {
  .donde-grid { grid-template-columns: 1fr; }
  .cards-strip { grid-template-columns: 1fr; }
  .cards-strip .d-card.flip { min-height: 300px; }
  .invite { padding-top: clamp(48px, 8vh, 76px); }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   AUDITORÍA · 06-oct-2026 — correcciones (no cambia el diseño aprobado)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* La × del modal quedaba DEBAJO de .modal-content (z-index 1): en móvil
   ~45% de los toques caían en el eyebrow. Encima y con 44px de área. */
.modal-close { z-index: 4; }
@media (max-width: 700px) {
  .modal-close { width: 44px; height: 44px; top: 12px; right: 12px; }
}

/* FAQ · las respuestas heredaban el sangrado de la versión vieja (72/50px a
   la izquierda) y el max-height viejo; el acordeón es grid-template-rows.
   Cerrada = visibility hidden (sus links no reciben Tab), con retardo para
   que el cierre alcance a animar. */
.faq-section .faq-a {
  max-height: none;
  overflow: visible;
  visibility: hidden;
  transition: grid-template-rows 420ms var(--ease-out), visibility 0s linear 420ms;
}
.faq-section .faq-item.open .faq-a {
  max-height: none;
  visibility: visible;
  transition: grid-template-rows 420ms var(--ease-out), visibility 0s linear 0s;
}
.faq-section .faq-a-inner { padding: 0; max-width: none; min-height: 0; }

/* Anillo de foco visible sobre el vino del RSVP (antes vino sobre vino 1.2:1) */
.rsvp :focus-visible { outline-color: #F4F1E8; }
.rsvp-success-inner:focus { outline: none; }

/* "Cambiar mi respuesta" · área táctil mínima 44px */
.rsvp-edit { min-height: 44px; align-items: center; }

/* iOS hace zoom en inputs < 16px (iPad / iPhone horizontal > 700px) */
.field input,
.field textarea { font-size: 16px; }

/* Venue cards · su transition pisaba la de [data-reveal] → aparecían de golpe */
.venue-card {
  transition:
    box-shadow 400ms var(--ease-out),
    transform 400ms var(--ease-out),
    opacity 900ms var(--ease-out);
}

/* Contraste mínimo legible (WCAG ~4.5:1) en textos chicos sobre papel */
:root { --cream-mute: rgba(26, 24, 20, 0.64); }
.rsvp, .rsvp-success { --cream-mute: rgba(244, 241, 232, 0.62); }
.cards-strip .flip-hint { color: rgba(26, 24, 20, 0.6); }
.countdown-label { color: var(--olive-deep); }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   MÓVIL PRIMERO · 06-oct-2026 — el invitado llega desde WhatsApp
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* ── Toque · sin flash gris de iOS sobre tarjetas, sin doble-tap zoom ── */
html { -webkit-tap-highlight-color: transparent; }
.d-card.flip, .venue-card, .faq-q, .faq-more-toggle, .stepper-btn { touch-action: manipulation; }

/* ── Fotos · Safari < 17 (iOS 16) ignora image-set() con type() y bajaba
   el JPG además del AVIF precargado → paso intermedio WebP con prefijo ── */
.hero-photo-img {
  background-image: url('/photos/hero-silueta.jpg');
  background-image: -webkit-image-set(url('/photos/hero-silueta.webp') 1x);
  background-image: image-set(url('/photos/hero-silueta.avif') type('image/avif'), url('/photos/hero-silueta.webp') type('image/webp'), url('/photos/hero-silueta.jpg') type('image/jpeg'));
}
.pinned-photo-img {
  background-image: url('/photos/kiss-vertical.jpg');
  background-image: -webkit-image-set(url('/photos/kiss-vertical.webp') 1x);
  background-image: image-set(url('/photos/kiss-vertical.avif') type('image/avif'), url('/photos/kiss-vertical.webp') type('image/webp'), url('/photos/kiss-vertical.jpg') type('image/jpeg'));
}
.date-bg {
  background-image: url('/photos/walking-wide.jpg');
  background-image: -webkit-image-set(url('/photos/walking-wide.webp') 1x);
  background-image: image-set(url('/photos/walking-wide.avif') type('image/avif'), url('/photos/walking-wide.webp') type('image/webp'), url('/photos/walking-wide.jpg') type('image/jpeg'));
}
@media (max-width: 700px) {
  .hero-photo-img {
    background-image: url('/photos/hero-silueta-m.jpg');
    background-image: -webkit-image-set(url('/photos/hero-silueta-m.webp') 1x);
    background-image: image-set(url('/photos/hero-silueta-m.avif') type('image/avif'), url('/photos/hero-silueta-m.webp') type('image/webp'), url('/photos/hero-silueta-m.jpg') type('image/jpeg'));
    /* Portada · la foto se amplía anclada abajo: el beso queda POR ENCIMA
       del título (antes "Ariadna & Max." les tapaba las caras, sobre todo en
       iPhone SE). Se recorta un poco de cielo. */
    background-size: auto 118%;
    background-position: 22% 100%;
  }
  .pinned-photo-img {
    background-image: url('/photos/kiss-vertical-m.jpg');
    background-image: -webkit-image-set(url('/photos/kiss-vertical-m.webp') 1x);
    background-image: image-set(url('/photos/kiss-vertical-m.avif') type('image/avif'), url('/photos/kiss-vertical-m.webp') type('image/webp'), url('/photos/kiss-vertical-m.jpg') type('image/jpeg'));
  }
  .date-bg {
    background-image: url('/photos/walking-wide-m.jpg');
    background-image: -webkit-image-set(url('/photos/walking-wide-m.webp') 1x);
    background-image: image-set(url('/photos/walking-wide-m.avif') type('image/avif'), url('/photos/walking-wide-m.webp') type('image/webp'), url('/photos/walking-wide-m.jpg') type('image/jpeg'));
  }
}

/* ── Invitación · padres legibles: en celular las dos familias se apilan
   (familia de Ariadna arriba, la de Max abajo), cada nombre en una línea ── */
@media (max-width: 480px) {
  .invite-parents {
    flex-direction: column;
    align-items: center;
    gap: 16px;
  }
  .invite-parent { text-align: center; }
  .invite-parent p {
    font-size: clamp(11.5px, 3.5vw, 13.5px);
    margin-bottom: 4px;
  }
  .invite-line { font-size: 14px; }
}

/* ── Sin palabras huérfanas en líneas cortas ("…del 5 de / noviembre") ── */
h1, h2, h3, .invite-line, .rsvp-eyebrow, .rsvp-cupo, .d-p, .flip-back-p,
.venue-card-name, .rsvp-state-h, .rsvp-state-p, .rsvp-success-sub { text-wrap: balance; }
p { text-wrap: pretty; }

@media (max-width: 700px) {
  /* Etiquetas en mayúsculas espaciadas: 10–11px → 12px */
  .venue-card-time, .d-eyebrow, .cards-strip .flip-back-label,
  .donde-eyebrow, .faq-section-eyebrow {
    font-size: 12px;
    letter-spacing: 0.24em;
  }
  .venue-card-kind { font-size: 14px; }

  /* Detalles · 3 tarjetas casi vacías ocupaban 1,3 pantallas: el alto
     lo define el contenido (el grid-stack igual empareja frente y dorso) */
  .cards-strip .d-card.flip { min-height: 236px; }

  /* "Contando los días" alineado con el contador (todo centrado) */
  .countdown-label { text-align: center; }
}

/* ── Modal (hoja inferior) · el contenido scrollea dentro de un marco fijo:
   la × y la textura de papel ya no se van al hacer scroll ── */
.modal-panel {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  /* banda superior fija para la ×: el texto scrollea por debajo, nunca detrás */
  padding: 64px 0 0;
}
.modal-content {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: 0 clamp(32px, 5vw, 64px) clamp(32px, 5vw, 64px);
}
@media (max-width: 700px) {
  .modal-content { padding: 0 22px calc(44px + env(safe-area-inset-bottom)); }
}
.modal-close { background: var(--paper-card, #FBFAF6); }
.modal-content:focus { outline: none; }
.modal-content:focus-visible { outline: 2px solid var(--wine-bright); outline-offset: -4px; }
@media (pointer: coarse) {
  .modal-close { width: 44px; height: 44px; }
}
/* iOS 15: overflow:hidden no frena el scroll del fondo */
.modal-backdrop { touch-action: none; }
/* Cerrado = fuera del árbol de foco y sin capa compuesta viva */
.modal {
  visibility: hidden;
  transition: opacity 320ms var(--ease-out), visibility 0s linear 320ms;
}
.modal.is-open {
  visibility: visible;
  transition: opacity 320ms var(--ease-out), visibility 0s;
}

/* Colores del dress code: en el celular no hay hover → nombre visible */
@media (hover: none) {
  .swatches {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    row-gap: 30px;
    padding-bottom: 18px;
  }
  .sw { position: relative; justify-self: center; }
  .sw::after {
    content: attr(aria-label);
    position: absolute;
    top: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    white-space: nowrap;
    font: italic 400 12px/1.2 var(--f-display);
    color: var(--cream-soft);
  }
}

/* ── RSVP · Adultos / Niños con − n + (sin teclado, dentro del cupo) ── */
.stepper {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) 48px;
  align-items: stretch;
  border: 0.5px solid rgba(244, 241, 232, 0.22);
  background: rgba(10, 9, 8, 0.18);
  transition: border-color 220ms var(--ease-out);
}
.stepper:focus-within { border-color: var(--cream); }
.field .stepper input {
  border: 0;
  background: transparent;
  text-align: center;
  padding: 12px 0;
  min-width: 0;
  font-size: 18px;
  -moz-appearance: textfield;
  appearance: textfield;
}
.stepper input::-webkit-inner-spin-button,
.stepper input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.stepper-btn {
  min-height: 50px;
  font-family: var(--f-display);
  font-size: 24px;
  line-height: 1;
  color: var(--cream);
  background: transparent;
  border: 0;
  cursor: pointer;
  transition: opacity 180ms var(--ease-out), background 180ms var(--ease-out);
}
.stepper-btn:active:not(:disabled) { background: rgba(244, 241, 232, 0.10); }
.stepper-btn:disabled { opacity: 0.28; cursor: default; }
.stepper.is-locked .stepper-btn { visibility: hidden; }
@media (max-width: 920px) {
  .field-row { grid-template-columns: 1fr 1fr; gap: 14px; }
  .field-row.is-single { grid-template-columns: 1fr; }
}
.rsvp-error { margin-top: 0; }

/* ── Rendimiento en gama media ── */
[data-reveal].is-visible, body.is-loaded [data-anim] { will-change: auto; }
@media (hover: none) {
  .hero-photo-img, .pinned-photo-img, .date-bg { will-change: auto; }
}
@media (hover: none) and (pointer: coarse) {
  body::before { display: none; }   /* ruido full-screen al 3.5%: casi invisible, caro */
  .modal-backdrop {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    background: rgba(5, 4, 3, 0.82);
  }
}

/* ── Celular horizontal con notch: el texto no se mete bajo la cámara ── */
@media (orientation: landscape) and (max-height: 500px) {
  :root {
    --page-pad: max(clamp(20px, 5vw, 64px), env(safe-area-inset-left), env(safe-area-inset-right));
  }
  .hero-content {
    padding-left: max(clamp(28px, 5vw, 64px), env(safe-area-inset-left));
    padding-right: max(clamp(28px, 5vw, 64px), env(safe-area-inset-right));
  }
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V4 · SISTEMA DE MOVIMIENTO (estándar motion-determinista)
   · Un evento principal a la vez; entra en el orden de lectura.
   · Entradas: titular 0.8s expo-out 32px · secundario 0.6s decelerate 20px
     · tarjeta/panel 0.85s expo-out 40px · detalle 0.4s desde escala .92.
   · Salidas = 60–70% de la entrada, accelerate, la mitad del recorrido.
   · Dos familias nada más: subir+fundir (entradas) y girar (tarjetas).
     Un solo rebote en toda la pieza: el sello de cera (el protagonista).
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
:root {
  --ease-expo-out:   cubic-bezier(0.16, 1, 0.3, 1);
  --ease-decelerate: cubic-bezier(0, 0, 0.2, 1);
  --ease-standard:   cubic-bezier(0.4, 0, 0.2, 1);
  --ease-accelerate: cubic-bezier(0.4, 0, 1, 1);
  --t-head:  800ms;
  --t-sec:   600ms;
  --t-panel: 850ms;
  --t-small: 400ms;
  --t-exit:  300ms;
  /* el resto del sitio usa --ease-out: lo alineamos a expo-out */
  --ease-out: var(--ease-expo-out);
}

/* Secundario por defecto (antetítulos, párrafos, cifras) */
[data-reveal] {
  transform: translateY(20px);
  transition:
    opacity var(--t-sec) var(--ease-decelerate),
    transform var(--t-sec) var(--ease-decelerate);
}
/* Titulares */
h2[data-reveal], .donde-h[data-reveal], .faq-section-h[data-reveal] {
  transform: translateY(32px);
  transition:
    opacity var(--t-head) var(--ease-expo-out),
    transform var(--t-head) var(--ease-expo-out);
}
/* Tarjetas y la plancha de la invitación */
.venue-card[data-reveal], .invite-paper[data-reveal] {
  transform: translateY(40px);
  transition:
    opacity var(--t-panel) var(--ease-expo-out),
    transform var(--t-panel) var(--ease-expo-out),
    box-shadow 400ms var(--ease-standard);
}
[data-reveal].is-visible { transform: none; }
/* Orden de lectura: 0.15–0.25s entre niveles, total ≤ 0.6s */
[data-reveal][data-reveal-delay="1"].is-visible { transition-delay: 160ms; }
[data-reveal][data-reveal-delay="2"].is-visible { transition-delay: 300ms; }
[data-reveal][data-reveal-delay="3"].is-visible { transition-delay: 400ms; }
[data-reveal][data-reveal-delay="4"].is-visible { transition-delay: 480ms; }
/* Ya visibles: la demora no debe frenar el hover/tilt posterior */
.venue-card.is-visible.is-tilting { transition-delay: 0ms; }

/* "05.12.26" como UN titular: 40ms entre caracteres (8 → 280ms) */
.date-big > [data-reveal] {
  transform: translateY(32px);
  transition: opacity var(--t-head) var(--ease-expo-out), transform var(--t-head) var(--ease-expo-out);
}
.date-big > :nth-child(1).is-visible { transition-delay: 0ms; }
.date-big > :nth-child(2).is-visible { transition-delay: 40ms; }
.date-big > :nth-child(3).is-visible { transition-delay: 80ms; }
.date-big > :nth-child(4).is-visible { transition-delay: 120ms; }
.date-big > :nth-child(5).is-visible { transition-delay: 160ms; }
.date-big > :nth-child(6).is-visible { transition-delay: 200ms; }
.date-big > :nth-child(7).is-visible { transition-delay: 240ms; }
.date-big > :nth-child(8).is-visible { transition-delay: 280ms; }

/* Bloque "Cuándo" (titular) */
.pinned-block {
  transform: translateY(32px);
  transition: opacity var(--t-head) var(--ease-expo-out), transform var(--t-head) var(--ease-expo-out);
}

/* Portada · la pluma es el evento principal; el subtítulo entra cuando
   "Max" ya está escrito (no compite con la escritura) */
[data-anim="hero-1"], [data-anim="hero-2"], [data-anim="hero-3"] {
  transform: translateY(20px);
  transition: opacity var(--t-sec) var(--ease-decelerate), transform var(--t-sec) var(--ease-decelerate);
}
body.is-loaded [data-anim="hero-3"] { transition-delay: 1900ms; }

/* Tarjetas de Detalles · girar es "mover algo ya visible": 0.7s standard */
.flip-inner { transition: transform 700ms var(--ease-standard); }
/* Pista de que se voltean: un "asomo" de la primera tarjeta (no un giro
   completo que obliga a leer el dorso mientras se va) */
@keyframes cardPeek {
  0%   { transform: rotateY(0); }
  45%  { transform: rotateY(-24deg); }
  100% { transform: rotateY(0); }
}
.d-card.flip.is-peek .flip-inner { animation: cardPeek 1100ms var(--ease-standard) both; }

/* Modal (hoja) · entra 0.7s expo-out, sale 0.28s accelerate */
.modal-panel {
  transition:
    transform var(--t-exit) var(--ease-accelerate),
    opacity var(--t-exit) var(--ease-accelerate);
}
.modal.is-open .modal-panel {
  transition:
    transform 700ms var(--ease-expo-out),
    opacity 400ms var(--ease-decelerate);
}
.modal { transition: opacity var(--t-exit) var(--ease-accelerate), visibility 0s linear var(--t-exit); }
.modal.is-open { transition: opacity 400ms var(--ease-decelerate), visibility 0s; }
@media (max-width: 700px) {
  .modal-panel { transform: translateY(12%); opacity: 0; }   /* ~90px + fundido, no un telón entero */
  .modal.is-open .modal-panel { transform: translateY(0); opacity: 1; }
}

/* FAQ · abrir 0.45s standard, cerrar 0.3s accelerate */
.faq-section .faq-a {
  transition: grid-template-rows var(--t-exit) var(--ease-accelerate), visibility 0s linear var(--t-exit);
}
.faq-section .faq-item.open .faq-a {
  transition: grid-template-rows 450ms var(--ease-standard), visibility 0s;
}

/* Confirmación · el fondo funde, el sello es el único rebote de la pieza */
.rsvp-success { transition: opacity 500ms var(--ease-decelerate); }
.rsvp-success-eyebrow, .rsvp-success-h, .rsvp-success-sub {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--t-sec) var(--ease-decelerate), transform var(--t-sec) var(--ease-decelerate);
}
.rsvp-success.is-visible .rsvp-success-eyebrow { opacity: 1; transform: none; transition-delay: 620ms; }
.rsvp-success.is-visible .rsvp-success-h       { opacity: 1; transform: none; transition-delay: 800ms; }
.rsvp-success.is-visible .rsvp-success-sub     { opacity: 1; transform: none; transition-delay: 980ms; }

/* ── Respuesta al toque (celular): la cartulina "cede" bajo el dedo ── */
@media (hover: none) {
  .d-card.flip:active { transform: scale(0.985); transition: transform 120ms var(--ease-decelerate); }
  .btn-submit:active, .d-more:active, .rsvp-edit:active, .faq-more-toggle:active { transform: scale(0.97); transition: transform 100ms var(--ease-decelerate); }
  .faq-q:active { opacity: 0.6; transition: opacity 80ms linear; }
}

@media (prefers-reduced-motion: reduce) {
  .d-card.flip.is-peek .flip-inner { animation: none; }
  .rsvp-success-eyebrow, .rsvp-success-h, .rsvp-success-sub { opacity: 1; transform: none; }
}

/* Stepper: − / + dibujados como filetes de 1.5px (nítidos en cualquier
   pantalla; el "−" tipográfico parecía deshabilitado) */
.stepper-btn { position: relative; font-size: 0; color: transparent; }
.stepper-btn::before, .stepper-btn::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 14px; height: 1.5px;
  background: #F4F1E8;
  transform: translate(-50%, -50%);
}
.stepper-btn[data-step="1"]::after { transform: translate(-50%, -50%) rotate(90deg); }
.stepper-btn[data-step="-1"]::after { display: none; }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   V4 · SIN RASGOS DE "SITIO HECHO POR IA" — pasa la prueba de la suite
   impresa: una tinta, versales grabadas, papel plano, enlaces de texto.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* Titulares en UNA tinta (el grabado no cambia de color a media frase).
   El vino queda para el monograma, la "y", el sello y el panel RSVP. */
.donde-h em, .faq-section-h em, .pinned-h em { color: inherit; }
.rsvp-accent { color: inherit; }

/* Versalitas: Bodoni Moda no trae small caps reales y el navegador las
   fabricaba achicando mayúsculas (filetes aún más finos). Mayúsculas
   reales, más chicas, con tracking de grabador. */
.invite-parent p {
  font-variant: normal; text-transform: uppercase;
  font-size: clamp(10.5px, 2.9vw, 13px); letter-spacing: 0.1em; font-weight: 500;
}
.invite-line {
  font-variant: normal; text-transform: uppercase;
  font-size: 12px; letter-spacing: 0.22em; font-weight: 500;
}
.venue-card-kind, .flip-back-brand {
  font-variant: normal; text-transform: uppercase;
  font-size: 12px; letter-spacing: 0.2em; font-weight: 500;
}
.cards-strip .d-h {
  font-variant: normal; text-transform: uppercase;
  font-size: 17px; letter-spacing: 0.14em; font-weight: 400;
}
.flip-back-names {
  font-variant: normal; text-transform: uppercase;
  font-size: 15px; letter-spacing: 0.12em; line-height: 1.5;
}
@media (max-width: 480px) {
  .invite-parent p { font-size: clamp(10.5px, 3.1vw, 12.5px); letter-spacing: 0.08em; }
}

/* Etiquetas de sección: palabra grabada sola, sin rayita delante */
.donde-eyebrow, .faq-section-eyebrow, .pinned-eyebrow { gap: 0; }

/* Enlaces = texto en itálica subrayado fino (sin flechas ni filetes).
   Itálica real de Fraunces (DM Sans no trae itálica: saldría inclinada falsa). */
.cards-strip .d-more, .faq-maps a, .faq-more-toggle, .rsvp-edit, .d-more {
  font-family: var(--f-display);
  font-style: italic;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
  text-decoration-color: currentColor;
  border-bottom: 0;
  gap: 0;
  transition: opacity 160ms var(--ease-decelerate);
}
.rsvp-edit { color: #F4F1E8; }

/* Panel RSVP plano: vino de imprenta, sin resplandor ni vidrio */
.rsvp { background: #722F37; }
.rsvp-glow { display: none; }
.rsvp-state {
  background: transparent;
  border: 0;
  border-radius: 2px;
  box-shadow: inset 0 0 0 1px rgba(244, 241, 232, 0.22);
}
.modal-backdrop { backdrop-filter: none; -webkit-backdrop-filter: none; background: rgba(26, 24, 20, 0.72); }

/* Papeles apoyados planos: sombra solo en la invitación y el modal */
.venue-card, .paper-face, .gift-card {
  box-shadow: 0 0 0 0.5px rgba(26, 24, 20, 0.10), 0 1px 0 rgba(26, 24, 20, 0.07);
}
@media (hover: hover) and (pointer: fine) {
  .venue-card:hover, .d-card.flip:hover .paper-face {
    box-shadow: 0 0 0 0.5px rgba(26, 24, 20, 0.14), 0 6px 18px -10px rgba(26, 24, 20, 0.28);
  }
}

/* "El día": la fecha sobre papel, sin foto lavada de fondo ni viñeta */
.date-bg, .date::before { display: none; }

/* "Cuándo": sin la caja teñida (la etiqueta tocaba su borde) */
.pinned-content::before { content: none; }

/* Portada: "&" y punto en vino claro (el vino oscuro sobre la foto
   quedaba ~1.6:1, ilegible) */
.ht-amp, .ht-dot { fill: #E5B4BA; }

/* Guiones ornamentales → filetes dibujados (como "el día") */
.modal-section-label, .rsvp-success-eyebrow {
  display: flex; align-items: center; gap: 12px;
}
.rsvp-success-eyebrow { justify-content: center; }
.modal-section-label::before, .modal-section-label::after,
.rsvp-success-eyebrow::before, .rsvp-success-eyebrow::after {
  content: ''; width: 18px; height: 1px; background: currentColor; opacity: 0.5;
}
.modal-section-label::before { display: none; }   /* alineado a la izquierda: filete solo a la derecha */
.field-opt { margin-left: 8px; }

/* ── Textura de papel SIN capas de mezcla (rendimiento en celular) ────
   Antes: 15 pseudo-elementos con mix-blend-mode sobre contenido que
   scrollea → composición extra en cada frame. Ahora la misma textura se
   pinta en el fondo de cada superficie (background-blend-mode se resuelve
   al rasterizar, sin capas). Fórmula de "multiply al X%":
   velo del color base al (1−X) encima de [textura × base]. */
.paper-real::after, .invite::before, .donde::before, .cards::before,
.faq-section::before, .modal-panel::after { content: none; }
.paper-real {
  background:
    radial-gradient(120% 120% at 50% 30%, transparent 55%, rgba(26, 24, 20, 0.055) 100%),
    linear-gradient(rgba(251, 250, 246, 0.35), rgba(251, 250, 246, 0.35)),
    url('/photos/paper-tile.webp') 0 0 / 440px 440px,
    #FBFAF6;
  background-blend-mode: normal, normal, multiply;
}
.modal-panel {
  background:
    linear-gradient(rgba(251, 250, 246, 0.45), rgba(251, 250, 246, 0.45)),
    url('/photos/paper-tile.webp') 0 0 / 440px 440px,
    #FBFAF6;
  background-blend-mode: normal, multiply;
}
.invite, .donde, .faq-section, .date {
  background:
    linear-gradient(rgba(239, 232, 215, 0.55), rgba(239, 232, 215, 0.55)),
    url('/photos/paper-tile.webp') 0 0 / 440px 440px,
    #EFE8D7;
}
.cards {
  background:
    linear-gradient(rgba(236, 227, 208, 0.55), rgba(236, 227, 208, 0.55)),
    url('/photos/paper-tile.webp') 0 0 / 440px 440px,
    #ECE3D0;
  background-blend-mode: normal, multiply;
}

/* ── Movimiento (ajustes de la revisión de skills) ── */
/* Intro: entra desde .94 con decelerate; el resto lo anima WAAPI */
.intro-morph {
  transform: scale(0.94);
  transition: opacity 400ms var(--ease-decelerate), transform 400ms var(--ease-decelerate);
  will-change: auto;
}
body.is-intro-ready .intro-morph { transform: none; }
.intro { cursor: pointer; }

/* Asomo de la primera tarjeta: sale 0.45s decelerate, vuelve 0.35s accelerate */
@keyframes cardPeek {
  0%   { transform: rotateY(0);      animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
  56%  { transform: rotateY(-16deg); animation-timing-function: cubic-bezier(0.4, 0, 1, 1); }
  100% { transform: rotateY(0); }
}
.d-card.flip.is-peek .flip-inner { animation: cardPeek 800ms both; }

/* Hoja inferior: se desliza entera (sin fundido), entra 0.7s expo-out,
   sale 0.45s accelerate; el velo entra 0.3s y sale 0.25s */
@media (max-width: 700px) {
  .modal-panel { transform: translateY(100%); opacity: 1; touch-action: none; }
  .modal-content { touch-action: pan-y; }
  .modal.is-open .modal-panel { transform: translateY(0); }
  .modal-panel {
    transition: transform 450ms var(--ease-accelerate);
  }
  .modal.is-open .modal-panel { transition: transform 700ms var(--ease-expo-out); }
  .modal { transition: opacity 250ms var(--ease-accelerate), visibility 0s linear 450ms; }
  .modal.is-open { transition: opacity 300ms var(--ease-decelerate), visibility 0s; }
  /* asa para arrastrar */
  .modal-panel::before {
    content: '';
    position: absolute;
    top: 10px; left: 50%;
    width: 36px; height: 4px;
    border-radius: 2px;
    background: rgba(26, 24, 20, 0.2);
    transform: translateX(-50%);
    z-index: 4;
  }
}

/* Sello de cera: sin rebote; cae y asienta (0.45s expo-out a los 0.2s) */
@keyframes sealStamp {
  0%   { transform: rotate(-12deg) scale(1.15); opacity: 0; }
  100% { transform: rotate(-6deg) scale(1);     opacity: 1; }
}
.rsvp-success.is-visible .wax-seal { animation: sealStamp 450ms var(--ease-expo-out) 200ms both; }
.rsvp-success.is-visible .rsvp-success-eyebrow { transition-delay: 700ms; }
.rsvp-success.is-visible .rsvp-success-h       { transition-delay: 800ms; }
.rsvp-success.is-visible .rsvp-success-sub     { transition-delay: 900ms; }

/* FAQ: abre 0.36s expo-out, cierra 0.24s accelerate; la respuesta funde 60ms después */
.faq-section .faq-a {
  transition: grid-template-rows 240ms var(--ease-accelerate), visibility 0s linear 240ms;
}
.faq-section .faq-item.open .faq-a {
  transition: grid-template-rows 360ms var(--ease-expo-out), visibility 0s;
}
.faq-section .faq-a-inner { opacity: 0; transition: opacity 160ms var(--ease-accelerate); }
.faq-section .faq-item.open .faq-a-inner { opacity: 1; transition: opacity 300ms var(--ease-decelerate) 60ms; }

/* "Más preguntas": las filas entran en cascada (50ms, 0.5s decelerate) */
@keyframes rowIn {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: none; }
}
#faqExtra.is-entering > .faq-item { animation: rowIn 500ms var(--ease-decelerate) both; }
#faqExtra.is-entering > .faq-item:nth-child(2) { animation-delay: 50ms; }
#faqExtra.is-entering > .faq-item:nth-child(3) { animation-delay: 100ms; }
#faqExtra.is-entering > .faq-item:nth-child(4) { animation-delay: 150ms; }
#faqExtra.is-entering > .faq-item:nth-child(5) { animation-delay: 200ms; }
#faqExtra.is-entering > .faq-item:nth-child(6) { animation-delay: 250ms; }
#faqExtra.is-entering > .faq-item:nth-child(7) { animation-delay: 300ms; }
#faqExtra.is-entering > .faq-item:nth-child(8) { animation-delay: 350ms; }
#faqExtra.is-entering > .faq-item:nth-child(9) { animation-delay: 400ms; }

/* Toque: links y filas responden al dedo */
@media (hover: none) {
  .d-more:active, .faq-maps a:active, .faq-more-toggle:active, .rsvp-edit:active { opacity: 0.55; transform: none; }
  .stepper-btn:active:not(:disabled) { transform: scale(0.94); transition: transform 100ms var(--ease-decelerate); }
}

/* Sin capas GPU permanentes */
[data-reveal], [data-anim], .intro-morph .a, .intro-morph .m, .btn-submit { will-change: auto; }

@media (prefers-reduced-motion: reduce) {
  #faqExtra.is-entering > .faq-item { animation: none; }
  .faq-section .faq-a-inner { opacity: 1; }
  .rsvp-success.is-visible .wax-seal { animation: none; }
}


/* × del modal dibujada (más legible que el glifo) */
.modal-close { font-size: 0; color: transparent; border-color: rgba(26, 24, 20, 0.22); }
.modal-close span { display: none; }
.modal-close::before, .modal-close::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 16px; height: 1.5px;
  background: #1A1814;
  transform: translate(-50%, -50%) rotate(45deg);
}
.modal-close::after { transform: translate(-50%, -50%) rotate(-45deg); }

/* Contraste ≥4.5:1 sobre el vino plano y el papel */
/* olivo para texto chico: el olive-deep da ~4:1 sobre el papel; este, >5:1 */
:root { --olive-ink: #56664A; }
.pinned-eyebrow, .d-eyebrow, .cards-strip .flip-back-label, .venue-card-time,
.countdown-label, .modal-eyebrow, .donde-eyebrow, .faq-section-eyebrow, .date-eyebrow { color: var(--olive-ink); }
.rsvp-eyebrow, .rsvp-cupo, .rsvp-state-p, .field label { color: rgba(244, 241, 232, 0.9); }
.field-opt { color: rgba(244, 241, 232, 0.8); }
.rsvp-error { color: #F4F1E8; }


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   TARJETAS QUE SE VOLTEAN · cartulina con cuerpo (13-oct-2026)
   El giro lo anima interactions.js (WAAPI: transform/opacity). Aquí solo
   las piezas: sombra de "levantar", reflejo de luz, gesto y entrada.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
/* El JS manda: sin transición CSS que pelee con la animación */
.d-card.flip[data-rig] .flip-inner { transition: none !important; }
.cards-strip .flip-inner { z-index: 1; }

/* Arrastrar en horizontal voltea; en vertical sigue siendo scroll */
.cards-strip .d-card.flip {
  touch-action: pan-y pinch-zoom;
  -webkit-user-select: none;
  user-select: none;
}
.d-card.flip.is-dragging { cursor: grabbing; }
@media (hover: none) {
  .d-card.flip.is-dragging:active { transform: none; }
}

/* Sombra que crece cuando la cartulina se levanta de la mesa (pre-pintada:
   solo se anima su opacidad y ancho) */
.flip-lift {
  position: absolute;
  left: 4%; right: 4%; bottom: -7%;
  height: 46%;
  background: radial-gradient(ellipse 50% 50% at 50% 55%,
    rgba(26, 24, 20, 0.30) 0%, rgba(26, 24, 20, 0.12) 50%, rgba(26, 24, 20, 0) 100%);
  opacity: 0;
  pointer-events: none;
  z-index: 0;
}

/* Reflejo de luz que cruza el papel a mitad del giro */
.cards-strip .paper-face { overflow: hidden; }
.flip-sheen {
  position: absolute;
  top: -10%; bottom: -10%; left: 0;
  width: 50%;
  background: linear-gradient(100deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0.55) 50%,
    rgba(255, 255, 255, 0) 100%);
  transform: translateX(-140%) skewX(-12deg);
  opacity: 0;
  pointer-events: none;
  z-index: 3;
}

/* Entrada: las tres cartulinas se apoyan en cascada (0.85s expo-out, 40px,
   100ms entre cada una) y recién después la primera hace su asomo */
.cards-strip .d-card[data-reveal] {
  transform: translateY(40px);
  transition:
    opacity var(--t-panel) var(--ease-expo-out),
    transform var(--t-panel) var(--ease-expo-out);
}
.cards-strip .d-card[data-reveal].is-visible { transform: none; }
.cards-strip .d-card[data-reveal]:nth-child(2).is-visible { transition-delay: 100ms; }
.cards-strip .d-card[data-reveal]:nth-child(3).is-visible { transition-delay: 200ms; }

@media (prefers-reduced-motion: reduce) {
  .flip-lift, .flip-sheen { display: none; }
}
@media (hover: none) {
  .cards-strip .d-card.flip[data-reveal].is-visible:active:not(.is-dragging) { transform: scale(0.985); transition: transform 120ms var(--ease-decelerate); }
}

/* Portada · el subtítulo espera a que la pluma termine "Max" (main.js añade
   .is-written) */
body.is-loaded:not(.is-written) [data-anim="hero-3"] { opacity: 0; transform: translateY(20px); }
body.is-written [data-anim="hero-3"] { opacity: 1; transform: none; transition-delay: 0ms; }
@media (prefers-reduced-motion: reduce) {
  .pen-stroke { stroke-dashoffset: 0 !important; }
  .pen-settle { opacity: 1; }
}


/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   COREOGRAFÍA COMPLETA (13-oct-2026) · estándar motion-determinista
   Un evento a la vez, en orden de lectura; quietud mientras se lee.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* 1 · Portada: la foto se asienta mientras se levanta el intro (1.6s
   expo-out desde 1.06), y recién ahí la pluma empieza a escribir */
.hero-photo {
  transform: scale(1.06);
  opacity: 0;
  transition: transform 1600ms var(--ease-expo-out), opacity 700ms var(--ease-decelerate);
}
body.is-loaded .hero-photo { transform: none; opacity: 1; }

/* 2 · Invitación: sin animación interna (a pedido). El entintado de
   "Ariadna y Max" recortaba los rasgos de la letra inglesa, que salen de su
   caja. La plancha entra como las demás tarjetas y todo su texto con ella. */

/* 3 · Dónde: la tarjeta se apoya, después su ilustración y sus líneas */
.venue-card[data-reveal] .venue-card-art,
.venue-card[data-reveal] .venue-card-time,
.venue-card[data-reveal] .venue-card-kind,
.venue-card[data-reveal] .venue-card-name {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 500ms var(--ease-decelerate), transform 500ms var(--ease-decelerate);
}
.venue-card[data-reveal] .venue-card-art { transform: scale(0.94); transition-duration: 700ms; }
.venue-card.is-visible .venue-card-art  { opacity: 1; transform: none; transition-delay: 380ms; }
.venue-card.is-visible .venue-card-time { opacity: 1; transform: none; transition-delay: 520ms; }
.venue-card.is-visible .venue-card-kind { opacity: 1; transform: none; transition-delay: 590ms; }
.venue-card.is-visible .venue-card-name { opacity: 1; transform: none; transition-delay: 660ms; }

/* 4 · "05.12.26": la fecha entra como una pieza y los puntos en vino
   caen después (detalle chico: escala desde .6) */
.date-big[data-reveal] .date-dot {
  display: inline-block;
  opacity: 0;
  transform: scale(0.6);
  transition: opacity 400ms var(--ease-decelerate), transform 400ms var(--ease-decelerate);
}
.date-big.is-visible .date-dot { opacity: 1; transform: none; transition-delay: 650ms; }
.date-big.is-visible .date-dot ~ .date-dot { transition-delay: 730ms; }

/* 5 · RSVP: antetítulo → "¿Nos acompañan?" (titular) */
.rsvp-h[data-reveal]:not(.is-visible) { transform: translateY(32px); }

@media (prefers-reduced-motion: reduce) {
  .hero-photo { transform: none; opacity: 1; transition: none; }
  .venue-card[data-reveal] .venue-card-art, .venue-card[data-reveal] .venue-card-time,
  .venue-card[data-reveal] .venue-card-kind, .venue-card[data-reveal] .venue-card-name,
  .date-big[data-reveal] .date-dot { opacity: 1; transform: none; }
}

/* Nota de privacidad bajo el formulario (discreta, legible sobre el vino) */
.rsvp-privacy {
  margin-top: 4px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 13.5px;
  line-height: 1.5;
  text-align: center;
  color: rgba(244, 241, 232, 0.82);
}

/* ─── RSVP · "No podremos asistir" (secundario, dos toques) ─── */
.rsvp-decline {
  display: block;
  margin: 18px auto 0;
  min-height: 44px;
  padding: 10px 16px;
  font-family: var(--f-display);
  font-style: italic;
  font-size: 15px;
  color: rgba(244, 241, 232, 0.74);
  background: none;
  border: 0;
  text-decoration: underline;
  text-decoration-color: rgba(244, 241, 232, 0.35);
  text-underline-offset: 4px;
  cursor: pointer;
  transition: color 200ms var(--ease-out);
}
.rsvp-decline.is-confirming { color: #F4F1E8; text-decoration-color: currentColor; }
.rsvp-decline[disabled] { opacity: 0.6; cursor: progress; }
@media (hover: hover) and (pointer: fine) { .rsvp-decline:hover { color: #F4F1E8; } }

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   RSVP · ¿Quiénes van? — cada persona de la invitación se marca sola
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
#adultosField.is-hidden { display: none; }
.field-row:has(> .is-hidden) { grid-template-columns: 1fr; }
.rsvp-personas { border: 0; margin: 0; padding: 0; min-width: 0; display: grid; gap: 10px; }
.rsvp-personas legend {
  padding: 0; margin-bottom: 10px;
  font-family: var(--f-display); font-style: italic; font-size: 14px; color: rgba(244, 241, 232, 0.88);
}
.rsvp-personas legend em { color: #F4F1E8; }
.personas-list { display: grid; gap: 8px; }
.persona {
  position: relative; display: flex; align-items: center; gap: 14px;
  min-height: 52px; padding: 12px 16px;
  border: 0.5px solid rgba(244, 241, 232, 0.28);
  background: rgba(10, 9, 8, 0.18);
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  transition: border-color 200ms var(--ease-out), background 200ms var(--ease-out);
}
.persona input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.persona-box {
  flex: none; width: 22px; height: 22px; border: 1px solid rgba(244, 241, 232, 0.6);
  display: grid; place-items: center;
  transition: background 180ms var(--ease-out), border-color 180ms var(--ease-out);
}
.persona-box::after {
  content: ''; width: 10px; height: 6px; margin-top: -3px;
  border-left: 1.5px solid #722F37; border-bottom: 1.5px solid #722F37;
  transform: rotate(-45deg) scale(0); transition: transform 180ms var(--ease-out);
}
.persona-name { font-family: var(--f-display); font-style: italic; font-size: 18px; color: #F4F1E8; transition: opacity 180ms, text-decoration-color 180ms; }
.persona input:checked + .persona-box { background: #F4F1E8; border-color: #F4F1E8; }
.persona input:checked + .persona-box::after { transform: rotate(-45deg) scale(1); }
.persona input:not(:checked) ~ .persona-name { opacity: 0.55; text-decoration: line-through; text-decoration-thickness: 0.5px; }
.persona:has(input:checked) { border-color: rgba(244, 241, 232, 0.6); background: rgba(10, 9, 8, 0.28); }
.persona input:focus-visible + .persona-box { outline: 2px solid #E5B4BA; outline-offset: 3px; }

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   CIERRE — espejo del arranque: la foto de portada vuelve, "Ariadna & Max."
   se escribe otra vez a pluma y recién entonces llega el gracias.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
html.cierre-open, html.cierre-open body { overflow: hidden; }
.cierre {
  position: fixed; inset: 0; z-index: 800;
  display: grid; place-items: center;
  background: #0A0908; color: #F4F1E8;
  opacity: 0; transition: opacity 500ms var(--ease-decelerate, ease-out);
  overscroll-behavior: contain;
}
.cierre[hidden] { display: none; }
.cierre.is-visible { opacity: 1; }
.cierre-photo {
  position: absolute; inset: -2%;
  background-image: url('/photos/hero-silueta.jpg');
  background-image: -webkit-image-set(url('/photos/hero-silueta.webp') 1x);
  background-image: image-set(url('/photos/hero-silueta.avif') type('image/avif'), url('/photos/hero-silueta.webp') type('image/webp'), url('/photos/hero-silueta.jpg') type('image/jpeg'));
  background-size: cover; background-position: center 62%;
  transform: scale(1.08); opacity: 0.0;
  transition: transform 2600ms var(--ease-decelerate, ease-out), opacity 900ms var(--ease-decelerate, ease-out);
}
.cierre-photo::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(10, 9, 8, 0.72) 0%, rgba(10, 9, 8, 0.45) 40%, rgba(10, 9, 8, 0.88) 100%);
}
.cierre.is-visible .cierre-photo { transform: scale(1); opacity: 1; }
.cierre-inner {
  position: relative; width: min(760px, 100%); padding: 24px var(--page-pad, 24px) calc(24px + env(safe-area-inset-bottom));
  text-align: center; display: grid; justify-items: center;
}
.cierre-inner:focus { outline: none; }
.cierre-title { width: min(620px, 88vw); margin: 18px 0 26px; }
.cierre-title .hero-title-svg { max-width: none; }
.cierre-eyebrow {
  font-family: var(--f-mono); font-size: 11px; letter-spacing: 0.36em; text-transform: uppercase; color: #E5B4BA;
}
.cierre-h {
  font-family: var(--f-display); font-style: italic; font-weight: 300;
  font-size: clamp(30px, 7.4vw, 56px); line-height: 1.08; letter-spacing: -0.02em; text-wrap: balance;
}
.cierre-sub { margin-top: 14px; font-family: var(--f-display); font-style: italic; font-size: 18px; line-height: 1.5; color: rgba(244, 241, 232, 0.86); text-wrap: balance; max-width: 30ch; }
.cierre-fecha { margin-top: 34px; font-family: var(--f-mono); font-size: 10.5px; letter-spacing: 0.28em; text-transform: uppercase; color: rgba(244, 241, 232, 0.62); }
.cierre-back {
  margin-top: 30px; min-height: 44px; padding: 10px 16px; border: 0; background: none;
  font-family: var(--f-display); font-style: italic; font-size: 15px; color: rgba(244, 241, 232, 0.82);
  text-decoration: underline; text-decoration-color: rgba(244, 241, 232, 0.35); text-underline-offset: 4px; cursor: pointer;
}
/* orden de entrada: antetítulo → pluma (0.55–1.75s) → gracias → fecha → volver */
.cierre-eyebrow, .cierre-h, .cierre-sub, .cierre-fecha, .cierre-back {
  opacity: 0; transform: translateY(16px);
  transition: opacity 600ms var(--ease-decelerate, ease-out), transform 700ms var(--ease-expo-out, ease-out);
}
.cierre.is-visible .cierre-eyebrow { opacity: 1; transform: none; transition-delay: 250ms; }
.cierre.is-visible .cierre-h       { opacity: 1; transform: none; transition-delay: 1700ms; }
.cierre.is-visible .cierre-sub     { opacity: 1; transform: none; transition-delay: 1900ms; }
.cierre.is-visible .cierre-fecha   { opacity: 1; transform: none; transition-delay: 2200ms; }
.cierre.is-visible .cierre-back    { opacity: 1; transform: none; transition-delay: 2500ms; }
@media (max-width: 700px) {
  .cierre-photo {
    background-image: url('/photos/hero-silueta-m.jpg');
    background-image: -webkit-image-set(url('/photos/hero-silueta-m.webp') 1x);
    background-image: image-set(url('/photos/hero-silueta-m.avif') type('image/avif'), url('/photos/hero-silueta-m.webp') type('image/webp'), url('/photos/hero-silueta-m.jpg') type('image/jpeg'));
    background-size: auto 118%; background-position: 22% 100%;
  }
}
@media (prefers-reduced-motion: reduce) {
  .cierre, .cierre-photo, .cierre-eyebrow, .cierre-h, .cierre-sub, .cierre-fecha, .cierre-back { transition: opacity 200ms linear; transform: none; }
}

/* Cierre · confirmó: la foto de la pedida (dijeron que sí) · no va: la portada */
.cierre.is-si .cierre-photo {
  background-image: url('/photos/proposal-moment.jpg');
  background-image: image-set(url('/photos/proposal-moment.webp') type('image/webp'), url('/photos/proposal-moment.jpg') type('image/jpeg'));
  background-position: center 40%;
}
@media (max-width: 700px) {
  .cierre.is-si .cierre-photo {
    background-image: url('/photos/proposal-vertical.jpg');
    background-image: image-set(url('/photos/proposal-vertical.webp') type('image/webp'), url('/photos/proposal-vertical.jpg') type('image/jpeg'));
    background-size: cover; background-position: center bottom;
  }
  /* el texto va sobre el cielo y el puente; la pareja queda abajo, a la vista */
  .cierre.is-si { place-items: start center; }
  .cierre.is-si .cierre-inner { padding-top: max(9vh, 40px); }
  .cierre.is-si .cierre-photo::after {
    background: linear-gradient(180deg, rgba(10, 9, 8, 0.82) 0%, rgba(10, 9, 8, 0.62) 42%, rgba(10, 9, 8, 0.12) 72%, rgba(10, 9, 8, 0.35) 100%);
  }
}
@media (max-width: 700px) {
  /* la foto se apoya abajo a todo el ancho: las caras quedan en la mitad inferior */
  .cierre.is-si .cierre-photo { inset: 0; background-size: 100% auto; background-position: center bottom; background-repeat: no-repeat; }
  .cierre.is-si .cierre-photo::after {
    background: linear-gradient(180deg, #0A0908 0%, rgba(10, 9, 8, 0.92) 30%, rgba(10, 9, 8, 0.55) 52%, rgba(10, 9, 8, 0.08) 70%, rgba(10, 9, 8, 0.55) 100%);
  }
  .cierre.is-si .cierre-inner { min-height: 100%; padding-top: max(7vh, 32px); }
  .cierre.is-si .cierre-title { margin: 12px 0 16px; }
  .cierre.is-si .cierre-fecha { margin-top: 18px; }
  .cierre.is-si .cierre-back { position: absolute; left: 50%; bottom: calc(14px + env(safe-area-inset-bottom)); translate: -50% 0; margin: 0; text-shadow: 0 1px 8px rgba(10, 9, 8, 0.8); }
}
.cierre-sub span { display: block; }
@media (max-width: 700px) {
  .cierre.is-si .cierre-inner { align-content: start; }
  /* la foto mide 150vw de alto y se apoya abajo: el degradado se mide desde su borde */
  .cierre.is-si .cierre-photo::after {
    background: linear-gradient(180deg,
      #0A0908 calc(100% - 150vw),
      rgba(10, 9, 8, 0.88) calc(100% - 128vw),
      rgba(10, 9, 8, 0.6) calc(100% - 104vw),
      rgba(10, 9, 8, 0.1) calc(100% - 82vw),
      rgba(10, 9, 8, 0.1) calc(100% - 40vw),
      rgba(10, 9, 8, 0.6) 100%);
  }
}
.cierre-back { white-space: nowrap; }
.cierre-h, .cierre-sub { text-shadow: 0 1px 14px rgba(10, 9, 8, 0.55); }
@media (max-width: 700px) { .cierre.is-si .cierre-fecha { display: none; } }

/* RSVP · datos del acompañante ("pareja", "acompañante") */
.persona-item { display: grid; gap: 0; }
.acomp { display: grid; gap: 12px; padding: 14px 16px 16px 52px; border: 0.5px solid rgba(244, 241, 232, 0.28); border-top: 0; background: rgba(10, 9, 8, 0.22); }
.acomp[hidden] { display: none; }
.acomp-h { font-family: var(--f-display); font-style: italic; font-size: 14px; line-height: 1.4; color: rgba(244, 241, 232, 0.82); }
.acomp-f { display: grid; gap: 6px; font-family: var(--f-display); font-style: italic; font-size: 13px; color: rgba(244, 241, 232, 0.88); }
@media (max-width: 420px) { .acomp { padding-left: 16px; } }

/* Invitación · celular: nombres de los papás más chicos y más arriba en la plancha */
@media (max-width: 480px) {
  .invite-frame { padding-top: 26px; }
  .invite-parents { gap: 12px; }
  .invite-parent p { font-size: clamp(9px, 2.6vw, 10.5px); letter-spacing: 0.07em; margin-bottom: 3px; }
}

/* Preguntas · "Ver datos" (mismo aspecto que los links de mapas) */
.faq-maps .faq-link {
  font-family: var(--f-display); font-style: italic; font-size: 14px; color: var(--wine);
  text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.22em;
  background: none; border: 0; padding: 0; min-height: 44px; cursor: pointer;
}
.faq-maps .faq-link:active { opacity: 0.55; }
.faq-sin-datos { font-family: var(--f-display); font-style: italic; font-size: 14px; color: var(--ink-soft, rgba(26, 24, 20, 0.62)); }
.faq-sin-datos[hidden], #datosLink[hidden] { display: none; }

/* Tarjeta de datos para transferencia (usa la misma tarjeta/modal de papel) */
.datos-grid { display: grid; gap: 18px; }
@media (min-width: 560px) { .datos-grid { grid-template-columns: 1fr 1fr; column-gap: 32px; } }
.dato .modal-section-label { margin-bottom: 6px; }
.dato p:not(.modal-section-label) { font-size: 17px; color: var(--cream); overflow-wrap: anywhere; }
.dato-copiar, .dato-todo {
  font-family: var(--f-display); font-style: italic; font-size: 14px; color: var(--cream-soft);
  background: none; border: 0; padding: 0 0 0 8px; min-height: 36px; cursor: pointer;
  text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.22em;
}
.dato-todo { padding-left: 0; font-size: 15px; color: var(--cream); min-height: 44px; }
.dato-copiar.is-ok, .dato-todo.is-ok { text-decoration: none; opacity: 0.7; }

/* ── Pie (traído de la v2): enlaces + nombre gigante tono sobre tono ── */
.footer {
  background: var(--ink);
  padding: 56px var(--page-pad) 0;
  overflow: hidden;
  text-align: center;
  border-top: var(--hairline-thin);
}
.footer-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 22px; margin: 0; }
.footer-links a {
  display: inline-flex; align-items: center; min-height: 40px;
  font-family: var(--f-body); font-size: 13px; letter-spacing: 0.01em;
  color: var(--cream-mute); text-decoration: none;
  transition: color 200ms ease;
}
.footer-links a:hover, .footer-links a:focus-visible { color: var(--wine-bright); }
.footer-fine {
  margin: 10px 0 0;
  font-family: var(--f-display); font-style: italic; font-weight: 400;
  font-size: 13px; letter-spacing: 0.02em; color: var(--cream-mute);
}
.footer-word {
  margin: 24px 0 0;
  font: italic 300 clamp(64px, 17vw, 300px)/0.8 var(--f-display);
  letter-spacing: -0.045em; white-space: nowrap;
  color: rgba(26, 24, 20, 0.07);
  transform: translateY(0.14em);
  -webkit-user-select: none; user-select: none;
  pointer-events: none;
}
@media (max-width: 560px) {
  .footer { padding-top: 40px; }
  .footer-links { gap: 0 18px; max-width: 320px; margin: 0 auto; }
}
