/**
 * vexel/eclipse-testimonios
 *
 * Medidas del nodo 3918:8725:
 *   banda 1440x784 · padding 120/168 · 64 entre cabecera, tarjetas y guiones
 *   cabecera 1104 centrada, 24 entre elementos · titular 40/40 centrado
 *   remate en cursiva crema #FCF8E4 · antetítulo y titular en #353756
 *   tarjetas: tres iguales con 32 de separación, blancas, radio 16, padding 24
 *   estrellas 152x24 · 24 hasta el texto · 8 entre título, cita y firma
 *   título Newsreader 24/32 en #628F99 · cita 16/24 · firma en negrita
 *   guiones: tres de 40x2, el activo en #7EB7C4 y el resto en blanco
 */

.vexel-eclipse-testimonios {
	--vexel-tst-gap: 64px;
	--vexel-tst-tarjeta-gap: 32px;
	--vexel-tst-padding: 120px;

	position: relative;
	padding-block: var(--vexel-tst-padding);
	overflow: hidden;
}

.vexel-eclipse-testimonios__fondo {
	position: absolute;
	inset: 0;
	pointer-events: none;
}

.vexel-eclipse-testimonios__fondo img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.vexel-eclipse-testimonios__inner {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: var(--vexel-tst-gap);
}

/* ------------------------------------------------------------------ Cabecera */
.vexel-eclipse-testimonios__cabecera {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 24px;
	text-align: center;
}

.vexel-eclipse-testimonios__kicker {
	margin: 0;
	font-size: var(--wp--preset--font-size--sm);
	line-height: 24px;
	color: var(--wp--preset--color--navy);
	/* La maqueta escribe dos espacios seguidos en "¿QUÉ OPINAN  DE NOSOTROS?";
	   sin esto el navegador los colapsaría en uno. */
	white-space: pre-wrap;
}

.vexel-eclipse-testimonios__filete {
	position: relative;
	display: block;
	width: 64px;
	height: 0;
}

.vexel-eclipse-testimonios__filete::before {
	content: "";
	position: absolute;
	/* -1 y no -0.5: con media unidad, Chrome resuelve la línea a la fila
	   siguiente y Figma a la anterior, y el filete salía 1px más abajo. */
	top: -1px;
	left: 0;
	width: 100%;
	height: 1px;
	background-color: var(--wp--preset--color--accent);
}

.vexel-eclipse-testimonios__heading {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	margin: 0;
	width: 100%;
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--3-xl);
	font-weight: 500;
	line-height: 1;
	color: var(--wp--preset--color--navy);
}

.vexel-eclipse-testimonios__heading em,
.vexel-eclipse-testimonios__heading i {
	font-style: italic;
	font-weight: inherit;
	color: var(--wp--preset--color--bg-cream);
}

/* ------------------------------------------------------------------ Tarjetas */
.vexel-eclipse-testimonios__viewport {
	width: 100%;
}

.vexel-eclipse-testimonios__lista {
	display: flex;
	align-items: stretch;
	gap: var(--vexel-tst-tarjeta-gap);
	margin: 0;
	padding: 0;
	list-style: none;
}

/* -------------------------------------------------------------- Carrusel
 * Solo cuando hay más testimonios que los que caben a la vista. Con tres o
 * menos el bloque no lleva la clase y la fila se queda exactamente como la
 * maqueta, sin desbordes ni scroll.
 *
 * El desplazamiento es scroll-snap: el arrastre con el dedo y el tabulador
 * funcionan sin JavaScript; view.js solo mueve los guiones y marca el activo.
 * ---------------------------------------------------------------------- */
.vexel-eclipse-testimonios.is-carrusel .vexel-eclipse-testimonios__viewport {
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	/* El foco del teclado necesita aire para que no lo recorte el overflow. */
	padding: 4px;
	margin: -4px;
}

.vexel-eclipse-testimonios.is-carrusel .vexel-eclipse-testimonios__viewport::-webkit-scrollbar {
	display: none;
}

