/* ═══════════════════════════════════════════════════════════
   XL Contingente Antártico · v2 · Sistema visual
   Lenguaje: editorial · institucional · expedicionario
   ═══════════════════════════════════════════════════════════ */

:root {
  /* ─────────── Color · paleta ampliada ─────────── */
  --negro:           #0A0E1A;     /* Casi negro, base oscura */
  --azul-profundo:   #0E1F3F;     /* Azul antártico institucional */
  --azul-medio:      #1F3A6B;
  --azul-claro:      #6E8AAB;     /* Más cálido que antes */
  --teal-glaciar:    #7FA9A4;     /* Acento polar: hielo glacial */
  --teal-claro:      #B3CFCB;     /* turquesa lavado · "azul clarito" (un punto más contraste que el original #C9DEDB) */
  --hielo:           #ECEEE8;     /* Hielo cálido (no azul plano) */
  --crema:           #F4F2EC;     /* Off-white de fondo */
  --piedra:          #58606A;
  --piedra-claro:    #666B72;     /* a11y: subido de #8D9298 (2.80) a #666B72 (4.80) para pasar WCAG 1.4.3 AA sobre crema/hielo · texto del .contingente__year y .u-text-faint */
  --gris-borde:      #D6D8D2;
  --rojo-bandera:    #C8102E;     /* acento principal de marca */
  --rojo-oscuro:     #931B2C;
  --naranja:         #F56905;     /* reserva de paleta · uso puntual */
  --naranja-oscuro:  #C25500;
  --amarillo:        #E8B30A;
  --blanco:          #FFFFFF;

  /* Aliases semánticos */
  --bg:              var(--crema);
  --bg-alt:          var(--hielo);
  --bg-dark:         var(--negro);
  --fg:              #1A1F2A;
  --fg-soft:         var(--piedra);
  --accent:          var(--rojo-bandera);     /* acento principal · rojo bandera */
  --accent-cool:     var(--teal-glaciar);
  --accent-mil:      var(--rojo-bandera);


  /* ─────────── Tipografía ─────────── */
  --display: "Fraunces", "Times New Roman", serif;
  --sans:    "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Inter", sans-serif;
  --mono:    "JetBrains Mono", "SF Mono", Menlo, monospace;

  /* ─────────── Layout ─────────── */
  --maxw:        1320px;
  --maxw-narrow: 780px;
  --gutter:      clamp(20px, 4vw, 56px);
  --section-y:   clamp(80px, 12vw, 180px);
  --header-h:    80px;

  /* ─────────── Motion ─────────── */
  --ease:   cubic-bezier(0.22, 0.61, 0.36, 1);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --t-fast: 0.18s;
  --t-norm: 0.42s;
  --t-slow: 0.8s;
}

/* ─── Reset ─── */
*, *::before, *::after { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  scroll-padding-top: var(--header-h);
}
/* Anclas OnePage: deja respiración bajo el header fijo */
section[id] { scroll-margin-top: calc(var(--header-h) + 12px); }

/* ── Diapositiva fullpage controlada por JS ──────────────────────
   El JS captura wheel/teclado y desplaza panel a panel con cubic-
   bezier. CSS sólo desactiva scroll-snap nativo si el JS está activo. */
html.fullpage-active {
  scroll-snap-type: none;
  scroll-behavior: auto;
}

/* ── Bloqueo de scroll bajo un modal/popup ───────────────────────
   `overflow: hidden` en <html> es la forma fiable (también en
   iOS Safari) de impedir que la página de fondo se desplace
   mientras un overlay está abierto. NO usamos `touch-action`
   porque eso también bloquearía el scroll táctil dentro del
   propio popup; ese scroll lo confina `overscroll-behavior:
   contain` aplicado a cada `__inner`. */
html.modal-open,
html.modal-open body {
  overflow: hidden;
}

/* ── Accesibilidad: focus visible coherente y enlace de salto ──
   Aplicado a todos los elementos interactivos por defecto. */
:focus { outline: none; }
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 2px;
}
.nav__menu a:focus-visible,
.toc-rail__list a:focus-visible,
.footer__col a:focus-visible {
  outline-offset: 4px;
}
.skip-link {
  position: absolute;
  top: -100px;
  left: 12px;
  z-index: 1000;
  padding: 12px 18px;
  background: var(--negro);
  color: var(--blanco);
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  text-decoration: none;
  transition: top var(--t-fast) var(--ease);
}
.skip-link:focus { top: 12px; }

/* ── Utilities · sustituyen inline-styles repetitivos en plantillas ── */
.u-text-soft  { color: var(--fg-soft); }
.u-mw-60      { max-width: 60ch; }
body {
  margin: 0;
  font-family: var(--sans);
  font-size: clamp(15px, 1vw, 17px);
  line-height: 1.55;
  color: var(--fg);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
  text-rendering: optimizeLegibility;
}
img, video { max-width: 100%; height: auto; display: block; }
a { color: inherit; text-decoration: none; transition: color var(--t-fast) var(--ease); }
button { font-family: inherit; cursor: pointer; }

/* Selección · gris azulado institucional */
::selection      { background: #383e4e; color: var(--blanco); }
::-moz-selection { background: #383e4e; color: var(--blanco); }

/* ─── Tipografía base ─── */
h1, h2, h3, h4, h5 {
  font-family: var(--sans);
  color: var(--fg);
  font-weight: 600;
  line-height: 1.05;
  letter-spacing: -0.02em;
  margin: 0 0 0.5em;
}
.display, h1.display {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.025em;
  line-height: 0.95;
}

h1 { font-size: clamp(2.4rem, 7vw, 5rem); }
h2 { font-size: clamp(1.8rem, 4vw, 3.2rem); font-weight: 500; letter-spacing: -0.022em; }
h3 { font-size: clamp(1.15rem, 1.8vw, 1.4rem); font-weight: 600; }
h4 { font-size: 0.95rem; font-weight: 600; }

p { margin: 0 0 1em; max-width: 60ch; }
p.lead {
  font-size: clamp(1.05rem, 1.3vw, 1.25rem);
  line-height: 1.5;
  color: var(--fg);
  font-weight: 400;
  max-width: 50ch;
}

/* ─── Etiquetas / códigos ─── */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--fg-soft);
  margin: 0 0 28px;
}
.eyebrow::before {
  content: "";
  width: 28px;
  height: 1px;
  background: var(--accent);
}
.eyebrow--accent { color: var(--accent); }
.eyebrow--accent::before { background: var(--accent); }

.code-tag {
  font-family: var(--mono);
  font-size: 0.68rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--fg-soft);
}

.section-num {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.2em;
  color: var(--accent);
  font-weight: 600;
  margin-bottom: 16px;
  display: inline-block;
}

/* ─── Reglas decorativas ─── */
.rule {
  height: 1px;
  background: var(--fg);
  width: 100%;
  margin: 0;
  border: 0;
  opacity: 0.12;
}
.rule--accent {
  height: 2px;
  width: 48px;
  background: var(--accent);
  opacity: 1;
}

/* ─── Layout ─── */
.container {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container--narrow { max-width: var(--maxw-narrow); }

/* Dentro de .section: layout editorial de dos columnas (lead izq, apoyo dcha).
   Implementación simple sin span: cada hijo no-lead se coloca en la columna 2
   y la grid los apila automáticamente. Si la sección tiene un único lead,
   se queda en la columna 1 ocupando todo y la 2 vacía sin romper nada. */
.section .container--narrow {
  max-width: 1180px;
  width: 100%;
}
.section .lead { max-width: 64ch; }
.section .container--narrow p:not(.lead),
.section .container--narrow .note { max-width: 56ch; }

@media (min-width: 880px) {
  .section .container--narrow {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    column-gap: clamp(40px, 6vw, 96px);
    row-gap: 18px;
    align-items: start;
  }
  .section .container--narrow > .lead     { grid-column: 1; margin: 0; }
  .section .container--narrow > :not(.lead) { grid-column: 2; margin: 0; }
  /* Si un párrafo tiene .lead pero NO es el primer hijo, se queda en col 1 */
  .section .container--narrow > .lead ~ .lead { grid-column: 1; }
  /* Cuando solo hay lead (sin contenido derecho), que ocupe ambas columnas */
  .section .container--narrow > .lead:only-child { grid-column: 1 / -1; max-width: 80ch; }}

.section {
  /* OnePage fullscreen: cada sección ocupa al menos 100vh y centra el contenido.
     `min-height` (no `height`) deja que las secciones largas (roster de 13,
     histórico de 40, cronología de 9) crezcan sin solapamientos.
     `100svh` evita el salto de la barra de URL en móviles. */
  min-height: 100vh;
  min-height: 100svh;
  padding-block: clamp(60px, 8vw, 120px);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.section > .container { width: 100%; }
.section--alt { background: var(--bg-alt); }
.section--dark {
  background: var(--bg-dark);
  color: var(--hielo);
}
.section--dark h1, .section--dark h2, .section--dark h3 { color: var(--blanco); }
.section--dark .eyebrow { color: var(--azul-claro); }
.section--dark .rule { background: var(--blanco); opacity: 0.15; }
/* Defensa contra inline-styles que asumen fondo claro */
.section--dark p[style*="--fg-soft"],
.section--dark p[style*="fg-soft"] { color: var(--azul-claro) !important; }
.section--dark p, .section--dark .lead { color: var(--hielo); }

/* ── Variantes cromáticas adicionales ───────────────────────
   Pensadas para alternar el ritmo del OnePage sin perder
   coherencia con la paleta editorial / institucional. */

/* "Ice" · fondo turquesa lavado (#C9DEDB, vía --teal-claro). Texto oscuro. */
.section--ice {
  background: var(--teal-claro);
  color: #102330;
}
.section--ice .section-head__label { color: var(--azul-medio); border-color: var(--azul-medio); }
.section--ice h2, .section--ice h3 { color: var(--azul-profundo); }
.section--ice p, .section--ice .lead { color: #1A3144; }
.section--ice p[style*="--fg-soft"],
.section--ice p[style*="fg-soft"] { color: #2C4A5F !important; }
.section--ice .factsheet dt { color: #2C4A5F; }
.section--ice .factsheet dd { color: var(--azul-profundo); }
.section--ice .factsheet,
.section--ice .factsheet > div { border-color: rgba(14,31,63,0.18); }
.section--ice .factsheet > div::before { background: var(--azul-profundo); }
.section--ice .factsheet > div:hover { background: rgba(14,31,63,0.04); }
.section--ice .factsheet > div:hover dt { color: var(--azul-profundo); }
.section--ice .note strong { color: var(--azul-profundo); }
.section--ice .code-tag { color: #2C4A5F; }

/* Grafito institucional: el mismo gris azulado que el footer */
.section--graphite {
  background: #383e4e;
  color: rgba(255,255,255,0.92);
}
.section--graphite h1,
.section--graphite h2,
.section--graphite h3,
.section--graphite h4 { color: var(--blanco); }
/* Forzamos legibilidad de TODOS los párrafos (incluso los que llevan
   inline-style con color oscuro de las antiguas secciones claras) */
.section--graphite p,
.section--graphite .lead,
.section--graphite li,
.section--graphite dd { color: rgba(255,255,255,0.92) !important; }
.section--graphite p[style*="--fg-soft"],
.section--graphite p[style*="fg-soft"] { color: rgba(255,255,255,0.72) !important; }
.section--graphite strong { color: var(--blanco); }
.section--graphite em { color: var(--blanco); font-style: italic; }
.section--graphite .section-head__label { color: var(--accent); border-color: var(--accent); }
.section--graphite .stat { border-color: rgba(255,255,255,0.18); }
.section--graphite .stat__num { color: var(--blanco); }
.section--graphite .stat__label { color: rgba(255,255,255,0.7); }
.section--graphite .factsheet { border-color: rgba(255,255,255,0.20); }
.section--graphite .factsheet > div { border-color: rgba(255,255,255,0.20); }
.section--graphite .factsheet dt { color: rgba(255,255,255,0.7); }
.section--graphite .factsheet dd { color: var(--blanco); }
.section--graphite .factsheet > div::before { background: var(--blanco); }
.section--graphite .factsheet > div:hover { background: rgba(255,255,255,0.05); }
.section--graphite .factsheet > div:hover dt { color: var(--blanco); }
.section--graphite .note {
  border-left: 2px solid var(--accent);
  background: rgba(255,255,255,0.04);
  padding: 14px 20px 14px 22px;
  border-radius: 2px;
}
.section--graphite .note strong { color: var(--blanco); }
.section--graphite .code-tag { color: rgba(255,255,255,0.7); }
/* Cuenta atrás dentro de --graphite (no double-dark) */
.section--graphite .countdown { background: rgba(0,0,0,0.25); }
.section--graphite .route-map {
  background: rgba(255,255,255,0.05);
  border-color: rgba(255,255,255,0.18);
  color: var(--blanco);
}
.section--graphite .route-map__note,
.section--graphite .route-map .code-tag { color: rgba(255,255,255,0.78); }

/* Acento cálido: bloques que actúan como pausa de marca */
.section--ocre {
  background: #C8A24A;       /* dorado cálido sin caer en amarillo plano */
  color: #1A1A1A;
}
.section--ocre .section-head__label { color: #5A2E00; border-color: #5A2E00; }
.section--ocre h2, .section--ocre h3 { color: #1A1A1A; }

/* Cooperación cívico-militar: acento verde claro
   Sobrescribe localmente el token --accent. Todos los elementos que lo
   usan (.section-head__label, border, etc.) cambian automáticamente.
   Contraste #86EFAC sobre el negro de --section--dark = 13.6:1 (AAA). */
.section--coop {
  --accent: #86EFAC;
}
.section--coop .section-head__label { color: #86EFAC; border-color: #86EFAC; }
.section--coop .lead { color: var(--hielo); }
.section--coop strong, .section--coop em { color: var(--blanco); }

/* Naranja/rojo Mammut: pausa de alta intensidad para hitos */
.section--accent {
  background: var(--accent);
  color: var(--blanco);
}
.section--accent h1, .section--accent h2, .section--accent h3 { color: var(--blanco); }
.section--accent .section-head__label { color: var(--blanco); border-color: var(--blanco); }
.section--accent p, .section--accent .lead { color: var(--blanco) !important; }
.section--accent p[style*="--fg-soft"],
.section--accent p[style*="fg-soft"] { color: rgba(255,255,255,0.86) !important; }
.section--accent strong { color: var(--blanco); }
.section--accent .placeholder-block {
  border-color: rgba(255,255,255,0.45);
  color: rgba(255,255,255,0.86);
  background: rgba(255,255,255,0.05);
}
.section--accent .placeholder-block strong { color: var(--blanco); }

/* Pequeña tira de color sobre la sección (acento horizontal) */
.section--rule { box-shadow: inset 0 4px 0 0 var(--accent); }

/* ═══════════════════════════════════════════════════════════
   SPOTLIGHT · Bloque editorial con foto a sangre (estilo Mammut)
   Ocupa 100vw, foto enorme con titular superpuesto. Permite romper
   el ritmo de las secciones tipográficas con un golpe visual fuerte.
   ═══════════════════════════════════════════════════════════ */
.spotlight {
  position: relative;
  width: 100%;
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  isolation: isolate;
  color: var(--blanco);
  background: var(--negro);
}
.spotlight__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  transform: scale(1.05);
  transition: transform 1.6s var(--ease-out), filter 1.6s var(--ease-out);
  filter: saturate(0.95) contrast(1.05);
}
.spotlight:hover .spotlight__bg { transform: scale(1.0); filter: saturate(1.05) contrast(1.05); }
.spotlight::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.10) 0%, rgba(10,14,26,0.00) 30%, rgba(10,14,26,0.78) 100%),
    linear-gradient(90deg, rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0) 55%);
  pointer-events: none;
}

.spotlight__inner {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: var(--maxw);
  margin: 0 auto;
  padding: clamp(60px, 10vw, 120px) var(--gutter);
  display: flex;
  flex-direction: column;
  gap: 18px;
  align-items: flex-start;
}
.spotlight__label {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--blanco);
  font-weight: 500;
  border-top: 1px solid var(--accent);
  padding-top: 10px;
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.spotlight__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 7vw, 5.6rem);
  letter-spacing: -0.035em;
  line-height: 0.95;
  color: var(--blanco);
  margin: 0;
  max-width: 18ch;
  text-shadow: 0 2px 16px rgba(0,0,0,0.35);
}
.spotlight__lead {
  max-width: 52ch;
  color: rgba(255,255,255,0.92);
  font-size: clamp(1rem, 1.4vw, 1.2rem);
  line-height: 1.5;
  margin: 8px 0 0;
  text-shadow: 0 1px 8px rgba(0,0,0,0.35);
}
.spotlight__data {
  font-family: var(--mono);
  font-size: 0.8rem;
  letter-spacing: 0.06em;
  color: var(--blanco);
  margin-top: 16px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px 28px;
  line-height: 1.7;
}
.spotlight__data span::before {
  content: attr(data-label) ": ";
  color: rgba(255,255,255,0.65);
  font-weight: 500;
  margin-right: 6px;
}

/* Variante: alineado a la derecha */
.spotlight--right .spotlight__inner { align-items: flex-end; text-align: right; }

/* ═══════════════════════════════════════════════════════════
   SECTION-COVER · cabecera con imagen de fondo dentro de
   una .section regular (sustituye al spotlight separado).
   Mismo lenguaje visual que .spotlight pero más compacta y
   embebida en el flujo editorial.
   ═══════════════════════════════════════════════════════════ */
.section--has-cover {
  padding-top: 0;
  padding-bottom: 0;
  /* Anula el min-height: 100vh y el centrado vertical heredados de .section.
     El propio .section-cover define su altura. */
  min-height: 0;
  justify-content: flex-start;
  display: block;
}
.section-cover {
  position: relative;
  width: 100%;
  min-height: clamp(520px, 78vh, 780px);
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  isolation: isolate;
  color: var(--blanco);
  background: var(--negro);
  margin-bottom: 0;
}
.section-cover__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  transform: scale(1.04);
  transition: transform 1.6s var(--ease-out), filter 1.6s var(--ease-out);
  filter: saturate(0.95) contrast(1.05);
}
.section-cover:hover .section-cover__bg {
  transform: scale(1.0);
  filter: saturate(1.05) contrast(1.05);
}
.section-cover::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.20) 0%, rgba(10,14,26,0.45) 50%, rgba(10,14,26,0.88) 100%),
    linear-gradient(90deg, rgba(10,14,26,0.78) 0%, rgba(10,14,26,0.20) 60%, rgba(10,14,26,0.0) 100%);
  pointer-events: none;
}
.section-cover__inner {
  position: relative;
  z-index: 2;
  width: 100%;
  padding: clamp(50px, 8vw, 100px) 0;
}
.section-cover__inner .section-head__label {
  color: var(--blanco);
  border-top-color: var(--accent);
}
.section-cover__title {
  color: var(--blanco) !important;
  text-shadow: 0 2px 16px rgba(0,0,0,0.35);
  margin-top: 14px;
}
.section-cover__lead {
  max-width: 52ch;
  color: rgba(255,255,255,0.92);
  font-size: clamp(1rem, 1.4vw, 1.2rem);
  line-height: 1.5;
  margin: 18px 0 0;
  text-shadow: 0 1px 8px rgba(0,0,0,0.45);
}
.section-cover__detail {
  max-width: 56ch;
  color: rgba(255,255,255,0.78);
  font-size: clamp(0.9rem, 1.05vw, 1rem);
  line-height: 1.6;
  margin: 22px 0 0;
  text-shadow: 0 1px 8px rgba(0,0,0,0.55);
}
.spotlight--right::after {
  background:
    linear-gradient(180deg, rgba(10,14,26,0.10) 0%, rgba(10,14,26,0.00) 30%, rgba(10,14,26,0.78) 100%),
    linear-gradient(-90deg, rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0) 55%);
}

/* Variante: cita central, gran respiración (rompe ritmo) */
.spotlight--quote { align-items: center; }
.spotlight--quote .spotlight__inner { align-items: center; text-align: center; }
.spotlight--quote .spotlight__title {
  font-size: clamp(2rem, 5vw, 4.2rem);
  max-width: 26ch;
}

/* ═══════════════════════════════════════════════════════════
   Tarjeta cámara IGN · Spotlight 1 (home)
   ───────────────────────────────────────────────────────────
   Mismo lenguaje visual que .wx-card del modo Base (glassmorphism
   crema sobre el fondo del spotlight). En escritorio flota arriba
   a la derecha sobre la imagen de la caldera; en móvil se apila
   al final de la sección para entregar al lector a la siguiente
   («Donde España toca la Antártida»).
   ═══════════════════════════════════════════════════════════ */
.spotlight--has-cam {
  /* Móvil: apilamos card + inner en columna y empujamos al fondo */
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-end;
}
.spotlight--has-cam .spotlight__inner { order: 1; }
.spotlight--has-cam .spot-cam         { order: 2; }

.spot-cam {
  position: relative;
  z-index: 3;
  background: rgba(244, 242, 236, 0.92);
  color: var(--negro);
  padding: 14px 16px 12px;
  border-radius: 4px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: 0 12px 36px -18px rgba(0, 0, 0, 0.5);
  /* Móvil: misma anchura útil que .container, mismo gutter lateral */
  margin: 0 var(--gutter) clamp(40px, 8vw, 80px);
  max-width: 560px;
}

.spot-cam__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.spot-cam .section-head__label {
  color: var(--negro);
  border-top-color: var(--accent);
  font-size: 0.65rem;
}

.spot-cam__tabs {
  display: inline-flex;
  border: 1px solid var(--gris-borde);
  overflow: hidden;
  background: rgba(255, 255, 255, 0.6);
}
.spot-cam__tabs button {
  appearance: none;
  background: transparent;
  border: 0;
  color: var(--piedra);
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 6px 12px;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease);
}
.spot-cam__tabs button.is-active {
  background: var(--negro);
  color: var(--blanco);
}

.spot-cam__frame {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
  background: var(--negro);
  overflow: hidden;
  border-radius: 2px;
}
.spot-cam__frame img,
.spot-cam__frame video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.spot-cam__hint {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--piedra);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.spot-cam__hint a {
  color: var(--negro);
  text-decoration: none;
  border-bottom: 1px solid var(--gris-borde);
  padding-bottom: 1px;
  transition: border-color var(--t-fast) var(--ease);
}
.spot-cam__hint a:hover,
.spot-cam__hint a:focus-visible { border-bottom-color: var(--accent); }

/* Escritorio · la card flota arriba a la derecha del spotlight.
   El inner sigue pegado abajo con su comportamiento original. */
@media (min-width: 880px) {
  .spotlight--has-cam {
    flex-direction: row;
    align-items: flex-end;
    justify-content: normal;
  }
  .spotlight--has-cam .spot-cam {
    position: absolute;
    top: clamp(60px, 8vw, 110px);
    right: max(var(--gutter),
               calc((100vw - var(--maxw)) / 2 + var(--gutter)));
    width: clamp(280px, 26vw, 360px);
    max-width: none;
    margin: 0;
    aspect-ratio: auto;
  }
  /* Acota el ancho del texto del inner para que nunca se cruce
     visualmente con la card aunque la sección se acorte. */
  .spotlight--has-cam .spotlight__lead {
    max-width: min(52ch, calc(100% - clamp(280px, 26vw, 360px) - 40px));
  }
}

/* ═══════════════════════════════════════════════════════════
   HEADER
   ═══════════════════════════════════════════════════════════ */
.site-header {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  /* Gradiente más opaco para garantizar legibilidad sobre vídeo (incluso con nieve) */
  background: linear-gradient(180deg,
    rgba(10,14,26,0.78) 0%,
    rgba(10,14,26,0.55) 60%,
    rgba(10,14,26,0.0) 100%);
  transition: background var(--t-norm) var(--ease),
              backdrop-filter var(--t-norm) var(--ease),
              border-color var(--t-norm) var(--ease);
  border-bottom: 1px solid transparent;
}
.site-header.is-solid {
  background: rgba(244, 242, 236, 0.94);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  border-bottom-color: var(--gris-borde);
}

.nav__container {
  max-width: var(--maxw);
  margin-inline: auto;
  padding: 14px var(--gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  height: var(--header-h);
}

.nav__brand {
  display: flex;
  align-items: center;
  gap: 14px;
  color: var(--blanco);
  font-weight: 500;
  font-size: 0.92rem;
  flex: 1 1 auto;
  min-width: 0;
}
.nav__brand-logo {
  width: 40px; height: 40px;
  flex-shrink: 0;
  object-fit: contain;
}
.nav__brand-logo--light { display: none; }
.site-header.is-solid .nav__brand-logo--dark { display: none; }
.site-header.is-solid .nav__brand-logo--light { display: block; }

.site-header.is-solid .nav__brand,
.site-header.is-solid .nav__brand strong { color: var(--negro); }
.site-header.is-solid .nav__brand small { color: var(--fg-soft); }

.nav__brand span {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  min-width: 0;
}
.nav__brand strong {
  font-weight: 600;
  font-size: 0.98rem;
  letter-spacing: -0.01em;
  color: var(--blanco);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.nav__brand small {
  font-family: var(--mono);
  font-weight: 500;
  font-size: 0.62rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.78);
  margin-top: 4px;
  line-height: 1.5;
  text-shadow: 0 1px 4px rgba(0,0,0,0.5);
}
.site-header.is-solid .nav__brand small {
  color: var(--fg-soft);
  text-shadow: none;
}
@media (max-width: 600px) {
  .nav__brand small { display: none; } /* Sólo strong en móvil */
}

.nav__menu {
  display: flex;
  gap: 36px;
  align-items: center;
  order: 1;
  margin-left: auto;          /* empuja menú + lupa al lado derecho */
}
.nav__menu a {
  color: var(--blanco);
  font-size: 0.92rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  position: relative;
  padding: 8px 0;
  white-space: nowrap;
  text-shadow: 0 1px 6px rgba(0,0,0,0.55);
  transition: color var(--t-fast) var(--ease);
}
.site-header.is-solid .nav__menu a {
  color: var(--fg);
  text-shadow: none;
}
.nav__menu a:hover { color: var(--accent); }

/* Item "Interno" del menú · separado, con candado */
.nav__menu .nav__internal {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding-left: 18px;
  margin-left: 6px;
  border-left: 1px solid rgba(255,255,255,0.18);
  font-size: 0.84rem;
  letter-spacing: 0.04em;
  opacity: 0.78;
}
.nav__menu a::after {
  content: "";
  position: absolute;
  inset: auto 0 2px 0;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--t-norm) var(--ease-out);
}
.nav__menu a:hover::after,
.nav__menu a.is-active::after { transform: scaleX(1); }

/* Toggle móvil · 44×44 mínimo recomendado WCAG 2.5.5 */
.nav__toggle {
  display: none;
  order: 3;                   /* hamburguesa siempre la última (móvil) */
  width: 44px; height: 44px;
  background: transparent;
  border: 0;
  padding: 0;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
}
.nav__toggle span {
  display: block;
  width: 22px; height: 1.5px;
  background: var(--blanco);
  transition: transform var(--t-norm) var(--ease), opacity var(--t-fast);
}
.site-header.is-solid .nav__toggle span { background: var(--negro); }
.nav__toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.nav__toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav__toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

@media (max-width: 880px) {
  .nav__toggle { display: flex; }
  .nav__menu {
    position: fixed;
    inset: var(--header-h) 0 0 0;
    background: var(--negro);
    flex-direction: column;
    align-items: flex-start;
    padding: 24px var(--gutter) 32px;
    gap: 0;
    transform: translateX(100%);
    transition: transform var(--t-norm) var(--ease-out);
    overflow-y: auto;
    overscroll-behavior: contain;
  }
  .nav__menu.is-open { transform: translateX(0); }
  .nav__menu a {
    color: var(--hielo);
    font-family: var(--sans);
    font-style: normal;
    font-size: 1.05rem;
    font-weight: 500;
    letter-spacing: 0;
    padding: 14px 0;
    width: 100%;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  }
  .nav__menu a::after { display: none; }}

/* ═══════════════════════════════════════════════════════════
   HERO · vídeo + composición editorial
   ═══════════════════════════════════════════════════════════ */
