/* ════════════════════════════════════════════════════════════════════════════
   Sempra Home — la hoja de estilos del sitio

   UNA sola hoja para todas las páginas. La alternativa era partirla en
   «compartido» y «portada», pero el corte no existe: los tokens, la barra y la
   inversión clara conviven intercalados con lo que sólo tiene sentido sobre el
   recorrido. Partirla habría sido inventar una frontera y después pelearse con
   ella en cada página nueva.

   Una página sin recorrido carga reglas que no usa, y a cambio la hoja se
   cachea una sola vez para todo el sitio.

   Orden:
     1. Tokens y base
     2. Tipografía del recorrido
     3. La marca y la barra
     4. La firma en el cielo        · sólo portada
     6. Lenis
     7. Las secciones claras + la inversión de la barra
     8. La obertura                 · sólo portada
     9. Entradas
   ════════════════════════════════════════════════════════════════════════════ */

/* Roboto Slab para los titulares, Inter para todo lo demás. Elegidas por Facundo
   el 1-9-2026 probándolas en el sitio con el interruptor, no en un muestrario.

   Las dos self-hosteadas, subconjunto latino: 82 KB entre ambas, contra los
   278 KB que pesaba Newsreader. No van por el CDN de Google — el resto del sitio
   no depende de terceros para renderizar, y la tipografía es lo primero que se
   ve: si el CDN no contesta, la página entera entra en su fuente de reserva.

   ROBOTO SLAB NO TIENE ITÁLICA. El navegador la finge inclinando la redonda, y a
   126 px —el tamaño de la firma en el cielo— eso se ve como un error. Así que la
   itálica, que era la voz de la marca, se reemplaza por PESO Y EL NARANJA. Está
   resuelto abajo, regla por regla, y no con un `font-style:italic` que el
   navegador tendría que inventar. */
@font-face{
  font-family:'Roboto Slab';
  src:url('assets/font/roboto-slab.woff2') format('woff2');
  font-weight:100 900; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Inter';
  src:url('assets/font/inter.woff2') format('woff2');
  font-weight:100 900; font-style:normal; font-display:swap;
}

/* El engine setea sus tokens sobre .sw-root, así que un :root solo queda sombreado
   por herencia — hay que apuntar a los dos (ver Gotchas de la skill). */
:root, .sw-root{
  --sw-bg:#231F1C;          /* carbón cálido, un punto más profundo que el video */
  --sw-ink:#F4EFE6;         /* hueso */
  --sw-ink-soft:#BFB3A2;
  --sw-accent:#EE5A24;      /* naranja Sempra — OJO: el engine la PISA por escena */
  /* El naranja de la marca, aparte y a salvo. `--sw-accent` es una variable de
     ESCENA: el engine la reescribe en cada tramo con el color de ese plano, asi que
     lo que se cuelgue de ella cambia de color al scrollear. Sirve para el copy, que
     acompaña la imagen; no sirve para la marca, que tiene que ser siempre la misma.
     La obertura salia dorada -#C08A4E, el acento de la vereda- en vez de naranja. */
  --sempra:#EE5A24;
  --sw-font-display:'Roboto Slab','Georgia',serif;
  --sw-font-body:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  --hueso-10:rgba(244,239,230,.10);
  --hueso-22:rgba(244,239,230,.22);
  --hueso-55:rgba(244,239,230,.55);

  /* ---- EL MOVIMIENTO, en tres tiempos y una curva -------------------------
     Había veinticuatro transiciones con nueve combinaciones de duración y
     curva: `.3s ease`, `.35s ease`, `.4s ease`, `.42s ease`, `.5s ease` y
     cuatro variantes con la cúbica. Ninguna estaba mal sola; juntas hacen que
     el sitio responda distinto según dónde toques, y eso se siente aunque no
     se sepa por qué.

     La curva es la que ya usaba el sitio en sus mejores momentos: sale rápido y
     se acomoda largo. Es lo que hace que algo se sienta que RESPONDE en vez de
     que arranque. La simétrica del navegador (`ease`) tarda lo mismo en salir
     que en llegar y por eso se siente floja.

     Los tres tiempos van por TAMAÑO, no por importancia: cuanto más grande es
     lo que se mueve, más tarda. Un color a 500 ms se siente roto; una foto a
     160 ms se siente un corte. */
  --sal-rapido:170ms;   /* un color, una opacidad: la respuesta al dedo */
  --sal-medio:290ms;    /* un borde, una tarjeta, un fondo */
  --sal-lento:520ms;    /* una foto, un panel, algo que ocupa media pantalla */
  --curva:cubic-bezier(.16,1,.3,1);        /* la de siempre, para lo que se mueve */
  --curva-corta:cubic-bezier(.33,1,.68,1); /* menos dramática, para cambios chicos */
}
html,body{margin:0;background:var(--sw-bg);}

/* ---------- tipografía ---------- */
.sw-root .sw-copy__title{
  font-weight:400;
  font-size:clamp(2.4rem,5.3vw,4.3rem);
  line-height:.99;
  letter-spacing:-.02em;
  text-wrap:balance;
  margin-top:0;
}
/* El énfasis gira la frase que sostiene la página; no es decoración. Era una
   itálica y Roboto Slab no tiene, así que ahora lo dice el naranja de la marca
   con un peso arriba. Sobre video en movimiento el color además se lee mejor que
   una inclinación, que a esa escala se pierde. */
.sw-root .sw-copy__title em{
  font-style:normal; font-weight:700; color:var(--sempra);
}
.sw-root .sw-copy__body{
  margin-top:20px;
  font-size:clamp(1rem,1.2vw,1.12rem);
  line-height:1.6;
  max-width:38ch;
  color:rgba(244,239,230,.82);
}
.sw-root .sw-brand__name{
  font-family:var(--sw-font-display);
  font-weight:500; font-size:1.16rem;
  letter-spacing:.012em;
}
/* El contador 01/06 se esconde. Lo reemplazaba el plano, y el plano lo sacó
   Facundo el 1-9-2026, así que hoy el recorrido va SIN NINGÚN indicador de
   avance — a propósito. Si alguna vez hace falta uno, este es el barato: se
   borra esta regla y vuelve solo. */
.sw-root .sw-copy__num{display:none;}

/* ---------- marca ---------- */
/* El engine define .sw-btn--primary como texto blanco sobre var(--sw-ink), lo que
   asume un tema claro. En tema oscuro ink es hueso y el botón queda blanco sobre
   blanco. Lo pasamos al acento con texto oscuro: 4,85:1, AA. */
