/**
 * MLC Toolkit — Componentes compartidos
 * ---------------------------------------------------------------------------
 * Piezas que usan varios módulos: estrellas, precios, swatches de color, badge
 * de descuento, títulos de sección, rejilla, botones y estados vacíos.
 *
 * Reescrito con flex/grid fluido a partir de los HTML de referencia (que usaban
 * posicionamiento absoluto sobre un lienzo escalado y no soportan contenido
 * dinámico).
 */

/* --------------------------------------------------------------------------
   Base
   -------------------------------------------------------------------------- */
.mlc-root,
.mlc-root * {
	box-sizing: border-box !important;
}

.mlc-root {
	font-family: var(--mlc-font-family) !important;
	color: var(--mlc-color-text) !important;
}

.mlc-container {
	width: 100% !important;
	max-width: var(--mlc-container) !important;
	margin-inline: auto !important;
}

/* --------------------------------------------------------------------------
   Blindaje frente al tema
   --------------------------------------------------------------------------
   El !important del resto de la hoja solo protege las propiedades que el
   plugin declara. Hello Elementor impone ademas border-radius y bordes a todos
   los botones y campos, y muchos temas fijan la tipografia de los encabezados,
   cosas que el plugin no declaraba en cada regla.

   Estas reglas usan `:where()`, que aporta especificidad 0: ganan al tema
   (porque llevan !important y el tema no) pero pierden contra cualquier regla
   propia del plugin, asi que no pisan, por ejemplo, el circulo de los swatches
   ni el avatar redondo de las resenas. */
:where(.mlc-root) h1,
:where(.mlc-root) h2,
:where(.mlc-root) h3,
:where(.mlc-root) h4,
:where(.mlc-root) p,
:where(.mlc-root) a,
:where(.mlc-root) span,
:where(.mlc-root) li,
:where(.mlc-root) time,
:where(.mlc-root) strong,
:where(.mlc-root) del,
:where(.mlc-root) ins,
:where(.mlc-root) label,
:where(.mlc-root) button,
:where(.mlc-root) input,
:where(.mlc-root) select,
:where(.mlc-root) textarea {
	font-family: var(--mlc-font-family) !important;
}

:where(.mlc-root) button,
:where(.mlc-root) input,
:where(.mlc-root) select,
:where(.mlc-root) textarea {
	border-radius: var(--mlc-radius) !important;
}

:where(.mlc-root) img {
	border: 0 !important;
	border-radius: 0 !important;
}

/* Texto solo para lectores de pantalla. */
.mlc-sr-only {
	position: absolute !important;
	width: 1px !important;
	height: 1px !important;
	padding: 0 !important;
	margin: -1px !important;
	overflow: hidden !important;
	clip: rect(0, 0, 0, 0) !important;
	white-space: nowrap !important;
	border: 0 !important;
}

/* --------------------------------------------------------------------------
   Título de sección
   -------------------------------------------------------------------------- */
.mlc-section-title {
	margin: 0 0 clamp(24px, 4vw, 60px) !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-semibold) !important;
	font-size: clamp(20px, 2.4vw, var(--mlc-fs-section)) !important;
	line-height: var(--mlc-lh-section) !important;
	letter-spacing: var(--mlc-ls-section) !important;
	text-transform: uppercase !important;
	text-align: center !important;
	color: var(--mlc-color-text) !important;
}

/* --------------------------------------------------------------------------
   Estrellas: una sola máscara SVG de 5 estrellas + relleno de ancho porcentual
   -------------------------------------------------------------------------- */
.mlc-stars {
	position: relative !important;
	display: inline-block !important;
	flex: 0 0 auto !important;
	width: var(--mlc-stars-width) !important;
	height: var(--mlc-stars-height) !important;
	vertical-align: middle !important;
}

.mlc-stars__empty,
.mlc-stars__full {
	position: absolute !important;
	inset-block: 0 !important;
	left: 0 !important;
	height: 100% !important;
	-webkit-mask-image: url("../img/stars.svg") !important;
	mask-image: url("../img/stars.svg") !important;
	-webkit-mask-repeat: no-repeat !important;
	mask-repeat: no-repeat !important;
	-webkit-mask-position: left center !important;
	mask-position: left center !important;
	-webkit-mask-size: var(--mlc-stars-width) var(--mlc-stars-height) !important;
	mask-size: var(--mlc-stars-width) var(--mlc-stars-height) !important;
}

