/* ═══════════════════════════════════════════════════════════════════════
   Luciano Torres Watches — la vitrina de mármol

   La categoría de relojes de lujo manda negro con dorado y serif finita; su
   opuesto previsible es el editorial blanco de filetes. Las dos quedan afuera.

   El fondo de la página es UN SOLO COLOR PLANO, sin textura. El mármol vive
   donde el cliente lo usa: de fondo de la foto de cada reloj, como la losa
   sobre la que se apoya la pieza. Se genera con turbulencia SVG —~1 KB contra
   los 400 de una foto— en dos variantes, blanca y negra.
   ═══════════════════════════════════════════════════════════════════════ */

:root{
  --fondo:        #0F1A15;   /* el único color de fondo. Plano, sin textura */
  --superficie:   #16241F;   /* tarjetas y controles, apenas levantados */
  --superficie-2: #1D2F27;   /* al pasar el mouse */
  --laton:        #C9A45F;   /* herraje: filetes, eyebrows, acentos */
  --laton-hondo:  #8A6D38;
  --hueso:        #F2F0EA;   /* superficies de lectura */
  --tinta:        #101512;   /* texto sobre hueso */
  --daytona:      #C8102E;   /* el rojo del reloj. Una sola vez en la página */

  --humo:      rgba(242,240,234,.68);
  --humo-bajo: rgba(242,240,234,.52);
  --filete:    rgba(201,164,95,.28);
  --filete-ink:rgba(16,21,18,.16);

  /* **Prata** en los títulos y **Cormorant Garamond** en el texto, elegidas por
     el cliente el 2026-08-07 sobre Geist, Bodoni Moda e Instrument Serif.

     Las dos son libres (SIL Open Font License) y las eligió comparando en vivo
     contra las tres pagas que le gustaban —Origin, Coldiac y Luxury Stylish—,
     que no se pueden usar: son de licencia comercial y lo que circula gratis
     son demos de uso personal con glifos incompletos.

     Prata tiene UN solo peso. No es una limitación: en una didona la jerarquía
     la hace el tamaño, y pedirle negrita al navegador engorda el trazo grueso
     hasta perder el contraste que es su razón de ser. Por eso --display-peso
     es 400 y no 600. */
  --display: 'Prata', Georgia, serif;
  --texto:   'Cormorant Garamond', Georgia, serif;

  /* El peso y el interletrado de los títulos viajan con la familia, porque no
     son gusto: son propiedades de ESTA letra. El -.035em es el apretado que
     pide una sans grande —sin él Geist se ve suelta— y en una serifa de alto
     contraste el mismo número junta las serifas hasta tocarse.

     Estando acá, cambiar la tipografía de la página es cambiar tres líneas
     juntas y no salir a cazar `font-weight:600` por toda la hoja. */
  --display-peso: 400;
  --display-tracking: -.006em;

  --margen: clamp(1.25rem, 5vw, 6rem);
  --ritmo:  clamp(5rem, 12vh, 10rem);

  /* El radio de los OBJETOS de la portada: la losa de mármol de los
     destacados, el rollo del astronauta y la ficha del carrusel. Los tres
     estaban ya en 14 px cada uno por su lado; acá se juntan en un token.

     **Y es sólo de la portada.** El catálogo se queda con su canto vivo de
     2 px, decisión del cliente el 2026-08-10, y una vez dicha se lee sola: la
     portada muestra objetos apoyados sobre una superficie y el catálogo es un
     instrumento —una grilla de datos que se compara de a veinte—. Se probó
     redondeando también la ficha del stock y quedó blanda para lo que es.

     Los controles —botones, campos, el cajón de filtros— van en 2 px en las
     dos páginas. El latón de este diseño es herraje, no color de marca, y una
     pieza de herraje tiene canto vivo. */
  --radio-objeto: 14px;

  /* Vetas del mármol, en dos escalas. El Verde Alpi real tiene hilos finos y
     además vetas gruesas que cruzan la losa entera; con una sola frecuencia
     la piedra queda como una mancha verde y no se lee como mármol. */
  --vetas: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='700' height='700'%3E%3Cfilter id='v'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.007 0.028' numOctaves='5' seed='7'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.90 0 0 0 0 0.94 0 0 0 0 0.88 2.4 -1.1 0 0 -0.62'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23v)'/%3E%3C/svg%3E");
  --vetas-anchas: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1400' height='1400'%3E%3Cfilter id='w'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0016 0.006' numOctaves='3' seed='19'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.93 0 0 0 0 0.96 0 0 0 0 0.91 3.4 -1.6 0 0 -1.05'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23w)'/%3E%3C/svg%3E");
}

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

/* `hidden` tiene que querer decir oculto, siempre.

   La regla que trae el navegador es `[hidden]{display:none}`, y como los
   selectores de atributo tienen la misma especificidad que los de clase, gana
   la que venga después: cualquier `.loquesea{display:flex}` de esta hoja la
   pisa y el elemento se queda a la vista.

   El síntoma es feo de encontrar porque no se ve en el CSS: en el JS uno
   escribe `el.hidden = true`, no pasa nada, y el archivo donde está el
   problema es otro. Ya pasó dos veces —la barra de filtros y el filtro de
   estilo, que se esconde solo cuando ninguna pieza trae ese dato—. */
[hidden]{ display:none !important; }

/* Sin `scroll-behavior:smooth`, y no es un olvido. El viaje de los enlaces
   internos lo maneja ir-a.js, que pide un scroll por cuadro: con la propiedad
   puesta, el navegador intenta animar hacia cada uno de esos destinos y las dos
   animaciones se pelean. Medido, el recorrido quedaba clavado 600 ms y después
   se disparaba de golpe, que es lo contrario de lo buscado.

   Además la propiedad ignora `prefers-reduced-motion`: quien pide no ver
   movimiento igual se comía el viaje. */

