/* ============================================================
   EL BUSCADOR PÚBLICO — hoja propia.
   Diseño aprobado: handoff del dueño, opción "2a / Mostrador v2".

   POR QUÉ NO SE REUSA estilos.css (28-ago-2026)
   ------------------------------------------------------------
   estilos.css es la hoja del RECOMENDADOR (system-ui, otra escala,
   otro color). Mezclarlas obligaba a pisar reglas con !important y
   cualquier retoque del recomendador se le caía encima al buscador.
   Son dos puertas distintas del mismo sitio, y cada una tiene su hoja.

   ============================================================
   🔴 EL SEGUNDO CAMBIO DE CARÁCTER — 2-SET-2026, A LA TARDE
   ============================================================
   El dueño trajo un prototipo propio
   (design_handoff_encontratulibro/prototipo-v2-1sep.html) y pidió
   tomar de ahí la paleta entera, las dos tipografías con sus roles,
   la barra con el menú desplegado, el estante de lomos de la home y
   el recorrido con sendero, hitos numerados y separadores.

   ES UN REEMPLAZO, NO UNA CAPA ENCIMA. Del sistema anterior no queda
   ningún color, ninguna fuente y ninguna sombra. Lo que se fue:

     · el azul cobalto #1568d5 y su escala de cuatro tonos;
     · la BANDA DE ACERO #1d2d3d, que este mismo archivo llamaba "la
       marca del sitio y no se toca";
     · los siete grises neutros y el fondo gris #eceef2;
     · Barlow y Barlow Condensed;
     · las tarjetas blancas de 14px de radio con dos capas de sombra;
     · el ☰ y el cajón de navegación, con sus diez selectores.

   Lo que hay ahora: papel y tinta, Fraunces para títulos y marca,
   Karla para el cuerpo, cajas de un filo de un píxel y 4px de radio,
   y las cinco entradas del menú escritas en la barra.

   LO QUE **NO** CAMBIÓ, Y ES LA CONDICIÓN DEL ENCARGUE: la lista de
   resultados NO es una grilla de portadas. La tapa sigue al costado
   en --alto-tapa (120px), el título sigue mandando la jerarquía y el
   precio BAJÓ un escalón (ver "EL PRECIO BAJA UN ESCALÓN"). Siguen
   entrando 3 filas enteras a 320px, dos toques hasta el precio y cero
   desborde horizontal: los tres están medidos con el carácter nuevo
   puesto (ver "EL TELÉFONO CHICO", al final del archivo).
   Y ni un dato en pantalla que no salga del servidor.
   ============================================================

   🔴 EL ORDEN SE DIO VUELTA EL 1-SET-2026, Y LO DIJO EL DUEÑO:
   *"acordate que primero es formato web adaptado a celular"*.

   Hasta ayer acá decía "MOBILE-FIRST DE VERDAD" y era cierto: todo se
   escribía para 320px y el monitor era lo que se agregaba después. El
   resultado, mirado en una pantalla grande, era un teléfono estirado —
   una columna de texto de 680px en el medio de 1920. La pantalla que
   manda el diseño ahora es LA GRANDE.

   LO QUE NO CAMBIA, Y ES LA CONDICIÓN: el celular no se degrada. A
   320px siguen entrando 3 filas enteras de resultados, que es el
   número que se defiende desde el principio. La técnica sigue siendo
   la misma —las reglas base son las del teléfono y los @media suman—
   porque dar vuelta el archivo entero sería reescribir sin necesidad;
   lo que cambió es a quién se le da la razón cuando el ancho grande y
   el chico piden cosas distintas.

   LA COLUMNA YA NO SE TOPA EN 430px (corregido el 1-set-2026 a la
   noche): ocupa el ancho SIEMPRE, y el que aparta el contenido de los
   bordes es --margen-movil. Entre 430 y 899 la hoja de 430px dejaba
   169px de gris de cada lado a 768 y 225px a 880 — el formato celular
   estirado, escondido en el único rango que nadie miraba.

   Y DESDE 760px, EL ESCRITORIO (31-ago-2026, pedido del dueño: "la
   idea es que sea página web, se pase a celular y se vea bien"; el
   corte estuvo en 900 hasta el 1-set a la noche). Está TODO junto al
   final del archivo, en cuatro @media —760, la franja 760-899, 1120 y
   1200— y no pisa ni una regla del teléfono: hasta 759px este archivo
   dibuja exactamente lo que se aprobó y se probó, medido píxel por
   píxel contra la hoja vieja a 320, 360, 390 y 429. La guía fue la
   opción 1c del handoff —dos columnas— que NO está aprobada; lo que se
   tomó de ella es el reparto del espacio, no el detalle.

   LO ÚNICO DEL TELÉFONO QUE CAMBIÓ el 31 a la tarde es el TAMAÑO DE LA
   TAPA, que era el otro pedido del dueño y vale para todos los anchos.
   Medido a 320 y a 390px, en la LISTA DE RESULTADOS: mismos altos de
   fila (112,1 y 124,2) y las mismas filas por pantalla que antes.
   Donde sí se nota es en la PANTALLA DE PRECIOS a 320px: la fila pasa
   de 74 a 90px y "usado · ed. Planeta" se parte en dos renglones,
   porque ahí la tapa le saca 5px al texto. Se aceptó: esa pantalla
   muestra una fila por librería, no cinco. Si molesta, se baja
   --escala-tapa-precio y no hay que tocar nada más.
   Todo el tamaño de la tapa sale de --alto-tapa, acá abajo.

   ============================================================
   EL CAMBIO DE CARÁCTER VISUAL — 2-SET-2026
   ============================================================
   PEDIDO DEL DUEÑO, TEXTUAL: *"quiero mejorar el UI design de la
   página, siento que es muy aburrido"*, con Papiora
   (dribbble.com/shots/26715357) como referencia. Eligió, entre tres
   opciones, CAMBIAR EL CARÁCTER VISUAL — no un retoque.

   QUÉ CAMBIÓ, y son cuatro cosas:

   1. TARJETAS. (🔴 HISTORIA, y sólo a medias vigente: con la paleta
      de papel las secciones de TEXTO dejaron de ser tarjetas —lo que
      las separa es el filete con el punto— y las que quedaron
      —formularios, filas, avisos— son papel alto con un filo de 1px,
      no blanco con sombra.) Decía así:
      Cada bloque es una superficie BLANCA con borde redondeado y
      sombra suave sobre FONDO GRIS. Antes eran bloques planos sobre un fondo
      casi blanco, separados por filetes de 1 y 2px. El fondo de la
      página pasó de #f2f2f3 a --color-fondo y las superficies a
      blanco puro: sin esos dos movimientos juntos la tarjeta no se
      despega y la sombra no se ve.
      🔴 LOS FILETES SE FUERON CON ELLO. Varios comentarios de este
      archivo hablaban del "filete separador" como el mecanismo que
      separa un bloque del otro: hoy lo que separa es el aire entre
      tarjetas (--aire-bloques). Donde el filete todavía se nombra es
      historia, no descripción de lo que hay.

   2. EL ACENTO, DE #5980a6 A #1568d5. (🔴 HISTORIA: ese cobalto duró
      una tarde. Esa misma noche entró la paleta de papel y tinta del
      prototipo y el acento pasó a ser --vino #8C2434. Se deja escrito
      para que se entienda de dónde venía el archivo.)

   3. MÁS AIRE. Dos perillas nuevas, --aire-tarjeta (adentro) y
      --aire-bloques (entre tarjetas), en vez de márgenes escritos a
      mano bloque por bloque.

   4. EL "CÓMO FUNCIONA" EN ACORDEÓN (#p-como). Ver el bloque
      "EL ACORDEÓN".

   LO QUE NO CAMBIÓ, Y ES LA CONDICIÓN DEL ENCARGUE: la lista de
   resultados NO se convirtió en grilla de portadas. Cada fila es una
   tarjeta, pero sigue siendo una LISTA: tapa al costado en
   --alto-tapa (120px), el título mandando la jerarquía y el precio
   chico. Tampoco entró nada de la vidriera de la referencia
   —estrellas, contadores de ventas, sellos de confianza, badges de
   descuento—: este sitio no vende y lo dice por escrito, y un dibujo
   que afirme lo que el texto niega es el modo de falla del proyecto.
   Ni un dato en pantalla que no salga del servidor.
   ============================================================

   ============================================================
   LO DEL 1-SET-2026 — cuatro pedidos del dueño mirando la pantalla,
   más la perilla de la tapa que quedó elegida en 120.
   ============================================================
   1. LA HOME, CON EL TÍTULO, LA BAJADA Y EL CAMPO CENTRADOS COMO UN
      SOLO BLOQUE. Sólo la home: las otras seis pantallas conservan la
      banda compacta y todo alineado a la izquierda. Ver el bloque
      "LA HOME: EL BLOQUE CENTRADO".
   2. EL PANEL DE NAVEGACIÓN. El MISMO cajón detrás del ☰ en las dos
      medidas — no hay riel fijo en ninguna (decisión del dueño,
      1-sep-2026). Ver el bloque "EL PANEL DE NAVEGACIÓN".
   3 y 4. Tres pantallas de texto nuevas (el "cómo funciona", librerías
      y recomendador): estilos en el bloque "cómo funciona y los textos
      largos". El "cómo funciona" ESTABA al pie de la home y se mudó a
      pantalla propia el 1-set — se llega sólo por el ☰.
   5. LOS CUATRO RENGLONES de la home ("Un libro, todos sus precios",
      etc.) SE SACARON el mismo día, a pedido del dueño: "mejor
      sacalo todo. De mientras pienso qué se puede poner". EN SU LUGAR
      QUEDARON LOS TRES PORQUÉS (por qué el buscador, por qué el
      recomendador, por qué se pueden pedir libros), que el dueño juntó
      en la home el mismo día: "la idea es que todo esté en la página
      principal". Con ellos salieron de la home la letra chica del "no
      vendemos", la caja del "¿no está el libro que buscás?", la
      salida a las librerías y el pie. Ver el bloque "el cuerpo de la
      home: los tres porqués".
   6. LAS TRES PANTALLAS DE TEXTO, DE ARRIBA HACIA ABAJO (mismo
      pedido): se fueron las dos columnas de bloques y quedó una sola
      lectura vertical, con el título de cada sección a la izquierda y
      el párrafo a su derecha. Ver el bloque "LOS TEXTOS: RÓTULO A LA
      IZQUIERDA".

   LO QUE SE MIDIÓ ANTES Y DESPUÉS, con Chrome de verdad y la búsqueda
   "cien años" contra la base local:

       filas ENTERAS en la primera pantalla
                          antes (tapa 88)   después (tapa 120 + panel)
         320 × 568 ......... 3 .................. 3
         390 × 844 ......... 6 .................. 5
        1920 × 1080 ........ 7 .................. 5

   O sea: EL CELULAR DE 320 NO SE DEGRADA —siguen entrando las 3 filas
   de siempre—, y lo que se paga son una fila en el teléfono grande y
   dos en el monitor. Las dos las paga la tapa de 120, no el panel: el
   panel no le saca ni un píxel de alto a la lista.
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600;9..144,700&family=Karla:wght@400;500;700&display=swap');

:root {
  /* ============================================================
     LA PALETA — PAPEL Y TINTA (2-set-2026)
     ============================================================
     🔴 ESTO REEMPLAZA AL SISTEMA VIEJO ENTERO, no lo pinta por
     encima. Lo que se fue, para que nadie lo reponga sin darse cuenta
     de que estaría eligiendo volver atrás:

       · el azul cobalto (#1568d5) y su escala de cuatro tonos;
       · la BANDA DE ACERO (#1d2d3d), que hasta ayer era "la marca del
         sitio y no se toca" — hoy la banda es papel hondo con tinta
         encima, como el prototipo;
       · los siete grises neutros (#f5f5f8 … #2b2b2d);
       · Barlow y Barlow Condensed.

     Los nueve colores salen del prototipo del dueño
     (design_handoff_encontratulibro/prototipo-v2-1sep.html, :root) y
     están copiados tal cual, sin retocar ninguno.

     CONTRASTES MEDIDOS (WCAG 2.1, sobre --papel-alto):
         --humo         5,15:1   → texto chico secundario (mínimo 4,5)
         --vino         7,77:1   → enlaces y precio destacado
         --tinta-suave 10,40:1   → cuerpo de texto
     Y al revés: --papel-alto sobre --vino da los mismos 7,77:1, que es
     el botón primario.

     🔴 --oro NO SE USA PARA TEXTO EN NINGÚN LADO: es filo y anillo de
     foco sobre fondo oscuro (el lomo del estante). Sobre papel da
     2,9:1 y no alcanza para leer. */
  --tinta: #16241C;
  --tinta-suave: #2C3B32;
  --papel: #EDE7DA;
  --papel-hondo: #E1D9C7;
  --papel-alto: #F6F2E8;
  --vino: #8C2434;
  /* El vino apretado, para hover y activo. Es el único de acá que no
     está en el :root del prototipo: allá está escrito a mano en
     `form.buscador button:hover` y en `.accion:hover`. */
  --vino-hondo: #71121F;
  --oro: #BE8B26;
  --humo: #6C6559;
  --linea: #D6CEBD;

  /* ============================================================
     LAS DOS TIPOGRAFÍAS Y SUS ROLES
     ============================================================
     FRAUNCES (serif variable) → marca y títulos, y nada más. Con sus
     ejes: SOFT y WONK son ejes propios de Fraunces y sin ellos la
     letra es otra. El prototipo usa tres ajustes distintos —marca, h1
     y h2— y se copian los tres (ver .marca, h1 y h2, más abajo).

     KARLA → todo el cuerpo: párrafos, campos, botones, etiquetas y
     precios.

     🔴 EL PRECIO PASÓ DE LA TIPOGRAFÍA DE TÍTULOS A LA DEL CUERPO, y
     es a propósito: en Barlow Condensed a 22px el precio le competía
     la jerarquía al título. Ahora el título es serif y grande, el
     precio es Karla bold y chico. El prototipo hace lo mismo
     (.mk-precio es Karla).

     Vienen de Google Fonts, que YA está declarado en la política de
     seguridad del sitio (servidor.ts, HOJAS_PERMITIDAS y
     FUENTES_PERMITIDAS). No se agregó ningún dominio: cambió la
     familia que pide el mismo @import, nada más. */
  --font-heading: Fraunces, Georgia, "Times New Roman", serif;
  --font-body: Karla, system-ui, sans-serif;

  --space-2: 6.8px;
  --space-3: 10.2px;

  /* ============================================================
     LA TARJETA — radio, sombra y aire (2-set-2026)
     ============================================================
     Cuatro perillas y de ellas sale TODO el dibujo nuevo. Están
     juntas porque se miran juntas: subir el radio sin subir el aire
     deja el texto pegado a una esquina redonda.

     EL RADIO va en dos escalones y no en uno: 14px es el de las
     superficies (tarjeta, panel), 10px el de las cosas que viven
     ADENTRO de una tarjeta (campos, botones). Una caja de 40px de
     alto con 14px de radio se lee como una pastilla, no como un
     campo. (Las etiquetas ERAN pastillas y usaban --radio-pill;
     desde la paleta de papel son rótulos con filo. Ver .tag.)

     LA SOMBRA VA EN DOS CAPAS, y no es adorno: la de 1px pega la
     tarjeta al fondo (es lo que reemplaza al filete que había antes)
     y la de 16px es la que la levanta. Con una sola capa grande la
     tarjeta flota sin apoyarse. El color de las dos es el azul de la
     banda y no negro: un gris neutro sobre fondo gris ensucia.

     EL AIRE tiene dos números: --aire-tarjeta es el padding de
     adentro y --aire-bloques la separación entre una tarjeta y la
     siguiente. Los dos crecen en escritorio (ver el bloque de 760px).
     🔴 --aire-fila ES APARTE Y MÁS CHICO, y no es un descuido: la
     lista de resultados tiene que seguir mostrando 3 filas enteras a
     320px, que es el invariante del proyecto. Con --aire-tarjeta la
     fila crecería y a 320px entrarían 2. Medido, ver abajo.

     ACÁ ESTABA --shadow-md, que se fue el 1-set-2026 con la hoja
     centrada: era la sombra de la columna de 430px sobre el fondo
     gris. Valía `0 3px 10px` de #2b2b2d al 16%. */
  /* 🔴 LOS TRES RADIOS Y LAS DOS SOMBRAS SE REESCRIBIERON CON LA
     PALETA NUEVA (2-set-2026). El sistema anterior era de tarjetas
     blancas flotando sobre gris: 14px de radio y dos capas de sombra
     azul. Sobre papel eso no existe — el prototipo dibuja sus cajas
     con `border:1px solid var(--linea)`, 4px de radio y una sombra de
     UN PÍXEL que es en realidad un filo (`0 1px 0 var(--linea)`).

     Se copian esos números. Lo que se gana no es estética: una
     tarjeta que flota le sube un escalón de jerarquía a lo que tiene
     adentro, y adentro de la fila de resultados lo que hay es una
     tapa y un precio. Plano, el que manda es el título.

     --radio-pill quedó en 999 y hoy NO LO USA NADIE: las etiquetas
     dejaron de ser pastillas (ver .tag). Se deja la perilla porque el
     día que vuelva a hacer falta, vuelve de un lugar. */
  --radio: 4px;
  --radio-chico: 3px;
  --radio-pill: 999px;
  --sombra: 0 1px 0 var(--linea);
  --sombra-alta: 0 2px 0 var(--linea);
  --aire-tarjeta: 16px;
  --aire-bloques: 12px;
  --aire-fila: 12px;
  --sep-filas: 10px;

  /* ============================================================
     LA PERILLA DE LA TAPA — un número, todo el sitio (31-ago-2026)
     ============================================================
     `--alto-tapa` es el ALTO de la carátula en escritorio. Todo lo
     demás sale de acá y no se escribe a mano en ningún lado:

       · el ancho, por la proporción 2:3 del libro;
       · la tapa del teléfono y la de abajo de 360px, por --escala-tapa;
       · la de la pantalla de precios, por --escala-tapa-precio;
       · el hueco de las filas SIN tapa, porque usa la misma clase.

     Antes eran cuatro números sueltos (44 / 36 / 30 / 38) y tocar uno
     dejaba a los otros tres mintiendo. Ahora se cambia esta línea.

     🔴 EL TECHO, Y NO ES ESTÉTICO — ESCRITO CON LA PERILLA EN 120 Y EL
     PEDIDO AL CDN EN 240 (1-set-2026: el dueño comparó 88 contra 120 y
     eligió 120; ANCHO_TAPA_POR_DEFECTO en src/web/sesiones.ts pasó de
     160 a 240 en el mismo movimiento, palanca TAPAS_ANCHO_PX del .env).

     LA FÓRMULA, para que el día que se mueva el número se sepa de
     dónde salió y no haya que rehacer la cuenta a ojo:

         ancho en CSS  = --alto-tapa × escala × 2/3   (proporción 2:3)
         píxeles reales = ancho en CSS × densidad de pantalla

     Y EL CASO QUE MANDA ES EL TELÉFONO, NO EL MONITOR: el monitor va a
     2x y el teléfono a 3x, así que aunque la tapa del teléfono se
     dibuja MÁS CHICA, pide MÁS píxeles. Con la perilla en 120:

         monitor   (escala 1) → 80 de ancho × 2 = 160
         tel. ≥360 (escala .85) → 68 de ancho × 3 = 204   ← el que manda
         tel. ≤359 (escala .70) → 56 de ancho × 3 = 168

     Con los 160 viejos, los DOS casos de teléfono se pasaban y la
     carátula se veía blanda justo donde es más grande. Con 240 entran
     los tres y sobra margen.

     LO QUE CUESTA, MEDIDO HOY sobre las mismas tres tapas:
         w160 → 18,3 / 9,4 / 8,1 KB
         w240 → 37,0 / 16,2 / 14,8 KB
     Y sobre /api/buscar de verdad, en la proporción real de librerías:
     una pantalla de 10 resultados pasa de 206 KB a 249 KB (+21%);
     buscando "borges", de 271 a 338 KB. Es el precio de la tapa
     grande y está pagado a propósito.

     LA REGLA, corregida: cada vez que se mueva --alto-tapa se rehace
     la cuenta de arriba y se revisa TAPAS_ANCHO_PX en el mismo
     movimiento. No es "si algún día pasa de 120": con 120 ya hubo que
     subirlo. */
  --alto-tapa: 120px;

  /* Derivadas: NO se tocan a mano. */
  --escala-tapa: .85;          /* teléfono de 360px para arriba */
  --escala-tapa-precio: .86;   /* la pantalla de precios, un escalón menos */

  --tapa-alto: calc(var(--alto-tapa) * var(--escala-tapa));
  --tapa-ancho: calc(var(--tapa-alto) * 2 / 3);
  --tapa-precio-alto: calc(var(--tapa-alto) * var(--escala-tapa-precio));
  --tapa-precio-ancho: calc(var(--tapa-precio-alto) * 2 / 3);
  /* LA TAPA DE LA CABEZA DE LA FICHA (2-set-2026, formato del
     prototipo del dueño). Es la ÚNICA tapa del sitio más grande que
     la de la lista, y el escalón es chico a propósito: el prototipo
     salta de 80px en la lista a 132px en la ficha (1,65×), acá se
     sube apenas un 10% sobre --alto-tapa. Motivo: en la ficha el
     título es un <h1> de 26 a 34px y no puede perder la jerarquía
     contra la portada. Sale de la misma perilla que todo lo demás, o
     sea que mover --alto-tapa la mueve con él. */
  --escala-tapa-ficha: 1.1;
  --tapa-ficha-alto: calc(var(--tapa-alto) * var(--escala-tapa-ficha));
  --tapa-ficha-ancho: calc(var(--tapa-ficha-alto) * 2 / 3);

  /* ============================================================
     EL ANCHO DE LA PÁGINA EN ESCRITORIO (31-ago-2026)
     ============================================================
     Patrón de diario: la barra y el fondo llegan a los dos
     bordes del monitor; lo que va ADENTRO —marca, buscador, lista, pie—
     se estira hasta --ancho-contenido y ahí topa, alineado todo con el
     mismo borde.

     `--margen-lateral` es ese cálculo, en una sola pieza: nunca menos
     que el borde de 40px, y en un monitor ancho lo que sobre repartido
     en dos. Va como PADDING de cada bloque que tiene fondo propio (la
     banda) — no como max-width de un envoltorio— porque la banda tiene
     que pintar de punta a punta y su contenido no.
     El `100%` se resuelve contra .columna, que hoy es la pantalla
     entera en todas las medidas. Abajo de 760px NADA DE ESTO SE USA:
     ahí manda --margen-movil, unas líneas más abajo. */
  /* EL RÓTULO DE LAS PANTALLAS DE TEXTO — la casilla angosta de la
     izquierda donde cae el título de cada sección (1-set-2026). Sólo
     lo usan las reglas de 760px para arriba: abajo de eso el título va
     apilado arriba del párrafo y esta medida no entra en juego.
     🔴 Y sólo lo usan TRES pantallas: #p-como, #p-librerias y
     #p-recomendador. La home no —desde el 1-set su título va
     centrado arriba del texto—, así que tocar este número no le
     cambia nada a la home.
     Se ensancha a 340px desde 1120px, donde ya hay página para eso.
     `--gap-rotulo` es la canaleta entre el rótulo y el párrafo: está
     acá y no escrita a mano en cada regla porque desde el 1-set hay
     algo más que la grilla que tiene que alinearse con la columna de
     lectura (el lugar del acceso del recomendador), y dos números
     sueltos se desincronizan a la primera. */
  --col-rotulo: 210px;
  --gap-rotulo: 40px;

  --ancho-contenido: 1400px;
  --borde-lateral: 40px;
  --margen-lateral: max(var(--borde-lateral), (100% - var(--ancho-contenido)) / 2);

  /* ============================================================
     LA COLUMNA DE LAS DOS PANTALLAS DE LIBROS (3-set-2026)
     ============================================================
     🔴 MEDIDO EN EL PROTOTIPO DEL DUEÑO: `.cuerpo { width: min(1000px,
     100%); padding: 1.6rem clamp(1rem,4vw,2.5rem) 3rem }`. O sea: la
     caja topa en 1000px y adentro quedan 920px de contenido, centrados.
     Los 1400px de --ancho-contenido son del resto del sitio (la barra,
     el pie, las pantallas de texto) y ahí se quedan: acá lo que se
     calca es la lista, que en el prototipo es más angosta.

     POR QUÉ IMPORTA Y NO ES UN NÚMERO SUELTO: con 1400 la fila medía
     964px a 1920 y el ojo tenía que cruzar el monitor entero para
     juntar el título con su precio. Con 920 el renglón se lee de una
     mirada, que es lo que hace el prototipo.

     LO USAN: la lista de resultados, la lista de precios y la cabeza
     de la ficha —las tres viven adentro del mismo `.cuerpo` del
     prototipo, así que las tres se alinean con el mismo borde. */
  --ancho-libros: 1000px;
  /* LA CUENTA ES LA DEL PROTOTIPO, EN UNA SOLA PIEZA. Allá son dos:
     la caja topa en 1000px y se centra (`width: min(1000px,100%);
     margin: 0 auto`) y ADENTRO lleva un padding de
     `clamp(1rem, 4vw, 2.5rem)`. O sea que el contenido mide 920px en
     un monitor y el borde nunca baja de 16px en lo angosto.
     Acá va como padding de la lista, así que las dos partes se suman:
     lo que sobra de los 1000, más el borde.
     Medido: a 768 da 30,7px de borde y 706,6 de contenido, y a 1920 da
     500 y 920 — los mismos números que el prototipo. */
  --margen-libros: calc(max(0px, (100% - var(--ancho-libros)) / 2) + clamp(16px, 4vw, 40px));


  /* EL MARGEN DE LAS MEDIDAS CHICAS (1-set-2026, ver el bloque
     "LA PÁGINA DE PUNTA A PUNTA TAMBIÉN ABAJO DE 900"). Es el mismo
     recurso que --margen-lateral pero con el tope del teléfono: nunca
     menos que los 20px de siempre, y lo que sobre repartido en dos.
     A 430px da 20px EXACTOS —o sea, el teléfono no se entera— y
     recién a partir de 504px empieza a apartar el contenido de los
     bordes. */
  --contenido-movil: 464px;
  --margen-movil: max(20px, (100% - var(--contenido-movil)) / 2);

  /* EL PANEL NO TIENE ANCHO PROPIO EN EL LAYOUT, y eso es a propósito
     desde la corrección del 1-set: es un CAJÓN en todas las medidas,
     así que flota por encima y no le saca ni un píxel a la banda ni al
     contenido. El riel fijo que se probó antes se comía 228px en el
     monitor y cortaba la barra a mitad de pantalla. */
}