.sw-root .sw-btn--primary{ background:var(--sw-accent); color:#241D17; font-weight:600; }
.sw-root .sw-btn{ transition:transform var(--sal-lento) var(--curva), box-shadow var(--sal-lento) var(--curva); }
.sw-root .sw-btn--primary:hover{ transform:translateY(-2px); box-shadow:0 14px 30px -12px rgba(0,0,0,.75); }
.sw-root .sw-btn--ghost{ color:var(--sw-ink); border-color:var(--hueso-22); }
.sw-root .sw-btn--ghost:hover{ transform:translateY(-2px); border-color:var(--hueso-55); }
.sw-root .sw-topcta{
  background:transparent; color:var(--sw-ink);
  border:1px solid var(--hueso-22);
  font-variant-numeric:tabular-nums; letter-spacing:.02em;
  transition:border-color var(--sal-medio) var(--curva), background var(--sal-medio) var(--curva);
}
.sw-root .sw-topcta:hover{ border-color:var(--hueso-55); background:rgba(244,239,230,.06); }
.sw-root .sw-brand__mark{
  background:none; box-shadow:none; border-radius:0;
  width:25px; height:25px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M2.6 11.1 12 3.6l9.4 7.5' fill='none' stroke='%23EE5A24' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M5 12.9V20.4h14V12.9' fill='none' stroke='%23EE5A24' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-size:contain; background-repeat:no-repeat; background-position:center;
}
/* El riel de puntos del engine, escondido. Misma historia que el contador: lo
   reemplazaba el plano. Volver a prenderlo es `nav: true` en la config. */
.sw-root .sw-route{display:none;}

/* La barra del engine queda vacía: la cabecera del sitio vive en el marcado. */
.sw-root .sw-topbar{ display:none; }

/* ---------- la cabecera del sitio ----------
   Flota sobre video de brillo impredecible: en la escena de la vereda el cielo es
   casi blanco y el número de teléfono desaparecía. Un velo degradado lo sostiene
   sin ensuciar la imagen. */
.cabecera{
  position:fixed; top:0; left:0; right:0; z-index:50;
  display:flex; align-items:center; justify-content:space-between;
  gap:clamp(16px,3vw,48px);
  padding:clamp(14px,2.4vw,26px) clamp(18px,5vw,64px);
  pointer-events:none;
  background:linear-gradient(180deg,rgba(18,15,13,.62) 0%,rgba(18,15,13,.32) 52%,transparent 100%);
}
.cabecera > *{ pointer-events:auto; }

.cabecera__marca{
  display:flex; align-items:center; gap:10px;
  text-decoration:none; color:var(--sw-ink);
  /* Estuvo apagada durante la obertura porque duplicaba el nombre gigante del
     centro. Ese nombre ya no está —lo dice el telón y no se repite—, así que
     ahora es el único lugar donde se lee la marca mientras la obertura está
     puesta, y tiene que estar desde el primer cuadro. */
}
.cabecera__marca svg{ width:25px; height:25px; color:var(--sempra); flex:none; }
.cabecera__marca span{
  font-family:var(--sw-font-display);
  font-weight:500; font-size:1.16rem;
  letter-spacing:.012em;
  white-space:nowrap;
}

.cabecera__nav{ display:flex; gap:clamp(14px,2.2vw,34px); }
.cabecera__nav a{
  position:relative;
  text-decoration:none; color:rgba(244,239,230,.78);
  font-size:.9rem; letter-spacing:.01em; white-space:nowrap;
  transition:color var(--sal-rapido) var(--curva-corta);
}
.cabecera__nav a:hover{ color:var(--sw-ink); }
/* El subrayado crece desde el centro. Va en un ::after y no en text-decoration
   porque asi se puede animar el ancho sin mover la linea de base del texto. */
.cabecera__nav a::after{
  content:""; position:absolute; left:50%; bottom:-6px;
  width:0; height:1px; background:var(--sempra);
  transform:translateX(-50%);
  transition:width var(--sal-medio) var(--curva);
}
.cabecera__nav a:hover::after{ width:100%; }


/* El teléfono ya no vive en la barra. Facundo lo sacó el 1-9-2026. Sigue en el
   pie de las seis páginas, en las tres salidas de `contacto.html` y en la tarjeta
   de cada ficha: no se perdió, dejó de estar encima de todo. */

/* ---------- la firma en el cielo ---------- */
.firma{
  position:fixed; z-index:25; pointer-events:none;
  left:50%; transform:translateX(-50%);
  top:clamp(56px,9vh,120px);
  width:min(58vw,760px);
}
.firma__svg{ display:block; width:100%; height:auto; overflow:visible; }
/* La salida cuelga del sello, centrada bajo la plaza. Va REDONDEADA y no
   cuadrada como el resto de los botones del sitio: es la misma llamada que abre
   la obertura —mismo rótulo, mismo destino— y son las dos puntas del recorrido,
   que tiene su propio idioma. La opacidad y los `pointer-events` los maneja
   `firma.js`, atados al avance del scroll. */
.firma__salida{ margin:clamp(14px,2.4vh,28px) 0 0; text-align:center; }
/* `.firma__boton` solo no alcanza: `.boton{border-radius:0}` tiene la misma
   especificidad y se declara 1400 lineas mas abajo. */
.firma .firma__boton{ border-radius:999px; opacity:0; pointer-events:none; }
/* La firma va EN LA MISMA LETRA DE LA PÁGINA, no en una caligráfica. Allura y
   Pinyon son escritura inglesa: otra tradición, otro idioma. Por lindas que sean,
   al lado de un titular de la página se ven pegadas de otra pieza. Esta es
   literalmente la misma letra que el «acá.» del titular, y por eso pertenece.
   De paso no pesa: ya estaba cargada.

   Era la itálica de Newsreader. Roboto Slab no tiene itálica, así que la firma
   pasó a la redonda con un peso arriba, y baja de 126 a 118 px: la egipcia es
   bastante más ancha y a 126 no entraba en el ancho de la firma. */
.firma__txt{
  font-family:var(--sw-font-display); font-style:normal; font-weight:500;
  font-size:118px; letter-spacing:-.018em;
  fill:var(--sw-accent);
}
/* La regla y el rombo son de grabador: van en tinta, no en el naranja. Así el
   acento queda reservado para la firma sola y el bloque se lee como un sello. */
.firma__regla line{
  stroke:rgba(36,29,23,.5); stroke-width:1.6; stroke-linecap:round;
}
.firma__regla rect{ fill:rgba(36,29,23,.62); transform-box:fill-box; transform-origin:center; }
/* El eslogan es la voz de la página, no una nota al pie: va al tamaño en que se
   lee de un vistazo.
   Y va en TINTA, no en hueso. Aparece recién sobre el final, cuando la cámara ya
   salió y el cuadro es cielo claro: medido, hueso da 1,41:1 y tinta 10,29:1. El
   resto de la página es texto claro sobre imagen oscura; acá el fondo se da
   vuelta y el texto tiene que seguirlo. El halo claro es un seguro por si el
   cielo se oscurece en algún punto del tramo, no un contorno. */
.firma__slogan{
  font-family:var(--sw-font-display); font-style:normal; font-size:40px;
  fill:#241D17; letter-spacing:.004em;
  paint-order:stroke; stroke:rgba(248,244,236,.4); stroke-width:3px; stroke-linejoin:round;
}
/* El pie del sello: la plaza. Caja alta muy espaciada, chica, para que sostenga
   el bloque sin pelearle al eslogan. */
.firma__plaza{
  font-family:var(--sw-font-body); font-size:19px; font-weight:600;
  fill:#241D17; letter-spacing:.32em; text-transform:uppercase;
  paint-order:stroke; stroke:rgba(248,244,236,.35); stroke-width:2.5px; stroke-linejoin:round;
}
@media (max-width:860px){
  /* En teléfono la firma necesita todo el ancho y arrancar más abajo. */
  .firma{ width:86vw; top:clamp(80px,11vh,132px); }
  .firma__txt{ font-size:142px; }
  .firma__slogan{ font-size:46px; }
  .firma__plaza{ font-size:23px; letter-spacing:.26em; }
}

/* ---- Lenis ----------------------------------------------------------------
   Lo minimo que el suavizador necesita. El `height:auto` importa: el engine
   estira el track a 9,3 pantallas (0,9 de obertura + 7,37 de recorrido + 1) y sin
   esto Lenis recorta el alto del documento y el recorrido termina antes de la
   ultima escena. */
html.lenis, html.lenis body{ height:auto; }
.lenis.lenis-smooth{ scroll-behavior:auto !important; }
.lenis.lenis-stopped{ overflow:hidden; }

/* ---- La presentacion ------------------------------------------------------
   Cerraba la landing y ahora ABRE `vender.html`. La landing termina en el
   recorrido: a quien vino a mirar casas, el recorrido ya le dijo todo. A quien
   esta por dejar su casa en manos de alguien, en cambio, esto es lo primero que
   necesita — antes de hablar de precio, como se va a mostrar.

   Ya no lleva z-index: existia para taparle el ultimo cuadro al recorrido, que
   queda fijo abajo, y en `vender` no hay ningun escenario que tapar. */
.presenta{
  position:relative;
  color:#2E241E;
  box-sizing:border-box;
  --lado:clamp(20px,5vw,64px);

  /* UNA pantalla, no una y media. `svh` y no `vh`: en el teléfono `vh` mide contra
     la ventana con la barra del navegador retraída, así que una sección de 100vh
     empieza recortada y hay que scrollear para ver el final de algo que se supone
     que entra entero. */
  min-height:100svh;
  display:grid; grid-template-rows:auto 1fr auto;
  padding:clamp(92px,12vh,140px) var(--lado) clamp(26px,3.5vh,44px);

  /* El dibujo ocupa la pantalla entera, apoyado abajo. `100% auto` y no `cover`:
     con `cover` manda el alto y los pinos de las puntas se van de cuadro. Así llega
     borde a borde sin recortar nada, y lo que queda arriba es color plano — que es
     exactamente el papel del archivo (252,250,244), así que no se ve el empalme.

     El degradado no tapa nada: ahí el dibujo ya es papel. Está para que el titular
     apoye sobre algo parejo aunque el archivo cambie. */
  background-color:#FCFAF4;
  background-image:
    linear-gradient(180deg,#FCFAF4 0%, rgba(252,250,244,.72) 16%, rgba(252,250,244,0) 38%),
    url('assets/casa-elevacion.webp');
  background-size:auto, 100% auto;
  background-position:center, center bottom;
  background-repeat:no-repeat, no-repeat;
  overflow:hidden;
}
/* Abriendo `vender` la sección ya tiene arriba la barra fija con su propio
   espacio reservado por `.pagina`. Sumarle los 140 px que llevaba en la landing
   —donde nacía a media página y necesitaba aire propio— deja el titular a media
   pantalla del borde, y la pantalla entera de `min-height` se va abajo del
   pliegue por esa misma cuenta. */
.pagina .presenta{
  padding-top:clamp(24px,4vh,52px);
  min-height:calc(100svh - clamp(76px,10vh,104px));
  /* El papel limpio de arriba llega más abajo que en la landing: ahí sostenía
     un titular y acá sostiene el titular, la bajada y el botón. Con el
     degradado corto, «presentamos como se debe» caía sobre el techo dibujado. */
  background-image:
    linear-gradient(180deg,#FCFAF4 0%, rgba(252,250,244,.86) 30%, rgba(252,250,244,0) 56%),
    url('assets/casa-elevacion.webp');
}
@media (max-width:700px){
  .pagina .presenta{
    background-image:
      linear-gradient(180deg,#FCFAF4 0%, rgba(252,250,244,.86) 34%, rgba(252,250,244,0) 60%),
      url('assets/casa-elevacion-movil.webp');
  }
}

@media (max-width:700px){
  .presenta{
    background-image:
      linear-gradient(180deg,#FCFAF4 0%, rgba(252,250,244,.72) 22%, rgba(252,250,244,0) 48%),
      url('assets/casa-elevacion-movil.webp');
    /* En vertical, a todo el ancho el dibujo es una franja de 220 px en una pantalla
       de 660: no tiene presencia y sobra un hueco enorme en el medio. Se escala al
       42 % del alto y se recorta por los lados — la casa del centro es lo que
       importa, los pinos de las puntas se pueden perder. */
    background-size:auto, auto 42%;
    padding-bottom:clamp(18px,2.5vh,28px);
  }
}

/* El texto va centrado sobre el papel limpio de arriba, no sobre el dibujo. */
.presenta__centro{
  grid-row:1;
  position:relative; z-index:1;   /* por encima del dibujo */
  max-width:1120px; margin:0 auto; text-align:center; align-self:start;
}

.presenta__titulo{
  /* 15em sobre su propio cuerpo. Era 11em, medido para partir «No publicamos
     casas.» / «Las presentamos.», el titulo que tenia esta seccion cuando vivia
     en la landing. Ese titulo ya no existe: con «¿Cuanto vale tu propiedad?» el
     11em lo partia en dos en escritorio, y la bajada y el boton bajaban 70 px
     hasta caer sobre el volumen de listones de la acuarela — el texto chico
     arriba del dibujo se leia peor. A 15em entra en un renglon en escritorio y
     notebook; en el telefono lo sigue partiendo el ancho de la pantalla, y ahi
     `text-wrap:balance` deja «¿Cuanto vale / tu propiedad?».
     La medida va en em y no en px para que acompanie al clamp del cuerpo. */
  max-width:15em; margin-inline:auto;
  margin-top:clamp(28px,4vw,46px); margin-bottom:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(2.2rem,5.4vw,4.2rem);
  line-height:1.02; letter-spacing:-.022em;
  text-wrap:balance;
}
.presenta__titulo em{ font-style:normal; font-weight:700; color:var(--sempra); }

/* La bajada y el botón viven solo en `vender`, donde esta sección es la portada
   de la página y tiene que ofrecer el paso siguiente. En la landing la sección
   cerraba y no pedía nada. */
.presenta__bajada{
  margin:clamp(18px,2.4vw,26px) auto 0; max-width:56ch;
  font-size:clamp(1rem,1.5vw,1.12rem); line-height:1.55;
  color:rgba(46,36,30,.72);
}
.presenta__salida{ margin:clamp(22px,3vw,32px) 0 0; }
.presenta__cifras{
  grid-row:3;
  position:relative; z-index:1;
  display:grid; grid-template-columns:repeat(3,1fr);
  /* Las cifras se apoyan abajo de todo, sobre el pie del dibujo. El filete las
     separa sin cortar el papel: va translucido, no opaco. */
  align-self:end;
  margin:0; padding:0;
  border-top:1px solid rgba(46,36,30,.14);
}
/* column-reverse: el numero se ve arriba, pero en el marcado el termino es la
   ETIQUETA y el numero su definicion. Asi un lector de pantalla dice "Años en
   Yerba Buena: 15" y no "15: años en Yerba Buena", que no significa nada. */
.presenta__cifras > div{
  display:flex; flex-direction:column-reverse; align-items:center; gap:7px;
  padding:clamp(24px,3.4vw,38px) 12px 0;
}
.presenta__cifras > div + div{ border-left:1px solid rgba(46,36,30,.12); }
.presenta__cifras dd{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(2.1rem,4vw,3.1rem); line-height:1; letter-spacing:-.02em;
}
.presenta__cifras dt{
  font-family:var(--sw-font-body);
  font-size:clamp(.76rem,1vw,.88rem); color:rgba(46,36,30,.6);
}
/* En vertical las cifras siguen en TRES COLUMNAS. Apiladas medían 330 px de alto y
   caían justo encima de la casa: «15» y «12» quedaban ilegibles sobre el dibujo. En
   una fila miden 90 y se apoyan abajo de todo, que es donde el papel está limpio. */
@media (max-width:640px){
  .presenta__cifras > div{ padding:clamp(14px,3.5vw,22px) 4px 0; gap:3px; }
  .presenta__cifras dd{ font-size:clamp(1.5rem,7vw,2.1rem); }
  .presenta__cifras dt{ font-size:clamp(.62rem,2.6vw,.72rem); line-height:1.25; }
}

/* Los marcadores NO llevan marca visible: Facundo la saco. El atributo se queda y
   `verificar-despliegue.js` sigue fallando mientras exista, asi que un texto o una
   cifra de relleno no se puede publicar igual — solo que ahora no se ve. */

/* La barra es tinta clara con un velo oscuro, hecha para flotar sobre el video.
   Sobre la seccion crema el telefono desaparecia. Se invierte mientras la seccion
   la esta tapando. */
/* Mas opaco que el velo oscuro y llegando mas abajo. Sobre video da igual que el
   degradado se abra pronto -la imagen ya es ruido-, pero sobre la seccion crema
   el titular se leia NITIDO a traves de la barra, cruzado con el nombre de la
   marca. Los primeros dos tercios van solidos. */
html[data-claro] .cabecera{
  background:linear-gradient(180deg,#FCFAF4 0%,#FCFAF4 46%,rgba(252,250,244,.72) 74%,rgba(252,250,244,0) 100%);
}
html[data-claro] .cabecera__marca{ color:#2E241E; }
html[data-claro] .cabecera__nav a{ color:rgba(46,36,30,.72); }
html[data-claro] .cabecera__nav a:hover{ color:#2E241E; }

/* ---- La obertura ----------------------------------------------------------
   `--sw-intro` la escribe el engine: 0 puesta, 1 ida del todo.

   La opacidad va al CUADRADO y no lineal por una razón concreta: así llega a 0
   justo cuando el engine pone `data-intro-ido`, y no antes. Con una curva más
   rápida —del tipo `1 - s*1.3`— la obertura se ve apagada desde el 77% pero el
   atributo recién entra en el 100%, y en ese hueco el botón sigue ahí,
   invisible, robándose el puntero. Al cuadrado ya está en 0,04 a los dos
   tercios: se fue a la vista, pero el clic se apaga en el mismo punto exacto. */
.obertura{
  --s:var(--sw-intro,0);
  position:fixed; inset:0; z-index:30;
  display:grid; place-items:center;
  padding:0 clamp(20px,5vw,64px);
  text-align:center;
  pointer-events:none;
  opacity:calc((1 - var(--s)) * (1 - var(--s)));
  transform:translateY(calc(var(--s) * -4.5vh));
}
.sw-root[data-intro-ido] .obertura{ visibility:hidden; }

/* El primer cuadro es la vereda a contraluz: el cielo queda casi blanco y la
   marca se perdía contra él. El velo la sostiene sin apagar la casa. */
.obertura::before{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(115% 75% at 50% 44%, rgba(35,31,28,.74) 0%, rgba(35,31,28,.44) 46%, transparent 78%),
    linear-gradient(180deg, rgba(35,31,28,.5) 0%, transparent 26%, transparent 72%, rgba(35,31,28,.55) 100%);
}
.obertura__centro{ position:relative; }

.obertura__marca{
  width:clamp(42px,5vw,64px); height:auto; display:block; margin:0 auto;
  color:var(--sempra);
  filter:drop-shadow(0 3px 18px rgba(35,31,28,.7));
}
.obertura__nombre{
  /* Era «Sempra Home» a 8 rem: dos palabras cortas aguantan ese cuerpo. Ahora es
     una frase de cinco, y al mismo tamaño ocuparía cuatro renglones y taparía la
     casa, que es lo único que tiene que ganar el primer segundo. */
  margin:clamp(16px,2.2vw,26px) auto 0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(2.2rem,6.6vw,5.2rem);
  line-height:1.02; letter-spacing:-.025em;
  /* El corte va a mano, con un <br>, y no con `balance`: dejándolo automático
     partía en tres renglones y el «en» quedaba colgando al final del segundo. */
  color:var(--sw-ink);
  text-shadow:0 4px 44px rgba(35,31,28,.62);
}
/* La misma itálica que gira las frases del recorrido y firma el cierre: una sola
   familia y un solo gesto en toda la página. */
.obertura__nombre em{ font-style:normal; font-weight:700; color:var(--sempra); }
/* En teléfono el corte a mano no sirve: «Propiedades de categoría» no entra en
   350 px a ningún cuerpo que valga la pena, así que igual parte, y el <br> lo
   partía en un segundo renglón de una sola palabra. Se suelta el corte y se
   dejan tres renglones parejos.

   OJO: el <br> del marcado va con un espacio a cada lado. Apagándolo sin esos
   espacios las dos palabras se pegan y queda «categoríaen». */
@media (max-width:640px){
  .obertura__nombre br{ display:none; }
  .obertura__nombre{ text-wrap:balance; }
}


.obertura__salida{ margin:clamp(26px,3.4vw,42px) 0 0; }
.obertura__salida .sw-btn{ pointer-events:auto; }
/* Misma razon que la casita: el boton de la marca va en el naranja de la marca. */
.obertura__salida .sw-btn--primary{ background:var(--sempra); }

/* La marca de la barra duplicaba el nombre gigante del centro. Entra recién
   cuando la obertura se está yendo. El teléfono NO: es la conversión y se queda
   puesto desde el primer cuadro. */

/* ---- La entrada del hero, escalonada -------------------------------------
   Al aterrizar aparecian de golpe la barra, el titulo, la bajada y las tres
   etiquetas. Es mucha informacion junta y tapa lo unico que tiene que ganar el
   primer segundo, que es la casa. Ahora entra la imagen sola y el texto se
   escribe encima, de arriba hacia abajo.

   El engine maneja la opacidad de `.sw-copy` con el scroll, asi que la entrada
   va en los HIJOS: si la pusieramos en el contenedor, las dos cuentas pelearian
   por la misma propiedad y el texto parpadearia al primer movimiento. */
@keyframes sempra-entra{ from{ opacity:0; transform:translateY(14px); } to{ opacity:1; transform:none; } }
@media (prefers-reduced-motion: no-preference){
  .cabecera,
  .obertura__centro > *{
    /* `backwards`, no `both`. Con `both` el estado final queda aplicado COMO
       VALOR DE ANIMACION y el navegador lo informa `matrix(1,0,0,1,0,0)`: una
       transformacion que no mueve nada pero que convierte al elemento en bloque
       contenedor de sus hijos `position:fixed`. El panel del menu, que es hijo
       de la barra y pide `inset:0`, quedaba encerrado en los 72 px de alto de
       la barra en vez de tomar la pantalla.
       Con `backwards` el elemento vuelve a su estilo base al terminar -opacidad
       1 y sin transformacion, que es exactamente donde termina la animacion-,
       asi que se ve igual y suelta el bloque contenedor. */
    animation:sempra-entra .85s cubic-bezier(.22,1,.36,1) backwards;
  }
  .cabecera         { animation-delay:.30s }
  .obertura__marca  { animation-delay:.45s }
  .obertura__nombre { animation-delay:.62s }
  .obertura__salida { animation-delay:.88s }
}
/* El titular del recorrido ya NO necesita escalonado propio: no aparece al
   aterrizar sino cuando la obertura se está yendo, y ese cruce lo maneja el
   engine (`paso`). Dos entradas encima de la misma copy se pisaban. */

/* ════════════════════════════════════════════════════════════════════════════
   FASE 0 — LO COMPARTIDO POR LAS OCHO PÁGINAS
   ════════════════════════════════════════════════════════════════════════════ */

/* ---------- el menú en teléfono --------------------------------------------
   Hasta acá, abajo de 900 px la navegación se escondía y no había nada en su
   lugar: el sitio no se podía navegar desde un teléfono.

   Lo que SÍ se queda es el teléfono. El primer intento lo escondió para hacerle
   lugar al botón, y eso pisaba una decisión que ya estaba tomada y escrita más
   arriba en este mismo archivo: es la conversión, va puesto. El lugar sale de
   otro lado — en teléfono la marca se queda con la casita sola. El nombre
   completo ya está gigante en el centro de la obertura, repetirlo a 11 px al
   lado no agrega nada. */
.cabecera__menu{
  display:none;
  width:44px; height:44px;               /* 44 es el mínimo que se toca sin errar */
  padding:0; margin:0; flex:none;
  background:transparent; border:0; cursor:pointer;
  flex-direction:column; justify-content:center; align-items:flex-end; gap:5px;
  position:relative; z-index:2;          /* por encima del panel */
}
.cabecera__menu span{
  display:block; height:1.5px; background:var(--sw-ink);
  border-radius:0;
  transition:width var(--sal-medio) var(--curva),
             transform var(--sal-medio) var(--curva),
             opacity var(--sal-rapido) var(--curva-corta);
}
/* Trazos de largo distinto: tres iguales es el ícono de todo el mundo, y este es
   el único lugar de la barra donde se puede tener voz sin estorbar. */
.cabecera__menu span:nth-child(1){ width:22px; }
.cabecera__menu span:nth-child(2){ width:16px; }
.cabecera__menu span:nth-child(3){ width:19px; }
html[data-claro] .cabecera__menu span{ background:#2E241E; }

/* Los tres trazos se vuelven cruz: el del medio se va y los otros se juntan. */
html[data-menu] .cabecera__menu span{ width:22px; }
html[data-menu] .cabecera__menu span:nth-child(1){ transform:translateY(6.5px) rotate(45deg); }
html[data-menu] .cabecera__menu span:nth-child(2){ opacity:0; transform:scaleX(.2); }
html[data-menu] .cabecera__menu span:nth-child(3){ transform:translateY(-6.5px) rotate(-45deg); }

@media (max-width:900px){
  .cabecera__menu{ display:flex; }
  .cabecera{ gap:12px; }
  /* El nombre VUELVE. Se había escondido para hacerle lugar al teléfono al lado
     del botón; Facundo sacó el teléfono de la barra, así que el lugar está y una
     barra con una casita suelta y un botón a 300 px de distancia se ve vacía. */
  .cabecera__marca{ position:relative; z-index:2; }

  /* El apilado va declarado, no heredado del orden del marcado: el panel tiene
     que quedar DEBAJO de la marca, el teléfono y el botón, que son lo único que
     sigue siendo tocable con el menú abierto. Un z-index negativo acá no sirve
     -lo mandaría atrás del propio fondo de la barra- y dejarlo en automático lo
     pone encima, porque el <nav> viene después en el marcado. */
  .cabecera__nav{
    display:flex; flex-direction:column; justify-content:center;
    gap:clamp(18px,4.5vh,34px);
    position:fixed; inset:0; z-index:1;
    padding:0 clamp(28px,9vw,64px);
    background:#231F1C;
    /* `visibility` además de la opacidad: sin eso el panel apagado se sigue
       comiendo los toques de la página que hay abajo. */
    opacity:0; visibility:hidden;
    transform:translateY(-8px);
    transition:opacity var(--sal-medio) var(--curva-corta), transform var(--sal-lento) var(--curva),
               visibility 0s linear .42s;
  }
  html[data-menu] .cabecera__nav{
    opacity:1; visibility:visible; transform:none;
    transition:opacity var(--sal-medio) var(--curva-corta), transform var(--sal-lento) var(--curva),
               visibility 0s;
  }
  html[data-menu] .cabecera{ background:transparent; }

  .cabecera__nav a{
    font-family:var(--sw-font-display);
    font-size:clamp(1.9rem,8vw,2.6rem);
    color:var(--sw-ink);
    letter-spacing:-.01em;
    opacity:0; transform:translateY(14px);
    transition:opacity var(--sal-medio) var(--curva-corta), transform var(--sal-lento) var(--curva);
  }
  html[data-menu] .cabecera__nav a{ opacity:1; transform:none; }
  /* Cada enlace entra un poco después que el anterior. Escrito a mano porque son
     cinco y no cambian. */
  html[data-menu] .cabecera__nav a:nth-child(1){ transition-delay:.10s; }
  html[data-menu] .cabecera__nav a:nth-child(2){ transition-delay:.16s; }
  html[data-menu] .cabecera__nav a:nth-child(3){ transition-delay:.22s; }
  html[data-menu] .cabecera__nav a:nth-child(4){ transition-delay:.28s; }
  html[data-menu] .cabecera__nav a:nth-child(5){ transition-delay:.34s; }
  /* El subrayado que crece al pasar el mouse no aplica: acá no hay mouse. */
  .cabecera__nav a::after{ display:none; }
  /* Con el panel oscuro abierto la barra no se invierte, aunque la página sea clara. */
  html[data-claro][data-menu] .cabecera__marca{ color:var(--sw-ink); }
  html[data-claro][data-menu] .cabecera__menu span{ background:var(--sw-ink); }
}

/* ---------- el pie ---------------------------------------------------------
   No existía: la página terminaba en la sección crema y se cortaba ahí, sin
   contacto, sin matrícula y sin salida.

   Va oscuro. La página abre en carbón, pasa por el crema de la presentación y
   cierra en carbón otra vez: el sitio queda encerrado entre dos tapas del mismo
   color en vez de terminarse de golpe. Y sobre oscuro la matrícula se lee como
   lo que es, un dato legal al pie, sin pelearle a nada.

   Mismo z-index que la presentación y fondo opaco por la misma razón: las capas
   del engine son `position:fixed` y sin esto el último cuadro se ve a través. */
.pie{
  position:relative; z-index:46;
  background:var(--sw-bg); color:var(--sw-ink);
  padding:clamp(56px,8vh,96px) clamp(20px,5vw,64px) clamp(28px,4vh,40px);
}
/* EL PIE DE LA LANDING ES OTRO PIE.
   La ultima escena del recorrido termina con dos botones -«Hablar con Sempra
   Home» y «Ver propiedades»-, y esos botones son la conversion de la pagina: el
   pie no los puede tapar. Terminan a 718 px de una pantalla de 900, asi que el
   pie tiene que entrar en los 180 que quedan. El pie completo mide 370.

   Entra sacandole lo que en la landing sobra:

     · la columna «El sitio», que repite la navegacion de la barra de arriba
       -que en esta pagina esta puesta desde el primer cuadro-;
     · la frase, que la firma acaba de escribir en el cielo dos pantallas antes,
       sobre la ultima escena. Repetirla palabra por palabra la abarata.

   Queda lo que no esta en ningun otro lado: el WhatsApp, el telefono, el correo
   y la matricula. Se distingue por la ausencia de `.pagina`, que es lo unico
   que separa a la landing de las otras siete. */
body:not(.pagina) .pie{
  padding:20px clamp(20px,5vw,64px) 16px;
}
body:not(.pagina) .pie__grilla > nav,
body:not(.pagina) .pie__fuerte h3{ display:none; }
body:not(.pagina) .pie__grilla{
  grid-template-columns:auto 1fr;
  align-items:center;
  gap:clamp(16px,3vw,40px);
}
/* La frase vuelve, pero EN UN RENGLÓN y al lado del botón. A su cuerpo normal
   son dos renglones y noventa píxeles, y el presupuesto entero del pie son
   ciento ochenta: en dos renglones el pie le comía los botones de la última
   escena, que es lo que este pie existe para no tapar. */
body:not(.pagina) .pie__marca{
  display:flex; align-items:center; gap:clamp(14px,2vw,26px);
  flex-wrap:wrap;
}
body:not(.pagina) .pie__frase{
  margin:0; max-width:none; white-space:nowrap;
  font-size:clamp(.95rem,1.25vw,1.18rem); line-height:1.2;
}
/* Los datos en una fila y no en una columna: apilados son tres renglones que
   acá no hay. */
body:not(.pagina) .pie__fuerte ul{
  display:flex; flex-wrap:wrap; justify-content:flex-end;
  gap:6px clamp(14px,2.4vw,30px);
}
body:not(.pagina) .pie__linea{
  margin-top:16px; padding-top:14px;
}
/* En el TELEFONO el presupuesto es todavia mas chico: los dos botones se apilan
   y terminan a 726 px de una pantalla de 844, asi que al pie le quedan 100.
   Entra el WhatsApp y la matricula, y nada mas.

   Lo que se va es el telefono, el correo y la localidad. No se pierden: el
   boton de arriba ya es el WhatsApp, y `contacto.html` los tiene todos. La
   matricula NO se puede ir — es lo que demuestra que la operacion es legal. */
@media (max-width:760px){
  body:not(.pagina) .pie{ padding:8px clamp(20px,5vw,64px) 10px; }
  body:not(.pagina) .pie__wa a{ padding:9px 18px; font-size:.86rem; }
  body:not(.pagina) .pie__grilla{ grid-template-columns:1fr; gap:0; }
  body:not(.pagina) .pie__marca{ grid-column:auto; }
  body:not(.pagina) .pie__fuerte{ display:none; }
  /* En el teléfono el pie entero tiene cien píxeles y la frase, aun en un
     renglón, se lleva veinte de los que no hay. Se queda afuera acá y solo acá:
     la firma la acaba de escribir en el cielo dos pantallas antes. */
  body:not(.pagina) .pie__frase{ display:none; }
  body:not(.pagina) .pie__wa{ margin:0; }
  body:not(.pagina) .pie__linea{ margin-top:9px; padding-top:8px; font-size:.68rem; gap:2px 14px; }
}

.pie__grilla{
  display:grid; gap:clamp(32px,5vw,64px);
  grid-template-columns:minmax(0,1.35fr) minmax(0,1fr) minmax(0,1fr);
  align-items:start;
  max-width:1240px; margin:0 auto;
}
.pie__frase{
  font-family:var(--sw-font-display);
  font-size:clamp(1.35rem,2.7vw,2rem); line-height:1.24;
  letter-spacing:-.012em;
  margin:0 0 18px; max-width:13em;
}
.pie__frase em{ font-style:normal; font-weight:700; color:var(--sw-accent); }
.pie h3{
  font-family:var(--sw-font-body);
  font-size:.7rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.16em;
  color:var(--hueso-55);
  margin:0 0 16px;
}
.pie ul{ list-style:none; margin:0; padding:0; display:grid; gap:11px; }
.pie a{
  color:rgba(244,239,230,.8); text-decoration:none;
  font-size:.94rem;
  transition:color var(--sal-rapido) var(--curva-corta);
}
.pie a:hover{ color:var(--sw-ink); }
/* El teléfono y el WhatsApp son la conversión: van en tinta plena, no en el
   gris de los enlaces de navegación. */
.pie__fuerte a{ color:var(--sw-ink); font-weight:500; }
.pie__fuerte a:hover{ color:var(--sw-accent); }

.pie__linea{
  display:flex; flex-wrap:wrap; gap:8px clamp(16px,3vw,32px);
  align-items:baseline; justify-content:space-between;
  max-width:1240px; margin:clamp(38px,6vh,64px) auto 0;
  padding-top:22px; border-top:1px solid var(--hueso-10);
  font-size:.78rem; color:var(--hueso-55);
}
/* La matrícula es lo que demuestra que la operación es legal. No va escondida
   en letra chica gris: va en el mismo renglón, legible. */
.pie__matricula{ color:rgba(244,239,230,.72); font-variant-numeric:tabular-nums; }

@media (max-width:760px){
  .pie__grilla{ grid-template-columns:1fr 1fr; }
  /* La frase toma el ancho entero; las dos columnas de enlaces se reparten abajo. */
  .pie__frase{ grid-column:1 / -1; }
  .pie__marca{ grid-column:1 / -1; }
}

/* ---------- los estados de entrada -----------------------------------------
   El estado escondido vive en el CSS y no en JavaScript para que no haya un
   cuadro con todo puesto antes de que cargue el script.

   `[data-entrado]` lo pone `entradas.js` — y lo pone TAMBIÉN cuando no hay GSAP
   o cuando la persona pidió movimiento reducido. Una animación que no corre
   tiene que dejar el contenido puesto, nunca invisible: si esta regla no
   tuviera su contraparte, apagar el script dejaría la página en blanco. */
[data-entra]{
  /* 48 y no 28: con 28 px el elemento se enciende más de lo que sube, y eso se
     lee como una aparición, no como una entrada. El número vive acá y no en
     `entradas.js` porque es también el estado con el que la página se sirve. */
  opacity:0; transform:translateY(48px);
  will-change:transform, opacity;
}
[data-entra="barrido"]{
  opacity:1; transform:none;
  clip-path:inset(0% 0% 100% 0%);
  scale:1.06;
}
[data-entra][data-entrado]{
  opacity:1; transform:none;
  clip-path:inset(0% 0% 0% 0%);
  scale:1;
  will-change:auto;
}
@media (prefers-reduced-motion:reduce){
  [data-entra]{ opacity:1; transform:none; clip-path:none; scale:1; }
}

/* El WhatsApp del pie es la conversión, no un enlace más de la lista. Va con
   forma de acción: mismo borde redondeado que el teléfono de la barra, para que
   las dos salidas del sitio se lean como la misma clase de cosa. */
.pie__wa{ margin:0; }
.pie__wa a{
  display:inline-flex; align-items:center; gap:9px;
  color:var(--sw-ink); font-weight:500; font-size:.92rem;
  border:1px solid var(--hueso-22); border-radius:0;
  padding:11px 22px;
  transition:border-color var(--sal-medio) var(--curva), background var(--sal-medio) var(--curva), color var(--sal-rapido) var(--curva-corta);
}
.pie__wa a::before{
  content:""; width:7px; height:7px; border-radius:0;
  background:var(--sw-accent); flex:none;
}
.pie__wa a:hover{
  color:var(--sw-ink);
  border-color:var(--hueso-55); background:rgba(244,239,230,.06);
}

/* Con el panel abierto la marca vuelve. Durante la obertura está apagada a
   propósito —el nombre gigante del centro la duplicaría—, pero el panel tapa esa
   obertura: sin esto el menú queda sin ninguna marca y la cruz flota sola. */
html[data-menu] .cabecera__marca{ opacity:1; }


/* ════════════════════════════════════════════════════════════════════════════
   EL TELÓN — la apertura de la landing
   ════════════════════════════════════════════════════════════════════════════
   La marca entera sobre el papel, la palabra que se parte en dos, y en el hueco
   una foto que crece hasta ser la pantalla. Esa foto es el primer cuadro del
   recorrido: cuando el telón se va, abajo está la misma imagen.

   Se pinta desde el marcado y no lo crea el JavaScript. Creado por script
   habría un cuadro de obertura visible antes de que el telón exista, y ese
   parpadeo es justamente lo que el telón viene a evitar. */
.telon{
  position:fixed; inset:0; z-index:9000;
  display:grid; place-items:center;
  background:#FCFAF4;
  overflow:hidden;
  /* Es decoración: quien navega escuchando tiene que caer directo en el <h1> de
     la obertura, no en una marca repetida. */
}
.telon__centro{
  position:relative; z-index:2;
  display:flex; align-items:baseline; gap:.28em;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(2rem,7.6vw,6.2rem); line-height:1;
  letter-spacing:-.03em; text-transform:uppercase;
  color:#2E241E;
  white-space:nowrap;
}
.telon__mitad{ display:inline-block; }

/* Los dos contadores, uno a cada lado de la foto. Van pegados al centro de la
   pantalla y no a las palabras: las palabras se mueven y los contadores no. */
.telon__cuenta{
  position:absolute; top:50%; z-index:2;
  transform:translateY(-50%);
  font-family:var(--sw-font-body);
  font-size:clamp(.6rem,1vw,.78rem); font-weight:600;
  letter-spacing:.1em; font-variant-numeric:tabular-nums;
  color:rgba(46,36,30,.72);
  opacity:0;
}
/* Pegados al borde de la foto, y la foto la mide `telon.js`: con un número fijo
   quedaban adentro de la foto en escritorio y afuera de la pantalla en
   teléfono. */
.telon__cuenta--izq{ right:calc(50% + var(--telon-borde, 13vw)); }
.telon__cuenta--der{ left: calc(50% + var(--telon-borde, 13vw)); }

/* La foto ocupa la pantalla entera desde el principio y se ve chica porque está
   escalada. Es un solo `transform`, así que crecer hasta la pantalla es la
   misma animación que ya venía corriendo — no hay salto ni recálculo de layout,
   y el recorte que se ve de chica es exactamente el que se ve de grande. */
.telon__foto{
  position:absolute; inset:0; z-index:3;
  transform:scale(0);
  will-change:transform;
}
.telon__foto img{ width:100%; height:100%; object-fit:cover; display:block; }
/* El MISMO velo que `.obertura::before`. Sin esto el traspaso se ve: la foto
   del telón llega a pantalla completa clara y abajo la obertura la tiene
   velada, así que el último cuadro del telón parpadea de claro a oscuro. */
.telon__foto::after{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(115% 75% at 50% 44%, rgba(35,31,28,.74) 0%, rgba(35,31,28,.44) 46%, transparent 78%),
    linear-gradient(180deg, rgba(35,31,28,.5) 0%, transparent 26%, transparent 72%, rgba(35,31,28,.55) 100%);
}

/* Mientras el telón está puesto, la página de abajo no se mueve ni empieza sus
   entradas. Sin la pausa, la cabecera y la obertura terminan de aparecer
   escondidas detrás del telón y salen a escena ya puestas: se pierde el
   escalonado, que es media apertura. */
html[data-telon]{ overflow:hidden; }
html[data-telon] .cabecera,
html[data-telon] .obertura__centro > *{ animation-play-state:paused; }

/* Sin JavaScript el telón no se levanta nunca y taparía el sitio entero. */
html[data-sin-telon] .telon{ display:none; }

@media (prefers-reduced-motion:reduce){ .telon{ display:none; } }


/* ════════════════════════════════════════════════════════════════════════════
   LAS PÁGINAS CLARAS — todo lo que no es la landing
   ════════════════════════════════════════════════════════════════════════════
   El papel es el mismo crema de la sección de presentación. No es un color
   parecido elegido a ojo: es el papel del dibujo a la acuarela, medido
   (252,250,244). Un tono cercano hace que el dibujo se lea como un recuadro
   pegado encima en vez de estar impreso ahí. */
/* ════════════════════════════════════════════════════════════════════════════
   LA TIPOGRAFÍA BASE — faltaba, y se notaba sin que se viera.
   ════════════════════════════════════════════════════════════════════════════
   Ninguna regla declaraba la tipografía del cuerpo. El engine la fija dentro de
   SU raíz, así que el recorrido siempre estuvo bien, pero las otras seis páginas
   caían al valor por defecto del navegador: **Times New Roman**. Precios,
   filtros, botones, rótulos y descripciones, todo, en la serif de sistema.

   No saltaba a la vista porque la página es crema y editorial y una serif ahí no
   grita — se veía «bien» siendo un accidente. Apareció midiendo la familia
   computada del precio al probar el interruptor de tipografías.

   Va en `body` y no solo en `.pagina` para que valga también donde el marcado no
   lleve esa clase. */
body{ font-family:var(--sw-font-body); }

.pagina{
  background:#FCFAF4; color:#2E241E;
  font-family:var(--sw-font-body);
  /* La cabecera es fija: sin esto el primer título le queda debajo. */
  padding-top:clamp(76px,10vh,104px);
  --lado:clamp(20px,5vw,64px);
  --ancho:1240px;
}
.pagina main{ display:block; }

/* ---------- la portada de una página --------------------------------------- */
.portada{
  max-width:var(--ancho); margin:0 auto;
  padding:clamp(28px,6vh,72px) var(--lado) clamp(20px,3vh,32px);
}
.portada__ojo{
  margin:0 0 14px;
  font-size:.72rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.18em;
  color:rgba(46,36,30,.5);
}
.portada__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(2.4rem,6.4vw,4.6rem); line-height:1.02;
  letter-spacing:-.022em;
}
.portada__titulo em{ font-style:normal; font-weight:700; color:var(--sempra); }
.portada__bajada{
  margin:20px 0 0; max-width:44ch;
  font-size:clamp(1rem,1.5vw,1.12rem); line-height:1.55;
  color:rgba(46,36,30,.72);
}

/* ---------- EL CARTEL — la portada de propiedades ---------------------------
   Copiado de oakâme, medido con el navegador y no a ojo: la foto a sangre
   dentro de un marco de filetes de 1 px, el nombre enorme abajo a la izquierda,
   las miniaturas abajo a la derecha, y la foto nueva entrando desde la derecha
   por encima de la anterior.

   El marco de filetes es la pieza que hace que la foto se vea IMPRESA en el
   papel y no pegada encima. Es un solo píxel y cambia todo. */
.cartel{
  /* METIDO HACIA ADENTRO, no a sangre. Es el gesto de oakâme, medido de su
     portada: el bloque entra 30 px por cada lado en una ventana de 1440 y el
     papel de la página se ve alrededor. A sangre, la foto es un fondo; con aire
     alrededor es una lámina apoyada sobre la hoja, y eso es lo que hace que se
     lea como una pieza y no como un encabezado.

     2vw y no 30 px fijos: en un teléfono 30 px de cada lado se comen el 15 % del
     ancho y la foto queda en una tira. */
  --cartel-aire:clamp(12px,2vw,30px);
  /* Lo que separa el texto y las miniaturas de su propio filete. */
  --cartel-esquina:clamp(14px,1.8vw,26px);
  padding:0 var(--cartel-aire);
  margin-top:var(--cartel-aire);
  margin-bottom:clamp(34px,6vh,72px);

  /* EL TOPE ES EL TAMAÑO DE LA FOTO, no una decisión de composición. Tokko sirve
     las portadas en 900 x 1200 y no tiene nada más grande: probé sus rutas de
     `original_pictures`, que da 960 x 1280 —un 7 % más— y las de `large` y
     `xlarge`, que dan 403.

     Sin tope, en una ventana de 1440 el marco medía 1382 y esos 900 píxeles se
     estiraban a 1,54x. Una foto de portal ya viene con compresión; estirada a
     una vez y media se ve exactamente como se veía: blanda.

     EL TOPE ES 1360: el marco queda en 1302, unos 30 px mas ancho que la barra
     de arriba de cada lado. Lo pidio Facundo, «un poco mas largo que el header»:
     el cartel es la entrada al catalogo y tiene que abrir mas ancho que la
     navegacion, no alinearse con ella.

     El precio es la nitidez: Tokko entrega las portadas en 900 px y a 1302 se
     estiran 1,45x. Se eligio a ojo abierto. Probe 960 —estiron cero— y el bloque
     se veia mas angosto que el contenido; 1240 alineaba con la columna. La unica
     salida real es espejar las fotos a R2 en mejor resolucion; el dia que pase,
     este tope se sube o se saca.

     `border-box` porque el sitio no declara uno global: con `content-box` el
     tope no cuenta los 2 x 28,8 del aire. */
  box-sizing:border-box;
  max-width:1360px;
  margin-inline:auto;
}
.cartel__marco{
  position:relative;
  /* Más bajo que antes —74vh— porque ahora el bloque no llega a los bordes y a
     la misma altura pesaba demasiado para lo que es: la entrada al catálogo, no
     el catálogo. Y en 64vh se ve que abajo sigue habiendo página. */
  height:clamp(380px,64vh,720px);
  /* El fondo se ve mientras carga la primera foto. Marrón y no crema: el
     nombre y el precio son claros y sobre crema desaparecerían. */
  background:#2A2724;
}

/* Los filetes de arriba y de abajo. Van como elementos y no como `border`
   porque cada uno se dibuja desde su punta al entrar —el de arriba de izquierda
   a derecha, el de abajo de derecha a izquierda—, y un borde no se puede animar
   por lado.

   Eran cuatro. A sangre los dos verticales caen justo en el borde de la
   pantalla: uno queda cortado y el otro se lee como un artefacto del monitor.
   Los horizontales siguen teniendo contra qué apoyarse —el papel de arriba y el
   de abajo—, y son los que hacen que la foto se vea IMPRESA y no pegada. */
.cartel__filete{
  position:absolute; z-index:5;
  background:rgba(46,36,30,.55); pointer-events:none;
}
.cartel__filete--arr,
.cartel__filete--aba{ left:0; width:100%; height:1px; }
.cartel__filete--izq,
.cartel__filete--der{ top:0; width:1px; height:100%; }

/* VUELVEN A SER CUATRO. Eran cuatro, quedaron dos: a sangre los dos verticales
   caían justo en el borde de la pantalla, uno se veía cortado y el otro se leía
   como un artefacto del monitor. Con el bloque metido hacia adentro esa razón
   desaparece y el marco se puede cerrar.

   Cada uno arranca de una punta distinta y los cuatro salen a la vez: el trazo
   se dibuja desde la esquina de arriba a la izquierda y desde la de abajo a la
   derecha al mismo tiempo, y se encuentran en las otras dos. Un borde no se
   puede animar por lado — por eso son elementos y no `border`. */
.cartel__filete--arr{ top:-1px;    transform-origin:left;   }
.cartel__filete--der{ right:-1px;  transform-origin:top;    }
.cartel__filete--aba{ bottom:-1px; transform-origin:right;  }
.cartel__filete--izq{ left:-1px;   transform-origin:bottom; }
@media (prefers-reduced-motion:no-preference){
  .cartel__filete--arr,
  .cartel__filete--aba{ animation:cartel-filete-h .9s .15s var(--curva) backwards; }
  .cartel__filete--izq,
  .cartel__filete--der{ animation:cartel-filete-v .9s .15s var(--curva) backwards; }
}
@keyframes cartel-filete-h{ from{ transform:scaleX(0); } }
@keyframes cartel-filete-v{ from{ transform:scaleY(0); } }

/* ---------- las fotos ------------------------------------------------------ */
.cartel__fotos{ position:absolute; inset:0; overflow:hidden; }
.cartel__lamina{
  position:absolute; inset:0; display:block; overflow:hidden;
  /* Acá `will-change` sí se justifica: es la capa que se desliza a pantalla
     completa, y sin promoverla el pase pega un tirón en el primer cuadro. */
  will-change:transform;
}
.cartel__lamina[hidden]{ display:none; }
.cartel__lamina img{
  /* Más alta que el marco para que el parallax tenga de dónde sacar recorrido
     sin descubrir el fondo.

     El desplazamiento va como `top` y no como `margin-top`: un porcentaje en
     `margin-top` se resuelve contra el ANCHO del contenedor, no contra el alto.
     Con el marco a 74vh los números daban por casualidad; al bajarlo a 64vh el
     -7 % pasó a valer 97 px de un ancho de 1382 y la foto dejó de llegar abajo
     — asomaba una banda del fondo marrón. En `top`, sobre un elemento
     posicionado, el porcentaje sí es del alto. */
  position:absolute; left:0; top:-7%;
  width:100%; height:114%; display:block;
  object-fit:cover; object-position:50% 52%;
}
/* La sombra de abajo, fija: el nombre y el precio se apoyan ahí. Sin esto hay
   fotos —un cielo claro, una pared blanca— donde el texto claro no se lee. */
.cartel__sombra{
  position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(to top,
    rgba(24,18,14,.72) 0%, rgba(24,18,14,.28) 26%, transparent 52%);
}
/* El velo del pase: la foto que queda debajo se oscurece mientras la nueva la
   tapa. Arranca en 0 y lo lleva `cartel.js`. */
.cartel__velo{
  position:absolute; inset:0; pointer-events:none;
  background:#181210; opacity:0;
}

/* ---------- el pie --------------------------------------------------------- */
.cartel__pie{
  position:absolute; z-index:4; pointer-events:none;
  /* EN LA ESQUINA DEL MARCO, no en la columna de la página. Estuvo alineado con
     el texto de abajo, y con el bloque a sangre tenía sentido; metido hacia
     adentro, no: el cartel pasó a ser una pieza con su propio borde, y su
     contenido pertenece a ESE borde. Alineado a la columna quedaba flotando a
     setenta píxeles de su propio marco, ni en la esquina ni en el medio.

     El mismo valor a los cuatro lados —abajo también— para que las dos esquinas
     de abajo se lean como las dos puntas de una misma línea. */
  left:var(--cartel-esquina);
  bottom:var(--cartel-esquina);
  max-width:min(62%,900px);
  color:#FCFAF4;
}
.cartel__ojo{
  margin:0 0 10px;
  font-size:.66rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.22em;
  color:rgba(252,250,244,.82);
}
.cartel__nombre{
  margin:0;
  font-family:var(--sw-font-display); font-weight:500;
  /* UN SOLO RENGLÓN, SIEMPRE. Estaba en 7,2vw —102 px en 1440— y ahí solo entran
     los nombres cortos: «Alto Verde II» mide 667 px por cada 100 de cuerpo, y el
     hueco que queda entre el rincón izquierdo y la tira de miniaturas es de 757
     en el peor caso (cinco destacadas). A 102 px se partía en dos renglones y el
     pie crecía hacia arriba tapando la foto.

     5,5vw da 80 px en 1440, y con eso el nombre más largo del catálogo ocupa 534
     de los 757 — sobra margen para uno nuevo. En el teléfono el piso son 32 px,
     donde además las miniaturas se van arriba y el ancho es entero. */
  font-size:clamp(2rem,5.5vw,5rem); line-height:.92;
  letter-spacing:-.035em; text-transform:uppercase;
  /* El `nowrap` es la garantía: si algún día entra un barrio más largo que todos
     los de hoy, se recorta contra el filete en vez de partirse y empujar la
     composición. Un nombre cortado se ve y se arregla; uno que empuja el pie
     hacia arriba rompe la foto sin que nadie lo note. */
  white-space:nowrap;
  /* Las letras entran de a una desde abajo: el contenedor tiene que recortar o
     se las ve asomando por debajo del pie. */
  overflow:hidden;
}
.cartel__letra{ display:inline-block; }
.cartel__precio{
  margin:12px 0 0;
  font-size:.86rem; font-weight:600; letter-spacing:.06em;
  font-variant-numeric:tabular-nums;
  color:rgba(252,250,244,.9);
}

/* ---------- las miniaturas -------------------------------------------------
   La activa va entera y las otras apagadas, con una barra abajo que se llena
   mientras corre el turno. oakâme oscurece la activa en vez de esto; mirado sin
   saberlo, la más oscura parece la apagada. Una barra que se llena no se puede
   leer al revés. */
.cartel__minis{
  position:absolute; z-index:6; list-style:none; margin:0; padding:0;
  right:var(--cartel-esquina);
  bottom:var(--cartel-esquina);
  display:flex; gap:clamp(6px,.8vw,12px);
  /* El tope y el encogido son para cuando hay cuatro o cinco destacadas: la tira
     crece hacia la IZQUIERDA y sin esto se le mete encima al nombre — con cinco
     lo medí y se montaban cien píxeles. Al 40 % las tres de hoy no se achican
     (entran holgadas), las cuatro bajan a 128 px y las cinco a 103, que sigue
     siendo una miniatura que se mira y no un sello. */
  max-width:min(40%,560px);
}
/* El elemento flexible es el <li>, NO el botón: cada miniatura va envuelta. El
   `min-width:0` tiene que ir acá o el `min-width:auto` del <li> le pone de piso
   el ancho de su contenido y la tira no se encoge — con cinco destacadas la
   cuarta salía cortada por el filete y la quinta quedaba fuera de la pantalla.
   Estuvo puesto en el botón, que no es quien decide. */
.cartel__minis > li{ min-width:0; flex:0 1 auto; }
.cartel__mini{
  position:relative; display:block; padding:0; cursor:pointer;
  width:clamp(72px,10.4vw,152px); max-width:100%; aspect-ratio:5/3;
  background:#2A2724; border-radius:0;
  /* El filete claro va siempre puesto: sin él, sobre un cielo pálido las
     apagadas se despintan y la tira deja de leerse como una tira. */
  border:1px solid rgba(252,250,244,.32);
  opacity:.62;
  transition:opacity var(--sal-medio) var(--curva), border-color var(--sal-rapido) var(--curva-corta);
}
.cartel__mini img{ width:100%; height:100%; object-fit:cover; display:block; }
.cartel__mini:hover{ opacity:.85; border-color:rgba(252,250,244,.7); }
.cartel__mini[aria-current="true"]{ opacity:1; border-color:rgba(252,250,244,.85); }
.cartel__mini:focus-visible{ outline:2px solid var(--sempra); outline-offset:3px; }
/* El reloj. Es un velo que CUBRE la miniatura activa de izquierda a derecha en
   los cinco segundos que dura su turno; cuando termina de taparla, cambia la
   foto. Es el mecanismo de oakâme y se lee como una carga.

   Antes era una barra de 2 px abajo. Se veía menos de lo que merecía: el gesto
   es el reloj de la portada y en una miniatura de 150 px una línea de dos
   píxeles no la mira nadie. */
.cartel__reloj{
  position:absolute; inset:0;
  background:rgba(24,18,14,.5);
  transform:scaleX(0); transform-origin:left center;
}

/* ---------- el buscador -----------------------------------------------------
   Sobre papel y no sobre la foto: es un filtro y vive con los filtros. En la
   portada competía con el nombre de la propiedad, que es lo que tiene que
   ganar ahí. Rectangular como todo lo demás — la píldora redondeada es la forma
   por defecto de un buscador y desentonaría con los filetes de la grilla. */
.busca{
  display:flex; align-items:center;
  max-width:var(--ancho); margin:0 auto;
  padding:clamp(20px,3.5vh,34px) var(--lado) 0;
}
/* La lupa se mete adentro del campo con un margen negativo: dentro del <input>
   no puede haber un hijo, y de fondo no se puede pintar aparte del borde. */
.busca__lupa{
  width:17px; height:17px; flex:none; color:rgba(46,36,30,.45);
  margin-right:-27px; margin-left:12px; position:relative; z-index:1;
}
.busca__campo{
  flex:1 1 auto; min-width:0;
  font:inherit; font-size:1rem; color:#2E241E;
  background:transparent;
  border:1px solid rgba(46,36,30,.22); border-right:0; border-radius:0;
  padding:14px 14px 14px 39px;
  transition:border-color var(--sal-medio) var(--curva);
}
.busca__campo::placeholder{ color:rgba(46,36,30,.42); }
.busca__campo:hover{ border-color:rgba(46,36,30,.4); }
.busca__campo:focus{ outline:0; }
.busca:focus-within .busca__campo{ border-color:var(--sempra); }
.busca__boton{
  flex:none;
  font:inherit; font-size:.9rem; font-weight:600; letter-spacing:.02em;
  color:#FCFAF4; background:#2E241E;
  border:1px solid #2E241E; border-radius:0;
  padding:14px 28px; cursor:pointer;
  transition:background var(--sal-medio) var(--curva), border-color var(--sal-medio) var(--curva);
}
.busca__boton:hover{ background:var(--sempra); border-color:var(--sempra); color:#241D17; }
.busca__boton:focus-visible{ outline:2px solid var(--sempra); outline-offset:3px; }

/* ---------- las tres cifras -------------------------------------------------
   Salen de los datos, no de un texto escrito a mano. Es la diferencia entre un
   dato y una promesa: si mañana hay catorce propiedades, acá dice catorce. */
.cifras{
  list-style:none; margin:clamp(26px,4vh,40px) 0 0; padding:0;
  display:flex; flex-wrap:wrap;
  gap:clamp(24px,5vw,64px);
}
.cifras li{ display:flex; flex-direction:column; gap:7px; }
.cifras__n{
  font-family:var(--sw-font-display); font-weight:600;
  font-size:clamp(1.5rem,3vw,2.2rem); line-height:1;
  font-variant-numeric:tabular-nums; white-space:nowrap;
  color:#2E241E;
}
.cifras__rot{
  font-size:.66rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.16em;
  color:rgba(46,36,30,.5);
}

@media (max-width:760px){
  .cartel__marco{ height:clamp(400px,64vh,620px); }
  /* En el teléfono las miniaturas y el nombre se pelean por el mismo rincón:
     el nombre se queda con el ancho de abajo y las miniaturas se van arriba. */
  .cartel__pie{ max-width:100%; }
  /* Arriba a la derecha: sigue siendo una esquina, y es la unica libre. */
  .cartel__minis{ top:var(--cartel-esquina); bottom:auto; max-width:60%; }
  .cartel__mini{ width:52px; }
  /* Menos aire entre la foto y el titular: en el teléfono el hueco que se ve
     bien en escritorio son doscientos cincuenta píxeles de nada. */
  .cartel{ margin-bottom:0; }
  .busca__boton{ padding:13px 16px; font-size:.85rem; }
  .busca__campo{ padding:13px 10px 13px 36px; font-size:.95rem; }
  .cifras{ gap:18px 30px; }
}

/* ---------- las colecciones ------------------------------------------------ */
.colecciones{
  display:flex; flex-wrap:wrap; gap:8px;
  max-width:var(--ancho); margin:0 auto;
  padding:clamp(18px,3vh,30px) var(--lado) 0;
}
.colecciones__uno{
  text-decoration:none; color:rgba(46,36,30,.7);
  font-size:.92rem;
  padding:9px 18px; border-radius:0;
  border:1px solid rgba(46,36,30,.14);
  transition:border-color var(--sal-medio) var(--curva), background var(--sal-medio) var(--curva), color var(--sal-rapido) var(--curva-corta);
}
.colecciones__uno:hover{ color:#2E241E; border-color:rgba(46,36,30,.34); }
.colecciones__uno[aria-current]{
  background:#2E241E; border-color:#2E241E; color:#FCFAF4;
}

/* ---------- los filtros ----------------------------------------------------
   Sin botón de «aplicar»: trabajan al cambiar. Un botón ahí solo pediría
   permiso para hacer lo que la persona ya pidió. */
.filtros{
  display:flex; flex-wrap:wrap; gap:clamp(12px,2vw,26px); align-items:flex-end;
  max-width:var(--ancho); margin:0 auto;
  padding:clamp(20px,3.5vh,34px) var(--lado) 0;
}
.filtros__campo{ display:flex; flex-direction:column; gap:7px; min-width:0; }
.filtros__campo label{
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:rgba(46,36,30,.48);
}
.filtros select{
  appearance:none;
  font:inherit; font-size:.95rem; color:#2E241E;
  background:transparent;
  border:0; border-bottom:1px solid rgba(46,36,30,.22);
  border-radius:0;                       /* Safari en iOS redondea por su cuenta */
  padding:7px 30px 7px 0;
  cursor:pointer;
  /* La flecha va en el fondo y no en un pseudoelemento: un <select> no puede
     tener hijos, así que ::after no se dibujaría. */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%232E241E' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round' opacity='.55'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 4px center;
  transition:border-color var(--sal-medio) var(--curva);
}
.filtros select:hover{ border-bottom-color:rgba(46,36,30,.5); }
.filtros select:focus-visible{
  outline:2px solid var(--sempra); outline-offset:3px; border-radius:0;
}
.filtros__limpiar{
  font:inherit; font-size:.85rem; color:rgba(46,36,30,.62);
  background:transparent; border:0; cursor:pointer;
  padding:7px 0; margin-bottom:1px;
  text-decoration:underline; text-underline-offset:4px;
  transition:color var(--sal-rapido) var(--curva-corta);
}
.filtros__limpiar:hover{ color:var(--sempra); }

.conteo{
  max-width:var(--ancho); margin:0 auto;
  padding:clamp(22px,3.5vh,34px) var(--lado) 0;
  font-size:.82rem; letter-spacing:.02em;
  color:rgba(46,36,30,.5);
  font-variant-numeric:tabular-nums;
}

/* ---------- la grilla de propiedades --------------------------------------- */
.rejilla{
  list-style:none; margin:0 auto;
  max-width:var(--ancho);
  padding:clamp(16px,2.5vh,26px) var(--lado) clamp(56px,9vh,110px);
  display:grid; gap:clamp(26px,3.4vw,48px) clamp(20px,2.6vw,36px);
  grid-template-columns:repeat(auto-fill, minmax(290px, 1fr));
}
.ficha__link{
  display:block; text-decoration:none; color:inherit;
  border-radius:3px;
}
.ficha__link:focus-visible{ outline:2px solid var(--sempra); outline-offset:6px; }

.ficha__marco{
  position:relative; overflow:hidden;
  aspect-ratio:4 / 3;
  background:rgba(46,36,30,.06);
  border-radius:0;
}
.ficha__marco img{
  width:100%; height:100%; object-fit:cover; display:block;
  transition:transform 1.1s var(--curva);
}
.ficha__link:hover .ficha__marco img{ transform:scale(1.04); }
/* La cinta de operación va sobre un velo y no sobre la foto pelada: las fotos
   son de atardecer y sobre un cielo claro el texto blanco desaparecía. */
.ficha__operacion{
  position:absolute; left:12px; top:12px;
  font-size:.66rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:#FCFAF4;
  background:rgba(24,20,17,.62);
  padding:6px 11px; border-radius:0;
  backdrop-filter:blur(6px);
}

.ficha__cuerpo{ padding:16px 2px 0; }
.ficha__barrio{
  margin:0 0 6px;
  font-size:.7rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:rgba(46,36,30,.48);
}
.ficha__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.15rem,1.7vw,1.38rem); line-height:1.22;
  letter-spacing:-.008em;
}
.ficha__precio{
  margin:9px 0 0;
  font-size:1.02rem; font-weight:600;
  font-variant-numeric:tabular-nums; letter-spacing:.01em;
}
.ficha__datos{
  list-style:none; margin:12px 0 0; padding:0;
  display:flex; flex-wrap:wrap; gap:6px 14px;
  font-size:.82rem; color:rgba(46,36,30,.6);
  font-variant-numeric:tabular-nums;
}
/* Un punto entre dato y dato, dibujado por CSS: en el marcado son <li> sueltos
   y el separador no es contenido. */
.ficha__datos li + li{ position:relative; padding-left:14px; }
.ficha__datos li + li::before{
  content:"·"; position:absolute; left:3px; color:rgba(46,36,30,.34);
}

/* ---------- cuando no hay nada --------------------------------------------- */
.vacio{
  grid-column:1 / -1;
  padding:clamp(36px,7vh,72px) 0;
  text-align:center;
  color:rgba(46,36,30,.7);
}
.vacio p{ margin:0 auto 22px; max-width:38ch; font-size:1.05rem; line-height:1.5; }

/* ════════════════════════════════════════════════════════════════════════════
   LA FICHA DE UNA PROPIEDAD
   ════════════════════════════════════════════════════════════════════════════ */
.detalle{
  max-width:var(--ancho); margin:0 auto;
  padding:0 var(--lado) clamp(56px,9vh,110px);
}
.detalle > section + section{ margin-top:clamp(40px,7vh,86px); }

/* ---------- la galería ------------------------------------------------------
   Una grande a la izquierda y dos apiladas al costado. Con menos de tres fotos
   se reparte lo que hay: dejar el hueco con el fondo a la vista se lee como una
   foto que no cargó. */
.galeria{
  display:grid; gap:10px;
  grid-template-columns:2fr 1fr;
  grid-template-rows:repeat(2, 1fr);
  aspect-ratio:16 / 9;
  margin-top:clamp(20px,4vh,40px);
}
.galeria__marco{ margin:0; overflow:hidden; border-radius:0; background:rgba(46,36,30,.06); }
.galeria__marco--grande{ grid-row:1 / span 2; }
.galeria__marco img{ width:100%; height:100%; object-fit:cover; display:block; }
/* Una sola foto: toma el ancho entero. Dos: media y media. */
.galeria[data-fotos="1"]{ grid-template-columns:1fr; grid-template-rows:1fr; }
.galeria[data-fotos="2"]{ grid-template-columns:1fr 1fr; grid-template-rows:1fr; }
.galeria[data-fotos="2"] .galeria__marco--grande{ grid-row:auto; }
@media (max-width:700px){
  /* En vertical la grilla de tres se aplasta y ninguna foto se ve. Se apilan. */
  .galeria{ grid-template-columns:1fr; grid-template-rows:none; aspect-ratio:auto; }
  .galeria__marco{ aspect-ratio:4 / 3; }
  .galeria__marco--grande{ grid-row:auto; aspect-ratio:3 / 2; }
}

/* ---------- el encabezado ---------------------------------------------------- */
.detalle__cabeza{ margin-top:clamp(26px,4.5vh,48px); }
.migas{
  display:flex; flex-wrap:wrap; gap:8px;
  font-size:.74rem; letter-spacing:.1em; text-transform:uppercase;
  color:rgba(46,36,30,.46);
  margin-bottom:16px;
}
.migas a{ color:inherit; text-decoration:none; }
.migas a:hover{ color:var(--sempra); }
.migas > * + *::before{ content:"/"; margin-right:8px; opacity:.5; }

.detalle__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.9rem,4.6vw,3.4rem); line-height:1.05;
  letter-spacing:-.018em;
  max-width:18ch;
}
.detalle__bajo{
  display:flex; flex-wrap:wrap; gap:10px clamp(20px,4vw,42px);
  align-items:baseline;
  margin-top:18px; padding-top:18px;
  border-top:1px solid rgba(46,36,30,.12);
}
.detalle__barrio{
  margin:0;
  font-size:.76rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:rgba(46,36,30,.5);
}
.detalle__precio{
  margin:0 0 0 auto;
  font-size:clamp(1.3rem,2.6vw,1.8rem); font-weight:600;
  font-variant-numeric:tabular-nums; letter-spacing:.005em;
}
@media (max-width:560px){ .detalle__precio{ margin-left:0; } }

/* ---------- la ficha técnica ------------------------------------------------- */
.tecnica{
  display:grid; gap:1px;
  grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));
  background:rgba(46,36,30,.12);          /* los filetes son el fondo asomando */
  border:1px solid rgba(46,36,30,.12);
  border-radius:0; overflow:hidden;
}
.tecnica__dato{ background:#FCFAF4; padding:clamp(18px,2.4vw,26px) clamp(14px,2vw,22px); }
.tecnica__valor{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.5rem,3vw,2.1rem); line-height:1;
  font-variant-numeric:tabular-nums;
}
/* La unidad no compite con el número: va chica, en redonda y más clara. */
.tecnica__valor i{
  font-style:normal; font-family:var(--sw-font-body);
  font-size:.44em; color:rgba(46,36,30,.5); letter-spacing:.02em;
}
.tecnica__rotulo{
  margin:9px 0 0;
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.13em;
  color:rgba(46,36,30,.48);
}

/* ---------- los bloques de texto --------------------------------------------- */
.detalle h2, .tambien h2, .mapa h2, .consulta h2{
  margin:0 0 20px;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.4rem,2.6vw,1.95rem);
  letter-spacing:-.012em;
}
/* La descripcion llega del CRM partida en renglones —quien carga la propiedad
   escribe una linea por ambiente— y el sitio la dibuja como un parrafo por
   renglon. Sin aire entre ellos se leen como un bloque apretado y se pierde
   justamente la lista que hace util al texto: media interlinea alcanza para
   separarlos sin que el conjunto se desarme en fragmentos sueltos. */
.detalle__texto p{
  margin:0; max-width:62ch;
  font-size:clamp(1rem,1.4vw,1.1rem); line-height:1.62;
  color:rgba(46,36,30,.8);
}
.detalle__texto p + p{ margin-top:.8em; }

/* ---------- el mapa ----------------------------------------------------------- */
.mapa__marco{
  aspect-ratio:21 / 9; overflow:hidden;
  border:1px solid rgba(46,36,30,.12); border-radius:0;
  background:rgba(46,36,30,.05);
}
.mapa__marco iframe{ width:100%; height:100%; border:0; display:block; }
@media (max-width:640px){ .mapa__marco{ aspect-ratio:4 / 3; } }
.mapa__nota{
  margin:12px 0 0;
  font-size:.82rem; color:rgba(46,36,30,.55);
}

/* ---------- la consulta -------------------------------------------------------- */
.consulta__par{
  display:grid; gap:clamp(24px,4vw,56px);
  grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);
  align-items:start;
}
@media (max-width:820px){ .consulta__par{ grid-template-columns:1fr; } }

.consulta__forma{ display:grid; gap:18px; }
.consulta__campo{ display:grid; gap:7px; }
.consulta__campo label{
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:rgba(46,36,30,.5);
}
/* El <select> va en la MISMA lista que el input y el textarea. Faltaba, y los dos
   desplegables de la tasación salían con el recuadro gris del navegador al lado
   de campos subrayados: se leía como si fueran de otro formulario. */
.consulta__campo input, .consulta__campo textarea, .consulta__campo select{
  font:inherit; font-size:1rem; color:#2E241E;
  background:transparent;
  border:0; border-bottom:1px solid rgba(46,36,30,.22);
  border-radius:0;                       /* Safari en iOS redondea por su cuenta */
  padding:9px 2px;
  resize:vertical;
  transition:border-color var(--sal-medio) var(--curva);
}
.consulta__campo select{
  appearance:none;
  padding-right:30px; cursor:pointer;
  /* La flecha va en el fondo: un <select> no puede tener hijos, así que un
     ::after no se dibujaría. */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%232E241E' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round' opacity='.55'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 4px center;
}
.consulta__campo input:hover, .consulta__campo textarea:hover, .consulta__campo select:hover{
  border-bottom-color:rgba(46,36,30,.42);
}
.consulta__campo input:focus, .consulta__campo textarea:focus, .consulta__campo select:focus{
  outline:0; border-bottom-color:var(--sempra);
}
.consulta__forma .boton{ justify-self:start; margin-top:6px; }
.consulta__aviso:empty{ display:none; }
.consulta__aviso{
  margin:0; font-size:.88rem; color:#9A3412;
}

.consulta__agente{
  background:rgba(46,36,30,.04);
  border:1px solid rgba(46,36,30,.1);
  border-radius:0;
  padding:clamp(22px,3vw,30px);
}
.consulta__quien{
  margin:0 0 10px;
  font-family:var(--sw-font-display); font-size:1.25rem;
}
.consulta__frase{
  margin:0 0 18px; font-size:.95rem; line-height:1.5;
  color:rgba(46,36,30,.72);
}
.consulta__tel{
  font-weight:600; font-size:1.05rem; color:#2E241E;
  text-decoration:none; font-variant-numeric:tabular-nums;
  border-bottom:1px solid rgba(46,36,30,.24); padding-bottom:2px;
  transition:border-color var(--sal-medio) var(--curva), color var(--sal-rapido) var(--curva-corta);
}
.consulta__tel:hover{ color:var(--sempra); border-color:var(--sempra); }

/* ---------- también en Yerba Buena --------------------------------------------- */
.rejilla--suelta{ padding:0; max-width:none; }

/* ---------- la propiedad que ya no está ----------------------------------------- */
.detalle__nohay{ padding:clamp(48px,12vh,120px) 0; max-width:56ch; }
.detalle__salidas{
  display:flex; flex-wrap:wrap; gap:14px 26px; align-items:center;
  margin-top:30px;
}
.detalle__wa{
  color:rgba(46,36,30,.7); font-size:.95rem;
  text-decoration:underline; text-underline-offset:4px;
}
.detalle__wa:hover{ color:var(--sempra); }

/* ---------- el botón de las páginas claras -----------------------------------
   `.sw-btn` NO sirve acá: lo define el engine dentro de la hoja que inyecta al
   montar, y el engine solo corre en la landing. En las otras siete páginas esa
   clase no existe y el botón salía con la pinta que le pone el navegador.

   Este es del sitio, no del engine. Misma forma que el teléfono de la barra y
   que el WhatsApp del pie: las salidas se leen todas como la misma clase de cosa. */
.boton{
  display:inline-flex; align-items:center; gap:9px;
  font:inherit; font-size:.95rem; font-weight:600;
  text-decoration:none; cursor:pointer;
  padding:13px 26px; border-radius:0;
  border:1px solid transparent;
  transition:transform var(--sal-lento) var(--curva),
             box-shadow var(--sal-lento) var(--curva),
             background var(--sal-medio) var(--curva),
             border-color var(--sal-medio) var(--curva),
             color var(--sal-rapido) var(--curva-corta);
}
.boton--fuerte{ background:var(--sempra); color:#241D17; }
.boton--fuerte:hover{
  transform:translateY(-2px);
  box-shadow:0 14px 28px -14px rgba(238,90,36,.75);
}
.boton--suave{ color:#2E241E; border-color:rgba(46,36,30,.22); }
.boton--suave:hover{ border-color:rgba(46,36,30,.5); background:rgba(46,36,30,.04); }
.boton:focus-visible{ outline:2px solid var(--sempra); outline-offset:3px; }

/* ════════════════════════════════════════════════════════════════════════════
   VENDER · NOSOTROS · CONTACTO
   ════════════════════════════════════════════════════════════════════════════ */

/* ---------- LA CIMA — la portada de contacto --------------------------------
   La foto apaisada de Yerba Buena a sangre, con la volanta, el titular y la
   salida encima. Es la única página que abre con la ciudad entera, y para
   contacto es lo que corresponde: antes de decir «escribinos» conviene mostrar
   DÓNDE estamos.

   Va a sangre y no metida en la caja de `--ancho`: media hoja de foto con
   márgenes crema a los costados se lee como una ilustración, no como una vista.
   El texto sí queda dentro de una medida legible. */
.cima{
  position:relative;
  display:grid; place-items:center;
  /* Sin `border-box` la medida de abajo es la del CONTENIDO y el relleno se
     suma aparte: la foto termina más abajo de lo que dice el número. */
  box-sizing:border-box;
  min-height:clamp(380px,58vh,600px);
  padding:clamp(44px,7vh,84px) var(--lado);
  overflow:hidden;
  /* El mismo marrón del sitio detrás de la foto: mientras carga —o si no
     llega— el titular claro sigue siendo legible en vez de quedar blanco sobre
     crema, invisible. */
  background:#2A2724;
}
.cima__foto{ position:absolute; inset:0; z-index:0; display:block; }
.cima__foto img{
  width:100%; height:100%; display:block;
  object-fit:cover;
  /* Un poco por debajo del centro: la sierra queda arriba, detrás del titular,
     y el pueblo abajo, donde el velo es más denso. */
  object-position:50% 58%;
}
/* El velo. En dos tramos y no como una capa pareja: una capa pareja al 45%
   apaga la foto entera para resolver un problema que solo existe donde hay
   texto. */
.cima::after{
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:
    linear-gradient(to bottom,
      rgba(28,22,18,.42) 0%, rgba(28,22,18,.14) 22%,
      rgba(28,22,18,.44) 62%, rgba(28,22,18,.66) 100%),
    radial-gradient(96% 74% at 50% 52%, rgba(28,22,18,.44), transparent 74%);
}
.cima__cuerpo{
  position:relative; z-index:2;
  width:100%; max-width:820px;
  text-align:center; color:#FCFAF4;
}
.cima__ojo{
  margin:0 0 16px;
  font-size:.7rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.24em;
  color:rgba(252,250,244,.9);
  text-shadow:0 1px 16px rgba(28,22,18,.7);
}
.cima__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(2.4rem,6.4vw,4.8rem); line-height:.98;
  letter-spacing:-.03em; text-wrap:balance;
  text-shadow:0 2px 40px rgba(28,22,18,.45);
}
.cima__titulo em{ font-style:normal; font-weight:700; color:var(--sempra); }
.cima__bajada{
  margin:20px auto 0; max-width:44ch;
  font-size:clamp(1rem,1.5vw,1.1rem); line-height:1.55;
  color:rgba(252,250,244,.86);
  text-shadow:0 1px 20px rgba(28,22,18,.5);
}
.cima__salida{ margin:clamp(24px,4vh,36px) 0 0; }

/* Después de la foto, el contenido necesita más aire que después de un titular
   sobre papel. */
.cima + .detalle{ padding-top:clamp(30px,5vh,58px); }

/* Un titular que entra SIEMPRE en un renglon. El cuerpo sale del ancho de la
   pantalla y no de un tamaño fijo: «La cartera completa» son 19 caracteres, que
   en Roboto Slab miden unos 9,9 em, asi que con 8,4vw entra en 390 px y a
   partir de los 1290 se planta en 5 rem. `nowrap` es el seguro — si algun dia
   el texto cambia y no entra, se desborda a la vista en vez de partirse por lo
   bajo y que nadie se entere. */
.portada--ancha .portada__titulo{
  max-width:none;
  font-size:min(8.4vw,5rem);
  white-space:nowrap;
}

/* Una portada de una columna, para las páginas que son texto y no vitrina. */
.portada--angosta{ padding-left:0; padding-right:0; max-width:none; }
.portada--angosta .portada__bajada{ max-width:38ch; }

/* ---------- la tasación ------------------------------------------------------ */
.tasar{
  display:grid; gap:clamp(28px,4.5vw,64px);
  grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);
  align-items:start;
  padding-top:clamp(10px,2vh,20px);
}
@media (max-width:820px){ .tasar{ grid-template-columns:1fr; } }
.tasar__nota{
  background:rgba(46,36,30,.04);
  border:1px solid rgba(46,36,30,.1);
  border-radius:0;
  padding:clamp(22px,3vw,32px);
}
.tasar__nota h2{ font-size:1.15rem; margin-bottom:14px; }
.tasar__nota ul{ list-style:none; margin:0; padding:0; display:grid; gap:13px; }
.tasar__nota li{
  position:relative; padding-left:20px;
  font-size:.94rem; line-height:1.5; color:rgba(46,36,30,.75);
}
/* La viñeta es un guion largo en el naranja: una lista con puntos redondos se lee
   como un formulario más, y esto es lo que sostiene el argumento. */
.tasar__nota li::before{
  content:"—"; position:absolute; left:0; top:-1px;
  color:var(--sempra); font-weight:600;
}
.tasar__firma{
  margin:20px 0 0; padding-top:16px;
  border-top:1px solid rgba(46,36,30,.1);
  font-size:.86rem; color:rgba(46,36,30,.6);
}

/* El proceso en pasos se rehizo entero y vive al final de la hoja, junto al
   resto de la pagina de tasaciones. Ver «LA PAGINA DE TASACIONES». */

/* ---------- las razones -------------------------------------------------------- */
.razones__par{
  display:grid; gap:clamp(24px,3.4vw,48px);
  grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));
}
.razones__una h3{
  margin:0 0 10px;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.1rem,1.8vw,1.3rem); line-height:1.24;
}
.razones__una p{
  margin:0; font-size:.98rem; line-height:1.58; color:rgba(46,36,30,.74);
}
.razones__salida{ margin:clamp(28px,4vh,44px) 0 0; }

