/* Noche de gala · XV — theme de muestra v1 (ADR-078).
 *
 * Una noche azul con cielo de puntos dorados. La paleta del evento manda: el
 * fondo es la noche, el primario es el oro con que se escribe y se rellena,
 * y la tinta es marfil. Bodoni Moda para nombre y títulos —itálica con brillo
 * de lámina en el nombre—, Manrope para leer. La portada es la foto a sangre
 * fundida en la noche; el motivo que se repite es el marco editorial: filete
 * dorado, un segundo filete desplazado y un destello en la esquina.
 *
 * Todo el movimiento vive bajo `prefers-reduced-motion: no-preference`.
 */
@font-face {
  font-family: GalaDisplay;
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('./fonts/bodoni-moda-normal-latin.woff2') format('woff2');
}
@font-face {
  font-family: GalaDisplay;
  font-style: italic;
  font-weight: 400 700;
  font-display: swap;
  src: url('./fonts/bodoni-moda-italic-latin.woff2') format('woff2');
}

/* Tokens. También en el artículo: la vista previa no pone la paleta en el body. */
[data-evento-theme='gala-xv'],
[data-evento-theme='gala-xv'] .gala-experience {
  --gala-night: var(--event-background, #0e1a33);
  --gala-ink: var(--event-text, #eef1f8);
  --gala-gold: var(--event-primary, #d9b870);
  --gala-gold-2: var(--event-accent, #c9a227);
  --gala-on-gold: var(--event-on-primary, #0b1428);
  /* El lila del vestido, apenas: tiñe el cielo de la portada y el brillo del
     cierre para que la noche no sea un azul plano. */
  --gala-lilac: color-mix(in srgb, #b9a3e3 55%, var(--gala-night));
  --gala-night-2: color-mix(in srgb, var(--gala-night) 86%, #3a4f86);
  --gala-night-3: color-mix(in srgb, var(--gala-night) 92%, #000);
  --gala-card: color-mix(in srgb, var(--gala-night) 80%, #ffffff 9%);
  --gala-muted: color-mix(in srgb, var(--gala-ink) 72%, var(--gala-night));
  --gala-line: color-mix(in srgb, var(--gala-gold) 42%, transparent);
  --gala-line-soft: color-mix(in srgb, var(--gala-gold) 18%, transparent);
  --gala-foil: linear-gradient(
    100deg,
    color-mix(in srgb, var(--gala-gold) 70%, #7a5a1c) 0%,
    color-mix(in srgb, var(--gala-gold) 60%, #fff6d8) 28%,
    var(--gala-gold) 46%,
    color-mix(in srgb, var(--gala-gold) 55%, #fffbe9) 62%,
    color-mix(in srgb, var(--gala-gold) 75%, #6b4d17) 100%
  );
  --gala-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.35 0 0 0 0 0.3 0 0 0 0 0.2 0 0 0 0.09 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  --gala-display: GalaDisplay, 'Bodoni Moda', Didot, Georgia, serif;
  --gala-sans: Manrope, system-ui, sans-serif;
  --gala-label-size: 0.72rem;
  --gala-title-size: clamp(2.3rem, 9vw, 3.4rem);
  --gala-column: 42rem;
  --gala-gutter: clamp(1.25rem, 5vw, 2.5rem);
  --gala-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --gala-spark: polygon(50% 0, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0 50%, 40% 40%);
  accent-color: var(--gala-gold);
}

/* Página */
[data-evento-theme='gala-xv'].event-page {
  background: var(--gala-night);
}
[data-evento-theme='gala-xv'].event-page main {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
[data-evento-theme='gala-xv'] .gala-experience {
  position: relative;
  width: 100%;
  overflow: clip;
  background: var(--gala-night);
  color: var(--gala-ink);
  font: 400 1rem/1.7 var(--gala-sans);
  -webkit-font-smoothing: antialiased;
}
[data-evento-theme='gala-xv'] .gala-experience :where(h1, h2, h3, p, ul, ol, figure, blockquote) {
  margin: 0;
}
[data-evento-theme='gala-xv'] .gala-experience :where(ul, ol) {
  padding: 0;
  list-style: none;
}
[data-evento-theme='gala-xv'] .gala-experience a:not(.gala-button) {
  color: var(--gala-gold);
}
[data-evento-theme='gala-xv'] .gala-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* Cielo */
[data-evento-theme='gala-xv'] .gala-stars {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
[data-evento-theme='gala-xv'] .gala-star {
  fill: var(--gala-gold);
  opacity: 0.55;
}
[data-evento-theme='gala-xv'] .gala-star-twinkle {
  opacity: 0.9;
}

/* Tipografía común */
[data-evento-theme='gala-xv'] .gala-label {
  color: var(--gala-gold);
  font: 600 var(--gala-label-size) / 1.4 var(--gala-sans);
  letter-spacing: 0.32em;
  text-transform: uppercase;
}
/* La etiqueta que abre una sección lleva un filete corto debajo. */
[data-evento-theme='gala-xv'] .gala-eyebrow {
  display: grid;
  justify-items: center;
  gap: 0.75rem;
}
[data-evento-theme='gala-xv'] .gala-eyebrow::after {
  content: '';
  width: 2.5rem;
  height: 1px;
  background: var(--gala-gold);
  opacity: 0.7;
}
[data-evento-theme='gala-xv'] .gala-label-icon {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
}
[data-evento-theme='gala-xv'] .gala-icon {
  width: 1.35rem;
  height: 1.35rem;
  flex: none;
}
[data-evento-theme='gala-xv'] .gala-title {
  color: var(--gala-ink);
  font: 400 var(--gala-title-size) / 1.08 var(--gala-display);
  text-wrap: balance;
}
[data-evento-theme='gala-xv'] .gala-text {
  color: var(--gala-muted);
  font-size: 1rem;
}
[data-evento-theme='gala-xv'] .gala-prose {
  white-space: pre-line;
}
[data-evento-theme='gala-xv'] .gala-text strong {
  color: var(--gala-gold);
  font-weight: 700;
  letter-spacing: 0.08em;
}
[data-evento-theme='gala-xv'] .gala-spark {
  width: 1.5rem;
  height: 1.5rem;
  background: var(--gala-foil);
  clip-path: var(--gala-spark);
}

/* Secciones: el ritmo lo dan dos fondos que se alternan, no las tarjetas. */
[data-evento-theme='gala-xv'] .gala-section {
  position: relative;
  padding: clamp(4rem, 13vw, 6.5rem) var(--gala-gutter);
}
[data-evento-theme='gala-xv'] .gala-section-alt {
  background:
    radial-gradient(
      120% 70% at 50% 0%,
      color-mix(in srgb, var(--gala-night-2) 70%, var(--gala-lilac)),
      transparent 70%
    ),
    var(--gala-night-2);
}
[data-evento-theme='gala-xv'] .gala-inner {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 1rem;
  max-width: var(--gala-column);
  margin: 0 auto;
  text-align: center;
}
[data-evento-theme='gala-xv'] .gala-section-head {
  margin-bottom: clamp(2rem, 6vw, 3rem);
}
[data-evento-theme='gala-xv'] .gala-card {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 0.9rem;
  max-width: var(--gala-column);
  margin: 0 auto;
  padding: clamp(2rem, 7vw, 2.75rem) clamp(1.25rem, 6vw, 2.5rem);
  border: 1px solid var(--gala-line);
  border-radius: 0.5rem;
  background: var(--gala-card);
  text-align: center;
  box-shadow: 0 30px 60px -40px rgb(0 0 0 / 0.8);
}

/* Botones */
[data-evento-theme='gala-xv'] .gala-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.6rem;
  margin-top: 0.5rem;
}
[data-evento-theme='gala-xv'] .gala-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  min-height: 2.9rem;
  padding: 0.7rem 1.35rem;
  border: 1px solid var(--gala-gold);
  border-radius: 999px;
  background: transparent;
  color: var(--gala-gold);
  font: 700 0.72rem/1 var(--gala-sans);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  transition:
    background 0.25s ease,
    color 0.25s ease;
}
[data-evento-theme='gala-xv'] .gala-button .gala-icon {
  width: 1rem;
  height: 1rem;
}
[data-evento-theme='gala-xv'] .gala-button:is(:hover, :focus-visible) {
  background: color-mix(in srgb, var(--gala-gold) 14%, transparent);
}
[data-evento-theme='gala-xv'] .gala-button-gold {
  border-color: transparent;
  background: var(--gala-foil);
  color: var(--gala-on-gold);
}
[data-evento-theme='gala-xv'] .gala-button-gold:is(:hover, :focus-visible) {
  background: var(--gala-gold);
}
[data-evento-theme='gala-xv'] :is(.gala-button, button, a):focus-visible {
  outline: 2px solid var(--gala-gold);
  outline-offset: 3px;
}

/* Marco editorial: filete, segundo filete desplazado y destello en la esquina. */
[data-evento-theme='gala-xv'] .gala-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
}
[data-evento-theme='gala-xv'] .gala-frame img {
  position: relative;
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 0.25rem;
  object-fit: cover;
  box-shadow: 0 0 0 1px var(--gala-line);
}
[data-evento-theme='gala-xv'] .gala-frame::before {
  content: '';
  position: absolute;
  inset: 0.6rem -0.6rem -0.6rem 0.6rem;
  border: 1px solid var(--gala-line);
  border-radius: 0.25rem;
  pointer-events: none;
}
[data-evento-theme='gala-xv'] .gala-frame::after {
  content: '';
  position: absolute;
  top: -0.75rem;
  right: -0.75rem;
  z-index: 1;
  width: 1.5rem;
  height: 1.5rem;
  background: var(--gala-foil);
  clip-path: var(--gala-spark);
}

/* Portada: la foto a sangre, fundida en la noche por abajo. */
[data-evento-theme='gala-xv'] .gala-hero {
  position: relative;
  display: grid;
  align-content: end;
  justify-items: center;
  min-height: 100svh;
  padding: clamp(3rem, 10vw, 5rem) var(--gala-gutter) clamp(3rem, 9vw, 4.5rem);
  overflow: hidden;
  text-align: center;
}
[data-evento-theme='gala-xv'] .gala-hero-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 20%;
}
[data-evento-theme='gala-xv'] .gala-hero-veil {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(
      180deg,
      color-mix(in srgb, var(--gala-lilac) 45%, transparent) 0%,
      transparent 28%,
      color-mix(in srgb, var(--gala-night) 55%, transparent) 55%,
      var(--gala-night) 82%
    ),
    linear-gradient(0deg, var(--gala-night) 0%, transparent 20%);
  pointer-events: none;
}
[data-evento-theme='gala-xv'] .gala-hero:not(.has-cover) .gala-hero-veil {
  background: radial-gradient(120% 60% at 50% 0%, var(--gala-night-2), transparent 70%);
}
[data-evento-theme='gala-xv'] .gala-hero:not(.has-cover) {
  align-content: center;
}
/* Las estrellas sólo sobre la noche, no sobre la foto. */
[data-evento-theme='gala-xv'] .gala-hero-stars {
  -webkit-mask-image: linear-gradient(180deg, transparent 35%, #000 70%);
  mask-image: linear-gradient(180deg, transparent 35%, #000 70%);
}
[data-evento-theme='gala-xv'] .gala-hero:not(.has-cover) .gala-hero-stars {
  -webkit-mask-image: none;
  mask-image: none;
}
[data-evento-theme='gala-xv'] .gala-hero-inner {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 1rem;
  max-width: var(--gala-column);
}
[data-evento-theme='gala-xv'] .gala-hero-name:focus {
  outline: none;
}
[data-evento-theme='gala-xv'] .gala-hero-name {
  display: grid;
  justify-items: center;
  gap: 0.5rem;
}
[data-evento-theme='gala-xv'] .gala-name {
  padding-inline: 0.1em;
  background: var(--gala-foil);
  background-size: 200% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  font: italic 500 clamp(4rem, 19vw, 7.5rem) / 1 var(--gala-display);
  letter-spacing: -0.01em;
  filter: drop-shadow(0 6px 24px rgb(0 0 0 / 0.45));
}
[data-evento-theme='gala-xv'] .gala-surname {
  color: var(--gala-ink);
  font: 400 clamp(1rem, 4vw, 1.25rem) / 1 var(--gala-display);
  letter-spacing: 0.55em;
  text-indent: 0.55em;
  text-transform: uppercase;
}
[data-evento-theme='gala-xv'] .gala-hero-date {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  margin-top: 0.75rem;
  color: var(--gala-gold);
  font: 500 1.1rem/1 var(--gala-display);
  letter-spacing: 0.3em;
}
[data-evento-theme='gala-xv'] .gala-hero-line {
  width: 2.5rem;
  height: 1px;
  background: var(--gala-line);
}
[data-evento-theme='gala-xv'] .gala-hero-long {
  color: var(--gala-muted);
  font-size: 0.85rem;
  letter-spacing: 0.08em;
}
[data-evento-theme='gala-xv'] .gala-music {
  position: absolute;
  right: 1rem;
  bottom: 1rem;
  display: grid;
  place-items: center;
  width: 2.9rem;
  height: 2.9rem;
  border: 1px solid var(--gala-line);
  border-radius: 50%;
  background: color-mix(in srgb, var(--gala-night) 70%, transparent);
  color: var(--gala-gold);
  cursor: pointer;
}
[data-evento-theme='gala-xv'] .gala-music.is-playing {
  background: var(--gala-gold);
  color: var(--gala-on-gold);
}

/* Enlace personal */
[data-evento-theme='gala-xv'] .gala-personal-seats {
  color: var(--gala-gold);
  font: italic 400 1.4rem/1.2 var(--gala-display);
}

/* Cuenta regresiva: una cifra protagonista con brillo de lámina */
[data-evento-theme='gala-xv'] .gala-countdown {
  display: grid;
  justify-items: center;
  gap: 0.4rem;
  margin-top: 0.5rem;
}
[data-evento-theme='gala-xv'] .gala-countdown-lead {
  color: var(--gala-ink);
  font: italic 400 1.5rem/1 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-countdown-days {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
}
[data-evento-theme='gala-xv'] .gala-countdown-number {
  background: var(--gala-foil);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  font: 500 clamp(5.5rem, 28vw, 9rem) / 0.9 var(--gala-display);
  font-variant-numeric: lining-nums tabular-nums;
  letter-spacing: -0.03em;
}
[data-evento-theme='gala-xv'] .gala-countdown-days-label {
  color: var(--gala-ink);
  font: italic 400 1.6rem/1 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-countdown-small {
  display: flex;
  gap: 1.5rem;
  margin-top: 0.5rem;
}
[data-evento-theme='gala-xv'] .gala-countdown-unit {
  display: inline-flex;
  align-items: baseline;
  gap: 0.35rem;
}
[data-evento-theme='gala-xv'] .gala-countdown-value {
  color: var(--gala-ink);
  font: 500 1.35rem/1 var(--gala-display);
  font-variant-numeric: lining-nums tabular-nums;
}
[data-evento-theme='gala-xv'] .gala-countdown-label {
  color: var(--gala-gold);
  font: 600 0.62rem/1 var(--gala-sans);
  letter-spacing: 0.22em;
  text-transform: uppercase;
}
[data-evento-theme='gala-xv'] .gala-countdown-done {
  display: none;
  color: var(--gala-gold);
  font: italic 500 2.2rem/1.2 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-countdown.is-done > :not(.gala-countdown-done) {
  display: none;
}
[data-evento-theme='gala-xv'] .gala-countdown.is-done .gala-countdown-done {
  display: block;
}

/* Bienvenida */
[data-evento-theme='gala-xv'] .gala-welcome-title {
  color: var(--gala-gold);
  font: italic 500 clamp(2rem, 7.5vw, 2.8rem) / 1.15 var(--gala-display);
  text-wrap: balance;
}
[data-evento-theme='gala-xv'] .gala-quote {
  display: grid;
  gap: 1rem;
  color: var(--gala-ink);
  font: italic 400 clamp(1.2rem, 4.6vw, 1.45rem) / 1.6 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-quote footer {
  margin-top: 0.5rem;
}

/* Familia */
[data-evento-theme='gala-xv'] .gala-icon-cross {
  width: 1.8rem;
  height: 1.8rem;
  color: var(--gala-gold);
}
[data-evento-theme='gala-xv'] .gala-family-title {
  display: grid;
  gap: 0.2rem;
}
[data-evento-theme='gala-xv'] .gala-family-title span {
  color: var(--gala-muted);
  font-size: 0.62em;
  font-style: italic;
}
[data-evento-theme='gala-xv'] .gala-names {
  display: grid;
  gap: 0.35rem;
  color: var(--gala-ink);
  font: 400 1.3rem/1.35 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-family-label {
  margin-top: 1.5rem;
}
[data-evento-theme='gala-xv'] .gala-names-grid {
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  gap: 0.9rem 1.5rem;
  width: 100%;
}
[data-evento-theme='gala-xv'] .gala-names-grid li {
  display: grid;
  gap: 0.15rem;
}
[data-evento-theme='gala-xv'] .gala-names-grid small {
  color: var(--gala-gold);
  font: 600 0.65rem/1.4 var(--gala-sans);
  letter-spacing: 0.24em;
  text-transform: uppercase;
}

/* Pausa fotográfica */
[data-evento-theme='gala-xv'] .gala-interlude {
  position: relative;
  display: grid;
  align-content: end;
  justify-items: center;
  min-height: clamp(26rem, 78svh, 40rem);
  padding: 4rem var(--gala-gutter) clamp(3rem, 9vw, 4.5rem);
  overflow: hidden;
  text-align: center;
}
[data-evento-theme='gala-xv'] .gala-interlude-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
[data-evento-theme='gala-xv'] .gala-interlude-veil {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    180deg,
    var(--gala-night) 0%,
    transparent 22%,
    transparent 50%,
    color-mix(in srgb, var(--gala-night) 70%, transparent) 75%,
    var(--gala-night) 100%
  );
  pointer-events: none;
}
[data-evento-theme='gala-xv'] .gala-interlude-caption {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 0.9rem;
  max-width: var(--gala-column);
}
[data-evento-theme='gala-xv'] .gala-interlude-title {
  color: var(--gala-ink);
  font: italic 400 clamp(2.2rem, 9vw, 3.6rem) / 1.05 var(--gala-display);
  text-wrap: balance;
  text-shadow: 0 4px 24px rgb(0 0 0 / 0.5);
}

/* Sedes */
[data-evento-theme='gala-xv'] .gala-venue-list {
  display: grid;
  gap: 1.75rem;
  max-width: 64rem;
  margin: 0 auto;
}
[data-evento-theme='gala-xv'] .gala-venue {
  width: 100%;
}
[data-evento-theme='gala-xv'] .gala-venue-frame {
  width: calc(100% - 0.6rem);
  margin: 0.25rem 0.6rem 1.1rem 0;
}
[data-evento-theme='gala-xv'] .gala-venue-name {
  color: var(--gala-ink);
  font: 400 clamp(1.7rem, 6.5vw, 2.3rem) / 1.15 var(--gala-display);
  text-wrap: balance;
}
[data-evento-theme='gala-xv'] .gala-venue-time {
  color: var(--gala-gold);
  font: 500 2.2rem/1 var(--gala-display);
  font-variant-numeric: lining-nums;
}
[data-evento-theme='gala-xv'] .gala-venue-time span {
  font-size: 0.5em;
  letter-spacing: 0.08em;
}
[data-evento-theme='gala-xv'] .gala-option {
  display: grid;
  justify-items: center;
  gap: 0.5rem;
}
[data-evento-theme='gala-xv'] .gala-option + .gala-option {
  margin-top: 0.75rem;
  padding-top: 1rem;
  border-top: 1px solid var(--gala-line-soft);
}
[data-evento-theme='gala-xv'] .gala-option-name {
  color: var(--gala-ink);
  font: 500 1.3rem/1.2 var(--gala-display);
}

/* Programa: línea de tiempo con estrellas */
[data-evento-theme='gala-xv'] .gala-timeline {
  position: relative;
  display: grid;
  gap: 1.4rem;
  width: min(100%, 30rem);
  margin-top: 1rem;
  text-align: left;
}
[data-evento-theme='gala-xv'] .gala-timeline::before {
  content: '';
  position: absolute;
  top: 0.4rem;
  bottom: 0.4rem;
  left: calc(6.2rem + 0.6rem);
  width: 1px;
  background: linear-gradient(transparent, var(--gala-line) 10%, var(--gala-line) 90%, transparent);
}
[data-evento-theme='gala-xv'] .gala-timeline li {
  display: grid;
  grid-template-columns: 6.2rem 1.2rem 1fr;
  align-items: center;
  gap: 0.9rem;
}
[data-evento-theme='gala-xv'] .gala-timeline-time {
  color: var(--gala-gold);
  font: 500 1.35rem/1 var(--gala-display);
  font-variant-numeric: lining-nums;
  text-align: right;
}
[data-evento-theme='gala-xv'] .gala-timeline-time span {
  font-size: 0.6em;
}
[data-evento-theme='gala-xv'] .gala-timeline-star {
  position: relative;
  z-index: 1;
  width: 1.2rem;
  height: 1.2rem;
  background: var(--gala-foil);
  clip-path: var(--gala-spark);
}
[data-evento-theme='gala-xv'] .gala-timeline-label {
  color: var(--gala-ink);
  font-size: 1rem;
  line-height: 1.4;
}

/* Detalles */
[data-evento-theme='gala-xv'] .gala-details-grid {
  display: grid;
  gap: 1.25rem;
  max-width: 64rem;
  margin: 0 auto;
}
[data-evento-theme='gala-xv'] .gala-detail {
  align-content: start;
  width: 100%;
}
[data-evento-theme='gala-xv'] .gala-detail-lead {
  color: var(--gala-ink);
  font: italic 400 1.35rem/1.45 var(--gala-display);
  text-wrap: balance;
}

/* Galería en mosaico: cada foto con su proporción, apilada por columnas. */
[data-evento-theme='gala-xv'] .gala-gallery-grid {
  --gala-gallery-gap: 0.6rem;
  columns: 2;
  column-gap: var(--gala-gallery-gap);
  max-width: 76rem;
  margin: 0 auto;
}
[data-evento-theme='gala-xv'] .gala-gallery-grid[data-columns='1'] {
  columns: 1;
  max-width: 24rem;
}
[data-evento-theme='gala-xv'] .gala-gallery-grid li {
  break-inside: avoid;
  margin-bottom: var(--gala-gallery-gap);
}
[data-evento-theme='gala-xv'] .gala-gallery-item {
  display: block;
  width: 100%;
  padding: 0;
  border: 0;
  border-radius: 0.25rem;
  background: var(--gala-card);
  box-shadow: 0 0 0 1px var(--gala-line-soft);
  cursor: zoom-in;
  overflow: hidden;
}
[data-evento-theme='gala-xv'] .gala-gallery-item img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: scale 0.6s var(--gala-ease);
}
[data-evento-theme='gala-xv'] .gala-gallery-item:hover img {
  scale: 1.04;
}
[data-evento-theme='gala-xv'] .gala-lightbox {
  width: 100vw;
  max-width: 100vw;
  height: 100dvh;
  max-height: 100dvh;
  padding: 0;
  border: 0;
  background: var(--gala-night);
}
[data-evento-theme='gala-xv'] .gala-lightbox[open] {
  display: grid;
  place-items: center;
}
[data-evento-theme='gala-xv'] .gala-lightbox::backdrop {
  background: rgb(0 0 0 / 0.85);
}
[data-evento-theme='gala-xv'] .gala-lightbox img {
  max-width: 100vw;
  max-height: 100dvh;
  object-fit: contain;
}
[data-evento-theme='gala-xv'] .gala-lightbox-top {
  position: absolute;
  inset: 1rem 1rem auto;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 1rem;
}
[data-evento-theme='gala-xv'] .gala-lightbox-count {
  margin: 0 auto 0 0;
  color: var(--gala-ink);
  font: 600 var(--gala-label-size) / 1 var(--gala-sans);
  letter-spacing: 0.2em;
  font-variant-numeric: tabular-nums;
}
[data-evento-theme='gala-xv'] .gala-lightbox-close {
  background: var(--gala-night);
}
[data-evento-theme='gala-xv'] .gala-lightbox-nav {
  position: absolute;
  top: 50%;
  translate: 0 -50%;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgb(0 0 0 / 0.4);
  color: var(--gala-ink);
  cursor: pointer;
}
[data-evento-theme='gala-xv'] .gala-lightbox-nav svg {
  width: 1.25rem;
  height: 1.25rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}
[data-evento-theme='gala-xv'] .gala-lightbox-prev {
  left: 0.75rem;
}
[data-evento-theme='gala-xv'] .gala-lightbox-next {
  right: 0.75rem;
}

/* Asistencia */
[data-evento-theme='gala-xv'] .gala-rsvp-card {
  overflow: hidden;
  padding-block: clamp(2.5rem, 9vw, 3.5rem);
  background:
    radial-gradient(
      90% 80% at 50% 0%,
      color-mix(in srgb, var(--gala-lilac) 60%, var(--gala-gold) 20%),
      transparent 70%
    ),
    var(--gala-card);
}
[data-evento-theme='gala-xv'] .gala-rsvp-card > :not(.gala-stars) {
  position: relative;
}

/* Cierre */
[data-evento-theme='gala-xv'] .gala-footer {
  padding-bottom: 3rem;
}
[data-evento-theme='gala-xv'] .gala-footer .gala-inner {
  gap: 0.8rem;
}
[data-evento-theme='gala-xv'] .gala-footer-name {
  background: var(--gala-foil);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  font: italic 500 clamp(2.4rem, 11vw, 3.4rem) / 1.05 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-calendar {
  margin: 0 auto 1.5rem;
  border-collapse: collapse;
  color: var(--gala-ink);
  font: 400 1rem/1 var(--gala-display);
  font-variant-numeric: lining-nums tabular-nums;
}
[data-evento-theme='gala-xv'] .gala-calendar-month {
  padding-bottom: 1rem;
  color: var(--gala-gold);
  font: 600 var(--gala-label-size) / 1 var(--gala-sans);
  letter-spacing: 0.32em;
  text-transform: uppercase;
}
[data-evento-theme='gala-xv'] .gala-calendar th {
  padding-bottom: 0.6rem;
  color: var(--gala-muted);
  font: 600 0.65rem/1 var(--gala-sans);
  letter-spacing: 0.1em;
}
[data-evento-theme='gala-xv'] .gala-calendar :is(th, td) {
  width: 2.4rem;
  height: 2.2rem;
  text-align: center;
}
[data-evento-theme='gala-xv'] .gala-calendar-on {
  display: inline-grid;
  place-items: center;
  width: 2.1rem;
  height: 2.1rem;
  border-radius: 50%;
  background: var(--gala-foil);
  color: var(--gala-on-gold);
  font-weight: 700;
}
[data-evento-theme='gala-xv'] .gala-credit {
  margin-top: 2.5rem;
  font: 600 0.62rem/1 var(--gala-sans);
  letter-spacing: 0.26em;
  text-transform: uppercase;
}
[data-evento-theme='gala-xv'] .gala-credit a {
  color: var(--gala-muted);
  text-decoration: none;
}
[data-evento-theme='gala-xv'] .gala-credit span {
  color: var(--gala-gold);
}

/* Sobre de apertura: sólo existe si el script lo pidió. La marca de la raíz
   es `data-gala-apertura` y no la del propio sobre: con el mismo atributo, el
   selector del sobre encontraba primero el `<html>`. */
[data-evento-theme='gala-xv'] .gala-sobre {
  display: none;
}
:root[data-gala-apertura='pendiente'] [data-evento-theme='gala-xv'] .gala-sobre,
:root[data-gala-apertura='pendiente'] .gala-experience .gala-sobre {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: grid;
  place-items: center;
  padding: 1.5rem;
  background:
    radial-gradient(
      90% 60% at 50% 40%,
      color-mix(in srgb, var(--gala-night-2) 75%, var(--gala-lilac)),
      transparent 75%
    ),
    var(--gala-night);
}
[data-evento-theme='gala-xv'] .gala-sobre-scene {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 1.75rem;
}
[data-evento-theme='gala-xv'] .gala-sobre-kicker,
[data-evento-theme='gala-xv'] .gala-sobre-hint {
  color: var(--gala-gold);
  font: 600 var(--gala-label-size) / 1 var(--gala-sans);
  letter-spacing: 0.34em;
  text-transform: uppercase;
}
[data-evento-theme='gala-xv'] .gala-sobre-hint {
  color: var(--gala-muted);
  letter-spacing: 0.2em;
}
[data-evento-theme='gala-xv'] .gala-sobre-envelope {
  position: relative;
  width: min(84vw, 22rem);
  aspect-ratio: 7 / 5;
  perspective: 900px;
}
/* La tarjeta: papel marfil con grano y un doble filete dorado por dentro. */
[data-evento-theme='gala-xv'] .gala-sobre-card {
  position: absolute;
  z-index: 0;
  inset: 8% 7% 6%;
  display: grid;
  place-content: center;
  gap: 0.5rem;
  border-radius: 0.3rem;
  background: var(--gala-grain), #fbf6ea;
  color: #1b2238;
  text-align: center;
  box-shadow:
    inset 0 0 0 6px #fbf6ea,
    inset 0 0 0 7px color-mix(in srgb, var(--gala-gold) 75%, #8a6a2a),
    inset 0 0 0 10px #fbf6ea,
    inset 0 0 0 11px color-mix(in srgb, var(--gala-gold) 40%, #fbf6ea);
}
[data-evento-theme='gala-xv'] .gala-sobre-name {
  background: linear-gradient(100deg, #8a6a2a, #c9a94f 45%, #8a6a2a);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  font: italic 500 2.6rem/1 var(--gala-display);
}
[data-evento-theme='gala-xv'] .gala-sobre-sign {
  color: #1b2238;
  font: 600 0.68rem/1 var(--gala-sans);
  letter-spacing: 0.3em;
}
/* El bolsillo: dos tonos de noche con un brillo diagonal, como papel plegado. */
[data-evento-theme='gala-xv'] .gala-sobre-pocket {
  position: absolute;
  z-index: 1;
  inset: 0;
  border: 1px solid var(--gala-line);
  border-radius: 0.6rem;
  background:
    linear-gradient(to top right, transparent 49.6%, var(--gala-line) 50%, transparent 50.4%) left /
      50% 100% no-repeat,
    linear-gradient(to top left, transparent 49.6%, var(--gala-line) 50%, transparent 50.4%) right /
      50% 100% no-repeat,
    linear-gradient(
      160deg,
      color-mix(in srgb, var(--gala-night) 62%, #34477f),
      var(--gala-night) 55%,
      color-mix(in srgb, var(--gala-night) 88%, #000)
    );
  clip-path: polygon(0 0, 50% 58%, 100% 0, 100% 100%, 0 100%);
  box-shadow: 0 40px 70px -35px rgb(0 0 0 / 0.9);
}
[data-evento-theme='gala-xv'] .gala-sobre-flap {
  position: absolute;
  z-index: 1;
  inset: 0 0 auto;
  height: 62%;
  border-radius: 0.6rem 0.6rem 0 0;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--gala-gold) 25%, transparent), transparent 12%),
    linear-gradient(180deg, color-mix(in srgb, var(--gala-night) 50%, #3a4f86), var(--gala-night));
  clip-path: polygon(0 0, 100% 0, 50% 100%);
  transform-origin: top center;
  filter: drop-shadow(0 6px 10px rgb(0 0 0 / 0.5));
}
/* El lacre: oro con brillo especular y sombra de relieve. */
[data-evento-theme='gala-xv'] .gala-sobre-seal {
  position: absolute;
  top: 62%;
  left: 50%;
  z-index: 2;
  display: grid;
  place-items: center;
  width: 4.6rem;
  height: 4.6rem;
  padding: 0;
  border: 0;
  border-radius: 46% 54% 50% 50% / 52% 48% 52% 48%;
  background:
    radial-gradient(
      circle at 32% 26%,
      color-mix(in srgb, var(--gala-gold) 35%, #fffbe9),
      transparent 42%
    ),
    radial-gradient(
      circle at 70% 80%,
      color-mix(in srgb, var(--gala-gold) 60%, #4a3510),
      transparent 55%
    ),
    radial-gradient(
      circle,
      color-mix(in srgb, var(--gala-gold) 85%, #6b4d17) 55%,
      color-mix(in srgb, var(--gala-gold) 60%, #4a3510)
    );
  color: var(--gala-on-gold);
  font: italic 600 2rem/1 var(--gala-display);
  translate: -50% -50%;
  cursor: pointer;
  box-shadow:
    inset 0 0 0 3px color-mix(in srgb, var(--gala-gold) 70%, #5a4213),
    inset 0 0 0 4px color-mix(in srgb, var(--gala-gold) 60%, #fff6d8),
    inset 0 -4px 8px rgb(0 0 0 / 0.25),
    0 10px 20px rgb(0 0 0 / 0.55);
}

/* Responsivo */
@media (min-width: 48rem) {
  [data-evento-theme='gala-xv'] .gala-venue-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: start;
  }
  [data-evento-theme='gala-xv'] .gala-venue-list > .gala-card {
    width: 100%;
  }
  [data-evento-theme='gala-xv'] .gala-details-grid {
    grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));
    align-items: start;
  }
  [data-evento-theme='gala-xv'] .gala-gallery-grid[data-columns='3'] {
    columns: 3;
  }
  [data-evento-theme='gala-xv'] .gala-interlude {
    min-height: clamp(28rem, 62vh, 36rem);
  }
}
/* Escritorio: la foto ocupa la mitad derecha y el texto la izquierda. */
@media (min-width: 56rem) {
  [data-evento-theme='gala-xv'] .gala-hero.has-cover {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-content: center;
    align-items: center;
    justify-items: end;
    padding-inline: clamp(2.5rem, 6vw, 5rem);
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-img {
    inset: 0 0 0 50%;
    width: 50%;
    object-position: 50% 30%;
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-veil {
    background:
      linear-gradient(90deg, var(--gala-night) 48%, transparent 66%),
      linear-gradient(
        180deg,
        color-mix(in srgb, var(--gala-lilac) 35%, transparent),
        transparent 30%,
        transparent 70%,
        var(--gala-night) 100%
      );
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-stars {
    -webkit-mask-image: linear-gradient(90deg, #000 45%, transparent 65%);
    mask-image: linear-gradient(90deg, #000 45%, transparent 65%);
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-inner {
    grid-column: 1;
    justify-items: start;
    padding-right: clamp(2rem, 6vw, 5rem);
    text-align: left;
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-name {
    justify-items: start;
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-name {
    padding-inline: 0;
    font-size: clamp(5.5rem, 9vw, 8rem);
  }
  [data-evento-theme='gala-xv'] .gala-hero.has-cover .gala-hero-date {
    justify-content: start;
  }
}

/* Movimiento */
@media (prefers-reduced-motion: no-preference) {
  [data-evento-theme='gala-xv'] .gala-star-twinkle {
    animation: gala-twinkle 4.5s ease-in-out infinite;
  }
  [data-evento-theme='gala-xv'] .gala-name {
    animation: gala-shine 7s ease-in-out infinite;
  }
  :root[data-gala-motion='ok'] [data-evento-theme='gala-xv'] .gala-hero-img {
    animation: gala-hero-in 1.6s var(--gala-ease) both;
  }
  [data-evento-theme='gala-xv'] .gala-will-reveal {
    opacity: 0;
    translate: 0 1.25rem;
    transition:
      opacity 0.9s var(--gala-ease),
      translate 0.9s var(--gala-ease);
  }
  [data-evento-theme='gala-xv'] .gala-will-reveal.is-visible {
    opacity: 1;
    translate: 0 0;
  }
  [data-evento-theme='gala-xv'] .gala-sobre-seal {
    animation: gala-pulse 2.4s ease-in-out infinite;
  }
  [data-evento-theme='gala-xv'] .gala-sobre.is-open .gala-sobre-seal {
    animation: gala-seal-break 0.5s ease-in forwards;
  }
  [data-evento-theme='gala-xv'] .gala-sobre.is-open .gala-sobre-flap {
    animation: gala-flap 0.8s 0.25s var(--gala-ease) forwards;
  }
  [data-evento-theme='gala-xv'] .gala-sobre.is-open .gala-sobre-card {
    animation: gala-card-rise 1.1s 0.7s var(--gala-ease) forwards;
  }
  [data-evento-theme='gala-xv'] .gala-sobre.is-open {
    animation: gala-sobre-out 0.7s 1.95s ease forwards;
  }
  [data-evento-theme='gala-xv'] .gala-sobre.is-open :is(.gala-sobre-hint, .gala-sobre-kicker) {
    opacity: 0;
    transition: opacity 0.3s ease;
  }
}
@keyframes gala-twinkle {
  0%,
  100% {
    opacity: 0.25;
  }
  50% {
    opacity: 1;
  }
}
@keyframes gala-shine {
  0%,
  100% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
}
@keyframes gala-hero-in {
  from {
    opacity: 0;
    scale: 1.06;
  }
  to {
    opacity: 1;
    scale: 1;
  }
}
@keyframes gala-pulse {
  0%,
  100% {
    scale: 1;
  }
  50% {
    scale: 1.06;
  }
}
@keyframes gala-seal-break {
  to {
    opacity: 0;
    scale: 1.4;
  }
}
@keyframes gala-flap {
  to {
    transform: rotateX(180deg);
    z-index: 0;
  }
}
/* La tarjeta sale del bolsillo por detrás y, ya fuera, pasa al frente. */
@keyframes gala-card-rise {
  0% {
    z-index: 0;
  }
  50% {
    z-index: 0;
    translate: 0 -72%;
  }
  51% {
    z-index: 3;
    translate: 0 -72%;
  }
  100% {
    z-index: 3;
    translate: 0 -8%;
    scale: 1.12;
  }
}
@keyframes gala-sobre-out {
  to {
    opacity: 0;
    visibility: hidden;
  }
}
