/* =========================================================================
   PALETA GOZO — capa de armonización
   Se carga la última del <head>.

   Principio: Elementor guarda el diseño real en su CSS por elemento
   (post-*.css), y ese CSS ya se ha reescrito a la paleta nueva. Esta hoja NO
   re-pinta la web: sólo cubre lo que la sustitución no puede alcanzar —
   superficies base, el bug de :hover del kit, y el "chrome" de plugins
   (WooCommerce, formularios, calendario, cookies) que Elementor no estiliza.

   Casi todas las reglas van a baja especificidad a propósito: si Elementor
   define un color para un elemento concreto, debe ganar él. El !important
   sólo aparece donde el plugin escribe el color en línea.

   Reparto de roles (y por qué):
     #F4EBDC crema principal .... fondo de página
     #FAF3EA crema clara ........ superficies elevadas (tarjetas, inputs)
     #D8A04B dorado tostado ..... acento; como fondo con texto oscuro (5,9:1)
                                  o sobre marrón. Sobre crema da 1,96:1 -> nunca texto.
     #B36A2E caramelo oscuro .... bordes, iconos, hover, énfasis grande
                                  (3,5:1 sobre crema: texto grande sí, cuerpo no)
     #5A3A24 marrón profundo .... titulares y zonas oscuras (8,6:1 sobre crema)
     #2E2E2C gris oscuro ........ texto de cuerpo (11,5:1 sobre crema)
   ========================================================================= */

:root,
.elementor-kit-14 {
  --gozo-crema:        #F4EBDC;
  --gozo-crema-clara:  #FAF3EA;
  --gozo-dorado:       #D8A04B;
  --gozo-caramelo:     #B36A2E;
  --gozo-marron:       #5A3A24;
  --gozo-gris:         #2E2E2C;

  /* tintes derivados: mezclas de la propia paleta, no colores nuevos */
  --gozo-borde:        rgba(90, 58, 36, .18);
  --gozo-borde-fuerte: rgba(90, 58, 36, .38);
  --gozo-sombra:       rgba(90, 58, 36, .14);
  --gozo-sombra-suave: rgba(90, 58, 36, .07);
  --gozo-velo:         rgba(90, 58, 36, .06);
}

/* ---------- 0. El acento depende del contexto ---------- */
/* --e-global-color-primary es el "color pop" del sitio: el amarillo original.
   Se usa 40-130 veces por página, casi siempre como color de TEXTO, y en dos
   contextos opuestos: sobre las fotos del hero y sobre fondo claro.
   Un único color no sirve para los dos -- el dorado sobre crema da 1,96:1.
   Así que la variable se redefine por contexto, que es lo que hacía falta:
     · por defecto (contenido sobre crema) -> marrón, 8,6:1
     · dentro de cabecera, pie y secciones con foto de fondo -> dorado, que es
       donde el dorado luce y contrasta.
   Al ser una variable CSS, la cascada la propaga sola a todo lo que hay dentro. */

