/* =================================================================
   HEADER
   ================================================================= */

/* OJO: este `sticky` **no es lo que pega la barra arriba** cuando la cabecera
   va montada con Bricks, y no se puede arreglar desde aquí.

   Un elemento pegajoso no puede salirse de la caja de su padre, y el árbol que
   monta Bricks es `#brx-header` (90 px) > `div.brxe-jri-header` (90 px) >
   `.jri-site-header` (90 px): el padre mide exactamente lo mismo, así que no
   hay ni un píxel de recorrido y la barra se va con el resto de la página.

   Lo que la pega es el ajuste **nativo** de la plantilla de cabecera de Bricks
   (`headerSticky` + `headerStickyOnScroll` en `_bricks_template_settings` de la
   236012), que pone `position: sticky` en `#brx-header`, cuyo padre es el
   `<body>` y sí tiene recorrido. Ver CLAUDE.md.

   Se queda declarado porque sirve fuera de Bricks: con el shortcode dentro de
   un contenedor alto, esto es lo único que hay. */
.jri-site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--black);
  color: var(--white);
}

.jri-header-inner {
  display: flex;
  align-items: center;
  gap: var(--space-6);
  min-height: var(--header-h);
  padding-block: var(--space-3);
}

/* Logo y pastillas **no encogen**: entre 981 y 1300 px la fila va justa y el
   único que debe ceder es el buscador, que tiene sitio de sobra. Sin esto el
   ancho fijo del logo desbordaba su propio enlace. */
.jri-logo { flex: none; }

.jri-logo img { width: 240px; height: auto; }

.jri-main-nav { flex: none; }

.jri-main-nav .jri-nav-list { display: flex; gap: var(--space-3); }

/* Pastillas «Categorías» y «Marcas»: **dos enlaces y nada más**. No despliegan
   ningún panel al pasar por encima; lo que enseñaba el mega menú es justo lo
   que ya hay en el menú lateral.

   `min-width` fijo porque en el Figma las dos miden lo mismo (176 px): con solo
   relleno, «CATEGORÍAS» saldría bastante más ancha que «MARCAS» y la pareja se
   leería descuadrada. */
.jri-nav-link {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 176px;
  height: 38px;
  padding: 0 22px;
  color: var(--white);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: .3px;
  text-transform: uppercase;
  border: 1px solid var(--white);
  border-radius: var(--radius-pill);
  white-space: nowrap;
  transition: background .2s, color .2s, border-color .2s;
}

.jri-nav-link:hover { background: var(--brand-yellow); border-color: var(--brand-yellow); color: var(--near-black); }

/* ---------------- Buscador ----------------
   Píldora **gris sobre el negro de la barra**, no blanca, y con la lupa dentro
   del mismo gris: en el Figma no hay botón amarillo. El campo y el botón son
   transparentes; el color lo pone el contenedor, así que no hay dos fondos que
   mantener a la par. */
.jri-search {
  flex: 0 1 460px;
  margin-left: auto;
  display: flex;
  align-items: center;
  height: 48px;
  background: var(--dark-2);
  border-radius: var(--radius-pill);
  overflow: hidden;
  max-width: 460px;
}

/* `line-height: 1` y altura fija en la píldora, no relleno vertical: el campo
   hereda del tema un interlineado de 60 px y la barra salía de 64 en vez de
   48. Es el mismo tropiezo del «Enviar cotización» del checkout. */
.jri-search input {
  flex: 1;
  min-width: 0;
  align-self: stretch;
  border: none;
  outline: none;
  background: transparent;
  color: var(--white);
  padding: 0 4px 0 24px;
  font-size: 15px;
  line-height: 1;
  font-family: inherit;
}

/* Solo el marcador va en cursiva —es lo que marca el Figma—; lo que se escribe
   sale recto. `opacity: 1` porque Firefox lo baja por su cuenta y el gris
   quedaba casi invisible sobre el #444. */
