/**
 * HMW Reels para Elementor
 *
 * Portado del § 09 / 09b de style.css del theme Hazlo Muy Wonder. Cambios
 * respecto del original:
 *   - Prefijo `hmwe-` en vez de `hmw-`: el plugin puede convivir con el theme
 *     en el mismo sitio y las clases no se pueden pisar.
 *   - Los valores duros (ancho, alto, gap, radio, colores) salen de custom
 *     properties que escriben los controles de estilo del widget. El valor que
 *     está acá es el del Figma original y funciona como fallback.
 *   - El modal se mueve a <body> en el init, así que sus reglas son globales
 *     (no cuelgan del wrapper del widget).
 */

/* ==========================================================================
   Tokens del widget

   OJO: los tokens que manejan los controles de Elementor (ancho, alto, gap,
   radio, sangrado, fondo, flechas) NO se declaran acá. Elementor los escribe
   sobre {{WRAPPER}}, que es un ANCESTRO de .hmwe-reels-root — declararlos en el
   root los pisaría por especificidad de cascada (un valor propio siempre gana
   sobre uno heredado) y ningún control de estilo tendría efecto. Su default
   vive como fallback del var() en cada uso.

   Acá sólo quedan los que ningún control toca.
   ========================================================================== */
.hmwe-reels-root {
	--hmwe-text: #FFFFFF;
	--hmwe-text-inactive: #4B4A4A;
	--hmwe-ease: cubic-bezier(0.22, 1, 0.36, 1);
}

/* Texto sólo para lectores de pantalla (mismo patrón que .screen-reader-text
   del core, replicado acá para no depender del CSS del theme). */
.hmwe-sr {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* ==========================================================================
   Carrusel
   ========================================================================== */
/* Wrapper: contexto de posición para las flechas, que van absolutas sobre los
   lados POR FUERA del overflow de .hmwe-reels (si no, se scrollearían). */
.hmwe-reels-wrap {
	position: relative;
}

.hmwe-reels {
	position: relative;
	overflow-x: auto;
	overflow-y: hidden;
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
}
.hmwe-reels::-webkit-scrollbar { display: none; }
.hmwe-reels.is-dragging { cursor: grabbing; scroll-behavior: auto; }

/* Flechas: círculos semitransparentes centrados verticalmente sobre los
   bordes. Sólo con puntero fino (mouse): en táctil el scroll nativo y el swipe
   ya cubren la navegación, y ocuparían espacio de más.
   .is-static las esconde cuando no hay nada que desplazar (lo marca el JS). */
.hmwe-reels__arrow {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 3;
	display: none;
	align-items: center;
	justify-content: center;
	width: var(--hmwe-arrow-size, 44px);
	height: var(--hmwe-arrow-size, 44px);
	padding: 0;
	border: 1px solid rgba(255, 255, 255, 0.35);
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.55);
	color: var(--hmwe-text);
	cursor: pointer;
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	transition: background-color 0.25s var(--hmwe-ease), border-color 0.25s var(--hmwe-ease), color 0.25s var(--hmwe-ease), opacity 0.25s var(--hmwe-ease);
}
@media (hover: hover) and (pointer: fine) {
	.hmwe-reels__arrow { display: inline-flex; }
	.hmwe-reels-root.is-static .hmwe-reels__arrow { display: none; }
}
.hmwe-reels__arrow:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}
.hmwe-reels__arrow--prev { inset-inline-start: var(--hmwe-arrow-offset, 12px); }
.hmwe-reels__arrow--next { inset-inline-end: var(--hmwe-arrow-offset, 12px); }
.hmwe-reels__arrow svg { display: block; }

.hmwe-reels__track {
	display: flex;
	gap: var(--hmwe-gap, 29px);
	margin: 0;
	padding: 0;
	padding-inline: var(--hmwe-track-pad, 0px);
	list-style: none;
	width: max-content;
}

.hmwe-reel {
	position: relative;
	flex: none;
	width: var(--hmwe-card-w, 253px);
	height: var(--hmwe-card-h, 399px);
}

/* La tarjeta es un <button> (abre el modal): resetea estilos de botón y ocupa
   toda la celda. Placeholder (sin reel cargado) es un <div>, sin interacción. */
