/* Ficha de producto (spec §6.7) */
/* Mismo contenedor que el header y el resto de las páginas (--nm-container): así el borde
   izquierdo no "salta" al pasar de la categoría a la ficha. La columna de compra se
   mantiene en 560px (galería de 640px) y la galería toma el resto. */
.nm-product { max-width: var(--nm-container); margin: 0 auto; padding: var(--nm-gutter); }
.nm-product-main { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 560px); gap: 32px; align-items: start; }

/* woocommerce-layout.css pone `.woocommerce div.product div.summary{float:right;
   width:48%;clear:none}` (especificidad 0,0,3,2: .woocommerce/.product/.summary +
   dos elementos div). Esa regla alcanza igual a `div.summary.nm-product-summary`, que
   ya está posicionada por la grilla de arriba: el float/width ganaba y la columna de
   compra quedaba angosta (título en 4 líneas, tabla de tramos apretada). Se repiten
   las tres clases propias del elemento (summary/entry-summary/nm-product-summary)
   más `.nm-product` para llegar a especificidad 0,0,4,0 y ganar sin !important. */
.nm-product .summary.entry-summary.nm-product-summary {
	float: none;
	width: auto;
	clear: none;
}

/* Galería fija en escritorio: se queda a la vista mientras se recorre la columna de compra.
   La cabecera no es fija (header.css: position:absolute), así que el desfase es solo aire.
   Si la galería (foto + miniaturas) no cabe en la ventana, no se fija: así no queda atrapada
   y se llega al pie de página. Con 4+ fotos las miniaturas hacen una sola fila con scroll. */
.nm-gallery { position: sticky; top: var(--nm-gutter); align-self: start; }
@media (max-height: 800px) { .nm-gallery { position: static; } }

/* Marco cuadrado: la foto se centra y nunca se amplía más allá de su tamaño natural
   (width/height del <img>), así una fuente chica no se ve borrosa. */
.nm-gallery-main-wrap { display: grid; place-items: center; aspect-ratio: 1; overflow: hidden; border: 1px solid var(--nm-line); border-radius: var(--nm-radius); background: var(--nm-white); }
.nm-gallery-main { display: block; width: auto; height: auto; max-width: 100%; max-height: 100%; object-fit: contain; transition: transform .2s ease; }
.nm-gallery-main-wrap.is-zoom .nm-gallery-main { transform: scale(2); }
.nm-gallery-thumbs { display: flex; gap: 12px; list-style: none; margin: 12px 0 0; padding: 0; overflow-x: auto; scroll-snap-type: x mandatory; }
.nm-gallery-thumbs li { flex: none; }
.nm-gallery-thumb { padding: 0; border: 1px solid var(--nm-line); border-radius: var(--nm-radius); background: var(--nm-white); cursor: pointer; scroll-snap-align: start; }
.nm-gallery-thumb[aria-current="true"] { border-color: var(--nm-navy); }
.nm-gallery-thumb img { display: block; width: 96px; height: 96px; object-fit: cover; }

.nm-product-kicker { text-transform: uppercase; font-size: var(--nm-fs-12); letter-spacing: .04em; margin: 0 0 4px; }
.nm-product-kicker a { color: var(--nm-red); text-decoration: none; }
.nm-product-summary .woocommerce-product-details__short-description { color: var(--nm-muted); margin: 0 0 20px; }
.nm-product-summary .product_title { font-family: Jost, system-ui, sans-serif; font-weight: 800; font-size: var(--nm-fs-34); color: var(--nm-ink); margin: 0 0 12px; }
.nm-product-stock { color: var(--nm-green); font-weight: 600; }
.nm-product-stock--agotado { color: var(--nm-muted); }
/* Agotado: insignia sólida, no solo texto gris. Blanco sobre --nm-red da 5,0:1 (AA); el rojo como
   texto sobre el fondo --nm-soft de la tarjeta de compra daría 4,4:1 y no pasaría. */
.nm-buy-card .nm-product-stock.nm-product-stock--agotado { display: inline-block; margin: 0 0 12px; padding: 6px 12px; border-radius: var(--nm-radius); background: var(--nm-red); color: var(--nm-white); font: 800 var(--nm-fs-13) / 1 var(--nm-font-display); letter-spacing: 0.06em; text-transform: uppercase; }
.nm-buy-card .nm-product-stock--agotado + .nm-whatsapp { margin-top: 0; }

