/* =====================================================================
   Teseo Data Lab — Reportes descargables · /lp/reportes/*

   Se carga DESPUÉS de styles.css y solo agrega lo que la venta de un
   producto necesita y las landings de Ads no tienen: precio, ficha
   técnica, índice del reporte, tabla de datos de muestra y barra de
   compra fija en móvil.

   Reusa los tokens de styles.css (--brand, --accent, --ink…) y su mismo
   lenguaje: todo cuadrado, bordes de 2px, sombras sólidas con offset.
   ===================================================================== */

/* =====================================================================
   TEMA CARMÍN — la paleta del PDF del Estudio Zona Norte
   =====================================================================
   Se aplica poniendo `class="tema-reporte"` en el <body>. Es un tema, no
   un cambio global: los tokens se redefinen en el <body> y desde ahí
   cascadean a todo, sin tocar `:root`.

   POR QUÉ ASÍ. `styles.css` lo comparten las 5 landings de la campaña de
   Google Ads, y esas van con el violeta de marca de Teseo. Repintar
   `:root` las arrastraría a todas. Con el tema en una clase, la página
   que lo lleva cambia y las demás siguen exactamente igual.

   DE DÓNDE SALEN LOS COLORES. Están medidos del PDF, no estimados a ojo:
   son los rellenos vectoriales que más superficie cubren en las 41
   páginas del reporte.

     #17171A  negro tinta     paneles oscuros, titulares, tablas
     #E8264A  carmín          reglas, cifras, píldoras, acentos
     #FF3054  carmín vivo     solo para hover
     #C2143C  carmín profundo texto pequeño sobre claro (contraste AA)
     #FFF0F3  rosa tenue      fondos de bloque de datos
     #F9F8F7  blanco cálido   fondo de página

   EL REPARTO DE PAPELES importa más que los hex. En el reporte el negro
   es la estructura —los paneles, los encabezados de tabla, los bordes— y
   el carmín es lo que pide que lo mires: el ojo del apartado, la regla
   bajo el título, la cifra grande, la píldora de "NUEVO". Por eso aquí
   --brand (bordes, paneles, cajas) es el negro y --accent (barras,
   cuadros, cifras) el carmín, y no al revés.

   LA GEOMETRÍA NO CAMBIA. El PDF redondea esquinas y esta página es toda
   recta, con sombra sólida desplazada. Se deja así a propósito: lo que se
   pidió fue el color, y el trazo cuadrado es el lenguaje ya construido y
   documentado de estas landings. Mezclar las dos cosas a medias se vería
   peor que cualquiera de las dos completa.
   ===================================================================== */
.tema-reporte {
  --brand: #17171A;
  --brand-hover: #2E2B2F;
  --brand-soft: #FFF0F3;
  --brand-line: rgba(23, 23, 26, .16);

  --accent: #E8264A;
  --accent-dark: #C2143C;   /* el #E8264A no alcanza 4.5:1 en texto chico */

  /* Las líneas de styles.css tiran a violeta (#dcdce6). Aquí se vuelven
     neutras cálidas para que no peleen con el fondo del reporte. */
  --line: #E2DEDF;
  --line-soft: #EDE9EA;
}

/* Fondo de página cálido, como el del PDF. Las tarjetas siguen en blanco
   puro: ese contraste mínimo es lo que le da el aire editorial. */
