/* =============================================================
   AspiradoraLab — styles.css
   1. Tokens  2. Reset  3. Utilities  4. Typography  5. Components
   6. Sections  7. Ficha  8. Comparador  9. Recomendador
   10. Responsive  11. Reduced motion
   ============================================================= */

/* =============================================================
   1. Tokens
   ============================================================= */
:root {
  --bg:            #f7f5f1;
  --bg-alt:        #efece5;
  --surface:       #ffffff;
  --surface-2:     #fbfaf7;
  --border:        #e3ded3;
  --border-strong: #cfc7b4;
  --ink:           #14201f;
  --ink-soft:      #4c5957;
  --ink-faint:     #7b8785;
  --accent:        #0f9e94;
  --accent-ink:    #ffffff;
  --accent-soft:   #e3f5f2;
  --accent-dark:   #0c6f68;
  --gold:          #d98c1f;
  --gold-soft:     #fbeed9;
  --danger:        #c4432f;
  --danger-soft:   #fbe6e1;
  --ok:            #2f8f5b;
  --radius-s:  8px;
  --radius-m:  14px;
  --radius-l:  22px;
  --radius-xl: 32px;
  --shadow-s: 0 1px 2px rgba(20,32,31,.06), 0 1px 1px rgba(20,32,31,.04);
  --shadow-m: 0 6px 20px rgba(20,32,31,.08), 0 2px 6px rgba(20,32,31,.05);
  --shadow-l: 0 20px 50px rgba(20,32,31,.14), 0 6px 16px rgba(20,32,31,.08);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --display: "Space Grotesk", var(--sans);
  --container: 1240px;
  --header-h: 76px;
  /* Capas (z-index): una sola escala para todo lo flotante, de abajo arriba.
       contenido (auto / 2 local)  <  resultados del buscador (60, local al hero)
       <  header sticky (400)  <  aviso flotante del comparador (900, inline en main.js)
       <  banner de cookies (950)  <  menú móvil (1000)  <  skip-link (1100)
     El menú móvil va POR ENCIMA del banner de cookies: es una capa opaca a
     pantalla completa que el usuario abre a propósito; mientras está abierto
     el banner no puede tapar sus enlaces, y al cerrarlo el banner reaparece.
     (Antes: menú 450 < banner 950 → en 375×667 el banner bloqueaba
     "Comparador", "Guías" e "Ir al comparador".) */
  --z-header: 400;
  --z-banner: 950;
  --z-menu:   1000;
  --z-skip:   1100;
}

[data-theme="dark"] {
  --bg:            #0c1413;
  --bg-alt:        #10201d;
  --surface:       #122120;
  --surface-2:     #16302c;
  --border:        #1f3a36;
  --border-strong: #3d635a;
  --ink:           #eef7f4;
  --ink-soft:      #b7c9c5;
  --ink-faint:     #7f9791;
  --accent:        #2fd6c6;
  --accent-ink:    #06201d;
  --accent-soft:   rgba(47,214,198,.14);
  --accent-dark:   #1fb3a5;
  --gold:          #f0ac3f;
  --gold-soft:     rgba(240,172,63,.14);
  --danger-soft:   rgba(196,67,47,.18);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg:            #0c1413;
    --bg-alt:        #10201d;
    --surface:       #122120;
    --surface-2:     #16302c;
    --border:        #1f3a36;
    --border-strong: #3d635a;
    --ink:           #eef7f4;
    --ink-soft:      #b7c9c5;
    --ink-faint:     #7f9791;
    --accent:        #2fd6c6;
    --accent-ink:    #06201d;
    --accent-soft:   rgba(47,214,198,.14);
    --accent-dark:   #1fb3a5;
    --gold:          #f0ac3f;
    --gold-soft:     rgba(240,172,63,.14);
    --danger-soft:   rgba(196,67,47,.18);
  }
}

/* =============================================================
   2. Reset
   ============================================================= */
*, *::before, *::after { box-sizing: border-box; margin: 0; }
html { -webkit-text-size-adjust: 100%; tab-size: 2; overflow-x: clip; scroll-behavior: smooth; }
body {
  background: var(--bg); color: var(--ink);
  font-family: var(--sans); font-size: 16px; line-height: 1.6;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  overflow-x: clip; overscroll-behavior-y: none;
}
img, svg, video { display: block; max-width: 100%; }
img { height: auto; }
button { font: inherit; color: inherit; cursor: pointer; border: 0; background: none; }
a { color: inherit; text-decoration: none; }
input, select, textarea { font: inherit; color: inherit; }
p { text-wrap: pretty; }
h1, h2, h3, h4 { font-family: var(--display); text-wrap: balance; line-height: 1.08; letter-spacing: -0.01em; font-weight: 600; }
ul, ol { padding: 0; list-style: none; }
table { border-collapse: collapse; width: 100%; }
::selection { background: var(--accent); color: var(--accent-ink); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 4px; }

.skip-link {
  position: fixed; top: -100px; left: 1rem; z-index: var(--z-skip);
  padding: .7rem 1.1rem; background: var(--ink); color: var(--bg);
  border-radius: var(--radius-s); font-weight: 600;
}
.skip-link:focus { top: 1rem; }

/* =============================================================
   3. Utilities
   ============================================================= */
.container { max-width: var(--container); margin-inline: auto; padding-inline: 1.25rem; }
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.stack { display: flex; flex-direction: column; }
.section { padding-block: clamp(3rem, 6vw, 5.5rem); }
.section-head { max-width: 640px; margin-bottom: 2.2rem; }
.section-head .eyebrow { margin-bottom: .6rem; }
.section-head h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); margin-bottom: .6rem; }
.section-head p { color: var(--ink-soft); font-size: 1.05rem; }
.section-foot { display: flex; justify-content: center; margin-top: 2.4rem; }
.eyebrow {
  display: inline-flex; align-items: center; gap: .4rem;
  font-size: .78rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--accent-dark);
}
.grid-auto { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1.3rem; }
@media (max-width: 719.98px) { .hide-mobile { display: none !important; } }
@media (min-width: 960px) { .hide-desktop { display: none !important; } }
.divider { height: 1px; background: var(--border); border: 0; margin-block: 2rem; }

/* =============================================================
   4. Typography
   ============================================================= */
.h1-hero { font-size: clamp(2.3rem, 5vw, 3.6rem); max-width: 16ch; }
.lead { font-size: 1.15rem; color: var(--ink-soft); max-width: 52ch; }

/* =============================================================
   5. Components
   ============================================================= */