*, *::before, *::after { box-sizing: border-box; }

/* EL `hidden` GANA SIEMPRE.
   Sin esto, cualquier regla nuestra con `display:flex` le pasa por
   encima al atributo hidden del navegador. Apareció mirando la
   pantalla de pedido en 320px: el formulario y el "Quedó pedido ✓"
   se veían A LA VEZ. Todo lo que esta página muestra y esconde lo
   hace con `hidden`, así que va una vez y vale para todo. */
[hidden] { display: none !important; }

body {
  margin: 0;
  background: var(--papel);
  color: var(--tinta);
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.55;
  /* El iPhone infla el texto al girar el teléfono y descoloca la home
     (se vio con los cuatro renglones, que ya no están; vale igual para
     los bloques de texto). Se apaga sin tocar el zoom de la persona. */
  -webkit-text-size-adjust: 100%;
}

/* LOS TÍTULOS, CON LOS EJES DE FRAUNCES DEL PROTOTIPO.
   SOFT redondea los remates y WONK inclina la 'g' y la 'y'. El
   prototipo usa DOS ajustes distintos y acá se copian los dos: el h1
   va más blando y con WONK (SOFT 40, WONK 1), el h2 más sobrio y sin
   WONK (SOFT 20). No es un capricho de detalle: sin los ejes,
   Fraunces se dibuja en su instancia por defecto y se parece a
   cualquier serif. */
h1, h2, h3 {
  font-family: var(--font-heading);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.02em;
  margin: 0;
}
h1 { font-variation-settings: "SOFT" 40, "WONK" 1; line-height: 1.08; letter-spacing: -.025em; }
h2, h3 { font-variation-settings: "SOFT" 20; letter-spacing: -.015em; }

a { color: var(--vino); text-underline-offset: 3px; }
a:hover { color: var(--vino-hondo); }

:focus { outline: none; }
:focus-visible { outline: 2px solid var(--vino); outline-offset: 2px; }
/* ACÁ ESTABA `.banda :focus-visible { outline-color: … }`, que existía
   porque el anillo azul no se veía sobre la banda de acero. Sin banda
   oscura no hace falta: el anillo de vino se lee sobre papel igual que
   sobre el resto de la página. Una excepción menos. */

/* ============================================================
   EL MARCO: LA PÁGINA DE PUNTA A PUNTA, TAMBIÉN ABAJO DE 900
   ============================================================
   🔴 ARREGLADO EL 1-SET-2026 A LA NOCHE. Acá decía
   `width: min(430px, 100%)` + sombra, o sea: una hoja de 430px
   centrada arriba del fondo gris. De 430 a 899px eso dejaba, MEDIDO
   con Chrome, 169px de gris de cada lado a 768 (iPad vertical) y
   225px a 880 — 470px de rango en formato celular estirado, que es
   justo lo que el dueño rechazó dos veces.

   AHORA LA COLUMNA OCUPA SIEMPRE EL ANCHO: es el mismo patrón de
   diario que ya regía de 900 para arriba (la barra y el
   fondo llegan a los dos bordes, el contenido topa adentro), sólo que
   el tope de adentro ya no empieza recién a los 900.

   ABAJO DE 430px NO CAMBIA UN PÍXEL, y es fácil de ver: ahí
   `min(430px, 100%)` YA daba 100%, y la sombra no se veía porque no
   había fondo a los costados. Medido a 320 y a 390: mismos anchos,
   mismos altos, las mismas 3 filas.

   QUIÉN PONE EL MARGEN AHORA: --margen-movil, en cada bloque que
   pinta fondo (las bandas, el cuerpo, la lista, el pie). Mismo
   recurso que --margen-lateral en escritorio y por el mismo motivo:
   un envoltorio con max-width le cortaría el fondo a la barra.
   ============================================================ */
.marco {
  min-height: 100vh;
  display: flex;
  justify-content: center;
}
.columna {
  width: 100%;
  background: var(--papel);
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  /* `overflow-x: clip` Y NO `overflow: hidden` (2-set-2026). Los dos
     recortan igual de bien la animación de entrada de pantalla (los
     28px de `translateX`, que era para lo que estaba el hidden), pero
     `hidden` convierte a la columna en un contenedor de scroll y eso
     ANULA el `position: sticky` de la barra: el navegador la pega al
     borde de ESE contenedor, que no se mueve, así que no pasa nada.
     `clip` recorta sin crear ese contenedor. Si algún día esto vuelve
     a `hidden`, la barra deja de seguir al que baja — y en silencio. */
  overflow-x: clip;
}

/* ============================================================
   LA BARRA CON EL MENÚ DESPLEGADO — EN TODAS LAS MEDIDAS
   ============================================================
   🔴 SE FUE EL ☰ Y SE FUE EL CAJÓN. Lo que había hasta hoy era un
   panel que entraba desde la izquierda con fondo oscuro atrás, con su
   ✕, su Escape, su trampa de foco y su `visibility:hidden`. Nada de
   eso existe más: las cinco entradas están escritas en la barra y se
   ven sin tocar nada, que es lo que pidió el dueño mirando el
   prototipo.

   LO QUE SE BORRÓ, PARA QUE NADIE LO BUSQUE: .fondo-panel, .panel,
   .panel-cabeza, .panel-marca, .panel-cerrar, .panel-lista,
   .panel-item, .panel-nota, .panel-pie y .btn-menu. En buscador.js se
   fueron con ellas abrirPanel, cerrarPanel, focoables y la trampa de
   Tab (unas ochenta líneas).

   LO QUE NO SE PIERDE AL SACAR EL CAJÓN, y era lo bueno que tenía:
     · dónde estoy parado → sigue marcado con aria-current, ahora
       sobre el ítem de la barra (ver .menu a[aria-current]);
     · teclado → cinco <a> con href de verdad: se tabulan y se abren
       con Enter sin una línea de JS;
     · lector de pantalla → la barra es <nav> con su aria-label, y las
       entradas son una lista.
   Lo que sí se pierde: Escape ya no cierra nada, porque no hay nada
   que cerrar.

   ============================================================
   🔴 EL TELÉFONO: UNA TIRA QUE SE DESLIZA, NO CINCO RENGLONES
   ============================================================
   El prototipo deja envolver el menú con `flex-wrap`. Con SUS textos
   —"Pedir uno que no está", "Cómo funciona"— eso entra en dos
   renglones. Con LOS TEXTOS DE ESTE SITIO, que están aprobados uno
   por uno y no se tocan, no:

       Buscar un libro .................  ~105px
       Pedir un libro que no está ......  ~180px
       Cómo funciona esto ..............  ~135px
       Recomendador + "próximamente" ...  ~185px
       ¿Tenés una librería? ............  ~145px

   A 320px el ancho útil es 280 y no entran dos juntas en ningún
   renglón: el menú envuelto son CINCO renglones, ~140px de alto. La
   pantalla de resultados a 320×568 tiene ~98px de sobra sobre el
   invariante de 3 filas; 140 se lo come y deja 2 filas.

   POR ESO, ABAJO DE 760px, EL MENÚ ES UNA TIRA DE UN RENGLÓN que se
   desliza con el dedo (`overflow-x:auto`, `flex-wrap:nowrap`): cuesta
   ~34px en vez de ~140 y las cinco entradas siguen ahí, ninguna
   escondida detrás de un botón. Las dos primeras —las que la persona
   vino a hacer— entran enteras sin deslizar.

   El degradé del borde derecho (.menu-tira:after) es lo que dice que
   hay más: una tira que se corta limpia se lee como una lista de dos.
   Es el mismo recurso que el estante de la home.

   NO ES UN ☰ DISFRAZADO: no hay nada que abrir, no hay estado, y las
   cinco entradas están en el DOM y en el orden de tabulación desde el
   primer dibujo.
   ============================================================ */
/* 🔴 UN SOLO RENGLÓN, TAMBIÉN EN EL TELÉFONO, Y ESO ESTÁ MEDIDO.
   La primera versión ponía la marca arriba y la tira abajo: 74px de
   barra. A 320×568 eso dejaba la pantalla de resultados en DOS filas
   enteras y el invariante del proyecto son TRES. En un renglón mide
   42px y las tres vuelven a entrar (ver la medición completa en el
   bloque de 320, más abajo).
   La marca no se achica (`flex: none`); lo que se acomoda es la tira,
   que para eso desliza. */
/* LA BARRA ACOMPAÑA AL QUE BAJA (pedido del dueño, 2-set-2026).
   Queda pegada arriba en todas las pantallas: el menú es la única
   forma de moverse por el sitio desde que se fue el ☰, y en las
   pantallas largas —el "cómo funciona", librerías— quedaba a dos
   pantallazos de scroll.
   TIENE QUE TENER FONDO PROPIO, y lo tiene (`--papel-hondo`): una
   barra pegada y transparente deja pasar el texto por atrás.
   El z-index es 3 porque en este archivo ya viven un 1 y un 2 (el
   degradé de la tira del menú y el sendero del recorrido): la barra
   va arriba de los dos. */
.barra {
  position: sticky;
  top: 0;
  z-index: 3;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 12px;
  padding: 8px var(--margen-movil);
  background: var(--papel-hondo);
  border-bottom: 1px solid var(--linea);
}
/* La marca, con los ejes de Fraunces del prototipo. El <em> del "Tu"
   va en vino y sin cursiva: es el único color de la barra. */
.marca {
  font-family: var(--font-heading);
  font-variation-settings: "SOFT" 30, "WONK" 1;
  font-weight: 700;
  font-size: 16px;
  letter-spacing: -.02em;
  line-height: 1.15;
  text-decoration: none;
  white-space: nowrap;
  color: var(--tinta);
  flex: none;
}
.marca em { font-style: normal; color: var(--vino); }
a.marca:hover { color: var(--tinta); }

/* La tira se come lo que sobra del renglón y se estira hasta el borde
   derecho de la pantalla: que el último lomo de texto se corte contra
   el borde, y no contra un margen, es parte de lo que dice "esto
   sigue". `min-width: 0` es obligatorio — sin él, un hijo con
   overflow no deja encoger al flex item y la barra empuja la página. */
.menu-tira { position: relative; flex: 1 1 auto; min-width: 0; margin-right: calc(var(--margen-movil) * -1); }
.menu-tira:after {
  content: "";
  position: absolute;
  top: 0; bottom: 0; right: 0;
  width: 28px;
  pointer-events: none;
  background: linear-gradient(270deg, var(--papel-hondo), rgba(225, 217, 199, 0));
}
.menu {
  display: flex;
  flex-wrap: nowrap;
  gap: 18px;
  list-style: none;
  margin: 0;
  padding: 0 calc(var(--margen-movil) + 22px) 0 0;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.menu::-webkit-scrollbar { display: none; }
.menu li { flex: 0 0 auto; }
.menu a {
  display: block;
  white-space: nowrap;
  font-size: 13.5px;
  text-decoration: none;
  color: var(--tinta-suave);
  padding-bottom: 2px;
  border-bottom: 2px solid transparent;
  transition: border-color .15s, color .15s;
}
.menu a:hover, .menu a:focus-visible { border-bottom-color: var(--vino); color: var(--tinta); }
/* Dónde estoy parado. Lo pone buscador.js con aria-current, así que
   el dato del lector de pantalla y el subrayado salen de la misma
   fuente y no se pueden desincronizar. */
.menu a[aria-current="page"] { border-bottom-color: var(--tinta); color: var(--tinta); font-weight: 700; }
/* "PRÓXIMAMENTE" AL LADO DEL RECOMENDADOR. Se ve y se toca; lo que
   abre es la pantalla que explica que todavía no está abierta. */
.menu-nota {
  font-size: 10px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--humo);
  border: 1px solid var(--linea);
  border-radius: 2px;
  padding: 1px 4px;
  margin-left: 5px;
  vertical-align: 1px;
}
@media (prefers-reduced-motion: reduce) { .menu a { transition: none; } }

/* ---------- las pantallas ---------- */
.pantalla {
  display: flex;
  flex-direction: column;
  flex: 1;
}
.pantalla[hidden] { display: none; }