.hmwe-reel__card {
	display: block;
	position: relative;
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: var(--hmwe-radius, 20px);
	overflow: hidden;
	background: var(--hmwe-panel, #1F1F1F);
	color: var(--hmwe-text);
	font: inherit;
	text-align: start;
	cursor: pointer;
	transition: transform 0.4s var(--hmwe-ease), box-shadow 0.4s var(--hmwe-ease);
}
.hmwe-reel__card.is-empty { cursor: default; }
/* Lift + sombra al pasar el mouse o llegar con teclado. El zoom real vive en
   .hmwe-reel__media (abajo): se anima por separado porque el overflow:hidden de
   la tarjeta ya recorta, así que la imagen puede crecer sin desbordar el layout. */
.hmwe-reel__card:not(.is-empty):hover,
.hmwe-reel__card:not(.is-empty):focus-visible {
	transform: translateY(-6px);
	box-shadow: 0 24px 48px rgba(0, 0, 0, 0.35);
}

.hmwe-reel__media {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.5s var(--hmwe-ease);
}
.hmwe-reel__card:not(.is-empty):hover .hmwe-reel__media,
.hmwe-reel__card:not(.is-empty):focus-visible .hmwe-reel__media {
	transform: scale(1.06);
}

.hmwe-reel__placeholder {
	display: grid;
	place-items: center;
	width: 100%;
	height: 100%;
	color: var(--hmwe-text-inactive);
	font-size: 14px;
	letter-spacing: 0.1em;
}

/* Botón play sobre la tarjeta: círculo translúcido, crece en hover/focus.
   OJO: el centrado usa la propiedad CSS `translate` (no `transform`) a
   propósito. `translate` y `transform` son propiedades separadas que se
   COMPONEN — si el hover pusiera `transform: translate(-50%,-50%) scale(...)`,
   ese -50%,-50% se sumaría al de `translate` en vez de reemplazarlo, y el botón
   saltaría de lugar en vez de sólo agrandarse. Por eso el hover sólo toca
   `scale`, nunca `transform`. */
.hmwe-reel__play {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-start: 50%;
	translate: -50% -50%;
	display: grid;
	place-items: center;
	width: 64px;
	height: 64px;
	padding-inline-start: 4px; /* óptico: el triángulo pesa a la izquierda. */
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.45);
	-webkit-backdrop-filter: blur(4px);
	backdrop-filter: blur(4px);
	color: var(--hmwe-text);
	transition: scale 0.3s var(--hmwe-ease), background-color 0.3s var(--hmwe-ease);
}
.hmwe-reel__card:hover .hmwe-reel__play,
.hmwe-reel__card:focus-visible .hmwe-reel__play {
	scale: 1.08;
	background: rgba(0, 0, 0, 0.6);
}

/* Nombre del cliente abajo, sobre un degradado para que se lea sobre el video. */
.hmwe-reel__cliente {
	position: absolute;
	inset-inline: 0;
	inset-block-end: 0;
	padding: 40px 14px 14px;
	background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent);
	color: var(--hmwe-text);
	font-size: 14px;
	font-weight: 500;
	text-align: start;
}
.hmwe-reels-root.hmwe-no-scrim .hmwe-reel__cliente {
	padding-block-start: 14px;
	background: none;
}

/* ==========================================================================
   Modal

   Se abre al hacer clic en una tarjeta. Muestra el video (MP4 propio o iframe
   de Instagram según data-modo) y, al lado, la metadata: cliente, cuenta y las
   4 stats con ícono. El JS hace foco/Escape/scroll-lock.
   ========================================================================== */
/* Los controles de estilo del modal escriben custom properties en el wrapper
   del widget y el JS las copia acá al mudar el modal a <body> (ver la nota en
   register_modal_style_controls). El valor de cada var() es el fallback. */
.hmwe-modal {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: grid;
	place-items: center;
	padding: 24px;
	color: #FFFFFF;
	font-family: inherit;
}
.hmwe-modal[hidden] { display: none; }

.hmwe-modal__backdrop {
	position: absolute;
	inset: 0;
	border: 0;
	padding: 0;
	background: var(--hmwe-modal-backdrop, rgba(0, 0, 0, 0.7));
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
	cursor: pointer;
}