/* Buttons */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  padding: .85rem 1.4rem; border-radius: 999px; font-weight: 700; font-size: .96rem;
  transition: transform .2s var(--ease-out), background .2s var(--ease-out), box-shadow .2s var(--ease-out), color .2s var(--ease-out);
  white-space: nowrap;
}
/* Fondo en --accent-dark (no --accent): el texto blanco sobre --accent
   quedaba en ~3.3:1, por debajo del mínimo AA (4.5:1) para texto normal.
   --accent-dark sube ese contraste a ~6:1 sin cambiar el tono de marca. */
.btn-primary { background: var(--accent-dark); color: var(--accent-ink); box-shadow: var(--shadow-s); }
.btn-primary:hover { background: color-mix(in srgb, var(--accent-dark) 82%, black); box-shadow: var(--shadow-m); transform: translateY(-1px); }
.btn-secondary { background: var(--surface); color: var(--ink); border: 1px solid var(--border); }
.btn-secondary:hover { border-color: var(--accent); color: var(--accent-dark); }
.btn-ghost { background: transparent; color: var(--ink); border: 1px solid transparent; }
.btn-ghost:hover { background: var(--accent-soft); color: var(--accent-dark); }
.btn-gold { background: var(--gold); color: #241800; }
.btn-gold:hover { filter: brightness(1.06); transform: translateY(-1px); }
.btn-block { width: 100%; }
.btn-sm { padding: .55rem 1rem; font-size: .85rem; }
.btn[disabled], .btn.is-disabled {
  opacity: .55; pointer-events: none;
  /* El texto "No disponible en Amazon.es ahora mismo" es más largo que el
     resto de CTA; en una tarjeta con columna estrecha puede superar el
     ancho de la tarjeta incluso ya en su propia línea. Al no ser un
     enlace real (pointer-events:none), dejarlo envolver en 2 líneas es
     seguro y evita ese desbordamiento sin tocar el texto ni el tamaño. */
  white-space: normal; text-align: center; line-height: 1.25;
}
.btn-icon { width: 1.05em; height: 1.05em; flex: none; }

/* Header / nav */
.site-header {
  position: sticky; top: 0; z-index: var(--z-header);
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border);
}
.site-header .container { display: flex; align-items: center; gap: 1.2rem; height: var(--header-h); }
.brand { display: flex; align-items: center; gap: .55rem; font-family: var(--display); font-weight: 700; font-size: 1.2rem; flex: none; }
/* El favicon.svg trae su propio cuadrado de fondo oscuro (#0d1a20); en
   modo oscuro el header usa prácticamente el mismo tono de fondo, así que
   el contorno se funde y solo se distingue el círculo turquesa interior.
   Un anillo de 1px casi blanco (box-shadow, sigue el radio del propio
   icono y no reserva espacio en el layout) separa el perímetro del fondo
   sin tocar el SVG ni el tamaño del logo. En modo claro es prácticamente
   invisible sobre el fondo claro del header, así que no cambia nada ahí. */
.brand-mark { width: 34px; height: 34px; display: grid; place-items: center; flex: none; border-radius: 7px; box-shadow: 0 0 0 1px rgba(255,255,255,.22); }
.brand-mark img { width: 100%; height: 100%; display: block; }
.nav-links { display: none; align-items: center; gap: 1.6rem; font-weight: 600; font-size: .94rem; }
.nav-links a { color: var(--ink-soft); transition: color .2s var(--ease-out); }
.nav-links a:hover, .nav-links a.is-active { color: var(--ink); }
/* Enlace con algo más de peso que el resto (p.ej. "Encuentra tu aspiradora"),
   pero sin fondo ni forma de píldora: eso lo reservamos para CTAs reales
   (.btn, .compare-pill, .nav-cta) para no competir visualmente con ellos. */
.nav-links a.nav-lead, .mobile-menu nav a.nav-lead { color: var(--accent-dark); font-weight: 700; }
@media (min-width: 960px) { .nav-links { display: flex; } }
.nav-actions { display: flex; align-items: center; gap: .6rem; margin-left: auto; }
.nav-cta { display: inline-flex; }
.nav-links a.nav-cta, .nav-links a.nav-cta:hover { color: var(--accent-ink); background: var(--accent); padding: .55rem 1.1rem; border-radius: 999px; }
.compare-pill {
  position: relative; display: inline-flex; align-items: center; gap: .4rem;
  padding: .55rem 1rem; border-radius: 999px; border: 1px solid var(--border); background: var(--surface);
  font-weight: 700; font-size: .88rem;
}
.compare-pill .count {
  min-width: 20px; height: 20px; padding-inline: .3rem; border-radius: 999px;
  background: var(--accent); color: var(--accent-ink); font-size: .74rem; display: grid; place-items: center;
}
.nav-toggle { display: grid; place-items: center; width: 42px; height: 42px; border-radius: var(--radius-s); }
.nav-toggle svg { width: 22px; height: 22px; }
@media (min-width: 960px) { .nav-toggle { display: none; } }
.mobile-menu {
  position: fixed; inset: 0; z-index: var(--z-menu); background: var(--bg);
  overflow-y: auto; /* si el menú es más alto que la pantalla (móvil horizontal), se desplaza él mismo */
  padding: 1.25rem; display: flex; flex-direction: column; gap: 1.4rem;
  transform: translateY(-8px); opacity: 0; pointer-events: none; transition: opacity .22s var(--ease-out), transform .22s var(--ease-out);
}
.mobile-menu.is-open { opacity: 1; pointer-events: auto; transform: none; }
.mobile-menu-head { display: flex; align-items: center; justify-content: space-between; }
.mobile-menu nav { display: flex; flex-direction: column; gap: .2rem; }
.mobile-menu nav a { padding: .9rem .2rem; font-size: 1.15rem; font-weight: 600; border-bottom: 1px solid var(--border); }

/* Cards */
.card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-l);
  overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-s);
  transition: box-shadow .25s var(--ease-out), transform .25s var(--ease-out), border-color .25s var(--ease-out);
}
.card:hover { box-shadow: var(--shadow-m); transform: translateY(-3px); border-color: color-mix(in srgb, var(--accent) 40%, var(--border)); }
.product-card { position: relative; }
.product-card .thumb { aspect-ratio: 4/3; background: var(--bg-alt); position: relative; overflow: hidden; }
.product-card .thumb img { width: 100%; height: 100%; object-fit: contain; padding: 1rem; }
.product-card .body { padding: 1.15rem 1.2rem 1.3rem; display: flex; flex-direction: column; gap: .55rem; flex: 1; }
.product-card .kind { font-size: .74rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); }
.product-card h3 { font-size: 1.05rem; line-height: 1.25; }
.product-card h3 a { transition: color .2s var(--ease-out); }
.product-card h3 a:hover { color: var(--accent-dark); }
.product-card .rating { display: flex; align-items: center; gap: .4rem; font-size: .85rem; color: var(--ink-soft); }
.product-card .rating .stars { color: var(--gold); letter-spacing: 1px; }
.product-card .price-row { display: flex; align-items: baseline; gap: .5rem; margin-top: auto; }
.price-now { font-size: 1.3rem; font-weight: 800; font-family: var(--display); }
.price-before { font-size: .88rem; color: var(--ink-soft); text-decoration: line-through; }
/* flex-wrap permite que el CTA de Amazon caiga a su propia línea (y se
   estire a ancho completo vía flex-grow) en cuanto el ancho real de la
   tarjeta deja de tener sitio para los dos botones sin recortar texto —
   se dispara por el ancho real de la columna del grid, no por un
   breakpoint de viewport fijo, así que cubre cualquier nº de columnas. */