.mlc-stars__empty {
	width: 100% !important;
	background-color: var(--mlc-color-star-empty) !important;
}

.mlc-stars__full {
	width: 0 !important;
	background-color: var(--mlc-color-star) !important;
}

/* Variante grande, para la ficha de producto y las reseñas. */
.mlc-stars--lg {
	--mlc-stars-width: 90px !important;
	--mlc-stars-height: 18px !important;
}

/* --------------------------------------------------------------------------
   Precios
   -------------------------------------------------------------------------- */
.mlc-price {
	display: flex !important;
	flex-wrap: wrap !important;
	align-items: baseline !important;
	gap: 10px !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-bold) !important;
	line-height: var(--mlc-lh-price) !important;
}

.mlc-price__old,
.mlc-price .mlc-price__old .amount {
	font-size: var(--mlc-fs-price-old) !important;
	color: var(--mlc-color-text) !important;
	text-decoration: line-through !important;
}

.mlc-price__new {
	font-size: var(--mlc-fs-price) !important;
	color: var(--mlc-color-sale) !important;
}

.mlc-price__single {
	font-size: var(--mlc-fs-price) !important;
	color: var(--mlc-color-text) !important;
}

/* Rango de precios de productos variables, formateado por WooCommerce. */
.mlc-price--range {
	font-size: var(--mlc-fs-price) !important;
	color: var(--mlc-color-text) !important;
}

.mlc-price--range del {
	font-size: var(--mlc-fs-price-old) !important;
	color: var(--mlc-color-text) !important;
	opacity: 1 !important;
}

.mlc-price--range ins {
	color: var(--mlc-color-sale) !important;
	text-decoration: none !important;
	background: none !important;
}

/* --------------------------------------------------------------------------
   Badge de descuento
   -------------------------------------------------------------------------- */
.mlc-badge {
	display: inline-flex !important;
	align-items: center !important;
	justify-content: center !important;
	min-height: var(--mlc-badge-height) !important;
	padding: 2px var(--mlc-badge-pad) !important;
	background-color: var(--mlc-color-sale) !important;
	color: var(--mlc-color-white) !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-bold) !important;
	font-size: var(--mlc-fs-badge) !important;
	line-height: 1.36 !important;
	letter-spacing: var(--mlc-ls-badge) !important;
	text-transform: uppercase !important;
	white-space: nowrap !important;
}

/* --------------------------------------------------------------------------
   Swatches de color
   -------------------------------------------------------------------------- */
.mlc-swatches {
	display: flex !important;
	flex-wrap: wrap !important;
	align-items: center !important;
	gap: var(--mlc-swatch-gap) !important;
	margin: 0 !important;
	padding: 0 !important;
	list-style: none !important;
}

.mlc-swatch {
	display: inline-flex !important;
	width: var(--mlc-swatch-size) !important;
	height: var(--mlc-swatch-size) !important;
	padding: 1px !important;
	border: 1px solid var(--mlc-color-border) !important;
	border-radius: 50% !important;
	background: none !important;
	cursor: pointer !important;
	transition: transform var(--mlc-transition), border-color var(--mlc-transition) !important;
}

.mlc-swatch:hover,
.mlc-swatch:focus-visible {
	border-color: var(--mlc-color-text) !important;
	transform: scale(1.06) !important;
}

.mlc-swatch[aria-pressed="true"],
.mlc-swatch.is-active {
	border-color: var(--mlc-color-text) !important;
	box-shadow: inset 0 0 0 1px var(--mlc-color-white) !important;
}

.mlc-swatch__inner {
	display: block !important;
	width: 100% !important;
	height: 100% !important;
	border-radius: 50% !important;
}

.mlc-swatches__more {
	margin-left: 6px !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-bold) !important;
	font-size: var(--mlc-fs-more) !important;
	line-height: 1.5 !important;
	color: var(--mlc-color-text) !important;
	text-decoration: underline !important;
	white-space: nowrap !important;
}

a.mlc-swatches__more:hover {
	color: var(--mlc-color-accent) !important;
}

/* --------------------------------------------------------------------------
   Botones
   -------------------------------------------------------------------------- */