/* ---------- el relato de nosotros ---------------------------------------------- */
.relato__grande{
  margin:0 0 clamp(26px,4vh,44px);
  max-width:24ch;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.5rem,3.4vw,2.5rem); line-height:1.16;
  letter-spacing:-.016em;
}
.relato__par{
  display:grid; gap:clamp(22px,3.4vw,52px);
  grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));
}
.relato__par p{
  margin:0; font-size:clamp(1rem,1.35vw,1.07rem); line-height:1.62;
  color:rgba(46,36,30,.78);
}

/* ---------- el equipo, como la portada de un diario --------------------------
   Las tres piezas de cualquier portada: el titular arriba, la nota principal con
   su foto y su epígrafe, y abajo una nota secundaria con un riel de breves al
   costado.

   LAS FOTOS SON CHICAS A PROPÓSITO. Antes el retrato de la titular medía 423 px
   de ancho por 529 de alto: en una portada de diario una foto de ese tamaño es
   la del hecho del día, no la de quien firma la nota. Ahora mide 312 × 390 y el
   que manda es el titular, que es como se lee un diario — primero el texto
   grande, después la cara.

   LOS FILETES van como `border-left` de las columnas y el aire como relleno de
   cada una, nunca como `gap`: con `gap` el papel se ve entre columna y columna y
   la línea deja de ser una línea. Es el mismo mecanismo que la vidriera.

   LAS DOS BANDAS COMPARTEN LA RETÍCULA: la principal reparte .78 / 1.55 / .72 y
   la de abajo 2.33 / .72, o sea que el filete de la derecha cae en el mismo px
   en las dos. Esa columna que baja entera es lo que hace que la página se lea
   como una hoja armada y no como dos bloques apilados.

   LOS RETRATOS SON PROVISORIOS (`assets/equipo-0*.webp`): fotos generadas sin
   caras —de espaldas, manos, una cámara— hasta que lleguen las del equipo.
   Ninguna muestra un rostro, a propósito: una cara inventada en «quiénes somos»
   de una inmobiliaria, al lado del nombre de quien firma, es justo lo que la
   página existe para no hacer. */

