/* ==========================================================================
   30 · CABECERA Y PIE
   --------------------------------------------------------------------------
   Ambos son SIEMPRE oscuros, en las dos superficies del tema. Dan continuidad
   de marca entre el mundo de marketing y el editorial, y evitan mantener dos
   versiones del menú.

   La cabecera usa `position: sticky` y no `fixed`. Con sticky el elemento
   sigue ocupando su sitio en el flujo, así que no hace falta compensar la
   altura con un padding en <body> — que es justo donde el tema anterior
   acumulaba parches. El salto a anclas lo resuelve `scroll-padding-top`
   en 10-base.css.
   ========================================================================== */

/* ==========================================================================
   CABECERA
   ========================================================================== */

.site-header {
	position: sticky;
	inset-block-start: 0;
	z-index: var(--z-header);
	border-block-end: 1px solid var(--c-border);
	background-color: var(--c-bg);
	transition: box-shadow var(--t-base);
}

/* Cristal esmerilado. Solo si el navegador lo soporta: si no, queda el
   color sólido de arriba, que ya es legible por sí mismo. */
@supports (backdrop-filter: blur(12px)) {
	.site-header {
		backdrop-filter: blur(12px);
		background-color: var(--wp--custom--dark--scrim);
	}
}

/* La clase la añade js/main.js al hacer scroll. */
.site-header.is-scrolled {
	box-shadow: var(--shadow-dark);
}

.site-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3);
	min-height: var(--header-h-mobile);
}

@media (min-width: 768px) {
	.site-header__inner {
		min-height: var(--header-h);
	}
}

/* ── Logo ──────────────────────────────────────────────────────────────── */

.site-logo,
.custom-logo-link {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
}

.site-logo img,
.custom-logo-link img {
	width: auto;
	height: 28px;
}

@media (min-width: 768px) {
	.site-logo img,
	.custom-logo-link img {
		height: 32px;
	}
}

/* ── Navegación de escritorio ──────────────────────────────────────────────
   Aparece a partir de 1024 px, no de 768: entre esos dos anchos el menú real
   —con sus emojis, sus desplegables y el selector de idioma— no cabía junto
   al logo y al CTA y se partía en dos o tres líneas. Ahí manda el cajón
   (decisión 043). Por eso estas reglas son propias de la cabecera y no usan
   .hide-mobile / .hide-desktop, que cortan en 768.
   ────────────────────────────────────────────────────────────────────────── */

.site-nav {
	flex: 1 1 auto;
	min-width: 0;
}

@media (max-width: 1023px) {
	.site-nav {
		display: none;
	}
}

/* El menú va a la derecha, junto al botón: logo a un lado, acciones al otro. */
.site-nav__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: flex-end;
	gap: var(--space-1);
	margin: 0;
	padding: 0;
	list-style: none;
}

.site-nav__list > li + li {
	margin-block-start: 0;
}

.site-nav__list li {
	position: relative;
}

/* El enlace de navegación usa --c-heading, EL MISMO alias que el del cajón
   móvil: es el mismo componente en dos anchos, no dos componentes.

   Antes llevaba --c-muted, que sobre la cabecera da 7,90:1 —cumple WCAG— pero
   se leía apagado al lado del cajón, que va en blanco a 17,16:1. Y encima aquí
   la letra es más pequeña (14px frente a 18px), así que la penalización era
   doble. El peso sube a 600 para compensar ese tamaño menor. */
/* 12px de lado y no 16: con los desplegables, el selector de idioma y el CTA,
   a 1024 px la cabecera no cabía en una línea por unos 40 px. */
.site-nav__list .menu-link {
	display: inline-flex;
	align-items: center;
	padding: var(--space-1) calc(var(--space-1) * 1.5);
	border-radius: var(--radius-button);
	color: var(--c-heading);
	font-size: var(--fs-small);
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
	transition: color var(--t-fast), background-color var(--t-fast);
}

/* El hover añade fondo, no solo cambia el color. Sin él el gesto se leería
   como un apagado: el verde de acento (6,76:1) tiene MENOS contraste que el
   blanco de partida (17,16:1), así que el color por sí solo iría en la
   dirección contraria a la que sugiere «resaltar». */