/* margin-top:auto ancla las acciones (Ver ficha / Comprar / Enlace pagado)
   al borde inferior de .body en TODAS las cards de la fila, sin importar si
   el título ocupa 1, 2 o 3 líneas ni cuánto texto tenga cada producto:
   .body ya es flex:1 dentro de .card, y .card ya se estira a la altura de
   la fila del grid (comportamiento por defecto de CSS Grid), así que solo
   falta que .actions consuma el espacio sobrante en vez de quedarse pegado
   al contenido. El gap de .body (.55rem) sigue actuando como separación
   mínima cuando no hay espacio sobrante que repartir. */
.product-card .actions { display: flex; flex-wrap: wrap; align-items: flex-start; gap: .5rem; margin-top: auto; }
.product-card .actions .btn,
.product-card .actions [data-card-cta] { flex: 1; }
.badge {
  display: inline-flex; align-items: center; gap: .3rem; padding: .3rem .6rem; border-radius: 999px;
  font-size: .72rem; font-weight: 700; letter-spacing: .01em;
}
.badge-accent { background: var(--accent-soft); color: var(--accent-dark); }
.badge-gold { background: var(--gold-soft); color: #93610e; }
[data-theme="dark"] .badge-gold, :root:not([data-theme="light"]) .badge-gold { color: var(--gold); }
.badge-danger { background: var(--danger-soft); color: var(--danger); }
/* Reutilizable: divulgación de enlace de afiliado bajo un CTA comercial. Se inyecta solo vía JS cuando el producto tiene affiliate_url real (ver affiliateCtaHtml en main.js) — nunca a mano por producto. Discreta a propósito: no debe competir visualmente con el CTA "Comprar en Amazon". */
.affiliate-tag {
  display: block; margin-top: .35rem;
  font-size: .72rem; font-weight: 400; line-height: 1.35;
  letter-spacing: normal; text-transform: none;
  color: var(--ink-soft); text-align: center;
}
.cookie-banner {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-banner);
  display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
  padding: 1rem 1.2rem; background: var(--surface); border-top: 1px solid var(--border);
  box-shadow: var(--shadow-l); font-size: .88rem; color: var(--ink-soft);
}
/* Con el menú móvil abierto el banner ya queda cubierto; además se retira del
   orden de tabulación y de los lectores de pantalla para que el foco no caiga
   en un botón invisible. Mejora progresiva (:has); sin soporte, el z-index ya
   garantiza que no tape nada. */
body:has(.mobile-menu.is-open) .cookie-banner { visibility: hidden; }
.cookie-banner p { flex: 1 1 320px; margin: 0; max-width: 62ch; }
.cookie-banner p a { color: var(--accent); text-decoration: underline; }
.cookie-banner-actions { display: flex; gap: .6rem; flex-shrink: 0; }
@media (max-width: 640px) {
  .cookie-banner { flex-direction: column; align-items: stretch; }
  .cookie-banner-actions { justify-content: flex-end; }
  /* CTA de tarjeta de producto: en móvil "Ver ficha" + "Comprar en Amazon" no caben
     en la misma fila sin recortarse, así que se apilan a ancho completo. */
  .product-card .actions { flex-direction: column; align-items: stretch; }
  .product-card .actions .btn { flex: none; }
}
.card-badges { position: absolute; top: .7rem; left: .7rem; right: .7rem; display: flex; gap: .4rem; flex-wrap: wrap; z-index: 2; }
.card-compare-toggle {
  position: absolute; top: .7rem; right: .7rem; z-index: 3;
  width: 34px; height: 34px; border-radius: 999px; background: var(--surface); border: 1px solid var(--border);
  display: grid; place-items: center; box-shadow: var(--shadow-s);
}
.card-compare-toggle svg { width: 16px; height: 16px; }
.card-compare-toggle.is-active { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }

/* Chips / filters */
.chip-row { display: flex; flex-wrap: wrap; gap: .5rem; }
.chip {
  padding: .5rem .95rem; border-radius: 999px; border: 1px solid var(--border-strong); background: var(--surface);
  font-size: .86rem; font-weight: 600; color: var(--ink-soft); transition: all .18s var(--ease-out);
}
/* Hover y foco usan señales distintas a propósito: hover cambia el fondo
   (sutil), foco de teclado usa el anillo turquesa. Regla propia (no solo la
   global :focus-visible) porque los <button> reciben del navegador un
   focus-ring nativo con más especificidad práctica que los enlaces. Así el
   turquesa significa una sola cosa: "esto tiene el foco ahora". */
.chip:hover { background: var(--surface-2); border-color: var(--ink-faint); color: var(--ink); }
.chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.chip.is-active { background: var(--ink); color: var(--bg); border-color: var(--ink); }

/* Tables */
.spec-table { width: 100%; font-size: .93rem; }
.spec-table th, .spec-table td { text-align: left; padding: .65rem .75rem; border-bottom: 1px solid var(--border); }
.spec-table th { width: 42%; color: var(--ink-soft); font-weight: 600; }
.spec-table tr:last-child th, .spec-table tr:last-child td { border-bottom: 0; }
.spec-group { margin-bottom: 1.6rem; }
.spec-group h3 { font-size: 1rem; margin-bottom: .5rem; color: var(--accent-dark); }

/* Forms */
.field { display: flex; flex-direction: column; gap: .4rem; }
.field label { font-size: .86rem; font-weight: 700; }
.field input, .field select, .field textarea {
  padding: .75rem .9rem; border-radius: var(--radius-s); border: 1px solid var(--border); background: var(--surface);
}
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--accent); }