body.tema-reporte { background: #F9F8F7; }

/* El botón de compra va en carmín, no en negro. En el reporte el carmín
   es el color de lo accionable —las píldoras, los destacados— y el negro
   el de la estructura. Un CTA negro se confundiría con los bordes.

   El fondo NO es el #E8264A exacto del PDF: con blanco encima da 4.37:1 y
   el texto del botón (16px bold) necesita 4.5:1. Bajarle un 2% de brillo
   lo deja en 4.54:1 sin que se note la diferencia al lado del reporte.
   El hover va más oscuro, no más claro, por la misma razón: el #FF3054
   del PDF caería a 3.62:1 y el botón sería menos legible justo cuando el
   cursor está encima. */
.tema-reporte .btn-primary { background: #E32548; color: #fff; }
.tema-reporte .btn-primary:hover { background: #C7213F; }

/* Las cifras grandes son carmín, que es la firma visual del reporte.
   Por defecto usan --brand y habrían quedado negras. */
.tema-reporte .price-v,
.tema-reporte .fig-v,
.tema-reporte .bb-price,
.tema-reporte .data-table td.num { color: var(--accent); }

/* Los cuadritos de acento llevan icono blanco: sobre carmín, el negro
   original del ámbar no contrasta. Ver la nota de los iconos más abajo. */
.tema-reporte .deliverable .mark,
.tema-reporte .point .box,
.tema-reporte .spec .sq,
.tema-reporte .arrow-list .sq,
.tema-reporte .icon-box,
.tema-reporte .cta-mark,
.tema-reporte .cover .cover-tag { color: #fff; }

/* Tintes que estaban calculados sobre el violeta y el ámbar */
.tema-reporte .data-table tbody tr:nth-child(odd) td { background: #FDF2F4; }
.tema-reporte .pago-pendiente { background: #FFF0F3; }

/* =====================================================================
   TEMA CORAL — la paleta del PDF de Occidente y Pacífico Norte
   =====================================================================
   Mismo mecanismo que .tema-reporte: tokens redefinidos en el <body>.
   Colores medidos de las páginas del PDF (portada, índice, cifras):

     #182A3C  azul tinta      fondos oscuros, índice, estructura
     #365460  pizarra         paneles de datos
     #D86648  coral           reglas, números de capítulo, acentos
     #FCEAEA  rosa tenue      fondos de bloque

   CONTRASTE. El coral del PDF con texto blanco da 3.5:1 y no alcanza AA
   para el botón; se oscurece a #C0502F (4.7:1), hover #A8442A. El texto
   chico sobre claro va en #B24A2E (5:1). Las cifras grandes sí usan el
   coral del PDF: por tamaño basta con 3:1. La etiqueta de portada y los
   cuadros de acento conservan el icono oscuro de styles.css, que sobre
   coral contrasta 5:1; el blanco de .tema-reporte aquí no llegaría. */
.tema-occidente {
  --brand: #182A3C;
  --brand-hover: #243A50;
  --brand-soft: #FCEFEA;
  --brand-line: rgba(24, 42, 60, .16);

  --accent: #D86648;
  --accent-dark: #B24A2E;

  --line: #E3DEDB;
  --line-soft: #EEEAE7;
}
body.tema-occidente { background: #F9F8F7; }
.tema-occidente .btn-primary { background: #C0502F; color: #fff; }
.tema-occidente .btn-primary:hover { background: #A8442A; }
.tema-occidente .price-v,
.tema-occidente .fig-v { color: var(--accent); }
.tema-occidente .bb-price,
.tema-occidente .data-table td.num { color: var(--accent-dark); }
.tema-occidente .data-table tbody tr:nth-child(odd) td { background: #FDF3EF; }
.tema-occidente .pago-pendiente { background: #FCEFEA; }

/* Los iconos dentro de los cuadros de acento heredan el color del cuadro.
   Antes lo traían fijo en un `style="color:#161617"` dentro del HTML, que
   ningún CSS puede sobrescribir sin !important. Se quitó de la página del
   Norte y se resolvió aquí, que es donde correspondía. */
.deliverable .mark,
.point .box,
.spec .sq,
.arrow-list .sq,
.icon-box,
.cta-mark { color: #161617; }

/* El cuadro del CTA de cierre. Antes iba con los estilos sueltos en el
   atributo style del HTML; se trajo aquí para que el tema pueda pintarlo
   como a los demás cuadros de acento. */
.cta-mark {
  width: 3.5rem; height: 3.5rem; background: var(--accent);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 1.5rem;
}

/* ---------- PORTADA DEL REPORTE ---------- */
.cover {
  border: 2px solid var(--brand);
  background: var(--brand);
  color: #fff;
  padding: 2rem 1.75rem;
  box-shadow: 12px 12px 0 0 var(--accent);
}
.cover .cover-tag {
  display: inline-block; background: var(--accent); color: #161617;
  font-size: .6875rem; font-weight: 900; text-transform: uppercase;
  letter-spacing: .1em; padding: .3125rem .625rem; margin-bottom: 1.25rem;
}
.cover h3 { font-size: 1.5rem; line-height: 1.15; margin-bottom: .75rem; }
.cover .cover-sub { color: rgba(255, 255, 255, .78); font-size: .9375rem; margin-bottom: 1.5rem; }
.cover-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: rgba(255, 255, 255, .25); border: 1px solid rgba(255, 255, 255, .25); }
.cover-meta > div { background: var(--brand); padding: .875rem; }
.cover-meta dt { font-size: .6875rem; text-transform: uppercase; letter-spacing: .08em; color: rgba(255, 255, 255, .6); margin-bottom: .25rem; }
.cover-meta dd { font-size: .9375rem; font-weight: 700; color: #fff; }

/* ---------- BLOQUE DE PRECIO ---------- */
.price-box { border: 2px solid var(--brand); background: #fff; padding: 1.75rem; box-shadow: 12px 12px 0 0 var(--brand); }
.price-row { display: flex; align-items: baseline; gap: .625rem; flex-wrap: wrap; margin-bottom: .25rem; }
.price-v { font-size: 3rem; font-weight: 900; color: var(--brand); line-height: 1; letter-spacing: -0.03em; }
.price-cur { font-size: .875rem; font-weight: 700; color: var(--ink-mute); text-transform: uppercase; letter-spacing: .08em; }
/* Total con IVA. Va debajo del neto y con menos peso visual: el número que
   compara el comprador es el de $4,900, pero el que le van a cobrar tiene que
   estar a la vista antes de que llegue a Stripe, no después. */
.price-total { font-size: .8125rem; color: var(--ink); margin-bottom: .375rem; }
.price-total strong { font-weight: 800; color: var(--brand); }
.price-note { font-size: .8125rem; color: var(--ink-mute); margin-bottom: 1.5rem; }
/* "+ IVA" dentro de los botones: se lee, pero no compite con el precio */
.btn-iva { font-weight: 600; opacity: .75; font-size: .9em; }
.price-box .deliverable { margin-bottom: 1.5rem; }
.pay-marks { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; justify-content: center; margin-top: .875rem; font-size: .75rem; color: var(--ink-mute); }

/* Aviso cuando el Payment Link todavía no está configurado */
.pago-pendiente {
  border: 2px solid var(--accent-dark); background: #fffaf0;
  padding: .75rem .875rem; font-size: .8125rem; font-weight: 600;
  color: var(--accent-dark); margin-bottom: 1rem;
}

/* ---------- FICHA TÉCNICA ---------- */
.spec { display: grid; gap: 1px; background: var(--brand); border: 2px solid var(--brand); }
.spec > div { background: #fff; padding: 1.125rem 1.25rem; display: flex; align-items: flex-start; gap: .875rem; }
.spec dt { font-size: .6875rem; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-mute); margin-bottom: .1875rem; }
.spec dd { font-size: .9375rem; font-weight: 700; color: var(--ink); line-height: 1.35; }
.spec .sq { width: 2rem; height: 2rem; background: var(--accent); flex-shrink: 0; display: flex; align-items: center; justify-content: center; }

/* ---------- ÍNDICE DEL REPORTE ---------- */
.toc { border: 2px solid var(--brand); background: #fff; }
.toc-lvl { border-bottom: 1px solid var(--line-soft); padding: 1.25rem 1.375rem; }
.toc-lvl:last-child { border-bottom: none; }
.toc-head { display: flex; align-items: baseline; gap: .75rem; margin-bottom: .625rem; }
.toc-n { font-size: 1.25rem; font-weight: 900; color: var(--accent-dark); flex-shrink: 0; line-height: 1; }
.toc-head h3 { font-size: 1rem; }
.toc-q { font-size: .8125rem; color: var(--ink-mute); font-style: italic; margin-bottom: .625rem; }
.toc-lvl ul li { font-size: .875rem; color: var(--ink-soft); padding: .25rem 0 .25rem 1rem; position: relative; }
.toc-lvl ul li::before { content: ''; position: absolute; left: 0; top: .875rem; width: .375rem; height: .375rem; background: var(--accent); }

/* ---------- TABLA DE DATOS (muestra del reporte) ---------- */
.data-wrap { overflow-x: auto; border: 2px solid var(--brand); background: #fff; }
.data-table { width: 100%; border-collapse: collapse; min-width: 34rem; }
.data-table caption {
  text-align: left; padding: 1rem 1.125rem; font-size: .8125rem; font-weight: 700;
  color: var(--brand); border-bottom: 2px solid var(--brand); background: var(--brand-soft);
}
.data-table th, .data-table td { padding: .75rem 1.125rem; text-align: left; font-size: .875rem; border-bottom: 1px solid var(--line-soft); }
.data-table thead th { font-size: .6875rem; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-mute); font-weight: 700; }
.data-table tbody tr:last-child td { border-bottom: none; }
.data-table td.num { font-variant-numeric: tabular-nums; font-weight: 700; color: var(--brand); white-space: nowrap; }
.data-table tbody tr:nth-child(odd) td { background: #fbfaff; }
.data-src { font-size: .75rem; color: var(--ink-mute); margin-top: .625rem; }

/* ---------- CIFRAS DESTACADAS ---------- */
.figures { display: grid; gap: 1px; background: var(--brand); border: 2px solid var(--brand); }
.figures > div { background: #fff; padding: 1.5rem 1.25rem; }
.fig-v { font-size: 1.875rem; font-weight: 900; color: var(--brand); line-height: 1.05; letter-spacing: -0.02em; margin-bottom: .375rem; }
.fig-l { font-size: .8125rem; color: var(--ink-soft); line-height: 1.4; }

/* ---------- PARA QUIÉN ES ---------- */
.audience li { display: flex; gap: .75rem; padding: .625rem 0; border-bottom: 1px solid var(--line-soft); font-size: .9375rem; color: var(--ink-soft); }
.audience li:last-child { border-bottom: none; }

/* ---------- BARRA DE COMPRA FIJA (móvil) ---------- */
.buy-bar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 55;
  display: none; align-items: center; justify-content: space-between; gap: 1rem;
  background: #fff; border-top: 2px solid var(--brand); padding: .75rem 1rem;
  box-shadow: 0 -4px 0 0 var(--accent);
}
.buy-bar .bb-price { font-size: 1.25rem; font-weight: 900; color: var(--brand); line-height: 1.1; }
.buy-bar .bb-iva { font-size: .75rem; font-weight: 700; color: var(--ink-mute); }
.buy-bar .bb-label { font-size: .6875rem; color: var(--ink-mute); text-transform: uppercase; letter-spacing: .08em; }

/* ---------- PÁGINA DE DESCARGA ---------- */
.dl-mark { width: 5rem; height: 5rem; background: var(--brand); display: flex; align-items: center; justify-content: center; margin: 0 auto 1.75rem; }
.dl-note { border: 2px solid var(--brand); background: var(--brand-soft); padding: 1.25rem; font-size: .9375rem; color: var(--ink-soft); }

/* ---------- BREAKPOINTS ---------- */
/* ---------- REGISTRO PARA COMPRAR ----------
   Provisional: solo se usa mientras CONFIG.MODO_VENTA sea 'registro', es
   decir, mientras no existan los Payment Links de Stripe. Todo lo de este
   bloque se puede borrar de una pieza cuando el cobro vuelva a ser
   automático, junto con la <section id="registro"> de las dos páginas. */

/* El encabezado es sticky y mide 70px (68 + su borde de 2px). Sin este
   margen, el botón baja hasta aquí y deja el título de la sección justo
   debajo del encabezado, tapado: la persona aterriza sin ver a qué llegó.
   Se deja algo de aire de más para que no quede pegado. */
#registro { scroll-margin-top: 5.5rem; }

/* ---------- LECTOR DE MUESTRA · /leer ----------
   Las páginas del reporte van como imágenes sobre un fondo más oscuro que el
   resto del sitio: así el papel blanco de cada página se lee como papel y no
   se funde con el fondo, que es lo que hace que una galería de documentos
   parezca un documento y no una lista de imágenes sueltas. */
.lector-bar {
  position: sticky; top: 0; z-index: 60;
  display: flex; align-items: center; gap: 1rem;
  background: #fff; border-bottom: 2px solid var(--brand);
  padding: .75rem 1.25rem; min-height: 64px;
}
.lb-volver { display: inline-flex; align-items: center; gap: .4375rem; font-size: .875rem; font-weight: 700; color: var(--ink-mute); flex-shrink: 0; }
.lb-volver:hover { color: var(--accent); }
.lb-doc {
  display: flex; align-items: center; gap: .5rem; min-width: 0;
  font-size: .875rem; font-weight: 700; color: var(--brand);
  padding-left: 1rem; border-left: 1px solid var(--line);
}
.lb-doc span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lb-doc svg { flex-shrink: 0; color: var(--accent); }
.lb-fin { margin-left: auto; display: flex; align-items: center; gap: 1rem; flex-shrink: 0; }
.lb-pag { font-size: .8125rem; color: var(--ink-mute); font-variant-numeric: tabular-nums; white-space: nowrap; }
.lb-pag strong { color: var(--brand); font-weight: 800; }

.lector-intro { background: #fff; border-bottom: 1px solid var(--line); padding: 2.75rem 1.25rem 2.25rem; }
.lector-meta {
  display: flex; flex-wrap: wrap; justify-content: center; gap: .5rem 1.25rem;
  list-style: none; margin: 1.5rem 0 0; font-size: .8125rem; color: var(--ink-mute);
}
.lector-meta li { display: flex; align-items: center; }
.lector-meta li + li::before { content: '·'; margin-right: 1.25rem; color: var(--line); }
.lector-aviso {
  display: inline-flex; align-items: center; gap: .5rem; flex-wrap: wrap; justify-content: center;
  margin-top: 1.5rem; padding: .625rem 1rem;
  background: var(--brand-soft); border: 1px solid var(--accent);
  font-size: .8125rem; color: var(--ink-soft);
}
.lector-aviso svg { color: var(--accent); flex-shrink: 0; }

.lector-paginas { background: #E9E9EC; padding: 2rem 1rem 2.5rem; }
.lector-pag { max-width: 54rem; margin: 0 auto 1.75rem; }
.lector-pag img {
  width: 100%; height: auto; display: block;
  background: #fff;                      /* mientras carga, hueco blanco y no gris */
  box-shadow: 0 6px 28px -10px rgba(23, 23, 26, .45);
}
.lector-pag figcaption {
  text-align: center; font-size: .75rem; color: var(--ink-mute);
  margin-top: .625rem; font-variant-numeric: tabular-nums;
}

/* El muro. Va sobre fondo oscuro para que el corte se note: la lectura se
   acaba aquí y empieza la decisión de compra. */
.lector-muro { background: var(--brand); color: #fff; padding: 3.5rem 1.25rem 4rem; }
.lector-muro .h2, .lector-muro .eyebrow { color: #fff; }
.lector-muro .lead { color: rgba(255, 255, 255, .78); }
.muro-cabeza { margin-bottom: 2.5rem; }
.muro-candado {
  width: 3.5rem; height: 3.5rem; background: var(--accent); color: #fff;
  display: flex; align-items: center; justify-content: center; margin: 0 auto 1.25rem;
}
.muro-lista { max-width: 46rem; margin: 0 auto 2.5rem; }
.muro-lista .arrow-list li { color: rgba(255, 255, 255, .85); font-size: .9375rem; }
.muro-lista .arrow-list li strong { color: #fff; }
/* La tarjeta del formulario vuelve a blanco: un formulario sobre negro se
   lee peor y aquí es lo único que tiene que rellenarse. */
.lector-muro .form-card { border-color: var(--accent); }
.lector-muro .registro-nota { background: rgba(255, 255, 255, .06); border-color: rgba(255, 255, 255, .25); }
.lector-muro .registro-nota .h3 { color: #fff; }
.lector-muro .registro-nota .arrow-list li { color: rgba(255, 255, 255, .85); }
.lector-muro .registro-aviso { border-top-color: rgba(255, 255, 255, .2); }
.lector-muro .registro-aviso p { color: rgba(255, 255, 255, .75); }
.lector-muro .registro-aviso strong { color: #fff; }
.lector-muro .registro-aviso a { color: var(--accent); }

@media (max-width: 760px) {
  /* En móvil no cabe todo: se esconde el nombre del documento y el contador,
     que son referencia, y se conserva lo accionable (volver y comprar). */
  .lector-bar { padding: .625rem .875rem; gap: .625rem; }
  .lb-doc, .lb-pag { display: none; }
  .lb-volver span { display: none; }
  .lector-paginas { padding: 1.25rem .75rem 1.75rem; }
  .lector-pag { margin-bottom: 1.25rem; }
}

/* Los tres pasos: qué pasa después de dejar los datos. Es lo que baja la
   desconfianza de un formulario que no cobra en el momento. */
.pasos { display: grid; gap: 1px; background: var(--brand); border: 2px solid var(--brand); margin-bottom: 2rem; }
.pasos > div { background: #fff; padding: 1.375rem 1.25rem; }
.paso-n { font-size: .75rem; font-weight: 900; color: var(--accent); letter-spacing: .1em; margin-bottom: .5rem; }
.pasos h3 { font-size: 1rem; margin-bottom: .375rem; }

.registro-grid { display: grid; gap: 1.5rem; align-items: start; }

/* El precio, arriba del formulario. Quien llega hasta aquí bajó desde el
   hero y ya no lo tiene a la vista; repetirlo evita el registro de alguien
   que no sabía cuánto cuesta. */
.registro-precio {
  border-bottom: 2px solid var(--brand);
  padding-bottom: 1.125rem; margin-bottom: 1.375rem;
}
.rp-label { display: block; font-size: .6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-mute); margin-bottom: .375rem; }
.rp-v { display: block; font-size: 2rem; font-weight: 900; color: var(--accent); line-height: 1; letter-spacing: -0.02em; }
.rp-iva { font-size: .8125rem; font-weight: 700; color: var(--ink-mute); text-transform: uppercase; letter-spacing: .06em; }
.rp-total { display: block; font-size: .8125rem; color: var(--ink-soft); margin-top: .5rem; }
.rp-total strong { font-weight: 800; color: var(--brand); }

/* Nota en la caja de precio del hero: explica por qué el botón no cobra */
.price-nota-registro {
  font-size: .8125rem; color: var(--ink-soft);
  border-left: 3px solid var(--accent);
  padding: .125rem 0 .125rem .75rem; margin-bottom: 1.25rem;
}

/* Confirmación tras enviar. Sustituye al formulario en el sitio, para que
   la respuesta aparezca donde estaba la vista, no en otra página. */
.registro-ok { text-align: center; padding: 1rem 0; }
.registro-ok:focus { outline: none; }
.ok-mark {
  width: 4rem; height: 4rem; background: var(--accent); color: #fff;
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 1.25rem;
}
.registro-ok h3 { margin-bottom: .75rem; }
.registro-ok p { color: var(--ink-soft); font-size: .9375rem; }
.registro-ok .btn { margin-top: 1rem; }

.registro-nota { background: var(--brand-soft); border: 2px solid var(--brand); padding: 1.5rem 1.375rem; }
.registro-nota h3 { margin-bottom: 1rem; }
.registro-nota .arrow-list li { font-size: .875rem; }
.registro-aviso { border-top: 1px solid var(--brand-line); margin-top: 1.25rem; padding-top: 1rem; }
.registro-aviso p + p { margin-top: .375rem; color: var(--ink-soft); }

@media (min-width: 640px) {
  .figures { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .spec { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cover { padding: 2.5rem 2.25rem; }
  .cover h3 { font-size: 1.875rem; }
  .pasos { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  /* El par nombre/teléfono y empresa/puesto caben en dos columnas a partir
     de aquí; en móvil se apilan, que es lo que hace .field-pair por defecto. */
  .registro-grid .field-pair { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 900px) {
  /* El formulario manda; la nota lateral acompaña sin competir. */
  .registro-grid { grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 2rem; }
}
@media (min-width: 1024px) {
  .figures { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .spec { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  /* En móvil el precio deja de estar a la vista al hacer scroll: la barra
     fija lo mantiene, que es donde se pierde la mayoría de las compras. */
  .buy-bar { display: flex; }
  body { padding-bottom: 4.75rem; }
  .wa-float { bottom: 5.25rem; }
}
@media (max-width: 640px) {
  .price-box { box-shadow: 8px 8px 0 0 var(--brand); padding: 1.25rem; }
  .cover { box-shadow: 8px 8px 0 0 var(--accent); }
  .price-v { font-size: 2.5rem; }
}