.jri-search input::placeholder {
  color: var(--text-on-dark);
  font-style: italic;
  opacity: 1;
}

/* La «×» de limpiar de WebKit se pinta en oscuro: sobre el gris de la píldora
   no se ve. Se blanquea con el mismo recurso que los iconos del menú. */
.jri-search input::-webkit-search-cancel-button { filter: invert(1); opacity: .6; }

.jri-search button {
  flex: none;
  border: none;
  background: transparent;
  color: var(--white);
  padding: 0 22px;
  display: grid;
  place-items: center;
  cursor: pointer;
}

.jri-search button:hover { color: var(--brand-yellow); }

/* La lupa que abre el buscador en móvil. En escritorio el campo se ve entero,
   así que sobra. */
.jri-search-toggle { display: none; }

.jri-search-btn { display: none; }

/* ---------------- Acciones (lista de cotización) ---------------- */
.jri-header-actions { display: flex; align-items: center; gap: var(--space-5); }

.jri-cart-link {
  position: relative;
  flex: none;
  color: var(--white);
  display: grid;
  place-items: center;
  transition: color .2s;
}

.jri-cart-link:hover { color: var(--brand-yellow); }

/* Círculo **blanco con el número en negro**, abajo a la derecha y montado sobre
   el portapapeles, como en el Figma. Antes era un punto amarillo de 16 px
   arriba a la derecha.

   El aro oscuro que lo separa del icono va con `box-shadow` y no con `border`:
   así el círculo mide lo que dice `width` y el hueco no depende de restarle el
   borde. El color del aro es el fondo de la barra. */
.jri-cart-count {
  position: absolute;
  right: -14px;
  bottom: -10px;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: var(--white);
  color: var(--near-black);
  box-shadow: 0 0 0 3px var(--black);
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  display: grid;
  place-items: center;
}

/* Hamburguesa (a la izquierda del logo, visible en escritorio y en móvil) */
.jri-hamburger {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  cursor: pointer;
  padding: 8px 0;
  flex: none;
}

.jri-hamburger span { width: 27px; height: 3px; background: var(--white); border-radius: 2px; transition: .3s; }

.jri-hamburger:hover span { background: var(--brand-yellow); }

/* =================================================================
   MENÚ LATERAL (drawer) — abre con la hamburguesa (CSS-only)
   ================================================================= */
.jri-drawer-toggle { display: none; }

.jri-drawer-overlay {
  position: fixed;
  inset: 0;
  z-index: 900;
  background: rgba(0,0,0,.5);
  opacity: 0;
  visibility: hidden;
  transition: opacity .3s, visibility .3s;
}

.jri-drawer {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 950;
  width: 360px;
  max-width: 88vw;
  height: 100%;
  display: flex;
  flex-direction: column;
  background: var(--dark-2);
  color: var(--text-on-dark);
  box-shadow: 2px 0 24px rgba(0,0,0,.35);
  transform: translateX(-100%);
  transition: transform .3s ease;
  overflow-y: auto;
  overscroll-behavior: contain;
  /* Scrollbar sutil (Firefox) */
  scrollbar-width: thin;
  scrollbar-color: rgba(255,255,255,.25) transparent;
}

/* Scrollbar sutil (Chromium/WebKit) */
.jri-drawer::-webkit-scrollbar { width: 6px; }

.jri-drawer::-webkit-scrollbar-track { background: transparent; }

.jri-drawer::-webkit-scrollbar-thumb { background: rgba(255,255,255,.22); border-radius: 10px; }

.jri-drawer::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,.4); }

.jri-drawer-toggle:checked ~ .jri-drawer-overlay { opacity: 1; visibility: visible; }

.jri-drawer-toggle:checked ~ .jri-drawer { transform: translateX(0); }

.jri-drawer-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-5);
  border-bottom: 1px solid rgba(255,255,255,.12);
}

.jri-drawer-logo { width: 170px; height: auto; }