/* Search box */
.search-box { position: relative; display: flex; align-items: center; }
.search-box svg { position: absolute; left: 1rem; width: 18px; height: 18px; color: var(--ink-faint); }
.search-box input {
  width: 100%; padding: .95rem 1.1rem .95rem 2.8rem; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface); font-size: 1rem;
}
.search-box input:focus { border-color: var(--accent); }
.search-results {
  position: absolute; top: calc(100% + .5rem); left: 0; right: 0; z-index: 60;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-m);
  box-shadow: var(--shadow-l); max-height: 360px; overflow-y: auto; display: none;
}
.search-results.is-open { display: block; }
.search-results a { display: flex; align-items: center; gap: .7rem; padding: .7rem .9rem; border-bottom: 1px solid var(--border); }
.search-results a:last-child { border-bottom: 0; }
.search-results a:hover { background: var(--accent-soft); }
.search-results img { width: 36px; height: 36px; object-fit: contain; background: var(--bg-alt); border-radius: 6px; }
.search-empty { padding: 1rem; color: var(--ink-soft); font-size: .9rem; }
.search-box-wrap { display: flex; flex-direction: column; align-items: flex-start; gap: .5rem; }
.notfound-trigger {
  background: none; border: 0; padding: 0; font-size: .82rem; font-weight: 600;
  color: var(--ink-soft); text-decoration: underline; text-underline-offset: 2px; cursor: pointer;
}
.notfound-trigger:hover { color: var(--accent-dark); }

/* Resultados de búsqueda en modo "añadir al comparador": mismo aspecto
   que los <a> normales, pero <button> porque no navegan. */
.search-result-btn {
  display: flex; align-items: center; gap: .7rem; padding: .7rem .9rem; width: 100%;
  border-bottom: 1px solid var(--border); background: none; border-left: 0; border-right: 0; border-top: 0;
  font: inherit; text-align: left; color: inherit; cursor: pointer;
}
.search-results button.search-result-btn:last-child { border-bottom: 0; }
.search-results button.search-result-btn:hover { background: var(--accent-soft); }
.search-suggest-label { padding: .8rem .9rem 0; font-size: .8rem; font-weight: 700; color: var(--ink-soft); }

/* Panel "¿No encuentras tu modelo?" — inline, dentro del propio dropdown
   de resultados. Nunca modal. */
.notfound-panel { padding: 1rem .9rem 1.1rem; }
.notfound-title { font-weight: 700; margin-bottom: .3rem; }
.notfound-sub { font-size: .86rem; color: var(--ink-soft); margin-bottom: .9rem; }
.notfound-panel form { display: flex; flex-direction: column; gap: .8rem; }
.notfound-panel .field label em { font-weight: 400; font-style: normal; color: var(--ink-faint); }
.nf-row { display: flex; flex-direction: column; gap: .8rem; }
@media (min-width: 520px) { .nf-row { flex-direction: row; } .nf-row .field { flex: 1; min-width: 0; } }
.notfound-error { font-size: .84rem; color: var(--danger); margin: 0; }
.notfound-confirm { padding: .3rem 0; font-size: .92rem; }
.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* Footer */
.site-footer { background: var(--ink); color: var(--bg); padding-block: 3.5rem 2rem; margin-top: 4rem; }
.site-footer a { color: color-mix(in srgb, var(--bg) 70%, transparent); }
.site-footer a:hover { color: var(--bg); }
.footer-grid { display: grid; gap: 2.2rem; grid-template-columns: 1fr; }
@media (min-width: 720px) { .footer-grid { grid-template-columns: 1.4fr repeat(3, 1fr); } }
.footer-grid h4 { font-size: .82rem; text-transform: uppercase; letter-spacing: .05em; color: color-mix(in srgb, var(--bg) 60%, transparent); margin-bottom: .9rem; }
.footer-grid ul { display: flex; flex-direction: column; gap: .55rem; font-size: .92rem; }
.footer-disclosure { margin-top: 2.4rem; padding-top: 1.6rem; border-top: 1px solid rgba(255,255,255,.14); font-size: .82rem; color: color-mix(in srgb, var(--bg) 60%, transparent); }
.footer-bottom { display: flex; flex-wrap: wrap; gap: .8rem 1.4rem; justify-content: space-between; margin-top: 1.4rem; font-size: .82rem; color: color-mix(in srgb, var(--bg) 55%, transparent); }

/* Breadcrumbs */
.breadcrumbs { display: flex; flex-wrap: wrap; gap: .35rem; font-size: .84rem; color: var(--ink-soft); margin-bottom: 1.2rem; }
.breadcrumbs a:hover { color: var(--accent-dark); }
.breadcrumbs .sep { opacity: .6; }

/* =============================================================
   6. Sections — home
   ============================================================= */
.hero { padding-block: clamp(2.6rem, 7vw, 5rem) clamp(2rem, 5vw, 3.5rem); position: relative; overflow-x: clip; overflow-y: visible; }
.hero-halo { position: absolute; inset: -30% -10% -60% -10%; background: radial-gradient(45% 45% at 60% 20%, var(--accent-soft), transparent 70%); pointer-events: none; z-index: -1; }
.hero-grid { display: grid; gap: 2.4rem; align-items: center; }
@media (min-width: 960px) { .hero-grid { grid-template-columns: 1.1fr .9fr; } }
.hero-badges { display: flex; gap: .6rem; flex-wrap: wrap; margin-top: 1.3rem; }
.hero-actions { display: flex; gap: .7rem; flex-wrap: wrap; margin-top: 1.6rem; }
.hero-search { margin-top: 1.8rem; max-width: 480px; }
.hero-stats { display: flex; gap: 1.8rem; margin-top: 1.6rem; flex-wrap: wrap; }
.hero-stats .stat b { font-family: var(--display); font-size: 1.5rem; display: block; }
.hero-stats .stat span { font-size: .82rem; color: var(--ink-soft); }
.hero-visual {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-xl);
  padding: 1.6rem; box-shadow: var(--shadow-l); position: relative;
}
.hero-visual-tag { position: absolute; top: -14px; left: 1.4rem; }
.hero-method-title { font-size: 1.05rem; margin-bottom: 1.2rem; }
.hero-method-steps { display: flex; flex-direction: column; gap: 1.1rem; }
.hero-method-steps .hwc-item .num { font-size: 1.2rem; }

/* Cabecera propia de los chips: deliberadamente distinta tipográficamente
   del título general y de los 3 pasos, para que quede claro que pertenece
   a la interacción de los chips, no a la metodología de arriba. */
.hero-need-head { margin-top: 1.5rem; padding-top: 1.3rem; border-top: 1px solid var(--border); }
.hero-need-title { font-size: .92rem; font-weight: 700; color: var(--ink); margin-bottom: .2rem; }
.hero-need-subtitle { font-size: .82rem; color: var(--ink-soft); }