body.elementor-kit-14 { --e-global-color-primary: #5A3A24; }

.elementor-location-header,
.elementor-location-footer,
.elementor-element:has(> .elementor-background-slideshow),
.elementor-element:has(> .elementor-background-overlay),
.elementor-element:has(> .swiper > .elementor-background-slideshow) {
  --e-global-color-primary: #D8A04B;
}

/* ---------- 1. Superficies base ---------- */
/* El tema traía el fondo en blanco puro; es lo único estructural que cambia. */

html,
body,
body.elementor-kit-14 {
  background-color: var(--gozo-crema);
  color: var(--gozo-gris);
}

::selection    { background: var(--gozo-dorado); color: var(--gozo-gris); }
:focus-visible { outline: 2px solid var(--gozo-caramelo); outline-offset: 2px; }
hr             { border-color: var(--gozo-borde); }

/* ---------- 2. Tipografía por defecto ---------- */
/* OJO: aquí NO va una regla global de h1-h6 ni de p. Un selector de tipo gana
   siempre a la herencia, así que pintar todos los titulares de marrón también
   los pintaba dentro de las secciones oscuras (la barra de avisos y el
   copyright del pie quedaban marrón sobre marrón, invisibles).
   El color de cuerpo lo pone body y se hereda: así una sección oscura que
   define su color se lo pasa a sus hijos y todo sigue funcionando.
   Los titulares en marrón se limitan a las zonas de contenido de WordPress,
   que siempre van sobre crema. */

.entry-content h1, .entry-content h2, .entry-content h3,
.entry-content h4, .entry-content h5, .entry-content h6,
.page-content h1, .page-content h2, .page-content h3,
.page-content h4, .page-content h5, .page-content h6,
.woocommerce-page .entry-title { color: var(--gozo-marron); }

blockquote     { border-inline-start: 3px solid var(--gozo-dorado); color: var(--gozo-marron); }
code, kbd, pre { background: var(--gozo-crema-clara); color: var(--gozo-marron); }

/* ---------- 3. Enlaces ---------- */
/* El kit original definía a:hover en el crema del sitio porque los enlaces vivían
   sobre secciones oscuras. Con el fondo de página ahora en crema, ese hover
   dejaba el enlace invisible. Se corrige a la misma especificidad que el kit.
   El subrayado dorado da la pista sin depender del contraste de color. */

a,
.elementor-kit-14 a {
  color: var(--gozo-marron);
  text-decoration-color: var(--gozo-dorado);
  text-underline-offset: .18em;
  transition: color .18s ease, text-decoration-color .18s ease;
}

a:hover,
.elementor-kit-14 a:hover {
  color: var(--gozo-caramelo);
  text-decoration-color: var(--gozo-caramelo);
}

/* Los enlaces que son contenedores (imágenes, tarjetas, botones, menú) no
   llevan subrayado: ahí el color lo pone Elementor. */
a:has(> img),
.elementor-widget-image a,
.elementor-button,
.elementor-nav-menu a,
.woocommerce-LoopProduct-link { text-decoration: none; }

/* ---------- 4. Submenús desplegables ---------- */
/* Sólo el desplegable. El <nav> principal va transparente sobre la foto del
   hero, así que no se le toca el fondo. */

.elementor-nav-menu--dropdown,
.elementor-nav-menu .sub-menu {
  background-color: var(--gozo-crema-clara) !important;
  box-shadow: 0 10px 30px var(--gozo-sombra);
}
.elementor-nav-menu--dropdown a,
.elementor-nav-menu .sub-menu a { color: var(--gozo-marron) !important; }
.elementor-nav-menu--dropdown a:hover,
.elementor-nav-menu .sub-menu a:hover {
  background-color: var(--gozo-velo) !important;
  color: var(--gozo-caramelo) !important;
}

/* La página en la que estás. Elementor le pone al elemento activo un fondo
   marrón, y la regla de arriba le pintaba la letra del MISMO marrón: el
   recuadro se tragaba el texto (contraste 1:1, ilegible).
   Sobre ese fondo la letra va en crema: 8,6:1. */
.elementor-nav-menu--dropdown a.elementor-item-active,
.elementor-nav-menu--dropdown a.elementor-item-active:hover,
.elementor-nav-menu--dropdown a.elementor-item-active:focus,
.elementor-nav-menu .sub-menu a.elementor-item-active {
  color: var(--gozo-crema-clara) !important;
}

/* ---------- 5. Botones que Elementor no estiliza ---------- */
/* Los .elementor-button quedan fuera a propósito: su color va en el CSS por
   elemento y ya está en paleta (p.ej. el botón del hero, dorado sobre foto). */

button:not(.elementor-menu-toggle):not(.cn-close-icon):not([class*="elementor"]):not([class*="gz-consent"]),
input[type="submit"],
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit,
.wp-block-button__link {
  background-color: var(--gozo-marron);
  color: var(--gozo-crema-clara);
  border-color: var(--gozo-marron);
  border-radius: 4px;
  transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

button:not(.elementor-menu-toggle):not(.cn-close-icon):not([class*="elementor"]):not([class*="gz-consent"]):hover,
input[type="submit"]:hover,
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce #respond input#submit:hover,
.wp-block-button__link:hover {
  background-color: var(--gozo-dorado);   /* "carameliza" al pasar por encima */
  color: var(--gozo-gris);                /* 5,9:1 */
  border-color: var(--gozo-dorado);
}

/* Acción principal de compra: dorado, el único botón que usa el color pop, para
   que destaque sobre los demás. Con texto gris oscuro da 5,9:1; en caramelo con
   texto blanco se quedaba en 4,19:1, por debajo del mínimo. */
.woocommerce button.button.alt,
.woocommerce a.button.alt,
.woocommerce input.button.alt,
.single_add_to_cart_button {
  background-color: var(--gozo-dorado) !important;
  color: var(--gozo-gris) !important;
  border-color: var(--gozo-dorado) !important;
}
.woocommerce button.button.alt:hover,
.woocommerce a.button.alt:hover,
.single_add_to_cart_button:hover {
  background-color: var(--gozo-marron) !important;
  color: var(--gozo-crema-clara) !important;
  border-color: var(--gozo-marron) !important;
}

/* ---------- 6. Formularios ---------- */

input[type="text"], input[type="email"], input[type="tel"], input[type="number"],
input[type="password"], input[type="search"], input[type="url"], input[type="date"],
select, textarea,
.elementor-field-textual {
  background-color: var(--gozo-crema-clara);
  border: 1px solid var(--gozo-borde-fuerte);
  color: var(--gozo-gris);
  border-radius: 4px;
}

input:focus, select:focus, textarea:focus,
.elementor-field-textual:focus {
  border-color: var(--gozo-caramelo);
  box-shadow: 0 0 0 3px rgba(216, 160, 75, .35);
  outline: none;
}

::placeholder { color: rgba(46, 46, 44, .55); }

/* ---------- 7. WooCommerce ---------- */

/* Precios: sólo en catálogo y ficha. El total del carrito de la cabecera queda
   fuera a propósito -- va sobre un botón oscuro y heredaba marrón sobre marrón. */
.woocommerce ul.products .price,
.woocommerce div.product .summary .price,
.woocommerce .entry-summary .price,
.woocommerce ul.products .woocommerce-Price-amount,
.woocommerce .entry-summary .woocommerce-Price-amount { color: var(--gozo-marron); font-weight: 600; }

.elementor-menu-cart__toggle .woocommerce-Price-amount,
.elementor-menu-cart__toggle bdi { color: inherit; }

.woocommerce del,
.woocommerce del .woocommerce-Price-amount { color: rgba(46, 46, 44, .55); }
.woocommerce ins { background: transparent; color: var(--gozo-caramelo); text-decoration: none; }

.woocommerce span.onsale {
  background-color: var(--gozo-dorado);
  color: var(--gozo-gris);
  border-radius: 999px;
  font-weight: 600;
}

.woocommerce ul.products li.product,
.woocommerce div.product .woocommerce-tabs,
.woocommerce-checkout .woocommerce-checkout-review-order-table {
  background-color: var(--gozo-crema-clara);
  border-color: var(--gozo-borde);
}

.woocommerce .star-rating span:before,
.woocommerce .stars a:before { color: var(--gozo-dorado); }

.woocommerce-message,
.woocommerce-info {
  background-color: var(--gozo-crema-clara);
  border-block-start-color: var(--gozo-caramelo);
  color: var(--gozo-gris);
}
.woocommerce-message::before,
.woocommerce-info::before { color: var(--gozo-caramelo); }

/* El carrito desplegable sí es una superficie elevada */
.elementor-menu-cart__container,
.elementor-menu-cart__main { background-color: var(--gozo-crema-clara) !important; }
.elementor-menu-cart__main .elementor-menu-cart__product-name a,
.elementor-menu-cart__main .product-name a { color: var(--gozo-marron) !important; }
.elementor-menu-cart__badge { background-color: var(--gozo-caramelo) !important; color: #FFFFFF !important; }

/* ---------- 8. Calendario de entregas ---------- */
/* Disponible = dorado; reservado = marrón (oscuro se lee como bloqueado). */

.ui-datepicker,
#ui-datepicker-div {
  background: var(--gozo-crema-clara);
  border: 1px solid var(--gozo-borde-fuerte);
  color: var(--gozo-gris);
}
.ui-datepicker .ui-datepicker-header {
  background: var(--gozo-marron);
  color: var(--gozo-crema-clara);
  border: none;
}
.ui-datepicker .ui-datepicker-title { color: var(--gozo-crema-clara); }
.ui-datepicker td a, .ui-datepicker td span { color: var(--gozo-gris); }
.ui-datepicker .ui-state-hover  { background: var(--gozo-dorado); color: var(--gozo-gris); }
.ui-datepicker .ui-state-active { background: var(--gozo-marron); color: var(--gozo-crema-clara); }

/* ---------- 9. Aviso de cookies ---------- */
/* El plugin escribe los colores en el atributo style, de ahí el !important. */

#cookie-notice { background-color: var(--gozo-marron) !important; }
#cookie-notice .cookie-notice-container,
#cn-notice-text { color: var(--gozo-crema-clara) !important; }

#cn-accept-cookie,
#cookie-notice .cn-button {
  background-color: var(--gozo-dorado) !important;
  color: var(--gozo-gris) !important;
  border-radius: 4px;
  font-weight: 600;
}
#cn-accept-cookie:hover,
#cookie-notice .cn-button:hover {
  background-color: var(--gozo-crema-clara) !important;
  color: var(--gozo-marron) !important;
}
#cn-close-notice { color: var(--gozo-crema-clara) !important; }

