/**
 * Componentes: piezas de interfaz reutilizables en más de una
 * plantilla (botones, etiquetas, menú, tarjetas, listas, insignias).
 * No incluye la composición particular de cada sección del home,
 * eso vive en sections.css.
 *
 * @package Induscore
 */

/* ---------------------------------------------------
   Etiqueta: antetítulo pequeño en mayúsculas
   --------------------------------------------------- */
.etiqueta {
	display: inline-flex;
	align-items: center;
	gap: var(--e-10);
	margin-bottom: var(--e-16);
	/* Texto naranjo sobre fondo claro: variante de texto (AA); la
	   línea ::before, que es gráfica, sigue en el naranjo de marca. */
	color: var(--color-naranjo-texto);
	font-size: var(--fs-sm);
	font-weight: var(--peso-negrita);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-xl);
}

.etiqueta::before {
	content: '';
	display: inline-block;
	width: var(--e-24);
	height: var(--e-2);
	background-color: var(--color-naranjo);
}

/* Variante para usar la etiqueta sobre fondos oscuros */
.etiqueta--clara {
	color: var(--color-blanco);
}

/* ---------------------------------------------------
   Animaciones al hacer scroll ("reveal on scroll")
   Sistema data-animate (ver assets/js/animaciones.js): un <script>
   inline en el <head> de header.php agrega la clase "js" a <html>
   antes de que cargue el CSS (para que no haya parpadeo de contenido
   visible-y-luego-oculto); un único IntersectionObserver agrega
   "animado" a cada [data-animate] la primera vez que entra en
   pantalla (umbral 0.15), una sola vez. Todo el bloque vive dentro de
   @media (prefers-reduced-motion: no-preference): sin JavaScript, o
   con esa preferencia activa, el estado oculto inicial nunca se
   aplica y el contenido es visible de entrada. Solo transform/opacity
   (y clip-path en "reveal").
   --------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
	html.js [data-animate] {
		opacity: 0;
		transition: opacity 0.6s ease, transform 0.6s ease;
	}

	html.js [data-animate="fade-up"] {
		transform: translateY(var(--e-24));
	}

	html.js [data-animate="reveal"] {
		opacity: 1;
		clip-path: inset(0 100% 0 0);
		transition: clip-path 0.7s ease;
	}

	html.js [data-animate].animado {
		opacity: 1;
		transform: none;
	}

	html.js [data-animate="reveal"].animado {
		clip-path: inset(0 0 0 0);
	}

	/* Cascada: cada hijo directo de un [data-animate-stagger] recibe
	   un desfase de 80ms según su posición (--i, asignada por JS). */
	html.js [data-animate-stagger] > [data-animate] {
		transition-delay: calc(var(--i, 0) * 80ms);
	}

	/* El sello naranjo entra después de que el revelado de la imagen
	   que acompaña ya arrancó (0.35s, a medio camino de ese 0.7s). */
	html.js .seccion-dividida__media > [data-animate="fade-up"] {
		transition-delay: 0.35s;
	}

	/* La línea de la etiqueta crece de 0 a su ancho junto con el
	   resto del texto de su sección (hereda el mismo desfase --i que
	   su contenedor [data-animate-stagger], si tiene uno). */
	html.js .etiqueta[data-animate]::before {
		transform: scaleX(0);
		transform-origin: left;
		transition: transform 0.6s ease;
		transition-delay: calc(var(--i, 0) * 80ms);
	}

	html.js .etiqueta[data-animate].animado::before {
		transform: scaleX(1);
	}
}

/* ---------------------------------------------------
   Botones
   Relleno deslizante: un ::before cubre el botón entero y crece con
   transform (nunca width) desde el borde izquierdo. Cada variante
   solo cambia el color del relleno y el color de texto al pasar el
   mouse; el mecanismo (duración, curva, origen) es el mismo para
   todas para que el gesto se sienta consistente en todo el sitio.
   Regla de contraste: sobre cualquier fondo naranjo el texto va en
   azul oscuro (nunca blanco); el botón naranjo pasa en hover/foco a
   var(--color-naranjo-hover), con el mismo texto azul oscuro.
   --------------------------------------------------- */
.boton {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	display: inline-block;
	padding: var(--e-14) var(--e-28);
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
	font-weight: var(--peso-semi);
	font-size: var(--fs-md);
	text-align: center;
	border: none;
	cursor: pointer;
	transition: color 0.35s ease;
	/* Sin bordes redondeados: decisión del sistema de diseño. */
	border-radius: var(--radio-base);
}

.boton::before {
	content: '';
	position: absolute;
	inset: 0;
	z-index: -1;
	background-color: var(--color-naranjo-hover);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform 0.35s ease;
}

@media (hover: hover) {
	.boton:hover {
		color: var(--color-azul-oscuro);
	}

	.boton:hover::before {
		transform: scaleX(1);
	}
}

.boton:focus-visible {
	color: var(--color-azul-oscuro);
}

.boton:focus-visible::before {
	transform: scaleX(1);
}

.boton--secundario {
	background-color: transparent;
	color: var(--color-azul-oscuro);
	border: 1px solid var(--color-azul-oscuro);
}

.boton--secundario::before {
	background-color: var(--color-azul-oscuro);
}

@media (hover: hover) {
	.boton--secundario:hover {
		color: var(--color-blanco);
	}
}

.boton--secundario:focus-visible {
	color: var(--color-blanco);
}

.boton--oscuro {
	background-color: var(--color-azul-oscuro);
	color: var(--color-blanco);
}

/* Al pasar el mouse se rellena de naranjo: el texto cambia a azul
   oscuro (el blanco no tiene contraste sobre naranjo). */
.boton--oscuro::before {
	background-color: var(--color-naranjo);
}

@media (hover: hover) {
	.boton--oscuro:hover {
		color: var(--color-azul-oscuro);
	}
}

.boton--oscuro:focus-visible {
	color: var(--color-azul-oscuro);
}