.jri-drawer-close { cursor: pointer; font-size: 22px; line-height: 1; color: var(--white); padding: 4px 8px; }

.jri-drawer-close:hover { color: var(--brand-yellow); }

.jri-drawer-nav { padding: var(--space-2) var(--space-5) var(--space-7); }

.jri-drawer-group { border-bottom: 1px solid rgba(255,255,255,.1); }

.jri-drawer-group > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-4) 0;
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .3px;
  color: var(--white);
}

.jri-drawer-group > summary::-webkit-details-marker { display: none; }

/* La flecha va en blanco, como el rótulo al que acompaña: en amarillo se leía
   como un acento y competía con él. */
.jri-drawer-group > summary::after { content: "⌄"; font-size: 15px; line-height: 1; color: var(--white); transition: transform .2s; }

.jri-drawer-group[open] > summary::after { transform: rotate(180deg); }

.jri-drawer-section { padding: var(--space-4) 0; border-bottom: 1px solid rgba(255,255,255,.1); }

.jri-drawer-section h4 { margin-bottom: var(--space-3); font-size: 14px; font-weight: 700; text-transform: uppercase; color: var(--white); }

.jri-drawer-group ul, .jri-drawer-section ul {
  list-style: none;
  margin: 0;
  padding: 0 0 var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.jri-drawer-section ul { padding-bottom: 0; }

.jri-drawer-group a, .jri-drawer-section a { color: var(--text-on-dark); font-size: 14px; }

/* «Teléfonos:» en blanco y en negrita, el número en gris suave. */
.jri-drawer-rotulo { font-weight: 700; color: var(--white); }
.jri-drawer-valor { color: var(--text-on-dark); }
.jri-drawer-section a:hover .jri-drawer-rotulo,
.jri-drawer-section a:hover .jri-drawer-valor { color: var(--brand-yellow); }
.jri-drawer-section ul { gap: var(--space-3); }

.jri-drawer-group a:hover, .jri-drawer-section a:hover { color: var(--brand-yellow); }

/* Botón ancho con el icono de cuadros, del mismo gris que las pastillas de
   arriba. Antes era un enlace amarillo suelto. */
.jri-drawer-all {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  width: 100%;
  margin: 2px 0 var(--space-4);
  padding: 14px var(--space-4);
  border-radius: var(--radius-lg);
  background: rgba(255, 255, 255, .1);
  font-size: 14px;
  font-weight: 500;
  color: var(--white);
  transition: background .15s;
}

.jri-drawer-all:hover { background: rgba(255, 255, 255, .18); color: var(--white); text-decoration: none; }

.jri-drawer-all-ico { flex: none; }

.jri-drawer-note { margin: var(--space-3) 0 0; font-size: 12px; color: var(--text-muted); }

/* Tiles de Categorías / Marcas dentro del drawer (cuadros con imagen, estilo catálogo) */
.jri-drawer-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; padding: var(--space-2) 0 var(--space-3); }

/* Las pastillas de categoría van sobre el mismo gris del panel, un punto más
   claras, con el icono y el nombre en blanco. Las de marca **no**: sus logos
   son a color y necesitan fondo claro (más abajo). */
.jri-drawer-tile {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1 / 1;
  padding: 5px;
  background: var(--white);
  border-radius: var(--radius-md);
  transition: transform .15s, box-shadow .15s;
}

.jri-drawer-tiles--cats .jri-drawer-tile {
  /* Sobre el #444 del panel da ≈ #575757, que es el gris del diseño. Se pone
     en blanco translúcido y no en un hex para que siga al fondo si cambia. */
  background: rgba(255, 255, 255, .1);
  padding: 10px;
}

.jri-drawer-tiles--cats .jri-drawer-tile:hover { background: rgba(255, 255, 255, .18); }