/* ---------- 9 bis. Logotipo Gozo Cheesecake ---------- */
/* El logo original era cuadrado (1772x1772) y el nuevo es un wordmark apaisado
   (1701x640, 2,66:1). Heredando el ancho del anterior se quedaba en 115x43 en
   la cabecera y 51x19 en el pie: proporcionado, pero ilegible. Se fija el ancho
   por zona. Los identificadores son los del widget de Elementor, estables en el
   clon; el max-width en vw evita que invada el menú en pantallas estrechas. */

/* Cada logo lleva data-gozo="cabecera|pie|popup", puesto por apply-brand.mjs.
   Hace falta porque ni el id del widget sirve (la portada usa una plantilla de
   cabecera y pie distinta de la de las páginas internas: los ids cambian) ni el
   tipo de widget (cabecera y pie son ambos theme-site-logo) ni el nombre del
   fichero (las tres zonas comparten el mismo SVG).

   Los selectores apuntan al widget, no a una cadena de hijos directos: el
   widget de logo envuelve la imagen en un enlace a la portada, y ese <a>
   intermedio rompe cualquier :has(> .elementor-widget-container > img). */

img[data-gozo] { height: auto !important; max-width: none !important; }

/* CABECERA -- el logo cuadrado original ocupaba 114,67px de ancho, y ese hueco
   es el que fija dónde empieza el menú. Al meter un logo apaisado de 150px el
   menú se corría de x=174 a x=209 y la barra quedaba descuadrada respecto al
   original. Aquí se recupera el hueco exacto repartiéndolo entre un margen
   izquierdo (para que el logo no vaya pegado al borde) y el propio logo:
   20 + 95 = 115px. */
.elementor-widget-image:has(img[data-gozo="cabecera"]) {
  /* Escala con la ventana, como hacía el original (100px a 1280, 151px a 1920),
     pero por debajo de aquel tamaño: se pidió un logo contenido. El clamp evita
     que se quede diminuto en pantallas estrechas o desproporcionado en anchas. */
  width: clamp(115px, 7vw, 150px) !important;
  /* el logo se centra dentro del hueco que reserva el min-height de abajo */
  display: flex !important;
  align-items: center !important;
}

/* El margen izquierdo va por plantilla.
     portada  -> el logo arrancaba pegado al borde (x=10); se le dio aire: x=30
     internas -> en el original el logo estaba en x=40 con la fila en x=12,
                 es decir 28px de separación. Ese aire venía del reparto
                 flexible de la fila; al fijarlo para centrar el menú se
                 perdió, así que ahora se declara explícitamente. */
/* En las internas la separación del original NO era fija: la generaba el
   reparto flexible, así que crecía con la ventana (28px a 1280, 143px a 1920).
   Un margen fijo sólo acierta a un ancho. Esta fórmula reproduce ambos:
       1280 -> el máximo lo deja en 28   ·   1920 -> 780 × 0,183 = 143
   Se mantiene el logo pequeño que se pidió; lo que cambia es dónde empieza. */
body.home .elementor-widget-image:has(img[data-gozo="cabecera"])       { margin-inline-start: 20px !important; }
body:not(.home) .elementor-widget-image:has(img[data-gozo="cabecera"]) {
  margin-inline-start: max(28px, calc((100vw - 1140px) * 0.183)) !important;
}
.elementor-widget-image:has(img[data-gozo="cabecera"]) > .elementor-widget-container { width: 100%; }
img[data-gozo="cabecera"] { width: 100% !important; }

/* La ALTURA de la barra la daba el logo cuadrado, no el contenedor: la fila
   crecía hasta los 114px del logo (100px en las páginas internas). Con un logo
   apaisado de 36px de alto la fila se encogía a 66px y toda la cabecera subía
   34px respecto al original. Se reserva la altura que ocupaba el logo original,
   así el menú y el carrito vuelven a su sitio.
   Los valores difieren por plantilla, de ahí el body.home. */
@media (min-width: 768px) {
  body.home .elementor-widget-image:has(img[data-gozo="cabecera"])      { min-height: 114px !important; }
  body:not(.home) .elementor-widget-image:has(img[data-gozo="cabecera"]) { min-height: 100px !important; }
}

/* PIE -- centrado y con más aire, es donde mejor se lee la línea de marca */
img[data-gozo="pie"] { width: min(170px, 52vw) !important; }

/* POPUP de acceso */
.elementor-widget-image:has(img[data-gozo="popup"]) { width: min(130px, 44vw) !important; }
img[data-gozo="popup"] { width: 100% !important; }

/* En móvil el diseño original ocultaba el logo de la cabecera
   (elementor-hidden-mobile) y dejaba sólo la hamburguesa. Ahora cabe, así que
   se recupera, con menos margen porque hay menos sitio. */
@media (max-width: 767px) {
  .elementor-widget-theme-site-logo.elementor-hidden-mobile { display: block !important; }
  body.home .elementor-widget-image:has(img[data-gozo="cabecera"]),
  body:not(.home) .elementor-widget-image:has(img[data-gozo="cabecera"]) {
    width: 112px !important;
    margin-inline-start: 12px !important;
  }
  img[data-gozo="pie"] { width: min(150px, 52vw) !important; }
}