.hero-method-chips {
  margin-top: .9rem; display: grid; grid-template-columns: 1fr 1fr; gap: .6rem .7rem;
}
.hero-method-chips .chip {
  width: 100%; text-align: center; white-space: normal; line-height: 1.3;
}
@media (max-width: 599px) { .hero-method-chips { grid-template-columns: 1fr; } }

.hero-need-status { margin-top: 1rem; min-height: 1.3rem; }
.hero-need-empty { font-size: .84rem; color: var(--ink-soft); }
.hero-need-confirm { display: flex; flex-direction: column; gap: .6rem; align-items: flex-start; }
.hero-need-confirm[hidden] { display: none; }
.hero-need-count { font-size: .86rem; font-weight: 700; color: var(--ink); }
.hero-need-cta { align-self: stretch; text-align: center; }
@media (min-width: 640px) { .hero-need-cta { align-self: flex-start; } }

.hero-method-trust { margin-top: 1.2rem; padding-top: 1.2rem; border-top: 1px solid var(--border); font-size: .82rem; color: var(--ink-soft); }

.tools-strip { display: grid; gap: 1rem; grid-template-columns: 1fr; margin-top: -1.5rem; position: relative; z-index: 2; }
@media (min-width: 720px) { .tools-strip { grid-template-columns: 1fr 1fr; } }
.tool-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-l);
  padding: 1.6rem; display: flex; gap: 1.1rem; align-items: flex-start; box-shadow: var(--shadow-s);
  transition: box-shadow .25s var(--ease-out), transform .25s var(--ease-out);
}
.tool-card:hover { box-shadow: var(--shadow-m); transform: translateY(-2px); }
.tool-card .icon { width: 52px; height: 52px; border-radius: var(--radius-m); background: var(--accent-soft); color: var(--accent-dark); display: grid; place-items: center; flex: none; }
.tool-card .icon svg { width: 26px; height: 26px; }
.tool-card h3 { font-size: 1.15rem; margin-bottom: .35rem; }
.tool-card p { color: var(--ink-soft); font-size: .92rem; margin-bottom: .8rem; }

.category-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }
@media (min-width: 720px) { .category-grid { grid-template-columns: repeat(4, 1fr); } }
.category-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-m);
  padding: 1.3rem 1.1rem; text-align: left; transition: all .2s var(--ease-out);
}
.category-card:hover { border-color: var(--accent); box-shadow: var(--shadow-s); transform: translateY(-2px); }
.category-card .icon { width: 40px; height: 40px; border-radius: 10px; background: var(--accent-soft); color: var(--accent-dark); display: grid; place-items: center; margin-bottom: .8rem; }
.category-card .icon svg { width: 20px; height: 20px; }
.category-card h3 { font-size: .96rem; margin-bottom: .2rem; }
.category-card span { font-size: .8rem; color: var(--ink-soft); }
/* Segundo camino de navegación en categorias.html ("por problema"): mismo
   tratamiento de superficie ya usado en .how-we-choose para separar bloques
   alternos sin introducir un componente nuevo ni recurrir al verde. */
.hub-problem-section { background: var(--surface-2); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }

.how-we-choose { background: var(--surface-2); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.hwc-grid { display: grid; gap: 1.4rem; grid-template-columns: 1fr; }
@media (min-width: 720px) { .hwc-grid { grid-template-columns: repeat(3, 1fr); } }
.hwc-item { display: flex; gap: .9rem; }
.hwc-item .num { font-family: var(--display); font-size: 1.4rem; color: var(--accent-dark); flex: none; }
.hwc-item h4 { font-size: 1rem; margin-bottom: .3rem; }
.hwc-item p { font-size: .9rem; color: var(--ink-soft); }

.segment-tabs { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1.4rem; }

/* =============================================================
   7. Ficha (página de producto)
   ============================================================= */
.ficha-top { display: grid; gap: 2.4rem; grid-template-columns: 1fr; }
/* El sticky de .ficha-galeria solo tiene sentido en el layout de 2 columnas
   (imagen a la izquierda, texto que se desplaza a la derecha). Por debajo de
   960px .ficha-top es una sola columna: si la galería se queda sticky ahí,
   se pega arriba de la pantalla y tapa el precio/CTA y el resumen rápido que
   van justo debajo en el flujo. Por eso el sticky va dentro de la misma
   media query que activa las 2 columnas, no suelto. */
@media (min-width: 960px) {
  .ficha-top { grid-template-columns: 1fr 1.05fr; align-items: start; }
  .ficha-galeria { position: sticky; top: calc(var(--header-h) + 1rem); }
}
.ficha-img-main {
  aspect-ratio: 1/1; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-l);
  display: grid; place-items: center; overflow: hidden; margin-bottom: .8rem;
}
.ficha-img-main img { width: 78%; height: 78%; object-fit: contain; }
.ficha-thumbs { display: flex; gap: .6rem; }
.ficha-thumbs button {
  width: 68px; height: 68px; border-radius: var(--radius-s); border: 2px solid var(--border);
  background: var(--surface-2); overflow: hidden; padding: .3rem;
}
.ficha-thumbs button.is-active { border-color: var(--accent); }
.ficha-thumbs img { width: 100%; height: 100%; object-fit: contain; }

.ficha-marca { color: var(--ink-soft); font-weight: 700; font-size: .85rem; text-transform: uppercase; letter-spacing: .04em; margin-bottom: .3rem; }
.ficha-nombre { font-size: clamp(1.6rem, 3vw, 2.1rem); margin-bottom: .7rem; }
.ficha-rating { display: flex; align-items: center; gap: .6rem; font-size: .92rem; color: var(--ink-soft); margin-bottom: 1rem; }
.ficha-rating .stars { color: var(--gold); font-size: 1.05rem; letter-spacing: 2px; }
.ficha-badges { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1rem; }
.ficha-precio-box {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-l); padding: 1.3rem;
  margin-bottom: 1.2rem;
}
.ficha-precio-row { display: flex; align-items: baseline; gap: .7rem; flex-wrap: wrap; }
.ficha-precio-row .price-now { font-size: 2rem; }
.ficha-precio-nota { font-size: .82rem; color: var(--ink-soft); margin-top: .4rem; }
.ficha-cta { margin-top: 1rem; display: flex; flex-direction: column; gap: .6rem; }
.ficha-cta .btn { width: 100%; }
.ficha-quicklist { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem 1.2rem; margin-top: 1.2rem; font-size: .88rem; }
.ficha-quicklist li { display: flex; justify-content: space-between; gap: .5rem; padding-block: .35rem; border-bottom: 1px dashed var(--border); }
.ficha-quicklist b { font-weight: 700; }

