/* UX de carrito y checkout — nutricionanimal.com.mx — CMP 04/08/2026 */

/* --- 1. Carrito sin edición de dirección --------------------------------- */
/* Refuerzo por si un HTML cacheado antiguo se sirve antes de la purga. */
.woocommerce-cart .woocommerce-shipping-calculator,
.woocommerce-cart .shipping-calculator-button,
.woocommerce-cart .shipping-calculator-form {
	display: none !important;
}

.woocommerce-cart .na-cc-shipping-notice > .title {
	display: none;
}

.woocommerce-cart .na-cc-shipping-notice > [data-title] {
	font-family: 'Nunito', sans-serif;
	font-size: 14px;
	line-height: 1.45;
	color: #666;
	padding: 10px 0;
	border: 0;
	width: 100%;
	text-align: left;
}

/* --- 2. Sección «¿Algo más?» -------------------------------------------- */
.na-cc-suggestions {
	margin: 40px 0 50px;
	font-family: 'Nunito', sans-serif;
	clear: both;
}

.na-cc-suggestions__title {
	font-size: 24px;
	font-weight: 700;
	margin: 0 0 24px;
	color: #1a1a1a;
}

.na-cc-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 24px;
}

/* Columna flex para que los botones queden alineados entre tarjetas aunque los
   títulos ocupen distinto número de líneas. */
.na-cc-card {
	text-align: center;
	display: flex;
	flex-direction: column;
}

.na-cc-card__thumb {
	display: block;
	margin-bottom: 12px;
}

.na-cc-card__thumb img {
	width: 100%;
	height: auto;
	border-radius: 12px;
}

.na-cc-card__title {
	font-size: 15px;
	font-weight: 600;
	line-height: 1.35;
	margin: 0 0 6px;
}

.na-cc-card__title a {
	color: #1a1a1a;
	text-decoration: none;
}

.na-cc-card__title a:hover {
	color: #2e7d32;
}

.na-cc-card__price {
	font-size: 15px;
	margin-bottom: 12px;
}

.na-cc-card__price del {
	opacity: 0.6;
	font-size: 13px;
}

.na-cc-card__action {
	margin-top: auto;
	padding-top: 4px;
}

.na-cc-card__action .button {
	display: inline-block;
	background: #1a1a1a;
	color: #fff;
	border-radius: 30px;
	padding: 9px 22px;
	font-size: 14px;
	font-weight: 700;
	line-height: 1.4;
}

.na-cc-card__action .button:hover,
.na-cc-card__action .button:focus {
	background: #2e7d32;
	color: #fff;
}

