/* ============================================================
   Capa 3: Componentes
   ============================================================ */

/* ------------------------------------------------------------
   HEADER Y NAV

   Vive acá y no en home.css porque template-parts/header/site-
   header.php se renderiza en TODAS las páginas vía get_header():
   home.css solo se encola en portada y en single de 'ruta' (ver
   inc/enqueue.php), así que cualquier regla de header que quedara
   allá dejaría sin estilos al header del blog, páginas genéricas,
   historias, etc.
   ------------------------------------------------------------ */

.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: transparent;
  transition: background-color var(--dur-base) var(--ease-out),
              box-shadow var(--dur-base) var(--ease-out);
}

/* El header arranca transparente sobre el hero oscuro y se vuelve
   sólido recién al scrollear. La clase la pone ui.js con un
   sentinel, no con un listener de scroll. Fuera de portada/ruta no
   hay hero debajo, pero la transición sigue siendo inocua: el
   header nace transparente y pasa a sólido igual al primer scroll. */
.site-header.is-scrolled {
  background: rgba(11, 18, 20, 0.92);
  backdrop-filter: blur(10px);
  box-shadow: var(--shadow-md);
}

.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-4);
  min-height: 4.5rem;
}

.site-header__logo img { height: 2.5rem; width: auto; }

/* Oculto por defecto a cualquier ancho: la media query de abajo lo
   revela solo por debajo de 60rem y solo si mobile-nav.js corrió. */
.menu-toggle { display: none; }

/* Bloquea el scroll del body mientras el panel mobile está abierto. */
body.has-mobile-nav-open { overflow: hidden; }