.ficha-section { padding-block: 2.2rem; border-top: 1px solid var(--border); }
.ficha-section h2 { font-size: 1.4rem; margin-bottom: 1.1rem; }

/* Ficha BOFU — bloques orientados a decisión (veredicto, encaje, "debes saber") */
.ficha-lead { font-size: 1.05rem; color: var(--ink-soft); margin-top: .6rem; line-height: 1.55; max-width: 56ch; }
.veredicto-box { margin-top: 1.1rem; padding: 1rem 1.2rem; border-left: 3px solid var(--accent); background: var(--accent-soft); border-radius: 0 var(--radius-s) var(--radius-s) 0; font-size: .97rem; line-height: 1.65; max-width: 60ch; }
.ficha-cta-standalone { max-width: 420px; margin: 1.8rem auto 0; }
.debes-saber-list { display: flex; flex-direction: column; gap: 1.5rem; margin-top: 1.2rem; }
.debes-saber-item { padding-left: 1.1rem; border-left: 2px solid var(--border); }
.debes-saber-item h3 { font-size: 1.02rem; margin-bottom: .35rem; }
.debes-saber-item p { font-size: .94rem; color: var(--ink-soft); line-height: 1.65; margin: 0; max-width: 68ch; }

.radar-wrap { display: grid; gap: 1.6rem; grid-template-columns: 1fr; align-items: center; }
@media (min-width: 720px) { .radar-wrap { grid-template-columns: 448px 1fr; } }
.radar-legend { display: flex; flex-direction: column; gap: .5rem; }
.radar-legend .row { display: flex; align-items: center; justify-content: space-between; gap: .8rem; padding: .5rem .7rem; border-radius: var(--radius-s); background: var(--surface-2); font-size: .88rem; }
.radar-legend b { font-family: var(--display); }
.radar-note { font-size: .82rem; color: var(--ink-soft); margin-top: .8rem; }

.specs-extra summary { cursor: pointer; font-weight: 700; padding: .8rem 0; color: var(--accent-dark); }

.ficha-evidencia { display: grid; gap: 1.2rem; grid-template-columns: 1fr; align-items: center; margin-bottom: 2.6rem; }
.ficha-evidencia:last-child { margin-bottom: 0; }
.ficha-evidencia-media img { display: block; width: 100%; height: auto; border-radius: var(--radius-m); }
.ficha-evidencia-texto h3 { font-size: 1.05rem; margin-bottom: .5rem; }
.ficha-evidencia-texto p { font-size: .95rem; color: var(--ink-soft); line-height: 1.7; margin: 0; }
@media (min-width: 860px) {
  .ficha-evidencia { grid-template-columns: 1fr 1fr; gap: 2.8rem; }
  .ficha-evidencia.is-reversa .ficha-evidencia-media { order: 2; }
  .ficha-evidencia.is-reversa .ficha-evidencia-texto { order: 1; }
  .ficha-evidencia.is-protagonista { grid-template-columns: 1.15fr 1fr; }
  .ficha-evidencia-texto p { max-width: 46ch; }
}

.editorial-cuerpo { max-width: 68ch; font-size: 1.02rem; color: var(--ink-soft); display: flex; flex-direction: column; gap: 1rem; }
.editorial-cuerpo p { line-height: 1.75; }
.editorial-cuerpo strong { color: var(--ink); }
.pros-contras { display: grid; gap: 1.2rem; grid-template-columns: 1fr; margin-top: 1.6rem; }
@media (min-width: 640px) { .pros-contras { grid-template-columns: 1fr 1fr; } }
.pc-col { border-radius: var(--radius-m); padding: 1.2rem; }
.pc-col.pros { background: color-mix(in srgb, var(--ok) 10%, transparent); }
.pc-col.contras { background: var(--danger-soft); }
.pc-col h3 { font-size: .95rem; margin-bottom: .7rem; display: flex; align-items: center; gap: .4rem; }
.pc-col h3 svg { width: 1.15em; height: 1.15em; flex: none; }
.pc-col li { display: flex; gap: .5rem; font-size: .92rem; margin-bottom: .5rem; align-items: flex-start; }
.pc-col li svg { width: 1.05em; height: 1.05em; flex: none; margin-top: .15em; }
.ideal-para { margin-top: 1.4rem; padding: 1rem 1.2rem; border-left: 3px solid var(--accent); background: var(--accent-soft); border-radius: 0 var(--radius-s) var(--radius-s) 0; font-size: .95rem; }
.no-recomendado { margin-top: .8rem; padding: 1rem 1.2rem; border-left: 3px solid var(--ink-faint); background: var(--surface-2); border-radius: 0 var(--radius-s) var(--radius-s) 0; font-size: .92rem; color: var(--ink-soft); }

.audience-grid { display: grid; gap: 1rem; grid-template-columns: 1fr; margin-top: 1.4rem; }
@media (min-width: 720px) { .audience-grid { grid-template-columns: repeat(3, 1fr); } }
.audience-card { background: var(--surface-2); border-radius: var(--radius-m); padding: 1.1rem; font-size: .9rem; }
.audience-card h4 { font-size: .85rem; text-transform: uppercase; letter-spacing: .03em; color: var(--accent-dark); margin-bottom: .5rem; }

.review-summary { background: var(--surface-2); border-radius: var(--radius-m); padding: 1.2rem; font-size: .96rem; color: var(--ink-soft); margin-bottom: 1rem; }
.review-note { font-size: .78rem; color: var(--ink-soft); margin-top: .8rem; }

.similares-grid { display: grid; gap: 1.1rem; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); margin-top: 1rem; }

.disclosure-box { background: var(--gold-soft); border: 1px solid color-mix(in srgb, var(--gold) 40%, transparent); border-radius: var(--radius-m); padding: 1.1rem 1.3rem; font-size: .85rem; color: var(--ink-soft); margin-top: 2.4rem; }

/* =============================================================
   8. Comparador
   ============================================================= */
.comparador-empty { text-align: center; padding: 4rem 1.5rem; background: var(--surface-2); border-radius: var(--radius-l); border: 1px dashed var(--border); }
.comparador-empty svg { width: 56px; height: 56px; color: var(--ink-faint); margin: 0 auto 1rem; }

