/**
 * MENÚ MÓVIL — cajón lateral
 * ==========================================================================
 * Sustituye la navegación handheld de Storefront por debajo del punto de
 * quiebre. Arriba de ese ancho este archivo no pinta absolutamente nada:
 * todo lo visible vive dentro de la media query de abajo.
 *
 * NO TOCA header-custom.css, y header-custom.css no debe tocar esto.
 * Regla 5 del PRD: todo el CSS del header de escritorio vive allá; el menú
 * móvil es un componente aparte con su propio archivo.
 *
 * ---------------------------------------------------------------------------
 * SOBRE EL 768 ESCRITO A MANO
 *
 * La fuente de verdad del punto de quiebre es
 * Mitienda_Menu_Movil::PUNTO_QUIEBRE (inc/class-mitienda-menu-movil.php).
 * De ahí sale --mm-punto-quiebre (inyectada con wp_add_inline_style) y de
 * ahí lo lee el JS.
 *
 * Las media queries NO aceptan var(): `@media (max-width: var(--x))` no es
 * válido y el navegador descarta el bloque entero sin avisar. Así que el
 * número se escribe literal acá, y SOLO acá. Si se mueve el breakpoint hay
 * que cambiar la constante de PHP y estas dos media queries a la vez.
 *
 * ---------------------------------------------------------------------------
 * SOBRE LOS PREFIJOS mm-
 *
 * El prototipo usaba clases sueltas (.panel, .lista, .enlace, .barra). En
 * una instalación con Storefront + WooCommerce + plugins eso es una
 * colisión esperando: .panel y .lista son nombres que cualquiera usa. La
 * estructura del markup es la del prototipo v8; los nombres van prefijados.
 * ========================================================================== */

/* Tokens del componente.
   Provisionales: son los colores del prototipo v8. Cuando el sitio migre al
   sistema de tokens semánticos (pendiente 12.1 del PRD), esto es UN bloque
   que se reemplaza, no una cacería por el archivo. Por eso ninguna regla de
   abajo escribe un color literal. */
.mm-cajon,
.mm-velo,
.mm-abrir {
	--mm-fondo:       #0b0b0b;
	--mm-panel:       #111111;
	--mm-tinta:       #ede9e4;
	--mm-tinta-tenue: #8a8681;
	--mm-linea:       #262626;
	--mm-velo-color:  rgba( 0, 0, 0, .6 );
	--mm-display:     "Times New Roman", Times, serif;
	--mm-util:        ui-sans-serif, -apple-system, "Helvetica Neue", Arial, sans-serif;
	--mm-dur:         .42s;
	--mm-ease:        cubic-bezier( .25, .46, .45, .94 );

	/* ---------- TIPOGRAFÍA ----------
	   Los valores son los del prototipo v8 y siguen siendo el default. Están
	   como variables porque los controla el Personalizador (Apariencia >
	   Personalizar > "Menú móvil - Tipografía"): Mitienda_Menu_Movil::
	   estilos_personalizador() reescribe SOLO las que el usuario cambió, con
	   wp_add_inline_style sobre este mismo handle.

	   Por eso la sobrescritura del PHP apunta a esta misma lista de
	   selectores y no a :root: estas declaraciones están puestas en los
	   elementos, así que un :root con la misma variable perdería siempre.
	   Al repetir el selector gana el que llega después, que es el inline.

	   Las dos familias se dejan como stacks literales, no como
	   var(--fuente-*) de tipografia.css: el default del menú es el del
	   prototipo. El Personalizador sí ofrece las cinco familias del sistema
	   como opción, y ahí entra el token. */
	--mm-ft-enlace:       22px;
	--mm-ls-enlace:       .01em;
	--mm-tt-enlace:       none;
	--mm-ft-categoria:    12px;
	--mm-ft-rotulo:       10px;
	--mm-ft-vende-rotulo: 11px;  /* título del bloque Vende y su botón */
	--mm-ft-vende-texto:  13px;

	/* ---------- ESCALA DE APILAMIENTO ----------
	   Estos tres números NO son los del prototipo v8 (30/40/50), y el
	   motivo importa: en el prototipo la barra superior no competía con
	   nada. Acá sí.

	   Lo que ya hay en el sitio, de menor a mayor:

	     100    .site-header          (sticky, CON FONDO OPACO)  header-custom.css
	     900    .mitienda-volver-arriba                          site-custom.css
	     9996   .mitienda-news-esquina                           site-custom.css
	     9997   .mitienda-news-aviso                             site-custom.css
	     9998   .renta-burbuja                                   site-custom.css
	     9999   .renta-aviso                                     site-custom.css
	     99999  .mitienda-news-modal                             site-custom.css

	   El header en 100 con fondo opaco es el que manda: cualquier valor por
	   debajo deja la hamburguesa DIBUJADA PERO TAPADA. No desaparece del
	   DOM, no da error, simplemente el header se pinta encima y además se
	   come el clic. Es exactamente el síntoma "el menú no aparece a 768px".

	   Y no alcanza con superar 100: si el cajón quedara debajo de 9998, la
	   burbuja de renta flotaría sobre el menú abierto.

	   Por eso van arriba de todo el grupo flotante. La única excepción
	   deliberada es el modal del newsletter (99999), que es bloqueante y
	   debe seguir ganando.

	   El velo va ARRIBA de la hamburguesa a propósito: con el cajón abierto
	   el botón queda tapado, y cerrar se hace con la X o tocando el velo. */
	--mm-z-abrir: 10000;
	--mm-z-velo:  10001;
	--mm-z-cajon: 10002;
}