/* EL TITULAR. Es el segundo tamaño de la página y nunca el primero: «SEMPRA» en
   la banda negra mide 338 px a 1440 y este 81. Si se acercaran habría dos
   mástiles y ninguno mandaría. Sin `max-width`: un titular de diario cruza la
   hoja entera, y `balance` evita el renglón huérfano de dos palabras. */
.equipo__titular{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.9rem,5vw,4.5rem); line-height:.97;
  letter-spacing:-.032em;
  text-wrap:balance;
}
/* La bajada: el párrafo chico al costado del titular. En un diario cierra el
   bloque de apertura; acá además ocupa la mitad derecha del renglón del titular,
   que sin ella quedaba en blanco. */
.equipo__bajada{
  margin:0; align-self:stretch;
  display:flex; align-items:flex-end;
  font-size:.92rem; line-height:1.58; color:rgba(28,28,25,.68);
}
.equipo__subtitular{
  margin:0 0 clamp(12px,1.8vh,18px);
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.15rem,1.9vw,1.65rem); line-height:1.12;
  letter-spacing:-.02em;
  text-wrap:balance;
}

/* LAS COLUMNAS DE FOTO VAN CON TOPE, no en `fr`. En `fr` puro, a 1920 el retrato
   de la titular volvía a los 422 px de ancho por 528 de alto que Facundo marcó
   como demasiado grandes: el ancho extra de un monitor tiene que irse al texto,
   que es lo que hace un diario cuando crece el papel. La columna de la derecha
   usa el MISMO `clamp` en las tres bandas, así el filete baja por el mismo px de
   punta a punta de la sección. */
.equipo__cabeza,
.equipo__banda{
  display:grid;
  grid-template-columns:minmax(0,1fr) clamp(248px,23vw,360px);
  align-items:start;
}
.equipo__cabeza{ padding-bottom:clamp(18px,2.6vh,30px); }
.equipo__principal{
  display:grid;
  grid-template-columns:clamp(240px,24vw,380px) minmax(0,1fr) clamp(248px,23vw,360px);
  align-items:start;
  padding:clamp(16px,2.4vh,26px) 0 clamp(20px,3vh,32px);
  border-top:1px solid rgba(28,28,25,.28);
  border-bottom:1px solid rgba(28,28,25,.28);
}
.equipo__banda{ padding:clamp(18px,2.6vh,30px) 0 0; }
.equipo__cabeza > *,
.equipo__principal > *,
.equipo__banda > *{ padding:0 clamp(18px,2.4vw,40px); }
.equipo__cabeza > *:first-child,
.equipo__principal > *:first-child,
.equipo__banda > *:first-child{ padding-left:0; }
.equipo__cabeza > *:last-child,
.equipo__principal > *:last-child,
.equipo__banda > *:last-child { padding-right:0; }
/* La nota estira hasta el alto del retrato para que el pase pueda irse al pie.
   El sello no: estirado, su epígrafe se despegaba del sello y quedaba flotando. */
.equipo__nota{ align-self:stretch; display:flex; flex-direction:column; }
.equipo__nota,
.equipo__sello,
.equipo__riel,
.equipo__bajada{ border-left:1px solid rgba(28,28,25,.2); }

.equipo__foto{ margin:0 0 clamp(10px,1.4vh,14px); }
/* El fondo de espera va en la IMAGEN y no en la `figure`: en la figure se veía
   como un bloque gris que seguía por detrás del epígrafe. */
