/* M01 · Menú/header (nodo 245:1051). Barra sticky con blur. */

.menu {
  position: sticky;
  top: 0;
  z-index: 100;
  /* Translúcido + blur (frosted, Figma nodo 245:1051). El blanco ya no asoma en el
     scroll inicial porque el fondo del <body> es el color del hero (base.css). */
  background: rgba(0, 27, 38, 0.7);
  backdrop-filter: blur(20px);
  border-bottom: 0.5px solid var(--color-negro-azul);
}
.menu__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  height: var(--header-h);
}
.menu__logo { display: flex; align-items: center; height: 40px; text-decoration: none; }
.menu__logo img { width: 268px; height: 40px; object-fit: contain; }
.menu__logo-text { /* provisional ⛔ */
  color: var(--color-blanco);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: 1px;
}

/* Nav desktop */
.menu__nav { display: flex; }
.menu__list {
  display: flex;
  align-items: center;
  gap: 24px;
}
.menu__list a {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-base);
  font-weight: 500;
  font-size: 18px;
  color: var(--color-azul-20);
  text-decoration: none;
  white-space: nowrap;
}
.menu__list a:hover { color: var(--color-blanco); }
/* Flecha en items con submenú (mask del SVG, coloreada con el token). */
.menu__list .menu-item-has-children > a::after {
  content: "";
  /* Aspecto exacto del chevron (viewBox 15.83×8.50) para que no se deforme. */
  width: 15px;
  height: 8px;
  flex-shrink: 0;
  background-color: currentColor;
  -webkit-mask: url("../../assets/icons/arrow-down.svg") no-repeat center / 100% 100%;
  mask: url("../../assets/icons/arrow-down.svg") no-repeat center / 100% 100%;
}
/* Submenús (dropdown) */
.menu__list li { position: relative; }
/* El desplegable no está definido en Figma: criterio del equipo, coherente con los tokens.
   Claves del encaje:
   · El padding horizontal vive en los ENLACES, no en la caja, y la caja se desplaza esa misma
     medida a la izquierda (`left: -x`). Así el texto del submenú cae en la misma vertical que
     el del ítem padre, en vez de quedar sangrado.
   · La caja cuelga directamente del enlace (`top: 100%`). Se probó separarla hasta el borde
     inferior de la cabecera, pero alejaba demasiado el panel de su título. */
.menu__list .sub-menu {
  --sub-pad-x: 16px;
  position: absolute;
  top: 100%;
  left: calc(var(--sub-pad-x) * -1);
  min-width: 260px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 18px 0 0 0;
  background: var(--color-negro-azul);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-8px);
  transition: opacity .2s ease, transform .2s ease, visibility .2s;
}
.menu__list li:hover > .sub-menu,
.menu__list li:focus-within > .sub-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
/* `display: block` es lo que hace que el resaltado ocupe TODO el ancho del panel: por
   defecto el <a> es inline y su caja se ceñía al texto, dejando un hueco sin iluminar. */
.menu__list .sub-menu a {
  display: block;
  font-size: 16px;
  padding: 10px var(--sub-pad-x);
  border-radius: 2px;
}
.menu__list .sub-menu a:hover,
.menu__list .sub-menu a:focus-visible { background: rgba(204, 227, 237, 0.1); }

/* Buscador */
.menu__search-toggle, .menu__burger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  padding: 0;
  flex-shrink: 0;
  background: none;
  border: 0;
  color: var(--color-azul-20);
  --stroke-0: var(--color-azul-20);
}
.menu__search-toggle svg, .menu__burger svg { width: 24px; height: 24px; flex-shrink: 0; display: block; }
.menu__burger { display: none; }
.menu__movil { display: none; }
html.js .menu__search[hidden] { display: none; }
/* Con JS, el panel móvil respeta [hidden] (si no, la media query <900 lo dejaría siempre abierto). */
html.js .menu__movil[hidden] { display: none; }

/* Panel de búsqueda (nodo estado abierto): barra clara con lupa + campo + Buscar.
   No está definido en Figma cómo aparece: criterio del equipo.

   Se despliega en altura en vez de aparecer de golpe. Se anima la altura del PROPIO panel
   (el JS la mide y la fija en px durante la transición, ver initSearch en main.js).

   Se descartó la técnica de `grid-template-rows: 0fr → 1fr`: además de dimensionar la columna
   por contenido —lo que encogía la barra—, el `padding` del formulario no encoge, así que la
   fila se atascaba a la altura del padding y el cierre daba un tirón final hasta 0.

   El atributo `hidden` sigue gobernando la visibilidad real —lo quita el JS antes de abrir y
   lo repone al terminar de cerrar—, así el panel sigue fuera del árbol de accesibilidad
   mientras está cerrado y sin JS se comporta como antes. */