.compare-toolbar { display: flex; flex-wrap: wrap; gap: .8rem; align-items: center; justify-content: space-between; margin-bottom: 1.4rem; }
.compare-slots { display: flex; gap: .7rem; flex-wrap: wrap; }
.compare-slot {
  position: relative; width: 96px; text-align: center;
}
.compare-slot .thumb { width: 96px; height: 96px; border-radius: var(--radius-m); background: var(--surface-2); border: 1px solid var(--border); display: grid; place-items: center; overflow: hidden; }
.compare-slot .thumb img { width: 70%; height: 70%; object-fit: contain; }
.compare-slot .name { font-size: .74rem; margin-top: .4rem; display: block; }
.compare-slot .remove-badge {
  position: absolute; top: -8px; right: -8px; width: 26px; height: 26px; border-radius: 999px;
  background: var(--ink); color: var(--bg); display: grid; place-items: center; box-shadow: var(--shadow-s); font-size: .8rem;
}
.compare-slot-add {
  width: 96px; height: 96px; border-radius: var(--radius-m); border: 2px dashed var(--border);
  display: grid; place-items: center; color: var(--ink-faint); font-size: 1.6rem;
  background: var(--surface); font-family: inherit; cursor: pointer;
}
.compare-slot-add:hover { border-color: var(--accent); color: var(--accent-dark); }

/* Capa humana: veredicto, bloques de decisión, diferencia que importa.
   Va ANTES del radar/tabla a propósito — ver principio del comparador. */
.compare-verdict { margin-bottom: 1.6rem; }
.compare-verdict .lead { max-width: 68ch; }

.compare-decisions { display: grid; gap: 1.2rem; margin-bottom: 1.6rem; grid-template-columns: 1fr; }
.compare-decisions.is-grid { grid-template-columns: 1fr; }

.compare-decision-card, .compare-compact-card {
  border: 1px solid var(--border); border-radius: var(--radius-l); background: var(--surface);
  padding: 1.5rem; display: flex; flex-direction: column;
}
.compare-decision-card h3, .compare-compact-card h3 { font-size: 1.1rem; margin-bottom: .8rem; }
.compare-compact-highlight { font-size: .82rem; font-weight: 700; color: var(--accent-dark); margin-bottom: .3rem; }
.compare-decision-list { display: flex; flex-direction: column; gap: .55rem; margin-bottom: .9rem; }
.compare-decision-list li { position: relative; padding-left: 1.3rem; font-size: .94rem; line-height: 1.5; }
.compare-decision-list li::before { content: "✓"; position: absolute; left: 0; color: var(--accent); font-weight: 700; }
.compare-compact-card p { font-size: .94rem; line-height: 1.5; margin-bottom: .7rem; }
.compare-decision-ojo { font-size: .88rem; color: var(--ink-soft); line-height: 1.5; margin-bottom: 1.1rem; }
.compare-decision-ojo strong { color: var(--ink); }

.compare-decision-cta { margin-top: auto; }
.compare-decision-cta .btn.btn-sm {
  padding: 1.05rem 1.4rem; font-size: 1.02rem; min-height: 48px;
}
.compare-secondary-link {
  display: block; text-align: center; margin-top: .7rem; font-size: .9rem; font-weight: 600;
  color: var(--ink-soft);
}
.compare-secondary-link:hover { color: var(--accent-dark); }

.compare-diff {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-l);
  padding: 1.4rem 1.6rem; margin-bottom: 1.6rem;
}
.compare-diff h2 { font-size: 1rem; margin-bottom: .5rem; }
.compare-diff p { font-size: .96rem; line-height: 1.55; color: var(--ink-soft); max-width: 68ch; }

@media (min-width: 720px) {
  .compare-decisions.is-pair { grid-template-columns: 1fr 1fr; align-items: stretch; }
  .compare-decisions.is-grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
}

/* Radar: secundario, plegable, con tope de tamaño — nunca vuelve a ocupar
   casi el ancho completo del contenedor. */
.compare-radar-details { margin-bottom: 1.6rem; border: 1px solid var(--border); border-radius: var(--radius-l); background: var(--surface); overflow: hidden; }
.compare-radar-details summary {
  cursor: pointer; padding: 1rem 1.4rem; font-weight: 700; font-size: .94rem; color: var(--ink-soft);
  list-style: none;
}
.compare-radar-details summary::-webkit-details-marker { display: none; }
.compare-radar-details summary::before { content: "▸ "; }
.compare-radar-details[open] summary::before { content: "▾ "; }
.compare-radar-panel { padding: 0 1.6rem 1.6rem; max-width: 540px; margin-inline: auto; }
.compare-radar-legend { display: flex; gap: 1rem; flex-wrap: wrap; justify-content: center; margin-top: 1rem; }
.compare-radar-legend .item { display: flex; align-items: center; gap: .45rem; font-size: .86rem; font-weight: 600; }
.compare-radar-legend .dot { width: 12px; height: 12px; border-radius: 999px; }

.compare-table-details { border: 1px solid var(--border); border-radius: var(--radius-l); background: var(--surface); overflow: hidden; }
.compare-table-details summary {
  cursor: pointer; padding: 1rem 1.4rem; font-weight: 700; font-size: .94rem; color: var(--ink-soft);
  list-style: none;
}
.compare-table-details summary::-webkit-details-marker { display: none; }
.compare-table-details summary::before { content: "▸ "; }
.compare-table-details[open] summary::before { content: "▾ "; }
.compare-table-details .compare-table-wrap { border: 0; border-radius: 0; border-top: 1px solid var(--border); }
.compare-table-details .compare-cards { padding: 0 1.1rem 1.1rem; }

.compare-table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--radius-l); background: var(--surface); }
.compare-table { min-width: 640px; }
.compare-table th, .compare-table td { padding: .9rem 1.1rem; border-bottom: 1px solid var(--border); vertical-align: top; }
.compare-table thead th { position: sticky; top: 0; background: var(--surface); z-index: 2; }
.compare-table .row-label { position: sticky; left: 0; background: var(--surface); font-weight: 700; font-size: .84rem; color: var(--ink-soft); z-index: 1; min-width: 160px; }
.compare-table .col-product { min-width: 200px; text-align: center; }
.compare-table .col-product img { width: 90px; height: 90px; object-fit: contain; margin: 0 auto .6rem; }
.compare-table td.is-best { background: var(--accent-soft); font-weight: 700; color: var(--accent-dark); border-radius: var(--radius-s); }
.compare-table .sect-row td, .compare-table .sect-row th { background: var(--bg-alt); font-weight: 700; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); }