/* ---------- 9 ter. Páginas legales ---------- */
/* Las políticas usan el maquetado original de la web (widgets de Elementor con
   los ids que ya tenía cada página), así que la tipografía y el espaciado los
   pone el CSS de la propia página. Aquí sólo van las listas, que el contenido
   nuevo introduce y las páginas originales no tenían. */

.elementor-widget-text-editor ul {
  margin-block: 0 1.1em;
  padding-inline-start: 1.35em;
  list-style: none;
}
.elementor-widget-text-editor ul li { position: relative; margin-block-end: .4em; }
.elementor-widget-text-editor ul li::before {
  content: "";
  position: absolute;
  inset-inline-start: -1.05em;
  inset-block-start: .62em;
  width: .4em; height: .4em;
  border-radius: 50%;
  background: var(--gozo-dorado);
}

/* ---------- 9 bis 2. Menú de cabecera centrado ---------- */
/* La fila reparte su espacio con space-evenly entre tres elementos: logo, menú
   y el contenedor que quedó vacío al retirar el carrito. Con ese reparto el
   menú caía en x=544 cuando el centro de la fila está en 634.
   Se saca el menú del flujo y se ancla al 50% de la fila, así queda centrado de
   verdad y deja de depender de lo que ocupen sus vecinos.
   El logo se queda a la izquierda; la fila pasa a space-between para que su
   posición sea estable y no dependa del reparto. */

/* OJO: hay que apuntar al logo de CABECERA (data-gozo="cabecera"), no a
   cualquier site-logo. El pie también tiene un logo y un menú en la misma
   fila, y una regla genérica sacaba de flujo el menú de enlaces legales y lo
   montaba encima del logotipo. */

.e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]):has(> .elementor-widget-nav-menu) {
  position: relative;
  justify-content: space-between !important;
}

.e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]) > .elementor-widget-nav-menu {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  width: auto !important;
  max-width: 68%;
}

/* En móvil el menú es un desplegable: ahí no se centra, se deja en su sitio.
   OJO: tiene que quedarse en position:relative, NO en static. Elementor calcula
   en línea el "left" del desplegable contando con que la referencia es el
   propio widget; con static la referencia pasaba a ser la fila entera y el
   menú se iba fuera de la pantalla por la izquierda. */
@media (max-width: 767px) {
  .e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]) > .elementor-widget-nav-menu {
    position: relative;
    left: auto;
    transform: none;
    max-width: none;
  }

  /* El space-between de arriba es para escritorio, donde el menú va centrado y
     absoluto. En las páginas INTERNAS el sitio de partida reparte esa fila con
     justify-content:center, dejando logotipo y hamburguesa juntos en el medio.
     En la portada NO se toca: se queda con el logo a la izquierda. */
  body:not(.home) .e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]):has(> .elementor-widget-nav-menu) {
    justify-content: center !important;
  }

  /* El margen izquierdo del logotipo (sección 9 bis) es para escritorio, donde
     lo separa del borde. Con la fila centrada ese margen empuja el conjunto y
     lo descuadra justo la mitad de su valor, así que en las internas se anula. */
  body:not(.home) .elementor-widget-image:has(img[data-gozo="cabecera"]) {
    margin-inline-start: 0 !important;
  }

  /* En la portada la fila va con space-between, así que la hamburguesa se iba
     al borde derecho... justo debajo del selector de idioma, que va anclado
     ahí (ver 9 ter 2). Se quedaban uno encima del otro.
     Ahora se coloca en el punto medio EXACTO entre el borde derecho del
     logotipo y el borde izquierdo del selector:
       logotipo acaba en 134px  ·  el selector empieza en 100% - 87px
       medio = 50% + 23,3px     ·  el centro del botón cae 16,5px antes del
                                   final de su widget
     de donde sale el margen de abajo. Con porcentajes se mantiene centrado
     en cualquier ancho de móvil, no sólo en 375.
     En las internas la fila va centrada y el botón ya cae en el medio por sí
     solo (1,2px de desvío), así que no se toca. */
  body.home .e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]) > .elementor-widget-nav-menu {
    margin-inline-end: calc(50% - 40px) !important;
  }

  /* El selector de idioma se alineaba con el centro de la FILA, no con el del
     logotipo, y quedaba unos píxeles por debajo. Se ancla a la altura del
     logotipo y se centra sobre esa línea.
     El valor cambia entre plantillas porque en la portada la fila envuelve y
     el logotipo no queda a media altura, y en las internas sí. */
  .gz-idioma {
    height: auto !important;
    bottom: auto !important;
    transform: translateY(-50%);
  }
  body.home .gz-idioma      { top: 31px !important; }
  body:not(.home) .gz-idioma { top: 45px !important; }

  /* Al retirar el hueco del carrito la fila se quedó en lo que mide el
     logotipo (42px) y la barra bajaba a 66px de alto. Se le devuelve algo de
     aire, sin llegar a los 138px del original: aquellos los ocupaba el carrito
     de la tienda, que ya no existe. Sólo en las internas; la portada se queda
     como está. */
  body:not(.home) .e-con:has(> .elementor-widget-theme-site-logo img[data-gozo="cabecera"]):has(> .elementor-widget-nav-menu) {
    min-height: 66px;
    align-items: center;
  }
}

/* El hueco que dejó el carrito en la fila de cabecera no se oculta aquí: se
   quita del HTML con tools/remove-container.mjs (contenedor 219786e). Con CSS
   no valía :empty, porque dentro quedan espacios en blanco. */

/* ---------- 9 ter 2. Selector de idioma ---------- */
/* Va al final del <body> y se coloca aquí, anclado a la derecha de la barra.
   Ese hueco es justo el que dejó libre el carrito al retirarlo. */

/* Se inyecta al final del <body>, así que se ancla al inicio de la página y se
   le da la altura EXACTA de la barra para que quede centrado en ella. Esos
   valores son los mismos min-height que reservan el hueco del logo: 134px en
   portada y 100px en el resto. */
.gz-idioma {
  position: absolute;
  inset-block-start: 0;
  inset-inline-end: clamp(16px, 3vw, 56px);
  z-index: 5;
  display: flex;
  align-items: center;
  gap: .35rem;
  height: 100px;
  font-size: .82rem;
  font-weight: 600;
  letter-spacing: .04em;
  color: var(--gozo-crema-clara);
}
body.home .gz-idioma { height: 134px; }