/*
 * `--vexel-tst-actual` es cuántas tarjetas se ven de verdad ahora mismo.
 *
 * Existe porque `--vexel-tst-visibles` llega en el atributo style del bloque y
 * un estilo en línea gana a cualquier media query: no se puede bajar a 1 en
 * móvil tocando esa. Esta se declara solo en la hoja, así que sí se puede
 * redefinir. view.js lee esta misma para que la paginación avance justo lo que
 * se ve.
 */
.vexel-eclipse-testimonios.is-carrusel {
	--vexel-tst-actual: var(--vexel-tst-visibles);
}

.vexel-eclipse-testimonios.is-carrusel .vexel-eclipse-testimonios__tarjeta {
	flex: 0 0
		calc(
			(100% - var(--vexel-tst-tarjeta-gap) * (var(--vexel-tst-actual) - 1)) /
				var(--vexel-tst-actual)
		);
	scroll-snap-align: start;
}

.vexel-eclipse-testimonios__tarjeta {
	display: flex;
	flex-direction: column;
	gap: 24px;
	flex: 1 1 0;
	min-width: 0;
	margin: 0;
	padding: 24px;
	border-radius: var(--wp--custom--radius--lg);
	background-color: var(--wp--preset--color--bg);
}

.vexel-eclipse-testimonios__estrellas {
	display: block;
	width: 152px;
	height: 24px;
}

.vexel-eclipse-testimonios__cita {
	display: flex;
	flex-direction: column;
	gap: 8px;
	margin: 0;
}

.vexel-eclipse-testimonios__titulo {
	margin: 0;
	font-family: var(--wp--preset--font-family--display);
	font-size: var(--wp--preset--font-size--xl);
	font-weight: 400;
	line-height: 32px;
	color: var(--wp--preset--color--celeste-oscuro);
}

.vexel-eclipse-testimonios__texto {
	margin: 0;
	font-size: var(--wp--preset--font-size--md);
	line-height: 24px;
	color: var(--wp--preset--color--secondary);
}

.vexel-eclipse-testimonios__autor {
	margin: 0;
	font-size: var(--wp--preset--font-size--md);
	font-weight: 700;
	line-height: 24px;
	color: var(--wp--preset--color--secondary);
}

/* ------------------------------------------------------------------- Guiones */
.vexel-eclipse-testimonios__guiones {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
	height: 16px;
}

.vexel-eclipse-testimonios__guion {
	display: block;
	width: 40px;
	height: 2px;
	padding: 0;
	border: 0;
	background-color: var(--wp--preset--color--bg);
}

/* Cuando son botones: área de pulsación cómoda sin cambiar el trazo de 2px
   que dibuja la maqueta. */
button.vexel-eclipse-testimonios__guion {
	position: relative;
	cursor: pointer;
}

button.vexel-eclipse-testimonios__guion::after {
	content: "";
	position: absolute;
	inset: -11px 0;
}

button.vexel-eclipse-testimonios__guion:focus-visible {
	outline: 2px solid var(--wp--preset--color--primary);
	outline-offset: 6px;
}

.vexel-eclipse-testimonios__guion.is-activo {
	background-color: var(--wp--preset--color--primary);
}

/* --------------------------------------------------------------------- Móvil */
/* Sin maqueta de móvil: las tarjetas se apilan. Adaptación propia. */
@media (max-width: 1023px) {
	.vexel-eclipse-testimonios {
		padding-block: clamp(3.5rem, 8.333vw, var(--vexel-tst-padding));
	}

	.vexel-eclipse-testimonios__lista {
		flex-direction: column;
	}

	/*
	 * En el carrusel se mantiene en fila, pero de una en una. Se cambia la
	 * variable y no el flex-basis a mano, porque view.js lee esa misma
	 * variable para saber cuántas tarjetas avanza cada guion: tocando solo el
	 * ancho, la paginación seguiría saltando de tres en tres.
	 */
	.vexel-eclipse-testimonios.is-carrusel {
		--vexel-tst-actual: 1;
	}

	.vexel-eclipse-testimonios.is-carrusel .vexel-eclipse-testimonios__lista {
		flex-direction: row;
	}

	.vexel-eclipse-testimonios__heading {
		line-height: 1.25;
	}
}