.hero {
  position: relative;
  /* Orden correcto: el fallback va PRIMERO; navegadores modernos
     que entienden 100svh sobreescriben (Chrome 108+, Safari 15.4+,
     Firefox 101+). Antes estaba al revés y la regla 100svh quedaba
     muerta. */
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  color: var(--blanco);
  background: var(--negro);
  padding: var(--gutter) 0 80px;
}

.hero__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 0;
}
.hero__overlay {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.4) 0%, rgba(10,14,26,0.2) 30%, rgba(10,14,26,0.92) 100%),
    linear-gradient(90deg, rgba(10,14,26,0.4) 0%, transparent 50%);
  z-index: 1;
}

.hero__inner {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 0 var(--gutter);
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  align-items: end;
}
@media (min-width: 880px) {
  .hero__inner {
    grid-template-columns: 1fr auto;
    gap: 64px;
  }}

.hero__main {
  max-width: 920px;
}

.hero__code {
  font-family: var(--mono);
  font-size: 0.74rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--hielo);
  margin: 0 0 28px;
  display: flex;
  align-items: center;
  gap: 14px;
  opacity: 0;
  animation: fadeUp 1s var(--ease-out) 0.3s forwards;
}
.hero__code::before {
  content: "";
  width: 28px;
  height: 1px;
  background: var(--accent);
}

.hero__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(3.5rem, 13vw, 11rem);
  color: var(--blanco);
  line-height: 0.85;
  letter-spacing: -0.04em;
  margin: 0;
  opacity: 0;
  animation: fadeUp 1.2s var(--ease-out) 0.5s forwards;
}
.hero__title em {
  font-style: italic;
  display: block;
}

.hero__subtitle {
  margin: 32px 0 0;
  font-size: clamp(1rem, 1.6vw, 1.3rem);
  line-height: 1.3;
  color: var(--blanco);
  font-weight: 400;
  letter-spacing: -0.005em;
  max-width: 540px;
  opacity: 0;
  animation: fadeUp 1s var(--ease-out) 0.7s forwards;
}

.hero__meta {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--hielo);
  text-align: right;
  line-height: 2;
  opacity: 0;
  animation: fadeUp 1s var(--ease-out) 0.9s forwards;
  align-self: end;
}
.hero__meta-line {
  display: block;
  color: var(--azul-claro);
}
.hero__meta strong {
  color: var(--blanco);
  font-weight: 600;
}
@media (max-width: 879px) {
  .hero__meta { text-align: left; }}

.hero__scroll {
  position: absolute;
  bottom: 28px;
  left: var(--gutter);
  z-index: 2;
  color: var(--hielo);
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  gap: 12px;
  opacity: 0;
  animation: fadeUp 1s var(--ease-out) 1.1s forwards;
}
.hero__scroll::after {
  content: "";
  width: 36px;
  height: 1px;
  background: var(--accent);
  animation: scrollLine 2.4s var(--ease-out) infinite;
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(28px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes scrollLine {
  0%, 100% { transform: scaleX(0.4); transform-origin: left; }
  50%      { transform: scaleX(1);   transform-origin: left; }
}

/* ═══════════════════════════════════════════════════════════
   ESTRUCTURA · stat blocks · listas
   ═══════════════════════════════════════════════════════════ */

/* Encabezado de sección · etiqueta SIEMPRE encima del título */
.section-head {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 20px;
  margin-bottom: 64px;
  max-width: 880px;
}
/* La variante --split mantiene su nombre por compatibilidad pero ya no parte
   en dos columnas: la etiqueta queda apilada arriba del título. */
.section-head--split {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 20px;
}
.section-head__label {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--accent);
  font-weight: 500;
  border-top: 1px solid var(--accent);
  padding-top: 12px;
  display: inline-block;
  width: auto;
  min-width: 140px;
}
.section-head h2 {
  margin: 0;
  max-width: 800px;
}

/* ─── Bloques de estadísticas (números grandes editoriales) ─── */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 32px;
  margin-top: 64px;
}
.stat {
  border-top: 1px solid var(--gris-borde);
  padding-top: 20px;
}
.stat__num {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 5vw, 3.6rem);
  color: var(--negro);
  line-height: 1;
  letter-spacing: -0.03em;
  margin: 0 0 12px;
}
.stat__label {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--fg-soft);
  margin: 0;
  line-height: 1.5;
}

/* Variant oscura */
.section--dark .stat { border-color: rgba(255,255,255,0.15); }
.section--dark .stat__num { color: var(--blanco); }
.section--dark .stat__label { color: var(--azul-claro); }

/* ═══════════════════════════════════════════════════════════
   GALERÍA / IMÁGENES
   ═══════════════════════════════════════════════════════════ */
.image-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px;
  margin-top: 48px;
}
.image-strip figure {
  margin: 0;
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--negro);
}
.image-strip img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: saturate(0.9) contrast(1.05);
  transition: transform var(--t-slow) var(--ease-out), filter var(--t-norm) var(--ease);
}
.image-strip figure:hover img { transform: scale(1.03); filter: saturate(1) contrast(1); }
.image-strip figure::after {
  content: attr(data-caption);
  position: absolute;
  bottom: 16px;
  left: 16px;
  right: 16px;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--blanco);
  text-shadow: 0 1px 8px rgba(0,0,0,0.6);
  pointer-events: none;
}

/* ═══════════════════════════════════════════════════════════
   PÁGINA INTERNA · page-hero
   ═══════════════════════════════════════════════════════════ */
.page-hero {
  position: relative;
  background: var(--negro);
  color: var(--hielo);
  padding: calc(var(--header-h) + 88px) var(--gutter) 88px;
  overflow: hidden;
}
.page-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse at 80% 0%, rgba(127,169,164,0.12), transparent 55%),
    radial-gradient(ellipse at 0% 100%, rgba(200,16,46,0.08), transparent 60%);
  pointer-events: none;
}

/* Variante con slideshow de fondo (Comunicación) · más compacto */
.page-hero--cover {
  isolation: isolate;
  padding-top: calc(var(--header-h) + 48px);
  padding-bottom: 56px;
}
.page-hero--cover::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.30) 35%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg, rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0) 60%);
  pointer-events: none;
}
.page-hero--cover h1 {
  font-size: clamp(2rem, 5.5vw, 4rem);
  margin-bottom: 18px;
}
.page-hero--cover p.lead {
  font-size: clamp(0.95rem, 1.2vw, 1.05rem);
  max-width: 50ch;
}
.page-hero__slideshow {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
}
.page-hero__slide {
  position: absolute;
  inset: 0;
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  opacity: 0;
  transform: scale(1.04);
  transition: opacity 1.6s var(--ease), transform 8s linear;
  filter: saturate(0.95) contrast(1.05);
}
.page-hero__slide.is-active {
  opacity: 1;
  transform: scale(1.0);
}
@media (prefers-reduced-motion: reduce) {
  .page-hero__slide { transition: opacity 0.4s linear; transform: none; }
  .page-hero__slide.is-active { transform: none; }}
.page-hero__inner {
  position: relative;
  max-width: var(--maxw);
  margin-inline: auto;
  z-index: 2;
}
.page-hero__crumb {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--azul-claro);
  margin: 0 0 28px;
  display: flex;
  align-items: center;
  gap: 10px;
}
.page-hero__crumb::before {
  content: "";
  width: 24px;
  height: 1px;
  background: var(--accent);
}
.page-hero__crumb a { color: var(--azul-claro); }
.page-hero__crumb a:hover { color: var(--blanco); }
.page-hero h1 {
  color: var(--blanco);
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.6rem, 8vw, 6rem);
  letter-spacing: -0.03em;
  line-height: 0.92;
  margin: 0 0 24px;
  max-width: 18ch;
}
.page-hero p.lead {
  color: var(--hielo);
  max-width: 56ch;
  font-size: clamp(1.05rem, 1.4vw, 1.2rem);
  line-height: 1.45;
  opacity: 0.85;
}

/* ═══════════════════════════════════════════════════════════
   ROSTER · dotación
   ─ Rejilla de tarjetas cuadradas. Al pulsarlas se abre un
     popup fullscreen con el CV (ver .roster-popup más abajo).
     El contenido del CV vive en un <template> y se inyecta
     en el popup compartido al abrir.
   ═══════════════════════════════════════════════════════════ */
.roster {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 8px;
  margin-top: 56px;
}
.roster__item {
  position: relative;
  background: var(--negro);
  color: var(--blanco);
  aspect-ratio: 1 / 1;            /* tarjetas cuadradas */
  overflow: hidden;
  isolation: isolate;
  transition: transform var(--t-fast) var(--ease);
}
.roster__item--has-cv { cursor: pointer; }
.roster__item--has-cv:hover .roster__avatar img { transform: scale(1.04); }
/* En pantallas muy estrechas relajamos a un poco más alto que ancho
   para no apretar el texto del bloque inferior. */
@media (max-width: 480px) {
  .roster__item { aspect-ratio: 4 / 5; min-height: 0; }
}

/* La foto (o las iniciales) ocupan toda la tarjeta. */
.roster__avatar {
  position: absolute;
  inset: 0;
  margin: 0;
  width: 100%;
  height: 100%;
  background: var(--azul-profundo);
  color: var(--blanco);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 2.4rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  overflow: hidden;
}
.roster__avatar--photo { background: var(--negro); }
.roster__avatar img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Las fotos llegan con cabeza arriba-centrada — fijamos el
     punto de interés en la zona superior para que la cara
     siempre quede visible al recortar al cuadrado. */
  object-position: 50% 18%;
  display: block;
  transition: transform var(--t-norm) var(--ease);
}

/* Bloque de texto sobre la foto, con degradado para legibilidad. */
.roster__meta {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 64px 18px 16px;
  background: linear-gradient(180deg,
    rgba(0,0,0,0)    0%,
    rgba(0,0,0,0.55) 55%,
    rgba(0,0,0,0.92) 100%);
  display: flex;
  flex-direction: column;
  gap: 4px;
  z-index: 1;
}

.roster__rank {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--accent);
  font-weight: 600;
  margin: 0;
}
.roster__name {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 1.1rem;
  color: var(--blanco);
  margin: 0;
  line-height: 1.12;
  letter-spacing: -0.015em;
}
.roster__role {
  font-size: 0.74rem;
  color: rgba(255,255,255,0.82);
  margin: 0;
  line-height: 1.3;
  border: 0;
  padding: 0;
}
.roster__cta {
  align-self: flex-start;
  margin-top: 6px;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--blanco);
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  font-weight: 600;
  transition: transform var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.roster__cta:hover,
.roster__cta:focus-visible { transform: translateX(4px); color: var(--accent); }
.roster__cta:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 4px;
}


/* ═══════════════════════════════════════════════════════════
   ROSTER · popup CV (liquid glass · fullscreen)
   ─ Mismo lenguaje que las tarjetas climáticas y la galería
     de comunicación: capa fija sobre toda la ventana con un
     fondo translúcido y blur; encima, un panel cristal que
     ocupa el viewport (con respiración en los bordes).
   ═══════════════════════════════════════════════════════════ */
.roster-popup {
  position: fixed;
  inset: 0;
  z-index: 220;
  background: rgba(10, 14, 26, 0.62);
  backdrop-filter: blur(16px) saturate(150%);
  -webkit-backdrop-filter: blur(16px) saturate(150%);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-norm) var(--ease);
}
.roster-popup[hidden] { display: none; }
.roster-popup.is-open { opacity: 1; pointer-events: auto; }

.roster-popup__close {
  position: fixed;
  top: clamp(14px, 2vw, 28px);
  right: clamp(14px, 2vw, 28px);
  width: 48px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(255,255,255,0.10);
  color: var(--blanco);
  border: 1px solid rgba(255,255,255,0.30);
  border-radius: 50%;
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
  z-index: 3;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: background var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease);
}
.roster-popup__close:hover,
.roster-popup__close:focus-visible {
  background: var(--accent);
  border-color: var(--accent);
  transform: rotate(90deg);
}
.roster-popup__close:focus-visible {
  outline: 2px solid var(--blanco);
  outline-offset: 2px;
}

/* Panel cristal a pantalla completa: ocupa el 100% del viewport
   con un pequeño margen para no comerse el blur del backdrop. */
.roster-popup__inner {
  position: absolute;
  inset: clamp(14px, 2vw, 28px);
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  /* Liquid-glass */
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.22) 0%,
    rgba(255,255,255,0.08) 60%,
    rgba(255,255,255,0.04) 100%
  );
  backdrop-filter: blur(28px) saturate(160%);
  -webkit-backdrop-filter: blur(28px) saturate(160%);
  border: 1px solid rgba(255,255,255,0.22);
  border-radius: 18px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 36px 120px -32px rgba(0,0,0,0.7);
  color: var(--blanco);
  transform: translateY(24px) scale(0.985);
  transition: transform var(--t-norm) var(--ease-out);
  scrollbar-width: thin;
  scrollbar-color: rgba(255,255,255,0.32) transparent;
}
.roster-popup__inner::-webkit-scrollbar { width: 10px; }
.roster-popup__inner::-webkit-scrollbar-thumb {
  background: rgba(255,255,255,0.28);
  border-radius: 5px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
.roster-popup.is-open .roster-popup__inner { transform: translateY(0) scale(1); }

/* Reflejo superior sutil tipo "liquid glass" */
.roster-popup__inner::after {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 220px;
  background: linear-gradient(180deg, rgba(255,255,255,0.10), rgba(255,255,255,0));
  pointer-events: none;
  border-radius: 18px 18px 0 0;
}

.roster-popup__body {
  position: relative;
  z-index: 1;
  padding: clamp(32px, 5vw, 72px) clamp(28px, 6vw, 96px);
  max-width: 1320px;
  margin: 0 auto;
}

/* ─── CV: header + 2 columnas ───────────────────────────── */
.roster-cv__header {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(18px, 3vw, 32px);
  align-items: center;
  margin: 0 0 clamp(24px, 3vw, 40px);
  padding: 0 72px 22px 0;  /* margen para el botón × */
  border-bottom: 1px solid rgba(255,255,255,0.16);
}
@media (min-width: 640px) {
  .roster-cv__header {
    grid-template-columns: auto 1fr;
  }}
.roster-cv__photo {
  position: relative;
  width: clamp(140px, 22vw, 220px);
  aspect-ratio: 1 / 1;
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.10),
    rgba(255,255,255,0.02)
  );
  border: 1px solid rgba(255,255,255,0.22);
  border-radius: 14px;
  overflow: hidden;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.25),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 18px 40px -20px rgba(0,0,0,0.55);
  flex-shrink: 0;
}
.roster-cv__photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 18%;
  display: block;
}
.roster-cv__rank {
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 14px;
  font-weight: 600;
}
.roster-cv__name {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.2rem, 5vw, 3.8rem);
  letter-spacing: -0.025em;
  line-height: 1.02;
  margin: 0 0 8px;
  color: var(--blanco);
}
.roster-cv__nick {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--teal-claro);
  margin: 10px 0 0;
}
.roster-cv__title {
  font-family: var(--mono);
  font-size: 0.82rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.82);
  margin: 8px 0 0;
}
.roster-cv__cols {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(24px, 3vw, 44px);
}
@media (min-width: 760px) {
  .roster-cv__cols {
    grid-template-columns: minmax(260px, 0.9fr) 1.6fr;
    gap: clamp(32px, 5vw, 72px);
  }}
.roster-cv__col { min-width: 0; }
.roster-cv__col--meta { position: relative; }
@media (min-width: 760px) {
  .roster-cv__col--meta {
    padding-right: clamp(20px, 2.5vw, 28px);
    border-right: 1px solid rgba(255,255,255,0.14);
  }}

.roster-cv__facts {
  display: grid;
  gap: 8px 16px;
  margin: 0 0 28px;
  padding: 0 0 18px;
  border-bottom: 1px solid rgba(255,255,255,0.16);
}
.roster-cv__facts > div {
  display: grid;
  grid-template-columns: 92px 1fr;
  gap: 14px;
  align-items: baseline;
}
.roster-cv__facts dt {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.62);
}
.roster-cv__facts dd {
  margin: 0;
  font-size: 0.98rem;
  line-height: 1.4;
  color: var(--blanco);
}
.roster-cv__block { margin: 0 0 26px; }
.roster-cv__block:last-child { margin-bottom: 0; }
.roster-cv__block h4 {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--teal-claro);
  margin: 0 0 12px;
  font-weight: 600;
}
.roster-cv__block p {
  font-size: 1.05rem;
  line-height: 1.6;
  margin: 0 0 10px;
  color: rgba(255,255,255,0.9);
  max-width: 72ch;
}
.roster-cv__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.roster-cv__list li {
  position: relative;
  font-size: 0.95rem;
  line-height: 1.45;
  padding: 4px 0 4px 16px;
  color: rgba(255,255,255,0.9);
}
.roster-cv__list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.78em;
  width: 8px;
  height: 1px;
  background: var(--accent);
}

/* ─── Botón de descarga PDF en el bloque meta ───────────── */
.roster-cv__download {
  margin: 28px 0 0;
  padding-top: 22px;
  border-top: 1px solid rgba(255,255,255,0.16);
}
.roster-cv__download a {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--blanco);
  text-decoration: none;
  padding: 12px 22px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.32);
  border-radius: 999px;
  transition: background var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease);
}
.roster-cv__download a span {
  font-size: 1.1rem;
  line-height: 1;
}
.roster-cv__download a:hover,
.roster-cv__download a:focus-visible {
  background: var(--accent);
  border-color: var(--accent);
  transform: translateY(-1px);
}
.roster-cv__download a:focus-visible {
  outline: 2px solid var(--blanco);
  outline-offset: 2px;
}

/* Reduced-motion: sin transiciones de escala/translate. */
@media (prefers-reduced-motion: reduce) {
  .roster-popup,
  .roster-popup__inner {
    transition: opacity 0.2s linear;
  }
  .roster-popup__inner { transform: none; }
  .roster-popup__close { transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease); }
  .roster-popup__close:hover,
  .roster-popup__close:focus-visible { transform: none; }
}

@media (max-width: 600px) {
  .roster-popup__inner { inset: 0; border-radius: 0; }
  .roster-popup__inner::after { border-radius: 0; }
  .roster-popup__close { top: 10px; right: 10px; width: 42px; height: 42px; }
  .roster-popup__body { padding: 60px 22px 32px; }
  .roster-cv__facts > div { grid-template-columns: 72px 1fr; }
  .roster-cv__header { padding-right: 0; }}

/* ═══════════════════════════════════════════════════════════
   FACTSHEET · datos institucionales
   ═══════════════════════════════════════════════════════════ */
.factsheet {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 0;
  margin-top: 48px;
  border-top: 1px solid var(--gris-borde);
}
.factsheet > div {
  position: relative;
  padding: 28px 24px 24px 0;
  border-bottom: 1px solid var(--gris-borde);
  display: flex;
  flex-direction: column;
  gap: 10px;
  cursor: default;
  /* Animación de entrada: cada item aparece con leve retraso (stagger) */
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity 0.7s var(--ease-out),
    transform 0.7s var(--ease-out),
    background var(--t-norm) var(--ease);
}
/* Marca decorativa SIEMPRE visible: línea corta arriba-izquierda
   alineada con el inicio del label. En hover crece a todo el ancho. */
.factsheet > div::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 28px;
  height: 2px;
  background: var(--accent);
  transition: width 0.5s var(--ease-out);
}
.factsheet > div:hover::before { width: calc(100% - 24px); }
.factsheet > div:hover { background: rgba(0,0,0,0.025); }
.factsheet > div:hover dt { color: var(--accent); letter-spacing: 0.22em; }
.factsheet > div:hover dd { transform: translateY(-2px); }

/* Stagger reveal · hasta 8 items */
.factsheet.is-visible > div { opacity: 1; transform: translateY(0); }
.factsheet > div:nth-child(1) { transition-delay: 0.05s; }
.factsheet > div:nth-child(2) { transition-delay: 0.12s; }
.factsheet > div:nth-child(3) { transition-delay: 0.19s; }
.factsheet > div:nth-child(4) { transition-delay: 0.26s; }
.factsheet > div:nth-child(5) { transition-delay: 0.33s; }
.factsheet > div:nth-child(6) { transition-delay: 0.40s; }
.factsheet > div:nth-child(7) { transition-delay: 0.47s; }
.factsheet > div:nth-child(8) { transition-delay: 0.54s; }
.factsheet dt {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--fg-soft);
  margin: 0;
  font-weight: 500;
  transition: color var(--t-fast) var(--ease), letter-spacing var(--t-norm) var(--ease);
}
.factsheet dd {
  margin: 0;
  font-size: 1.15rem;
  color: var(--negro);
  font-weight: 500;
  letter-spacing: -0.005em;
  transition: transform var(--t-norm) var(--ease-out), color var(--t-fast) var(--ease);
}
.section--dark .factsheet { border-color: rgba(255,255,255,0.12); }
.section--dark .factsheet > div { border-color: rgba(255,255,255,0.12); }
.section--dark .factsheet dt { color: var(--azul-claro); }
.section--dark .factsheet dd { color: var(--blanco); }

/* ═══════════════════════════════════════════════════════════
   BLOQUES UTILITARIOS
   ═══════════════════════════════════════════════════════════ */
.note {
  border-left: 2px solid var(--accent);
  padding: 4px 0 4px 24px;
  margin: 28px 0;
  max-width: 60ch;
  font-size: 0.95rem;
}
.note strong { color: var(--negro); display: block; margin-bottom: 4px; }

.placeholder-block {
  border: 1px dashed var(--piedra-claro);
  padding: 56px 32px;
  text-align: center;
  margin: 40px 0;
  color: var(--fg-soft);
  font-family: var(--mono);
  font-size: 0.85rem;
  letter-spacing: 0.06em;
}
.placeholder-block strong {
  color: var(--negro);
  display: block;
  margin-bottom: 8px;
  font-family: var(--sans);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
}

/* ── Panel de estado de proyectos · sustituye al antiguo placeholder ── */
.proyectos-status {
  border-top: 1px solid var(--gris-borde);
  padding-top: 28px;
  margin-top: 4px;
  width: 100%;
}
.proyectos-status .code-tag {
  display: block;
  margin: 0 0 18px;
  color: var(--accent);
}
.proyectos-status__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 12px;
}
.proyectos-status__list li {
  display: grid;
  grid-template-columns: 14px 1fr;
  gap: 14px;
  align-items: baseline;
  font-size: 0.96rem;
  line-height: 1.4;
  color: var(--fg);
  padding: 8px 0;
  border-bottom: 1px solid var(--gris-borde);
}
.proyectos-status__list li:last-child { border-bottom: 0; }
.proyectos-status__list .dot {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1.5px solid var(--gris-borde);
  background: transparent;
  position: relative;
  top: 2px;
}
.proyectos-status__list .dot--done {
  background: var(--negro);
  border-color: var(--negro);
}
.proyectos-status__list .dot--current {
  background: var(--accent);
  border-color: var(--accent);
  box-shadow: 0 0 0 4px rgba(200,16,46,0.18);
  animation: timelinePulse 2.4s var(--ease) infinite;
}

/* ── Campaña · grid de 2 columnas (Tratado + Estructura compacto) ── */
.campana-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(28px, 4vw, 56px);
  margin-top: 16px;
}
@media (min-width: 760px) {
  .campana-grid { grid-template-columns: 1fr 1fr; }}
.campana-col {
  border-top: 2px solid var(--azul-profundo);
  padding-top: 16px;
}
.campana-col__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.4rem, 2.4vw, 1.8rem);
  letter-spacing: -0.02em;
  color: var(--azul-profundo);
  margin: 0 0 12px;
  line-height: 1.1;
}
.campana-col p {
  font-size: 0.98rem;
  line-height: 1.55;
  color: #1A3144;
  max-width: 48ch;
  margin: 0 0 10px;
}
.section--ice .campana-col p strong { color: var(--azul-profundo); }

/* ═══════════════════════════════════════════════════════════
   REVEAL ON SCROLL
   ═══════════════════════════════════════════════════════════ */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.9s var(--ease-out), transform 0.9s var(--ease-out);
}
[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}
[data-reveal-delay="1"] { transition-delay: 0.1s; }
[data-reveal-delay="2"] { transition-delay: 0.2s; }
[data-reveal-delay="3"] { transition-delay: 0.3s; }
[data-reveal-delay="4"] { transition-delay: 0.4s; }

/* ═══════════════════════════════════════════════════════════
   CONTACTO · página de formulario
   ═══════════════════════════════════════════════════════════ */
.contacto-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
  align-items: start;
}
@media (min-width: 960px) {
  .contacto-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
    gap: clamp(48px, 6vw, 96px);
  }}

.contacto-info h2 { margin-bottom: 32px; }
.contacto-info__block {
  padding: 18px 0;
  border-top: 1px solid rgba(14,31,63,0.12);
}
.contacto-info__block:last-of-type {
  border-bottom: 1px solid rgba(14,31,63,0.12);
}
.contacto-info__block h4 {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 8px;
  font-weight: 600;
}
.contacto-info__block p {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.55;
  color: var(--fg);
  max-width: 38ch;
}
.contacto-info__block a {
  color: var(--azul-medio);
  border-bottom: 1px solid rgba(31,58,107,0.35);
  transition: color var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}
.contacto-info__block a:hover {
  color: var(--accent);
  border-color: var(--accent);
}
.contacto-info__mail {
  display: inline-block;
  font-family: var(--mono);
  font-size: 0.95rem;
  margin-bottom: 10px;
  word-break: break-all;
}
.contacto-info__note {
  display: block;
  margin-top: 24px;
  line-height: 1.55;
  letter-spacing: 0.08em;
  text-transform: none;
  font-size: 0.74rem;
  color: var(--fg-soft);
  max-width: 42ch;
}

.contacto-form-wrap h2 { margin-bottom: 32px; }
.contacto-form {
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.contacto-form__row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 640px) {
  .contacto-form__row { grid-template-columns: 1fr 1fr; }}

.contacto-form__hp {
  position: absolute;
  left: -10000px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.contacto-field { display: flex; flex-direction: column; gap: 6px; }
.contacto-field label {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--fg-soft);
  font-weight: 600;
}
.contacto-field label small {
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0;
  text-transform: none;
  color: var(--fg-soft);
  font-weight: 400;
  margin-left: 6px;
  opacity: 0.8;
}
.contacto-field label span[aria-hidden="true"] { color: var(--accent); }

.contacto-field input[type="text"],
.contacto-field input[type="email"],
.contacto-field select,
.contacto-field textarea {
  font-family: var(--sans);
  font-size: 0.95rem;
  line-height: 1.45;
  color: var(--fg);
  background: var(--blanco);
  border: 1px solid var(--gris-borde);
  border-radius: 0;
  padding: 12px 14px;
  width: 100%;
  appearance: none;
  -webkit-appearance: none;
  transition: border-color var(--t-fast) var(--ease),
              box-shadow var(--t-fast) var(--ease),
              background var(--t-fast) var(--ease);
}
.contacto-field textarea {
  resize: vertical;
  min-height: 140px;
  font-family: var(--sans);
}
.contacto-field select {
  background-image:
    linear-gradient(45deg, transparent 50%, var(--fg-soft) 50%),
    linear-gradient(135deg, var(--fg-soft) 50%, transparent 50%);
  background-position:
    calc(100% - 18px) 50%,
    calc(100% - 13px) 50%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  padding-right: 36px;
}
.contacto-field input:focus,
.contacto-field select:focus,
.contacto-field textarea:focus {
  outline: none;
  border-color: var(--azul-medio);
  box-shadow: 0 0 0 3px rgba(31,58,107,0.15);
}
.contacto-field input[aria-invalid="true"],
.contacto-field select[aria-invalid="true"],
.contacto-field textarea[aria-invalid="true"] {
  border-color: var(--accent);
  background: rgba(200,16,46,0.04);
}
.contacto-field__error {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.04em;
  color: var(--accent);
  margin-top: 2px;
}

