/*
Theme Name: OZ Thema 4.0 — Marca cliente
Description: Tema hijo de OZ-Thema-4.0. Aquí vive la personalización de marca de cada instalación (colores, tipografías y overrides visuales). El tema padre queda neutro y reutilizable; este hijo le pone la identidad del cliente.
Author: Ozado
Template: OZ-Thema-4.0
Version: 1.0.0
Requires PHP: 8.0
Text Domain: oz-tema-4-child
*/

/* =========================================================================
   MARCA DEL CLIENTE
   El tema padre expone estas dos variables NEUTRAS. Ponles los colores
   reales del cliente para remarcar header, footer, botón "Categorías",
   títulos del pie y el banner de asesor de una sola vez.

   Alternativa sin código: Personalizar → «Diseño OZ» → «Header y Footer»
   → «Color de marca». (Si defines aquí abajo, esto gana sobre el Customizer.)
   ========================================================================= */
:root {
	--oz-brand-primary: #1f589f;  /* Fondo de header (azul Perubean) */
	--oz-brand-accent:  #9bca46;  /* Acento: botones, títulos de columna del footer, hover de links (verde Perubean) */
}

/* =========================================================================
   FOOTER — fondo con foto real del sitio principal (mismo ecosistema visual
   que perubean.local). La imagen NO se duplica en este sitio: se referencia
   por URL absoluta al dominio principal (ver inc/oz-domains.php) porque este
   WordPress es independiente y no tiene el archivo en su propia Media
   Library. Overlay oscuro semitransparente para que el texto blanco siga
   siendo legible sobre la foto, igual que el original.
   ========================================================================= */
/* El padre pinta el fondo en .site-footer-new__main ("BLOQUE NEGRO", ver
   footer.css línea ~219), no en .site-footer-new — es el elemento que
   realmente se ve detrás del contenido, por eso la imagen va aquí. */
.site-footer-new__main {
	background-image:
		linear-gradient(rgba(20, 20, 20, 0.72), rgba(20, 20, 20, 0.72)),
		var(--oz-footer-bg-image, none);
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
}

/* "Libro de reclamaciones" no existe en el sitio original ni tiene página
   real acá (link href="#" hardcodeado en el padre, sin condicional) — se
   oculta, el footer real de ozado no lo tenía. */
.site-footer-new__claims-book {
	display: none;
}

/* El footer original de ozado tenía 3 columnas (Nosotros / Menu / Contacto),
   sin columna de Categorías de producto — se oculta para igualar la
   referencia real, y se reparte el ancho entre las 3 restantes. */
.site-footer-new__col--categories {
	display: none;
}

/* Títulos de columna del footer ("Nosotros"/"Páginas"/"Contáctanos") en
   verde de marca — el padre los pone en blanco fijo (footer.css línea 242);
   el original de ozado los tenía en el verde --theme-color-2. */
.site-footer-new__col-title {
	color: var(--oz-brand-accent, #9bca46);
}

/* Íconos sociales del footer (Facebook, correo, Instagram) — círculos
   blancos con hover verde de marca, igual al original de ozado. */
.site-footer-new__social {
	display: flex;
	align-items: center;
	gap: 10px;
	margin-top: 18px;
}
.site-footer-new__social-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid rgba(255, 255, 255, 0.7);
	color: #ffffff;
	transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}
