/* ==========================================================================
   layout.css — contenedores, HEADER y FOOTER.
   Depende de base.css + tokens.css. CERO valores hardcodeados: todo sale de
   custom properties de tokens.css.

   Mobile-first: los estilos base son móviles; se amplían en @media 768 y 1024.
   El Figma solo define desktop (1440); las decisiones móviles son propias y van
   documentadas en comentarios para poder defenderlas en la revisión.
   ========================================================================== */

/* ==========================================================================
   Nota: --lfi-header-h-mobile (alto del header en móvil/tablet) se define en
   tokens.css. En ≥1024 se reasigna a --lfi-header-h (ver breakpoint 1024 más
   abajo), de modo que la barra y el padding-top del body se ajustan solos.
   ========================================================================== */

/* ==========================================================================
   Contenedor genérico de contenido
   ========================================================================== */
/* Contenido = --lfi-content (1224 = 1440 − 2×108). El max-width incluye el
   gutter (padding), por eso se suma: así el CONTENIDO interior mide 1224 exactos
   en desktop (antes el max-width era 1224 y, con el padding, el contenido caía a
   1008 → cajas/rejillas estrechas). El gutter es responsivo (24/48/108). */
.lfi-container {
  width: 100%;
  max-width: calc(var(--lfi-content) + 2 * var(--lfi-gutter));
  margin-inline: auto;
  padding-inline: var(--lfi-gutter);
}

/* El header es fijo: se reserva su alto con padding-top en el WRAPPER de
   contenido (.lfi-main), NO en el <body>.
   MOTIVO (bug de raíz): WordPress inyecta un <style id="global-styles-inline-css">
   con `body { padding: … }` que carga DESPUÉS del theme y machacaba nuestro
   `body { padding-top }` (quedaba en 0, y el header fijo tapaba el arranque del
   hero). Afectaba a las 8 plantillas por igual; el home solo lo disimulaba por
   tener un hero alto. .lfi-main no lo toca nadie -> compensación robusta e
   idéntica en todas las plantillas (todas montan <main class="lfi-main"> en
   header.php), en móvil y escritorio. */
.lfi-main {
  padding-top: var(--lfi-header-h-mobile);
}

/* Barra de administración de WP (solo usuarios logueados): empuja el header fijo
   y el panel del menú móvil por debajo del admin bar. En producción (sin login)
   --lfi-admin-bar = 0 y no afecta. El admin bar mide 32px (>782) / 46px (≤782). */
body.admin-bar { --lfi-admin-bar: 32px; }
@media screen and (max-width: 782px) { body.admin-bar { --lfi-admin-bar: 46px; } }

/* ==========================================================================
   HEADER  (.lfi-header) — fijo en todas las plantillas
   ========================================================================== */
.lfi-header {
  position: fixed;
  top: var(--lfi-admin-bar, 0px);   /* 0 en producción; bajo el admin bar si logueado */
  left: 0;
  right: 0;
  z-index: 1000;
  background: var(--lfi-navy);
  height: var(--lfi-header-h-mobile);
}

.lfi-header__inner {
  max-width: var(--lfi-design-width);
  height: 100%;
  margin-inline: auto;
  padding-inline: var(--lfi-gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lfi-header-nav-gap);
}

/* Logo -------------------------------------------------------------------- */
.lfi-header__logo {
  display: block;
  height: var(--lfi-header-logo-h);
  flex: 0 0 auto;
}
.lfi-header__logo img {
  height: 100%;
  width: auto;              /* SVG con viewBox 1080²; el aire sobrante se ajusta
                              con scale/margin desde aquí si hace falta */
}

/* Botón hamburguesa (solo móvil/tablet) ---------------------------------- */
/* DECISIÓN MÓVIL: el Figma no tiene versión móvil. Por debajo de 1024px el menú
   horizontal no cabe, así que se colapsa en un botón hamburguesa que despliega
   la navegación en un panel a pantalla completa bajo el header. Se controla con
   assets/js/nav.js (aria-expanded) para accesibilidad; degrada visible si no
   carga el JS. */
.lfi-header__toggle {
  display: inline-flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: var(--lfi-tap-min);      /* 44×44 área táctil (WCAG 2.5.5) */
  height: var(--lfi-tap-min);
  padding: 0;
  background: none;
  border: 0;
  cursor: pointer;
}
.lfi-header__toggle-bar {
  display: block;
  width: 26px;                    /* barras visibles centradas dentro del tap 44 */
  height: 2px;
  background: var(--lfi-white);
  transition: transform 0.2s ease, opacity 0.2s ease;
}
/* Estado abierto: las barras forman una X */
.lfi-header__toggle[aria-expanded="true"] .lfi-header__toggle-bar:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.lfi-header__toggle[aria-expanded="true"] .lfi-header__toggle-bar:nth-child(2) {
  opacity: 0;
}
.lfi-header__toggle[aria-expanded="true"] .lfi-header__toggle-bar:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