.boton--outline-blanco {
	background-color: transparent;
	color: var(--color-blanco);
	border: 1px solid var(--overlay-blanco-50);
}

.boton--outline-blanco::before {
	background-color: var(--color-blanco);
}

@media (hover: hover) {
	.boton--outline-blanco:hover {
		color: var(--color-azul-oscuro);
		border-color: var(--color-blanco);
	}
}

.boton--outline-blanco:focus-visible {
	color: var(--color-azul-oscuro);
	border-color: var(--color-blanco);
}

/* Variante suave: fondo y borde tenues en reposo, sin el relleno
   deslizante de .boton (se desactiva su ::before), solo una transición
   directa de fondo a var(--color-naranjo). La usan únicamente el botón
   Cotizar del header y el botón de la franja superior del footer. */
.boton--suave {
	background-color: var(--naranjo-suave);
	border: 1px solid var(--naranjo-borde);
	color: var(--color-azul-oscuro);
	transition: background-color 0.3s ease;
}

.boton--suave::before {
	display: none;
}

.boton--suave:hover,
.boton--suave:focus-visible {
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
}

@media (prefers-reduced-motion: reduce) {
	.boton--suave {
		transition: none;
	}
}

/* min-height asegura 44px de alto también en esta variante compacta
   (el botón Cotizar del header), sin cambiar el padding existente. */
.boton--pequeno {
	padding: var(--e-10) var(--e-20);
	min-height: var(--e-44);
	font-size: var(--fs-base);
}

@media (prefers-reduced-motion: reduce) {
	.boton,
	.boton::before {
		transition: none;
	}
}

/* ---------------------------------------------------
   Encabezado principal del sitio
   Tres grupos con espaciado equilibrado dentro del contenedor de
   1280px: logo | panel (menú + botón, con el selector a su derecha)
   | utilidades (buscar, cuenta, carrito, hamburguesa en móvil).
   --------------------------------------------------- */
.encabezado {
	background-color: var(--color-blanco);
	border-bottom: var(--linea-divisoria);
	position: relative;
	z-index: var(--z-header);
	box-shadow: 0 0 0 transparent;
	transition: box-shadow 0.3s ease;
	/* Tipografía exclusiva del header (Space Grotesk 500, cargada en
	   inc/enqueue.php); el resto del tema sigue usando --fuente-base.
	   Se hereda a todos los descendientes (menú, botones, selector,
	   buscador) porque font-family es una propiedad heredable. */
	font-family: var(--fuente-header);
}

/* Línea superior de 3px: degradado de marca que se desplaza muy
   lento (detalle siempre presente, no ligado a ninguna interacción). */
.encabezado::before {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 3px;
	background: linear-gradient(90deg, var(--color-naranjo), var(--color-azul-oscuro), var(--color-naranjo));
	background-size: 200% 100%;
	animation: induscore-linea-superior 6s linear infinite;
}

@keyframes induscore-linea-superior {
	from {
		background-position: 0% 0%;
	}

	to {
		background-position: 200% 0%;
	}
}

/* Barra de progreso de scroll: 2px en la base del header, cuyo ancho
   assets/js/header.js actualiza (transform:scaleX) según cuánto se ha
   bajado en la página. Sin transición propia: sigue el scroll 1 a 1,
   sin animarse por su cuenta. */
.encabezado__progreso {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: var(--e-2);
	background-color: var(--color-azul-oscuro);
	transform: scaleX(0);
	transform-origin: left;
}

@media (prefers-reduced-motion: reduce) {
	.encabezado::before {
		animation: none;
	}
}

/* Estado que agrega assets/js/header.js al superar 80px de scroll:
   el header queda fijo en la parte superior, reduce su alto y
   muestra una sombra sutil. El padding-top en .sitio-contenido (más
   abajo) evita que el contenido salte al perder el header su
   espacio en el flujo. */
.encabezado--fijo {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	box-shadow: 0 var(--e-4) 20px var(--overlay-azul-oscuro-12);
}

.encabezado--fijo .encabezado__barra {
	height: var(--alto-header-fijo);
}

/* Solo en escritorio: bajo 1200px el logo ya mide
   var(--alto-logo-header-movil), menos que esta medida, y además se
   ajusta al espacio libre (ver .encabezado__logo img más abajo). */
@media (min-width: 1200px) {
	.encabezado--fijo .encabezado__logo-imagen,
	.encabezado--fijo .encabezado__logo img {
		height: var(--alto-logo-header-fijo);
	}
}

body.tiene-header-fijo .sitio-contenido {
	padding-top: var(--alto-header-fijo);
}

@media (prefers-reduced-motion: reduce) {
	.encabezado,
	.encabezado__barra,
	.encabezado__logo-imagen,
	.encabezado__logo img {
		transition: none;
	}
}

/* Base = móvil: separación más corta entre logo y utilidades, para
   que Cotizar compacto, íconos y hamburguesa quepan junto al logo.
   Bajo 380px el margen lateral también se reduce. */
.encabezado__barra {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--e-12);
	height: var(--alto-header);
	transition: height 0.3s ease;
}

@media (max-width: 379px) {
	.encabezado__barra {
		padding-left: var(--e-16);
		padding-right: var(--e-16);
	}
}

@media (min-width: 768px) {
	.encabezado__barra {
		gap: var(--e-24);
	}
}

/* Bajo 1200px el logo es lo único que cede espacio: si Cotizar
   compacto + íconos + hamburguesa no caben junto a él (teléfonos
   angostos, sobre todo con el carrito del modo Personas), se achica
   en proporción en vez de empujar la hamburguesa fuera de la
   pantalla. Si hay espacio, conserva su alto completo. Desde 1200px
   vuelve a flex-shrink:0: el menú en línea nunca lo comprime. */
.encabezado__logo {
	display: flex;
	align-items: center;
	flex-shrink: 1;
	min-width: 0;
}

.encabezado__logo > a {
	min-width: 0;
}

