/* =========================================================
   ARISTAS — Prototipo de experiencia
   Tipografía real (Montserrat) · tokens reales del selector
   + capa cálida editorial (elevar) · visualizador de telas
   ========================================================= */
:root{
  /* Colores de marca — Manual de Marca Aristas v2.0 */
  --white:#ffffff;             /* principal */
  --ink:#1e1e1c;                /* principal */
  --cream:#f4f3ee;              /* complementario */
  --sand:#eae1d0;               /* complementario */
  --charcoal:#333333;           /* complementario */
  --brown:#4a3c3a;              /* complementario */
  --push:#560408;               /* uso EXCLUSIVO piezas push/promocionales — no usar como acento general */

  --bg-light:#f8f8f8;
  --border:#e7e2d9;
  --text-2:#5a5a5a;
  /* #8a8177 daba 3,83:1 sobre blanco y 3,44 sobre el crema: por debajo del
     4,5 que pide WCAG AA y ocho fallos de contraste en la ficha. Mismo gris
     calido, un punto mas oscuro: 5,01 y 4,51. No es color de manual, es un
     gris de interfaz derivado, asi que no toca la identidad. */
  --text-3:#766e66;
  --taupe:#b9a98f;
  --clay:#8c7357;
  --espresso:#1e1e1c;
  --accent:#8c7357;
  --accent-ink:#6f5a44;
  --ease:cubic-bezier(.4,0,.2,1);
  --sans:'FuturaPT','Montserrat',-apple-system,'Helvetica Neue',Arial,sans-serif;
  --display:'Amadine','Montserrat',-apple-system,sans-serif;
  --maxw:1360px;
}
@font-face{font-family:'Amadine';src:url('../fonts/Amandine_Light.woff2') format('woff2');font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:'Amadine';src:url('../fonts/Amandine_Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Amadine';src:url('../fonts/Amandine_Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'FuturaPT';src:url('../fonts/FuturaPTLight.woff2') format('woff2');font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:'FuturaPT';src:url('../fonts/FuturaPTBook.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'FuturaPT';src:url('../fonts/FuturaPTMedium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'FuturaPT';src:url('../fonts/FuturaPTDemi.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}
del{color:var(--text-3);text-decoration:line-through;margin-right:8px;font-size:.8em}
ins{text-decoration:none}
*{box-sizing:border-box}
html{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
/* Los enlaces a un ancla de la misma pagina saltaban de golpe. El
   desplazamiento suave lo hace el navegador, pero hay que pedirlo; se deja
   fuera para quien tenga activado "reducir movimiento" en su sistema.
   No afecta a los carruseles: los suyos van en el elemento de la pista. */
@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}
/* font-size 15 -> 16: escala de letra B aprobada por Aristas el 2026-10-05 (11->12, 12->13, 13->14,
   14->15, 15->16; de 16px para arriba no cambia), aplicada a TODOS los font-size del tema salvo el
   encabezado. El encabezado no hereda este tamano: cada pieza suya declara el propio. */
body{margin:0;font-family:var(--sans);color:var(--ink);background:var(--white);font-weight:400;font-size:16px;line-height:1.62}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
/* Los controles sin tamano propio traian el de fabrica del navegador (13,33px) y la escala de letra
   B los subia a 14px junto con el resto (13 -> 14). :where() deja la especificidad en cero: cualquier
   regla con tamano propio, del tema o de un plugin, gana como siempre. El encabezado no entra: la
   segunda regla le deja su 13,33 de fabrica a los controles sin tamano propio. TAMBIEN con :where():
   un `#headerMobile button` normal (especificidad de id) le habria ganado a .header-mobile__close
   y a .header-mobile__expand, que si declaran el suyo. */
:where(button,input,select,textarea){font-size:14px}
:where(.site-header,#headerMobile) :where(button,input,select,textarea){font-size:13.3333px}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 40px}
.linky{background:none;border:none;color:var(--accent);border-bottom:1px solid currentColor;padding:0 0 1px;font-size:inherit}
.section-title{font-weight:600;font-size:28px;line-height:1.15;letter-spacing:-.01em;margin:0}
.section-sub{color:var(--text-2);margin:.6em 0 0;max-width:54ch;font-weight:400}
/* --accent da 4,46:1 sobre blanco, justo por debajo del 4,5. --accent-ink es
   la variante del mismo color pensada para texto y llega a 6,3. */
.eyebrow{font-size:12px;letter-spacing:.26em;text-transform:uppercase;color:var(--accent-ink);margin:0 0 14px;font-weight:600}
.eyebrow span{color:var(--text-3)}

/* ================= HEADER ================= */
.site-header{position:relative;z-index:100;width:100%}

/* --- variante NEGRO (producto/categoría/carrito/checkout): barra sólida,
       texto oscuro, sticky normal, sin overlay sobre ningún hero --- */
/* sin position:sticky en el header completo — la fila sticky se define abajo */
.header--negro{background:var(--white);border-bottom:1px solid var(--border);--hc:var(--ink);--hc-2:var(--text-2)}

/* --- variante BLANCO (home + resto): flota transparente sobre el hero,
       texto claro; al hacer scroll pasa a fija, sólida y con texto oscuro --- */
/* La barra negra NO puede flotar sobre el banner: es un bloque sólido. Se queda
   en el flujo y solo la fila del menú va encima del arte (regla más abajo).
   Antes esto valía solo en móvil, porque en escritorio el topbar era
   transparente; con el rediseño del mockup es negro en los dos anchos. */
.header--blanco{position:relative;background:transparent;--hc:#fff;--hc-2:rgba(255,255,255,.78)}
/* Al hacer scroll el blanco se comporta IGUAL que el negro (verificado en
   producción): colapsa el topbar, deja fija solo la fila del menú sobre el
   velo negro y el contenido en blanco. Antes pasaba a una barra blanca sólida
   conservando las tres filas, que no es lo que hace producción. */

/* --- header--negro al hacer scroll (comportamiento de producción) ---
   NADA se colapsa por animación: las filas que sobran (topbar y, en desktop,
   la del logo) simplemente se van con el scroll, y solo una fila es sticky.
   Es importante que sea así y no con max-height animado: el header está en el
   flujo, así que encogerlo mueve todo el contenido hacia arriba de golpe, y
   ese salto vuelve a cruzar el umbral del scroll → titileo.
   Al quedar pegada, la barra pasa a un velo negro con el contenido en blanco.
   Producción invierte el logo con filter:brightness(0) invert(1); acá
   cruzamos al logo-blanco.png real. */
.site-header.is-scrolled{--hc:#fff;--hc-2:rgba(255,255,255,.6)}
.site-header.is-scrolled .header-logo__img--dark{opacity:0}
.site-header.is-scrolled .header-logo__img--light{opacity:1}
/* Centinela de 1px: marca dónde empieza la fila sticky. El JS observa cuándo
   sale del viewport, que es exactamente cuando la fila queda pegada — sin
   umbrales de scroll que oscilen. El margen negativo lo deja sin alto real. */
.header-sticky-sentinel{display:block;height:1px;margin-bottom:-1px}
/* La fila sticky es distinta según el ancho: en desktop la del menú (y la del
   logo le pasa por debajo, visible a través del velo); en móvil .header-main
   entera, porque ahí el logo vive en esa misma fila. */
/* position:fixed y no sticky: una fila interna solo se pega dentro de la caja
   de su padre, y el padre es el header — se despegaría a los pocos píxeles.
   Al pasar a fixed la fila sale del flujo, así que su padre recibe un padding
   equivalente (--sticky-h, medido en JS) y el contenido no se mueve ni un px.
   Se califica con .header--negro porque .header-main__row se redefine más
   abajo con position:relative y, a igual especificidad, ganaría por orden. */
/* El logo ya vive DENTRO de la fila del menú, así que la fila que se pega es
   la misma en los dos anchos: .header-main entera. Antes en escritorio era
   solo .header-main__row--nav, para dejar pasar la fila del logo por debajo.
   En --blanco, el hero arranca justo debajo de la barra negra y la fila del
   menú se le monta encima; si flotara también la barra negra, el arte subiría
   ~40px y el logo caería sobre el texto que viene dentro de la imagen. */
.header--negro .header-main{background:var(--white);transition:background .3s var(--ease)}
.header--blanco .header-main{background:transparent;transition:background .3s var(--ease);position:absolute;top:100%;left:0;right:0}
.site-header.is-scrolled .header-main{position:fixed;top:0;left:0;right:0;z-index:30;background:rgba(0,0,0,.45)}
/* Solo la variante NEGRA compensa: ahí .header-main está en el flujo y al
   pasar a fixed deja un hueco de --sticky-h. En la BLANCA ya es absolute, así
   que no ocupa flujo y este padding no compensaba nada — empujaba el hero 96px
   hacia abajo justo al pegarse. */
.header--negro.is-scrolled{padding-bottom:var(--sticky-h,0px)}

/* --- barra pegada compacta ---
   Al pegarse, el logo baja de 200 a 150px y el aire de 20 a 9px: la fila pasa
   de 96 a ~60px, un 37% menos de pantalla comida. No hace falta volver a medir
   --sticky-h: el hueco que hay que tapar en el flujo es el del alto ORIGINAL,
   no el del comprimido. */
.site-header.is-scrolled .header-main__row{padding-top:9px;padding-bottom:9px}
.site-header.is-scrolled .header-logo__img{width:150px}
/* el buscador se abre sobre la barra pegada, no en lo alto del documento */
.site-header.is-scrolled .header-search{position:fixed;top:0}

/* --- barra negra: enlaces · promo · redes + lupa + carrito ---
   Negra en los dos anchos (antes solo en móvil). Los colores son los del
   manual v2 — fondo --ink, texto --sand — y no los del mockup (#1a1a1a /
   #cfc6b8), que eran valores sueltos de la maqueta sin respaldo de marca. */
.header-topbar{background:var(--ink);--hc:var(--sand);--hc-2:rgba(255,255,255,.45)}
.header-topbar__inner{max-width:var(--maxw);margin:0 auto;padding:9px 40px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px}
.header-topbar__links{grid-column:1;justify-self:start}
.header-topbar__promo{grid-column:2;justify-self:center}
.header-topbar__utils{grid-column:3;justify-self:end}
.header-topbar__links{display:flex;align-items:center;gap:0;font-size:11px;min-width:0;font-weight:400;letter-spacing:.12em;text-transform:uppercase;list-style:none;margin:0;padding:0}
/* El menu ahora va dentro de un <ul> de verdad (ver header.php): la fila la
   hace la lista, y el <nav> solo alinea el pin con ella. */
.header-topbar__menu{display:flex;align-items:center;gap:0;list-style:none;margin:0;padding:0;font:inherit;letter-spacing:inherit;text-transform:inherit}
.header-topbar__links li{display:flex;align-items:center}
.header-topbar__links li:not(:last-child){padding-right:12px;margin-right:12px;border-right:1px solid var(--hc-2)}
.header-topbar__links a,.header-topbar__links a:link,.header-topbar__links a:visited{color:var(--hc);transition:color .2s var(--ease)}
.header-topbar__links a:hover{color:var(--white)}
.header-topbar__promo{margin:0;font-size:11px;font-weight:400;letter-spacing:.16em;text-transform:uppercase;color:var(--hc);opacity:.85;white-space:nowrap}
.header-topbar__pin{display:none}
.header-topbar__utils{display:flex;align-items:center;gap:16px}
/* Las redes van sin el aro de producción: al lado de la lupa y el carrito, que
   son trazos sueltos, los círculos se leían como otra familia de iconos. */
.header-topbar__social{display:flex;align-items:center;gap:12px}
.header-topbar__social a{color:var(--hc);display:flex;align-items:center;justify-content:center;transition:color .2s var(--ease)}
.header-topbar__social a:hover{color:var(--white)}
.header-topbar__social svg{width:15px;height:15px}
.header-topbar__utils .header-action{padding:0;color:var(--hc)}
.header-topbar__utils .header-action svg{width:16px;height:16px}
.header-topbar__utils .header-action:hover{color:var(--white)}
/* la burbuja del contador, clara sobre la barra negra */
.header-topbar__utils .header-cart__count{background:var(--sand);color:var(--ink);top:-6px;right:-8px}
/* enlaces + promo + iconos suman ~810px: por debajo de 1100 se tocan y lo
   primero que sobra es la promo, que es decorativa */
@media(max-width:1100px){.header-topbar__promo{display:none}}

.header-main{transition:background .3s var(--ease)}
/* La fila es full-bleed a propósito: el mega-menú se ancla a ella (es su único
   ancestro posicionado) y tiene que salir de borde a borde. El contenido se
   centra con padding y no con max-width, para no encoger esa caja:
   1280px de contenido + 40px a cada lado = los 1360 del mockup. */
.header-main__row{position:relative;padding:20px max(40px,calc((100% - 1280px) / 2));display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;transition:padding .25s var(--ease)}

/* grid-row:1 explícito en los cinco hijos: en cada ancho hay dos escondidos y,
   sin esto, el auto-placement los reparte en filas distintas. */
.header-menu-toggle{grid-column:1;grid-row:1;display:none;flex-direction:column;gap:5px;background:none;border:none;padding:4px;justify-self:start}
.header-menu-toggle span{width:22px;height:2px;background:var(--hc);display:block;transition:background .2s var(--ease)}

/* El menú va partido a lado y lado del logo y cada mitad abre hacia afuera,
   como en el mockup: la izquierda arranca en el borde, la derecha termina en él. */
.header-nav{grid-row:1;min-width:0}
.header-nav--izq{grid-column:1;justify-self:start}
.header-nav--der{grid-column:3;justify-self:end}
.header-nav__list{display:flex;align-items:center;gap:26px;list-style:none;margin:0;padding:0}
.header-nav__item{flex:none;border-top:1px solid transparent}
.header-nav__item:hover,.header-nav__item.is-open{border-top-color:var(--hc)}
/* 13px por peticion de David (2026-09-25), con el tracking bajado de .13em
   a .09em para que quepa: a 13px y .13em la holgura contra el logo era de
   2px en 1366 y 8 en 1440 —cabia de milagro—; con .09em son 27 y 34.

   Lo que el tracking NO arregla es 1280: ahi el nav se sigue solapando
   (-16px). El problema de fondo no es el espaciado sino la cantidad de
   texto: nueve items suman ~1000px y no caben junto a un logo de 200 en
   ese ancho. Para 1280 hay que quitar texto (mover un item al topbar o
   acortar «PODER DEL DISEÑO») o subir el breakpoint del menu hamburguesa
   de 900 a ~1340. */
.header-nav__item>a,.header-nav__item>a:link,.header-nav__item>a:visited{display:flex;align-items:center;gap:4px;font-size:13px;line-height:1;letter-spacing:.09em;text-transform:uppercase;font-weight:500;color:var(--hc);transition:color .2s var(--ease);padding:6px 0 4px;white-space:nowrap}
.header-nav__item>a:hover{color:var(--accent)}
.header-nav__caret{display:flex;align-items:center;opacity:.8;transition:opacity .2s var(--ease)}
.header-nav__item:hover .header-nav__caret{opacity:1}

/* --- mega-menú de categoría: lista de subcategorías reales + fotos
       curadas (si Carlos Gómez ya subió foto a la categoría en
       WooCommerce; si no, solo se ve el listado, sin inventar imágenes) --- */
/* -2px para que el panel tape por completo la punta de la "A" del logo */
/* overflow:hidden + min-width:0 en las dos columnas: sin esto, el min-width:auto
   de un item flex estira la columna de links a su min-content (p.ej. "Juegos de
   Comedor 8 Puestos" = 380px en vez de 33.333%=324.7px) y, como la columna de
   fotos es flex-shrink:0, el sobrante desbordaba el documento ~45px en 900-1225px.
   No se usa overflow-x:hidden en html/body porque rompe el sticky del header. */

/* --- guarda de desborde horizontal ---------------------------------------
   Sin esto, CUALQUIER elemento que sobresalga por la derecha deja arrastrar
   la pagina entera en el telefono. En la ficha de producto hay uno por
   diseno: el panel de telas (.sheet) esta position:fixed y, cerrado, se
   aparca en translateX(100%), o sea una pantalla entera a la derecha.

   Va en `clip` y NO en `hidden` a proposito. `hidden` crea un contenedor de
   scroll y por eso rompia el sticky del header (la nota de arriba). `clip`
   recorta sin crear contenedor: el sticky sigue funcionando.

   Es la red, no el arreglo: los desbordes se siguen corrigiendo en su
   origen, como se hizo con el megamenu. */
html{overflow-x:clip}
.header-megamenu{position:absolute;top:100%;left:0;right:0;margin-top:-2px;overflow:hidden;background:var(--white);box-shadow:0 30px 50px -24px rgba(20,17,15,.25);opacity:0;visibility:hidden;transform:translateY(6px);transition:.2s var(--ease);z-index:20}
.header-nav__item:hover .header-megamenu,.header-nav__item:focus-within .header-megamenu{opacity:1;visibility:visible;transform:translateY(0)}
/* tamaños y espaciado copiados 1:1 de producción (medidos en aristas.co):
   fila padding 10px · columna izq 33.33% con padding 70px y gap 20px ·
   título 40px/1 peso 400 · lista 16px/1.6 con tracking .1em · botón 15px
   peso 600, borde 2px, padding 12px 24px */
.header-megamenu__inner{display:flex;gap:0;padding:10px}
.header-megamenu__col--links{display:flex;flex-direction:column;gap:20px;flex:0 0 33.333%;min-width:0;padding:clamp(32px,5vw,70px);box-sizing:border-box}
.header-megamenu__title{font-family:var(--sans);font-weight:400;font-size:clamp(30px,3vw,40px);line-height:1;text-transform:none;letter-spacing:normal;margin:0;color:var(--ink)}
.header-megamenu__list{display:flex;flex-direction:column;gap:0;margin:0}
.header-megamenu__list a,.header-megamenu__list a:link,.header-megamenu__list a:visited,.header-megamenu__list span{font-size:16px;line-height:1.6;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:var(--text-2);overflow-wrap:break-word;transition:color .15s var(--ease)}
.header-megamenu__list a:hover{color:var(--accent)}
.header-megamenu__cta{align-self:flex-start;border:2px solid var(--ink);padding:12px 24px;font-size:15px;line-height:1;letter-spacing:.1em;text-transform:uppercase;font-weight:600;color:var(--ink);transition:.2s var(--ease)}
a.header-megamenu__cta:hover{background:var(--ink);color:var(--white)}
.header-megamenu__images{flex:0 0 66.667%;min-width:0;box-sizing:border-box;display:flex;gap:5px}
.header-megamenu__imgcol{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.header-megamenu__images a{display:block;overflow:hidden;border-radius:0}
/* sin height forzado ni object-fit: cada foto conserva su proporción
   original (4:3 las altas, 2.6:1 las bajas) y nunca se recorta */
.header-megamenu__images img{width:100%;height:auto;display:block}

.header-logo{grid-column:2;grid-row:1;justify-self:center;display:inline-block;position:relative}
.header-logo__img{display:block;width:200px;height:auto;transition:opacity .2s var(--ease),width .25s var(--ease)}
.header-logo__img--dark{position:absolute;inset:0;opacity:0}
.header--negro .header-logo__img--light{opacity:0}
.header--negro .header-logo__img--dark{opacity:1}

.header-actions{grid-column:3;grid-row:1;justify-self:end;display:flex;align-items:center;gap:16px}
/* La copia de la fila principal es solo para móvil; en escritorio manda la de
   la barra negra. Están duplicadas en el HTML a propósito:
   ver template-parts/header-actions.php */
.header-actions--movil{display:none}
.header-action{position:relative;display:flex;color:var(--hc);background:none;border:none;padding:4px;transition:color .2s var(--ease)}
.header-action:hover{color:var(--accent)}
/* Burbuja del contador — medidas de producción (16px, negro, offset -7/-7).
   El manual v2 pide iconografía en blanco o negro, así que va en --ink. */
.header-cart__count{position:absolute;top:-7px;right:-7px;min-width:16px;height:16px;padding:0 4px;border-radius:99px;background:var(--ink);color:var(--white);font-size:10px;font-weight:500;display:flex;align-items:center;justify-content:center;line-height:1}
.header-cart__count[hidden]{display:none}

/* --- carrito lateral (mini-cart off-canvas) ---------------------------------
   Reemplaza al widget "WooCommerce Menu Cart" de Elementor Pro de producción.
   Medidas tomadas del sitio en vivo: panel 350px desde la derecha, overlay
   negro al 25%, transición .3s, padding 20px/30px. Los grises de producción
   (#334862, #d5d8dc) eran defaults de Elementor que nadie eligió: acá van
   contra los tokens de marca. --------------------------------------------- */
.minicart-overlay{position:fixed;inset:0;background:rgba(0,0,0,.25);z-index:9998;opacity:0;transition:opacity .3s var(--ease)}
.minicart-overlay[hidden]{display:none}
.minicart-overlay.is-open{opacity:1}

.minicart{position:fixed;top:0;right:0;bottom:0;width:350px;max-width:100%;z-index:9999;background:var(--white);box-shadow:0 0 20px rgba(0,0,0,.2);transform:translateX(100%);opacity:0;transition:transform .3s var(--ease),opacity .3s var(--ease);display:flex;flex-direction:column}
.minicart[hidden]{display:none}
.minicart.is-open{transform:none;opacity:1}
.minicart__inner{flex:1;min-height:0;display:flex;flex-direction:column;padding:20px 30px;overflow:hidden}
/* Producción oculta el botón de cerrar (solo Esc o clic afuera). Acá se deja
   visible: en táctil no hay Escape y el clic afuera no se descubre solo. */
.minicart__close{align-self:flex-end;background:none;border:none;padding:0 0 0 12px;font-size:26px;line-height:1;color:var(--text-3);transition:color .2s var(--ease)}
.minicart__close:hover{color:var(--ink)}
.minicart__body{flex:1;min-height:0;display:flex;flex-direction:column;font-size:15px;line-height:1.6}

.minicart__empty{margin:0;font-size:15px;line-height:1.6;font-weight:500;color:var(--text-2)}

/* Sin flex-grow, igual que producción: el subtotal va justo debajo del último
   producto, no pegado al fondo del panel. El max-height solo limita la lista. */
.minicart__products{list-style:none;margin:0 0 18px;padding:0;max-height:calc(100vh - 300px);overflow-y:auto}
.minicart__product{position:relative;display:grid;grid-template-columns:28% auto;padding:0 30px 20px 0;border-bottom:1px solid var(--border)}
.minicart__product + .minicart__product{padding-top:20px}
.minicart__product:last-child{border-bottom:none}
.minicart__product-thumb{grid-column:1;grid-row:1/3}
.minicart__product-thumb img{width:100%;height:auto;border-radius:0}
.minicart__product-name{grid-column:2;grid-row:1;padding-left:20px;font-size:15px;line-height:1.6;font-weight:500;color:var(--ink)}
.minicart__product-name a:hover{color:var(--accent)}
.minicart__product-price{grid-column:2;grid-row:2;align-self:end;padding-left:20px;font-size:15px;font-weight:300;color:var(--text-3)}
.minicart__product-remove{position:absolute;bottom:20px;right:0;width:22px;height:22px;border:1px solid var(--border);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--text-3);transition:.2s var(--ease)}
.minicart__product-remove:hover{border-color:var(--ink);color:var(--ink)}

.minicart__subtotal{padding:20px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);text-align:center;font-size:20px;line-height:1.6;font-weight:600;color:var(--text-2)}

.minicart__buttons{display:grid;grid-template-columns:1fr;gap:10px;padding-top:20px}
.minicart__btn{display:block;padding:15px;background:var(--ink);color:var(--white);text-align:center;font-size:16px;line-height:1;letter-spacing:.15em;font-weight:400;text-transform:uppercase;border-radius:0;transition:background .2s var(--ease)}
.minicart__btn:hover{background:var(--charcoal)}
@media(max-width:767px){.minicart__btn{padding:15px 10px}}

.header-search{position:absolute;top:0;left:0;right:0;background:var(--white);border-bottom:1px solid var(--border);box-shadow:0 20px 40px -24px rgba(20,17,15,.25);z-index:5}
.header-search[hidden]{display:none}
.header-search__form{display:flex;align-items:center;gap:12px;padding:22px 40px;color:var(--text-3)}
.header-search__input{flex:1;border:none;outline:none;font-size:18px;font-family:inherit;color:var(--ink);background:transparent}
/* Fuera la equis que Chrome anade por su cuenta a los input[type=search]:
   salian DOS equis seguidas y no hacen lo mismo —la del navegador solo borra
   el texto, la nuestra cierra el panel— asi que el cliente no puede saber
   cual pulsar (Carlos Sotelo, 2026-09-28). Se conserva la nuestra, que es la
   que se ve igual en todos los navegadores: la nativa ni siquiera aparece en
   Firefox. Borrar el texto se sigue pudiendo con Escape. */
.header-search__input::-webkit-search-cancel-button,
.header-search__input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}
.header-search__close{background:none;border:none;font-size:26px;line-height:1;color:var(--text-3);padding:0 4px}

/* --- menú móvil (drawer) --- */
.header-mobile-backdrop{position:fixed;inset:0;background:rgba(20,17,15,.5);z-index:198}
.header-mobile-backdrop[hidden]{display:none}
.header-mobile{position:fixed;top:0;right:0;bottom:0;width:min(340px,86vw);background:var(--white);z-index:199;transform:translateX(100%);transition:transform .32s var(--ease);overflow-y:auto;display:flex;flex-direction:column}
.header-mobile[hidden]{display:none}
.header-mobile.is-open{transform:none}
.header-mobile__head{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--border)}
.header-mobile__close{background:none;border:none;font-size:28px;line-height:1;color:var(--ink)}
/* el logo del menu no tenia ancho y se estiraba hasta llenar la cabecera (~460px) */
.header-mobile__head img{display:block;width:150px;height:auto}
.header-mobile__list{list-style:none;margin:0;padding:8px 4px;flex:1}
.header-mobile__row{display:flex;align-items:center;justify-content:space-between}
.header-mobile__item>.header-mobile__row>a{display:block;padding:14px 16px;font-size:13px;letter-spacing:.08em;text-transform:uppercase;font-weight:500;color:var(--ink)}
.header-mobile__expand{background:none;border:none;font-size:16px;color:var(--text-3);width:44px;height:44px}
.header-mobile__item.is-open .header-mobile__expand{color:var(--accent)}
.header-mobile__submenu{display:none;flex-direction:column;padding:0 16px 10px 28px}
.header-mobile__item.is-open .header-mobile__submenu{display:flex}
.header-mobile__submenu a{padding:8px 0;font-size:13px;color:var(--text-2)}
.header-mobile__foot{padding:16px 20px 24px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:14px}
.header-mobile__foot nav{display:flex;flex-wrap:wrap;gap:14px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2)}
.header-mobile__menu{display:flex;flex-wrap:wrap;gap:14px;list-style:none;margin:0;padding:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2)}
.header-mobile__social{display:flex;gap:16px;color:var(--text-2)}

/* ================= EL MENU DEL HEADER, EN TRES TRAMOS =================
   Los nueve items del nav suman ~1000px y compiten con un logo de 200 por
   el ancho de la fila, asi que no hay un solo tamano que sirva siempre
   (medido el 2026-09-25):

     >= 1341   nav a 13px   holgura 27-40px
     1261-1340 nav a 12px   holgura 16-46px
     <= 1260   hamburguesa  el nav no cabe a ningun tamano

   El corte en 1260 y no en 1230 —que es donde el nav empieza a caber por
   los pelos, con 1px de holgura— es para no repetir el error de dejarlo
   al filo: a 1261 hay 16px.

   El tramo de abajo es el que importa: antes el nav se mostraba entero
   hasta los 900 y por debajo de ~1340 se solapaba con el logo. A 901px
   faltaban 164px, y ni bajando a 11px cabia. Mejor la hamburguesa, que ya
   existe y funciona, que un nav pisado.

   Va ANTES del bloque de 900 a proposito: alli se afinan el padding y el
   margen de la hamburguesa para el movil, y al ir despues, gana. */
@media(max-width:1340px){
  .header-nav__item>a,.header-nav__item>a:link,.header-nav__item>a:visited{font-size:12px}
}
@media(max-width:1260px){
  .header-nav{display:none}
  .header-menu-toggle{display:flex}
}

@media(max-width:900px){
  /* La barra negra se queda solo con los enlaces (con un pin de ubicación
     delante), centrados: la promo y el bloque de redes/lupa/carrito no caben
     y esos iconos ya están en la fila principal. */
  .header-topbar{--hc:#fff;--hc-2:#fff}
  .header-topbar__inner{display:flex;justify-content:center;gap:0;padding:5px 14px}
  .header-topbar__links{display:flex;justify-content:center;font-size:12px;letter-spacing:normal;line-height:1.6}
  .header-topbar__links li:not(:last-child){padding-right:8px;margin-right:8px}
  .header-topbar__pin{display:flex;align-items:center;margin-right:8px;color:var(--hc)}
  .header-topbar__promo,.header-topbar__utils{display:none}

  .header--negro{border-bottom:none}
  /* Misma fila de tres columnas que en escritorio, pero con la hamburguesa y
     los iconos en lugar de las dos mitades del menú. Padding simétrico para
     que el logo quede centrado DE VERDAD respecto al viewport. (En producción
     queda 8.8px a la izquierda: es un residuo de su space-between con columnas
     asimétricas, no una decisión de diseño.) */
  .header-main__row{padding:7px 17px;gap:0}
  .header-nav{display:none}
  /* margen negativo, no menos padding: el área táctil se mantiene en 42x45 y
     las barras caen a 18px del borde, como en producción */
  .header-menu-toggle{display:flex;gap:5.5px;padding:14px 10px;margin-left:-9px}
  .header-actions--movil{display:flex;gap:0}
  /* padding 7px a cada lado → 14px exactos entre los dos iconos, como producción */
  .header-actions--movil .header-action{padding:7px}
  .header-actions--movil .header-action svg{width:20px;height:20px}
  .header-actions--movil .header-cart svg{width:17px;height:17px}
  .header-logo__img{width:189px}
  /* en móvil la fila ya mide 67px; comprimirla más solo achica el logo */
  .site-header.is-scrolled .header-main__row{padding-top:7px;padding-bottom:7px}
  .site-header.is-scrolled .header-logo__img{width:189px}

  .site-header.is-scrolled{--hc-2:#fff}
}

/* ================= CABECERA CON BANNER =================
   La comparten la vista de categoría y las páginas sueltas (las 14 legales
   del footer). Vive acá y no en categoria.css porque ese archivo solo se
   encola en categorías; si se quedara allí, cada página legal tendría que
   cargar además el CSS de filtros, grilla y panel lateral que no usa. */
.cathero{position:relative;background:var(--ink);background-size:cover;background-position:center;padding:66px 40px;color:#fff}
.cathero::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(26,22,19,.55),rgba(26,22,19,.15))}
.cathero__inner{position:relative;z-index:1;max-width:var(--maxw);margin:0 auto}
.cathero__title{font-family:var(--sans);text-transform:uppercase;letter-spacing:.02em;font-weight:600;font-size:56px;line-height:1;margin:0;color:#fff}
.cathero__sub{margin:12px 0 0;color:#eee5d8;font-size:16px;letter-spacing:.02em}

/* --- cabecera de categoria SIN foto: crema, no negra ---------------------
   David: la banda negra «corta todo y es muy fuerte». Y al medirlo salio que
   produccion NO tiene banda: su <h1> real va en un contenedor con
   display:none y lo que se ve es un bloque de Elementor sobre el blanco de
   la pagina. O sea que la banda oscura era invencion nuestra.

   Crema #f4f3ee (complementario del manual) con los textos en tinta, y el
   padding de 66 a 32: la barra pasa de 224 a ~156px en escritorio.
   Decision de Carlos Sotelo y David, 2026-09-25.

   Se excluyen las otras dos variantes a proposito: `--foto` necesita el
   fondo oscuro y el velo para que el texto blanco se lea sobre la imagen, y
   `--pagina` (legales) no entraba en esta decision. */
.cathero:not(.cathero--foto){background:var(--cream);color:var(--ink);padding-top:32px;padding-bottom:32px}
/* el velo es un degradado oscuro pensado para ir sobre foto: sobre crema
   solo la ensucia */
.cathero:not(.cathero--foto)::after{display:none}
/* Amadine, igual que la cabecera CON foto: es la misma pieza —el nombre de
   la categoria— y estaba con dos tipografias distintas segun hubiera banner
   o no (Futura Demi 600 aqui, Amadine 500 alli). El mockup y produccion
   coinciden en Amadine. Carlos Sotelo, 2026-09-25. */
/* Color y familia para categoria Y paginas (carrito, legales). El TAMANO no
   se toca aqui a proposito: `--pagina` tiene el suyo, mas pequeno y con mas
   tracking, porque sus titulos son largos —«Politica de tratamiento de
   datos»— y a 44px llenarian el banner de lado a lado. */
.cathero:not(.cathero--foto) .cathero__title{color:var(--ink);font-family:var(--display)}
.cathero:not(.cathero--foto):not(.cathero--pagina) .cathero__title{font-weight:500;font-size:44px;letter-spacing:.02em}
.cathero:not(.cathero--foto) .cathero__sub{color:var(--text-2)}
/* El texto bajo el titulo de las categorias sin foto (Salas...) se veia muy pequeno a 15px: sube
   a 18px, el tamano que tenia el de los banners con foto antes de la opcion A, con interlineado
   1,6 (Aristas, 2026-10-05). Las paginas sueltas (.cathero--pagina) no se tocan. */
.cathero:not(.cathero--foto):not(.cathero--pagina) .cathero__sub{font-size:18px;line-height:1.6}
/* sin banda de color, la cabecera y el carrusel de subcategorias quedaban
   sobre el mismo fondo y se leian como un solo bloque: una linea fina los
   separa sin devolver el corte duro */
.cathero:not(.cathero--foto){border-bottom:1px solid var(--border)}

/* --- cabecera CON foto: la imagen va a sangre desde el borde superior y el
   header flota encima (variante blanca, igual que el home). Se usa <picture>
   y no background-image para que la foto esté en el HTML y pueda ser el LCP.
   Sin height forzado: la imagen manda el alto y nunca se recorta. --------- */
/* Sin velo en el menú mientras está arriba: el header se comporta igual que
   en el home —transparente sobre el arte y oscurecido solo al pegarse— y no
   como en producción, que le deja un velo negro permanente del 45%. Tener dos
   headers distintos según la plantilla se nota, y el banner ya trae su propio
   velo del 25% para que el logo blanco se lea. */
/* Altura pedida por Carlos: 485px en una pantalla de 1920 y 405px en un
   portátil (~1440) — 15 y 25px por debajo de producción. No son la misma
   proporción, así que no sirve un solo valor en vw: la recta entre los dos
   puntos sube 0.1667px por cada px de ancho. El clamp la corta en 340 abajo
   y 485 arriba.
   Es min-height y no height a propósito: si el texto no cabe —en el teléfono
   una descripción de 300 caracteres ocupa ocho líneas— el banner crece en vez
   de dejar el título por debajo del logo. */
.cathero--foto{padding:0;position:relative;display:flex;align-items:flex-end;
  min-height:clamp(340px,calc(405px + (100vw - 1440px) * .1667),485px)}
/* Velo plano, no gradiente: son los valores medidos en producción
   (#1E1E1C al 25%, el color Principal del manual v2). */
.cathero--foto::after{background:rgba(30,30,28,.25)}
/* Alto recortado, no el natural de la foto. Sin esto un banner de 1920x700
   ocupa 520px a 1425 de ancho — el doble que en el mockup (258px medidos) y
   empuja la grilla fuera de la primera pantalla. Producción hace lo mismo con
   background-size:cover. */
/* La foto es el fondo de la sección, no un bloque en el flujo: se estira a lo
   que mida el banner y recorta por el centro. Va en <picture> y no en
   background-image para que entre en el HTML y pueda ser el LCP, con su
   propia versión de móvil. */
.cathero__pic{position:absolute;inset:0;display:block}
.cathero__pic img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}
/* El texto se apoya abajo del banner. El padding superior reserva el alto del
   header, que va encima: sin eso, en un banner bajo el título se le metería
   debajo. --sticky-h lo mide el JS del header. */
/* El padding de arriba reserva el alto del header, que va encima: sin él, el
   título se mete debajo del logo en cuanto el texto es largo. --sticky-h lo
   mide el JS del header. */
.cathero--foto .cathero__inner{position:relative;z-index:1;width:100%;
  padding:calc(var(--sticky-h,96px) + 24px) 40px 48px;box-sizing:border-box}
/* Amadine, no Futura: el mockup y producción coinciden en usarla para el
   título de categoría, y entre las dos pesan más que mi lectura del manual
   (que la reserva para el título de producto). 56px peso 500, tracking .02em,
   medidos en el mockup. */
.cathero--foto .cathero__title{font-family:var(--display);font-weight:500;font-size:clamp(34px,3.9vw,56px);letter-spacing:.02em}
.cathero--foto .cathero__sub{max-width:none;font-size:16px;line-height:1.62;color:#eee5d8;letter-spacing:.02em}
/* Páginas sueltas: título más pequeño y con más tracking que en categoría
   (Amadine 32px / .15em en producción). Sus títulos son largos —"Política de
   tratamiento de datos"— y a 56px llenan el banner de lado a lado. */
.cathero--pagina .cathero__title{font-size:clamp(26px,2.5vw,34px);font-weight:300;letter-spacing:.15em}
.cathero--pagina .cathero__sub{font-size:16px}
/* Banner de categoria a ancho completo y texto bajo el titulo como aristas.co
   (pedido de Carlos Sotelo, 2026-09-30). Medido alla a 1920 px: Futura PT
   18px, peso 500, interlineado 1,6, sin tracking, blanco, bloque de 1.116 px;
   a 375 px, 16px. Alla el bloque arranca a 23 px del borde, pegado: aqui un
   margen que crece con la pantalla (64 px en 1920, ~48 en 1366). Solo
   categorias: .cathero--pagina queda como estaba. */
@media(min-width:901px){
  .cathero--foto:not(.cathero--pagina) .cathero__inner{max-width:none;padding-left:clamp(24px,3.5vw,64px);padding-right:clamp(24px,3.5vw,64px)}
}
/* Opcion A del banner, aprobada por Aristas el 2026-10-05 tras compararla en Sofas con otras dos
   (la tercera era la actual): banner un 20 % mas bajo en escritorio, titulo de 56px y texto de
   20px (antes 18). El bloque del texto crece con la letra, de 1116 a 1116*20/18 = 1240px: si no,
   el parrafo pasa de 2 a 3 lineas y es el texto, no la altura minima, el que manda el alto.
   El titulo ya llegaba a 56px con el clamp de arriba (3,9vw = 56px a 1436px), no se toca.
   Vale para toda categoria con foto; .cathero--pagina queda como estaba. */
@media(min-width:901px){
  .cathero--foto:not(.cathero--pagina){min-height:calc(clamp(340px,calc(405px + (100vw - 1440px) * .1667),485px) * .8)}
}
.cathero--foto:not(.cathero--pagina) .cathero__sub{max-width:1240px;font-size:20px;font-weight:500;line-height:1.6;letter-spacing:normal;color:#fff}

@media(max-width:900px){
  /* El texto va sobre la foto también en el teléfono, como producción. El
     banner ya no tiene alto fijo, así que crece con el párrafo en vez de
     empujar el título debajo del logo. */
  .cathero--foto{min-height:340px}
  .cathero--foto .cathero__inner{padding:calc(var(--sticky-h,67px) + 18px) 20px 26px}
  .cathero--foto .cathero__title{font-size:34px}
  .cathero--foto .cathero__sub{font-size:15px;margin-top:10px}
  /* el banner va a sangre: este padding es solo para la cabecera sin foto */
  .cathero--foto{padding-left:0;padding-right:0}
}
/* Telefono (Aristas, 2026-10-05): sin texto descriptivo, solo el nombre de la categoria centrado,
   y un banner mas bajo: de 340px a ~230px, unos 2/3 (en un telefono de 375 Aristas enseno uno
   de esa altura). El titulo queda centrado en el banner, horizontal y verticalmente. El encabezado
   va encima de la foto, asi que arriba Y abajo se reserva su alto (--sticky-h lo mide el JS): el
   centro no se mueve y, si un nombre largo ocupa varias lineas, el banner crece en vez de meter el
   titulo bajo el logo. El texto se oculta con display:none en las cabeceras con y sin foto:
   sigue en el HTML de escritorio y para Google; en movil sale del arbol de accesibilidad igual
   que de la vista. Las paginas sueltas (.cathero--pagina) no entran. */
@media(max-width:900px){
  .cathero--foto:not(.cathero--pagina){min-height:230px;align-items:stretch}
  .cathero--foto:not(.cathero--pagina) .cathero__inner{display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--sticky-h,67px) 20px}
  .cathero:not(.cathero--pagina) .cathero__sub{display:none}
  .cathero:not(.cathero--foto):not(.cathero--pagina) .cathero__title{text-align:center}
}
@media(max-width:560px){
  .cathero{padding-left:20px;padding-right:20px}
  .cathero__title{font-size:40px}
  /* el banner va a sangre: ese padding es solo para la cabecera sin foto */
  .cathero--foto{padding-left:0;padding-right:0}
}

/* ================= PÁGINA SUELTA =================
   Texto corrido: el ancho se limita a ~72 caracteres. El contenedor general
   del sitio mide 1360px, que para un párrafo son líneas de 200 caracteres y
   se pierde el renglón al saltar. */
.pagina{padding:56px 40px 72px}
/* El ancho de lectura lo llevan los hijos, no el contenedor: así un bloque
   puede salirse de la columna con un margen negativo del tamaño del padding
   de .pagina y llegar justo al borde. Con max-width en el contenedor haría
   falta 100vw, que cuenta la barra de scroll y desborda el documento 8px. */
.pagina__inner{max-width:none;margin:0}
/* Los 760px son para TEXTO. Se excluyen las piezas de una landing de listado:
   tres columnas de producto no caben en 760 y se apretujaban. Se amplia la
   lista de excepciones en vez de anadir una regla que le pelee la
   especificidad, que aqui ya nos ha costado tiempo. */
.pagina__inner > *:not(.alignfull):not(.alignwide):not(.landing__grid):not(.landing__titulo):not(.ambiente):not(.comparador){max-width:760px;margin-left:auto;margin-right:auto}
.pagina__inner > .landing__grid,
.pagina__inner > .landing__titulo,
/* la foto de un ambiente es la pieza central de la pagina, no una
   ilustracion al lado del texto: se le da el ancho de .alignwide */
/* el comparador es la pieza central de su seccion, como la foto de un
   ambiente: mismo ancho, no el de lectura */
.pagina__inner > .ambiente,
.pagina__inner > .comparador{max-width:1100px;margin-left:auto;margin-right:auto}
.pagina__inner > *{margin:0 0 1.15em}
.pagina__inner > *:last-child{margin-bottom:0}
.pagina__inner p:not(.homeband__text):not(.homeband__rota){font-size:17px;line-height:1.72;color:var(--text-2)}
/* Las tarjetas de producto de una landing son el mismo componente que en
   categoria: la tipografia de pagina no entra en ellas. Sin esto el nombre
   salia a 26px con 1.8em de margen (tarjeta de 451px en vez de 358) y los
   enlaces en marron con subrayado. El [class*=pcard__] cubre los tres
   enlaces de la tarjeta y los que vengan. */
.pagina__inner h2:not(.pcard__name):not(.landing__titulo):not(.homeband__title){font-size:26px;line-height:1.2;font-weight:600;color:var(--ink);margin-top:1.8em}
.pagina__inner h3{font-size:20px;line-height:1.25;font-weight:600;color:var(--ink);margin-top:1.6em}
.pagina__inner ul,.pagina__inner ol{padding-left:22px;color:var(--text-2);font-size:17px;line-height:1.72}
.pagina__inner li{margin-bottom:.5em}
/* La lista de excepciones crece porque esta regla alcanza CUALQUIER enlace
   dentro de una pagina, incluidos los de un componente que ya trae su propio
   aspecto: el punto de un ambiente se quedaba con el borde inferior en 1px
   marron en vez del anillo blanco de 2px, y el circulo salia chueco. Antes de
   anadir un componente con enlaces a una pagina, mirar si hay que excluirlo. */
/* --accent-ink y no --accent: el segundo da 4,46:1 sobre blanco y se queda a
   un pelo del 4,5 de WCAG AA (fallaba en los nombres de producto del
   carrito). Es el mismo color, la variante pensada para texto. */
.pagina__inner a:not(.wp-block-button__link):not(.wc-block-components-button):not(.button):not(.homeband__cta):not([class*="pcard__"]):not(.ambiente__punto):not(.tend-vermas__enlace){color:var(--accent-ink);border-bottom:1px solid currentColor}
.pagina__inner a:not(.wp-block-button__link):not(.wc-block-components-button):not(.button):not(.homeband__cta):not([class*="pcard__"]):not(.ambiente__punto):not(.tend-vermas__enlace):hover{color:var(--ink)}
/* La foto de una banda NO es una imagen de contenido: va en absolute con
   height:100% y object-fit:cover. Con height:auto se dibujaba con su
   proporcion y en movil dejaba media banda en gris. */
.pagina__inner img:not(.homeband__img){height:auto}
/* Botón: negro sólido, sin esquinas redondeadas — las medidas de producción
   (13px, tracking 1px, padding 12px 24px). Se estiliza el bloque nativo de
   WordPress para que el cliente lo inserte desde el editor. */
.pagina__inner .wp-block-button__link{display:inline-block;background:var(--ink);color:#fff;
  border-radius:0;padding:14px 26px;font-size:14px;letter-spacing:.08em;text-transform:uppercase;
  font-weight:500;border:1px solid var(--ink);transition:.2s var(--ease)}
.pagina__inner .wp-block-button__link:hover{background:transparent;color:var(--ink)}
.pagina__inner .wp-block-buttons{display:flex;flex-wrap:wrap;gap:12px}
/* --- bloques a lo ancho dentro de una página de texto ---
   El cuerpo va en una columna de 760px para que el renglón se lea, pero el
   editor puede sacar un bloque de esa columna: "ancho amplio" lo lleva a
   1100 y "ancho completo" a todo el borde. Los márgenes negativos son lo que
   permite romper la caja sin envolver el contenido en otro contenedor. */
.pagina__inner .alignwide{max-width:1100px;margin-left:auto;margin-right:auto}
.pagina__inner .alignfull{margin-left:-40px;margin-right:-40px}
.pagina__inner .alignfull > *{max-width:760px;margin-left:auto;margin-right:auto}

/* Banda de respiro del relato de marca: fondo oscuro a sangre, como las que
   producción intercala entre bloques de texto. */
.pagina-banda{background:var(--ink);color:var(--white);padding:56px 40px}
.pagina-banda h2,.pagina-banda h3{color:var(--white)}
.pagina-banda p{color:rgba(255,255,255,.82)}
.pagina-banda.alignfull > *{max-width:760px}
/* la misma banda, pero con una foto detrás */
.pagina-banda--foto{position:relative;background-size:cover;background-position:center;isolation:isolate}
.pagina-banda--foto::before{content:"";position:absolute;inset:0;background:rgba(30,30,28,.62);z-index:-1}
/* BANDAS A SANGRE CON FOTO EN PAGINAS --- ver inc/bandas.php
   Reusan .homeband, pero aqui dentro hay una regla que le pone max-width:760px
   a todo hijo de un .alignfull. Eso recortaria la foto de fondo a 760px (esta en
   position:absolute, asi que el max-width si la estrecha) y el velo con ella. Se
   desarma para la banda y se le devuelve el ancho de lectura solo al texto. */
.pagina__inner .homeband.alignfull > *{max-width:none;margin-left:0;margin-right:0}
/* 900 y no los 760 de lectura: el titular a 40px cabe en una linea. El
   parrafo no se estira porque lleva su propio max-width de 480px. */
.pagina__inner .homeband.alignfull > .homeband__inner{max-width:900px;margin-left:auto;margin-right:auto}
/* Una pagina que abre con una banda a sangre no lleva cabecera propia (ver
   page.php): la banda ES la cabecera, asi que no puede haber franja blanca
   encima. */
.pagina.pagina--sangre{padding-top:0}   /* dos clases: la regla de movil de .pagina va despues y con una sola empataba y ganaba ella */
.homeband--pagina{padding:78px 0;margin:0}
.homeband--pagina .homeband__inner{padding:20px 40px}
.homeband--pagina .homeband__rota{margin-top:10px}
.homeband--pagina .homeband__cta{margin-top:30px}
/* FILAS A DOS COLUMNAS EN PAGINAS
   Las tendencias de produccion son una sucesion de filas de dos columnas:
   foto con puntos + texto, foto + moodboard, y al reves. Se usan las
   columnas nativas de Gutenberg para que el cliente las pueda mover desde el
   editor, pero con CSS propio: el del nucleo trae mucho que aqui no se usa y
   bloquea el pintado. */
/* flex y no grid: asi manda el ancho nativo de cada columna
   (wp:column {"width":"66.66%"} -> style="flex-basis:66.66%"). Produccion NO
   reparte a partes iguales: 66,67 / 33,33 es lo que hace que la foto de
   ambiente (1500x1120) y el moodboard (677x1024) salgan al mismo alto. */
.pagina__inner .wp-block-columns{display:flex;flex-wrap:nowrap;gap:26px;margin:0 auto 26px}
/* El centrado vertical va en el HIJO, no en la fila: el CSS de bloques del
   nucleo trae «.wp-block-columns{align-items:normal!important}» y con ese
   !important no hay especificidad que valga. align-self en la columna si
   manda, porque el nucleo no lo toca. */
.pagina__inner .wp-block-columns > .wp-block-column{align-self:center}
.pagina__inner .wp-block-column{flex:1 1 0;min-width:0}
/* una columna con ancho propio no crece: su flex-basis es el reparto */
.pagina__inner .wp-block-column[style*="flex-basis"]{flex-grow:0}
.pagina__inner .wp-block-column > *:first-child{margin-top:0}
.pagina__inner .wp-block-column > *:last-child{margin-bottom:0}
.pagina__inner .wp-block-column .ambiente{margin-bottom:0}
/* las tarjetas de concepto van arriba: si una lleva una linea mas de texto,
   centrarlas descuadraria las fotos entre si */
.pagina__inner .fila--arriba > .wp-block-column{align-self:flex-start}
/* la fila de los dos conceptos va a sangre y sin calle entre las dos fotos */
.pagina__inner .wp-block-columns.alignfull{gap:0;margin-bottom:0}
.pagina__inner .wp-block-columns.alignfull > *{max-width:none;margin-left:0;margin-right:0}
.pagina__inner .has-text-align-center{text-align:center}
.pagina__inner .has-text-align-right{text-align:right}

/* PORTADA A SANGRE --- ver inc/bandas.php
   Se ve ENTERA, sin recorte: la ilustracion ya lleva el titulo dibujado y un
   object-fit:cover le partiria el texto. */
.portada{margin:0;line-height:0}
.portada__img{display:block;width:100%;height:auto;border-radius:0}
.pagina__inner .portada.alignfull > *{max-width:none;margin-left:0;margin-right:0}

/* Los tres rasgos que van bajo cada comparador: no son vinetas, son una
   lista de adjetivos. */
.pagina__inner .expo-rasgos{list-style:none;padding-left:0;margin:0 0 14px;font-size:16px;line-height:1.7;color:var(--text-2)}
.pagina__inner .expo-rasgos li{margin:0}
/* el «ver mas» bajo cada tarjeta de concepto: en produccion es un enlace
   pequeno en mayusculas, no el enlace de texto marron del resto de la pagina */
.pagina__inner .tend-vermas{margin:12px 0 0;padding:0 20px}
.pagina__inner .tend-vermas__enlace{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink)}
.pagina__inner .tend-vermas__enlace:hover{color:var(--accent-ink)}
@media(max-width:820px){
  .pagina__inner .wp-block-columns{flex-direction:column;gap:20px}
  /* apiladas, el ancho de escritorio no manda */
  .pagina__inner .wp-block-column[style*="flex-basis"]{flex-basis:auto !important;width:100%}
}
/* Una banda a sangre que cierra la pagina tiene que morir contra el footer:
   los 72px de padding de .pagina se veian como una franja blanca debajo. */
.pagina__inner > .homeband--pagina:last-child{margin-bottom:-72px}
@media(max-width:560px){
  /* .pagina baja aqui a 56px de padding abajo; el tiron tiene que cuadrar */
  .pagina__inner > .homeband--pagina:last-child{margin-bottom:-56px}
}
@media (max-width:820px){
  .homeband--pagina{padding:56px 0}
  .homeband--pagina .homeband__inner{padding:20px}
}

@media(max-width:900px){
  .pagina-banda{padding:40px 20px}
}
@media(max-width:560px){
  /* el padding lateral de .pagina baja a 20px, y el margen negativo con él */
  .pagina__inner .alignfull{margin-left:-20px;margin-right:-20px}
}
@media(max-width:560px){
  .pagina{padding:36px 20px 56px}
  .pagina__inner p,.pagina__inner ul,.pagina__inner ol{font-size:16px}
  .pagina__inner h2{font-size:22px}
}

/* ================= HOME · HERO =================
   Los banners de Aristas traen el texto DENTRO de la imagen, así que acá no
   hay capa de título ni de botón: cada slide es la imagen y su enlace. Por lo
   mismo NO se le pone velo encima — oscurecerla alteraría el arte terminado.
   La consecuencia es una restricción de diseño para quien arma el banner: la
   franja de arriba tiene que ser oscura, porque el header va encima con el
   logo y los iconos en blanco. Está escrito en la ayuda del campo.

   El aspect-ratio es el de los archivos reales (1920x700 escritorio,
   1200x800 móvil): así la imagen entra completa, sin recorte, y el alto del
   hero no depende del viewport. */
/* touch-action:pan-y — sin esto el carrusel NO se pasa con el dedo. El valor
   por defecto (auto) deja que el navegador interprete el gesto horizontal, y
   al hacerlo CANCELA los eventos de puntero: el pointerup nunca llega y el
   arrastre no se registra. Con raton funcionaba, con el dedo no
   (Carlos Sotelo, 2026-09-29). Se deja pan-y para no robarle el scroll
   vertical de la pagina. */
.hero{position:relative;touch-action:pan-y}
.hero__viewport{position:relative;overflow:hidden}
.hero__track{display:flex;transition:transform .6s var(--ease)}
.hero__slide{position:relative;flex:0 0 100%;aspect-ratio:1920/700;display:block;overflow:hidden}
.hero__img{width:100%;height:100%;object-fit:cover;display:block}
.hero__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:3;width:46px;height:46px;border:none;background:transparent;color:#fff;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s var(--ease)}
.hero__arrow:hover{opacity:1}
.hero__arrow--prev{left:6px}
.hero__arrow--next{right:6px}
/* Los puntos van DEBAJO de la imagen, no encima: así lo hace producción
   (12px bajo el borde inferior) y además no tapan el arte del banner. */
.hero__dots{display:none;justify-content:center;gap:8px;padding:12px 0 4px}
.hero__dot{width:8px;height:8px;border-radius:50%;border:1px solid var(--text-3);background:transparent;padding:0;cursor:pointer;transition:.2s var(--ease)}
.hero__dot.is-active{background:var(--ink);border-color:var(--ink)}
@media(max-width:900px){
  .hero__slide{aspect-ratio:1200/800}
  .hero__arrow{width:38px;height:38px}
  /* solo en móvil, como producción: en desktop van únicamente las flechas */
  .hero__dots{display:flex}
}
@media (prefers-reduced-motion: reduce){
  .hero__track{transition:none}
}

/* ================= HOME · DESCUBRE NUESTROS DISEÑOS =================
   Valores medidos de producción: tarjetas de 570x700, gap 10px, título en
   Amadine 32px/300 con tracking .15em, pie en Futura 20px a 18px de la foto. */
.disenos{padding:74px 0 30px}
.disenos__inner{max-width:1420px;margin:0 auto;padding:0 20px}
.disenos__title{font-family:var(--display);font-weight:300;font-size:32px;line-height:1.2;letter-spacing:.15em;text-transform:uppercase;color:#555;text-align:center;margin:0 0 34px}
/* Trazo de los titulares en Amadine —lo que Elementor llama «trazo del
   texto»—. Medido en produccion: 0,5px en los oscuros sobre claro y 0,3px en
   el blanco sobre foto, que opticamente ya engorda y con 0,5 se empasta. Es
   lo que hace que Amadine se vea nitida y no lavada. Mismo criterio que
   --arq-trazo en blog.css. */
.disenos__title,.cathero--foto .cathero__title,
.cathero:not(.cathero--foto) .cathero__title{-webkit-text-stroke:var(--ar-trazo,.5px) currentColor}
.cathero--foto .cathero__title,
.cathero:not(.cathero--foto) .cathero__title{--ar-trazo:.3px}
.disenos__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.disenos__card{display:block}
.disenos__img{display:block;aspect-ratio:570/700;overflow:hidden}
.disenos__img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s var(--ease)}
.disenos__card:hover .disenos__img img{transform:scale(1.03)}
.disenos__caption{display:block;margin-top:18px;text-align:center;font-size:20px;line-height:1.2;text-transform:uppercase;color:var(--ink)}
/* flechas y puntos del carrusel. Van ANTES de la media query: si se
   declaran después, su display:none gana por orden y nunca aparecen. */
.disenos__nav{display:none;position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:44px;height:44px;border:none;background:rgba(255,255,255,.55);color:var(--ink);align-items:center;justify-content:center;border-radius:50%}
.disenos__nav--prev{left:4px}
.disenos__nav--next{right:4px}
.disenos__carousel{position:relative}
.disenos__dots{display:none;justify-content:center;gap:8px;padding:16px 0 0}
.disenos__dot{width:7px;height:7px;border-radius:50%;border:1px solid var(--text-3);background:transparent;padding:0;cursor:pointer}
.disenos__dot.is-active{background:var(--ink);border-color:var(--ink)}
@media(max-width:900px){
  /* 28 y no 54: en movil los puntos del hero quedan justo encima y ya dan su
     propio aire, asi que los 54 se leian como un vacio (Carlos Sotelo, 2026-09-29) */
  .disenos{padding:28px 0 20px}
  /* El tamaño es fluido y el tracking baja de .15 a .05em — con 25 caracteres,
     el tracking alto era lo que forzaba el salto de línea. El peso sube de 300
     a 400 para que se lea mejor en pequeño. */
  .disenos__title{font-size:clamp(13px,4.6vw,20px);font-weight:400;letter-spacing:.05em;margin-bottom:26px}
  /* El nowrap va SOLO en «Descubre nuestros diseños», que es para quien se
     escribió. Esta clase la comparten los siete titulares de sección del home,
     y tres de ellos son largos: con nowrap se salían de la pantalla del
     teléfono. */
  .disenos .disenos__title{white-space:nowrap}
  /* Carrusel horizontal mostrando 2, como producción. El desplazamiento lo
     hace el navegador con scroll-snap; el JS solo mueve flechas y puntos. */
  .disenos__grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
  .disenos__grid::-webkit-scrollbar{display:none}
  .disenos__card{flex:0 0 calc(50% - 5px);scroll-snap-align:start}
  .disenos__caption{margin-top:12px;font-size:16px}
  .disenos__nav{display:flex}
  .disenos__dots{display:flex}
}

/* ================= HOME · banda ancha genérica =================
   Reutilizada por "Creamos el arte de hacer verdaderos muebles" (banda), por
   la banda "Diseño con propósito" dentro de Novedades, y por el cierre
   "Creamos junto a ti tu espacio ideal" — pero las tres NO se ven igual:
   medido en producción (solo lectura, 2026-09-23):
   - "Creamos el arte": SIN velo, alto fijo (no aspect-ratio), título en
     Futura PT (no Amadine, es la excepción de las 4 secciones con titular).
   - "Diseño con propósito": <img> plano, aspect-ratio real, sin overlay ni
     texto en el HTML (el texto, si lo tiene, está quemado en la foto).
   - Cierre: SÍ lleva velo (rgba(30,30,28,.4) confirmado), texto alineado a
     la derecha en escritorio y centrado en móvil, botón fantasma (outline
     blanco), no botón relleno. */
.homeband{position:relative;overflow:hidden;isolation:isolate;display:flex;align-items:center}
.homeband__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.homeband__veil{position:absolute;inset:0;background:none}
.homeband__inner{position:relative;z-index:1;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:20px;max-width:760px;margin:0 auto}
.homeband__title.disenos__title{color:#fff;--ar-trazo:.3px;margin:0}
.homeband__text{color:rgba(255,255,255,.88);font-size:16px;line-height:1.55;margin:14px 0 26px;max-width:480px}
/* Dos clases a proposito: .btn va mas abajo en este archivo y con una sola
   clase le ganaba el borde oscuro. */
.btn.homeband__cta{background:transparent;color:#fff;border:1px solid #fff}
/* Banner de showrooms: una foto entera enlazada, sin texto encima —el texto
   va dentro de la imagen—. No lleva min-height ni foto de fondo absoluta como
   las otras bandas: aqui la imagen manda y la seccion toma su alto. */
/* El titular va DENTRO de la seccion, entre los dos banners, igual que en
   produccion: alli el contenedor lleva padding 50 arriba y 60 abajo con el
   titular y el banner dentro. */
.homeband--showrooms{display:block;padding:50px 0 0}
.homeband__rotulo{margin:0 0 34px;padding:0 20px}
.homeband__enlace{display:block}
.homeband__img--suelta{position:static;width:100%;height:auto;object-fit:initial}
.btn.homeband__cta:hover{background:#fff;color:var(--ink);border-color:#fff}

/* --- Titular rotativo de la banda ---
   Medido en produccion (animated-headline de Elementor): Amadine 400, 40px
   escritorio y 18px movil, mayusculas, tracking .15em, blanco, trazo 0,4px,
   animacion "wave". Las cinco frases se apilan en el mismo sitio y solo una
   esta visible; por eso el contenedor reserva la altura de una linea y las
   frases van en posicion absoluta. */
.homeband__rota{
  position:relative;
  display:block;
  margin:.45em 0 0;
  min-height:1.25em;
  font-family:var(--display);
  font-weight:400;
  font-size:40px;
  line-height:1.25;
  letter-spacing:.15em;
  text-transform:uppercase;
  color:#fff;
  -webkit-text-stroke:.4px currentColor;
}
.homeband__frase{
  position:absolute;
  left:0;right:0;top:0;
  opacity:0;
  white-space:nowrap;
}
.homeband__frase.es-activa{position:relative;opacity:1}
/* cada letra entra por separado: es lo que hace la onda */
.homeband__letra{display:inline-block;will-change:transform,opacity}
.homeband__letra--espacio{width:.28em}

@keyframes ar-onda-entra{
  0%{opacity:0;transform:translateY(.38em) scale(.72)}
  60%{opacity:1;transform:translateY(0) scale(1.06)}
  100%{opacity:1;transform:none}
}
@keyframes ar-onda-sale{
  0%{opacity:1;transform:none}
  100%{opacity:0;transform:translateY(-.3em) scale(.72)}
}
.homeband__frase.entra .homeband__letra{animation:ar-onda-entra .52s cubic-bezier(.22,1,.36,1) both}
.homeband__frase.sale .homeband__letra{animation:ar-onda-sale .34s ease-in both}

@media(max-width:767px){
  .homeband__rota{font-size:18px;text-align:center}
  .homeband__frase{white-space:normal}
}

/* Sin animacion: la frase cambia y ya. Mover letras a quien pidio menos
   movimiento es justo lo que no hay que hacer. */
@media(prefers-reduced-motion:reduce){
  .homeband__frase.entra .homeband__letra,
  .homeband__frase.sale .homeband__letra{animation:none}
}

/* --- "Creamos el arte de hacer verdaderos muebles" ---
   min-height (no aspect-ratio): 400px escritorio real, 340px ≤1366px —
   medido en vivo en producción a 1265px de ancho. Título en Futura PT, no
   Amadine: es la excepción entre los 4 titulares de sección del home. */
.homeband--wide{min-height:340px}
.homeband--wide .homeband__title{font-family:var(--sans);font-weight:400;font-size:40px;line-height:1;letter-spacing:normal;text-transform:none;-webkit-text-stroke:0}
@media(min-width:1367px){
  .homeband--wide{min-height:400px}
}
@media(max-width:767px){
  .homeband--wide .homeband__title{font-size:36px}
}

/* --- banda "Diseño con propósito" (dentro de Novedades) ---
   Aspect-ratio real (no min-height), sin velo ni texto HTML: el <img> va
   solo dentro de .homeband, sin .homeband__inner. */
.homeband--novedad{aspect-ratio:1920/485}
@media(max-width:768px){
  .homeband--novedad{aspect-ratio:1080/880}
}

/* --- Cierre "Creamos junto a ti tu espacio ideal" ---
   Velo real confirmado (rgba(30,30,28,.4)), texto a la derecha en
   escritorio (centrado en móvil), botón fantasma. */
.homeband--cierre{min-height:550px}
.homeband--cierre .homeband__veil{background:rgba(30,30,28,.4)}
/* La foto de fondo va a sangre; lo que se queda dentro del ancho maximo de
   la pagina es el contenido, para que el bloque de texto no se pegue al borde
   de la pantalla en monitores anchos. */
.homeband__inner--right{align-items:flex-end;text-align:right;max-width:var(--maxw);padding:60px 60px 60px 20px;margin-inline:auto}
.homeband__text--cierre{font-size:24px;font-weight:300;line-height:1.8;letter-spacing:.02em;max-width:none}
.btn--ghost-light{background:rgba(34,34,34,0);color:#fff;border:1px solid rgba(255,255,255,.95)}
.btn--ghost-light:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
@media(max-width:767px){
  .homeband--cierre{min-height:420px}
  .homeband__inner--right{align-items:center;text-align:center;padding:40px 20px;max-width:520px;margin:0 auto}
}

/* ================= HOME · "Diseño que transforma..." (coleccion) =================
   Medido en producción: contenedor boxed de 1140px (no el 1420 del resto del
   home), las 3 fotos van a tope (gap 0), párrafo al 85% de ancho, 20px,
   color #54595f (--e-global-color-text del kit). Sin caption ni overlay
   sobre las fotos: solo el enlace envolviendo la imagen. */
.coleccion{padding:60px 0}
.coleccion__inner{max-width:1140px;margin:0 auto;padding:0 20px;text-align:center}
/* El titular de esta seccion en UNA sola linea. A 32px necesita 1111px y el
   bloque da 1009 a 1024 de ancho, asi que la letra escala hasta donde haga
   falta y nunca pasa de los 32 originales. Por debajo de 1024 no cabe ni
   encogiendo: ahi vuelve a partirse, que es mejor que una letra ilegible. */
@media(min-width:1024px){
  .coleccion__inner>.disenos__title{white-space:nowrap;font-size:min(32px,2.75vw)}
}

/* 12 y no los 34 del titular compartido: con 34 arriba y 20 abajo, la bajada
   quedaba mas cerca de las fotos que de su propio titulo. */
.coleccion__inner>.disenos__title{margin-bottom:12px}
.coleccion__intro{max-width:85%;margin:0 auto 20px;color:#54595f;font-size:20px;line-height:1.2;font-family:var(--sans)}
.coleccion__carousel{position:relative}
.coleccion__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.coleccion__card{display:block}
.coleccion__img{display:block;aspect-ratio:690/900;overflow:hidden}
.coleccion__img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s var(--ease)}
.coleccion__card:hover .coleccion__img img{transform:scale(1.03)}
.coleccion__nav,.coleccion__dots{display:none}
@media(max-width:900px){
  .coleccion{padding:44px 0}
  .coleccion__intro{font-size:15px;padding:0 10px;margin-bottom:28px}
  .coleccion__grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
  .coleccion__grid::-webkit-scrollbar{display:none}
  .coleccion__card{flex:0 0 78%;scroll-snap-align:start}
  .coleccion__nav{display:flex;position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:44px;height:44px;border:none;background:rgba(255,255,255,.55);color:var(--ink);align-items:center;justify-content:center;border-radius:50%}
  .coleccion__nav--prev{left:4px}
  .coleccion__nav--next{right:4px}
  .coleccion__dots{display:flex;justify-content:center;gap:8px;padding:16px 0 0}
}
.coleccion__dots .coleccion__dot{width:7px;height:7px;border-radius:50%;border:1px solid var(--text-3);background:transparent;padding:0;cursor:pointer}
.coleccion__dots .coleccion__dot.is-active{background:var(--ink);border-color:var(--ink)}

/* ================= HOME · NOVEDADES ================= */
.novedad{padding:60px 0;background:var(--cream)}
/* Dos columnas, como produccion: alli es una fila flex sin hueco con 330 y
   659 sobre 1009 —un tercio y dos tercios— y el titulo centrado en su propia
   columna. El titulo y el boton van juntos a la izquierda y el carrusel con
   sus puntos a la derecha. */
.novedad__inner{max-width:1420px;margin:0 auto;padding:0 20px;text-align:center;display:grid;grid-template-columns:1fr 2fr;align-items:center;gap:0}
.novedad__cab{text-align:center}
.novedad__cab .disenos__title{margin-bottom:18px}
.novedad__cuerpo{min-width:0}
/* La mano indica que se puede arrastrar. Solo con raton: en tactil el dedo ya
   lo dice todo y el cursor no existe. */
@media(hover:hover) and (pointer:fine){
  .is-arrastrable{cursor:grab}
  .is-arrastrable.is-agarrado{cursor:grabbing;user-select:none}
  .is-agarrado a,.is-agarrado img{user-select:none;-webkit-user-drag:none}
}
.novedad__cta{display:inline-block;margin:0 0 36px}
.novedad__carousel{position:relative}
.novedad__grid{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
.novedad__grid::-webkit-scrollbar{display:none}
.novedad__card{flex:0 0 62%;scroll-snap-align:start;display:block}
.novedad__img{display:block;aspect-ratio:1200/600;overflow:hidden}
.novedad__img img{width:100%;height:100%;object-fit:cover;display:block}
/* caption BAJO la foto, como en producción (no overlay) */
.novedad__caption{display:block;margin-top:18px;text-align:center;font-size:20px;line-height:1.2;text-transform:uppercase;color:var(--ink);font-family:var(--sans)}
.novedad__nav{position:absolute;top:44%;transform:translateY(-50%);z-index:2;width:44px;height:44px;border:none;background:rgba(255,255,255,.55);color:var(--ink);display:flex;align-items:center;justify-content:center;border-radius:50%}
.novedad__nav--prev{left:4px}
.novedad__nav--next{right:4px}
.novedad__dots{display:flex;justify-content:center;gap:8px;padding:16px 0 0}
.novedad__dots .novedad__dot{width:7px;height:7px;border-radius:50%;border:1px solid var(--text-3);background:transparent;padding:0;cursor:pointer}
.novedad__dots .novedad__dot.is-active{background:var(--ink);border-color:var(--ink)}
@media(min-width:901px){
  .novedad__card{flex:0 0 38%}
}
@media(max-width:900px){
  .novedad{padding:44px 0}
  /* En el telefono no hay ancho para dos columnas: el titulo arriba y el
     carrusel debajo, como estaba. */
  .novedad__inner{grid-template-columns:1fr}
}

/* ================= HOME · "Conoce nuestros Showrooms" =================
   Sin banners propios: se alimenta de aristas2026_get_showrooms(), el mismo
   CPT que /showrooms/. */
@media(max-width:900px){
}

/* ================= HOME · DESCUBRE =================
   Medido en producción: NO es overlay sobre la foto — la foto va arriba con
   una sombra sutil (box-shadow, no borde) y el texto + botón van DEBAJO,
   como widgets aparte. El botón es relleno oscuro sólido, sin subrayado
   (distinto del botón fantasma de NOVEDADES/cierre). */
.descubre{padding:60px 0}
.descubre__inner{max-width:1420px;margin:0 auto;padding:0 20px}
.descubre__carousel{position:relative}
.descubre__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:34px}
.descubre__nav,.descubre__dots{display:none}
.descubre__card{display:flex;flex-direction:column;align-items:center;text-align:center}
.descubre__imglink{display:block;width:100%}
.descubre__img{display:block;aspect-ratio:800/976;overflow:hidden;box-shadow:0 0 9px rgba(0,0,0,.21)}
.descubre__img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s var(--ease)}
.descubre__card:hover .descubre__img img{transform:scale(1.04)}
.descubre__ficha{display:block;margin:15px 0 12px;font-size:19px;font-weight:500;color:var(--ink);line-height:1.3}
.descubre__btn{display:inline-block;background:var(--ink);color:#fff;padding:12px 22px;font-size:13px;letter-spacing:.08em;text-transform:uppercase;font-weight:500;transition:.2s var(--ease)}
.descubre__btn:hover{background:var(--charcoal)}
@media(max-width:900px){
  .descubre{padding:44px 0}
  /* Carrusel de una ficha por vista, como produccion. El desplazamiento lo
     hace el navegador con scroll-snap; el JS solo mueve flechas y puntos. */
  .descubre__grid{display:flex;grid-template-columns:none;gap:10px;margin-top:24px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
  .descubre__grid::-webkit-scrollbar{display:none}
  .descubre__card{flex:0 0 100%;scroll-snap-align:start}
  .descubre__nav{display:flex;position:absolute;top:38%;transform:translateY(-50%);z-index:2;width:44px;height:44px;border:none;background:rgba(255,255,255,.55);color:var(--ink);align-items:center;justify-content:center;border-radius:50%}
  .descubre__nav--prev{left:4px}
  .descubre__nav--next{right:4px}
  .descubre__dots{display:flex;justify-content:center;gap:8px;margin-top:18px}
  .descubre__dot{width:7px;height:7px;border-radius:50%;border:none;background:#cfcac2;padding:0}
  .descubre__dot.is-active{background:var(--ink)}
  .descubre__ficha{font-size:16px;margin:12px 0 10px}
  .descubre__btn{padding:10px 16px;font-size:12px}
}

/* ================= BREADCRUMB ================= */
.breadcrumb{border-bottom:1px solid var(--border);background:var(--white)}
.breadcrumb .wrap{display:flex;gap:10px;align-items:center;padding-top:14px;padding-bottom:14px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-3)}
.breadcrumb a:hover{color:var(--accent)}
.breadcrumb em{color:var(--ink);font-style:normal}

/* ---- Carrito y pago (WooCommerce clásico) ----
   Los botones vienen sin estilo del plugin: fondo gris lila y el principal en
   el morado de WooCommerce con el texto en el acento, 1,23:1 de contraste.
   Se les pone el mismo lenguaje que .btn del tema. */
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce a.checkout-button{
  font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;line-height:1.2;padding:16px 26px;border-radius:3px;
  border:1px solid var(--ink);background:transparent;color:var(--ink);
  transition:background-color .3s var(--ease),color .3s var(--ease);
}
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover{background:var(--ink);color:#fff}

/* el principal: el que lleva a pagar */
.woocommerce a.button.alt,
.woocommerce button.button.alt,
.woocommerce input.button.alt,
.woocommerce a.checkout-button{background:var(--ink);color:#fff;border-color:var(--ink)}
.woocommerce a.button.alt:hover,
.woocommerce button.button.alt:hover,
.woocommerce input.button.alt:hover,
.woocommerce a.checkout-button:hover{background:var(--charcoal);color:#fff;border-color:var(--charcoal)}

/* --- Maqueta del carrito --- */
/* Los dos botones de la fila de acciones: mismo tamano, mismo borde, misma
   letra. Solo cambia el relleno —uno en linea y otro macizo—, que es lo que
   dice cual es la accion principal.

   Van anclados a body: woocommerce.css pinta .button.alt:disabled con la
   misma especificidad que una regla nuestra normal, y a igualdad gana la que
   se encole despues. Con body delante no hay empate que resolver, y de paso
   se tapa el morado de marca del estado deshabilitado. */
body.woocommerce-cart .cart-actions__continue,
body.woocommerce-cart .cart-actions__update,
body.woocommerce-cart .cart-actions__update:disabled{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  box-sizing:border-box;width:220px;height:48px;padding:0 16px;
  font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:.12em;
  line-height:1;text-transform:uppercase;text-decoration:none;
  border:1px solid var(--ink);border-radius:0;
  transition:background-color .3s var(--ease),color .3s var(--ease);
}
/* en linea: la accion secundaria */
body.woocommerce-cart .cart-actions__continue{background:transparent;color:var(--ink)}
body.woocommerce-cart .cart-actions__continue:hover{background:var(--ink);color:#fff}
/* macizo: la principal de esta fila */
/* !important a proposito: woocommerce.css impone el morado de su marca a
   este boton desde varias reglas y cualquiera que se escape lo devuelve.
   Acotado a los dos botones del carrito, no a los botones del tema. */
body.woocommerce-cart .cart-actions__update,
body.woocommerce-cart .cart-actions__update:disabled,
body.woocommerce-cart .cart-actions__update:focus{
  background:var(--ink) !important;color:#fff !important;border-color:var(--ink) !important;
  opacity:1 !important;
}
/* apagado: el mismo negro en gris, para que se note que aun no hace nada */
body.woocommerce-cart .cart-actions__update:disabled{
  background:var(--text-3) !important;border-color:var(--text-3) !important;cursor:default;
}
body.woocommerce-cart .cart-actions__update:not(:disabled):hover{background:var(--charcoal) !important;border-color:var(--charcoal) !important}

/* .pagina__inner limita sus hijos a 760px: es la medida de lectura de una
   pagina de texto, no la de una tabla con cinco columnas mas los totales al
   lado. En carrito y pago se suelta. */
/* !important a proposito: la regla de los 760px (arriba, .pagina__inner > *:not(...)) gana
   especificidad con cada excepcion que se le agrega (.landing__grid, .ambiente, .comparador...),
   y el 2026-10-06 ya le ganaba a esta: el carrito quedo encajonado en 760px con los totales
   montados sobre la tabla. Asi no vuelve a pasar por mas :not() que se le sumen. */
.woocommerce-cart .pagina__inner > *:not(.alignfull):not(.alignwide),
.woocommerce-checkout .pagina__inner > *:not(.alignfull):not(.alignwide){max-width:1160px !important}

/* Dos columnas en escritorio: la tabla manda y los totales van al lado. Los
   avisos cruzan las dos, o saldrian encajonados en una columna. */
@media(min-width:900px){
  .woocommerce-cart .woocommerce{
    display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:40px;align-items:start;
  }
  .woocommerce-cart .woocommerce-notices-wrapper{grid-column:1/-1}
  .woocommerce-cart .woocommerce-cart-form{grid-column:1;margin:0}
  .woocommerce-cart .cart-collaterals{grid-column:2;width:auto;margin:0}
  .woocommerce-cart .cart-collaterals .cart_totals{width:auto;float:none}
}

/* Las variaciones: etiqueta y valor en la misma linea. Es un <dl>, y por
   defecto <dt> y <dd> van en filas distintas. */
.woocommerce .variation{
  display:block;margin:8px 0 0;font-size:14px;line-height:1.5;color:var(--text-2);
}
/* misma fuente y mismo tamano: lo que distingue la etiqueta del valor es el
   color, no un peso distinto. En versalitas: pedido del cliente ("COLOR DE
   MADERA: NORDICO") — con text-transform, no tocando el dato (sigue legible
   en minúscula/inicial en cualquier otro sitio donde se use). */
.woocommerce .variation{text-transform:uppercase;letter-spacing:.01em}
.woocommerce .variation dt{display:inline;margin:0;font-weight:400;color:var(--text-3)}
.woocommerce .variation dt::after{content:" "}
.woocommerce .variation dd{display:inline;margin:0;color:var(--ink)}
/* hereda todo: si no, la regla de parrafo de .pagina__inner le mete 17px y
   gris, y el valor sale mas grande que su etiqueta */
.woocommerce .variation dd p{
  display:inline;margin:0;font-size:inherit;line-height:inherit;
  color:inherit;font-weight:inherit;
}
/* el salto va DESPUES del valor: asi el par etiqueta+valor viaja junto */
.woocommerce .variation dd::after{content:"";display:block}

/* Sin lineas verticales ni esquinas redondeadas: solo las horizontales, que
   son las que separan una linea de pedido de la siguiente. Las verticales
   encajonan y no aportan. */
.woocommerce table.shop_table,
.woocommerce .cart_totals table{
  border:0;border-radius:0;border-collapse:collapse;width:100%;
}
.woocommerce table.shop_table th,
.woocommerce table.shop_table td,
.woocommerce .cart_totals table th,
.woocommerce .cart_totals table td{
  border-left:0;border-right:0;border-top:0;
  border-bottom:1px solid var(--border);
}
.woocommerce table.shop_table tr:last-child td,
.woocommerce .cart_totals table tr:last-child td,
.woocommerce .cart_totals table tr:last-child th{border-bottom:0}

/* la tabla, con aire: venia pegada */
.woocommerce table.shop_table td,
.woocommerce table.shop_table th{padding:16px 12px;vertical-align:middle}
/* sin radio: es una foto, la regla de marca de "nunca bordes redondeados" */
.woocommerce table.shop_table td.product-thumbnail img{width:72px;height:auto;max-width:none;border-radius:0}
/* pedido del cliente: sin subrayado en el nombre del producto */
.woocommerce table.shop_table .product-name a{
  font-family:var(--sans);font-size:16px;font-weight:500;line-height:1.4;
  color:var(--ink);text-decoration:none;
}
.woocommerce table.shop_table .product-name a:hover{color:var(--accent)}
.woocommerce table.shop_table td.product-name,
.woocommerce table.shop_table th.product-name{width:42%}
.woocommerce table.shop_table td.product-thumbnail{width:90px}

/* el enlace del nombre del producto y los de la tabla no son botones */
.woocommerce .cart_totals h2{font-family:var(--sans);font-size:15px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}

/* --- Encabezados de columna: mayúscula, misma altura, mismo estilo.
   PRODUCTO queda a la izquierda (así vienen thumbnail/nombre); PRECIO y
   CANTIDAD centradas porque su contenido va centrado; SUBTOTAL a la derecha
   porque el precio del subtotal también va a la derecha. La alineación del
   body pesa más (3 clases) que esta regla general y por eso puede ir
   despues sin pisarla. */
.woocommerce-cart table.shop_table thead th{
  font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--text-3);text-align:left;vertical-align:middle;
}
.woocommerce-cart table.shop_table th.product-price,
.woocommerce-cart table.shop_table td.product-price,
.woocommerce-cart table.shop_table th.product-quantity,
.woocommerce-cart table.shop_table td.product-quantity{text-align:center}
.woocommerce-cart table.shop_table th.product-subtotal,
.woocommerce-cart table.shop_table td.product-subtotal{text-align:right}
.woocommerce-cart table.shop_table td.product-price{color:var(--text-2);font-size:15px}
.woocommerce-cart table.shop_table td.product-subtotal{color:var(--ink);font-weight:600;font-size:15px}

/* anchos: la columna de producto manda, remove/precio/cantidad/subtotal son
   angostas y fijas para que no bailen entre filas */
.woocommerce-cart table.shop_table td.product-remove{width:30px;padding-right:0}
.woocommerce-cart table.shop_table td.product-thumbnail{width:88px}
.woocommerce-cart table.shop_table td.product-price,
.woocommerce-cart table.shop_table th.product-price{width:110px}
.woocommerce-cart table.shop_table td.product-quantity,
.woocommerce-cart table.shop_table th.product-quantity{width:150px}
.woocommerce-cart table.shop_table td.product-subtotal,
.woocommerce-cart table.shop_table th.product-subtotal{width:110px}

/* Quitar del carrito: (x) en un círculo a la izquierda de la miniatura,
   fuera de la columna del producto — es su propia <td>, como en la
   plantilla del plugin. Circular a propósito (así lo pidió el cliente);
   la regla de "sin bordes redondeados" es para <img>, esto es un control. */
.woocommerce-cart .cart-remove{
  display:flex;align-items:center;justify-content:center;
  width:26px;height:26px;border:1px solid var(--border);border-radius:50%;
  font-size:16px;line-height:1;color:var(--text-3);transition:.2s var(--ease);
}
.woocommerce-cart .cart-remove:hover{border-color:var(--ink);color:var(--ink);background:var(--cream)}

/* Cantidad: − / + a los lados del número. El input nativo pierde sus
   flechas (las reemplazan los botones) pero sigue siendo el mismo
   input.qty que WooCommerce necesita para el POST y para habilitar
   "Actualizar carrito". */
.woocommerce-cart .quantity{display:inline-flex;align-items:stretch;border:1px solid var(--border)}
.woocommerce-cart .quantity .qty{
  width:42px;border:0;text-align:center;font-family:var(--sans);font-size:15px;
  color:var(--ink);padding:0;-moz-appearance:textfield;background:var(--white);
}
.woocommerce-cart .quantity .qty::-webkit-outer-spin-button,
.woocommerce-cart .quantity .qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.woocommerce-cart .qty-btn{
  width:30px;border:0;background:var(--cream);color:var(--ink);font-size:16px;
  line-height:1;cursor:pointer;transition:.2s var(--ease);font-family:var(--sans);
}
.woocommerce-cart .qty-btn:hover{background:var(--border)}
.woocommerce-cart .quantity .qty-btn--minus{border-right:1px solid var(--border)}
.woocommerce-cart .quantity .qty-btn--plus{border-left:1px solid var(--border)}

/* Fila de acciones: mismo ritmo vertical que las filas de producto (16px
   arriba/abajo por celda = 32px de aire en cada borde, ver ".shop_table td,
   th" arriba). Seguir comprando va "en línea" (sin caja): se le quita el
   fondo/borde del .button de base y queda como un enlace con flecha. */
.woocommerce-cart table.shop_table tr.cart-actions-row td{border-bottom:0}
.woocommerce-cart .cart-actions{display:flex;align-items:center;gap:24px;flex-wrap:wrap}
/* selector con "a." (no solo la clase): la regla base ".woocommerce a.button"
   ya trae un elemento de tipo en la cadena, así que empata en especificidad
   por clases y hace falta el mismo tipo para ganar el desempate por orden */
.woocommerce-cart a.cart-actions__continue:hover{background:transparent;color:var(--accent);border-color:transparent}

/* Botones cuadrados: en esta página ninguno lleva esquina redondeada (ni
   siquiera Finalizar compra, que hereda .button.alt con radio 3px en el
   resto del sitio). Solo acá, para no afectar otros usos de estas mismas
   clases (p.ej. el aviso "añadido al carrito" fuera del carrito). */
.woocommerce-cart a.button,
.woocommerce-cart button.button,
.woocommerce-cart input.button{border-radius:0}

/* "Actualizar carrito" arranca deshabilitado (JS nativo de WooCommerce,
   cart.js) y el propio WooCommerce le pone SU morado de marca al estado
   :disabled con una regla más específica que la nuestra (repite
   ".woocommerce button.button.alt" + :disabled) — sin esto se ve la franja
   morada de fábrica en vez del negro del tema. Mismo selector para empatar
   en especificidad y ganar por orden. */

/* Finalizar compra a todo el ancho de la columna de totales */
.woocommerce-cart .wc-proceed-to-checkout{margin-top:24px}
.woocommerce-cart .wc-proceed-to-checkout .checkout-button{
  display:block;width:100%;box-sizing:border-box;text-align:center;
}

/* Cupón: debajo de "Finalizar compra", en la misma columna — no junto a
   "Actualizar carrito" como en la plantilla clásica. */
.woocommerce-cart .cart-coupon{margin-top:32px;padding-top:32px;border-top:1px solid var(--border)}
.woocommerce-cart .cart-coupon__title{
  font-family:var(--sans);font-size:15px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;margin:0 0 14px;color:var(--ink);
}
.woocommerce-cart .cart-coupon__row{display:flex}
.woocommerce-cart .cart-coupon__input{
  flex:1;min-width:0;height:48px;border:1px solid var(--border);border-right:0;
  padding:0 14px;font-family:var(--sans);font-size:14px;color:var(--ink);border-radius:0;
}
.woocommerce-cart button.cart-coupon__apply{
  flex:none;height:48px;display:inline-flex;align-items:center;padding:0 20px;
}

/* aviso de cupón (error/éxito), si aparece, con el mismo aire que el resto */
.woocommerce-cart .cart-coupon .woocommerce-error,
.woocommerce-cart .cart-coupon .woocommerce-message{margin-top:12px}

/* Totales del carrito: el H2 ya sale en versalitas (regla de arriba); acá
   se le da su ritmo respecto al bloque de cupón que sigue */
.woocommerce-cart .cart-collaterals .cart_totals{margin-bottom:0}

/* Avisos y carrito vacío: hijos directos de .woocommerce como el resto, así
   que también caen en la rejilla de dos columnas — se sueltan a lo ancho */
.woocommerce-cart .woocommerce-notices-wrapper,
.woocommerce-cart .cart-empty-wrap{grid-column:1/-1}
.woocommerce-cart .cart-empty-wrap{text-align:center;padding:60px 20px}
.woocommerce-cart .cart-empty-wrap .cart-empty__cta{margin-top:20px}

/* Enlaces de la tabla del carrito sin subrayado y el nombre en tinta. Con !important porque la
   regla de enlaces de .pagina__inner (a:not(...) con siete selectores) les gana a estas por
   especificidad y crece cada vez que se le agrega una excepcion (2026-10-06). */
.woocommerce-cart table.shop_table a:not(.button){border-bottom:0 !important}   /* :not(.button): «Seguir comprando» es un <a> con borde propio */
.woocommerce-cart table.shop_table .product-name a{color:var(--ink) !important}
.woocommerce-cart table.shop_table .product-name a:hover{color:var(--accent-ink) !important}
/* Titulos de totales y cupon: 15px en versalitas, como estaba disenado; la regla de h2 de
   .pagina__inner (h2:not(...) con tres excepciones) los subia a 26px; !important por lo mismo. */
body.woocommerce-cart .pagina__inner .cart-collaterals h2{font-size:15px !important;line-height:1.3 !important;letter-spacing:.12em}

/* ================= RESPONSIVE CARRITO (<=768px) =================
   Se apoya en table.shop_table_responsive de WooCommerce: oculta el thead,
   convierte cada <tr> en bloque y cada <td> en "Etiqueta: valor" via
   attr(data-title). Solo se retocan estilo y estructura fina, no la
   mecánica (ya viene probada). Mismo punto de quiebre que exige el encargo
   verificar (768px). */
@media(max-width:768px){
  .woocommerce-cart table.shop_table_responsive tr.cart_item{
    display:flex;flex-wrap:wrap;border-bottom:1px solid var(--border);padding:16px 0;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td{
    display:flex;align-items:center;padding:4px 0;border-bottom:0;text-align:left!important;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td::before{
    font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.08em;
    text-transform:uppercase;color:var(--text-3);float:none;margin-right:8px;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-remove{
    order:1;width:auto;padding:0 10px 0 0;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-thumbnail{
    order:2;width:auto;display:flex!important;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-thumbnail::before{display:none}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-thumbnail img{width:64px}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-name{
    order:3;flex:1 1 100%;width:100%;margin-top:12px;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-name::before{display:none}
  /* 100% cada una y no a tercios: a 33% el rótulo + el selector -/+ de
     cantidad no caben en el mismo renglón sin desbordar en 420px */
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-price,
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-quantity,
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-subtotal{
    flex:1 1 100%;width:100%;justify-content:space-between;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-price{order:4}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-quantity{order:5}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-subtotal{order:6}

  .woocommerce-cart table.shop_table tr.cart-actions-row td{padding-top:20px}
  /* en columna: WC mete ".actions .button{width:100%}" a este ancho (regla
     nativa de shop_table_responsive) y una fila con dos botones al 100%
     no cabe — se apilan a propósito en vez de pelear con esa regla */
  .woocommerce-cart .cart-actions{flex-direction:column;align-items:stretch;gap:14px}

  .woocommerce-cart table.shop_table_responsive tr.cart_item:nth-child(2n) td{background-color:transparent}

  .woocommerce-cart .cart-coupon__row{flex-direction:column;gap:10px}
  .woocommerce-cart .cart-coupon__input{border-right:1px solid var(--border)}

  /* Fila de producto ordenada como ficha (2026-10-06): foto a la izquierda, nombre y opciones a
     su lado, la (x) arriba a la derecha; precio, cantidad y subtotal debajo, a lo ancho. Antes la
     (x) y la foto iban solas en un renglon y el nombre quedaba al lado de sus opciones. */
  .woocommerce-cart table.shop_table_responsive tr.cart_item{position:relative;align-items:flex-start;padding:20px 0}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-thumbnail{order:1;padding:0}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-thumbnail img{width:84px}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-name{
    order:2;display:block;flex:1 1 0;width:auto;min-width:0;margin:0;padding:0 34px 0 14px;
  }
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-name .variation{margin-top:6px;font-size:13px}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-remove{position:absolute;top:20px;right:0;padding:0}
  .woocommerce-cart table.shop_table_responsive tr.cart_item td.product-price{margin-top:14px}
  /* la fila de botones va sin la franja gris de las filas pares de WooCommerce */
  .woocommerce-cart table.shop_table_responsive tr td.actions{background-color:transparent}
  body.woocommerce-cart table.shop_table td.actions .cart-actions .button{
    display:flex;align-items:center;justify-content:center;gap:8px;text-align:center;width:100%;
  }
}

/* ================= CONFIG GRID ================= */
.config__grid{display:grid;grid-template-columns:1.12fr .88fr;align-items:start}
.config__grid>*{min-width:0}
/* align-items:flex-start (antes center): la foto y las miniaturas quedan
   arriba en vez de flotando en el centro de la columna. */
/* La foto se estira hasta el alto del panel (align-self), NO hasta el de la
   ventana. Antes llevaba min-height:calc(100vh - 94px) y eso dejaba un hueco
   blanco debajo que CRECIA con la pantalla: 126px a 1366 y 176px a 1920,
   porque el panel mide siempre lo mismo y la foto se estiraba con la ventana
   (Carlos Sotelo, 2026-09-29).

   De paso el sticky empieza a servir: con la altura de la ventana la foto era
   igual de alta que su contenedor y no tenia margen para pegarse, asi que el
   position:sticky no hacia nada. */
.stage{position:sticky;top:94px;background:var(--white);align-self:stretch;display:flex;align-items:flex-start;border-right:1px solid var(--border);min-width:0}
/* padding lateral reducido para que la foto ocupe más ancho de su columna */
.stage__inner{width:100%;min-width:0;padding:44px 28px}
/* La proporción TIENE que ser la de las fotos reales de Aristas (1024x614).
   Estaba en 2752/1536, que es más apaisada, así que el marco reservaba menos
   alto del que ocupa la imagen y el overflow:hidden le recortaba 25px por
   abajo. Se mantiene el aspect-ratio (y no height:auto) para reservar el
   espacio antes de que cargue la imagen y no provocar saltos de layout. */
.stage__frame{position:relative;aspect-ratio:1024/614;width:100%}
.stage__img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .55s var(--ease)}
.stage__img.is-active{opacity:1}
.stage__shadow{position:absolute;left:12%;right:12%;bottom:7%;height:26px;background:radial-gradient(ellipse at center,rgba(42,36,32,.16),transparent 70%);filter:blur(3px);z-index:-1}
.stage__chip{position:absolute;left:10px;bottom:6px;margin:0;display:flex;align-items:center;gap:10px;background:rgba(255,255,255,.86);backdrop-filter:blur(6px);border:1px solid var(--border);border-radius:99px;padding:6px 16px 6px 6px;box-shadow:0 8px 24px -14px rgba(42,36,32,.5)}
.stage__chip-tex{width:34px;height:34px;border-radius:50%;background-size:cover;background-position:center;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}
.stage__chip figcaption{font-size:12px;letter-spacing:.06em;color:var(--espresso);font-weight:500}
.stage__caption{margin-top:26px;text-align:center}
.stage__live{font-size:16px;font-weight:600;letter-spacing:.02em;color:var(--espresso)}
.stage__hint{font-size:14px;color:var(--text-2);letter-spacing:.03em;margin-top:10px}
.stage__hint .linky{font-size:15px;font-weight:600;color:var(--accent-ink)}
.stage__hint .linky:hover{color:var(--accent)}
/* Ver en ambiente (modo Sims) */
.ambient{position:absolute;inset:0;z-index:6;background:var(--bg-light);border-radius:4px;overflow:hidden}
.ambient[hidden]{display:none}
.ambient__img{width:100%;height:100%;object-fit:cover;display:block;animation:ambFade .5s var(--ease)}
@keyframes ambFade{from{opacity:.4}to{opacity:1}}
.ambient__close{position:absolute;top:12px;right:12px;background:rgba(255,255,255,.9);border:1px solid var(--border);border-radius:99px;padding:8px 16px;font-size:12px;letter-spacing:.05em;text-transform:uppercase;font-weight:600;color:var(--espresso);backdrop-filter:blur(6px)}
.ambient__close:hover{background:#fff}
.ambient__nav{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.9);border:1px solid var(--border);font-size:20px;color:var(--espresso);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);transition:.25s var(--ease)}
.ambient__nav:hover{background:#fff}
.ambient__nav--prev{left:12px}.ambient__nav--next{right:12px}
.ambient__dots{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);display:flex;gap:8px}
.ambient__dot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.65);border:none;box-shadow:0 0 0 1px rgba(0,0,0,.15)}
.ambient__dot.is-sel{background:var(--espresso)}

/* ================= PANEL ================= */
/* 28 abajo y no 48: ese aire se sumaba al hueco antes del carrusel */
.panel__inner{padding:36px 60px 14px;max-width:660px}
.ptitle{font-weight:600;font-size:40px;line-height:1.02;letter-spacing:-.02em;margin:0 0 16px}
.price{display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.price__label{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3);font-weight:500}
.price__amount{font-size:26px;font-weight:600;color:var(--espresso);transition:opacity .3s var(--ease)}
.price__amount.flash{opacity:.28}
.pintro{color:var(--text-2);margin:0 0 8px}
.pintro strong{color:var(--accent-ink);font-weight:600}

/* Resumen de configuración (vivo + navegable) */
.summary{display:flex;margin-bottom:30px;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.sumitem{flex:1;display:flex;flex-direction:column;gap:4px;align-items:flex-start;text-align:left;padding:12px 16px;background:var(--white);border:none;border-right:1px solid var(--border);transition:.25s var(--ease)}
.sumitem:last-child{border-right:none}
.sumitem:hover{background:var(--cream)}
.sumitem__k{font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(--text-3);font-weight:600}
.sumitem__v{font-size:14px;font-weight:500;color:var(--ink);transition:color .2s var(--ease)}
.sumitem.flash .sumitem__v{color:var(--accent)}

/* Groups */
.group{padding:16px 0}
.group + .group{border-top:1px solid var(--border)}
.pintro + .group{padding-top:4px}
.group__head{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.group__label{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink);font-weight:600}
.group__value{margin-left:auto}

/* --- pasos numerados del configurador ---
   Badge en el canalón de cada fila: el completado muta a ✓ negro, el primero
   pendiente va negro relleno con su número, los siguientes gris contorno. */
.step-num{flex:0 0 auto;width:23px;height:23px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;line-height:1;border:1.5px solid var(--border);background:var(--white);color:var(--text-3);transition:.2s var(--ease)}
.step-num.active,.step-num.done{background:var(--ink);color:var(--white);border-color:var(--ink)}
.step-num svg{width:13px;height:13px;stroke:currentColor;stroke-width:3;fill:none}
@media(min-width:1025px){.step-num{width:25px;height:25px;font-size:14px}}

.steps{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0 2px;font-size:14px}
.steps__label{letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:var(--ink)}
.steps__count{color:var(--text-3);font-variant-numeric:tabular-nums}
/* `justify-content:flex-start`: la fila base usa space-between para separar
   «PERSONALIZALO · PASO N DE M» del contador «0 / 3», pero al completarse
   solo quedan dos hijos —el tic y el mensaje— y el space-between los
   mandaba a extremos opuestos, con un vacio enorme en medio (Carlos,
   2026-09-25). Juntos quedan a los 12px del gap, como las filas de abajo. */
.steps--done{align-items:flex-start;justify-content:flex-start}
.steps__check{flex:0 0 auto;width:23px;height:23px;border-radius:50%;background:var(--ink);display:inline-flex;align-items:center;justify-content:center}
.steps__check svg{width:13px;height:13px;stroke:var(--white);stroke-width:3;fill:none}
.steps__msg{color:var(--ink);line-height:1.5}
.steps__add{text-decoration:underline;text-underline-offset:2px;font-weight:600}
.steps__add:hover{color:var(--accent)}
.group__value{font-size:16px;color:var(--ink);font-weight:500}
.group__meta{font-size:13px;color:var(--text-3);margin:9px 0 0}
.group__meta--note{color:var(--clay)}

/* Pills (tamaño) */
.pills{display:flex;gap:12px;flex-wrap:wrap}
.pill{border:1px solid var(--border);background:var(--white);padding:12px 22px;border-radius:99px;font-size:14px;color:var(--text-2);transition:.28s var(--ease)}
.pill:hover{border-color:var(--taupe);color:var(--ink)}
.pill.is-sel{background:var(--espresso);border-color:var(--espresso);color:#fff}

/* Trigger de tela (abre el panel) */
/* Oculta hasta que se elige algo: la clase `is-elegido` la pone el render
   de producto.js. Ver el porque en ese archivo. Si el JS no corriera, la
   tarjeta simplemente no aparece y se sigue eligiendo por las bolitas. */
.trigger{display:none;align-items:center;gap:16px;width:100%;text-align:left;background:var(--cream);border:1px solid var(--border);border-radius:8px;padding:12px 16px;transition:.28s var(--ease)}
.trigger.is-elegido{display:flex}
.trigger:hover{border-color:var(--taupe);background:#f3ece1}
.trigger__thumb{width:52px;height:52px;border-radius:8px;background-size:cover;background-position:center;flex:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.trigger__text{flex:1;display:flex;flex-direction:column;gap:3px}
.trigger__text strong{font-size:16px;font-weight:600;color:var(--espresso)}
.trigger__text small{font-size:13px;color:var(--text-3)}
.trigger__arrow{color:var(--accent);font-size:18px}

/* Dots / bolitas */
.dots{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px;align-items:center}
.dot{width:38px;height:38px;border-radius:50%;background-size:cover;background-position:center;border:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);position:relative;transition:transform .22s var(--ease)}
.dot::after{content:"";position:absolute;inset:-5px;border-radius:50%;border:1.5px solid transparent;transition:.22s var(--ease)}
.dot:hover{transform:translateY(-2px)}
.dot.is-sel::after{border-color:var(--accent)}
/* enlace sutil "Ver todas las telas" (reemplaza el antiguo círculo +N) */
.fabric-all{align-self:center;margin-left:6px;background:none;border:0;padding:2px 0;cursor:pointer;
  font-family:inherit;font-size:13px;font-weight:600;letter-spacing:.02em;color:var(--text-2);
  border-bottom:1px solid var(--border);transition:color .22s var(--ease),border-color .22s var(--ease)}
.fabric-all:hover{color:var(--accent);border-bottom-color:var(--accent)}
.fabric-all:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.dot.is-disabled{opacity:.3;pointer-events:none;filter:grayscale(1)}

/* CTA */
.cta{display:flex;gap:12px;margin:22px 0 0;flex-wrap:wrap}
.btn{border:1px solid var(--espresso);padding:16px 26px;border-radius:3px;font-size:13px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;transition:.3s var(--ease)}
.btn--primary{background:var(--espresso);color:#fff;flex:1;min-width:230px}
.btn--primary:hover{background:var(--accent-ink);border-color:var(--accent-ink)}
.btn--ghost{background:transparent;color:var(--espresso);border-color:var(--border)}
.btn--ghost:hover{border-color:var(--espresso)}

/* Fit / m² */
.fit{margin-top:22px;padding:18px 20px;background:var(--cream);border-radius:8px}
.fit__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.fit__title{font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:600}
.fit__verdict{font-size:13px;font-weight:700;letter-spacing:.03em;padding:3px 11px;border-radius:99px;background:var(--sand);color:var(--accent-ink)}
.fit__verdict:empty{display:none}
.fit__presets{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.fit__preset{border:1px solid var(--border);background:var(--white);border-radius:99px;padding:8px 15px;font-size:13px;color:var(--text-2);transition:.25s var(--ease)}
.fit__preset:hover{border-color:var(--taupe)}
.fit__preset.is-sel{background:var(--accent);border-color:var(--accent);color:#fff}
.fit__scale{background:transparent;padding:0}
/* mini plano (vista de planta): tu sala vista desde arriba, el sofá contra la pared */
.fit__plan{position:relative;height:130px;overflow:hidden;border-radius:5px;
  background:var(--white);border:1px solid var(--border);border-top:2px solid var(--taupe);
  background-image:linear-gradient(var(--border) 1px,transparent 1px),linear-gradient(90deg,var(--border) 1px,transparent 1px);
  background-size:26px 26px;background-position:center}
.fit__plan.is-empty{filter:grayscale(.35) opacity(.9)}
.fit__wall{position:absolute;top:7px;left:50%;transform:translateX(-50%);z-index:3;white-space:nowrap;
  font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--text-2);background:var(--white);padding:1px 9px;border-radius:99px}
.fit__sofa{position:absolute;top:32px;height:56px;z-index:2;background:var(--clay);border-radius:4px;
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:600;letter-spacing:.03em;white-space:nowrap;
  box-shadow:0 4px 12px rgba(0,0,0,.14);transition:left .5s var(--ease),width .5s var(--ease),background .3s var(--ease)}
.fit__gap{position:absolute;top:53px;z-index:3;white-space:nowrap;font-size:12px;color:var(--text-3);background:var(--white);padding:0 5px;border-radius:3px}
.fit__gap:empty{display:none}
.fit__gap--l{left:9px}
.fit__gap--r{right:9px}
.fit__floor{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);z-index:1;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3);opacity:.65}
.fit__hint{font-size:13px;color:var(--text-3);margin:12px 0 0}

/* Trust */
.trust{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:24px 0 0;padding:20px 0 0;border-top:1px solid var(--border)}
.trust li{display:flex;flex-direction:column;gap:3px;text-align:center;align-items:center}
.trust strong{font-size:13px;font-weight:600}
.trust span{font-size:12px;color:var(--text-3)}

/* ================= SPECS ================= */
.specs{padding:80px 40px 20px}
.specs__table{width:100%;border-collapse:collapse;margin-top:30px}
.specs__table tr{border-top:1px solid var(--border)}
.specs__table tr:last-child{border-bottom:1px solid var(--border)}
.specs__table th{text-align:left;width:230px;padding:18px 0;font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(--text-3);font-weight:600;vertical-align:top}
.specs__table td{padding:18px 0;color:var(--text-2);font-size:15px}

/* ================= CROSS-SELL ================= */
.cross{padding:70px 40px 100px}
.cross__head{margin-bottom:34px}
.cross__dots{display:none}
.cross__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:26px}
.cross-card{border:0;border-radius:0;overflow:hidden;transition:.35s var(--ease);background:transparent}
.cross-card:hover{transform:translateY(-3px)}
/* 1024/614 y no 4/3: las fotos de producto son 5:3 (300x180, 768x461...) y
   en una caja 4:3 con `cover` se les recortaba el 20% del ancho — a un sofa
   modular de 3 puestos le desaparecian los brazos (Carlos, 2026-09-25).
   Es la misma proporcion que ya usan .stage__frame y .pcard__media; el
   cross-sell era el unico que se habia quedado en 4:3. */
.cross-card__img{position:relative;aspect-ratio:1024/614;background:var(--bg-light);display:flex;align-items:center;justify-content:center;color:var(--taupe);font-weight:600;font-size:15px;letter-spacing:.02em}
/* La etiqueta de oferta, como en produccion: esquina superior izquierda,
   fondo negro. Ojo: la de la ficha de producto (.price__dto) hoy va en
   --push (vino); si se unifican, es aqui y alla. */
.cross-card__dto{position:absolute;top:0;left:0;background:var(--ink);color:#fff;font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.06em;padding:5px 10px;line-height:1}
/* Las bolitas son la excepcion a "las imagenes no llevan bordes
   redondeados": son muestras de color y Carlos las pidio redondas. */
.cross-card__swatches{display:flex;align-items:center;gap:6px;margin-bottom:10px}
.cross-card__swatch{width:18px;height:18px;border-radius:0;box-shadow:inset 0 0 0 1px rgba(30,30,28,.18);background-size:cover;background-position:center;flex:0 0 auto}
.cross-card__mas{font-family:var(--sans);font-size:12px;color:var(--text-2);margin-left:4px;white-space:nowrap}
.cross-card__body{padding:16px 0 0}
.cross-card__name{font-size:16px;font-weight:600;color:var(--espresso)}
.cross-card__price{font-size:14px;color:var(--text-2);margin-top:4px}
.cross-card__add{margin-top:14px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border-bottom:1px solid currentColor;display:inline-block;padding-bottom:2px;font-weight:600}
.cross__guide{display:block;margin-top:40px;padding:26px 30px;background:var(--espresso);color:#f2ece2;border-radius:8px;font-size:16px;transition:.3s var(--ease)}
.cross__guide:hover{background:var(--accent-ink)}

/* ================= FOOTER ================= */
/* ================= FOOTER =================
   Medido de producción. Dos apartes deliberados, documentados abajo:
   el fondo usa el neutro del manual v2 en vez del #efefef de Elementor, y los
   16 enlaces van en UNA sola lista que envuelve sola — producción los parte en
   dos widgets de 8 y el quiebre le queda desparejo (7 / 1 / 8 a 1440px). */
.site-footer{background:var(--cream);color:var(--ink);padding:30px 20px 40px}
/* solo el bloque inferior (divisor, redes y legal) va encajonado */
.site-footer__inner{max-width:1140px;margin:0 auto}

.footer-links{display:flex;flex-wrap:wrap;justify-content:center;column-gap:14px;margin-bottom:34px}
.footer-links__item{display:flex;align-items:center;gap:10px;font-size:15px;line-height:1.6;text-transform:uppercase;color:var(--ink);transition:color .2s var(--ease)}
.footer-links__item:hover{color:var(--accent)}
.footer-links__icon{flex:none;width:14px;height:14px}

.footer-cta{display:flex;justify-content:center;max-width:800px;margin:0 auto}
.footer-cta__col{flex:1;display:flex;flex-direction:column;align-items:center;padding:10px}
.footer-btn{display:inline-block;border:1px solid var(--ink);border-radius:0;background:transparent;color:var(--ink);padding:12px 24px;font-size:16px;line-height:1;letter-spacing:.15em;text-transform:uppercase;text-align:center;transition:.25s var(--ease)}
.footer-btn:hover{background:var(--ink);color:var(--white)}
.footer-cta__sub{margin:8px 0 0;font-size:16px;line-height:1.6;font-weight:500;color:var(--text-2);text-align:center}

.footer-divider{border:none;border-top:1px solid #d3d3d3;margin:35px 0}

.footer-social{display:flex;justify-content:center;gap:40px;margin-bottom:30px}
.footer-social a{display:flex;color:var(--ink);transition:color .2s var(--ease)}
.footer-social a:hover{color:var(--accent)}
.footer-social svg{width:25px;height:25px}

.footer-legal{margin:0;text-align:center;font-size:13px;line-height:18px;text-transform:uppercase;color:var(--ink)}
.footer-legal a{text-decoration:underline;text-underline-offset:2px}
.footer-legal a:hover{color:var(--accent)}
/* crédito de la agencia: una línea pequeña y tenue bajo los datos legales */
.footer-credito{margin:26px 0 0;text-align:center;font-size:10.5px;line-height:1;letter-spacing:.16em;text-transform:uppercase}
.footer-credito a{color:var(--text-2);opacity:.75;text-decoration:none;transition:opacity .2s var(--ease),color .2s var(--ease)}
.footer-credito a:hover,.footer-credito a:focus-visible{opacity:1;color:var(--ink)}

/* Producción cambia a móvil en 767px: los enlaces pasan a dos columnas
   alineadas a la izquierda, más pequeños, y los botones se apilan. */
@media(max-width:767px){
  /* column-count y no grid: producción llena columna por columna (1-8 a la
     izquierda, 9-16 a la derecha) y un grid llenaría por filas. Además se
     reparte solo si Aristas agrega o quita enlaces del menú. */
  .footer-links{display:block;column-count:2;column-gap:14px}
  /* Producción baja a 12px/300 en móvil; acá va 13px/400 con algo de tracking.
     El texto es versales, que se leen por la forma de cada letra y no por la
     silueta de la palabra: piden más cuerpo y más aire, no menos. */
  .footer-links__item{align-items:flex-start;font-size:14px;font-weight:400;line-height:1.6;letter-spacing:.04em;break-inside:avoid;margin-bottom:20px}
  /* el icono se alinea con la primera línea, no al centro del bloque de texto */
  .footer-links__icon{margin-top:.35em}
  .footer-cta{flex-direction:column;align-items:stretch}
  .footer-cta__col{padding:10px 0}
  .footer-social{gap:45px}
}

/* ================= SHEET (visualizador de telas) ================= */
.sheet__backdrop{position:fixed;inset:0;background:rgba(26,22,19,.42);backdrop-filter:blur(2px);z-index:190;opacity:0;transition:opacity .4s var(--ease)}
.sheet__backdrop.is-open{opacity:1}
/* Orden de apilado del sitio (el header va en z-index 100):
   190/195 panel de opciones · 198/199 menú móvil · 200 modal · 9998/9999 carrito.
   El panel DEBE tapar el header: si no, su "×" queda bajo la barra fija y el
   toque cae en el icono del carrito. */
/* El marco es quien recorta. Un position:fixed NO lo recorta el overflow del
   root: solo un ancestro que le cree bloque contenedor. Por eso el panel,
   aparcado en translateX(100%), desbordaba el documento aunque html llevara
   overflow-x:clip. El marco es fijo, del tamano del viewport y recorta; el
   panel pasa a absolute dentro de el y ya no puede salirse.
   pointer-events: el marco cubre toda la pantalla, asi que no debe capturar
   clics; el panel si. */
.sheet__marco{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:195}
/* `visibility:hidden` mientras esta cerrado: si no, sus botones siguen en el
   orden de tabulacion dentro de un contenedor con aria-hidden="true", que es
   contradictorio (axe: aria-hidden-focus, grave) y deja al teclado navegando
   por un panel invisible. Se anima la propiedad para que al cerrar espere a
   que termine el deslizamiento. */
.sheet{position:absolute;top:0;right:0;height:100%;width:460px;max-width:92vw;background:var(--white);pointer-events:auto;visibility:hidden;transform:translateX(100%);transition:transform .5s var(--ease),visibility .5s var(--ease);display:flex;flex-direction:column;box-shadow:-30px 0 80px -40px rgba(42,36,32,.5)}
.sheet.is-open{transform:translateX(0);visibility:visible}
.sheet__head{display:flex;justify-content:space-between;align-items:flex-start;padding:30px 30px 18px;border-bottom:1px solid var(--border)}
.sheet__title{font-size:22px;font-weight:600;margin:0;letter-spacing:-.01em}
.sheet__sub{font-size:13px;color:var(--text-3);margin:6px 0 0;text-wrap:pretty}
.sheet__close{background:none;border:none;font-size:28px;line-height:1;color:var(--text-3)}
.sheet__close:hover{color:var(--ink)}
.sheet__filters{display:flex;gap:8px;padding:16px 30px;border-bottom:1px solid var(--border);align-items:center}
.sheet__select{flex:1;border:1px solid var(--border);border-radius:4px;padding:9px 12px;font-family:inherit;font-size:13px;color:var(--text-2);background:var(--white)}
.sheet__reset{background:none;border:none;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);font-weight:600}
.sheet__body{flex:1;overflow:hidden;position:relative}
.sheet__grid{position:absolute;inset:0;overflow-y:auto;padding:24px 30px 40px;display:grid;grid-template-columns:1fr 1fr;gap:18px;align-content:start}
.fabric-card{display:flex;flex-direction:column;width:100%;padding:0;border:none;background:none;text-align:left;transition:transform .22s var(--ease)}
.fabric-card:hover{transform:translateY(-3px)}
.fabric-card__img{display:block;width:100%;aspect-ratio:1;border-radius:10px;background-size:cover;background-position:center;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);position:relative}
.fabric-card.is-sel .fabric-card__img{box-shadow:inset 0 0 0 1px rgba(0,0,0,.08),0 0 0 2px var(--accent)}
.fabric-card__badge{position:absolute;top:8px;left:8px;background:rgba(42,36,32,.82);color:#fff;font-size:12px;letter-spacing:.05em;text-transform:uppercase;padding:3px 8px;border-radius:99px;font-weight:600;white-space:nowrap}
.fabric-card__name{display:block;font-size:13px;font-weight:500;margin-top:9px;color:var(--espresso)}
.fabric-card__meta{display:block;font-size:12px;color:var(--text-3)}
.fabric-card.is-hidden{display:none}

/* Detail view dentro del sheet */
.sheet__detail{position:absolute;inset:0;overflow-y:auto;padding:24px 30px 40px;background:var(--white)}
.detail__back{background:none;border:none;color:var(--accent);font-size:13px;font-weight:600;padding:0 0 18px}
.detail__img{width:100%;aspect-ratio:4/3;border-radius:12px;background-size:cover;background-position:center;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.detail__name{font-size:24px;font-weight:600;margin:20px 0 10px;letter-spacing:-.01em}
.detail__chips{display:flex;gap:8px;margin-bottom:16px}
.detail__chip{font-size:12px;letter-spacing:.04em;background:var(--cream);color:var(--accent-ink);padding:5px 12px;border-radius:99px;font-weight:500}
.detail__desc{color:var(--text-2);font-size:15px;line-height:1.7;margin:0 0 18px}
.detail__note{font-size:13px;color:var(--clay);background:var(--cream);border-radius:6px;padding:12px 14px;margin-bottom:20px;display:none}
.detail__note.show{display:block}
.detail__choose{width:100%}

/* ================= MODAL QR ================= */
.modal{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center}
.modal[hidden]{display:none}
.modal__backdrop{position:absolute;inset:0;background:rgba(26,22,19,.55);backdrop-filter:blur(3px)}
.modal__card{position:relative;background:var(--white);border-radius:10px;padding:44px 46px;max-width:420px;width:90%;text-align:center;box-shadow:0 40px 80px -30px rgba(0,0,0,.5)}
.modal__x{position:absolute;top:14px;right:18px;background:none;border:none;font-size:26px;color:var(--text-3);line-height:1}
.modal__title{font-size:26px;font-weight:600;margin:0 0 6px}
.modal__sub{color:var(--accent-ink);font-size:15px;margin:0 0 22px;font-weight:500}
.modal__qr{width:150px;height:150px;margin:0 auto 20px;border-radius:10px;background-size:cover;image-rendering:pixelated;border:1px solid var(--border)}
.modal__hint{font-size:13px;color:var(--text-3);margin:0}

/* Modal Añadido al carrito */
.cartcard{position:relative;background:var(--white);border-radius:12px;padding:32px 36px;max-width:540px;width:92%;text-align:left;box-shadow:0 40px 80px -30px rgba(0,0,0,.5);max-height:92vh;overflow-y:auto}
/* Cuerpos subidos un escalon: David los vio «muy enanos» (2026-09-25).
   Es un aviso de confirmacion —se lee de pasada y decide si sigues
   comprando o vas al carrito—, asi que el precio y el resumen tienen que
   leerse sin acercarse. Referencias: 18->20 el titular, 16->18 el nombre,
   12,5->14 la variacion, 14->17 el precio, 13->15 el resumen, 12->13 los
   botones. */
.cartcard__check{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:600;color:var(--espresso);margin-bottom:22px}
.cartcard__tick{width:26px;height:26px;border-radius:50%;background:#6f7d4a;color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}
.cartcard__item{display:flex;gap:16px;align-items:center;padding-bottom:18px;border-bottom:1px solid var(--border)}
.cartcard__thumb{width:100px;height:72px;border-radius:8px;background:var(--bg-light);background-size:cover;background-position:center;flex:none;border:1px solid var(--border)}
.cartcard__info{display:flex;flex-direction:column;gap:3px}
.cartcard__info strong{font-size:18px;font-weight:600}
.cartcard__info span{font-size:15px;color:var(--text-3)}
.cartcard__price{color:var(--espresso)!important;font-weight:600;font-size:17px!important;margin-top:4px}
.cartcard__summary{font-size:16px;color:var(--text-2);padding:16px 0}
.cartcard__summary strong{color:var(--espresso)}
.cartcard__cross{border-top:1px solid var(--border);padding-top:18px}
.cartcard__crosstitle{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);font-weight:600;margin:0 0 14px}
.cartcard__crossgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.cartcross{border:1px solid var(--border);border-radius:8px;padding:10px;text-align:center}
.cartcross__img{aspect-ratio:4/3;border-radius:5px;background:var(--bg-light);display:flex;align-items:center;justify-content:center;color:var(--taupe);font-size:12px;font-weight:600;margin-bottom:8px;text-align:center;line-height:1.2;padding:4px}
.cartcross__name{font-size:13px;font-weight:500;color:var(--espresso);line-height:1.2}
.cartcross__price{font-size:12px;color:var(--text-3);margin-top:2px}
.cartcross__add{margin-top:8px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);border:1px solid var(--border);border-radius:99px;padding:6px 0;width:100%;font-weight:600;background:#fff}
.cartcross__add:hover{border-color:var(--accent)}
.cartcard__cta{display:flex;gap:12px;margin-top:24px}
/* Centrado explicito: uno de los dos botones es <button> y el otro <a>. El
   <button> centra su texto solo; el <a> heredaba la alineacion y «Ir al
   carrito» quedaba 56px a la izquierda dentro de su caja (Carlos,
   2026-09-25). Con flex los dos se comportan igual, sea cual sea la
   etiqueta. */
.cartcard__cta .btn{font-size:14px;display:flex;align-items:center;justify-content:center;text-align:center}
.cartcard__cta .btn{flex:1;min-width:0}
/* Finalizar compra va primero y a todo el ancho; debajo, Seguir explorando y Ver carrito */
.cartcard__cta{flex-wrap:wrap}
.cartcard__cta .cartcard__pagar{flex:1 1 100%}
/* en el telefono no caben los dos secundarios lado a lado («Seguir explorando» partia en dos lineas): uno sobre otro */
@media(max-width:480px){.cartcard__cta{gap:10px}.cartcard__cta .btn{flex:1 1 100%}}

/* Amadine solo para el título del producto; el resto de textos y títulos
   de sección van en Futura PT (--sans), que es la fuente general de marca. */
.ptitle{font-family:var(--display);font-weight:500;letter-spacing:normal}
.section-title,.sheet__title,.detail__name,.modal__title,.cross-card__name{font-family:var(--sans);font-weight:600;letter-spacing:normal}
/* El titulo de la ficha ya no va en mayusculas (Aristas, 2026-10-05): el nombre se muestra tal como
   esta en los datos («Sofa Cronos»). Los titulos de seccion (.section-title) siguen en mayusculas. */
.section-title{text-transform:uppercase;letter-spacing:.02em}
.ptitle{text-transform:none;letter-spacing:.01em}
/* «Tambien puede interesarte» en Futura pero mas delgada (Carlos,
   2026-09-24). 300 es FuturaPTLight, el peso mas fino que hay cargado. */
.cross .section-title{font-weight:300}

/* ================= AVISO DE LA PAGINA DE PAGO =================
   Produccion lo resuelve con una caja gris de sistema. Aqui va con el
   lenguaje del sitio: crema, una regla fina a la izquierda que lo marca sin
   encerrarlo en un recuadro, y el dato que mas importa —el plazo de entrega—
   primero y en tinta. El telefono es un enlace tel: para que en movil se
   pueda llamar de un toque. */
.pagoaviso{max-width:var(--maxw);margin:0 auto 28px;padding:16px 20px;background:var(--cream);border-left:2px solid var(--ink)}
.pagoaviso p{margin:0}
.pagoaviso__entrega{font-size:16px;line-height:1.5;color:var(--ink);font-weight:500}
.pagoaviso__ayuda{margin-top:6px;font-size:15px;color:var(--text-2)}
.pagoaviso__ayuda a{color:var(--ink);font-weight:600;border-bottom:1px solid currentColor;padding-bottom:1px}
.pagoaviso__ayuda a:hover{color:var(--accent-ink)}
/* Dentro de la columna de campos (lo mueve inc/checkout.php): a lo ancho de la columna y pegado
   al primer paso. */
.pagoaviso.pagoaviso--columna{max-width:none;margin:0 0 24px}
/* Titulos de los pasos del pago («Detalles de contacto», «Direccion de envio»...): la regla de h2
   de .pagina__inner les metia ~47px de margen arriba, que se sumaban a los 24px del paso.
   !important por la misma especificidad creciente de esa regla (h2:not(...)). */
body.woocommerce-checkout .wc-block-components-checkout-step__title{margin-top:0 !important}
@media(max-width:640px){
  .pagoaviso{margin-bottom:20px;padding:14px 16px}
  .pagoaviso__entrega{font-size:15px}
}

/* ================= RESPONSIVE ================= */
@media(max-width:1080px){
  .mainbar__nav{gap:16px;font-size:11px}
  .panel__inner{padding:42px 40px 60px}
  .stage__inner{padding:34px}
}
@media(max-width:900px){
  .config__grid{grid-template-columns:1fr}
  /* En el telefono la miga de pan es una linea entera de scroll antes de ver
     el producto, y ahi la ruta ya la da el boton de atras (Carlos,
     2026-09-24). Solo en la ficha: en catalogos, showrooms y categoria sigue
     saliendo. No afecta al SEO porque este breadcrumb no lleva schema: el
     BreadcrumbList lo emite Rank Math por su cuenta en JSON-LD. */
  body.single-product .breadcrumb{display:none}
  /* Sin linea entre la foto y el panel: en apilado no separa nada que no se
     entienda ya, y metia un corte visual justo donde arranca la ficha
     (Carlos, 2026-09-24). */
  .stage{position:relative;top:0;min-height:0;border-right:none;border-bottom:none}
  /* Solo 8px arriba y abajo, los mismos que por debajo de 480: eran 20 y
     entre los dos lados dejaban 40px de blanco alrededor de la foto, que es
     el ultimo pedazo de scroll que sobraba en la ficha (Carlos, 2026-09-24).
     Los 20 de los lados se quedan: ahi si hace falta margen. */
  .stage__inner{padding:8px 20px}
  .mainbar__nav{display:none}
  .trust,.specs__table{grid-template-columns:1fr}
  /* El cross-sell no apila: pasa a carrusel de una ficha por vista.
     El desplazamiento lo hace el navegador con scroll-snap y el JS
     solo pinta los puntos, igual que en «Descubre» del home. */
  /* `contain: paint` NO es decoracion: es lo que hace que el carrusel
     recorte de verdad. Con solo overflow-x:auto la caja recorta lo que se
     ve, pero Chrome en Android seguia sumando el ancho de las cuatro
     fichas al area desplazable del DOCUMENTO: en un viewport de 409px se
     podia arrastrar la pagina entera 881px a la izquierda. Medido en una
     sonda de 430px; con contain:paint el scroll horizontal pasa a 0.
     Forzar overflow:hidden en la rejilla o en la seccion NO lo arreglaba,
     ni overflow-x:clip en html o body: hace falta contencion de pintado.
     Los carruseles del home no lo necesitan porque sus secciones ya crean
     contexto propio, pero si alguno empieza a desbordar, es esta linea. */
  .cross__grid{display:flex;grid-template-columns:none;gap:10px;overflow-x:auto;contain:paint;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
  /* el levante de 3px del hover se recortaria contra el contain, y en
     tactil no aporta nada */
  .cross-card:hover{transform:none}
  .cross__grid::-webkit-scrollbar{display:none}
  .cross-card{flex:0 0 100%;scroll-snap-align:start}
  .cross__dots{display:flex;justify-content:center;gap:8px;margin-top:18px}
  .cross__dot{width:7px;height:7px;border-radius:50%;border:none;background:#cfcac2;padding:0}
  .cross__dot.is-active{background:var(--ink)}
  /* topbar: colapsa nav/utils y deja solo el promo centrado (franja limpia) */
  .topbar__nav,.topbar__utils{display:none}
  .topbar__inner{justify-content:center}
  .topbar__promo{letter-spacing:.08em;text-align:center}
}
@media(max-width:640px){
  .wrap,.topbar__inner,.mainbar{padding-left:20px;padding-right:20px}
  .ptitle{font-size:32px}
  /* 12 arriba en vez de 32: sin la linea de separacion ese aire ya no hace
     falta y la ficha empieza 20px mas arriba. */
  .panel__inner{padding:12px 20px 50px}
  /* Los tres huecos de la cabecera de la ficha, mas apretados en el
     telefono (Carlos, 2026-09-24). En escritorio se quedan como estaban:
     alli el aire sobra y aqui es scroll.
       nombre -> precio : 16 -> 8
       precio -> nota   : 14 -> 8
       nota -> pasos    : 8 + 14 de padding -> 4 + 6
     El padding de `.steps` cuenta igual que un margen: es lo que separaba
     «PERSONALIZALO» del parrafo de arriba. */
  .ptitle{margin-bottom:8px}
  .price{margin-bottom:8px}
  .pintro{margin-bottom:4px}
  .steps{padding-top:6px}
  .specs__table th{width:auto;display:block;padding-bottom:4px}
  .specs__table td{display:block;padding-top:0}
  .sheet{width:100%}
}

/* ---- sugerencias del buscador (ver inc/buscador.php y header.js) ----
   Sin bordes redondeados en las fotos, regla de marca. El panel es parte de la
   barra de busqueda, asi que hereda su fondo y solo se separa con una linea. */
/* Solo padding-bottom: el lateral lo pone .wrap (0 40px) y ponerlo a 0 aqui
   dejaba las miniaturas y el "ver todos" pegados al borde de la pantalla. */
.header-search__panel { padding-bottom: 8px; }
.header-search__lista { list-style: none; margin: 0; padding: 0; max-height: 58vh; overflow-y: auto; }
.header-search__item { border-top: 1px solid rgba(30,30,28,.1); }
.header-search__item > a {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 0; text-decoration: none; color: var(--ink);
}
.header-search__item > a:focus { outline: 2px solid var(--ink); outline-offset: -2px; background: rgba(30,30,28,.04); }
.header-search__item > a:hover { background: rgba(30,30,28,.04); }
.header-search__item img,
.header-search__sinfoto {
  width: 64px; height: 38px; flex: none;
  object-fit: cover; border-radius: 0;
}
.header-search__sinfoto { background: var(--cream); }
.header-search__texto { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.header-search__nombre {
  font-size: 13px; line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.header-search__precio { font-size: 12px; color: var(--text-3, #766e66); }
/* sin opacity: bajaba el precio tachado del contraste minimo (axe lo marca
   como color-contrast grave). El tachado ya lo distingue por si solo. */
.header-search__precio del { margin-right: 5px; }
.header-search__precio strong { font-weight: 500; }
/* el rango cabe en la fila sin partirse raro */
.header-search__pricemax { white-space: nowrap; }
.header-search__vacio { margin: 0; padding: 12px 0; font-size: 13px; color: var(--text-3, #766e66); }
.header-search__todos {
  display: block; padding: 10px 0 2px;
  border-top: 1px solid rgba(30,30,28,.1);
  font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
}

@media (max-width: 820px) {
  .header-search__lista { max-height: 50vh; }
  .header-search__nombre { font-size: 12px; }
}

/* ---- landings de listado de productos (ver inc/landings.php) ----
   La rejilla es la misma .pgrid de la tienda, con su CSS; aca solo va el aire
   del titulo de cada grupo y el hueco entre grupos dentro de una pagina. */
.landing__titulo{font-size:24px;font-weight:500;letter-spacing:.01em;margin:64px 0 24px}
.landing__titulo:first-child{margin-top:0}
.landing__grid{margin-bottom:64px}
@media(max-width:820px){
  .landing__titulo{font-size:20px;margin:40px 0 16px}
  .landing__grid{margin-bottom:40px}
}

/* ================= LETRA B: carrito y pago de WooCommerce =================
   La escala de letra B (Aristas, 2026-10-05: 11->12, 12->13, 13->14, 14->15, 15->16; lo de
   16px para arriba no cambia) se aplico a todos los font-size del tema. El carrito clasico y
   el BLOQUE de pago pintan con el CSS de WooCommerce Blocks y de Mercado Pago, que no es del
   tema: sus tamanos no suben solos, asi que se fijan aqui con el mismo valor que daba la
   prueba de letra que aprobo Aristas. Lo de 16 para arriba queda como esta. Si un plugin renombra una clase,
   solo vuelve a su tamano de fabrica: nada se rompe. */
/* Finalizar compra: WooCommerce le pone 1.25em, o sea 18.75px sobre el body de 15; con el body
   en 16px saldria 20. Se conserva el tamano de antes. */
body.woocommerce-cart .wc-proceed-to-checkout a.checkout-button{font-size:18.75px}
body.woocommerce-checkout .wc-block-components-address-card__address-section--secondary,
body.woocommerce-checkout .wc-block-components-address-card__edit,
body.woocommerce-checkout .wc-blocks-components-select__label,
body.woocommerce-checkout .wc-block-components-address-form__address_2-toggle,
body.woocommerce-checkout .wc-block-components-checkbox__label,
body.woocommerce-checkout .row-image-select span,
body.woocommerce-checkout .wc-block-components-radio-control__label,
body.woocommerce-checkout .wc-block-components-payment-method-label,
body.woocommerce-checkout .wc-block-components-checkout-place-order-button__text,
body.woocommerce-checkout .wc-block-components-product-name,
body.woocommerce-checkout .wc-block-components-product-price__value.is-discounted,
body.woocommerce-checkout .wc-block-components-panel__button,
/* la fila del Total (totals-footer-item) va a 20px y no entra en la escala */
body.woocommerce-checkout .wc-block-components-totals-item:not(.wc-block-components-totals-footer-item) .wc-block-components-totals-item__label,
body.woocommerce-checkout .wc-block-components-totals-item:not(.wc-block-components-totals-footer-item) .wc-block-formatted-money-amount,
body.woocommerce-checkout .wc-block-components-checkout-order-summary__title .wc-block-formatted-money-amount,
body.woocommerce-checkout .wc-block-cart-item__total-price-and-sale-badge-wrapper .wc-block-formatted-money-amount{font-size:14px}
/* Mercado Pago fija sus tamanos con !important (.mp-checkout-container ... {font-size:14px!important}),
   asi que aqui hace falta el mismo !important para subirlos. */
body.woocommerce-checkout .mp-checkout-container .mp-input-label,
body.woocommerce-checkout .mp-checkout-container .mp-input-label b,
body.woocommerce-checkout .mp-checkout-container .mp-input-label span,
body.woocommerce-checkout .mp-checkout-container .mp-input-document input,
body.woocommerce-checkout .mp-checkout-container select.mp-document-select,
body.woocommerce-checkout .mp-checkout-container select.mp-document-select option,
body.woocommerce-checkout .mp-checkout-container select.mp-custom-checkout-select-input,
body.woocommerce-checkout .mp-checkout-container select.mp-custom-checkout-select-input option{font-size:15px!important}
body.woocommerce-checkout .mp-checkout-container .mp-helper-message{font-size:14px!important}
body.woocommerce-checkout .wc-block-components-order-summary-item__quantity,
body.woocommerce-checkout .wc-block-components-order-summary-item__quantity span,
body.woocommerce-checkout .wc-block-components-product-details,
body.woocommerce-checkout .wc-block-components-product-details span,
body.woocommerce-checkout .wc-block-components-product-badge,
body.woocommerce-checkout .wc-block-components-product-badge .wc-block-formatted-money-amount,
body.woocommerce-checkout .wc-block-components-shipping-placeholder__value{font-size:13px}
body.woocommerce-checkout .wc-block-components-product-price__regular{font-size:12px}
body.woocommerce-checkout .mp-checkout-container .mp-privacy-policy-footer,
body.woocommerce-checkout .mp-checkout-container .mp-privacy-policy-footer span,
body.woocommerce-checkout .mp-checkout-container .mp-privacy-policy-footer a{font-size:13px!important}