.equipo__foto img{
  display:block; width:100%; height:auto;
  aspect-ratio:4 / 5; object-fit:cover;
  background:rgba(28,28,25,.07);
}
/* EL RETRATO DE LA TITULAR VA CUADRADO y no en 4:5. En 4:5 medía 311 x 389 y la
   nota de al lado, que son tres párrafos, terminaba 150 px antes: un hueco en
   medio de la portada. Cuadrado mide 311 x 311, la nota cierra casi a la misma
   altura, y sigue siendo 1,6 veces más alto que los tres de ventas — que es la
   diferencia que se pidió, «un poco más grande». */
.equipo__foto--grande{ margin-bottom:0; }
.equipo__foto--grande img{ aspect-ratio:1 / 1; object-position:50% 20%; }

/* El epígrafe: el renglón chico abajo de una foto que dice qué se está viendo.
   Un diario no publica una foto sin él, y acá además es lo que llena el hueco
   entre el pie del retrato y el filete de abajo. */
.equipo__epigrafe{
  margin:9px 0 0; padding-top:8px;
  border-top:1px solid rgba(28,28,25,.14);
  font-size:.74rem; line-height:1.45; color:rgba(28,28,25,.5);
}

.equipo__volanta{
  margin:0 0 clamp(7px,1vh,10px);
  font-size:.68rem; font-weight:700;
  text-transform:uppercase; letter-spacing:.17em;
  color:var(--sempra);
}
.equipo__nombre{
  margin:0 0 4px;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1rem,1.25vw,1.15rem); line-height:1.16;
  letter-spacing:-.015em;
}
.equipo__nombre--grande{
  font-size:clamp(1.4rem,2.3vw,2rem); line-height:1.06;
  letter-spacing:-.024em; margin-bottom:8px;
}
.equipo__rol{
  margin:0;
  font-size:.71rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.14em;
  color:rgba(28,28,25,.52);
}
/* EL CUERPO VA EN DOS COLUMNAS. La columna de la nota mide 619 px: a un solo
   ancho el renglón se pasa de los 90 caracteres y deja de leerse como diario.
   Partido en dos da 45 por renglón, que es la medida de un diario de verdad. */
.equipo__cuerpo{
  margin:clamp(12px,1.8vh,18px) 0 0;
  padding-top:clamp(10px,1.5vh,14px);
  border-top:1px solid rgba(28,28,25,.18);
  columns:16rem; column-gap:clamp(18px,2.2vw,34px);
  font-size:.92rem; line-height:1.6; color:rgba(28,28,25,.72);
}
.equipo__cuerpo p{ margin:0 0 .85em; }
.equipo__cuerpo p:last-child{ margin-bottom:0; }
/* El `margin-top:auto` del pase come el aire de arriba, así que el que separa la
   nota del pase lo pone el cuerpo. */
.equipo__cuerpo{ margin-bottom:clamp(14px,2vh,22px); }
/* El pase, al pie de la columna. */
.equipo__pase{
  margin:clamp(14px,2vh,22px) 0 0; margin-top:auto; padding-top:10px;
  border-top:1px solid rgba(28,28,25,.18);
  font-size:.78rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.1em;
}
.equipo__pase a{ color:var(--sempra); text-decoration:none; }
.equipo__pase a::after{ content:" \2192"; }
.equipo__pase a:hover{ text-decoration:underline; }

/* El sello ya no tiene el ancho de una sección para él solo. `border-box` porque
   el sitio no declara uno global: con `content-box` sus 6 px de perforación se
   sumaban al 100 % y los agujeros de la derecha quedaban cortados. */
.equipo__sello .sello{ box-sizing:border-box; width:100%; margin-top:0; }

/* VENTAS, UNA SOLA NOTA DE TRES. Los retratos van APAISADOS en 3:2 mientras el
   de la titular es 4:5: al lado del suyo miden lo mismo de ancho pero la mitad
   de alto, así que la jerarquía se ve sin que nadie tenga que comparar. Y como
   el 4:5 del archivo se recorta a 3:2, el encuadre se sube al 22 % — centrado,
   la cabeza queda cortada por arriba.

   Acá SÍ va `gap`: son tres fotos de la misma nota, no tres columnas de la
   página. Entre fotos el papel es la calle, y un filete ahí las convertiría en
   tres notas distintas, que es exactamente lo contrario de lo que se pidió. */
.equipo__trio{
  list-style:none; margin:0; padding:0;
  display:grid; grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(10px,1.5vw,20px);
}
/* El alto va por `height` y no por proporción: con `3/2` fijo, a 1920 los tres
   retratos medían 462 x 308 y le ganaban en peso al de la titular. Con tope, el
   recorte se va apaisando a medida que crece el papel — que es lo que hace un
   diario con una foto de grupo. */
.equipo__trio .equipo__foto{ height:clamp(120px,13.5vw,236px); }
/* Al 58 % y no al 22: el 22 era para la cabeza de las siluetas de prueba. En las
   fotos de ahora la persona camina abajo del cuadro, y al 22 se le cortaba la
   cabeza contra el borde. */
.equipo__trio .equipo__foto img{ height:100%; object-position:50% 58%; }
.equipo__pie{
  margin:0;
  font-size:.72rem; letter-spacing:.02em; color:rgba(28,28,25,.5);
}

/* EL RIEL DE BREVES. Los tres que no salen a la calle, en filas apretadas con
   miniatura cuadrada: es la columna de breves de una portada, y ocupa el alto
   de la nota de ventas sin pedir una foto grande. */
.equipo__lista{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(12px,1.8vh,18px);
}
.equipo__uno{
  display:grid; grid-template-columns:clamp(60px,5.4vw,78px) minmax(0,1fr);
  gap:clamp(10px,1.1vw,15px); align-items:center;
  padding-top:clamp(12px,1.8vh,18px);
  border-top:1px solid rgba(28,28,25,.16);
}
.equipo__uno:first-child{ padding-top:0; border-top:0; }
.equipo__uno .equipo__foto{ margin:0; }
.equipo__uno .equipo__foto img{ aspect-ratio:1 / 1; object-position:50% 24%; }
.equipo__uno .equipo__rol{ font-size:.62rem; letter-spacing:.11em; margin-bottom:5px; }
.equipo__uno .equipo__nombre{ margin:0; font-size:clamp(.94rem,1.1vw,1.04rem); }

@media (max-width:1080px){
  /* La nota de ventas y el riel dejan de convivir: en dos columnas angostas los
     tres retratos caen abajo de 130 px y el riel parte «Alquileres y contratos»
     en tres renglones. El riel pasa abajo y sus tres breves se ponen en fila.

     LA CABEZA SE PARTE EN EL MISMO PUNTO, y no puede esperar más abajo: la
     columna angosta tiene 248 px de mínimo, así que en un teléfono de 390 le
     dejaba 102 al titular y «operación» se salía de la pantalla. */
  .equipo__cabeza,
  .equipo__banda{ grid-template-columns:1fr; }
  .equipo__cabeza > *,
  .equipo__banda > *{ padding:0; }
  .equipo__bajada{
    display:block; max-width:64ch;
    border-left:0; border-top:1px solid rgba(28,28,25,.2);
    margin-top:clamp(14px,2vh,20px); padding-top:clamp(12px,1.8vh,18px);
  }
  .equipo__riel{
    border-left:0; border-top:1px solid rgba(28,28,25,.2);
    margin-top:clamp(20px,3vh,30px); padding-top:clamp(16px,2.4vh,24px);
  }
  .equipo__lista{ grid-template-columns:repeat(3,minmax(0,1fr)); }
  .equipo__uno{ padding-top:0; border-top:0; }
}

@media (max-width:900px){
  /* Apilado: el retrato, la nota y el sello uno abajo del otro. Los filetes
     verticales pasan a horizontales — una línea que separa columnas que ya no
     existen se lee como un error. */
  .equipo__principal{ grid-template-columns:1fr; }
  .equipo__principal > *{ padding:0; }
  .equipo__nota, .equipo__sello{
    border-left:0; border-top:1px solid rgba(28,28,25,.2);
    margin-top:clamp(16px,2.4vh,24px); padding-top:clamp(16px,2.4vh,24px);
  }
  .equipo__foto--grande{ max-width:320px; }
  .equipo__sello .sello{ width:min(340px,100%); }
  .equipo__cuerpo{ columns:1; }
}

@media (max-width:620px){
  /* El riel vuelve a la pila: tres breves en fila dejan la miniatura en 60 px y
     el nombre partido. Los tres de ventas SE QUEDAN EN FILA — son la nota, y
     apilados dejan de leerse como un equipo. */
  .equipo__lista{ grid-template-columns:1fr; }
  .equipo__uno{ padding-top:14px; border-top:1px solid rgba(28,28,25,.16); }
  .equipo__uno:first-child{ padding-top:0; border-top:0; }
  .equipo__pie{ font-size:.66rem; }
}

/* ---------- el cierre, como la última nota de la portada ----------------------
   Era un rótulo, un renglón y dos botones: casi media pantalla de papel vacío
   justo antes del pie. Una portada de diario no deja ese hueco en ninguna parte,
   así que el cierre pasa a ser una nota con foto apaisada a la izquierda y el
   texto a la derecha, con el mismo filete vertical del equipo. */
.cierre__nota{
  display:grid;
  grid-template-columns:minmax(0,1.5fr) clamp(280px,30vw,520px);
  align-items:center;
  padding-top:clamp(14px,2.2vh,24px);
  border-top:1px solid rgba(46,36,30,.28);
}
.cierre__nota > *{ padding:0 clamp(18px,2.4vw,40px); }
.cierre__nota > *:first-child{ padding-left:0; }
.cierre__nota > *:last-child { padding-right:0; border-left:1px solid rgba(46,36,30,.2); }
.cierre__foto{
  margin:0; overflow:hidden; background:rgba(46,36,30,.07);
}
.cierre__foto img{
  display:block; width:100%;
  height:clamp(190px,25vw,420px); object-fit:cover;
}
.cierre__titular{
  margin:0 0 clamp(10px,1.6vh,16px);
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.5rem,2.6vw,2.3rem); line-height:1.06;
  letter-spacing:-.026em; text-wrap:balance;
}
.cierre__cuerpo{
  margin:0; max-width:38ch;
  font-size:clamp(.95rem,1.15vw,1.03rem); line-height:1.58;
  color:rgba(46,36,30,.75);
}
.cierre__botones{
  display:flex; flex-wrap:wrap; gap:12px;
  margin:clamp(16px,2.4vh,24px) 0 0;
}
@media (max-width:900px){
  .cierre__nota{ grid-template-columns:1fr; }
  .cierre__nota > *{ padding:0; }
  .cierre__nota > *:last-child{
    border-left:0; border-top:1px solid rgba(46,36,30,.2);
    margin-top:clamp(16px,2.4vh,24px); padding-top:clamp(16px,2.4vh,24px);
  }
  .cierre__foto img{ height:clamp(170px,48vw,260px); }
}

/* ---------- las salidas de contacto ---------------------------------------------
   Arriba del formulario: quien entra acá quiere el número, no llenar campos. */
.salidas{
  display:grid; gap:clamp(12px,1.8vw,20px);
  grid-template-columns:repeat(auto-fit, minmax(230px, 1fr));
}
.salidas__una{
  display:grid; gap:6px; align-content:start;
  text-decoration:none; color:inherit;
  padding:clamp(20px,2.8vw,30px);
  border:1px solid rgba(46,36,30,.14);
  border-radius:0;
  transition:border-color var(--sal-medio) var(--curva), background var(--sal-medio) var(--curva), transform var(--sal-lento) var(--curva);
}
.salidas__una:hover{
  border-color:rgba(46,36,30,.4); background:rgba(46,36,30,.03);
  transform:translateY(-2px);
}
.salidas__una:focus-visible{ outline:2px solid var(--sempra); outline-offset:3px; }
.salidas__rotulo{
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.16em;
  color:rgba(46,36,30,.48);
}
.salidas__valor{
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.25rem,2.2vw,1.55rem); line-height:1.1;
  font-variant-numeric:tabular-nums;
}
.salidas__nota{ font-size:.83rem; color:rgba(46,36,30,.55); }
/* El WhatsApp es la salida que más se usa: se marca con el naranja de la marca,
   no agrandándola. Tres tarjetas de distinto tamaño se leen como un error. */
.salidas__una--fuerte{ border-color:rgba(238,90,36,.4); background:rgba(238,90,36,.05); }
.salidas__una--fuerte:hover{ border-color:var(--sempra); background:rgba(238,90,36,.09); }
.salidas__una--fuerte .salidas__rotulo{ color:var(--sempra); }

/* La ayuda debajo de un campo: dice qué esperamos sin alargar el rótulo. */
.consulta__ayuda{
  margin:0; font-size:.8rem; color:rgba(46,36,30,.52);
}

/* ════════════════════════════════════════════════════════════════════════════
   LAS NOTAS — la portada de periódico y la lectura
   ════════════════════════════════════════════════════════════════════════════
   Es la página donde la tipografía hace todo el trabajo. No lleva ni una imagen
   y no es una carencia: la jerarquía la dan el tamaño del titular, el ancho de
   la columna y los filetes. Meterle fotos la volvería un blog más. */
.diario{
  max-width:var(--ancho); margin:0 auto;
  padding:0 var(--lado) clamp(56px,9vh,110px);
}

/* ---------- la testera ------------------------------------------------------ */
.diario__testera{
  display:grid; gap:8px;
  grid-template-columns:1fr auto 1fr;
  align-items:baseline;
  padding:clamp(24px,5vh,54px) 0 clamp(16px,2.4vh,24px);
  /* Dos filetes, uno grueso y uno fino, como la cabecera de un diario. El grueso
     va arriba porque es lo que corta la página del resto del sitio. */
  border-top:2.5px solid #2E241E;
  border-bottom:1px solid rgba(46,36,30,.2);
  margin-top:clamp(10px,2vh,20px);
}
.diario__nombre{
  margin:0;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(2.2rem,6vw,4.2rem); line-height:1;
  letter-spacing:-.03em; text-align:center;
}
.diario__lado{
  margin:0;
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.15em;
  color:rgba(46,36,30,.5);
}
.diario__lado--der{ text-align:right; }
@media (max-width:640px){
  /* En vertical los tres en una fila dejan el nombre en dos caracteres de ancho. */
  .diario__testera{ grid-template-columns:1fr; text-align:center; }
  .diario__lado--der{ text-align:center; }
}

/* ---------- el crédito de cada nota ----------------------------------------- */
.nota__credito, .lectura__credito{
  display:flex; flex-wrap:wrap; gap:6px 14px;
  margin:0 0 12px;
  font-size:.68rem; font-weight:500;
  text-transform:uppercase; letter-spacing:.12em;
  color:rgba(46,36,30,.5);
}
.nota__credito > * + *::before,
.lectura__credito > * + *::before{ content:"·"; margin-right:14px; opacity:.6; }
.nota__volanta{ color:var(--sempra); font-weight:600; }

/* ---------- la nota de apertura --------------------------------------------- */
.apertura{ padding:clamp(28px,5vh,56px) 0; border-bottom:1px solid rgba(46,36,30,.2); }
.apertura__titulo{
  margin:0 0 16px; max-width:17ch;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(2rem,5.6vw,3.9rem); line-height:1.03;
  letter-spacing:-.028em;
}
/* Roboto Slab NO tiene italica dibujada: el navegador la finge inclinando la
   redonda, y a 60 px eso se ve como un error. En todo el sitio el enfasis es
   peso y naranja. */
.apertura__titulo em, .nota__titulo em{
  font-style:normal; font-weight:700; color:var(--sempra);
}
.apertura__bajada{
  margin:0; max-width:52ch;
  font-size:clamp(1.05rem,1.7vw,1.28rem); line-height:1.5;
  color:rgba(46,36,30,.75);
}
.nota__seguir{
  display:inline-block; margin-top:22px;
  font-size:.8rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.13em;
  color:var(--sempra);
  border-bottom:1px solid rgba(238,90,36,.4); padding-bottom:3px;
  transition:border-color var(--sal-medio) var(--curva);
}
.apertura:hover .nota__seguir{ border-bottom-color:var(--sempra); }

.nota__link{ display:block; text-decoration:none; color:inherit; }
.nota__link:focus-visible{ outline:2px solid var(--sempra); outline-offset:6px; }
.apertura__titulo, .nota__titulo{ transition:color var(--sal-rapido) var(--curva-corta); }
.nota__link:hover .apertura__titulo,
.nota__link:hover .nota__titulo{ color:var(--sempra); }

/* ---------- las columnas -----------------------------------------------------
   Los filetes son una sombra en el borde derecho e inferior de CADA NOTA, no el
   fondo del contenedor asomando por el `gap`.

   El truco del fondo es más corto y estaba mal acá: con siete notas en cuatro
   columnas la última fila queda a medio llenar, y donde no hay nota el fondo
   oscuro quedaba a la vista como dos bloques grises. Una sombra no existe si la
   celda no existe.

   `overflow:hidden` recorta la línea derecha de la última columna, que si no
   quedaría colgando en el borde de la página. */
.diario__columnas{
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(255px, 1fr));
  overflow:hidden;
  border-bottom:1px solid rgba(46,36,30,.2);
}
.nota{
  padding:clamp(24px,3vw,34px) clamp(18px,2.2vw,28px);
  box-shadow:1px 0 0 rgba(46,36,30,.2), 0 1px 0 rgba(46,36,30,.2);
}
.nota__titulo{
  margin:0 0 10px;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.15rem,1.9vw,1.42rem); line-height:1.18;
  letter-spacing:-.016em;
}
.nota__bajada{
  margin:0;
  font-size:.94rem; line-height:1.55;
  color:rgba(46,36,30,.7);
}

/* ---------- el rótulo de una sección del diario -----------------------------
   El encabezado de sección de un periódico: versalitas chicas colgadas de un
   filete grueso. Reemplaza a los <h2> sueltos, que en una página que ya tiene
   testera y columnas se leían como titulares de otra nota. */
.diario__rotulo{
  /* Va como <h2> y no como <p>: son encabezados de seccion de verdad. */
  margin:0 0 clamp(18px,3vh,28px);
  padding-top:12px;
  border-top:2.5px solid #2E241E;
  font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.18em;
  color:rgba(46,36,30,.55);
}
/* Las secciones que siguen a las columnas necesitan su propio aire: `.diario` no
   lo da porque en `notas` no habia nada despues de la portada. */
.diario > section{ margin-top:clamp(44px,7vh,88px); }

/* ---------- la lectura de una nota ------------------------------------------- */
.lectura{
  /* Una medida corta. Un renglón de más de 75 caracteres obliga al ojo a buscar
     dónde empieza el siguiente, y esta es la única página del sitio que se lee
     entera en vez de mirarse. */
  max-width:none; margin:0 auto;
  padding:0 var(--lado) clamp(56px,9vh,110px);
}
.lectura__cabeza{
  max-width:70ch; margin:0 auto;
  padding:clamp(24px,5vh,54px) 0 clamp(20px,3vh,30px);
  border-bottom:1px solid rgba(46,36,30,.16);
}
.lectura__cabeza .migas{ margin-bottom:20px; }
.lectura__titulo{
  margin:0 0 18px;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.9rem,4.6vw,3.2rem); line-height:1.06;
  letter-spacing:-.028em;
}
.lectura__bajada{
  margin:0 0 24px;
  font-size:clamp(1.08rem,1.8vw,1.3rem); line-height:1.5;
  color:rgba(46,36,30,.72);
}
.lectura__credito{ margin:0; }

.lectura__cuerpo{ max-width:70ch; margin:0 auto; padding-top:clamp(24px,4vh,42px); }
.lectura__cuerpo p{
  margin:0 0 1.35em;
  font-size:clamp(1.04rem,1.5vw,1.14rem); line-height:1.68;
  color:#392E26;
}
/* La primera línea entra más grande: es el gesto de un diario y le dice al ojo
   dónde empieza el texto sin necesidad de una capitular, que a este tamaño
   quedaría pretenciosa. */
.lectura__cuerpo > p:first-child{
  font-size:clamp(1.14rem,1.75vw,1.28rem); line-height:1.58;
  color:#2E241E;
}
.lectura__cuerpo h2{
  margin:2em 0 .7em;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.2rem,2.1vw,1.5rem); line-height:1.22;
  letter-spacing:-.018em;
}

.lectura__cierre{
  max-width:70ch; margin:clamp(36px,6vh,64px) auto 0;
  padding:clamp(26px,4vw,36px);
  background:rgba(46,36,30,.04);
  border:1px solid rgba(46,36,30,.1);
  border-radius:0;
}
.lectura__cierreTitulo{
  margin:0 0 10px;
  font-family:var(--sw-font-display); font-weight:500; font-size:1.3rem;
  letter-spacing:-.014em;
}
.lectura__cierre p{ margin:0 0 20px; font-size:.98rem; line-height:1.55; color:rgba(46,36,30,.75); }
.lectura__cierre p + a{ margin-top:0; }

.lectura .tambien{
  max-width:var(--ancho); margin:clamp(46px,8vh,88px) auto 0;
}
.lectura .tambien h2{
  margin:0 0 20px;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.3rem,2.4vw,1.8rem); letter-spacing:-.02em;
}
/* En «seguir leyendo» la línea de arriba la pone la sección, no cada nota. */
.lectura .diario__columnas{ border-top:1px solid rgba(46,36,30,.2); }

/* ════════════════════════════════════════════════════════════════════════════
   EL VOCABULARIO DE LAS REFERENCIAS
   ════════════════════════════════════════════════════════════════════════════
   Sacado de mirar oakâme, maestroclass y niccolomiranda con
   `scripts/mirar-movimiento.js` — no de recordarlas. Las tres comparten cuatro
   cosas y el sitio no tenía ninguna:

     1. Todo cuadrado. Ni una esquina redondeada. La píldora es el gesto de una
        aplicación; estas páginas se parecen a un impreso.
     2. Filetes finos que dividen y enmarcan, con marcas de registro en las
        esquinas — como las cruces de un pliego de imprenta.
     3. Papel con grano, no un crema plano.
     4. Titulares enormes y a la izquierda, con volanta mínima en versalitas.

   ── el grano del papel ──────────────────────────────────────────────────────
   Un ruido finísimo, dibujado con un SVG en línea: no pide un archivo más y no
   se pixela al agrandar. La opacidad es baja a propósito —se tiene que sentir,
   no ver—; arriba de .05 empieza a ensuciar las fotos. */
.pagina::before{
  content:""; position:fixed; inset:0; z-index:0;
  pointer-events:none;
  opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23g)'/%3E%3C/svg%3E");
}
/* El contenido va por encima del grano — pero SOLO el contenido, nombrado.
   El primer intento fue `.pagina > *`, y eso le pisó el `position:fixed` a la
   cabecera: misma especificidad y regla más abajo. La barra dejó de quedarse
   arriba al scrollear en las seis páginas claras, y encima el `right` calculado
   pasó a leerse como un desplazamiento relativo, así que se iba 100 px afuera
   de la pantalla.

   Un selector de hijo genérico es cómodo hasta que uno de esos hijos necesitaba
   su propio `position`. Van nombrados. */
.pagina > main, .pagina > footer{ position:relative; z-index:1; }

/* ── las marcas de registro ─────────────────────────────────────────────────
   Cuatro escuadras en las esquinas de un bloque enmarcado. Es la cita directa
   de oakâme, y funciona porque el sitio ya habla de planos y de dibujos: son
   las cruces que un impresor usa para alinear el pliego.

   Van en dos pseudoelementos con degradados y no en cuatro <span>: no son
   contenido, y así cualquier bloque las hereda con una sola clase. */