@media (min-width: 1200px) {
	.encabezado__logo {
		flex-shrink: 0;
	}
}

/* Respaldo cuando no hay ni logo de header ni logo general: el
   nombre del sitio como texto, con tipografía propia de wordmark. */
.encabezado__logo-enlace {
	font-size: var(--fs-2xl);
	font-weight: var(--peso-header);
	color: var(--color-azul-oscuro);
	letter-spacing: var(--letras-negativas-md);
	white-space: nowrap;
}

/* Base = móvil/tablet: hasta 42px de alto, y menos solo si el ancho
   disponible no alcanza (max-width:100% + height:auto mantienen la
   proporción, así nunca se ve estirado ni aplastado). En escritorio
   (1200px+, ver la nota de punto de quiebre del menú más abajo) sube
   a 56px fijos: ahí la altura manda sobre el ancho (max-width:none
   anula el max-width:100% global de base.css). */
.encabezado__logo-imagen,
.encabezado__logo img {
	height: auto;
	max-height: var(--alto-logo-header-movil);
	width: auto;
	max-width: 100%;
	transition: height 0.3s ease;
}

@media (min-width: 1200px) {
	.encabezado__logo-imagen,
	.encabezado__logo img {
		height: var(--alto-logo-header);
		max-height: none;
		max-width: none;
	}
}

/* ---------------------------------------------------
   Panel central: selector, menú y botón de acción. En escritorio se
   muestra siempre en línea (el orden visual lo da la propiedad
   "order" de cada hijo); en móvil se convierte en el panel
   desplegable del botón hamburguesa.
   --------------------------------------------------- */
/* El botón de acción del header usa la variante .boton--suave (ver la
   sección de botones); aquí solo va lo propio del header: el peso de
   la tipografía del encabezado, y nowrap para que el texto (más largo
   en modo Personas, "Ir a la tienda") nunca se parta en dos líneas. */
.encabezado__cotizar {
	font-weight: var(--peso-header);
	white-space: nowrap;
}

/* Versión compacta: vive en .encabezado__utilidades (ver header.php),
   siempre visible bajo 1200px, para que Cotizar nunca dependa de
   abrir el menú hamburguesa. Desde 1200px se oculta porque ya está
   la versión normal en línea con el menú. Bajo 380px, padding y
   tipografía más chicos para que quepa junto a los íconos. */
.encabezado__cotizar--compacto {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: var(--e-40);
	padding: var(--e-8) var(--e-16);
	font-size: var(--fs-sm);
}

@media (min-width: 1200px) {
	.encabezado__cotizar--compacto {
		display: none;
	}
}

@media (max-width: 379px) {
	.encabezado__cotizar--compacto {
		padding: var(--e-6) var(--e-10);
		font-size: var(--fs-xs);
	}
}

.navegacion-principal {
	display: flex;
	align-items: center;
	position: relative;
}

/* Indicador "magnético": una sola línea de 2px que assets/js/header.js
   desliza (left/width, calculados con getBoundingClientRect) hasta el
   enlace en hover/foco, y que vuelve a la página activa al salir del
   menú. opacity:0 por defecto: si ninguna página coincide con la
   actual, queda oculto en vez de marcar una posición arbitraria. */
.menu-principal__indicador {
	position: absolute;
	left: 0;
	bottom: 0;
	width: 0;
	height: var(--e-2);
	background-color: var(--color-naranjo);
	opacity: 0;
	pointer-events: none;
	transition: left var(--transicion-base), width var(--transicion-base), opacity var(--transicion-base);
}

@media (prefers-reduced-motion: reduce) {
	.menu-principal__indicador {
		transition: none;
	}
}

/* El indicador solo tiene sentido en la fila horizontal de escritorio
   (sus cálculos de left/width asumen esa disposición); en el panel
   apilado se oculta y el color naranjo del enlace basta como marca. */
@media (max-width: 1199px) {
	.menu-principal__indicador {
		display: none;
	}
}

/* Sección/página activa: la marca assets/js/header.js (scrollspy en
   el home) o el filtro nav_menu_css_class de inc/woocommerce.php (en
   la tienda). Mismo color que el hover, con aria-current="true". */
.menu-principal__item--activo > a {
	color: var(--color-naranjo-texto);
}

/* Base = panel desplegable (hasta 1199px, ver la nota de punto de
   quiebre del menú más abajo): oculto por defecto, se muestra con
   .esta-activo (main.js), en columna, con el selector arriba, los
   enlaces al medio, "Mi cuenta" y Cotizar a todo el ancho al final.
   max-height + overflow-y evitan que el panel quede más alto que la
   pantalla mientras el scroll del fondo está bloqueado
   (body.menu-abierto). */
.encabezado__panel {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	background-color: var(--color-blanco);
	border-bottom: var(--linea-divisoria);
	flex-direction: column;
	align-items: stretch;
	padding: var(--e-24);
	gap: var(--e-20);
	max-height: calc(100vh - var(--alto-header));
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;
}

.encabezado__panel.esta-activo {
	display: flex;
}

.encabezado__panel .selector-perfil {
	order: 1;
	align-self: flex-start;
}

.encabezado__panel .navegacion-principal {
	order: 2;
}

/* El bloque de cuenta dentro del panel solo existe para el panel
   móvil/tablet: en escritorio la cuenta se accede por el desplegable
   de .encabezado__utilidades (.encabezado__cuenta). */
.encabezado__cuenta-panel {
	order: 3;
	display: flex;
	flex-direction: column;
	gap: var(--e-4);
}

.encabezado__cuenta-panel__saludo {
	margin: 0 0 var(--e-4);
	font-size: var(--fs-sm);
	color: var(--color-texto-secundario);
}

.encabezado__cuenta-panel__enlace {
	display: flex;
	align-items: center;
	min-height: var(--e-44);
	color: var(--color-azul-oscuro);
	font-weight: var(--peso-header);
	font-size: var(--fs-base);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-xl);
}