/* Los iconos son siluetas **#444444 sobre transparente** —el mismo gris del
   panel, así que sin esto se verían casi negros sobre gris—. `brightness(0)`
   las aplasta a negro puro y `invert(1)` las pasa a blanco, respetando el
   canal alfa. Es la vía que sirve para todo el juego sin retocar 13 ficheros.

   La imagen ocupa la pastilla entera porque **el nombre viene dentro del
   propio PNG**, dibujado bajo el pictograma. */
.jri-drawer-tiles--cats .jri-drawer-tile img {
  width: 100%;
  height: 100%;
  max-width: none;
  max-height: none;
  object-fit: contain;
  filter: brightness(0) invert(1);
}

.jri-drawer-tile:hover { transform: translateY(-2px); box-shadow: var(--shadow-glow-yellow); }

.jri-drawer-tile img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }

/* ---------------- Pastillas de marca ----------------
   Mismo gris que las de categoría, pero con el logo en blanco y el nombre
   escrito debajo (los logos de marca no lo llevan dentro).

   **Los logos no se pueden invertir sin más:** 24 de los 29 son JPG, o sea con
   fondo blanco opaco, y `brightness(0) invert(1)` dejaría el cuadro entero en
   blanco. La vía que funciona es pasarlos a gris, invertirlos —el fondo blanco
   se vuelve negro y el logo, claro— y mezclarlos en `screen`, que hace
   desaparecer el negro sobre el gris de la pastilla. El punto de brillo extra
   es para los logos de gris medio, que si no salen apagados. */
.jri-drawer-tiles--brands .jri-drawer-tile {
  flex-direction: column;
  justify-content: center;
  gap: 8px;
  aspect-ratio: auto;
  min-height: 96px;
  padding: 12px 8px;
  background: rgba(255, 255, 255, .1);
  isolation: isolate;
  text-align: center;
}

.jri-drawer-tiles--brands .jri-drawer-tile:hover { background: rgba(255, 255, 255, .18); }

.jri-drawer-tiles--brands .jri-drawer-tile-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
}

.jri-drawer-tiles--brands .jri-drawer-tile img {
  max-height: 40px;
  max-width: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}

/* Solo las marcas **sin** logo blanco pasan por la conversión. Las que lo
   tienen se pintan tal cual, que siempre sale mejor que cualquier filtro. */
.jri-drawer-tile--convertir img {
  filter: grayscale(1) invert(1) brightness(1.35);
  mix-blend-mode: screen;
}

.jri-drawer-tile-nombre {
  display: block;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.25;
  color: var(--white);
}

/* Te asesoramos: caja WhatsApp (borde punteado) + accesos tipo tarjeta */
.jri-drawer-wa {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin: 0 0 var(--space-3);
  padding: 11px 16px;
  border: 1px dashed rgba(255,255,255,.4);
  border-radius: var(--radius-lg);
  font-size: 13px;
  color: var(--text-on-dark);
}

.jri-drawer-wa-ico {
  flex: none;
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 1px solid rgba(255,255,255,.7);
  color: var(--white);
}

.jri-drawer-help { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-2); }

.jri-drawer-help-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-5) var(--space-2);
  /* Mismo gris que las pastillas de categoría. Antes era negro translúcido,
     que sobre el #444 salía bastante más oscuro que en el diseño. */
  background: rgba(255,255,255,.1);
  border-radius: var(--radius-lg);
  text-align: center;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .3px;
  line-height: 1.25;
  color: var(--white);
  transition: background .2s, color .2s;
}

.jri-drawer-help-item:hover { background: rgba(255,255,255,.18); color: var(--white); }

.jri-drawer-help-ico { color: var(--white); }

.jri-drawer-help-item:hover .jri-drawer-help-ico { color: var(--white); }

/* Contacto: redes sociales */
.jri-drawer-social { display: flex; gap: var(--space-3); margin-top: var(--space-4); }