.compare-cards { display: none; flex-direction: column; gap: 1rem; }
.compare-card {
  border: 1px solid var(--border); border-radius: var(--radius-l); background: var(--surface); overflow: hidden;
}
.compare-card-head { display: flex; align-items: center; gap: .9rem; padding: 1rem 1.1rem; }
.compare-card-head img { width: 64px; height: 64px; object-fit: contain; background: var(--surface-2); border-radius: var(--radius-s); }
.compare-card-body { display: none; padding: 0 1.1rem 1.1rem; }
.compare-card.is-open .compare-card-body { display: block; }
.compare-card-body dl { display: flex; flex-direction: column; }
.compare-card-body .row { display: flex; justify-content: space-between; gap: 1rem; padding: .6rem 0; border-bottom: 1px dashed var(--border); font-size: .9rem; }
.compare-card-body .row.is-best dd { color: var(--accent-dark); font-weight: 700; }
.compare-card-toggle svg { width: 18px; height: 18px; transition: transform .2s var(--ease-out); margin-left: auto; }
.compare-card.is-open .compare-card-toggle svg { transform: rotate(180deg); }

@media (max-width: 719px) {
  .compare-table-wrap { display: none; }
  .compare-cards { display: flex; }
}

/* =============================================================
   9. Recomendador (quiz)
   ============================================================= */
.quiz-shell { max-width: 720px; margin-inline: auto; }
.quiz-progress { height: 6px; border-radius: 999px; background: var(--border); overflow: hidden; margin-bottom: 1.8rem; }
.quiz-progress .bar { height: 100%; background: var(--accent); border-radius: 999px; transition: width .3s var(--ease-out); width: 0%; }
.quiz-step { display: none; }
.quiz-step.is-active { display: block; }
.quiz-step h2 { font-size: 1.3rem; margin-bottom: .5rem; }
.quiz-note { font-size: .82rem; color: var(--ink-soft); margin: 0 0 1.1rem; }
.quiz-step h2 + .quiz-options { margin-top: .8rem; }
.quiz-options { display: grid; gap: .8rem; grid-template-columns: 1fr; }
@media (min-width: 560px) { .quiz-options.cols-2 { grid-template-columns: 1fr 1fr; } }
.quiz-option {
  display: flex; align-items: center; gap: .8rem; padding: 1rem 1.1rem; border: 2px solid var(--border);
  border-radius: var(--radius-m); background: var(--surface); text-align: left; transition: all .18s var(--ease-out);
}
.quiz-option:hover { border-color: var(--accent); }
.quiz-option.is-selected { border-color: var(--accent); background: var(--accent-soft); }
.quiz-option .ico { width: 34px; height: 34px; border-radius: 10px; background: var(--bg-alt); display: grid; place-items: center; flex: none; }
.quiz-option .ico svg { width: 18px; height: 18px; }
.quiz-nav { display: flex; justify-content: space-between; margin-top: 1.8rem; gap: 1rem; }
.quiz-result-podium { display: flex; flex-direction: column; gap: 1.2rem; margin-top: 1.4rem; }
.podium-card { border-radius: var(--radius-l); border: 1px solid var(--border); background: var(--surface); padding: 1.4rem; text-align: center; position: relative; }
.podium-card.is-first { border-color: var(--gold); box-shadow: var(--shadow-m); padding: 1.6rem; }
.podium-medal { font-size: 1.8rem; margin-bottom: .4rem; }
.podium-card img { width: 120px; height: 120px; object-fit: contain; margin: 0 auto .8rem; }
.podium-card .why { font-size: .84rem; color: var(--ink-soft); margin: .6rem 0 1rem; text-align: left; }
.podium-alternatives { display: grid; gap: 1.2rem; grid-template-columns: 1fr; }
.podium-alternatives .podium-card { padding: 1.1rem; }
.podium-alternatives .podium-card img { width: 90px; height: 90px; }
@media (min-width: 560px) {
  .podium-alternatives { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
}
@media (min-width: 780px) {
  .podium-card.is-first { display: flex; align-items: center; gap: 1.8rem; text-align: left; }
  .podium-card.is-first .podium-medal { font-size: 2.2rem; margin-bottom: 0; flex: none; }
  .podium-card.is-first img { width: 190px; height: 190px; margin: 0; flex: none; }
  .podium-card.is-first .podium-body { flex: 1; min-width: 0; }
  .podium-card.is-first .why { max-width: 64ch; }
}

/* =============================================================
   10. Misc pages — categoría, ofertas, guías, legal
   ============================================================= */
.filters-bar { display: flex; flex-wrap: wrap; gap: .8rem; align-items: center; justify-content: space-between; margin-bottom: 1.6rem; }
.sort-select { padding: .6rem .9rem; border-radius: var(--radius-s); border: 1px solid var(--border); background: var(--surface); font-size: .88rem; font-weight: 600; }
.category-intro { max-width: 70ch; color: var(--ink-soft); font-size: 1.02rem; margin-bottom: 1.8rem; }
.empty-state { text-align: center; padding: 3rem 1.5rem; color: var(--ink-soft); }

.guide-body { max-width: 72ch; margin-inline: auto; font-size: 1.04rem; }
.guide-body h2 { font-size: 1.4rem; margin: 2rem 0 .9rem; }
.guide-body p { color: var(--ink-soft); line-height: 1.8; margin-bottom: 1rem; }
.guide-shortlist { display: flex; flex-direction: column; gap: 1rem; margin-block: 1.4rem; }
.shortlist-item { display: flex; gap: 1rem; align-items: center; border: 1px solid var(--border); border-radius: var(--radius-m); padding: 1rem; background: var(--surface); }
.shortlist-item img { width: 72px; height: 72px; object-fit: contain; background: var(--surface-2); border-radius: var(--radius-s); flex: none; }
.shortlist-item .rank { font-family: var(--display); font-size: 1.3rem; color: var(--accent-dark); flex: none; width: 2ch; }

.legal-body { max-width: 72ch; margin-inline: auto; font-size: 1rem; color: var(--ink-soft); }
.legal-body h2 { font-size: 1.2rem; margin: 1.8rem 0 .7rem; color: var(--ink); }
.legal-body p, .legal-body li { margin-bottom: .8rem; line-height: 1.7; }
.legal-body li { margin-left: 1.4rem; list-style: disc; }

.brand-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }
@media (min-width: 720px) { .brand-grid { grid-template-columns: repeat(4, 1fr); } }
.brand-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-m); padding: 1.4rem; text-align: center; opacity: .6; }
.brand-card b { display: block; font-family: var(--display); font-size: 1.05rem; margin-bottom: .3rem; }
.brand-card span { font-size: .78rem; color: var(--ink-soft); }

.offer-filters { display: flex; flex-wrap: wrap; gap: .6rem; margin-bottom: 1.6rem; }

/* =============================================================
   11. Reduced motion — only intrusive effects
   ============================================================= */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}
.reveal { opacity: 0; transform: translateY(16px); transition: opacity .5s var(--ease-out), transform .5s var(--ease-out); }
.reveal.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
}