@media (hover: hover) {
	.encabezado__cuenta-panel__enlace:hover {
		color: var(--color-naranjo-texto);
	}
}

.encabezado__cuenta-panel__enlace:focus-visible {
	color: var(--color-naranjo-texto);
}

.encabezado__cuenta-panel__enlace--destacado {
	color: var(--color-naranjo-texto);
}

.encabezado__panel .encabezado__cotizar {
	order: 4;
	width: 100%;
	margin-left: 0;
	text-align: center;
}

/* Escritorio (1200px+): el panel vuelve a ser una fila en línea
   dentro del header, siempre visible, con el orden original
   (menú, Cotizar con separador, selector a la derecha).
   Punto de quiebre propio del header (1200px, no los 1024px
   generales del resto del tema): así el logo nunca compite por
   espacio con el menú completo — ver .encabezado__logo más arriba y
   la nota en variables.css. */
@media (min-width: 1200px) {
	.encabezado__panel {
		display: flex;
		position: static;
		flex-direction: row;
		align-items: center;
		gap: var(--e-24);
		padding: 0;
		border-bottom: none;
		max-height: none;
		overflow-y: visible;
	}

	.encabezado__panel .navegacion-principal {
		order: 1;
	}

	.encabezado__panel .encabezado__cotizar {
		order: 2;
		width: auto;
		/* Sin línea divisoria: el botón ya tiene su propio borde
		   completo (var(--naranjo-borde)), un divisor a la izquierda
		   se vería como un borde roto de otro color. */
		margin-left: var(--e-24);
		text-align: left;
	}

	.encabezado__panel .selector-perfil {
		order: 3;
		align-self: auto;
	}

	/* Modo vitrina: sin selector, búsqueda, cuenta ni carrito, las
	   utilidades quedan vacías; el panel (menú + Cotizar) se alinea a la
	   derecha en vez de quedar centrado por el space-between. */
	.encabezado--vitrina .encabezado__panel {
		margin-left: auto;
	}

	.encabezado__cuenta-panel {
		display: none;
	}
}

/* ---------------------------------------------------
   Utilidades: buscar, cuenta (escritorio), carrito y hamburguesa.
   --------------------------------------------------- */
/* Base = móvil: separación de 8px y sin el padding que el navegador
   pone por defecto a los <button> (las áreas táctiles de 44px las da
   ::after, fuera del flujo). flex-shrink:0: el que cede espacio es el
   logo, nunca estos controles. Desde 768px, separación y padding
   originales. */
.encabezado__utilidades {
	display: flex;
	align-items: center;
	gap: var(--e-8);
	flex-shrink: 0;
}

.encabezado__icono {
	display: flex;
	position: relative;
	padding: 0;
	color: var(--color-azul-oscuro);
	cursor: pointer;
}

@media (min-width: 768px) {
	.encabezado__utilidades {
		gap: var(--e-18);
	}

	.encabezado__icono {
		padding: revert;
	}
}

/* Área táctil de 44px de alto sin ocupar espacio en el layout: el
   pseudo-elemento se posiciona fuera del flujo (position:absolute),
   así el ícono visible sigue midiendo lo mismo y no empuja a sus
   vecinos ni cambia el espaciado del header en escritorio. */
.encabezado__icono::after {
	content: '';
	position: absolute;
	inset: calc(-1 * var(--e-12)) calc(-1 * var(--e-8));
}

.encabezado__icono svg {
	width: var(--tamano-icono-header);
	height: var(--tamano-icono-header);
}

@media (hover: hover) {
	.encabezado__icono:hover {
		color: var(--color-naranjo-texto);
	}
}

.encabezado__icono:focus-visible {
	color: var(--color-naranjo-texto);
}

/* ---------------------------------------------------
   Menú desplegable de cuenta (escritorio): botón + panel. Antes de
   1200px (mismo punto de quiebre que el menú) la cuenta se accede
   en cambio desde el panel móvil (.encabezado__cuenta-panel). El
   toggle (aria-expanded, Escape, clic fuera) es JS en header.js.
   --------------------------------------------------- */
.encabezado__cuenta {
	position: relative;
	display: none;
}

@media (min-width: 1200px) {
	.encabezado__cuenta {
		display: flex;
	}
}

.encabezado__cuenta-menu {
	position: absolute;
	top: 100%;
	right: 0;
	z-index: var(--z-buscador);
	margin-top: var(--e-12);
	min-width: var(--ancho-contenido-xs);
	display: flex;
	flex-direction: column;
	background-color: var(--color-blanco);
	border: var(--linea-divisoria);
	box-shadow: 0 var(--e-8) 24px var(--overlay-azul-oscuro-12);
	padding: var(--e-8) 0;
}

/* header.js abre y cierra el menú con el atributo hidden; sin esta
   regla, el display:flex de arriba le ganaría y el menú quedaría
   siempre a la vista aunque esté "cerrado". */
.encabezado__cuenta-menu[hidden] {
	display: none;
}

.encabezado__cuenta-saludo {
	margin: 0 0 var(--e-8);
	padding: var(--e-10) var(--e-16);
	font-size: var(--fs-sm);
	color: var(--color-texto-secundario);
	border-bottom: var(--linea-divisoria);
}

.encabezado__cuenta-enlace {
	display: flex;
	align-items: center;
	min-height: var(--e-44);
	padding: var(--e-10) var(--e-16);
	font-size: var(--fs-base);
	font-weight: var(--peso-header);
	color: var(--color-azul-oscuro);
}

@media (hover: hover) {
	.encabezado__cuenta-enlace:hover {
		background-color: var(--color-gris-claro);
		color: var(--color-naranjo-texto);
	}
}

.encabezado__cuenta-enlace:focus-visible {
	background-color: var(--color-gris-claro);
	color: var(--color-naranjo-texto);
}

.encabezado__cuenta-enlace--destacado {
	color: var(--color-naranjo-texto);
	font-weight: var(--peso-negrita);
}