/* Navegación -------------------------------------------------------------- */
/* Base (móvil): panel desplegable oculto por defecto. */
.lfi-header__nav {
  position: fixed;
  top: calc(var(--lfi-admin-bar, 0px) + var(--lfi-header-h-mobile));  /* bajo el header */
  left: 0;
  right: 0;
  bottom: 0;
  background: var(--lfi-navy);
  padding: var(--lfi-gap-heading) var(--lfi-gutter);
  transform: translateX(100%);
  transition: transform 0.25s ease;
  overflow-y: auto;
}
.lfi-header__nav.is-open {
  transform: translateX(0);
}

/* Base (móvil): lista vertical de filas táctiles. */
.lfi-header__nav-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.lfi-header__nav-link,
.lfi-header__nav-list a {
  /* DECISIÓN MÓVIL: enlace a fila completa con padding para 44px táctiles. */
  display: block;
  padding-block: 11px;               /* ~21px de texto + 22 = 44 táctil */
  font-family: var(--lfi-font);
  font-size: var(--lfi-fs-19);       /* móvil: mayor que el nav desktop (fs-15) */
  font-weight: var(--lfi-weight-regular);
  letter-spacing: var(--lfi-ls-none);
  color: var(--lfi-white);
  text-transform: uppercase;
  border-bottom: var(--lfi-header-underline-h) solid transparent;
  transition: color 0.2s ease, border-color 0.2s ease;
}

/* Item activo: negrita + subrayado rojo (el subrayado toma el ancho del texto,
   como en el Figma donde bajo HOME mide 48px = ancho de "HOME"). */
.lfi-header__nav-list .current-menu-item > a,
.lfi-header__nav-link[aria-current="page"] {
  font-weight: var(--lfi-weight-bold);
  border-bottom-color: var(--lfi-red);
}

/* HOVER: enlaces blancos sobre navy -> pasan a rojo (acento de marca).
   La inversión estricta rojo<->azul del brief aplica a elementos rojos/navy;
   para el texto blanco del nav/footer sobre fondo oscuro, el equivalente
   coherente es virar al rojo. Documentado. */
.lfi-header__nav-link:hover,
.lfi-header__nav-list a:hover,
.lfi-header__nav-link:focus-visible {
  color: var(--lfi-red);
}

/* ==========================================================================
   FOOTER  (.lfi-footer)
   ========================================================================== */
.lfi-footer {
  background: var(--lfi-navy);
  color: var(--lfi-white);
}

.lfi-footer__inner {
  max-width: var(--lfi-design-width);
  margin-inline: auto;
  padding: var(--lfi-gap-heading) var(--lfi-gutter);
  /* Base (móvil): una sola columna apilada. */
  display: flex;
  flex-direction: column;
  gap: var(--lfi-gap-heading);
}

/* Logo del footer --------------------------------------------------------- */
.lfi-footer__logo {
  display: block;
  height: var(--lfi-footer-logo-h);
  margin-bottom: var(--lfi-footer-logo-gap);
}
.lfi-footer__logo img {
  height: 100%;
  width: auto;
}

/* Columna de info de empresa --------------------------------------------- */
.lfi-footer__info {
  font-style: normal;               /* es un <address> */
}
/* DECISIÓN MÓVIL: el Figma usa Thin (100) en el footer, pero a 19–22px en
   pantalla pequeña el Thin se lee muy mal. En móvil/tablet se sube a Regular;
   en ≥1024 se recupera el Thin del Figma. */
.lfi-footer__info p {
  font-weight: var(--lfi-weight-regular);
  font-size: var(--lfi-fs-19);
  line-height: var(--lfi-footer-row);
  letter-spacing: var(--lfi-ls-none);
}

/* Columnas de enlaces (nav + legal) -------------------------------------- */
.lfi-footer__list,
.lfi-footer__legal-list {
  display: flex;
  flex-direction: column;
}
.lfi-footer__list a,
.lfi-footer__legal-list a {
  /* Móvil: Regular (el Thin del Figma es ilegible a este tamaño) + área táctil. */
  display: block;
  padding-block: 6px;               /* ~33 de línea + 12 = 45 táctil */
  font-weight: var(--lfi-weight-regular);
  font-size: var(--lfi-fs-22);
  line-height: var(--lfi-footer-row);
  letter-spacing: var(--lfi-ls-none);
  color: var(--lfi-white);
  transition: color 0.2s ease;
}

/* HOVER footer: blanco -> rojo (misma lógica documentada que el header). */
.lfi-footer__list a:hover,
.lfi-footer__legal-list a:hover,
.lfi-footer__list a:focus-visible,
.lfi-footer__legal-list a:focus-visible,
.lfi-footer__info a:hover,
.lfi-footer__info a:focus-visible {
  color: var(--lfi-red);
}