.contacto-field--check { gap: 10px; }
.contacto-field--check label {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-family: var(--sans);
  font-size: 0.85rem;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--fg);
  line-height: 1.5;
  cursor: pointer;
  max-width: 60ch;
}
.contacto-field--check input[type="checkbox"] {
  width: 18px;
  height: 18px;
  margin-top: 2px;
  accent-color: var(--azul-medio);
  flex-shrink: 0;
  cursor: pointer;
}

.contacto-form__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 18px 24px;
  margin-top: 8px;
}
.contacto-submit {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--blanco);
  background: var(--azul-profundo);
  border: 1px solid var(--azul-profundo);
  padding: 14px 26px;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease);
}
.contacto-submit:hover {
  background: var(--accent);
  border-color: var(--accent);
}
.contacto-submit:active { transform: translateY(1px); }
.contacto-submit span {
  font-family: var(--sans);
  font-size: 1rem;
  letter-spacing: 0;
  transition: transform var(--t-fast) var(--ease);
}
.contacto-submit:hover span { transform: translateX(4px); }

.contacto-flash {
  border-left: 3px solid;
  padding: 18px 22px;
  margin-bottom: 28px;
  background: var(--blanco);
}
.contacto-flash--ok    { border-color: var(--teal-glaciar, #7FA9A4); }
.contacto-flash--error { border-color: var(--accent); background: rgba(200,16,46,0.05); }
.contacto-flash__title {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 600;
  margin: 0 0 6px;
  color: var(--fg);
}
.contacto-flash p {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.5;
  max-width: 56ch;
}

/* ═══════════════════════════════════════════════════════════
   FOOTER · compacto · color institucional #383e4e
   ═══════════════════════════════════════════════════════════ */
.site-footer {
  background: #383e4e;
  color: rgba(255,255,255,0.78);
  padding: 36px 0 18px;
  font-size: 0.84rem;
}
.footer__inner {
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.footer__top {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  padding-bottom: 22px;
  border-bottom: 1px solid rgba(255,255,255,0.14);
  align-items: start;
}
@media (min-width: 880px) {
  .footer__top { grid-template-columns: 1.1fr 2fr; gap: 40px; }}
.footer__brand {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
.footer__brand img { width: 36px; height: 36px; flex-shrink: 0; }
.footer__brand strong {
  display: block;
  color: var(--blanco);
  font-size: 0.88rem;
  font-weight: 600;
  margin-bottom: 2px;
}
.footer__brand small {
  font-family: var(--mono);
  display: block;
  font-size: 0.62rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
}
.footer__brand-motto {
  display: block;
  margin-top: 8px;
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 0.82rem;
  letter-spacing: 0;
  line-height: 1.4;
  color: rgba(255,255,255,0.62);
  max-width: 28ch;
}
/* En columnas estrechas el mail puede ser más largo que la columna;
   dejamos que parta sin desbordar la rejilla del footer. */
.footer__col a[href^="mailto:"] { word-break: break-word; overflow-wrap: anywhere; }

.footer__cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 20px;
}
.footer__col h4 {
  color: var(--blanco);
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin: 0 0 10px;
  font-weight: 500;
}
.footer__col a, .footer__col p {
  display: block;
  color: rgba(255,255,255,0.72);
  font-size: 0.8rem;
  margin: 0 0 6px;
  line-height: 1.45;
  max-width: none;
}
.footer__col a:hover { color: var(--blanco); }

.footer__small {
  width: 100%;
  font-family: var(--mono);
  font-size: 0.7rem;             /* ~11.2px (antes 9.92px – por debajo de mínimo cómodo) */
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.72); /* ratio ≥ 4.5:1 sobre #383e4e (WCAG AA) */
  border-top: 1px solid rgba(255,255,255,0.18);
  padding: 16px var(--gutter) 4px;
  margin-top: 4px;
  text-align: center;
  box-sizing: border-box;
}
.footer__small span { display: inline-block; max-width: 100%; }

/* ═══════════════════════════════════════════════════════════
   BOTÓN VOLVER ARRIBA
   ═══════════════════════════════════════════════════════════ */
.back-to-top {
  position: fixed;
  bottom: 28px;
  right: 28px;
  z-index: 90;
  width: 52px;
  height: 52px;
  background: var(--negro);
  color: var(--blanco);
  border: 0;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity var(--t-norm) var(--ease),
              transform var(--t-norm) var(--ease),
              background var(--t-fast) var(--ease);
}
.back-to-top.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.back-to-top:hover { background: var(--accent); }
@supports (padding: max(0px)) {
  .back-to-top {
    bottom: max(28px, env(safe-area-inset-bottom));
    right: max(28px, env(safe-area-inset-right));
  }}

/* ═══════════════════════════════════════════════════════════
   REDUCED MOTION
   ═══════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .hero__video { display: none; }
  /* Desactiva la "diapositiva" para usuarios con sensibilidad al movimiento */
  html { scroll-snap-type: none !important; scroll-behavior: auto !important; }
  .hero, .section, .spotlight, .journey, .site-footer { scroll-snap-align: none; }
  /* Asegura que las animaciones SVG (gauge, journey path) caigan a estado final */
  .gauge__arc-fg { transition: none !important; }
}

/* ═══════════════════════════════════════════════════════════
   TIMELINE · Cronología de la campaña
   ═══════════════════════════════════════════════════════════ */
.timeline {
  list-style: none;
  margin: 64px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  position: relative;
}
/* Línea vertical única, alineada al borde izquierdo en todos los tamaños */
.timeline::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 16px;
  width: 1px;
  background: var(--gris-borde);
}

/* Cada item: fecha encima del título, sin partir en columnas */
.timeline__item {
  position: relative;
  padding: 28px 0 28px 56px;
  border-top: 1px solid var(--gris-borde);
  display: flex;
  flex-direction: column;
  gap: 6px;
  transition: background var(--t-norm) var(--ease);
}
.timeline__item:last-child { border-bottom: 1px solid var(--gris-borde); }
@media (min-width: 880px) {
  .timeline__item { padding: 36px 0 36px 56px; }}
.timeline__item::before {
  content: "";
  position: absolute;
  top: 36px;
  left: 11px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--bg);
  border: 1.5px solid var(--gris-borde);
  transition: all var(--t-norm) var(--ease);
}

/* Estados */
.timeline__item.is-done::before {
  background: var(--negro);
  border-color: var(--negro);
}
.timeline__item.is-current::before {
  background: var(--accent);
  border-color: var(--accent);
  box-shadow: 0 0 0 5px rgba(200,16,46,0.18);
  animation: timelinePulse 2.4s var(--ease) infinite;
}
@keyframes timelinePulse {
  0%, 100% { box-shadow: 0 0 0 5px rgba(200,16,46,0.18); }
  50%      { box-shadow: 0 0 0 10px rgba(200,16,46,0.05); }
}

.timeline__when {
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--fg-soft);
  font-weight: 500;
  align-self: start;
}
.timeline__item.is-current .timeline__when { color: var(--accent); font-weight: 600; }
.timeline__item.is-done .timeline__when { color: var(--negro); }

.timeline__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.4rem, 2.4vw, 2rem);
  letter-spacing: -0.025em;
  color: var(--negro);
  margin: 0;
  line-height: 1.05;
}
.timeline__item.is-current .timeline__title { color: var(--negro); }

.timeline__body {
  margin: 8px 0 0;
  color: var(--fg-soft);
  font-size: 0.95rem;
  line-height: 1.5;
  max-width: 60ch;
}

/* ═══════════════════════════════════════════════════════════
   DIARIO DE OPERACIONES · entradas
   ═══════════════════════════════════════════════════════════ */
.diary-entry {
  display: grid;
  grid-template-columns: 1fr;
  gap: 18px;
  padding: 40px 0;
  border-top: 1px solid var(--gris-borde);
  max-width: 880px;
  margin: 0 auto;
}
.diary-entry:last-child { border-bottom: 1px solid var(--gris-borde); }
@media (min-width: 880px) {
  .diary-entry {
    grid-template-columns: 200px 1fr;
    gap: 56px;
    padding: 56px 0;
  }}
.diary-entry--preview {
  background: var(--bg);
  border: 1px solid var(--gris-borde);
  padding: 32px;
  border-radius: 4px;
  margin-top: 32px;
}
@media (min-width: 880px) {
  .diary-entry--preview { padding: 40px 48px; }}

.diary-entry__meta {
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: flex-start;
}
.diary-entry__date {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--negro);
  font-weight: 600;
}
.diary-entry__tag {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--accent);
  background: rgba(200,16,46,0.08);
  padding: 4px 10px;
  border-radius: 2px;
  font-weight: 600;
}
.diary-entry__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.5rem, 2.6vw, 2rem);
  letter-spacing: -0.025em;
  color: var(--negro);
  margin: 0 0 16px;
  line-height: 1.05;
}
.diary-entry__body p {
  color: var(--fg-soft);
  font-size: 1rem;
  line-height: 1.6;
  margin: 0 0 16px;
  max-width: 60ch;
}
.diary-entry__data {
  margin: 24px 0 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 0;
  border-top: 1px solid var(--gris-borde);
  padding-top: 16px;
  max-width: 480px;
}
.diary-entry__data > div {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px 0;
}
.diary-entry__data dt {
  font-family: var(--mono);
  font-size: 0.65rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--fg-soft);
  margin: 0;
}
.diary-entry__data dd {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.95rem;
  color: var(--negro);
  font-weight: 600;
}

/* ═══════════════════════════════════════════════════════════
   HISTÓRICO DE CONTINGENTES · rejilla 40 unidades
   ═══════════════════════════════════════════════════════════ */
/* Histórico de los 40 contingentes · grid compacto.
   Mobile: 5 cols (8 filas). Tablet: 8 cols (5 filas). Desktop: 10 cols (4 filas). */
.contingentes-grid {
  list-style: none;
  margin: 40px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1px;
  background: var(--gris-borde);
  border: 1px solid var(--gris-borde);
}
@media (min-width: 600px) {
  .contingentes-grid { grid-template-columns: repeat(8, 1fr); }}
@media (min-width: 880px) {
  .contingentes-grid { grid-template-columns: repeat(10, 1fr); }}
.contingente {
  background: var(--bg);
  aspect-ratio: 1 / 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 8px 4px;
  text-align: center;
  transition: background var(--t-fast) var(--ease);
  cursor: default;
}
.contingente:hover { background: var(--bg-alt); }
.contingente__roman {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(0.95rem, 1.6vw, 1.2rem);
  letter-spacing: -0.01em;
  color: var(--fg-soft);
  line-height: 1;
}
.contingente__year {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.1em;
  color: var(--piedra-claro);
  margin: 0;
  line-height: 1;
}

/* `.contingente.is-previous` retirado · la leyenda ya no incluye
   "Anterior" y XXXIX se renderiza como histórico normal. Si en
   2027 quisierais reintroducir el destacado del contingente
   anterior, restaurar este bloque. */

.contingente.is-current {
  background: var(--accent);
}
.contingente.is-current .contingente__roman { color: var(--blanco); font-weight: 500; }
.contingente.is-current .contingente__year { color: rgba(255,255,255,0.85); }
.contingente.is-current:hover { background: var(--rojo-oscuro); }

/* ═══════════════════════════════════════════════════════════
   TOC lateral · sólo desktop ≥ 1280px
   Estilo editorial · monoespaciada · acento rojo
   ═══════════════════════════════════════════════════════════ */
.toc-rail {
  position: fixed;
  top: 50%;
  right: 20px;
  transform: translateY(-50%);
  width: 180px;
  z-index: 40;
  display: none;
  pointer-events: auto;
}
/* Visible en laptop (MacBook Air 13" típico) y superiores */
@media (min-width: 1280px) {
  .toc-rail { display: block; }
}
/* En pantallas medianas (1280-1559) reduce un poco para no rozar */
@media (min-width: 1280px) and (max-width: 1559px) {
  .toc-rail { width: 160px; right: 16px; }
  .toc-rail__list a { font-size: 0.7rem; padding: 6px 0 6px 12px; }
}


.toc-rail__heading {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--fg-soft);
  font-weight: 500;
  margin: 0 0 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--gris-borde);
  display: flex;
  align-items: center;
  gap: 10px;
}
.toc-rail__heading::before {
  content: "";
  width: 18px;
  height: 1px;
  background: var(--accent);
}

/* ═══════════════════════════════════════════════════════════
   PREPARACIÓN · cuenta atrás + mapa de ruta · compacto
   ═══════════════════════════════════════════════════════════ */
.prep-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  margin-top: 32px;     /* antes 64px */
  align-items: stretch;
}
@media (min-width: 880px) {
  .prep-grid {
    grid-template-columns: 0.85fr 1.15fr;
    gap: 0;
  }}

/* Cuenta atrás · compacta */
.countdown {
  background: var(--negro);
  color: var(--hielo);
  padding: clamp(24px, 3vw, 36px);    /* antes 40-64 */
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.countdown .code-tag {
  color: var(--azul-claro);
}
/* Grid de 4 celdas: días · horas · min · seg. Cada celda muestra
   el valor (grande, en cursiva display) y la etiqueta (mono, pequeña). */
.countdown__grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(8px, 1.4vw, 16px);
  margin: 0;
}
.countdown__unit {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
}
.countdown__val {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 5.4vw, 4.4rem);
  font-variant-numeric: tabular-nums;
  color: var(--blanco);
  line-height: 0.85;
  letter-spacing: -0.03em;
}
.countdown__u {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.78);
  margin-top: 10px;
}
@media (max-width: 480px) {
  /* En móvil pasamos a 2x2 para que los números no se aplasten. */
  .countdown__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
  .countdown__val  { font-size: clamp(3rem, 14vw, 4.4rem); }}
.countdown__date {
  font-family: var(--display);
  font-style: italic;
  font-size: 1.15rem;
  color: var(--blanco);
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}
.countdown__note {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--azul-claro);
  margin: 0;
}
/* La sección padre .section--ice oscurece h3/p (texto oscuro sobre
   crema). El bloque .countdown vive sobre fondo negro, así que
   restauramos el blanco/claro propios. */
.section--ice .countdown                 { color: var(--hielo) !important; }
.section--ice .countdown .code-tag       { color: var(--azul-claro) !important; }
.section--ice .countdown__val            { color: var(--blanco) !important; }
.section--ice .countdown__u              { color: rgba(255,255,255,0.82) !important; }
.section--ice .countdown__date           { color: var(--blanco) !important; }
.section--ice .countdown__note           { color: var(--blanco) !important; }

/* ── Cuenta atrás · variante de anillos (cuenta regresiva circular) ──
   Cada unidad es un aro fino con el número centrado; un arco luminoso
   teal marca la fracción restante del ciclo (seg/60, min/60, h/24,
   días/total) y un punto brillante recorre la punta del arco. El valor
   de --p (0–1) lo fija el JS en cada tic; sin JS se ve el aro + número. */
/* Conserva el fondo azul oscuro previo (var(--negro), heredado de
   .countdown); los anillos teal van encima. */
.countdown--rings .code-tag,
.section--ice .countdown--rings .code-tag { color: rgba(255,255,255,0.9) !important; }
.countdown--rings .countdown__grid {
  gap: clamp(10px, 2.2vw, 24px);
  align-items: start;
}
.countdown--rings .countdown__unit {
  align-items: center;
  gap: 14px;
}
.countdown--rings .countdown__ring {
  --p: 0;
  --ring-track: rgba(255,255,255,0.16);
  --ring-glow: #eafcf8;
  position: relative;
  display: grid;
  place-items: center;
  width: 100%;
  max-width: 128px;
  aspect-ratio: 1;
  border-radius: 50%;
}
/* Pista completa + arco de progreso, recortados a forma de aro */
.countdown--rings .countdown__ring::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: conic-gradient(from 0deg,
              var(--ring-glow) calc(var(--p) * 360deg),
              var(--ring-track) 0);
  -webkit-mask: radial-gradient(farthest-side,
                transparent calc(100% - 2.5px), #000 calc(100% - 2px));
          mask: radial-gradient(farthest-side,
                transparent calc(100% - 2.5px), #000 calc(100% - 2px));
  filter: drop-shadow(0 0 4px rgba(234,252,248,0.55));
}
/* Punto brillante en la punta del arco (capa rotada sobre el centro) */
.countdown--rings .countdown__ring::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: radial-gradient(circle 3.5px at 50% 0,
              #fff 36%, var(--ring-glow) 62%, transparent 74%);
  transform: rotate(calc(var(--p) * 360deg));
  filter: drop-shadow(0 0 6px var(--ring-glow));
}
.countdown--rings .countdown__val,
.section--ice .countdown--rings .countdown__val {
  font-size: clamp(1.7rem, 4.4vw, 2.9rem);
  line-height: 1;
  color: #fff !important;
}
.countdown--rings .countdown__u,
.section--ice .countdown--rings .countdown__u {
  margin-top: 0;
  color: rgba(255,255,255,0.9) !important;
}
@media (prefers-reduced-motion: reduce) {
  .countdown--rings .countdown__ring::after { filter: none; }}
@media (max-width: 480px) {
  /* En móvil mantenemos las 4 en fila: los aros encogen y siguen legibles. */
  .countdown--rings .countdown__grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
  .countdown--rings .countdown__val  { font-size: clamp(1rem, 5.2vw, 1.6rem); }
  .countdown--rings .countdown__u    { font-size: 0.54rem; letter-spacing: 0.08em; }}

/* Mapa de ruta · padding compacto */
.route-map {
  background: var(--bg);
  border: 1px solid var(--gris-borde);
  padding: clamp(20px, 2.8vw, 32px);   /* antes 32-56 */
  display: flex;
  flex-direction: column;
  color: var(--negro);
}

/* ── Globo COBE · sustituye al mapa 2D en la tarjeta del Contingente ── */
.route-map--globe {
  background: var(--negro);
  color: var(--hielo);
  border-color: rgba(255,255,255,0.12);
}
.route-map--globe .code-tag,
.route-map--globe .route-map__note { color: rgba(255,255,255,0.7); }
.route-map--globe .route-map__note .route-map__legend-current { background: var(--accent); }
.route-map--globe .route-map__cta { color: var(--blanco); border-color: var(--accent); }
.route-map--globe .route-map__cta:hover { color: var(--accent); }

/* ── «Camino al despliegue» · foto de fondo (BO en Decepción) ──
   Imagen quieta (sin parallax). Velo oscuro para legibilidad; el
   contador y el globo ya son tarjetas oscuras y contrastan bien. */
.despliegue {
  position: relative;
  isolation: isolate;
  background: var(--negro);
}
.despliegue::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image:
    linear-gradient(180deg, rgba(10,14,26,0.74), rgba(10,14,26,0.84)),
    url('/assets/img/hesperides-decepcion.jpg');
  background-size: cover;
  background-position: center 38%;
  background-repeat: no-repeat;
}
.despliegue > .container { position: relative; z-index: 1; }
/* Texto de cabecera en claro sobre la foto (vence a .section--ice) */
.section--ice.despliegue .section-head__label { color: var(--azul-claro); }
.section--ice.despliegue .display { color: var(--blanco); }
.section--ice.despliegue .lead { color: rgba(255,255,255,0.92); }

.route-globe {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  max-width: 320px;             /* antes 480 · más compacto */
  margin: 0 auto 12px;
}
.route-globe canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
  cursor: grab;
  contain: layout paint size;
  /* Captura el drag de mouse Y touch sin que el navegador lo
     interprete como scroll de la página o zoom. Esencial para
     poder arrastrar verticalmente y ver la Antártida. */
  touch-action: none;
  pointer-events: auto;
  user-select: none;
  -webkit-user-select: none;
  /* Glow sutil bajo el globo */
  filter: drop-shadow(0 8px 30px rgba(200,16,46,0.15));
}
.route-globe canvas:active { cursor: grabbing; }

/* ═══════════════════════════════════════════════════════════
   ROUTE-MINI · Mini-mapa SVG estilizado (sustituye al globo COBE)
   Muestra la ruta Madrid → Decepción con los 5 hitos.
   ═══════════════════════════════════════════════════════════ */
.route-map--mini {
  background: var(--negro);
  color: var(--hielo);
  border-color: rgba(255,255,255,0.12);
}
.route-map--mini .code-tag,
.route-map--mini .route-map__note { color: rgba(255,255,255,0.7); }
.route-map--mini .route-map__note .route-map__legend-current { background: var(--accent); }
.route-map--mini .route-map__cta { color: var(--blanco); border-color: var(--accent); }
.route-map--mini .route-map__cta:hover { color: var(--accent); }
@keyframes route-mini-draw {
  to { stroke-dashoffset: 0; }
}

/* Vehículo (avión/barco) que recorre la línea del modo viaje.
   Sustituye al antiguo globo COBE: avión en stages aéreos
   (Madrid → BA → Ushuaia) y barco en marítimos (Hoces → Decepción).
   La posición X la actualiza el JS siguiendo el path SVG real. */
.journey { position: relative; }

.route-map__note {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  color: var(--fg-soft);
  margin: 0;
  line-height: 1.6;
  max-width: 100%;
}
.route-map__legend-current {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
  vertical-align: middle;
  margin: 0 4px;
}
.route-map__fallback {
  padding: 24px;
  font-family: var(--mono);
  font-size: 0.85rem;
  color: var(--fg-soft);
}

/* ── Markers SVG (vector limpio · escalable · animación CSS) ── */
.route-marker {
  position: relative;
  display: flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  pointer-events: auto;
  transition: opacity 0.45s var(--ease-out), transform 0.45s var(--ease-out);
}
.route-marker.is-pending {
  opacity: 0;
  transform: scale(0.6);
}
.route-marker__svg {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  display: block;
  overflow: visible;
}
.route-marker__ring {
  fill: none;
  stroke: rgba(10, 14, 26, 0.18);
  stroke-width: 1;
  transform-origin: 12px 12px;
  transform-box: fill-box;
}
.route-marker__border {
  fill: var(--negro);
}
.route-marker__dot {
  fill: var(--blanco);
}
.route-marker:hover .route-marker__svg {
  transform: scale(1.12);
  transition: transform 0.2s var(--ease);
}

.route-marker__label {
  display: flex;
  flex-direction: column;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  line-height: 1.3;
  background: rgba(244,242,236,0.92);
  padding: 4px 8px;
  border: 1px solid var(--gris-borde);
  white-space: nowrap;
  pointer-events: none;
  opacity: 0;
  transform: translateX(-4px);
  transition: opacity 0.18s var(--ease), transform 0.18s var(--ease);
}
.route-marker:hover .route-marker__label,
.route-marker.is-current .route-marker__label,
.route-marker.is-destination .route-marker__label {
  opacity: 1;
  transform: translateX(0);
}
.route-marker__label strong {
  color: var(--negro);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-size: 10.5px;
}
.route-marker__label em {
  font-style: normal;
  color: var(--fg-soft);
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.16em;
}

/* Fase actual: anillo SVG pulsante (no box-shadow), rojo bandera. */
.route-marker.is-current .route-marker__ring {
  stroke: var(--accent);
  stroke-width: 1.4;
  animation: routeRingPulse 2.4s var(--ease) infinite;
}
.route-marker.is-current .route-marker__border { fill: var(--accent); }
.route-marker.is-current .route-marker__dot    { fill: var(--blanco); }
.route-marker.is-current .route-marker__label strong { color: var(--accent); }

/* Destino: punto negro un poco mayor, sin pulso. */
.route-marker.is-destination .route-marker__border { r: 7; }
.route-marker.is-destination .route-marker__dot    { fill: var(--negro); r: 4; }
.route-marker.is-destination .route-marker__ring   { stroke: rgba(10,14,26,0.32); }

@keyframes routeRingPulse {
  0%   { r: 10; opacity: 0.55; stroke-width: 1.6; }
  60%  { r: 18; opacity: 0;    stroke-width: 1; }
  100% { r: 18; opacity: 0;    stroke-width: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .route-marker.is-current .route-marker__ring { animation: none; opacity: 0.55; }}

/* CTA "Ver el viaje completo" bajo el mapa */
.route-map__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 18px;
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--negro);
  text-decoration: none;
  font-weight: 600;
  border-bottom: 1px solid var(--accent);
  padding-bottom: 4px;
  transition: gap var(--t-norm) var(--ease), color var(--t-fast) var(--ease);
}
.route-map__cta:hover {
  color: var(--accent);
  gap: 16px;
}
.section--graphite .route-map__cta { color: var(--blanco); }
.section--graphite .route-map__cta:hover { color: var(--accent); border-color: var(--accent); }

/* ═══════════════════════════════════════════════════════════
   HISTÓRICO INTERACTIVO · botón + panel de dotación
   ═══════════════════════════════════════════════════════════ */
.contingente {
  /* Reset del button */
  font: inherit;
  color: inherit;
  background: var(--bg);
  border: 0;
  cursor: pointer;
  width: 100%;
  height: 100%;
  /* Layout más compacto: 4:3 en lugar de 1:1 reduce ~25% la altura del grid */
  aspect-ratio: 4 / 3;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 6px 4px;
  text-align: center;
  transition: background var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);
}
.contingente:hover {
  background: var(--bg-alt);
  transform: scale(1.02);
}
.contingente:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
}
.contingente.is-active {
  background: var(--bg-alt);
  box-shadow: inset 0 0 0 2px var(--accent);
}

/* Panel detalle */
.historico-panel {
  position: fixed;
  inset: 0;
  background: rgba(10,14,26,0.55);
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-norm) var(--ease);
}
.historico-panel.is-open {
  opacity: 1;
  pointer-events: auto;
}
.historico-panel[hidden] { display: none; }

.historico-panel__inner {
  position: relative;
  background: var(--bg);
  border: 1px solid var(--gris-borde);
  width: 100%;
  max-width: 720px;
  max-height: 86vh;
  overflow-y: auto;
  /* Evita que el scroll dentro del popup arrastre la página
     cuando el contenido llega al borde (Firefox/Chrome) y la
     inercia táctil en iOS Safari. */
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  display: flex;
  flex-direction: column;
  transform: translateY(20px);
  transition: transform var(--t-norm) var(--ease-out);
}
.historico-panel.is-open .historico-panel__inner {
  transform: translateY(0);
}

.historico-panel__close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 36px;
  height: 36px;
  background: transparent;
  border: 0;
  font-size: 1.6rem;
  line-height: 1;
  color: var(--fg-soft);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: color var(--t-fast) var(--ease);
}
.historico-panel__close:hover { color: var(--accent); }

.historico-panel__head {
  /* Negro neutro (no var(--negro) para evitar el tinte azul del
     azul-profundo institucional · queremos blanco/rojo limpio). */
  background: #111;
  color: var(--blanco);
  padding: 36px 40px 32px;
  border-bottom: 2px solid var(--accent);
}
/* "YYYY-YY · XXX CONTINGENTE" en rojo aclarado · línea superior.
   a11y: var(--accent) (#C8102E) sobre #111 da 3.21 (sólo AA-large)
   y el code-tag se renderiza a ~0.72rem → texto pequeño. Usamos un
   tono más claro de la misma familia (#E5526A) que sube a 5.17 y
   pasa AA-normal. Sólo afecta a esta línea — el resto del rojo
   bandera (var(--accent)) se mantiene intacto. */
.historico-panel__head .code-tag {
  color: #E5526A;
  margin: 0 0 12px;
}
/* Override de `.section--ice h3` que coloreaba el roman en
   azul-profundo (y dejaba el título casi invisible sobre el
   fondo oscuro del panel). Forzamos blanco. */
.section--ice .historico-panel__roman,
.historico-panel__roman {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 5vw, 3.2rem);
  color: var(--blanco);
  letter-spacing: -0.025em;
  line-height: 1;
  margin: 0 0 6px;
}
/* "ISLA DECEPCIÓN" en gris suave sobre fondo oscuro. Doblamos
   el selector con `.section--ice` para vencer al `.section--ice p`
   que lo coloreaba en azul-profundo institucional. */
.section--ice .historico-panel__location,
.historico-panel__location {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
  margin: 0;
}

.historico-panel__body {
  padding: 28px 40px 36px;
}
.historico-panel__body .code-tag { margin: 0 0 20px; }