.marcas{ position:relative; }
/* Los dos pseudoelementos dibujan dos esquinas cada uno con degradados de un
   pixel. La versión anterior pedía un <span> extra adentro para las de abajo, y
   una escuadra decorativa no puede exigir marcado: no es contenido. */
.marcas::before, .marcas::after{
  content:""; position:absolute; inset:-1px; pointer-events:none;
  background-repeat:no-repeat;
  background-image:
    linear-gradient(var(--sempra),var(--sempra)), linear-gradient(var(--sempra),var(--sempra)),
    linear-gradient(var(--sempra),var(--sempra)), linear-gradient(var(--sempra),var(--sempra));
  background-size:10px 1px, 1px 10px, 10px 1px, 1px 10px;
}
.marcas::before{ background-position:left top, left top, right top, right top; }
.marcas::after { background-position:left bottom, left bottom, right bottom, right bottom; }


/* ── la cabecera sobre papel ────────────────────────────────────────────────
   En oakâme la barra no flota: se apoya en el papel, encerrada en un filete y
   con la marca y cada enlace en su propia celda. Se lee como el encabezado de
   un impreso, no como la barra de una aplicación.

   Solo en las páginas claras. En la landing la barra flota sobre el video, y
   ahí un filete cortaría la imagen. */
.pagina .cabecera{
  background:none;
  padding:0;
  top:clamp(14px,2.2vw,26px);
  /* Los bordes se calculan, no se centran con `margin:auto`. Con `auto` peleando
     contra `max-width` y los dos lados, la barra arrancaba 63 px adentro del
     titulo: quedaba desalineada de todo el contenido y se notaba.

     `max(...)` da el margen de la pagina cuando la ventana es angosta y el borde
     de la caja de contenido cuando es ancha, que es exactamente donde arranca el
     titulo. Y NO se usa `transform:translateX(-50%)`, que seria lo corto:
     cualquier transform en la barra la convierte en bloque contenedor de sus
     hijos `fixed` y el panel del menu volveria a quedar encerrado en su alto. */
  left: max(var(--lado), calc((100% - var(--ancho)) / 2));
  right:max(var(--lado), calc((100% - var(--ancho)) / 2));
  border:1px solid rgba(46,36,30,.22);
  /* El papel de atrás, para que el video del recorrido o el texto que pase por
     debajo no se lea a través del filete. */
  background-color:#FCFAF4;
}
.pagina .cabecera__marca{
  padding:clamp(12px,1.5vw,17px) clamp(14px,1.8vw,22px);
  border-right:1px solid rgba(46,36,30,.22);
}
.pagina .cabecera__nav{
  gap:0; margin-left:auto;
}
.pagina .cabecera__nav a{
  padding:clamp(12px,1.5vw,17px) clamp(13px,1.6vw,22px);
  border-left:1px solid rgba(46,36,30,.22);
  font-size:.74rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.1em;
}
/* El subrayado que crecía desde el centro sobra: con la celda dibujada, el
   estado se dice llenándola. Es más callado y más firme. */
.pagina .cabecera__nav a::after{ display:none; }
.pagina .cabecera__nav a:hover{ background:rgba(46,36,30,.05); color:#2E241E; }
.pagina .cabecera__nav a[aria-current]{ background:#2E241E; color:#FCFAF4; }

/* La barra ya no es una franja al tope: el contenido tiene que arrancar debajo
   del filete, no debajo de un borde invisible. */
.pagina{ padding-top:clamp(86px,11vh,116px); }

@media (max-width:900px){
  .pagina .cabecera{ padding:0; }
  .pagina .cabecera__marca{ border-right:0; }
  .pagina .cabecera__menu{ margin-right:12px; }
  .pagina .cabecera__nav a{ border-left:0; }
}

/* ── los titulares, más grandes y anclados a la izquierda ───────────────────
   En las tres referencias el titular ocupa mucho más de lo que uno pondría por
   instinto, y nunca va centrado: se apoya en el margen izquierdo y crece hacia
   la derecha. Es lo que hace que una página se vea segura de sí misma. */
.portada__titulo{
  font-size:clamp(2.8rem,8.2vw,6.4rem);
  line-height:.96;
  letter-spacing:-.035em;
  max-width:15ch;
}
.portada__ojo{
  font-size:.7rem; letter-spacing:.22em;
  padding-bottom:12px; margin-bottom:22px;
  border-bottom:1px solid rgba(46,36,30,.2);
  /* La volanta con un filete debajo, como una entrada de índice. */
  display:block;
}
.portada{ padding-top:clamp(36px,8vh,96px); }
.portada__bajada{ margin-top:26px; }

/* ── el revelado palabra por palabra ────────────────────────────────────────
   `will-change` en cada palabra sería peor que no ponerlo: una frase de doce
   palabras son doce capas de composición para animar una opacidad. Se deja que
   el navegador decida. */
.palabra{ display:inline-block; }
/* Sin JavaScript la frase tiene que estar puesta y legible, no en gris al 22%. */
[data-revela]:not([data-entrado]) .palabra{ opacity:1; }
@media (prefers-reduced-motion:reduce){ .palabra{ opacity:1 !important; } }

/* ── las tarjetas de la grilla ──────────────────────────────────────────────
   Cada propiedad en su propia tarjeta, con su filete alrededor. Antes iban en
   una grilla dibujada —sin separación, con una línea vertical entre columna y
   columna, como oakâme—, y ahí las doce se leían como UN catálogo. Individuales
   se leen como doce cosas que se pueden elegir de a una, que es lo que la
   persona vino a hacer.

   El filete es el mismo de toda la página y no una sombra: una tarjeta que
   flota proyecta una sombra que acá no tiene de dónde venir. */
.ficha{
  border:1px solid rgba(46,36,30,.16);
  padding:0 0 clamp(18px,2.4vh,28px);
  background:rgba(255,255,255,.4);
  transition:border-color var(--sal-medio) var(--curva), transform var(--sal-medio) var(--curva);
}
.ficha:hover{ border-color:rgba(46,36,30,.42); transform:translateY(-3px); }
.ficha__cuerpo{ padding:16px clamp(14px,1.6vw,22px) 0; }

/* ════════════════════════════════════════════════════════════════════════════
   EL PAPEL DEL DIARIO — solo en `nosotros.html`
   ════════════════════════════════════════════════════════════════════════════
   El papel de niccolomiranda NO es blanco: es un gris cálido con grano visible.
   Los dos valores están MEDIDOS de la página con el navegador, no elegidos a
   ojo — #C4BCB3 el papel y #1C1C19 la tinta.

   Es otra hoja que el resto del sitio, y es a propósito: un periódico se
   imprime en otro papel que un folleto. Si algún día conviene unificarlo, se
   cambian las dos variables de acá y la página vuelve al crema del sitio. */
.pagina--diario{
  --papel:#C4BCB3;
  --tinta:#1C1C19;
  background:var(--papel); color:var(--tinta);

  /* CASI TODA LA PANTALLA, con un margen chico. Lo pidió Facundo así. El resto
     del sitio vive en 1240 px porque son páginas de lectura; un diario se abre
     y ocupa la mesa, y esta página son columnas y filetes que necesitan ancho
     para leerse como una portada y no como una lista.

     Los 1820 no son un capricho: sin tope, en un monitor de 27 pulgadas las
     tres columnas del banco de retratos miden 800 px cada una y dejan de ser
     columnas de diario. Abajo de 1820 no limita nada y manda el margen.

     Lo que YA iba a sangre —`.gigante` y `.marquesina`— no lleva `--ancho`, así
     que no se entera de este cambio y sigue igual. */
  --ancho:1820px;
  --lado:clamp(20px,3vw,56px);
}
/* El grano del sitio, más presente: sobre crema es una insinuación y sobre este
   gris es la trama del papel. */
.pagina--diario::before{ opacity:.11; }
/* La barra, en el papel del diario.

   Va con `html[data-claro]` adelante y no sola: quien pinta la barra de las
   páginas claras es `html[data-claro] .cabecera`, que tiene una clase y un
   atributo. Sin igualar esa especificidad la regla no se aplicaba y la barra
   seguía crema sobre el papel gris — un rectángulo blanco pegado arriba.

   SIN grano. El primer intento le puso el mismo ruido que al papel, en
   `multiply`: el papel con su grano al 11 % mide (194,186,178) y la barra con
   el ruido crudo daba (171,164,157) — quedó más oscura que lo que venía a
   igualar, y en el teléfono, con el doble de densidad, el ruido se veía como
   estática. El papel liso a (196,188,179) queda a dos puntos del papel con
   grano: invisible. */
html[data-claro] .pagina--diario .cabecera{
  background:linear-gradient(180deg,
    var(--papel) 0%, var(--papel) 46%,
    rgba(196,188,179,.72) 74%, rgba(196,188,179,0) 100%);
}
html[data-claro] .pagina--diario .cabecera__marca{ color:var(--tinta); }
html[data-claro] .pagina--diario .cabecera__nav a{ color:rgba(28,28,25,.68); }
html[data-claro] .pagina--diario .cabecera__nav a:hover{ color:var(--tinta); }
/* La activa lleva fondo oscuro, asi que va en el papel y no en la tinta. Hace
   falta nombrarla aparte: la regla de arriba tiene un atributo y dos clases y
   le ganaba a `.pagina .cabecera__nav a[aria-current]`, que es la que ponia el
   color claro. El boton de «Nosotros» quedaba tinta sobre tinta — invisible. */
html[data-claro] .pagina--diario .cabecera__nav a[aria-current]{ color:var(--papel); }
.pagina--diario .cabecera{ border-color:rgba(28,28,25,.26); }
html[data-claro] .pagina--diario .cabecera__marca{ color:var(--tinta); }
html[data-claro] .pagina--diario .cabecera__nav a{ color:rgba(28,28,25,.68); }
html[data-claro] .pagina--diario .cabecera__nav a:hover{ color:var(--tinta); }
/* La activa lleva fondo oscuro, asi que va en el papel y no en la tinta. Hace
   falta nombrarla aparte: la regla de arriba tiene un atributo y dos clases y
   le ganaba a `.pagina .cabecera__nav a[aria-current]`, que es la que ponia el
   color claro. El boton de «Nosotros» quedaba tinta sobre tinta — invisible. */
html[data-claro] .pagina--diario .cabecera__nav a[aria-current]{ color:var(--papel); }

/* La testera. El filete grueso arriba es lo que corta la página del resto del
   sitio; el fino abajo cierra la cabecera. */
.pagina--diario .diario__testera{
  border-top-color:var(--tinta);
  border-bottom-color:rgba(28,28,25,.28);
}
.pagina--diario .diario__lado{ color:rgba(28,28,25,.6); }

/* ---------- la banda de tres columnas ---------------------------------------
   Foto y columna a los lados, la afirmación grande al medio, y filetes
   verticales entre una y otra. Los filetes van como `box-shadow` de cada celda
   y no como `border` del contenedor: con `gap` el fondo se vería entre columna
   y columna, y acá el fondo es el papel — la línea tiene que ser una línea. */
.banda{
  display:grid; align-items:start;
  grid-template-columns:1fr minmax(0,1.05fr) 1fr;
  padding:clamp(28px,4.5vh,54px) 0 clamp(32px,5vh,60px);
  border-bottom:1px solid rgba(28,28,25,.28);
}
.banda__col,
.banda__centro{ padding:0 clamp(18px,2.6vw,40px); }
.banda__col:first-child{ padding-left:0; }
.banda__col:last-child{ padding-right:0; }
.banda__centro{
  box-shadow:1px 0 0 rgba(28,28,25,.28), -1px 0 0 rgba(28,28,25,.28);
  text-align:center;
  align-self:stretch;
}
.banda__foto{ margin:0 0 14px; overflow:hidden; }
.banda__foto img{
  width:100%; aspect-ratio:16/7; object-fit:cover; display:block;
}
/* El rótulo: versalitas apretadas, como el nombre de una sección de diario. */
.banda__rotulo{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin:0 0 10px;
  font-family:var(--sw-font-display); font-weight:700;
  font-size:clamp(.95rem,1.3vw,1.12rem);
  text-transform:uppercase; letter-spacing:.01em;
}
/* La etiqueta naranja del original. Es la única mancha de color de la página y
   por eso funciona: si hubiera tres, no destacaría ninguna. */
.etiqueta{
  font-family:var(--sw-font-body);
  font-size:.6rem; font-weight:700;
  text-transform:uppercase; letter-spacing:.1em;
  color:var(--papel); background:var(--sempra);
  padding:3px 7px 2px;
}
.banda__cuerpo{
  margin:0;
  font-size:clamp(.95rem,1.25vw,1.04rem); line-height:1.5;
  color:rgba(28,28,25,.82);
}
.banda__volanta{
  margin:0 0 14px;
  font-size:.66rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.2em;
  color:rgba(28,28,25,.55);
}
.banda__titulo{
  margin:0; max-width:14ch; margin-inline:auto;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.7rem,3.4vw,2.9rem); line-height:1.08;
  letter-spacing:-.028em; text-wrap:balance;
}
/* Roboto Slab no tiene itálica dibujada: el énfasis es peso y naranja. */
.banda__titulo em{ font-style:normal; font-weight:700; color:var(--sempra); }
.banda__tip{
  margin:clamp(18px,2.6vh,26px) 0 0;
  font-size:.92rem; line-height:1.45;
  color:rgba(28,28,25,.72);
}

/* ---------- la banda negra --------------------------------------------------
   La palabra a todo el ancho, RECORTADA arriba y abajo por la banda. El recorte
   es el gesto: una palabra que entra entera se lee como un título, y una
   cortada se lee como una impresión que no cabe en la hoja.

   `overflow:hidden` en la banda y una altura menor que la de la línea. */
/* El bloque de arriba cierra contra la banda: `.diario` reserva abajo el aire
   del final de una pagina, y aca no es el final de nada. */
.pagina--diario .diario:first-of-type{ padding-bottom:0; }
.gigante{
  background:var(--tinta);
  overflow:hidden;
  margin:clamp(22px,3.5vh,44px) 0 0;
  height:clamp(120px,25vw,340px);
  display:grid; place-items:center;
}
.gigante__palabra{
  margin:0;
  font-family:var(--sw-font-display); font-weight:500;
  /* Que llene el ancho: «Sempra» son seis letras y a 0,62 em cada una necesita
     un cuerpo de un sexto del ancho de la pantalla para llegar de borde a
     borde. El tope evita que en un monitor de 27 pulgadas la palabra pese más
     que la página entera. */
  font-size:min(23.5vw,29rem); line-height:.74;
  letter-spacing:-.045em; text-transform:uppercase;
  color:var(--papel);
  white-space:nowrap;
}


/* ════════════════════════════════════════════════════════════════════════════
   LAS SECCIONES DE PERIÓDICO — medidas de «The Paper Portfolio»
   ════════════════════════════════════════════════════════════════════════════
   Cuatro recursos más de niccolomiranda, adaptados a lo que esta página tiene
   que decir. Lo que los hace funcionar es siempre lo mismo: FILETES FINOS que
   dividen, versalitas apretadas para los rótulos, y una sola pieza enorme por
   pantalla. Un diario no grita en todos lados a la vez.

   Con varias tandas de `.diario` en la misma página, el respiro de abajo lo
   pone la última: las del medio ya lo tienen del bloque a sangre que sigue, y
   sumar los dos deja un pozo de doscientos píxeles. Si el navegador no entiende
   `:has()` lo único que pasa es que sobra aire — no se rompe nada. */
.diario:has(+ .gigante),
.diario:has(+ .vidriera),
.diario:has(+ .marquesina){ padding-bottom:0; }

/* ---------- la barra de cifras -----------------------------------------------
   El rótulo en dos renglones y al lado el numeral enorme, todo entre dos
   filetes. El de arriba es grueso y el de abajo fino: así la barra se lee como
   colgada de la testera y no como una pieza suelta.

   El numeral va alineado abajo y no a la línea de base: con dos renglones de
   rótulo, `baseline` toma el PRIMERO —«Propiedades»— y el número queda flotando
   media altura por encima de donde tiene que estar. */
.cifrero{
  border-top:1px solid var(--tinta);
  border-bottom:1px solid rgba(28,28,25,.28);
  padding:clamp(16px,2.6vh,28px) 0 clamp(14px,2.2vh,24px);
}
.cifrero__lista{
  list-style:none; margin:0; padding:0;
  display:grid; grid-template-columns:repeat(4,1fr);
  gap:clamp(14px,2.6vw,40px);
}
.cifrero__una{
  display:flex; align-items:flex-end; justify-content:space-between;
  gap:clamp(6px,1vw,14px);
}
.cifrero__rotulo{
  margin:0 0 .12em;
  font-family:var(--sw-font-display);
  text-transform:uppercase; line-height:1.04;
}
.cifrero__rotulo span{
  display:block; font-weight:500;
  font-size:clamp(.58rem,.86vw,.8rem); letter-spacing:.015em;
  color:rgba(28,28,25,.7);
}
.cifrero__rotulo strong{
  display:block; font-weight:700;
  font-size:clamp(.82rem,1.42vw,1.32rem); letter-spacing:-.008em;
}
.cifrero__n{
  margin:0;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(2.4rem,5vw,4.4rem); line-height:.74;
  /* El `letter-spacing` negativo se aplica TAMBIÉN después del último dígito, así
     que la caja termina antes que la tinta. En las tres primeras cifras no se
     nota porque tienen papel a la derecha; la cuarta está pegada al borde de la
     página y al «1» se le comía la pata del serif. El relleno devuelve lo que la
     interletra le sacó de más. */
  letter-spacing:-.05em; padding-inline-end:.08em;
  font-variant-numeric:lining-nums tabular-nums;
}

/* ---------- los oficios ------------------------------------------------------
   La tira de tarjetas con filete fino. El fondo apenas más claro que el papel
   —un 4 % de blanco— es lo que las despega sin dibujar una caja: sobre un papel
   gris cálido, una tarjeta blanca sería un parche. */
.oficios__lista{
  list-style:none; margin:clamp(16px,2.4vh,26px) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(4,1fr);
  gap:clamp(10px,1.2vw,18px);
}
.oficios__uno{
  display:flex; flex-direction:column; gap:9px;
  padding:clamp(15px,1.9vw,26px);
  border:1px solid rgba(28,28,25,.3);
  background:rgba(255,255,255,.04);
}
.oficios__n{
  margin:0;
  font-family:var(--sw-font-display); font-weight:700;
  font-size:.7rem; letter-spacing:.2em;
  color:var(--sempra);
}
.oficios__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:700;
  font-size:clamp(1.2rem,1.9vw,1.62rem); line-height:1.04;
  letter-spacing:-.02em; text-transform:uppercase;
}
.oficios__cuerpo{
  margin:0; flex:1 0 auto;
  font-size:clamp(.88rem,1.05vw,.96rem); line-height:1.5;
  color:rgba(28,28,25,.82);
}
.oficios__pie{
  margin:0; padding-top:11px;
  border-top:1px solid rgba(28,28,25,.22);
  font-size:.66rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.13em;
  color:rgba(28,28,25,.58);
}
.oficios__pie a{ color:var(--sempra); text-decoration:none; border-bottom:1px solid currentColor; }

/* ---------- la vidriera ------------------------------------------------------
   Tres columnas separadas por filetes verticales: una propiedad a cada lado y
   el llamado grande al medio. Los filetes van como `box-shadow` de la celda del
   medio y no como `border` del contenedor — con `gap` el papel se vería entre
   columna y columna, y la línea tiene que ser una línea. */
.vidriera{
  max-width:var(--ancho); margin:clamp(28px,4.6vh,56px) auto 0;
  padding:clamp(24px,3.6vh,44px) var(--lado);
  display:grid; align-items:center;
  grid-template-columns:1fr minmax(0,.86fr) 1fr;
  border-top:1px solid rgba(28,28,25,.28);
  border-bottom:1px solid rgba(28,28,25,.28);
}
.vidriera__lado{ padding:0 clamp(16px,2.4vw,38px); }
.vidriera__lado:first-child{ padding-left:0; }
.vidriera__lado:last-child{ padding-right:0; }
.vidriera__centro{
  padding:0 clamp(16px,2.4vw,38px);
  text-align:center; align-self:stretch;
  display:flex; flex-direction:column; justify-content:center; gap:10px;
  box-shadow:1px 0 0 rgba(28,28,25,.28), -1px 0 0 rgba(28,28,25,.28);
}
.vidriera__foto{ display:block; margin:0 0 12px; overflow:hidden; }
.vidriera__foto img{
  width:100%; aspect-ratio:16/7; object-fit:cover; display:block;
  transition:transform var(--sal-lento) var(--curva);
}
.vidriera__rotulo{
  display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  margin:0 0 8px;
  font-family:var(--sw-font-display); font-weight:700;
  font-size:clamp(.92rem,1.3vw,1.1rem);
  text-transform:uppercase; letter-spacing:.01em;
}
.vidriera__cuerpo{
  margin:0;
  font-size:clamp(.88rem,1.1vw,1rem); line-height:1.5;
  color:rgba(28,28,25,.8);
}
.vidriera__enlace{ color:inherit; text-decoration:none; display:block; }
.vidriera__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:700;
  font-size:clamp(1.9rem,3.6vw,3.1rem); line-height:1;
  letter-spacing:-.032em; text-transform:uppercase;
}
.vidriera__bajada{
  margin:0; max-width:30ch; margin-inline:auto;
  font-size:clamp(.92rem,1.15vw,1.02rem); line-height:1.45;
  color:rgba(28,28,25,.78);
}
.vidriera__tip{
  margin:0;
  font-size:.8rem; color:rgba(28,28,25,.62);
}
.vidriera__tip strong{
  font-family:var(--sw-font-display); font-weight:700;
  letter-spacing:.08em; color:var(--tinta);
}
.vidriera__salida{ margin:6px 0 0; }
@media (hover:hover){
  .vidriera__enlace:hover .vidriera__foto img{ transform:scale(1.035); }
}

/* ---------- el sello de la matrícula -----------------------------------------
   Un sello es, literalmente, lo que certifica algo — así que la matrícula va
   como la estampilla del original y no como un párrafo más.

   LAS PERFORACIONES SON PUNTOS DEL COLOR DEL PAPEL DIBUJADOS ENCIMA, no un
   recorte. Cuatro capas de máscara con `mask-composite` no las dibujan igual
   todos los navegadores y el que falla no muestra el sello entero; acá el fondo
   de la página es un color plano, así que un punto del color del papel se lee
   exactamente igual que un agujero y no puede fallar. Cada círculo va centrado
   en el borde, o sea que solo se le ve la mitad: la que muerde el sello. */
.sello{
  --perf:6px;
  width:min(370px,100%);
  margin:clamp(14px,2.2vh,22px) 0 0;
  padding:var(--perf);
  background-color:#D6D0C7;
  background-image:
    radial-gradient(circle var(--perf) at 50% 0,    var(--papel) 96%, transparent 100%),
    radial-gradient(circle var(--perf) at 50% 100%, var(--papel) 96%, transparent 100%),
    radial-gradient(circle var(--perf) at 0 50%,    var(--papel) 96%, transparent 100%),
    radial-gradient(circle var(--perf) at 100% 50%, var(--papel) 96%, transparent 100%);
  background-repeat:repeat-x, repeat-x, repeat-y, repeat-y;
  background-position:0 0, 0 100%, 0 0, 100% 0;
  background-size:18px 12px, 18px 12px, 12px 18px, 12px 18px;
}
.sello__cara{
  border:1px solid rgba(28,28,25,.4);
  padding:clamp(16px,2vw,24px) clamp(16px,2vw,26px) clamp(14px,1.8vw,20px);
}
.sello__sol{
  display:block; width:clamp(78px,9vw,104px); height:auto;
  margin:0 auto clamp(12px,1.8vh,18px);
  color:var(--sempra);
}
/* Tipografía de máquina: es un registro, y un registro se lee como salido de
   una máquina de escribir y no de una revista. */
