/*
Theme Name:     Pequeingenio New
Theme URI:      https://pequeingenio.com/
Description:    Tema hijo de Shoptimizer para pequeingenio.com. Aquí van las personalizaciones (estilos, plantillas y funciones) sin tocar el tema padre.
Author:         Carlos Campo
Author URI:     https://pequeingenio.com/
Template:       shoptimizer
Version:        0.1.0
Requires at least: 5.6
Requires PHP:   7.3
License:        Proprietary - All Rights Reserved
License URI:    https://pequeingenio.com/
Text Domain:    pequeingenio_new

Copyright (c) 2026 Carlos Campo. Todos los derechos reservados.

Software propietario desarrollado por Carlos Campo para uso exclusivo en
el sitio web del cliente para el que fue contratado. No se autoriza su
copia, redistribución, sublicencia, publicación, modificación por terceros,
ingeniería inversa, ni su uso en ningún otro sitio o proyecto sin el
consentimiento expreso y por escrito del titular de los derechos.

El tema padre (Shoptimizer) y WordPress se utilizan bajo sus respectivas
licencias originales (GPL v2+); este aviso aplica únicamente al código
original contenido en este child theme.
*/

/* Las personalizaciones CSS van debajo de esta línea. */

/* ----------------------------------------------------------------------
   Sobreheader (barra superior de aviso de envío gratuito)
---------------------------------------------------------------------- */
.pi-sobreheader {
	background: #f4a300;
	color: #fff;
	text-align: center;
}
.pi-sobreheader .col-full {
	padding-left: 1em;
	padding-right: 1em;
}
.pi-sobreheader p {
	margin: 0;
	padding: 0.65em 0;
	font-size: 0.9rem;
	font-weight: 600;
	line-height: 1.35;
	letter-spacing: 0.01em;
}

@media ( max-width: 768px ) {
	.pi-sobreheader p {
		font-size: 0.8rem;
		padding: 0.55em 0;
	}
}

/* ----------------------------------------------------------------------
   Logo en móvil/tablet
   Shoptimizer genera inline (handle "shoptimizer-dynamic-style", a partir
   del Customizer "Mobile logo height", por defecto 22px) la regla del alto
   del logo por debajo de 992px, y la imprime DESPUÉS del CSS del hijo. A
   igual especificidad ganaría Shoptimizer, así que anteponemos "html" para
   subir la especificidad (0,3,3 > 0,3,2) y forzar 40px sin !important.
   Alternativa equivalente sin código: Apariencia > Personalizar > Cabecera
   móvil > "Mobile logo height" = 40.
---------------------------------------------------------------------- */
@media ( max-width: 992px ) {
	html body.theme-shoptimizer .site-header .custom-logo-link img,
	html body.wp-custom-logo .site-header .custom-logo-link img {
		height: 40px;
	}
}

/* ----------------------------------------------------------------------
   Barra de búsqueda (widget WooCommerce product search en la cabecera)
   Solo estilos: NO se cambia el texto ni el placeholder. El texto del
   botón "Buscar" se mantiene en el HTML (accesible) y solo se oculta
   visualmente para mostrar la lupa.

   Azules en variables -> ajustar aquí en una línea:
     --pi-search-bg  : fondo claro del campo
     --pi-search-btn : botón
---------------------------------------------------------------------- */
:root {
	--pi-search-bg: #cfe5ee;
	--pi-search-text: #4a6b78;
	--pi-search-btn: #5b9bb6;
	--pi-search-btn-hover: #4d889f;
	--pi-search-radius: 30px;
}

html .site-search .woocommerce-product-search {
	position: relative;
	display: flex !important;
	align-items: center;
	gap: 2px;
	background: var(--pi-search-bg) !important;
	border: 0 !important;
	border-radius: var(--pi-search-radius) !important;
	padding: 4px 4px 4px 8px;
	box-shadow: none !important;
}
/* Neutraliza posibles iconos decorativos del tema padre */
html .site-search .woocommerce-product-search::before,
html .site-search .woocommerce-product-search::after {
	content: none !important;
}

html .site-search .woocommerce-product-search .search-field {
	flex: 1 1 auto;
	min-width: 0;
	margin: 0 !important;
	background: transparent !important;
	border: 0 !important;
	box-shadow: none !important;
	outline: none !important;
	color: var(--pi-search-text) !important;
	padding: 10px 14px !important;
	font-size: 0.95rem;
}
html .site-search .woocommerce-product-search .search-field::placeholder {
	color: var(--pi-search-text) !important;
	opacity: 1;
}

html .site-search .woocommerce-product-search button,
html .site-search .woocommerce-product-search button[type="submit"] {
	position: static !important;
	flex: 0 0 auto;
	width: 44px;
	height: 44px;
	min-width: 0;
	margin: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	border-radius: calc(var(--pi-search-radius) - 7px) !important;
	background-color: var(--pi-search-btn) !important;
	background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='11'%20cy='11'%20r='7'/%3E%3Cline%20x1='21'%20y1='21'%20x2='16.5'%20y2='16.5'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: center !important;
	background-size: 20px 20px !important;
	color: transparent !important;
	font-size: 0 !important;
	text-indent: -9999px;
	overflow: hidden;
	cursor: pointer;
	transition: background-color 0.15s ease;
}
/* Si el tema mete un svg/i dentro del botón, lo ocultamos (usamos la lupa de fondo) */
html .site-search .woocommerce-product-search button svg,
html .site-search .woocommerce-product-search button i {
	display: none !important;
}
html .site-search .woocommerce-product-search button:hover,
html .site-search .woocommerce-product-search button:focus {
	background-color: var(--pi-search-btn-hover) !important;
}