@media (max-width: 59.99rem) {

  /* Sin JS: el <nav> pasa a ocupar su propia fila completa debajo
     del header (flex-wrap en el contenedor + flex-basis:100% acá)
     en vez de competir por espacio con el logo y el CTA en una
     sola línea de 4.5rem. Sigue siendo un <ul> normal, siempre
     visible: 100% navegable sin depender de que cargue JS. */
  .site-header__inner { flex-wrap: wrap; }

  .site-nav {
    flex-basis: 100%;
    order: 10;
  }

  .site-nav ul {
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: var(--sp-1);
  }

  .site-nav a {
    display: block;
    color: var(--fg-on-dark);
    text-decoration: none;
    font-weight: var(--fw-semibold);
    font-size: var(--fs-body);
    padding: var(--sp-3) 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  }

  .site-nav .sub-menu {
    list-style: none;
    padding-left: var(--sp-4);
  }

  .site-nav .sub-menu a {
    font-size: var(--fs-small);
    font-weight: var(--fw-regular);
    border-bottom: none;
  }

  /* El chevron de "Rutas" no existe hasta que mobile-nav.js lo
     activa (ver más abajo): sin esa clase en <html> no hay JS
     escuchándolo, así que no se muestra. El botón hamburguesa ya
     está oculto por defecto más arriba (fuera de esta media query). */
  .site-nav__chevron { display: none; }


  /* ----------------------------------------------------------
     A partir de acá, todo requiere <html class="has-mobile-nav">
     (la pone mobile-nav.js apenas confirma que el botón y el nav
     existen en el DOM). El bloque de arriba es el fallback; este
     es la mejora progresiva.
     ---------------------------------------------------------- */

  .has-mobile-nav .menu-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    padding: 0;
    margin-left: var(--sp-2);
    background: transparent;
    border: none;
    border-radius: var(--radius-sm);
    color: var(--fg-on-dark);
    cursor: pointer;
  }

  .has-mobile-nav .menu-toggle:hover,
  .has-mobile-nav .menu-toggle:focus-visible {
    background: rgba(255, 255, 255, 0.1);
  }

  /* Ícono de 3 barras dibujado en CSS puro: no hay fuente de
     íconos en el proyecto y no vale la pena sumar una por esto. */
  .menu-toggle__icon,
  .menu-toggle__icon::before,
  .menu-toggle__icon::after {
    display: block;
    width: 1.375rem;
    height: 2px;
    background: currentColor;
    border-radius: 2px;
  }

  .menu-toggle__icon {
    position: relative;
    transition: background-color var(--dur-fast) var(--ease-out);
  }

  .menu-toggle__icon::before,
  .menu-toggle__icon::after {
    content: "";
    position: absolute;
    left: 0;
    transition: transform var(--dur-fast) var(--ease-out);
  }

  .menu-toggle__icon::before { top: -6px; }
  .menu-toggle__icon::after { top: 6px; }

  /* Estado abierto: las 3 barras forman una "X". */
  .menu-toggle[aria-expanded="true"] .menu-toggle__icon { background: transparent; }
  .menu-toggle[aria-expanded="true"] .menu-toggle__icon::before { transform: translateY(6px) rotate(45deg); }
  .menu-toggle[aria-expanded="true"] .menu-toggle__icon::after  { transform: translateY(-6px) rotate(-45deg); }

  /* Con JS el nav sale del flujo del header (position:absolute) y
     se convierte en panel: cerrado no ocupa espacio ni empuja el
     resto del header hacia abajo, a diferencia del fallback de
     arriba. Se ancla a .site-header (position:sticky = containing
     block más cercano), no a .site-header__inner. */
  .has-mobile-nav .site-nav {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    flex-basis: auto;
    order: initial;
    max-height: calc(100vh - 4.5rem); /* 4.5rem = min-height del header, ver arriba */
    overflow-y: auto;
    margin: 0;
    padding: var(--sp-5) var(--gutter) var(--sp-6);
    background: var(--ink-900);
    box-shadow: var(--shadow-lg);
    border-radius: 0 0 var(--radius-lg) var(--radius-lg);

    /* opacity/visibility y no display:none: así se puede animar la
       entrada/salida. El delay en visibility evita que el panel
       sea clickeable/focuseable mientras termina de desvanecerse. */
    opacity: 0;
    visibility: hidden;
    transform: translateY(-0.5rem);
    transition: opacity var(--dur-base) var(--ease-out),
                transform var(--dur-base) var(--ease-out),
                visibility 0s linear var(--dur-base);
  }

  .has-mobile-nav .site-nav.is-open {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    transition: opacity var(--dur-base) var(--ease-out),
                transform var(--dur-base) var(--ease-out);
  }

  /* Fila "Rutas": el link navega directo a #rutas y el chevron
     aparte expande/colapsa la lista — en touch no hay hover que
     la abra sola como en desktop. */
  .has-mobile-nav .site-nav .menu-item-has-children.has-mobile-toggle {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  }

  .has-mobile-nav .site-nav .menu-item-has-children.has-mobile-toggle > a {
    flex: 1;
    border-bottom: none; /* el borde ya lo lleva el <li> completo */
  }

  .has-mobile-nav .site-nav__chevron {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    background: transparent;
    border: none;
    color: var(--fg-on-dark);
    cursor: pointer;
  }

  .has-mobile-nav .site-nav__chevron::after {
    content: "";
    width: 0.5em;
    height: 0.5em;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform var(--dur-fast) var(--ease-out);
  }

  .has-mobile-nav .site-nav__chevron[aria-expanded="true"]::after {
    transform: rotate(225deg);
  }

  .has-mobile-nav .site-nav .sub-menu {
    display: none;
    flex-basis: 100%;
    padding: 0 0 var(--sp-2) var(--sp-4);
  }

  .has-mobile-nav .menu-item-has-children.is-submenu-open .sub-menu {
    display: block;
  }
}