.historico-panel__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0;
}
.historico-panel__list li {
  display: grid;
  /* Antes 80px: textos como "ÁREA DE INSTALACIONES" desbordaban e invadían
     la columna del nombre. 170px holgados + word-break dejan respirar. */
  grid-template-columns: 170px minmax(0, 1fr);
  gap: 24px;
  padding: 14px 0;
  border-top: 1px solid var(--gris-borde);
  align-items: start;          /* baseline causaba solapamientos al envolver */
}
.historico-panel__list li:first-child { border-top: 0; }
.historico-panel__list .rank {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.12em;      /* algo más estrecho para que quepa */
  text-transform: uppercase;
  color: var(--accent);
  font-weight: 600;
  line-height: 1.4;
  /* Permite romper palabras largas si la columna no llega */
  overflow-wrap: anywhere;
  word-break: break-word;
  hyphens: auto;
  padding-top: 4px;            /* alinea con el nombre cuando es 1 línea */
}
.historico-panel__list .name-block {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;                /* permite que .name truncee si fuera muy largo */
}
.historico-panel__list .name {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 1.05rem;
  color: var(--negro);
  line-height: 1.2;
  letter-spacing: -0.015em;
  overflow-wrap: anywhere;
}
.historico-panel__list .role {
  font-size: 0.85rem;
  color: var(--fg-soft);
  line-height: 1.4;
}

/* Diario de Operaciones · enlace en la cabecera oscura del panel.
   Rojo aclarado (#E5526A, ~5.17 sobre #111 → AA) como el code-tag del
   head. Sólo aparece si el contingente tiene PDF (si no, :empty lo oculta). */
.historico-panel__diario {
  margin-top: 16px;
}
.historico-panel__diario:empty { display: none; }
.historico-panel__diario-link {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-decoration: none;
  color: #E5526A;
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
  transition: color var(--t-fast) var(--ease);
}
.historico-panel__diario-link:hover,
.historico-panel__diario-link:focus-visible { color: #FF8095; }

@media (max-width: 600px) {
  .historico-panel__head { padding: 28px 24px 24px; }
  .historico-panel__body { padding: 24px 24px 32px; }
  .historico-panel__list li {
    grid-template-columns: 1fr;
    gap: 6px;
    padding: 14px 0;
  }
  .historico-panel__list .rank { padding-top: 0; }}

/* Redes sociales en el footer · icono + nombre alineados, en columna */
.footer__social-link {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  color: rgba(255,255,255,0.72);
  line-height: 1.45;
  margin-bottom: 6px !important;
}
.footer__social-link svg {
  flex-shrink: 0;
  opacity: 0.75;
  transition: opacity var(--t-fast) var(--ease);
}
.footer__social-link:hover {
  color: var(--blanco);
}
.footer__social-link:hover svg { opacity: 1; }
.footer__social-link.is-disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
.footer__social-name {
  display: inline;
}

/* ═══════════════════════════════════════════════════════════
   JOURNEY · Modo viaje · ruta editorial con trazo animado
   Inspirado en el longform Eiger Extreme · Mammut.
   La línea SVG cruza la sección y se rellena según scroll
   (stroke-dashoffset). Cada hito alterna lado para dar ritmo
   zigzag (Madrid → Buenos Aires → Ushuaia → BAE).
   ═══════════════════════════════════════════════════════════ */
.journey {
  position: relative;
  background: var(--blanco);
  color: var(--negro);
  padding: clamp(80px, 10vw, 140px) 0 clamp(100px, 12vw, 180px);
  overflow: hidden;
}
.journey__head {
  position: relative;
  z-index: 3;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
  margin-bottom: clamp(48px, 7vw, 96px);
  display: flex;
  flex-direction: column;
  gap: 20px;
  align-items: flex-start;
}
.journey__head h2 {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 6vw, 4.8rem);
  letter-spacing: -0.03em;
  line-height: 0.95;
  margin: 0;
  max-width: 18ch;
}
.journey__head p {
  max-width: 60ch;
  color: var(--fg-soft);
  font-size: 1.05rem;
  line-height: 1.5;
  margin: 0;
}

/* ── Journey LEGACY retirado (D2+D3) ────────────────────────
   ~190 líneas que implementaban el primer scrollytelling:
   .journey__line, .journey__line-bg/-fg, .journey__stages,
   .journey-stage, .journey-stage--right/--destino,
   .journey-stage__copy/__num/__data/__media/__photo/__caption/
   __placeholder, etc. Todas con cero referencias en el HTML/JS
   actual (verificado con grep). El journey actual vive en
   inc/journey.php + assets/js/journey-vehicle.js y usa
   .journey__copy, .journey__path, .journey__nodes, .j-vehicle.
   ─────────────────────────────────────────────────────────── */

/* ═══════════════════════════════════════════════════════════
   WEATHER BOARD · Datos meteorológicos en directo (modo base)
   Imita el termómetro radial del reportaje de Mammut.
   ═══════════════════════════════════════════════════════════ */
/* Layout 2x2: arriba [Termómetro · Cámara IGN] · abajo [Variables · Viento]
   Más compacto que el 3-col anterior (paddings y gauges reducidos). */
.weather-board {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  margin-top: 32px;
  align-items: stretch;
  border: 1px solid var(--gris-borde);
}
@media (min-width: 720px) {
  /* En 2-cols: separador derecho impar, separador inferior fila 1 */
  .weather-board__cell:nth-child(odd)  { border-right: 1px solid var(--gris-borde); }}

/* Gauge circular · arco con escalas tipo termómetro */
.gauge {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  max-width: 240px;       /* antes 320: tamaños más compactos */
  margin: 4px auto auto;
}
.gauge svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.gauge__ticks line {
  stroke: rgba(255,255,255,0.42);
  stroke-width: 1;
  stroke-linecap: round;
}
.gauge__ticks line.is-major {
  stroke: rgba(255,255,255,0.85);
  stroke-width: 1.4;
}
.gauge__ticks line.is-active {
  stroke: var(--blanco);
  stroke-width: 1.8;
}
.gauge__arc-fg {
  fill: none;
  stroke: var(--blanco);
  stroke-width: 2.2;
  stroke-linecap: round;
  transition: stroke-dashoffset 1.4s var(--ease-out);
}
@keyframes liveBlink {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.35; }
}

/* ═══════════════════════════════════════════════════════════
   COMUNICACIÓN · galería por fases del Contingente
   Página propia (comunicacion.php) que NO sigue el modelo
   OnePage: tiene página índice + página de detalle por fase.
   ═══════════════════════════════════════════════════════════ */

/* Grid de tarjetas (vista índice) */
.comunic-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(20px, 3vw, 36px);
  margin-top: 24px;
}
@media (min-width: 640px) {
  .comunic-grid { grid-template-columns: repeat(2, 1fr); }}
@media (min-width: 1000px) {
  .comunic-grid { grid-template-columns: repeat(3, 1fr); }}

/* Carrusel · galería de fotos dentro de una fase
   1 asset visible a la vez, navegación con flechas / dots / teclado / swipe.
   Accesibilidad: role="region", aria-label, scroll snap y oculto-para-lector
   live region que anuncia "Foto 2 de 4". */
.comunic-carousel {
  position: relative;
  margin-top: 24px;
}
.comunic-carousel__track {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.comunic-carousel__track::-webkit-scrollbar { display: none; }
.comunic-carousel__track:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 4px;
}

/* Cada figura ocupa el 100% del track */
.comunic-carousel .comunic-asset {
  flex: 0 0 100%;
  scroll-snap-align: start;
  margin: 0;
  min-width: 0;
}

/* Botones prev / next */
.comunic-carousel__btn {
  position: absolute;
  top: clamp(120px, 28%, 240px);
  z-index: 2;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.45);
  background: rgba(10,14,26,0.72);
  color: var(--blanco);
  font-size: 1.3rem;
  line-height: 1;
  cursor: pointer;
  display: grid;
  place-items: center;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  transition: all var(--t-fast) var(--ease);
}
.comunic-carousel__btn:hover:not(:disabled),
.comunic-carousel__btn:focus-visible:not(:disabled) {
  background: var(--accent);
  border-color: var(--accent);
  outline: none;
}
.comunic-carousel__btn:focus-visible {
  outline: 2px solid var(--blanco);
  outline-offset: 2px;
}
.comunic-carousel__btn:disabled {
  opacity: 0.3;
  cursor: not-allowed;
}
.comunic-carousel__btn--prev { left: 12px; }
.comunic-carousel__btn--next { right: 12px; }
@media (min-width: 880px) {
  .comunic-carousel__btn--prev { left: 18px; }
  .comunic-carousel__btn--next { right: 18px; }}

/* Live region invisible para lectores de pantalla */
.comunic-carousel__live {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ═══════════════════════════════════════════════════════════
   PANEL MODAL · galería de la fase seleccionada
   Patrón role="dialog" aria-modal="true" con focus trap (JS).
   ═══════════════════════════════════════════════════════════ */
.comunic-panel {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(10,14,26,0.78);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(16px, 3vw, 32px);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-norm) var(--ease);
}
.comunic-panel.is-open {
  opacity: 1;
  pointer-events: auto;
}
.comunic-panel[hidden] { display: none; }

.comunic-panel__inner {
  position: relative;
  background: var(--bg);
  border: 1px solid var(--gris-borde);
  width: 100%;
  max-width: 980px;
  /* Nunca más alto que el viewport (descontando el padding del overlay) */
  max-height: calc(100vh - 2 * clamp(16px, 3vw, 32px));
  max-height: calc(100svh - 2 * clamp(16px, 3vw, 32px));
  display: flex;
  flex-direction: column;
  transform: translateY(20px);
  transition: transform var(--t-norm) var(--ease-out);
  overflow: hidden;
  overscroll-behavior: contain;
}
.comunic-panel.is-open .comunic-panel__inner {
  transform: translateY(0);
}

.comunic-panel__close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 40px;
  height: 40px;
  background: rgba(10,14,26,0.78);
  border: 1px solid rgba(255,255,255,0.4);
  border-radius: 50%;
  font-size: 1.6rem;
  line-height: 1;
  color: var(--blanco);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: all var(--t-fast) var(--ease);
  z-index: 3;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}
.comunic-panel__close:hover,
.comunic-panel__close:focus-visible {
  background: var(--accent);
  border-color: var(--accent);
  outline: none;
}
.comunic-panel__close:focus-visible {
  outline: 2px solid var(--blanco);
  outline-offset: 2px;
}

.comunic-panel__body {
  padding: clamp(16px, 2vw, 24px) clamp(20px, 3vw, 36px) clamp(20px, 2.5vw, 32px);
  overflow-y: auto;
  flex: 1 1 auto;
  min-height: 0;
}
.comunic-panel__body .comunic-carousel { margin-top: 0; }
.comunic-panel__body .comunic-carousel__btn--prev { left: -4px; }
.comunic-panel__body .comunic-carousel__btn--next { right: -4px; }
@media (min-width: 1100px) {
  .comunic-panel__body .comunic-carousel__btn--prev { left: -22px; }
  .comunic-panel__body .comunic-carousel__btn--next { right: -22px; }}

@media (prefers-reduced-motion: reduce) {
  .comunic-panel,
  .comunic-panel__inner { transition: none; }}

/* Dots */
.comunic-carousel__dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 20px;
  flex-wrap: wrap;
}
.comunic-carousel__dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--gris-borde-fuerte, #c5c2b6);
  border: 0;
  padding: 0;
  cursor: pointer;
  transition: all var(--t-fast) var(--ease);
}
.comunic-carousel__dot:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}
.comunic-carousel__dot.is-active {
  background: var(--accent);
  transform: scale(1.3);
}

.comunic-card {
  display: flex;
  flex-direction: column;
  background: var(--blanco);
  border: 1px solid var(--gris-borde);
  text-decoration: none;
  color: inherit;
  overflow: hidden;
  text-align: left;
  font: inherit;
  cursor: pointer;
  padding: 0;
  width: 100%;
  transition:
    transform var(--t-norm) var(--ease-out),
    border-color var(--t-norm) var(--ease),
    box-shadow var(--t-norm) var(--ease);
}
.comunic-card:hover:not(:disabled),
.comunic-card:focus-visible {
  transform: translateY(-3px);
  border-color: var(--accent);
  box-shadow: 0 8px 28px rgba(10,14,26,0.08);
  outline: none;
}
.comunic-card:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}
.comunic-card--empty,
.comunic-card:disabled {
  cursor: not-allowed;
}
.comunic-card--empty:hover,
.comunic-card:disabled:hover {
  transform: none;
  border-color: var(--gris-borde);
  box-shadow: none;
}

.comunic-card__cover {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--negro);
}
.comunic-card__cover img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 1.4s var(--ease-out);
}
.comunic-card:hover .comunic-card__cover img { transform: scale(1.04); }

.comunic-card__placeholder {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    repeating-linear-gradient(
      45deg,
      rgba(255,255,255,0.04) 0 14px,
      transparent          14px 28px),
    var(--negro);
}
.comunic-card__tag {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.6);
  border: 1px solid rgba(255,255,255,0.18);
  padding: 6px 14px;
}
.comunic-card__count {
  position: absolute;
  bottom: 10px;
  right: 10px;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--blanco);
  background: rgba(10,14,26,0.78);
  padding: 4px 10px;
}

.comunic-card__body {
  padding: 20px 22px 22px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.comunic-card__date {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0;
}
.comunic-card__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.2rem, 1.8vw, 1.5rem);
  letter-spacing: -0.02em;
  margin: 4px 0 6px;
  color: var(--negro);
  line-height: 1.1;
}
.comunic-card__desc {
  font-size: 0.86rem;
  line-height: 1.5;
  color: var(--fg-soft);
  margin: 0;
}

/* Asset de la galería · usado dentro del carrusel */
.comunic-asset { margin: 0; }
.comunic-asset__media {
  position: relative;
  aspect-ratio: 16 / 9;
  background: var(--negro);
  overflow: hidden;
}
.comunic-asset__media iframe,
.comunic-asset__media video,
.comunic-asset__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  object-fit: cover;
}

/* Recursos · emblemas oficiales descargables */
.emblemas-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(20px, 2.6vw, 32px);
  margin-top: clamp(32px, 4vw, 48px);
}
@media (min-width: 640px) {
  .emblemas-grid { grid-template-columns: repeat(2, 1fr); }}
@media (min-width: 1000px) {
  .emblemas-grid { grid-template-columns: repeat(3, 1fr); }}
.emblema-card {
  display: flex;
  flex-direction: column;
  background: var(--blanco);
  border: 1px solid var(--gris-borde);
  overflow: hidden;
  transition:
    transform var(--t-norm) var(--ease-out),
    border-color var(--t-norm) var(--ease),
    box-shadow var(--t-norm) var(--ease);
}
.emblema-card:hover {
  transform: translateY(-3px);
  border-color: var(--accent);
  box-shadow: 0 8px 28px rgba(10,14,26,0.08);
}
.emblema-card__preview {
  aspect-ratio: 1 / 1;
  display: grid;
  place-items: center;
  padding: 28px;
  background: var(--bg-alt, #f4f2ec);
}
.emblema-card--blanco .emblema-card__preview { background: var(--negro); }
.emblema-card--negro  .emblema-card__preview { background: #f4f2ec; }
.emblema-card--gris   .emblema-card__preview { background: #f4f2ec; }
.emblema-card--color  .emblema-card__preview { background: #ffffff; }
.emblema-card__preview img {
  max-width: 70%;
  max-height: 70%;
  object-fit: contain;
  display: block;
}
.emblema-card__body {
  padding: 20px 22px 22px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  border-top: 1px solid var(--gris-borde);
}
.emblema-card__title {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0;
  font-weight: 600;
}
.emblema-card__desc {
  font-size: 0.8rem;
  line-height: 1.5;
  color: var(--fg-soft);
  margin: 4px 0 14px;
}
.emblema-card__downloads {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.emblema-card__btn {
  flex: 1;
  min-width: 0;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--negro);
  background: transparent;
  border: 1px solid var(--gris-borde);
  padding: 10px 8px;
  text-align: center;
  transition: all var(--t-fast) var(--ease);
  display: inline-flex;
  align-items: baseline;
  justify-content: center;
  gap: 6px;
}
.emblema-card__btn span {
  font-size: 0.62rem;
  opacity: 0.6;
  letter-spacing: 0.08em;
}
.emblema-card__btn:hover {
  border-color: var(--accent);
  color: var(--accent);
  background: rgba(200,16,46,0.04);
}

/* ═══════════════════════════════════════════════════════════
   ZONA PRIVADA · login PHP (privado.php)
   ═══════════════════════════════════════════════════════════ */
.privado-hero {
  position: relative;
  background: var(--negro);
  color: var(--hielo);
  padding: calc(var(--header-h) + 64px) var(--gutter) 96px;
  min-height: 70vh;
  min-height: 70svh;
  overflow: hidden;
}
.privado-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse at 80% 0%, rgba(127,169,164,0.10), transparent 60%),
    radial-gradient(ellipse at 0% 100%, rgba(200,16,46,0.10), transparent 60%);
  pointer-events: none;
}
.privado-hero__inner {
  position: relative;
  max-width: 540px;
  margin-inline: auto;
  z-index: 2;
}
.privado-hero h1 {
  color: var(--blanco);
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.2rem, 5vw, 3.4rem);
  letter-spacing: -0.025em;
  line-height: 1;
  margin: 0 0 18px;
}
.privado-hero p.lead {
  color: rgba(255,255,255,0.78);
  font-size: clamp(0.95rem, 1.2vw, 1.05rem);
  line-height: 1.55;
  margin: 0 0 36px;
}

/* Formulario · estado no autenticado */
.privado-form { display: flex; flex-direction: column; gap: 16px; }
.privado-form__field { display: flex; flex-direction: column; gap: 8px; }
.privado-form__label {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.7);
}
.privado-form input[type="password"] {
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.18);
  color: var(--blanco);
  font: inherit;
  font-size: 1rem;
  padding: 14px 16px;
  border-radius: 0;
  transition: border-color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}
.privado-form input[type="password"]:focus {
  outline: none;
  border-color: var(--accent);
  background: rgba(255,255,255,0.10);
}
.privado-form__error {
  font-family: var(--mono);
  font-size: 0.78rem;
  color: #ff7080;
  margin: 0;
  padding: 10px 14px;
  border-left: 2px solid var(--accent);
  background: rgba(200,16,46,0.10);
}
.privado-form__notice {
  font-family: var(--mono);
  font-size: 0.74rem;
  color: rgba(255,255,255,0.78);
  margin: 0;
  padding: 10px 14px;
  border-left: 2px solid rgba(127,169,164,0.7);
  background: rgba(127,169,164,0.08);
}
.privado-form__btn {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--blanco);
  background: var(--accent);
  border: 1px solid var(--accent);
  padding: 14px 22px;
  cursor: pointer;
  margin-top: 8px;
  transition: all var(--t-fast) var(--ease);
}
.privado-form__btn:hover,
.privado-form__btn:focus-visible {
  background: transparent;
  color: var(--accent);
  outline: none;
}
.privado-form__btn:focus-visible {
  outline: 2px solid var(--blanco);
  outline-offset: 3px;
}

/* Tarjeta · estado autenticado */
.privado-card {
  background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.15);
  padding: clamp(20px, 3vw, 32px);
}
.privado-card--ok { border-left: 3px solid var(--accent); }
.privado-card__title {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 12px;
}
.privado-card__body {
  color: rgba(255,255,255,0.85);
  margin: 0 0 24px;
  font-size: 0.95rem;
  line-height: 1.5;
}
.privado-links { display: flex; flex-direction: column; gap: 8px; }
.privado-links__item {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  color: var(--blanco);
  text-decoration: none;
  padding: 14px 18px;
  border: 1px solid rgba(255,255,255,0.18);
  background: rgba(255,255,255,0.04);
  transition: all var(--t-fast) var(--ease);
}
.privado-links__item:hover,
.privado-links__item:focus-visible {
  border-color: var(--accent);
  background: rgba(200,16,46,0.10);
  outline: none;
}
.privado-links__lock { color: var(--accent); font-weight: 700; font-size: 1.1em; }
.privado-links__label {
  font-family: var(--mono);
  font-size: 0.82rem;
  letter-spacing: 0.04em;
}
.privado-card__foot { margin: 24px 0 0; font-size: 0.85rem; }
.privado-logout {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.6);
  text-decoration: none;
  border-bottom: 1px solid rgba(255,255,255,0.2);
  transition: all var(--t-fast) var(--ease);
}
.privado-logout:hover {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

/* ─── Páginas legales · doc largo, ancho contenido ────────────────── */
.legal-doc { padding: 24px 0; }
.legal-doc h2 {
  font-family: var(--mono);
  font-size: 0.85rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin: 36px 0 10px;
  color: var(--azul-antartico, #0E1F3F);
}
.legal-doc p, .legal-doc li { line-height: 1.7; }
.legal-doc ul { padding-left: 1.2em; }
.legal-doc code {
  background: rgba(14,31,63,0.06);
  padding: 1px 6px;
  border-radius: 4px;
  font-size: 0.85em;
}
.legal-doc__updated {
  margin-top: 40px;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gris-suave, #6b7280);
}

/* ─── Footer · barra legal ─────────────────────────────────────────── */
.footer__legal {
  display: inline-flex;
  gap: 18px;
  margin-left: 18px;
  flex-wrap: wrap;
}
.footer__legal a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid rgba(255,255,255,0.18);
  transition: border-color var(--t-fast) var(--ease);
}
.footer__legal a:hover,
.footer__legal a:focus-visible { border-bottom-color: currentColor; outline: none; }
@media (max-width: 640px) {
  .footer__legal { display: flex; margin: 12px 0 0; }}

/* ─── Accesibilidad · respeto a prefers-reduced-motion ────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
  .hero__video { display: none; }
}

/* ═══════════════════════════════════════════════════════════
   JOURNEY · v2 · base de fondo · queda mínima (lo que sigue vivo).
   El resto del bloque (.journey-stage*, .journey__line*,
   .journey__bg-layer, .journey-stage--no-media…) era del primer
   longread con grid 2 col + curva SVG por scroll. Retirado en
   la limpieza D2+D3. El journey actual está implementado en
   inc/journey.php + assets/js/journey-vehicle.js.
   ═══════════════════════════════════════════════════════════ */

.journey {
  /* Color base bajo la pila de fotos · si una etapa no carga,
     el negro evita un flash blanco entre transiciones. */
  background: #0d1117;
  color: #f6f7f9;
}

.journey__bg-stack {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}

/* Head sobre las fotos · queda por encima del bg-stack. */
.journey__head { position: relative; z-index: 2; }
.journey__head h2 {
  color: #ffffff;
  text-shadow: 0 1px 18px rgba(0,0,0,0.55);
}
.journey__head p {
  color: rgba(246,247,249,0.85);
}


/* ═══════════════════════════════════════════════════════════
   WEATHER HERO v2 · BAE Gabriel de Castilla
   Hero a pantalla casi completa que reusa el lenguaje visual
   de .spotlight: foto + overlay editorial + .section-head__label
   + [data-label] para los datos. Añade pieza central con la
   temperatura en Fraunces italic (mismo registro que las cifras
   de .stat__num y .spotlight__title) y una capa <canvas> con
   efectos climáticos pintados en función de weather_code.
   ═══════════════════════════════════════════════════════════ */

.wx-hero {
  position: relative;
  width: 100%;
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  isolation: isolate;
  color: var(--blanco);
  background: var(--negro);
}

/* Fondo + parallax discreto (mismo registro que .spotlight__bg).
   El filter base es el de "cielo despejado, día". Las variantes por
   data-wx-mode lo sobrescriben para dramatizar la foto sin tener que
   tener un asset distinto por condición. */
.wx-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: var(--wx-bg);
  background-size: cover;
  /* La aérea v5.1 tiene la base abajo-dch y agua en izq-bottom; con
     center 55% mantenemos el horizonte alto y dejamos la base visible
     pero discreta detrás del grid de cards. */
  background-position: center 55%;
  background-repeat: no-repeat;
  transform: scale(1.05);
  filter: saturate(0.95) contrast(1.05);
  transition: transform 1.6s var(--ease-out), filter 1.6s var(--ease-out);
}
.wx-hero:hover .wx-hero__bg { transform: scale(1.0); }

/* ─── Filtros por condición meteorológica · v5.1 ────────────
   Recalibrados para la foto aérea brillante (nieve + cielo claro).
   La nieve quema mucho a brightness 1.0, así que TODO el set parte
   ya de brightness <= 0.95 para que el contenido encima respire.
   ────────────────────────────────────────────────────────── */
.wx-hero[data-wx-mode="sun"]    .wx-hero__bg { filter: saturate(1.10) contrast(1.08) brightness(0.95); }
/* clouds · suave: la foto aérea ya es nublada por naturaleza, no
   tiene sentido añadirle más oscuridad y desaturación encima. */
.wx-hero[data-wx-mode="clouds"] .wx-hero__bg { filter: saturate(0.92) contrast(1.04) brightness(0.92); }
.wx-hero[data-wx-mode="rain"]   .wx-hero__bg,
.wx-hero[data-wx-mode="storm"]  .wx-hero__bg { filter: saturate(0.35) contrast(1.18) brightness(0.50) hue-rotate(-10deg); }
.wx-hero[data-wx-mode="snow"]   .wx-hero__bg { filter: saturate(0.30) contrast(1.05) brightness(0.78) hue-rotate(-6deg); }
.wx-hero[data-wx-mode="fog"]    .wx-hero__bg { filter: saturate(0.15) contrast(0.88) brightness(0.85) blur(3px); }
.wx-hero[data-wx-day="0"]       .wx-hero__bg { filter: saturate(0.40) contrast(1.15) brightness(0.42) hue-rotate(-12deg); }

/* Overlay vía ::after, idéntico patrón que .spotlight; ajusta según
   modo (despejado / lluvia / nieve / niebla / noche) */
.wx-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.10) 0%, rgba(10,14,26,0.00) 30%, rgba(10,14,26,0.82) 100%),
    linear-gradient(90deg,  rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0)  55%);
  transition: background 600ms ease;
}
/* ─── Wash de color tipo "duotone" por modo · v5.1 ──────────
   Inspirado en los color-tint overlays de MDB. Sobre el filter
   ya aplicado a la foto, este ::after añade un tinte sólido para
   reforzar la atmósfera (azul para lluvia, cyan para nieve, etc.).
   Sigue conservando el degradado inferior oscuro para que el
   pie editorial y los datos respiren. */
.wx-hero[data-wx-mode="sun"]::after {
  background:
    /* halo cálido superior + viñeta inferior */
    radial-gradient(ellipse at 80% 0%, rgba(232,179,10,0.18) 0%, rgba(232,179,10,0) 55%),
    linear-gradient(180deg, rgba(10,14,26,0.10) 0%, rgba(10,14,26,0.00) 30%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg,  rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0)  55%);
}
.wx-hero[data-wx-mode="clouds"]::after {
  background:
    linear-gradient(180deg, rgba(10,14,26,0.12) 0%, rgba(10,14,26,0.00) 30%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg,  rgba(10,14,26,0.40) 0%, rgba(10,14,26,0.0)  55%);
}
.wx-hero[data-wx-day="0"]::after {
  background:
    linear-gradient(180deg, rgba(8,14,32,0.65) 0%, rgba(8,14,32,0.45) 30%, rgba(2,5,12,0.97) 100%),
    linear-gradient(90deg,  rgba(8,14,32,0.70) 0%, rgba(8,14,32,0.25) 55%);
}
.wx-hero[data-wx-mode="rain"]::after,
.wx-hero[data-wx-mode="storm"]::after {
  background:
    /* azul mar profundo · refuerza la sensación de borrasca */
    linear-gradient(180deg, rgba(14,31,63,0.65) 0%, rgba(14,31,63,0.40) 30%, rgba(6,12,28,0.95) 100%),
    linear-gradient(90deg,  rgba(14,31,63,0.65) 0%, rgba(14,31,63,0.10) 55%);
}
.wx-hero[data-wx-mode="snow"]::after {
  background:
    /* cyan helado claro arriba, oscuro abajo · típico paisaje nevado */
    linear-gradient(180deg, rgba(150,180,200,0.32) 0%, rgba(80,110,140,0.25) 35%, rgba(10,14,26,0.92) 100%),
    linear-gradient(90deg,  rgba(80,110,140,0.40) 0%, rgba(80,110,140,0.05) 55%);
}
.wx-hero[data-wx-mode="fog"]::after {
  background:
    /* velo blanquecino más denso · acompaña al blur del bg */
    linear-gradient(180deg, rgba(230,234,240,0.65) 0%, rgba(190,198,210,0.45) 40%, rgba(110,120,132,0.65) 100%);
}