/* ---------------------------------------------------
   Buscador desplegable: se abre bajo el header entero y busca
   productos de WooCommerce (ver el campo oculto post_type=product
   en header.php). El toggle es JS mínimo en assets/js/header.js.
   --------------------------------------------------- */
.buscador-desplegable {
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	z-index: var(--z-buscador);
	background-color: var(--color-blanco);
	border-bottom: var(--linea-divisoria);
	box-shadow: 0 var(--e-4) 20px var(--overlay-azul-oscuro-12);
}

.buscador-desplegable__interior {
	padding-top: var(--e-24);
	padding-bottom: var(--e-24);
}

.buscador-desplegable__form {
	display: flex;
	border: 1px solid var(--color-azul-oscuro);
}

.buscador-desplegable__form input[type="search"] {
	flex: 1;
	min-width: 0;
	border: none;
	padding: var(--e-14) var(--e-16);
	background-color: transparent;
	color: var(--color-azul-oscuro);
}

.buscador-desplegable__form input[type="search"]:focus {
	outline: none;
}

.buscador-desplegable__enviar {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var(--e-56);
	background-color: var(--color-azul-oscuro);
	color: var(--color-blanco);
	cursor: pointer;
	transition: background-color var(--transicion-base);
}

/* Sobre naranjo, el ícono pasa a azul oscuro (el blanco no contrasta). */
@media (hover: hover) {
	.buscador-desplegable__enviar:hover {
		background-color: var(--color-naranjo);
		color: var(--color-azul-oscuro);
	}
}

.buscador-desplegable__enviar:focus-visible {
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
}

.buscador-desplegable__enviar svg {
	width: var(--tamano-icono-header);
	height: var(--tamano-icono-header);
}

@media (prefers-reduced-motion: reduce) {
	.buscador-desplegable__enviar {
		transition: none;
	}
}

/* ---------------------------------------------------
   Menú principal de navegación
   --------------------------------------------------- */
/* Base = panel desplegable: los enlaces se apilan en columna, a todo
   el ancho. En escritorio (1200px+) vuelven a la fila horizontal
   original. */
.menu-principal {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--e-16);
	width: 100%;
}

@media (min-width: 1200px) {
	.menu-principal {
		flex-direction: row;
		align-items: center;
		gap: var(--e-8);
		width: auto;
	}
}

.menu-principal a {
	position: relative;
	display: inline-block;
	/* Padding vertical mayor en el panel desplegable para un área
	   táctil de al menos 44px de alto; en escritorio vuelve al valor
	   original. */
	padding: var(--e-12) var(--e-14);
	color: var(--color-azul-oscuro);
	font-weight: var(--peso-header);
	font-size: var(--fs-base);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-xl);
}

@media (min-width: 1200px) {
	.menu-principal a {
		padding: var(--e-10) var(--e-14);
	}
}

@media (hover: hover) {
	.menu-principal a:hover {
		color: var(--color-naranjo-texto);
	}
}

.menu-principal a:focus-visible {
	color: var(--color-naranjo-texto);
}

/* ---------------------------------------------------
   Selector Empresas / Personas: control segmentado sobre fondo
   blanco. La opción activa se marca desde la plantilla según la
   página actual (induscore_modo_actual() en inc/woocommerce.php).
   --------------------------------------------------- */
.selector-perfil {
	display: flex;
}

/* Cada opción lleva su propio borde de 1px (en vez de un borde
   compartido en el contenedor): el margen negativo del segundo botón
   junta ambos bordes en una sola línea de 1px entre las dos opciones.
   Padding vertical mayor en el panel desplegable para un área táctil
   de al menos 44px de alto; en escritorio (1200px+) vuelve al valor
   original, más compacto. */
.selector-perfil__opcion {
	position: relative;
	display: flex;
	align-items: center;
	padding: var(--e-14) var(--e-16);
	border: 1px solid var(--color-azul-oscuro);
	font-size: var(--fs-xs);
	font-weight: var(--peso-header);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-md);
	color: var(--color-azul-oscuro);
	background-color: transparent;
	transition: background-color var(--transicion-base), color var(--transicion-base);
}

.selector-perfil__opcion + .selector-perfil__opcion {
	margin-left: -1px;
}

@media (min-width: 1200px) {
	.selector-perfil__opcion {
		padding: var(--e-8) var(--e-16);
	}
}

@media (hover: hover) {
	.selector-perfil__opcion:hover {
		color: var(--color-naranjo-texto);
	}
}

.selector-perfil__opcion:focus-visible {
	color: var(--color-naranjo-texto);
}

.selector-perfil__opcion--activa,
.selector-perfil__opcion--activa:hover,
.selector-perfil__opcion--activa:focus-visible {
	z-index: 1;
	background-color: var(--color-azul-oscuro);
	border-color: var(--color-azul-oscuro);
	color: var(--color-blanco);
}

@media (prefers-reduced-motion: reduce) {
	.selector-perfil__opcion {
		transition: none;
	}
}

/* Escritorio angosto (1200px–1299px): el contenedor todavía no llega
   a su ancho máximo y, en modo Personas (botón "Ir a la tienda" +
   carrito), la fila completa no cabe con los espacios normales: el
   botón se partía y el carrito quedaba cortado en el borde. Aquí se
   compactan solo los espacios; desde 1300px el contenedor ya mide
   var(--ancho-maximo) y todo vuelve a los valores de arriba. */
@media (min-width: 1200px) and (max-width: 1299px) {
	.encabezado__panel {
		gap: var(--e-16);
	}

	.encabezado__panel .encabezado__cotizar {
		margin-left: 0;
	}

	.menu-principal a {
		padding-left: var(--e-10);
		padding-right: var(--e-10);
	}

	.selector-perfil__opcion {
		padding-left: var(--e-12);
		padding-right: var(--e-12);
	}

	.encabezado__utilidades {
		gap: var(--e-12);
	}
}

/* ---------------------------------------------------
   Contador del carrito y botón de menú móvil
   --------------------------------------------------- */