.menu__search { background: var(--color-azul-20); }
html.js .menu__search { overflow: hidden; }

/* La animación solo con el toggle A-000 activo y sin reduce-motion (convención del tema). */
html.js:not(.anim-off) .menu__search {
  transition: height .28s cubic-bezier(.22, .61, .36, 1);
}
.buscador {
  display: flex;
  align-items: center;
  gap: 24px;
  max-width: calc(var(--contenedor-max) + 2 * var(--contenedor-pad));
  margin-inline: auto;
  padding: 20px var(--contenedor-pad);
}
.buscador__campo {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 4px;
  border-bottom: 1px solid var(--color-negro-azul);
}
.buscador__campo:focus-within { border-bottom-color: var(--color-azul-100); }
.buscador__icono { display: inline-flex; width: 24px; height: 24px; flex-shrink: 0; color: var(--color-negro-azul); --stroke-0: var(--color-negro-azul); }
.buscador__icono svg { width: 24px; height: 24px; display: block; }
.buscador__input {
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  font-family: var(--font-base);
  font-size: 18px;
  color: var(--color-negro-azul);
}
.buscador__input:focus { outline: none; }
.buscador__input::placeholder { color: var(--color-negro-azul); opacity: 0.7; }
.buscador__submit { flex-shrink: 0; }

/* Móvil (272:816): logo + hamburguesa, nav oculto, panel desplegable. */
@media (max-width: 900px) {
  .menu__nav, .menu__search-toggle { display: none; }
  .menu__burger { display: inline-flex; }
  /* El panel se superpone al contenido en lugar de empujarlo: va en absoluto respecto a
     `.menu` (que es sticky, así que le sirve de referencia y el panel la acompaña al hacer
     scroll). Entra deslizándose de izquierda a derecha; se anima `transform`, que el navegador
     compone en la GPU y sale fluido, en vez de animar la altura, que obliga a recalcular el
     layout en cada fotograma. Sin padding superior: los ítems arrancan pegados a la barra. */
  .menu__movil {
    display: block;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 1;
    max-height: calc(100dvh - var(--header-h));
    overflow-y: auto;
    overscroll-behavior: contain;   /* al llegar al final no arrastra el scroll de la página */
    padding: 0 0 24px;
    background: var(--color-negro-azul);
    transform: translateX(-100%);
  }
  .menu__movil.is-open { transform: translateX(0); }
  html.js:not(.anim-off) .menu__movil { transition: transform .28s cubic-bezier(.22, .61, .36, 1); }

  /* Mismo aire que el desplegable de escritorio: el padding vive en el enlace, así el área
     pulsable y el resaltado ocupan todo el ancho. */
  .menu__movil-list { display: flex; flex-direction: column; gap: 2px; }
  .menu__movil-list a {
    display: block;
    padding: 12px var(--contenedor-pad);
    color: var(--color-azul-20);
    text-decoration: none;
    font-size: 18px;
  }
  .menu__movil-list a:hover,
  .menu__movil-list a:focus-visible { background: rgba(204, 227, 237, 0.1); }
  .menu__movil-list .sub-menu { display: flex; flex-direction: column; gap: 2px; padding: 0; margin: 0; }
  .menu__movil-list .sub-menu a { font-size: 16px; padding-left: calc(var(--contenedor-pad) + 16px); }
  /* Buscador dentro del menú móvil (fondo oscuro): en columna y colores claros. */
  .menu__movil .buscador { flex-direction: column; align-items: stretch; gap: 16px; max-width: none; margin: 8px 0 0; padding: 16px var(--contenedor-pad) 0; }
  .menu__movil .buscador__campo { border-bottom-color: var(--color-azul-20); }
  .menu__movil .buscador__icono { color: var(--color-azul-20); --stroke-0: var(--color-azul-20); }
  .menu__movil .buscador__input { color: var(--color-azul-20); }
  .menu__movil .buscador__input::placeholder { color: var(--color-azul-20); opacity: 0.7; }
  .menu__movil .buscador__submit { align-self: stretch; }
}