/* Halo solar discreto sobre cielo despejado de día */
.wx-hero[data-wx-mode="sun"][data-wx-day="1"] .wx-hero__bg::before {
  content: "";
  position: absolute;
  top: -8%;
  right: 6%;
  width: clamp(220px, 30vw, 480px);
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(232,179,10,0.35) 0%, rgba(232,179,10,0) 60%);
  filter: blur(10px);
  animation: wxSunHalo 14s ease-in-out infinite alternate;
}
@keyframes wxSunHalo {
  from { transform: translateY(0) scale(1); opacity: 0.8; }
  to   { transform: translateY(-10px) scale(1.05); opacity: 1; }
}

/* Canvas de partículas · pulpa entre overlay y contenido */
.wx-hero__fx {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
}

.wx-hero__inner {
  position: relative;
  z-index: 3;
  width: 100%;
  max-width: var(--maxw);
  margin: 0 auto;
  padding: clamp(60px, 10vw, 120px) var(--gutter);
  display: flex;
  flex-direction: column;
  gap: clamp(28px, 4vw, 48px);
  align-items: flex-start;
}

/* Encabezado · usa los mismos primitives que el resto del sitio */
.wx-hero__head {
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: flex-start;
  max-width: 60ch;
}
/* La eyebrow es .section-head__label · ajustamos color para fondo oscuro */
.wx-hero .section-head__label {
  color: var(--blanco);
  border-top-color: var(--accent);
}
.wx-hero__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(2.4rem, 7vw, 5.6rem);
  letter-spacing: -0.035em;
  line-height: 0.95;
  color: var(--blanco);
  margin: 0;
  max-width: 18ch;
  text-shadow: 0 2px 16px rgba(0,0,0,0.35);
}
.wx-hero__title em { font-style: italic; font-weight: 400; opacity: 0.78; }
.wx-hero__lead {
  margin: 0;
  max-width: 52ch;
  color: rgba(255,255,255,0.92);
  font-size: clamp(1rem, 1.4vw, 1.2rem);
  line-height: 1.5;
  text-shadow: 0 1px 8px rgba(0,0,0,0.35);
}

.wx-hero__foot {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}
.wx-hero__source {
  color: rgba(255,255,255,0.78);
  margin: 0;
}
.wx-hero__source a {
  color: var(--blanco);
  border-bottom: 1px solid rgba(255,255,255,0.4);
  text-decoration: none;
}
.wx-hero__source a:hover { border-bottom-color: var(--blanco); }
@keyframes wxCamIn {
  from { transform: translateX(40px); opacity: 0; }
  to   { transform: translateX(0);    opacity: 1; }
}

/* ─── Responsive ─────────────────────────────────────────── */
@media (max-width: 720px) {
  .wx-hero__temp-num { font-size: clamp(5rem, 24vw, 9rem); }
  .wx-hero__foot { flex-direction: column; align-items: flex-start; }
}

/* prefers-reduced-motion · sin halos animados ni parallax */
@media (prefers-reduced-motion: reduce) {
  .wx-hero[data-wx-mode="sun"][data-wx-day="1"] .wx-hero__bg::before { animation: none; }
  .wx-hero__bg { transform: none; transition: none; }
}

/* ═══════════════════════════════════════════════════════════
   WEATHER HERO v3 · BAE Gabriel de Castilla
   Layout en grid:
     fila 1 · TEMP (grande) + CÁMARA IGN (grande)
     fila 2 · VIENTO + AMANECER/ANOCHECER + HUSOS HORARIOS
   Todo con el mismo look glassmorphism crema sobre la panorámica.
   ═══════════════════════════════════════════════════════════ */

.wx-hero__inner {
  /* Layout vertical: head → grid de cards → pie */
  display: flex !important;
  flex-direction: column;
  gap: clamp(24px, 3vw, 40px);
}

.wx-hero__head { max-width: 80ch; }

/* ─── Banner de estado · «la luz manda» ──────────────────────
   Franja editorial entre la cabecera y el grid de cards. La
   condición del cielo a la izquierda; el régimen de luz del día
   como dato protagonista a la derecha (etiqueta + horas). */
.wx-status {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: clamp(14px, 2.4vw, 26px);
  width: 100%;
  padding: 14px clamp(18px, 2vw, 24px);
  /* Liquid glass · cristal translúcido con un degradado especular que
     entra por la esquina superior izquierda y se disuelve hacia el navy. */
  background:
    linear-gradient(135deg,
      rgba(255, 255, 255, 0.12) 0%,
      rgba(255, 255, 255, 0.03) 42%,
      rgba(10, 14, 26, 0.10) 100%);
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 14px;
  backdrop-filter: blur(22px) saturate(180%);
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  /* Sombra suave + filo de luz interior arriba (specular highlight) y un
     hilo de sombra interior abajo: el sello del "liquid glass". */
  box-shadow:
    0 14px 40px -18px rgba(0, 0, 0, 0.6),
    inset 0 1px 0 rgba(255, 255, 255, 0.38),
    inset 0 -1px 0 rgba(255, 255, 255, 0.05);
  overflow: hidden;
}
/* Brillo especular · halo claro que nace fuera del borde superior. */
.wx-status::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: radial-gradient(130% 90% at 0% -30%,
    rgba(255, 255, 255, 0.20) 0%,
    rgba(255, 255, 255, 0.06) 34%,
    transparent 62%);
}
.wx-status__item {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.92);
}
.wx-status__item:not(:first-child) {
  padding-left: clamp(14px, 2.4vw, 26px);
  border-left: 1px solid rgba(255, 255, 255, 0.16);
}
.wx-status__lbl { color: rgba(255, 255, 255, 0.55); }
.wx-status__item strong {
  font-family: var(--mono);
  font-weight: 600;
  letter-spacing: 0.1em;
  color: var(--blanco);
}

/* Régimen de luz · pieza protagonista, empujada a la derecha */
.wx-status__item--light { margin-left: auto; }
.wx-status__sun {
  width: 19px;
  height: 19px;
  color: var(--amarillo);
  flex: none;
}
.wx-status__light {
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
}
.wx-status__light-label { color: var(--blanco); }
.wx-status__light-hours {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  text-transform: none;
  letter-spacing: -0.01em;
  font-size: clamp(1.05rem, 1.6vw, 1.3rem);
  color: #FBE7BD;
}
@media (max-width: 560px) {
  .wx-status__item--light { margin-left: 0; }
  .wx-status__item:not(:first-child) {
    padding-left: 0;
    border-left: 0;
  }
}

.wx-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}

/* Desktop · fila 1: TEMP (col 1) + CÁMARA (cols 2-3, hero visual).
   Fila 2: VIENTO + AMANECER + HUSOS, equi-anchas.
   La previsión 7 días vive fuera del grid, como fila ancho completo. */
@media (min-width: 880px) {
  .wx-grid {
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: auto auto;
    gap: 16px;
    align-items: stretch;
  }
  /* La tarjeta de temperatura ocupa toda la columna izquierda (dos filas):
     la lectura grande arriba y, al pie, la barra de luz del día. */
  .wx-card--temp { grid-column: 1;          grid-row: 1 / span 2; }
  .wx-card--cam  { grid-column: 2 / span 2; grid-row: 1; }
  .wx-card--wind   { grid-column: 2; grid-row: 2; }
  .wx-card--clocks { grid-column: 3; grid-row: 2; }
}

/* ─── Tarjeta TEMPERATURA · pieza editorial ──────────────── */
.wx-card--temp {
  display: flex;
  flex-direction: column;
  gap: 8px;
  position: relative;
  overflow: hidden;
}
/* Sol viajero · la luz entra por la posición real del sol en su arco
   diario: amanece por un lado, sube hacia el centro al mediodía y se pone
   por el otro. El JS fija --sun-x / --sun-y (posición) y --wx-light
   (intensidad: máxima en el cénit, nula de noche). */
.wx-card__sunwash {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    /* Núcleo brillante del sol */
    radial-gradient(40% 32% at var(--sun-x, 100%) var(--sun-y, 0%),
      rgba(255, 248, 216, 0.95) 0%,
      rgba(255, 226, 150, 0.55) 22%,
      rgba(255, 207, 110, 0.18) 55%,
      rgba(255, 201, 95, 0) 100%),
    /* Derrame de luz por la tarjeta desde la misma posición */
    radial-gradient(108% 86% at var(--sun-x, 100%) var(--sun-y, 0%),
      rgba(255, 202, 106, 0.36) 0%,
      rgba(255, 196, 92, 0.10) 46%,
      rgba(255, 193, 87, 0) 68%);
  opacity: calc(0.06 + var(--wx-light, 0.4) * 0.94);
  mix-blend-mode: screen;
  transition: opacity 1.2s var(--ease, ease);
}
/* El contenido se mantiene por encima del baño de luz */
.wx-card--temp > *:not(.wx-card__sunwash) { position: relative; z-index: 1; }
.wx-card__temp {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  line-height: 0.85;
  margin: 8px 0 6px;
}
.wx-card__temp-num {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(4rem, 9vw, 7rem);
  letter-spacing: -0.05em;
  color: var(--negro);
}
.wx-card__temp-unit {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.4rem, 2.4vw, 1.9rem);
  color: var(--piedra);
  margin-top: clamp(10px, 1.2vw, 18px);
}
.wx-card__temp-desc {
  margin: 0;
  font-family: var(--display);
  font-style: italic;
  font-size: clamp(1.05rem, 1.6vw, 1.3rem);
  color: var(--negro);
  line-height: 1.2;
}

/* ─── Tarjeta CÁMARA IGN ─────────────────────────────────── */
.wx-card--cam {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 18px 18px 14px;
}
.wx-card__cam-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}
.wx-cam__tabs {
  display: inline-flex;
  border: 1px solid var(--gris-borde);
  border-radius: 0;
  overflow: hidden;
  background: rgba(255,255,255,0.6);
}
.wx-cam__tabs button {
  appearance: none;
  background: transparent;
  border: 0;
  color: var(--piedra);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 7px 14px;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.wx-cam__tabs button.is-active {
  background: var(--negro);
  color: var(--blanco);
}
.wx-cam__frame {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: var(--negro);
  overflow: hidden;
  border-radius: 2px;
}
.wx-cam__frame img,
.wx-cam__frame video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* En pantallas estrechas, primero TEMP+CAM apilan a 1 col, luego 3 cards a 1 col */
@media (max-width: 879px) {
  .wx-card--cam .wx-cam__frame { aspect-ratio: 4 / 3; }
}

/* prefers-reduced-motion · sin parallax del fondo */
@media (prefers-reduced-motion: reduce) {
  .wx-hero__bg { transform: none; transition: none; }
}

/* ─── Estilos base · tarjetas glassmorphism (compartidos) ─── */
.wx-card {
  background: rgba(244,242,236,0.92);
  color: var(--negro);
  padding: 18px 20px 16px;
  border-radius: 4px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: 0 12px 36px -18px rgba(0,0,0,0.5);
}
.wx-card .section-head__label {
  color: var(--negro);
  border-top-color: var(--accent);
  font-size: 0.65rem;
}
.wx-card__big {
  margin: 0;
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  line-height: 1;
}
.wx-card__big strong {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.8rem, 3vw, 2.4rem);
  letter-spacing: -0.02em;
  color: var(--negro);
}
.wx-card__big small {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--piedra);
  font-weight: 500;
}
.wx-card__sub {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  color: var(--piedra);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.wx-card__hint {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--piedra);
}
.wx-card__hint--note {
  border-top: 1px solid var(--gris-borde);
  padding-top: 10px;
  margin-top: 4px;
  color: var(--piedra);
}
.wx-card__hint--note strong {
  color: var(--negro);
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 1rem;
  text-transform: none;
  margin: 0 2px;
}
.wx-card__hint--note a {
  color: var(--negro);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  margin-left: 8px;
}

/* Flecha de viento · rota según --deg que setea el JS */
.wx-wind-arrow {
  display: inline-block;
  transform: rotate(var(--deg, 0deg));
  transform-origin: center;
  font-size: 0.9rem;
  color: var(--accent);
  transition: transform 600ms var(--ease);
}

/* ─── Barra de luz del día · «foco solar» ───────────────────
   Panel oscuro embebido en la card crema (consistente con sus
   vecinas) donde el haz cálido se lee sobre fondo nocturno. El
   tramo iluminado de la barra lo coloca el JS según orto/ocaso. */
/* Horas de luz · dos líneas de texto al pie de la tarjeta de temperatura:
   régimen de luz (etiqueta) + horas. La tarjeta la ilumina el sol viajero. */
.wx-lightline {
  margin-top: auto;            /* ancla al pie de la tarjeta */
  display: flex;
  flex-direction: column;
  gap: 3px;
  border-top: 1px solid rgba(255, 255, 255, 0.18);
  padding-top: 12px;
  margin-bottom: 0;
}
.wx-lightline__label {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  font-weight: 600;
  color: #F2C94C;
}
.wx-lightline__hours {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.5rem, 2.6vw, 2rem);
  line-height: 1;
  color: #FBE7BD;
}

/* ─── Acceso al Diario de Operaciones · pie de la tarjeta TEMP ─────
   Pieza «liquid glass» que sustituye la línea de luz duplicada y ancla
   la lectura con una llamada a la bitácora de campaña. ──────────────── */
.wx-card__hint-utc-tag {
  margin-left: auto;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.45);
}
.wx-diario-cta {
  margin-top: 14px;          /* separa del UTC; el grupo se ancla al pie */
  position: relative;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 13px 16px;
  border-radius: 12px;
  text-decoration: none;
  color: var(--blanco);
  overflow: hidden;
  background:
    linear-gradient(135deg,
      rgba(255, 255, 255, 0.13) 0%,
      rgba(255, 255, 255, 0.03) 50%,
      rgba(10, 14, 26, 0.10) 100%);
  border: 1px solid rgba(255, 255, 255, 0.16);
  box-shadow:
    0 12px 32px -18px rgba(0, 0, 0, 0.75),
    inset 0 1px 0 rgba(255, 255, 255, 0.30);
  backdrop-filter: blur(10px) saturate(150%);
  -webkit-backdrop-filter: blur(10px) saturate(150%);
  transition: transform .25s var(--ease, ease),
              border-color .25s var(--ease, ease),
              box-shadow .25s var(--ease, ease);
}
.wx-diario-cta::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(130% 90% at 0% -40%,
    rgba(255, 255, 255, 0.22) 0%, transparent 60%);
}
.wx-diario-cta:hover,
.wx-diario-cta:focus-visible {
  transform: translateY(-2px);
  border-color: rgba(255, 255, 255, 0.32);
  box-shadow:
    0 18px 38px -18px rgba(0, 0, 0, 0.85),
    inset 0 1px 0 rgba(255, 255, 255, 0.42);
  outline: none;
}
.wx-diario-cta > * { position: relative; z-index: 1; }
.wx-diario-cta__icon {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.10);
  border: 1px solid rgba(255, 255, 255, 0.16);
  color: var(--accent);          /* solo el libro en rojo bandera */
}
.wx-diario-cta__icon svg { width: 19px; height: 19px; }
.wx-diario-cta__txt {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.wx-diario-cta__lbl {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.58);
}
.wx-diario-cta__title {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.15rem, 1.8vw, 1.4rem);
  line-height: 1.05;
  color: #FBE7BD;
}
.wx-diario-cta__arrow {
  margin-left: auto;
  flex: none;
  font-family: var(--sans);
  font-size: 1.15rem;
  color: var(--blanco);
  transition: transform .25s var(--ease, ease);
}
.wx-diario-cta:hover .wx-diario-cta__arrow,
.wx-diario-cta:focus-visible .wx-diario-cta__arrow {
  transform: translateX(4px);
}

/* Card amanecer/anochecer · dos items en fila */
.wx-card__sun {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px 16px;
}
.wx-sun-item { display: flex; flex-direction: column; gap: 4px; }
.wx-sun-icon {
  font-size: 0.6rem;
  letter-spacing: 0.1em;
}
.wx-sun-icon--rise { color: var(--naranja); }
.wx-sun-icon--set  { color: var(--azul-medio); }

/* Card relojes · dos husos en fila */
.wx-card__clocks {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px 16px;
}
.wx-clock-item { display: flex; flex-direction: column; gap: 4px; }
.wx-clock-item .wx-card__big strong { font-size: clamp(1.4rem, 2vw, 1.7rem); }

/* ─── Capa de efectos climáticos (canvas) + halo solar ───── */
.wx-hero__fx {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}
/* Las cards van por encima del canvas */
.wx-hero__inner { position: relative; z-index: 2; }

/* Tintes del overlay (::after sobre la imagen) según la condición */
.wx-hero[data-wx-day="0"]::after {
  background:
    linear-gradient(180deg, rgba(2,5,12,0.65) 0%, rgba(2,5,12,0.40) 35%, rgba(2,5,12,0.85) 100%),
    linear-gradient(90deg,  rgba(2,5,12,0.55) 0%, rgba(2,5,12,0.10) 55%);
}
.wx-hero[data-wx-mode="rain"]::after,
.wx-hero[data-wx-mode="storm"]::after {
  background:
    linear-gradient(180deg, rgba(14,31,63,0.55) 0%, rgba(14,31,63,0.25) 30%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg,  rgba(14,31,63,0.45) 0%, rgba(14,31,63,0.0)  55%);
}
.wx-hero[data-wx-mode="snow"]::after {
  background:
    linear-gradient(180deg, rgba(40,55,80,0.40) 0%, rgba(40,55,80,0.20) 30%, rgba(10,14,26,0.85) 100%);
}
.wx-hero[data-wx-mode="fog"]::after {
  background:
    linear-gradient(180deg, rgba(210,215,222,0.45) 0%, rgba(180,188,196,0.25) 40%, rgba(110,120,132,0.55) 100%);
}

/* Halo solar pulsando arriba derecha · solo en cielo despejado y de día */
.wx-hero[data-wx-mode="sun"][data-wx-day="1"] .wx-hero__bg::before {
  content: "";
  position: absolute;
  top: -8%;
  right: 6%;
  width: clamp(220px, 30vw, 480px);
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(232,179,10,0.35) 0%, rgba(232,179,10,0) 60%);
  filter: blur(10px);
  animation: wxSunHalo 14s ease-in-out infinite alternate;
  pointer-events: none;
}
@keyframes wxSunHalo {
  from { transform: translateY(0) scale(1); opacity: 0.8; }
  to   { transform: translateY(-10px) scale(1.05); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .wx-hero[data-wx-mode="sun"][data-wx-day="1"] .wx-hero__bg::before { animation: none; }}

/* ─── Overrides v3.1 ───────────────────────────────────────
   · Cards más translúcidas para ver el fondo + efectos detrás.
   · Canvas de efectos por ENCIMA del overlay ::after (estaban
     ambos en z-index:1 y el overlay tapaba las partículas).
   ─────────────────────────────────────────────────────── */

.wx-card {
  background: rgba(244,242,236,0.62);   /* crema con 62% opacidad */
  backdrop-filter: blur(14px) saturate(120%);
  -webkit-backdrop-filter: blur(14px) saturate(120%);
  border: 1px solid rgba(255,255,255,0.20);
}

/* Stacking order definitivo dentro del .wx-hero
     0  →  .wx-hero__bg                  (foto panorámica)
     1  →  .wx-hero::after               (overlay editorial)
     2  →  .wx-hero__fx (canvas)          (partículas)
     3  →  .wx-hero__inner (head + cards) */
.wx-hero__fx    { z-index: 2; }
.wx-hero__inner { z-index: 3; }

/* La cámara IGN tiene un frame opaco para que la imagen no se mezcle
   con el fondo · es la única pieza no-translúcida (es contenido). */
.wx-card--cam .wx-cam__frame {
  background: rgba(8,12,20,0.85);
  border: 1px solid rgba(255,255,255,0.12);
}

/* Ajuste de la cámara en desktop: ratio 16/9 para que cubra el alto
   de la card de temperatura sin dejar hueco. En móvil va más cuadrada. */
@media (min-width: 880px) {
  .wx-card--cam .wx-cam__frame { aspect-ratio: 16 / 9; }
  .wx-card__cam-head .section-head__label { font-size: 0.6rem; }
  .wx-cam__tabs button { padding: 5px 10px; font-size: 0.6rem; letter-spacing: 0.14em; }
}

/* ─── v3.2 · Reequilibrio tarjetas + nuevos componentes ──────
   · Forecast 7 días extraído como fila propia a ancho completo.
   · Brújula sustituida por flecha direccional limpia.
   · Mini-relojes BAE+ESP en el pie de la card de temperatura.
   ─────────────────────────────────────────────────────────── */

/* Tarjeta de PREVISIÓN a ancho completo (vive fuera del .wx-grid) */
.wx-card--forecast {
  margin-top: 16px;
  padding: 18px 22px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.wx-card--forecast .wx-forecast__labels {
  list-style: none;
  margin: 6px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
}

/* Que las dos tarjetas de la fila 1 tengan la misma altura visual */
@media (min-width: 880px) {
  .wx-card--temp,
  .wx-card--cam { height: 100%; }
  .wx-card--cam .wx-cam__frame { flex: 1 1 auto; }
}

/* Línea UTC al pie de la card TEMP · margin-top:auto hunde el grupo
   UTC + acceso al Diario hacia el fondo de la tarjeta (que ocupa dos filas). */
.wx-card__hint--utc {
  margin-top: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 12px;
}
.wx-card__hint-aside {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  color: var(--piedra);
  margin-left: auto;
}
.wx-card__hint-aside strong {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 0.85rem;
  color: var(--negro);
  text-transform: none;
  margin: 0 2px;
}

/* En móvil, los mini-relojes saltan a la línea siguiente para no
   chocar con el bloque UTC */
@media (max-width: 720px) {
  .wx-card__hint-aside { margin-left: 0; flex-basis: 100%; }
}

/* (la rosa de los vientos vuelve a estar en uso desde v4) */

/* ─── v5 · Cards oscuras + tipografía sans + forecast inline ──
   ───────────────────────────────────────────────────────────────
   · Glassmorphism navy translúcido sobre la foto dramatizada.
   · Todos los números usan --sans (Hanken Grotesk) tabular-nums.
   · Termómetro y arco solar eliminados (HTML y JS).
   · Brújula sustituida por flecha roja minimalista única.
   · Forecast inline dentro de la card TEMP: icono + día + tª máx.
   ─────────────────────────────────────────────────────────────── */

.wx-card {
  background: rgba(10, 18, 36, 0.42);
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 10px;
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  box-shadow: 0 18px 50px -22px rgba(0, 0, 0, 0.7);
  color: var(--blanco);
}
.wx-card .section-head__label {
  color: var(--blanco);
  border-top-color: var(--accent);
}

/* ── Tipografía moderna para TODOS los números ──
   Una sola regla cubre temp, horas, viento, %, hPa, forecast,
   mini-relojes. Sans grotesque + tabular-nums + medium/semibold. */
.wx-card__temp-num,
.wx-card__big strong,
.wx-card__hint--note strong,
.wx-card__hint-aside strong,
.wx-fc-temp {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 500;
  letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums;
  color: var(--blanco);
}

/* ── Card TEMPERATURA · lectura grande + forecast + footer ── */
.wx-card--temp {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.wx-card__temp-readout {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  margin-top: 4px;
}
/* Número + °C agrupados como una sola "palabra" tipográfica:
   inline-flex con baseline para que el °C quede pegado al pie de los
   números y nunca salte de línea. */
.wx-card__temp-value {
  display: inline-flex;
  align-items: baseline;
  gap: 2px;
  line-height: 0.9;
  flex-shrink: 0;
}
.wx-card__temp-num {
  font-family: var(--sans);
  font-weight: 600;
  /* v6 · número más grande para que la card respire menos hueco vacío.
     Misma familia (var(--sans) en cascada → overrides a var(--mono) en
     línea 6712), solo cambia el tamaño. */
  font-size: clamp(6rem, 13vw, 10rem);
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--blanco);
}
.wx-card__temp-unit {
  font-family: var(--sans);
  font-weight: 500;
  /* tamaño relativo · ~30 % del número para que case ópticamente */
  font-size: clamp(2rem, 4vw, 3.2rem);
  letter-spacing: -0.02em;
  color: rgba(255, 255, 255, 0.55);
  line-height: 1;
}
.wx-card__temp-desc {
  margin-left: auto;
  align-self: flex-end;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.72);
  text-align: right;
  max-width: 14ch;
  line-height: 1.3;
}

/* ── Forecast inline dentro de TEMP card ──
   7 columnas: día (mono pequeño) · icono · temperatura. */
.wx-forecast--inline {
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid rgba(255, 255, 255, 0.14);
}
.wx-forecast--inline .wx-forecast__labels {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}
.wx-forecast--inline .wx-forecast__labels li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  text-align: center;
}
.wx-fc-day {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}
.wx-fc-icon {
  color: rgba(255, 255, 255, 0.85);
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wx-fc-temp {
  font-family: var(--sans);
  font-weight: 500;
  font-size: 0.95rem;
  color: var(--blanco);
}
.wx-forecast--inline li.is-today .wx-fc-day,
.wx-forecast--inline li.is-today .wx-fc-temp,
.wx-forecast--inline li.is-today .wx-fc-icon { color: var(--accent); }

/* ── Sensación térmica + Mín / Máx bajo la lectura grande ──
   Dos líneas sobrias, monoespaciadas, debajo del número grande.
   Arriba la sensación (peso visual algo mayor); debajo mín/máx
   como contexto del día. */
.wx-card__temp-range {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  margin: 10px 0 0;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.7);
}
.wx-card__temp-range-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 18px;
  margin: 0;
}
.wx-card__temp-range-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.wx-card__temp-range-item strong {
  font-weight: 600;
  color: var(--blanco);
  letter-spacing: 0.02em;
}
.wx-card__temp-range-lbl {
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
}
/* Sensación térmica destacada · valor algo más grande y blanco pleno
   para que sea el dato accionable de la línea (cuando hace frío
   extremo es lo que importa, no el termómetro). */
.wx-card__temp-range-row--feels {
  font-size: 0.88rem;
}
.wx-card__temp-range-item--feels strong {
  color: var(--blanco);
  font-size: 1.05em;
}


/* ── Card VIENTO · flecha roja grande única (sin disco) ── */
.wx-card__wind-row {
  display: flex;
  align-items: center;
  gap: 18px;
}
.wx-wind-arrow-big {
  width: clamp(28px, 3vw, 38px);
  height: clamp(28px, 3vw, 38px);
  flex-shrink: 0;
  color: var(--accent);
  transform: rotate(var(--deg, 0deg));
  transform-origin: 50% 50%;
  transition: transform 700ms var(--ease-out);
  filter: drop-shadow(0 2px 4px rgba(200, 16, 46, 0.30));
}
.wx-card__wind-data { flex: 1; min-width: 0; }
.wx-card__wind-data .wx-card__big strong {
  font-size: clamp(2.4rem, 4vw, 3.2rem);
}