@media (min-width: 60rem) {
  .site-nav { display: block; }
  .site-nav ul { display: flex; gap: var(--sp-5); list-style: none; }
  .site-nav a {
    color: var(--fg-on-dark);
    text-decoration: none;
    font-weight: var(--fw-semibold);
    font-size: var(--fs-small);
    padding-block: var(--sp-2);
    border-bottom: 2px solid transparent;
    transition: border-color var(--dur-fast) var(--ease-out),
                color var(--dur-fast) var(--ease-out);
  }
  .site-nav a:hover { border-bottom-color: var(--mint-400); }

  /* Submenú de "Rutas" (inc/nav-menu.php lo puebla con las rutas
     publicadas). CSS-only a propósito acá arriba de 60rem: hover en
     desktop y :focus-within para que Tab también lo abra sin JS. La
     versión mobile (acordeón con botón propio) vive en el bloque
     `@media (max-width: 59.99rem)` de más arriba, vía mobile-nav.js. */
  .site-nav .menu-item-has-children { position: relative; }

  .site-nav .menu-item-has-children > a::after {
    content: "";
    display: inline-block;
    width: 0.35em;
    height: 0.35em;
    margin-left: var(--sp-1);
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-2px) rotate(45deg);
  }

  .site-nav .sub-menu {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    z-index: var(--z-overlay);
    min-width: 14rem;
    margin: var(--sp-2) 0 0;
    padding: var(--sp-2);
    list-style: none;
    background: var(--ink-900);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg);
  }

  .site-nav .menu-item-has-children:hover > .sub-menu,
  .site-nav .menu-item-has-children:focus-within > .sub-menu {
    display: block;
  }

  .site-nav .sub-menu a {
    display: block;
    padding: var(--sp-2) var(--sp-3);
    border-bottom: none;
    white-space: nowrap;
  }

  .site-nav .sub-menu a:hover,
  .site-nav .sub-menu a:focus-visible {
    color: var(--mint-300);
  }
}


/* ------------------------------------------------------------
   BOTONES

   Cuatro decisiones detrás de este bloque:

   1. Píldora en los CTA. El logo es un globo y la referencia
      visual es redondeada; la píldora es coherente y además
      lee como "acción" y no como "caja".
   2. El hover ACLARA en vez de oscurecer. Oscurecer al pasar
      es el reflejo automático, pero aclarar sugiere que el
      botón "se enciende". Ambos tonos pasan AA sobre blanco:
      teal-600 6.76:1 → teal-500 4.93:1.
   3. La sombra es teal, no negra, y solo aparece en hover.
      Un botón plano que gana sombra al acercarse comunica
      elevación sin usar sombra permanente.
   4. Al apretar baja 1px y encoge a 0.98. El desplazamiento
      físico es lo que hace que un botón se sienta pulsado en
      un touchscreen, donde no hay cursor que dé feedback.
   ------------------------------------------------------------ */

.btn {
  --btn-bg:     var(--action);
  --btn-fg:     var(--fg-on-brand);
  --btn-bd:     transparent;
  --btn-shadow: none;

  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--sp-2);

  padding: var(--sp-3) var(--sp-6);
  min-height: 3rem;

  font-family: var(--font-sans);
  font-size: var(--fs-body);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-normal);
  line-height: 1;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;

  background: var(--btn-bg);
  color: var(--btn-fg);
  border: 2px solid var(--btn-bd);
  border-radius: var(--radius-pill);
  box-shadow: var(--btn-shadow);

  cursor: pointer;
  position: relative;
  overflow: hidden;             /* recorta la onda de pulsación */
  isolation: isolate;
  -webkit-tap-highlight-color: transparent;

  /* Se animan solo propiedades compuestas + color.
     background-color y box-shadow disparan paint, pero en un
     elemento chico y con duración corta el costo es nulo;
     transform y opacity van por el compositor. */
  transition:
    background-color var(--dur-fast) var(--ease-out),
    border-color     var(--dur-fast) var(--ease-out),
    color            var(--dur-fast) var(--ease-out),
    box-shadow       var(--dur-base) var(--ease-out),
    transform        var(--dur-instant) var(--ease-out);
}

/* Solo en dispositivos con puntero real: evita que el estado
   hover se "pegue" después de un tap en móvil. */
@media (hover: hover) and (pointer: fine) {
  .btn:hover {
    background: var(--action-hover);
    box-shadow: var(--shadow-action);
    transform: translateY(-2px);
  }
}

.btn:active {
  background: var(--action-press);
  box-shadow: var(--shadow-xs);
  transform: translateY(1px) scale(0.98);
  transition-duration: var(--dur-instant);
}

.btn[aria-disabled="true"],
.btn:disabled {
  background: var(--bg-sunken);
  color: var(--fg-muted);
  box-shadow: none;
  transform: none;
  cursor: not-allowed;
}