/* --------------------------------------------------------------------------
   FUERA DE MÓVIL: nada existe.

   El markup se imprime SIEMPRE, en todos los anchos (ver el comentario de
   render() en la clase PHP: con LiteSpeed cacheando páginas, renderizar
   según el ancho o el user agent significa servirle a un escritorio la
   copia cacheada de un móvil). Se apaga acá, con CSS, que sí es inmune a
   la caché de página.

   display:none y no visibility/opacity: así el cajón tampoco queda en el
   árbol de accesibilidad ni en el orden de tabulación en escritorio.
   -------------------------------------------------------------------------- */
.mm-abrir,
.mm-velo,
.mm-cajon {
	display: none;
}

/* ==========================================================================
   MÓVIL — 768px hacia abajo.
   El 768 sale de Mitienda_Menu_Movil::PUNTO_QUIEBRE. Ver la cabecera.
   ========================================================================== */
@media ( max-width: 768px ) {

	/* ---------- BOTÓN HAMBURGUESA ----------
	   Va fijo arriba a la izquierda, no dentro del header.

	   Motivo: el markup entero se imprime en wp_footer para no pelear con
	   la estructura de .col-full de Storefront (dos .col-full anidados ya
	   dieron problemas, trampa 5 del PRD). Desde el footer, la única forma
	   de que el botón aparezca arriba es sacarlo del flujo.

	   El alto se toma de --mitienda-header-alto, que publica
	   js/header-alto.js, así queda centrado contra la barra real en vez de
	   contra un número adivinado. El respaldo de 57px es el alto del
	   prototipo, para el instante antes de que corra el script.

	   OJO CON EL max() — NO SIMPLIFICAR A var() A SECAS.

	   En la portada el header arranca OCULTO (opacity/visibility, ver
	   style.css) y recién se muestra cuando el hero termina de pasar. Si en
	   ese estado la medición del header llega en 0 (o el script no llegó a
	   correr y algo más dejó la variable en 0px), el botón queda de alto
	   cero: sigue en el DOM, no tira ningún error, y en pantalla no hay
	   nada que tocar. El síntoma exacto es "arriba de todo no se ve el
	   menú, aparece recién al scrollear", porque al hacerse visible el
	   header vuelve a medir. El max() le pone un piso: 56px, el mismo del
	   ancho, que ya es un blanco táctil correcto.

	   Y EL VELO DE FONDO: el botón se dibuja encima del video del hero, que
	   cambia de brillo cuadro a cuadro. Sin nada detrás, el icono claro se
	   pierde sobre un cuadro claro. El degradado es negro y se desvanece a
	   transparente, así que sobre el header (que es casi negro) no se nota,
	   y sobre el video da el contraste que falta. La sombra del icono hace
	   el resto. */
	/* EN EL FLUJO DEL HEADER, NO PEGADO A LA VENTANA (cambio de 2.73.2).
	   Estaba en position:fixed contra la esquina superior izquierda de la
	   pantalla. Como el header envuelve en dos renglones en móvil y el
	   carrito cae en el segundo, la hamburguesa quedaba arriba de todo y
	   el carrito más abajo: los dos únicos controles de la barra, cada uno
	   por su lado. Ahora el botón se imprime dentro del header (ver
	   Mitienda_Menu_Movil::boton()) y lo acomoda el mismo `order` que al
	   carrito y al buscador, así que viajan juntos pase lo que pase con el
	   envoltorio. */
	.mm-abrir {
		position: relative;
		z-index: var( --mm-z-abrir );
		order: 0;
		flex: 0 0 auto;
		align-self: center;
		display: grid;
		place-items: center;
		width: 44px;
		height: 44px;
		color: var( --mm-tinta );
		background: radial-gradient(
			circle at 28px 28px,
			rgba( 0, 0, 0, .45 ),
			rgba( 0, 0, 0, 0 ) 72%
		);
		border: 0;
		padding: 0;
		cursor: pointer;
	}

	.mm-abrir .mm-icono {
		width: 20px;
		height: 20px;
		display: block;
		stroke: currentColor;
		fill: none;
		stroke-width: 1.1;
		filter: drop-shadow( 0 1px 3px rgba( 0, 0, 0, .75 ) );
	}

	/* ---------- LA NAVEGACIÓN QUE EL CAJÓN SUSTITUYE ----------
	   Abajo del punto de quiebre el cajón es LA navegación. Todo lo que
	   navegaba antes se apaga acá.

	   Son dos cosas distintas y conviene no confundirlas:

	   a) La barra de pestañas del tema (.main-navigation). Storefront la
	      esconde sola en pantallas chicas -- pone display:none sobre
	      ul.nav-menu y saca la hamburguesa en su lugar -- pero
	      header-custom.css le pone display:flex SIN media query, porque el
	      rediseño de pestañas es anterior al cajón y en su momento la barra
	      tenía que seguir sirviendo en móvil (por eso a 900px se le hizo
	      envolver en varias filas, ver header-custom.css).

	      Resultado hasta ahora: abajo de 768px se veían las dos
	      navegaciones, la barra de pestañas envuelta Y la hamburguesa. No
	      era intencional; era el rediseño del header pisando una regla de
	      Storefront que nadie volvió a mirar cuando entró el cajón.

	      Lo que NO se apaga: carrito, buscador y selector de idioma. No son
	      navegación de menú y el cajón no los reemplaza. En el markup de
	      Storefront son hermanos de .main-navigation, no hijos, así que
	      esconder el <nav> no los toca.

	   b) La navegación handheld del propio Storefront. Sin esto quedan dos
	      hamburguesas, la de Storefront y la nuestra.

	      Se apaga por CSS Y por remove_action() en PHP (ver
	      desactivar_handheld() en la clase). Las dos cosas a propósito: el
	      remove_action es el que limpia de verdad, pero depende de que el
	      callback esté enganchado con el nombre que esperamos, y Storefront
	      no está en disco en este equipo para verificarlo. El CSS es el
	      respaldo que funciona igual si el hook cambió de nombre en otra
	      versión del padre.

	   La .storefront-handheld-footer-bar TAMBIÉN se apaga -- ver su propio
	   bloque más abajo. Hasta la 2.73.0 no se tocaba, a propósito, porque
	   es funcionalidad distinta del menú (carrito, buscador, mi cuenta).

	   SOBRE EL !important Y SOBRE ESTAR ACÁ Y NO EN header-custom.css:

	   Los dos archivos se encolan en prioridad 9999 y este va primero (la
	   clase engancha su add_action durante el require, antes de que
	   functions.php llegue a enganchar el del header), así que a igual
	   especificidad gana header-custom. El !important es lo que lo resuelve.

	   Y va acá, rompiendo la regla de "todo el CSS del header en
	   header-custom.css", por lo mismo que ya estaba acá el bloque de
	   Storefront: apagar la navegación vieja es parte de encender el cajón.
	   Separarlos significa que borrar el componente deja el sitio sin
	   ninguna navegación abajo de 768px. Queda un puntero en
	   header-custom.css para quien esté depurando el header. */
	.site-header .main-navigation,
	#masthead.site-header .main-navigation,
	.site-header button.menu-toggle,
	.site-header .menu-toggle,
	.storefront-primary-navigation .menu-toggle,
	.main-navigation .handheld-navigation,
	.site-header .handheld-navigation {
		display: none !important;
	}

	/* ---------- BARRA INFERIOR DE STOREFRONT ----------
	   La barra fija al pie de la pantalla en móvil, con Mi cuenta, Buscar
	   y Carrito. NO sale de Apariencia -> Menús: la imprime el tema padre,
	   así que borrarla de los menús no la apaga. De ahí que haga falta
	   esto.

	   Se apaga porque este sitio no tiene cuenta de cliente -- está
	   desactivada por completo, la renta va por sesión --, así que uno de
	   sus tres accesos lleva a una pantalla que no debería existir, y el
	   cajón lateral ya cubre la navegación.

	   Va en su propio bloque, separada de la navegación vieja de acá
	   arriba, justamente porque son decisiones distintas: quien mañana
	   quiera volver a encenderla tiene que poder hacerlo sin tocar lo que
	   apaga la hamburguesa duplicada.

	   También se quita por PHP, en
	   Mitienda_Menu_Movil::desactivar_barra_inferior(). Esto es el
	   respaldo: si el padre cambia el nombre o la prioridad del callback,
	   el remove_action puede fallar en silencio y el CSS se hace cargo
	   igual. */
	.storefront-handheld-footer-bar {
		display: none !important;
	}

	/* ---------- VELO ---------- */
	.mm-velo {
		position: fixed;
		inset: 0;
		z-index: var( --mm-z-velo );
		display: block;
		background: var( --mm-velo-color );
		opacity: 0;
		pointer-events: none;
		transition: opacity var( --mm-dur ) var( --mm-ease );
	}

	.mm-velo.mm-abierto {
		opacity: 1;
		pointer-events: auto;
	}

	/* ---------- CAJÓN ---------- */
	.mm-cajon {
		position: fixed;
		top: 0;
		left: 0;
		bottom: 0;
		z-index: var( --mm-z-cajon );
		width: min( 86vw, 380px );
		display: flex;
		flex-direction: column;
		overflow: hidden;
		background: var( --mm-panel );
		border-right: 1px solid var( --mm-linea );
		color: var( --mm-tinta );
		font-family: var( --mm-util );
		-webkit-font-smoothing: antialiased;
		transform: translateX( -100% );
		transition: transform var( --mm-dur ) var( --mm-ease );
	}

	.mm-cajon.mm-abierto {
		transform: translateX( 0 );
	}

	/* ---------- RESET DE <a> Y <button> ----------
	   OJO CON EL :where() — no es adorno, es lo único que hace que esto
	   funcione. No sacarlo.

	   Estos dos bloques son un RESET: solo tienen que borrar los estilos que
	   trae el navegador, y perder contra cualquier regla del componente.

	   Escrito como ".mm-cajon button" la especificidad es (0,1,1), y
	   ".mm-enlace" es (0,1,0). O sea que el reset le GANA a la regla que
	   define el aspecto del item. Consecuencia exacta:

	     font: inherit  →  se come font-family y font-size de .mm-enlace, y
	                       el item de acordeón sale con la tipográfica de
	                       sistema en vez de la Times de 22px
	     padding: 0     →  se come el padding 19px 22px, y el item queda
	                       pegado al borde y más bajo que sus vecinos

	   Se ve justo cuando un item de nivel 1 pasa a tener hijos, porque ahí
	   deja de ser <a> y pasa a ser <button>: el de al lado sigue siendo un
	   enlace y conserva todo, así que los dos quedan distintos aunque el
	   markup diga que son hermanos.

	   En el prototipo v8 no pasaba: ahí el reset era "button {...}", (0,0,1),
	   que pierde contra .enlace. Al prefijar las clases se le antepuso
	   .mm-cajon y sin querer se le dio ventaja.

	   :where() aporta 0 a la especificidad, así que ".mm-cajon" queda solo
	   como filtro de alcance y el par vuelve a valer (0,0,1): sigue acotado
	   al cajón, y vuelve a perder contra .mm-enlace, que es lo que se
	   quiere. */
	:where( .mm-cajon ) a {
		color: inherit;
		text-decoration: none;
	}

	:where( .mm-cajon ) button {
		font: inherit;
		color: inherit;
		background: none;
		border: 0;
		padding: 0;
		cursor: pointer;
	}

	.mm-cajon :focus-visible,
	.mm-abrir:focus-visible {
		outline: 1px solid var( --mm-tinta );
		outline-offset: 3px;
	}

	.mm-cajon__tope {
		display: flex;
		align-items: center;
		justify-content: space-between;
		flex: none;
		min-height: 57px;
		padding: 16px 22px;
		border-bottom: 1px solid var( --mm-linea );
	}

	.mm-cajon__etiqueta {
		font-size: var( --mm-ft-rotulo );
		letter-spacing: .22em;
		text-transform: uppercase;
		color: var( --mm-tinta-tenue );
	}

	.mm-cajon__tope .mm-icono {
		width: 20px;
		height: 20px;
		display: block;
		stroke: currentColor;
		fill: none;
		stroke-width: 1.1;
	}

	/* ---------- PANELES DESLIZANTES ----------
	   Los paneles son HERMANOS, no están anidados: cada uno ocupa el
	   contenedor entero y entra desde la derecha. Anidarlos obligaría a
	   componer transformaciones y a que el padre supiera el alto del hijo.

	   overflow:hidden en el cuerpo es lo que recorta el panel que está
	   esperando afuera. Es también el origen del bug del foco: ver
	   enfocarSinDesplazar() en js/menu-movil.js. */
	.mm-cajon__cuerpo {
		position: relative;
		flex: 1;
		overflow: hidden;
		overscroll-behavior: contain;
	}

	.mm-panel {
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		display: flex;
		flex-direction: column;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
		background: var( --mm-panel );
		transform: translateX( 100% );
		pointer-events: none;
		transition: transform var( --mm-dur ) var( --mm-ease );
	}

	.mm-panel--raiz,
	.mm-panel.mm-activo {
		transform: translateX( 0 );
		pointer-events: auto;
	}

	/* ---------- LISTAS ---------- */
	.mm-lista {
		list-style: none;
		margin: 0;
		padding: 8px 0;
	}

	.mm-lista > li {
		border-bottom: 1px solid var( --mm-linea );
	}

	.mm-lista > li:last-child {
		border-bottom: 0;
	}

	.mm-enlace {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 12px;
		width: 100%;
		padding: 19px 22px;
		font-family: var( --mm-display );
		font-size: var( --mm-ft-enlace );
		letter-spacing: var( --mm-ls-enlace );
		text-transform: var( --mm-tt-enlace );
		text-align: left;
		transition: color .25s;
	}

	.mm-enlace:hover {
		color: #fff;
	}

	.mm-flecha {
		width: 13px;
		height: 13px;
		flex: none;
		stroke: currentColor;
		fill: none;
		stroke-width: 1.3;
		opacity: .5;
	}

	.mm-flecha--abajo {
		transition: transform var( --mm-dur ) var( --mm-ease ), opacity .25s;
	}

	li[data-abierto="true"] > .mm-enlace > .mm-flecha--abajo {
		transform: rotate( 180deg );
		opacity: 1;
	}

	.mm-volver {
		display: flex;
		align-items: center;
		gap: 10px;
		width: 100%;
		flex: none;
		padding: 16px 22px;
		border-bottom: 1px solid var( --mm-linea );
		font-size: var( --mm-ft-rotulo );
		letter-spacing: .22em;
		text-transform: uppercase;
		color: var( --mm-tinta-tenue );
	}

	.mm-volver:hover {
		color: var( --mm-tinta );
	}

	.mm-volver svg {
		width: 13px;
		height: 13px;
		flex: none;
		stroke: currentColor;
		fill: none;
		stroke-width: 1.3;
	}

	/* ---------- ACORDEÓN ----------
	   0fr → 1fr, y NO max-height.

	   Con max-height hay que elegir un número mayor que el contenido: si se
	   queda corto recorta, si se pasa la animación arranca con un tramo
	   muerto. Y en acordeones anidados el padre no puede saber cuánto creció
	   el hijo, así que hay que medir en JS y volver a medir en cada resize.
	   grid-template-rows anima contra el alto real y no necesita saber nada.
	   -------------------------------------------------------------------- */
	.mm-pliegue {
		display: grid;
		grid-template-rows: 0fr;
		transition: grid-template-rows var( --mm-dur ) var( --mm-ease );
	}

	li[data-abierto="true"] > .mm-pliegue {
		grid-template-rows: 1fr;
	}

	/* min-height:0 es obligatorio: sin él el hijo del grid se niega a
	   achicarse por debajo de su contenido y el pliegue nunca cierra. */
	.mm-pliegue > .mm-pliegue__interior {
		overflow: hidden;
		min-height: 0;
	}

	.mm-categorias {
		list-style: none;
		margin: 0;
		padding: 2px 0 12px;
	}

	.mm-categorias .mm-enlace {
		font-family: var( --mm-util );
		font-size: var( --mm-ft-categoria );
		letter-spacing: .14em;
		text-transform: uppercase;
		color: var( --mm-tinta-tenue );
		padding: 10px 22px 10px 38px;
	}

	.mm-categorias .mm-enlace:hover {
		color: var( --mm-tinta );
	}

	/* ---------- VENDE ----------
	   Contenido dentro de un acordeón del panel raíz. Es el único item del
	   cajón que no es navegación: no lleva a ningún lado, muestra un texto.

	   El acordeón en sí no necesita nada acá: usa .mm-pliegue tal cual, y el
	   JS lo maneja por delegación sobre [data-mm-pliegue]. Esto es solo el
	   contenido de adentro.

	   La sangría de 22px es la misma del resto de los enlaces del cajón;
	   .mm-categorias, que puede aparecer abajo si la pestaña tiene destino
	   configurado, trae la suya propia de 38px y queda indentada respecto
	   del texto, que es lo correcto: es un enlace, no parte del párrafo. */
	.mm-vende {
		padding: 2px 22px 16px;
	}

	/* Tipografía de utilidad, no la display de los enlaces: es un bloque de
	   lectura, y a 22px serif un párrafo entero ocuparía media pantalla. */
	.mm-vende__titulo {
		margin: 0 0 8px;
		font-family: var( --mm-util );
		font-size: var( --mm-ft-vende-rotulo );
		letter-spacing: .18em;
		text-transform: uppercase;
		color: var( --mm-tinta );
	}

	.mm-vende__texto {
		font-family: var( --mm-util );
		font-size: var( --mm-ft-vende-texto );
		line-height: 1.6;
		letter-spacing: .01em;
		text-transform: none;
		color: var( --mm-tinta-tenue );
	}

	.mm-vende__texto p {
		margin: 0 0 8px;
	}

	.mm-vende__texto p:last-child {
		margin-bottom: 0;
	}

	.mm-vende__texto a {
		color: var( --mm-tinta );
		text-decoration: underline;
	}

	/* Bloque sólido y ancho completo: es la acción del panel y tiene que
	   distinguirse de los enlaces del texto. Alto cómodo para el pulgar
	   (44px de área táctil, igual que los íconos del pie). */
	.mm-vende__boton {
		display: block;
		margin-top: 14px;
		padding: 13px 16px;
		background: var( --mm-tinta );
		color: var( --mm-fondo );
		font-family: var( --mm-util );
		font-size: var( --mm-ft-vende-rotulo );
		letter-spacing: .18em;
		text-transform: uppercase;
		text-align: center;
		transition: opacity .25s;
	}

	.mm-vende__boton:hover,
	.mm-vende__boton:focus-visible {
		color: var( --mm-fondo );
		opacity: .85;
	}

	/* ---------- TÉRMINOS ----------
	   Acordeón del panel raíz con las cuatro partes de los Términos. La
	   mecánica es la de cualquier otro pliegue del cajón y la lista usa
	   .mm-categorias tal cual: lo único que cambia acá es el tratamiento
	   del texto.

	   POR QUÉ NO VAN EN VERSALITAS COMO LAS CATEGORÍAS: una categoría es
	   una palabra ("TOPS", "CALZADO") y en mayúsculas con .14em de
	   separación se lee de un vistazo. Estos son títulos de frase --
	   "Términos y condiciones de venta" -- y con el mismo tratamiento
	   ocupan dos renglones cada uno, con las letras tan separadas que hay
	   que deletrearlos. Se dejan en caja normal y con la separación
	   mínima. El "Ver todo" del final queda igual que el resto por la
	   misma razón: es parte de la misma lista. */
	/* Se aplica por la clase que el propio WordPress le pone al item del
	   menú cuando se escribe `menu-terminos` en su campo "Clases CSS" --
	   la misma marca que usa el desplegable de escritorio. Antes iba por
	   .mm-terminos-item, que era de un acordeón propio que ya no existe:
	   ahora el item cae en el acordeón genérico como cualquier otro con
	   submenú. */
	.menu-terminos .mm-categorias .mm-enlace,
	.mm-terminos-item .mm-categorias .mm-enlace {
		text-transform: none;
		letter-spacing: .04em;
		line-height: 1.4;
	}

	/* ---------- SECCIÓN ACTIVA ----------
	   Las clases salen de WordPress (current-menu-item / -ancestor /
	   -parent), traducidas a mm-actual / mm-ancestro en el render.

	   El item exacto lleva color pleno + línea a la izquierda; los ancestros
	   solo color pleno. La diferencia importa: en un panel abierto
	   automáticamente hay varios items resaltados a la vez, y sin jerarquía
	   visual no se distingue "acá estás" de "por acá entraste". */
	.mm-enlace.mm-ancestro {
		color: var( --mm-tinta );
	}

	.mm-enlace.mm-actual {
		color: var( --mm-tinta );
		box-shadow: inset 2px 0 0 0 currentColor;
	}

	/* La atenuada de las categorías necesita que se le gane explícito. */
	.mm-categorias .mm-enlace.mm-actual,
	.mm-categorias .mm-enlace.mm-ancestro {
		color: var( --mm-tinta );
	}

	/* ---------- PIE: REDES ----------
	   Sale de la ubicación "Menú móvil — pie (redes)". Los enlaces cuyo
	   dominio está en el mapa REDES de la clase PHP salen como ícono; el
	   resto, como texto (ver pie() e icono_red()).

	   El prototipo traía además "Mi cuenta", y no se porta: /mi-cuenta/ está
	   cerrada a propósito y redirige al archivo (PRD 3.2), así que el enlace
	   llevaría a un rebote.

	   margin-top:auto lo pega abajo del panel raíz, que es flex en columna.
	   Con pocos items del menú el pie queda al fondo del cajón, no colgando
	   del último enlace. */
	.mm-cajon__pie {
		margin-top: auto;
		border-top: 1px solid var( --mm-linea );
		padding: 14px 16px 18px;
		display: flex;
		flex-wrap: wrap;
		align-items: center;
		gap: 4px;
		color: var( --mm-tinta-tenue );
	}

	/* 44px es el área táctil mínima recomendada. El ícono se dibuja a 20px y
	   el resto es aire alrededor: se ve chico y discreto, pero el blanco al
	   que hay que apuntar con el pulgar es el cuadrado entero.

	   Por eso el padding del contenedor bajó a 16px: los 22px del resto del
	   cajón más el aire propio del botón dejaban los íconos demasiado
	   adentro. Ópticamente quedan alineados con los enlaces de arriba. */
	.mm-cajon__pie-icono {
		display: grid;
		place-items: center;
		width: 44px;
		height: 44px;
		color: var( --mm-tinta-tenue );
		transition: color .25s;
	}

	.mm-cajon__pie-icono svg {
		width: 20px;
		height: 20px;
		display: block;
	}

	/* Los SVG vienen con stroke="currentColor" y sin relleno, así que basta
	   con cambiar el color del enlace para que el ícono lo siga. */
	.mm-cajon__pie-icono:hover,
	.mm-cajon__pie-icono:focus-visible {
		color: var( --mm-tinta );
	}

	/* Respaldo para una URL que no está en el mapa REDES. Conserva el
	   tratamiento tipográfico del pie del prototipo. */
	.mm-cajon__pie-texto {
		padding: 0 8px;
		font-size: var( --mm-ft-rotulo );
		letter-spacing: .18em;
		text-transform: uppercase;
		line-height: 44px;
		color: var( --mm-tinta-tenue );
		transition: color .25s;
	}

	.mm-cajon__pie-texto:hover {
		color: var( --mm-tinta );
	}

	/* ---------- APERTURA SIN ANIMACIÓN ----------
	   La usa el JS al abrir el menú sobre una sección activa: el panel y el
	   acordeón tienen que aparecer YA colocados. Sin esto, el usuario abre
	   el menú y ve la interfaz animarse sola, que se lee como un fallo.

	   Va al final y con !important porque tiene que ganarle a las tres
	   transiciones declaradas arriba durante ese único cuadro. */
	.mm-cajon.mm-sin-transicion,
	.mm-cajon.mm-sin-transicion .mm-panel,
	.mm-cajon.mm-sin-transicion .mm-pliegue,
	.mm-cajon.mm-sin-transicion .mm-flecha--abajo {
		transition: none !important;
	}

	/* ---------- MOVIMIENTO REDUCIDO ---------- */
	@media ( prefers-reduced-motion: reduce ) {
		.mm-cajon,
		.mm-velo,
		.mm-panel,
		.mm-pliegue,
		.mm-flecha--abajo {
			transition-duration: .01ms;
		}
	}
}