.encabezado__contador {
	position: absolute;
	top: calc(-1 * var(--e-8));
	right: calc(-1 * var(--e-10));
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
	font-size: var(--fs-2xs);
	min-width: var(--e-18);
	height: var(--e-18);
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 0 var(--e-4);
}

/* Base = siempre visible. Desde 1200px se oculta y el menú completo
   queda en línea dentro de .encabezado__panel. position:relative lo
   pinta sobre el área táctil (::after) del ícono vecino, que con la
   separación corta del móvil llega justo hasta su borde. */
.menu-toggle {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 1px solid var(--color-azul-oscuro);
	width: var(--tamano-boton-menu);
	height: var(--tamano-boton-menu);
	cursor: pointer;
	color: var(--color-azul-oscuro);
	flex-shrink: 0;
}

.menu-toggle svg {
	width: var(--tamano-icono-header);
	height: var(--tamano-icono-header);
}

@media (min-width: 1200px) {
	.menu-toggle {
		display: none;
	}
}

/* ---------------------------------------------------
   Logo del pie de página: el logo real de Induscore tiene texto
   en azul oscuro, así que sobre el fondo oscuro del footer se
   apoya en una placa blanca para mantener el contraste.
   --------------------------------------------------- */
.pie-pagina__logo-placa {
	display: inline-flex;
	align-items: center;
	background-color: var(--color-blanco);
	padding: var(--e-14) var(--e-18);
}

.pie-pagina__logo-placa img {
	display: block;
	max-height: var(--alto-logo-footer);
	width: auto;
}

/* Logo para fondo oscuro (Personalizar > Pie de página): directo sobre
   el azul, sin placa. Dos clases para ganarle a
   ".woocommerce-page img { height: auto }" en las pantallas de la
   tienda. object-fit: si el ancho llegara a limitarse, se achica sin
   deformarse. */
.pie-pagina__logo-enlace {
	display: inline-flex;
	align-items: center;
	/* Área táctil mínima: el logo mide 40px en móvil. */
	min-height: var(--tamano-boton-menu);
	max-width: 100%;
}

.pie-pagina__logo-enlace:focus-visible {
	outline: var(--e-2) solid var(--color-naranjo);
	outline-offset: var(--e-4);
}

.pie-pagina .pie-pagina__logo-oscuro {
	display: block;
	width: auto;
	max-width: 100%;
	height: var(--alto-logo-footer-oscuro);
	object-fit: contain;
	object-position: left center;
}

@media (min-width: 1024px) {
	.pie-pagina .pie-pagina__logo-oscuro {
		height: var(--alto-logo-footer-oscuro-escritorio);
	}
}

.pie-pagina__logo-texto {
	display: block;
	color: var(--color-azul-oscuro);
	font-size: var(--fs-xl);
	font-weight: var(--peso-negrita);
	letter-spacing: var(--letras-negativas-md);
}

/* ---------------------------------------------------
   Marcador de imagen: patrón visual mientras no se cargue
   una fotografía real desde la biblioteca de medios.
   --------------------------------------------------- */
.marcador-imagen {
	position: relative;
	overflow: hidden;
	aspect-ratio: 4 / 3;
	background-color: var(--color-azul-oscuro);
	background-image: repeating-linear-gradient(135deg, var(--color-azul-medio) 0px, var(--color-azul-medio) var(--e-2), var(--color-azul-oscuro) var(--e-2), var(--color-azul-oscuro) 42px);
	background-size: cover;
	background-position: center;
	display: flex;
	align-items: center;
	justify-content: center;
}

/* Foto de la sección (<img> con srcset y lazy loading, Fase 7): cubre el
   marcador 4:3 como el antiguo background-size: cover; el patrón de rayas
   queda debajo mientras carga o si no hay foto. */
.marcador-imagen .marcador-imagen__foto {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: center;
}

.marcador-imagen__texto {
	color: var(--overlay-blanco-55);
	font-size: var(--fs-xs);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-lg);
	text-align: center;
	padding: var(--e-16);
}

/* Insignia naranja flotante sobre las imágenes: esquina inferior
   izquierda, ancho pegado a su contenido (max-content) sin superar
   el ancho de la imagen menos el margen a ambos lados, y con salto
   de línea normal para que nunca se superponga al texto ni a los
   botones de abajo. Base = móvil/tablet (offset más ajustado);
   desde 1024px usa el offset y ancho máximo originales. */
.insignia-flotante {
	position: absolute;
	left: var(--e-16);
	bottom: var(--e-16);
	width: max-content;
	max-width: calc(100% - var(--e-32));
	white-space: normal;
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
	padding: var(--e-16) var(--e-20);
}

@media (min-width: 1024px) {
	.insignia-flotante {
		left: var(--e-24);
		bottom: var(--e-24);
		max-width: var(--ancho-contenido-xs);
	}
}

.insignia-flotante__kicker {
	display: block;
	font-size: var(--fs-2xs);
	font-weight: var(--peso-negrita);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-lg);
	opacity: 0.85;
	margin-bottom: var(--e-4);
}

.insignia-flotante__texto {
	font-size: var(--fs-md);
	font-weight: var(--peso-semi);
	line-height: var(--interlineado-medio);
}

/* ---------------------------------------------------
   Lista de características en 3 columnas
   --------------------------------------------------- */
.lista-caracteristicas {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--e-24);
	margin: var(--e-32) 0;
	padding-top: var(--e-24);
	border-top: var(--linea-divisoria);
}