body{
  margin:0;
  background:var(--fondo);
  color:var(--hueso);
  font-family:var(--texto);
  font-size:clamp(1rem,.95rem + .3vw,1.125rem);

  /* Cormorant tiene la altura de x chica: medida contra Geist, un 74 %. Sin
     corregirlo, cambiar de familia le baja un cuarto del tamaño aparente a
     TODO el texto chico de la página de una sola vez.

     `font-size-adjust` es la propiedad hecha exactamente para esto: fija la
     altura de x como fracción del cuerpo, y el navegador ajusta el tamaño real
     para cumplirla. 0.53 es la de Geist (53 px de altura de x a cuerpo 100), o
     sea que se conserva el tamaño aparente que tenía la página.

     Se hace acá, en una línea que hereda toda la página, y no subiéndole el
     cuerpo a los veinte lugares que tienen un tamaño escrito en rem. Y sirve
     igual el día que se cambie de tipografía otra vez.

     Prata queda en 52, así que la corrección casi no la toca (un 2 %). */
  font-size-adjust: ex-height 0.53;

  /* Cifras de CAJA, no de estilo antiguo.

     Cormorant trae de fábrica las antiguas —el 6 y el 8 suben, el 3, 5, 7 y 9
     bajan— que son preciosas en un libro y están mal acá: en esta página el
     número ES el dato. Un precio de 14.500 con el 4 y el 5 colgando se lee
     como adorno, y la medida de la caja es media razón por la que alguien
     compra o no compra ese reloj.

     Va en el body para que lo herede todo. Ojo con una trampa del CSS: pedir
     `tabular-nums` solo RESETEA el estilo de cifra a normal, así que los
     lugares que ya pedían tabulares tuvieron que pasar a pedir las dos. */
  font-variant-numeric: lining-nums;

  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

h1,h2,h3{ margin:0; font-family:var(--display); font-weight:var(--display-peso);
         line-height:1.03; letter-spacing:var(--display-tracking); }
p{ margin:0; }
img,video{ display:block; max-width:100%; }
:focus-visible{ outline:2px solid var(--laton); outline-offset:4px; }

/* El recuadro gris que Chrome de Android pinta encima de todo lo que se toca.
   Es del navegador, no del diseño: aparece un cuarto de segundo, con su propio
   color y su propio radio, y en una página cuyo argumento es el cuidado se ve
   como una mancha. Lo que dice que algo se tocó son los estados propios de cada
   control, que ya están.

   El foco NO se toca: la regla de arriba sigue en pie, y es la que necesita
   quien navega con teclado. */
*{ -webkit-tap-highlight-color:transparent; }

.saltar{
  position:absolute; left:-9999px; top:0; z-index:100;
  padding:.85rem 1.25rem; background:var(--hueso); color:var(--tinta);
  font-weight:600; text-decoration:none;
}
.saltar:focus{ left:.5rem; top:.5rem; }

/* Para lo que tiene que existir en el documento y no en la pantalla: hoy, el
   `h1` de la página a pedido, donde el carrusel es lo primero que se ve.

   No es `display:none` ni `visibility:hidden`, que lo sacarían también del
   lector de pantalla, que es justamente a quien está dirigido. Es la receta
   de siempre: un píxel recortado a nada, fuera del flujo. */
.a-la-vista-no{
  position:absolute; width:1px; height:1px; margin:-1px; padding:0;
  overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0;
}


.titulo{ font-size:clamp(2rem,4.6vw,3.5rem); }
.titulo--grande{ font-size:clamp(2.1rem,5.2vw,4.25rem); }
.titulo em{ font-style:italic; color:var(--laton); }

.seccion__cabecera{ margin-bottom:clamp(2.5rem,6vw,4.5rem); }
.seccion__bajada{ margin-top:1.5rem; max-width:46ch; color:var(--humo); }

/* ── Botones ─────────────────────────────────────────────────────────── */

.boton{
  display:inline-flex; align-items:center; justify-content:center;
  padding:.95rem 1.75rem; font-family:var(--texto); font-weight:600;
  font-size:1rem; letter-spacing:-.005em; text-decoration:none;
  border:1px solid transparent; border-radius:2px;
  transition:transform .2s ease, background-color .2s ease, color .2s ease;
}
.boton:hover{ transform:translateY(-2px); }
.boton:active{ transform:translateY(0); }
.boton--grande{ padding:1.15rem 2.25rem; font-size:1.0625rem; }

.boton--hueso{ background:var(--hueso); color:var(--tinta); }
.boton--hueso:hover{ background:#fff; }
.boton--laton{ background:var(--laton); color:#1A1408; }
.boton--laton:hover{ background:#D9B978; }
.boton--fantasma{ background:transparent; color:var(--hueso); border-color:var(--filete); }
.boton--fantasma:hover{ border-color:var(--laton); color:var(--laton); }

/* ── Cabecera ────────────────────────────────────────────────────────── */

.marca{
  position:absolute; top:0; left:0; right:0; z-index:15;
  display:flex; align-items:center; justify-content:space-between;
  gap:1.5rem; padding:clamp(1rem,3vh,1.85rem) var(--margen);
  transition:opacity .4s ease, visibility .4s, transform .4s ease;
}
/* Mientras el film está en pantalla, la cabecera no está. Lo decide cabecera.js
   y el porqué está escrito allá: el hero ya abre con la marca en el centro y un
   cartel «Consultar stock», y la cabecera repetía las dos cosas más chicas y a
   un costado.

   `visibility` además de `opacity` no es de más: la saca del recorrido de
   tabulación. Apagada sólo con opacidad, el Tab sigue parando en tres enlaces
   invisibles antes de llegar a los carteles que sí se ven. */
.marca[data-tapada]{
  opacity:0; visibility:hidden; pointer-events:none;
  transform:translateY(-.6rem);
}

.marca__nombre{
  font-family:var(--display); font-weight:var(--display-peso); font-size:clamp(1rem,1.5vw,1.2rem);
  color:var(--hueso); text-decoration:none; letter-spacing:.01em;
  white-space:nowrap;
}
.marca__nombre span{ color:var(--laton); }
.marca__nav{ display:flex; gap:clamp(1rem,2.5vw,2rem); }
.marca__nav a{
  font-size:.8125rem; font-weight:500; letter-spacing:.1em;
  text-transform:uppercase; color:var(--humo); text-decoration:none;
  transition:color .2s ease;
}
.marca__nav a:hover{ color:var(--laton); }

/* ── La cabecera en el teléfono: los enlaces se pliegan ───────────────
   Medido: la marca ocupa 174 px y los tres links 189, así que en 360 px se iba
   a 466 y empujaba scroll horizontal en toda la página. Achicar la tipografía
   no alcanzaba: seguía sin entrar y los links quedaban ilegibles.

   Hasta el 2026-08-21 lo que cedía era la CANTIDAD — se escondía uno y
   quedaban dos, y cuál se escondía dependía de la página. Andaba, y tenía un
   costo que no se ve desde el escritorio: **desde el teléfono no había manera
   de llegar a una de las cuatro páginas** sin pasar por otra.

   Ahora ceden todos y se pliegan atrás de un botón, así que las tres salidas
   están siempre. Es más toques —uno— y a cambio el sitio deja de tener rutas
   que sólo existen en pantalla grande.

   El botón se ve sólo si `cabecera.js` marcó la cabecera. Sin JavaScript nada
   de esto pasa y los enlaces se quedan donde estaban, apretados pero a la
   vista: un menú plegado que no despliega deja a un visitante encerrado, y eso
   es peor que un renglón feo. */
@media (max-width:30rem){
  .marca{ gap:1rem; padding-left:1.15rem; padding-right:1.15rem; }
  .marca__nombre{ font-size:.9375rem; }
  .marca__nav{ gap:1rem; }
  .marca__nav a{ font-size:.6875rem; letter-spacing:.08em; }

  .marca[data-menu-listo] .marca__abrir{ display:grid; }

  /* ── La barra se cierra cuando el menú se abre ───────────────────────
     La cabecera fija no termina en un filete sino en un velo que se
     desvanece, así que un panel colgado de ahí no cuelga de nada: aparece
     flotando en el medio de la página. Mientras el menú está abierto la
     cabecera pasa a ser una barra de verdad —fondo lleno y un filete abajo— y
     el panel sale de ese filete, pegado, sin aire en el medio.

     Se cierra sola al cerrarse el menú: la barra existe mientras hay algo
     colgando de ella y no un segundo más. */
  .marca[data-menu-listo][data-menu]{
    background:var(--fondo);
    border-bottom:1px solid var(--filete);
    backdrop-filter:none; -webkit-backdrop-filter:none;
  }

  /* ── El panel es una chapa que sale de atrás de la barra ─────────────
     Y no una tarjeta que aparece: el `clip-path` no la mueve ni la desvanece,
     abre la ventana por la que se la ve. La chapa está entera y quieta desde
     el principio, atrás de la cabecera, y baja a la vista.

     Los `-2.5rem` de los tres lados no son un margen: son el aire que el
     recorte le deja a la sombra. `clip-path` recorta TODO lo que pinta el
     elemento, sombra incluida, así que con `inset(0)` la sombra desaparecía.
     Arriba se recorta a ras, y ahí está bien: una sombra subiendo por encima
     de la cabecera delataría que la chapa está adelante y no atrás.

     `visibility` además del recorte: sin ella el panel cerrado sigue en el
     recorrido de tabulación y el Tab para en tres enlaces invisibles. */
  .marca[data-menu-listo] .marca__nav{
    /* Alineada al margen de la página y no al borde de la pantalla: es la misma
       vertical con la que termina todo lo demás, y el filo de la punta cae ahí. */
    position:absolute; top:100%; right:1.15rem;
    flex-direction:column; align-items:stretch; gap:0;
    min-width:min(13rem, 62vw);
    background:var(--superficie);
    /* Sin borde arriba y sin esquinas arriba: de ese lado no hay borde, hay
       continuación — el filete de la barra ya cierra la chapa por ahí. */
    border:1px solid var(--filete); border-top:0;
    border-radius:0 0 2px 2px;
    box-shadow:0 1.25rem 2.5rem rgba(0,0,0,.5);
    visibility:hidden;
    clip-path:inset(0 -2.5rem 100% -2.5rem);
    transition:clip-path .38s cubic-bezier(.22,1,.36,1), visibility .38s;
  }
  .marca[data-menu-listo][data-menu] .marca__nav{
    visibility:visible;
    clip-path:inset(0 -2.5rem -2.5rem -2.5rem);
  }

  /* ── Adentro son renglones, no una pila de enlaces ───────────────────
     Es la lista del cajón de filtros dicha de nuevo: un renglón que se
     enciende se lee como una lista de la que se elige. Y arregla algo que no
     era estético — el enlace suelto medía 18 px de alto y el dedo pide 44.

     El filete entre renglones va con `+`, así el primero no lo lleva: una
     línea pegada al borde de arriba de la chapa se ve como un borde doble. */
  .marca[data-menu-listo] .marca__nav a{
    margin-left:0; padding:.85rem 1.1rem;
    min-height:2.75rem; align-content:center;
    transition:background-color .2s ease, color .2s ease;

    /* ── Plegado deja de ser una barra y pasa a ser una lista ──────────
       Y eso cambia cómo se escribe cada renglón, que es lo que se corrigió
       el 2026-08-25.

       Los enlaces de la cabecera van en versalitas, espaciados y alineados a
       la derecha porque ahí son ROTULOS: tres palabras sueltas apoyadas en una
       barra, donde el espaciado es lo que las separa del resto y la derecha es
       donde termina todo lo demás.

       Adentro del panel son otra cosa: **una lista de la que se elige**, y una
       lista se lee por el borde izquierdo. Las versalitas con `.1em` de
       espaciado obligan a leer letra por letra justo donde el dedo quiere
       barrer de arriba abajo, y la alineación a la derecha deja el arranque de
       cada renglón en una vertical distinta según cuánto mida la palabra.

       Así que acá se deshace todo eso: caja normal, sin espaciado extra,
       alineado a la izquierda y un punto más grande. Es el mismo enlace con la
       ropa que le toca al lugar donde está. */
    text-align:left;
    text-transform:none;
    letter-spacing:.01em;
    font-size:.9375rem;
    color:var(--hueso);
  }
  .marca[data-menu-listo] .marca__nav a + a{ border-top:1px solid var(--filete); }

  /* `--superficie-2` es literalmente el token del sistema para esto, y el dedo
     lo necesita más que el mouse: en el teléfono el toque es la única
     confirmación de que el renglón registró. */
  .marca[data-menu-listo] .marca__nav a:active,
  .marca[data-menu-listo] .marca__nav a:focus-visible{
    background:var(--superficie-2); color:var(--laton); outline:none;
  }

  /* Plegados hay lugar, así que vuelven todos. Las reglas de abajo son las que
     escondían alguno por página. «Reseñas», sumado el 2026-10-05, va siempre
     al menú plegado: sin él, la fila de enlaces sueltos ya no entraba. */
  .marca[data-menu-listo] .marca__nav a[href$="index.html"]{ display:grid; }
  .marca[data-menu-listo] .marca__nav a[href$="resenas.html"]{ display:grid; }
  .pagina-inicio .marca[data-menu-listo] .marca__nav a[href$="a-pedido.html"]{ display:grid; }

  .marca:not([data-menu-listo]) .marca__nav a[href$="index.html"]{ display:none; }
  .marca:not([data-menu-listo]) .marca__nav a[href$="resenas.html"]{ display:none; }
  .pagina-inicio .marca:not([data-menu-listo]) .marca__nav a[href$="a-pedido.html"]{ display:none; }
}

/* El botón, en cualquier ancho: no se ve, y el CSS del teléfono lo prende. */
.marca__abrir{
  display:none; place-items:center;
  width:2.75rem; height:2.75rem; margin-right:-.85rem;
  padding:0; border:0; background:none; cursor:pointer; color:var(--humo);
}

/* ── La punta se da vuelta al abrir ───────────────────────────────────────
   Mira hacia abajo cerrada —hay algo plegado ahí— y sube al abrirse. Media
   vuelta y no un cambio de dibujo: **en este diseño la luz la pone el material
   y lo que responde es el movimiento**, que está escrito en DESIGN.md a
   propósito de las tarjetas que se inclinan y vale igual para un control de
   44 px. Gira sobre su centro con la misma curva que el panel, así que las dos
   cosas son un solo gesto. */
.marca__punta{
  fill:none; stroke:currentColor; stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round;
  transition:transform .38s cubic-bezier(.22,1,.36,1);
}
.marca__abrir[aria-expanded="true"]{ color:var(--laton); }
.marca__abrir[aria-expanded="true"] .marca__punta{ transform:rotate(180deg); }
.marca__abrir:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }

@media (prefers-reduced-motion:reduce){
  .marca__punta,
  .marca[data-menu-listo] .marca__nav{ transition:none; }
}

/* ── El film ───────────────────────────────────────────────────────────
   520vh y no 440: los 80 de más son el tramo que se lleva la OBERTURA para
   irse, y se suman en vez de descontarse del film. Descontándolos, el mismo
   video pasaría en menos scroll y el recorrido se volvería más nervioso —el
   largo del film no es un número decorativo, es cuántos milímetros de dedo
   cuesta cada segundo de imagen—.

   `--salida` es el reparto entre las dos cosas y la escribe scrub.js: 0 con la
   obertura puesta, 1 cuando terminó de irse. Arranca en 0 acá para que sin
   JavaScript la obertura se vea entera, que es el estado que hay que degradar
   bien: la marca y los dos carteles son lo único de esta sección que no
   depende del video. */

.film{ height:520vh; position:relative; background:#000; --salida:0; }
.film__pin{
  position:sticky; top:0; height:100vh; height:100svh;
  overflow:hidden; background:#000;
}
.film__video{ width:100%; height:100%; object-fit:cover; }

/* Velo: el texto de las escenas cae sobre planos que a veces son claros —las
   tomas 3 y 4 son metraje de estudio sobre fondo blanco y la 6 termina en la
   esfera Panda—. Sin esto, esos planos se comen el titular.

   Dos capas. La de abajo es la de siempre: cae de izquierda a derecha y deja
   respirar el centro, que es donde está el reloj. La de arriba cierra el borde
   derecho, que es donde vive el taquímetro; ahí la primera llega sin cuerpo a
   propósito y sobre fondo blanco los números quedaban gris sobre gris. Se
   apoya en el borde y no en el elemento para que se lea como caída de luz y no
   como una mancha detrás de la escala. Sobre los planos negros no se nota. */
/* El velo es lo único que sostiene el texto hueso sobre el film. Está armado
   en tres capas, todas ancladas al encuadre y no a los elementos: un resguardo
   pegado al texto se lee como una mancha que lo sigue, y anclado al cuadro se
   lee como caída de luz.

   La capa de abajo es la que hace el trabajo pesado, y existe porque el edit
   del cliente tiene la mitad de las tomas sobre fondo blanco de estudio. Con
   el velo anterior —pensado para un film casi todo negro— el texto medía
   1,4:1 sobre esas tomas: invisible. Va como banda horizontal pareja y no en
   diagonal porque una diagonal sobre fondo blanco deja al bloque de texto con
   una punta oscura y la otra clara, y eso se lee como suciedad. */
.film__velo{
  position:absolute; inset:0; pointer-events:none;
  background:
    /* El borde derecho, donde vive el taquímetro. */
    linear-gradient(to left,
      rgba(8,10,9,.80) 0%, rgba(8,10,9,.62) 8%,
      rgba(8,10,9,.18) 22%, rgba(8,10,9,0) 34%),
    /* La caída de luz desde el pie: cubre la banda donde se apoyan las
       escenas, de punta a punta del ancho. */
    linear-gradient(to top,
      rgba(8,10,9,.74) 0%, rgba(8,10,9,.70) 20%,
      rgba(8,10,9,.58) 38%, rgba(8,10,9,.22) 54%,
      rgba(8,10,9,0) 68%),
    /* La graduación general, que oscurece el lado del texto. Más liviana que
       antes: con la banda del pie ya no tiene que sostener nada sola. */
    linear-gradient(100deg,
      rgba(8,10,9,.58) 0%, rgba(8,10,9,.42) 34%,
      rgba(8,10,9,.10) 62%, rgba(8,10,9,.30) 100%);
}

/* ── La obertura ──────────────────────────────────────────────────────
   Lo primero que se ve: la marca en el centro, la línea que dice qué es esto,
   y las dos cosas que alguien puede venir a hacer acá. Ocupa la pantalla
   entera y se va con el primer gesto de scroll; el film arranca recién
   después, y hasta entonces está quieto en su primer cuadro.

   Va CENTRADA, que es lo contrario de todo el resto del hero —las escenas se
   apoyan abajo a la izquierda—. No es descuido: son dos momentos distintos.
   La obertura es una portada, y una portada se lee de una; las escenas son
   subtítulos de una película que ya está corriendo, y por eso se corren a un
   costado para no taparla.

   La opacidad no apaga los clics: sin `data-obertura-ida` los dos carteles
   siguen ahí, invisibles, robándose el puntero por el resto del recorrido. */
.obertura{
  position:absolute; inset:0; z-index:3;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:clamp(5rem,13vh,9rem) var(--margen) clamp(3rem,8vh,5rem);
  text-align:center;
  opacity:calc(1 - var(--salida));
  transform:translate3d(0, calc(var(--salida) * -2.75rem), 0);
  will-change:opacity, transform;
}
.film[data-obertura-ida] .obertura{ visibility:hidden; }

/* El resguardo de legibilidad, anclado al ENCUADRE y no al texto — la regla de
   DESIGN.md, y acá hace falta de verdad: el primer cuadro del film es un
   Daytona pulido a contraluz, o sea plata casi blanca justo en el medio, que
   es donde cae la marca.

   Va como BANDA horizontal y no como óvalo en el centro, y esto costó una
   vuelta. El primer intento fue un radial fuerte en el medio: medía precioso
   —13:1— y dejaba la pantalla negra. Lo que el visitante veía primero no era
   un reloj de lujo, era una tarjeta de título sobre nada, y el film del hero
   existe justamente para que lo primero sea el reloj.

   La banda oscurece la franja donde se apoya el texto y deja respirar arriba y
   abajo, que es por donde asoman el cristal y el brazalete. Es la misma
   gramática que la tercera capa de `.film__velo`, y por el mismo motivo: una
   caída de luz se lee como iluminación, una mancha en el medio se lee como
   suciedad. Los cortes están medidos contra el cuadro real — no se eligieron a
   ojo, y si algún día cambia el film hay que volver a medirlos. */
.obertura::before{
  content:''; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:linear-gradient(to bottom,
    rgba(8,10,9,.12) 0%,
    rgba(8,10,9,.34) 18%,
    rgba(8,10,9,.48) 34%,
    rgba(8,10,9,.48) 62%,
    rgba(8,10,9,.28) 80%,
    rgba(8,10,9,.10) 100%);
}

/* El ancho en `ch` es lo que decide dónde corta el nombre en el teléfono:
   «Luciano Torres» son 14 caracteres, así que con el tope en 16 entra entero y
   «Watches» baja solo al renglón siguiente. Partido en cualquier otro lado
   —«Luciano / Torres Watches»— la marca deja de leerse como una firma. Pasado
   los 56rem entra en una línea y el tope se saca. */
.obertura__marca{
  font-size:clamp(2.25rem,7vw,4.5rem);
  line-height:1.06;
  max-width:16ch;
}
.obertura__marca span{ color:var(--laton); }
@media (min-width:56rem){ .obertura__marca{ max-width:none; } }

/* Sobre la foto sube a hueso: en `--humo` el renglón medía 2,8:1 contra el
   cuadro más claro del póster, que es la mitad de lo que pide AA para un
   cuerpo de 13 px. Es el único lugar de la página donde este rótulo va a plena
   opacidad, y la razón es que es el único que se apoya sobre una imagen. */
.obertura__lugar{
  margin-top:clamp(1rem,2.4vh,1.5rem);
  font-size:clamp(.6875rem,1.1vw,.8125rem);
  font-weight:500; letter-spacing:.2em; text-transform:uppercase;
  color:var(--hueso);
}

/* El punto separa las dos mitades en una línea y desaparece cuando se apilan.
   Sin esto, en el teléfono el renglón cortaba después del punto —«…ALTA GAMA ·»
   colgando al final— que es de las pocas cosas que se leen como error de
   maquetado y no como decisión. */
.obertura__lugar span::before{ content:'·'; margin:0 .55em; }
@media (max-width:34rem){
  .obertura__lugar span{ display:block; margin-top:.45em; }
  .obertura__lugar span::before{ content:none; }
}

.obertura__carteles{
  margin-top:clamp(2rem,5.5vh,3.25rem);
  display:flex; flex-wrap:wrap; justify-content:center; gap:.85rem;
}

/* El fantasma, sobre una foto, necesita un trazo que se vea. `--filete` está
   pensado para apoyarse sobre el fondo plano de la página; acá abajo hay un
   video y con esa opacidad el botón desaparece — quedaba una palabra flotando
   al lado de un rectángulo de latón. Es la salvedad de un solo lugar, no un
   cambio del token. */
.obertura .boton--fantasma{
  border-color:rgba(201,164,95,.68);
  background:rgba(8,10,9,.30);
}
.obertura .boton--fantasma:hover{ border-color:var(--laton); background:rgba(8,10,9,.5); }

/* En el teléfono los dos carteles van apilados y del mismo ancho. Uno al lado
   del otro entran, pero quedan del ancho de su texto: «Consultar stock» mide
   más que «Pedir reloj» y la diferencia se lee como que uno importa más que el
   otro. Acá importan lo mismo — son las dos puertas del negocio— y lo que los
   distingue es el relleno de latón, no el tamaño. */
@media (max-width:30rem){
  .obertura__carteles{ flex-direction:column; align-items:stretch; width:min(100%,19rem); }
}

/* ── La pantalla baja: el teléfono acostado ───────────────────────────
   Con 390 px de alto la portada entera no entra, y como vive en un `inset:0`
   con el contenido centrado, lo que sobra se corta por ARRIBA y por abajo: se
   perdía media marca y la pista completa.

   Se corta por prioridad y no achicando todo por igual. Lo que se va es la
   pista —el que está acostado ya está scrolleando, no hay que invitarlo— y lo
   que se achica es la marca, que es lo único que puede ceder tamaño sin dejar
   de ser lo que es. Los dos carteles no se tocan: son el motivo de la portada.

   Se dispara por ALTO y no por ancho: un teléfono acostado y una ventana baja
   en escritorio son el mismo problema. */
@media (max-height:32rem){
  .obertura{ padding-top:clamp(3.75rem,15vh,5rem); padding-bottom:1.25rem; }
  .obertura__marca{ font-size:clamp(1.6rem,5vw,2.5rem); max-width:none; }
  .obertura__lugar{ margin-top:.7rem; }
  .obertura__carteles{ margin-top:1.35rem; }
  .obertura .pista{ display:none; }
}

.escenas{ position:absolute; inset:0; pointer-events:none; }

.escena{
  position:absolute;
  left:var(--margen);
  bottom:clamp(5rem,16vh,9rem);
  max-width:min(46rem,70vw);
  opacity:0; visibility:hidden;
  transform:translateY(26px);
  transition:opacity .5s ease, transform .5s ease, visibility .5s;
  will-change:opacity,transform;
}
.escena[data-activa]{ opacity:1; visibility:visible; transform:none; pointer-events:auto; }

/* Los títulos del hero van un pelo más apretados que el resto: a 72 px, el
   mismo interletrado que funciona a 40 se ve suelto. Se escribe como una RESTA
   sobre el token y no como un número fijo para que la relación se mantenga si
   cambia la tipografía — una serifa de alto contraste pide otro punto de
   partida, pero el hero le sigue quedando más apretado que lo demás. */
.escena h2{
  font-size:clamp(2.15rem,6vw,4.5rem);
  letter-spacing:calc(var(--display-tracking) - .005em);
}
.escena__bajada{
  margin-top:1.15rem; max-width:34ch;
  color:var(--humo); font-size:clamp(.95rem,1.5vw,1.15rem);
}
.escena__bajada strong{ color:var(--hueso); font-weight:600; }
.escena .boton{ margin-top:1.85rem; }

/* La pista vive dentro de la obertura desde que existe, y por eso el trazo se
   paró: apoyada abajo a la izquierda era una raya horizontal que empujaba
   hacia el costado, y ahí no hay nada. Ahora cuelga bajo los carteles y el
   trazo baja, que es para donde hay que ir. `column-reverse` pone el texto
   arriba con el <span> primero en el DOM, que es el orden que corresponde.

   El `padding-left` compensa el interletrado: la última letra arrastra su
   .28em de aire y sin eso el rótulo queda medio carácter corrido a la
   izquierda de los carteles que tiene encima. */
.pista{
  margin-top:clamp(2.5rem,7vh,4.5rem);
  display:flex; flex-direction:column-reverse; align-items:center; gap:.9rem;
  padding-left:.28em;
  font-size:.625rem; font-weight:500; letter-spacing:.28em;
  text-transform:uppercase; color:var(--humo-bajo);
}
.pista span{
  display:block; width:1px; height:2.75rem; background:currentColor;
  transform-origin:top; animation:tirar 2.4s cubic-bezier(.4,0,.2,1) infinite;
}
@keyframes tirar{ 0%,100%{transform:scaleY(.35);opacity:.5} 50%{transform:scaleY(1);opacity:1} }

/* ── Firma: la escala taquimétrica ───────────────────────────────────── */

/* Aparece cuando hay algo que medir, o sea al revés que la obertura: mientras
   la portada está puesta el film no corre, y un instrumento marcando 400 sobre
   una imagen quieta no mide nada — es un adorno con números. */
.taquimetro{
  position:absolute; top:50%; right:var(--margen); transform:translateY(-50%);
  display:flex; align-items:center; gap:1rem; height:17rem; pointer-events:none;
  opacity:var(--salida,1);
}
.taquimetro__unidad{
  font-size:.5625rem; letter-spacing:.3em; text-transform:uppercase;
  color:var(--humo-bajo); writing-mode:vertical-rl;
}
.taquimetro__escala{
  position:relative; list-style:none; margin:0; padding:0;
  height:100%; width:3.5rem; overflow:hidden;
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent);
          mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent);
}
.taquimetro__escala > li{
  position:absolute; right:0; top:50%;
  display:flex; align-items:center; justify-content:flex-end; gap:.5rem;
  width:100%; font-size:.8125rem; font-variant-numeric:lining-nums tabular-nums;
  color:rgba(242,240,234,.72); transition:color .25s ease; will-change:transform;
}
.taquimetro__escala > li::before{
  content:''; width:.5rem; height:1px; background:currentColor; opacity:.7;
}
.taquimetro__escala > li[data-activa]{ color:var(--laton); font-weight:600; }
.taquimetro__escala > li[data-activa]::before{ width:1.35rem; opacity:1; }

/* ── El hero sin movimiento ───────────────────────────────────────────
   Con `prefers-reduced-motion` scrub.js no monta el clip ni engancha nada, así
   que las 5,2 pantallas de recorrido no recorren nada: son cinco pantallas de
   póster quieto que hay que scrollear para llegar al contenido. El hero se
   achica a una y queda la obertura, que es la marca y las dos salidas — la
   misma primera impresión sin el viaje.

   Las escenas se pierden, y ya se perdían antes: nacen escondidas y quien las
   encendía era el scrub. Lo que dicen vive igual más abajo —los servicios, los
   pasos, el cierre—, y lo único que no estaba en ningún otro lado, «Ver el
   stock», ahora lo dice la obertura desde el primer cuadro. */
@media (prefers-reduced-motion:reduce){
  .film{ height:100vh; height:100svh; }
  .taquimetro,.pista{ display:none; }
}

/* ── Marcas ──────────────────────────────────────────────────────────── */


/* ── Servicios ───────────────────────────────────────────────────────── */

.servicios{ padding:var(--ritmo) var(--margen); }

/* ── La vitrina de mármol ────────────────────────────────────────────── */

.vitrina{ position:relative; padding:var(--ritmo) var(--margen); isolation:isolate; }


.vitrina__contenido{
  display:grid; gap:clamp(2.5rem,5vw,4.5rem);
  grid-template-columns:1fr; align-items:center;
  max-width:78rem; margin-inline:auto;
}
@media (min-width:62rem){
  .vitrina__contenido{ grid-template-columns:minmax(0,1fr) minmax(0,1.05fr); }
}

.vitrina__descripcion{ margin-top:1.75rem; max-width:44ch; color:var(--humo); }

.specs{ margin:clamp(2rem,4vh,2.75rem) 0 0; }
.spec{
  display:flex; justify-content:space-between; align-items:baseline;
  gap:1.5rem; padding:.8rem 0; border-top:1px solid var(--filete);
}
.spec:last-child{ border-bottom:1px solid var(--filete); }
.spec > dt{
  font-size:.6875rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--humo-bajo); white-space:nowrap;
}
.spec > dd{ margin:0; text-align:right; font-size:.9375rem; font-variant-numeric:lining-nums tabular-nums; }
.spec--ref{ border-top:1px solid var(--laton); }
.spec--ref > dd{ color:var(--daytona); font-size:1.15rem; font-weight:600; letter-spacing:.01em; }

.vitrina__salvedad{
  margin-top:1.5rem; max-width:42ch;
  font-size:.8125rem; line-height:1.8; color:var(--humo-bajo);
}
.vitrina__acciones{ display:flex; flex-wrap:wrap; gap:.85rem; margin-top:2.25rem; }

.vitrina__figura{ margin:0; }
/* El póster es el reloj sobre negro y hay que fundirlo en la piedra sin que se
   lea como un rectángulo pegado encima.

   Se probó con `mix-blend-mode: screen`: funde el negro perfecto, pero le pasa
   el verde de la piedra a la esfera, y un Panda con esfera verde es un reloj
   que no existe. En una página cuyo argumento es la autenticidad, eso es
   inaceptable.

   La máscara radial hace el mismo trabajo sin tocar un solo color: los bordes
   se desvanecen en el mármol y el centro conserva la pieza tal cual es. */
.vitrina__figura{ position:relative; }
.vitrina__figura::before{
  content:''; position:absolute; inset:6% 2% 14%;
  background:radial-gradient(56% 44% at 50% 50%, rgba(150,190,168,.16), transparent 72%);
  pointer-events:none;
}
.vitrina__figura img{
  position:relative; width:100%; height:auto;
  -webkit-mask-image:radial-gradient(66% 62% at 50% 50%, #000 46%, transparent 82%);
          mask-image:radial-gradient(66% 62% at 50% 50%, #000 46%, transparent 82%);
}
.vitrina__figura figcaption{
  margin-top:.9rem; font-size:.75rem; line-height:1.7; color:var(--humo-bajo);
}

/* ── Pasos ───────────────────────────────────────────────────────────── */
/* ⚠ `.paso` ES DE ACÁ: son los cuatro pasos de «cómo se compra», y las cuatro
   reglas de abajo caen sobre cualquier elemento que lleve esa clase.

   El 2026-08-21 la escena del contacto se llamó `.paso` también, y las dos
   secciones se rompieron en direcciones opuestas sin que ninguna diera error:
   acá cada `<li>` pasó a medir 300vh —la sección quedó con un agujero de tres
   pantallas— y allá los formularios heredaron el filete de arriba y el
   `max-width:34ch` de estos párrafos. Esa escena se llamó `.relevo` después,
   y desde el 2026-10-06 ya no existe.

   Antes de estrenar un nombre de bloque, buscalo en este archivo. Una clase
   repetida no falla: pinta de más, en los dos sentidos. */

.pasos{ padding:var(--ritmo) var(--margen); }
.pasos__lista{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(2rem,4vw,3.5rem); grid-template-columns:1fr;
}
@media (min-width:52rem){ .pasos__lista{ grid-template-columns:repeat(3,1fr); } }

.paso{ border-top:1px solid var(--filete); padding-top:1.5rem; }
.paso__n{
  display:block; font-family:var(--display); font-weight:var(--display-peso); font-size:1.35rem;
  color:var(--laton); margin-bottom:1rem; font-variant-numeric:lining-nums tabular-nums;
}
.paso h3{ font-size:clamp(1.2rem,2vw,1.5rem); margin-bottom:.85rem; }
.paso p{ color:var(--humo); font-size:.9375rem; max-width:34ch; }


/* ── Testimonios ─────────────────────────────────────────────────────────
   Reemplazó a la tabla de posiciones el 2026-08-20. Aquélla era una lista de
   nombres con montos y nunca tuvo datos: tres marcadores desde el día que se
   escribió, y para llenarla había que publicar cuánto gastó cada cliente, que
   es justo lo que un comprador de un reloj así no quiere que se publique.

   Esta se llena sola con las reseñas aprobadas. La escribe `testimonios.js`;
   el marcado del HTML es sólo la cabecera, la lista vacía y la invitación.

   ── La foto manda, y por eso la tarjeta es una columna ──────────────────
   Foto arriba y texto debajo, no uno al lado del otro: lo que convence es ver
   el reloj en la muñeca de alguien, y el texto es la leyenda de esa foto. Es
   la misma decisión que la revista toma en `reloj--columna`.

   Las reseñas sin foto entran igual —la foto es opcional en el formulario— y
   ahí la tarjeta es sólo el texto. Por eso el alto no está fijado: una fila
   con y sin foto se empareja sola por la grilla. */

.testimonios{ padding:var(--ritmo) var(--margen); }
/* Una columna en el celular, y desde tablet, mampostería ────────────────
   En la portada era un carrusel horizontal: ahí era una sección de prueba
   social entre otras, y tres tarjetas apiladas eran tres pantallas de scroll.
   Desde el 2026-10-05 tienen página propia, y en una página que existe para
   leer reseñas bajar ES el recorrido: un carrusel escondía todas menos una.

   `columns` apila cada tarjeta debajo de la anterior sin alinear filas, que es
   lo que hace que un muro de fotos se lea como un muro y no como una tabla.
   Una grilla, en cambio, estira la fila entera hasta la tarjeta más alta y deja
   aire muerto abajo de las otras — y con fotos de proporción libre, que las
   manda el cliente desde el teléfono, eso se ve como una plantilla rota.

   El costo de `columns` hay que conocerlo: **el orden pasa a ser vertical**, se
   lee hacia abajo por columna. Para testimonios da igual —ninguno depende del
   anterior—; para una lista de pasos sería un error. */
.testimonios__lista{
  list-style:none; margin:0 auto; padding:0; max-width:30rem;
  column-gap:clamp(1rem,2.5vw,1.5rem);
}

.testimonio{
  break-inside:avoid;          /* que una tarjeta no se parta entre columnas */
  margin:0 0 clamp(1rem,2.5vw,1.5rem);
  background:var(--superficie); border:1px solid var(--filete);
  border-radius:3px; overflow:hidden;
}

/* Nunca más columnas que reseñas. Con tres y un muro de cuatro, la cuarta
   quedaba vacía y el muro se recostaba a la izquierda como si faltara algo.
   `--cuantas` lo pone `testimonios.js`; el ancho tope crece con las columnas,
   así que con pocas el muro se angosta y queda centrado. */
@media (min-width:40rem){
  .testimonios__lista{
    columns:min(2, var(--cuantas, 2));
    max-width:calc(min(2, var(--cuantas, 2)) * 20rem);
  }
}
@media (min-width:64rem){
  .testimonios__lista{
    columns:min(3, var(--cuantas, 3));
    max-width:calc(min(3, var(--cuantas, 3)) * 20rem);
  }
}

/* Cuatro columnas recién acá, y no antes, porque el techo de nitidez de estas
   fotos son los ~380 px del recorte original: mostradas más grandes se ven
   blandas. Más columnas = tarjeta más chica = foto más nítida. */
@media (min-width:80rem){
  .testimonios__lista{
    columns:min(4, var(--cuantas, 4));
    max-width:calc(min(4, var(--cuantas, 4)) * 20rem);
  }
}

/* La foto manda y la ficha se le acomoda: sin `aspect-ratio` y sin recorte, la
   imagen entra con la proporción que tenga. Es lo que le da al muro las alturas
   distintas; forzarlas a todas a 4:3 devolvía la grilla de antes con otro
   nombre. */
/* Sin `line-height:0` acá: el hueco que dejan las imágenes en línea ya lo mata
   el `display:block` de abajo, y puesto en la figura cascadea al nombre y a la
   pieza —que viven adentro— y los deja con altura cero. Se veía el aro de la
   inicial y nada al lado. */
.testimonio__foto{
  position:relative; margin:0; background:var(--fondo);
}
.testimonio__foto img{
  width:100%; height:auto; display:block;
}

/* El degradado existe para que el nombre se lea, no de adorno: encima de una
   foto cualquiera —una esfera blanca, un cielo— el texto claro desaparece. Va
   sólo arriba, que es donde está el texto, y no cubre la foto entera. */
.testimonio__velo{
  position:absolute; inset:0 0 auto; height:45%;
  background:linear-gradient(to bottom, rgba(6,12,9,.78), rgba(6,12,9,0));
  pointer-events:none;
}
.testimonio__identidad{
  position:absolute; top:0; left:0; right:0;
  display:flex; align-items:flex-start; gap:.65rem;
  padding:.85rem .95rem;
}
/* La inicial en un aro de latón hace de retrato. No hay fotos de perfil —nadie
   sube una para dejar una reseña— y poner una genérica sería inventar una cara
   que no existe. */
.testimonio__inicial{
  flex:none; width:2rem; height:2rem; border-radius:50%;
  display:grid; place-items:center;
  border:1px solid var(--laton); color:var(--laton);
  background:rgba(6,12,9,.45);
  font-family:var(--display); font-size:.9rem; line-height:1;
}
.testimonio__quien{ display:flex; flex-direction:column; gap:.1rem; min-width:0; }

.testimonio__texto{
  display:flex; flex-direction:column; gap:.7rem;
  padding:1rem 1.05rem 1.15rem;
}

/* El puntaje, en estrellas, las mismas del formulario: desde el 2026-10-06
   el que deja una reseña elige estrellas, y tiene que ver publicadas las
   mismas que eligió. Antes eran muescas cuadradas. El `role="img"` con su
   etiqueta lo dice en palabras a quien no las ve. */
.testimonio__puntaje{ display:flex; gap:.15rem; margin:0; }
.puntaje-marca{
  width:1rem; height:1rem;
  fill:transparent; stroke:var(--laton); stroke-width:1.4; stroke-linejoin:round;
}
.puntaje-marca--llena{ fill:var(--laton); }

.testimonio__cita{
  margin:0; font-size:1rem; line-height:1.55; color:var(--hueso);
}
.testimonio__nombre{
  font-family:var(--display); font-weight:var(--display-peso); font-size:1rem;
  color:var(--hueso); text-shadow:0 1px 3px rgba(0,0,0,.55);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
/* La pieza envuelve en vez de cortarse: es el dato que dice qué compró esa
   persona, y «Omega Speedmaster Professi…» no lo dice. El nombre sí se corta —
   es una etiqueta, no información— y así uno largo no empuja la tarjeta. */
.testimonio__pieza{
  font-size:.75rem; letter-spacing:.1em; text-transform:uppercase;
  line-height:1.35; color:var(--laton); text-shadow:0 1px 3px rgba(0,0,0,.55);
}

/* La tarjeta sin foto no tiene dónde apoyar el nombre, así que lo baja al
   cuerpo. Sin esto el nombre queda flotando sobre el fondo de la tarjeta con
   una sombra que no corresponde. */
.testimonio--sin-foto .testimonio__identidad{ position:static; padding:0; }
.testimonio--sin-foto .testimonio__nombre,
.testimonio--sin-foto .testimonio__pieza{ text-shadow:none; }
.testimonio--sin-foto .testimonio__texto{ padding-top:0; }

.testimonios__invitacion{ margin:clamp(2rem,4vw,3rem) 0 0; text-align:center; }
.testimonios__vacio{ max-width:36ch; margin:0 auto; text-align:center; color:var(--humo); }

/* Los dos bloques de la página —fotos con clientes y reseñas— con un rótulo
   chico cada uno. El título grande ya es «Testimonios.»: otro igual de grande
   abajo competiría con él. */
.testimonios__subtitulo{
  margin:clamp(2.5rem,6vw,4rem) 0 clamp(1.25rem,3vw,2rem); text-align:center;
  font-family:inherit; font-weight:400; font-size:.8rem;
  letter-spacing:.24em; text-transform:uppercase; color:var(--laton);
}
.testimonios__cabecera + .testimonios__subtitulo{ margin-top:0; }

/* Las fotos con clientes. La foto es la tarjeta entera y la leyenda va
   encima, sobre un velo que oscurece sólo la mitad de abajo: la referencia que
   pasó el cliente el 2026-10-05. Todas son verticales de teléfono, así que
   una grilla pareja sirve, y con pocas fotos se angosta y queda centrada. */
.clientes{
  list-style:none; margin:0 auto; padding:0;
  display:grid; gap:clamp(1rem,2.5vw,1.5rem);
  grid-template-columns:repeat(auto-fit, minmax(min(100%, 16rem), 22rem));
  justify-content:center;
}
.cliente{ margin:0; }
.cliente__figura{
  position:relative; margin:0; aspect-ratio:3 / 4; overflow:hidden;
  border:1px solid var(--filete); border-radius:6px; background:var(--superficie);
}
.cliente__figura img{
  display:block; width:100%; height:100%; object-fit:cover;
}
/* El velo va en la leyenda y no en la foto: así crece con el texto y una
   leyenda de tres renglones nunca queda sobre la parte clara de la foto. */
.cliente__leyenda{
  position:absolute; inset:auto 0 0 0;
  padding:clamp(4rem,10vw,6rem) clamp(1.1rem,3vw,1.5rem) clamp(1.1rem,3vw,1.5rem);
  background:linear-gradient(to top, rgb(8 11 9 / .92) 0%, rgb(8 11 9 / .75) 45%, transparent 100%);
  color:var(--hueso);
}
.cliente__leyenda::before{
  content:''; display:block; width:2rem; height:1px; margin-bottom:.9rem;
  background:var(--laton);
}
.cliente__texto{
  margin:0; font-size:clamp(1.1rem,1.6vw,1.25rem); line-height:1.35;
  text-wrap:balance;
}
.cliente__quien{
  margin:.6rem 0 0; font-size:.95rem; color:rgb(242 240 234 / .75);
}
.cliente__quien span,
.cliente__quien a{ color:var(--laton); white-space:nowrap; }   /* «Atlético / Mineiro» partido no se lee como un nombre */
.cliente__quien a{ text-decoration:none; }
.cliente__quien a:hover{ text-decoration:underline; text-underline-offset:.2em; }
.cliente__quien a:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; border-radius:2px; }

/* ── Cierre ──────────────────────────────────────────────────────────── */

.cierre{ position:relative; padding:calc(var(--ritmo) * 1.15) var(--margen); isolation:isolate; }
.cierre__contenido{ max-width:56rem; margin-inline:auto; text-align:center; }
.cierre__bajada{
  margin:1.75rem auto 0; max-width:48ch; color:var(--humo);
  font-size:clamp(1rem,1.5vw,1.15rem);
}
/* Una frase de 49 caracteres contra un ancho de lectura de 48: partía justo
   antes de la última palabra y dejaba «inmediato.» solo en el segundo renglón.
   Se le suelta el tope y entra entera. En el teléfono parte igual, y ahí está
   bien que parta — lo que no se quiere es el renglón huérfano en una pantalla
   que tiene lugar de sobra. */
.cierre__bajada--renglon{ max-width:none; }

/* El plazo, un escalón por debajo de la bajada. Es un dato de operación, no
   parte del ofrecimiento: se dice una vez, en letra más chica, y no compite
   con el pedido de arriba ni con el botón de abajo. Va en `--humo-bajo` por
   el mismo motivo — el mismo gris que usan los pies de foto de la revista. */
.cierre__plazo{
  margin:.6rem auto 0; color:var(--humo-bajo);
  font-size:clamp(.8125rem,1.1vw,.9rem);
}
.cierre .boton{ margin-top:2.5rem; }

/* ── WhatsApp fijo ───────────────────────────────────────────────────── */

/* La etiqueta se despliega con grid-template-columns 0fr->1fr en vez de
   max-width: anima sin tocar el layout, que es lo que provoca los tirones. */

.stock{ position:relative; padding:var(--ritmo) var(--margen) calc(var(--ritmo) * .7); isolation:isolate; }

/* El catálogo respira más ancho que el resto de la página. `--margen` llega a
   6rem por lado, que es lo correcto para una columna de texto y demasiado para
   una grilla de tres fichas horizontales: con ese margen la tercera columna
   queda angosta y los datos de cada ficha empiezan a partirse en dos renglones.
   Acá la pieza es el contenido, así que el margen se achica y la grilla ocupa
   casi todo el ancho. */
@media (min-width:78rem){
  .stock{ padding-inline:clamp(1.5rem, 3vw, 3.25rem); }
}

/* Centrada, porque el título de esta página es una frase entera y no un
   rótulo. Una frase larga alineada a la izquierda arrastra la mirada al margen
   y deja el resto de la pantalla vacío; centrada se lee como lo que es, que es
   la promesa con la que se entra al catálogo. */
.stock__cabecera,
.testimonios__cabecera{
  max-width:52rem; margin-inline:auto; text-align:center;
  margin-bottom:clamp(2rem,4vw,3rem);
}

/* La explicación del título, un escalón abajo. El título dice la promesa y
   esto dice cómo se cumple: separados, cada uno puede tener el tamaño que le
   toca. Juntos en un solo `h1` había que achicar la promesa para que entrara
   la explicación. */
.stock__bajada,
.testimonios__bajada{
  margin:1.25rem auto 0; max-width:46ch; color:var(--humo);
  font-size:clamp(1rem,1.5vw,1.15rem);
}
/* La de testimonios es una sola frase y se lee mejor en un renglón: sin el
   tope de 46ch entra entera en cualquier pantalla de compu. En el teléfono no
   entra, y ahí `balance` la parte en dos mitades parejas en vez de dejar una
   palabra sola abajo. */
.testimonios__bajada{ max-width:none; text-wrap:balance; }

/* ── Los campos de filtro ─────────────────────────────────────────────
   Viven en el cajón de la página de stock. Sin marcos alrededor: lo que tiene
   que leerse de un filtro es su VALOR, y un control enmarcado se lee igual en
   una tienda de zapatillas que acá. El cajón les saca además los filetes que
   los separaban cuando eran una barra horizontal. */

/* Uno debajo del otro, sin marcos ni filetes que los separen: lo que tiene que
   leerse de un filtro es su contenido.

   El `flex:0 0 auto` no es de más. Estos campos vivieron en una barra
   horizontal donde los tres se repartían el ancho con `flex-grow`, y en una
   columna ese mismo crecer se aplica a lo ALTO: cada campo se estiraba hasta
   llenar el panel y quedaban doscientos píxeles de aire entre uno y otro. */
.campo{
  flex:0 0 auto; min-width:0;
  border:0; padding:0; margin:0;
  display:flex; flex-direction:column; gap:.5rem;
}

/* El título de cada filtro se prolonga en un filete hasta el borde, como el
   renglón grabado de una placa. El `width:100%` no es de más: un <legend> se
   encoge al ancho de su texto, y sin eso el filete no tiene contra qué
   estirarse. */
/* .75rem y no .625: a 10 px, en versalitas y con .22em de espaciado, «MARCAS»
   dejaba de ser una palabra y pasaba a ser una textura. El espaciado que la
   hace parecer un rótulo es justamente el que la vuelve ilegible cuando el
   cuerpo es chico, así que si se quiere el espaciado hay que pagar el cuerpo. */
.campo__etiqueta{
  display:flex; align-items:center; gap:.7rem; width:100%;
  font-size:.75rem; font-weight:600; letter-spacing:.18em;
  text-transform:uppercase; color:var(--laton);
}
.campo__etiqueta::after{
  content:''; flex:1 1 auto; height:1px; background:var(--filete);
}
/* ── La grilla ───────────────────────────────────────────────────────── */

.grilla{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(1.25rem,2.5vw,2rem);
  grid-template-columns:1fr;
}
@media (min-width:38rem){ .grilla{ grid-template-columns:repeat(2,1fr); } }
@media (min-width:66rem){ .grilla{ grid-template-columns:repeat(3,1fr); } }


.vacio h2{ font-size:clamp(1.3rem,2.5vw,1.75rem); margin-bottom:.85rem; }
.vacio p{ max-width:44ch; margin-inline:auto; color:var(--humo); }
.vacio__acciones{
  display:flex; flex-wrap:wrap; gap:.85rem; justify-content:center; margin-top:2rem;
}

/* ── El mismo vacío, ocupando una página entera ───────────────────────────
   El 404. Es el vacío del catálogo con dos cambios y ninguno es de estilo:

   · **Centra el texto.** Adentro del catálogo el vacío hereda la alineación de
     la sección y el `margin-inline:auto` del párrafo alcanza. Solo en la
     página no hereda nada, y un título a la izquierda con los botones
     centrados abajo se lee como dos bloques distintos.
   · **Se planta en el medio de la pantalla.** `100dvh` y no `100vh`: en el
     teléfono la barra del navegador se come la diferencia y el bloque queda
     empujado abajo del pliegue, que en la única pantalla que tiene esta página
     es todo lo que hay.

     Y `100dvh` entero, sin restarle la cabecera: `.marca` es `position:absolute`,
     así que no ocupa lugar en el flujo y restarle su alto dejaba el bloque 70 px
     arriba del centro con una franja muerta abajo. Lo que sí hace falta es el
     `padding-top` de 6rem, que es lo que evita que en una pantalla baja
     —un teléfono acostado— el título se meta debajo del nombre de la marca.

   Ese `dvh` es la misma corrección que ya está en el hero. Va acá otra vez
   porque son dos cajas distintas, no por copiar. */
.vacio--pagina{
  min-height:100dvh;
  display:flex; flex-direction:column; justify-content:center; align-items:center;
  text-align:center; padding:6rem var(--margen) var(--ritmo);
}
.vacio--pagina .titulo{ margin:0 0 1.25rem; }
.vacio--pagina p{ max-width:46ch; }

/* El número va de rótulo, no de titular: si «404» se dice grande, la pantalla
   informa un código de protocolo a alguien que sólo quería ver un reloj. El
   dato que importa es la frase de abajo. Mismo tratamiento que las etiquetas
   de los filtros — versalitas, latón y un filete al costado — porque es lo
   mismo que son: la etiqueta de lo que estás mirando. */
/* Va calificado con `.vacio--pagina` a propósito y no por prolijidad: `.vacio p`
   pinta de humo TODO párrafo del bloque, y con una sola clase le ganaba a este
   por especificidad — el número salía gris y la regla de abajo no hacía nada. */
.vacio--pagina .vacio__codigo{
  margin:0 0 1.1rem;
  font-size:.75rem; font-weight:600; letter-spacing:.22em;
  text-transform:uppercase; color:var(--laton);
}


/* ═══════════════════════════════════════════════════════════════════════
   El mármol

   Acá y sólo acá. Es la losa de fondo de la foto del reloj, que es donde el
   cliente lo usa en su página. Dos variantes, como en su material: blanca de
   vetas grises, y negra de vetas claras.
   ═══════════════════════════════════════════════════════════════════════ */

.marmol{ position:relative; overflow:hidden; }

.marmol--blanco{
  background:
    var(--vetas-anchas),
    var(--vetas),
    linear-gradient(150deg,#FBFAF8 0%,#EFEDE8 44%,#E2DFD8 100%);
  background-size:1400px 1400px, 700px 700px, auto;
  background-blend-mode:soft-light, overlay, normal;
}
.marmol--negro{
  background:
    var(--vetas-anchas),
    var(--vetas),
    linear-gradient(150deg,#1C1C1C 0%,#0B0B0B 50%,#161616 100%);
  background-size:1400px 1400px, 700px 700px, auto;
  background-blend-mode:soft-light, overlay, normal;
}

/* ═══════════════════════════════════════════════════════════════════════
   Tarjeta de pieza — la usan los destacados y el stock
   ═══════════════════════════════════════════════════════════════════════ */

.piezas{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(.85rem,1.5vw,1.25rem); grid-template-columns:1fr;
}
@media (min-width:34rem){ .piezas{ grid-template-columns:repeat(2,1fr); } }
@media (min-width:56rem){ .piezas{ grid-template-columns:repeat(3,1fr); } }
@media (min-width:78rem){ .piezas{ grid-template-columns:repeat(4,1fr); } }

.pieza{
  display:flex; flex-direction:column;
  background:var(--superficie);
  border:1px solid var(--filete);
  border-radius:14px; overflow:hidden;
  transition:border-color .25s ease, transform .25s ease;
}
.pieza:hover{ border-color:var(--laton); transform:translateY(-3px); }

.pieza__losa{
  position:relative; aspect-ratio:4/5;
  display:grid; place-items:center;
}
.pieza__foto{ width:100%; height:100%; object-fit:cover; }

/* La losa de mármol sola dice que la pieza existe y que la foto todavía no
   llegó, que es la verdad. Un hueco gris al lado de tarjetas con foto se lee
   como que la página se rompió. (Patrón tomado de la tarjeta de Muvo.) */
.pieza__sinfoto{
  font-size:.6875rem; letter-spacing:.18em; text-transform:uppercase;
  color:rgba(0,0,0,.42);
}
.marmol--negro .pieza__sinfoto{ color:rgba(255,255,255,.42); }

.pieza__precio{
  position:absolute; left:.7rem; top:.7rem;
  padding:.32rem .7rem; border-radius:999px;
  background:var(--laton); color:#1A1408;
  font-size:.75rem; font-weight:700; letter-spacing:.02em;
  font-variant-numeric:lining-nums tabular-nums;
}

.pieza__cuerpo{ display:flex; flex-direction:column; flex:1; padding:1rem; }
.pieza__modelo{ font-size:1.05rem; margin-bottom:.5rem; line-height:1.15; }

/* El año sale de la planilla y es opcional: en alta gama mueve el precio, pero
   una ficha que dice "Año —" informa menos que una que no lo menciona. Por eso
   la línea no existe cuando el dato no está, en vez de existir vacía. */
.pieza__anio{ font-size:.75rem; color:var(--humo); margin:0 0 .5rem; }
.pieza__desc{
  font-size:.8125rem; line-height:1.6; color:var(--humo);
  /* Tres renglones y corta: en una grilla de cuatro, una descripción larga
     estira su tarjeta y desalinea la fila entera. */
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical;
  overflow:hidden;
}

.pieza__estado{
  display:flex; align-items:center; gap:.5rem;
  margin:.85rem 0 .95rem;
  font-size:.6875rem; font-weight:600; letter-spacing:.12em;
  text-transform:uppercase; color:var(--laton);
}
.pieza__estado span{
  width:.45rem; height:.45rem; border-radius:50%;
  background:var(--laton); flex:none;
}

.pieza__cta{ margin-top:auto; width:100%; gap:.5rem; padding:.7rem 1rem; font-size:.875rem; }


/* Destacados dentro del stock: una vidriera arriba, el catálogo abajo. */
.destacados{ margin-bottom:clamp(3rem,6vw,4.5rem); }
.destacados__titulo{
  font-size:clamp(1.15rem,2vw,1.5rem); margin-bottom:1.5rem;
  padding-bottom:.85rem; border-bottom:1px solid var(--filete);
}
.stock__separador{ margin-bottom:1.5rem; }
.stock__subtitulo{ font-size:clamp(1.15rem,2vw,1.5rem); }

/* ── Servicios: lista, no tarjetas ─────────────────────────────────────
   Cuatro tarjetas iguales de título y párrafo son el contenedor perezoso.
   Una lista con filetes se lee como lo que es: un menú de servicios. */
.servicios__lista{ margin:0; border-top:1px solid var(--filete); }
.servicio{
  display:grid; gap:.5rem 3rem; grid-template-columns:1fr;
  padding:clamp(1.5rem,3vw,2.25rem) 0;
  border-bottom:1px solid var(--filete);
}
@media (min-width:48rem){
  .servicio{ grid-template-columns:minmax(0,14rem) minmax(0,1fr); align-items:baseline; }
}
.servicio > dt{
  font-family:var(--display); font-weight:var(--display-peso); font-size:clamp(1.3rem,2.4vw,1.75rem);
  color:var(--hueso);
}
.servicio > dd{ margin:0; color:var(--humo); max-width:56ch; }

/* ═══════════════════════════════════════════════════════════════════════
   El pie
   ═══════════════════════════════════════════════════════════════════════ */

.pie{ border-top:1px solid var(--filete); }

/* ── La cinta de marcas ──────────────────────────────────────────────────
   Con los logos, no con los nombres. Vive en el pie: es la prueba del
   catálogo, no el argumento de venta. */
.pie__marcas{ padding:clamp(2rem,4vh,3rem) 0; border-bottom:1px solid var(--filete); overflow:hidden; }
.cinta{ display:flex; width:max-content; animation:desfilar 62s linear infinite; }
.cinta__lista{
  display:flex; align-items:center; gap:clamp(3.5rem,8vw,7rem);
  list-style:none; margin:0; padding:0 clamp(1.5rem,3.5vw,3rem);
}
.cinta__lista img{
  height:clamp(3.5rem,7vw,5.25rem); width:auto; object-fit:contain;
  opacity:.92; filter:grayscale(1) brightness(2.1) contrast(1.2);
  transition:opacity .25s ease;
}
.cinta__lista img:hover{ opacity:1; }

@keyframes desfilar{ from{transform:translateX(0)} to{transform:translateX(-50%)} }

.pie__cierre{
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:1.5rem 2rem; padding:clamp(2rem,4vh,2.75rem) var(--margen);
}
.pie__lugar{ font-size:.9375rem; line-height:1.8; }
.pie__copy{
  display:block; margin-bottom:.35rem;
  font-size:.75rem; color:var(--humo-bajo);
}
.pie__lugar span{ color:var(--humo); }

/* ── Redes ───────────────────────────────────────────────────────────── */

.redes{ display:flex; align-items:center; gap:.75rem; }
.red, .redes__hueco{
  width:2.85rem; height:2.85rem; border-radius:999px; flex:none;
}
.red{
  display:grid; place-items:center;
  color:var(--hueso); border:1px solid var(--filete);
  transition:border-color .2s ease, color .2s ease;
}
.red:hover{ border-color:var(--laton); color:var(--laton); }
/* El hueco le guarda el lugar al botón de WhatsApp cuando aterriza. */
.redes__hueco{ display:block; }

/* ═══════════════════════════════════════════════════════════════════════
   El botón flotante de WhatsApp

   Abajo a la derecha. Aterriza en el pie, al lado de Instagram, con un
   translate — nunca cambia de position, porque el salto entre sistemas de
   coordenadas no se puede animar sin un frame de parpadeo.
   ═══════════════════════════════════════════════════════════════════════ */

.wa-fijo{
  position:fixed; right:var(--margen); bottom:clamp(1.25rem,4vh,2.25rem); z-index:20;
  display:inline-flex; align-items:center; gap:.6rem;
  padding:.85rem 1.35rem .85rem 1rem;
  background:var(--hueso); color:var(--tinta); text-decoration:none;
  border:1px solid transparent; border-radius:999px;
  box-shadow:0 10px 34px rgba(0,0,0,.5);
  opacity:0; visibility:hidden;
  transition:opacity .3s ease, visibility .3s,
             transform .55s cubic-bezier(.22,1,.36,1),
             padding .35s ease, background-color .3s ease,
             color .3s ease, border-color .3s ease, box-shadow .4s ease;
}
.wa-fijo[data-visible]{ opacity:1; visibility:visible; }

.wa-fijo__texto{
  display:grid; grid-template-columns:1fr; overflow:hidden;
  font-size:.9375rem; font-weight:600; white-space:nowrap;
  transition:grid-template-columns .35s cubic-bezier(.22,1,.36,1);
}
.wa-fijo__texto > span{ overflow:hidden; min-width:0; }

/* Aterrizado: se apaga la etiqueta, se achica a rueda y toma el aspecto de
   los otros íconos de red para que la fila se lea pareja. */
.wa-fijo[data-aterrizado]{
  padding:0; gap:0;
  width:2.85rem; height:2.85rem;
  justify-content:center;
  background:transparent; color:var(--hueso);
  border-color:var(--filete); box-shadow:none;
}
.wa-fijo[data-aterrizado] .wa-fijo__texto{ grid-template-columns:0fr; }
.wa-fijo[data-aterrizado]:hover{ border-color:var(--laton); color:var(--laton); }

/* ── En el teléfono va chico siempre ──────────────────────────────────
   Sin etiqueta y en rueda, del mismo tamaño que el del pie. Desplegado ocupaba
   un tercio del ancho de la pantalla y se comía el «Ver en el stock» de la
   ficha que estuviera abajo.

   Lo único que NO se copia del pie es el relleno: flotando, el botón pasa por
   encima de las fotos de mármol blanco, y ahí un ícono hueso sobre fondo
   transparente desaparece. Mantiene el fondo hasta que aterriza, y recién en el
   pie —donde el fondo es la página y no una foto— toma el aspecto de los otros
   íconos de red. */
@media (max-width:48rem){
  .wa-fijo{
    padding:0; gap:0;
    width:2.85rem; height:2.85rem;
    justify-content:center;
  }
  .wa-fijo .wa-fijo__texto{ grid-template-columns:0fr; }
}

@media (prefers-reduced-motion:reduce){
  .wa-fijo{ transition:opacity .01ms, visibility .01ms; }
}

/* ═══════════════════════════════════════════════════════════════════════
   El material del fondo

   Tres tratamientos, los tres en CSS puro y en una capa fija detrás del
   contenido — el material no scrollea, como no scrollea la mesa sobre la que
   se apoya un reloj. Se cambian con la clase en <html>.

   PROVISORIO: el selector de abajo es para elegir. Cuando esté decidido, se
   fija la clase ganadora en el <html>, se borran las otras dos y se saca
   fondos.js del HTML.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── El guillochado ───────────────────────────────────────────────────
   El grabado de las esferas de alta relojería: ondas finas hechas a torno.
   El patrón se enmascara con un charco de luz, así aparece sólo donde ésta
   cae — como una esfera lacada bajo una lámpara. */
.material{
  position:fixed; inset:0; z-index:-2; pointer-events:none;
  background:var(--fondo);
  /* La lámpara viaja con el scroll. fondo.js escribe estas dos. */
  --lx:68%; --ly:18%;
}
.material::after{ content:''; position:absolute; inset:0; }

/* ── 1 · Guillochado ──────────────────────────────────────────────────
   El grabado de las esferas de alta relojería, y ahora es un grabado concreto:
   **tapisserie**, la cuadrícula de pirámides diminutas de la esfera del Royal
   Oak — que es el reloj que se ve en el film de la portada.

   Antes eran anillos concéntricos, y tenían un problema que no era de gusto:
   `repeating-radial-gradient(circle at …)` dibuja un centro, y ese ojo de buey
   flotando sobre la página no corresponde a nada. Una esfera guillochada
   entera tiene centro; un fondo que es sólo un pedazo de superficie, no.

   Sacarlo además abarata el scroll. --lx/--ly movían el patrón Y la máscara,
   así que cada cuadro repintaba el degradado entero; ahora el patrón es fijo y
   lo único que viaja es el charco de luz.

   Las pirámides se arman con dos pares de líneas: una clara arriba y a la
   izquierda de cada celda, una oscura abajo y a la derecha. Es el mínimo que
   hace que una cuadrícula plana se lea como relieve. */
.material::after{
  --celda:15px;
  background:
    /* la cara iluminada de cada pirámide */
    repeating-linear-gradient(90deg,
      rgba(255,255,255,.055) 0 1px, transparent 1px var(--celda)),
    repeating-linear-gradient(0deg,
      rgba(255,255,255,.045) 0 1px, transparent 1px var(--celda)),
    /* la cara en sombra, contra el borde opuesto de la misma celda */
    repeating-linear-gradient(90deg,
      transparent 0 calc(var(--celda) - 1px), rgba(0,0,0,.34) calc(var(--celda) - 1px) var(--celda)),
    repeating-linear-gradient(0deg,
      transparent 0 calc(var(--celda) - 1px), rgba(0,0,0,.30) calc(var(--celda) - 1px) var(--celda)),
    /* el pulido en diagonal, muy por debajo del resto: es lo que evita que la
       cuadrícula se lea como una hoja cuadriculada y no como metal */
    repeating-linear-gradient(38deg,
      rgba(255,255,255,.018) 0 1px, transparent 1px 9px);
  -webkit-mask-image:radial-gradient(78% 62% at var(--lx) var(--ly), #000 4%, transparent 78%);
          mask-image:radial-gradient(78% 62% at var(--lx) var(--ly), #000 4%, transparent 78%);
}


/* ── Los dos caminos del paso 2 ───────────────────────────────────────
   Se integran dentro del paso en vez de abrir una sección: son una
   bifurcación de un trámite, no un tema aparte. La letra en un círculo de
   latón alcanza para marcar la elección sin robarle jerarquía al paso. */
.caminos{ margin:1.15rem 0 0; display:grid; gap:.85rem; }

.camino{
  padding-top:.85rem;
  border-top:1px solid var(--filete);
}
.camino > dt{
  display:flex; align-items:center; gap:.55rem;
  font-size:.9375rem; font-weight:600; color:var(--hueso);
}
.camino__letra{
  display:grid; place-items:center; flex:none;
  width:1.35rem; height:1.35rem; border-radius:999px;
  background:var(--laton); color:#1A1408;
  font-size:.6875rem; font-weight:700;
}
.camino > dd{ margin:.35rem 0 0; font-size:.875rem; color:var(--humo); }
.camino__medios{
  display:block; margin-top:.4rem;
  font-size:.75rem; letter-spacing:.02em; color:var(--humo-bajo);
}

/* ═══════════════════════════════════════════════════════════════════════
   La vitrina de destacados

   La foto queda fija y el texto pasa al lado; al entrar cada pieza en el
   centro de la pantalla, su foto hace fundido. Patrón del componente Scroll01,
   portado a vanilla: el original es React + Framer Motion, y montar ese stack
   para una landing estática costaba cientos de KB y el motor de scroll que ya
   andaba. Acá son dos reglas de opacidad y un IntersectionObserver.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── La escena clavada ────────────────────────────────────────────────
   La sección mide varias pantallas; la escena de adentro se pega arriba y
   ocupa una. Mientras se recorre esa altura la página no baja: lo que se mueve
   son las dos columnas. Al terminar, la escena se despega y la sección
   siguiente sube encima — que es el efecto de "scrollear en el lugar", y sale
   de `sticky`, sin interceptar el scroll de nadie.

   Cuántas pantallas dura: una por pieza más media de respiro. Con menos, los
   relojes pasan volando; con más, el recorrido se vuelve una tarea. */
.vitrina{ padding:0; }

@media (min-width:56rem){
  .vitrina{ height:calc(var(--piezas, 5) * 70vh); }
  .vitrina__escena{
    position:sticky; top:0;
    height:100vh; height:100svh;
    display:flex; flex-direction:column; justify-content:center;
    padding:13rem var(--margen) 2.5rem;
    overflow:hidden;
  }
}
@media (max-width:55.9375rem){
  /* Sin margen lateral: el carrusel sangra hasta el borde de la pantalla y el
     margen se lo pone él por dentro, así la ficha que asoma por la derecha se
     ve cortada por el borde del teléfono y no por una franja de fondo. Es la
     diferencia entre «hay más» y «se terminó». */
  .vitrina{ padding:var(--ritmo) 0; }
}

/* El título se va con el avance —lo escribe vitrina.js— y deja de ocupar
   espacio del flujo para que las columnas queden centradas en la pantalla.

   El padding de arriba de la escena es el que le da aire: es lo que separa la
   foto del título mientras los dos conviven, que son los primeros segundos de
   la sección y por lo tanto la primera impresión. */
@media (min-width:56rem){
  .vitrina__cabecera{
    position:absolute; top:3.5rem; left:var(--margen); right:var(--margen);
    margin-bottom:0;
    will-change:opacity, transform;
  }
}

.vitrina__cuerpo{ display:grid; gap:2rem; grid-template-columns:1fr; }
@media (min-width:56rem){
  .vitrina__cuerpo{
    grid-template-columns:minmax(0,.85fr) minmax(0,1fr);
    gap:clamp(2.5rem,5vw,4.5rem);
    align-items:center;
  }
}

/* ── Los carriles ─────────────────────────────────────────────────────
   Cada uno es una ventana de alto fijo por la que pasa su tira. El de fotos se
   difumina por ABAJO y el de texto por ARRIBA: cada uno contra el borde por el
   que su contenido se está yendo.

   Los dos desvanecidos se encienden con --cierre sobre el final del recorrido.
   Antes de eso valen 0 y los carriles no recortan nada. */
@media (min-width:56rem){
  .vitrina__carril{
    position:relative; overflow:hidden;
    /* El desvanecido de los bordes va SIEMPRE, no sólo al final: sin él, a
       mitad de camino asoma media foto cortada contra una línea dura arriba y
       abajo, y eso se lee como un recorte y no como algo que está pasando.
       Con el difuminado, las piezas se deshacen al entrar y al salir. */
    -webkit-mask-image:linear-gradient(to bottom,
      transparent 0, #000 14%, #000 86%, transparent 100%);
            mask-image:linear-gradient(to bottom,
      transparent 0, #000 14%, #000 86%, transparent 100%);
  }
  .vitrina__carril--fotos{ height:min(62vh, 34rem); }
  .vitrina__carril--texto{ height:min(58vh, 30rem); }

  .vitrina__tira{ will-change:transform, opacity; }
}

/* ── Las fotos ────────────────────────────────────────────────────────
   Ya no se apilan una encima de otra con fundido: van en tira, como el texto,
   y lo que las cambia es el viaje. */
.vitrina__losa{
  aspect-ratio:4/5;
  display:grid; place-items:center; overflow:hidden;
  border:1px solid var(--filete); border-radius:var(--radio-objeto);
}
@media (min-width:56rem){
  .vitrina__carril--fotos .vitrina__tira{
    display:grid; gap:6vh; justify-items:center;
  }
  .vitrina__losa{ width:min(100%, 22rem); }
}
.vitrina__losa img{ width:100%; height:100%; object-fit:cover; }
.vitrina__sinfoto{
  font-size:.6875rem; letter-spacing:.18em; text-transform:uppercase;
  color:rgba(0,0,0,.42);
}
.marmol--negro .vitrina__sinfoto{ color:rgba(255,255,255,.42); }

/* ── El texto ─────────────────────────────────────────────────────────
   Cada ficha ocupa el alto del carril, así los nombres pasan de a uno en vez
   de quedar todos a la vista, que es lo que hacía que se leyera como una lista
   y no como un pase. */
@media (min-width:56rem){
  .vitrina__carril--texto .vitrina__tira{ display:grid; }
  .vitrina__losa{ width:min(100%, 24rem); }
  .vitrina__ficha{
    min-height:min(58vh, 30rem);
    display:flex; flex-direction:column; justify-content:center;
  }
}
/* ── El teléfono: un carrusel, no un recorrido ────────────────────────
   Hasta el 2026-08-10 acá pasaba la misma escena clavada del escritorio pero
   acostada: la foto y el texto viajaban en contramano con el scroll de la
   página. Se reemplazó por un carrusel que se desliza con el dedo, y el motivo
   no es de gusto: **el recorrido le sacaba al visitante el control del ritmo.**
   Para ver el tercer reloj había que scrollear una cantidad exacta, y volver
   al primero era scrollear para atrás. Deslizando, cada ficha se mira el
   tiempo que uno quiera y se pasa a la siguiente con el gesto que ya trae
   aprendido de cualquier galería.

   Las fichas van QUIETAS —no se mueven solas, no se escalan, no se
   desvanecen—: lo único que se mueve es la pista, y la mueve el dedo. Es el
   mismo principio que el catálogo del stock: acá el scroll es del visitante.

   Y la sección deja de medir cinco pantallas para medir una: el carrusel
   muestra las cinco piezas sin estirar la página.

   El escritorio no cambia. Ahí las dos columnas en contramano siguen siendo lo
   correcto: hay lugar para la foto y el texto lado a lado, y el puntero no
   desliza. */
@media (max-width:55.9375rem){
  .vitrina__cabecera{
    position:static; margin-bottom:clamp(2rem,7vw,3rem);
    padding-inline:var(--margen);
  }
  .vitrina__cabecera .titulo{ font-size:clamp(1.75rem,7vw,2.25rem); }

  /* Uno u otro, nunca los dos: las fotos son lo más pesado de la sección y
     dibujarlas por duplicado las haría viajar dos veces. vitrina.js dibuja
     sólo el que corresponde; esto es lo que lo respalda si el JS todavía no
     corrió. */
  .vitrina__cuerpo{ display:none; }
}
@media (min-width:56rem){ .vitrina__deslizable{ display:none; } }

/* El nombre de cada destacado lleva a la página del reloj (desde el
   2026-10-06). Se ve como el título que era: el subrayado aparece al pasar. */
.vitrina__modelo a,
.destacada__modelo a{ color:inherit; text-decoration:none; }
.vitrina__modelo a:hover,
.destacada__modelo a:hover{ text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:.15em; }

/* Los dos botones de cada pieza en escritorio: la consulta y, al lado, el
   stock completo. Se parten en dos renglones si no entran. */
.vitrina__acciones{ display:flex; flex-wrap:wrap; gap:.75rem; align-items:center; }

/* ── La pista del carrusel ────────────────────────────────────────────
   El `scroll-snap` deja cada ficha apoyada contra el margen izquierdo, no
   centrada: con la ficha centrada asoman dos mitades, una de cada lado, y eso
   se lee como estar en el medio de algo. Apoyada a la izquierda asoma una
   sola, la que sigue, que es lo que hay que decir.

   El margen de la derecha va como `margin` de la ÚLTIMA ficha y no como
   `padding` de la pista. Es el error clásico de un scroller horizontal: varios
   motores descartan el padding del lado por el que se desborda, y la última
   ficha termina pegada al borde justo cuando el gesto llega al final.

   Quién se ve y quién no lo dicen las dos consultas de arriba, las dos por
   ancho. No hay un `display:none` suelto acá abajo, y no es estilo: puesto
   después de la consulta del teléfono la pisaba —misma especificidad, gana el
   último— y el carrusel quedaba armado en el DOM pero sin dibujar. */
.vitrina__carrusel{
  list-style:none; margin:0; padding:0 0 0 var(--margen);
  display:flex; gap:clamp(.75rem,3vw,1.1rem);
  overflow-x:auto; overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-padding-left:var(--margen);
  scrollbar-width:none;
}
.vitrina__carrusel::-webkit-scrollbar{ display:none; }
.vitrina__carrusel > li{
  flex:0 0 auto; width:min(76vw,19rem);
  display:flex; scroll-snap-align:start;
}
.vitrina__carrusel > li:last-child{ margin-right:var(--margen); }

/* El índice: un filete por pieza, como los del bisel. Dice cuántas hay y por
   cuál se va, que es lo que un carrusel esconde y hay que devolver. No se
   toca —es una lectura, no un control—: para eso está el dedo. */
.vitrina__indice{
  list-style:none; margin:clamp(1.25rem,4vw,1.75rem) 0 0; padding:0 var(--margen);
  display:flex; justify-content:center; gap:.4rem;
}
.vitrina__indice li{
  width:1.5rem; height:1px; background:var(--humo-bajo);
  transition:background-color .3s ease, opacity .3s ease;
  opacity:.45;
}
.vitrina__indice li[data-activa]{ background:var(--laton); opacity:1; }

/* ── La ficha del carrusel ────────────────────────────────────────────
   Es la del catálogo con la foto arriba en vez de al costado: la misma losa de
   mármol, el mismo filete, las mismas pastillas separadas por líneas. Que sean
   la misma cosa importa — quien toca «Ver el stock» tiene que llegar a algo
   que reconozca.

   Lo único que agrega es la chapa de precio, que en el catálogo no va: ahí el
   precio aparece al abrir la pieza, y acá no hay dónde abrirla. */
.destacada{
  position:relative;
  display:flex; flex-direction:column; width:100%;
  background:linear-gradient(177deg, var(--superficie-2) 0%, var(--superficie) 62%);
  border:1px solid var(--filete);
  border-radius:var(--radio-objeto);
  box-shadow:0 18px 34px -26px rgba(0,0,0,.85);
  overflow:hidden;
  transition:border-color .3s ease;
}
@media (hover:hover){ .destacada:hover{ border-color:var(--laton); } }

.destacada__losa{
  position:relative; aspect-ratio:4/5;
  display:grid; place-items:center; overflow:hidden;
  border-bottom:1px solid var(--filete);
}
.destacada__losa img{ width:100%; height:100%; object-fit:cover; }
.destacada__sinfoto{
  font-size:.6875rem; letter-spacing:.18em; text-transform:uppercase;
  color:rgba(0,0,0,.42);
}
.marmol--negro .destacada__sinfoto{ color:rgba(255,255,255,.42); }

/* Latón sobre la foto, que es el único lugar de la página donde el latón se
   usa lleno y no como filete. Es la chapa de precio de una vitrina. */
.destacada__precio{
  position:absolute; top:.7rem; left:.7rem;
  padding:.28rem .7rem;
  background:var(--laton); color:#1A1408;
  font-size:.75rem; font-weight:600; letter-spacing:.03em;
  font-variant-numeric:lining-nums tabular-nums;
  border-radius:999px;
}

.destacada__datos{
  flex:1; display:flex; flex-direction:column; gap:.55rem;
  padding:1.05rem 1.1rem 1.15rem;
}
.destacada__modelo{ font-size:1.2rem; line-height:1.18; color:var(--hueso); }

/* Tres renglones y corta. Las descripciones las escribe el cliente en su
   planilla y miden lo que miden; sin tope, una de diez renglones estiraría su
   ficha y dejaría a las otras cuatro cortas al lado. */
.destacada__desc{
  font-size:.875rem; line-height:1.6; color:var(--humo);
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical;
  overflow:hidden;
}

/* El año y la medida, separados por un filete, como en la ficha del catálogo.
   `margin-top:auto` los empuja al pie: con las cinco fichas midiendo lo mismo,
   ese renglón queda a la misma altura en todas y se compara deslizando. */
.destacada__pastillas{
  margin-top:auto; padding-top:.9rem;
  display:flex;
  border-top:1px solid var(--filete);
}
.destacada__pastillas > span{
  padding:0 .8rem; border-left:1px solid var(--filete);
  font-size:.8125rem; letter-spacing:.05em; color:var(--hueso);
  font-variant-numeric:lining-nums tabular-nums;
}
.destacada__pastillas > span:first-child{ padding-left:0; border-left:0; }

/* El botón reemplazó a una flecha de latón en la esquina, que era toda la
   señal que tenía la tarjeta y además llevaba al stock. Va a lo ancho porque
   es la única acción de la ficha y porque en un teléfono el blanco se toca con
   el pulgar; el canto sigue vivo aunque la ficha esté redondeada, que es la
   regla de `--radio-objeto`. */
.destacada__cta{
  margin-top:.9rem;
  gap:.5rem;
  padding:.7rem 1rem;
  font-size:.875rem;
}
/* Debajo de la consulta, el stock completo (desde el 2026-10-06): más pegado
   que el primero, porque es el mismo par de salidas y no un bloque nuevo. */
.destacada__cta + .destacada__cta{ margin-top:.55rem; }

/* Sin movimiento: no hay escena clavada ni contramano. Las fichas quedan una
   debajo de la otra, que es la misma información sin el viaje.

   La columna de fotos se esconde. No es pereza: la tira está armada AL REVÉS
   —es lo que hace posible el contramano— así que sin el viaje quedarían cinco
   fotos en orden inverso al lado de cinco textos en orden normal. Una foto que
   no corresponde al texto de al lado es peor que ninguna foto, sobre todo en
   una página cuyo argumento es la autenticidad.

   Va acotado al escritorio, que es el único ancho donde queda algo que
   desactivar. Abajo de 56rem esta sección ya es un carrusel: lo que se mueve
   lo mueve el dedo, y eso no es una animación que haya que apagar. */
@media (prefers-reduced-motion:reduce) and (min-width:56rem){
  .vitrina{ height:auto; padding:var(--ritmo) var(--margen); }
  .vitrina__escena{ position:static; height:auto; padding:0; overflow:visible; display:block; }
  .vitrina__cabecera{ position:static; margin-bottom:clamp(2.5rem,6vw,4.5rem); }
  .vitrina__carril{ height:auto; overflow:visible; -webkit-mask-image:none; mask-image:none; }
  .vitrina__carril--fotos{ display:none; }
  .vitrina__cuerpo{ grid-template-columns:1fr; }
  .vitrina__tira{ transform:none !important; opacity:1 !important; }
  .vitrina__ficha{ min-height:0; }
  .vitrina__cabecera{ opacity:1 !important; transform:none !important; }
}

.vitrina__marca{
  font-size:.6875rem; font-weight:600; letter-spacing:.2em;
  text-transform:uppercase; color:var(--laton); margin-bottom:.6rem;
}
.vitrina__modelo{ font-size:clamp(1.5rem,3vw,2.25rem); margin-bottom:.9rem; }
.vitrina__desc{ font-size:.9375rem; line-height:1.75; color:var(--humo); max-width:44ch; }
.vitrina__meta{
  margin:1rem 0 1.35rem; font-size:.8125rem; color:var(--humo-bajo);
  font-variant-numeric:lining-nums tabular-nums;
}

/* El botón se estiraba a todo el ancho de la columna: la ficha es un flex
   column y sus hijos se estiran por defecto. `align-self:start` lo devuelve al
   ancho de su texto, que es lo que corresponde a una acción secundaria. */
.vitrina__ficha .boton{
  align-self:start;
  padding:.55rem 1.1rem;
  font-size:.8125rem;
  gap:.4rem;
}

@media (prefers-reduced-motion:reduce){
  .vitrina__losa,.vitrina__ficha{ transition:none; }
  .vitrina__ficha{ opacity:1; }
}

/* ═══════════════════════════════════════════════════════════════════════
   La página de stock: la grilla, el cajón de filtros y la ficha expandida

   Reescrita el 2026-08-08. Antes era una barra de filtros que ocupaba el
   ancho entero arriba, un índice de medidas al costado y una caja de alto
   fijo que scrolleaba por dentro. Se fueron las tres: los filtros a un cajón
   que sale de la izquierda, el índice de medidas convertido en un filtro más
   —era además un mapa del scroll, y con la página scrolleando normal ese
   trabajo dejó de existir— y la caja interna reemplazada por la página.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── La barra de arriba ───────────────────────────────────────────────
   El botón que abre el cajón, y enfrente la cuenta de piezas. Es todo lo que
   queda a la vista de los filtros: antes la barra entera vivía acá y se comía
   la primera pantalla del catálogo. */
.tope{
  display:flex; align-items:center; justify-content:space-between;
  gap:1rem; flex-wrap:wrap; margin-bottom:clamp(1rem,2vw,1.5rem);
}

.tope__filtros{
  display:inline-flex; align-items:center; gap:.55rem;
  padding:.6rem 1rem;
  background:var(--superficie); color:var(--hueso);
  border:1px solid var(--filete); border-radius:2px;
  font-family:var(--texto); font-size:.95rem; letter-spacing:.02em;
  cursor:pointer;
  transition:border-color .25s ease, background-color .25s ease;
}
@media (hover:hover){
  .tope__filtros:hover{ border-color:var(--laton); background:var(--superficie-2); }
}
.tope__filtros:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
.tope__filtros svg{ color:var(--laton); }

/* La chapita con cuántos filtros hay puestos. Con el cajón cerrado es lo único
   que dice que la lista está recortada. */
.tope__cuenta{
  display:inline-grid; place-items:center;
  min-width:1.25rem; height:1.25rem; padding:0 .3rem;
  background:var(--laton); color:var(--tinta);
  border-radius:1rem; font-size:.7rem; font-weight:600;
}

.tope__conteo{ color:var(--humo); font-size:.9rem; margin:0; }

/* ── La grilla ────────────────────────────────────────────────────────
   **Dos por fila desde el 2026-08-09, no tres.** Se pidió que cada ficha
   midiera lo que dos de las de antes, y de las dos formas de dar el doble de
   superficie ésta es la única que sostiene el dibujo de la ficha: dejándola de
   a tres, lo único que se puede estirar es el alto, y la foto —que ocupa un
   tercio del ancho— queda en una tira alta y angosta que le corta el reloj a lo
   largo. De a dos, la ficha crece a lo ancho y a lo alto en la misma
   proporción, y la foto vuelve a ser casi cuadrada, que es como está en el
   boceto.

   Abajo de 46rem va una sola por fila: la ficha es horizontal y por debajo de
   ese ancho la columna de datos se queda sin lugar para respirar. */
.fichas{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(.75rem,1.2vw,1.1rem);
  grid-template-columns:1fr;
}
@media (min-width:46rem){ .fichas{ grid-template-columns:repeat(2,minmax(0,1fr)); } }

/* ── La ficha ─────────────────────────────────────────────────────────
   Foto a la izquierda ocupando un tercio exacto, datos en los dos tercios que
   quedan. El `1fr 2fr` es literalmente eso y por eso no lleva un ancho fijo:
   la proporción se sostiene sola en las tres anchuras de grilla.

   El alto acompaña al ancho nuevo de la grilla: con dos por fila la ficha mide
   el doble de superficie que la de antes, que es lo que se pidió, y la foto
   queda casi cuadrada. Es además el alto que hacía falta, porque la ficha pasó
   a llevar la lista de materiales en un cuadro y las dos pastillas debajo.

   Subido de 16rem a 19,5rem el 2026-08-10: el ancho estaba bien y lo que
   faltaba era aire a lo alto. La foto pasa de casi cuadrada a algo vertical,
   que es la proporción en la que se fotografía un reloj. */
.ficha{
  position:relative;
  display:grid; grid-template-columns:1fr 2fr;
  min-height:19.5rem;
  /* Un degradado vertical mínimo, dos pasos de la propia paleta: la superficie
     se lee levantada del fondo sin subirle el brillo. Y la sombra lleva
     desplazamiento y desenfoque — un halo sin offset no es profundidad. */
  background:linear-gradient(177deg, var(--superficie-2) 0%, var(--superficie) 62%);
  border:1px solid var(--filete);
  border-radius:2px;
  box-shadow:0 18px 34px -26px rgba(0,0,0,.85);
  overflow:hidden;
  transition:border-color .3s ease, transform .3s ease;
}
@media (hover:hover){
  .ficha:hover{ border-color:var(--laton); transform:translateY(-2px); }
}

/* El filete de la derecha es la junta entre la piedra y la superficie. En un
   objeto caro esa junta se ve, y es la misma gramática del taquímetro: latón
   como herraje, no como color. */
.ficha__losa{ position:relative; overflow:hidden; border-right:1px solid var(--filete); }
.ficha__foto{
  position:absolute; inset:0;
  width:100%; height:100%; object-fit:cover; display:block;
}
.ficha__sinfoto{
  position:absolute; inset:0; display:grid; place-items:center;
  padding:.5rem; text-align:center;
  font-size:.7rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--humo-bajo);
}

/* ── El cartel de señado, desde el 2026-09-11 ─────────────────────────
   Una franja de lado a lado, en el tercio de abajo: se lee desde la grilla
   sin abrir la ficha, que es lo que hace falta para que nadie más la señe.
   Estuvo a media altura y se bajó el mismo día: ahí tapaba la esfera, que en
   todas las fotos está centrada y es lo único que no se tapa. Abajo cruza el
   brazalete. Latón sobre casi negro, el mismo par de la chapa de precio pero
   invertido, así no compite con ella en la portada.

   La foto se apaga un poco y no se tapa: la pieza sigue siendo la misma y
   si la seña se cae vuelve a estar a la venta. Sirve igual en las cuatro
   losas —la del stock, la de la ficha abierta y las dos de la portada—. */
.losa--senada{ position:relative; }
.losa--senada img{ filter:saturate(.55) brightness(.62); }
.cartel-senado{
  position:absolute; left:0; right:0; bottom:14%;
  z-index:1;
  padding:.6rem .5rem;
  background:rgba(8,10,9,.78);
  border-block:1px solid var(--laton);
  color:var(--laton); text-align:center;
  font-size:.75rem; font-weight:600; letter-spacing:.28em; text-transform:uppercase;
  pointer-events:none;
}

/* Sin `position` a propósito: así el botón que se estira toma como referencia
   la ficha entera y no sólo esta columna. */
.ficha__datos{
  display:flex; flex-direction:column;
  gap:.85rem; padding:clamp(1.15rem,1.8vw,1.6rem);
  min-width:0;
}

/* El nombre lleva la marca adelante —«Rolex Datejust Wimbledon»— y no en un
   renglón aparte ni en una pastilla. Se probaron las dos cosas: el nombre
   entero es como se nombra a la pieza en voz alta, y partido en dos lugares
   hay que armarlo con la vista cada vez. */
.ficha__modelo{
  font-family:var(--display); font-weight:var(--display-peso);
  letter-spacing:var(--display-tracking);
  font-size:clamp(1.2rem,1.7vw,1.6rem); line-height:1.15;
  margin:0; color:var(--hueso);
}

/* La grilla vive en la LISTA y cada par usa `display:contents`, así que el dt y
   el dd son items de esta grilla y no de una suya. Es lo que hace que la
   columna de etiquetas se mida sola contra la más larga —«MATERIALES»— y que
   todas las filas queden alineadas entre sí.

   Con un ancho fijo, que fue el primer intento, pasaba una de dos: o la palabra
   desbordaba y se montaba encima del valor, o había que dejarla justa al
   límite y cualquier cambio de tipografía la volvía a romper. Con `max-content`
   el ancho lo pone el texto y deja de haber un número que mantener. */
.ficha__spec{ display:contents; }
.ficha__spec dt{
  font-size:.6rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--humo-bajo);
}
.ficha__spec dd{ margin:0; font-size:.85rem; color:var(--humo); min-width:0; }

/* Los materiales, uno por renglón. Llegan como una lista separada por comas y
   apilados se leen de un vistazo; en una línea corrida se vuelven un párrafo. */
.ficha__spec--materiales dd{ display:flex; flex-direction:column; gap:.1rem; }

/* ── Los materiales, en su cuadro ─────────────────────────────────────
   Van enmarcados y no sueltos, como en el boceto. El marco hace un trabajo
   concreto además de decorar: es lo único de la miniatura que puede tener uno
   o cinco renglones, así que sin él la ficha se lee distinta según la pieza y
   la grilla queda temblorosa.

   Si la pieza no trae materiales el cuadro no se dibuja. Un marco vacío se lee
   como que falta cargar algo, y hoy —con la columna recién creada— faltarían
   los veinte. */
/* Sin recuadro: cada renglón lleva su marca de índice, un filete corto de
   latón, que es el mismo trazo con el que el bisel marca sus valores. Ordena
   la lista sin encerrarla, y evita el marco adentro del marco. */
.ficha__materiales{
  margin:0; padding:0; border:0; background:none;
}
.ficha__materiales li{ position:relative; padding-left:1.05rem; }
.ficha__materiales li::before{
  content:''; position:absolute; left:0; top:.62em;
  width:.5rem; height:1px; background:var(--laton); opacity:.7;
}
.ficha__materiales ul{
  list-style:none; margin:0; padding:0;
  display:flex; flex-direction:column; gap:.15rem;
  font-size:.85rem; color:var(--humo); line-height:1.35;
}

/* Las dos pastillas del pie: el año y la medida. Son los dos datos que se
   comparan de una ficha a otra —«¿de qué año es?», «¿me entra?»— y por eso van
   sueltas y no en la lista de arriba: se buscan de un vistazo, saltando de
   tarjeta en tarjeta. */
/* El año y la medida, separados por filetes como los sectores de una esfera.
   Lo que los separa es la línea, no una caja cada uno. Van pegados al pie: con
   todas las fichas midiendo lo mismo, ese renglón queda a la misma altura en
   todas y se compara saltando de una a otra. */
.ficha__pastillas{
  margin:auto 0 0; padding-top:.9rem;
  display:flex; flex-wrap:wrap; gap:0;
  border-top:1px solid var(--filete);
}
.ficha__pastilla{
  padding:0 .95rem;
  border:0; border-left:1px solid var(--filete); border-radius:0;
  font-size:.85rem; letter-spacing:.06em; color:var(--hueso);
  font-variant-numeric:lining-nums tabular-nums;
}
.ficha__pastilla:first-child{ padding-left:0; border-left:0; }

/* ── El precio y la descripción son SÓLO de escritorio ─────────────────
   Volvieron a la miniatura el 2026-08-12 y el mismo día se acotaron al ancho
   grande, mirándolo en el teléfono: **ahí no entran.**

   La ficha es `1fr 2fr` en las dos anchuras, así que en un teléfono la columna
   de datos mide dos tercios de la pantalla —unos 240 px— y ahí adentro tienen
   que caber el nombre, los materiales y el pie. El pie es el que se rompe
   primero: «2026 · 41 mm · USD 17.000» no entra en un renglón y el precio se
   cae a una segunda línea, que descoloca la fila que existe justamente para
   estar a la misma altura en todas las tarjetas. Y la descripción son dos
   renglones más en la pantalla donde menos sobra.

   Se resuelve por defecto y no por excepción: **el móvil es la tarjeta de
   antes** —nombre, materiales, año y medida— y lo demás se enciende a partir
   de 46rem, que es el mismo punto donde la grilla pasa a dos columnas. Un
   segundo umbral propio sería otro número que mantener.

   Nada se pierde en el teléfono: el precio y la descripción completa están en
   la ficha expandida, a un toque. */
.ficha__resumen,
.ficha__pastilla--precio{ display:none; }

@media (min-width:46rem){
  /* El precio, al final del renglón del pie y no en un lugar propio: es el que
     queda a la misma altura en todas las fichas, así que es el único donde un
     número se puede comparar saltando de una a otra.

     `margin-left:auto` lo empuja a la derecha y le saca el filete: alineado al
     borde cae en la misma columna en todas las tarjetas, en vez de bailar
     según cuántos dígitos tenga el año de al lado. */
  .ficha__pastilla--precio{
    display:inline-block;
    margin-left:auto; border-left:0; padding-right:0;
    color:var(--hueso); font-weight:600;
  }

  /* La descripción, recortada a dos renglones.
     El recorte no es estético: `.ficha__pastillas` se apoya en `margin:auto 0 0`
     para quedar pegada al pie, y un texto más largo la empujaría fuera. Ahí las
     pastillas dejan de estar a la misma altura en todas las fichas y la grilla
     deja de leerse como grilla — que es lo único que esa fila vino a hacer.

     Con `line-clamp` el corte lo hace el navegador sobre el texto ya maquetado,
     así que no hay un largo máximo que mantener del lado de la planilla: él
     escribe lo que quiera y la tarjeta muestra dos renglones.

     El aire de abajo lo pidió Facundo el 2026-08-12 mirándolo con datos reales,
     y va acá y no en el `gap` del contenedor porque el contenedor los reparte a
     todos por igual: subirlo ahí también separaría el nombre de la descripción,
     que son dos cosas que se leen de corrido. Lo que hay que abrir es la junta
     entre el texto y la lista de materiales, que son dos bloques distintos. */
  .ficha__resumen{
    display:-webkit-box; -webkit-line-clamp:2; line-clamp:2;
    -webkit-box-orient:vertical; overflow:hidden;
    margin:0 0 clamp(.5rem,1.1vw,1rem);
    color:var(--humo); font-size:.88rem; line-height:1.5;
  }
}

/* El blanco del tamaño de la ficha entera: un enlace a la página del reloj
   (hasta el 2026-10-06 era un botón que abría la ficha expandida). Va estirado
   y no envolviendo el contenido: el lector de pantalla leería todo el bloque
   como el nombre del enlace. Así el nombre se lo da `aria-labelledby`, que
   apunta al modelo. */
.ficha__abrir{
  position:absolute; inset:0;
  width:100%; height:100%;
  background:none; border:0; padding:0;
  cursor:pointer;
}
.ficha__abrir:focus-visible{ outline:2px solid var(--laton); outline-offset:-3px; }

/* ── El cajón de filtros ──────────────────────────────────────────────
   Sale de la izquierda. Cerrado queda con `pointer-events:none` para que el
   velo invisible no se coma los clics de la página. */
.cajon{ position:fixed; inset:0; z-index:60; pointer-events:none; }
.cajon[data-abierto]{ pointer-events:auto; }

.cajon__velo{
  position:absolute; inset:0;
  background:rgba(10,17,14,.55);
  opacity:0; transition:opacity .3s ease;
}
.cajon[data-abierto] .cajon__velo{ opacity:1; }

/* En pantalla ancha el velo se apaga: el panel es una columna angosta al
   costado y el sentido es filtrar MIRANDO la grilla cambiar. Sigue estando
   para que el clic afuera cierre, pero no oscurece lo que hay que ver. */
@media (min-width:64rem){
  .cajon[data-abierto] .cajon__velo{ opacity:0; }
}

.cajon__panel{
  position:absolute; inset-block:0; left:0;
  width:min(23rem, 90vw);
  display:flex; flex-direction:column;
  background:var(--superficie);
  border-right:1px solid var(--filete);
  box-shadow:0 0 3rem rgba(0,0,0,.45);
  transform:translateX(-100%);
  transition:transform .34s cubic-bezier(.22,1,.36,1);
}
.cajon[data-abierto] .cajon__panel{ transform:none; }

.cajon__cabecera{
  display:flex; align-items:center; justify-content:space-between;
  gap:1rem; padding:1.1rem 1.25rem;
  border-bottom:1px solid var(--filete);
}
.cajon__titulo{
  margin:0; font-family:var(--display); font-weight:var(--display-peso);
  font-size:1.15rem; color:var(--hueso);
}
.cajon__cerrar{
  display:grid; place-items:center;
  width:2.25rem; height:2.25rem; flex:0 0 auto;
  background:none; border:1px solid var(--filete); border-radius:2px;
  color:var(--humo); cursor:pointer;
  transition:color .25s ease, border-color .25s ease;
}
@media (hover:hover){
  .cajon__cerrar:hover{ color:var(--laton); border-color:var(--laton); }
}
.cajon__cerrar:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }

.cajon__cuerpo{
  flex:1; overflow-y:auto;
  padding:1.25rem;
  display:flex; flex-direction:column; gap:1.35rem;
}

.cajon__pie{
  display:flex; align-items:center; gap:.75rem;
  padding:1rem 1.25rem;
  border-top:1px solid var(--filete);
}
/* El `gap` acá arregla el «Ver20 piezas» que se veía pegado: el botón es un
   contenedor flex, y en flex el espacio que hay en el marcado entre el texto y
   el <span> del número no se dibuja — cada uno es un ítem y el blanco entre
   ítems se descarta. El separador tiene que ser el gap. */
.cajon__pie .boton{ flex:1; justify-content:center; gap:.35rem; }

/* ── El buscador ──────────────────────────────────────────────────────
   El atajo del cajón: quien sabe qué busca escribe y no toca ningún control. */
.buscador{
  display:flex; align-items:center; gap:.55rem;
  padding:.6rem .7rem;
  background:var(--fondo);
  border:1px solid var(--filete); border-radius:2px;
  transition:border-color .25s ease;
}
.buscador:focus-within{ border-color:var(--laton); }
.buscador > svg{ flex:0 0 auto; color:var(--humo-bajo); }

.buscador__campo{
  flex:1; min-width:0;
  background:none; border:0; padding:0;
  color:var(--hueso); font-family:var(--texto); font-size:1rem;
}
.buscador__campo::placeholder{ color:var(--humo-bajo); }
.buscador__campo:focus{ outline:none; }

/* La cruz que trae el navegador se saca: ya hay una propia, y dos cruces en el
   mismo campo se leen como un error. */
.buscador__campo::-webkit-search-cancel-button{ -webkit-appearance:none; appearance:none; }

.buscador__borrar{
  display:grid; place-items:center; flex:0 0 auto;
  width:1.5rem; height:1.5rem;
  background:none; border:0; padding:0;
  color:var(--humo-bajo); cursor:pointer;
}
@media (hover:hover){ .buscador__borrar:hover{ color:var(--hueso); } }
.buscador__borrar:focus-visible{ outline:2px solid var(--laton); outline-offset:1px; }

/* ── Los filtros de lista: marca y medida ─────────────────────────────
   Los dos en columna y todas las opciones a la vista, sin desplegables. Se
   pidió así y el motivo se sostiene solo: son las dos preguntas con las que se
   entra al catálogo —de quién es y qué tamaño tiene— y un menú que hay que
   abrir para saber qué contiene contesta las dos con un paso de más.

   **La opción ES el texto**, no un texto adentro de un botón. El marco de una
   chapita promete que hay algo que apretar, y acá lo que hay es una lista de
   la que se elige: el renglón se enciende en latón y esa es toda la señal que
   necesita. Sigue siendo un <button> de verdad —el teclado, el foco y el
   anuncio del lector de pantalla llegan gratis—; lo único que no tiene es la
   caja dibujada.

   La cuenta va al lado, apagada. Dice cuántas piezas hay de cada una sin
   competir con el nombre. */
.campo--lista{ border:0; padding:0; margin:0; min-width:0; }

.filtro-lista{ display:flex; flex-direction:column; align-items:flex-start; gap:.22rem; }
/* La opción elegida se marca con el mismo trazo de índice que los materiales,
   y crece al encenderse: es la aguja apoyándose en su valor. */
.filtro-lista__boton{
  position:relative;
  display:flex; align-items:baseline; gap:.45rem;
  padding:.2rem 0 .2rem 1.2rem;
  background:none; border:0; border-radius:2px;
  color:var(--humo); text-align:left;
  font-family:var(--texto); font-size:1.0625rem; cursor:pointer;
  transition:color .2s ease;
}
.filtro-lista__boton b{ font-weight:400; color:var(--humo); font-size:.9375rem; }
@media (hover:hover){ .filtro-lista__boton:hover{ color:var(--hueso); } }
.filtro-lista__boton::before{
  content:''; position:absolute; left:0; top:.78em;
  width:.5rem; height:1px; background:var(--humo-bajo);
  transition:width .2s ease, background-color .2s ease;
}
.filtro-lista__boton[aria-pressed="true"]{ color:var(--laton); }
.filtro-lista__boton[aria-pressed="true"]::before{
  width:.85rem; background:var(--laton);
}
.filtro-lista__boton[aria-pressed="true"] b{ color:var(--laton); }
.filtro-lista__boton:focus-visible{ outline:2px solid var(--laton); outline-offset:3px; }

/* ═══════════════════════════════════════════════════════════════════════
   La página de un reloj — `src/reloj/<marca>-<referencia>.html`

   Desde el 2026-10-06, pedido del cliente con Mercado Libre de ejemplo: cada
   pieza con su dirección. Reemplazó a la ficha expandida del stock, que era un
   <dialog> encima del catálogo con estos mismos datos: tener las dos era
   mostrar lo mismo de dos maneras.

   La escribe scripts/stock/fichas.py; los botones los pone src/reloj.js.

   Mismo lenguaje que la ficha del catálogo: la losa de mármol con la foto a
   un lado, y del otro la marca, el modelo, la grilla de datos y el pie con el
   precio y los botones. En el teléfono, la foto arriba.
   ═══════════════════════════════════════════════════════════════════════ */

.pagina-reloj main{ padding:clamp(5.5rem,11vh,7rem) var(--margen) var(--ritmo); }

/* Arriba de todo: «Volver» a la izquierda y la miga al lado. */
.producto__arriba{
  max-width:80rem; margin:0 auto 1rem;
  display:flex; align-items:center; gap:1.25rem; flex-wrap:wrap;
}
.producto__volver-arriba{
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.45rem .9rem .45rem .7rem;
  border:1px solid var(--filete); border-radius:2px;
  font-size:.75rem; letter-spacing:.18em; text-transform:uppercase;
  color:var(--hueso); text-decoration:none;
  transition:border-color .2s ease, color .2s ease;
}
.producto__volver-arriba svg{ fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
@media (hover:hover){
  .producto__volver-arriba:hover{ border-color:var(--laton); color:var(--laton); }
}
.producto__volver-arriba:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
.producto__migas{
  margin:0;
  font-size:.75rem; letter-spacing:.18em; text-transform:uppercase; color:var(--humo);
}
.producto__migas a{ color:var(--laton); text-decoration:none; }
.producto__migas a:hover{ text-decoration:underline; text-underline-offset:.2em; }

.producto{
  max-width:72rem; margin-inline:auto;
  display:grid; grid-template-columns:1fr; gap:clamp(1.5rem,4vw,3.5rem);
}
/* ── En escritorio entra todo en una pantalla ─────────────────────────────
   Pedido del cliente el 2026-10-06: la foto más grande y sin scroll. La foto
   se mide por el ALTO de la pantalla —todo lo que deja la cabecera, la fila de
   «Volver» y un respiro abajo— y el ancho sale solo del 4:5. La columna de
   datos toma lo que sobra. */
@media (min-width:48rem){
  .producto{
    max-width:80rem;
    grid-template-columns:auto minmax(0,1fr); align-items:start;
  }
  .producto__losa{
    height:min(calc(100vh - 11rem), 52rem);
    height:min(calc(100svh - 11rem), 52rem);
    width:auto; max-width:48vw;
  }
}

/* 4:5, que es la proporción de todas las fotos del stock: el publicador las
   recorta así al bajarlas del Drive. */
.producto__losa{
  position:relative; aspect-ratio:4 / 5; overflow:hidden;
  border:1px solid var(--filete); border-radius:2px;
}
.producto__foto{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block; }

/* ── El carrusel de fotos, desde el 2026-10-06 ───────────────────────────
   Hasta cinco fotos por reloj, de la carpeta de Drive de cada uno. Una tira
   horizontal con `scroll-snap`: el freno en cada foto, la inercia y el gesto
   los pone el navegador, y en el teléfono es lo único que hace falta. Las
   flechas —sólo donde hay puntero— y los puntos los conecta reloj.js.

   Adentro del carrusel las fotos dejan de ir absolutas: cada una ocupa el
   ancho entero de la losa y se ponen en fila. */
.carrusel{
  position:absolute; inset:0;
  display:flex; overflow-x:auto; overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory; scrollbar-width:none;
}
.carrusel::-webkit-scrollbar{ display:none; }
.carrusel:focus-visible{ outline:2px solid var(--laton); outline-offset:-3px; }
.carrusel .producto__foto{ position:static; flex:0 0 100%; scroll-snap-align:center; }

.carrusel__flecha{
  position:absolute; top:50%; translate:0 -50%; z-index:2;
  display:grid; place-items:center;
  width:2.6rem; height:2.6rem; padding:0;
  background:rgba(10,17,14,.55); backdrop-filter:blur(4px);
  border:1px solid var(--filete); border-radius:50%;
  color:var(--hueso); font-size:1.5rem; line-height:1; cursor:pointer;
  transition:border-color .2s ease, color .2s ease, opacity .2s ease;
}
.carrusel__flecha--antes{ left:.75rem; }
.carrusel__flecha--despues{ right:.75rem; }
.carrusel__flecha:disabled{ opacity:.3; cursor:default; }
@media (hover:hover){
  .carrusel__flecha:not(:disabled):hover{ color:var(--laton); border-color:var(--laton); }
}
.carrusel__flecha:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
/* Con el dedo no hacen falta: se desliza. Quedan los puntos. */
@media (hover:none){ .carrusel__flecha{ display:none; } }

.carrusel__puntos{
  position:absolute; left:0; right:0; bottom:.85rem; z-index:2;
  display:flex; justify-content:center; gap:.5rem;
}
.carrusel__punto{
  width:.55rem; height:.55rem; padding:0; border-radius:50%;
  background:rgba(242,240,234,.45); border:0; cursor:pointer;
  box-shadow:0 0 0 1px rgba(0,0,0,.25);
}
.carrusel__punto[aria-current="true"]{ background:var(--laton); }
.carrusel__punto:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
/* El cartel de señado o vendido va sobre la tira y los puntos no lo pisan. */
.producto__losa .cartel-senado{ z-index:3; pointer-events:none; }
/* Sin foto, la losa sola con su leyenda. En la página la losa es grande y el
   gris de la ficha chica se perdía sobre el mármol blanco: acá va más grande
   y con el color que contrasta con cada mármol. */
.producto__losa .ficha__sinfoto{ font-size:.85rem; letter-spacing:.2em; }
.producto__losa.marmol--blanco .ficha__sinfoto{ color:rgba(16,21,18,.6); }
.producto__losa.marmol--negro .ficha__sinfoto{ color:var(--humo); }

.producto__datos{ display:flex; flex-direction:column; gap:.5rem; min-width:0; }
@media (min-width:48rem){ .producto__datos{ padding-top:.5rem; } }

.producto__marca{
  margin:0; font-size:.72rem; letter-spacing:.22em; text-transform:uppercase;
  color:var(--laton);
}
.producto__modelo{
  margin:0; font-family:var(--display); font-weight:var(--display-peso);
  letter-spacing:var(--display-tracking);
  font-size:clamp(1.9rem,4vw,2.9rem); line-height:1.08;
}
/* La misma grilla que la ficha chica: las etiquetas en `display:contents` y la
   columna se mide sola. */
.producto__specs{
  margin:1.1rem 0 0;
  display:grid; grid-template-columns:max-content minmax(0,1fr);
  gap:.45rem .8rem; align-items:baseline;
}
.producto__desc{ margin:1rem 0 0; color:var(--humo); line-height:1.6; }

.producto__estado{
  margin:1rem 0 0; display:flex; align-items:center; gap:.5rem;
  font-size:.9rem; color:var(--humo);
}
.producto__estado span{
  width:.45rem; height:.45rem; border-radius:50%;
  background:var(--laton); flex:0 0 auto;
}

.producto__pie{
  margin-top:1.5rem; padding-top:1.3rem;
  display:flex; align-items:center; justify-content:space-between;
  gap:1rem; flex-wrap:wrap;
  border-top:1px solid var(--filete);
}
.producto__precio{
  margin:0; font-family:var(--display); font-weight:var(--display-peso);
  font-size:clamp(1.5rem,2.6vw,2rem); color:var(--laton);
}
/* `flex-wrap` y el `1 1 auto` son lo que hace que en el teléfono se apilen en
   vez de encogerse hasta partir «Consultar por esta pieza» en tres renglones. */
.producto__acciones{ display:flex; gap:.6rem; flex-wrap:wrap; justify-content:flex-end; }
.producto__acciones .boton{ flex:1 1 auto; gap:.5rem; }

/* La condición de la seña toma el ancho entero del pie y va ARRIBA de los
   botones: el que baja hasta el de reservar la cruza en el camino. */
.producto__sena{
  flex-basis:100%; margin:0;
  font-size:.8125rem; line-height:1.5; color:var(--humo);
}

/* Al catálogo, debajo de los botones: un enlace y no un tercer botón, para
   que no compita con consultar y señar. Estuvo abajo de todo, centrado, hasta
   que el cliente pidió que la página entrara en una pantalla. */
/* El párrafo del pie de un vendido cruza el ancho entero, como la condición
   de la seña: va arriba del botón y no al lado del «Vendido». */
.producto__desc--pie{ flex-basis:100%; margin:0; font-size:.95rem; }

.producto__volver{ margin:1.1rem 0 0; text-align:right; font-size:.85rem; }
.producto__volver a{ color:var(--laton); text-underline-offset:.2em; }
@media (max-width:47.99rem){ .producto__volver{ text-align:center; } }

@media (prefers-reduced-motion:reduce){
  .ficha,.cajon__panel,.cajon__velo,.tope__filtros{ transition:none; }
}
}
/* ═══════════════════════════════════════════════════════════════════════
   Envíos — el plano del astronauta

   El video se desenrolla de una tira vertical hasta 3/5 de la pantalla, se
   recorre con el scroll y al terminar habla el texto de al lado. La cuenta
   está en envios.js; acá sólo vive el aspecto.
   ═══════════════════════════════════════════════════════════════════════ */

.envios{ --abre:0; --habla:0; padding:0; }

@media (min-width:56rem){
  .envios{ height:250vh; }
  .envios__escena{
    position:sticky; top:0;
    height:100vh; height:100svh;
    display:flex; align-items:center; gap:clamp(2rem,4vw,4rem);
    padding:0 var(--margen);
    overflow:hidden;
  }
}

/* ── El rollo ─────────────────────────────────────────────────────────
   Lo que crece es la VENTANA, no el video: el clip mide siempre lo mismo y se
   lo va dejando ver. Escalándolo se deformaría y se leería como un zoom;
   recortándolo se lee como una persiana que se abre.

   El ancho abierto son 3/5 de la pantalla, que es lo que pide el sketch. El
   mínimo no es cero: una tira de 10 px es lo que hace que se lea como algo
   enrollado esperando, y no como que todavía no cargó. */
.envios__rollo{
  --ancho-abierto:min(60vw, 62rem);
  position:relative; flex:none; overflow:hidden;
  border-radius:var(--radio-objeto);
  width:calc(10px + (var(--ancho-abierto) - 10px) * var(--abre));
  box-shadow:0 24px 60px -28px rgba(0,0,0,.9);
}
.envios__video{
  display:block;
  width:var(--ancho-abierto); height:auto;
  max-width:none;
}

/* ── El texto ─────────────────────────────────────────────────────────
   Entra recién cuando el clip terminó. Sube un poco al entrar: apareciendo en
   su lugar se lee como que estuvo siempre y no se lo vio. */
.envios__dicho{
  flex:1 1 0; min-width:0;
  opacity:var(--habla);
  transform:translateY(calc((1 - var(--habla)) * 18px));
  will-change:opacity, transform;
}
.envios__dicho .titulo{ font-size:clamp(1.9rem,3.6vw,3rem); }
.envios__bajada{
  margin-top:1rem; max-width:34ch;
  font-size:.9375rem; color:var(--humo);
}

/* ── Los tres pasos se van por arriba ─────────────────────────────────
   Lo maneja envios.js con el mismo avance que abre el rollo: son un solo
   movimiento, y si cada sección manejara su parte el relevo dependería de que
   dos cuentas coincidan. */
.pasos{ --se-va:0; }
@media (min-width:56rem){
  .pasos{
    opacity:calc(1 - var(--se-va));
    transform:translateY(calc(var(--se-va) * -60px));
    will-change:opacity, transform;
  }
}

/* ── En el teléfono ───────────────────────────────────────────────────
   No hay 3/5 de pantalla que valgan: el video va a lo ancho y el texto abajo.
   Pero la escena se clava y la sección lleva su recorrido igual que en
   escritorio, porque **sin recorrido el clip no se recorre**: la sección medía
   556 px contra una ventana de 664, y `avance()` de envios.js devuelve 0 en
   cuanto `offsetHeight - innerHeight` no es positivo. El astronauta se quedaba
   clavado en el cuadro 0 y de los 8 segundos no se veía ninguno. Medido en un
   iPhone 13 antes de tocarlo: currentTime 0 de punta a punta del scroll.

   250vh es el mismo número que arriba de 56rem, y es lo que da pantalla y media
   de recorrido para los 8 s de clip. */
@media (max-width:55.9375rem){
  .envios{ padding:0; height:250vh; }
  .envios__escena{
    position:sticky; top:0;
    height:100vh; height:100svh;
    display:grid; align-content:center; gap:1.75rem;
    padding:0 var(--margen);
    overflow:hidden;
  }
  /* Una LONGITUD y no 100%. Lo que se abre es la ventana y el video mide
     siempre lo mismo detrás: con un porcentaje el video se estira junto con su
     caja y el desenrollado se lee como un zoom, que es justo lo que el
     comentario del rollo dice que no tiene que pasar. */
  .envios__rollo{ --ancho-abierto:calc(100vw - var(--margen) * 2); }
}

@media (prefers-reduced-motion:reduce){
  .envios{ height:auto; padding:var(--ritmo) var(--margen); }
  .envios__escena{ position:static; height:auto; padding:0; display:grid; gap:2rem; overflow:visible; }
  .envios__rollo{ width:var(--ancho-abierto); }
  .envios__dicho{ opacity:1; transform:none; }
  .pasos{ opacity:1; transform:none; }
}

/* ── Entradas y salidas ───────────────────────────────────────────────
   Los bloques sin coreografía propia entran subiendo y se van hacia arriba.
   Las dos variables las escribe entradas.js con la posición real del bloque;
   acá sólo se aplican.

   Sólo `opacity` y `transform`: las dos las resuelve el compositor sin tocar
   layout, y esto corre mientras se scrollea.

   El valor por defecto es VISIBLE, no escondido. Si el script no carga, el
   contenido está: un bloque que empieza en opacidad 0 y depende de JavaScript
   para aparecer es contenido que puede no aparecer nunca. */
[data-entra]{
  opacity:var(--visible, 1);
  transform:translate3d(0, var(--viaje, 0px), 0);
  will-change:opacity, transform;
}

@media (prefers-reduced-motion:reduce){
  [data-entra]{ opacity:1; transform:none; }
}

/* ── La cabecera fija, pasado el hero ─────────────────────────────────
   Sobre el film va apoyada y se va con él. Después se fija y da vuelta su
   reparto: el nombre a la derecha, en la franja de margen donde no hay nada, y
   los enlaces a la izquierda. Lo maneja cabecera.js.

   El reparto NO se invierte: el nombre queda a la izquierda y los enlaces a la
   derecha, igual que sobre el hero. Lo único que cambia al fijarse es que el
   nombre baja de opacidad y pasa a funcionar de botón para volver arriba. */
.marca[data-fija]{
  position:fixed;
  padding-top:clamp(.85rem,2.2vh,1.35rem);
  padding-bottom:clamp(.85rem,2.2vh,1.35rem);
  /* Un velo apenas, para que los enlaces no se pierdan sobre una foto clara
     de las que pasan por debajo. */
  background:linear-gradient(to bottom, rgba(15,26,21,.82), rgba(15,26,21,0));
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
}

/* El nombre deja de ser un rótulo y pasa a ser un botón de volver arriba: baja
   de opacidad para no competir con el contenido, y sube al pasarle el mouse.
   El foco lo devuelve entero: quien tabula tiene que ver dónde está. */
.marca[data-fija] .marca__nombre{
  opacity:.42;
  transition:opacity .3s ease;
}
.marca[data-fija] .marca__nombre:hover,
.marca[data-fija] .marca__nombre:focus-visible{ opacity:1; }

/* Un enlace que lleva a donde ya estás no es navegación, es ruido: se pliega.

   Y se pliega de verdad, no sólo se apaga. Apagado en su lugar dejaba un vacío
   de 130 px entre los dos que seguían, y un hueco se lee como que falta algo.
   La columna de la grilla va de 1fr a 0fr —el mismo recurso que la etiqueta
   del botón flotante— que anima hasta el ancho real sin tocar `max-width`.

   El hueco entre enlaces es `margin` y no `gap` justamente por esto: un `gap`
   sobrevive al ítem plegado y deja la mitad del vacío igual. El margen se va
   con él. */
.marca__nav{ gap:0; }
.marca__nav a{
  display:grid; grid-template-columns:1fr;
  margin-left:clamp(1rem,2.5vw,2rem);
  transition:grid-template-columns .35s cubic-bezier(.22,1,.36,1),
             margin-left .35s cubic-bezier(.22,1,.36,1),
             opacity .28s ease, color .2s ease;
}
.marca__nav a:first-child{ margin-left:0; }
.marca__nav a > span{ overflow:hidden; min-width:0; white-space:nowrap; }

.marca__nav a[data-oculto]{
  grid-template-columns:0fr; margin-left:0;
  opacity:0; pointer-events:none;
}

@media (prefers-reduced-motion:reduce){
  .marca[data-fija] .marca__nombre,
  .marca__nav a{ transition:none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   LA REVISTA — la página de pedidos

   Un libro que se hojea sobre una mesa: tapa, cuatro pliegos y contratapa.
   Es el formato elegido el 2026-08-19, y ese mismo día se borró el otro —el
   de capítulos, que se scrolleaba—: seis módulos, seiscientas líneas de esta
   hoja y el interruptor que los comparaba. Es la regla de siempre acá, la
   misma que se aplicó con las tipografías, la ficha del stock y el abanico.

   De aquella variante sobrevive **la tira de las otras marcas**, que se
   quedaba a la vista en los dos formatos por pedido de Facundo —«el resto de
   marcas por ahora queda el carrousel que está»—. Vive más arriba, con
   `.marca-seccion` y `.cf`, y su forma definitiva se decide aparte.

   Una página de revista es más alta que ancha —la proporción es la de un A4,
   redondeada— y todo lo que hay adentro se mide contra su alto: el
   `font-size` de la página sale de ahí, así que la caja entera escala junta y
   ninguna medida hay que tocarla dos veces.
   ═══════════════════════════════════════════════════════════════════════ */
/* ── La mesa ─────────────────────────────────────────────────────────────
   La foto de la mesa con el quinqué es el fondo de la sección entera y se
   queda ahí todo el rato que dure la lectura: la revista no está sobre una
   página web, está sobre una mesa. La lámpara viene arriba a la izquierda y
   deja el centro libre, que es exactamente donde se apoya el libro.

   ── El tamaño del libro, y el único número que hay que tocar ────────────
   `--alto-de-pantalla` es cuánto de la pantalla se lleva la página. De ahí
   sale todo lo demás: el ancho por la proporción, el cuerpo de letra por el
   alto y cada medida de adentro en `em`. Agrandar o achicar el libro es tocar
   ese número y nada más.

   El ancho tiene un SEGUNDO tope y no es cosmético. El pliego abierto se corre
   a la derecha —para dejarle libre la lámpara al margen izquierdo, ver más
   abajo— así que lo que tiene que entrar en la mesa no son dos páginas
   sino dos páginas MÁS ese corrimiento: de ahí el 2,36. Sin este tope, en una
   pantalla ancha y baja el borde derecho se va abajo del `overflow:hidden` y
   la página sale cortada al medio, que es un modo de fallar que no avisa.

   El `1rem` que se descuenta es la barra de scroll: `100vw` la incluye y esta
   página siempre scrollea, así que sin eso el tope queda un pelo corto. */
.revista{
  --ratio-pagina:.78;
  --alto-de-pantalla:min(80svh, 50rem);
  --pag-ancho:min(
    calc(var(--alto-de-pantalla) * var(--ratio-pagina)),
    calc((100vw - var(--margen) * 2 - 1rem) / 2.36)
  );
  --pag-alto:calc(var(--pag-ancho) / .78);   /* el mismo --ratio-pagina */

  --tinta:#16231D;
  --tinta-suave:rgba(22,35,29,.72);
  --tinta-filete:rgba(22,35,29,.24);
  --tinta-laton:#8A6A28;

  position:relative; isolation:isolate; overflow:hidden;
  min-height:100svh;
  display:flex; flex-direction:column; justify-content:center; align-items:center;
  gap:clamp(1rem,2.5vh,1.75rem);
  /* Arriba, lo justo para pasar por debajo de la cabecera fija. Lo que se le
     saque acá se lo lleva la página, que es lo que se quiere. */
  padding:clamp(3.75rem,7vh,5rem) var(--margen) clamp(1.5rem,3.5vh,2.25rem);
  background:#150E07 url('assets/revista/mesa.webp') center / cover no-repeat;
}

/* Dos capas encima de la madera: el calor de la lámpara sobre el ángulo de
   arriba a la izquierda, y una viñeta que apaga los bordes. La viñeta es la
   que hace que el libro se despegue del fondo — sin ella la madera iluminada
   compite con el papel, que es del mismo valor. */
.revista::after{
  content:''; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:
    radial-gradient(ellipse 62% 55% at 14% 8%, rgba(255,186,102,.20), transparent 62%),
    radial-gradient(ellipse 96% 86% at 50% 52%, transparent 38%, rgba(8,5,2,.62) 100%);
}

/* ── Dónde se apoya el libro ─────────────────────────────────────────────
   Las hojas ocupan la mitad DERECHA de la mesa, así que cerrada de un lado o
   del otro lo único que se ve está en media mesa: hay que correr media página
   para que eso quede centrado. Son tres posiciones, las tres están acá, y
   `hojear.js` sólo dice en cuál de las tres va — cuánto se corre es una
   decisión de diseño y ese módulo no tiene por qué saberla.

   **Abierto no va centrado, va corrido a la derecha.** Pedido de Facundo el
   2026-08-19, y lo que resuelve es la foto: la lámpara está arriba a la
   izquierda y con el pliego centrado el papel se le montaba encima. Corrido,
   la lámpara queda entera de un lado y el libro entero del otro — y de paso
   las páginas pueden ser más grandes, porque lo que las apretaba era tener
   que dejarle lugar a la lámpara.

   Van en medidas y no en porcentajes, que es lo que eran hasta que el
   corrimiento dejó de aplicarse a un solo elemento: un `%` de transform es
   del ancho de CADA caja, así que el mismo número movía la mesa una cosa y
   los mandos otra.

   ── Y los mandos no se mueven lo mismo que la mesa ───────────────────────
   Porque no siguen a la mesa: siguen a lo que se está VIENDO. Cerrada, la
   mesa se corre media página a la izquierda justamente para que la tapa
   —que es su mitad derecha— quede centrada en la pantalla; los mandos, que ya
   están centrados, no se tienen que mover nada. Las dos cuentas dan lo mismo
   sólo con el libro abierto, que es cuando lo que se ve es la mesa entera.

   `hojear.js` escribe `data-donde` con una de las tres, y las dos medidas
   salen de ahí. Es un solo dato en vez de dos que se pueden contradecir. */
.revista{
  --corrimiento:calc(var(--pag-ancho) * -.5);
  --corrimiento-mandos:0px;
}
.revista[data-donde="abierta"]{
  --corrimiento:calc(var(--pag-ancho) * .18);
  --corrimiento-mandos:calc(var(--pag-ancho) * .18);
}
.revista[data-donde="fin"]{
  --corrimiento:calc(var(--pag-ancho) * .5);
  --corrimiento-mandos:0px;
}

/* La mesa lleva el corrimiento y no el libro, para que las esquinas —que son
   hijas de la mesa y no del libro— se muevan con el papel. Sueltas quedaban
   un quinto de página a la izquierda de la hoja que levantan. */
.revista__mesa{
  position:relative;
  width:calc(var(--pag-ancho) * 2); height:var(--pag-alto);
  transform:translateX(var(--corrimiento));
  transition:transform .95s cubic-bezier(.4,.05,.2,1);
}

.revista__libro{
  position:relative; width:100%; height:100%;
  perspective:2800px;
}
.revista__libro:focus-visible{ outline:2px solid var(--laton); outline-offset:1.25rem; }

/* La hoja gira sobre el lomo, que es su borde izquierdo. Las dos caras van
   una contra la otra: `backface-visibility` es lo que hace que se vea el
   dorso recién cuando la hoja pasó de los noventa grados. */
/* El `translateZ` NO es un adorno: separa las hojas en profundidad.

   Sin él las cinco quedan exactamente en el mismo plano, y adentro de un
   contexto `preserve-3d` el navegador ordena por posición en el espacio, no
   por `z-index`. Con todas coplanares el desempate es indefinido y se pelean
   píxel a píxel: se veía la mitad de una página y por los huecos asomaban las
   páginas oscuras de dos hojas más atrás, con el texto tapado. Medido acá el
   2026-08-19 — el síntoma era «las fichas tienen fondo verde».

   Medio píxel por capa alcanza para desempatar y es invisible en pantalla.
   `--capa` la escribe hojear.js con el mismo número que el z-index. */
.hoja{
  --z:calc(var(--capa,0) * .5px);
  /* Cuánto se levanta la hoja del libro en la mitad del giro. Es la otra mitad
     de que parezca papel: una hoja de verdad se despega antes de caer, y sin
     esto el giro es un rectángulo rotando sobre su eje. */
  --alzado:64px;

  position:absolute; top:0; left:50%; width:50%; height:100%;
  transform-style:preserve-3d; transform-origin:left center;
  transform:translateZ(var(--z)) rotateY(var(--giro,0deg));
}
.hoja[data-vuelta]{ --giro:-180deg; }

/* Las hojas de adentro de un fajo que se cierra. No están ni de un lado ni del
   otro: están adentro, y adentro no se ve nada. Dura lo que dura el giro y lo
   pone y lo saca `hojear.js` — el porqué largo está ahí, en `saltar()`.

   `visibility` y no `opacity`: no hay que animarlo ni componer una capa, sólo
   que no esté. Y a diferencia de `display:none` no le mueve el lugar a nadie
   en la pila, que es justo lo que no queremos tocar en pleno vuelo. */
.hoja[data-en-el-fajo]{ visibility:hidden; }

/* Acá vivía `[data-quieto]`, que apagaba la mesa, los mandos y las hojas
   mientras duraba un salto del índice. Se fue el 2026-08-19 con el salto que no
   animaba: el que hay ahora abre el libro de verdad —dos hojas girando juntas—
   y lo que ese atributo apagaba es justamente lo que tiene que verse. */

/* ── El giro ─────────────────────────────────────────────────────────────
   Va por animación y no por transición, y eso lo decidió lo que se ve. Una
   transición interpola la matriz entera de un extremo al otro, así que el
   `translateZ` sólo puede ir de un valor a otro: no hay forma de pedirle que
   suba en el medio y vuelva a bajar. Con keyframes sí, y ese es exactamente el
   movimiento que faltaba.

   Las dos curvas tampoco son una sola. La primera mitad arranca lenta y
   acelera —la hoja se despega y se deja caer— y la segunda frena hasta apoyar.
   Es una hoja de papel, no un péndulo: no llega al final a la misma velocidad
   con la que salió.

   Y el 104° del medio en vez de 90° corre el momento más alto un poco después
   de la vertical, que es donde de verdad está en una revista: la hoja pasa el
   punto de equilibrio y recién ahí se cae.

   `hojear.js` escribe cuánto dura —más corto cuando hay varias en cola, que es
   lo que hace que pasar rápido se sienta como pasar rápido y no como esperar. */
.hoja[data-girando]{
  animation:hoja-gira var(--dur-hoja,1.25s) both;
  will-change:transform;
}
.hoja[data-girando="atras"]{ animation-name:hoja-vuelve; }

@keyframes hoja-gira{
  0%{
    transform:translateZ(var(--z)) rotateY(0deg);
    animation-timing-function:cubic-bezier(.5,0,.85,.35);
  }
  55%{
    transform:translateZ(calc(var(--z) + var(--alzado))) rotateY(-104deg);
    animation-timing-function:cubic-bezier(.2,.7,.3,1);
  }
  100%{ transform:translateZ(var(--z)) rotateY(-180deg); }
}

@keyframes hoja-vuelve{
  0%{
    transform:translateZ(var(--z)) rotateY(-180deg);
    animation-timing-function:cubic-bezier(.5,0,.85,.35);
  }
  55%{
    transform:translateZ(calc(var(--z) + var(--alzado))) rotateY(-76deg);
    animation-timing-function:cubic-bezier(.2,.7,.3,1);
  }
  100%{ transform:translateZ(var(--z)) rotateY(0deg); }
}

/* La sombra va HACIA ABAJO y no a los costados, y el `-1rem` de expansión
   negativa es lo que lo consigue: la mete un centímetro para adentro antes de
   difuminarla, así que de los lados casi no asoma.

   Antes era `0 1.5rem 3.5rem` sin expansión, o sea 56 px de difuminado
   derramándose para todos lados. En el lomo las dos páginas se lo tiraban
   encima la una a la otra y sumaban una banda oscura entre las dos — la que
   marcó Facundo el 2026-08-19. El libro sigue apoyado sobre la mesa, que es
   para lo que está esta sombra; lo que se va es lo que le tiraba al vecino. */
.hoja__cara{
  position:absolute; inset:0; overflow:hidden;
  backface-visibility:hidden;
  background:var(--hueso);
  box-shadow:0 1.25rem 2.5rem -1rem rgba(0,0,0,.6);
}
.hoja__cara--dorso{ transform:rotateY(180deg); }

/* La luz del quinqué cayendo sobre el papel: cálida arriba a la izquierda,
   apagándose hacia abajo a la derecha. Es lo que hace que la hoja parezca
   estar EN la mesa y no pegada encima. Por encima del contenido a propósito
   —una luz cae sobre lo que está escrito, no debajo— y sin capturar el
   puntero, o se comería los enlaces de la página. */
.hoja__cara::before{
  content:''; position:absolute; inset:0; z-index:4; pointer-events:none;
  background:linear-gradient(148deg,
    rgba(255,206,140,.20) 0%, rgba(255,206,140,.05) 34%,
    transparent 58%, rgba(26,14,2,.14) 100%);
}

/* Acá vivía la sombra del lomo: un degradado oscuro sobre el borde de adentro
   de cada página, del 9 % del ancho. La idea era la de un impreso, que se
   oscurece donde el papel se dobla.

   **Se fue el 2026-08-19.** Con las dos páginas abiertas los dos degradados se
   encontraban en el medio y sumaban una banda del 18 % del pliego, bastante
   más oscura de lo que se dobla un papel de verdad. Sumada a la sombra que
   cada cara le tiraba a la otra, lo que quedaba en el medio del libro era una
   franja negra. Es lo que marcó Facundo, y tenía razón: el gesto era correcto
   y la dosis no. */

/* Las esquinas: el gesto de pasar la hoja. Sin fondo —lo que se ve es el
   papel— y con la sombra apareciendo al pasar por encima, que es lo que dice
   que ahí se levanta. */
.revista__esquina{
  position:absolute; bottom:0; width:16%; height:22%;
  border:0; padding:0; background:transparent; cursor:pointer; z-index:20;
  transition:box-shadow .25s ease;
}
.revista__esquina--der{ right:0; }
.revista__esquina--izq{ left:0; }
.revista__esquina--der:hover{
  box-shadow:inset -1.5rem -1.5rem 2rem -1rem rgba(10,18,14,.4);
}
.revista__esquina--izq:hover{
  box-shadow:inset 1.5rem -1.5rem 2rem -1rem rgba(10,18,14,.4);
}
.revista__esquina:focus-visible{ outline:2px solid var(--laton); outline-offset:-4px; }
/* No hay esquina que levantar donde no hay hoja: cerrada sobre la contratapa
   no la hay del lado derecho.

   Y sobre la TAPA no va ninguna de las dos, por otro motivo: ahí la hoja
   entera abre la revista —`.tapa__abrir-zona`— y la esquina derecha le pasaba
   justo por encima a las dos últimas marcas del arco, comiéndose sus toques.
   Una esquina y una zona que hacen lo mismo, y la zona no tapa nada. */
.revista[data-donde="tapa"] .revista__esquina{ display:none; }
.revista[data-donde="fin"] .revista__esquina--der{ display:none; }

/* Los mandos acompañan al libro. Quietos en el centro de la pantalla quedan
   debajo de la página izquierda apenas el pliego se corre, y eso se lee como
   que están desalineados y no como que son de la página. */
.revista__mandos{
  position:relative;
  display:flex; align-items:center; gap:1.25rem;
  transform:translateX(var(--corrimiento-mandos));
  transition:transform .95s cubic-bezier(.4,.05,.2,1);
}

/* ── Volver a la tapa ────────────────────────────────────────────────────
   Va FUERA del grupo, apoyado contra su borde izquierdo, y no adentro. Metido
   entre las flechas las corría del centro de la pantalla, que es contra lo que
   uno las busca: el número de página tiene que quedar en el eje.

   `right:100%` lo saca entero para la izquierda sin ocupar lugar en el flex, así
   que agregarlo no movió un píxel de lo que ya estaba.

   Es un filete y no un botón macizo: al lado de dos flechas huecas, uno lleno
   se lee como la acción principal, y la acción principal acá es hojear. */
.revista__volver{
  position:absolute; right:100%; top:50%;
  transform:translateY(-50%); margin-right:1rem;
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.5rem .9rem; white-space:nowrap;
  border:1px solid var(--filete); border-radius:2px;
  background:transparent; color:var(--humo-bajo); cursor:pointer;
  font-family:var(--texto); font-size:.7rem;
  letter-spacing:.2em; text-transform:uppercase;
  transition:border-color .2s ease, color .2s ease, opacity .2s ease;
}
.revista__volver span{ font-size:1rem; line-height:0; }
.revista__volver:hover:not(:disabled){ border-color:var(--laton); color:var(--laton); }
.revista__volver:disabled{ opacity:0; pointer-events:none; }
.revista__volver:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
.revista__flecha{
  width:2.75rem; height:2.75rem; border-radius:50%; cursor:pointer;
  border:1px solid var(--filete); background:transparent; color:var(--hueso);
  font-size:1.5rem; line-height:1;
  transition:border-color .2s ease, color .2s ease, opacity .2s ease;
}
.revista__flecha:hover:not(:disabled){ border-color:var(--laton); color:var(--laton); }
.revista__flecha:disabled{ opacity:.25; cursor:default; }
.revista__flecha:focus-visible{ outline:2px solid var(--laton); outline-offset:2px; }
.revista__cuenta{
  margin:0; min-width:6rem; text-align:center;
  font-size:.75rem; letter-spacing:.2em; text-transform:uppercase;
  color:var(--humo-bajo);
}

/* ── La página impresa ───────────────────────────────────────────────────
   Papel hueso y tinta verde: es la misma paleta del sitio dada vuelta. El
   `font-size` sale del alto de la página, así que todo lo de adentro se mide
   en `em` y la caja entera escala de una. */
.pagina{
  position:absolute; inset:0;
  display:flex; flex-direction:column;
  padding:2.2em 2em 1.8em;
  background:var(--hueso); color:var(--tinta);
  /* Dividido por 40 y no por 34: con la escala de una pantalla, la columna de
     texto de la página de Rolex se comía la leyenda y la banda de abajo. Una
     página impresa tiene el cuerpo chico y mucho renglón, no al revés. */
  font-family:var(--texto); font-size:calc(var(--pag-alto) / 40);
  line-height:1.5;
}

.pagina__folio{
  display:flex; justify-content:space-between; align-items:baseline;
  margin:0 0 1.5em; padding-bottom:.5em;
  border-bottom:1px solid var(--tinta-filete);
  font-size:.6em; letter-spacing:.24em; text-transform:uppercase;
  color:var(--tinta-suave);
}
.pagina[data-mano="der"] .pagina__folio{ flex-direction:row-reverse; }
.pagina__numero{ font-family:var(--display); letter-spacing:.1em; }





.pagina__epigrafe{
  margin:.9em 0 0; font-size:.68em; line-height:1.45; color:var(--tinta-suave);
  font-style:italic;
}



/* ── La página de una marca ──────────────────────────────────────────────
   La disposición del sketch del 2026-08-19: cabecera con la marca, su logo y
   el nombre de la casa; una bajada; y las piezas, cada una con su encuadre.

   Las piezas se reparten el alto con `flex`, así que la página no se desborda
   por más que un texto crezca — lo que cede es la foto, no el renglón. */
.pagina--marca{ display:flex; flex-direction:column; gap:.9em; }

/* ── Una pieza ─────────────────────────────────────────────────────────
   **Sin `min-height:0`, y es lo que la arregló.** Con esa línea la pieza podía
   encogerse por debajo de su propio texto, así que al agrandar las fotos el
   2026-08-19 la primera del pliego se quedó en 162 px con 230 de contenido: el
   epígrafe y el botón caían fuera de la caja, encima de la pieza de abajo, y
   los tapaba el `overflow:hidden` de la página. Se veía como que a esa pieza
   le faltaban cosas.

   Ahora el piso de cada pieza es su texto —lo que puede achicarse es la foto,
   que para eso lleva su propio `min-height:0`— y el reparto por `flex` sólo
   se juega el espacio que sobra. */
.reloj{ display:grid; gap:.9em; }

.reloj__figura{
  margin:0; min-height:0; display:flex; flex-direction:column; gap:.35em;
}
.reloj__imagen{
  position:relative; flex:1; min-height:0; overflow:hidden;
  background:rgba(22,35,29,.06);
}
.reloj__foto{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.reloj__sinfoto{
  position:absolute; inset:0; display:grid; place-items:center;
  font-size:.6em; text-transform:uppercase; color:var(--tinta-suave);
}

/* El pie de foto: el número de la pieza y de qué está hecha. Los materiales
   van acá y no en la ficha porque un epígrafe describe lo que se ve. */
.reloj__epigrafe{
  display:flex; gap:.5em; align-items:baseline;
  font-size:.6em; line-height:1.4; font-style:italic; color:var(--tinta-suave);
}
.reloj__numero{
  flex:none; font-family:var(--display); font-style:normal;
  letter-spacing:.1em; color:var(--tinta-laton);
}

.reloj__cuerpo{ display:flex; flex-direction:column; min-width:0; }
.reloj__modelo{
  margin:0; font-family:var(--display); font-weight:400;
  font-size:1.3em; line-height:1.12; text-wrap:balance;
}
/* El interlineado es de imprenta y no de pantalla: 1,42 y no 1,5. Lo decidió
   una medición, no el gusto — con 1,5 la página 05 se pasaba 6 px, porque las
   frases de Omega son bastante más largas que las de Rolex.

   **Y ahí está el límite real de este pliego**: la suma de los textos de las
   piezas de una página es su piso, así que una frase larga de más no achica la
   foto, empuja fuera de la hoja. Antes de escribir una frase de cuatro
   renglones conviene mirar la página armada. */
.reloj__resumen{
  margin:.6em 0 0; font-size:.75em; line-height:1.42; color:var(--tinta-suave);
}
/* Chico y con filete: en una página con cuatro piezas, cuatro botones macizos
   se comen la página y deja de leerse como una revista.

   **Va pegado al pie de su columna de texto y arranca donde arranca el texto.**
   Antes cada uno caía donde terminaba su bloque, así que los cuatro del pliego
   quedaban a cuatro alturas y a cuatro sangrías distintas — que es lo que
   Facundo vio el 2026-08-19 y llamó «todo desalineado». Con el `auto` de
   arriba y el `start` de la izquierda, los cuatro se apoyan en el mismo
   renglón de abajo que su foto y en la misma vertical que su título. */
.reloj__pedir{
  margin-top:auto; align-self:start; justify-self:start;
  display:inline-flex; align-items:center; gap:.4em;
  padding:.5em 1em; border:1px solid var(--tinta-laton);
  color:var(--tinta-laton); text-decoration:none;
  font-size:.66em; letter-spacing:.14em; text-transform:uppercase;
  transition:background .2s ease, color .2s ease;
}
.reloj__pedir svg{ width:1.2em; height:1.2em; }
.reloj__pedir:hover{ background:var(--tinta-laton); color:var(--hueso); }
.reloj__pedir:focus-visible{ outline:2px solid var(--tinta-laton); outline-offset:2px; }

/* ── Los cuatro encuadres ────────────────────────────────────────────────
   Que ninguna pieza se vea igual que la de al lado es lo que separa una
   página de revista de una grilla de fichas. Pero **el corte entre foto y
   texto es siempre el mismo** —62/38, y espejado en la que va al revés—, y
   eso es lo que las hace variadas sin que se vean desalineadas: cambia el
   lado y cambia la proporción de la foto, no la retícula.

   El 62 % es el otro pedido del 2026-08-19: fotos más grandes. Venían en
   45 % la de retrato y 56 % la ancha, con el texto quedándose con más de la
   mitad de una página donde lo que se mira son los relojes. */
/* ── Las tres de al lado, y por qué el epígrafe sale de la figura ────────
   Facundo pidió el 2026-08-19 que el botón se apoye en el borde de abajo de la
   FOTO. Estaba apoyado en el de la figura, que es la foto más su epígrafe, y
   por eso caía un renglón más abajo que la imagen: se leía como suelto.

   Para poder alinearlo hay que romper esa caja. La figura pasa a `contents`
   —deja de ser un bloque y sus dos partes caen directo en la grilla de la
   pieza— y así la foto y el texto comparten la fila de arriba mientras el
   epígrafe se va a una fila propia, debajo de la foto y sólo de la foto.

   Se conserva el `<figure>` con su `<figcaption>` en el marcado, que es lo que
   dice que ese pie es de esa imagen. `display:contents` saca la caja, no la
   semántica. */
.reloj{ --foto:62%; }
.reloj--ancha,
.reloj--espejada{
  flex:1;
  grid-template-rows:minmax(0,1fr) auto;
  /* La fila apretada y la columna suelta: el epígrafe es el pie de la foto y
     va pegado a ella, no a la misma distancia que la columna de texto. */
  gap:.35em .9em;
}
.reloj--ancha .reloj__figura,
.reloj--espejada .reloj__figura{ display:contents; }

.reloj--ancha{ grid-template-columns:var(--foto) 1fr; }
/* El nombre, en un renglón. Medido el 2026-08-19: «GMT-Master II» necesita
   165 px y la columna da 164, así que a 1,3em se partía por el guión y quedaba
   «GMT-» arriba. Un punto menos de cuerpo lo resuelve con margen.

   No va `nowrap`: los de Omega —«Seamaster Aqua Terra 150M»— necesitan casi el
   doble de la columna, y ahí partir es lo correcto. */
.reloj--ancha .reloj__modelo,
.reloj--espejada .reloj__modelo{ font-size:1.2em; }

.reloj--ancha .reloj__imagen{ grid-area:1 / 1; }
.reloj--ancha .reloj__epigrafe{ grid-area:2 / 1; }
.reloj--ancha .reloj__cuerpo{ grid-area:1 / 2; }

/* Espejada: el texto a la izquierda y la foto a la derecha, con el mismo
   corte dado vuelta. */
.reloj--espejada{ grid-template-columns:1fr var(--foto); }
.reloj--espejada .reloj__imagen{ grid-area:1 / 2; }
.reloj--espejada .reloj__epigrafe{ grid-area:2 / 2; }
.reloj--espejada .reloj__cuerpo{ grid-area:1 / 1; }

/* Acá vivían `.reloj--retrato` y `.reloj--apaisada`, las dos formas de la
   página de Rolex. Se fueron el 2026-08-20 con la disposición que las usaba
   —`retratoYApaisada`, en `revista.js`, donde está el porqué— cuando llegaron
   las fotos de catálogo y ninguna venía en 2,32. */

/* ── En columnas: las dos piezas de a lado ───────────────────────────────
   El segundo de los tres sketches. La pieza cambia de eje —la foto arriba y el
   texto debajo, en vez de uno al lado del otro— y por eso `reloj--columna` es
   la única forma que no usa la grilla de dos columnas de las demás.

   Es la disposición que más aire deja alrededor de cada foto, y por eso le toca
   a las marcas de una sola pieza icónica: con dos fotos grandes enfrentadas, la
   página no necesita nada más. */
.columnas{
  flex:1; min-height:0;
  display:grid; grid-template-columns:1fr 1fr; gap:1.2em;
}
.reloj--columna{
  grid-template-columns:1fr; grid-template-rows:minmax(0,1fr) auto auto;
  gap:.5em; min-height:0;
}
.reloj--columna .reloj__figura{ display:contents; }
.reloj--columna .reloj__imagen{ grid-row:1; }
.reloj--columna .reloj__epigrafe{ grid-row:2; }
.reloj--columna .reloj__cuerpo{ grid-row:3; }
/* El nombre entra en media página, así que puede ir un punto más grande que en
   las formas de al lado — ahí la columna de texto es la mitad de ancha. */
.reloj--columna .reloj__modelo{ font-size:1.25em; }
.reloj--columna .reloj__pedir{ margin-top:.7em; }

/* ── La consulta suelta ──────────────────────────────────────────────────
   El recuadro de «escriba a esta dirección» de los avisos viejos, que acá
   contesta la única pregunta que la revista deja abierta: qué pasa si lo que
   busco no está en estas páginas. */
.consulta{
  display:flex; align-items:center; justify-content:space-between; gap:1em;
  padding:.65em .85em;
  border-top:1px solid var(--tinta-filete);
  border-bottom:1px solid var(--tinta-filete);
}
.consulta__texto{
  margin:0; font-size:.78em; line-height:1.35; font-style:italic;
  color:var(--tinta-suave);
}
.consulta__burbuja{
  flex:none; width:2.1em; height:2.1em; border-radius:50%;
  display:grid; place-items:center;
  background:var(--tinta-laton); color:var(--hueso);
  transition:transform .2s ease;
}
.consulta__burbuja svg{ width:1.2em; height:1.2em; }
.consulta__burbuja:hover{ transform:scale(1.08); }
.consulta__burbuja:focus-visible{ outline:2px solid var(--tinta); outline-offset:3px; }

/* ── La galería numerada ─────────────────────────────────────────────── */
/* Una arriba a lo ancho y las otras cuatro de a dos. En una sola columna, las
   cinco quedaban en tiras de 3,3 a 1: de una foto vertical de reloj no se veía
   más que una banda de fondo. Repartidas en dos columnas cada celda es casi
   cuadrada y la pieza entra entera. */
.galeria{
  list-style:none; margin:0; padding:0; flex:1; min-height:0;
  display:grid; grid-template-columns:1fr 1fr; grid-template-rows:1.3fr 1fr 1fr;
  gap:.5em;
}
.galeria__pieza{
  position:relative; min-height:0; overflow:hidden;
  background:rgba(22,35,29,.06);
}
.galeria__pieza:first-child{ grid-column:1 / -1; }
/* La caja de la foto, absoluta: como hijo normal la imagen se dibujaba a su
   tamaño real y empujaba la grilla fuera de la página. */
.galeria__imagen{ position:absolute; inset:0; }
.galeria__foto{ width:100%; height:100%; object-fit:cover; }
.galeria__numero{
  position:absolute; top:.45em; left:.5em;
  width:1.9em; height:1.9em; border-radius:50%;
  display:grid; place-items:center;
  background:var(--hueso); color:var(--tinta);
  font-family:var(--display); font-size:.8em;
}
.galeria__pieza:nth-child(odd) .galeria__numero{ left:auto; right:.5em; }
.galeria__sinfoto{
  position:absolute; inset:0; display:grid; place-items:center;
  font-size:.6em; letter-spacing:.14em; text-transform:uppercase;
  color:var(--tinta-suave);
}



.columnas__foto{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.columnas__sinfoto{
  position:absolute; inset:0; display:grid; place-items:center;
  font-size:.6em; text-transform:uppercase; color:var(--tinta-suave);
}


/* ── La tapa ─────────────────────────────────────────────────────────────
   El arte es una imagen generada —el único lugar de la revista donde eso
   corresponde, porque no tiene ni un dato adentro— y el texto va tipografiado
   encima. Así cambiar «Edición 01» no cuesta volver a generar nada, y las
   tildes que el generador se come no quedan cocidas en el píxel.

   El arte se compuso para esto: el tercio de arriba quedó verde y vacío para
   la cabecera, y el arco de logos entra por el costado y sale por abajo a la
   derecha, dejando libre el ángulo de abajo a la izquierda para los
   titulares. */
.pagina--tapa{
  padding:0; background:#0C4B38; color:var(--hueso);
  display:flex; flex-direction:column; justify-content:space-between;
}
.tapa__arte{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
}

/* Toda la tapa abre la revista. Va debajo del texto y de las marcas —los dos
   llevan `z-index` propio— así que sólo se lleva los toques del papel vacío. */
.tapa__abrir-zona{
  position:absolute; inset:0; z-index:1;
  border:0; padding:0; background:transparent; cursor:pointer;
}
.tapa__abrir-zona:focus-visible{ outline:2px solid var(--hueso); outline-offset:-6px; }

/* ── Las once marcas grabadas en el arco ─────────────────────────────────
   Los porcentajes que trae `revista.js` son del ARCHIVO del arte, así que hay
   que rehacer a mano la cuenta de `object-fit:cover` para saber dónde cae cada
   uno en la página. El arte es 3:4 y la página es más ancha, así que la imagen
   se escala por el ANCHO —de ahí que la x pase tal cual— y le sobra alto, que
   se recorta igual arriba y abajo. Eso es lo que corrige la y:

       alto del arte / alto de la página  =  --ratio-pagina / .75  =  k
       y en la página  =  50% + (y en el arte − 50%) × k

   Se hace en cada marca y no en una caja 3:4 que las contenga a todas, que fue
   el primer intento: esa caja es más alta que la página y le asomaba 14 px por
   arriba y por abajo, así que la tapa quedaba diciendo que tiene contenido
   afuera — justo el dato que se mira para saber si un pliego no entra.

   **Ojo si alguna vez `--ratio-pagina` baja de .75**: ahí la página pasaría a
   ser más angosta que el arte, `cover` escalaría por el alto y la cuenta se da
   vuelta. Hoy es .78. */
.tapa__marcas{
  position:absolute; inset:0; z-index:2;
  pointer-events:none;
}
.tapa__marca{
  --k:calc(var(--ratio-pagina) / .75);
  position:absolute;
  left:var(--x); top:calc(50% + (var(--y) - 50%) * var(--k));
  width:8%; aspect-ratio:1; transform:translate(-50%,-50%);
  pointer-events:auto; cursor:pointer;
  padding:0; border:1px solid transparent; border-radius:50%;
  background:transparent;
  transition:border-color .2s ease, background .2s ease;
}
/* Un aro apenas visible: el grabado ya se ve, lo que falta es decir que se
   toca. Oscuro y no claro porque debajo está la cinta color hueso.

   Va por `data-encima` y no por `:hover`, y por la misma razón por la que el
   toque se resuelve a mano en `hojear.js`: adentro de un contexto
   `preserve-3d` estas marcas no reciben el puntero, así que `:hover` tampoco
   se enciende nunca. El módulo escucha el movimiento y marca cuál está debajo. */
.tapa__marca[data-encima]{
  border-color:rgba(26,20,8,.45); background:rgba(26,20,8,.08);
}
.tapa__marca:focus-visible{
  outline:2px solid var(--tinta-laton); outline-offset:2px;
}
/* Y el cursor, que por lo mismo tampoco lo pone el botón. */
.revista__libro[data-sobre-marca]{ cursor:pointer; }

/* De canto sobre el borde, como el lomo impreso de la referencia de
   «Relojes & Estilo». */
/* Corto y arriba, no de punta a punta: largo cruzaba por encima de los
   titulares de abajo, que empiezan a media página. */
.tapa__lomo{
  position:absolute; left:.55em; top:1.8em; z-index:3; margin:0;
  transform:rotate(180deg); writing-mode:vertical-rl;
  font-size:.5em; letter-spacing:.24em; text-transform:uppercase;
  color:rgba(242,240,234,.5);
}

.tapa__cabecera{ position:relative; z-index:2; padding:1.5em 1.8em 0; text-align:center; }
.tapa__titulo{
  margin:0; font-family:var(--display); font-weight:400;
  font-size:2.05em; line-height:1.02; letter-spacing:.03em; text-transform:uppercase;
  text-shadow:0 1px 14px rgba(4,26,18,.45);
}
.tapa__titulo span{ display:block; color:#E9D6A8; }
/* `nowrap` en cada dato: son tres renglones cortos separados por filetes y
   partidos en cuatro líneas cada uno no son un cintillo, son una lista. */
.tapa__cintillo{
  display:flex; justify-content:center; align-items:center; gap:.9em;
  margin:.85em 0 0; padding-top:.5em;
  border-top:1px solid rgba(242,240,234,.32);
  font-size:.5em; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(242,240,234,.72);
}
.tapa__cintillo span{ white-space:nowrap; }
.tapa__cintillo span + span::before{
  content:'·'; margin-right:.9em; color:rgba(242,240,234,.45);
}
.tapa__tema{ color:#E9D6A8; letter-spacing:.2em; }

/* El titular, debajo del cintillo y todavía sobre el verde limpio. Estuvo
   encima del reloj hasta el 2026-08-19 y de ahí venía su sombra de texto: era
   lo único que lo hacía legible sobre la foto. Acá no hace falta. */
.tapa__principal{
  margin:.75em auto 0; max-width:15ch;
  font-family:var(--display); font-size:1.5em; line-height:1.12;
}

/* El plazo y las casas, al costado del reloj: la foto se apoya en el ángulo de
   abajo a la izquierda y el arco sale por el de abajo a la derecha, así que el
   verde libre es la franja del medio. Los dos márgenes son eso —el izquierdo
   esquiva el reloj y el derecho, el arco— y por eso van en porcentaje del
   ancho de la página y no en `em`: lo que tienen que despejar es un dibujo de
   la imagen, que escala con ella y no con la letra. */
.tapa__titulares{
  position:relative; z-index:2; padding:0 24% 1.5em 34%;
}

/* El plazo es el único número de la revista, así que se dice como se dice un
   número en un impreso: el rótulo chico y en versalitas arriba, y la cifra
   grande debajo. Puesto en un renglón corrido —«Plazo de encargos: 7 a 60
   días»— se lee como una aclaración al pie y es justo lo contrario: es la
   respuesta a lo primero que pregunta el que mira algo que no está. */
.tapa__plazo{
  margin:0 0 .9em; padding-bottom:.7em;
  border-bottom:1px solid rgba(242,240,234,.3);
  font-size:.5em; letter-spacing:.22em; text-transform:uppercase;
  color:rgba(242,240,234,.68);
}
.tapa__plazo span{
  display:block; margin-top:.5em;
  font-family:var(--display); font-size:2.1em;
  letter-spacing:.01em; text-transform:none;
  color:#E9D6A8;
}

.tapa__casas{
  margin:0;
  font-size:.58em; letter-spacing:.16em; text-transform:uppercase;
  color:rgba(242,240,234,.78);
}
/* ── La portada de marca ─────────────────────────────────────────────────
   Arte a sangre y nada más: ni folio ni texto encima. Es la página izquierda
   del pliego de todas las marcas que no son Rolex ni Omega.

   El arte es 3:4 y la página algo más ancha, así que `cover` escala por el
   ancho y recorta un poco arriba y abajo — que es lo mismo que hace la tapa, y
   por eso las dos se generan con la misma proporción. */
.pagina--portada{ padding:0; overflow:hidden; background:var(--tinta); }
.portada__arte{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
}

/* ── La contratapa ───────────────────────────────────────────────────── */
.pagina--contratapa{
  align-items:center; justify-content:center; text-align:center;
  background:var(--superficie-2); color:var(--hueso);
}
.contratapa__cintillo{
  margin:0 0 1.4em; font-size:.6em; letter-spacing:.34em;
  text-transform:uppercase; color:var(--laton);
}
.contratapa__titular{
  margin:0 0 .8em; font-family:var(--display); font-weight:400;
  font-size:1.9em; line-height:1.2;
}
.contratapa__nota{
  margin:0 0 1.6em; max-width:30ch; font-size:.9em; line-height:1.6;
  color:rgba(242,240,234,.78);
}
.contratapa__pedir{
  display:inline-flex; align-items:center; gap:.5em;
  padding:.8em 1.6em; border-radius:2px;
  background:var(--laton); color:#1A1408; text-decoration:none;
  font-size:.85em;
}
.contratapa__pedir svg{ width:1.2em; height:1.2em; }
.contratapa__pie{
  margin:1.8em 0 0; font-size:.58em; letter-spacing:.2em;
  text-transform:uppercase; color:rgba(242,240,234,.45);
}

.pagina--blanca{ background:var(--hueso); }

/* ── En el teléfono no hay libro: hay un carrusel ────────────────────────
   Dos páginas de revista al lado de la otra en 390 px no se leen, así que el
   libro no va. Lo que va es lo que pidió Facundo el 2026-08-20: **páginas
   sueltas que se corren para el costado**, la siguiente entrando por la
   derecha, y un solo control al pie para volver a la tapa.

   ── Por qué se corrió del apilado vertical ────────────────────────────────
   Hasta acá las veinticuatro caras se desplegaban una debajo de la otra.
   Medido en vivo el 2026-08-20: **12.284 px de scroll en un 390** y 13.404 en
   un 430. Doce metros para once marcas. Y lo que se perdía no era sólo largo:
   el hojeo —que es lo que hace linda a la página— desaparecía justo abajo de
   62rem, que es por donde entra la mayoría.

   ── Scroll nativo y no un motor propio ────────────────────────────────────
   El gesto es deslizar, que es el que la mano ya trae, y el navegador ya lo
   hace bien: inercia, rebote, y el dedo pegado al papel. `scroll-snap` es lo
   único que hace falta para que cada página quede encuadrada. Escribir un
   carrusel a mano sería reimplementar peor lo que ya está — y el motor de
   giro de `hojear.js` sigue intacto para el escritorio.

   ── La hoja deja de existir ───────────────────────────────────────────────
   `display:contents` la borra como caja y sus dos caras pasan a ser dos
   páginas sueltas del carrusel. Es lo que corresponde: la hoja es una unidad
   de papel —dos caras del mismo pliego— y eso sólo significa algo cuando gira
   sobre el lomo. Acá no gira nadie, así que la unidad es la página. */
@media (max-width:61.99rem){
  .revista{
    --pag-ancho:100%;
    --pag-alto:min(78svh, 34rem);
    min-height:0; padding-top:clamp(4.5rem,12vh,6rem);
  }
  .revista__mesa{ width:100%; height:auto; transform:none; }

  .revista__libro{
    perspective:none;
    display:flex; flex-direction:row; gap:0;
    overflow-x:auto; overflow-y:hidden;
    scroll-snap-type:x mandatory;
    scroll-behavior:smooth;
    /* Que el gesto no arrastre la página de atrás cuando el carrusel llega al
       borde: en el teléfono eso es lo que dispara el «volver atrás» del
       navegador y te saca del sitio sin querer. */
    overscroll-behavior-x:contain;
    scrollbar-width:none;
  }
  .revista__libro::-webkit-scrollbar{ display:none; }

  .hoja{ display:contents; }
  .hoja[data-vuelta]{ transform:none; }

  .hoja__cara{
    position:relative; inset:auto;
    flex:0 0 100%;
    scroll-snap-align:center;
    /* Una página por gesto. Sin esto un deslizón fuerte se lleva tres o
       cuatro, y una revista se hojea de a una. */
    scroll-snap-stop:always;
    aspect-ratio:var(--ratio-pagina); backface-visibility:visible;
    transform:none;
  }
  .hoja__cara--dorso{ transform:none; }
  .hoja__cara::after{ display:none; }

  /* La página en blanco es el dorso sobrante de la última hoja: existe porque
     un pliego tiene dos caras aunque sólo se escriba una. Apilada abajo de
     todo no molestaba; como página suelta del carrusel sería una pantalla
     vacía al final, que se lee como que la revista se rompió. */
  .hoja__cara:has(.pagina--blanca){ display:none; }

  /* ── Una sola disposición, y es «en columnas» ──────────────────────────
     En el escritorio hay cuatro disposiciones y eso es lo que hace que la
     revista no se lea como una grilla de fichas. En el teléfono no se
     sostienen: la página mide la mitad y los cortes de 62/38 dejan una
     columna de texto de 130 px. Medido el 2026-08-20, las cajas de foto se
     aplastaban a proporciones que no son las que se diseñaron —de 1,34 a
     1,00— y **la apaisada colapsaba a 296 × 14 px**, o sea a una tira.

     Decisión de Facundo el 2026-08-20: en el teléfono va una sola forma, la
     de columnas —las dos piezas de a lado, foto arriba y texto debajo—, que
     es la única de las cuatro que no depende del ancho para partir la página.
     Las otras «se cortan y no se leen enteros».

     Lo que sigue reescribe las otras tres para que se comporten como ésa. La
     grilla la toma la página, `.columnas` se disuelve —los pliegos que ya
     venían en columnas no traen una caja de más— y el folio y la franja de
     consulta cruzan las dos columnas. */
  /* ── Tres franjas: folio arriba, las piezas al medio, la barra al pie ──
     El `1fr` del medio es lo que reparte el espacio en vez de dejarlo todo
     junto arriba. Antes la página era `align-content:start` y el sobrante
     —de 24 a 117 px según la marca— caía entero al final, así que el
     contenido se leía apretado contra el techo y con un hueco abajo.

     Y la barra de consulta va SIEMPRE al pie. En el marcado no siempre está
     ahí: la disposición `conFranja` —Omega, Richard Mille, Vacheron, Tudor—
     la escribe ENTRE las dos piezas, porque en el escritorio ése es el corte
     que las separa. Metida en una grilla de dos columnas, esa franja del
     medio partía la página al medio y dejaba los relojes uno abajo del otro
     en vez de lado a lado: son las cuatro que Facundo marcó como «rotas».

     `order` lo arregla sin tocar el marcado, que es lo correcto: el orden del
     DOM es el de lectura y el del escritorio, y lo que cambia acá es sólo
     dónde se dibuja. */
  .pagina--marca{
    display:grid; grid-template-columns:1fr 1fr;
    grid-template-rows:auto 1fr auto;
    gap:1.1em .9em;
  }
  .pagina--marca .pagina__folio{ order:-1; grid-column:1 / -1; }
  .pagina--marca .consulta{ order:9; grid-column:1 / -1; align-self:end; }
  .columnas{ display:contents; }

  .reloj{
    flex:none; min-height:0;
    grid-template-columns:1fr; grid-template-rows:auto auto 1fr;
    /* Reparte lo que sobra entre la foto, el epígrafe y el texto en vez de
       apilarlos y dejar el aire al final. Es el mismo criterio que la página,
       un nivel más adentro. */
    align-content:space-between; gap:.6em;
  }
  .reloj .reloj__figura{ display:contents; }
  /* `grid-area:auto` borra los `1 / 2` con los que las formas de escritorio
     mandan la foto o el texto a la segunda columna: acá no hay segunda. */
  .reloj .reloj__imagen{ grid-area:auto; grid-row:1; }
  .reloj .reloj__epigrafe{ grid-area:auto; grid-row:2; }
  /* El botón se apoya en el piso de la pieza y no debajo del texto. Los
     nombres no miden todos lo mismo —«GMT-Master II» entra en un renglón y
     «Day-Date 40 «President»» en dos— así que colgando del texto los dos
     botones de una página quedan a distinta altura y las columnas se leen
     desparejas. Con `margin-top:auto` el aire sobrante se va arriba del botón
     y los dos aterrizan en la misma línea. */
  .reloj .reloj__cuerpo{
    grid-area:auto; grid-row:3;
    display:flex; flex-direction:column; align-items:flex-start;
  }
  .reloj .reloj__modelo{ font-size:1.25em; }
  .reloj .reloj__resumen{ margin:.35em 0 .7em; }
  .reloj .reloj__pedir{ margin-top:auto; }

  /* ── Y la foto deja de depender del alto que sobre ─────────────────────
     Éste es el arreglo de fondo. En el escritorio la caja de la foto es
     `flex:1` y se queda con el alto que le deja el texto, que funciona
     mientras la página sea alta. Acá no lo es, así que el sobrante era
     cualquier cosa y por eso las proporciones salían distintas en cada
     página. Con una proporción fija la foto manda y el texto se acomoda
     debajo: las veintidós cajas del teléfono miden exactamente lo mismo.

     4:3 y no otra: es la proporción de la `ancha` y la `espejada` del
     escritorio —1,34 medido—, que son catorce de las veintidós piezas. Con
     eso **la misma foto sirve para las dos pantallas** en esas catorce, que
     es lo que pidió Facundo. */
  .reloj .reloj__imagen{ aspect-ratio:4 / 3; }

  /* El resumen es lo único de largo libre que hay en la página: lo escribe el
     cliente y una frase de más la desborda. Con la foto de alto fijo, acotarlo
     es lo que hace que las once páginas entren **siempre** — hoy con el texto
     que hay, y mañana con el que venga.

     Tres renglones y no dos: cuatro son los que necesita el de Omega, que es
     el más largo de los veintidós, así que dos partirían la mitad de las
     frases y tres cortan una sola. Y lo que se desbordaba no era un renglón
     de más: era el botón de pedir, que caía fuera de la página. */
  .reloj .reloj__resumen{
    display:-webkit-box; -webkit-box-orient:vertical;
    -webkit-line-clamp:3; line-clamp:3; overflow:hidden;
  }


  /* Ni esquinas ni zona de abrir la tapa: acá las veinticuatro caras están a
     la vista y `pasar()` volvería a esconder las que no toca con `inert`, o
     sea que un toque en la tapa se llevaba puesta la revista entera.

     Los mandos SÍ vuelven, pero pelados: sin flechas y sin número de página.
     «Un botón para volver a la tapa, nada más» — deslizar ya es el modo de
     pasar, y dos flechas al lado del gesto son maquinaria que estorba. */
  .revista__esquina, .tapa__abrir-zona{ display:none; }
  .revista__flecha, .revista__cuenta{ display:none; }
  .revista__mandos{
    transform:none; justify-content:center; margin-top:1.25rem;
  }
  .revista__volver{
    position:static; transform:none; margin-right:0;
  }
}

/* Con movimiento reducido la hoja cambia de golpe. El libro sigue siendo un
   libro: lo que se saca es el giro de casi un segundo, que es lo que esa
   preferencia pide. */
@media (prefers-reduced-motion:reduce){
  .hoja, .revista__libro, .revista__esquina, .revista__mesa,
  .revista__mandos{ transition:none; }
  /* Y sin giro: la hoja cambia de golpe. El libro sigue siendo un libro; lo
     que se saca es el segundo largo de vuelo, que es lo que pide esta
     preferencia. */
  .hoja[data-girando]{ animation:none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   La página de contacto — el pedido y la reseña

   Dos formularios con la misma forma. El pedido capta el mail de alguien que
   busca un reloj; la reseña la deja el que ya compró, con su foto.

   ── Los campos no son cajas ──────────────────────────────────────────────
   Es el mismo recurso que la barra de filtros del stock, y por el mismo
   motivo: un `<input>` con marco entero, fondo propio y esquina redonda se lee
   igual en una tienda de zapatillas que acá. Acá cada campo es un renglón
   cortado abajo por un filete —los sectores de un cronógrafo— y lo que queda a
   la vista es el **valor**, que es lo único que hay que leer.

   El costo hay que pagarlo, y es el mismo que allá: sin borde no hay nada que
   resaltar al enfocar. El foco se dibuja con el filete propio, que pasa a
   latón entero y engorda — no con el anillo del navegador, que sobre este
   verde no se ve.
   ═══════════════════════════════════════════════════════════════════════ */

/* El ancho de lectura del sitio. */
.tramite{ max-width:44rem; margin-inline:auto; }

.tramite{ margin-top:2.5rem; display:flex; flex-direction:column; gap:1.75rem; }

.tramite__campo{
  position:relative;
  display:flex; flex-direction:column; gap:.4rem;
  border:0; padding:0; margin:0;               /* también sirve al `fieldset` */
  border-bottom:1px solid var(--filete);
  padding-bottom:.7rem;
  transition:border-color .2s ease;
}

/* ── El filete se dibuja ─────────────────────────────────────────────────
   **Es el único momento de autor de la página, y es uno solo repetido nueve
   veces.** Al enfocar un campo, un segundo filete de latón se dibuja de
   izquierda a derecha sobre el que ya está. No aparece: se traza.

   Por qué esto y no un resplandor: en este diseño **la luz la pone el
   material, no el puntero** —regla del DESIGN.md, escrita después de que el
   cliente rechazara tres efectos de luz seguidos—. Lo que sí funciona es que
   las cosas se muevan. Un campo que se ilumina al tocarlo sería el cuarto
   intento; un filete que se traza es movimiento.

   Y no corre solo: existe mientras hay un dedo o un cursor en el campo, que
   es la otra regla —ninguna animación perpetua, porque gasta batería sin que
   haga falta que haya alguien mirando—.

   Va en `transform` y no en `width`: `width` recalcula la caja en cada cuadro
   y es lo que el detector marca, con razón. La curva es de salida exponencial
   —arranca rápido y frena— desde un estado que ya se ve: el filete gris
   siempre estuvo ahí, el latón lo repasa. */
.tramite__campo::after{
  content:''; position:absolute; left:0; right:0; bottom:-1px; height:1px;
  background:var(--laton);
  transform:scaleX(0); transform-origin:left center;
  transition:transform .45s cubic-bezier(.2,.7,.2,1);
}
.tramite__campo:focus-within::after{ transform:scaleX(1); }

/* La etiqueta pesa menos que el valor, no al revés. */
.tramite__rotulo{
  font-family:var(--texto); font-size:.75rem; letter-spacing:.16em;
  text-transform:uppercase; color:var(--humo-bajo);
  padding:0;                                    /* el `legend` trae el suyo */
}

.tramite__valor{
  width:100%; border:0; background:transparent; padding:.15rem 0;
  font-family:var(--texto); font-size:1.0625rem; color:var(--hueso);
  /* Safari en iOS le pone fondo y esquina propios a todo campo. */
  appearance:none; border-radius:0;
}
/* El placeholder estaba en `.34` y **medía 2,88:1 contra el fondo**, o sea que
   no llegaba al 4,5 de AA. Es exactamente el error que PRODUCT.md tiene
   anotado de la v1: dos colores que pasaban la mirada y no la medición.
   En `.5` mide 4,79. Sigue leyéndose como pista y no como valor porque va en
   itálica, que es la diferencia que hay que hacer — no la de apagarlo hasta
   que no se vea. */
.tramite__valor::placeholder{ color:rgba(242,240,234,.5); font-style:italic; }
/* El anillo del navegador no se ve sobre este verde: lo reemplaza el filete
   del campo, que ya engordó en `:focus-within`. */
.tramite__valor:focus{ outline:none; }
.tramite__valor--largo{ resize:vertical; min-height:4.5rem; line-height:1.5; }

/* ── El puntaje ──────────────────────────────────────────────────────────
   Cinco radios, no un selector de estrellas hecho a mano: cinco opciones
   excluyentes SON un grupo de radios, y así anda con teclado y con lector de
   pantalla sin escribir una línea de JavaScript. El radio nativo se esconde y
   lo dibuja su etiqueta. */
/* El `gap` del fieldset NO separa la leyenda de las cajas, y esta regla estuvo
   puesta creyendo que sí: **un `<legend>` no es un ítem flex**. El navegador lo
   saca del flujo y lo apoya sobre el borde de arriba, así que el `gap` sólo
   separa a los hermanos que quedan — y como acá queda uno solo, no separaba
   nada. Medido: 0 px entre «PUNTAJE» y los números, contra los 7 de cualquier
   otro campo. El aire va en las cajas, que sí están en el flujo. */
.tramite__campo--puntaje{ gap:0; }
.puntaje{ display:flex; gap:.35rem; margin-top:.6rem; }
.puntaje__opcion{ cursor:pointer; }
.puntaje__opcion input{
  position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;
}
.puntaje__opcion > span{ display:grid; place-items:center; width:2.4rem; height:2.4rem; }
.puntaje__opcion svg{
  width:1.9rem; height:1.9rem;
  fill:transparent; stroke:var(--laton); stroke-width:1.2; stroke-linejoin:round;
  transition:fill .15s ease, transform .15s ease;
}

/* Se llenan TODAS hasta la elegida, no sólo ella: tres estrellas son tres
   estrellas llenas. Con `:has()` desde el grupo, porque un radio no puede
   pintar a sus hermanos de antes. Escrito de a uno porque CSS no tiene «hasta
   el valor de este input». */
.puntaje:has(input[value="1"]:checked) .puntaje__opcion:nth-child(-n+1) svg,
.puntaje:has(input[value="2"]:checked) .puntaje__opcion:nth-child(-n+2) svg,
.puntaje:has(input[value="3"]:checked) .puntaje__opcion:nth-child(-n+3) svg,
.puntaje:has(input[value="4"]:checked) .puntaje__opcion:nth-child(-n+4) svg,
.puntaje:has(input[value="5"]:checked) .puntaje__opcion:nth-child(-n+5) svg{ fill:var(--laton); }

/* Al pasar el mouse se ve lo que quedaría, y lo elegido se aparta mientras
   tanto: si no, con cuatro elegidas y el mouse sobre la segunda se verían
   cuatro llenas, que no es lo que va a pasar al hacer clic. */
@media (hover:hover){
  .puntaje:has(.puntaje__opcion:hover) .puntaje__opcion svg{ fill:transparent; }
  .puntaje:has(.puntaje__opcion:nth-child(1):hover) .puntaje__opcion:nth-child(-n+1) svg,
  .puntaje:has(.puntaje__opcion:nth-child(2):hover) .puntaje__opcion:nth-child(-n+2) svg,
  .puntaje:has(.puntaje__opcion:nth-child(3):hover) .puntaje__opcion:nth-child(-n+3) svg,
  .puntaje:has(.puntaje__opcion:nth-child(4):hover) .puntaje__opcion:nth-child(-n+4) svg,
  .puntaje:has(.puntaje__opcion:nth-child(5):hover) .puntaje__opcion:nth-child(-n+5) svg{ fill:var(--laton); }
}
/* Se hunde al tocarla: la respuesta es que la cosa se mueva. En `:active`
   sobre la etiqueta y no en el input, que está escondido. */
.puntaje__opcion:active svg{ transform:scale(.9); }
/* El foco del teclado, que el radio escondido no puede mostrar solo. */
.puntaje__opcion input:focus-visible + span{
  outline:2px solid var(--laton); outline-offset:2px; border-radius:2px;
}

/* ── El adjunto ──────────────────────────────────────────────────────────
   El campo de archivo nativo dice «Sin archivos seleccionados» con la
   tipografía del sistema y no hay forma de estilarlo. Se esconde y lo maneja
   su etiqueta, que sí es nuestra. El nombre del archivo lo escribe
   `contacto.js` al elegirlo — sin eso, esconder el campo dejaría al que sube
   la foto sin saber si la eligió. */
.adjunto{ display:flex; align-items:center; gap:.9rem; flex-wrap:wrap; }
.adjunto__campo{
  position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;
}
.adjunto__boton{
  display:inline-flex; align-items:center; padding:.55rem 1.1rem;
  border:1px solid var(--filete); border-radius:2px; cursor:pointer;
  font-family:var(--texto); font-size:.75rem; letter-spacing:.16em;
  text-transform:uppercase; color:var(--humo);
  transition:border-color .2s ease, color .2s ease;
}
@media (hover:hover){
  .adjunto__boton:hover{ border-color:var(--laton); color:var(--laton); }
}
.adjunto__campo:focus-visible + .adjunto__nombre,
.adjunto__campo:focus-visible ~ .adjunto__boton{ color:var(--laton); }
.adjunto__nombre{
  font-family:var(--texto); font-size:.9375rem; color:var(--humo-bajo);
  font-style:italic; min-width:0; overflow-wrap:anywhere;
}
.adjunto__nombre[data-puesta]{ color:var(--hueso); font-style:normal; }
.adjunto__nota{
  margin:.55rem 0 0; font-family:var(--texto); font-size:.8125rem;
  color:var(--humo-bajo);
}

/* ── La miniatura ────────────────────────────────────────────────────────
   La foto elegida se ve antes de mandarla. No es adorno: **es la imagen que
   va a quedar publicada en la página de Facundo**, y elegir el archivo
   equivocado desde el celular —donde la galería son cuadraditos de 80 px— es
   lo más fácil del mundo. El nombre del archivo no alcanza para darse cuenta.

   Va en 4:3 y con `object-fit:cover` porque es el mismo encuadre en el que va
   a salir en la portada: lo que se ve acá es lo que se ve allá.

   La luz la pone la foto. Es la regla del DESIGN.md aplicada al pie de la
   letra: acá el material que refleja llegó de verdad, así que no hace falta
   dibujarle nada encima. */
.adjunto__vista{
  display:none; margin-top:.9rem; position:relative;
  width:min(13rem, 100%); aspect-ratio:4 / 3;
  border:1px solid var(--filete); border-radius:2px; overflow:hidden;
  background:var(--superficie);
}
.adjunto__vista[data-puesta]{ display:block; }
.adjunto__vista img{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; display:block;
}

/* Acá vivía `.tramite__plazo`, el renglón que decía «Plazo de encargos: 7 a 60
   días». Se fue el 2026-08-21 con el renglón: ahora eso lo dice la tarjeta, y
   tenerlo en los dos lados era el mismo dato dos veces en la misma pantalla. */

.tramite__pie{ display:flex; align-items:center; gap:1.25rem; flex-wrap:wrap; }
.tramite__pie .boton{ margin-top:0; }

/* El aviso de qué pasó con el envío. Vive siempre en el marcado —es un
   `aria-live`, y uno que aparece recién cuando hay algo que decir no lo
   anuncia— así que vacío no ocupa nada. */
.tramite__aviso{
  margin:0; font-family:var(--texto); font-size:.9375rem; line-height:1.4;
  color:var(--humo);
}
.tramite__aviso:empty{ display:none; }
.tramite__aviso[data-estado="bien"]{ color:var(--laton); }
.tramite__aviso[data-estado="mal"]{ color:#E8907F; }

/* El campo que quedó mal, marcado al intentar enviar y no mientras se escribe:
   avisar de un mail incompleto en la tercera letra es pelearse con alguien que
   todavía lo está tipeando. */
.tramite__campo[data-mal]{ border-bottom-color:#E8907F; }

@media (max-width:30rem){
  .tramite{ gap:1.4rem; }
  .tramite__pie{ gap:.9rem; }
  .tramite__pie .boton{ width:100%; justify-content:center; }
}

/* La trampa para robots de los formularios. `display:none` la esconde de todo
   —del ojo, del tabulador y del lector de pantalla— que es exactamente lo que
   hace falta: es un campo que ninguna persona tiene que ver ni completar.

   No va con la técnica de «sólo para lectores de pantalla» que usa `.saltar`:
   allá el punto es que un ciego SÍ lo encuentre, y acá es el contrario. */
.trampa{ display:none; }

/* Quien pidió no ver movimiento no ve el trazo del filete ni el hundido del
   puntaje: los dos llegan a su estado final de una. Lo que NO se apaga es el
   filete en sí —es la señal de qué campo está enfocado, no un adorno—, que es
   la diferencia entre respetar la preferencia y romper la accesibilidad para
   cumplirla. */
@media (prefers-reduced-motion:reduce){
  .tramite__campo::after{ transition:none; }
  .puntaje__opcion svg{ transition:none; }
  .puntaje__opcion:active svg{ transform:none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   La solicitud: un formulario solo

   El pedido en `contacto.html` y la reseña en `resenas.html`, con la misma
   forma: el título y el formulario en el ancho de lectura, nada más. Hasta el
   2026-10-06 los dos vivían juntos en una escena anclada que los intercambiaba
   con el scroll mientras una tarjeta giraba (`.relevo`, en la historia de
   git). El cliente los separó, y después pidió sacar también la tarjeta: lo
   quiere simple.
   ═══════════════════════════════════════════════════════════════════════ */

.solicitud{ padding:var(--ritmo) var(--margen); }
.solicitud__cabecera{ text-align:center; margin-bottom:clamp(2rem,4vw,3rem); }

.solicitud__cuerpo{ max-width:44rem; margin-inline:auto; }
.solicitud__cuerpo .tramite{ margin:0; max-width:none; }

/* ── La reseña ocupa tres cuartos de la pantalla, no más ──────────────────
   Pedido del cliente el 2026-10-06: el que entra tiene que ver, sin bajar,
   que abajo hay fotos. Así que la primera pantalla es el formulario Y el
   borde de arriba de las fotos asomando. Medido en 1440×900: el formulario
   terminaba al 96% de la pantalla y las fotos empezaban fuera de ella.

   Lo que lo achica, sin sacar ningún campo —y sin apretarlo: el mismo día
   el cliente pidió más aire, porque tan junto no se entendía—:
   - en escritorio los campos cortos van de a tres —nombre, mail, reloj— y el
     puntaje al lado de la foto. En tablet, de a dos.

   En el teléfono no entra en tres cuartos sin esconder campos: ahí sigue
   apilado. */
.pagina-resenas .testimonios{ padding-top:clamp(6rem,13vh,8rem); }
.pagina-resenas .testimonios__cabecera{ margin-bottom:clamp(2rem,5vh,3rem); }
.pagina-resenas .testimonios__bajada{ margin-top:1rem; }
.solicitud__cuerpo--resena .tramite{ gap:1.6rem; }

@media (min-width:40rem){
  .solicitud__cuerpo--resena .tramite{
    display:grid; grid-template-columns:1fr 1fr; gap:1.75rem 2rem;
  }
  .solicitud__cuerpo--resena .tramite > *{ grid-column:1 / -1; }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-nombre),
  .solicitud__cuerpo--resena .tramite__campo:has(#r-pieza){ grid-column:1; }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-email),
  .solicitud__cuerpo--resena .tramite__campo--puntaje{ grid-column:2; }

  /* La miniatura de la foto, del tamaño de un sello y al lado del botón:
     abierta debajo sumaba 170 px. */
  .solicitud__cuerpo--resena .adjunto{ flex-wrap:nowrap; align-items:center; }
  .solicitud__cuerpo--resena .adjunto__vista{ margin-top:0; width:5.5rem; flex:none; order:-1; }
  .solicitud__cuerpo--resena .adjunto__nota{ margin-top:.35rem; }
}

@media (min-width:64rem){
  .solicitud__cuerpo--resena{ max-width:60rem; }
  .solicitud__cuerpo--resena .tramite{ grid-template-columns:repeat(6, 1fr); }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-nombre){ grid-column:1 / 3; }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-email){ grid-column:3 / 5; }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-pieza){ grid-column:5 / 7; }
  /* Fila fija y no la del orden del marcado: en el HTML la foto viene
     DESPUÉS del texto —es el orden en que se completa con el teclado, y ése no
     se toca—, así que sin `grid-row` caía sola en un renglón de abajo. */
  .solicitud__cuerpo--resena .tramite__campo--puntaje{ grid-column:1 / 4; grid-row:2; }
  .solicitud__cuerpo--resena .tramite__campo:has(#r-foto){ grid-column:4 / 7; grid-row:2; }
}

/* Entre el formulario y las fotos, el aire justo: es lo que decide si las
   fotos asoman o no. */
.solicitud__cuerpo--resena{ margin-bottom:clamp(2rem,4vh,3rem); }
.solicitud__cuerpo--resena + .testimonios__subtitulo{ margin-top:0; }

/* ═══════════════════════════════════════════════════════════════════════
   Las páginas legales — términos, privacidad, arrepentimiento

   Son documentos, no escenas: se entra buscando un dato concreto —«¿me
   devuelven la seña?»— y se sale apenas se encontró. Todo acá está al
   servicio de eso y de nada más. Sin film, sin mármol, sin animación de
   entrada: las tres cosas que hacen linda a la portada acá son demora.

   ── Por qué siguen siendo oscuras ────────────────────────────────────────
   La tentación era servirlas sobre `--hueso`, que el token declara como
   «superficies de lectura», y en un texto largo se lee mejor. Se descartó:
   son las únicas páginas del sitio donde alguien llega DESCONFIANDO —está por
   pagar, o se quiere arrepentir— y un cambio de color de fondo entre la ficha
   del reloj y los términos se lee como que cambiaste de sitio. La confianza
   la sostiene la continuidad.

   Lo que sí se compensa es el costo real de leer claro sobre oscuro: el
   cuerpo va en `--hueso` entero y no en `--humo`, y el interlineado sube a
   1.85. El texto legal es el único del sitio que se lee renglón por renglón.
   ═══════════════════════════════════════════════════════════════════════ */

.legal{
  /* 68ch y no las 46 de `--seccion__bajada`: aquello es una bajada de dos
     renglones y esto son párrafos de ocho. Por debajo de ~60ch un texto largo
     obliga a saltar de línea tan seguido que cansa más de lo que ayuda. */
  max-width:68ch;
  margin-inline:auto;
  /* El de arriba despeja la cabecera, que acá se fija desde el arranque
     porque no hay film — lo decide `cabecera.js` y está explicado allá. */
  padding:clamp(6rem,14vh,9rem) var(--margen) clamp(4rem,10vh,7rem);
}

.legal__eyebrow{
  margin:0 0 .75rem;
  font-size:.75rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--laton);
}

.legal__titulo{
  font-family:var(--display);
  font-weight:var(--display-peso); letter-spacing:var(--display-tracking);
  font-size:clamp(2rem,4.6vw,3.25rem); line-height:1.1;
  margin:0 0 .85rem;
}

.legal__fecha{ margin:0; font-size:.875rem; color:var(--humo-bajo); }

/* ── El índice ───────────────────────────────────────────────────────────
   Existe por una razón medible: los términos tienen ocho secciones y la que
   casi todos vienen a buscar es la cuarta. Sin índice, esa persona hace
   scroll por tres pantallas de texto que no le importan, y la mitad se va
   antes de llegar. Con índice es un clic.

   Va en columnas automáticas para no comerse una pantalla entera él mismo. */
.legal__indice{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));
  gap:.15rem 1.5rem;
  margin:clamp(2rem,5vh,3rem) 0;
  padding:1.25rem 1.5rem;
  background:var(--superficie); border:1px solid var(--filete); border-radius:2px;
}
.legal__indice a{
  padding:.4rem 0;
  font-size:.9375rem; color:var(--humo); text-decoration:none;
  transition:color .2s ease;
}
.legal__indice a:hover{ color:var(--laton); }

.legal__bloque{ margin-top:clamp(2.5rem,6vh,3.5rem); }

/* `scroll-margin-top` y no un ancla con hueco: la cabecera es fija, así que
   sin esto el título al que se salta queda tapado por ella. Es el mismo
   número que el padding de arriba, por el mismo motivo. */
.legal__bloque[id]{ scroll-margin-top:clamp(5rem,12vh,7rem); }

.legal__bloque h2{
  font-family:var(--display);
  font-weight:var(--display-peso); letter-spacing:var(--display-tracking);
  font-size:clamp(1.375rem,2.6vw,1.75rem); line-height:1.25;
  margin:0 0 1.1rem; padding-bottom:.6rem;
  border-bottom:1px solid var(--filete);
}

.legal__bloque h3{
  font-size:1.0625rem; font-weight:600; color:var(--laton);
  margin:2rem 0 .65rem;
}

.legal__bloque p{ margin:0 0 1.1rem; line-height:1.85; }
.legal__bloque p:last-child{ margin-bottom:0; }

/* El énfasis del texto legal es información, no decoración: marca la mitad de
   la frase que cambia lo que te pasa a vos. Por eso va en hueso pleno sobre un
   cuerpo que ya es hueso — el peso alcanza, y teñirlo de latón convertiría
   media página en acentos. */
.legal__bloque strong{ font-weight:600; color:var(--hueso); }

.legal__lista{ margin:0 0 1.1rem; padding-left:1.35rem; }
.legal__lista li{ margin-bottom:.7rem; line-height:1.8; }
.legal__lista li:last-child{ margin-bottom:0; }

/* La letra chica de verdad: lo que matiza pero no cambia la decisión. */
.legal__nota{
  font-size:.875rem; color:var(--humo);
  border-left:2px solid var(--filete); padding-left:1rem;
}

.legal__url{ color:var(--humo); font-variant-numeric:tabular-nums lining-nums; }

/* ── El resumen del arrepentimiento ──────────────────────────────────────
   Va antes que todo y con el latón encima: quien entra a esa página ya
   decidió, y lo único que necesita es que no le escondan cómo se hace. */
.legal__destacado{
  margin:clamp(2rem,5vh,3rem) 0;
  padding:clamp(1.35rem,3vw,1.85rem);
  background:var(--superficie); border:1px solid var(--filete);
  border-top:2px solid var(--laton); border-radius:2px;
}
.legal__destacado p{ margin:0 0 .9rem; line-height:1.8; }
.legal__destacado p:last-child{ margin:0; }

.legal__acciones{
  display:flex; flex-wrap:wrap; gap:.75rem;
  margin:1.5rem 0;
}
.legal__acciones .boton{ flex:1 1 auto; }

/* Los enlaces del cuerpo se subrayan. En la portada un enlace se distingue por
   dónde está —es un botón, o el único texto de su bloque—, pero en cuatro
   pantallas de párrafos eso deja de funcionar: acá el subrayado es lo único
   que separa un enlace de una palabra en negrita. */
.legal__bloque a:not(.boton),
.legal__destacado a:not(.boton){
  color:var(--laton);
  text-decoration:underline; text-underline-offset:.18em;
  text-decoration-color:var(--filete);
  transition:text-decoration-color .2s ease;
}
.legal__bloque a:not(.boton):hover,
.legal__destacado a:not(.boton):hover{ text-decoration-color:var(--laton); }

.legal__otras{
  display:flex; flex-wrap:wrap; gap:1.5rem;
  margin-top:clamp(3rem,7vh,4.5rem); padding-top:1.5rem;
  border-top:1px solid var(--filete);
}
.legal__otras a{
  font-size:.9375rem; color:var(--humo); text-decoration:none;
  transition:color .2s ease;
}
.legal__otras a:hover{ color:var(--laton); }

/* ── El pie de estas páginas ─────────────────────────────────────────────
   Sin la cinta de marcas: es la prueba del catálogo y acá no se está
   vendiendo nada. Lo que sí lleva, y las otras cuatro páginas también desde
   hoy, son los tres enlaces legales. */
.pie--simple{ margin-top:0; }

/* Fila propia, debajo del cierre, y la misma en las siete páginas. Se probó
   metiéndolos adentro de `.pie__cierre` —que es flex con `space-between`— y
   ahí los tres enlaces legales se reparten el ancho con la dirección y las
   redes: en 1440 quedaba un renglón de tres bloques que compiten, y en 390 se
   apilaban en un orden que dependía del ancho. Con fila propia el pie dice
   siempre lo mismo en el mismo orden. */
.pie__legales{
  display:flex; flex-wrap:wrap; gap:.5rem 1.5rem;
  padding:0 var(--margen) clamp(1.5rem,3vh,2rem);
  font-size:.8125rem;
}
.pie__legales a{
  color:var(--humo-bajo); text-decoration:none;
  transition:color .2s ease;
}
.pie__legales a:hover{ color:var(--laton); }
/* El enlace a la página en la que ya estás no se apaga del todo —sigue siendo
   un ancla útil para volver arriba— pero deja de invitar al clic. */
.pie__legales a[aria-current="page"]{ color:var(--humo); cursor:default; }

/* ═══════════════════════════════════════════════════════════════════════
   Preguntas — el acordeón de la portada

   Dos columnas: a la izquierda el encabezado y la salida a WhatsApp, que se
   quedan quietas; a la derecha la lista, que es lo que se toca. En el teléfono
   se apilan y el encabezado queda arriba, que es el orden en que se lee.

   El acordeón es `<details>` nativo. Lo único que agrega el CSS es girar la
   punta y darle aire al cuerpo — abrir y cerrar ya lo sabe hacer el navegador.
   ═══════════════════════════════════════════════════════════════════════ */

.preguntas{
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);
  gap:clamp(2rem,6vw,5rem);
  padding:var(--ritmo) var(--margen);
  align-items:start;
}

/* Se queda a la vista mientras se recorren las preguntas: es donde está la
   salida para el que no encuentra la suya, y sirve justo cuando ya leyó tres
   y ninguna era. */
.preguntas__intro{ position:sticky; top:clamp(5rem,12vh,7rem); }
.preguntas__bajada{ margin:1.25rem 0 0; color:var(--humo); max-width:30ch; }
.preguntas__ayuda{
  margin:2rem 0 0; font-size:.9375rem; color:var(--humo-bajo); max-width:32ch;
}
.preguntas__ayuda a{
  color:var(--laton); text-decoration:underline;
  text-underline-offset:.18em; text-decoration-color:var(--filete);
  transition:text-decoration-color .2s ease;
}
.preguntas__ayuda a:hover{ text-decoration-color:var(--laton); }

/* Filete arriba del primero además de entre medio: sin él la lista arranca
   flotando y no se lee como una lista, que es lo que hace que se recorra. */
.preguntas__lista{ border-top:1px solid var(--filete); }
.pregunta{ border-bottom:1px solid var(--filete); }

.pregunta summary{
  display:flex; align-items:center; justify-content:space-between; gap:1.5rem;
  padding:1.35rem 0; cursor:pointer;
  font-size:clamp(1rem,1.5vw,1.0625rem); font-weight:600; line-height:1.4;
  color:var(--hueso);
  transition:color .2s ease;
  /* La flechita que Chrome y Safari dibujan solos. Se saca acá y se dibuja
     abajo, porque la de fábrica no se puede ni girar ni teñir. */
  list-style:none;
}
.pregunta summary::-webkit-details-marker{ display:none; }
.pregunta summary:hover{ color:var(--laton); }
.pregunta summary:focus-visible{ outline:2px solid var(--laton); outline-offset:4px; }

/* La punta, en CSS puro: dos lados de un cuadrado girado 45°. Un SVG por
   pregunta serían seis copias del mismo dibujo en el marcado. */
.pregunta summary::after{
  content:''; flex:none; width:.5rem; height:.5rem;
  border-right:1.5px solid var(--laton); border-bottom:1.5px solid var(--laton);
  transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .25s ease;
}
.pregunta[open] summary::after{ transform:rotate(-135deg) translate(-2px,-2px); }
.pregunta[open] summary{ color:var(--laton); }

.pregunta__cuerpo{ padding:0 3rem 1.5rem 0; }
.pregunta__cuerpo p{ margin:0; color:var(--humo); line-height:1.75; max-width:62ch; }
.pregunta__cuerpo strong{ color:var(--hueso); font-weight:600; }
.pregunta__cuerpo a{
  color:var(--laton); text-decoration:underline;
  text-underline-offset:.18em; text-decoration-color:var(--filete);
}
.pregunta__cuerpo a:hover{ text-decoration-color:var(--laton); }

@media (max-width:56rem){
  .preguntas{ grid-template-columns:1fr; gap:2.5rem; }
  /* Pegado arriba no sirve en una sola columna: se llevaría media pantalla
     mientras se leen las preguntas de abajo. */
  .preguntas__intro{ position:static; }
  .pregunta__cuerpo{ padding-right:1.5rem; }
}

/* ═══════════════════════════════════════════════════════════════════════
   La página de gracias

   Una sola columna angosta y centrada, que es la única vez en todo el sitio
   que algo va centrado. Acá se justifica: no hay nada que comparar ni que
   recorrer — hay un mensaje, tres renglones y dos botones. Alinear eso a la
   izquierda en una pantalla de 1440 dejaría el texto pegado a un borde y dos
   tercios de vacío al lado.
   ═══════════════════════════════════════════════════════════════════════ */

.gracias{
  max-width:34rem; margin-inline:auto; text-align:center;
  padding:clamp(7rem,18vh,11rem) var(--margen) clamp(4rem,10vh,7rem);
}

.gracias__marca{ color:var(--laton); margin-bottom:1.75rem; }

.gracias__titulo{
  font-family:var(--display);
  font-weight:var(--display-peso); letter-spacing:var(--display-tracking);
  font-size:clamp(2.4rem,6vw,3.75rem); line-height:1.05; margin:0 0 1rem;
}

.gracias__bajada{
  margin:0 auto; max-width:30ch;
  font-size:clamp(1.05rem,1.8vw,1.1875rem); color:var(--humo); line-height:1.6;
}

/* Los tres pasos. El número va en un disco de latón hueco y no relleno: relleno
   pesaba más que el texto que acompaña, y lo que importa acá es la frase. */
.gracias__pasos{
  list-style:none; margin:clamp(2.5rem,6vh,3.5rem) 0 0; padding:0;
  display:flex; flex-direction:column; gap:.9rem;
  text-align:left;
}
.gracias__pasos li{
  display:grid; grid-template-columns:1.75rem 1fr; gap:.9rem; align-items:baseline;
  font-size:.9375rem; color:var(--humo); line-height:1.6;
}
.gracias__pasos span{
  display:grid; place-items:center;
  width:1.75rem; height:1.75rem; border-radius:999px;
  border:1px solid var(--filete); color:var(--laton);
  font-size:.75rem; font-variant-numeric:tabular-nums lining-nums;
  transform:translateY(.15rem);
}

.gracias__acciones{
  display:flex; flex-wrap:wrap; gap:.75rem; justify-content:center;
  margin:clamp(2.5rem,6vh,3.25rem) 0 0;
}
.gracias__acciones .boton{ flex:1 1 auto; }

.gracias__nota{
  margin:2rem 0 0; font-size:.8125rem; color:var(--humo-bajo); line-height:1.6;
}

@media (max-width:30rem){
  /* Apilados y a ancho completo: dos botones de 160 px partidos en el medio de
     una pantalla de 390 se leen como cuatro cosas y no como dos. */
  .gracias__acciones{ flex-direction:column; }
  .gracias__acciones .boton{ width:100%; }
}