/* --- Variantes --- */

.btn--secondary {
  --btn-bg: transparent;
  --btn-fg: var(--fg-brand);
  --btn-bd: var(--border-brand);
}

@media (hover: hover) and (pointer: fine) {
  .btn--secondary:hover {
    background: var(--bg-brand-soft);
    border-color: var(--action);
    box-shadow: none;
  }
}

.btn--secondary:active {
  background: var(--bg-brand-soft);
  border-color: var(--action-press);
}

/* Ámbar: reservado para el CTA primario sobre fondo oscuro,
   donde el teal pierde fuerza. Texto tinta, nunca blanco. */
.btn--accent {
  --btn-bg: var(--accent);
  --btn-fg: var(--fg-on-amber);
}

@media (hover: hover) and (pointer: fine) {
  .btn--accent:hover {
    background: var(--accent-hover);
    box-shadow: 0 4px 16px rgba(245, 179, 30, 0.32);
  }
}

.btn--accent:active { background: var(--accent-press); }

.btn--ghost {
  --btn-bg: transparent;
  --btn-fg: var(--fg-primary);
}

@media (hover: hover) and (pointer: fine) {
  .btn--ghost:hover { background: var(--bg-sunken); box-shadow: none; }
}

.btn--lg { min-height: 3.5rem; padding-inline: var(--sp-7); font-size: var(--fs-lead); }
.btn--sm { min-height: 2.5rem; padding: var(--sp-2) var(--sp-4); font-size: var(--fs-small); }
.btn--block { width: 100%; }

/* Estado de envío del formulario */
.btn[data-loading="true"] { pointer-events: none; color: transparent; }

.btn[data-loading="true"]::after {
  content: "";
  position: absolute;
  inset: 50% auto auto 50%;
  width: 1.25rem; height: 1.25rem;
  margin: -0.625rem 0 0 -0.625rem;
  border: 2px solid currentColor;
  border-top-color: var(--btn-fg);
  border-radius: 50%;
  color: rgba(255, 255, 255, 0.35);
  animation: spin 700ms linear infinite;
}

@keyframes spin { to { transform: rotate(360deg); } }

/* Onda de pulsación — la dibuja ui.js desde el punto del clic.
   Es el único adorno del sistema y solo aparece al apretar. */
.btn__ripple {
  position: absolute;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.28;
  transform: scale(0);
  pointer-events: none;
  animation: ripple var(--dur-slow) var(--ease-out) forwards;
}

@keyframes ripple {
  to { transform: scale(2.6); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .btn__ripple { display: none; }
  .btn:hover, .btn:active { transform: none; }
}


/* ------------------------------------------------------------
   BOTÓN FLOTANTE DE WHATSAPP
   ------------------------------------------------------------ */

.wa-fab {
  position: fixed;
  right: var(--sp-4);
  bottom: var(--sp-4);
  z-index: var(--z-whatsapp);

  display: inline-flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3);
  min-height: 3.5rem;

  background: #1FAF54;
  color: #FFFFFF;
  border-radius: var(--radius-pill);
  box-shadow: var(--shadow-lg);
  font-weight: var(--fw-bold);
  text-decoration: none;

  transition: transform var(--dur-base) var(--ease-spring),
              box-shadow var(--dur-base) var(--ease-out);
}

/* La etiqueta sale al hacer hover en escritorio; en móvil el
   botón queda como ícono solo para no tapar contenido. */
.wa-fab__label {
  max-width: 0;
  overflow: hidden;
  white-space: nowrap;
  opacity: 0;
  transition: max-width var(--dur-slow) var(--ease-out),
              opacity var(--dur-fast) var(--ease-out);
}

@media (hover: hover) and (pointer: fine) {
  .wa-fab:hover { transform: scale(1.04); }
  .wa-fab:hover .wa-fab__label { max-width: 12rem; opacity: 1; padding-right: var(--sp-3); }
}

.wa-fab:active { transform: scale(0.96); }


/* ------------------------------------------------------------
   TARJETAS
   ------------------------------------------------------------ */