/* ── Card AMANECER/ANOCHECER · sin arco, sólo iconos + horas ── */
.wx-card__sun {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px 22px;
  margin-top: 6px;
}
.wx-sun-item {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}
.wx-sun-icon { width: 28px; height: 28px; }
.wx-sun-icon--rise { color: var(--naranja, #F56905); }
.wx-sun-icon--set  { color: rgba(255, 255, 255, 0.55); }
.wx-card__sun .wx-card__big {
  align-items: baseline;
  gap: 6px;
}
.wx-card__sun .wx-card__big strong {
  font-family: var(--sans);
  font-weight: 600;
  font-size: clamp(2.4rem, 3.8vw, 3.2rem);
  letter-spacing: -0.03em;
  color: var(--blanco);
  line-height: 1;
}
.wx-card__sun .wx-card__big small {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
  color: rgba(255, 255, 255, 0.55);
  font-weight: 500;
}
/* Hora ESP pequeña, debajo de la BAE, en mono. */
.wx-card__sun-esp {
  margin: -2px 0 0;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.55);
}
.wx-card__sun-esp strong {
  font-family: var(--sans);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  font-size: 0.95rem;
  color: rgba(255, 255, 255, 0.85);
  margin-right: 4px;
}

/* ── Card HUSOS HORARIOS · dos columnas grandes ── */
.wx-clock-item .wx-card__big strong {
  font-family: var(--sans);
  font-weight: 600;
  font-size: clamp(2rem, 3.2vw, 2.6rem);
  letter-spacing: -0.02em;
  color: var(--blanco);
}

/* ── Hints / sub / unit en mono para coherencia ── */
.wx-card__big small,
.wx-card__sub {
  font-family: var(--mono);
  color: rgba(255, 255, 255, 0.72);
}
.wx-card__hint { color: rgba(255, 255, 255, 0.55); }
.wx-card__hint--note {
  border-top-color: rgba(255, 255, 255, 0.14);
  color: rgba(255, 255, 255, 0.65);
}
.wx-card__hint--note a {
  color: var(--blanco);
  border-bottom-color: rgba(255, 255, 255, 0.4);
}
.wx-card__hint-aside { color: rgba(255, 255, 255, 0.55); }

/* ── Cámara IGN · marco oscuro, pestañas oscuras, ratio plano ── */
.wx-card--cam .wx-cam__frame {
  background: rgba(0, 0, 0, 0.55);
  border: 1px solid rgba(255, 255, 255, 0.10);
}
.wx-cam__tabs {
  background: rgba(0, 0, 0, 0.35);
  border-color: rgba(255, 255, 255, 0.18);
}
.wx-cam__tabs button { color: rgba(255, 255, 255, 0.65); }
.wx-cam__tabs button.is-active { background: var(--blanco); color: var(--negro); }
@media (min-width: 880px) {
  .wx-card--cam .wx-cam__frame { aspect-ratio: 21 / 9; }}

/* ═══════════════════════════════════════════════════════════
   JOURNEY · v4 · Scrollytelling sticky
   Sobrescribe los bloques v1-v3 con un modelo más simple y
   compacto: una sola escena 100vh anclada y todo se controla
   por el progreso de scroll en assets/js/journey-vehicle.js.
   ═══════════════════════════════════════════════════════════ */

.journey {
  position: relative;
  background: var(--negro);
  color: var(--blanco);
  /* Anula los padding/overflow del v3 que dejaban hueco arriba */
  padding: 0;
  overflow: visible;
}
.journey__scroller {
  position: relative;
  /* La altura inline · (N+1) × 100vh · la pone el PHP */
}
.journey__scene {
  position: sticky;
  top: 0;
  height: 100vh;
  height: 100svh;
  overflow: hidden;
  display: grid;
  /* Hace de stacking context para los hijos */
  isolation: isolate;
}

/* ─── Capas de fondo apiladas · una por etapa ──────────── */
.journey__bg-stack {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.journey__bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0;
  will-change: opacity;
  filter: saturate(0.95) contrast(1.05);
  transition: opacity 80ms linear; /* respaldo si el scroll va a saltos */
}
.journey__bg.is-active { opacity: 1; }

/* Worldmap eliminado · el viaje vuelve a una línea recta
   sencilla sobre las fotos de fondo de cada etapa. */

/* Overlay sobre las imágenes para legibilidad del texto */
.journey__scene::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.30) 0%, rgba(10,14,26,0.10) 30%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg,  rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0)  55%);
}

/* ─── Path SVG (curva) y nodos ─────────────────────────── */
.journey__path {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  width: 100%;
  height: 100%;
  overflow: visible; /* para que el blur del halo no se recorte */
}
.journey__path-bg {
  fill: none;
  stroke: rgba(255,255,255,0.18);
  stroke-width: 1;
  stroke-dasharray: 4 6;
}
.journey__path-fg {
  fill: none;
  stroke: rgba(255,255,255,0.85);
  stroke-width: 1.4;
  stroke-linecap: round;
}
.journey__nodes circle {
  fill: rgba(255,255,255,0.85);
  stroke: rgba(10,14,26,0.6);
  stroke-width: 1;
  transition: fill 360ms var(--ease-out), stroke 360ms var(--ease-out), r 360ms var(--ease-out);
}
.journey__nodes circle.is-current {
  fill: var(--rojo-bandera);
  stroke: rgba(255,255,255,0.85);
  stroke-width: 2;
  r: 9;
  filter: drop-shadow(0 0 8px rgba(200,16,46,0.65));
}

/* ─── Vehículo legacy (D2) · retirado en favor de .j-vehicle.
   El SVG <g class="j-vehicle"> dentro de .journey__path tiene
   sus reglas al final del archivo. ─────────────────────────── */

/* ─── Copy stack (head + 5 bloques) ────────────────────── */
.journey__copy-stack {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
}
.journey__head {
  position: absolute;
  top: clamp(40px, 6vh, 80px);
  left: 0;
  right: 0;
  max-width: var(--maxw);
  margin: 0 auto;
  padding-inline: var(--gutter);
  pointer-events: none;
}
.journey__head .section-head__label {
  color: var(--blanco);
  border-top-color: var(--accent);
}
.journey__head h2 {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.6rem, 3vw, 2.4rem);
  letter-spacing: -0.03em;
  line-height: 1;
  margin: 12px 0 0;
  color: var(--blanco);
  text-shadow: 0 2px 18px rgba(0,0,0,0.5);
  max-width: 22ch;
}

.journey__copy {
  position: absolute;
  /* Por defecto, abajo a la izquierda; el JS no lo desplaza */
  left: 0;
  bottom: clamp(110px, 14vh, 180px);
  width: 100%;
  max-width: var(--maxw);
  padding-inline: var(--gutter);
  margin-inline: auto;
  right: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: flex-start;
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 520ms var(--ease-out), transform 520ms var(--ease-out);
  pointer-events: none;
  color: var(--blanco);
}
.journey__copy.is-active {
  opacity: 1;
  transform: translateY(0);
}

.journey__num {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.85);
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.journey__num::before {
  content: "";
  width: 30px;
  height: 1px;
  background: var(--accent);
}
.journey__title {
  margin: 0;
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(3rem, 8vw, 6rem);
  letter-spacing: -0.04em;
  line-height: 0.92;
  color: var(--blanco);
  text-shadow: 0 3px 24px rgba(0,0,0,0.5);
  max-width: 14ch;
}
.journey__lead {
  margin: 0;
  max-width: 52ch;
  font-size: clamp(1rem, 1.3vw, 1.15rem);
  line-height: 1.5;
  color: rgba(255,255,255,0.92);
  text-shadow: 0 1px 8px rgba(0,0,0,0.4);
}
.journey__data {
  font-family: var(--mono);
  font-size: 0.8rem;
  letter-spacing: 0.06em;
  color: rgba(255,255,255,0.92);
  display: flex;
  flex-wrap: wrap;
  gap: 4px 28px;
  line-height: 1.7;
}
.journey__data span::before {
  content: attr(data-label) ": ";
  color: rgba(255,255,255,0.6);
  font-weight: 500;
  margin-right: 6px;
}

/* ─── Rail inferior · indicador de etapas + click ──────── */
.journey__rail {
  position: absolute;
  bottom: clamp(24px, 4vh, 48px);
  left: 0;
  right: 0;
  z-index: 6;
  display: flex;
  justify-content: center;
  gap: clamp(12px, 2vw, 32px);
  padding-inline: var(--gutter);
  pointer-events: auto;
  flex-wrap: wrap;
}
.journey__rail-dot {
  appearance: none;
  background: transparent;
  border: 0;
  color: rgba(255,255,255,0.6);
  cursor: pointer;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 6px 10px;
  border-top: 1px solid rgba(255,255,255,0.18);
  transition: color var(--t-fast) var(--ease), border-top-color var(--t-fast) var(--ease);
  min-width: 60px;
}
.journey__rail-dot:hover { color: var(--blanco); }
.journey__rail-dot.is-current {
  color: var(--blanco);
  border-top-color: var(--accent);
}
.journey__rail-num {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.18em;
}
.journey__rail-name {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

/* ─── prefers-reduced-motion ───────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .journey__bg { transition: none; }
  .journey__copy { transition: none; }
  .j-vehicle .vehicle__svg { transition: none; }
}

/* ─── Móvil: rail compacto, copy más grande ───────────── */
@media (max-width: 720px) {
  .journey__title { font-size: clamp(2.4rem, 11vw, 4rem); }
  .journey__rail-name { display: none; }
  .journey__rail { gap: 8px; }
}

/* ─── Rosa de los vientos ─────────────────────────────────── */
.wx-card__wind-row {
  display: flex;
  align-items: center;
  gap: 16px;
}
.wx-card__wind-data { flex: 1; min-width: 0; }

/* ─── Journey v4 · overrides para copy cerca del nodo ───── */

/* En desktop el JS posiciona left/top/right via inline style.
   Conservamos las propiedades por defecto solo como fallback. */
.journey__copy {
  /* eliminamos el left:0/right:0/bottom fijo del v4 base · el JS
     los reescribe en cada placeCopies() */
  left: 0;
  right: auto;
}
.journey__copy--right {
  align-items: flex-end;
  text-align: right;
}
.journey__copy--right .journey__num { flex-direction: row-reverse; }
.journey__copy--right .journey__data { justify-content: flex-end; }
.journey__copy--right .journey__title { margin-left: auto; }

/* En móvil resetea por si JS no entró aún (sin display el copy se ve) */
@media (max-width: 720px) {
  .journey__copy {
    align-items: center;
    text-align: center;
  }
  .journey__copy .journey__title { max-width: 16ch; margin: 0 auto; }
  .journey__copy .journey__lead  { margin: 0 auto; }
  .journey__copy .journey__data  { justify-content: center; }
}

/* ─── Forecast 7 días dentro de la card de Temperatura ─── */
.wx-forecast {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--gris-borde);
}

.wx-forecast__labels {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}
.wx-forecast__labels li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  text-align: center;
}
.wx-fc-day {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--piedra);
}
.wx-fc-temp {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--display);
  font-style: italic;
  font-size: 0.9rem;
  color: var(--negro);
}
.wx-fc-temp small {
  font-style: normal;
  font-family: var(--mono);
  font-size: 0.62rem;
  color: var(--piedra);
}
.wx-forecast__labels li.is-today .wx-fc-day,
.wx-forecast__labels li.is-today .wx-fc-temp { color: var(--accent); }

/* En móvil reducimos a 4 días para que respire */
@media (max-width: 720px) {
  .wx-forecast__labels { grid-template-columns: repeat(7, 1fr); gap: 2px; }
  .wx-fc-day { font-size: 0.55rem; letter-spacing: 0.12em; }
  .wx-fc-temp { font-size: 0.8rem; }
  .wx-fc-temp small { display: none; } /* solo max en móvil */
}

/* ─── Responsive general del weather hero ─────────────── */
@media (max-width: 879px) {
  .wx-grid { grid-template-columns: 1fr; gap: 12px; }
  .wx-card--temp, .wx-card--cam, .wx-card--wind, .wx-card--sun, .wx-card--clocks {
    grid-column: 1; grid-row: auto;
  }
  /* Termómetro más pequeño en móvil */
  .wx-card__temp-wrap { width: clamp(160px, 60vw, 240px); }
}

/* Rail journey: en móvil solo nums, los nombres se ocultan ya en v4 */
@media (max-width: 480px) {
  .journey__rail { gap: 6px; padding: 0 8px; }
  .journey__rail-dot { min-width: 40px; padding: 4px 6px; }
  .journey__num { font-size: 0.66rem; letter-spacing: 0.16em; }
  .journey__lead { font-size: 0.92rem; }
}

.wx-card__temp-readout {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  line-height: 1;
}
.wx-card__temp-readout .wx-card__temp-num {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  /* v6 · número más grande para llenar la card sin tocar la familia
     tipográfica (la cascada de overrides en 6712 fuerza var(--mono) con
     !important; aquí sólo bumpeamos el tamaño). */
  font-size: clamp(5rem, 11vw, 8.5rem);
  letter-spacing: -0.05em;
  color: var(--negro);
  line-height: 0.9;
}
.wx-card__temp-readout .wx-card__temp-unit {
  font-family: var(--display);
  font-style: italic;
  font-size: clamp(1.6rem, 3.4vw, 2.6rem);
  color: var(--piedra);
}
.wx-card__temp-readout .wx-card__temp-desc {
  margin-top: 8px;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--piedra);
}

.wx-forecast__labels li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
}
.wx-fc-icon {
  color: var(--negro);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
}
.wx-forecast__labels li.is-today .wx-fc-icon { color: var(--accent); }

@media (max-width: 720px) {
  .wx-card__temp-readout .wx-card__temp-num { font-size: clamp(3.6rem, 19vw, 5.2rem); }
  .wx-fc-icon { width: 18px; height: 18px; }
  .wx-fc-icon svg { width: 18px !important; height: 18px !important; }}

/* `.journey__vehicle` legacy retirado (D2). El vehículo del
   journey actual es <g class="j-vehicle"> dentro del path SVG. */

/* ═══════════════════════════════════════════════════════════
   Weather hero · liquid glass + cifras mono + iconos duotone
   ═══════════════════════════════════════════════════════════ */

/* ─── Cifras numéricas a tipografía mono (tabular figures) ── */
.wx-card__big strong,
.wx-card__temp-num,
.wx-card__hint--note strong,
.wx-card__temp-readout .wx-card__temp-num,
.wx-card__temp-readout .wx-card__temp-unit,
.wx-card__temp-feels strong {
  font-family: var(--mono);
  font-style: normal !important;
  font-feature-settings: "tnum" 1, "lnum" 1;
  font-weight: 500;
  letter-spacing: -0.02em;
}
.wx-card__temp-readout .wx-card__temp-num {
  font-weight: 600;
  letter-spacing: -0.04em;
  line-height: 0.95;
}
.wx-card__temp-readout .wx-card__temp-unit {
  font-weight: 400;
}
.wx-fc-temp,
.wx-fc-temp strong {
  font-family: var(--mono);
  font-style: normal !important;
  font-feature-settings: "tnum" 1, "lnum" 1;
  font-weight: 500;
}

/* Reloj UTC y husos también mono (ya lo eran, lo reafirmamos) */
[data-wx-clock-utc],
[data-wx-clock-ant],
[data-wx-clock-esp] {
  font-family: var(--mono);
  font-feature-settings: "tnum" 1;
  font-weight: 600;
  font-style: normal !important;
}

/* ─── Liquid glass · cards muy translúcidas con reflejo top ─── */
.wx-card {
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.22) 0%,
    rgba(255,255,255,0.08) 60%,
    rgba(255,255,255,0.04) 100%
  ) !important;
  backdrop-filter: blur(22px) saturate(160%) !important;
  -webkit-backdrop-filter: blur(22px) saturate(160%) !important;
  border: 1px solid rgba(255,255,255,0.22) !important;
  border-radius: 14px !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),       /* highlight superior */
    inset 0 -1px 0 rgba(0,0,0,0.10),            /* sombra inferior */
    0 18px 50px -20px rgba(0,0,0,0.55) !important;
  color: var(--blanco) !important;
  position: relative;
  overflow: hidden;
}
/* Reflejo diagonal sutil tipo "liquid glass" */
.wx-card::before {
  content: "";
  position: absolute;
  top: -50%; left: -50%;
  width: 200%; height: 60%;
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.10),
    rgba(255,255,255,0)
  );
  transform: rotate(-12deg);
  pointer-events: none;
}

/* Texto blanco sobre glass · etiquetas, cifras, hints */
.wx-card .section-head__label { color: var(--blanco) !important; border-top-color: var(--accent) !important; }
.wx-card__hint { color: rgba(255,255,255,0.72) !important; }
.wx-card__hint--note { border-top-color: rgba(255,255,255,0.18) !important; color: rgba(255,255,255,0.72) !important; }
.wx-card__hint--note strong { color: var(--blanco) !important; }
.wx-card__hint--note a { color: var(--blanco) !important; border-bottom-color: rgba(255,255,255,0.4) !important; }
.wx-card__big strong { color: var(--blanco) !important; }
.wx-card__big small  { color: rgba(255,255,255,0.65) !important; }
.wx-card__sub        { color: rgba(255,255,255,0.78) !important; }
.wx-card__temp-readout .wx-card__temp-num  { color: var(--blanco) !important; }
.wx-card__temp-readout .wx-card__temp-unit { color: rgba(255,255,255,0.7) !important; }
.wx-card__temp-readout .wx-card__temp-desc { color: rgba(255,255,255,0.7) !important; }

/* Forecast · curva max blanca + nodos sobre glass */
.wx-forecast { border-top-color: rgba(255,255,255,0.18) !important; }
.wx-fc-day { color: rgba(255,255,255,0.72) !important; }
.wx-fc-temp { color: var(--blanco) !important; font-family: var(--mono) !important; font-style: normal !important; }
.wx-fc-temp small { color: rgba(255,255,255,0.55) !important; font-family: var(--mono); }
.wx-forecast__labels li.is-today .wx-fc-day,
.wx-forecast__labels li.is-today .wx-fc-temp { color: var(--accent) !important; }
.wx-fc-icon { color: var(--blanco); }
.wx-forecast__labels li.is-today .wx-fc-icon { color: var(--accent); }

/* Tabs de la cámara · texto claro sobre glass */
.wx-cam__tabs { background: rgba(255,255,255,0.10); border-color: rgba(255,255,255,0.25); }
.wx-cam__tabs button { color: rgba(255,255,255,0.72); }
.wx-cam__tabs button.is-active { background: var(--blanco); color: var(--negro); }
.wx-card--cam .wx-cam__frame { border-color: rgba(255,255,255,0.20); }

/* Husos horarios sobre glass */
.wx-clock-item .wx-card__hint { color: rgba(255,255,255,0.72) !important; }

/* ─── Journey · vehículo dentro del SVG del path ──────────
   Reemplaza al `<div class="journey__vehicle">` antiguo. Ahora
   es un <g> SVG hermano del path, así que comparten coords y
   no puede quedar fuera de cuadro ni tapado por el copy. */
[data-vehicle] {
  color: var(--accent);
  filter: drop-shadow(0 4px 14px rgba(200,16,46,0.55));
  transition: opacity 320ms var(--ease-out);
}
[data-vehicle] .vehicle__svg {
  opacity: 0;
  transition: opacity 360ms var(--ease-out);
}
[data-vehicle][data-mode="plane"]  .vehicle__plane  { opacity: 1; }
[data-vehicle][data-mode="boat"]   .vehicle__boat   { opacity: 1; }
[data-vehicle][data-mode="zodiac"] .vehicle__zodiac { opacity: 1; }
.journey__copy--right { text-align: right; }
.journey__copy--right .journey__num { flex-direction: row-reverse; }

.journey__num {
  margin: 0;
  letter-spacing: 0.22em;
  font-weight: 500;
}
.journey__title {
  margin: 2px 0 4px !important;
  font-size: clamp(2.4rem, 5.5vw, 4.2rem) !important;
  line-height: 1 !important;
}
.journey__lead {
  font-size: clamp(0.95rem, 1.15vw, 1.05rem) !important;
  margin: 0 !important;
}
.journey__data {
  font-family: var(--mono);
  font-feature-settings: "tnum" 1;
  font-size: 0.72rem !important;
  letter-spacing: 0.05em;
  gap: 2px 18px !important;
  margin-top: 6px !important;
}
.journey__data span::before {
  color: rgba(255,255,255,0.55) !important;
}

@media (max-width: 720px) {
  .journey__copy {
    padding: 14px 16px;
    max-width: 92vw !important;
  }
  .journey__title { font-size: clamp(2.2rem, 11vw, 3.4rem) !important; }}

/* ─── Weather hero · parallax · el JS controla transform ─── */
.wx-hero__bg {
  will-change: transform;
  /* La transition aplicada al transform haría tirones durante
     el scroll → la desactivamos solo para esta propiedad. */
  transition: filter 1.6s var(--ease-out);
}
@media (prefers-reduced-motion: reduce), (pointer: coarse), (max-width: 719px) {
  .wx-hero__bg { transform: scale(1.05) !important; }
  .wx-hero__fx { transform: none !important; }}

/* ═══════════════════════════════════════════════════════════
   Journey · vehículo (clase nueva, sin colisión heredada)
   <g class="j-vehicle"> dentro del SVG del path. No le aplican
   las reglas antiguas de .journey__vehicle (display:none,
   position:fixed, etc.). El JS lo posiciona con setAttribute
   transform="translate(cx cy) rotate(deg)".
   ═══════════════════════════════════════════════════════════ */
.j-vehicle {
  color: var(--rojo-bandera);
}
/* Sin círculo · ocultamos el <circle> heredado del markup. */
.j-vehicle__halo { display: none !important; }

.j-vehicle .vehicle__svg {
  opacity: 0;
  transition: opacity 360ms var(--ease-out);
  pointer-events: none;
}
.j-vehicle[data-mode="plane"]  .vehicle__plane,
.j-vehicle[data-mode="boat"]   .vehicle__boat,
.j-vehicle[data-mode="zodiac"] .vehicle__zodiac { opacity: 1; }

/* Halo "real" · varios drop-shadow rojos apilados sobre la
   silueta del icono. El glow parte del CONTORNO hacia fuera
   (no empapa el interior) y se va diluyendo. Sin capa
   interna densa: la primera ya arranca difusa, así el rojo
   no "moja" la figura. */
.j-vehicle .vehicle__svg {
  filter:
    drop-shadow(0 0 8px  rgba(200,16,46,0.38))
    drop-shadow(0 0 18px rgba(200,16,46,0.22))
    drop-shadow(0 0 32px rgba(200,16,46,0.12));
}
/* Sombra negra ligera sobre el grupo padre · destaca el icono
   sobre fondos muy claros (nieve, cielo de Madrid). */
.j-vehicle {
  filter: drop-shadow(0 2px 6px rgba(0,0,0,0.55));
}

/* ═══════════════════════════════════════════════════════════
   Journey · posición CANÓNICA de las tarjetas (todas iguales)
   ───────────────────────────────────────────────────────────
   Decisión · TODAS las tarjetas viven en la misma posición:
   centradas horizontalmente y ancladas a la parte inferior.
   Cambian de contenido cuando el vehículo cruza un nodo (lo
   gestiona el JS: floor(progreso)). Se hace 100% en CSS con
   alta especificidad + !important para que ningún inline-style
   antiguo cacheado pueda romper el layout.
   ═══════════════════════════════════════════════════════════ */
.journey .journey__copy-stack .journey__copy {
  position: absolute !important;
  /* Centrada vertical Y horizontalmente · la línea recta está
     a la izquierda (x=18 %), así que no se solapan. */
  left: 50% !important;
  top: 50% !important;
  right: auto !important;
  bottom: auto !important;
  width: min(540px, calc(100vw - 48px)) !important;
  max-width: none !important;
  margin: 0 !important;
  transform: translate(-50%, calc(-50% + 18px));
  text-align: left;
  align-items: flex-start;
}
.journey .journey__copy-stack .journey__copy.is-active {
  transform: translate(-50%, -50%);
}
@media (max-width: 720px) {
  /* Móvil · la línea pasa al centro vertical (estrecho); la
     tarjeta vuelve a abajo-centro para no chocar con la línea. */
  .journey .journey__copy-stack .journey__copy {
    top: auto !important;
    bottom: clamp(80px, 12vh, 130px) !important;
    width: calc(100vw - 24px) !important;
    transform: translateX(-50%) translateY(18px);
  }
  .journey .journey__copy-stack .journey__copy.is-active {
    transform: translateX(-50%) translateY(0);
  }}

/* Vehículo SVG visible en cualquier pantalla. */
[data-vehicle] { display: initial; }


/* ═══════════════════════════════════════════════════════════
   PATRÓN REUTILIZABLE · sección con foto de fondo + cards
   "panel glass" (mismo lenguaje que las cards del journey).
   
   Uso:
     <section class="section section--cover-bg"
              style="--cover-bg: url('/assets/img/loquesea.jpg');">
       <div class="panel-glass">…contenido…</div>
     </section>
   
   La clase `.panel-glass` puede aplicarse a cualquier elemento
   (cards, items de lista, formularios) que viva sobre fondo dark.
   ═══════════════════════════════════════════════════════════ */

.section--cover-bg {
  position: relative;
  isolation: isolate;
  color: var(--blanco);
  background: var(--negro);
  overflow: hidden;
}
.section--cover-bg::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: var(--cover-bg);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  transform: scale(1.05);
  filter: saturate(0.95) contrast(1.02);
}
.section--cover-bg::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.35) 35%, rgba(10,14,26,0.85) 100%),
    linear-gradient(90deg,  rgba(10,14,26,0.55) 0%, rgba(10,14,26,0.0)  55%);
}
.section--cover-bg > * { position: relative; z-index: 2; }

/* Tipografía sobre el cover */
.section--cover-bg .section-head__label { color: var(--blanco); border-top-color: var(--accent); }
.section--cover-bg h1,
.section--cover-bg h2,
.section--cover-bg h3,
.section--cover-bg h4 { color: var(--blanco); text-shadow: 0 2px 18px rgba(0,0,0,0.45); }
.section--cover-bg p,
.section--cover-bg .lead { color: rgba(255,255,255,0.92); text-shadow: 0 1px 8px rgba(0,0,0,0.35); }

/* ─── Panel glass (utility · aplicable a cualquier card) ─── */
.panel-glass {
  background: linear-gradient(180deg,
    rgba(255,255,255,0.08) 0%,
    rgba(255,255,255,0.02) 100%);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: 12px;
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.16),
    0 12px 40px -20px rgba(0,0,0,0.55);
  padding: 22px 26px;
  color: var(--blanco);
  transition: background var(--t-norm) var(--ease),
              border-color var(--t-norm) var(--ease),
              transform var(--t-norm) var(--ease);
}
.panel-glass:hover {
  background: linear-gradient(180deg,
    rgba(255,255,255,0.12) 0%,
    rgba(255,255,255,0.04) 100%);
  border-color: rgba(255,255,255,0.22);
  transform: translateY(-1px);
}

/* ─── Variante específica para .timeline__item dentro de
   .section--cover-bg (cronología y similares) ─── */
.section--cover-bg .timeline { margin-top: 56px; gap: 14px; display: flex; flex-direction: column; }
.section--cover-bg .timeline::before { display: none; }
.section--cover-bg .timeline__item {
  /* hereda .panel-glass de forma manual (no añadimos la clase para
     no tocar el PHP existente · misma receta aquí) */
  background: linear-gradient(180deg,
    rgba(255,255,255,0.08) 0%,
    rgba(255,255,255,0.02) 100%) !important;
  border: 1px solid rgba(255,255,255,0.14) !important;
  border-radius: 12px !important;
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.16),
    0 12px 40px -20px rgba(0,0,0,0.55);
  padding: 22px 26px 22px 60px !important;
  border-top: 0 !important;
  border-bottom: 0 !important;
}
.section--cover-bg .timeline__item:hover {
  background: linear-gradient(180deg,
    rgba(255,255,255,0.12) 0%,
    rgba(255,255,255,0.04) 100%) !important;
  border-color: rgba(255,255,255,0.22) !important;
  transform: translateY(-1px);
}
.section--cover-bg .timeline__item::before {
  top: 30px;
  left: 22px;
  background: rgba(255,255,255,0.06);
  border: 1.4px solid rgba(255,255,255,0.45);
}
.section--cover-bg .timeline__item.is-done::before {
  background: rgba(255,255,255,0.55);
  border-color: rgba(255,255,255,0.55);
}
.section--cover-bg .timeline__item.is-current::before {
  background: var(--accent);
  border-color: var(--accent);
}
.section--cover-bg .timeline__when {
  color: rgba(255,255,255,0.65) !important;
  font-size: 0.7rem;
  letter-spacing: 0.2em;
}
.section--cover-bg .timeline__item.is-done .timeline__when {
  color: rgba(255,255,255,0.55) !important;
}
.section--cover-bg .timeline__item.is-current .timeline__when {
  color: var(--accent) !important;
  font-weight: 600;
}
.section--cover-bg .timeline__title {
  color: var(--blanco) !important;
  font-size: clamp(1.2rem, 2vw, 1.7rem);
}
.section--cover-bg .timeline__body {
  color: rgba(255,255,255,0.78) !important;
  font-size: 0.92rem;
}