.gz-idioma a {
  color: inherit;
  text-decoration: none;
  padding: .25rem .45rem;
  border-radius: 4px;
  opacity: .6;
  transition: opacity .18s ease, background-color .18s ease;
}
.gz-idioma a:hover { opacity: 1; background-color: rgba(250, 243, 234, .14); }

/* el idioma activo, sin enlace real, se marca a plena opacidad */
.gz-idioma a[aria-current="true"] { opacity: 1; cursor: default; }
.gz-idioma span { opacity: .35; }

@media (max-width: 767px) {
  .gz-idioma,
  body.home .gz-idioma {
    inset-inline-end: 12px;
    height: 82px;
    font-size: .78rem;
  }
}

/* ---------- 9 quater. Velo del hero ---------- */
/* Las fotos del local son muy luminosas (paredes blancas, techo amarillo) y el
   titular va en crema: sin velo, el contraste se queda en torno a 1,1:1 y no se
   lee. Con este degradado en marrón sube por encima de 3:1, que es el mínimo
   para texto grande. Va sobre el carrusel y por debajo del contenido, así que
   no afecta al menú ni al logo. */
.elementor-element:has(> .elementor-background-slideshow) { position: relative; }

.elementor-background-slideshow::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(90deg,  rgba(90, 58, 36, .58) 0%, rgba(90, 58, 36, .34) 62%, rgba(90, 58, 36, .18) 100%),
    linear-gradient(180deg, rgba(46, 46, 44, .22) 0%, rgba(46, 46, 44, .10) 45%, rgba(46, 46, 44, .30) 100%);
}

/* una sombra suave bajo el titular remata la legibilidad sin cargar el velo */
.elementor-element:has(> .elementor-background-slideshow) .elementor-heading-title {
  text-shadow: 0 2px 18px rgba(46, 46, 44, .45);
}

/* ---------- 9 quinquies. Galería de producto ---------- */
/* La galería de Elementor se sustituye por una rejilla propia: su marcado
   depende de datos que ya no existen (ids de adjunto de WordPress). */
.gozo-galeria {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 10px;
}
.gozo-galeria img {
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: 6px;
  background: var(--gozo-crema-clara);
}

/* ---------- 9 sexies. Aire sobre la rejilla de productos ---------- */
/* Al retirar el bloque de avisos que había sobre las tarjetas, la rejilla se
   quedaba a 22px de la barra superior. Se le devuelve la separación, esta vez
   como espaciado propio y no dependiendo de que exista un bloque encima.
   La regla apunta a los contenedores de primer nivel que llevan tarjetas, así
   que vale igual para el español y para el inglés. */
.e-con.e-parent:has(.elementor-widget-call-to-action) {
  padding-block-start: clamp(40px, 5vw, 72px);
}

/* ---------- 9 septies. Mapas a la espera de consentimiento ---------- */
/* El iframe del mapa no se carga hasta que se aceptan las cookies de terceros.
   Mientras tanto se ve este aviso en su hueco, para que no quede un espacio
   vacío sin explicación. El script lo retira al aceptar. */
.gz-mapa { position: relative; display: block; }

.gz-mapa-aviso {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 180px;
  padding: 1.25rem;
  background: var(--gozo-crema-clara);
  border: 1px dashed var(--gozo-borde-fuerte);
  border-radius: 6px;
  color: var(--gozo-gris);
  font-size: .9rem;
  line-height: 1.5;
}

/* mientras el mapa siga aparcado, su hueco no ocupa espacio */
.gz-mapa iframe[data-src] { display: none; }

/* ---------- 9 octies. Sección de tartas de la home ---------- */
/* La home ya no lleva fichas de producto: presenta las tartas con foto y texto.
   Se conservan los ids de los image-box originales, así que la separación de
   50px entre foto y texto, la tipografía del título y el ancho de la imagen los
   sigue poniendo post-19.css. Aquí sólo va lo que esa hoja no cubre: el aire de
   la sección, la entradilla y el acabado de las fotos. */

.gz-tartas { padding-block: clamp(46px, 5.5vw, 88px); }

/* Los márgenes se ponen pieza a pieza en vez de con un gap único: el titular y
   su entradilla van juntos, y los bloques de foto necesitan mucho más aire. */
.gz-tartas > .e-con-inner { gap: 0; }

.gz-tartas-titular .elementor-heading-title {
  margin-block: 0 .35em;
  text-align: center;
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: clamp(27px, 3.4vw, 42px);
  line-height: 1.18;
  color: var(--e-global-color-secondary, var(--gozo-marron));
}

/* La entradilla de esta sección se retiró: esa frase es ahora el subtítulo del
   hero y no tiene sentido repetirla aquí. */

/* Filete corto y centrado, del mismo dorado que el resto de acentos.
   El selector es así de largo a propósito: Elementor pone a cero el margen
   inferior de los widgets con ".e-con .elementor-widget.elementor-widget", y
   hace falta la misma especificidad para que el filete no se quede pegado a la
   primera foto. */
.gz-tartas .elementor-widget.gz-tartas-linea {
  margin-block: clamp(26px, 3vw, 40px) clamp(30px, 4vw, 48px);
}
.gz-tartas-linea .elementor-divider { justify-content: center; }
.gz-tartas-linea .elementor-divider-separator {
  display: block;
  width: 64px;
  border-block-start: 2px solid var(--gozo-dorado);
}

/* Separación entre los tres bloques de foto */
.gz-tartas .e-child { margin-block-end: clamp(34px, 4.5vw, 66px); }
.gz-tartas .e-child:last-of-type { margin-block-end: 0; }

/* El contenedor de cada bloque es flex con align-items:center, así que el
   widget se encogía a lo que ocupaba su texto y los tres bloques salían con
   anchos distintos. Se le da el ancho completo para que queden alineados. */
.gz-tartas .e-child > .elementor-widget { width: 100%; }

/* Reparto estable entre foto y texto: sin base fija, el ancho de cada mitad
   dependía de lo largo que fuera el párrafo. */
.gz-tartas .elementor-image-box-img      { flex: 0 0 46%; }
.gz-tartas .elementor-image-box-content  { flex: 1 1 auto; }

/* Las fotos son de estudio, con fondo oscuro: un borde redondeado y una sombra
   cálida las asientan sobre la crema del fondo. */