.card {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
  padding: var(--sp-5);
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-xs);
  transition: box-shadow var(--dur-base) var(--ease-out),
              transform var(--dur-base) var(--ease-out),
              border-color var(--dur-base) var(--ease-out);
}

@media (hover: hover) and (pointer: fine) {
  .card--link:hover {
    box-shadow: var(--shadow-md);
    border-color: var(--border-brand);
    transform: translateY(-3px);
  }
}

.card--link:active { transform: translateY(0); box-shadow: var(--shadow-sm); }

/* El enlace cubre toda la tarjeta pero el <a> sigue siendo el
   único elemento focalizable: clic amplio sin romper el teclado. */
.card--link { position: relative; }
.card--link a::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }

.card__media {
  margin: calc(var(--sp-5) * -1) calc(var(--sp-5) * -1) 0;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  overflow: hidden;
  aspect-ratio: 4 / 3;
}

.card__media img { width: 100%; height: 100%; object-fit: cover; }


/* --- Tarjeta de ruta: el componente firma del sitio --- */

.route {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  padding: var(--sp-5);
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  transition: border-color var(--dur-base) var(--ease-out),
              box-shadow var(--dur-base) var(--ease-out);
}

@media (hover: hover) and (pointer: fine) {
  .route:hover { border-color: var(--action); box-shadow: var(--shadow-md); }
  .route:hover .route__plane { transform: translateX(0.35rem); }
}

.route__path {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--sp-3);
}

/* Código IATA: el vocabulario real del rubro. Un usuario que ve
   CCS → MIA entiende la ruta antes de leer una palabra. */
.route__code {
  font-family: var(--font-mono);
  font-weight: var(--fw-bold);
  font-size: var(--fs-h4);
  letter-spacing: var(--ls-wide);
  color: var(--fg-primary);
}

.route__track {
  position: relative;
  height: 2px;
  background-image: linear-gradient(to right, var(--border) 0 6px, transparent 6px 12px);
  background-size: 12px 2px;
}

.route__plane {
  position: absolute;
  top: 50%;
  left: 50%;
  translate: -50% -50%;
  color: var(--fg-brand);
  transition: transform var(--dur-slow) var(--ease-spring);
}

.route__cities { font-size: var(--fs-small); color: var(--fg-muted); }


/* ------------------------------------------------------------
   CHIPS Y ETIQUETAS
   ------------------------------------------------------------ */

.chip {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-1) var(--sp-3);
  background: var(--bg-brand-soft);
  color: var(--fg-brand);
  border-radius: var(--radius-pill);
  font-size: var(--fs-small);
  font-weight: var(--fw-semibold);
}

.chip--accent { background: rgba(245, 179, 30, 0.18); color: var(--amber-600); }

[data-theme="dark"] .chip--accent { color: var(--amber-300); }

/* Dato de la barra de confianza */
.stat { display: flex; flex-direction: column; gap: var(--sp-1); }
.stat__value {
  font-size: var(--fs-h2);
  font-weight: var(--fw-black);
  line-height: 1;
  letter-spacing: var(--ls-tight);
  color: var(--fg-brand);
}
.stat__label { font-size: var(--fs-small); color: var(--fg-secondary); }


/* ------------------------------------------------------------
   CAMPOS DE FORMULARIO
   ------------------------------------------------------------ */

.field { display: flex; flex-direction: column; gap: var(--sp-2); }

/* Label real y siempre visible. El placeholder-como-label
   desaparece al escribir y es un problema de accesibilidad
   y de tasa de error, no una preferencia estética. */
.field__label { font-size: var(--fs-small); font-weight: var(--fw-semibold); }

.field__hint { font-size: var(--fs-caption); color: var(--fg-muted); }

.field__control {
  width: 100%;
  min-height: 3rem;
  padding: var(--sp-3) var(--sp-4);
  background: var(--bg-surface);
  color: var(--fg-primary);
  border: 1.5px solid var(--border-control);
  border-radius: var(--radius-md);
  transition: border-color var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
}

.field__control::placeholder { color: var(--fg-muted); }

.field__control:hover { border-color: var(--action); }

.field__control:focus {
  outline: none;
  border-color: var(--action);
  box-shadow: 0 0 0 3px var(--bg-brand-soft);
}