@media (max-width: 991px) {
	.na-cc-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* --- 2 bis. Maquetación de la página del carrito ------------------------- */
/*
   ÁRBOL REAL, verificado en vivo el 04/09/2026 (playwright, carrito con dos
   productos, viewport 1280). La página NO usa el widget `woocommerce-cart` de
   Elementor Pro: usa un widget `shortcode` con `[woocommerce_cart]`. No existen
   `.e-cart__column-start` ni `.e-cart-totals`; el marcado es el de cart.php de
   serie y la maquetación del tema es de FLOATS:

     div.woocommerce
     ├── .woocommerce-notices-wrapper
     ├── h3                              (título «Carrito»)
     ├── form.woocommerce-cart-form      → table.shop_table.cart
     ├── section.na-cc-suggestions       («¿Algo más?», ahora en woocommerce_after_cart)
     └── .cart-collaterals
         ├── .cross-sells   float:left   48%   (10 productos, ~2 900 px de alto)
         └── .cart_totals   float:right  48%   (position: static, NO pegajoso)

   Con floats el resumen no puede subir al lado de la tabla: cae debajo, a la
   derecha de los cross-sells del tema. De ahí el «arriba una fila de productos,
   luego algo más, y al final a la derecha el resumen».

   POR QUÉ `display: contents` EN `.cart-collaterals`
   Para que `.cart_totals` y `.cross-sells` sean ítems de la rejilla hay que
   quitar de en medio a su padre. `.cart-collaterals` es un div sin semántica
   (sin rol, sin foco, sin contenido propio), así que aplanarlo no tiene coste
   de accesibilidad. Sus pseudoelementos de clearfix SÍ generarían caja y se
   colarían como dos ítems fantasma en la rejilla, por eso se anulan abajo.

   LO QUE NO SE HACE: `display: contents` en `form.woocommerce-cart-form`.
   Se probó en vivo y maqueta perfecto, pero deja el <form> SIN CAJA y
   `blockUI` —que WooCommerce llama sobre ese mismo formulario al actualizar el
   carrito— necesita una caja donde pintar su velo. No merece el riesgo: el
   bloque de sugerencias se sacó del <form> por PHP (ver na-cart-sugerencias.php).

   EL GUARDIA `:has( > form.woocommerce-cart-form )` deja el carrito VACÍO con la
   maquetación original: ahí `div.woocommerce` solo tiene el aviso y el botón de
   volver a la tienda, y rejillarlos a dos columnas quedaría absurdo.
   La raíz suma 0-4-2, muy por encima de los 0-3-0 del tema
   (`.woocommerce .cart-collaterals .cart_totals { float: right; width: 48% }`),
   así que no hace falta ni un `!important`.
*/
body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) {
	display: grid;
	grid-template-columns: 1fr;
	grid-template-areas:
		'avisos'
		'titulo'
		'productos'
		'resumen'
		'sugerencias'
		'cross';
	gap: 8px 40px;
	align-items: start;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .woocommerce-notices-wrapper {
	grid-area: avisos;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > h3 {
	grid-area: titulo;
}

/* `min-width: 0` para que la tabla no reviente la pista: una <table> impone su
   ancho mínimo de contenido y sin esto se desbordaría de la columna. */
body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > form.woocommerce-cart-form {
	grid-area: productos;
	min-width: 0;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .na-cc-suggestions {
	grid-area: sugerencias;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals {
	display: contents;
}

/* Los dos pseudoelementos del clearfix del tema (`content: " "; display: table`)
   sobreviven a `display: contents` y se convertirían en ítems de la rejilla. */
body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals::before,
body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals::after {
	display: none;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals > .cart_totals {
	grid-area: resumen;
	float: none;
	width: auto;
	min-width: 0;
}

body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals > .cross-sells {
	grid-area: cross;
	float: none;
	width: auto;
	min-width: 0;
}

/* 992px es el corte que ya usa este fichero para `.na-cc-grid`. */
@media ( min-width: 992px ) {
	body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) {
		grid-template-columns: minmax( 0, 1fr ) minmax( 300px, 360px );
		grid-template-areas:
			'avisos      avisos'
			'titulo      titulo'
			'productos   resumen'
			'sugerencias resumen'
			'cross       cross';
	}

	/* «¿Algo más?» va JUSTO DEBAJO de la tabla del carrito, en la MISMA columna,
	   no a todo el ancho por debajo del resumen: el bloque nace de lo que hay en
	   el carrito y se lee como continuación de la tabla. `resumen` pasa a ocupar
	   dos filas; como la raíz tiene `align-items: start`, no se estira ni pierde
	   el recorrido que necesita su `position: sticky`. */
	body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .na-cc-suggestions {
		margin-top: 24px;
	}

	/* Pegajoso, no fijo: `align-items: start` de la raíz ya le da altura de
	   contenido (con `stretch` el sticky no tendría recorrido). El desplazamiento
	   esquiva la barra principal pegajosa de la cabecera 53686 (~92 px). */
	body.woocommerce-cart .page-content .woocommerce:has( > form.woocommerce-cart-form ) > .cart-collaterals > .cart_totals {
		position: sticky;
		top: var( --na-cart-sticky-top, 116px );
	}
}

/* --- 3. Aviso de «Procesando tu pago…» ---------------------------------- */
/* El velo blanco sin texto de blockUI nunca se ve en el checkout.
   blockUI aplica su estilo inline sin !important, así que esta regla lo gana.
   La clase woocommerce-checkout también está en la página de gracias, lo cual
   es deseable: ahí tampoco debe verse. */
.woocommerce-checkout .blockUI.blockOverlay {
	opacity: 0 !important;
}

.na-cc-processing {
	position: fixed;
	inset: 0;
	z-index: 999999;
	display: none;
	align-items: center;
	justify-content: center;
	background: #f4f9f4;
	font-family: 'Nunito', sans-serif;
	text-align: center;
	padding: 24px;
}

.na-cc-processing.is-visible {
	display: flex;
}

.na-cc-processing__box {
	max-width: 420px;
}

.na-cc-processing__spinner {
	width: 56px;
	height: 56px;
	margin: 0 auto 24px;
	border: 5px solid rgba(46, 125, 50, 0.2);
	border-top-color: #2e7d32;
	border-radius: 50%;
	animation: na-cc-spin 0.9s linear infinite;
}

.na-cc-processing__title {
	font-size: 22px;
	font-weight: 700;
	color: #1a1a1a;
	margin: 0 0 8px;
}

.na-cc-processing__warning {
	font-size: 15px;
	color: #555;
	margin: 0;
}

body.na-cc-processing-active {
	overflow: hidden;
}

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

@media (prefers-reduced-motion: reduce) {
	.na-cc-processing__spinner {
		animation: none;
	}
}

/* Página de gracias: ningún velo residual, ni un fotograma. */
.woocommerce-order-received .na-cc-processing,
.woocommerce-order-received .blockUI,
.woocommerce-order-received .blockUI.blockOverlay {
	display: none !important;
	opacity: 0 !important;
}