.gz-tartas .elementor-image-box-img img {
  width: 100%;
  height: auto;
  border-radius: 8px;
  box-shadow: 0 10px 34px var(--gozo-sombra-suave);
}

/* El texto de cada bloque respira mejor sin ir pegado al borde de la columna */
.gz-tartas .elementor-image-box-content { padding-inline: clamp(0px, 1.5vw, 18px); }

/* Apilado en móvil: Elementor ya deshace el flex por debajo de 768px, pero el
   texto se queda con el text-align de la variante derecha. */
@media (max-width: 767px) {
  .gz-tartas .elementor-image-box-wrapper { text-align: center; }
  .gz-tartas .elementor-image-box-img { margin-block-end: 22px; }
}

/* ---------- 9 nonies. Mapas de la página de tiendas ---------- */
/* Las tiendas van en pestañas, como en el sitio de partida. El widget de
   Elementor no llega a activarse en un clon estático, así que el comportamiento
   lo pone assets/js/pestanas-gozo.js con las mismas clases; el aspecto sigue
   saliendo del CSS de Elementor y aquí sólo va lo del mapa. */

/* El hueco del mapa lleva texto y botón, en columna */
.gz-mapa-aviso { flex-direction: column; gap: .85rem; }

/* Ya cargado, el iframe es en línea por defecto y deja un hueco bajo la caja */
.gz-mapa iframe { display: block; border-radius: 6px; }

.gz-mapa-boton {
  border: 0;
  border-radius: 999px;
  padding: .6em 1.5em;
  background: var(--gozo-caramelo);
  color: #fff;
  font: inherit;
  font-weight: 600;
  font-size: .92rem;
  cursor: pointer;
  transition: background .2s ease;
}
.gz-mapa-boton:hover,
.gz-mapa-boton:focus-visible { background: var(--gozo-marron); }

/* ---------- 9 decies bis. Subtítulo del hero ---------- */
/* Va bajo el titular de la portada. Por defecto, sobre las fotos del pase
   (móvil), en crema con sombra, igual que el titular. En escritorio se pinta
   de marrón dentro del bloque de la foto: ver 9 undecies. */

.gz-hero-sub p {
  margin: 0;
  text-align: center;
  font-size: clamp(15px, 1.45vw, 19px);
  line-height: 1.5;
  color: var(--gozo-crema-clara);
  text-shadow: 0 2px 18px rgba(46, 46, 44, .55);
}

/* ---------- 9 decies ter. Hero de móvil: una sola foto ---------- */
/* Misma idea que en escritorio pero con una toma vertical, en la que el hueco
   libre queda ARRIBA en vez de a la derecha. Ahí van titular y subtítulo.
   Sustituye al pase de las tres fotos del local, que aquí tampoco lucía. */

@media (max-width: 1024px) {
  body.home .elementor-element-82b18bd {
    background-image: url("../img/hero/hero-movil.jpg");
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    /* Al sacar el texto del flujo, la columna se quedaba con un solo hijo -la
       barra de menú- y lo centraba a media altura. Se le dice que empiece
       arriba para que la barra siga donde estaba. */
    justify-content: flex-start !important;
  }
  body.home .elementor-element-82b18bd > .elementor-background-slideshow { display: none; }

  /* El texto se ancla arriba. Como en escritorio, hay que anular el margen de
     200px con el que Elementor lo bajaba al centro del hero. */
  /* El 26% no es capricho: esta foto va de más oscura arriba a más clara
     abajo, y medida franja a franja el contraste sube de 3,3 a 4,9 entre el
     10% y el 40% de la altura. A esa altura el texto cumple y sigue muy por
     encima de la tarta, que no empieza hasta el 64%. */
  body.home .elementor-element-3a3ca1e {
    position: absolute !important;
    inset-block-start: 26% !important;
    inset-inline: 6% !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
    align-items: center !important;
    justify-content: flex-start !important;
  }

  /* Aquí el texto va en el gris oscuro de la paleta, no en marrón: sobre el
     naranja de esta foto el marrón se queda en 2,9:1 y el gris llega a 4,3:1.
     La sombra sobraba: sólo hacía falta contra las fotos oscuras del local. */
  body.home .elementor-element-3a3ca1e .elementor-heading-title {
    color: var(--gozo-gris) !important;
    text-shadow: none !important;
    font-size: clamp(30px, 8.6vw, 44px) !important;
    line-height: 1.12 !important;
  }

  body.home .elementor-element-3a3ca1e .gz-hero-sub p {
    color: var(--gozo-gris);
    text-shadow: none;
    margin-block-start: .85em;
  }
}

/* ---------- 9 undecies. Hero de escritorio: una sola foto ---------- */
/* En escritorio la portada deja de pasar las tres fotos del local y muestra una
   sola foto de tarta, con el titular en el hueco vacío de la imagen (arriba a
   la derecha). En móvil se mantiene el pase: la foto es apaisada y ese hueco
   desaparece al recortarla a pantalla estrecha.
   El pase no se toca en el HTML, sólo se oculta aquí, así que sigue estando
   para el móvil y basta con quitar este bloque para volver atrás.
   La foto la genera tools/preparar-foto-hero.ps1. */