@keyframes etl-in   { from { opacity: 0; transform: translateX(28px);  } to { opacity: 1; transform: translateX(0); } }
@keyframes etl-back { from { opacity: 0; transform: translateX(-28px); } to { opacity: 1; transform: translateX(0); } }
@keyframes etl-row  { from { opacity: 0; transform: translateY(8px);   } to { opacity: 1; transform: translateY(0); } }

.pantalla.avanza { animation: etl-in .28s ease-out; }
.pantalla.vuelve { animation: etl-back .28s ease-out; }
.entra { animation: etl-row .35s ease-out; }

/* Quien pidió menos movimiento no ve ninguno. */
@media (prefers-reduced-motion: reduce) {
  .pantalla.avanza, .pantalla.vuelve, .entra { animation: none; }
}

/* ---------- la banda de cada pantalla ----------
   🔴 YA NO ES LA BANDA DE ACERO. Era un bloque #1d2d3d con el texto
   claro encima y se llamaba "la marca del sitio". Hoy la única banda
   con fondo propio es .barra (papel hondo, arriba de todo y en las
   siete pantallas); ésta pasa a ser lo que siempre fue por debajo del
   color: el encabezado de la pantalla, sobre el papel de la página.
   Se queda con la clase y con sus paddings —que están medidos— y
   pierde el fondo y el color de texto. */
.banda { background: transparent; color: inherit; }
.banda-compacta { padding: 12px var(--margen-movil); display: flex; gap: 8px; align-items: center; }
/* La banda compacta de las pantallas que NO llevan campo de búsqueda
   (recomendador y librerías). Sin el campo la banda quedaba la mitad
   de alta que en el resto del sitio y se leía como otra página: se le
   pone el mismo alto y listo. */
.banda-simple { min-height: 70px; }

/* ============================================================
   LA HOME: EL BLOQUE CENTRADO
   ============================================================
   Los paddings, los cuerpos de letra y la separación del H1 son los
   mismos de siempre. Lo que cambió el 1-set fue el centrado, y en dos
   pasos:

   PRIMERO se centró SÓLO EL CAMPO, y quedó mal: el H1 y la bajada
   seguían contra el margen izquierdo y el formulario en el medio. El
   dueño lo señaló como lo que más le molestaba de la pantalla.

   AHORA VAN LOS TRES JUNTOS: título, bajada y campo son un solo
   bloque centrado (.home-centro), en las dos medidas. La marca y el ☰
   NO entran —siguen arriba a la izquierda, como en toda banda de este
   sitio—, y por eso el centrado vive en un envoltorio y no en el
   <header> entero.

   LO QUE NO SE MOVIÓ, porque estaba bien: el centro del campo sigue
   cayendo en el centro de la banda (medido a 1920: 960 y 960) y la
   banda sigue pintando de punta a punta. Ahora el H1 y la bajada caen
   en ese mismo 960.

   LO QUE SE PROBÓ Y SE DESHIZO, para que no vuelva por descuido: una
   home tipo Google, con la banda ocupando la pantalla entera y marca,
   bajada, campo y los cuatro renglones —que ya no están— centrados
   en VERTICAL. Funcionaba y el
   teclado del teléfono estaba resuelto, pero no era lo pedido. Con
   ella se fue todo el andamiaje que necesitaba (--alto-hero fijado por
   JS, 88svh): centrar en horizontal no necesita nada de eso.
   ============================================================ */
.banda-alta { padding: 24px var(--margen-movil) 28px; }
/* Sólo el ☰ y la marca. "MONTEVIDEO" iba acá, empujado al otro
   extremo con margin-left:auto, y se sacó el 1-set-2026 por pedido
   del dueño: la clase .ciudad se fue con él y no quedó ninguna otra
   pantalla usándola. */
/* De esta fila se fueron el ☰ (no hay más cajón) y la marca (vive en
   .barra). Queda sólo para colgar los dos íconos a la derecha; por eso
   ya no alinea por baseline, que era para que la marca y el ☰ se
   apoyaran en el mismo renglón. */
.marca-fila { display: flex; align-items: center; min-height: 22px; }

/* ---------- Instagram y Facebook, arriba a la derecha ---------- */
/* `margin-left: auto` los manda contra el borde derecho de la banda
   —el mismo recurso que usaba "MONTEVIDEO" antes de que se sacara—.
   `align-self: center` porque la fila alinea por BASELINE (para que
   la marca y el ☰ se apoyen en el mismo renglón) y un <div> de
   íconos no tiene baseline propia. MEDIDO, la diferencia son 3px
   —sin él los íconos suben de y=44 a y=41—: no es un desastre, es
   quedar 3px arriba del centro de la fila. Se deja porque centrar es
   lo que se quiere decir, no porque sin él se rompa.

   EL TAMAÑO DEL BLANCO ES EL DEL DEDO, no el del dibujo: el ícono se
   ve de 21px y el área tocable mide 44x44 con el padding. Eso vale
   desde ahora aunque hoy no se pueda tocar nada: el día que se peguen
   las URLs no hay que volver a medir.

   EL COLOR SALE DE currentColor, así el mismo SVG sirve si alguna vez
   se usa fuera de esta banda. Van en tinta suave al 80%: se ven, y no
   le compiten al buscador, que es el que tiene que ganar la
   pantalla. */
.redes { margin-left: auto; align-self: center; display: flex; gap: 2px; }
.red {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  margin: -11px 0;          /* el blanco del dedo no engorda la banda */
  color: var(--tinta-suave);
  opacity: .8;
}
/* Sin href no hay hover ni foco que valgan; cuando buscador.js le
   pone la dirección, el <a> pasa a ser enlace y esto empieza a
   funcionar solo. */
.red[href]:hover, .red[href]:focus-visible { opacity: 1; }
.red[href] { cursor: pointer; }
.red-icono { display: block; }
/* EL BLOQUE CENTRADO. `text-align` alcanza y es lo más barato que
   hay: no cambia ni un alto, ni un margen, ni el orden del DOM, así
   que no puede corregir de más. El campo ya venía centrado por su
   `margin-inline: auto` del bloque de 760px y sigue igual; lo que se
   suma es que el título y la bajada caigan en la misma vertical. */
.home-centro { text-align: center; }
.banda-alta h1 { font-size: 32px; margin: 40px 0 6px; }

/* LA MARCA VIVE UNA SOLA VEZ, EN .barra (ver el bloque de la barra).
   Acá estaban `.marca` de las bandas internas y `.marca-escritorio`,
   que la mostraba de 760px para arriba y la escondía en el teléfono.
   Las dos se fueron: con la marca en la barra de arriba, repetirla en
   el encabezado de la pantalla la escribía dos veces en el mismo
   monitor. */
.bajada { margin: 0; font-size: 14px; color: var(--humo); }

.volver {
  color: var(--tinta-suave);
  text-decoration: none;
  font-size: 18px;
  line-height: 1;
  /* 44px de blanco para el pulgar sin cambiar cómo se ve. */
  padding: 12px 10px;
  margin: -12px -4px -12px -10px;
}
.volver:hover, .volver:focus-visible { color: var(--vino); }
/* El "← Volver a los resultados" del prototipo: .88rem (14,08px) en
   humo. Estaba en 12px. */
.volver-texto { font-size: 14.08px; color: var(--humo); display: inline-block; }

/* ---------- inputs y botones (clases del sistema) ---------- */
.input {
  width: 100%;
  min-height: 36px;
  padding: 6px 10px;
  font: inherit;
  font-size: 14px;
  color: var(--tinta);
  caret-color: var(--vino);
  background: var(--papel-alto);
  border: 1px solid var(--linea);
  border-radius: var(--radio-chico);
}
.input:hover { border-color: color-mix(in srgb, var(--tinta) 35%, transparent); }
/* El anillo de foco no se dibuja pegado al borde redondo: se le da el
   mismo radio y un poco de aire, si no queda una esquina cuadrada
   arriba de una redonda. */
.input:focus-visible { border-color: var(--vino); outline-offset: 1px; border-radius: var(--radio-chico); }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  cursor: pointer;
  text-decoration: none;
  /* EL BOTÓN ES DE KARLA, no de la serif de títulos: en el prototipo
     el único texto en Fraunces fuera de los títulos es la marca. */
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 14px;
  line-height: 1.2;
  color: var(--tinta);
  background: transparent;
  border: 1px solid var(--linea);
  border-radius: var(--radio-chico);
  padding: var(--space-2) calc(var(--space-3) * 1.4);
  transition: background-color .14s ease-out, box-shadow .14s ease-out;
}
@media (prefers-reduced-motion: reduce) { .btn { transition: none; } }
.btn:disabled { opacity: .45; cursor: not-allowed; }
/* EL BOTÓN PRIMARIO ES EL VINO PLANO DEL PROTOTIPO. Se le fue la
   sombra de cobalto que lo levantaba: en un sistema de papel, un
   botón que flota es del sistema anterior. --papel-alto sobre --vino
   da 7,77:1. */
.btn-primary {
  background: var(--vino);
  color: var(--papel-alto);
  border-color: var(--vino);
}
.btn-primary:hover { background: var(--vino-hondo); border-color: var(--vino-hondo); }
.btn-primary:active { background: var(--vino-hondo); border-color: var(--vino-hondo); }
.btn-secondary { border-color: var(--linea); background: var(--papel-alto); }
.btn-secondary:hover { background: var(--papel-hondo); border-color: var(--vino); color: var(--vino); }
.btn-secondary:active { background: var(--papel-hondo); }
.btn-block { width: 100%; }
/* ACÁ ESTABA .btn-claro, el botón blanco de la banda de acero: existía
   porque un botón de acento sobre el azul oscuro daba 2,4:1 y se
   hundía. Sin banda oscura no tiene sentido — el botón de buscar es
   el mismo vino que el resto del sitio, como en el prototipo
   (`form.buscador button{background:var(--vino)}`). La clase se
   mantiene y apunta al primario para no tener que tocar el HTML de
   las cuatro pantallas que la usan. */
.btn-claro { background: var(--vino); color: var(--papel-alto); border-color: var(--vino); }
.btn-claro:hover { background: var(--vino-hondo); border-color: var(--vino-hondo); }

/* LA BÚSQUEDA DE LA HOME: input y botón apilados, como siempre.
   En el teléfono el formulario ocupa el ancho entero de la banda, así
   que su centro ya es el centro de la banda; en el monitor lo centra
   el `margin-inline: auto` del bloque de 760px.

   EL `text-align: left` DEL INPUT NO ES DECORACIÓN: `text-align` se
   hereda adentro de un <input>, así que sin esta línea el .home-centro
   le centraría el placeholder y lo que la persona escribe. El texto
   que se tipea arranca a la izquierda, como en cualquier campo. */
.buscador-alto { margin-top: 20px; display: flex; flex-direction: column; gap: 10px; }
/* EL CAMPO DE LA HOME LLEVA EL FILO DE TINTA DEL PROTOTIPO
   (`form.buscador{border:1.5px solid var(--tinta)}`). Es el único
   borde oscuro del sitio, y es a propósito: es lo que la persona vino
   a usar. Antes el borde era transparente porque el campo se apoyaba
   sobre la banda de acero y ya se recortaba solo; sobre papel, sin
   filo, no se ve dónde empieza. */
.buscador-alto .input { height: 52px; font-size: 16px; background: var(--papel-alto); border: 1.5px solid var(--tinta); text-align: left; }
.buscador-alto .input:focus-visible { outline-color: var(--vino); }
.buscador-alto .btn { height: 48px; font-size: 16px; }

/* La búsqueda de las pantallas internas: en una fila. */
.buscador-fila { flex: 1; display: flex; gap: 8px; min-width: 0; }
.buscador-fila .input { height: 42px; background: var(--papel-alto); border-color: var(--linea); min-width: 0; flex: 1;
  /* 16px: abajo de eso, Safari de iPhone hace zoom al enfocar y la
     persona queda con la página corrida. */
  font-size: 16px; }
.buscador-fila .btn { height: 42px; flex: none; }

/* ---------- las etiquetas ----------
   DEJARON DE SER PASTILLAS DE COLOR. Eran cápsulas rellenas con
   `border-radius: 999px`; ahora son el rótulo del prototipo: chico,
   versalita, espaciado y con filo de un píxel (.mk-banda / .mk-eti).

   POR QUÉ IMPORTA Y NO ES GUSTO: en la fila de resultados la etiqueta
   vive al lado del precio. Rellena de color le sumaba peso justo a la
   esquina que menos tiene que pesar. Con filo dice lo mismo y no
   grita. */
.tag {
  display: inline-flex;
  align-items: center;
  /* El `.banda` del prototipo: .64rem (10,24px), letter-spacing .12em,
     peso 700 y padding .12rem .42rem (1,92px y 6,72px). Lo único que
     NO se calca es el relleno de color —el prototipo pinta la banda
     "lo tenés hoy" de vino macizo—: rellena, le suma peso a la esquina
     del precio, que es la que menos tiene que pesar. Queda con filo. */
  font-size: 10.24px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: 1.92px 6.72px;
  border-radius: 2px;
  border: 1px solid transparent;
  white-space: nowrap;
}
/* "hoy" — el estado que el catálogo confirma. Vino, que es el color
   del sitio para lo que está. */
.tag-accent  { border-color: var(--vino); color: var(--vino); }
/* "sin stock hoy" — apagado a propósito: es una ausencia. */
.tag-neutral { border-color: var(--linea); color: var(--humo); }
/* "aproximado" / "sin confirmar" — la advertencia. */
.tag-outline { border-color: var(--humo); color: var(--humo); }

/* ---------- el cuerpo de las pantallas ---------- */
/* 🔴 LA HOME YA NO TIENE CUERPO (2-set-2026). Esta regla la usan las
   otras seis pantallas; #p-buscar es barra, banda con el buscador y
   estante, y ahí se termina. El <div class="cuerpo"> de la home se
   borró del HTML junto con lo único que tenía adentro. */
.cuerpo { padding: 20px var(--margen-movil); }

/* ---------- lo que pasó por el cuerpo de la home, y ya no está ----------
   EL 1-SET-2026 acá vivieron los tres porqués (por qué el buscador,
   por qué el recomendador, por qué se pueden pedir libros), que el
   dueño juntó en la home —"la idea es que todo esté en la página
   principal"— y sacó el 2-set: "la home queda con la barra, el
   buscador y el estante". LOS TEXTOS NO SE PERDIERON: están enteros,
   palabra por palabra, en el comentario del final de buscador.html.
   Ahí vive hoy la única copia del 5,6% sobre 500 libros y de los
   diecisiete sellos uruguayos.

   ANTES QUE ELLOS SE FUERON DE ACÁ, y con ellos sus estilos:
     · `.chico` — la letra chica del "No vendemos, no cobramos
       comisión…", `margin: 16px 0 0; font-size: 12px; color:
       var(--tinta-suave)`.
     · `.caja` — el recuadro del "¿No está el libro que buscás?",
       `margin-top: 16px; border: 1px solid var(--linea);
       padding: 12px 14px; font-size: 12px`.
     · `.chico-libreria` — la salida a la pantalla de las librerías,
       `margin-top: 22px; padding-top: 14px; border-top: 1px solid
       var(--linea)`.
   NINGUNO DE LOS TRES SE PERDIÓ: el "no vendemos, no cobramos
   comisión, nadie paga para salir primero" lo dicen #p-librerias
   ("Qué es esto" y "Qué no te cobramos") y #p-como ("Adónde te
   mandamos"); el pedido se sigue ofreciendo desde el ☰, desde el "¿No
   es ninguno de estos?" de los resultados y solo cuando la búsqueda no
   encuentra nada; y el formulario de las librerías vive entero en
   #p-librerias. Lo que se borró son estas tres reglas, que ya no las
   usaba nadie. Antes que todo eso, en el mismo lugar, estuvieron los
   cuatro renglones `.hechos/.hecho`.

   El pie no se ve en esta pantalla, y eso NO se resuelve acá: lo
   esconde buscador.js (`mostrarPie`). Buscarlo en el CSS es perder
   media hora. */
/* ACÁ VIVÍA TODO EL DIBUJO DE LOS TRES PORQUÉS DE LA HOME: el
   `margin-top: 0` de `.texto.texto-home`, la grilla de una columna
   que alineaba el título centrado con su párrafo, y el ancho de la
   caja. Se borró entero el 2-set-2026 porque se fue el único elemento
   que lo usaba: la home quedó con la barra, el buscador y el estante,
   sin cuerpo. No quedó ni un `.texto-home` en el HTML.

   🔴 SI ALGUIEN REPONE ESOS TEXTOS: el HTML está guardado palabra por
   palabra al final de buscador.html, y ahí también está por qué el
   título se centraba sobre la caja del párrafo y no sobre el bloque
   (el <h2> quedaba hasta 194px corrido a la derecha en pantallas
   grandes). El CSS hay que volver a escribirlo, o usar el tratamiento
   de la pantalla donde caigan. */

/* ---------- "cómo funciona" y los textos largos ---------- */
/* Medida de lectura acotada incluso en el teléfono: son párrafos, no
   filas.

   EL "CÓMO FUNCIONA" YA NO ESTÁ EN LA HOME (1-set-2026): se mudó a
   #p-como, su propia pantalla, a la que se llega sólo por el ☰. Con
   él se fue la clase `.como` —era la sección de la home, con su filete
   de 2px arriba para despegarla de lo de abajo— y quedaron sólo
   `.texto` y `.como-bloque`, que son los mismos que usan la pantalla
   de librerías y la del recomendador. Un solo juego de estilos para
   las tres pantallas de texto. */
/* CADA SECCIÓN ES UNA TARJETA (2-set-2026). Antes eran bloques
   pegados uno al otro, separados por un filete de 1px y márgenes
   escritos a mano en cinco lugares distintos (16, 18, 24 y 18px
   según la pantalla y la medida). Ahora el que separa es el aire
   entre tarjetas, en un solo número: --aire-bloques, que crece con
   la pantalla. `.texto` se vuelve una pila con gap, así que el
   primer bloque y el último ya no necesitan sus excepciones. */
.texto { display: flex; flex-direction: column; gap: var(--aire-bloques); }
.como-bloque {
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
}
.como-bloque h2, .como-bloque h3 { font-size: 16px; margin-bottom: 4px; }
.como-bloque p, .texto p {
  margin: 6px 0 0;
  font-size: 13px;
  line-height: 1.55;
  color: var(--tinta);
  max-width: 62ch;
}
.texto { margin-top: 18px; }

/* ACÁ VIVÍA EL ACORDEÓN DEL "CÓMO FUNCIONA" (#p-como). Duró medio
   día: lo pidió el dueño el 2-set-2026 a la mañana y esa misma tarde
   lo dio vuelta —*"que esté siempre desplegado el texto debajo del
   título y yo no tenga que apretar para que baje"*—. Se fueron el
   HTML (<details>/<summary>) y sus 114 líneas de CSS: la regla base,
   la fila tocable de 44px del <summary>, el borrado del triángulo
   nativo por los dos lados (::marker y ::-webkit-details-marker), la
   flechita dibujada con dos bordes, la excepción a la grilla de 760
   y las dos columnas armadas adentro del cuerpo desplegado.

   HOY #p-como USA EXACTAMENTE LO MISMO QUE #p-pedido, #p-recomendador
   y #p-librerias: `.como-bloque.paso`. No queda ni una regla propia
   de esa pantalla, y ese es el punto. Si alguien vuelve a pedir un
   acordeón, se escribe de nuevo — no hay nada colgando esperándolo. */