.sello__linea{
  margin:0; padding:5px 0;
  font-family:ui-monospace,'SFMono-Regular','Consolas','Liberation Mono',monospace;
  font-size:clamp(.68rem,.88vw,.78rem); line-height:1.4;
  letter-spacing:.01em; color:rgba(28,28,25,.9);
  border-top:1px solid rgba(28,28,25,.18);
}
.sello__linea:first-of-type{ border-top:0; }
.sello__linea span{
  display:inline-block; min-width:8.5em;
  font-weight:700; letter-spacing:.06em;
  color:rgba(28,28,25,.55);
}

/* ---------- la marquesina ----------------------------------------------------
   La cinta que corre entre dos filetes con el botón en negativo adentro. Cierra
   la página empujando a lo único que queremos que pase acá: que escriban.

   La pista lleva el contenido DUPLICADO y se desplaza media pista: al llegar a
   -50 % la segunda mitad está exactamente donde arrancó la primera, así que el
   salto de vuelta a cero no se ve. Con una sola copia se vería el corte. */
.marquesina{
  overflow:hidden;
  margin:clamp(28px,4.6vh,56px) 0 0;
  padding:clamp(11px,1.7vh,19px) 0;
  border-top:1px solid var(--tinta);
  border-bottom:1px solid var(--tinta);
}
.marquesina__pista{
  display:flex; width:max-content;
  color:inherit; text-decoration:none;
  animation:marquesina 30s linear infinite;
}
.marquesina__mitad{
  display:flex; align-items:center;
  gap:clamp(16px,2.2vw,38px); padding-right:clamp(16px,2.2vw,38px);
}
.marquesina__frase{
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(1.5rem,3.2vw,2.8rem); line-height:1.06;
  letter-spacing:-.022em; white-space:nowrap;
}
.marquesina__caja{
  font-family:var(--sw-font-display); font-weight:700;
  font-size:clamp(1.3rem,2.7vw,2.4rem); line-height:1.06;
  letter-spacing:-.012em; text-transform:uppercase; white-space:nowrap;
  background:var(--tinta); color:var(--papel);
  padding:.14em .34em .2em;
}
@keyframes marquesina{ to{ transform:translateX(-50%); } }
/* El bloque global de movimiento reducido apaga la DURACIÓN, y una cinta con
   duración cero salta al final —media pista corrida— y se queda ahí. Lo que hay
   que apagar acá es la animación entera. */
@media (prefers-reduced-motion:reduce){
  .marquesina__pista{ animation:none; }
}

@media (max-width:980px){
  .cifrero__lista{ grid-template-columns:repeat(2,1fr); gap:clamp(14px,3vw,26px) clamp(20px,4vw,44px); }
  .oficios__lista{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width:860px){
  /* En vertical las tres columnas no son tres: el llamado abre, que es lo que
     dice, y las propiedades van debajo, una al lado de la otra. */
  .vidriera{ grid-template-columns:repeat(2,1fr); gap:clamp(18px,3vw,28px); }
  .vidriera__centro{
    grid-column:1 / -1; order:-1;
    box-shadow:none; padding:0 0 clamp(18px,3vh,26px);
    border-bottom:1px solid rgba(28,28,25,.28);
  }
  .vidriera__lado,
  .vidriera__lado:first-child,
  .vidriera__lado:last-child{ padding:0; }
}
@media (max-width:560px){
  .cifrero__lista{ grid-template-columns:1fr; gap:12px; }
  .cifrero__una{ padding-bottom:10px; border-bottom:1px solid rgba(28,28,25,.18); }
  .cifrero__una:last-child{ padding-bottom:0; border-bottom:0; }
  .oficios__lista{ grid-template-columns:1fr; }
  .vidriera{ grid-template-columns:1fr; }
}

/* ---------- lo que sigue en el papel del diario ----------------------------- */
.pagina--diario .diario__rotulo{
  border-top-color:var(--tinta);
  color:rgba(28,28,25,.58);
}
.pagina--diario .equipo__rol,
.pagina--diario .cierre__cuerpo{ color:rgba(28,28,25,.7); }
.pagina--diario .boton--suave{ color:var(--tinta); border-color:rgba(28,28,25,.3); }
.pagina--diario .boton--suave:hover{ border-color:var(--tinta); background:rgba(28,28,25,.05); }

@media (max-width:860px){
  /* En vertical las tres columnas no son tres columnas: la del medio pasa a
     abrir, que es lo que dice, y las otras dos van una debajo de la otra. */
  .banda{ grid-template-columns:1fr; gap:clamp(26px,4vh,40px); }
  .banda__col, .banda__centro{ padding:0; }
  .banda__centro{
    order:-1;
    box-shadow:none;
    padding-bottom:clamp(24px,4vh,34px);
    border-bottom:1px solid rgba(28,28,25,.28);
  }
  .banda__col + .banda__col{
    padding-top:clamp(24px,4vh,34px);
    border-top:1px solid rgba(28,28,25,.28);
  }
  .gigante{ height:clamp(88px,22vw,150px); }
}

/* ════════════════════════════════════════════════════════════════════════════
   LA COMPOSICIÓN DE ZENITH REALTY — solo en `vender.html`
   ════════════════════════════════════════════════════════════════════════════
   Cada bloque abre con una cabecera a dos columnas: el titular grande a la
   izquierda y un párrafo chico arriba a la derecha, como una nota al margen.
   Separa la afirmación de la explicación — el ojo lee el titular, decide si le
   interesa, y recién entonces cruza.

   La proporción importa: el titular toma poco más de la mitad y el párrafo se
   queda angosto y arriba. Si el párrafo crece o se centra verticalmente, los
   dos empiezan a competir y el bloque se vuelve un encabezado común. */
.zenit{
  max-width:var(--ancho); margin:0 auto;
  padding:0 var(--lado) clamp(56px,9vh,110px);
}
.zenit__bloque + .zenit__bloque,
.zenit__bloque + .zenit__par{ margin-top:clamp(56px,10vh,120px); }

.zenit__jefe{
  display:grid; gap:clamp(24px,4vw,72px);
  grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);
  align-items:start;
  padding:clamp(30px,6vh,68px) 0 clamp(26px,4vh,44px);
}
.zenit__titulo{
  margin:0;
  font-family:var(--sw-font-display); font-weight:500;
  font-size:clamp(2rem,4.6vw,3.5rem); line-height:1.04;
  letter-spacing:-.03em;
  max-width:16ch;
}
.zenit__titulo--chico{ font-size:clamp(1.5rem,2.6vw,2.1rem); max-width:none; }
.zenit__titulo em{ font-style:normal; font-weight:700; color:var(--sempra); }

.zenit__nota{ padding-top:clamp(4px,1vh,10px); }
.zenit__nota p{
  margin:0; max-width:38ch;
  font-size:.95rem; line-height:1.6;
  color:rgba(46,36,30,.68);
}
.zenit__nota .boton{ margin-top:22px; }
@media (max-width:820px){
  .zenit__jefe{ grid-template-columns:1fr; gap:20px; }
  .zenit__titulo{ max-width:none; }
}

/* ---------- el botón de tinta ------------------------------------------------
   El de Zenith: rectángulo lleno, oscuro, con la etiqueta en versalitas. Manda
   más que el naranja y por eso va en la portada de la página, donde hay una
   sola acción; el naranja se guarda para el envío del formulario. */
.boton--tinta{
  background:#2E241E; color:#FCFAF4;
  font-size:.74rem; letter-spacing:.13em; text-transform:uppercase;
  padding:15px 26px;
}
.boton--tinta:hover{ background:var(--sempra); color:#241D17; transform:translateY(-2px); }

/* ---------- las fotos de bloque ---------------------------------------------- */
.zenit__foto{ margin:0; overflow:hidden; background:rgba(46,36,30,.06); }
.zenit__foto img{ width:100%; height:100%; object-fit:cover; display:block; }
/* 21:9 es lo que hace que la foto se lea como un plano de apertura y no como una
   ilustración: es más ancha que cualquier ventana y obliga al ojo a barrerla. */
.zenit__foto--ancha{ aspect-ratio:21 / 9; }
.zenit__foto--alta { aspect-ratio:3 / 4; height:100%; }
@media (max-width:700px){
  .zenit__foto--ancha{ aspect-ratio:4 / 3; }
  .zenit__foto--alta { aspect-ratio:4 / 3; }
}

/* ---------- las tres tarjetas ------------------------------------------------
   Reusan `.ficha` del listado a propósito: una propiedad tiene que verse igual
   en todo el sitio. Lo que cambia acá es la fila de arriba —nombre y precio
   enfrentados— y los chips, que son de Zenith. */
.zenit__tarjetas{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(18px,2.4vw,32px);
  grid-template-columns:repeat(auto-fit, minmax(270px, 1fr));
}
/* Acá las tarjetas no van separadas por filetes: son tres, con aire entre ellas,
   y la línea las apretaría. El filete es para el catálogo de doce. */
.zenit__tarjetas .ficha{ padding:0; box-shadow:none; }
.zenit__tarjetas .ficha__marco{ aspect-ratio:5 / 4; }
.zenit__tarjetas .ficha__cuerpo{
  padding:16px clamp(14px,1.6vw,20px) clamp(16px,2vw,22px);
  border:1px solid rgba(46,36,30,.16); border-top:0;
}
.ficha__fila{
  display:flex; gap:14px; align-items:baseline; justify-content:space-between;
}
.ficha__fila .ficha__titulo{ margin:0; font-size:clamp(1rem,1.4vw,1.15rem); }
.ficha__fila .ficha__precio{ margin:0; font-size:.98rem; white-space:nowrap; }
.zenit__tarjetas .ficha__barrio{ margin:8px 0 0; }

/* ---------- los chips --------------------------------------------------------
   Cada dato en su caja. Dicen lo mismo que la línea de puntos del listado, pero
   al lado de una foto grande se leen de un vistazo en vez de leerse. */
.chips{
  list-style:none; margin:14px 0 0; padding:0;
  display:flex; flex-wrap:wrap; gap:6px;
}
.chips li{
  font-size:.72rem; letter-spacing:.02em;
  color:rgba(46,36,30,.66);
  border:1px solid rgba(46,36,30,.18);
  padding:5px 9px;
  font-variant-numeric:tabular-nums;
}

/* ---------- la tarjeta grande con la foto al lado ---------------------------- */
.zenit__par{
  display:grid; gap:clamp(20px,3vw,44px);
  grid-template-columns:minmax(0,1fr) minmax(0,.85fr);
  align-items:stretch;
  margin-top:clamp(56px,10vh,120px);
  /* La sección es el ancla de «Pedir la tasación»: sin esto la cabecera fija se
     come el título al saltar. */
  scroll-margin-top:clamp(96px,13vh,130px);
}
.zenit__tarjetaGrande{
  border:1px solid rgba(46,36,30,.16);
  padding:clamp(26px,3.4vw,48px);
  background:rgba(46,36,30,.02);
}
.zenit__tarjetaGrande .portada__ojo{ border-bottom:0; padding-bottom:0; margin-bottom:14px; }
.zenit__parrafo{
  margin:14px 0 30px; max-width:44ch;
  font-size:.97rem; line-height:1.6; color:rgba(46,36,30,.72);
}
@media (max-width:880px){
  .zenit__par{ grid-template-columns:1fr; }
  .zenit__foto--alta{ height:auto; }
}

/* ---------- el cierre, sin foto al lado ---------------------------------------
   La tarjeta sola, centrada y con el formulario en DOS COLUMNAS. Apilados, los
   cinco campos median 733 px: el cierre pesaba lo mismo que una pantalla y
   media de argumento.

   Dos columnas y no tres: «Tu nombre» y «Tu teléfono» son cortos y van de a
   pares; «Dónde queda» pide el renglón entero —una dirección partida a la mitad
   se escribe peor— y lo pide por su propio dato (`ancho:'todo'`), no por su
   posición en la lista. */
.zenit__par--solo{
  grid-template-columns:minmax(0,1fr);
  max-width:820px; margin-inline:auto;
}
.zenit__par--solo .consulta__forma{
  display:grid; grid-template-columns:1fr 1fr;
  /* El hueco entre FILAS va declarado. La regla base pone `gap:18px` para las
     dos direcciones; escribiendo solo la de columnas se pierde la de filas, y
     con 0 la ayuda de «Dónde queda» quedaba tocando el rótulo de «Qué es». */
  gap:clamp(16px,2.2vh,22px) clamp(18px,2.4vw,34px);
  /* Cada campo mide lo suyo, y arranca arriba de su fila. Estirados, el que
     comparte fila con uno más alto crece y su renglón queda a otra altura que
     el de al lado. */
  align-items:start;
}
.zenit__par--solo .consulta__campo--todo,
.zenit__par--solo .consulta__forma > .boton,
.zenit__par--solo .consulta__aviso{ grid-column:1 / -1; }
.zenit__par--solo .consulta__forma > .boton{ justify-self:start; }
@media (max-width:560px){
  /* En 350 px de ancho, dos columnas dejan cada campo en una tira donde no
     entra ni el rótulo. Se apila. */
  .zenit__par--solo .consulta__forma{ grid-template-columns:1fr; }
}

/* Las tres tarjetas cierran parejas. Sin esto, un título que ocupa dos renglones
   estira su tarjeta y el filete de abajo queda escalonado — se lee como un
   error de armado, no como tres propiedades distintas. La grilla ya las estira
   a la misma altura; lo que faltaba era que el cuerpo se quedara con el sobrante
   en vez de dejarlo debajo del borde. */
.zenit__tarjetas .ficha{ display:flex; }
.zenit__tarjetas .ficha__link{ display:flex; flex-direction:column; width:100%; }
.zenit__tarjetas .ficha__cuerpo{ flex:1; display:flex; flex-direction:column; }
/* Los chips se van al pie de la tarjeta, así quedan alineados entre las tres
   aunque el título de arriba mida distinto. */
.zenit__tarjetas .chips{ margin-top:auto; padding-top:14px; }

/* ---------- las tres, en carrusel en teléfono ---------------------------------
   Apiladas medían 1551 px: el 13,7 % de la página, más que el formulario. En
   una fila que se desliza miden 680.

   SE DESLIZA EN VEZ DE ACHICARSE, y es la única forma que no rompe el bloque:
   lo que este bloque argumenta es «así queda una casa bien presentada», o sea
   que la FOTO es el argumento. Reducida a una miniatura al costado del texto,
   el bloque ahorra lo mismo y deja de decir lo que vino a decir.

   Sangra hasta el borde de la pantalla y devuelve el margen como relleno: sin
   eso la tarjeta que asoma se corta contra el aire de la página y no se lee
   como que hay más — se lee como un error de armado. */
@media (max-width:700px){
  .zenit__tarjetas{
    display:flex; gap:clamp(12px,3vw,18px);
    margin-inline:calc(-1 * var(--lado));
    padding-inline:var(--lado);
    overflow-x:auto; overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory;
    /* SIN ESTO EL SNAP SE COME EL RELLENO. `scroll-snap-align:start` alinea con
       el borde del scrollport, no con el borde del contenido: al cargar, el
       navegador scrolleaba 20 px solo para pegar la primera ficha al borde de
       la pantalla, y quedaba desalineada con el título de la sección. Medido:
       `scrollLeft` valía 20 sin que nadie lo tocara. */
    scroll-padding-inline:var(--lado);
    scrollbar-width:none;
  }
  .zenit__tarjetas::-webkit-scrollbar{ display:none; }
  .zenit__tarjetas .ficha{
    flex:0 0 82%;
    scroll-snap-align:start;
  }
  /* Nombre y precio DEJAN de compartir renglón. Enfrentados son la comparación
     que alguien hace mirando tres tarjetas a la vez; en una que mide 287 px al
     título le quedan 140 y «Hermosa propiedad dentro de country en el corazón
     de Yerba Buena» se parte en seis renglones. Apilados el título usa el ancho
     entero y la tarjeta baja de 427 a 340. */
  .zenit__tarjetas .ficha__fila{ display:block; }
  .zenit__tarjetas .ficha__fila .ficha__precio{ margin-top:6px; }
  /* La última necesita su propio tope: sin él, el `padding-inline` del
     contenedor no se aplica al final del scroll en varios navegadores y la
     tarjeta queda pegada al borde. */
  .zenit__tarjetas .ficha:last-child{ scroll-snap-align:end; }
}

/* ════════════════════════════════════════════════════════════════════════════
   EL PULIDO DEL MOVIMIENTO
   ════════════════════════════════════════════════════════════════════════════
   Tres cosas que no se ven en una captura y se sienten en cada clic.

   1 · EL HOVER NO EXISTE EN UN TELÉFONO.
   Una tarjeta que se levanta al pasar el mouse, en una pantalla táctil se
   levanta al TOCARLA y se queda levantada hasta que toques otra cosa. El
   navegador mantiene el `:hover` del último elemento tocado. La grilla de
   propiedades quedaba con una tarjeta flotando sin razón. Todo lo que mueve
   algo va detrás de `@media (hover:hover)`; los cambios de color se quedan,
   que ahí no molestan.

   2 · LA RESPUESTA AL APRETAR.
   Un botón que no hace nada mientras el dedo está apretado se siente muerto:
   entre que se toca y que la página responde pasan 200 o 300 ms en los que no
   pasó nada y la persona no sabe si registró. Un hundimiento de 1,5 % —tan
   chico que no se ve, solo se siente— y en 80 ms, que es lo que tarda en
   parecer instantáneo.

   3 · MOVIMIENTO REDUCIDO, DE VERDAD.
   El sitio ya apagaba sus animaciones grandes, pero las transiciones seguían
   corriendo. Quien pide menos movimiento lo pide para todo, no para lo
   llamativo. Se apagan las duraciones en vez de las propiedades: así el estado
   final sigue siendo el mismo y nada queda a medio camino.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ---- 1 · lo que se mueve, solo donde hay puntero --------------------------- */
@media (hover:none){
  .ficha:hover{ transform:none; }
  .ficha__link:hover .ficha__marco img{ transform:none; }
  .boton--fuerte:hover, .boton--tinta:hover{ transform:none; }
  .salidas__una:hover{ transform:none; }
}

/* ---- 2 · el hundimiento al apretar ----------------------------------------
   Va DESPUÉS de los `:hover` para ganarles: mientras el dedo está apretado, el
   elemento está las dos cosas a la vez, y lo que tiene que verse es el apretón.
   `transform` es una sola propiedad, así que esto le saca el `translateY` del
   hover — y está bien: apretado es apoyado, no levantado. */
.boton:active,
.busca__boton:active,
.colecciones__uno:active,
.salidas__una:active,
.cartel__mini:active,
.filtros__limpiar:active{
  transform:scale(.985);
  transition-duration:80ms;
}

/* ---- 3 · el anillo de foco, uno solo --------------------------------------
   Estaba a 3 px en cinco lugares y a 6 px en dos. Nadie lo nota de a uno y
   todos lo notan al tabular la página entera. */
:where(a, button, input, select, textarea):focus-visible{
  outline:2px solid var(--sempra);
  outline-offset:3px;
}

/* ---- 4 · movimiento reducido ---------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    scroll-behavior:auto !important;
  }
}

/* ════════════════════════════════════════════════════════════════════════════
   LA PÁGINA DE TASACIONES — el lenguaje del plano técnico
   ════════════════════════════════════════════════════════════════════════════
   Sale del video que pasó Facundo (HERON, «an AI agent that works inside your
   design tools»), leído cuadro por cuadro y no de memoria. Lo que se tomó:

     · cuatro celdas separadas por filetes verticales, EN ESCALERA
     · bandas de tres columnas —nombre | dibujo | descripción— con filetes de
       punta a punta, que se leen como una planilla y no como una lista
     · una regla graduada en el margen izquierdo, como mobiliario de la página
     · el acento en una sola cosa por dibujo

   Lo que NO se tomó es la paleta. HERON es FRÍA —blanco azulado, gris— y Sempra
   es cálida: crema 252,250,244 y tinta marrón. Copiarle el color habría hecho
   que esta página pareciera de otra empresa. El naranja es el puente: es casi el
   mismo en las dos, y es lo único que se comparte.

   Por qué acá y no en otra página: una tasación ES una medición. La línea
   técnica dice el argumento —«una tasación por foto es una opinión»— sin tener
   que escribirlo otra vez.
   ════════════════════════════════════════════════════════════════════════════ */

/* ---------- los cuatro recuadros ---------------------------------------------
   LA ESCALERA es todo el bloque. Cada celda arranca un escalón más abajo que la
   anterior y su filete vertical también termina un escalón más abajo, así que la
   fila entera baja de izquierda a derecha.

   Alineadas arriba son cuatro columnas de texto y el ojo no sabe por dónde
   empezar. Escalonadas hay un orden de lectura sin numerarlas. */
.recuadros{
  --escalon:clamp(12px,2.1vw,36px);
  padding:clamp(44px,8vh,100px) 0 clamp(28px,5vh,58px);
}
.recuadros__fila{
  list-style:none; margin:0; padding:0;
  display:grid; grid-template-columns:repeat(4,minmax(0,1fr));
  border-top:1px solid rgba(46,36,30,.18);
}
.recuadros__uno{
  --i:0;
  position:relative;
  padding:calc(clamp(24px,3.6vh,44px) + var(--i) * var(--escalon))
          clamp(13px,1.7vw,28px) 0;
}
.recuadros__uno:nth-child(2){ --i:1; }
.recuadros__uno:nth-child(3){ --i:2; }
.recuadros__uno:nth-child(4){ --i:3; }
.recuadros__uno:first-child{ padding-left:0; }
.recuadros__uno:last-child { padding-right:0; }

/* El filete va como pseudo-elemento y no como `border-left` porque tiene que
   terminar a distinta altura en cada celda — un borde llega siempre al fondo. */
.recuadros__uno + .recuadros__uno::before{
  content:''; position:absolute; left:0; top:0;
  bottom:calc((3 - var(--i)) * var(--escalon));
  width:1px; background:rgba(46,36,30,.18);
}

/* Versalitas y no la Roboto Slab: el titular de HERON es una condensada en caja
   alta, y la slab en versalitas pesa demasiado para un texto de tres renglones.
   La Inter apretada en 600 es lo más cerca que se llega con lo que ya está
   cargado, y deja la slab para los títulos de verdad. */
.recuadros__titulo{
  margin:0 0 clamp(15px,2.2vh,24px);
  padding-bottom:clamp(13px,1.9vh,21px);
  border-bottom:1px solid rgba(46,36,30,.18);
  font-family:var(--sw-font-body);
  font-weight:600; text-transform:uppercase;
  font-size:clamp(.8rem,1.24vw,1rem);
  line-height:1.18; letter-spacing:-.004em;
  color:#2E241E;
}
.recuadros__uno p{
  margin:0; max-width:34ch;
  font-size:clamp(.79rem,1.02vw,.89rem); line-height:1.62;
  color:rgba(46,36,30,.62);
}

/* La frase que cierra el bloque y entrega el proceso. Es el «RIGHT THERE WITH
   YOU» de HERON: centrada, sola, con aire arriba y abajo. */
.recuadros__cierre{
  margin:clamp(38px,7vh,84px) 0 0;
  text-align:center;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.45rem,3.3vw,2.5rem);
  line-height:1.1; letter-spacing:-.022em;
}
.recuadros__cierre em{ font-style:normal; font-weight:700; color:var(--sempra); }