.hmwe-modal__dialog {
	position: relative;
	display: flex;
	gap: 0;
	max-width: min(var(--hmwe-modal-w, 880px), 100%);
	max-height: calc(100dvh - 48px);
	border-radius: 20px;
	overflow: hidden;
	background: var(--hmwe-modal-bg, #1F1F1F);
}
/* El diálogo recibe el foco al abrir (programático, no navegación): sin anillo. */
.hmwe-modal__dialog:focus { outline: none; }

.hmwe-modal__close {
	position: absolute;
	inset-block-start: 12px;
	inset-inline-end: 12px;
	z-index: 2;
	display: grid;
	place-items: center;
	width: 40px;
	height: 40px;
	border: 0;
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.5);
	color: #FFFFFF;
	cursor: pointer;
}
.hmwe-modal__close:hover { background: rgba(0, 0, 0, 0.75); }

/* Área del video: 9:16, alto acotado al viewport. */
.hmwe-modal__stage {
	flex: none;
	width: min(360px, 56vw);
	aspect-ratio: 9 / 16;
	max-height: calc(100dvh - 48px);
	background: #000;
}
.hmwe-modal__stage video,
.hmwe-modal__stage iframe {
	display: block;
	width: 100%;
	height: 100%;
	border: 0;
	object-fit: cover;
}

/* Panel de datos al lado del video. */
.hmwe-modal__info {
	flex: 1;
	min-width: 240px;
	padding: 40px 32px;
	display: flex;
	flex-direction: column;
	gap: 6px;
	overflow-y: auto;
}
.hmwe-modal__cliente {
	margin: 0;
	color: var(--hmwe-modal-title, #FFFFFF);
	font-size: 24px;
	font-weight: 700;
	line-height: 1.2;
}
.hmwe-modal__cuenta {
	margin: 0;
	color: var(--hmwe-modal-meta, rgba(255, 255, 255, 0.7));
	font-size: 15px;
	font-weight: 300;
}
/* Un campo vacío no debe dejar su hueco: lo marca el JS. */
.hmwe-modal__cliente.is-empty,
.hmwe-modal__cuenta.is-empty { display: none; }

.hmwe-modal__stats {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 18px 20px;
	margin: 28px 0 0;
	padding: 0;
	list-style: none;
}
.hmwe-modal__stat {
	display: flex;
	align-items: center;
	gap: 10px;
	color: var(--hmwe-modal-stat, #FFFFFF);
	font-size: 18px;
	font-weight: 500;
}
.hmwe-modal__stat svg { flex: none; color: var(--hmwe-modal-icon, #FF0051); }
/* Una stat sin número cargado no se muestra (la oculta el JS con este hook). */
.hmwe-modal__stat.is-empty { display: none; }

.hmwe-modal__ig {
	margin-block-start: auto;
	padding-block-start: 28px;
	color: var(--hmwe-modal-link, #D2F962);
	font-size: 14px;
	font-weight: 500;
	text-decoration: none;
}
.hmwe-modal__ig:hover { text-decoration: underline; }
.hmwe-modal__ig[hidden] { display: none; }

/* ==========================================================================
   Móvil
   ========================================================================== */
@media (max-width: 767px) {
	/* Modal: se apila (video arriba, datos abajo) y ocupa casi toda la pantalla.
	   El video no puede llevarse todo el alto o los datos no entran, así que se
	   acota su altura. */
	.hmwe-modal { padding: 12px; }
	.hmwe-modal__dialog { flex-direction: column; width: 100%; max-height: calc(100dvh - 24px); }
	.hmwe-modal__stage { width: 100%; aspect-ratio: auto; height: 52vh; }
	.hmwe-modal__info { padding: 24px 20px; }
	.hmwe-modal__stats { gap: 14px; }
}

/* Sin movimiento decorativo si el visitante lo pidió. El JS ya no arranca el
   autoplay; esto cubre las transiciones. */
@media (prefers-reduced-motion: reduce) {
	.hmwe-reel__card,
	.hmwe-reel__media,
	.hmwe-reel__play,
	.hmwe-reels__arrow {
		transition-duration: 0.01ms;
	}
	.hmwe-reel__card:not(.is-empty):hover,
	.hmwe-reel__card:not(.is-empty):focus-visible {
		transform: none;
	}
}