/* Desplegable de resultados ajax (CommerceKit).
   CommerceKit lo inserta DENTRO del <form> con position:absolute. Al ser
   el form display:flex, su posición estática la calcula el flex y el panel
   se descoloca. Lo anclamos explícitamente debajo de la píldora (el form
   ya es position:relative) y forzamos ancho completo (CommerceKit fija un
   width en px por JS sobre results y suggestions). */
html .site-search .woocommerce-product-search .commercekit-ajs-results {
	position: absolute !important;
	top: calc(100% + 6px) !important;
	left: 0 !important;
	right: 0 !important;
	width: 100% !important;
	max-width: none !important;
	z-index: 9999 !important;
}
html .site-search .woocommerce-product-search .commercekit-ajs-suggestions {
	width: 100% !important;
	left: 0 !important;
}

/* ----------------------------------------------------------------------
   Footer de 3 columnas
---------------------------------------------------------------------- */
.pi-footer {
	padding: 3em 0 2em;
}
/* Alinear el footer con el contenedor Elementor de arriba (max-width 1140px, centrado) */
html footer.site-footer.pi-footer .col-full {
	max-width: 1140px;
	box-sizing: border-box;
	padding-left: 2em;
	padding-right: 2em;
	margin-left: auto;
	margin-right: auto;
}
/* El grid ocupa todo el ancho del col-full */
html footer.site-footer.pi-footer .pi-footer-grid {
	width: 100%;
}
/* Fondo y texto: alta especificidad (html footer.site-footer.pi-footer)
   para ganar al CSS inline del Customizer de Shoptimizer
   (footer.site-footer{background-color/color}), que se imprime después en el
   <head> y pisaría a un simple `.pi-footer`. Ver memoria
   shoptimizer-dynamic-css-override. */
html footer.site-footer.pi-footer {
	background: #cfe5ee;
	color: #2b2b2b;
}
.pi-footer-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 2em;
	align-items: start;
	text-align: left;
}
.pi-footer-col .widget {
	margin-bottom: 1.5em;
}
.pi-footer-col .widget:last-child {
	margin-bottom: 0;
}
/* Cabeceras: el Customizer las pinta con
   `.site footer.site-footer .widget .widget-title` (0,4,1); prefijamos para
   superarla. */
html footer.site-footer.pi-footer .pi-footer-col .widget-title {
	font-size: 1.05em;
	margin: 0 0 1em;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: #3a7295;
}
.pi-footer-col ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
.pi-footer-col ul li {
	margin: 0 0 0.5em;
}
/* Enlaces: el Customizer pinta `footer.site-footer a:not(.button)` (0,2,2);
   prefijamos para superarla y fijar el color oscuro del texto. */
html footer.site-footer.pi-footer .pi-footer-col ul li a {
	color: #2b2b2b;
	text-decoration: none;
}
html footer.site-footer.pi-footer .pi-footer-col ul li a:hover {
	text-decoration: underline;
}

/* Columna de redes sociales (SÍGUENOS): iconos en círculos teal. */
.pi-footer-social {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75em;
	align-items: center;
}
/* Prefijo de alta especificidad también aquí: si no, el color de enlace del
   footer del Customizer pintaría el <a> y, vía currentColor, el icono SVG. */
html footer.site-footer.pi-footer .pi-footer-social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.4em;
	height: 2.4em;
	border-radius: 50%;
	background: #3a7295;
	color: #fff;
	transition: background 0.15s ease;
}
html footer.site-footer.pi-footer .pi-footer-social a:hover {
	background: #2c5870;
	color: #fff;
}
.pi-footer-social svg {
	width: 1.2em;
	height: 1.2em;
	fill: currentColor;
}

@media ( max-width: 768px ) {
	.pi-footer-grid {
		grid-template-columns: 1fr;
		gap: 1.5em;
	}
}