/* Opciones del plugin Tier Pricing (modo options). El theme solo las estila. */
/* Dentro de la tarjeta de compra el recuadro propio de los tramos sobra (caja dentro de caja). */
.tpt__tiered-pricing { padding: 0; margin: 16px 0; }
.nm-buy-card { margin: 0 0 24px; padding: 20px; border: 1px solid var(--nm-line); border-radius: var(--nm-radius); background: var(--nm-soft); }
.nm-buy-card .price { margin: 0 0 8px; }
.nm-product-campaign { margin: 0 0 12px; }
.nm-buy-card .nm-product-stock { margin: 0 0 4px; font-size: var(--nm-fs-14); }
.nm-buy-card form.cart { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 0 12px; align-items: stretch; margin: 8px 0 0; }
.nm-buy-card form.cart > * { grid-column: 1 / -1; }
.nm-buy-card form.cart > .clear { display: none; }
/* Cantidad y botón comparten fila: el campo compacto a la izquierda, el botón ocupa el resto. */
.nm-buy-card form.cart > .quantity { grid-column: 1; margin: 0; }
.nm-buy-card form.cart > .single_add_to_cart_button { grid-column: 2; margin: 0; }
/* Con 1 unidad (o 1 por pedido) WooCommerce no dibuja el selector: deja un <div class="quantity">
   con solo un input hidden. Sin esto la columna de 88px queda vacía a la izquierda del botón. */
.nm-buy-card form.cart > .quantity:has(> input[type="hidden"]) { display: none; }
.nm-buy-card form.cart:has(> .quantity > input[type="hidden"]) > .single_add_to_cart_button { grid-column: 1 / -1; }
.nm-buy-card .quantity .qty { box-sizing: border-box; width: 100%; height: 100%; min-height: 48px; background: var(--nm-white); text-align: center; }
.tiered-pricing-option { display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: var(--nm-radius); }
.tiered-pricing-option { background: var(--nm-white); border: 1px solid var(--nm-line); margin-bottom: 6px; }
.tiered-pricing-option:hover { border-color: var(--nm-navy); }
.tiered-pricing-option__quantity { font-weight: 700; color: var(--nm-navy); }
.tiered-pricing-option-price__original { text-decoration: line-through; color: var(--nm-muted); margin-right: 6px; }
.tiered-pricing-option-price__discounted { color: var(--nm-red); font-weight: 800; }
/* El rojo es del precio mayorista (spec §5): la fila "Precio" (cantidad 1) lleva el precio normal en tinta. */
.tiered-pricing-option--default .tiered-pricing-option-price__discounted { color: var(--nm-ink); }
.tiered-pricing-option-total { margin-left: auto; font-size: var(--nm-fs-13); color: var(--nm-muted); }

/* woocommerce.css pone `.woocommerce button.button.alt{background-color:#7f54b3}`
   (especificidad 0,0,3,1: .woocommerce/.button/.alt + elemento button; el :where()
   que lo envuelve no suma especificidad). Le gana a `.woocommerce .button,
   .woocommerce button.button` de cart.css (0,0,2,1), así que el botón "Agregar al
   carrito" se pintaba con el morado por defecto de WooCommerce. Se repiten las tres
   clases del botón (single_add_to_cart_button/button/alt) más `.nm-product` para
   llegar a 0,0,4,0 y ganar sin !important, reusando el mismo look de `.nm-btn`. */
.nm-product .single_add_to_cart_button.button.alt {
	display: block;
	width: 100%;
	min-height: 48px; /* acción principal: objetivo táctil cómodo */
	padding: 12px 18px;
	border: 0;
	border-radius: var(--nm-radius);
	background: var(--nm-navy);
	color: var(--nm-white);
	font: 700 var(--nm-fs-18) / 1 var(--nm-font-display);
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.nm-product .single_add_to_cart_button.button.alt:hover {
	background: var(--nm-navy-dark);
	color: var(--nm-white);
}

/* La caja de cantidad (WooCommerce) queda sin estilo propio del theme junto al botón
   ya intervenido arriba: se le da el mismo borde/radio que el resto de los inputs
   del theme y una altura acorde al botón. */
.nm-product .quantity .qty {
	height: 44px;
	padding: 0 12px;
	border: 1px solid var(--nm-line);
	border-radius: var(--nm-radius);
	font: 400 var(--nm-fs-14) / 1 var(--nm-font-body);
	color: var(--nm-ink);
}

.nm-whatsapp { display: flex; justify-content: center; align-items: center; gap: 8px; margin-top: 12px; min-height: 44px; padding: 8px 16px; font-size: var(--nm-fs-14); border-radius: var(--nm-radius-pill); background: var(--nm-green); color: var(--nm-white); text-decoration: none; font-weight: 700; }
.nm-product-data { display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; margin: 0; padding: 0 0 12px; font-size: var(--nm-fs-13); color: var(--nm-muted); }
.nm-product-data dt { color: var(--nm-muted); }
.nm-product-benefits { display: grid; gap: 8px; list-style: none; margin: 0; padding: 12px 0 0; border-top: 1px solid var(--nm-line); color: var(--nm-muted); }
.nm-product-benefits li { display: flex; align-items: center; gap: 8px; font-size: var(--nm-fs-13); }

.nm-sticky-buy { display: none; }

/* Relacionados (WooCommerce): misma tarjeta .nm-card del catálogo (content-product.php
   la reutiliza), pero div.products.columns-4 llega sin layout propio del theme, así que en
   escritorio cada artículo ocupa el ancho completo y la imagen se ve casi a su tamaño
   intrínseco, apilada con grandes huecos verticales. Mismo ritmo que .nm-grid en shop.css. */
.related.products { margin-top: 48px; }
.related.products div.products {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--nm-gutter);
	list-style: none;
	margin: 16px 0 0;
	padding: 0;
}