/* EL LUGAR RESERVADO PARA EL ACCESO DEL RECOMENDADOR. Hoy no hay
   login: ni campo, ni botón, ni endpoint. Esta caja marca dónde va a
   ir y dice, sin adornos, que todavía no existe. */
/* PUNTEADO A PROPÓSITO, y por eso NO es una tarjeta blanca como el
   resto: lo punteado dice "acá todavía no hay nada". Una tarjeta con
   sombra lo haría parecer una función que existe. */
.hueco-acceso {
  margin-top: 22px;
  border: 1px dashed var(--linea);
  border-radius: var(--radio);
  padding: 20px 18px;
  text-align: center;
}
.hueco-acceso p { margin: 0; font-size: 12px; color: var(--humo); }

/* EL FORMULARIO DE LAS LIBRERÍAS. Antes colgaba al pie de la home con
   `margin: auto` empujándolo contra el borde de abajo; ahora vive
   adentro del cuerpo de su propia pantalla, después del texto que
   explica de qué se trata. Mismo formulario, mismo endpoint: se mudó,
   no se rehizo. */
/* Era un bloque colgado de un filete de 2px; ahora es una tarjeta
   más, como el resto de la pantalla. */
.bloque-librerias {
  margin: var(--aire-bloques) 0 0;
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
}
.bloque-librerias p { margin: 0 0 10px; font-size: 12px; color: var(--tinta-suave); }
.fila-mail { display: flex; gap: 8px; }
.fila-mail .input { flex: 1; height: 38px; font-size: 16px; }
.fila-mail .btn { height: 38px; flex: none; }
.dicho-ok { margin: 0; font-size: 12px; color: var(--vino); }
.dicho-mal { margin: 0; font-size: 12px; color: var(--tinta); }

/* ---------- la tapa ----------
   CHICA Y A LA IZQUIERDA (docs/diseno-web.md, principio 1: "la tapa es
   chica y va a la izquierda"). Lo que hace esta regla, en orden de
   importancia:

   · `flex: 0 0 auto` + ancho fijo → la tapa NUNCA le gana ancho al
     título ni empuja el precio afuera: lo que crece es el texto.
   · ALTO Y ANCHO ESCRITOS LOS DOS → la caja mide lo mismo antes y
     después de que la imagen llegue. Sin esto el texto salta cuando
     entra la tapa, que es justo lo que no puede pasar con imágenes de
     un CDN ajeno. Antes eso lo hacía `aspect-ratio` a partir del ancho;
     ahora las dos medidas son explícitas y salen de --alto-tapa, que es
     más fuerte todavía: no depende de que el navegador aplique la
     proporción. Con la tapa más grande esto importa MÁS, no menos —
     el salto que evita también es el doble.
   · `object-fit: contain` → una tapa cuadrada (las de "sin imagen" de
     Shopify) o una apaisada se ven enteras. `cover` recortaría el
     título del libro, y deformar no se deforma nunca.
   · el fondo gris es el de la caja vacía mientras carga; con la imagen
     puesta no se ve.
   Si no hay tapa NO hay elemento: la fila queda como estaba (ver
   crearTapa en buscador.js).

   EL TAMAÑO NO ESTÁ ACÁ: sale de --alto-tapa (arriba, en :root). */
.tapa {
  flex: 0 0 auto;
  align-self: flex-start;
  width: var(--tapa-ancho);
  height: var(--tapa-alto);
  object-fit: contain;
  background: var(--papel-hondo);
  /* LA ESQUINA ES LA DEL PROTOTIPO: `.tapa { border-radius: 2px }`.
     Estaba en 8px, que sobre una tapa de 80px de ancho se lee como un
     ícono de app y no como un libro. No le cambia ni un píxel de
     tamaño: la tapa sigue midiendo lo que dice --alto-tapa. */
  border-radius: 2px;
  /* EL LOMO (2-set-2026, del prototipo del dueño: `.tapa` lleva
     `box-shadow: inset -3px 0 0 rgba(0,0,0,.10)`). Es una sombra
     ADENTRO del borde derecho: hace que la portada se lea como un
     libro apoyado y no como una miniatura pegada. NO LE CAMBIA NI UN
     PÍXEL DE TAMAÑO — `inset` no ocupa layout— así que el invariante
     de la lista no se toca. Es también lo que le da presencia a la
     portada sin subirla de tamaño, que es lo que pidió el dueño. */
  box-shadow: inset -3px 0 0 rgba(0, 0, 0, .10);
}
/* La tapa de la cabeza de la ficha. El tamaño sale de la misma
   perilla (ver --tapa-ficha-alto en :root). */
.tapa-ficha {
  width: var(--tapa-ficha-ancho);
  height: var(--tapa-ficha-alto);
}
/* En 320px cada píxel se lo saca al título, que es lo que la persona
   vino a leer. Ahí la tapa crece menos que en el resto del sitio: la
   misma perilla, con menos escala. */
@media (max-width: 359px) { :root { --escala-tapa: .70; } }
.tapa-precio {
  width: var(--tapa-precio-ancho);
  height: var(--tapa-precio-alto);
  align-self: center;
}
/* El hueco de la fila que no tiene tapa en una lista que sí las tiene:
   ocupa exactamente lo mismo y no se ve (ver ajustarHuecos en
   buscador.js). Si NINGUNA fila tiene tapa, no se dibuja ninguno. */
/* `box-shadow: none` es obligatorio desde que la tapa tiene lomo: sin
   esto, la fila SIN tapa dibujaría un lomo flotando en el vacío. */
.tapa-hueca { background: transparent; box-shadow: none; }

/* ---------- resultados ---------- */
/* ============================================================
   LA LISTA — UNA SOLA COLUMNA, COMO EL PROTOTIPO (3-set-2026)
   ============================================================
   🔴 SE FUE EL RIEL DE LA DERECHA. De 760px para arriba esto era una
   grilla de dos columnas: la lista a la izquierda y lo secundario —las
   ediciones sin confirmar, la salida al pedido, la nota del ejemplar—
   en una columna angosta de 300 a 340px. El prototipo del dueño no
   tiene riel: es una sola columna de 1000px centrada (920 de
   contenido) y lo secundario va ABAJO, cruzando el ancho.

   QUÉ SE GANA, MEDIDO: a 1920 la fila pasa de 964px a 920 y deja de
   tener el precio a un monitor de distancia del título; y la caja de
   "¿No es ninguno de estos?" deja de estar al costado del primer
   resultado —donde competía con la lista— y pasa a cerrarla.

   LO QUE NO SE MEZCLA: las ediciones sin confirmar SIGUEN EN SU
   SECCIÓN APARTE, con su rótulo, abajo de la lista. Eso está decidido
   y no se toca. */
.lista { padding: 14px var(--margen-movil) 32px; }
.lista-cuerpo { min-width: 0; }

/* EL FILETE DE 2px SE FUE (2-set-2026): la barra es un rótulo arriba
   de una pila de tarjetas, y una raya negra cruzando el gris se lee
   como el sistema plano viejo. Lo que separa ahora es el aire. */
.barra-conteo {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 16px;
  /* El `.lista-cabeza` del prototipo: `padding-bottom:.7rem` (11,2px)
     y `margin-bottom:.2rem` (3,2px), con la canaleta de 1rem. */
  padding: 0 2px 11.2px;
  /* EL FILETE VOLVIÓ, PERO NO ES EL DE ANTES (2-set-2026). El que se
     había ido era negro y de 2px: el remate del sistema plano. Éste es
     el `.lista-cabeza` del prototipo del dueño: 1px de --linea, el
     mismo filete que separa una fila de la siguiente. Su trabajo no es
     rematar el rótulo, es abrir la lista — arriba de una pila de filas
     con filete, un rótulo suelto flota. */
  border-bottom: 1px solid var(--linea);
  margin-bottom: 3.2px;
}
/* `.lista-cabeza b`: .9rem (14,4px), letter-spacing .06em, versalita. */
.conteo { font-size: 14.4px; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; font-weight: 700; }
/* En 320px "6 RESULTADOS" y la regla del precio no entran en un
   renglón. El conteo NO se parte (es el dato); la regla, que es una
   aclaración, se acomoda en dos renglones a la derecha. */
/* `.lista-cabeza span`: .82rem (13,12px) en humo. */
.regla-precio { font-size: 13.12px; color: var(--humo); text-align: right; }

.aviso-aproximados {
  margin: 0 0 var(--aire-bloques);
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
  font-size: 13px;
  color: var(--tinta-suave);
}

/* ============================================================
   LA FILA DE RESULTADO — TARJETA, Y SIGUE SIENDO UNA LISTA
   ============================================================
   🔴 LA DECISIÓN EXPLÍCITA DEL DUEÑO (2-set-2026): la lista NO se
   convierte en grilla de portadas. La fila pasa a ser una tarjeta
   blanca con sombra —antes era un bloque separado por un filete de
   1px— y ahí termina el cambio: la tapa sigue al COSTADO en
   --alto-tapa, el título sigue mandando la jerarquía y el precio
   sigue chico. Una tarjeta por fila, una fila abajo de la otra.

   EL AIRE DE ESTA FILA ES PROPIO Y MÁS CHICO QUE EL DE LAS DEMÁS
   TARJETAS (--aire-fila, no --aire-tarjeta), y es lo que protege el
   invariante de 3 filas enteras a 320px. Medido a 320×568 con el
   catálogo real: siguen entrando 3.

   EL RECUADRO ILUMINADO AL PASAR EL MOUSE dejó de necesitar el
   truco de `box-shadow: -12px 0 0` que había acá: eso existía para
   que el resaltado se pasara del borde de una fila SIN fondo propio.
   Con tarjeta, el fondo es de la tarjeta y el resaltado termina
   donde termina la esquina redonda. */
.fila {
  display: flex;
  justify-content: space-between;
  /* LA CANALETA ES LA DEL PROTOTIPO: .85rem (13,6px) en el teléfono
     —su media query de 860— y 1.1rem (17,6px) de ahí para arriba. */
  gap: 13.6px;
  /* CENTRADO VERTICAL, como el `.res { align-items: center }` del
     prototipo. Antes el texto se apoyaba arriba y, con nuestra tapa de
     120px (la del dueño, no la de 80 del prototipo), quedaban 40px de
     portada vacía debajo del último renglón. Centrado, el bloque de
     texto queda a media altura de la tapa, como en el prototipo. */
  align-items: center;
  /* EL AIRE HORIZONTAL ES EL `.4rem` DEL PROTOTIPO (6,4px): la fila no
     tiene fondo, así que el padding lateral no separa el texto de
     ningún borde — sólo lo aparta del filo de la columna. El vertical
     sigue saliendo de --aire-fila en el teléfono (10px a 320, 12 de
     ahí para arriba) porque es lo único que defiende las tres filas
     enteras; de 760 para arriba pasa a ser el 1rem del prototipo. */
  padding: var(--aire-fila) 6.4px;
  /* EL FILETE REEMPLAZA A LA TARJETA (2-set-2026, formato del
     prototipo del dueño). La fila era una tarjeta de papel claro con
     borde, esquina redonda y sombra; ahora es un renglón separado del
     siguiente por 1px de --linea, como en el prototipo.

     🔴 POR QUÉ, Y NO ES ESTÉTICA. Una tarjeta le sube un escalón de
     jerarquía a TODO lo que tiene adentro, y adentro de esta fila lo
     que hay es una portada y un precio. Sin tarjeta el que manda
     vuelve a ser el título. Y de paso la fila adelgaza 12px (los
     10 del margen y los 2 del borde), que a 320px es lo que hace que
     entren tres enteras con la tapa en 120.

     SIGUE SIENDO UNA LISTA, NO UNA GRILLA. Una fila abajo de la otra,
     la tapa al costado en --alto-tapa, el precio chico a la derecha.
     Eso está decidido por el dueño y no cambia. */
  margin-bottom: 0;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--linea);
  border-radius: 0;
  box-shadow: none;
  text-decoration: none;
  color: inherit;
}
/* El último filete SE QUEDA: es lo que cierra la lista contra el
   bloque que viene abajo (en el teléfono, la salida al pedido). */
a.fila:hover, a.fila:focus-visible { background: var(--papel-alto); }
/* EL BLOQUE DE TEXTO — TÍTULO, AUTOR Y LIBRERÍAS, UNO ABAJO DEL OTRO.
   🔴 ESTO ES EL FONDO DEL ARREGLO DEL 3-SET-2026. El renglón de
   librerías tenía COLUMNA PROPIA de 1200px para arriba (la fila era
   tapa | título/autor | librerías | precio, cuatro columnas), y el
   prototipo del dueño no hace eso: el `.donde` es la TERCERA LÍNEA del
   mismo bloque de texto, debajo del autor. Con la columna propia, el
   autor quedaba colgado con un hueco de 300px al costado.
   Los separadores salen del prototipo: `h3 { margin-bottom: .15rem }`
   y `.donde { margin-top: .35rem }`, o sea 2,4px entre título y autor
   y 5,6px entre el autor y las librerías. */
.fila-izq { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.fila-izq .autor { margin-top: 2.4px; }
.fila-izq .donde { margin-top: 5.6px; }
/* La derecha APILA. En 320px, "sin stock hoy" + "aproximado" en un
   renglón se comían la mitad del ancho y el título quedaba partido de
   a una palabra. Además se le pone techo: el título es lo que la
   persona vino a leer, y no puede perder contra dos etiquetas. */
.fila-der {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  text-align: right;
  white-space: nowrap;
  flex: 0 0 auto;
  max-width: 45%;
  /* El `min-width: 104px` del `.plata` del prototipo NO va en el
     teléfono: a 320px le sacaría 28px al título —el prototipo puede
     porque ahí baja la plata abajo del texto, y eso acá rompe las tres
     filas—. Entra de 760px para arriba, con el resto del escritorio. */
}

/* Los títulos vienen del catálogo de cada librería: hay MAYÚSCULAS,
   asteriscos y títulos cortados. Que corten donde sea antes que
   romper la columna (contrato del buscador, "títulos sucios"). */
/* ============================================================
   LA ESCALA DE LA FILA — MEDIDA EN EL PROTOTIPO (3-set-2026)
   ============================================================
   El prototipo escribe en rem sobre una raíz de 16px. Los píxeles de
   acá son esos mismos números, sin redondear:

       .res h3      1.12rem  = 17,92px   (línea 1.1)
       .res .autor   .90rem  = 14,40px
       .res .donde   .82rem  = 13,12px
       .plata .desde .64rem  = 10,24px, letter-spacing .16em
       .banda        .64rem  = 10,24px, letter-spacing .12em, 700

   🔴 Y ES LA MISMA EN TODAS LAS MEDIDAS: el prototipo no agranda el
   título en el monitor. Nosotros lo llevábamos a 20px a 760 y a 21px a
   1200, que es de dónde salía buena parte de la diferencia que vio el
   dueño mirando las dos pantallas al lado.

   EL QUE NO SE TRAJO ES EL PRECIO, y va con número al tech lead: el
   prototipo lo pone en 1.45rem (23,2px) de Fraunces, o sea MÁS GRANDE
   que el título (17,92). Eso es "precio destacado", que es justo lo
   que prohíbe el principio 1 de docs/diseno-web.md. Queda en 16px de
   Karla hasta que el dueño diga. */
.titulo { font-family: var(--font-heading); font-weight: 600; font-size: 17.92px; line-height: 1.1; overflow-wrap: anywhere; }
.autor { font-size: 14.4px; line-height: 1.5; color: var(--humo); overflow-wrap: anywhere; }
/* Los nombres de las librerías vienen enteros del servidor ("Librería
   Montevideo", no "Montevideo": acortarlos sería inventar un apodo, y
   acá no se escribe ningún nombre a mano). Con cuatro librerías eso son
   tres renglones en un teléfono de 320px, y la fila deja de entrar
   cinco veces en la pantalla. Se corta en dos: lo que no entra se ve
   completo en la pantalla de precios, que es donde se decide. */
.donde {
  font-size: 13.12px;
  line-height: 1.5;
  color: var(--tinta-suave);
  overflow-wrap: anywhere;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}
/* Los títulos sucios del catálogo son largos de verdad
   ("1955 TRES MESES QUE ESTREMECIERON AL RÍO DE LA PLATA"): tres
   renglones y para. */
.titulo {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  overflow: hidden;
}

.desde { font-size: 10.24px; letter-spacing: .16em; text-transform: uppercase; color: var(--humo); }
/* ============================================================
   EL PRECIO — CHICO, Y DEL COLOR DEL TEXTO EN LA LISTA
   ============================================================
   🔴 DESVÍO CONSCIENTE DEL ENCARGUE, ANOTADO PARA EL TECH LEAD. El
   pedido decía "acento vivo para precios, botones y estados
   activos". Acá el acento va al precio SÓLO EN LA PANTALLA DE
   PRECIOS (.fila-precio .precio, más abajo) y NO en la lista de
   resultados.

   POR QUÉ. En la lista, el precio pintado de cobalto sobre una fila
   por lo demás gris es lo primero que ve el ojo — más fuerte que el
   tamaño, porque el color salta antes que el cuerpo de letra. Eso
   es exactamente lo que el principio 1 de docs/diseno-web.md
   prohíbe: el título manda, el precio va chico. Y encima sólo
   algunas filas tienen precio, así que las que lo tienen se
   comerían la atención de las que no.

   EN LA PANTALLA DE PRECIOS ES AL REVÉS Y POR ESO SÍ VA: esa
   pantalla es una comparación de precios, TODAS las filas tienen
   uno y el título ya está arriba, en la banda. Ahí el acento ayuda a
   barrer la columna, que es a lo que la persona fue.
   ============================================================ */
/* (Acá vivía un `.precio { font-family: heading; font-size: 20px }`
   que NO PINTABA: más abajo en el archivo hay otra declaración de
   `.precio` con la misma especificidad, y gana la última. Se saca
   para que nadie mida el precio leyendo esta y se equivoque —ya pasó—.
   El tamaño de verdad vive en la regla del bloque "EL PRECIO GRANDE". */

.seccion-sin-confirmar { margin-top: 20px; }
.kicker { display: block; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--humo); padding: 0 2px 10px; }
/* TARJETA, PERO PUNTEADA Y SIN SOMBRA: son las ediciones que no
   pudimos verificar, y lo que se dibuja tiene que decir eso. Con la
   sombra de las demás se leerían como un resultado más. */
.fila-punteada {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: var(--aire-fila);
  margin-bottom: var(--sep-filas);
  border: 1px dashed var(--linea);
  border-radius: var(--radio);
}
.fila-punteada:last-child { margin-bottom: 0; }
.fila-punteada .titulo-sucio { font-size: 14px; color: var(--tinta-suave); overflow-wrap: anywhere; }
.fila-punteada .tag { align-self: center; }

/* La salida al pedido también es un bloque, así que también es una
   tarjeta: suelta sobre el gris se leía como una nota al pie. */
/* LA SALIDA AL PEDIDO — el `.sin-suerte` del prototipo (2-set-2026).
   Papel alto, sin borde alrededor y con un filo de oro de 3px a la
   izquierda; la esquina redonda sólo del lado derecho, para que el
   filo llegue entero al borde.

   🔴 ES EL ÚNICO LUGAR DEL SITIO DONDE EL ORO PINTA ALGO, y sigue sin
   ser texto: --oro sobre papel da 2,9:1 y no alcanza para leer (ver
   :root). Acá es un filo. */