.site-nav__list .menu-link:hover,
.site-nav__list .menu-link:focus-visible {
	color: var(--c-accent);
	background-color: var(--wp--custom--dark--glass);
}

.site-nav__list .current-menu-item > .menu-link,
.site-nav__list .current-menu-ancestor > .menu-link {
	color: var(--c-accent);
	background-color: var(--wp--custom--dark--glass);
}

/* ── Botón de revelado de submenú ──────────────────────────────────────── */

/* Hereda el color del enlace al que acompaña: el chevron y su etiqueta son una
   sola cosa para quien mira, y con --c-muted quedaba más apagado que el texto
   de al lado. */
.submenu-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: var(--space-1);
	border: 0;
	border-radius: var(--radius-button);
	background: none;
	color: inherit;
	transition: color var(--t-fast), transform var(--t-fast);
}

.submenu-toggle:hover {
	color: var(--c-accent);
}

.submenu-toggle .icon {
	width: 16px;
	height: 16px;
}

.submenu-toggle[aria-expanded="true"] {
	transform: rotate(180deg);
}

/* En escritorio el submenú también se abre con el ratón, así que el botón
   sería redundante visualmente: se reduce a un chevrón junto al enlace. */
@media (min-width: 1024px) {
	.site-nav__list > li {
		display: flex;
		align-items: center;
	}

	.site-nav__list > li > .submenu-toggle {
		margin-inline-start: calc(var(--space-1) * -1);
	}
}

/* ── Submenús ──────────────────────────────────────────────────────────── */

.site-nav .sub-menu {
	position: absolute;
	inset-block-start: calc(100% + var(--space-1));
	inset-inline-start: 0;
	z-index: var(--z-header);
	min-width: 220px;
	margin: 0;
	padding: var(--space-1);
	border: 1px solid var(--c-border);
	border-radius: var(--radius-card);
	background-color: var(--c-canopy);
	box-shadow: var(--shadow-dark);
	list-style: none;

	/* Oculto por defecto, sin sacarlo del árbol de accesibilidad de golpe:
	   `visibility` permite animar y sigue siendo inalcanzable para el foco. */
	visibility: hidden;
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity var(--t-fast), transform var(--t-fast), visibility var(--t-fast);
}

@supports (backdrop-filter: blur(12px)) {
	.site-nav .sub-menu {
		backdrop-filter: blur(12px);
	}
}

.site-nav .sub-menu li + li {
	margin-block-start: 0;
}

.site-nav .sub-menu .menu-link {
	display: block;
	width: 100%;
	white-space: normal;
}

/* Se abre con ratón, con teclado (focus-within) y con el botón. */
@media (min-width: 1024px) {
	.site-nav__list > li:hover > .sub-menu,
	.site-nav__list > li:focus-within > .sub-menu,
	.site-nav__list > li > .submenu-toggle[aria-expanded="true"] + .sub-menu {
		visibility: visible;
		opacity: 1;
		transform: translateY(0);
	}

	/* Puente invisible entre el elemento padre y su submenú. Sin él, el hueco
	   de separación hace que el puntero «pierda» el menú al bajar. */
	.site-nav__list > li.menu-item-has-children::after {
		content: "";
		position: absolute;
		inset-block-start: 100%;
		inset-inline: 0;
		height: var(--space-1);
	}
}

/* ── Acciones de la cabecera ───────────────────────────────────────────── */

.site-header__actions {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	gap: var(--space-2);
}

/* ── Botón de menú móvil ───────────────────────────────────────────────── */

.nav-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 1px solid var(--c-border);
	border-radius: var(--radius-button);
	background-color: transparent;
	color: var(--c-heading);
	transition: background-color var(--t-fast), border-color var(--t-fast);
}

.nav-toggle:hover {
	background-color: var(--wp--custom--dark--glass);
	border-color: var(--c-border-strong);
}

.nav-toggle .icon {
	width: 22px;
	height: 22px;
}

/* Desde 1024 hay navegación de escritorio (ver arriba). Va después de la
   regla base para ganarle el `display`, que tiene la misma especificidad. */
@media (min-width: 1024px) {
	.nav-toggle {
		display: none;
	}
}