@media (min-width: 1025px) {
  body.home .elementor-element-82b18bd {
    background-image: url("../img/hero/hero-pc.jpg");
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }
  body.home .elementor-element-82b18bd > .elementor-background-slideshow { display: none; }

  /* El titular se ancla al hueco de la foto. El contenedor era el tercer hijo
     de una columna y quedaba centrado a media altura; se saca del flujo.
     Va con !important porque el CSS por elemento de Elementor (post-19.css)
     apunta a este mismo id con más especificidad. */
  body.home .elementor-element-3a3ca1e {
    position: absolute !important;
    inset-block-start: 20% !important;
    inset-inline-end: 6% !important;
    /* max-content: la caja mide justo lo que la línea más larga. Así el texto
       va centrado dentro de ella pero el bloque sigue anclado a la derecha y no
       se mueve del sitio al cambiar el cuerpo de letra. */
    width: max-content !important;
    max-width: min(52%, 680px) !important;
    padding: 0 !important;
    /* Elementor le da 200px de margen superior para bajarlo al centro del hero.
       Al posicionarlo, ese margen se suma al inset y lo dejaba en el 42%. */
    margin: 0 !important;
    align-items: flex-end !important;
    justify-content: flex-start !important;
  }

  /* Sobre el beige de la foto el crema no se lee (1,4:1). El marrón da 6:1.
     Y sin foto oscura detrás tampoco hace falta la sombra del velo del hero. */
  body.home .elementor-element-3a3ca1e .elementor-heading-title {
    /* las dos líneas se centran entre sí, no se alinean a un lado */
    text-align: center !important;
    font-size: clamp(52px, 4.2vw, 66px) !important;
    color: var(--gozo-marron) !important;
    text-shadow: none !important;
    line-height: 1.08 !important;
  }

  /* El subtítulo NO debe decidir el ancho del bloque: si lo hiciera, la caja
     crecería hasta su frase completa y el titular dejaría de estar donde está.
     Con width:0 no aporta nada al cálculo del ancho, y luego ocupa el 100% del
     que haya fijado el titular y ahí se reparte en líneas. */
  body.home .elementor-element-3a3ca1e .gz-hero-sub {
    width: 0 !important;
    min-width: 100% !important;
  }

  body.home .elementor-element-3a3ca1e .gz-hero-sub p {
    margin-block-start: .75em;
    color: var(--gozo-marron);
    text-shadow: none;
  }
}

/* ---------- 9 duodecies. Formatos y alérgenos ---------- */
/* Los datos salen de la tienda real (tools/extraer-productos-shopify.mjs).
   En la rejilla, bajo el nombre, van los dos formatos con su precio; en la
   ficha, los mismos formatos más los alérgenos con icono. */

.gz-formatos { display: flex; flex-direction: column; gap: .3em; }

.gz-formato {
  display: flex;
  justify-content: space-between;
  gap: 1.2em;
  align-items: baseline;
}
.gz-formato__nombre { opacity: .92; }
.gz-formato__precio { font-weight: 600; white-space: nowrap; }

/* En la rejilla el texto va sobre la foto, con el color que fija Elementor:
   aquí sólo se ajusta el tamaño para que quepan las dos líneas. El aire sobre
   el nombre es lo que separa una cosa de otra; sin él las tres líneas se leían
   como un bloque. */
.elementor-cta__description .gz-formatos {
  font-size: .95em;
  margin-block-start: 1.9em;
}

/* En la ficha, la foto era enorme: la galería se estiraba a todo el ancho de
   la columna (1140px). Se le pone un tope y se centra. */
.gozo-galeria {
  max-width: 380px;
  margin-inline: auto;
}

/* Los formatos van centrados dentro de su recuadro, en los dos ejes. */
.elementor-widget-woocommerce-product-price .elementor-widget-container {
  display: flex;
  align-items: center;
  justify-content: center;
  /* El widget traía 30px de relleno sólo por la izquierda y un margen inferior
     de -30px (post-234.css, con más especificidad que esta hoja). Con el
     relleno el centrado salía desviado 15px a un lado; con el margen negativo
     el bloque se salía del panel por abajo y quedaba otros 14px bajo. De ahí
     los !important. */
  padding-inline: 0 !important;
  margin-block-end: 0 !important;
}
/* Sin borde ni fondo propios: el contenedor que lo envuelve YA es un panel con
   su fondo crema, su sombra y sus esquinas redondeadas. Ponerle otro recuadro
   dejaba una caja dentro de otra. */
.elementor-widget-woocommerce-product-price .gz-formatos {
  width: min(100%, 19rem);
  font-size: 1.05rem;
}

.gz-conservacion { margin-block: 1.6em .4em; }
.gz-conservacion h3,
.gz-alergenos__titulo {
  margin: 0 0 .5em;
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: 1.05rem;
  letter-spacing: .02em;
  color: var(--gozo-marron);
}
.gz-conservacion p { margin: 0; line-height: 1.6; }

.gz-alergenos { margin-block-start: 1.8em; }

.gz-alergenos__lista {
  display: flex;
  flex-wrap: wrap;
  gap: 1.4em 1.8em;
  margin: 0;
  padding: 0;
  list-style: none;
}
/* la viñeta dorada de la sección 9 ter es para las listas de texto */
.gz-alergenos__lista li::before { content: none; }

.gz-alergeno {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .45em;
  width: 4.6rem;
  text-align: center;
  font-size: .82rem;
  line-height: 1.25;
  color: var(--gozo-gris);
}
.gz-alergeno svg {
  width: 40px;
  height: 40px;
  fill: none;
  stroke: var(--gozo-marron);
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* ---------- 9 quaterdecies. Escaparate de sabores de la portada ---------- */
/* Va bajo "Nuestras tartas": aquella cuenta cómo son, esta las enseña y lleva
   al catálogo. Fondo en crema clara para separarla de la sección de arriba sin
   necesidad de filetes. */

/* Elementor saca el display de sus contenedores de una variable que define el
   CSS por elemento de cada página. Esta sección la añadimos nosotros y no
   tiene ese CSS, así que la variable no existe y la caja se quedaba en
   `inline`. Una caja en línea no establece bloque: el fondo se pintaba a
   trozos -de ahí el rectángulo suelto en el borde izquierdo- y la sección se
   solapaba 95px con el hero. Hay que declararlo, y en los DOS niveles. */
.gz-sabores {
  display: block;
  background: var(--gozo-crema-clara);
  padding-block: clamp(52px, 6vw, 96px);
}

.gz-sabores > .e-con-inner {
  display: flex;
  flex-direction: column;
  padding-inline: clamp(20px, 3vw, 40px);
  /* Elementor topa sus contenedores en 1140px. En una pantalla de 1440 eso
     dejaba 288px sin usar y las fichas se veían pequeñas para el hueco que
     tenían. Esta sección es de foto grande, así que se le da más ancho. */
  max-width: min(100%, 1360px);
}

.gz-sabores-titular .elementor-heading-title {
  margin: 0 0 .3em;
  text-align: center;
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: clamp(26px, 3.2vw, 40px);
  line-height: 1.18;
  color: var(--e-global-color-secondary, var(--gozo-marron));
}

.gz-sabores-entrada {
  max-width: 42rem;
  margin-inline: auto;
}
.gz-sabores-entrada p {
  margin: 0 0 clamp(30px, 4vw, 54px);
  text-align: center;
  font-size: clamp(16px, 1.5vw, 19px);
  line-height: 1.55;
  color: var(--gozo-gris);
}

/* Tres fichas, cada una con la foto a un lado y el texto al otro. */
.gz-sabores__grid {
  display: flex;
  flex-direction: column;
  gap: clamp(26px, 3vw, 44px);
}

.gz-sabor {
  display: grid;
  grid-template-columns: minmax(0, 40%) minmax(0, 1fr);
  align-items: center;
  gap: clamp(24px, 3.4vw, 56px);
  text-decoration: none;
  color: inherit;
}
/* la segunda se invierte, para que las tres no caigan en el mismo ritmo */
.gz-sabor:nth-child(even) { grid-template-columns: minmax(0, 1fr) minmax(0, 40%); }
.gz-sabor:nth-child(even) .gz-sabor__foto { order: 2; }

.gz-sabor__texto { display: flex; flex-direction: column; }

.gz-sabor__desc {
  margin-block-start: .55em;
  max-width: 34em;                 /* la línea no se alarga tanto que canse */
  font-size: clamp(15px, 1.5vw, 19.5px);
  line-height: 1.6;
  color: var(--gozo-gris);
}

.gz-sabor__ver {
  margin-block-start: .9em;
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: .88rem;
  letter-spacing: .02em;
  color: var(--gozo-caramelo);
}
.gz-sabor__ver::after { content: " →"; }
.gz-sabor:hover .gz-sabor__ver,
.gz-sabor:focus-visible .gz-sabor__ver { color: var(--gozo-marron); }

.gz-sabor__foto {
  display: block;
  overflow: hidden;
  border-radius: 10px;
  background: var(--gozo-crema);
  box-shadow: 0 8px 26px var(--gozo-sombra-suave);
}
.gz-sabor__foto img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  transition: transform .45s ease;
}
.gz-sabor:hover .gz-sabor__foto img,
.gz-sabor:focus-visible .gz-sabor__foto img { transform: scale(1.05); }