@media (min-width: 768px) {
	.lista-caracteristicas {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (min-width: 1024px) {
	.lista-caracteristicas {
		grid-template-columns: repeat(3, 1fr);
	}
}

.lista-caracteristicas__item h3 {
	font-size: var(--fs-base);
	font-weight: var(--peso-negrita);
	color: var(--color-azul-oscuro);
	margin: 0 0 var(--e-6);
}

.lista-caracteristicas__item p {
	font-size: var(--fs-sm);
	margin-bottom: 0;
}

/* ---------------------------------------------------
   Lista de verificación (checklist) con ícono
   --------------------------------------------------- */
.lista-verificacion {
	margin: var(--e-32) 0;
}

.lista-verificacion__item {
	display: flex;
	align-items: flex-start;
	gap: var(--e-14);
	margin-bottom: var(--e-24);
}

.lista-verificacion__item:last-child {
	margin-bottom: 0;
}

.lista-verificacion__icono {
	flex-shrink: 0;
	width: var(--e-24);
	height: var(--e-24);
	margin-top: var(--e-2);
	display: flex;
	align-items: center;
	justify-content: center;
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
}

.lista-verificacion__icono svg {
	width: var(--e-14);
	height: var(--e-14);
}

.lista-verificacion__item h3 {
	font-size: var(--fs-md);
	margin: 0 0 var(--e-4);
}

.lista-verificacion__item p {
	font-size: var(--fs-base);
	margin-bottom: 0;
}

/* ---------------------------------------------------
   Tarjeta de camino de compra (B2B / B2C)
   --------------------------------------------------- */
.tarjeta-camino {
	display: flex;
	flex-direction: column;
	padding: var(--e-32);
	background-color: var(--color-azul-medio);
	border-top: 3px solid var(--color-gris-borde);
	transition: transform var(--transicion-base), border-color var(--transicion-base);
}

/* B2C ya nace con el borde superior naranjo; B2B lo gana al hover. */
.tarjeta-camino--personas {
	border-top-color: var(--color-naranjo);
}

.tarjeta-camino:focus-within {
	transform: translateY(calc(-1 * var(--e-5)));
	border-top-color: var(--color-naranjo);
}

@media (hover: hover) {
	.tarjeta-camino:hover {
		transform: translateY(calc(-1 * var(--e-5)));
		border-top-color: var(--color-naranjo);
	}
}

.tarjeta-camino__icono {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var(--e-44);
	height: var(--e-44);
	margin-bottom: var(--e-20);
	color: var(--color-naranjo);
}

.tarjeta-camino__icono svg {
	width: 100%;
	height: 100%;
}

.tarjeta-camino__kicker {
	font-size: var(--fs-xs);
	font-weight: var(--peso-negrita);
	text-transform: uppercase;
	letter-spacing: var(--letras-abiertas-xl);
	opacity: 0.85;
	margin-bottom: var(--e-16);
	color: var(--color-blanco);
}

.tarjeta-camino h3 {
	color: var(--color-blanco);
	font-size: var(--fs-3xl);
	margin-bottom: var(--e-10);
}

.tarjeta-camino p {
	color: var(--overlay-blanco-85);
	font-size: var(--fs-base);
	margin-bottom: 0;
}

.tarjeta-camino__enlace {
	display: inline-block;
	margin-top: auto;
	padding-top: var(--e-20);
	color: var(--color-naranjo);
	font-weight: var(--peso-negrita);
	font-size: var(--fs-base);
}

@media (hover: hover) {
	.tarjeta-camino__enlace:hover {
		color: var(--color-blanco);
	}
}

.tarjeta-camino__enlace:focus-visible {
	color: var(--color-blanco);
}

@media (prefers-reduced-motion: reduce) {
	.tarjeta-camino {
		transition: border-color var(--transicion-base);
	}

	.tarjeta-camino:hover,
	.tarjeta-camino:focus-within {
		transform: none;
	}
}

/* ---------------------------------------------------
   WooCommerce: botones, badges y precios
   --------------------------------------------------- */
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit,
.woocommerce-page a.button {
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
	border-radius: var(--radio-base);
	font-weight: var(--peso-semi);
	padding: var(--e-12) var(--e-24);
}

.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce a.button:focus-visible,
.woocommerce button.button:focus-visible,
.woocommerce input.button:focus-visible {
	background-color: var(--color-naranjo-hover);
	color: var(--color-azul-oscuro);
}

.woocommerce span.onsale {
	background-color: var(--color-naranjo);
	color: var(--color-azul-oscuro);
	border-radius: var(--radio-base);
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
	color: var(--color-azul-oscuro);
}

/* ---------------------------------------------------
   Botón flotante de WhatsApp (template-parts/whatsapp.php)
   Círculo fijo abajo a la derecha: 48px en móvil/tablet, 52px desde
   1024px, respetando el margen seguro del celular. Solo una entrada
   suave al cargar (sin pulsos ni animaciones permanentes). En la ficha
   de producto (móvil/tablet) sube sobre la barra fija de compra, y se
   oculta mientras hay un panel abierto (menú móvil: body.menu-abierto;
   filtros u otros: body.panel-abierto).
   --------------------------------------------------- */
.whatsapp {
	position: fixed;
	right: var(--e-16);
	bottom: calc(var(--e-16) + env(safe-area-inset-bottom));
	z-index: var(--z-whatsapp);
	display: flex;
	align-items: center;
	justify-content: center;
	width: var(--tamano-whatsapp);
	height: var(--tamano-whatsapp);
	border-radius: 50%;
	background-color: var(--color-whatsapp);
	color: var(--color-blanco);
	box-shadow: 0 var(--e-4) var(--e-16) var(--overlay-azul-oscuro-35);
}

.whatsapp:hover,
.whatsapp:focus-visible {
	color: var(--color-blanco);
}

.whatsapp:focus-visible {
	outline: var(--e-2) solid var(--color-azul-oscuro);
	outline-offset: var(--e-4);
}

.whatsapp__icono {
	width: 56%;
	height: 56%;
}

/* La etiqueta solo existe en escritorio con mouse (y con el foco del
   teclado); en táctil no hay hover que la muestre. */
.whatsapp__etiqueta {
	display: none;
}

@media (min-width: 1024px) {
	.whatsapp {
		right: var(--e-24);
		bottom: calc(var(--e-24) + env(safe-area-inset-bottom));
		width: var(--tamano-whatsapp-escritorio);
		height: var(--tamano-whatsapp-escritorio);
	}
}

@media (min-width: 1024px) and (hover: hover) {
	.whatsapp__etiqueta {
		position: absolute;
		right: calc(100% + var(--e-12));
		top: 50%;
		display: block;
		padding: var(--e-6) var(--e-12);
		background-color: var(--color-azul-oscuro);
		color: var(--color-blanco);
		font-size: var(--fs-sm);
		white-space: nowrap;
		opacity: 0;
		transform: translate(var(--e-8), -50%);
		pointer-events: none;
		transition: opacity var(--transicion-base), transform var(--transicion-base);
	}

	.whatsapp:hover .whatsapp__etiqueta,
	.whatsapp:focus-visible .whatsapp__etiqueta {
		opacity: 1;
		transform: translate(0, -50%);
	}
}

/* Sobre la barra fija de compra de la ficha (solo existe bajo 1024px). */
@media (max-width: 1023px) {
	body.tiene-barra-compra .whatsapp {
		bottom: calc(var(--alto-barra-compra) + var(--e-16) + env(safe-area-inset-bottom));
	}
}

body.menu-abierto .whatsapp,
body.panel-abierto .whatsapp,
body.cookies-abierto .whatsapp {
	display: none;
}

/* Espacio reservado bajo la barra inferior del footer: al llegar al
   final de la página, el botón queda sobre ese espacio y no tapa los
   derechos ni los medios de pago. */
body.tiene-whatsapp .pie-pagina__barra {
	padding-bottom: calc(var(--tamano-whatsapp) + var(--e-16));
}

@media (min-width: 1024px) {
	body.tiene-whatsapp .pie-pagina__barra {
		padding-bottom: calc(var(--tamano-whatsapp-escritorio) + var(--e-24));
	}
}

@media (prefers-reduced-motion: no-preference) {
	.whatsapp {
		animation: induscore-whatsapp-entrada 0.5s ease 0.6s both;
	}
}

@keyframes induscore-whatsapp-entrada {
	from {
		opacity: 0;
		transform: translateY(var(--e-16));
	}

	to {
		opacity: 1;
		transform: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	.whatsapp__etiqueta {
		transition: none;
	}
}

/* ---------------------------------------------------
   Banner de cookies (Fase 7; template-parts/cookies.php y
   assets/js/cookies.js). Solo existe si hay IDs de analítica. Franja fija
   abajo, azul oscuro; Aceptar y Rechazar con el mismo peso visual.
   --------------------------------------------------- */
.cookies {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: var(--z-cookies);
	max-height: 80vh;
	overflow-y: auto;
	padding: var(--e-20) 0 calc(var(--e-20) + env(safe-area-inset-bottom));
	background-color: var(--color-azul-oscuro);
	border-top: var(--e-2) solid var(--color-naranjo);
	color: var(--color-blanco);
	box-shadow: 0 calc(-1 * var(--e-4)) var(--e-20) var(--overlay-azul-oscuro-35);
}

.cookies[hidden],
.cookies [hidden] {
	display: none;
}

.cookies__interior {
	display: flex;
	flex-direction: column;
	gap: var(--e-16);
}

.cookies__titulo {
	margin: 0 0 var(--e-6);
	font-size: var(--fs-lg);
	font-weight: var(--peso-semi);
	color: var(--color-blanco);
}

.cookies__titulo:focus {
	outline: none;
}

.cookies__descripcion {
	margin: 0;
	font-size: var(--fs-base);
	line-height: var(--interlineado-base);
	color: var(--overlay-blanco-85);
}

.cookies__descripcion a {
	color: var(--color-blanco);
	text-decoration: underline;
}

.cookies__preferencias {
	display: flex;
	flex-direction: column;
	gap: var(--e-8);
	margin-top: var(--e-16);
}

.cookies__opcion {
	display: flex;
	align-items: flex-start;
	gap: var(--e-10);
	min-height: var(--e-44);
	font-size: var(--fs-base);
	line-height: var(--interlineado-base);
	color: var(--overlay-blanco-85);
	cursor: pointer;
}

.cookies__opcion input {
	flex-shrink: 0;
	width: var(--e-18);
	height: var(--e-18);
	margin: var(--e-2) 0 0;
	accent-color: var(--color-naranjo);
}

.cookies__acciones {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--e-8);
}

/* "Configurar": enlace de texto, con su área táctil de 44px. */
.cookies__configurar {
	min-height: var(--e-44);
	padding: 0 var(--e-8);
	background: none;
	border: none;
	color: var(--color-blanco);
	font-size: var(--fs-base);
	text-decoration: underline;
	cursor: pointer;
}

.cookies__configurar:focus-visible,
.cookies__descripcion a:focus-visible {
	outline: var(--e-2) solid var(--color-naranjo);
	outline-offset: var(--e-2);
}

@media (min-width: 1024px) {
	.cookies__interior {
		flex-direction: row;
		align-items: flex-start;
		justify-content: space-between;
		gap: var(--e-40);
	}

	.cookies__texto {
		max-width: var(--ancho-contenido-3xl);
	}

	.cookies__acciones {
		flex-shrink: 0;
		justify-content: flex-end;
		max-width: var(--ancho-contenido-lg);
	}
}

/* Enlace "Configurar cookies" en la barra inferior del footer. */
.pie-pagina__cookies {
	padding: 0;
	background: none;
	border: none;
	color: inherit;
	font: inherit;
	text-decoration: underline;
	cursor: pointer;
}

.pie-pagina__cookies:focus-visible {
	outline: var(--e-2) solid var(--color-naranjo);
	outline-offset: var(--e-2);
}

@media (max-width: 1023px) {
	/* Área táctil mínima, como el resto de los enlaces del footer bajo 1024px. */
	.pie-pagina__cookies {
		display: inline-flex;
		align-items: center;
		min-height: var(--e-44);
	}
}