/* Un solo botón, dos iconos: se intercambian según aria-expanded. Así el
   estado visual y el estado anunciado no pueden desincronizarse.

   ── OJO CON LA ESPECIFICIDAD ──────────────────────────────────────────────
   El selector lleva `.nav-toggle` delante a propósito. Los iconos los pinta
   p2080_icon(), que les pone `class="icon … nav-toggle__close"`, y la regla
   `.icon { display: inline-block }` de 40-components.css tiene la MISMA
   especificidad (0,1,0) que `.nav-toggle__close`. Como el 40 se carga después,
   ganaba él y se veían la hamburguesa y la X a la vez.

   Con el ancestro delante sube a 0,2,0 y manda esta regla. Es preferible a un
   !important: el problema era de especificidad, no de prioridad. */
.nav-toggle .nav-toggle__close,
.nav-toggle[aria-expanded="true"] .nav-toggle__open {
	display: none;
}

.nav-toggle[aria-expanded="true"] .nav-toggle__close {
	display: block;
}

/* ==========================================================================
   CAJÓN MÓVIL
   ========================================================================== */

/* Mejora progresiva: el cajón solo se pliega si hay JavaScript. Sin él queda
   desplegado y navegable, en vez de depender de un botón que no funcionaría.
   La clase `js` la pone el script en línea de header.php, antes del pintado. */
.js .mobile-drawer {
	display: none;
}

.js .mobile-drawer.is-open {
	display: block;
}

.mobile-drawer {
	position: sticky;
	inset-block-start: var(--header-h-mobile);
	z-index: var(--z-drawer);
	max-height: calc(100vh - var(--header-h-mobile));
	padding: var(--space-3);
	overflow-y: auto;
	border-block-end: 1px solid var(--c-border);
	background-color: var(--c-night);
}

/* Desde 768 la cabecera ya mide su altura de escritorio, aunque el menú siga
   en el cajón: el cajón tiene que pegarse debajo de ella, no debajo de la de
   móvil. */
@media (min-width: 768px) {
	.mobile-drawer {
		inset-block-start: var(--header-h);
		max-height: calc(100vh - var(--header-h));
	}
}

/* El cajón es para todo lo que no es escritorio: desde 1024 manda .site-nav. */
@media (min-width: 1024px) {
	.mobile-drawer,
	.js .mobile-drawer.is-open {
		display: none;
	}
}

.mobile-drawer__list {
	margin: 0 0 var(--space-3);
	padding: 0;
	list-style: none;
}

.mobile-drawer__list li + li {
	margin-block-start: 0;
	border-block-start: 1px solid var(--c-border);
}

.mobile-drawer__list li {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
}

.mobile-drawer__list .menu-link {
	flex: 1 1 auto;
	padding: var(--space-2) 0;
	color: var(--c-heading);
	font-size: var(--fs-lead);
	font-weight: 500;
	text-decoration: none;
}

.mobile-drawer__list .menu-link:hover {
	color: var(--c-accent);
}

.mobile-drawer__list .submenu-toggle {
	flex: 0 0 auto;
	width: 40px;
	height: 40px;
}

.mobile-drawer__list .sub-menu {
	flex: 1 0 100%;
	margin: 0 0 var(--space-2);
	padding: 0 0 0 var(--space-2);
	border-inline-start: 2px solid var(--c-accent);
	list-style: none;
}

/* En móvil el submenú lo abre ÚNICAMENTE el botón: no hay hover que valga.
   Igual que el cajón, solo se pliega si hay JavaScript. */
.js .mobile-drawer__list .sub-menu {
	display: none;
}

.js .mobile-drawer__list .sub-menu.is-open {
	display: block;
}

.mobile-drawer__list .sub-menu li {
	border-block-start: 0;
}

.mobile-drawer__list .sub-menu .menu-link {
	padding: var(--space-1) 0;
	font-size: var(--fs-body);
	font-weight: 400;
	color: var(--c-text);
}

/* ==========================================================================
   PIE
   ========================================================================== */

.site-footer {
	margin-block-start: auto;
	padding-block: var(--space-6) var(--space-4);
	border-block-start: 1px solid var(--c-border);
}