/* 🔴 Y VA ABAJO DE LA LISTA, CRUZANDO EL ANCHO (3-set-2026). Vivía en
   el riel de la derecha; el prototipo la pone al final de la lista,
   con el texto a la izquierda y el botón contra el borde derecho. Los
   números son los del `.sin-suerte`: margen de arriba 1.8rem (28,8px),
   padding 1.2rem 1.3rem (19,2 y 20,8), canaleta 1.2rem (19,2), texto
   .95rem (15,2px) con medida de 52 caracteres y el rótulo en serif a
   1.05rem (16,8px). */
.escape {
  margin: 28.8px 0 0;
  background: var(--papel-alto);
  border-radius: 0 3px 3px 0;
  border: 0;
  border-left: 3px solid var(--oro);
  box-shadow: none;
  padding: 19.2px 20.8px;
  font-size: 15.2px;
  color: var(--tinta-suave);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 19.2px;
  align-items: center;
}
.escape p { margin: 0; max-width: 52ch; }
/* El título de la caja: serif como todos los títulos del sitio, pero
   del tamaño del cuerpo — es un rótulo, no una sección. */
.escape strong {
  display: block;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 16.8px;
  color: var(--tinta);
  margin-bottom: 3.2px;
}
/* El botón del prototipo (`.boton`): .9rem (14,4px), padding .65rem
   1.3rem (10,4 y 20,8) y radio 3px. El `.btn` del sistema es más
   chico y lo usan las siete pantallas, así que el tamaño del
   prototipo se aplica sólo donde el prototipo lo dibuja. */
.escape .btn, .pie-ficha .btn, .precio-der .btn {
  font-size: 14.4px;
  padding: 10.4px 20.8px;
  border-radius: 3px;
}

/* ---------- precios: LA FICHA ---------- */
.banda-precios { padding: 16px var(--margen-movil) 20px; }
/* El h1 del prototipo: `clamp(1.8rem, 4vw, 2.6rem)`, o sea de 28,8px
   en el teléfono a 41,6px en el monitor, con `margin-bottom:.25rem`
   (4px). Estaba en 26px fijo y 34px de 760 para arriba. */
.banda-precios h1 { font-size: clamp(28.8px, 4vw, 41.6px); margin: 0 0 4px; overflow-wrap: anywhere; }
/* El autor de la cabeza: 1.05rem (16,8px) en humo — el prototipo no le
   baja la opacidad, le cambia el color. */
.sublinea { font-size: 16.8px; color: var(--humo); overflow-wrap: anywhere; }

/* LA CABEZA DE LA FICHA — tapa a la izquierda, texto a la derecha
   (formato del prototipo del dueño, 2-set-2026).

   `align-items: flex-start` y no `center`: con un título de tres
   renglones —que los hay, los títulos del catálogo son largos— el
   centrado deja la portada flotando a media altura. Arriba las dos.

   Si no hay tapa, buscador.js no mete nada y el texto ocupa la caja
   entera: acá NO se reserva hueco. Es una sola caja y un rectángulo
   vacío del tamaño de un libro se ve mucho más que una columna
   desalineada. */
.ficha-cabeza {
  display: flex;
  /* La canaleta del prototipo: 1rem en el teléfono (su media query de
     860) y 1.4rem (22,4px) de ahí para arriba, con `margin-bottom:.4rem`
     (6,4px). El margen de arriba es el `margin-bottom:1rem` del
     "← Volver" que está justo encima. */
  gap: 16px;
  align-items: flex-start;
  margin-top: 16px;
  margin-bottom: 6.4px;
}
.ficha-texto { min-width: 0; flex: 1 1 auto; }

/* EL RESUMEN — "En 4 librerías · Desde $638 · Hasta $941".
   🔴 EL NÚMERO VA EN NEGRITA PERO NO EN GRANDE: es Karla al tamaño
   del cuerpo, no el precio grande de la lista. Este bloque resume, no
   destaca — si el "Desde $638" se leyera antes que el título, la
   pantalla estaría diciendo que lo que importa es el precio. */
.resumen {
  display: flex;
  flex-wrap: wrap;
  /* El `.resumen` del prototipo: canaleta 1.2rem (19,2px), margen de
     arriba .7rem (11,2px) y .85rem (13,6px) de cuerpo. */
  gap: 4px 19.2px;
  margin-top: 11.2px;
  font-size: 13.6px;
  color: var(--tinta-suave);
}
.resumen strong { font-weight: 700; color: var(--tinta); }

/* DE CUÁNDO ES EL CATÁLOGO. Va ARRIBA de los precios y no al pie:
   es la condición de todo lo que sigue, y el prototipo la pone
   exactamente ahí. El filete de abajo es el que abre la lista de
   precios, igual que el de .barra-conteo en resultados. */
/* El `.fecha` del prototipo: .8rem (12,8px) en humo, con
   `margin:1.6rem 0 .5rem` (25,6 arriba y 8 abajo) y
   `padding-bottom:.6rem` (9,6). */
.nota-catalogo {
  font-size: 12.8px;
  color: var(--humo);
  margin: 25.6px 0 8px;
  padding: 0 2px 9.6px;
  border-bottom: 1px solid var(--linea);
}

/* Cada librería, un renglón separado por un filete (formato del
   prototipo del dueño, 2-set-2026 — el `.of`). Eran tarjetas de papel
   claro con sombra: se van por el mismo motivo que en la lista de
   resultados, porque la tarjeta le sube un escalón al precio y al
   botón, que es justo lo que no va arriba.

   Acá la comparación es entre filas, así que el filete además ayuda:
   alinea las cuatro y deja barrer la columna de precios de un tirón. */
/* 🔴 EN EL TELÉFONO EL PRECIO Y EL BOTÓN VAN ABAJO DEL NOMBRE, NO AL
   COSTADO, Y ESO SALIÓ DE UNA MEDICIÓN. Con los tres al costado, a
   320px el precio y el botón "Comprar" se llevan 150px y a la columna
   del nombre le quedan 57,9: "Más barato con stock" salía en cuatro
   renglones y la fila medía 188px. Apilados, mide 120.
   Es lo que hace el prototipo del dueño en su media query de 860px
   (`.plata-of{grid-column:2; justify-content:flex-start}`): en el
   teléfono la plata cae abajo del texto y alineada con él.

   POR QUÉ GRID Y NO FLEX: para que la tapa ocupe las DOS filas (nombre
   arriba, precio abajo) y el precio quede alineado con el nombre y no
   debajo de la portada. De 760px para arriba vuelve a ser una fila de
   flex — ver el bloque de escritorio. */
.fila-precio {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  /* El `.of` del prototipo: `padding:.85rem .4rem` (13,6 y 6,4) en
     todas las medidas. */
  padding: 13.6px 6.4px;
  margin-bottom: 0;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--linea);
  border-radius: 0;
  box-shadow: none;
}
/* La canaleta va como margen de la tapa y NO como `column-gap`: si
   fuera gap, la fila sin tapa se indentaría 10px igual (la columna
   vacía mide 0 pero la canaleta se dibuja) y quedaría desalineada de
   las que sí tienen. */
.fila-precio > .tapa { grid-row: 1 / span 2; margin-right: 10px; }
/* El `.lib` del prototipo: 1rem (16px) en negrita. */
.fila-precio .libreria { font-size: 16px; font-weight: 700; }
.fila-precio .precio { color: var(--vino); }

/* ============================================================
   LA FILA MÁS BARATA CON STOCK
   ============================================================
   Papel alto y un filo de vino de 3px a la izquierda, como el `.of.mejor`
   del prototipo. El padding de la izquierda crece lo mismo que el filo
   para que el texto no se corra respecto de las otras filas.

   🔴 LA ETIQUETA SÓLO APARECE CUANDO ES VERDAD Y CUANDO SIGNIFICA
   ALGO: buscador.js la pone en la primera fila del orden únicamente si
   hay más de un precio publicado con que compararla. Con una sola
   librería, "el más barato" no es un dato.

   Y "con stock" NO ES UNA AFIRMACIÓN SOBRE HOY: /api/precios devuelve
   sólo ediciones `estado='con_stock' and not revisar` de la última
   bajada, y el renglón que está justo arriba de estas filas dice de
   cuándo es esa bajada. */
.fila-precio.mejor {
  background: var(--papel-alto);
  border-left: 3px solid var(--vino);
  /* `.of.mejor { padding-left: .9rem }` = 14,4px, o sea el padding de
     la fila más los 3px del filo, para que el texto no se corra. */
  padding-left: 14.4px;
}
/* El `.eti-mejor` del prototipo: .62rem (9,92px), letter-spacing .14em
   y `margin-bottom:.15rem` (2,4px). */
.eti-mejor {
  display: block;
  font-size: 9.92px;
  letter-spacing: .14em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--vino);
  margin-bottom: 2.4px;
}
/* El `.det` del prototipo: .82rem (13,12px) en humo, `margin-top:.1rem`. */
.fila-precio .ejemplar { font-size: 13.12px; color: var(--humo); margin-top: 1.6px; overflow-wrap: anywhere; }
/* `flex: 1 1 auto` NO es decorativo: sin eso, al meterle la tapa
   adelante, el `space-between` de la fila reparte el aire sobrante
   ENTRE la tapa y el nombre, y "Libros del Paso" queda flotando en el
   medio de la fila. Apareció en la captura de 390px. */
.precio-izq { display: flex; flex: 1 1 auto; flex-direction: column; gap: 2px; min-width: 0; grid-column: 2; }
.precio-der {
  display: flex;
  align-items: center;
  /* El `.plata-of` del prototipo: canaleta 1rem (16px). */
  gap: 16px;
  white-space: nowrap;
  flex: none;
  /* En el teléfono: segunda fila de la grilla, alineado con el nombre
     de la librería y no con la portada. */
  grid-column: 2;
  justify-content: flex-start;
  margin-top: 8px;
}
/* El "Comprar" toma el tamaño del prototipo arriba (.escape .btn,
   .pie-ficha .btn, .precio-der .btn). Acá no se le vuelve a achicar el
   padding: eran 6px 12px, y el del prototipo es 10,4 x 20,8. */

/* La fila que todavía no llegó. Hoy NADIE la usa: los precios salen
   del catálogo y vienen todos juntos. Queda escrita para el día que
   la verificación en vivo exista de verdad (ver buscador.js). */
/* La pendiente vuelve a ser flex: sus hijos son el nombre y "buscando…"
   sueltos, sin .precio-izq ni .precio-der, así que la grilla de dos
   filas no tiene qué colocar. */
.fila-precio.pendiente { display: flex; align-items: center; gap: 10px; box-shadow: none; border: 1px dashed var(--linea); border-radius: var(--radio); margin-bottom: var(--sep-filas); }
.fila-precio.pendiente .libreria { color: var(--humo); }
.pulsando { animation: etl-pulse 1.2s infinite; }
@keyframes etl-pulse { 0%, 100% { opacity: .35 } 50% { opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .pulsando { animation: none; opacity: .7; } }

/* EL `.aclara` DEL PROTOTIPO — texto suelto abajo de las filas de
   precio, sin caja: .85rem (13,6px) en humo, `margin-top:1rem` (16px)
   y medida de lectura de 64 caracteres. Era una tarjeta en el riel de
   la derecha. */
.aclara {
  margin: 16px 0 0;
  font-size: 13.6px;
  line-height: 1.5;
  color: var(--humo);
  max-width: 64ch;
}

/* `.nota-lista` sigue existiendo y la usa buscador.js para la nota de
   "hay N ediciones más que no pudimos verificar", que sí es una caja
   adentro de la lista de precios. */
.nota-lista {
  margin: 14px 0 0;
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
  font-size: 12px;
  color: var(--humo);
}

/* EL CIERRE DE LA FICHA (2-set-2026, del prototipo del dueño).
   Dos salidas, ninguna es "comprar": el que llegó hasta acá y no
   compró es porque ninguna le sirvió. La primera es el pedido, la
   segunda vuelve a los resultados. */
/* El `.pie-ficha` del prototipo: `margin-top:1.6rem` (25,6px) y
   canaleta 1rem (16px). */
.pie-ficha {
  margin-top: 25.6px;
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  align-items: center;
}
.pie-ficha .volver-texto { padding: 12px 4px; margin: -12px 0; }

/* ============================================================
   "DEL MISMO AUTOR, ACÁ"
   ============================================================
   Va al final de la ficha, abajo del cierre: es lo secundario de la
   pantalla y no puede empujar los precios hacia abajo.

   LAS FILAS SON LAS MISMAS `.fila` DE LA LISTA DE RESULTADOS —misma
   clase, misma función de JavaScript, misma tapa al costado— así que
   todo lo que se arregle en una se arregla en las dos. Lo único
   propio es el encabezado.

   🔴 SI NO HAY DATO, ESTA SECCIÓN NO EXISTE: nace con `hidden` en el
   HTML y buscador.js se lo saca sólo cuando ya tiene obras en la mano
   (ver pedirMismoAutor). Sin endpoint, sin respuesta o con lista
   vacía, la ficha se ve exactamente igual que antes. */
/* El `.parecidos` del prototipo: `margin-top:2.6rem` (41,6px), el h2
   en 1.15rem (18,4px) con `margin-bottom:.3rem` (4,8px) y la bajada en
   .85rem (13,6px) con `margin-bottom:.6rem` (9,6px). */
.mismo-autor { margin-top: 41.6px; }
.mismo-autor h2 {
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 18.4px;
  margin: 0 0 4.8px;
  letter-spacing: -.01em;
}
.mismo-autor .sub {
  margin: 0 0 9.6px;
  font-size: 13.6px;
  color: var(--humo);
  overflow-wrap: anywhere;
}
/* El primer filete de la sección lo pone el borde de la primera fila
   de abajo; el encabezado se cierra con el mismo 1px que abre la lista
   de resultados. */
.mismo-autor #filas-mismo-autor { border-top: 1px solid var(--linea); }

/* ---------- pedido ---------- */
/* EL FILETE DE 2px SE FUE (2-set-2026), en las cuatro pantallas que
   abren con titular. Era el remate del sistema plano; con tarjetas
   abajo, la raya negra vuelve a meter el dibujo viejo. Lo que separa
   el titular de lo que sigue es el aire de .texto. */
.titular { padding-bottom: 4px; }
.titular h1 { font-size: 24px; margin: 0 0 4px; }
.titular p { margin: 0; font-size: 13px; color: var(--tinta-suave); }

/* El formulario también es una tarjeta: es un bloque, como los
   demás. Los campos van adentro, con el radio chico. */
.formulario {
  margin-top: var(--aire-bloques);
  display: flex;
  flex-direction: column;
  gap: 14px;
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
}
.formulario label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; color: var(--tinta-suave); }
/* 16px en los campos del formulario por el mismo zoom de iPhone. */
.formulario .input { font-size: 16px; min-height: 42px; }
.formulario .btn-primary { height: 44px; }
.letra-chica { margin: 0; font-size: 11px; color: var(--humo); }

.confirmacion {
  margin-top: var(--aire-bloques);
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: flex-start;
  background: var(--papel-alto);
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
}
.confirmacion h2 { font-size: 20px; margin: 0; }
.confirmacion p { margin: 0; font-size: 13px; color: var(--tinta-suave); }

/* ---------- estados de error y vacío ---------- */
/* El error es una tarjeta más, con un filo al costado que lo
   distingue sin gritar. No lleva color de alarma: los mensajes de
   este sitio son "eso no está en el catálogo", no fallas. */
.error {
  margin: 16px 0 0;
  background: var(--papel-alto);
  border-radius: var(--radio);
  border-left: 3px solid var(--humo);
  box-shadow: var(--sombra);
  padding: var(--aire-tarjeta);
  font-size: 13px;
  color: var(--tinta);
}

/* ---------- el pie (lo pinta pie.js, uno solo para todo el sitio) ---------- */
/* El pie se apoya en el fondo gris y no lleva filete: una raya
   cruzando el gris debajo de una pila de tarjetas es el sistema
   plano otra vez. Lo que lo despega es el aire de arriba. */
.pie {
  margin-top: auto;
  padding: 20px var(--margen-movil) 18px;
}
.pie .aviso {
  margin: 0 0 4px;
  font-size: 11px;
  line-height: 1.45;
  color: var(--humo);
}
.pie .aviso:last-child { margin-bottom: 0; }