@media (max-width:940px){
  /* En dos columnas la escalera no funciona: la tercera celda arrancaría más
     abajo que la segunda estando en otra fila, y se lee como un error de
     armado. Se apaga y la separación la hacen los filetes. */
  .recuadros{ --escalon:0px; }
  .recuadros__fila{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .recuadros__uno:nth-child(odd){ padding-left:0; }
  .recuadros__uno:nth-child(even){ padding-right:0; }
  .recuadros__uno:nth-child(odd)::before{ display:none; }
  .recuadros__uno:nth-child(n+3){
    margin-top:clamp(22px,3.4vh,36px);
    border-top:1px solid rgba(46,36,30,.18);
  }
}
@media (max-width:560px){
  .recuadros__fila{ grid-template-columns:1fr; }
  .recuadros__uno{ padding-left:0; padding-right:0; }
  .recuadros__uno::before{ display:none; }
  .recuadros__uno + .recuadros__uno{
    margin-top:clamp(20px,3vh,30px);
    border-top:1px solid rgba(46,36,30,.18);
  }
  .recuadros__uno p{ max-width:none; }
}

/* ---------- el proceso, un plano por paso ------------------------------------
   Cinco bandas iguales de tres columnas. La igualdad es el punto: repetir la
   misma grilla cinco veces convierte cinco párrafos en un procedimiento. */
.pasos{ margin-top:clamp(50px,9vh,110px); }

.pasos__lista{
  position:relative;
  list-style:none; margin:0;
  padding:0 0 0 clamp(20px,2.3vw,32px);
  border-top:1px solid rgba(46,36,30,.18);
}

/* La regla graduada del margen vive ahora en `.pasos__regla`, un elemento
   propio, porque en modo cine lleva adentro el cursor del avance y un
   pseudo-elemento no puede tener hijos. Ver «MODO CINE» al final. */

.pasos__uno{
  display:grid;
  grid-template-columns:minmax(0,.92fr) minmax(0,1.24fr) minmax(0,.95fr);
  border-bottom:1px solid rgba(46,36,30,.18);
}
/* Las celdas se ESTIRAN y el contenido se centra adentro. Con
   `align-items:center` en la grilla cada celda mide lo que mide su texto, y el
   filete —que es un `border-left` de la celda— quedaba flotando en el medio de
   la banda en vez de ir de punta a punta. El filete corrido es la mitad del
   gesto de HERON: sin eso son tres columnas sueltas, no una planilla. */
.pasos__id,
.pasos__dibujo,
.pasos__dicho{ display:flex; flex-direction:column; justify-content:center; }
.pasos__id{
  padding:clamp(24px,3.8vh,42px) clamp(16px,2.2vw,36px) clamp(24px,3.8vh,42px) 0;
}
.pasos__dibujo,
.pasos__dicho{
  border-left:1px solid rgba(46,36,30,.18);
  padding:clamp(24px,3.8vh,42px) clamp(16px,2.2vw,36px);
}
.pasos__dicho{ padding-right:0; }

.pasos__n{
  margin:0 0 clamp(10px,1.4vh,14px);
  font-size:.7rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.18em;
  font-variant-numeric:tabular-nums;
  color:var(--sempra);
}
.pasos__uno h3{
  margin:0;
  font-family:var(--sw-font-display); font-weight:400;
  font-size:clamp(1.2rem,2.2vw,1.8rem); line-height:1.14;
  letter-spacing:-.022em;
}
.pasos__dicho p{
  margin:0;
  font-size:clamp(.89rem,1.18vw,1rem); line-height:1.6;
  color:rgba(46,36,30,.72);
}
/* El pie técnico de la tarjeta de HERON. No dice nada nuevo: repite el paso en
   forma de ficha, y esa repetición es la que hace que se lea como un
   procedimiento y no como una promesa. Sin cifras — una cifra acá sería un
   número inventado sobre un negocio real. */
.pasos__dicho .pasos__ficha{
  margin:clamp(15px,2.2vh,22px) 0 0;
  padding-top:11px;
  border-top:1px solid rgba(46,36,30,.18);
  font-size:.65rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.13em;
  color:rgba(46,36,30,.5);
}

/* ---------- las laminas -------------------------------------------------------
   VAN EN LAMINA Y NO EN FOTO, y no es por peso. Una foto de una casa aca
   afirmaria que esa casa es nuestra y que ese paso paso en ella; ninguna de las
   dos cosas se puede sostener. Una lamina en tinta y acuarela no afirma nada: es
   un esquema, en el mismo lenguaje que el hero de esta pagina. */
.pasos__dibujo{ margin:0; }
/* LAS LAMINAS EN ACUARELA (2026-09-11). Reemplazan a los planos en SVG por
   pedido de Facundo, con la referencia de una planta en tinta y acuarela: es el
   mismo lenguaje del hero de esta pagina, y asi la pagina entera habla igual.

   El papel de cada lamina YA ES el color de la pagina (252,250,244): se corrigio
   en el archivo y no con `mix-blend-mode`, porque el contenedor se anima con
   escala y eso aisla la mezcla — en plena transicion se veia el rectangulo.

   `--revela` es el borde del barrido con el que entra cada una: una mascara con
   el filo difuso, que avanza como pintura. Lo mueve `proceso.js` atado al
   scroll; en 112 % la mascara ya paso el borde derecho y la lamina esta entera,
   que es como queda sin JavaScript o con movimiento reducido. */
.pasos__dibujo img{
  display:block; width:100%; height:auto;
  --revela:112%;
  -webkit-mask-image:linear-gradient(90deg,#000 calc(var(--revela) - 14%),transparent var(--revela));
          mask-image:linear-gradient(90deg,#000 calc(var(--revela) - 14%),transparent var(--revela));
}
@media (max-width:940px){
  /* Dos columnas: el nombre y la descripción se apilan a la izquierda y el
     dibujo se queda con la derecha entera. Las tres en un ancho de tablet
     dejaban la descripción en una tira de doce caracteres. */
  .pasos__uno{ grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
  .pasos__id   { grid-area:1 / 1; padding-bottom:0; }
  .pasos__dicho{ grid-area:2 / 1; border-left:0; padding:clamp(12px,1.8vh,18px) clamp(16px,2.2vw,30px) clamp(24px,3.6vh,40px) 0; }
  .pasos__dibujo{ grid-area:1 / 2 / 3 / 3; }
}
@media (max-width:620px){
  /* En vertical se apila entero y la regla se va: en 360 px de ancho una regla
     de 13 px es el 4 % de la pantalla gastado en decoración. */
  .pasos__lista{ padding-left:0; }
  .pasos__regla{ display:none; }
  .pasos__uno{ grid-template-columns:1fr; }
  .pasos__id{ grid-area:auto; padding:clamp(22px,3.4vh,30px) 0 0; }
  .pasos__dibujo{
    grid-area:auto; border-left:0;
    padding:clamp(16px,3.4vw,24px) 0;
    max-width:330px; margin-inline:auto; width:100%;
  }
  .pasos__dicho{ grid-area:auto; padding:0 0 clamp(22px,3.4vh,30px); }
}

/* ---------- la regla, ahora un elemento --------------------------------------
   Era un `::before` de la lista. Pasa a ser un elemento porque en modo cine
   lleva adentro el cursor que mide el avance, y un pseudo-elemento no puede
   tener hijos. El dibujo es el mismo: marca cada 12 px y una larga cada 48. */
.pasos__regla{
  position:absolute; left:0; top:0; bottom:0; width:13px;
  background-image:
    repeating-linear-gradient(to bottom, rgba(46,36,30,.34) 0 1px, transparent 1px 48px),
    repeating-linear-gradient(to bottom, rgba(46,36,30,.17) 0 1px, transparent 1px 12px);
  background-size:13px 100%, 6px 100%;
  background-repeat:no-repeat;
  pointer-events:none;
}
/* El cursor solo existe clavado: en la maqueta de bandas no hay avance que
   medir, la página entera es el avance. */
.pasos__cursor{ display:none; }
.pasos__contador{ display:none; }

.pasos__escena{ position:relative; }


/* ════════════════════════════════════════════════════════════════════════════
   MODO CINE — cinco pasos, cinco pantallas
   ════════════════════════════════════════════════════════════════════════════
   Todo lo de acá abajo cuelga de `.pasos--cine`, que la pone `proceso.js` y
   nadie más. Sin JS —o con movimiento reducido— nada de esto aplica y la
   sección se queda en la maqueta de cinco bandas, entera y legible.

   Es la misma regla que el resto del sitio: la mejora es una capa encima de
   algo que ya funciona solo, nunca la única forma de leer el contenido.
   ════════════════════════════════════════════════════════════════════════════ */

.pasos--cine .pasos__riel{
  /* Una pantalla de scroll por paso, más una: el sobrante es el alto de la
     escena clavada, así que la distancia de scroll queda en cinco exactas. Lo
     escribe `proceso.js` para que el número viva en un solo lado. */
  height:calc(var(--pantallas, 6) * 100svh);
}
.pasos--cine .pasos__escena{
  /* Las tres medidas de la escena, en un solo lado: las usa el relleno, la
     regla y el contador, y desincronizadas el cursor no llega a las puntas. */
  --aire-arriba:clamp(108px,13.6vh,148px);
  --aire-abajo:clamp(20px,3.2vh,34px);
  --sangria:clamp(26px,3vw,44px);
  --alto-testera:clamp(52px,6.8vh,68px);

  /* `svh` y no `vh`: en el teléfono `vh` mide contra la ventana con la barra del
     navegador retraída, así que una escena de 100vh entra recortada y el pie del
     paso queda tapado por la barra durante todo el recorrido. */
  height:100svh;
  /* El sitio no tiene `box-sizing` global —lo declara cada bloque que lo
     necesita—, así que sin esto la escena mide 100svh MÁS su relleno: 969 px en
     una ventana de 900, y el pin se desfasa 69 px por paso. */
  box-sizing:border-box;
  display:grid; grid-template-rows:auto 1fr;

  /* EL AIRE DE ARRIBA ES LA CABECERA. `.pagina` le hace lugar con un
     `padding-top`, pero eso vale para el flujo: una escena clavada arranca en
     el borde de la ventana y la barra fija le pisa los primeros 88 px. Sin
     esto, el contador y el arranque de la regla quedaban abajo de la barra. */
  /* DOS COLUMNAS: el margen de la regla, y todo lo demás. La sangría es una
     columna de la grilla y no un relleno, así que el contador cae en el margen
     por su posición y no con un margen negativo que hay que mantener a mano. */
  padding:var(--aire-arriba) 0 var(--aire-abajo) 0;
  grid-template-columns:var(--sangria) minmax(0,1fr);
  overflow:hidden;
  /* El filete de arriba lo pone la lista en la maqueta de bandas; clavada, la
     escena es el marco y el filete le corresponde a ella. */
  border-top:1px solid rgba(46,36,30,.18);
}
.pasos--cine .pasos__lista{
  position:relative;
  grid-area:2 / 2;
  padding:0; border:0;
}

/* ── la testera, ahora adentro de la escena ──────────────────────────────────
   «Cómo trabajamos» y su nota se quedan en pantalla durante los cinco pasos,
   como el título corrido de un capítulo. Sin esto, clavado, no había forma de
   saber qué eran esos cinco pasos: la testera quedaba cinco pantallas arriba.

   Chica y en una sola línea: si compitiera con el título del paso serían dos
   titulares peleando, y el que manda es el del paso. El alto va FIJO porque de
   él cuelga dónde arranca la regla. */
.pasos--cine .zenit__jefe{
  grid-area:1 / 2;
  height:var(--alto-testera); box-sizing:border-box;
  display:flex; align-items:baseline; gap:clamp(12px,2vw,30px);
  padding:clamp(6px,1vh,12px) 0 clamp(12px,1.9vh,20px) clamp(8px,1.2vw,18px);
  border-bottom:1px solid rgba(46,36,30,.18);
}
.pasos--cine .zenit__titulo{
  margin:0; max-width:none; white-space:nowrap;
  font-size:clamp(1rem,1.5vw,1.28rem); letter-spacing:-.015em;
}
.pasos--cine .zenit__nota{ padding:0; }
.pasos--cine .zenit__nota p{ font-size:clamp(.72rem,.95vw,.84rem); max-width:52ch; }

/* Los cinco pasos, apilados en el mismo lugar. Solo se ve el que la línea de
   tiempo tenga puesto. */
.pasos--cine .pasos__uno{
  position:absolute; inset:0;
  /* El dibujo se queda con la parte grande. Con el reparto parejo medía 462 px
     de ancho en una ventana de 1440 —el 32 %— y se veía como una ilustración al
     costado del texto en vez de la estrella de la pantalla. */
  grid-template-columns:minmax(0,.66fr) minmax(0,1.34fr);
  /* CINCO FILAS: aire, título, aire, descripción, aire. Los tres huecos son
     FRACCIONES DISTINTAS y ahí está todo el asunto.

     La versión anterior tenía el título pegado al borde de arriba y la
     descripción pegada al de abajo — ganaba espacio pero los dos bloques se
     iban a las puntas y el medio quedaba hueco. Centrarlos habría sido lo
     simétrico, y simétrico se lee como una diapositiva.

     El reparto es 0,92 / 1,40 / 1,05, y sale de MEDIR y no de tantear: en una
     ventana de 1440 da 78 de aire arriba, 118 de hueco y 88 abajo. El hueco del
     MEDIO sigue siendo el mayor —separa dos cosas distintas, el nombre del paso
     y lo que el paso hace— y el margen de abajo es más grande que el de arriba,
     así que el bloque se apoya apenas por encima del centro geométrico, que es
     donde el ojo espera encontrarlo. Nada queda simétrico y nada queda pegado a
     un borde.

     Medido: el centro del bloque de texto cae a 4 px del centro del dibujo, así
     que las dos columnas se equilibran entre sí en vez de flotar cada una por
     su cuenta. Los filetes del título y de la ficha son los que cierran el
     hueco: sin ellos los dos bloques se leen sueltos en vez de enmarcarlo. */
  grid-template-rows:minmax(0,.92fr) auto minmax(0,1.4fr) auto minmax(0,1.05fr);
  gap:0 clamp(16px,2.2vw,38px);
  border:0;
}
.pasos--cine .pasos__id{
  grid-area:2 / 1; padding:0 0 clamp(16px,2.4vh,26px); display:block;
  border-bottom:1px solid rgba(46,36,30,.18);
}
.pasos--cine .pasos__dicho{ grid-area:4 / 1; padding:0; border:0; display:block; }
/* El dibujo cruza las tres filas: así su filete izquierdo va de punta a punta
   de la escena. Atado a una sola fila llegaba hasta donde llegaba el texto y se
   leía como una línea a medio dibujar. */
.pasos--cine .pasos__dibujo{
  grid-area:1 / 2 / 6 / 3;
  border-left:1px solid rgba(46,36,30,.18);
  align-self:stretch;
  display:flex; align-items:center;
  padding:clamp(8px,1.6vh,20px) 0 clamp(8px,1.6vh,20px) clamp(18px,2.6vw,42px);
}

/* El texto y el dibujo son UN bloque cada uno para la línea de tiempo, así que
   el paso se arma en dos piezas y no en seis. La columna de la izquierda junta
   el rótulo, el título, la descripción y la ficha. */
.pasos--cine .pasos__uno > .pasos__dicho{ margin-top:clamp(18px,3vh,34px); }

/* ── el tamaño de estrella ───────────────────────────────────────────────────
   En la maqueta de bandas el título medía 1,8 rem porque compartía la banda con
   otras cuatro. Dueño de la pantalla entera, ese tamaño se ve tímido: sube a
   3,4 y la descripción con él. Es el único cambio de escala del modo cine —
   todo lo demás es la misma tipografía. */
.pasos--cine .pasos__n{
  font-size:clamp(.72rem,.95vw,.82rem);
  margin-bottom:clamp(14px,2.2vh,22px);
}
/* La máscara del título. El texto sube desde abajo de su propio renglón, que
   es el gesto que ya usa el cartel de propiedades — la misma familia de
   movimiento en todo el sitio. El `span` lo pone `proceso.js`. */
.pasos--cine .pasos__uno h3{ overflow:hidden; }
.pasos--cine .pasos__uno h3 > span{ display:block; }
.pasos--cine .pasos__uno h3{
  font-size:clamp(1.9rem,3.9vw,3.2rem);
  line-height:1.03; letter-spacing:-.028em;
  max-width:18ch;
}
.pasos--cine .pasos__dicho p{
  font-size:clamp(1.02rem,1.5vw,1.3rem); line-height:1.5;
  max-width:32ch;
}
.pasos--cine .pasos__dicho .pasos__ficha{
  font-size:clamp(.64rem,.8vw,.72rem);
  margin-top:clamp(20px,3.2vh,32px);
  padding-top:14px;
  max-width:34ch;
}

/* El dibujo llena su columna a lo alto. `height:100%` con `object-fit` no
   aplica a un SVG en línea: lo que lo encaja es el `preserveAspectRatio` por
   defecto más un alto declarado. */
/* La lamina ocupa la misma caja que ocupaba el plano: mismo 3:2, mismo tope de
   alto. `contain` para que nunca se recorte una cota ni un rotulo. */
.pasos--cine .pasos__dibujo img{
  width:100%; height:100%;
  max-height:min(74vh, 680px);
  object-fit:contain;
  margin:auto;
}

/* ── el cursor de la regla ───────────────────────────────────────────────────
   La regla del margen medía la sección; clavada, mide el AVANCE. Un tick
   naranja que baja de punta a punta mientras pasan los cinco pasos.

   `translateY(-50%)` para que en el 0 % y en el 100 % quede mordiendo la punta
   en vez de asomarse un pixel afuera. */
.pasos--cine .pasos__cursor{
  display:block; position:absolute; left:-3px;
  width:19px; height:2px;
  background:var(--sempra);
  transform:translateY(-50%);
}
.pasos--cine .pasos__regla{
  /* Arranca abajo del contador, no atrás: el número del paso vive en el mismo
     margen y la regla cruzándolo lo hace ilegible. */
  /* Arranca donde arranca la lista, o sea abajo de la testera. Las dos medidas
     salen de la misma variable: desincronizadas, el cursor no llega a las
     puntas y el avance queda mintiendo. */
  top:calc(var(--aire-arriba) + var(--alto-testera));
  bottom:var(--aire-abajo);
  width:20px;
  background-size:20px 100%, 9px 100%;
}

/* ── el contador ─────────────────────────────────────────────────────────────
   Arriba a la izquierda, sobre la regla, con el número en tinta y el total en
   gris. Es lo que le dice a alguien cuánto falta: sin eso, una pantalla clavada
   que no se sabe cuánto dura se siente una trampa. */
.pasos--cine .pasos__contador{
  display:block;
  grid-area:1 / 1;
  align-self:start;
  margin:0; width:20px; text-align:center;
  font-size:.62rem; letter-spacing:.02em;
  font-variant-numeric:tabular-nums;
  line-height:1.5;
}
.pasos--cine .pasos__contador b{
  display:block; font-weight:700; color:#2E241E;
  /* La ventanita por donde rueda la cifra. El `span` lo pone `proceso.js`. */
  overflow:hidden;
}
.pasos--cine .pasos__contador b > span{ display:block; }
.pasos--cine .pasos__contador i{
  display:block; font-style:normal; font-weight:600;
  color:rgba(46,36,30,.4);
  border-top:1px solid rgba(46,36,30,.28);
  margin-top:2px; padding-top:1px;
}

@media (max-width:880px){
  /* Apilado: el rótulo y el título arriba, el dibujo en el medio, la
     descripción abajo. El dibujo va en el MEDIO y no arriba a propósito — es lo
     que se mira, y en el medio de la pantalla cae a la altura del ojo.

     `1fr` para el dibujo y `auto` para los textos: si algo tiene que apretarse
     al rotar el teléfono, que sea el dibujo y no la letra. */
  .pasos--cine .pasos__uno{
    grid-template-columns:1fr;
    grid-template-rows:auto auto auto;
    align-content:center;
    gap:clamp(14px,2.4vh,26px);
  }
  .pasos--cine .pasos__id   { grid-area:1 / 1; padding-bottom:clamp(10px,1.6vh,16px);
                              border-bottom:0; }
  .pasos--cine .pasos__dibujo{ grid-area:2 / 1; }
  .pasos--cine .pasos__dicho{ grid-area:3 / 1; }
  .pasos--cine .pasos__dibujo{
    border-left:0; border-top:1px solid rgba(46,36,30,.18);
    border-bottom:1px solid rgba(46,36,30,.18);
    padding:clamp(10px,1.8vh,20px) 0;
    min-height:0;
  }
  /* El tope en vh es el seguro: con las tres filas al alto de su contenido, un
     dibujo sin tope en un teléfono apaisado empujaría el texto fuera de la
     escena, que recorta. */
  .pasos--cine .pasos__dibujo img{ max-height:40vh; }
  .pasos--cine .pasos__uno > .pasos__dicho{ margin-top:0; }
  /* La testera se apila y crece: «Cómo trabajamos» y su nota no entran en un
     renglón de 360 px. La nota NO se esconde — es la mitad de lo que Facundo
     pidió que se viera durante el recorrido. */
  .pasos--cine .pasos__escena{ --alto-testera:clamp(56px,9vh,72px); }
  .pasos--cine .zenit__jefe{
    display:block; padding-bottom:clamp(8px,1.4vh,14px);
  }
  .pasos--cine .zenit__titulo{ font-size:1.02rem; }
  .pasos--cine .zenit__nota p{ font-size:.72rem; line-height:1.4; margin-top:3px; }
  .pasos--cine .pasos__uno h3{ font-size:clamp(1.6rem,6.2vw,2.4rem); max-width:none; }
  .pasos--cine .pasos__dicho p{ max-width:none; font-size:clamp(.95rem,3.5vw,1.05rem); }
  .pasos--cine .pasos__dicho .pasos__ficha{ max-width:none; margin-top:clamp(12px,2vh,18px); }
}
@media (max-width:620px){
  /* La sangría se achica, y la regla VUELVE: el breakpoint de la maqueta de
     bandas la esconde —ahí no hay avance que medir— pero clavada es el único
     indicio de cuánto falta, y el cursor bajando por el borde es la mitad de la
     gracia. Angosta, 13 px sobre 360 de ancho. */
  .pasos--cine .pasos__escena{ --sangria:22px; }
  .pasos--cine .pasos__regla{
    display:block; width:13px;
    background-size:13px 100%, 6px 100%;
  }
  .pasos--cine .pasos__cursor{ width:13px; left:0; }
  .pasos--cine .pasos__contador{ width:13px; font-size:.56rem; }
}

/* Los cuatro recuadros también se quedan con su pantalla: la página pasa a ser
   una sucesión de cuadros y una sección que mide 512 px en medio de pantallas
   completas rompe el pulso. Centrado y no estirado — las celdas escalonadas
   pierden la escalera si se las estira a 100 svh. */
.recuadros{
  min-height:100svh;
  display:flex; flex-direction:column; justify-content:center;
  box-sizing:border-box;
}