/* ----------------------------------------------------------------------
   Logo-mark a 200px + menú a todo el ancho (barra de navegación)

   El logo-mark (logo que aparece en la barra de nav al hacer scroll/sticky)
   sale del Customizer "Sticky logo width" (por defecto 60px). Shoptimizer
   imprime ese ancho inline (handle dinámico de Kirki) DESPUÉS del CSS del
   hijo sobre `.is_stuck .logo-mark` (y el `margin-left` del menú que le deja
   hueco). A igual especificidad ganaría Shoptimizer, así que anteponemos
   `html` para subir especificidad (0,2,1 > 0,2,0) y forzar 200px sin
   !important. Alternativa equivalente sin código: Apariencia > Personalizar
   > ... > "Sticky logo width" = 200.

   Además, el menú principal pasa a flex con space-between para ocupar todo
   el ancho de la barra (primer ítem pegado a la izquierda, último a la
   derecha y el resto repartido).
---------------------------------------------------------------------- */
@media ( min-width: 993px ) {
	/* Logo-mark: 200px en vez de 60px, centrado verticalmente.
	   .logo-mark es position:absolute; su bloque contenedor es
	   .shoptimizer-primary-navigation.is_stuck (position:fixed). Lo
	   anclamos al centro vertical de la barra (top:50% + translateY(-50%))
	   para que quede alineado con el menú sin depender del alto del logo.
	   `left` se deja en auto: conserva su posición horizontal estática. */
	html .is_stuck .logo-mark {
		width: 200px;
		top: 50%;
		transform: translateY(-50%);
	}
	html .is_stuck .logo-mark img {
		width: 100%;
		height: auto;
	}
	/* Hueco que el menú deja al logo absoluto cuando la barra es fija */
	html .is_stuck .primary-navigation.with-logo .menu-primary-menu-container {
		margin-left: 200px;
	}

	/* Menú principal ocupando todo el ancho con space-between.
	   El <nav> es el ítem flex de .shoptimizer-primary-navigation: que
	   crezca para llenar la barra (min-width:0 para que pueda encoger si
	   el menú es largo). .primary-navigation y .menu-primary-menu-container
	   son bloque: ya llenan el ancho disponible y, cuando la barra es fija,
	   el margin-left:200px solo reduce su ancho automático (sin desbordar).
	   Solo el <ul> pasa a flex con space-between. */
	.shoptimizer-primary-navigation > .main-navigation {
		flex: 1 1 auto;
		min-width: 0;
	}
	.menu-primary-menu-container > ul.menu {
		display: flex;
		justify-content: space-between;
		align-items: center;
	}
}

/* ----------------------------------------------------------------------
   Bloque de portada: "NUESTRO COMPROMISO" + mosaico
   Maquetado con Elementor en la página Inicio (ID 27516), DESPUÉS del
   slider. La estructura (textos, iconos, imágenes) es editable desde el
   editor de Elementor; aquí solo van los estilos de las clases CSS que
   se asignaron a los widgets/contenedores:
     .pi-compromiso-title  -> titular con líneas a ambos lados
     .pi-compromiso-item   -> icon-box (círculo + texto)
     .pi-tile / .pi-tile-lg-> teselas del mosaico (imagen de fondo)
     .pi-tile-caption      -> "chip" translúcido con el texto de la tesela
   Todo se prefija con .pi-home-extra para ganar a la CSS que genera
   Elementor sin recurrir a !important.

   NOTA: las imágenes son el placeholder de Elementor; sustitúyelas desde
   el editor (cada tesela es un contenedor: Estilo > Fondo > Imagen; los
   iconos: widget Icon Box > Icono).
---------------------------------------------------------------------- */

/* Titular "NUESTRO COMPROMISO" con líneas a los lados */
.pi-home-extra .pi-compromiso-title .elementor-heading-title {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 1.25em;
	margin: 0;
	font-weight: 700;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: #2b2b2b;
}
.pi-home-extra .pi-compromiso-title .elementor-heading-title::before,
.pi-home-extra .pi-compromiso-title .elementor-heading-title::after {
	content: "";
	flex: 0 0 60px;
	border-top: 2px solid #2b2b2b;
}

/* Icon-box: círculo pastel con icono coloreado + línea separadora */
html .pi-home-extra .pi-compromiso-item .elementor-icon-box-wrapper {
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
}
html .pi-home-extra .pi-compromiso-item .elementor-icon-box-icon {
	display: flex;
	justify-content: center;
}
html .pi-home-extra .pi-compromiso-item .elementor-icon {
	width: 110px;
	height: 110px;
	font-size: 42px;
	border: none !important;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}