.site-footer__top {
	display: grid;
	gap: var(--space-5);
	padding-block-end: var(--space-5);
}

@media (min-width: 768px) {
	.site-footer__top {
		grid-template-columns: minmax(0, 1.2fr) minmax(0, 2fr);
		gap: var(--space-6);
	}
}

.site-footer__logo img {
	width: auto;
	height: 32px;
}

.site-footer__tagline {
	max-width: 42ch;
	margin-block-start: var(--space-2);
	color: var(--c-muted);
	font-size: var(--fs-small);
}

/* ── Enlaces sociales ──────────────────────────────────────────────────── */

.social-links {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-1);
	margin-block-start: var(--space-3);
	padding: 0;
	list-style: none;
}

.social-links li + li {
	margin-block-start: 0;
}

.social-links__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border: 1px solid var(--c-border);
	border-radius: var(--radius-button);
	color: var(--c-muted);
	transition: color var(--t-fast), border-color var(--t-fast), background-color var(--t-fast);
}

.social-links__link:hover {
	border-color: var(--c-accent);
	background-color: var(--wp--custom--dark--glass);
	color: var(--c-accent);
}

.social-links .icon {
	width: 18px;
	height: 18px;
}

/* ── Menú del pie ──────────────────────────────────────────────────────── */

.site-footer__list {
	display: grid;
	gap: var(--space-4);
	margin: 0;
	padding: 0;
	list-style: none;
	grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr));
}

.site-footer__list li + li {
	margin-block-start: 0;
}

/* Los elementos de primer nivel con hijos funcionan como encabezado de
   columna: se pintan como título, no como enlace de lista. */
.site-footer__list > li > a {
	display: block;
	margin-block-end: var(--space-2);
	color: var(--c-heading);
	font-size: var(--fs-small);
	font-weight: 700;
	letter-spacing: 0.04em;
	text-decoration: none;
	text-transform: uppercase;
}

.site-footer__list .sub-menu {
	margin: 0;
	padding: 0;
	list-style: none;
}

.site-footer__list .sub-menu a {
	display: block;
	padding-block: 4px;
	color: var(--c-muted);
	font-size: var(--fs-small);
	text-decoration: none;
}

.site-footer__list .sub-menu a:hover {
	color: var(--c-accent);
}

/* ── Franja inferior ───────────────────────────────────────────────────── */

.site-footer__bottom {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-2);
	padding-block-start: var(--space-3);
	border-block-start: 1px solid var(--c-border);
}

.site-footer__copy {
	color: var(--c-muted);
	font-size: var(--fs-small);
}

.site-footer__legal-list {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
	margin: 0;
	padding: 0;
	list-style: none;
}

.site-footer__legal-list li + li {
	margin-block-start: 0;
}

.site-footer__legal-list a {
	color: var(--c-muted);
	font-size: var(--fs-small);
	text-decoration: none;
}

.site-footer__legal-list a:hover {
	color: var(--c-accent);
	text-decoration: underline;
}

/* ── Selector de idioma de Polylang ────────────────────────────────────────
   Polylang inserta sus elementos en el menú con la clase `.lang-item`.
   Se les da un tratamiento aparte para que no compitan con la navegación.
   ────────────────────────────────────────────────────────────────────────── */

.site-nav__list .lang-item .menu-link {
	padding-inline: var(--space-1);
	border: 1px solid var(--c-border);
	color: var(--c-muted);
	font-size: var(--fs-data);
	font-weight: 600;
	text-transform: uppercase;
}

.site-nav__list .lang-item .menu-link:hover {
	border-color: var(--c-accent);
	color: var(--c-accent);
}

/* La bandera es un <img> que Polylang mete DENTRO del título del elemento de
   menú, no un icono del tema. Por eso la regla no lleva `.site-nav__list`
   delante: tiene que valer igual en la navegación de escritorio y en el cajón
   móvil, que es donde se vio el problema.

   `10-base.css` declara `img { display: block }`, que dentro de un enlace
   partiría la línea y dejaría la bandera encima del texto. */
.lang-item .menu-link img {
	display: inline-block;
	margin-inline-end: 6px;
	vertical-align: -1px;
}