.mlc-btn {
	display: inline-flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: var(--mlc-space-sm) !important;
	padding: 12px 20px !important;
	border: 1px solid var(--mlc-color-text) !important;
	background-color: var(--mlc-color-text) !important;
	color: var(--mlc-color-white) !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-bold) !important;
	font-size: var(--mlc-fs-small) !important;
	line-height: 1 !important;
	text-align: center !important;
	text-decoration: none !important;
	cursor: pointer !important;
	transition: opacity var(--mlc-transition) !important;
}

.mlc-btn:hover {
	opacity: 0.85 !important;
	color: var(--mlc-color-white) !important;
}

.mlc-btn--ghost {
	background-color: transparent !important;
	color: var(--mlc-color-text) !important;
}

.mlc-btn--ghost:hover {
	color: var(--mlc-color-text) !important;
}

.mlc-btn--block {
	width: 100% !important;
}

.mlc-btn[disabled],
.mlc-btn.is-loading {
	opacity: 0.55 !important;
	pointer-events: none !important;
}

/* --------------------------------------------------------------------------
   Iconos
   -------------------------------------------------------------------------- */
.mlc-icon {
	display: block !important;
	flex: 0 0 auto !important;
	color: inherit !important;
}

/* --------------------------------------------------------------------------
   Estado vacío
   -------------------------------------------------------------------------- */
.mlc-empty {
	display: flex !important;
	flex-direction: column !important;
	align-items: center !important;
	justify-content: center !important;
	gap: var(--mlc-space-md) !important;
	padding: clamp(32px, 6vw, 72px) var(--mlc-space-md) !important;
	text-align: center !important;
	background-color: var(--mlc-color-bg) !important;
	color: var(--mlc-color-text) !important;
}

.mlc-empty__title {
	margin: 0 !important;
	font-weight: var(--mlc-fw-semibold) !important;
	font-size: clamp(16px, 2vw, 20px) !important;
	letter-spacing: 0.3px !important;
	text-transform: uppercase !important;
}

.mlc-empty__text {
	margin: 0 !important;
	max-width: 46ch !important;
	font-weight: var(--mlc-fw-regular) !important;
	font-size: var(--mlc-fs-base) !important;
	color: var(--mlc-color-text-soft) !important;
}

/* --------------------------------------------------------------------------
   Indicador de carga
   -------------------------------------------------------------------------- */
.mlc-is-loading {
	position: relative !important;
	min-height: 120px !important;
}

.mlc-is-loading::after {
	content: "" !important;
	position: absolute !important;
	inset: 0 !important;
	background-color: rgba(255, 255, 255, 0.6) !important;
	z-index: 2 !important;
}

.mlc-spinner {
	position: absolute !important;
	top: 50% !important;
	left: 50% !important;
	width: 32px !important;
	height: 32px !important;
	margin: -16px 0 0 -16px !important;
	border: 3px solid var(--mlc-color-border) !important;
	border-top-color: var(--mlc-color-accent) !important;
	border-radius: 50% !important;
	animation: mlc-spin 0.8s linear infinite !important;
	z-index: 3 !important;
}

@keyframes mlc-spin {
	to {
		transform: rotate(360deg);
	}
}

/* --------------------------------------------------------------------------
   Avisos flotantes (feedback de AJAX)
   -------------------------------------------------------------------------- */
.mlc-toast {
	position: fixed !important;
	right: 20px !important;
	bottom: 20px !important;
	z-index: var(--mlc-z-panel) !important;
	display: flex !important;
	flex-direction: column !important;
	gap: var(--mlc-space-sm) !important;
	pointer-events: none !important;
}

.mlc-toast__item {
	padding: 12px 18px !important;
	background-color: var(--mlc-color-text) !important;
	color: var(--mlc-color-white) !important;
	font-family: var(--mlc-font-family) !important;
	font-weight: var(--mlc-fw-semibold) !important;
	font-size: var(--mlc-fs-small) !important;
	box-shadow: var(--mlc-shadow-panel) !important;
	animation: mlc-toast-in 0.25s ease !important;
}

.mlc-toast__item--error {
	background-color: var(--mlc-color-sale) !important;
}

@keyframes mlc-toast-in {
	from {
		opacity: 0;
		transform: translateY(8px);
	}
}

@media (prefers-reduced-motion: reduce) {
	.mlc-spinner {
		animation-duration: 2s !important;
	}

	.mlc-toast__item {
		animation: none !important;
	}

	.mlc-swatch {
		transition: none !important;
	}
}