.site-footer-new__social-link:hover {
	background-color: var(--oz-brand-accent, #9bca46);
	border-color: var(--oz-brand-accent, #9bca46);
	color: #ffffff;
}

/* Certificación SENASA en el pie (punto 9 del brief). El logo real
   (attachment ID 222, Media Library) trae fondo blanco propio — se envuelve
   en una placa clara para que se lea sobre la foto oscura del footer, igual
   lenguaje visual (borde sutil, radio pequeño) que el resto de bloques
   destacados del pie (p. ej. libro de reclamaciones). */
.site-footer-new__certifications {
	display: inline-flex;
	align-items: center;
	margin-top: 4px;
	padding: 8px 14px;
	background-color: #ffffff;
	border-radius: 6px;
	border: 1px solid rgba(255, 255, 255, 0.7);
}
.site-footer-new__cert-logo {
	display: block;
	width: 140px;
	height: 40px;
	object-fit: contain;
}
.site-footer-new__main-grid {
	grid-template-columns: minmax(0, 1.9fr) minmax(150px, 0.9fr) minmax(220px, 1fr) !important;
}
/* [Fix footer móvil] La regla de arriba (3 columnas, sin @media, con
   !important) no consideraba el rango móvil — ganaba incluso contra el
   @media(max-width:767px){grid-template-columns:1fr} del padre (footer.css),
   que no tiene !important. Resultado real en 390px: la columna "Nosotros"
   colapsaba a 0px de ancho (su fr se resolvía a 0 al no caber el resto de
   columnas fijas en minmax(150px)/minmax(220px) dentro de un contenedor
   angosto) mientras "Páginas" y "Contáctanos" quedaban con ancho fijo
   superpuestas sobre ese espacio colapsado — exactamente el reporte visual
   del usuario (texto cortado palabra por palabra, columnas encimadas). Se
   agrega el mismo breakpoint que ya usa el padre para apilar en 1 columna,
   con !important para ganar contra la regla de 3 columnas de arriba. */
@media (max-width: 767px) {
	.site-footer-new__main-grid {
		grid-template-columns: 1fr !important;
	}
}

/* =========================================================================
   OVERRIDES ADICIONALES DEL CLIENTE
   Añade aquí cualquier ajuste visual específico de esta instalación.
   Esta hoja se carga DESPUÉS del CSS del padre, así que gana sin !important.
   ========================================================================= */

/* Mapa en el footer (reemplaza el texto "Acerca de"). Responsive. */
.site-footer-new__map {
	width: 100%;
	max-width: 420px;
	border-radius: 12px;
	overflow: hidden;
	line-height: 0;
}
.site-footer-new__map iframe {
	display: block;
	width: 100%;
	height: 220px;
	border: 0;
}

/* ===== Drawer lateral de Categorías ===== */
body.oz-cat-lock { overflow: hidden; }

.oz-cat-drawer {
	position: fixed;
	inset: 0;
	z-index: 100000;
	visibility: hidden;
	pointer-events: none;
}
.oz-cat-drawer.is-open { visibility: visible; pointer-events: auto; }

.oz-cat-drawer__overlay {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.5);
	opacity: 0;
	transition: opacity .25s ease;
}
.oz-cat-drawer.is-open .oz-cat-drawer__overlay { opacity: 1; }

.oz-cat-drawer__panel {
	position: absolute;
	top: 0;
	left: 0;
	height: 100%;
	width: min(340px, 86vw);
	background: #ffffff;
	box-shadow: 2px 0 24px rgba(0, 0, 0, .18);
	display: flex;
	flex-direction: column;
	transform: translateX(-100%);
	transition: transform .28s ease;
	overflow-y: auto;
}
.oz-cat-drawer.is-open .oz-cat-drawer__panel { transform: translateX(0); }

.oz-cat-drawer__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 16px 18px;
	background: var(--oz-footer-orange, var(--oz-brand-accent, #5b6672));
	color: #fff;
	position: sticky;
	top: 0;
}
.oz-cat-drawer__title { font-size: 17px; font-weight: 700; }
.oz-cat-drawer__close {
	display: inline-flex; align-items: center; justify-content: center;
	width: 34px; height: 34px; padding: 0;
	background: transparent; border: 0; color: #fff; cursor: pointer; border-radius: 8px;
}
.oz-cat-drawer__close:hover { background: rgba(255, 255, 255, .18); }

.oz-cat-drawer__list { list-style: none; margin: 0; padding: 6px 0; }
.oz-cat-item { border-bottom: 1px solid #eee; }
.oz-cat-item__row { display: flex; align-items: stretch; }
.oz-cat-item__link {
	flex: 1 1 auto;
	display: block;
	padding: 13px 18px;
	color: #1f2937;
	text-decoration: none;
	font-size: 15px;
	line-height: 1.3;
}
.oz-cat-item__link:hover { background: #f6f7f8; color: var(--oz-footer-orange, var(--oz-brand-accent, #5b6672)); }
.oz-cat-item__toggle {
	flex: 0 0 46px;
	display: inline-flex; align-items: center; justify-content: center;
	background: transparent; border: 0; border-left: 1px solid #eee; color: #6b7280; cursor: pointer;
}
.oz-cat-item__toggle svg { transition: transform .2s ease; }
.oz-cat-item.is-expanded > .oz-cat-item__row .oz-cat-item__toggle svg { transform: rotate(180deg); }

.oz-cat-item__sub { list-style: none; margin: 0; padding: 0; background: #fafbfc; }
.oz-cat-item__sub a {
	display: block;
	padding: 10px 18px 10px 34px;
	color: #4b5563;
	text-decoration: none;
	font-size: 14px;
}
.oz-cat-item__sub a:hover { background: #eef1f4; color: var(--oz-footer-orange, var(--oz-brand-accent, #5b6672)); }

/* ===== Sidecart (cajón lateral) del cotizador con los colores de la marca =====
   El plugin trae paleta de otra marca (rojo #bc0811 + azul #001E50).
   Acento (rojo) → naranja la marca; estructura (azul) → oscuro la marca. */
body .ozc-sidecart {
	--ozc-sc-accent:      var(--oz-brand-accent, #5b6672);
	--ozc-sc-accent-dark: color-mix(in srgb, var(--oz-brand-accent, #5b6672) 82%, #000);
	--ozc-sc-line:        var(--oz-brand-accent, #5b6672);
	--ozc-sc-yellow:      var(--oz-brand-accent, #5b6672);
	--ozc-sc-yellow-dark: color-mix(in srgb, var(--oz-brand-accent, #5b6672) 82%, #000);
	--ozc-sc-wa:          var(--oz-brand-accent, #5b6672);
	--ozc-sc-wa-dark:     color-mix(in srgb, var(--oz-brand-accent, #5b6672) 82%, #000);
}
.ozc-sidecart .ozc-sidecart__header { background: #111111; }
.ozc-sidecart .ozc-sidecart__btn--cart {
	background: #111111;
	border-color: #111111;
	box-shadow: 0 2px 8px rgba(17, 17, 17, .35);
}
.ozc-sidecart .ozc-sidecart__btn--cart:hover { background: #262626; border-color: #262626; }
.ozc-sidecart .ozc-sidecart__btn--continue { border-color: #111111; color: #111111; }
.ozc-sidecart .ozc-sidecart__btn--continue:hover { border-color: #111111; color: #111111; }
.ozc-sidecart .ozc-sidecart-item__remove { background-color: #111111; }
.ozc-sidecart .ozc-sidecart__btn--quote { box-shadow: 0 2px 8px rgba(0, 0, 0, .2); }

/* ===== Carrito Cotizador (página /cart/) con los colores de la marca =====
   quote-cart.css trae paleta de otra marca (azul #004674 + amarillo #f7d022)
   definida como variables en .ozc-quote-cart. Re-mapeo la marca:
   amarillo (CTA principal) → naranja de marca; azul (estructura: botón correo,
   steppers, bordes) → negro la marca. El verde de WhatsApp se conserva. */
body .ozc-quote-cart {
	--ozc-bg:          #f6f6f6;                  /* fondo neutro, sin tinte azul */
	--ozc-border:      rgba(17, 17, 17, 0.13);
	--ozc-border-soft: rgba(17, 17, 17, 0.07);
	--ozc-accent:      #141414;
	--ozc-accent-dark: #000000;
	--ozc-accent-line: var(--oz-brand-accent, #5b6672);
	--ozc-yellow:      var(--oz-brand-accent, #5b6672);                  /* CTA (badges de paso, botón WhatsApp) */
	--ozc-yellow-dark: color-mix(in srgb, var(--oz-brand-accent, #5b6672) 82%, #000);
	--ozc-shadow:      0 1px 4px rgba(0, 0, 0, 0.07), 0 6px 20px rgba(0, 0, 0, 0.04);
}
/* Los badges de paso (1·2·3) y el CTA sobre naranja necesitan texto blanco */
body .ozc-quote-cart .ozc-step { color: #ffffff; }
body .ozc-quote-cart .ozc-quote-cart__btn--primary,
body .ozc-quote-cart .ozc-quote-cart__btn--primary:hover { color: #ffffff !important; }

/* ===== Cards Misión/Visión/Valores (Nosotros) — .oz-hover-info-card =====
   Componente Icono+Texto del maquetador (clases reales: .oz-pb-icon-text,
   .oz-pb-it__icon, .oz-pb-it__title, .oz-pb-it__desc). Aplica solo a los
   componentes con la clase "oz-hover-info-card" + modificador de color:
     --negro | --naranja | --claro

   ARQUITECTURA (móvil primero):
   · BASE (todos los dispositivos): todo visible y en flujo — icono, título
     y descripción. Ningún hover. Es el comportamiento de móvil/táctil.
   · @media (hover:hover) and (pointer:fine) → SOLO con mouse real (desktop
     y laptop): sistema de 2 estados. Normal = icono+título; hover = SOLO la
     descripción (capa absoluta centrada). En táctil este bloque nunca corre,
     así que un tap/deslizar no puede activar estados raros.
   · Los media por ancho (1440/1024/767) solo ajustan TAMAÑOS. */
.oz-hover-info-card { --hic-bg: #141414; --hic-text: #ffffff; }
.oz-hover-info-card--naranja { --hic-bg: var(--oz-brand-accent, #5b6672); }
.oz-hover-info-card--claro   { --hic-bg: color-mix(in srgb, var(--oz-brand-accent, #5b6672) 70%, #fff); }

/* Fila: columnas pegadas (gap 0 SOLO en este grid) y estiradas → mismas alturas */
.oz-pb-grid:has(.oz-hover-info-card) {
	gap: 0 !important;
	column-gap: 0 !important;
	align-items: stretch;
}
.oz-hover-info-card { height: 100%; }

/* ── BASE: card rectangular, contenido centrado y EN FLUJO (móvil/táctil) ── */
.oz-hover-info-card .oz-pb-icon-text {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	height: 100%;
	min-height: 340px;
	width: 100%;
	max-width: 100%;
	padding: 35px 24px;
	background: var(--hic-bg);
	border-radius: 0;
	text-align: center;
	box-sizing: border-box;
}
.oz-hover-info-card .oz-pb-it__icon {
	width: 112px;
	height: 112px;
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	background: #ffffff;
	border-radius: 50%;
	margin: 0 0 18px !important;
}
.oz-hover-info-card .oz-pb-it__icon img,
.oz-hover-info-card .oz-pb-it__icon svg {
	width: 54px !important;
	height: 54px !important;
	object-fit: contain;
}
.oz-hover-info-card .oz-pb-it__text { width: 100%; max-width: 100%; }
.oz-hover-info-card .oz-pb-it__title {
	margin: 0;
	color: var(--hic-text) !important;
	font-weight: 600;
	text-align: center !important;
}
/* Descripción base: visible, en flujo, centrada, sin anchos fijos de desktop */
.oz-hover-info-card .oz-pb-it__desc,
.oz-hover-info-card .oz-pb-it__desc p {
	text-align: center !important; /* nunca justificado */
	text-justify: none;
	overflow-wrap: break-word;
	word-break: normal;
}
.oz-hover-info-card .oz-pb-it__desc {
	position: static;
	width: 100%;
	max-width: 340px;
	margin: 20px auto 0;
	padding: 0;
	box-sizing: border-box;
	color: var(--hic-text);
	font-size: 14px !important; /* el panel pone 15px con más especificidad */
	font-weight: 400;
	line-height: 1.6 !important;
	opacity: 1;
	visibility: visible;
	transform: none;
}
.oz-hover-info-card .oz-pb-it__desc p { margin: 0; }

/* ── DOS ESTADOS: SOLO dispositivos con mouse real (desktop + laptop).
   En táctil (hover:none / pointer:coarse) nada de esto existe. ── */
@media (hover: hover) and (pointer: fine) {
	.oz-hover-info-card .oz-pb-icon-text { overflow: hidden; }

	/* Capa 1: icono + título (visibles en reposo, se desvanecen en hover) */
	.oz-hover-info-card .oz-pb-it__icon,
	.oz-hover-info-card .oz-pb-it__title {
		opacity: 1;
		visibility: visible;
		transform: translateY(0);
		transition: opacity .35s ease, transform .35s ease, visibility 0s;
	}
	.oz-hover-info-card:hover .oz-pb-it__icon,
	.oz-hover-info-card:hover .oz-pb-it__title {
		opacity: 0;
		visibility: hidden;
		transform: translateY(-8px);
		transition: opacity .35s ease, transform .35s ease, visibility 0s linear .35s;
	}

	/* Capa 2: descripción como capa absoluta que ocupa TODA la card,
	   centrada vertical y horizontalmente. Oculta en reposo.
	   El ancho del texto se limita con padding lateral (mín. 24px,
	   y crece para dejar el texto a máx. ~320px) — sin left/translateX. */
	.oz-hover-info-card .oz-pb-it__desc {
		position: absolute;
		inset: 0;
		width: auto;
		max-width: none;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		margin: 0;
		padding-left: max(24px, calc((100% - 320px) / 2));
		padding-right: max(24px, calc((100% - 320px) / 2));
		opacity: 0;
		visibility: hidden;
		transform: translateY(8px);
		transition: opacity .35s ease, transform .35s ease, visibility 0s linear .35s;
	}
	.oz-hover-info-card:hover .oz-pb-it__desc {
		opacity: 1;
		visibility: visible;
		transform: translateY(0);
		transition: opacity .35s ease, transform .35s ease, visibility 0s;
	}
}

/* ── LAPTOP (1025–1440px): solo tamaños; el sistema de 2 estados de arriba
   sigue activo porque la laptop tiene mouse (hover:hover + pointer:fine). ── */
@media (min-width: 1025px) and (max-width: 1440px) {
	.oz-hover-info-card .oz-pb-icon-text { min-height: 320px; padding: 25px 35px; }
	.oz-hover-info-card .oz-pb-it__icon { width: 90px; height: 90px; margin-bottom: 18px !important; }
	.oz-hover-info-card .oz-pb-it__icon img,
	.oz-hover-info-card .oz-pb-it__icon svg { width: 44px !important; height: 44px !important; }
	.oz-hover-info-card .oz-pb-it__title { font-size: 18px !important; }
	.oz-hover-info-card .oz-pb-it__desc { font-size: 13px !important; line-height: 1.5 !important; }
}

/* ── TABLET (768–1024px): solo tamaños. En tablet táctil el bloque de hover
   no corre → todo visible en flujo y la card crece con su contenido. ── */
@media (min-width: 768px) and (max-width: 1024px) {
	.oz-hover-info-card .oz-pb-icon-text { min-height: 300px; height: auto; padding: 30px 24px; }
	.oz-hover-info-card .oz-pb-it__icon { width: 84px; height: 84px; }
	.oz-hover-info-card .oz-pb-it__title { font-size: 17px !important; }
}

/* ── MÓVIL (≤767px): 1 card por fila (el maquetador apila), SIN hover.
   Todo visible: icono + título + descripción. La card crece con el
   contenido (min-height como piso) y nada se corta ni se desplaza. ── */
@media (max-width: 767px) {
	.oz-hover-info-card .oz-pb-icon-text {
		height: auto;
		min-height: 300px;
		padding: 38px 24px;
		overflow: visible;
	}
	.oz-hover-info-card .oz-pb-it__icon { width: 80px; height: 80px; margin-bottom: 18px !important; }
	.oz-hover-info-card .oz-pb-it__icon img,
	.oz-hover-info-card .oz-pb-it__icon svg { width: 40px !important; height: 40px !important; }
	.oz-hover-info-card .oz-pb-it__title { font-size: 16px !important; }
	.oz-hover-info-card .oz-pb-it__desc {
		position: static !important;
		width: 100% !important;
		max-width: 100% !important;
		margin: 18px auto 0 !important;
		padding: 0 !important;
		opacity: 1 !important;
		visibility: visible !important;
		transform: none !important;
		font-size: 14px !important;
		line-height: 1.55 !important;
	}
	/* Blindaje: aunque algo dispare :hover en un táctil, no pasa nada */
	.oz-hover-info-card:hover .oz-pb-it__icon,
	.oz-hover-info-card:hover .oz-pb-it__title,
	.oz-hover-info-card:hover .oz-pb-it__desc {
		opacity: 1 !important;
		visibility: visible !important;
		transform: none !important;
	}
}

/* ===== Breadcrumb del maquetador (.oz-breadcrumbs): enlace en naranja de marca ===== */
.oz-breadcrumbs a { color: var(--oz-brand-accent, #5b6672); text-decoration: none; }
.oz-breadcrumbs a:hover { color: color-mix(in srgb, var(--oz-brand-accent, #5b6672) 82%, #000); }

/* ===== Título de sección con barra naranja (.oz-heading) — reutilizable ===== */
.oz-heading { border-left: 4px solid var(--oz-brand-accent, #5b6672); padding-left: 16px; }
.oz-heading h1, .oz-heading h2, .oz-heading h3 { margin: 0 0 6px; color: #1f2937; line-height: 1.2; }
.oz-heading p { margin: 0; color: #6b7280; font-size: 15px; line-height: 1.5; }

/* ===== Slider de categorías (OZ-Sliders) — diseño la marca: tarjeta horizontal gris + botón =====
   La 3.6.11 dejó la tarjeta vertical/blanca sin botón; aquí la volvemos al look de la
   imagen: imagen a la izquierda, nombre + botón "Ver categoria" a la derecha, fondo gris. */
body .ozs--wc-categories .ozs-wc-cat {
	flex-direction: row;
	align-items: center;
	justify-content: flex-start;
	gap: 22px;
	min-height: 190px;
	padding: 22px 26px;
	background: #f2f2f2;
	border: 0;
	border-radius: 4px;
	text-align: left;
	color: #2f2f2f;
}
/* Columna de imagen (izquierda) */
body .ozs--wc-categories .ozs-wc-cat__icon-wrap {
	flex: 0 0 40%;
	width: 40%;
	height: auto;
	align-self: center;
}
body .ozs--wc-categories .ozs-wc-cat__icon {
	width: auto;
	max-width: 100%;
	height: auto;
	max-height: 150px;
}
body .ozs--wc-categories .ozs-wc-cat__img {
	width: auto;
	max-width: 100%;
	height: auto;
	max-height: 150px;
	object-fit: contain;
}
/* Columna de texto: nombre (arriba) + botón (abajo), alineado a la izquierda */
body .ozs--wc-categories .ozs-wc-cat__name {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 16px;
	flex: 1 1 auto;
	min-height: 0;
	overflow: visible;
	-webkit-line-clamp: unset;
	text-align: left;
	text-wrap: initial;
	font-size: clamp(1.15rem, 2.2vw, 1.5rem);
	font-weight: 700;
	line-height: 1.15;
	color: #2f2f2f;
}
/* Botón "Ver categoria" (lo añade el CSS; la tarjeta entera ya es un enlace) */
body .ozs--wc-categories .ozs-wc-cat__name::after {
	content: "Ver categoria";
	padding: 9px 18px;
	background: var(--oz-brand-accent, #5b6672);
	color: #ffffff;
	font-size: 0.78rem;
	font-weight: 700;
	line-height: 1;
	border-radius: 4px;
	white-space: nowrap;
}
/* Todas las tarjetas iguales (gris): sin hover, sin oscurecer, sin silueta naranja */
body .ozs--wc-categories .ozs-wc-cat:hover,
body .ozs--wc-categories .ozs-wc-cat:focus-visible,
body .ozs--wc-categories .ozs-wc-cat.is-current {
	background: #f2f2f2;
	color: #2f2f2f;
	transform: none;
	box-shadow: none;
}
body .ozs--wc-categories .ozs-wc-cat:hover .ozs-wc-cat__img,
body .ozs--wc-categories .ozs-wc-cat:focus-visible .ozs-wc-cat__img,
body .ozs--wc-categories .ozs-wc-cat.is-current .ozs-wc-cat__img {
	transform: none;
	filter: none;
}

/* ===== Encabezado de los SLIDERS DE PRODUCTOS (OZ-Sliders wc-products) =====
   Estiliza el header que ya genera cada carrusel (título dinámico del panel +
   flechas prev/next existentes). No toca JS, consultas ni el carrusel. */
.ozs--wc-products { position: relative; }

/* 1. Fila del título (título izquierda; las flechas van absolutas a la derecha) */
.ozs--wc-products .ozs__header {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: flex-start;
	width: 100%;
	margin: 0 0 32px;      /* 5. separación con las cards */
	padding: 0 0 12px;     /* deja sitio para la línea inferior */
}
/* 2. Título dinámico (valor del panel, no hardcodeado) */
html body .ozs--wc-products .ozs__title {
	font-family: "Roboto", -apple-system, "Segoe UI", sans-serif !important;
	font-size: 20px !important;
	font-weight: 700 !important;
	line-height: 1.25 !important;
	color: #292929 !important;
	margin: 0 !important;
}
.ozs--wc-products .ozs__title::after { display: none; } /* quita el subrayado corto por defecto */

/* 3. Línea inferior continua: naranja 88px + gris, mismo grosor, full width */
.ozs--wc-products .ozs__header::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 2px;
	background: linear-gradient(to right, var(--oz-brand-accent, #5b6672) 0, var(--oz-brand-accent, #5b6672) 88px, #e8e8e8 88px, #e8e8e8 100%);
}

/* 4. Flechas: mismas prev/next del slider, movidas al top-right del header */
html body .ozs.ozs--wc-products .ozs__nav {
	position: absolute !important;
	top: 0 !important;
	right: 0 !important;
	left: auto !important;
	width: auto !important;
	height: auto !important;
	display: flex !important;
	align-items: center;
	gap: 4px;
	pointer-events: none;
	z-index: 5;
}
html body .ozs.ozs--wc-products:not(.ozs--banner) .ozs__nav-btn {
	position: relative !important;
	top: auto !important;
	left: auto !important;
	right: auto !important;
	transform: none !important;
	width: 26px !important;
	height: 26px !important;
	min-width: 0 !important;
	margin: 0 !important;
	border: 0 !important;
	border-radius: 5px !important;
	color: #777 !important;
	box-shadow: none !important;
	pointer-events: auto;
	/* El plugin fuerza background-color verde con !important (la transición lo "pega").
	   Lo cubrimos con background-image, que se pinta ENCIMA del color. */
	background-color: #f5f5f5 !important;
	background-image: linear-gradient(#f5f5f5, #f5f5f5) !important;
}
html body .ozs.ozs--wc-products:not(.ozs--banner) .ozs__nav-btn:hover,
html body .ozs.ozs--wc-products:not(.ozs--banner) .ozs__nav-btn:focus-visible {
	background-image: linear-gradient(#e8e8e8, #e8e8e8) !important;
}
html body .ozs.ozs--wc-products:not(.ozs--banner) .ozs__nav-btn::before { border-color: #777 !important; }

/* ============================================================
   BANNER DE LA TIENDA (la marca): imagen de fondo + texto blanco.
   Ruta RELATIVA a propósito: los reescritores de staging solo tocan URLs
   absolutas con dominio → así el archivo se sirve del LOCAL y no se reescribe
   a producción (donde no existe). Scrim oscuro encima para legibilidad del
   texto blanco. Prefijo html body para ganar al shop-archive.css sin depender
   del orden de carga. Aplica a tienda y a archivos de categoría/etiqueta.
   ============================================================ */
html body .oz-shop-page-banner {
	background-color: #1a1a1a !important; /* base neutra mientras carga la imagen */
	/* Imagen real del cliente (attachment ID 495 en Media Library, ya existía
	   localmente — mismo archivo servido en producción). Ruta RELATIVA a
	   propósito (ver comentario de arriba: no se reescribe en staging). */
	background-image:
		linear-gradient(rgba(0, 0, 0, 0.34), rgba(0, 0, 0, 0.34)),
		url('/wp-content/uploads/2019/11/banner-perubean-productos-alberja-granos-cereales-lima-peru.jpg') !important;
	background-size: cover !important;
	background-position: center center !important;
	background-repeat: no-repeat !important;
}
/* Texto en blanco (título + migas) */
html body .oz-shop-page-banner__title,
html body .oz-shop-page-banner__crumbs,
html body .oz-shop-page-banner__crumbs a,
html body .oz-shop-page-banner__crumbs span,
html body .oz-shop-page-banner .woocommerce-breadcrumb,
html body .oz-shop-page-banner .woocommerce-breadcrumb a {
	color: #ffffff !important;
}
html body .oz-shop-page-banner__crumb-sep {
	color: rgba(255, 255, 255, 0.6) !important;
}
html body .oz-shop-page-banner__crumbs a:hover,
html body .oz-shop-page-banner .woocommerce-breadcrumb a:hover {
	color: var(--oz-brand-accent, #5b6672) !important; /* hover naranja de marca */
}
/* Alto del banner: 230px en desktop (≥1440px), escala fluida hacia abajo
   (16vw) con piso de 140px en móvil. El alto vive en el __inner (box-sizing
   border-box, ya centra su contenido con flex), así que min-height = alto
   total de la franja. */
html body .oz-shop-page-banner__inner {
	min-height: clamp(140px, 16vw, 230px) !important;
}
/* Ficha de producto: el padre (single-product.css) capa el banner a 1440px;
   lo soltamos para que sea la MISMA franja full-width que en la tienda. */
html body .site-main--woo-single .oz-shop-page-banner {
	width: 100% !important;
	max-width: none !important;
}

/* ===== Página de Marcas: grilla estática sobre el módulo wc-brands =====
   Uso: [oz_wc_brands class="brands-cards brands-grid" ...] en un bloque Texto
   del maquetador. "brands-cards" (skin del plugin) pone cada logo en tarjeta
   blanca; "brands-grid" (esto) convierte el carrusel en grilla que envuelve:
   el ancho por columna lo sigue dictando --ozs-cols (cols_desktop/laptop/
   tablet/mobile del shortcode), así que 4 columnas × 12 marcas = 3 filas,
   y en tablet/móvil re-fluye solo (3 col → 4 filas, 2 col → 6 filas). */
.ozs--wc-brands.brands-grid .ozs__track {
	flex-wrap: wrap;
	overflow-x: visible;
	scroll-snap-type: none;
}
.ozs--wc-brands.brands-grid .ozs__slide {
	scroll-snap-align: none;
}
/* Sin controles de carrusel: es una grilla fija */
.ozs--wc-brands.brands-grid .ozs__nav,
.ozs--wc-brands.brands-grid .ozs__dots {
	display: none !important;
}
/* oz-sliders.js (readConfig) tiene loop:true hardcodeado e ignora data-loop,
   así que SIEMPRE inyecta slides clonadas para el loop infinito. En una
   grilla estática esas clonadas duplican marcas: fuera. */
.ozs--wc-brands.brands-grid .ozs__slide--clone {
	display: none !important;
}

/* =========================================================================
   FICHA DE PRODUCTO — sección Descripción / Información adicional
   Rediseño visual de .woocommerce-tabs sobre la implementación del padre
   (single-product.css). Solo CSS: los tabs, sus paneles y el contenido
   siguen siendo los nativos de WooCommerce. El prefijo `body` da un punto
   más de especificidad que el padre sin recurrir a !important.
   ========================================================================= */

/* =========================================================================
   FICHA DE PRODUCTO — controles de compra (cantidad, Presupuestar, WhatsApp)
   Solo re-estilizado de los elementos existentes: .quantity con los botones
   .ozc-qty-btn que inyecta oz-cotizador (loops.js), el submit nativo
   .single_add_to_cart_button y el botón .ozc-product-card__wa-btn. La altura
   de la fila ya la unifica el plugin con --ozc-pdp-action-h (52px). Los
   iconos son SVG inline vía mask (currentColor), sin librerías nuevas.
   ========================================================================= */

/* 1. Selector de cantidad: compacto (158px), borde naranja fino, las tres
   zonas equilibradas sin espacio vacío de más. */
body.single-product .oz-single-product .ozc-single-product__cta form.cart .quantity {
	width: 158px !important;
	flex: 0 0 158px !important;
	flex-shrink: 0 !important;
	justify-content: space-between !important;
	background: #ffffff !important;
	border: 1px solid var(--oz-brand-accent, #5b6672) !important;
	border-radius: 9px !important;
}
body.single-product .oz-single-product .ozc-single-product__cta .ozc-qty-btn {
	color: var(--oz-brand-accent, #5b6672) !important;
	background: transparent !important;
	border: 0 !important;
	font-size: 20px;
	font-weight: 600 !important;
}
body.single-product .oz-single-product .ozc-single-product__cta form.cart .quantity input.qty {
	background: #ffffff !important;
	color: #16225a;
	font-size: 16px;
	font-weight: 600;
}

/* 1b. Ancho compacto del selector de cantidad SIN el wrapper
   .ozc-single-product__cta (bug real encontrado: en fichas de producto
   simples, sin ese wrapper, .quantity no tenía ancho limitado — heredaba el
   ancho amplio del input nativo de WooCommerce y dejaba casi sin espacio al
   botón "Presupuestar", que se veía cortado a una sola letra). */
body.single-product .oz-single-product form.cart .quantity {
	width: 110px;
	flex: 0 0 110px !important;
}

/* 2. Presupuestar: CTA principal navy, radio 9px, icono de documento a la
   izquierda. El navy y su hover (#1b2a6b → #16225a) ya vienen del padre. */
body.single-product .oz-single-product form.cart .single_add_to_cart_button,
body.single-product .oz-single-product form.cart .button.alt {
	border-radius: 9px !important;
	font-size: 15.5px;
	font-weight: 600;
	transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease !important;
}
body.single-product .oz-single-product form.cart .single_add_to_cart_button::before {
	content: "";
	width: 17px;
	height: 17px;
	margin-right: 12px;
	flex: 0 0 auto;
	background-color: currentColor;
	-webkit-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zm0 2.5L17.5 8H14zM8 13h8v1.5H8zm0 4h8v1.5H8zm0-8h4v1.5H8z"/></svg>') no-repeat center / contain;
	mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zm0 2.5L17.5 8H14zM8 13h8v1.5H8zm0 4h8v1.5H8zm0-8h4v1.5H8z"/></svg>') no-repeat center / contain;
}
body.single-product .oz-single-product form.cart .single_add_to_cart_button:hover,
body.single-product .oz-single-product form.cart .button.alt:hover {
	transform: translateY(-1px);
	box-shadow: 0 4px 10px rgba(27, 42, 107, 0.18);
}

/* 4. WhatsApp: blanco con borde y texto naranja, icono de WhatsApp naranja.
   Hover: naranja muy suave, sin cambiar de color. */
body.single-product .oz-single-product .ozc-single-product__wa .ozc-product-card__wa-btn {
	min-height: 45px;
	padding: 0 1rem;
	background: #ffffff;
	border: 1px solid var(--oz-brand-accent, #5b6672);
	border-radius: 9px;
	color: var(--oz-brand-accent, #5b6672);
	font-size: 14px;
	font-weight: 600;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	transition: background-color 0.2s ease;
}
/* Secundario: más fino que Presupuestar. Espaciados: 10px con la fila de
   arriba, 16px con la nota informativa de abajo. */
body.single-product .oz-single-product .ozc-single-product__summary .ozc-single-product__wa {
	margin-top: 10px;
}
body.single-product .oz-single-product .ozc-single-product__summary .ozc-single-product__note {
	margin-top: 16px;
}
body.single-product .oz-single-product .ozc-single-product__wa .ozc-product-card__wa-btn::before {
	content: "";
	width: 18px;
	height: 18px;
	flex: 0 0 auto;
	background-color: currentColor;
	-webkit-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.966-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z"/></svg>') no-repeat center / contain;
	mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.966-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z"/></svg>') no-repeat center / contain;
}
body.single-product .oz-single-product .ozc-single-product__wa .ozc-product-card__wa-btn:hover {
	background: #fff4ec;
	border-color: var(--oz-brand-accent, #5b6672);
	color: var(--oz-brand-accent, #5b6672);
}

/* Tablet (481–991px): oz-cotizador (loops.css) apila cantidad y Presupuestar
   en columna desde 991px hacia abajo; aquí los devolvemos a la misma fila
   (cantidad compacta + botón con el resto). El apilado queda solo en móvil. */
@media screen and (min-width: 481px) and (max-width: 991px) {
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form),
	body.single-product .ozc-single-product__cta form.cart.variations_form .woocommerce-variation-add-to-cart,
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form) > div:has(.quantity):has(.single_add_to_cart_button),
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form) > div:has(.quantity):has(button[type='submit'].single_add_to_cart_button) {
		flex-direction: row !important;
		align-items: center !important;
	}
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form) .quantity,
	body.single-product .ozc-single-product__cta form.cart.variations_form .woocommerce-variation-add-to-cart .quantity {
		flex: 0 0 158px !important;
		align-self: center !important;
	}
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form) .single_add_to_cart_button,
	body.single-product .ozc-single-product__cta form.cart:not(.variations_form):not(.grouped_form) button[type='submit'].single_add_to_cart_button,
	body.single-product .ozc-single-product__cta form.cart.variations_form .woocommerce-variation-add-to-cart .single_add_to_cart_button,
	body.single-product .ozc-single-product__cta form.cart.variations_form .woocommerce-variation-add-to-cart button[type='submit'].single_add_to_cart_button {
		width: auto !important;
		flex: 1 1 auto !important;
	}
}

/* 0. Galería: sin el fondo gris azulado del padre (#eef2f7); en su lugar,
   borde fino como el del resto de las cards. */
body .oz-single-product .woocommerce-product-gallery {
	background: #ffffff;
	border: 1px solid #e8e8e8;
}

/* 1. Contenedor único blanco para toda la sección (tabs + panel).
   [Fase 2.6, punto 1] margin-top 2.5rem(40px) + padding-top 28px = 68px de
   los 133px totales medidos entre summary y esta card — verificado con
   Playwright que la altura del sidebar NO influye (grid de una sola fila,
   ambas columnas ya son ítems independientes; forzar el sidebar a 50px de
   alto no movió ni 1px el top de esta card). Se recorta el propio
   margin/padding, sin negativos ni alturas fijas. */
body .oz-single-product .woocommerce-tabs {
	margin: 1.5rem 0 1rem;
	background: #ffffff;
	border: 1px solid #e8e8e8;
	border-radius: 12px;
	box-shadow: none;
	padding: 20px 32px 32px;
	box-sizing: border-box;
	max-width: 100%;
}

/* 2. Tabs planos sobre blanco: sin caja, sin fondo, línea gris de ancho
   completo debajo; el activo lleva texto naranja + subrayado naranja 2px.
   El CSS core de WooCommerce estila estos tabs como botones grises con
   `.woocommerce div.product .woocommerce-tabs ul.tabs li` (0,3,2), que le
   gana al tema; incluimos `div.product` para superarlo sin !important. */
body .oz-single-product div.product .woocommerce-tabs ul.tabs {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 0 2rem;
	margin: 0;
	padding: 0;
	list-style: none;
	overflow: visible;
	border: 0;
	border-bottom: 1px solid #e3e3e3;
}
body .oz-single-product div.product .woocommerce-tabs ul.tabs li {
	margin: 0;
	padding: 0;
	background: transparent;
	border: 0;
	border-radius: 0;
	display: inline-block;
}
/* Woo core dibuja "orejas" decorativas en cada tab con li::before/::after */
body .oz-single-product div.product .woocommerce-tabs ul.tabs li::before,
body .oz-single-product div.product .woocommerce-tabs ul.tabs li::after {
	content: none;
	display: none;
}
body .oz-single-product div.product .woocommerce-tabs ul.tabs li a {
	display: inline-block;
	padding: 0.25rem 0.1rem 0.85rem;
	font-size: 0.92rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: #262626;
	background: transparent;
	border: 0;
	border-bottom: 2px solid transparent;
	border-radius: 0;
	margin-bottom: -1px;
	text-decoration: none;
	transition: color 0.2s ease, border-color 0.2s ease;
}
/* Hover/foco del inactivo: solo el texto pasa a naranja (sin subrayado) */
body .oz-single-product div.product .woocommerce-tabs ul.tabs li a:hover,
body .oz-single-product div.product .woocommerce-tabs ul.tabs li a:focus-visible {
	color: var(--oz-brand-accent, #5b6672);
	border-bottom-color: transparent;
}
/* Activo: naranja + línea naranja (va después del hover para conservar el
   subrayado aunque el mouse esté encima) */
body .oz-single-product div.product .woocommerce-tabs ul.tabs li.active a {
	color: var(--oz-brand-accent, #5b6672);
	border-bottom-color: var(--oz-brand-accent, #5b6672);
}

/* 3. El panel pierde su card propia (la card ahora es el contenedor) y el
   texto respira: 14px, interlineado alto, gris medio. */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel {
	margin: 1.5rem 0 0;
	padding: 0;
	background: transparent;
	border-radius: 0;
	box-shadow: none;
	color: #606060;
	font-size: 14px;
	line-height: 1.75;
}
/* Encabezado del panel ("Descripción del producto" / "Información adicional") */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel > h2 {
	margin: 0 0 12px;
	font-size: 19px;
	font-weight: 700;
	line-height: 1.3;
	color: #171717;
}
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel p {
	margin: 0 0 14px;
}

/* 4-5. Beneficios: el <ul> que cada producto ya trae en su descripción se
   convierte en la sección de beneficios: divisoria suave arriba, subtítulo,
   y los ítems en grilla de 2 columnas con check naranja en círculo. Todo por
   CSS y 100% dinámico: si el producto trae su propio rótulo justo antes de
   la lista (p. ej. "Beneficios:" o "Aplicaciones principales"), ESE texto se
   estiliza como subtítulo; si la lista no trae rótulo, se inyecta el texto
   genérico "Beneficios principales". Sin lista, nada de esto aparece. */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description ul {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	column-gap: 50px;
	row-gap: 18px;
	margin: 24px 0 20px;
	padding: 22px 0 0;
	border-top: 1px solid #eeeeee;
}
/* [Fase 2, punto 4 y 12] El heading de sección ahora es el <h2> nativo del
   template (ver functions.php: filtro woocommerce_product_description_heading
   con prioridad 20, que gana sobre el __return_empty_string del tema padre;
   estilos de color/tamaño/separador del <h2> viven ahí mismo, junto al
   ::after de la hoja, para mantener ambos juntos). Este pseudo-elemento
   genérico queda retirado para no duplicar el heading. :first-child porque
   algunos productos (ej. Frijol de Palo) traen su PROPIO <h2> real dentro
   de la descripción (contenido real, no debe heredar este estilo). */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description > h2:first-child {
	font-size: 19px;
	font-weight: 700;
	line-height: 1.3;
}
/* [Fase 2.6, punto 2] Rótulo propio del producto (párrafo pegado a la
   lista — dato real de post_content, confirmado con SQL: la mayoría de
   productos con checklist traen literalmente "Especificaciones:" antes del
   <ul>, ej. post 663). Redundante visualmente contra el nuevo heading
   "Descripción y especificaciones" ya presente arriba. Se oculta SOLO en
   single product vía CSS — el dato sigue en post_content sin tocar, por si
   se necesita en otro contexto (feed, admin, etc.). No se borra contenido:
   los <li> con los datos reales siguen intactos e inalterados debajo.
   [Corrección — bug real encontrado] Esta regla ocultaba CUALQUIER <p>
   pegado a una <ul>, sin distinguir un rótulo corto ("Especificaciones:")
   de un párrafo con contenido real. Producto real afectado: Frijol
   Canario Peruano en Saco de 25kg (post 358) trae
   "<p><strong><img class="alignright" ...>Beneficios y Propiedades:
   </strong></p>" pegado a su <ul> — la imagen entera desaparecía junto
   con el rótulo. Se excluye explícitamente cualquier <p> que contenga una
   imagen alineada (:has(img.alignleft), :has(img.alignright)): esos SÍ
   deben seguir visibles siempre, es contenido real, no un rótulo vacío. */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description p:has(+ ul):not(:has(img.alignleft)):not(:has(img.alignright)) {
	display: none;
}
/* [Fase 2.6, punto 2] Con el rótulo ahora oculto (arriba), la lista ya NO
   debe perder su propia divisoria/espaciado — antes esta regla los ponía a
   0 asumiendo que el rótulo visible ya aportaba el borde superior. Con el
   rótulo display:none, "p + ul" seguía matcheando igual (display:none no
   saca al elemento del DOM ni de los selectores de hermanos), así que sin
   este ajuste la lista quedaba pegada al heading sin separación. Se deja
   que el <ul> use su borde/spacing propio (regla base de arriba) también
   en este caso. */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description p + ul::before {
	content: none;
}
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description ul li {
	position: relative;
	margin: 0;
	padding-left: 34px;
}
/* El padre separa ítems con li+li margin-top; aquí manda el row-gap */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description ul li + li {
	margin-top: 0;
}
/* [Fase 2, punto 11] Check minimalista: círculo blanco de 22px con borde y
   tilde. Antes usaba var(--oz-brand-accent) = #9bca46 (confirmado en Fase
   1.5, riesgo 5) — discrepancia real de 1 unidad por canal RGB contra el
   verde que Home usa hardcodeado (#9CCB47) en sus cards/separadores. Se
   fija el valor exacto de Home aquí (color LOCAL a esta sección, NO se
   toca la variable --oz-brand-accent global ni :root). */
body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description ul li::before {
	content: "✓";
	position: absolute;
	left: 0;
	top: 0;
	width: 22px;
	height: 22px;
	box-sizing: border-box;
	border: 1.5px solid #9CCB47;
	border-radius: 50%;
	background: #ffffff;
	color: #9CCB47;
	font-size: 11px;
	font-weight: 700;
	line-height: 1;
	display: flex;
	align-items: center;
	justify-content: center;
}

/* 6. Responsive: tabs usables, beneficios a 1 columna, menos padding,
   sin desbordes. */
@media (max-width: 767px) {
	body .oz-single-product .woocommerce-tabs {
		padding: 18px 16px 22px;
		border-radius: 10px;
	}
	body .oz-single-product .woocommerce-tabs ul.tabs {
		gap: 0 1.25rem;
	}
	body .oz-single-product .woocommerce-tabs .woocommerce-Tabs-panel--description ul {
		grid-template-columns: 1fr;
		column-gap: 0;
		row-gap: 14px;
	}
}

/* =========================================================================
   BOTÓN FLOTANTE DE WHATSAPP (Punto 7, sección 5-7 del brief) — implementación
   propia, sin plugin externo, config independiente de perubean.local. Mismo
   criterio visual que el sitio principal para mantener el mismo ecosistema
   de marca. Esquina inferior derecha, no cubre contenido, sin animación
   de rebote/pulso, sin auto-popup. No compite con .oz-cat-drawer (overlay
   de pantalla completa, no un elemento fijo de esquina). */
.oz-wsp-float {
	position: fixed;
	right: 20px;
	bottom: 20px;
	z-index: 9000;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: #25D366;
	color: #ffffff;
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
	transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.oz-wsp-float:hover,
.oz-wsp-float:focus-visible {
	color: #ffffff;
	transform: scale(1.06);
	box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
}
@media (max-width: 480px) {
	.oz-wsp-float {
		right: 14px;
		bottom: 14px;
		width: 50px;
		height: 50px;
	}
}
@media (prefers-reduced-motion: reduce) {
	.oz-wsp-float {
		transition: none;
	}
}

/* =========================================================================
   CATÁLOGO POR MARCA (shortcode oz_envasados_catalogo) — grid responsive de
   tarjetas de producto real vía WooCommerce. Nunca muestra precio/carrito/
   SKU, solo imagen + nombre + marca + presentación + CTA WhatsApp.
   Corrección visual v2: tarjetas con más protagonismo (brief "Corrección
   visual — no quedó como la referencia"). */
.oz-catalogo-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 24px;
	max-width: 1300px;
	margin: 30px auto 0;
}
.oz-catalogo-card {
	display: flex;
	flex-direction: column;
	min-width: 0;
	background: #ffffff;
	border: 1px solid #ececec;
	border-radius: 18px;
	overflow: hidden;
	box-shadow: 0 3px 10px rgba(20, 30, 50, 0.05);
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.oz-catalogo-card:hover {
	transform: translateY(-4px);
	box-shadow: 0 14px 28px rgba(20, 30, 50, 0.1);
}
.oz-catalogo-card__media {
	position: relative;
	height: 230px;
	background: #f8f7f3;
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: hidden;
	padding: 18px;
}
.oz-catalogo-card__media::after {
	content: "";
	position: absolute;
	left: 50%;
	bottom: 14px;
	transform: translateX(-50%);
	width: 58%;
	height: 14px;
	background: radial-gradient(ellipse at center, rgba(20,30,50,0.10), transparent 72%);
	pointer-events: none;
}
.oz-catalogo-card__media img {
	position: relative;
	width: 100%;
	height: 79%;
	object-fit: contain;
	display: block;
	z-index: 1;
}
.oz-catalogo-card__body {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 6px;
	padding: 19px;
	flex: 1;
}
.oz-catalogo-card__brand {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--oz-brand-accent, #9bca46);
}
.oz-catalogo-grid--supremo .oz-catalogo-card__brand {
	color: #a3762c;
}
.oz-catalogo-grid--al-toque .oz-catalogo-card__brand {
	color: #3f8a1f;
}
.oz-catalogo-grid--otras .oz-catalogo-card__brand {
	color: #5b6672;
}
.oz-catalogo-card__title {
	margin: 2px 0 0;
	font-size: 19px;
	font-weight: 700;
	line-height: 1.28;
	color: var(--oz-brand-primary, #1f589f);
}
.oz-catalogo-card__presentacion {
	font-size: 13.5px;
	color: #7a828d;
}
.oz-catalogo-card__desc {
	margin: 2px 0 0;
	font-size: 13px;
	line-height: 1.45;
	color: #7a828d;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.oz-catalogo-card__cta {
	margin-top: auto;
}
.oz-catalogo-card__cta::before {
	content: "";
	display: block;
	height: 1px;
	background: #f0f0f0;
	margin: 0 0 12px;
}
.oz-catalogo-card__cta {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 43px;
	background: #25D366;
	color: #ffffff;
	font-weight: 600;
	font-size: 13.5px;
	border-radius: 11px;
	text-decoration: none;
	text-align: center;
	transition: background 0.15s ease;
	box-sizing: border-box;
}
.oz-catalogo-card__cta svg {
	flex: 0 0 auto;
	margin-right: 8px;
}
.oz-catalogo-card__cta:hover,
.oz-catalogo-card__cta:focus-visible {
	color: #ffffff;
	background: #1fb457;
}

/* Fondo alterno por sección de marca — separa visualmente sin bloques
   pesados (blanco / gris-verde extremadamente suave / blanco). Fila 7 =
   sección Al Toque (índice de orden en new_rows: 0 hero, 1 beneficios,
   2 calidad, 3 marcas-título, 4 marcas-grid, 5 catálogo-título, 6 Supremo,
   7 Al Toque, 8 Otras Marcas — la clase .oz-pb-r-N la genera el builder por
   posición en el array, no por el "id" numérico interno de la fila). */
.oz-pb-r-7 {
	background: #fafaf8 !important;
}

/* Título de sección por marca — más presencia, con líneas decorativas
   laterales suaves a cada lado del texto (referencia visual aprobada). */
.oz-catalogo-marca-titulo {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 18px;
	color: var(--oz-brand-primary, #1f589f);
	font-size: 20px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	margin: 0 0 10px;
}
.oz-catalogo-marca-titulo::before,
.oz-catalogo-marca-titulo::after {
	content: "";
	flex: 1;
	max-width: 120px;
	height: 1px;
	background: linear-gradient(90deg, transparent, currentColor, transparent);
	opacity: 0.28;
}

/* Breakpoints alineados a la cascada oficial del Maquetador (schema v2,
   includes/breakpoints.php): desktop >1366 / laptop ≤1366 / tablet-h ≤1024
   / tablet-v ≤768 / mobile ≤480. Se usan los mismos 4 umbrales aquí, en vez
   de valores libres (767/991/390 etc.), para que coincida exactamente con
   lo que el panel del Maquetador reporta al revisar cada vista. */
@media (max-width: 1366px) {
	.oz-catalogo-grid {
		max-width: 1120px;
		gap: 20px;
	}
}
@media (max-width: 1024px) {
	.oz-catalogo-grid {
		grid-template-columns: repeat(3, 1fr);
		gap: 20px;
	}
	.oz-catalogo-card__cta {
		padding-top: 0;
	}
}
@media (max-width: 768px) {
	.oz-catalogo-grid {
		grid-template-columns: repeat(2, 1fr);
		gap: 16px;
	}
	.oz-catalogo-card__media {
		height: 200px;
	}
}
@media (max-width: 480px) {
	/* En móvil el catálogo pasa de grid (todas las filas apiladas) a un
	   carrusel de scroll horizontal nativo: 1 sola fila por marca, el
	   usuario desliza con el dedo para ver el resto de productos en vez
	   de bajar la página. Sin JS — scroll-snap nativo del navegador. */
	.oz-catalogo-grid {
		display: flex;
		grid-template-columns: none;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		gap: 10px;
		padding-bottom: 6px;
		margin-left: -4vw;
		margin-right: -4vw;
		padding-left: 4vw;
		padding-right: 4vw;
	}
	.oz-catalogo-card {
		flex: 0 0 44vw;
		max-width: 44vw;
		scroll-snap-align: start;
	}
	.oz-catalogo-card__media {
		height: 150px;
		padding: 12px;
	}
	.oz-catalogo-card__body {
		padding: 14px;
	}
	.oz-catalogo-card__title {
		font-size: 15px;
	}
	.oz-catalogo-card__cta {
		font-size: 12px;
		min-height: 40px;
		height: auto;
		padding: 8px 6px;
		line-height: 1.25;
		text-align: left;
	}
	.oz-catalogo-card__cta svg {
		margin-right: 6px;
	}
}
/* Flechas del carrusel de catálogo — ocultas por defecto (base, sin media
   query) y solo se muestran en móvil (regla dentro del @media abajo). El
   orden importa: con la misma especificidad (0,1,0) en ambas reglas, la
   que aparece DESPUÉS en el archivo gana — por eso la base (display:none)
   va primero y el override (display:flex) va después, aunque esté dentro
   de un @media; si se invierte el orden, "none" termina ganando siempre
   sin importar el ancho de pantalla (bug ya visto antes en esta sesión
   con .oz-pb-block vs .oz-proceso-img). */
.oz-catalogo-carousel {
	position: relative;
}
.oz-catalogo-carousel__nav {
	display: none;
	position: absolute;
	top: 90px;
	z-index: 3;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	padding: 0;
	border: none;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.92);
	box-shadow: 0 2px 8px rgba(20, 30, 50, 0.18);
	color: #1f589f;
	cursor: pointer;
}
.oz-catalogo-carousel__nav--prev { left: 2px; }
.oz-catalogo-carousel__nav--next { right: 2px; }
@media (max-width: 480px) {
	.oz-catalogo-carousel__nav {
		display: flex;
	}
}

/* Botón CTA final de WhatsApp (shortcode oz_envasados_whatsapp_cta) —
   cierre comercial: icono a la izquierda, texto grande, más presencia
   (brief "último pulido visual"). */
a.oz-envasados-wsp-cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	height: 52px;
	min-width: 220px;
	padding: 0 30px;
	background: #25D366;
	color: #ffffff;
	font-weight: 700;
	font-size: 15.5px;
	border-radius: 11px;
	text-decoration: none;
	box-shadow: 0 6px 18px rgba(0,0,0,0.18);
	transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}
.oz-envasados-wsp-cta::before {
	content: "";
	flex: 0 0 auto;
	width: 19px;
	height: 19px;
	background-color: #ffffff;
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12c0 1.85.5 3.58 1.36 5.07L2 22l5.06-1.33A9.94 9.94 0 0 0 12 22c5.52 0 10-4.48 10-10S17.52 2 12 2Zm0 18c-1.62 0-3.13-.47-4.4-1.28l-.32-.19-3.01.79.8-2.93-.21-.3A7.94 7.94 0 0 1 4 12c0-4.41 3.59-8 8-8s8 3.59 8 8-3.59 8-8 8Zm4.38-5.86c-.24-.12-1.42-.7-1.64-.78-.22-.08-.38-.12-.54.12-.16.24-.62.78-.76.94-.14.16-.28.18-.52.06-.24-.12-1.01-.37-1.92-1.18-.71-.63-1.19-1.41-1.33-1.65-.14-.24-.01-.37.11-.49.11-.11.24-.28.36-.42.12-.14.16-.24.24-.4.08-.16.04-.3-.02-.42-.06-.12-.54-1.3-.74-1.78-.19-.47-.39-.4-.54-.41-.14-.01-.3-.01-.46-.01-.16 0-.42.06-.64.3-.22.24-.84.82-.84 2s.86 2.32.98 2.48c.12.16 1.7 2.6 4.12 3.64.58.25 1.03.4 1.38.51.58.18 1.11.16 1.53.1.47-.07 1.42-.58 1.62-1.14.2-.56.2-1.04.14-1.14-.06-.1-.22-.16-.46-.28Z'/%3E%3C/svg%3E");
	mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12c0 1.85.5 3.58 1.36 5.07L2 22l5.06-1.33A9.94 9.94 0 0 0 12 22c5.52 0 10-4.48 10-10S17.52 2 12 2Zm0 18c-1.62 0-3.13-.47-4.4-1.28l-.32-.19-3.01.79.8-2.93-.21-.3A7.94 7.94 0 0 1 4 12c0-4.41 3.59-8 8-8s8 3.59 8 8-3.59 8-8 8Zm4.38-5.86c-.24-.12-1.42-.7-1.64-.78-.22-.08-.38-.12-.54.12-.16.24-.62.78-.76.94-.14.16-.28.18-.52.06-.24-.12-1.01-.37-1.92-1.18-.71-.63-1.19-1.41-1.33-1.65-.14-.24-.01-.37.11-.49.11-.11.24-.28.36-.42.12-.14.16-.24.24-.4.08-.16.04-.3-.02-.42-.06-.12-.54-1.3-.74-1.78-.19-.47-.39-.4-.54-.41-.14-.01-.3-.01-.46-.01-.16 0-.42.06-.64.3-.22.24-.84.82-.84 2s.86 2.32.98 2.48c.12.16 1.7 2.6 4.12 3.64.58.25 1.03.4 1.38.51.58.18 1.11.16 1.53.1.47-.07 1.42-.58 1.62-1.14.2-.56.2-1.04.14-1.14-.06-.1-.22-.16-.46-.28Z'/%3E%3C/svg%3E");
	mask-repeat: no-repeat;
	-webkit-mask-repeat: no-repeat;
	mask-size: contain;
	-webkit-mask-size: contain;
}
a.oz-envasados-wsp-cta:hover,
a.oz-envasados-wsp-cta:focus-visible {
	color: #ffffff;
	background: #1fb457;
	transform: translateY(-2px);
	box-shadow: 0 10px 24px rgba(0,0,0,0.22);
}

.oz-cta-inner {
	position: relative;
	min-height: 160px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 32px;
	flex-wrap: wrap;
	padding: 30px 0;
	/* Textura vegetal/granos MUY sutil, 100% CSS (sin imagen nueva). */
	background-image:
		radial-gradient(circle at 8px 8px, rgba(255,255,255,0.05) 1.4px, transparent 1.6px);
	background-size: 26px 26px;
}
.oz-cta-inner__left {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: center;
	gap: 20px;
}
.oz-cta-inner__icon {
	flex: 0 0 auto;
	width: 60px;
	height: 60px;
	border-radius: 50%;
	background: #25D366;
	display: flex;
	align-items: center;
	justify-content: center;
	box-shadow: 0 6px 16px rgba(0,0,0,0.18);
}
.oz-cta-inner__eyebrow {
	display: block;
	color: #9bca46;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	margin: 0 0 6px;
}
.oz-cta-inner__title {
	margin: 0 0 6px;
	color: #ffffff;
	font-size: 28px;
	font-weight: 700;
}
.oz-cta-inner__subtitle {
	margin: 0;
	color: #dfe9f6;
	font-size: 15px;
	max-width: 440px;
}
.oz-cta-inner__right {
	position: relative;
	z-index: 1;
	flex: 0 0 auto;
}
@media (max-width: 768px) {
	.oz-cta-inner {
		flex-direction: column;
		text-align: center;
		justify-content: center;
		padding: 38px 0;
	}
	.oz-cta-inner__left {
		flex-direction: column;
		text-align: center;
	}
	.oz-cta-inner__subtitle {
		max-width: 100%;
	}
	a.oz-envasados-wsp-cta {
		width: 100%;
		max-width: 300px;
	}
}

/* ============================================================
   HERO v2 — slider propio a base de fade (opacity), sin scroll
   horizontal ni scroll-snap (mecanismo distinto al slider anterior de
   OZ-Sliders, que mostraba una división de luz irreproducible aislada
   hasta la capa de composición GPU del navegador).
   ============================================================ */
.oz-hero-fade {
	position: relative;
	width: 100%;
	height: 600px;
	overflow: hidden;
	background: #0d2c5c;
}
.oz-hero-fade__slide {
	position: absolute;
	inset: 0;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.9s ease;
}
.oz-hero-fade__slide--active {
	opacity: 1;
	visibility: visible;
}
.oz-hero-fade__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}
.oz-hero-fade__overlay {
	position: absolute;
	inset: 0;
	background: rgba(0,8,28,0.32);
}
.oz-hero-fade__content {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: flex-start;
	padding: 0 8vw;
	max-width: 640px;
}
.oz-hero-fade .oz-hero-fade__title,
h2.oz-hero-fade__title {
	color: #ffffff !important;
	font-size: 52px !important;
	font-weight: 700;
	line-height: 1.1;
	margin: 0 0 18px;
	text-shadow: 0 2px 14px rgba(0,0,0,0.35);
}
.oz-hero-fade .oz-hero-fade__subtitle {
	color: #f0f3f8 !important;
	font-size: 18px !important;
	line-height: 1.55;
	margin: 0 0 28px;
	max-width: 520px;
	text-shadow: 0 1px 8px rgba(0,0,0,0.3);
}
.oz-hero-fade .oz-hero-fade__button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #9bca46;
	color: #16311b;
	font-weight: 700;
	font-size: 15px;
	height: 49px;
	padding: 0 30px;
	border-radius: 8px;
	text-decoration: none;
	white-space: nowrap;
	width: fit-content;
}
.oz-hero-fade .oz-hero-fade__button:hover {
	color: #16311b;
	text-decoration: none;
}
.oz-hero-fade__nav {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 6;
	width: 54px;
	height: 54px;
	padding: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: rgba(12,10,8,0.72);
	border: 1px solid rgba(229,180,92,0.75);
	border-radius: 10px;
	cursor: pointer;
	transition: background 0.3s ease, border-color 0.3s ease, transform 0.3s ease;
}
.oz-hero-fade__nav:hover {
	background: rgba(18,14,10,0.88);
	border-color: rgba(245,193,96,1);
	transform: translateY(-50%) scale(1.05);
}
.oz-hero-fade__nav--prev { left: 16px; }
.oz-hero-fade__nav--next { right: 16px; }
.oz-hero-fade__dots {
	position: absolute;
	bottom: 20px;
	left: 50%;
	transform: translateX(-50%);
	z-index: 5;
	display: flex;
	gap: 8px;
}
.oz-hero-fade__dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: rgba(255,255,255,0.4);
	border: none;
	padding: 0;
	cursor: pointer;
	transition: background 0.2s ease, transform 0.2s ease;
}
.oz-hero-fade__dot--active {
	background: #ffffff;
	transform: scale(1.3);
}
/* Laptop (≤1366px): mismo layout, solo se acota el ancho del texto para
   que nunca llegue a tocar las flechas de navegación (54px + 16px offset
   a cada lado). */
@media (max-width: 1366px) {
	.oz-hero-fade .oz-hero-fade__content {
		padding: 0 7vw;
		max-width: 580px;
	}
	.oz-hero-fade .oz-hero-fade__subtitle {
		max-width: 460px;
	}
}
/* Tablet horizontal (≤1024px): título/alto reducidos, mismo padding
   lateral pensado para no chocar con las flechas. */
@media (max-width: 1024px) {
	.oz-hero-fade {
		height: 520px;
	}
	.oz-hero-fade .oz-hero-fade__content {
		padding: 0 90px 0 6vw;
		max-width: 460px;
	}
	.oz-hero-fade .oz-hero-fade__title {
		font-size: 40px !important;
	}
	.oz-hero-fade .oz-hero-fade__subtitle {
		font-size: 15.5px !important;
		max-width: 380px;
	}
}
@media (max-width: 768px) {
	/* min-height (no height fijo): en pantallas de poca altura real
	   (teléfonos con barra de direcciones visible, extensiones de
	   simulación con viewport corto, etc.) el contenido puede necesitar
	   más de 480px — con min-height la fila crece en vez de comprimir el
	   texto contra las flechas ancladas abajo. padding-bottom reserva el
	   espacio real que ocupan flechas (40px) + dots (¬20px) para que el
	   botón nunca termine debajo de ellas aunque el texto sea largo. */
	.oz-hero-fade {
		height: auto;
		min-height: 480px;
	}
	.oz-hero-fade .oz-hero-fade__content {
		align-items: center;
		text-align: center;
		padding: 32px 6vw 76px;
		max-width: 100%;
	}
	.oz-hero-fade .oz-hero-fade__title {
		font-size: 34px !important;
	}
	.oz-hero-fade .oz-hero-fade__subtitle {
		font-size: 15.5px !important;
		max-width: 100%;
	}
	.oz-hero-fade__overlay {
		background: rgba(0,8,28,0.5);
	}
	.oz-hero-fade__nav {
		top: auto;
		bottom: 14px;
		transform: none;
		width: 40px;
		height: 40px;
	}
	.oz-hero-fade__nav:hover {
		transform: scale(1.05);
	}
	.oz-hero-fade__nav--prev { left: 14px; }
	.oz-hero-fade__nav--next { right: 14px; }
	.oz-hero-fade__dots {
		bottom: 24px;
	}
}

/* ============================================================
   HERO NATIVO (v3) — .oz-hero-native, componente real OZ-Sliders
   (shortcode oz_slider_banner, preset "Slider Principal" editable desde
   wp-admin). Reemplaza el fade hecho a mano (.oz-hero-fade, arriba, ya
   sin uso) para que el cliente pueda editar el hero sin tocar código.
   Fondo opaco explícito en toda la cadena del track: por defecto
   .ozs/.ozs__viewport/.ozs__track/.ozs__media son transparentes en el
   CSS del plugin, así que cualquier corte de 1px durante el scroll deja
   ver el fondo claro de la página — se fuerza un tono oscuro (mismo que
   el overlay) para que un corte, si ocurre, sea imperceptible sobre las
   fotos en vez de una línea de luz. */
.oz-hero-native,
.oz-hero-native .ozs__viewport,
.oz-hero-native .ozs__track,
.oz-hero-native .ozs__media,
.oz-hero-native .ozs__slide {
	background: #0d2c5c !important;
}
.oz-hero-native {
	--ozs-gap: 0px !important;
}
.oz-hero-native .ozs__content {
	align-items: flex-start;
	text-align: left;
	padding: 0 8vw;
	max-width: 640px;
}
.oz-hero-native .oz-slide__title {
	color: #ffffff !important;
	font-size: 52px !important;
	font-weight: 700;
	line-height: 1.1;
	margin: 0 0 18px;
	text-shadow: 0 2px 14px rgba(0,0,0,0.35);
}
.oz-hero-native .oz-slide__subtitle {
	color: #f0f3f8 !important;
	font-size: 18px !important;
	line-height: 1.55;
	margin: 0 0 28px;
	max-width: 520px;
	text-shadow: 0 1px 8px rgba(0,0,0,0.3);
}
.oz-hero-native .ozs__button.oz-slide__button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #9bca46;
	color: #16311b;
	font-weight: 700;
	font-size: 15px;
	height: 49px;
	padding: 0 30px;
	border-radius: 8px;
	text-decoration: none;
	white-space: nowrap;
	width: fit-content;
	margin-top: 0;
}
.oz-hero-native .ozs__button.oz-slide__button:hover {
	color: #16311b;
	text-decoration: none;
}
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn,
.oz-hero-native .ozs__nav-btn {
	z-index: 6;
	width: 54px;
	height: 54px;
	background: rgba(12,10,8,0.72);
	border: 1px solid rgba(229,180,92,0.75);
	border-radius: 10px;
	transition: none !important;
	animation: none !important;
}
.oz-hero-native .ozs__nav-btn:hover,
.oz-hero-native .ozs__nav-btn:focus-visible,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn:hover,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn:focus-visible {
	background: rgba(18,14,10,0.88);
	border-color: rgba(245,193,96,1);
	transform: translateY(-50%) !important;
	box-shadow: none !important;
}
.oz-hero-native .ozs__nav-btn::before {
	border-top-color: #fff;
	border-right-color: #fff;
	width: 10px;
	height: 10px;
	transition: none !important;
}
.oz-hero-native .ozs__nav-btn--prev:hover::before,
.oz-hero-native .ozs__nav-btn--prev:focus-visible::before,
.oz-hero-native .ozs__nav-btn--next:hover::before,
.oz-hero-native .ozs__nav-btn--next:focus-visible::before,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn--prev:hover::before,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn--prev:focus-visible::before,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn--next:hover::before,
html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn--next:focus-visible::before {
	transform: none !important;
}
.oz-hero-native .ozs__nav-btn--prev { left: 16px; }
.oz-hero-native .ozs__nav-btn--next { right: 16px; }
.oz-hero-native .ozs__dots {
	position: absolute;
	bottom: 20px;
	left: 50%;
	transform: translateX(-50%);
	z-index: 5;
}
.oz-hero-native .ozs__dot {
	width: 8px;
	height: 8px;
	background: rgba(255,255,255,0.4);
}
.oz-hero-native .ozs__dot.is-active {
	background: #ffffff;
	transform: scale(1.3);
}
@media (max-width: 1366px) {
	.oz-hero-native .ozs__content {
		padding: 0 7vw;
		max-width: 580px;
	}
	.oz-hero-native .oz-slide__subtitle {
		max-width: 460px;
	}
}
@media (max-width: 1024px) {
	.oz-hero-native .ozs__content {
		padding: 0 90px 0 90px;
		max-width: 460px;
	}
	.oz-hero-native .oz-slide__title {
		font-size: 40px !important;
	}
	.oz-hero-native .oz-slide__subtitle {
		font-size: 15.5px !important;
		max-width: 380px;
	}
}
/* ≤768px (tablet_v y mobile): las imágenes "mobile" de cada slide ya
   traen su propio título/bajada/badges impresos (generadas aparte para
   este formato vertical) — mostrar ADEMÁS el título/subtítulo/botón del
   componente duplicaba el mensaje. Se oculta todo el overlay de texto;
   el clic para ir a la sección de marcas lo resuelve el campo nativo
   "Enlace (URL)" de cada slide (link/target en banner-model-1.php), que
   convierte la imagen entera en un <a> — no un botón de texto aparte. */
@media (max-width: 768px) {
	.oz-hero-native .ozs__content {
		display: none;
	}
	.oz-hero-native .ozs__overlay {
		display: none;
	}
	.oz-hero-native .ozs__nav-btn {
		top: auto !important;
		bottom: 14px;
		transform: none !important;
		width: 40px;
		height: 40px;
	}
	.oz-hero-native .ozs__nav-btn:hover,
	.oz-hero-native .ozs__nav-btn:focus-visible,
	html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn:hover,
	html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn:focus-visible {
		transform: none !important;
	}
	.oz-hero-native .ozs__nav-btn--prev { left: 14px; }
	.oz-hero-native .ozs__nav-btn--next { right: 14px; }
	.oz-hero-native .ozs__dots {
		bottom: 24px;
	}
}
@media (max-width: 480px) {
	.oz-hero-native .ozs__nav-btn,
	html body .ozs.ozs--banner.oz-hero-native .ozs__nav-btn {
		display: none !important;
	}
}
/* Nuestras Marcas — las 2 cards (Supremo/Al Toque) no tenían NINGÚN ajuste
   responsive propio (todo en estilos inline fijos: height:320px, imagen
   57% + texto lado a lado siempre) — en pantallas angostas el texto
   quedaba comprimido a 2-3 palabras por línea dentro de un ancho de
   ~140px. Se agregan clases para poder apilar imagen/texto en vez de
   ponerlos lado a lado por debajo de tablet horizontal. */
.oz-marcas-row {
	display: flex;
	gap: 32px;
	align-items: stretch;
	flex-wrap: wrap;
}
.oz-marca-card {
	flex: 1;
	min-width: 0;
	display: flex;
	height: 320px;
}
.oz-marca-card__media {
	flex: 0 0 57%;
	height: 100%;
}
.oz-marca-card__body {
	flex: 1;
}
@media (max-width: 1024px) {
	.oz-marca-card {
		height: 280px;
	}
	.oz-marca-card__body {
		padding: 22px 20px !important;
	}
	.oz-marca-card__body h3 {
		font-size: 21px !important;
	}
}
@media (max-width: 768px) {
	.oz-marcas-row {
		flex-direction: column;
		gap: 24px;
	}
	.oz-marca-card {
		height: auto;
		flex-direction: column;
		flex: 1 1 auto;
	}
	.oz-marca-card__media {
		flex: 0 0 auto;
		height: 220px;
	}
	/* El centrado del contenido de la tarjeta (badge, título, texto y botón)
	   ya no es solo de móvil: vive en .ozx-marca (global-classes.css) y
	   aplica en todas las vistas, así que aquí no se repite. */
}
@media (max-width: 480px) {
	.oz-marca-card__media {
		height: 190px;
	}
	.oz-marca-card__body {
		padding: 24px 20px !important;
	}
}

/* Proceso y Calidad (fila oz-pb-r-9, columnas 35/65): al no ser un split
   50/50 el Maquetador la marca "keep-mobile" (oz_pb_cols_are_balanced) y
   NO la apila en tablet vertical — texto e imagen quedan lado a lado,
   comprimiendo el collage a una tira casi ilegible. Se fuerza el apilado
   a 2 filas (texto arriba, imagen abajo) solo para esta fila específica,
   sin tocar el comportamiento general de columnas desiguales del resto
   del sitio. */
@media (max-width: 768px) {
	.oz-pb-r-9 .oz-pb-grid {
		grid-template-columns: 1fr !important;
	}
	.oz-pb-r-9 .oz-pb-col {
		grid-column: 1 / -1 !important;
		margin-left: 0 !important;
	}
}

/* Collage "Proceso y Calidad" — bloque tipo Imagen real del Maquetador
   (antes era un bloque de Texto con un <img> suelto adentro; se cambió
   para que el panel del editor muestre el componente correcto). El
   border-radius/sombra que antes iban inline en el <img> ahora se
   resuelven aquí, apuntando al wrapper real que genera el builder para
   bloques tipo imagen (.oz-pb-block--image, figura .oz-pb-image). */
.oz-proceso-img .oz-pb-image {
	border-radius: 18px;
	overflow: hidden;
	box-shadow: 0 14px 34px rgba(31, 88, 159, 0.14);
	display: block;
}
.oz-proceso-img .oz-pb-image img {
	width: 100%;
	height: auto;
	display: block;
}
@media (max-width: 768px) {
	.oz-proceso-texto {
		max-width: 100% !important;
		text-align: center;
	}
	.oz-proceso-img.oz-pb-block {
		margin-top: 32px !important;
	}
}
/* En movil el collage (proporción muy panorámica, ~5.8:1) se ve como una
   tira delgada con height:auto — se fuerza una altura real y
   object-fit:cover para que ocupe más espacio vertical sin deformarse
   (recorta un poco de los extremos, no estira la imagen). */
@media (max-width: 480px) {
	.oz-proceso-img .oz-pb-image img {
		height: 220px;
		object-fit: cover;
		object-position: center;
	}
}

/* Banda de beneficios — reconstruida con 4 bloques reales "Icono + Texto"
   del Maquetador (antes era HTML manual dentro de un bloque de Texto).
   El translateY/sombra "flotante" no tiene campo propio en el panel de la
   fila (el sanitizador aplica absint() a los márgenes, elimina negativos
   — visto antes en esta sesión con el hero), así que se resuelve aquí vía
   className igual que en el resto del sitio. */
html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--theme.oz-pb-spacing-scope,
html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--full.oz-pb-spacing-scope {
	max-width: 1220px !important;
	margin-left: auto !important;
	margin-right: auto !important;
}
.oz-beneficios-row {
	position: relative;
	z-index: 5;
	box-shadow: 0 16px 36px rgba(15, 40, 80, 0.28);
	transform: translateY(-46px);
	margin-bottom: -46px;
}
.oz-beneficios-row .oz-pb-it__desc {
	text-align: center;
	text-align-last: center;
}
.oz-beneficios-row .oz-pb-it__icon img {
	width: 26px;
	height: 26px;
	opacity: 0.95;
}
.oz-beneficios-row .oz-pb-icon-text {
	gap: 6px;
}
.oz-beneficios-item--1,
.oz-beneficios-item--2,
.oz-beneficios-item--3 {
	border-left: 1px solid rgba(255, 255, 255, 0.18);
}
/* Tablet vertical (768px): 2x2 en vez de 4 en fila (se ven muy angostas)
   o 1 sola columna (comportamiento por defecto del Maquetador al no ser
   un split 50/50 — mismo patrón "keep-mobile" ya visto con Proceso y
   Calidad). Ancho contenido, no 100%, según lo pedido. */
@media (max-width: 768px) {
	html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--theme.oz-pb-spacing-scope,
	html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--full.oz-pb-spacing-scope {
		max-width: 520px !important;
		margin-left: auto !important;
		margin-right: auto !important;
	}
}
@media (max-width: 480px) {
	html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--theme.oz-pb-spacing-scope,
	html body .oz-pb-root .oz-pb-r-1.oz-beneficios-row.oz-pb-section--full.oz-pb-spacing-scope {
		max-width: calc(100vw - 32px) !important;
		margin-left: auto !important;
		margin-right: auto !important;
	}
}
@media (max-width: 768px) {
	.oz-pb-r-1 .oz-pb-grid {
		grid-template-columns: repeat(2, 1fr) !important;
	}
	/* El CSS base del plugin fuerza grid-column:1/-1 !important en móvil
	   para columnas "balanceadas" (25-25-25-25 sí lo son, por eso no trae
	   la clase .oz-pb-grid--keep-mobile) — su selector es más específico
	   que uno simple, así que aquí se replica la MISMA cadena de
	   ancestros (html body .oz-pb-root ... .oz-pb-grid > .oz-pb-col) para
	   igualar la especificidad y ganar por ser la regla declarada después
	   en el archivo. */
	html body .oz-pb-root .oz-pb-r-1.oz-pb-grid > .oz-pb-col,
	html body .oz-pb-root .oz-pb-r-1 .oz-pb-grid > .oz-pb-col {
		grid-column: auto !important;
	}
	.oz-beneficios-item--0,
	.oz-beneficios-item--1,
	.oz-beneficios-item--2,
	.oz-beneficios-item--3 {
		border-left: none;
		padding: 16px 10px;
	}
	.oz-beneficios-item--1 {
		border-left: 1px solid rgba(255, 255, 255, 0.18);
	}
	.oz-beneficios-item--2,
	.oz-beneficios-item--3 {
		border-top: 1px solid rgba(255, 255, 255, 0.18);
	}
	.oz-beneficios-item--3 {
		border-left: 1px solid rgba(255, 255, 255, 0.18);
	}
}