/* En móvil · padding y nodo más compactos */
@media (max-width: 720px) {
  .section--cover-bg .timeline__item {
    padding: 18px 18px 18px 48px !important;
  }
  .section--cover-bg .timeline__item::before {
    left: 18px; top: 24px; width: 10px; height: 10px;
  }
}

/* Alias semántico para la cronología (más limpio que --cover-bg) */
.section--cron-photo { /* alias para legibilidad */ }
.section--cron-photo:not(.section--cover-bg) { /* sin efecto si falta el alias */ }

/* ═══════════════════════════════════════════════════════════
   UNIFICACIÓN · Liquid glass del weather aplicado a TODAS las
   cards sobre foto de fondo:
     · .panel-glass (utility reusable)
     · .section--cover-bg .timeline__item (cronología)
     · .journey__copy (hitos del modo viaje)
   Misma receta: gradiente blanco translúcido 22→4 %, blur 22px
   saturate 160 %, border blanco 22 %, highlight superior y
   reflejo diagonal sutil. Texto blanco con sombra.
   ═══════════════════════════════════════════════════════════ */

.panel-glass,
.section--cover-bg .timeline__item,
.journey__copy {
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.22) 0%,
    rgba(255,255,255,0.08) 60%,
    rgba(255,255,255,0.04) 100%
  ) !important;
  backdrop-filter: blur(22px) saturate(160%) !important;
  -webkit-backdrop-filter: blur(22px) saturate(160%) !important;
  border: 1px solid rgba(255,255,255,0.22) !important;
  border-radius: 14px !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 18px 50px -20px rgba(0,0,0,0.55) !important;
  color: var(--blanco) !important;
  position: relative;
  overflow: hidden;
}

/* Reflejo diagonal sutil tipo "liquid glass" · pseudo-element ::before */
.panel-glass::before,
.section--cover-bg .timeline__item::before,
.journey__copy::before {
  /* CUIDADO · timeline__item ya usa ::before para el nodo circular.
     Forzamos un reset y dejamos el reflejo solo en .panel-glass + journey */
}
.panel-glass::before,
.journey__copy::before {
  content: "";
  position: absolute;
  top: -50%; left: -50%;
  width: 200%; height: 60%;
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.10),
    rgba(255,255,255,0)
  );
  transform: rotate(-12deg);
  pointer-events: none;
}

/* Hover sutil */
.panel-glass:hover,
.section--cover-bg .timeline__item:hover {
  background: linear-gradient(
    180deg,
    rgba(255,255,255,0.30) 0%,
    rgba(255,255,255,0.12) 60%,
    rgba(255,255,255,0.06) 100%
  ) !important;
  border-color: rgba(255,255,255,0.32) !important;
  transform: translateY(-1px);
}

/* ─── Tipografía sobre liquid glass ───────────────────────── */
.panel-glass *,
.section--cover-bg .timeline__title,
.section--cover-bg .timeline__body,
.section--cover-bg .timeline__when,
.journey__num, .journey__title, .journey__lead, .journey__data {
  text-shadow: 0 1px 8px rgba(0,0,0,0.35);
}

/* Refuerzo de contraste en el copy del journey (sigue siendo blanco) */
.journey__copy { padding: 22px 26px !important; }
.journey__num { color: rgba(255,255,255,0.92) !important; }
.journey__title { color: var(--blanco) !important; }
.journey__lead { color: rgba(255,255,255,0.95) !important; }
.journey__data span { color: var(--blanco) !important; }
.journey__data span::before { color: rgba(255,255,255,0.65) !important; }

/* timeline · nodo del hito · se mantiene visible sobre liquid glass */
.section--cover-bg .timeline__item::before {
  /* Recupera el círculo (sobreescribe el reflejo que no aplicamos arriba) */
  content: "" !important;
  position: absolute !important;
  top: 30px !important;
  left: 22px !important;
  width: 12px !important;
  height: 12px !important;
  border-radius: 50% !important;
  background: rgba(255,255,255,0.10) !important;
  border: 1.5px solid rgba(255,255,255,0.55) !important;
  z-index: 2;
  /* Anula transform/rotate del reflejo */
  transform: none !important;
}
.section--cover-bg .timeline__item.is-done::before {
  background: rgba(255,255,255,0.85) !important;
  border-color: rgba(255,255,255,0.85) !important;
}
.section--cover-bg .timeline__item.is-current::before {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
}

/* ─── Variante azul del bloque grafito ─────────────────────
   Mismo lenguaje tipográfico que .section--graphite (etiquetas,
   stats, factsheet, notas, route-map…), solo cambia el fondo
   al azul antártico institucional (--azul-profundo #0E1F3F).
   Aplicación: <section class="section section--graphite section--azul">
   ────────────────────────────────────────────────────────── */
.section--graphite.section--azul {
  background: var(--azul-profundo);
}

/* ─── Variante crema · fondo #F4F2EC (var --crema) ──────── */
.section--cream {
  background: var(--crema);
  /* Texto oscuro por defecto · hereda --fg del sitio */
}

/* La regla antigua .section--graphite.section--azul ya no se usa
   pero la dejamos por si alguna otra sección la activa más adelante. */

/* ─── Roster CV popup · fuerza sus colores propios sobre cualquier
       sección padre (especialmente .section--ice que oscurece títulos
       a azul antártico y párrafos a gris). El popup vive sobre fondo
       oscuro propio, así que necesita rojo/blanco para destacar. ─── */
.section--ice .roster-cv__rank,
.section--ice .roster-cv .roster-cv__rank   { color: var(--accent) !important; }
.section--ice .roster-cv__name,
.section--ice .roster-cv h3.roster-cv__name { color: var(--blanco) !important; }
.section--ice .roster-cv__title             { color: rgba(255,255,255,0.82) !important; }
.section--ice .roster-cv__nick              { color: var(--teal-claro) !important; }
.section--ice .roster-cv,
.section--ice .roster-cv p,
.section--ice .roster-cv li,
.section--ice .roster-cv dd                  { color: rgba(255,255,255,0.92) !important; }
.section--ice .roster-cv .roster-cv__facts dt,
.section--ice .roster-cv__block h4           { color: rgba(255,255,255,0.72) !important; }

/* ─── Roster cards · texto sobre foto, mismo motivo que el popup:
       la sección padre .section--ice oscurece h3/p y aquí queremos
       blanco/acento sobre el degradado de la foto. ─── */
.section--ice .roster .roster__rank          { color: var(--accent) !important; }
.section--ice .roster .roster__name,
.section--ice .roster h3.roster__name        { color: var(--blanco) !important; }
.section--ice .roster .roster__role          { color: rgba(255,255,255,0.82) !important; }
.section--ice .roster .roster__cta           { color: var(--blanco) !important; }
.section--ice .roster .roster__cta:hover,
.section--ice .roster .roster__cta:focus-visible { color: var(--accent) !important; }

/* ════════════════════════════════════════════════════════════════
   Cartel oficial · frontispicio del bloque Contingente
   Lámina enmarcada + texto al lado. Sin efectos decorativos.
   ════════════════════════════════════════════════════════════════ */
.cartel-frontis { padding-block: clamp(56px, 8vw, 96px); }

.cartel-frontis__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(28px, 4vw, 56px);
  align-items: center;
}
@media (min-width: 880px) {
  .cartel-frontis__grid {
    grid-template-columns: minmax(0, 38%) 1fr;
    gap: clamp(40px, 5vw, 72px);
  }}

.cartel-frontis__plate {
  margin: 0;
  background: var(--blanco);
  padding: clamp(14px, 1.6vw, 22px);
  border: 1px solid var(--gris-borde);
  box-shadow: 0 14px 36px rgba(10,14,26,0.10);
  max-width: 460px;
  justify-self: center;
  width: 100%;
}
@media (min-width: 880px) {
  .cartel-frontis__plate { justify-self: start; max-width: none; }}
.cartel-frontis__plate img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 2478 / 3717;
}

.cartel-frontis__text {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.cartel-frontis__title { margin: 4px 0 6px; }
.cartel-frontis__text .lead { margin: 0; }
.cartel-frontis__text p     { margin: 0; }
.cartel-frontis__text em    { font-style: italic; }

.cartel-frontis__download { margin-top: 8px !important; }
.cartel-frontis__link {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--azul-profundo);
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
  transition: color var(--t-fast) var(--ease);
}
.cartel-frontis__link:hover,
.cartel-frontis__link:focus-visible { color: var(--accent); }

/* En los medios · cobertura de prensa del cartel (frontispicio de la home) */
.cartel-frontis__press { margin-top: 10px; }
.cartel-frontis__press-label {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--azul-profundo);
  opacity: 0.6;
  margin: 0 0 12px;
}
.cartel-frontis__press-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cartel-frontis__press-link {
  display: flex;
  flex-direction: column;
  gap: 3px;
  text-decoration: none;
  color: var(--azul-profundo);
  border-left: 2px solid var(--gris-borde);
  padding: 2px 0 2px 14px;
  transition: border-color var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease);
}
.cartel-frontis__press-link:hover,
.cartel-frontis__press-link:focus-visible {
  border-left-color: var(--accent);
  color: var(--accent);
}
.cartel-frontis__press-outlet {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  opacity: 0.65;
}
.cartel-frontis__press-headline {
  font-size: 0.95rem;
  line-height: 1.4;
}
.cartel-frontis__press-arrow { white-space: nowrap; }

/* Cartel · tarjeta de descarga en Comunicación → Identidad visual */
.cartel-card {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  background: var(--blanco);
  border: 1px solid var(--gris-borde);
  overflow: hidden;
  margin-top: clamp(24px, 3vw, 36px);
  transition:
    border-color var(--t-norm) var(--ease),
    box-shadow var(--t-norm) var(--ease);
}
.cartel-card:hover {
  border-color: var(--accent);
  box-shadow: 0 8px 28px rgba(10,14,26,0.08);
}
@media (min-width: 640px) {
  .cartel-card { grid-template-columns: 280px 1fr; }}
@media (min-width: 1000px) {
  .cartel-card { grid-template-columns: 360px 1fr; }}
.cartel-card__preview {
  margin: 0;
  background: #f4f2ec;
  display: grid;
  place-items: center;
  padding: 22px;
  border-bottom: 1px solid var(--gris-borde);
}
@media (min-width: 640px) {
  .cartel-card__preview {
    border-bottom: none;
    border-right: 1px solid var(--gris-borde);
  }}
.cartel-card__preview img {
  display: block;
  width: 100%;
  max-width: 260px;
  height: auto;
  aspect-ratio: 2478 / 3717;
  box-shadow: 0 6px 18px rgba(10,14,26,0.10);
}
.cartel-card__body {
  padding: 22px 24px 24px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 4px;
}

/* Sub-cabecera dentro de una sección (segundo bloque de Identidad visual) */
.section-head--sub h2 { font-size: clamp(1.7rem, 3.6vw, 2.4rem); }

/* ════════════ Buscador · botón lupa + overlay (⌘K) ════════════ */
.nav__search {
  order: 2;                   /* a la derecha de los enlaces del menú */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px; height: 40px;
  padding: 0;
  background: transparent;
  border: 0;
  color: var(--blanco);
  cursor: pointer;
  border-radius: 50%;
  transition: color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}
.nav__search svg { filter: drop-shadow(0 1px 6px rgba(0,0,0,0.5)); }
.nav__search:hover,
.nav__search:focus-visible { color: var(--accent); }
.site-header.is-solid .nav__search { color: var(--negro); }
.site-header.is-solid .nav__search svg { filter: none; }
.site-header.is-solid .nav__search:hover { color: var(--accent); }
@media (max-width: 880px) {
  .nav__search { margin-left: auto; margin-right: 4px; }}

.search-overlay {
  position: fixed;
  inset: 0;
  z-index: 1200;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: clamp(64px, 12vh, 140px) 20px 24px;
  background: rgba(10,14,26,0.62);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--t-norm) var(--ease);
}
.search-overlay.is-open { opacity: 1; pointer-events: auto; }
.search-overlay[hidden] { display: none; }

.search-overlay__panel {
  width: 100%;
  max-width: 580px;
  background: var(--blanco);
  border: 1px solid var(--gris-borde);
  box-shadow: 0 28px 70px rgba(10,14,26,0.34);
  display: flex;
  flex-direction: column;
  max-height: min(70vh, 640px);
  transform: translateY(-10px);
  transition: transform var(--t-norm) var(--ease-out);
}
.search-overlay.is-open .search-overlay__panel { transform: translateY(0); }

.search-box {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--gris-borde);
}
.search-box__icon { color: var(--fg-soft); flex: none; }
.search-box__input {
  flex: 1 1 auto;
  min-width: 0;
  border: 0;
  background: transparent;
  font-family: var(--sans);
  font-size: 1.05rem;
  color: var(--negro);
  padding: 4px 0;
}
.search-box__input::placeholder { color: var(--fg-soft); }
.search-box__input:focus { outline: none; }
.search-box__close {
  flex: none;
  background: transparent;
  border: 0;
  padding: 2px;
  cursor: pointer;
  line-height: 1;
}
kbd {
  font-family: var(--mono);
  font-size: 0.68rem;
  line-height: 1;
  color: var(--fg-soft);
  background: var(--bg);
  border: 1px solid var(--gris-borde);
  border-radius: 4px;
  padding: 3px 6px;
  white-space: nowrap;
}

.search-results {
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: 6px 0;
}
.search-group { padding: 4px 0; }
.search-group + .search-group { border-top: 1px solid var(--gris-borde); }
.search-group__label {
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--fg-soft);
  margin: 8px 16px 4px;
}
.search-result {
  display: flex;
  flex-direction: column;
  gap: 1px;
  padding: 9px 16px 9px 14px;
  border-left: 2px solid transparent;
  text-decoration: none;
  color: var(--negro);
  cursor: pointer;
}
.search-result__title {
  font-family: var(--display);
  font-style: italic;
  font-size: 1.04rem;
  line-height: 1.2;
}
.search-result__sub {
  font-size: 0.8rem;
  color: var(--fg-soft);
  line-height: 1.35;
}
.search-result.is-active,
.search-result:hover {
  background: var(--bg);
  border-left-color: var(--accent);
}
.search-result.is-active .search-result__title { color: var(--azul-profundo); }

.search-empty {
  margin: 0;
  padding: 22px 16px;
  font-size: 0.92rem;
  color: var(--fg-soft);
  text-align: center;
}
.search-foot {
  margin: 0;
  padding: 10px 16px;
  border-top: 1px solid var(--gris-borde);
  font-size: 0.72rem;
  color: var(--fg-soft);
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
}
.search-foot kbd { font-size: 0.62rem; padding: 2px 5px; }

@media (prefers-reduced-motion: reduce) {
  .search-overlay,
  .search-overlay__panel { transition: none; }}

/* ════════════════════════════════════════════════════════════
   Widget · Energía en directo (VRM / Victron)
   Vive dentro de .section--ice, hereda sus colores.
   ════════════════════════════════════════════════════════════ */

.nrg-widget {
  margin: 2.5rem 0 2rem;
  padding: 1.5rem 1.75rem;
  border: 1px solid rgba(14,31,63,0.14);
  border-radius: 10px;
  background: rgba(255,255,255,0.55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  transition: opacity 0.4s;
}

.nrg-widget--offline { opacity: 0.55; }

.nrg-widget__head {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 1.25rem;
}

/* Punto de estado · verde pulsante = en directo */
.nrg-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #22c55e;
  box-shadow: 0 0 0 0 rgba(34,197,94,0.5);
  animation: nrg-pulse 2.4s ease-in-out infinite;
  flex-shrink: 0;
}
.nrg-dot--stale { background: #f59e0b; box-shadow: none; animation: none; }
.nrg-widget--offline .nrg-dot { background: #94a3b8; box-shadow: none; animation: none; }

@keyframes nrg-pulse {
  0%  { box-shadow: 0 0 0 0   rgba(34,197,94,0.55); }
  70% { box-shadow: 0 0 0 8px rgba(34,197,94,0);    }
  100%{ box-shadow: 0 0 0 0   rgba(34,197,94,0);    }
}

/* Grid de stats */
.nrg-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem 1.25rem;
}

.nrg-stat {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.nrg-stat--wide { grid-column: 1 / -1; }

.nrg-stat__icon {
  color: var(--azul-medio);
  display: block;
  margin-bottom: 0.1rem;
}

.nrg-stat__lbl {
  font-size: 0.68rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #2C4A5F;
  font-weight: 600;
}

.nrg-stat__val {
  font-size: 1.6rem;
  font-weight: 700;
  color: var(--azul-profundo);
  line-height: 1.1;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

.nrg-stat__val--pct {
  font-size: 1rem;
  margin-left: 0.5rem;
}

/* Barra de cobertura solar */
.nrg-bar-wrap {
  display: flex;
  align-items: center;
  gap: 0;
  margin-top: 0.4rem;
}

.nrg-bar {
  flex: 1;
  height: 6px;
  background: rgba(14,31,63,0.1);
  border-radius: 3px;
  overflow: hidden;
}

.nrg-bar__fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #22c55e, #16a34a);
  border-radius: 3px;
  transition: width 0.6s ease;
}

.nrg-widget__foot {
  margin-top: 1.25rem;
  font-size: 0.72rem;
  color: #2C4A5F;
  opacity: 0.75;
}

.nrg-widget__foot a {
  color: var(--azul-medio);
  text-decoration: underline;
  text-decoration-color: transparent;
  transition: text-decoration-color 0.2s;
}
.nrg-widget__foot a:hover { text-decoration-color: currentColor; }

@media (max-width: 720px) {
  .nrg-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 480px) {
  .nrg-grid { grid-template-columns: 1fr 1fr; }
  .nrg-stat__val { font-size: 1.35rem; }
  .nrg-widget { padding: 1.1rem 1.25rem; }
}

/* ════════════════════════════════════════════════════════════
   Panel de energía · Modo Base (weather.php)
   Sección autónoma bajo el wx-hero, fondo neutro oscuro,
   cards con el mismo glassmorphism que las wx-cards.
   ════════════════════════════════════════════════════════════ */

.nrg-panel {
  position: relative;
  isolation: isolate;
  background: var(--azul-muy-oscuro, #0b1524);
  padding: 3rem 0 2.5rem;
}

/* Fondo con foto (aerogenerador de la BAE al atardecer). El velo oscuro
   mantiene legibles las etiquetas del panel; las tarjetas «liquid glass»
   desenfocan la foto por detrás. */
.nrg-panel--photo {
  background-image: var(--nrg-bg);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}
.nrg-panel--photo::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: linear-gradient(180deg,
    rgba(8 13 22 / .68),
    rgba(8 13 22 / .8) 60%,
    rgba(8 13 22 / .9));
}

.nrg-panel__inner {
  display: flex;
  flex-direction: column;
  gap: 1.75rem;
}

.nrg-panel__head {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.nrg-panel__title-row {
  display: flex;
  align-items: center;
  gap: .6rem;
}

/* Grid de 6 cards: 3 grandes + 3 menores
   En escritorio: 3 × 3 + 3 × temperatura */
.nrg-panel__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr) repeat(3, 1fr);
  gap: 1rem;
}

/* Las 4 primeras tarjetas (Solar, Eólica, Consumo, Batería) son "grandes";
   las de temperatura son más compactas. En diseño real las 6 en una fila
   de 6 es demasiado estrecho; en su lugar usamos 3+3 en dos filas. */
.nrg-panel__grid {
  grid-template-columns: repeat(3, 1fr);
}

/* Tarjetas «liquid glass» · cristal traslúcido con reflejo superior,
   borde iluminado y sombra suave en capas. */
.nrg-panel__card {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background:
    linear-gradient(135deg,
      rgba(255 255 255 / .12),
      rgba(255 255 255 / .03) 55%,
      rgba(255 255 255 / .06));
  border: 1px solid rgba(255 255 255 / .14);
  border-radius: 1rem;
  padding: 1.25rem 1.5rem 1.1rem;
  display: flex;
  flex-direction: column;
  gap: .25rem;
  -webkit-backdrop-filter: blur(16px) saturate(180%);
  backdrop-filter: blur(16px) saturate(180%);
  box-shadow:
    inset 0 1px 0 rgba(255 255 255 / .25),
    inset 0 0 0 1px rgba(255 255 255 / .04),
    0 10px 30px -12px rgba(0 0 0 / .6);
  transition: transform var(--t-norm) var(--ease),
              box-shadow var(--t-norm) var(--ease),
              border-color var(--t-norm) var(--ease);
}

/* Reflejo líquido en la esquina superior izquierda. */
.nrg-panel__card::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: radial-gradient(120% 80% at 12% -12%,
    rgba(255 255 255 / .22), transparent 60%);
  opacity: .7;
  pointer-events: none;
  z-index: -1;
}

.nrg-panel__card:hover {
  transform: translateY(-2px);
  border-color: rgba(255 255 255 / .22);
  box-shadow:
    inset 0 1px 0 rgba(255 255 255 / .3),
    inset 0 0 0 1px rgba(255 255 255 / .05),
    0 16px 40px -14px rgba(0 0 0 / .7);
}

.nrg-panel__card--temp {
  background:
    linear-gradient(135deg,
      rgba(255 255 255 / .08),
      rgba(255 255 255 / .02) 55%,
      rgba(255 255 255 / .05));
}

@media (prefers-reduced-motion: reduce) {
  .nrg-panel__card { transition: none; }
  .nrg-panel__card:hover { transform: none; }
}

.nrg-panel__icon {
  color: rgba(255 255 255 / .5);
  display: block;
  margin-bottom: .1rem;
}

.nrg-panel__lbl {
  font-size: .68rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: rgba(255 255 255 / .55);
}