/* Lo que sólo leen los lectores de pantalla. */
.solo-lectores {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ============================================================
   ESCRITORIO — desde 760px (era 900 hasta el 1-set-2026).
   ============================================================
   QUÉ PROBLEMA RESUELVE. En un monitor se veía la columna de 430px del
   teléfono centrada y sobraba media pantalla (palabras del dueño). Acá
   el marco crece y el contenido se estira.

   🔴 ACÁ DECÍA QUE EL ESPACIO SOBRANTE SE REPARTÍA EN DOS COLUMNAS —la
   lista a la izquierda y lo secundario en un riel a la derecha—, Y ESO
   YA NO ES ASÍ (3-set-2026): las dos pantallas de libros son UNA sola
   columna de 1000px centrada, como el prototipo del dueño, y lo
   secundario va abajo. Ver "LA LISTA — UNA SOLA COLUMNA" más arriba en
   este archivo. Las otras cinco pantallas no cambiaron.

   Y DESDE EL 31-AGO A LA TARDE, DE PUNTA A PUNTA. El primer escritorio
   topaba el marco ENTERO en 1120px: en un monitor de 1920 quedaban
   400px de fondo gris de cada lado y se leía como una app de celular
   estirada (palabras del dueño, con el dibujo al lado). Ahora manda el
   patrón de diario:

       la barra y el fondo ........... TODO el ancho del monitor
       lo que va adentro ............... hasta --ancho-contenido (1400)

   Lo hace --margen-lateral, puesto como padding de cada bloque que
   pinta fondo. Un envoltorio con max-width no servía: le habría
   cortado el fondo a la barra a mitad de pantalla.

   LO QUE NO SE LLEVA EL ANCHO NUEVO: la fila. El tope pasó por tres
   valores —680px, después 964 (1400 menos el riel) y desde el
   3-set-2026 los 920 del prototipo—, y el motivo nunca cambió: una
   fila de 1300px con el título pegado a la izquierda y el precio
   pegado al derecho obliga a barrer el monitor con los ojos para
   juntar dos datos que van juntos. Hoy lo que sobra es margen a los
   costados de la columna de 1000, medido igual que en el prototipo.

   TRES COSAS QUE NO CAMBIAN, Y SON LAS QUE IMPORTAN:
   · El celular. Nada de este bloque se aplica abajo de 760px, y de
     760 a 899 lo corrige el bloque de la franja (ver más abajo).
   · Los toques hasta el precio siguen siendo DOS (buscar → tocar la
     fila). Acá no se agrega ningún paso: la pantalla de precios sigue
     siendo la misma, con más ancho.
   · La jerarquía. La lista no se convierte en grilla de tarjetas, las
     tapas no crecen a portada y el precio sigue chico. El ancho que
     sobra se usa para que la lista respire y para que la fila de
     precio entre en un renglón, no para agrandar la imagen.
   ============================================================ */
@media (min-width: 760px) {

  /* La tapa usa la perilla entera; el teléfono usa menos (ver :root). */
  :root { --escala-tapa: 1; }

  /* EL AIRE CRECE CON LA PANTALLA (2-set-2026). Las cuatro perillas
     del sistema de tarjetas, en un solo lugar: no hay que buscar
     márgenes escritos a mano bloque por bloque, que era lo que había
     antes. La fila de resultados crece menos que las demás tarjetas
     —18 contra 24— porque su alto es lo único que compite con el
     número de filas por pantalla. */
  :root {
    --aire-tarjeta: 24px;
    --aire-bloques: 16px;
    --aire-fila: 18px;
    --sep-filas: 14px;
  }

  /* ACÁ ESTABA `.columna { width: 100%; box-shadow: none }`, que era
     lo que hacía que la hoja dejara de ser una hoja a los 900px. Se
     fue el 1-set-2026 a la noche porque la columna ya ocupa el ancho
     SIEMPRE (ver "EL MARCO" al principio del archivo) y la sombra ya
     no existe: repetirlo acá era una regla que no cambiaba nada. */

  /* EL PANEL NO CAMBIA ACÁ, Y ÉSE ES EL CAMBIO. Sigue siendo el mismo
     cajón que en el teléfono: mismo ☰, mismo Escape, mismo foco. Por
     eso este bloque no tiene ni una regla de panel — la banda vuelve a
     pintar de punta a punta porque nada la corre. */

  /* --- las bandas --- */
  .banda-alta { padding: 40px var(--margen-lateral) 44px; }
  .banda-compacta { padding: 16px var(--margen-lateral); gap: 20px; }
  /* La marca vuelve a las bandas internas: sin riel fijo, una barra de
     banda con una flecha sola y medio monitor vacío no se lee como una
     página web. Es lo que había ayer. */
  .marca-escritorio { display: inline; font-size: 18px; }
  .banda-compacta .buscador-fila { margin-left: auto; flex: 0 1 660px; }
  /* LAS DOS PANTALLAS DE LIBROS SE ALINEAN CON SU PROPIA COLUMNA
     (--margen-libros, 1000px), no con los 1400 del resto del sitio: en
     el prototipo la cabeza de la ficha y la barra del buscador de
     resultados viven adentro del mismo `.cuerpo` que la lista. */
  .banda-precios { padding: 20px var(--margen-libros) 26px; }
  #p-resultados .banda-compacta { padding: 16px var(--margen-libros); }
  .banda-alta h1 { font-size: 44px; margin: 44px 0 8px; }
  .bajada { font-size: 16px; }
  /* El h1 de la ficha y su autor NO tienen escalón acá: el prototipo
     los resuelve con `clamp(1.8rem,4vw,2.6rem)` y 1.05rem fijo, que ya
     están en la regla base. */

  /* La búsqueda de la home deja de estar apilada: campo y botón en
     un renglón, y sin estirarse a lo ancho del monitor — un input de
     1000px no ayuda a escribir "maquiavelo".
     `margin-inline: auto` ES EL PEDIDO DEL 1-SET: el formulario, y
     sólo el formulario, va en el medio de la banda. */
  .buscador-alto { flex-direction: row; align-items: stretch; max-width: 660px; margin: 28px auto 0; }
  .buscador-alto .input { flex: 1 1 auto; min-width: 0; }
  .buscador-alto .btn { flex: 0 0 auto; height: 52px; padding-inline: 32px; }
  /* La barra de las pantallas internas tampoco: el campo se topa. */
  .buscador-fila { max-width: 660px; }

  /* --- la home --- */
  .cuerpo { padding: 28px var(--margen-lateral) 32px; }
  /* ============================================================
     LOS TEXTOS: RÓTULO A LA IZQUIERDA, PÁRRAFO A SU DERECHA
     ============================================================
     🔴 PEDIDO DEL DUEÑO, 1-SET-2026, MIRANDO LAS TRES PANTALLAS DE
     TEXTO: *"en las demás pestañas nuevas creadas te pido que le
     mejores la visual del texto porque no queda bien; si podés ponelo
     de arriba para abajo y no de izquierda a derecha"*.

     LO QUE HABÍA: dos columnas de bloques de 672px (el "cómo
     funciona" y las librerías; el recomendador iba en una sola
     columna, o sea que las tres no se veían igual). Medido a 1920 con
     Chrome: para leer el "cómo funciona" entero HABÍA QUE VOLVER A
     SUBIR 2 VECES —276px de recorrido hacia arriba— porque el bloque
     3 arrancaba más arriba de donde terminaba el 2. En una hoja de
     papel eso no molesta, porque la hoja se abarca de un vistazo; en
     una pantalla, sí.

     LO QUE HAY AHORA: UNA SOLA COLUMNA DE LECTURA, de arriba hacia
     abajo, sin ninguna vuelta hacia arriba (medido: 0). Cada sección
     es una fila de dos casillas — el título a la izquierda, en
     angosto, y los párrafos a su derecha con medida de lectura.

     🔴 Y POR QUÉ NO ES "LA TIRITA CENTRADA" QUE EL DUEÑO YA RECHAZÓ
     DOS VECES ("es como si estuvieras usando formato celular"):
     borrar las columnas y dejar 680px en el medio de 1920 resolvía la
     lectura y rompía el ancho. Acá el ancho lo llena LA ESTRUCTURA
     DEL DOCUMENTO —el rótulo ocupa la izquierda y la tarjeta de la
     sección cruza los 1400px enteros— y no el párrafo estirado, que a 130
     caracteres por renglón no se lee. Es el mismo recurso que ya usa
     este archivo en la lista de resultados: el ancho se llena con
     contenido, no con aire.

     EN EL TELÉFONO NO CAMBIA NADA: abajo de 760px no entra ninguna de
     estas reglas y el título sigue cayendo arriba del párrafo,
     apilado, exactamente como estaba. */
  .como-bloque h2, .como-bloque h3 { font-size: 18px; }
  .como-bloque p, .texto p { font-size: 14px; }

  /* Las tres pantallas de texto comparten grilla, así que se ven
     iguales entre sí — que es la otra mitad del pedido.

     🔴 "LAS TRES" SON #p-como, #p-librerias Y #p-recomendador, y son
     todas las que hay: desde el 2-set-2026 LA HOME NO TIENE TEXTO.
     Tuvo tres bloques un solo día, con dibujo propio (título centrado
     y párrafo al ancho, `.texto-home`), y salieron con el cuerpo
     entero. Ese CSS se borró; el HTML quedó guardado al final de
     buscador.html. */
  .como-bloque {
    display: grid;
    grid-template-columns: minmax(0, var(--col-rotulo)) minmax(0, 1fr);
    column-gap: var(--gap-rotulo);
    align-content: start;
  }
  .como-bloque > h2,
  .como-bloque > h3 { grid-column: 1; grid-row: 1; }
  .como-bloque > p { grid-column: 2; }
  /* OJO AL AGREGAR: hoy adentro de un bloque hay un título y párrafos,
     nada más. Lo que se sume (una lista, una imagen) cae solo en la
     casilla del título si no se le dice `grid-column: 2`. */

  /* ACÁ ESTABA EL FILETE ENTRE BLOQUES (`border-top` de 1px más
     24+24px de margen y padding). Se fue el 2-set-2026 con el cambio
     de carácter: hoy cada sección es una tarjeta y lo que la separa
     de la siguiente es el gap de `.texto` (--aire-bloques). El
     .titular tampoco cierra ya con su raya de 2px, así que no queda
     ninguna línea que empalmar. */
  /* El primer párrafo de cada sección arranca a la misma altura que su
     título, no 6px más abajo: son las dos casillas de la misma fila. */
  .como-bloque > p:first-of-type { margin-top: 0; }


  /* ACÁ ESTABAN LAS DOS MEDIDAS DE LA HOME (--letra-home a 14px y
     --medida-home al 100%) y el padding de 18px de cada porqué. Se
     fueron el 2-set-2026 con los tres porqués: la home ya no tiene
     cuerpo. Si vuelven, el HTML guardado y el porqué de cada número
     están en el comentario del final de buscador.html. */

  /* EL RECOMENDADOR YA NO ES UN CASO ESPECIAL (1-set-2026).
     Hasta hoy su cuerpo era una grilla propia: el texto iba en la
     columna de lectura y el lugar del acceso ocupaba la casilla
     izquierda, porque el recomendador era la única de las tres
     pantallas de texto SIN títulos de sección y esa casilla quedaba
     vacía. Desde que la pantalla tiene secciones con rótulo —hoy
     "Qué es" y "Cuándo se puede usar"— usa la misma grilla que las
     otras dos, `.texto > .como-bloque`, y la casilla de la izquierda
     ya tiene qué decir: el título de cada sección. (Los rótulos
     entraron con el "por qué va a existir", que el 1-set-2026 se
     mudó a la home; los dos que quedaron alcanzan para que la grilla
     siga teniendo sentido.)

     LO QUE NO CAMBIÓ: los dos textos que quedan siguen palabra por
     palabra, el lugar del acceso sigue visible y sigue sin haber ni
     un link al recomendador.

     EL LUGAR DEL ACCESO queda abajo del texto —donde ya estaba en el
     HTML— y se alinea con la columna de lectura: por eso el margen
     sale de las mismas dos variables que la grilla y no de un número
     escrito a mano. Contra el borde izquierdo ocuparía la casilla de
     los rótulos y se leería como una sección más, y no lo es. */
  #p-recomendador .hueco-acceso {
    margin-left: calc(var(--col-rotulo) + var(--gap-rotulo));
    max-width: 62ch;
    text-align: left;
  }
  .bloque-librerias p { font-size: 13px; }
  .fila-mail { max-width: 520px; }

  /* --- LA LISTA: LA COLUMNA DEL PROTOTIPO --- */
  /* 🔴 TRES RUMBOS, Y CONVIENE SABER POR QUÉ SE ABANDONARON LOS DOS
     PRIMEROS, para no volver a ninguno por descuido:

     1. TOPE DE 680px. Lo levantó el dueño el 1-set-2026, dicho dos
        veces: *"tenés que usar toda la página para el texto, ahora
        como que lo tenés medio raro, es como si estuvieras usando
        formato celular"*. En un monitor de 1920, 680px de lista es un
        teléfono estirado.
     2. FILA + RIEL HASTA 1400px. Resolvía el ancho pero metía dos
        defectos que el dueño vio en las capturas del 2-set: la fila de
        964px con el precio a un monitor de distancia del título, y —de
        1200 para arriba— el renglón de librerías en columna propia, o
        sea una tabla de cuatro columnas que el prototipo no tiene.
     3. LA QUE HAY (3-set-2026): la columna del prototipo. Caja de
        1000px centrada, 920 de contenido, lo secundario abajo. El
        ancho de la página lo siguen usando la barra, el pie y las tres
        pantallas de texto, que siguen en --ancho-contenido (1400). */
  /* Una sola columna, con el padding del `.cuerpo` del prototipo:
     1.6rem arriba (25,6px), 3rem abajo (48px) y los laterales de la
     columna de 1000px. */
  .lista {
    padding: 25.6px var(--margen-libros) 48px;
  }
  /* --- las filas de resultado --- */
  /* El `.res` del prototipo: `padding:1rem .4rem` (16 y 6,4) y
     canaleta 1.1rem (17,6px). El título, el autor y el renglón de
     librerías NO cambian de tamaño acá: el prototipo usa la misma
     escala en el teléfono y en el monitor, y el escalón que teníamos
     (18 → 20 → 21px) era la mitad de la diferencia que se veía
     comparando las dos pantallas.
     (Acá había también un `.precio { font-size: 22px }` que no pintaba
     nada: lo pisaba el bloque del precio en Karla, más abajo.) */
  .fila { padding: 16px 6.4px; gap: 17.6px; }
  .fila-der { max-width: 40%; min-width: 104px; }
  /* La fila entera se ilumina al pasar el mouse: en escritorio hace
     falta decir que se puede clickear, que en el teléfono lo dice el
     dedo.
     🔴 SE FUE EL `translateY(-1px)` Y LA SOMBRA (2-set-2026). Eran de
     cuando la fila era una tarjeta: una tarjeta se levanta, un renglón
     de una lista no — se levantaba y el filete de abajo se despegaba
     del de la fila siguiente. Queda el cambio de fondo, que es lo que
     hace el prototipo. */
  a.fila { transition: background-color .12s ease-out; }
  a.fila:hover, a.fila:focus-visible { background: var(--papel-alto); }
  @media (prefers-reduced-motion: reduce) {
    a.fila { transition: none; }
  }

  /* --- la cabeza de la ficha --- */
  /* `.ficha-cabeza { gap: 1.4rem }` = 22,4px. El resumen ya trae los
     números del prototipo en la regla base. */
  .ficha-cabeza { gap: 22.4px; }

  /* --- las filas de precio --- */
  /* Acá el ancho SÍ se usa entero: librería, ejemplar, precio y botón
     entran en un renglón y se leen como una tabla (la idea de la
     opción 1c del handoff, sin la tabla). En el teléfono siguen
     apilados. */
  /* DE 760 PARA ARRIBA VUELVE A SER UNA FILA: hay ancho para que
     librería, ejemplar, precio y botón entren en un renglón, y el
     apilado del teléfono desperdiciaría media pantalla. */
  .fila-precio { display: flex; justify-content: space-between; padding: 13.6px 6.4px; gap: 16px; }
  .fila-precio > .tapa { margin-right: 0; }
  .precio-der { margin-top: 0; justify-content: flex-end; }
  .fila-precio.mejor { padding-left: 14.4px; }
  /* `flex-wrap` + la etiqueta a fila entera: en escritorio la fila de
     precio es un renglón de tabla (librería | ejemplar | precio), y el
     "Más barato con stock" no es una columna más — va arriba, sobre el
     nombre de la librería, como en el prototipo. */
  .precio-izq { flex: 1 1 auto; flex-direction: row; flex-wrap: wrap; align-items: baseline; gap: 16px; }
  .eti-mejor { flex: 0 0 100%; margin-bottom: 0; }
  .fila-precio .libreria { flex: 0 0 auto; width: 168px; }
  .fila-precio .ejemplar { flex: 1 1 auto; }
  /* (Acá había un `.precio-der .precio { font-size: 22px }` que
     tampoco pintaba: lo pisa el bloque del precio en Karla.) */

  /* --- el pedido --- */
  /* EL FORMULARIO SE TOPA EN 560 Y EL TÍTULO YA NO (1-set-2026).
     Un formulario de 1040px de ancho no lo llena nadie, y eso no
     cambió: el formulario, la confirmación y el error siguen en 560.

     LO QUE CAMBIÓ ES EL TITULAR. Estaba topado en 560 para que el
     subrayado terminara donde termina el campo. Desde que el pedido
     tiene arriba un bloque `.texto` —hoy el del límite; hasta el
     1-set eran dos bloques más, que se mudaron a la home—, y ese
     bloque va con el tratamiento de las pantallas de texto y cruza
     los 1400px, así que el subrayado del titular quedaba cortado en
     el aire con un filete más largo justo abajo. (Ese subrayado de
     2px se fue el 2-set-2026 con el cambio de carácter, y el filete
     de abajo con él; el titular sigue abriendo a lo ancho.)
     Ahora el titular abre a lo ancho, igual que en el "cómo
     funciona", las librerías y el recomendador: las cuatro pantallas
     con texto empiezan igual. El formulario sigue arrancando pegado a
     la izquierda, como el de las librerías. */
  .formulario, .confirmacion, .cuerpo > .error { max-width: 560px; }
  .titular h1 { font-size: 30px; }
  .formulario .btn-primary { align-self: flex-start; width: auto; padding-inline: 32px; }

  /* --- el pie --- */
  /* El aviso también se topa: son renglones de 12px, y a 1320px de
     ancho el ojo pierde el renglón al volver. */
  .pie { padding: 16px var(--margen-lateral); }
  /* El aviso del pie tampoco se topa: es el renglón que más importa
     que se lea entero y no una tirita centrada. */
  .pie .aviso { font-size: 12px; }
}

/* ============================================================
   LA FRANJA DE 760 A 899 — LA MISMA PÁGINA, CON MENOS AIRE
   ============================================================
   🔴 ESTE BLOQUE ES DEL 1-SET-2026 A LA NOCHE Y NACE DE UNA MEDICIÓN:
   entre 430 y 899px la columna se congelaba en 430px y el resto era
   fondo gris (169px de cada lado a 768, 225px a 880). El arreglo
   tiene dos mitades: la de arriba —la columna de punta a punta, que
   está en "EL MARCO"— y ésta, que baja el escritorio de 900 a 760.

   POR QUÉ 760 Y NO 600, que era el número propuesto. 760 es el ancho
   más chico donde la lista entra en DOS columnas sin achicarle la
   fila de resultados a nadie:

       464 (fila)  +  40 (canaleta)  +  216 (riel)  +  40 (márgenes)

   Abajo de eso el riel no tiene dónde caer y la página tendría que
   robarle ancho a la fila. Se probó con 600 y con 680: a 600 la fila
   quedaba en 350px —MENOS que los 390 del teléfono—, y una ventana
   más grande con la fila más chica es exactamente el defecto que
   este mismo trabajo vino a arreglar.

   🔴 Y POR QUÉ LA FILA SE QUEDA EN 464 EN TODA LA FRANJA, que es la
   pregunta obvia mirando 768px con 300px de riel al lado: PORQUE A
   900 LA FILA MIDE 464 Y ESO ESTÁ APROBADO Y NO SE TOCA. Cualquier
   fila más ancha acá abajo se achicaría al cruzar los 900 — el mismo
   defecto, movido de lugar. Así que el ancho que sobra entre 760 y
   899 se lo lleva el riel (de 216 a 300px), que es CONTENIDO —las
   ediciones sin confirmar y la salida al pedido—, no aire.
   Lo que se gana igual es grande y se ve: a 768 la página pasa de
   430px de contenido con 169px de gris a cada lado, a 728px de
   contenido de borde a borde, con el buscador centrado, la banda de
   barra cruzando entera y la lista en dos columnas.

   LAS CINCO COSAS QUE ESTE BLOQUE LE CORRIGE al bloque de 760 (que
   antes empezaba en 900 y está pensado para monitores). Las cinco
   están medidas y cada una dice su número:

   1. LA TAPA VUELVE A LA ESCALA DEL TELÉFONO (.85). Con la escala
      entera la fila pasa de 135 a 161px de alto y un iPad vertical
      pierde una fila y media de las que hoy muestra. La perilla del
      dueño (--alto-tapa: 120) no se toca: lo que cambia es la escala,
      que para eso existe.
   2. EL MARGEN LATERAL BAJA DE 40 A LO QUE HAYA, con el mismo
      recurso de siempre: nunca menos de 20px, y lo que sobre de 804px
      —464 + 40 + 300, o sea la fila, la canaleta y el riel llenos—
      repartido en dos. A 884px ya vale 40 y empalma con el monitor.
   3. LA LISTA REPARTE AL REVÉS QUE ARRIBA DE 900: la fila es la
      casilla FIJA (tope 464) y el riel es el que estira (1fr). Con
      `1fr` en la fila, como está arriba, a 768 la fila quedaba en
      332px. Acá el que se acomoda al ancho es lo secundario.
   4 y 5. EL ALTO DE LA FILA y LA FILA DE LA PANTALLA DE PRECIOS
      siguen siendo los del teléfono. El porqué de cada una está
      escrito al lado de su regla, abajo.
   ============================================================ */