/* Separadores del footer.
   MÓVIL/TABLET (<1024): línea HORIZONTAL roja sobre "Equipo" (nav) y sobre
   "Términos legales" (legal), separando los tres bloques apilados.
   DESKTOP (≥1024): se sustituye por los dos separadores VERTICALES del Figma
   (::before), y este border-top se anula. */
.lfi-footer__col--nav,
.lfi-footer__col--legal {
  position: relative;
  border-top: 1px solid var(--lfi-footer-divider-color);
  padding-top: var(--lfi-gap-grid);   /* aire entre la línea y el bloque */
}

/* ==========================================================================
   BREAKPOINT 768px — tablet
   ========================================================================== */
@media (min-width: 768px) {
  /* (El padding lateral del contenedor lo da ahora --lfi-gutter responsivo.) */

  /* Footer: info a lo ancho + nav y legal en 2 columnas para aprovechar el ancho. */
  .lfi-footer__inner {
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--lfi-gap-heading) var(--lfi-gap-grid);
  }
  .lfi-footer__col--info { flex: 1 1 100%; }
  .lfi-footer__col--nav,
  .lfi-footer__col--legal { flex: 1 1 calc(50% - var(--lfi-gap-grid)); }
}

/* ==========================================================================
   BREAKPOINT 1024px — desktop (réplica del Figma a 1440)
   ========================================================================== */
@media (min-width: 1024px) {

  /* El header recupera su alto real del Figma. */
  :root { --lfi-header-h-mobile: var(--lfi-header-h); }

  .lfi-header,
  .lfi-header__inner { height: var(--lfi-header-h); }

  /* Padding lateral asimétrico exacto del Figma (logo 59 / nav 43). */
  .lfi-header__inner {
    padding-left: var(--lfi-header-pl);
    padding-right: var(--lfi-header-pr);
    max-width: var(--lfi-design-width);
  }
  .lfi-header__logo { height: var(--lfi-header-logo-h); }

  /* Fuera hamburguesa; nav horizontal in-flow. */
  .lfi-header__toggle { display: none; }
  .lfi-header__nav {
    position: static;
    inset: auto;
    background: none;
    padding: 0;
    transform: none;
    overflow: visible;
  }
  .lfi-header__nav-list {
    flex-direction: row;
    align-items: center;
    gap: var(--lfi-header-nav-gap);
  }
  /* El nav horizontal recupera el tamaño e in-flow del Figma (sin padding táctil
     móvil, para que el subrayado del activo quede pegado al texto). */
  .lfi-header__nav-link,
  .lfi-header__nav-list a {
    display: inline-block;
    padding-block: 0;
    font-size: var(--lfi-fs-15);
  }

  /* ---- Footer desktop: 3 columnas con stagger y separadores ---- */
  .lfi-footer__inner {
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: flex-start;
    justify-content: space-between;
    min-height: var(--lfi-footer-h);
    padding: var(--lfi-footer-pt) var(--lfi-footer-pr) var(--lfi-footer-pb) var(--lfi-footer-pl);
    gap: 0;
  }
  .lfi-footer__col { flex: 0 0 auto; }
  .lfi-footer__col--info  { min-width: var(--lfi-footer-logo-w); }
  .lfi-footer__col--nav   { padding-top: var(--lfi-footer-nav-offset); }
  .lfi-footer__col--legal { padding-top: var(--lfi-footer-legal-offset); }

  /* Recupera el peso Thin del Figma y quita el padding táctil móvil. */
  .lfi-footer__info p,
  .lfi-footer__list a,
  .lfi-footer__legal-list a { font-weight: var(--lfi-weight-thin); }
  .lfi-footer__list a,
  .lfi-footer__legal-list a { display: inline-block; padding-block: 0; }

  /* Separadores verticales entre columnas (altura parcial, como el Figma). */
  .lfi-footer__col--nav::before,
  .lfi-footer__col--legal::before {
    content: "";
    position: absolute;
    top: var(--lfi-footer-divider-top);
    left: calc(-1 * var(--lfi-footer-divider-inset));
    width: 1px;
    height: var(--lfi-footer-divider-h);
    background: var(--lfi-footer-divider-color);
  }
  /* Ambos separadores arrancan al mismo Y (122 del Figma = divider-top sobre el
     borde superior de la columna) y miden lo mismo. El `top` absoluto es
     relativo al borde de la columna, NO a su contenido, así que el desplome
     (padding-top) de cada columna no debe compensarse aquí: hacerlo los
     desalineaba (nodo 3:40/3:41, ambos a y122 h178.6). */

  /* Móvil (border-top horizontal) fuera en desktop: manda el separador vertical. */
  .lfi-footer__col--nav,
  .lfi-footer__col--legal {
    border-top: 0;
    padding-left: 0;
  }
}