.field__control:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 1px; }

select.field__control {
  appearance: none;
  padding-right: var(--sp-7);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%230A6570' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right var(--sp-4) center;
}

textarea.field__control { min-height: 7rem; resize: vertical; }

.field--error .field__control { border-color: var(--red-500); }
.field--error .field__control:focus { box-shadow: 0 0 0 3px var(--red-50); }

.field__error {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-caption);
  font-weight: var(--fw-semibold);
  color: var(--red-500);
}

.honeypot { position: absolute; left: -9999px; opacity: 0; pointer-events: none; }


/* ------------------------------------------------------------
   REVELADO AL SCROLL
   El estado inicial se aplica con JS (clase en <html>), no en
   CSS: si el JS falla, el contenido queda visible en vez de
   invisible para siempre.
   ------------------------------------------------------------ */

.js .reveal {
  opacity: 0;
  transform: translateY(1rem);
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--ease-out);
}

.js .reveal.is-visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .js .reveal { opacity: 1; transform: none; }
}


/* ------------------------------------------------------------
   PIE DE PÁGINA
   ------------------------------------------------------------ */

.site-footer {
  background: var(--bg-page);
  color: var(--fg-primary);
  padding-block: var(--sp-7) var(--sp-5);
  /* Deja aire abajo para que el botón flotante de WhatsApp no
     tape los enlaces legales en móvil. */
  padding-bottom: calc(var(--sp-5) + 4rem);
}

@media (min-width: 48rem) {
  .site-footer { padding-bottom: var(--sp-5); }
}

.site-footer__grid {
  display: grid;
  gap: var(--sp-6);
  grid-template-columns: 1fr;
  margin-bottom: var(--sp-6);
}

@media (min-width: 40rem) {
  .site-footer__grid { grid-template-columns: repeat(2, 1fr); }
}

/* La columna de marca pesa más que las otras tres. */
@media (min-width: 64rem) {
  .site-footer__grid { grid-template-columns: 1.4fr 1fr 1.2fr 1fr; gap: var(--sp-5); }
}

.site-footer__brand { display: flex; flex-direction: column; gap: var(--sp-3); }
.site-footer__brand img { height: 3rem; width: auto; }

.site-footer__name {
  font-size: var(--fs-h4);
  font-weight: var(--fw-black);
  letter-spacing: var(--ls-tight);
}

.site-footer__brand .t-data {
  display: inline-block;
  margin-right: var(--sp-3);
  color: var(--fg-brand);
  font-size: var(--fs-caption);
}

.site-footer__col { display: flex; flex-direction: column; gap: var(--sp-3); }

.site-footer__title {
  font-size: var(--fs-caption);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--fg-muted);
  margin: 0;
}

.site-footer__list { list-style: none; display: flex; flex-direction: column; gap: var(--sp-2); }

.site-footer__list a {
  color: var(--fg-secondary);
  text-decoration: none;
  font-size: var(--fs-small);
  /* Área táctil cómoda sin inflar el alto de la lista en desktop. */
  padding-block: var(--sp-1);
  display: inline-flex;
  align-items: baseline;
  gap: var(--sp-2);
  transition: color var(--dur-fast) var(--ease-out);
}

.site-footer__list a:hover { color: var(--fg-brand); }

.site-footer__list .t-data {
  font-size: var(--fs-caption);
  color: var(--fg-muted);
  transition: color var(--dur-fast) var(--ease-out);
}

.site-footer__list a:hover .t-data { color: var(--fg-brand); }

.site-footer__cta { margin-top: var(--sp-2); }

.site-footer__legal {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  padding-top: var(--sp-5);
}

.site-footer__legal p { margin: 0; }

.site-footer__legal-links {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-4);
  font-size: var(--fs-caption);
}

.site-footer__legal-links a { color: var(--fg-muted); text-decoration: none; }
.site-footer__legal-links a:hover { color: var(--fg-brand); }

.site-footer__top a { font-size: var(--fs-caption); color: var(--fg-muted); text-decoration: none; }
.site-footer__top a:hover { color: var(--fg-brand); }