@media (min-width: 760px) and (max-width: 899.98px) {
  :root {
    --escala-tapa: .85;
    --margen-lateral: max(20px, (100% - 804px) / 2);
    /* 🔴 LA COLUMNA DE LIBROS NO SE PISA ACÁ, Y ESTÁ MEDIDO. Se probó
       bajarle el borde a los 20px que usa el resto de la franja para
       que quedara alineada con la barra: la fila pasaba a 859px a 899
       de ventana y a 828 a 900 — o sea que agrandar la ventana un
       píxel achicaba la fila 31. Ése es justo el defecto que este
       archivo persigue en todos lados. Con el clamp del prototipo la
       fila crece parejo: 699 a 760, 706,6 a 768, 827 a 899 y 828 a
       900. Lo que se paga es que entre 760 y 899 la lista queda ~10px
       adentro de la barra, que es lo mismo que hace el prototipo (su
       barra y su `.cuerpo` tampoco comparten borde). */
  }
  /* La fila conserva el aire del teléfono (16px arriba y abajo, no
     20): los 20px del monitor son para la tapa entera de 120px, y acá
     la tapa mide 102. Medido: con 20 la fila pasa de 135 a 143px de
     alto y un iPad vertical pierde una fila entera de las que ve hoy.
     Cruzar los 760px no le cambia el alto a nada. Desde el 3-set-2026
     la regla ya no hace falta: el padding del prototipo (1rem) es el
     mismo 16px que había acá. */

  /* LA FILA DE LA PANTALLA DE PRECIOS SIGUE APILADA, como en el
     teléfono. En un renglón, librería y ejemplar comparten 464px con
     el precio y el botón, y al ejemplar le quedan 35px: "ed. ALIANZA"
     se parte en mitad de palabra y el renglón crece a 60px de alto
     (medido a 768 con la ficha de "Cien años de misica"). Apilada
     entra en un renglón y se lee.
     🔴 ESTO NO ES UN ARREGLO DEL RENGLÓN ANCHO: el mismo aplastón
     está HOY de 900px para arriba, donde la fila también mide 464 —
     medido, ejemplar de 35px y renglón de 60px de alto, igual con la
     hoja vieja que con ésta—. Ahí no se toca porque ese rango está
     aprobado; acá no se estrena. Queda anotado para el tech lead. */
  .precio-izq { flex-direction: column; align-items: stretch; gap: 2px; }
  /* En columna, el `flex: 0 0 100%` del bloque de 760 mediría ALTO y
     estiraría la etiqueta hasta el fondo de la fila. Acá vuelve a
     medir lo que ocupa. */
  .eti-mejor { flex: 0 0 auto; margin-bottom: 2px; }
  /* El ancho fijo de 168px no va acá (la fila está apilada), pero los
     cuerpos son los del prototipo, iguales que en el resto: `.lib` en
     1rem y `.det` en .82rem. Estaban en 14 y 12px. */
  .fila-precio .libreria { width: auto; }
}

/* ============================================================
   LOS TEXTOS TAMBIÉN USAN EL ANCHO — desde 1120px.
   ============================================================
   Misma corrección del dueño, aplicada a lo que no es lista: las tres
   pantallas de texto —el "cómo funciona", las librerías y el
   recomendador— eran columnas de 680px en el medio de un monitor.

   LO QUE HACE ESTE BLOQUE, desde que el texto se lee de arriba hacia
   abajo (1-set-2026): agrandar la letra de estas tres pantallas (de 14
   a 16px), estirar la medida de lectura (de 62 a 75 caracteres) y
   ensanchar el rótulo de la izquierda (de 210 a 340px), que es lo que
   le da al bloque su ancho de página. La grilla en sí está arriba, en
   el bloque de 760px, para que valga en todo el escritorio y no sólo
   en el monitor grande.

   ACÁ ESTUVO, HASTA HOY, LA GRILLA DE DOS COLUMNAS DE BLOQUES, y se
   fue por el pedido de leer de arriba hacia abajo: resolvía el ancho
   pero obligaba a volver a subir dos veces por pantalla.

   LA HOME NO SE LLEVA NADA DE ACÁ, y desde el 2-set-2026 tampoco
   necesita llevarse nada: no tiene cuerpo. Es barra, buscador y
   estante, y el estante es lo último. El único bloque de texto que
   tuvo vivió un día y su CSS se borró con él.
   ============================================================ */
@media (min-width: 1120px) {
  /* El rótulo se ensancha y la letra pasa de 14 a 16px: son pantallas
     para LEER, y en un monitor 14px es letra de formulario. Medido a
     1920: la columna de texto pasa de 538 a 678px —un 26% más— sin que
     el renglón se alargue más allá de lo que el ojo aguanta, porque el
     tope se mueve en caracteres (75), no en píxeles. */
  :root { --col-rotulo: 340px; --gap-rotulo: 56px; }
  .como-bloque h2, .como-bloque h3 { font-size: 22px; }
  /* La caja del acceso acompaña a la columna de lectura, que acá se
     estira de 62 a 75 caracteres. */
  #p-recomendador .hueco-acceso { max-width: 75ch; }

  /* ACÁ ESTABA LA GRILLA DE DOS COLUMNAS DEL CUERPO DE LA HOME
     (`#p-buscar .cuerpo`, dos mitades de 1fr con 56px en el medio) y
     las dos excepciones que la cruzaban entera, `.texto-home` y
     `.chico-libreria`. Se fue el 1-set-2026 con lo que acomodaba: la
     letra chica y la caja del pedido salieron de la home y en el
     cuerpo quedaron sólo los tres porqués, que YA cruzan el ancho
     entero con su propia grilla de rótulo + párrafo. Dos columnas de
     una sola cosa no es una grilla, es una columna con un hueco al
     lado.

     Si algún día vuelve a haber dos cosas cortas en la home, esto
     vuelve tal cual; y `.texto-home` va a necesitar otra vez su
     `grid-column: 1 / -1`, porque metido en una mitad de 672px el
     rótulo de 340 se come la columna de lectura. */

  .como-bloque p, .texto p { font-size: 16px; max-width: 75ch; }
}

/* ============================================================
   LA FILA ANCHA — BORRADA EL 3-SET-2026
   ============================================================
   🔴 ACÁ VIVÍA EL ERROR DE FONDO QUE VIO EL DUEÑO comparando las dos
   pantallas. De 1200px para arriba la fila se abría en CUATRO
   columnas:

       [tapa]  [título   ]  [en el catálogo de …]  [ desde ]
               [autor    ]  [                   ]  [ $586  ]

   El prototipo tiene DOS bloques: la tapa con el texto a la izquierda
   —título, autor y librerías, uno abajo del otro— y la plata a la
   derecha. Con la columna propia del medio, el autor quedaba colgado
   con un hueco de 300px al costado, que es exactamente lo que se veía
   en la captura.

   CON ESTO SE FUERON TAMBIÉN, y por el mismo motivo:
     · la grilla de dos columnas de `.lista` (lista + riel de 340px) y
       las variables --canaleta-lista y --riel-lista, que sólo servían
       para repartir ese riel;
     · el título creciendo a 21px, que no está en el prototipo: allá la
       escala tipográfica es la misma en el teléfono y en el monitor;
     · el `min-width: 120px` de la plata, que ahora es el 104px del
       `.plata` del prototipo y vive en el bloque de 760.

   El ancho de la página lo sigue usando el resto del sitio (la barra,
   el pie y las tres pantallas de texto siguen en --ancho-contenido,
   1400px). Lo que se angostó a los 1000px del prototipo son estas dos
   pantallas, que es donde el dueño hizo la comparación.
   ============================================================ */

/* La fila del "← resultados" de la pantalla de precios. Desde el
   1-set lleva también el ☰ (acá entra sin sacarle ancho a ningún
   campo). El orden visual es el mismo de siempre para el que ya
   conocía la pantalla: el ☰ arriba a la izquierda, el "← resultados"
   al lado, y el aire a la derecha. */
.fila-nav { display: flex; align-items: center; gap: 12px; }
.fila-nav .marca-escritorio { margin-left: auto; }

/* ============================================================
   EL ESTANTE DE LOMOS — LA HOME (2-set-2026)
   ============================================================
   Sale del prototipo del dueño. Una fila de lomos de libro apoyados
   en una tabla, abajo del campo de búsqueda.

   🔴 LOS LOMOS SALEN DE LA BASE, NO DEL CÓDIGO. Los pide
   `GET /api/estante`, que devuelve `{ "lomos": [ {titulo, autor} ] }`
   con entre 12 y 18 obras, o una lista VACÍA si no hay suficientes que
   cumplan el criterio de calidad.

   🔴 Y SI VIENE VACÍA, O EL PEDIDO FALLA, EL ESTANTE NO SE DIBUJA:
   ni esqueleto, ni lomos de mentira, ni texto de relleno. El
   contenedor nace con `hidden` desde el HTML y buscador.js se lo saca
   sólo cuando ya tiene lomos de verdad en la mano (ver `pintarEstante`).
   Es la misma regla que las tapas: si el dato no está, la pantalla se
   calla — no rellena.

   LOS SEIS COLORES Y LOS SEIS ALTOS son los del prototipo, aplicados
   por `nth-child(6n+k)`: es lo que hace que un estante parezca un
   estante y no una barra de progreso. Ningún color sale de los datos
   del libro — no se está codificando nada, es ritmo visual.

   EL ANCHO NO SE DESBORDA: la tira desliza en horizontal
   (`overflow-x:auto`) y los degradés de los bordes dicen que hay más.
   `min-width: 0` en el contenedor es lo que impide que la tira empuje
   la página y aparezca la barra horizontal del navegador. */
.estante { width: 100%; margin-top: clamp(24px, 5vh, 44px); }
.estante-titulo { text-align: center; font-size: 13px; color: var(--humo); margin: 0 0 12px; }
.estante-marco { position: relative; min-width: 0; }
.estante-marco:before, .estante-marco:after {
  content: "";
  position: absolute;
  top: 0; bottom: 8px;
  width: 34px;
  pointer-events: none;
  z-index: 2;
}
.estante-marco:before { left: 0; background: linear-gradient(90deg, var(--papel), rgba(237, 231, 218, 0)); }
.estante-marco:after { right: 0; background: linear-gradient(270deg, var(--papel), rgba(237, 231, 218, 0)); }
.lomos {
  display: flex;
  justify-content: flex-start;
  align-items: flex-end;
  gap: 5px;
  padding: 0 22px;
  overflow-x: auto;
  scrollbar-width: none;
}
.lomos::-webkit-scrollbar { display: none; }
.lomo {
  flex: 0 0 auto;
  width: 40px;
  height: 150px;
  border: 0;
  border-radius: 2px 2px 0 0;
  padding: 12px 4px;
  cursor: pointer;
  font-family: var(--font-heading);
  font-variation-settings: "SOFT" 20;
  font-weight: 600;
  font-size: 12px;
  line-height: 1.25;
  writing-mode: vertical-rl;
  text-orientation: mixed;
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  box-shadow: inset -4px 0 0 rgba(0, 0, 0, .14);
  transition: transform .18s ease;
}
.lomo:hover, .lomo:focus-visible { transform: translateY(-10px); outline: none; }
/* El anillo de foco va en ORO y no en vino: sobre un lomo vino, un
   anillo vino no se ve. Es el único uso del oro en el sitio. */