html .pi-home-extra .pi-compromiso-item .elementor-icon:hover {
	transform: translateY(-3px);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

/* Fondos de círculo más saturados por columna */
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(1) .elementor-icon { background-color: #FAD98A !important; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(2) .elementor-icon { background-color: #A8DCBF !important; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(3) .elementor-icon { background-color: #A3CAEC !important; }

/* Color del icono por columna (! necesario: Elementor fuerza blanco en modo stacked) */
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(1) .elementor-icon i,
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(1) .elementor-icon svg { color: #C47E00 !important; fill: #C47E00 !important; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(2) .elementor-icon i,
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(2) .elementor-icon svg { color: #2A8A52 !important; fill: #2A8A52 !important; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(3) .elementor-icon i,
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(3) .elementor-icon svg { color: #2E6FA3 !important; fill: #2E6FA3 !important; }

/* Título */
html .pi-home-extra .pi-compromiso-item .elementor-icon-box-title {
	margin-top: 1em;
	font-size: 1.15rem;
	font-weight: 700;
	color: #111;
	text-align: center;
}

/* Línea separadora coloreada bajo el título */
html .pi-home-extra .pi-compromiso-item .elementor-icon-box-title::after {
	content: '';
	display: block;
	width: 40px;
	height: 3px;
	border-radius: 2px;
	margin: 10px auto 0;
}
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(1) .elementor-icon-box-title::after { background-color: #F4A300; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(2) .elementor-icon-box-title::after { background-color: #3DAA6A; }
html .pi-home-extra .pi-compromiso-row > .e-con:nth-child(3) .elementor-icon-box-title::after { background-color: #5599CC; }

/* Descripción */
html .pi-home-extra .pi-compromiso-item .elementor-icon-box-description {
	color: #555;
	font-size: 0.95rem;
	line-height: 1.6;
	margin-top: 0.5em;
	text-align: center;
}

/* Teselas del mosaico */
.pi-home-extra .pi-mosaic .pi-tile {
	position: relative;
	border-radius: 6px;
	overflow: hidden;
}
/* Igualar alturas del mosaico.
   - Los 4 tiles pequeños: cuadrados (aspect 1:1) -> todos iguales entre sí.
   - El tile grande: SIN aspect-ratio; se estira a la altura de su hermano
     (la columna derecha) usando align-self:stretch + height:100%. Así el
     grande copia la altura total del bloque derecho (que ya está
     determinada por los 2 cuadrados apilados + gap) y ambos lados acaban
     a la misma altura por abajo.
   - La imagen del tile se recorta con object-fit:cover.

   IMPORTANTE: Elementor genera CSS por elemento (post-NNN.css) con el
   min-height que se haya puesto en Layout. Ese min-height compite con el
   aspect-ratio (gana el mayor), así que aquí se anula para que mande la
   relación de aspecto. Si quieres ajustar el tamaño del mosaico, hazlo
   con el ancho del contenedor o con la rejilla, no con min-height.
   Solo los tiles pequeños anulan el min-height; el grande conserva el
   valor de Elementor (620px) para que siempre tenga altura visible
   incluso cuando queda solo en su línea flex (viewport estrecho). */
.pi-home-extra .pi-mosaic .pi-tile:not(.pi-tile-lg) {
	min-height: 0 !important;
	aspect-ratio: 1 / 1;
}
.pi-home-extra .pi-mosaic .pi-tile-lg {
	align-self: stretch;
}
.pi-home-extra .pi-mosaic .pi-tile .elementor-widget-image {
	flex: 1 1 auto;
	align-self: stretch;
	height: 100%;
}
.pi-home-extra .pi-mosaic .pi-tile .elementor-widget-image > .elementor-widget-container,
.pi-home-extra .pi-mosaic .pi-tile .elementor-widget-image .elementor-image,
.pi-home-extra .pi-mosaic .pi-tile .elementor-widget-image .elementor-image > a {
	display: block;
	width: 100%;
	height: 100%;
}
.pi-home-extra .pi-mosaic .pi-tile .elementor-widget-image img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
/* Velo sutil para legibilidad del texto sobre la foto */
.pi-home-extra .pi-mosaic .pi-tile::after {
	content: "";
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.04);
	pointer-events: none;
	z-index: 1;
}
/* Caption como superposición sobre la imagen del tile.
   El widget Heading se ancla en absoluto sobre `.pi-tile` (position:
   relative) y se centra. El "chip" translúcido se dibuja DENTRO, sobre
   `.elementor-heading-title` (ver más abajo).

   Importante: el background-color que Elementor aplica por elemento al
   widget (Style > Background) pintaría TODO el tile (porque aquí el
   widget es `inset:0`). Si lo dejásemos, blanquea la foto. Lo forzamos
   transparente con `html` (sube especificidad para ganar al CSS dinámico
   de Elementor sin !important). El fondo blanco del chip se aplica solo
   al texto en `.elementor-heading-title`. */
.pi-home-extra .pi-mosaic .pi-tile-caption {
	position: absolute;
	inset: 0;
	margin: 0;
	width: auto;
	max-width: none;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1em;
	z-index: 2;
	pointer-events: none;
}
html .pi-home-extra .pi-mosaic .pi-tile-caption {
	background-color: transparent;
}
.pi-home-extra .pi-mosaic .pi-tile-caption .elementor-widget-container {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
}
/* "Chip" translúcido con el texto de la tesela */
.pi-home-extra .pi-tile-caption .elementor-heading-title {
	display: inline-block;
	margin: 0;
	padding: 0.5em 0.9em;
	background: rgba(255, 255, 255, 0.82);
	border-radius: 6px;
	color: #2b2b2b;
	font-weight: 700;
	letter-spacing: 0.04em;
	line-height: 1.25;
	text-align: center;
	text-transform: uppercase;
	position: relative;
	z-index: 1;
	pointer-events: auto;
}
.pi-home-extra .pi-tile-lg .elementor-heading-title {
	font-size: 1.6rem;
}

@media ( max-width: 768px ) {
	.pi-home-extra .pi-compromiso-title .elementor-heading-title::before,
	.pi-home-extra .pi-compromiso-title .elementor-heading-title::after {
		flex-basis: 24px;
	}
	.pi-home-extra .pi-tile-lg .elementor-heading-title {
		font-size: 1.25rem;
	}
}

/* ----------------------------------------------------------------------
   Bloque "Imprescindibles por edad" (shortcode pi_imprescindibles_edad)

   - Cabecera centrada (título / subtítulo / etiqueta).
   - Fila de chips deslizable: en pantallas estrechas se hace scroll
     horizontal con scroll-snap; en >= 1024px se centran si caben.
   - 10 paneles de productos prerenderizados; solo el activo en flujo.

   Las tarjetas de producto las pinta el shortcode [products] de
   WooCommerce con la plantilla del tema -> coherencia con el resto del
   sitio sin duplicar CSS.
---------------------------------------------------------------------- */
.pi-edad {
	padding: 3em 1em;
	text-align: center;
}
/* En móvil se reduce el espacio superior para que "APRENDE JUGANDO" quede
   más pegado al slider (el padding de 3em dejaba demasiado hueco). */
@media ( max-width: 768px ) {
	.pi-edad {
		padding-top: 1em;
	}
}
.pi-edad__title {
	margin: 0 0 0.3em;
	font-size: 1.6rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: #2b2b2b;
}
.pi-edad__subtitle {
	max-width: 720px;
	margin: 0 auto 1.6em;
	font-size: 0.95rem;
	color: #555;
	line-height: 1.45;
}
.pi-edad__label {
	margin: 0 0 1em;
	font-size: 1rem;
	font-weight: 600;
	color: #2b2b2b;
}

/* Fila de chips */
.pi-edad__tabs {
	display: flex;
	gap: 0.6em;
	flex-wrap: nowrap;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	-webkit-overflow-scrolling: touch;
	padding: 0.5em 0.25em 1.5em;
	margin: 0 -0.25em;
	scrollbar-width: thin;
}
.pi-edad__tabs::-webkit-scrollbar {
	height: 6px;
}
.pi-edad__tabs::-webkit-scrollbar-thumb {
	background: rgba(0, 0, 0, 0.15);
	border-radius: 3px;
}
@media ( min-width: 1024px ) {
	.pi-edad__tabs {
		justify-content: center;
		flex-wrap: wrap;
		overflow-x: visible;
	}
}

.pi-edad__tab {
	flex: 0 0 auto;
	scroll-snap-align: center;
	padding: 0.55em 1.1em;
	border: 2px solid #e6e6e6;
	border-radius: 999px;
	background: #fff;
	color: #2b2b2b;
	font-family: inherit;
	font-size: 0.95rem;
	font-weight: 600;
	line-height: 1.2;
	cursor: pointer;
	white-space: nowrap;
	transition: border-color 0.15s ease, background 0.15s ease,
		color 0.15s ease;
}
.pi-edad__tab:hover {
	border-color: #f4a300;
	color: #f4a300;
}
.pi-edad__tab.is-active {
	background: #f4a300;
	border-color: #f4a300;
	color: #fff;
}

/* Paneles: solo el activo en flujo. El atributo `hidden` da display:none
   por defecto; la clase `.is-active` lo muestra. */
.pi-edad__panel {
	display: none;
}
.pi-edad__panel.is-active {
	display: block;
}

.pi-edad__panels {
	margin-top: 0.5em;
}

/* ----------------------------------------------------------------------
   Bloque "Ofertas Limitadas" (shortcode pi_ofertas_limitadas)
   - Mismo lenguaje visual que .pi-edad: título centrado en mayúsculas
     + grid de productos del shortcode [products] de WooCommerce.
   - El badge de descuento, precio tachado, etc. los pinta la tarjeta
     de producto del tema -> no hay que duplicar CSS.
---------------------------------------------------------------------- */
.pi-ofertas {
	padding: 3em 1em;
	text-align: center;
}
.pi-ofertas__title {
	margin: 0 0 1.5em;
	font-size: 1.6rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: #2b2b2b;
}
.pi-ofertas__grid {
	max-width: 1280px;
	margin: 0 auto;
}

/* ----------------------------------------------------------------------
   Bloque "¿TE AYUDAMOS?" (shortcode pi_ayudamos)
   - Sección a sangre con fondo azul.
   - Título centrado en mayúsculas, copy debajo y 3 pill-buttons.
   - Pills blancas con icono + texto. En móvil se apilan; en desktop
     quedan en línea con wrap si no caben.
   - El color de fondo viene inline desde el shortcode (atributo `bg`)
     para poder cambiarlo por instancia sin tocar CSS.
---------------------------------------------------------------------- */
.pi-ayudamos {
	color: #fff;
	padding: 3em 1em;
	text-align: center;
}
.pi-ayudamos__inner {
	max-width: 900px;
	margin: 0 auto;
}
.pi-ayudamos__title {
	margin: 0 0 0.8em;
	font-size: 2.2rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	color: #fff;
}
.pi-ayudamos__copy {
	margin: 0 0 2em;
	font-size: 1.05rem;
	line-height: 1.55;
}
.pi-ayudamos__copy p {
	margin: 0 0 0.2em;
}
.pi-ayudamos__copy p:last-child {
	margin-bottom: 0;
}

.pi-ayudamos__buttons {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 1em;
}
/* Pill blanca con texto/icono en el azul de la sección. El color se
   define con una variable CSS (`--pi-ayudamos-fg`) para que cambie
   automáticamente si se cambia `bg` desde el shortcode (la variable se
   inyecta inline en el <section>). */
.pi-ayudamos__btn {
	display: inline-flex;
	align-items: center;
	gap: 0.6em;
	padding: 0.75em 1.6em;
	background: #fff;
	color: var( --pi-ayudamos-fg, #3a7295 );
	border-radius: 999px;
	font-weight: 700;
	text-decoration: none;
	line-height: 1.2;
	transition: transform 0.15s ease, box-shadow 0.15s ease;
	box-shadow: 0 2px 6px rgba( 0, 0, 0, 0.15 );
}
.pi-ayudamos__btn:hover,
.pi-ayudamos__btn:focus-visible {
	transform: translateY( -2px );
	box-shadow: 0 8px 16px rgba( 0, 0, 0, 0.22 );
}
.pi-ayudamos__btn-icon {
	display: inline-flex;
	width: 1.25em;
	height: 1.25em;
}
.pi-ayudamos__btn-icon svg {
	width: 100%;
	height: 100%;
	display: block;
	fill: currentColor;
}

@media ( max-width: 600px ) {
	.pi-ayudamos__title {
		font-size: 1.7rem;
	}
	.pi-ayudamos__copy {
		font-size: 0.95rem;
	}
	.pi-ayudamos__buttons {
		flex-direction: column;
		align-items: stretch;
	}
	.pi-ayudamos__btn {
		justify-content: center;
	}
}

/* ----------------------------------------------------------------------
   Tipografía: Quicksand como fuente predefinida de TODA la web

   La fuente se carga en functions.php (Google Fonts). Aquí se aplica.

   Dos frentes a vencer:
   1) Shoptimizer imprime la tipografía del Customizer (Kirki) inline
      DESPUÉS del CSS del hijo, sobre selectores como
      `body, button, input, select, option, textarea`, `:root :where(body)`
      (especificidad 0,1,0), `h1`…`h6`, `.entry-content`, widgets, títulos
      de producto, menús… Para ganar a todos de forma fiable se usa
      `!important` sobre una lista acotada (NO `*`, para no romper las
      tipografías de icono: Font Awesome, dashicons, estrellas WC, etc.,
      que fijan su propia font-family en su propia clase).
   2) Elementor usa variables globales para la fuente; se redefinen a
      Quicksand para que todos sus widgets la hereden sin pelear
      especificidad (los textos heredan por cascada).
---------------------------------------------------------------------- */

/* Elementor: variables globales de tipografía -> Quicksand */
:root {
	--e-global-typography-primary-font-family: "Quicksand";
	--e-global-typography-secondary-font-family: "Quicksand";
	--e-global-typography-text-font-family: "Quicksand";
	--e-global-typography-accent-font-family: "Quicksand";
}

/* Familia predefinida en los elementos que tema/plugins reescriben.
   El resto (p, a, span, li, …) la hereda de body sin tocar iconos. */
html body,
html body button,
html body input,
html body select,
html body optgroup,
html body textarea,
html body h1,
html body h2,
html body h3,
html body h4,
html body h5,
html body h6,
html body .entry-content,
html body .widget,
html body .widget-title,
html body .widgettitle,
html body .site-title,
html body .woocommerce-loop-product__title,
html body .summary h1,
html body .menu-primary-menu-container > ul > li > a,
html body [class^="elementor-"],
html body [class*=" elementor-"] {
	font-family: "Quicksand", sans-serif !important;
}

/* ── Menú secundario: Mi cuenta + Registrarse con iconos encima ─────────── */
.secondary-navigation .menu-item-59 > a,
.secondary-navigation .menu-item-129 > a {
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	gap: 4px;
	font-size: 0.8rem;
	line-height: 1.2;
}
/* Icono persona para Mi cuenta */
.secondary-navigation .menu-item-59 > a::before {
	content: "";
	display: block;
	width: 22px;
	height: 22px;
	background: currentColor;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z'/%3E%3C/svg%3E") center/contain no-repeat;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z'/%3E%3C/svg%3E") center/contain no-repeat;
}
/* Icono persona+ para Registrarse */
.secondary-navigation .menu-item-129 > a::before {
	content: "";
	display: block;
	width: 22px;
	height: 22px;
	background: currentColor;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z'/%3E%3C/svg%3E") center/contain no-repeat;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* ── Sidebar de filtros en páginas de categoría de producto ──────────────── */
.col-left .widget,
.widget-area .widget {
	padding: 1.25em 1.5em 1.25em 0;
	border-bottom: 1px solid #e8e8e8;
}
.col-left .widget:first-child,
.widget-area .widget:first-child {
	padding-top: 0;
}
.col-left .widget:last-child,
.widget-area .widget:last-child {
	border-bottom: none;
}
.col-left .widget-title,
.widget-area .widget-title {
	margin-bottom: 0.75em;
	font-size: 0.8rem;
	letter-spacing: 0.06em;
}
/* Inputs del filtro de precio */
.col-left .price_slider_wrapper,
.widget-area .price_slider_wrapper {
	margin-top: 0.5em;
}
.col-left .woocommerce-widget-layered-nav-list,
.widget-area .woocommerce-widget-layered-nav-list {
	display: flex;
	flex-direction: column;
	gap: 0.4em;
}

/* ── Sección "¿Por qué elegirnos?" en móvil ─────────────────────────────── */
@media ( max-width: 767px ) {
	/* Reducir ligeramente la fuente de la sección */
	html .pi-home-extra .pi-compromiso-title .elementor-heading-title {
		font-size: 1.1rem;
	}
	html .pi-home-extra .elementor-element-a0d0447 .elementor-text-editor,
	html .pi-home-extra .elementor-widget-text-editor {
		font-size: 0.95rem;
	}
	html .pi-home-extra .pi-compromiso-item .elementor-icon-box-title {
		font-size: 1rem;
	}
	html .pi-home-extra .pi-compromiso-item .elementor-icon-box-description {
		font-size: 0.88rem;
	}

	/* Apilar los 3 bloques verticalmente (Elementor fuerza nowrap a 1024px) */
	html .pi-home-extra .pi-compromiso-row.e-con {
		flex-wrap: wrap !important;
	}
	html .pi-home-extra .pi-compromiso-row > .e-con {
		width: 100% !important;
		max-width: 100% !important;
	}

	/* Círculo centrado en cada bloque apilado */
	html .pi-home-extra .pi-compromiso-item .elementor-icon {
		width: 90px;
		height: 90px;
		font-size: 34px;
	}
}


/* Anular margen negativo del slider en móvil (en desktop está intencionado) */
@media (max-width: 767px) {
    .elementor-27516 .elementor-element.elementor-element-db56435 {
        margin-top: 0 !important;
    }
}

/* Ocultar descripciones de ítems del menú principal */
.primary-navigation .icon-wrapper { display: none !important; }
.cg-menu-link .sub { display: none !important; }

/* ── Guías para las familias ─────────────────────────────────────────────── */
.pi-guias-ultimo {
	text-align: center;
	max-width: 560px;
	margin: 0 auto 2em;
}
.pi-guias-ultimo__img-wrap {
	position: relative;
	display: inline-block;
	width: 100%;
}
.pi-guias-ultimo__img-wrap img {
	width: 100%;
	border-radius: 12px;
	display: block;
}
.pi-guias-badge {
	position: absolute;
	top: 16px;
	left: 16px;
	background: #f4a300;
	color: #fff;
	font-weight: 700;
	font-size: 0.85rem;
	padding: 6px 14px;
	border-radius: 6px;
	transform: rotate(-6deg);
	display: inline-block;
}
.pi-guias-ultimo__title { margin: 1em 0 0.4em; font-size: 1.2rem; }
.pi-guias-ultimo__title a { color: #111; text-decoration: none; }
.pi-guias-ultimo__excerpt { color: #555; font-size: 0.95rem; margin-bottom: 1em; }

/* Grid de 2 columnas */
.pi-guias-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 2em;
	margin-top: 1em;
}
.pi-guias-card { text-align: center; }
.pi-guias-card img { width: 100%; border-radius: 10px; display: block; margin-bottom: 0.8em; }
.pi-guias-card__title { font-size: 1rem; font-weight: 700; margin-bottom: 0.4em; }
.pi-guias-card__title a { color: #111; text-decoration: none; }
.pi-guias-card__excerpt { color: #555; font-size: 0.9rem; margin-bottom: 0.8em; }

/* Botón compartido */
.pi-guias-btn {
	display: inline-block;
	background: #3a7295;
	color: #fff !important;
	padding: 10px 24px;
	border-radius: 30px;
	font-size: 0.9rem;
	font-weight: 600;
	text-decoration: none;
	transition: background 0.2s ease;
}
.pi-guias-btn:hover { background: #2c5870; }

/* Separador punteado entre bloques */
.pi-guias-separator {
	border: none;
	border-top: 3px dotted #3a7295;
	margin: 2em 0;
}

@media (max-width: 600px) {
	.pi-guias-grid { grid-template-columns: 1fr; }
}

/* ----------------------------------------------------------------------
   CENTROS Y PROFESIONALES (página 31296)
   Caption superpuesto al borde inferior de la foto (no como banda debajo).
   El contenedor del hero es relativo y la banda se posiciona en absoluto
   pegada abajo, a todo el ancho. Fondo/tipografía vienen de Elementor.
---------------------------------------------------------------------- */
.pi-centros__hero {
	position: relative;
}
.pi-centros__hero .pi-centros__caption {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	width: 100%;
	margin: 0;
}

/* Tarjetas "Juguetes y material" / "Libros y cuentos":
   - Las dos imágenes a la MISMA altura (recorte con object-fit, da igual su
     proporción original).
   - Botones tipo píldora naranja a todo el ancho de la tarjeta. El color se
     fuerza aquí porque el de Elementor caía al verde por defecto (#61CE70). */
/* `!important` a propósito: Elementor imprime CSS inline por-elemento
   (`.elementor-31296 .elementor-element.elementor-element-XXX img`, (0,3,1))
   y el color de botón vía var(--e-global-color-accent) con la misma
   especificidad pero después en el <head>. Subir clases no basta de forma
   estable, así que se fuerzan estas pocas declaraciones. */
.pi-centros__cardimg img {
	width: 100% !important;
	height: 200px !important;
	object-fit: cover !important;
	border-radius: 18px !important;
	display: block;
}
.pi-centros__btn .elementor-button {
	background-color: #f4a300 !important;
	color: #fff !important;
	border-radius: 30px !important;
	width: 100%;
	text-transform: uppercase;
	font-weight: 700;
}
.pi-centros__btn .elementor-button:hover,
.pi-centros__btn .elementor-button:focus {
	background-color: #d98f00 !important;
	color: #fff !important;
}

/* ----------------------------------------------------------------------
   JUGUETES Y MATERIAL (página 31309): rejilla de catálogos.
   4 tarjetas (imagen + botón azul "Ver catálogo"). Imágenes a la misma
   altura con recorte; botón píldora azul. `!important` por lo mismo que
   en CENTROS (CSS inline por-elemento de Elementor). */
.pi-catalogos__img img {
	width: 100% !important;
	height: 175px !important;
	object-fit: cover !important;
	border-radius: 16px !important;
	display: block;
}
.pi-catalogos__btn .elementor-button {
	background-color: #2b6cb0 !important;
	color: #fff !important;
	border-radius: 30px !important;
	width: 100%;
	text-transform: uppercase;
	font-weight: 700;
}
.pi-catalogos__btn .elementor-button:hover,
.pi-catalogos__btn .elementor-button:focus {
	background-color: #235a91 !important;
	color: #fff !important;
}

/* ----------------------------------------------------------------------
   COMPRA POR EDAD (página 31319): botón "Ver más" azul tipo píldora
   (ancho automático, centrado). `!important` por el CSS inline de Elementor. */
.pi-edad__btn .elementor-button {
	background-color: #2b6cb0 !important;
	color: #fff !important;
	border-radius: 30px !important;
	text-transform: uppercase;
	font-weight: 700;
}
.pi-edad__btn .elementor-button:hover,
.pi-edad__btn .elementor-button:focus {
	background-color: #235a91 !important;
	color: #fff !important;
}

/* Círculos de edad: el texto es el enlace a su categoría. El <a> se estira
   a todo el círculo para que sea clicable entero, manteniendo el texto
   blanco y en dos líneas centrado. */
.pi-edad-circle { position: relative; }
.pi-edad-circle .elementor-heading-title a {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	line-height: 1.05;
	color: #fff;
}
.pi-edad-circle .elementor-heading-title a:hover,
.pi-edad-circle .elementor-heading-title a:focus {
	color: #fff;
}

/* ----------------------------------------------------------------------
   EL REGALO PERFECTO (página 31331): rejilla de últimos posts de "regalos".
   3 columnas, imágenes a igual altura (recorte), botón naranja "Seguir
   leyendo". Shortcode [pi_regalos_grid].
---------------------------------------------------------------------- */
.pi-regalos-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 2.4em 2em;
	margin-top: 1em;
}
.pi-regalos-card {
	display: flex;
	flex-direction: column;
	text-align: center;
}
.pi-regalos-card__img {
	display: block;
}
.pi-regalos-card__img img,
.pi-regalos-card__imgph {
	display: block;
	width: 100%;
	height: 200px;
	object-fit: cover;
	border-radius: 12px;
}
.pi-regalos-card__imgph {
	background: #e6eef2;
}
.pi-regalos-card__title {
	font-size: 1.05rem;
	font-weight: 700;
	margin: 0.9em 0 0.4em;
	line-height: 1.3;
}
.pi-regalos-card__title a {
	color: #2b2b2b;
	text-decoration: none;
}
.pi-regalos-card__desc {
	color: #666;
	font-size: 0.92rem;
	margin: 0 0 1.1em;
	flex-grow: 1;
}
.pi-regalos-btn {
	display: inline-block;
	align-self: center;
	background: #f4a300;
	color: #fff !important;
	padding: 11px 28px;
	border-radius: 30px;
	font-weight: 700;
	text-decoration: none;
	transition: background 0.2s ease;
}
.pi-regalos-btn:hover,
.pi-regalos-btn:focus {
	background: #d98f00;
}
@media ( max-width: 900px ) {
	.pi-regalos-grid { grid-template-columns: repeat(2, 1fr); }
}
@media ( max-width: 600px ) {
	.pi-regalos-grid { grid-template-columns: 1fr; }
}

/* Bloque azul "¿Necesitas ayuda para elegir?" en EL REGALO PERFECTO:
   misma sección pi_ayudamos pero redondeada y con márgenes (no a sangre). */
.pi-regalos-ayuda .pi-ayudamos {
	border-radius: 28px;
}

/* ── Botón flotante WhatsApp ── */
.pi-wa-fab {
	position: fixed;
	bottom: 80px;
	right: 24px;
	z-index: 9999;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: #25d366;
	color: #fff;
	box-shadow: 0 4px 12px rgba(0,0,0,.25);
	text-decoration: none;
	transition: background .2s ease, transform .2s ease, box-shadow .2s ease;
}
.pi-wa-fab:hover,
.pi-wa-fab:focus {
	background: #1ebe5d;
	transform: scale(1.08);
	box-shadow: 0 6px 18px rgba(0,0,0,.3);
	color: #fff;
}
@media ( max-width: 600px ) {
	.pi-wa-fab {
		bottom: 80px;
		right: 24px;
		width: 50px;
		height: 50px;
	}
}

/* ── Página Contacto: campos del formulario CF7 a ancho completo ─────────
   Los inputs de CF7 traen size="40" / cols="40", que les da un ancho
   intrínseco de ~40 caracteres. En la tarjeta estrecha del móvil eso
   desbordaba (sobre todo el campo Email) y empujaba toda la página,
   dejando hueco a la derecha. Forzamos que todo control se ajuste a su
   contenedor con box-sizing border-box. El campo numérico (Edad) se deja
   compacto. */
.wpcf7 .wpcf7-form-control:not(.wpcf7-submit):not(.wpcf7-number) {
	width: 100%;
	max-width: 100%;
	box-sizing: border-box;
}
.wpcf7 .wpcf7-form-control.wpcf7-number {
	width: 120px;
	max-width: 100%;
	box-sizing: border-box;
}
/* Enlaces largos (emails/URLs) de la tarjeta de contacto: que rompan línea
   en vez de forzar ancho en móvil. */
.elementor-page-163 .elementor-widget-html a {
	overflow-wrap: anywhere;
	word-break: break-word;
}