/* Círculo **blanco relleno** con el glifo recortado en el gris del panel, que
   es como está en el diseño. Antes era un círculo transparente con un filete
   blanco: se perdía sobre el fondo oscuro. */
.jri-drawer-social a {
  width: 34px; height: 34px;
  border-radius: 50%;
  border: 0;
  display: grid;
  place-items: center;
  background: var(--white);
  color: var(--dark-2);
  transition: background .2s, color .2s;
}

.jri-drawer-social a:hover { background: var(--brand-yellow); color: var(--near-black); }

.jri-drawer-social svg { width: 18px; height: 18px; }

/* =================================================================
   MÓVIL Y TABLET

   La cabecera **nunca ha tenido reglas responsivas que se aplicaran**: las del
   diseño estático se escribieron sin el prefijo (`.header-inner`, `.logo`,
   `.search`, `.main-nav`), así que no alcanzaban a nada. De ahí que hasta
   ahora el buscador de 460 px y las dos pastillas siguieran en la fila en una
   pantalla de 390.
   ================================================================= */
/* Entre 981 y 1200 la fila va justa y el único que cede es el buscador: a 981
   se quedaba en 166 px, con el marcador cortado a media palabra. Se recorta
   antes lo que no se lee —el aire entre piezas, el relleno de las pastillas y
   el logo— y el campo recupera unos 150. */
@media (max-width: 1200px) {
  .jri-header-inner { gap: var(--space-4); }

  .jri-logo img { width: 200px; }

  .jri-nav-link { min-width: 140px; padding: 0 16px; }
}

@media (max-width: 980px) {
  /* `--header-h` baja a 64 px en `base.css`: lo comparten el panel del catálogo
     y la columna del total, así que el token no puede vivir aquí. */

  /* `wrap` para que el buscador pueda bajar a una segunda línea al abrirlo. */
  .jri-header-inner { flex-wrap: wrap; gap: var(--space-4); }

  /* Las dos pastillas se van: sus destinos están en el menú lateral. */
  .jri-main-nav { display: none; }

  .jri-logo img { width: 160px; }

  .jri-hamburger span { width: 22px; height: 2.5px; }

  .jri-hamburger { gap: 4px; }

  .jri-header-actions { margin-left: auto; gap: var(--space-5); }

  .jri-search-btn {
    display: grid;
    place-items: center;
    padding: 4px;
    cursor: pointer;
    color: var(--white);
    transition: color .2s;
  }

  .jri-search-btn:hover { color: var(--brand-yellow); }

  /* El campo se pliega tras la lupa y ocupa una fila entera al abrirse.
     `order` lo manda al final aunque en el marcado vaya antes de las acciones.

     Se oculta con `display: none` y no fuera de la vista: si no, quedaría un
     campo de formulario enfocable con el tabulador que no se ve. */
  .jri-search {
    order: 5;
    flex: 1 0 100%;
    max-width: none;
    margin: 0 0 var(--space-3);
    min-height: 44px;
    display: none;
  }

  .jri-search-toggle:checked ~ .jri-search { display: flex; }

  /* El contador **sobresale** del icono, y en móvil el margen del contenedor es
     de 16 px: sin recolocar, el círculo se pegaba al borde de la pantalla. Se
     desplaza el icono lo que sobresale el círculo, así que lo que queda a ras
     del margen es el grupo entero, que es como está en el Figma. */
  .jri-cart-link { margin-right: 14px; }

  .jri-cart-count { box-shadow: 0 0 0 2px var(--black); }
}

@media (max-width: 500px) {
  .jri-header-inner { gap: var(--space-3); }

  /* Por debajo de ~348 px el logo a 160 no cabe junto a la hamburguesa, la lupa
     y el carrito, y la fila se partía en dos —la cabecera pasaba de 64 a 106 px
     en una pantalla de 320—. Con `min()` encoge **solo ahí**: a 360 y a 390 se
     queda en los 160 del Figma. */
  .jri-logo img { width: min(160px, 46vw); }
}