.lomo:focus-visible { box-shadow: inset -4px 0 0 rgba(0, 0, 0, .14), 0 0 0 3px var(--oro); }
.lomo .lomo-autor { font-family: var(--font-body); font-weight: 400; font-size: 11px; opacity: .72; }
.lomo:nth-child(6n+1) { background: #8C2434; color: #F3E9DA; height: 164px; }
.lomo:nth-child(6n+2) { background: #16241C; color: #E3DCC8; height: 146px; }
.lomo:nth-child(6n+3) { background: #BE8B26; color: #241A05; height: 156px; }
.lomo:nth-child(6n+4) { background: #3B4C5A; color: #E6EAEC; height: 138px; }
.lomo:nth-child(6n+5) { background: #D8CDB6; color: #3A3225; height: 168px; }
.lomo:nth-child(6n+6) { background: #4A2C3D; color: #EFDFE6; height: 152px; }
.tabla { height: 8px; background: linear-gradient(var(--tinta), var(--tinta-suave)); border-radius: 1px; margin: 0 22px; }
@media (prefers-reduced-motion: reduce) { .lomo { transition: none; } .lomo:hover { transform: none; } }

/* ============================================================
   EL RECORRIDO — SENDERO, HITOS NUMERADOS Y SEPARADORES
   ============================================================
   Se repite en las CUATRO pantallas internas de texto: el pedido, el
   "cómo funciona", el recomendador y las librerías. En resultados y
   en precios NO va, y no es un olvido: ahí no hay un recorrido que
   contar, hay una lista que leer.

   TRES PIEZAS, y las tres salen del prototipo:

   1. EL SENDERO: una línea punteada vertical, fija a la izquierda de
      la ventana, que se va pintando de vino a medida que se baja.
      `position: fixed` → no participa del layout y no puede
      desbordar; el hueco se lo hace el `padding-left` del cuerpo.
   2. LOS HITOS: un círculo numerado por cada paso, apoyado sobre la
      línea. Los coloca buscador.js midiendo el trazo real
      (getPointAtLength), porque la curva está en un viewBox estirado
      y las cuentas a mano quedarían mintiendo en cuanto cambie el
      alto de la ventana.
   3. LOS SEPARADORES: el filete con el punto de vino en el medio,
      entre un paso y el siguiente.

   🔴 CADA `.como-bloque` DE ESAS CUATRO PANTALLAS ES UN PASO, y el
   número del hito sale de su posición: no está escrito en ninguna
   parte. Desde el 2-set-2026 los pasos SÍ llevan el rótulo del
   prototipo ("Primero", "Después", "Si sale", "Ahora", "Al final"),
   porque los textos de las cuatro pantallas pasaron a ser los del
   prototipo por decisión del dueño. El rótulo es `.orden`, va arriba
   del <h2> y NO reemplaza al hito: el hito dice en qué número vas,
   el rótulo dice qué clase de momento es.

   SON CUATRO PASOS EN LAS CUATRO PANTALLAS, así que las cuatro
   dibujan cuatro hitos. Si alguna gana o pierde un bloque, los hitos
   se recalculan solos (buscador.js los cuenta, no los tiene
   escritos).

   🔴 LAS MUESTRAS DEL PROTOTIPO YA ESTÁN (2-set-2026). El dueño las
   dejó pasar como ilustrativas. La condición, y la única, es que
   NINGUNA se pueda leer como un dato real del sitio: todas van con
   `aria-hidden`, todas llevan un rótulo que dice "Ejemplo" o dice
   qué es, y las tres que traen números inventados —los pedidos de la
   semana, los precios de comparación y los clics del informe de la
   librería— lo aclaran en su propia nota. La más delicada es la de
   #p-librerias ("Clics a tu ficha este mes: 47"): un librero la ve y
   puede confundirla con su informe, así que además dice cuál de los
   dos números se está registrando de verdad y cuál no. Los estilos
   están abajo, en "LAS MUESTRAS ILUSTRATIVAS". */
.sendero {
  position: fixed;
  left: 0;
  top: 96px;
  height: calc(100vh - 120px);
  width: 2.8rem;
  pointer-events: none;
  z-index: 1;
}
.sendero svg { width: 100%; height: 100%; }
.via { fill: none; stroke: var(--linea); stroke-width: 1.5; stroke-dasharray: 2 7; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.via-hecha { fill: none; stroke: var(--vino); stroke-width: 2.5; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.hito { fill: var(--papel); stroke: var(--linea); stroke-width: 1.5; transition: fill .25s, stroke .25s; }
.hito.pasado, .hito.aqui { fill: var(--vino); stroke: var(--vino); }
.numero { font-family: var(--font-body); font-size: 11px; font-weight: 700; fill: var(--humo); text-anchor: middle; dominant-baseline: central; transition: fill .25s; }
.numero.pasado, .numero.aqui { fill: var(--papel-alto); }
@media (prefers-reduced-motion: reduce) { .hito, .numero, .via-hecha { transition: none; } }

/* EL HUECO DEL SENDERO. Sale del cuerpo de la pantalla, no de un
   margen del sendero: el sendero es `fixed` y no ocupa lugar.
   A 320px son 54px de los 320, o sea 246px de ancho útil para el
   texto (~30 caracteres por renglón). Es angosto y está medido; el
   prototipo pide 70px y acá se bajó a 54 justamente por eso. */
.con-recorrido .cuerpo { padding-left: calc(var(--margen-movil) + 34px); }

/* EL ENCABEZADO DE LAS CUATRO PANTALLAS: título centrado, bajada
   centrada y el filete con el punto abajo. Es el `.encabezado` del
   prototipo, aplicado al `.titular` que ya existía. */
.con-recorrido .titular { text-align: center; padding-bottom: 0; }
.con-recorrido .titular h1 { font-size: 30px; margin: 4px 0 8px; }
.con-recorrido .titular p { margin: 0 auto; max-width: 34ch; font-size: 14px; color: var(--tinta-suave); }
.con-recorrido .titular:after {
  content: "";
  display: block;
  width: min(680px, 100%);
  height: 12px;
  margin: clamp(20px, 4vh, 30px) auto clamp(14px, 3vh, 22px);
  background:
    linear-gradient(var(--humo), var(--humo)) left center / calc(50% - 12px) 1.5px no-repeat,
    radial-gradient(circle, var(--vino) 2.5px, transparent 2.5px) center center / 12px 12px no-repeat,
    linear-gradient(var(--humo), var(--humo)) right center / calc(50% - 12px) 1.5px no-repeat;
}

/* ============================================================
   LOS BLOQUES DE TEXTO DEJAN DE SER TARJETAS
   ============================================================
   Hasta el 2-set-2026 a la mañana cada sección de texto era una
   tarjeta blanca con sombra. En el sistema de papel eso no existe: el
   prototipo escribe los pasos directamente sobre el papel y lo que
   los separa es el filete con el punto.

   No se pierde nada de lo que la tarjeta daba —agrupar el título con
   su texto— porque eso ya lo hace el separador, que es más barato y
   no le sube un escalón de jerarquía al bloque.

   LAS CAJAS QUE SÍ SIGUEN SIENDO TARJETA (`.mk` del prototipo): los
   formularios, la confirmación, el error, el aviso de aproximados, la
   salida al pedido, la nota del ejemplar y el bloque del mail de las
   librerías. Todas ésas son COSAS, no texto corrido. */
.texto > .como-bloque {
  background: transparent;
  border: 0;
  box-shadow: none;
  padding: 0;
  border-radius: 0;
}
/* EL SEPARADOR ENTRE UN PASO Y EL SIGUIENTE. Va como ::before del
   bloque de abajo y no como borde del de arriba: así el primero de
   cada pantalla nunca lo lleva. */
.texto > .como-bloque + .como-bloque:before {
  content: "";
  display: block;
  width: min(680px, 100%);
  height: 12px;
  margin: 0 auto clamp(16px, 3.5vh, 26px);
  background:
    linear-gradient(var(--humo), var(--humo)) left center / calc(50% - 12px) 1.5px no-repeat,
    radial-gradient(circle, var(--vino) 2.5px, transparent 2.5px) center center / 12px 12px no-repeat,
    linear-gradient(var(--humo), var(--humo)) right center / calc(50% - 12px) 1.5px no-repeat;
}
.texto { gap: clamp(16px, 3.5vh, 26px); }
.como-bloque h2, .como-bloque h3 { font-size: 19px; margin-bottom: 6px; }
.como-bloque p, .texto p { color: var(--tinta-suave); }

/* LA FILA DE RESULTADO, EN PAPEL. Se le va el levantarse al pasar el
   mouse: en un sistema plano, una fila que flota es del sistema
   anterior. Lo que dice "esto se toca" es el papel alto y el filo. */
a.fila:hover, a.fila:focus-visible {
  background: var(--papel-hondo);
  box-shadow: var(--sombra);
  transform: none;
}

/* ============================================================
   EL PRECIO BAJA UN ESCALÓN DE JERARQUÍA (2-set-2026)
   ============================================================
   Era Barlow Condensed a 20/22px, o sea del mismo tamaño y de la
   misma familia que el título. Ahora el título es la serif grande y
   el precio es Karla bold a 16: sigue siendo lo segundo que se lee de
   la fila y ya no le compite al título.
   El "desde" que lo acompaña queda en versalita chica, como el
   `.mk-eti` del prototipo. */
/* 🔴 EL PRECIO GRANDE — DECISIÓN DEL DUEÑO, 3-set-2026.
   Se le preguntó con los dos valores y el costo a la vista, y eligió
   traer el del prototipo: 23,2px de Fraunces en la lista y 20,8 en la
   ficha. En la lista eso lo deja MÁS GRANDE que el título (17,92), o
   sea al revés de lo que dice el principio 1 de docs/diseno-web.md
   ("el título manda, el precio va chico"). Queda anotado que es un
   desvío consciente de ese documento y no un descuido: el dueño lo
   decidió mirando las dos versiones. Para volver: 16px Karla 700.
   El COLOR sigue como estaba —tinta en la lista, vino sólo en la
   ficha— y eso NO lo cambió el dueño: el tamaño ya destaca el número;
   sumarle color en la lista sería contarlo dos veces, y las filas sin
   precio quedarían apagadas al lado de las que lo tienen. */
.precio { font-family: var(--font-heading); font-weight: 600; font-size: 23.2px; color: var(--tinta); }
.fila-precio .precio { color: var(--vino); font-size: 20.8px; }
/* El `.desde` del prototipo: .64rem (10,24px) y letter-spacing .16em.
   Estaba en 10px/.12em, que era de antes de medir el prototipo. */
.desde { font-size: 10.24px; letter-spacing: .16em; }
.titulo { font-variation-settings: "SOFT" 20; }
.fila-precio .libreria { font-weight: 700; }

/* ============================================================
   ESCRITORIO — lo que el recorrido y el estante cambian de 760 arriba
   ============================================================ */
@media (min-width: 760px) {
  .barra {
    align-items: baseline;
    gap: 36px;
    padding: 12px var(--margen-lateral) 10px;
  }
  .marca { font-size: 22px; }
  /* 🔴 DE 760 PARA ARRIBA EL MENÚ NO DESLIZA: ENVUELVE, como en el
     prototipo. Envuelve ADENTRO DE SU PROPIA CAJA, al lado de la
     marca, y no arrastrando la barra entera — eso último se probó
     (flex-wrap en .barra) y a 760px daba una barra de 181px de alto:
     la marca en un renglón y el menú en dos abajo.
     MEDIDO: el menú entero mide 863px. Entra en un renglón al lado de
     la marca a partir de ~1150px de ventana; entre 760 y 1149 cae en
     dos renglones y la barra mide ~56px. Ninguna entrada se esconde
     en ninguna medida. */
  .menu-tira { margin-right: 0; }
  .menu-tira:after { display: none; }
  .menu { flex-wrap: wrap; overflow-x: visible; padding: 0; gap: 24px; row-gap: 4px; }
  .menu a { font-size: 15px; }

  .estante-titulo { font-size: 14px; }
  .lomo { width: 46px; font-size: 13px; }
  .lomo:nth-child(6n+1) { height: 200px; }
  .lomo:nth-child(6n+2) { height: 180px; }
  .lomo:nth-child(6n+3) { height: 192px; }
  .lomo:nth-child(6n+4) { height: 170px; }
  .lomo:nth-child(6n+5) { height: 206px; }
  .lomo:nth-child(6n+6) { height: 186px; }
  .lomos { justify-content: center; }
  .tabla { height: 9px; }

  .sendero { width: clamp(4.5rem, 9vw, 8rem); top: 110px; height: calc(100vh - 140px); }
  .con-recorrido .cuerpo { padding-left: clamp(5.5rem, 10vw, 9rem); }
  .con-recorrido .titular h1 { font-size: clamp(38px, 5vw, 58px); }
  .con-recorrido .titular p { font-size: clamp(17px, 2vw, 21px); }

  /* EL SEPARADOR EN LA GRILLA DEL BLOQUE. `.como-bloque` es, de 760
     para arriba, una grilla de dos casillas (rótulo | párrafo). El
     separador ocupa una fila entera arriba de las dos, y por eso el
     título del bloque que lo lleva baja a la fila 2: los párrafos se
     autocolocan en la columna 2 a partir de la primera fila libre, o
     sea la misma en la que quedó el título. Sin esto, el primer
     párrafo se iba a la fila del separador. */
  .texto > .como-bloque > h2, .texto > .como-bloque > h3 { grid-row: 1; }
  .texto > .como-bloque + .como-bloque:before { grid-column: 1 / -1; grid-row: 1; justify-self: center; }
  .texto > .como-bloque + .como-bloque > h2,
  .texto > .como-bloque + .como-bloque > h3 { grid-row: 2; }
  .como-bloque h2, .como-bloque h3 { font-size: 22px; }
  /* (Acá subían el precio a 17px cuando era Karla 16. Con el tamaño
     del prototipo —23,2 y 20,8, arriba en :root— el precio ya no
     escala por medida: es el mismo número en el teléfono y en el
     monitor, como en el prototipo. Si vuelve a escalar, va acá.) */
}

@media (min-width: 1120px) {
  .como-bloque h2, .como-bloque h3 { font-size: 26px; }
}

/* ============================================================
   EL TELÉFONO CHICO — 359px PARA ABAJO
   ============================================================
   🔴 ACÁ SE DEFIENDE EL INVARIANTE DEL PROYECTO: tres filas enteras a
   320×568. El cambio de carácter se lo comió dos veces y las dos se
   pagaron acá:

   1. LA BARRA CON EL MENÚ cuesta 42px que antes no existían (antes el
      menú era un ☰ metido adentro de la banda y no ocupaba alto).
   2. FRAUNCES ES MÁS ANCHA QUE BARLOW CONDENSED. El mismo título en
      la misma medida ocupa más renglones: "Los detectives salvajes"
      pasa de uno a dos, y la fila crece 28px.

   LO QUE SE RECORTÓ PARA QUE ENTREN IGUAL, y ninguno toca la
   jerarquía —el título sigue mandando, el precio sigue chico y la
   tapa sigue al costado a --alto-tapa—:
       · el aire de la fila, de 12 a 10 (--aire-fila);
       · el aire abajo del rótulo del conteo, de 12 a 8;
       · el autor y el "en el catálogo de", de 13 a 12px.

   MEDIDO a 320×568 con filas cargadas (tres librerías por fila, o sea
   el caso pesado): entran 3.
   ============================================================ */
@media (max-width: 359.98px) {
  :root { --aire-fila: 10px; }
  .barra-conteo { padding-bottom: 8px; }
  .autor, .donde { font-size: 12px; }
  .titulo { font-size: 17px; }
  /* EL RÓTULO DE LA LISTA VUELVE A SU MEDIDA CHICA ACÁ, Y ES POR EL
     INVARIANTE, no por gusto: con los 14,4 y 13,12px del prototipo la
     regla del precio se parte en tres renglones a 320px y la lista
     arranca 24px más abajo. Medido con "borges": la tercera fila
     terminaba en 505 de 568 (62px de sobra) y con esto vuelve a
     terminar en 481 (87 de sobra). De 360 para arriba mandan los
     números del prototipo. */
  .conteo { font-size: 12px; letter-spacing: .08em; }
  .regla-precio { font-size: 11px; }
}

/* ============================================================
   LOS PASOS DEL PROTOTIPO, CON SU RÓTULO Y SU MUESTRA  ·  2-set-2026
   ============================================================
   Las cuatro pantallas de texto (#p-pedido, #p-como, #p-recomendador,
   #p-librerias) pasaron a tener los textos del prototipo del dueño,
   calcados. Con ellos vinieron dos piezas que antes no estaban:

     · EL RÓTULO DEL PASO (`.orden`): "Primero", "Después", "Si sale",
       "Ahora", "Al final". Va arriba del <h2>, en versalita vino. NO
       reemplaza al hito del sendero: el hito dice en qué número vas,
       el rótulo dice qué clase de momento es.
     · LA MUESTRA (`.muestra` + la familia `.mk-*`): la tarjetita
       ilustrativa de la derecha.

   🔴 LO QUE ESTO CAMBIA DEL DIBUJO ANTERIOR, Y HAY QUE SABERLO.
   Hasta hoy #p-librerias y #p-recomendador usaban "el rótulo a la
   izquierda": el <h2> en una casilla de 210px y los párrafos a su
   derecha. El prototipo no dibuja eso — dibuja texto a la izquierda y
   muestra a la derecha, con el título arriba de su propio texto. Como
   la muestra no entra en ningún lado si el título se queda con la
   casilla izquierda, los bloques `.paso` usan la grilla del
   prototipo. Los bloques que NO son paso (si alguna vez vuelve
   alguno) siguen con el rótulo al costado, que es la regla vieja y
   sigue viva más arriba en este archivo.

   🔴 LA JERARQUÍA NO SE MUEVE. La muestra es una ilustración: 13px,
   gris humo, sin sombra alta, y su precio es 13px en Karla — más
   chico que el precio de una fila de resultado de verdad, que ya
   había bajado un escalón. Ninguna muestra tiene portada grande: el
   `.mk-tapa` es un rectángulo de 30×44 y es un dibujo, no una imagen.

   MOBILE-FIRST: acá abajo está el teléfono, donde la muestra cae
   APILADA debajo del texto de su paso y ocupa el ancho entero. Las
   dos columnas entran recién a 760px.
   ============================================================ */

/* EL RÓTULO DEL PASO */
.orden {
  display: block;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--vino);
  margin: 0 0 6px;
}
.texto-paso > h2 { margin-bottom: 6px; }

/* LA MUESTRA — apilada en el teléfono, al costado en el monitor. */
.muestra { margin-top: 14px; }
.muestra p { margin: 0; max-width: none; }
/* El formulario del pedido viaja en la casilla de la muestra del
   paso 4, y es lo ÚNICO que ahí adentro no es una ilustración: es el
   formulario de verdad. Por eso no lleva ni `aria-hidden` ni rótulo
   de ejemplo, y conserva sus propios estilos de tarjeta. */
.muestra > .formulario { margin-top: 0; }

/* ---------- LAS MUESTRAS ILUSTRATIVAS (la familia .mk-*) ----------
   Copiadas del prototipo y bajadas a la escala de esta hoja (el
   prototipo escribe sobre un cuerpo de 17px y acá el cuerpo es 15px).
   TODAS van con `aria-hidden` en el HTML: para un lector de pantalla
   no existen, porque no dicen nada que el texto del paso no diga.
   Y TODAS llevan rótulo de ejemplo — ver el comentario del HTML. */
.mk {
  background: var(--papel-alto);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  padding: 12px;
  font-size: 13px;
  line-height: 1.5;
  color: var(--tinta-suave);
}
.mk + .mk { margin-top: 8px; }
/* EL RÓTULO DE EJEMPLO. Es la pieza que hace que la muestra no se
   pueda leer como un dato del sitio, así que no se saca de ninguna. */
.mk-eti {
  display: block;
  font-family: var(--font-body);
  font-size: 10px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--humo);
  margin-bottom: 8px;
}
.mk-campo {
  display: flex;
  align-items: center;
  gap: 6px;
  border: 1.5px solid var(--tinta);
  border-radius: 3px;
  background: var(--papel-alto);
  padding: 9px 10px;
  font-size: 13px;
  color: var(--tinta);
}
.mk-campo + .mk-campo { margin-top: 8px; }
.mk-campo.tenue { border-color: var(--linea); color: var(--humo); }
.cursor { width: 1.5px; height: 1em; background: var(--vino); animation: late 1.1s steps(1, end) infinite; }
@keyframes late { 0%, 49% { opacity: 1 } 50%, 100% { opacity: 0 } }
@media (prefers-reduced-motion: reduce) { .cursor { animation: none } }

.mk-fila { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; font-size: 13px; }
.mk-fila + .mk-fila { margin-top: 7px; padding-top: 7px; border-top: 1px solid var(--linea); }
.mk-fila-primera { margin-top: 8px; }
/* CERO DESBORDE HORIZONTAL, que es invariante del proyecto. La fila
   de la muestra es flex y su lado izquierdo es texto que puede ser
   largo ("Título, autor, precio, stock, link" a 320px): sin
   `min-width: 0` un flex item no baja de su contenido y empuja la
   página a lo ancho. El precio de la derecha sí queda `nowrap`,
   porque es corto y partirlo se lee como un error. */
.mk-fila > span:first-child { min-width: 0; overflow-wrap: anywhere; }
.mk-campo { flex-wrap: wrap; }
/* El precio de la muestra es 13px en Karla: MÁS CHICO que el de una
   fila de resultado de verdad (16px). Una ilustración no puede
   gritar más fuerte que el dato. */
.mk-precio { font-family: var(--font-body); font-weight: 700; font-size: 13px; color: var(--tinta); white-space: nowrap; }
.mk-precio-tenue { color: var(--humo); }
.mk-fila.mejor .mk-precio { color: var(--vino); }
.mk-donde { color: var(--tinta); font-weight: 700; }

.muestra .mk-nota { font-size: 11px; line-height: 1.45; color: var(--humo); margin-top: 9px; max-width: none; }
.mk-nota-centrada { text-align: center; }

.mk-tapa { width: 30px; height: 44px; border-radius: 2px; background: var(--vino); flex: 0 0 auto; }
.mk-tapa-azul { background: #3B4C5A; }
.mk-boton { background: var(--vino); color: var(--papel-alto); font-weight: 700; font-size: 11px; padding: 5px 10px; border-radius: 3px; white-space: nowrap; }
.mk-banda {
  display: inline-block;
  font-size: 10px;
  letter-spacing: .1em;
  text-transform: uppercase;
  border: 1px solid var(--vino);
  color: var(--vino);
  padding: 2px 6px;
  border-radius: 2px;
  margin-bottom: 7px;
}
/* EL PUENTE DE LA MUESTRA. Es el bloque principal del recomendador y
   acá está dibujado, no servido: por eso es una ilustración chica y
   no el puente de tres o cuatro renglones de la pantalla de verdad. */
.muestra .mk-puente { font-size: 13px; line-height: 1.5; color: var(--tinta-suave); margin-top: 8px; max-width: none; }
.mk-globo { background: var(--papel-hondo); border-radius: 8px; padding: 10px 11px; font-size: 13px; line-height: 1.45; }
.mk-globo + .mk-globo { margin-top: 7px; }
.mk-globo-claro { background: var(--papel-alto); border: 1px solid var(--linea); }
.mk-salida { display: flex; align-items: center; gap: 10px; }
.mk-salida-datos { flex: 1; min-width: 0; }
.mk-salida-datos > .mk-donde, .mk-salida-datos > .mk-precio { display: block; }

/* EL CIERRE — el recuadro del final del recomendador ("Todavía no
   está abierto"). Es el `.cierre` del prototipo. En #p-librerias el
   lugar equivalente lo ocupa `.bloque-librerias`, que ya existía. */
.cierre {
  width: min(680px, 100%);
  margin: var(--aire-bloques) auto 0;
  padding: 16px var(--aire-tarjeta);
  background: var(--papel-alto);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  text-align: center;
}
.cierre strong { display: block; font-family: var(--font-heading); font-weight: 600; font-size: 16px; color: var(--tinta); margin-bottom: 5px; }
.cierre p { margin: 0; font-size: 12px; color: var(--tinta-suave); max-width: none; }

/* ============================================================
   DE 760 PARA ARRIBA: EL PASO SE ABRE EN DOS COLUMNAS
   ============================================================
   Es la grilla del prototipo: texto a la izquierda (54ch, que es la
   medida de lectura) y muestra a la derecha, topada en 330px. El
   separador con el punto ocupa una fila entera arriba de las dos —de
   ahí el área "sep"—, y por eso el primer paso de cada pantalla, que
   no lo lleva, deja esa fila en cero.
   ============================================================ */
@media (min-width: 760px) {
  .texto > .como-bloque.paso {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(0, .85fr);
    grid-template-areas: "sep sep" "texto muestra";
    column-gap: var(--gap-rotulo);
    align-items: center;
    /* 🔴 EL TOPE DE 1000px, Y ESTÁ MEDIDO. Sin él, a 1920 el paso
       ocupa los 1400 del contenido: el texto frena en sus 54ch (481px
       medidos) y la muestra se centra en una columna de 712, así que
       entre los dos queda un pozo de 543px de papel vacío. Con el
       tope, el paso mide 1000 y el pozo baja a ~50. Es el mismo
       criterio que la fila de resultados topada en 680: el marco
       llega a los dos bordes, la medida de lectura no.

       🔴 Y EL ANCHO SE FIJA CON `width`, NO CON `max-width`, Y ES POR
       UN BUG QUE SE PAGÓ  ·  3-set-2026.
       Acá decía `max-width: 1000px` con los dos márgenes en `auto`.
       Con eso los pasos NO arrancaban todos en la misma x, que es lo
       que el dueño vio en /librerias.

       El motivo, y NO era el separador: `.texto` es un flex en
       columna, así que sus hijos se estiran al ancho entero... salvo
       que tengan un margen `auto` en el eje transversal. Con
       `margin-left/right: auto` el flexbox no estira: dimensiona el
       bloque a su contenido (fit-content) y recién después lo centra.
       Y el contenido de una grilla de columnas `fr` mide distinto en
       cada paso, así que cada bloque terminaba con un ancho propio y,
       por lo tanto, con columnas propias.

       MEDIDO a 2000px, antes: en #p-librerias el paso 2 medía 1000px
       (texto en x=422, muestra en x=1045,8) y los otros tres medían
       925,9 (texto en x=459, muestra en x=1025,3). El mismo desalineo
       aparecía en #p-pedido (paso 4) y en #p-recomendador (paso 4).
       Que el primer paso no lleve separador NO influye: en #p-como
       los cuatro daban 925,9 y en #p-recomendador el primero, sin
       separador, daba 1000 igual que sus hermanos.

       Con `width` el ancho ya no depende del contenido: los cuatro
       pasos miden lo mismo, las columnas `fr` dan lo mismo y el texto
       y la muestra caen en la misma x en toda la pantalla. Abajo de
       1000px manda el 100% del `.texto` y siguen alineados igual. */
    width: min(1000px, 100%);
    margin-left: auto;
    margin-right: auto;
  }
  .texto > .como-bloque.paso > .texto-paso { grid-area: texto; max-width: 54ch; }
  .texto > .como-bloque.paso > .muestra { grid-area: muestra; justify-self: center; width: min(330px, 100%); margin-top: 0; }
  /* Pisa el `grid-column: 1 / -1; grid-row: 1` que el separador
     genérico se pone más arriba en este archivo: acá el área tiene
     nombre y la fila la manda la plantilla. */
  .texto > .como-bloque.paso + .como-bloque.paso:before { grid-area: sep; }
  /* El título del paso, en el tamaño del prototipo. Reemplaza al
     22/26px del rótulo-a-la-izquierda, que era un título de casilla
     angosta; éste es el título de la sección. */
  .texto > .como-bloque.paso .texto-paso > h2 {
    font-size: clamp(24px, 3.2vw, 34px);
    line-height: 1.12;
    max-width: 18ch;
    margin-bottom: 10px;
  }
}