.gz-sabor__nombre {
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: clamp(21px, 2.4vw, 32px);
  line-height: 1.2;
  color: var(--gozo-marron);
}
.gz-sabor__precio {
  margin-block-start: .7em;
  font-size: .95rem;
  color: var(--gozo-gris);
  opacity: .85;
}

/* El botón del final. No usa .elementor-button a propósito: ese lleva el color
   por elemento de Elementor y aquí interesa el dorado de la paleta. */
.gz-sabores-pie { text-align: center; margin-block-start: clamp(34px, 4vw, 56px); }

/* El color va con !important porque la regla general de enlaces (sección 3)
   los pinta de marrón con más especificidad, y sobre el fondo marrón del botón
   el texto quedaba invisible: 1:1. */
.gz-boton {
  display: inline-block;
  padding: .85em 2.1em;
  border-radius: 999px;
  background: var(--gozo-marron);
  color: var(--gozo-crema-clara) !important;
  text-decoration: none;
  font-family: "Montserrat", Sans-serif;
  font-weight: 600;
  font-size: clamp(14px, 1.1vw, 16px);
  letter-spacing: .01em;
  transition: background .22s ease, color .22s ease;
}
.gz-boton:hover,
.gz-boton:focus-visible {
  background: var(--gozo-dorado);
  color: var(--gozo-gris) !important;   /* 5,9:1 sobre el dorado */
}

/* En móvil la foto pasa arriba y el texto debajo: a 375px una columna de
   imagen del 32% deja el texto en una tira de 100px, ilegible. */
@media (max-width: 767px) {
  .gz-sabor,
  .gz-sabor:nth-child(even) { grid-template-columns: 1fr; gap: 14px; }
  .gz-sabor:nth-child(even) .gz-sabor__foto { order: 0; }
  .gz-sabor__foto img { aspect-ratio: 4 / 3; }
}

/* ---------- 9 terdecies. Productos en móvil ---------- */
/* La rejilla y las fichas venían pensadas para escritorio y en pantalla
   estrecha se descuadraban. */

@media (max-width: 1024px) {
  /* La foto de cada tarjeta tenía un ancho mínimo de 500px (post-352.css),
     pensado para las tarjetas anchas de escritorio. En una tarjeta de 355 se
     salía 145px y la imagen quedaba mal recortada. */
  .elementor-cta__bg-wrapper { min-width: 0 !important; }

  /* En la ficha la foto ocupaba casi todo el ancho de la pantalla */
  .gozo-galeria { max-width: 270px; }

  /* El bloque de conservación y alérgenos iba de borde a borde: su widget
     ocupa todo el ancho, mientras que el título y la descripción van metidos
     30px. Se le da el mismo margen para que las tres cosas se alineen.
     El widget no arranca en 0 sino en 8px, así que el relleno es asimétrico:
     22 + 8 = 30 por la izquierda, 30 por la derecha. */
  .elementor-widget-woocommerce-product-content .elementor-widget-container {
    padding-inline: 22px 30px !important;
  }

  /* Cinco iconos no caben en una fila de 375px: se reparten en rejilla para
     que queden alineados en vez de dejar dos sueltos al final. */
  .gz-alergenos__lista {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(4.6rem, 1fr));
    gap: 1.2em .6em;
    justify-items: center;
  }
}

/* ---------- 10. Detalles ---------- */

.swiper-pagination-bullet        { background: var(--gozo-borde-fuerte); opacity: 1; }
.swiper-pagination-bullet-active { background: var(--gozo-caramelo); }

/* Acordeón de preguntas frecuentes */
.elementor-accordion .elementor-tab-content,
.elementor-toggle .elementor-tab-content { color: var(--gozo-gris); border-color: var(--gozo-borde); }

/* Sombras cálidas en vez del gris neutro por defecto */
.woocommerce ul.products li.product { box-shadow: 0 6px 24px var(--gozo-sombra-suave); }

/* Barra de scroll (WebKit) */
::-webkit-scrollbar       { width: 12px; height: 12px; }
::-webkit-scrollbar-track { background: var(--gozo-crema); }
::-webkit-scrollbar-thumb { background: var(--gozo-caramelo); border-radius: 999px; border: 3px solid var(--gozo-crema); }
::-webkit-scrollbar-thumb:hover { background: var(--gozo-marron); }