/* woocommerce-layout.css agrega un clearfix de ::before/::after a los contenedores
   .products pensado para su layout con floats; con `display:grid` esos pseudo-elementos
   serían celdas reales y correrían el primer producto una posición. Hoy el loop es un
   <div> (woocommerce/loop/loop-start.php) y el clearfix apunta a ul.products, pero se
   anula igual por si otra hoja lo aplica al contenedor. */
.nm-product .related.products div.products::before,
.nm-product .related.products div.products::after {
	content: none;
	display: none;
}

@media (max-width: 820px) {
	:root {
		/* Alto real de la barra fija (medido: ~63px) con margen de seguridad. */
		--nm-sticky-buy-h: 72px;
	}
	.nm-product-main { grid-template-columns: 1fr; gap: 24px; }
	.nm-gallery { position: static; }
	.nm-buy-card form.cart { grid-template-columns: 72px minmax(0, 1fr); }
	.nm-product .single_add_to_cart_button.button.alt { font-size: var(--nm-fs-16); padding-inline: 8px; }
	.nm-product .single_add_to_cart_button.button.alt, .nm-buy-card .quantity .qty { min-height: 52px; }
	.nm-sticky-buy .nm-btn { min-height: 48px; }
	.nm-gallery-thumb img { width: 72px; height: 72px; }
	.nm-product { padding: 16px; padding-bottom: calc(16px + var(--nm-sticky-buy-h)); }
	.nm-product-summary .woocommerce-product-details__short-description { color: var(--nm-muted); margin: 0 0 20px; }
.nm-product-summary .product_title { font-size: var(--nm-fs-24); }
	.related.products div.products { grid-template-columns: repeat(2, 1fr); gap: 16px; }
	.nm-sticky-buy { display: flex; position: fixed; inset: auto 0 0 0; z-index: 50; gap: 12px; align-items: center; justify-content: space-between; padding: 12px 16px; background: var(--nm-white); border-top: 1px solid var(--nm-line); box-shadow: 0 -4px 16px rgba(27, 29, 104, .12); }
	.nm-sticky-buy[hidden] { display: none; }
	/* El scroll a anclas (#reviews, etc.) no debe terminar tapado por la barra fija. */
	html { scroll-padding-bottom: var(--nm-sticky-buy-h); }
	/* El pie de página es lo último del documento: sin este margen, sus últimos
	   pixeles quedan tapados por la barra fija al llegar al final del scroll.
	   product.css solo se carga en la ficha de producto, así que esta regla no
	   afecta al footer en el resto del sitio. */
	footer.nm-footer { padding-bottom: var(--nm-sticky-buy-h); }
}

@media (prefers-reduced-motion: reduce) {
	.nm-gallery-main { transition: none; }
}

/* woocommerce.css pinta el precio de la ficha con `.woocommerce div.product p.price`
   (0,3,2) en verde oliva #958e09: contraste 3,4:1 y fuera de la paleta. */
.nm-content .nm-product .nm-product-summary .price {
	color: var(--nm-navy);
	font: 800 var(--nm-fs-24) / 1.2 var(--nm-font-display);
}

/* Títulos de sección de la ficha (Descripción, Productos relacionados): el mismo estilo
   de h2 de sección de la portada (Jost 800, mayúsculas, a la izquierda). */
.nm-section-title,
.related.products > h2 {
	margin: 0 0 18px;
	font-size: var(--nm-fs-24);
	font-weight: 800;
	letter-spacing: 0.02em;
	text-align: left;
	text-transform: uppercase;
}

/* Descripción larga: medida de lectura, no 170 caracteres por línea. */
.nm-product-description { margin-top: 40px; }
.nm-product-description-body { max-width: 75ch; }

/* Barra fija móvil: el precio manda, el botón acompaña. */
.nm-sticky-price { color: var(--nm-navy); font: 800 var(--nm-fs-18) / 1.1 var(--nm-font-display); }
.nm-sticky-price del { font-weight: 400; font-size: var(--nm-fs-14); color: var(--nm-muted); }
.nm-sticky-price ins { text-decoration: none; }