.nrg-panel__val {
  font-size: 1.75rem;
  font-weight: 700;
  letter-spacing: -.02em;
  color: var(--blanco, #fff);
  line-height: 1.1;
  margin: .15rem 0 .1rem;
}

.nrg-panel__sub {
  font-size: .72rem;
  color: rgba(255 255 255 / .45);
  line-height: 1.4;
}

/* Barra de cobertura */
.nrg-panel__coverage {
  display: flex;
  flex-direction: column;
  gap: .6rem;
}

.nrg-coverage__header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.nrg-coverage__pct {
  font-size: .85rem;
  font-weight: 700;
  color: var(--blanco, #fff);
}

/* ── Gráfico de mix energético en directo ── */
.nrg-mix { display: flex; flex-direction: column; gap: .7rem; }
.nrg-mix__bar {
  display: flex; height: 14px; border-radius: 999px; overflow: hidden;
  background: rgba(255 255 255 / .07);
  border: 1px solid rgba(255 255 255 / .1);
}
.nrg-mix__seg {
  height: 100%; width: 0; flex: none;
  transition: width var(--t-slow) var(--ease);
}
.nrg-mix__seg + .nrg-mix__seg { box-shadow: -1px 0 0 rgba(11 21 36 / .55); }
.nrg-mix__seg--solar { background: linear-gradient(90deg, #f6c352, #f2a829); }
.nrg-mix__seg--wind  { background: linear-gradient(90deg, #9fc6c0, #7fa9a4); }
.nrg-mix__seg--bat   { background: linear-gradient(90deg, #86efac, #34d399); }
.nrg-mix__seg--grupo { background: linear-gradient(90deg, #9aa3ad, #727c89); }

.nrg-mix__legend {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: .4rem 1.4rem;
}
.nrg-mix__item {
  display: inline-flex; align-items: center; gap: .45rem;
  font-size: .78rem; letter-spacing: .02em; color: rgba(255 255 255 / .6);
}
.nrg-mix__item[hidden] { display: none; }
.nrg-mix__item strong { color: var(--blanco, #fff); font-variant-numeric: tabular-nums; }
.nrg-mix__dot { width: .7rem; height: .7rem; border-radius: 3px; flex: none; }
.nrg-mix__dot--solar { background: #f2a829; }
.nrg-mix__dot--wind  { background: #7fa9a4; }
.nrg-mix__dot--bat   { background: #34d399; }
.nrg-mix__dot--grupo { background: #727c89; }
@media (prefers-reduced-motion: reduce) { .nrg-mix__seg { transition: none; } }

/* Reutiliza .nrg-bar / .nrg-bar__fill del widget anterior */
.nrg-panel .nrg-bar {
  background: rgba(255 255 255 / .12);
}

.nrg-panel .nrg-bar__fill {
  background: linear-gradient(90deg, #22c55e 0%, #86efac 100%);
}

.nrg-panel__foot {
  margin-top: -.5rem;
}

.nrg-panel__foot .code-tag {
  color: rgba(255 255 255 / .35);
  font-size: .7rem;
}

.nrg-panel__foot strong {
  color: rgba(255 255 255 / .6);
}

/* ── Minibars (solar hoy/ayer, eólica, consumo) ── */
.nrg-minibars {
  display: flex;
  flex-direction: column;
  gap: .3rem;
  margin-top: .5rem;
}

.nrg-minibar__row {
  display: grid;
  grid-template-columns: 2.2rem 1fr 3rem;
  align-items: center;
  gap: .4rem;
}

.nrg-minibar__lbl {
  font-size: .6rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: rgba(255 255 255 / .4);
  white-space: nowrap;
}

.nrg-minibar__val {
  font-size: .65rem;
  color: rgba(255 255 255 / .5);
  text-align: right;
  white-space: nowrap;
}

.nrg-minibar__track {
  height: 4px;
  background: rgba(255 255 255 / .1);
  border-radius: 2px;
  overflow: hidden;
}

/* Variante de una sola barra (sin fila de etiquetas) */
.nrg-minibar__track--single {
  margin-top: .6rem;
}

.nrg-minibar__fill {
  height: 100%;
  width: 0;
  border-radius: 2px;
  transition: width .6s ease;
}

.nrg-minibar__fill--hoy  { background: linear-gradient(90deg,#f59e0b,#fde68a); }
.nrg-minibar__fill--ayer { background: rgba(255 255 255 / .25); }
.nrg-minibar__fill--wind { background: linear-gradient(90deg,#38bdf8,#7dd3fc); }
.nrg-minibar__fill--consumo { background: linear-gradient(90deg,#a78bfa,#ddd6fe); }
/* .fill--bat: color dinámico desde JS */

/* ── Termoscala (temperatura) ── */
.nrg-thermoscale {
  display: flex;
  align-items: center;
  gap: .4rem;
  margin-top: .6rem;
}

.nrg-thermoscale__min,
.nrg-thermoscale__max {
  font-size: .6rem;
  color: rgba(255 255 255 / .35);
  white-space: nowrap;
  flex-shrink: 0;
}

.nrg-thermoscale__track {
  flex: 1;
  height: 4px;
  background: linear-gradient(90deg, #60a5fa 0%, #34d399 45%, #f87171 100%);
  border-radius: 2px;
  position: relative;
}

.nrg-thermoscale__mark {
  position: absolute;
  top: 50%;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  transform: translate(-50%, -50%);
  border: 2px solid rgba(0 0 0 / .5);
  transition: left .6s ease, background .6s ease;
  background: #fff;
}

/* Marcador España: ligeramente más grande para diferenciarlo */
.nrg-thermoscale__mark--es {
  width: 7px;
  height: 7px;
  top: calc(50% - 5px);
  opacity: .85;
}

/* Estado offline/stale */
.nrg-panel.nrg-widget--offline { opacity: .55; }

/* Responsive */
@media (max-width: 900px) {
  .nrg-panel__grid { grid-template-columns: repeat(2, 1fr); }
  .nrg-panel__val  { font-size: 1.5rem; }
}

@media (max-width: 560px) {
  .nrg-panel__grid { grid-template-columns: repeat(2, 1fr); }
  .nrg-panel { padding: 2rem 0 1.75rem; }
  .nrg-panel__val  { font-size: 1.3rem; }
}

/* ═══════════════════════════════════════════════════════════
   Modo Base · Guía solar día a día (#sol)
   Análogo al "Daily Moon Guide" de la NASA para la luz a 63° S.
   ═══════════════════════════════════════════════════════════ */
.sol { background: var(--negro); color: var(--hielo); }
.sol .section-head__label { color: var(--teal-claro); }
.sol .display { color: var(--blanco); }
.sol .lead { color: var(--teal-claro); }
.sol:focus { outline: none; }

/* ── Control de fecha ── */
.sol-control {
  position: relative; isolation: isolate;
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 1.25rem;
  margin: clamp(1.75rem, 4vw, 2.75rem) 0 1.5rem;
  padding: 1rem 1.1rem;
  background: linear-gradient(135deg,
    rgba(255 255 255 / .10), rgba(255 255 255 / .03) 55%, rgba(255 255 255 / .06));
  border: 1px solid rgba(255 255 255 / .14);
  border-radius: 16px;
  -webkit-backdrop-filter: blur(16px) saturate(180%);
  backdrop-filter: blur(16px) saturate(180%);
  box-shadow:
    inset 0 1px 0 rgba(255 255 255 / .22),
    inset 0 0 0 1px rgba(255 255 255 / .04),
    0 10px 30px -12px rgba(0 0 0 / .6);
}
.sol-control::before {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  pointer-events: none; z-index: -1; opacity: .7;
  background: radial-gradient(120% 80% at 12% -12%, rgba(255 255 255 / .2), transparent 60%);
}
.sol-control__date { display: flex; align-items: center; gap: 1rem; }
.sol-control__readout { text-align: center; min-width: 13.5rem; }
.sol-control__day {
  display: block; font-family: var(--display);
  font-size: clamp(1.1rem, 3vw, 1.5rem); line-height: 1.1; color: var(--blanco);
}
.sol-control__camp {
  display: block; font-family: var(--mono);
  font-size: .72rem; letter-spacing: .04em; text-transform: uppercase;
  color: var(--teal-glaciar); margin-top: .3rem;
}
.sol-step {
  flex: none; width: 2.6rem; height: 2.6rem; border-radius: 50%;
  display: grid; place-items: center;
  font-size: 1.5rem; line-height: 1; cursor: pointer;
  color: var(--hielo); background: rgba(255, 255, 255, .06);
  border: 1px solid rgba(255, 255, 255, .16);
  transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}
.sol-step:hover { background: rgba(255, 255, 255, .14); border-color: rgba(255, 255, 255, .3); }
.sol-step:focus-visible { outline: 2px solid var(--teal-claro); outline-offset: 2px; }

.sol-control__slide { display: flex; align-items: center; gap: 1rem; flex: 1 1 320px; }
.sol-slider {
  flex: 1 1 auto; width: 100%; height: 4px; -webkit-appearance: none; appearance: none;
  background: linear-gradient(90deg, rgba(255,210,122,.5), rgba(127,169,164,.5));
  border-radius: 4px; cursor: pointer; outline-offset: 4px;
}
.sol-slider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: 20px; height: 20px;
  border-radius: 50%; background: var(--rojo-bandera);
  border: 3px solid var(--blanco); cursor: pointer; box-shadow: 0 1px 6px rgba(0,0,0,.5);
}
.sol-slider::-moz-range-thumb {
  width: 20px; height: 20px; border-radius: 50%; background: var(--rojo-bandera);
  border: 3px solid var(--blanco); cursor: pointer;
}
.sol-today {
  flex: none; font-family: var(--mono); font-size: .72rem; letter-spacing: .08em;
  text-transform: uppercase; padding: .55rem .95rem; border-radius: 999px;
  color: var(--hielo); background: rgba(255, 255, 255, .06);
  border: 1px solid rgba(255, 255, 255, .2); cursor: pointer;
  transition: background var(--t-fast) var(--ease);
}
.sol-today:hover { background: var(--rojo-bandera); border-color: var(--rojo-bandera); color: #fff; }
.sol-today:focus-visible { outline: 2px solid var(--teal-claro); outline-offset: 2px; }

/* ── Panel: cielo + lecturas ── */
.sol-panel {
  display: grid; gap: clamp(1.25rem, 3vw, 2rem);
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  align-items: start;
}
@media (max-width: 880px) { .sol-panel { grid-template-columns: 1fr; } }

.sol-viz { display: flex; flex-direction: column; gap: 1rem; }
.sol-sky {
  width: 100%; aspect-ratio: 720 / 300; border-radius: 16px; overflow: hidden;
  background: var(--azul-profundo); border: 1px solid rgba(255 255 255 / .14);
  box-shadow: 0 10px 30px -12px rgba(0 0 0 / .6);
}
.sol-sky__svg { display: block; width: 100%; height: 100%; }

.sol-sat {
  margin: 0; position: relative; isolation: isolate; overflow: hidden;
  border-radius: 16px; aspect-ratio: 640 / 384;
  border: 1px solid rgba(255 255 255 / .14);
  background: linear-gradient(135deg,
    rgba(255 255 255 / .10), rgba(255 255 255 / .03) 55%, rgba(255 255 255 / .06));
  -webkit-backdrop-filter: blur(16px) saturate(180%);
  backdrop-filter: blur(16px) saturate(180%);
  box-shadow:
    inset 0 1px 0 rgba(255 255 255 / .22),
    0 10px 30px -12px rgba(0 0 0 / .6);
}
.sol-sat::before {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  pointer-events: none; z-index: -1; opacity: .7;
  background: radial-gradient(120% 80% at 12% -12%, rgba(255 255 255 / .2), transparent 60%);
}
.sol-sat img {
  display: block; width: 100%; height: 100%; object-fit: cover;
  opacity: 0; transition: opacity var(--t-slow) var(--ease);
}
.sol-sat img.is-ready { opacity: 1; }
.sol-sat img.is-error { opacity: 0; }
.sol-sat__note {
  position: absolute; left: 0; right: 0; bottom: 0;
  font-family: var(--mono); font-size: .68rem; letter-spacing: .03em;
  color: var(--hielo); padding: .55rem .7rem;
  background: linear-gradient(0deg, rgba(10,14,26,.85), transparent);
}

/* ── Lecturas ── */
.sol-stats {
  display: grid; grid-template-columns: 1fr 1fr; gap: 1px;
  margin: 0; background: rgba(255 255 255 / .12);
  border: 1px solid rgba(255 255 255 / .14); border-radius: 16px; overflow: hidden;
  box-shadow: 0 10px 30px -12px rgba(0 0 0 / .6);
}
.sol-stat {
  padding: .95rem 1.05rem;
  background: linear-gradient(135deg,
    rgba(255 255 255 / .09), rgba(255 255 255 / .02) 60%, rgba(255 255 255 / .05));
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  box-shadow: inset 0 1px 0 rgba(255 255 255 / .14);
}
.sol-stat--wide, .sol-stat--note { grid-column: 1 / -1; }
.sol-stat dt {
  font-family: var(--mono); font-size: .66rem; letter-spacing: .06em;
  text-transform: uppercase; color: var(--teal-glaciar); margin-bottom: .3rem;
}
.sol-stat dd {
  margin: 0; font-size: 1.15rem; color: var(--blanco); font-variant-numeric: tabular-nums;
}
.sol-stat--wide dd { font-size: 1.05rem; }
.sol-stat--wide dd strong { color: var(--teal-claro); }
.sol-stat--note dd { font-size: .92rem; color: var(--hielo); line-height: 1.45; }

/* ── Ayuda desplegable · qué es cada crepúsculo ── */
.sol-help {
  margin-top: 1.25rem;
  border: 1px solid rgba(255 255 255 / .14);
  border-radius: 14px; overflow: hidden;
  background: linear-gradient(135deg,
    rgba(255 255 255 / .09), rgba(255 255 255 / .02) 60%, rgba(255 255 255 / .05));
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  box-shadow:
    inset 0 1px 0 rgba(255 255 255 / .18),
    0 10px 30px -12px rgba(0 0 0 / .55);
}
.sol-help__summary {
  display: flex; align-items: center; gap: .6rem;
  padding: .85rem 1.1rem; cursor: pointer; list-style: none;
  font-family: var(--mono); font-size: .8rem; letter-spacing: .03em;
  color: var(--teal-claro);
}
.sol-help__summary::-webkit-details-marker { display: none; }
.sol-help__summary:focus-visible { outline: 2px solid var(--teal-claro); outline-offset: 2px; border-radius: 12px; }
.sol-help__q {
  flex: none; width: 1.4rem; height: 1.4rem; border-radius: 50%;
  display: grid; place-items: center; font-size: .82rem;
  background: rgba(127, 169, 164, .18); border: 1px solid rgba(127, 169, 164, .4);
  color: var(--teal-claro);
}
.sol-help__summary::after {
  content: '+'; margin-left: auto; font-size: 1.1rem; line-height: 1;
  color: var(--piedra-claro); transition: transform var(--t-fast) var(--ease);
}
.sol-help[open] .sol-help__summary::after { content: '−'; }

.sol-help__body {
  padding: 0 1.1rem 1.1rem;
  border-top: 1px solid rgba(255, 255, 255, .08);
}
.sol-help__intro { margin: .9rem 0 .8rem; color: var(--teal-claro); font-size: .95rem; line-height: 1.55; }
.sol-help__diagram {
  display: block; width: 100%; max-width: 520px; height: auto;
  margin: 0 0 1.1rem; border-radius: 10px; overflow: hidden;
  border: 1px solid rgba(255 255 255 / .12);
}
.sol-help__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .55rem; }
.sol-help__list li {
  display: block; color: var(--hielo); font-size: .92rem; line-height: 1.5;
}
.sol-help__list strong { color: var(--blanco); font-weight: 600; }
.sol-help__sw {
  display: inline-block; width: .85rem; height: .85rem; border-radius: 3px;
  vertical-align: -1px; margin-right: .5rem;
  border: 1px solid rgba(255, 255, 255, .15);
}
.sol-help__read {
  margin: 1rem 0 0; padding-top: .9rem; border-top: 1px solid rgba(255, 255, 255, .08);
  font-size: .9rem; line-height: 1.55; color: var(--hielo);
  display: grid; gap: .35rem;
}
.sol-help__read > strong { color: var(--teal-claro); }
.sol-help__ar { color: #ffe6a8; font-family: var(--mono); }

/* En pantallas anchas, dos columnas independientes para que la ayuda llene
   el ancho y no quede el texto pegado a la izquierda. Cada columna empaqueta
   su propio contenido (sin alinear filas entre columnas). */
@media (min-width: 760px) {
  .sol-help__body {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: clamp(1.5rem, 4vw, 3rem);
    align-items: start;
  }
  .sol-help__col { display: flex; flex-direction: column; }
  .sol-help__col > :first-child { margin-top: 0; }
  .sol-help__diagram { max-width: none; }
}

.sol-foot { margin-top: 1.5rem; color: var(--piedra-claro); }
.sol-foot a { color: var(--teal-claro); }

@media (max-width: 480px) {
  .sol-control { justify-content: center; }
  .sol-control__date { width: 100%; justify-content: space-between; }
  .sol-stats { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════
   Diario de operaciones · timeline inmersivo (diario.php)
   Página oscura a sangre: hero fotográfico + cronología vertical
   con riel de fechas. Cada entrada (.dop-card) admite 4 variantes:
   foto+título overlay · foto+título debajo · mini-vídeo POV · sin
   media (parte de datos). Datos en inc/diario-data.php.
   ═══════════════════════════════════════════════════════════════ */
:root { --dop-rail-w: 84px; }

/* ─── Hero ─── */
.dop-hero {
  position: relative; min-height: 78vh; display: flex; align-items: flex-end;
  background: #05070f var(--dop-hero-bg, none) center 30% / cover no-repeat;
  color: var(--blanco); overflow: hidden;
}
.dop-hero::after {
  content: ""; position: absolute; inset: 0;
  /* Scrim lateral que protege la columna del texto (izquierda) y deja
     visible el motivo a la derecha + velo vertical para nav y pie.
     Tolerante a fotos claras (cielo) sin oscurecer toda la imagen. */
  background:
    linear-gradient(90deg, rgba(5,7,15,.88) 0%, rgba(5,7,15,.66) 34%, rgba(5,7,15,.24) 60%, rgba(5,7,15,0) 84%),
    linear-gradient(180deg, rgba(5,7,15,.55) 0%, rgba(5,7,15,.18) 26%, rgba(5,7,15,.34) 62%, rgba(5,7,15,.92) 100%);
}
.dop-hero__inner {
  position: relative; z-index: 2; max-width: var(--maxw); margin: 0 auto;
  width: 100%; padding: 0 var(--gutter) clamp(48px, 7vw, 96px);
}
.dop-hero__crumb {
  font-family: var(--mono); font-size: .72rem; letter-spacing: .14em;
  text-transform: uppercase; color: var(--teal-claro); margin-bottom: 18px;
}
.dop-hero__crumb a { color: inherit; }
.dop-hero h1 {
  font-family: var(--display); font-weight: 300; font-style: italic;
  color: var(--blanco);
  font-size: clamp(2.8rem, 7vw, 5.4rem); line-height: .98; margin: 0 0 22px;
  text-shadow: 0 2px 24px rgba(0,0,0,.6), 0 1px 4px rgba(0,0,0,.55);
}
.dop-hero__lead { max-width: 54ch; font-size: 1.06rem; line-height: 1.7; color: rgba(255,255,255,.92); }
.dop-hero__actions { margin-top: 30px; display: flex; gap: 14px; flex-wrap: wrap; align-items: center; }
.dop-btn {
  display: inline-flex; align-items: center; gap: 9px; font-family: var(--mono);
  font-size: .74rem; letter-spacing: .1em; text-transform: uppercase; text-decoration: none;
  padding: 13px 22px; border-radius: 2px; transition: transform .2s var(--ease), background .2s;
}
.dop-btn--pdf { background: var(--accent); color: #fff; }
.dop-btn--pdf:hover { transform: translateY(-2px); background: var(--rojo-oscuro); }
.dop-btn--ghost { border: 1px solid rgba(255,255,255,.35); color: #fff; }
.dop-btn--ghost:hover { background: rgba(255,255,255,.12); }

/* ─── Cinta de la cronología ─── */
.dop-stream { background: var(--negro); padding: clamp(56px, 8vw, 104px) 0 clamp(60px, 9vw, 120px); }
.dop-wrap { max-width: 1080px; margin: 0 auto; padding: 0 var(--gutter); }

/* Separador de mes */
.dop-month {
  display: flex; align-items: center; gap: 20px; margin: 0 0 38px;
  padding-left: calc(var(--dop-rail-w) + clamp(18px, 3vw, 40px));
}
.dop-month:not(:first-child) { margin-top: clamp(34px, 5vw, 64px); }
.dop-month__txt {
  font-family: var(--mono); font-size: .74rem; letter-spacing: .22em;
  text-transform: uppercase; color: var(--teal-claro); white-space: nowrap;
}
.dop-month__rule { flex: 1; height: 1px; background: rgba(255,255,255,.12); }

/* Entrada · riel + tarjeta */
.dop-entry { display: flex; gap: clamp(18px, 3vw, 40px); position: relative; padding-bottom: clamp(46px, 7vw, 82px); }
.dop-entry:last-of-type { padding-bottom: 0; }
/* Línea continua que cose la cronología */
.dop-entry::before {
  content: ""; position: absolute; left: calc(var(--dop-rail-w) / 2);
  top: 20px; bottom: 0; width: 1px; transform: translateX(-.5px); background: rgba(255,255,255,.13);
}
.dop-entry:last-of-type::before { display: none; }

.dop-entry__mark { flex: 0 0 var(--dop-rail-w); position: relative; text-align: center; padding-top: 2px; }
.dop-entry__dot {
  display: block; width: 14px; height: 14px; border-radius: 50%; background: var(--accent);
  margin: 5px auto 0; position: relative; z-index: 2;
}
.dop-entry--latest .dop-entry__dot { filter: drop-shadow(0 0 7px rgba(200,16,46,.9)); }
.dop-entry__day {
  font-family: var(--display); font-style: italic; font-weight: 300;
  font-size: 1.85rem; color: #fff; line-height: 1; margin-top: 16px;
}
.dop-entry__mon { font-family: var(--mono); font-size: .62rem; letter-spacing: .18em; color: var(--teal-claro); margin-top: 7px; }
.dop-entry__badge {
  display: inline-block; margin-top: 12px; font-family: var(--mono);
  font-size: .54rem; letter-spacing: .16em; text-transform: uppercase; color: #fff;
  background: var(--accent); padding: 4px 7px; border-radius: 2px;
}

.dop-card { flex: 1; min-width: 0; border-radius: 14px; overflow: hidden; background: #0d1326; border: 1px solid rgba(255,255,255,.07); }
.dop-card__media { position: relative; aspect-ratio: 16 / 8; overflow: hidden; }
.dop-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .9s var(--ease); }
.dop-card:hover .dop-card__media img { transform: scale(1.04); }
.dop-card__media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 40%, rgba(13,19,38,.85) 100%);
}
.dop-card__tag {
  font-family: var(--mono); font-size: .64rem; letter-spacing: .14em;
  text-transform: uppercase; color: #fff; background: var(--accent); padding: 6px 12px; border-radius: 2px;
}
.dop-card__tag--over { position: absolute; top: 16px; left: 16px; z-index: 3; }

/* Vídeo POV · <video controls> nativo, sin terceros (CSP estricto) */
.dop-card__media video { width: 100%; height: 100%; object-fit: cover; display: block; background: #05070f; }
.dop-card--video .dop-card__media::after { display: none; } /* controles nativos sin velo */
.dop-card--video.dop-card--title-over .dop-card__media::after { display: block; }

/* Título · overlay sobre la foto */
.dop-card__title { font-family: var(--display); font-style: italic; font-weight: 300; color: #fff; line-height: 1.04; }
.dop-card__title--over {
  position: absolute; left: 24px; right: 24px; bottom: 18px; z-index: 2;
  font-size: clamp(1.7rem, 3.3vw, 2.5rem); text-shadow: 0 2px 20px rgba(0,0,0,.6); pointer-events: none;
}

/* Cabecera para título debajo / sin media */
.dop-card__head { padding: 26px clamp(22px, 3vw, 34px) 0; }
.dop-card__head .dop-card__tag { display: inline-block; margin-bottom: 16px; }
.dop-card__title--below { font-size: clamp(1.55rem, 3vw, 2.2rem); }

/* Variante sin media · parte de datos */
.dop-card--bare { border-left: 3px solid var(--accent); }
.dop-card--bare .dop-card__head { padding-top: 34px; }
.dop-card--bare .dop-card__title--below { font-size: clamp(1.8rem, 3.6vw, 2.7rem); }

.dop-card__body { padding: 18px clamp(22px, 3vw, 34px) 8px; }
.dop-card__media + .dop-card__body { padding-top: 26px; }
.dop-card__body p { color: rgba(255,255,255,.84); font-size: 1.02rem; line-height: 1.74; margin: 0; }
.dop-card__body p + p { margin-top: 1em; }

.dop-meteo { display: flex; gap: 0; margin: 24px clamp(22px, 3vw, 34px) 28px; border-top: 1px solid rgba(255,255,255,.1); }
.dop-meteo div { flex: 1; padding: 18px 4px 0; }
.dop-meteo dt { font-family: var(--mono); font-size: .6rem; letter-spacing: .14em; text-transform: uppercase; color: var(--piedra-claro); }
.dop-meteo dd { margin: 8px 0 0; font-family: var(--mono); font-size: 1.04rem; color: var(--teal-claro); }

/* Galería · fotos adicionales del día (tira de miniaturas) */
.dop-gallery {
  list-style: none; margin: 16px clamp(22px, 3vw, 34px) 4px; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(98px, 1fr)); gap: 8px;
}
.dop-gallery__cell { margin: 0; }
.dop-gallery__item {
  display: block; aspect-ratio: 1 / 1; overflow: hidden; border-radius: 6px;
  border: 1px solid rgba(255,255,255,.09); position: relative; cursor: zoom-in;
}
.dop-gallery__item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .5s var(--ease); }
.dop-gallery__item:hover img { transform: scale(1.06); }
.dop-gallery__item:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

.dop-end {
  text-align: center; color: var(--piedra-claro); font-family: var(--mono);
  font-size: .7rem; letter-spacing: .16em; text-transform: uppercase; padding-top: clamp(40px, 6vw, 72px);
}

/* Visor a pantalla completa (lightbox) · lo construye assets/js/diario.js.
   Sin JS, las miniaturas son enlaces que abren la foto directamente. */
.dop-lightbox {
  position: fixed; inset: 0; z-index: 1000; background: rgba(5,7,15,.93);
  display: flex; align-items: center; justify-content: center; padding: clamp(16px, 4vw, 56px);
}
.dop-lightbox[hidden] { display: none; }
.dop-lightbox__img { max-width: 100%; max-height: 82vh; object-fit: contain; border-radius: 4px; box-shadow: 0 12px 60px rgba(0,0,0,.6); }
.dop-lightbox__cap {
  position: absolute; left: 0; right: 0; bottom: clamp(12px, 3vw, 26px); text-align: center;
  color: rgba(255,255,255,.9); font-family: var(--sans); font-size: .92rem; line-height: 1.5; padding: 0 18px;
}
.dop-lightbox__btn {
  position: absolute; background: rgba(255,255,255,.1); border: 1px solid rgba(255,255,255,.32); color: #fff;
  width: 52px; height: 52px; border-radius: 50%; font-size: 1.4rem; cursor: pointer; line-height: 1;
  display: flex; align-items: center; justify-content: center; transition: background .15s var(--ease);
}
.dop-lightbox__btn:hover { background: rgba(255,255,255,.22); }
.dop-lightbox__btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.dop-lightbox__btn[hidden] { display: none; }
.dop-lightbox__close { top: clamp(14px, 3vw, 26px); right: clamp(14px, 3vw, 26px); width: 46px; height: 46px; }
.dop-lightbox__prev { left: clamp(8px, 2vw, 24px); top: 50%; transform: translateY(-50%); }
.dop-lightbox__next { right: clamp(8px, 2vw, 24px); top: 50%; transform: translateY(-50%); }

@media (max-width: 720px) {
  :root { --dop-rail-w: 50px; }
  .dop-entry__day { font-size: 1.5rem; }
  .dop-meteo { flex-wrap: wrap; gap: 12px 0; }
  .dop-meteo div { flex: 0 0 50%; padding-top: 14px; }
  .dop-gallery { grid-template-columns: repeat(auto-fill, minmax(76px, 1fr)); gap: 6px; }
  .dop-lightbox__btn { width: 44px; height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .dop-card:hover .dop-card__media img { transform: none; }
  .dop-btn--pdf:hover { transform: none; }
  .dop-gallery__item:hover img { transform: none; }
}
/* ═══════════════════════════════════════════════════════════
   Modo Demo · panel flotante para presentaciones
   Solo se renderiza con ?demo=1 (inc/demo.php). Glass oscuro,
   esquina inferior izquierda para no chocar con el back-to-top.
   ═══════════════════════════════════════════════════════════ */
.demo {
  position: fixed;
  left: clamp(12px, 2vw, 24px);
  bottom: clamp(12px, 2vw, 24px);
  z-index: 1200;
  font-family: var(--sans);
  display: flex;
  flex-direction: column-reverse;
  align-items: flex-start;
  gap: 12px;
}

/* Lanzador */
.demo__fab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 999px;
  background: rgba(10,14,26,.78);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
  color: var(--blanco);
  font-size: .82rem;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 10px 30px rgba(0,0,0,.4);
  transition: transform var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}
.demo__fab:hover { transform: translateY(-2px); border-color: rgba(255,255,255,.35); }
.demo.is-open .demo__fab { display: none; }
.demo__fab-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--rojo-bandera);
  box-shadow: 0 0 0 0 rgba(200,16,46,.6);
  animation: demoPulse 2s var(--ease) infinite;
}
@keyframes demoPulse {
  0%   { box-shadow: 0 0 0 0 rgba(200,16,46,.55); }
  70%  { box-shadow: 0 0 0 7px rgba(200,16,46,0); }
  100% { box-shadow: 0 0 0 0 rgba(200,16,46,0); }
}

/* Panel */
.demo__panel {
  width: min(320px, calc(100vw - 32px));
  max-height: min(80vh, 640px);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 16px;
  border: 1px solid rgba(255,255,255,.14);
  border-radius: 18px;
  background: rgba(10,14,26,.86);
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
  color: var(--hielo);
  box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
.demo__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}
.demo__title { display: block; font-size: .95rem; color: var(--blanco); }
.demo__sub {
  display: block;
  font-size: .72rem;
  color: var(--azul-claro);
  margin-top: 2px;
}
.demo__close {
  border: none; background: none; cursor: pointer;
  color: var(--azul-claro);
  font-size: 1.5rem; line-height: 1;
  padding: 0 4px;
}
.demo__close:hover { color: var(--blanco); }

.demo__group { margin-bottom: 16px; }
.demo__group:last-of-type { margin-bottom: 8px; }
.demo__legend {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  font-size: .68rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--azul-claro);
  margin-bottom: 8px;
}

/* Botones segmentados (fase / etapa / cielo) */
.demo__seg { display: flex; gap: 6px; }
.demo__seg--wrap { flex-wrap: wrap; }
.demo__btn {
  flex: 1 1 auto;
  text-align: center;
  padding: 8px 10px;
  border: 1px solid rgba(255,255,255,.16);
  border-radius: 10px;
  background: rgba(255,255,255,.04);
  color: var(--hielo);
  font-size: .8rem;
  font-weight: 500;
  text-decoration: none;
  white-space: nowrap;
  transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}
.demo__seg--wrap .demo__btn { flex: 0 1 auto; }
.demo__btn:hover { background: rgba(255,255,255,.1); }
.demo__btn.is-active {
  background: var(--rojo-bandera);
  border-color: var(--rojo-bandera);
  color: var(--blanco);
}

/* Control de hora */
.demo__time-readout {
  font-size: .8rem;
  font-family: var(--mono);
  color: var(--blanco);
  text-transform: none;
  letter-spacing: 0;
}
.demo.is-simulating .demo__time-readout { color: var(--amarillo); }
.demo__time { display: flex; align-items: center; gap: 10px; }
.demo__play {
  flex: none;
  width: 34px; height: 34px;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 50%;
  background: rgba(255,255,255,.05);
  color: var(--blanco);
  font-size: .8rem;
  cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background var(--t-fast) var(--ease);
}
.demo__play:hover { background: rgba(255,255,255,.14); }
.demo.is-playing .demo__play { background: var(--rojo-bandera); border-color: var(--rojo-bandera); }
.demo__slider {
  flex: 1 1 auto;
  -webkit-appearance: none; appearance: none;
  height: 4px;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--azul-medio), var(--teal-glaciar), var(--amarillo), var(--teal-glaciar), var(--azul-profundo));
  outline: none;
  cursor: pointer;
}
.demo__slider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--blanco);
  border: 2px solid var(--rojo-bandera);
  box-shadow: 0 2px 6px rgba(0,0,0,.4);
}
.demo__slider::-moz-range-thumb {
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--blanco);
  border: 2px solid var(--rojo-bandera);
}
.demo__time-foot {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 10px;
}
.demo__hint { font-size: .68rem; color: var(--piedra-claro); }

.demo__foot {
  margin-top: 6px;
  padding-top: 12px;
  border-top: 1px solid rgba(255,255,255,.1);
}
.demo__link {
  border: none; background: none; padding: 0;
  color: var(--azul-claro);
  font-size: .76rem;
  text-decoration: underline;
  cursor: pointer;
}
.demo__link:hover { color: var(--blanco); }
.demo__link--off { color: var(--rojo-bandera); }

@media (prefers-reduced-motion: reduce) {
  .demo__fab-dot { animation: none; }
}

/* Nota de "vista de demostración" sobre el diario de operaciones */
.dop-demo-note {
  margin: 0 0 28px;
  padding: 12px 16px;
  border-left: 3px solid var(--rojo-bandera);
  background: rgba(200,16,46,.06);
  color: var(--fg-soft);
  font-size: .86rem;
  border-radius: 0 8px 8px 0;
}
