/* JEFRA — yerba mate agroecológica. Tema «La Reserva Orgánica» (2026-08-31): verde monte casi negro, oro viejo y crema; títulos en versales con Bodoni Moda.
   ⚠ EL VERDE REEMPLAZÓ AL NEGRO CÁLIDO Y HAY QUE SABER LO QUE SE CAMBIÓ: el negro salía del material fotográfico —mármol negro con un solo foco cálido— y el verde monte es un negro TEÑIDO, no un verde: #05120B tiene un 4 % de luminancia y sobre él las fotos siguen apoyando igual. El oro viejo #C59B4B es el tono de la bombilla de las tomas, medido contra la foto, así que el acento y la luz de la escena son el mismo color.

   1 · El oro es luz, no relleno: las superficies de oro son el botón del hero, el del formulario y el de la barra del teléfono.
   2 · El verde respira: de 5,5 a 11 rem de aire por sección, casi un 25 % más que la plantilla.
   3 · El oliva NO ES TEXTO NUNCA sobre el fondo oscuro: #5C634B da 3,04:1 contra el verde monte. Es borde, filo y detalle. Sobre crema sí puede ser texto (7,83:1).
   4 · El celeste es un guiño y se usa DOS veces: la línea del cotejo y el anillo de foco.

   Contraste medido sobre #05120B — texto 18,51:1 · texto-2 14,34:1 · apagado 7,90:1 · oro viejo 7,44:1 · oro claro 10,87:1 · celeste 10,95:1; sobre `--surface-2` el peor caso es 6,19:1. Tinta sobre el oro: 6,95:1.
   Y en las secciones claras, sobre #FDFBF7 — texto 18,51:1 · texto-2 9,84:1 · oro oscuro 6,96:1 · oliva 7,83:1. */

:root{
  /* ── EL FONDO: VERDE MONTE PROFUNDO ── Cuatro escalones del mismo verde, no cuatro grises: el subtono orgánico es lo único que separa a esta marca de cualquier página oscura. */
  --bg:          #05120B;
  --bg-2:        #08160E;
  --surface:     #0B1C13;
  --surface-2:   #12261A;
  --line:        rgba(253,251,247,.10);
  --line-strong: rgba(253,251,247,.19);

  /* ── EL TEXTO: CREMA PREMIUM / LINO CÁLIDO ── Nunca blanco puro: sobre un fondo oscuro el blanco irradia y engorda los finos de la didona. */
  --text:        #FDFBF7;
  --text-2:      #E3DFD1;
  --muted:       #A7A894;

  /* ── EL ACENTO: ORO VIEJO / BRONCE ATENUADO ── */
  --accent:      #C59B4B;
  --accent-2:    #D8B268;
  --accent-deep: #8A6A2C;
  --on-accent:   #0E1A11;           /* tinta verde oscura sobre el oro: 6,95:1 */
  --glow:        rgba(197,155,75,.30);
  --glow-soft:   rgba(197,155,75,.10);

  --oro:         #DCC087;
  --oro-luz:     #F0E3BE;
  --celeste:     #A9C7E8;

  /* ── EL VERDE OLIVA SECO: bordes y detalles, nunca texto sobre oscuro (regla 3 de arriba) ── */
  --oliva:       #4A533C;
  --oliva-2:     #5C634B;

  /* ── LA CREMA, para las secciones claras ── */
  --crema:       #FDFBF7;
  --crema-2:     #F5F2EB;
  --crema-3:     #EDE9DE;

  --vidrio:        linear-gradient(165deg,rgba(253,251,247,.055),rgba(253,251,247,.018));
  --vidrio-fuerte: linear-gradient(165deg,rgba(253,251,247,.10),rgba(253,251,247,.03));
  --campo-bg:      rgba(5,18,11,.55);

  /* ══ LA TIPOGRAFÍA ══ Bodoni Moda para los títulos y Figtree para todo lo demás; se fueron Fraunces —una serif que en versales pierde justo lo que la hacía interesante— y Karla, que le peleaba al titular. El titular va en peso 400 y nada más: el 500 y el 600 le engordan los finos a la didona, y sobre negro el texto claro ya se ve más gordo por irradiación. Subconjunto latino: 14,2 + 39,4 = 53,6 KB, contra 60,0 del par anterior. */
  --display: 'Bodoni Moda','Bodoni respaldo',Georgia,'Times New Roman',serif;
  --serif:   'Bodoni Moda','Bodoni respaldo',Georgia,serif;
  --font:    'Figtree','Figtree respaldo',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;

  /* ⚠ Los títulos bajan de cuerpo al pasar a versales, y no es una preferencia: la misma frase pinta un 12 % más de tinta y se LEE más grande de lo que mide. Medido a 1440, h1 de 87,8 a 73,6 px y h2 de 59,2 a 47,2. */
  --fs-h1:  clamp(2.15rem, 5.2vw, 4.6rem);
  --fs-h2:  clamp(1.6rem, 3.5vw, 2.95rem);
  --fs-h3:  clamp(1.35rem, 2.7vw, 2.2rem);

  /* El interletrado base de los títulos: las versales necesitan aire y con el tracking negativo de la plantilla se empastan. Cada tamaño lo pisa con el suyo más abajo. */
  --tracking-h: .026em;

  --radius:      2px;
  --radius-pill: 2px;

  /* Más aire entre secciones que la plantilla: es la regla 2. */
  --pad:  clamp(1.25rem, 5vw, 5rem);

  --sh-depth: 0 10px 40px rgba(0,0,0,.75);
  --sh-lit:   0 0 30px rgba(197,155,75,.24);
  --sh-hover: 0 0 22px rgba(220,192,135,.50), 0 0 60px rgba(197,155,75,.26);
  --sh-suave: 0 2px 16px rgba(0,0,0,.7);
  --sombra-panel: 0 42px 90px -58px #000;

  --grano-op: .07;
  --vineta: radial-gradient(100% 88% at 50% 45%, transparent 58%, rgba(0,0,0,.55) 100%);
}

/* ══ LAS TIPOGRAFÍAS DE RESPALDO, CON LAS MÉTRICAS AJUSTADAS ══ Si el respaldo no mide lo mismo que la buena, con `display=swap` todos los títulos saltan a mitad del scroll y los disparadores quedan calculados sobre alturas viejas (en Dental 3D el respaldo estaba 17 % afuera). Acá el par eligió bien —medido el 2026-08-28: Bodoni contra Georgia, 2,0 %; Figtree contra Helvetica Neue, 1,0 %— y se declara igual, porque un 2 % en un titular de tres renglones es un renglón que se mueve. ⚠ `size-adjust` se aplica DESPUÉS de `ascent-override`: el ascent hay que dividirlo por el size-adjust o queda multiplicado dos veces. */
@font-face{
  font-family:'Bodoni respaldo';
  src:local('Georgia');
  size-adjust:102.01%; ascent-override:110.28%; descent-override:39.21%; line-gap-override:0%;
}
/* ⚠ El segundo `local()` es Arial, para Windows: mide 0,3 % distinto de Helvetica Neue, o sea nada, y dos `@font-face` para lo mismo se desincronizan solos. */
@font-face{
  font-family:'Figtree respaldo';
  src:local('Helvetica Neue'), local('Arial');
  size-adjust:99.05%; ascent-override:95.91%; descent-override:25.24%; line-gap-override:0%;
}

/* ── Que el negro respire ── */
.seccion{ padding-block:clamp(5.5rem,12vw,11rem) }
.bg-static{ opacity:.75 }
/* ⚠ La cuadrícula de la portada se apagó del todo el 2026-08-28 y el div se sacó del HTML; esto queda por si alguien lo vuelve a poner: una reja de líneas rectas encima de una toma de mate con humo es una textura peleando con otra. */
.hero__grid{ display:none }
/* ⚠ El fondo de vetas se mide en el teléfono, no en la computadora: el radio de los anillos sale de `max(ancho,alto) * 0,055`, así que en 375×812 el más grande se sale de la pantalla y a la misma opacidad que en 1440 se lee como garabatos encima del titular. */
.fondo{ opacity:.40 }
@media (max-width:760px){ .fondo{ opacity:.20 } }


/* ══ EL CLIMA ══ Tres tintes fijos que se cruzan por opacidad mientras se baja: oro de foco arriba, dorado seco en el medio y verde-oliva apagado abajo. Sólo se anima `opacity` —`background`, `filter` o `background-position` repintan una capa del tamaño de la pantalla en CADA cuadro—, son manchones enormes y flojísimos (el más fuerte pinta al 7 %: si al bajar se NOTA que el fondo cambió, está mal) y no tapan nada, con `z-index:0` y sin `pointer-events`. El estado inicial lo pone el CSS y no el JS: si vivo.js no llega, queda el tinte de arriba en toda la página. */
/* La cortina ya se vio en esta sesión: la marca la pone el script del <head> antes del primer pintado, así que no llega a verse un destello. */
.sin-cortina .cortina{ display:none }

.clima{ position:fixed; inset:0; z-index:0; pointer-events:none }
.clima__capa{
  position:absolute; inset:0; display:block; pointer-events:none;
  opacity:0; will-change:opacity;
}
.clima__capa--1{
  opacity:1;
  background:
    radial-gradient(120% 78% at 18% 8%,  rgba(197,155,75,.07), transparent 62%),
    radial-gradient(90%  70% at 88% 34%, rgba(220,192,135,.045), transparent 66%);
}
.clima__capa--2{
  background:
    radial-gradient(110% 80% at 76% 22%, rgba(220,192,135,.055), transparent 64%),
    radial-gradient(100% 76% at 12% 72%, rgba(138,106,44,.06),   transparent 66%);
}
.clima__capa--3{
  background:
    radial-gradient(120% 82% at 30% 84%, rgba(120,132,86,.055), transparent 64%),
    radial-gradient(90%  70% at 82% 12%, rgba(169,199,232,.028), transparent 68%);
}
/* En un teléfono la mitad, por lo mismo que `.fondo` va al 20 %: la pantalla es chica, el tinte ocupa proporcionalmente más y a la misma fuerza se lee como que la foto está mal balanceada. */
@media (max-width:760px){ .clima{ opacity:.5 } }
/* Con «menos animación» pedido queda el primer tinte y nada se mueve; no se apaga entero porque el clima no es movimiento, es color. */
@media (prefers-reduced-motion:reduce){
  .clima__capa{ transition:none }
}


/* ══ LOS TÍTULOS, EN VERSALES ══ No alcanza con `text-transform`: las mayúsculas se empastan sin aire y se desarman con demasiado, y el interletrado va AL REVÉS DEL TAMAÑO — h1 .022em, h2 .030em, h3 .046em, rótulos .06em. Y el peso baja a 400: en versales las mismas palabras ocupan un 12 % más de tinta y sobre negro se ven más gordas, así que un 600 no se lee como un titular de marca, se lee como un grito. */
.h1, .h2, .h3,
.hero__title,
.cortina__marca,
.header__logo span,
.footer__brand span{
  font-family:var(--display);
  font-weight:400;
  text-transform:uppercase;
}
.h1{ letter-spacing:.022em; line-height:1.06 }
.h2{ letter-spacing:.030em; line-height:1.10; max-width:20ch }
.h3{ letter-spacing:.046em; line-height:1.16 }

/* La palabra destacada. En versales una bastardilla es casi imperceptible, así que el destaque pasa a ser el COLOR, que es lo único que se lee de lejos; y sin bastardilla no hace falta bajar el archivo de la itálica: 16 KB menos. */
.h1 em, .h2 em, .h3 em, .hero__title em{
  font-family:var(--display);
  font-style:normal; font-weight:400;
  letter-spacing:inherit;
  color:var(--oro);
}
/* El cuerpo grande de la sección quieta también es Bodoni, pero en minúscula: es un párrafo, no un título, y su `<em>` va dorado y derecho por el mismo motivo. */
.lead--ancho em, .lead em{
  font-family:var(--serif); font-style:normal;
  color:var(--oro); font-size:1em;
}

/* La marca en el encabezado, la cortina y el pie: «JEFRA» en versales con mucho aire y «yerba mate» chico, dorado y con más aire todavía, que es como se compone una firma. */
.cortina__marca em,
.header__logo span em,
.footer__brand span em{
  font-family:var(--font); font-style:normal; font-weight:500;
  font-size:.52em; letter-spacing:.24em; color:var(--oro);
}
.cortina__marca, .header__logo span, .footer__brand span{ letter-spacing:.16em }

/* El numeral del ambo: entra con máscara vertical (ver vivo.js). */
.eyebrow__n{
  display:inline-block; color:var(--oro); font-weight:600;
  letter-spacing:.18em;
}


/* ══ EL TITULAR DE LA PORTADA ══ Entra palabra por palabra de izquierda a derecha, con un destello que pasa por encima; es el mecanismo que quedó bien en Dental 3D, con sus tres correcciones: arranca a los 1,68 s, cuando la cortina ya subió el 96 %, o las primeras palabras terminarían detrás del telón; el relleno es `backwards` y nunca `both`, que impondría su último cuadro para siempre y no dejaría hundir el titular al irse la portada; y la amplitud es casi igual para todas, porque lo que ordena el gesto es el RETARDO. */
.titulo-palabras{
  --tp-a:1.68s;
  --tp-paso:.052s;
  /* ⚠ 17ch y no 14: en versales la misma frase ocupa más y la medida vieja partía el titular en cinco renglones. Con los renglones escritos en el HTML esto ya no decide dónde se corta, queda de red — el más largo mide 7,73 em y acá hay 10,5. */
  max-width:17ch;
  /* ⚠ Se le saca el `text-wrap:balance` que `base.css` le pone a todo `.h1`: acá los renglones ya están repartidos a mano y lo único que podía hacer era volver a decidir el reparto tarde, cuando llega la tipografía. El valor es `wrap` y no `normal`, que no es válido para `text-wrap-mode` ni `text-wrap-style`: el navegador tira la declaración entera sin avisar y el `balance` sigue mandando (pasó acá mismo el 2026-08-30). */
  text-wrap:wrap;
}
/* ⚠ El renglón es un bloque. Las palabras siguen siendo `inline-block` adentro, así que la entrada escalonada no cambia en nada; lo único distinto es que el corte lo decide el HTML y no una medición. */
.titulo-palabras .tp-l{ display:block }
/* ⚠ Abajo de 360 px el titular baja un punto de cuerpo, y es para sostener los cuatro renglones: con 2,15rem en una pantalla de 320, «momentos.» se caía por un píxel a un quinto renglón. Medido con las dos tipografías; con este cuerpo sobra un 18 %. */
@media (max-width:360px){
  .titulo-palabras{ font-size:clamp(1.85rem, 8.4vw, 2.15rem) }
}
.titulo-palabras .tp-w{
  --z:calc(.958 - var(--w) * .0072);
  display:inline-block;
  opacity:1;
  animation:tpEntra .86s cubic-bezier(.22,.64,.26,1) backwards;
  animation-delay:calc(var(--tp-a) + var(--w) * var(--tp-paso));
}
@keyframes tpEntra{
  from{ opacity:0; transform:translate3d(0,.15em,0) scale(var(--z)) }
  to  { opacity:1; transform:translate3d(0,0,0) scale(1) }
}
.titulo-palabras .tp-w > span,
.titulo-palabras .tp-w > em{ position:relative; display:inline-block }
.titulo-palabras .tp-w--oro > em{ color:var(--oro) }

/* El destello: la misma palabra dibujada encima, que se apaga sola. Sobre negro ENCIENDE; en el tema crema anterior oscurecía, y copiarlo al revés habría dejado un destello negro sobre negro. */
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .titulo-palabras .tp-w > span::after,
  .titulo-palabras .tp-w > em::after{
    content:attr(data-p);
    position:absolute; inset:0;
    white-space:nowrap; pointer-events:none;
    background:linear-gradient(180deg, #FDFBF7 0%, var(--oro-luz) 52%, var(--accent) 100%);
    -webkit-background-clip:text; background-clip:text;
    -webkit-text-fill-color:transparent; color:transparent;
    opacity:0;
    animation:tpLuz 1.15s ease-out backwards;
    animation-delay:calc(var(--tp-a) + var(--w) * var(--tp-paso));
  }
}
@keyframes tpLuz{ 0%{ opacity:0 } 28%{ opacity:.85 } 100%{ opacity:0 } }

@media (prefers-reduced-motion:reduce){
  .titulo-palabras .tp-w{ animation:none }
  .titulo-palabras .tp-w > span::after,
  .titulo-palabras .tp-w > em::after{ animation:none }
}

/* ⚠ Sin cortina no se espera a la cortina (2026-08-29). Los 1,68 s de `--tp-a` están calculados contra el telón, pero la cortina se muestra UNA vez por sesión y en la segunda carga el titular se quedaba en blanco un segundo y medio sobre una portada ya despejada, empujando el LCP al segundo 2,5. La clase la escribe el mismo script que decide si hay cortina, antes del primer pintado. */
.sin-cortina .titulo-palabras{ --tp-a:.12s }

/* ⚠ «ya» planta el titular, y es la corrección del «cambia de lugar dos veces»: una animación de CSS EN CURSO le gana a un estilo en línea, así que mientras `tpEntra` corre el tween escribe transforms que no se aplican y al terminar el elemento SALTA a donde GSAP lo había dejado. `despedirTitular` pone la clase apenas la salida empieza a correr de verdad, y de ahí en más manda GSAP. */
.titulo-palabras.ya .tp-w{ animation:none; opacity:1; transform:none }
.titulo-palabras.ya .tp-w > span::after,
.titulo-palabras.ya .tp-w > em::after{ animation:none; opacity:0 }


/* ══ LOS TÍTULOS DE SECCIÓN — UN SOLO SISTEMA ══ Acá había cuatro animaciones sobre el mismo h2 y por eso se trababan (2026-08-29): `split-lines` subía las palabras, el `data-inout` que le agregaba el `data-io="1"` del <body> convertía esa subida en una línea de tiempo atada al scroll que además las hundía al irse la sección, `reflejo` volvía a partir letra por letra, y `data-desenfoque` animaba un `filter` contra la regla 7. Queda UNO: entran por palabras desde abajo de un filo, una sola vez, y después se limpian (el detalle está en `titulosEntran`). El `overflow:hidden` ES el efecto — es el filo contra el que la palabra se descubre. */
.entra{ overflow:hidden }
/* La palabra no se parte al subir: viaja entera o no viaja. */
.entra .tw{ white-space:nowrap }


/* ══ LA BANDA DE VIDEO DE LA PORTADA ══ Va debajo del bloque de texto, a todo el ancho, y el movimiento lo maneja el motor con el scroll igual que cualquier `.banda`. El degradado no es decoración: un video de producto cambia de luminancia cuadro a cuadro, así que fija el piso —55 % arriba, 90 % abajo— y el contraste deja de depender del cuadro que toque. En el teléfono no se baja: ver el comentario del HTML. */
/* El video es el FONDO de toda la portada: llena la sección y el texto va encima con su z-index. */
.banda--video{
  position:absolute; inset:0; z-index:0;
  height:auto; width:auto; margin:0;
}
/* ⚠ 112 % Y NO 124 % (2026-08-31). El sobrante existe para que el
   parallax tenga de dónde correrse, y `data-parallax="48"` mueve 48 px:
   con 124 % sobraban 216 px, o sea que se estaba tirando el 10 % de
   arriba y el 10 % de abajo del cuadro para nada. Y lo de abajo es
   justo donde el mate tiene grabada la marca JEFRA. Con 112 % sobran
   108 px —más del doble de lo que el parallax necesita— y la marca
   entra. Es la mitad de la corrección del «tiene mucho zoom»; la otra
   mitad es el `data-zoom` del HTML, que bajó de 1.12 a 1.04. */
.banda--video video,
.banda--video img{
  position:absolute; left:0; top:-6%;
  width:100%; height:112%;
  object-fit:cover; object-position:center;
  display:block; will-change:transform;
}
/* La capa que va entre el video y el texto. En la computadora NO PINTA
   NADA: existe sólo porque el teléfono sí necesita una banda, y está
   declarada acá para que el orden de las reglas sea uno solo. El porqué
   está abajo, en el bloque de la máscara. */
.banda--video::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  /* ⚠ LO ÚNICO QUE SE PINTA ARRIBA, Y ES POR EL LOGO. Desde que la
     máscara dejó de ser una pared, la esquina de arriba a la izquierda
     es foto clara, y ahí viven «JEFRA yerba mate» y el menú, los dos en
     crema: medidos quedaban lavados. Es una banda de 15 % de alto que
     se apaga del todo antes del titular, o sea que no toca al mate ni
     al humo. Sin ella el logo da 1,9:1. */
  background:linear-gradient(180deg,
    rgba(5,18,11,.62) 0%, rgba(5,18,11,.30) 7%, rgba(5,18,11,0) 15%);
}
/* ⚠ LA FRANJA DE ABAJO, 13 % Y NO 22 %. Es lo único que se pinta encima
   de la foto, y no es decoración: sin ella se ve el corte recto donde
   termina la portada y arranca la sección siguiente. Bajó de 22 % el
   2026-09-01 porque el mate tiene la marca JEFRA tallada entre el 75 %
   y el 86 % del alto de la portada, y una franja de 22 % arranca en el
   78 %: le comía el nombre justo por la mitad. Con 13 % arranca en el
   87 % y la marca queda entera y afuera. Es el mínimo que todavía funde
   sin que se vea el borde. */
.banda--video::before{
  content:''; position:absolute; left:0; right:0; bottom:0; height:13%;
  z-index:2; pointer-events:none;
  background:linear-gradient(180deg, transparent, var(--bg));
}


/* ══ EL BLOQUE QUIETO ══ Tres pasos, sin un solo efecto propio más allá de la entrada de la sección: es lo primero que se lee y lo único que tiene que entender alguien que no scrollea. */
.lead--ancho{
  max-width:36ch;
  font-family:var(--serif);
  font-size:clamp(1.35rem,3vw,2.25rem);
  line-height:1.36; color:var(--text);
}
/* ⚠ Dos renglones en la computadora, y la medida es lo que lo garantiza: los 62ch son los caracteres que entran en un renglón con esta serif a este cuerpo, medidos, y el texto tiene 118. Si alguien le agrega media frase pasa a tres, así que antes de tocar una palabra hay que contar los caracteres. Abajo de 860 vuelve a ser libre: dos renglones en 375 px a cuerpo de titular serían ilegibles. */
.lead--dos{ max-width:62ch }
@media (max-width:860px){ .lead--dos{ max-width:none } }

/* ⚠ La marca, la primera vez que se nombra en el cuerpo: es el mismo destello del titular de la portada, así que se lee como la misma marca y no como otro efecto más. Pasa una vez y no vuelve —`backwards` y no `both`, que impondría su último cuadro para siempre— y el color de base no depende del destello: la palabra es oro plano, y si el navegador no soporta `background-clip:text` queda en oro, que era el pedido. */
.marca-oro{
  position:relative; display:inline-block;
  font-weight:400; color:var(--oro);
  text-transform:uppercase; letter-spacing:.055em;
}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .marca-oro::after{
    content:attr(data-p);
    position:absolute; inset:0;
    white-space:nowrap; pointer-events:none;
    background:linear-gradient(180deg, #FDFBF7 0%, var(--oro-luz) 52%, var(--accent) 100%);
    -webkit-background-clip:text; background-clip:text;
    -webkit-text-fill-color:transparent; color:transparent;
    opacity:0;
  }
  /* La clase la pone vivo.js cuando el párrafo entra en pantalla: el destello tiene que pasar cuando alguien lo está mirando, no tres pantallas más abajo. */
  .marca-oro.brilla::after{ animation:marcaLuz 1.25s ease-out backwards }
}
@keyframes marcaLuz{ 0%{ opacity:0 } 30%{ opacity:.9 } 100%{ opacity:0 } }
@media (prefers-reduced-motion:reduce){
  .marca-oro.brilla::after{ animation:none }
}
.simple__pasos{
  display:grid; gap:clamp(1.6rem,3.4vw,2.8rem);
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  margin-top:clamp(2.4rem,5vw,4rem);
}
/* ⚠ Cada cartel se presenta solo y lo hace el CSS (2026-08-30): `unaAUna` pone `.turnos` en el contenedor y después `.entro` en cada cartel, y la raya, el número, el título y el párrafo son transiciones de `transform` y `opacity` encadenadas con `transition-delay`. Que lo haga el CSS no es una preferencia: un tween de GSAP deja una matriz en línea aunque termine, y una matriz encima de algo que gira en 3D aplasta el subárbol — es el defecto de las tarjetas de la sección siguiente. Sin JS no llega `.turnos`, nada se esconde y los tres carteles se ven quietos. (Acá había un `preserve-3d` y tres `translateZ` huérfanos del `data-tilt`, que sin rotación no movían nada.) */
.simple__paso{
  position:relative; padding-top:1.1rem;
  border-top:1px solid var(--line);
}
/* La raya de oro se traza encima de la gris con `scaleX` sobre una barra de 1 px: no se anima `width` ni un borde, que es la regla 7. */
.simple__paso::before{
  content:''; position:absolute; left:0; right:0; top:-1px; height:1px;
  background:var(--accent);
  transform-origin:0 50%;
}
.simple__pasos.turnos .simple__paso::before{
  transition:transform .62s var(--ease-mat);
}
.simple__paso.entro::before{ transform:scaleX(1) }

.simple__n{
  display:block; font-family:var(--display); font-weight:400;
  font-size:1.05rem; letter-spacing:.1em; color:var(--accent); margin-bottom:.7rem;
}
/* ⚠ El título sube desde atrás de la raya, y por eso el `<span>` existe en el HTML: el `overflow:hidden` va en el h3 y lo que se mueve es el hijo, porque recortar el propio elemento que se traslada es lo mismo que no recortar nada. */
.simple__paso h3{
  font-family:var(--display); font-weight:400; text-transform:uppercase;
  font-size:clamp(1.2rem,2.2vw,1.55rem); margin:0 0 .5rem;
  letter-spacing:.055em;
  overflow:hidden;
}
.simple__paso h3 > span{ display:block }
.simple__paso p{
  margin:0; color:var(--text-2); font-size:1rem; line-height:1.62;
}

/* El estado de partida sólo existe cuando el JS dijo que hay turnos. */
.simple__pasos.turnos .simple__n{ opacity:0; transform:translate3d(0,-10px,0) }
.simple__pasos.turnos .simple__paso h3 > span{ opacity:0; transform:translate3d(0,110%,0) }
.simple__pasos.turnos .simple__paso p{ opacity:0; transform:translate3d(0,12px,0) }

/* Los cuatro tiempos —raya 0, número .24, título .34, párrafo .72—: el párrafo arranca tarde a propósito, porque el título sube desde ATRÁS de un filo y no se ve hasta que está casi arriba, y con el párrafo a los 0,50 s se leía el texto chico con el título todavía en blanco. */
.simple__pasos.turnos .simple__paso.entro .simple__n{
  opacity:1; transform:none;
  transition:opacity .46s var(--ease) .24s, transform .55s var(--ease-mat) .24s;
}
.simple__pasos.turnos .simple__paso.entro h3 > span{
  opacity:1; transform:none;
  transition:opacity .34s var(--ease) .34s, transform .55s var(--ease-mat) .34s;
}
.simple__pasos.turnos .simple__paso.entro p{
  opacity:1; transform:none;
  transition:opacity .5s var(--ease) .72s, transform .58s var(--ease-mat) .72s;
}

@media (prefers-reduced-motion:reduce){
  .simple__pasos.turnos .simple__n,
  .simple__pasos.turnos .simple__paso h3 > span,
  .simple__pasos.turnos .simple__paso p{ opacity:1; transform:none }
  .simple__paso::before{ transform:scaleX(1) }
}


/* ══ LAS TRES COSAS QUE LA HACEN DISTINTA ══ */
/* ⚠ Tres columnas fijas, nunca «2 + 1» (2026-08-30). Con `auto-fit` y `minmax(268px,1fr)`, abajo de 960 px ya no entraban tres y el navegador ponía DOS ARRIBA Y LA TERCERA SOLA ABAJO — ni fila ni columna, una fila coja con un hueco al lado. Con `repeat(3, minmax(0,1fr))` se achican juntas y se apilan las tres de una vez; medido a 780 px: tarjetas de 216 px, ningún título desbordado. Es el mismo corte y la misma receta de los blends y la historia. Y el aire subió de 22-35 px a 26-51: pegadas se leen como un bloque de tres franjas, separadas como tres cosas. */
.distinta__grid{
  display:grid; gap:clamp(1.6rem,3.4vw,3.2rem);
  grid-template-columns:repeat(3, minmax(0,1fr));
  margin-top:clamp(2rem,4vw,3.2rem);
}
@media (max-width:820px){ .distinta__grid{ grid-template-columns:1fr } }
/* ⚠ La tarjeta ya no es la caja: es el escenario. Las dos caras ocupan la MISMA celda de una grilla de una sola celda, así que la tarjeta mide lo que mide la cara más alta —con el dorso en `position:absolute` quedaría atado al alto del frente y un texto una línea más largo se saldría sin avisar— y las tres de la fila siguen midiendo lo mismo. La `perspective` va acá y la rotación en el hijo: `data-tilt` escribe rotationX/rotationY sobre este elemento, y dos transforms en el mismo lugar los gana el último, que es azar. */
.distinta__caja{
  position:relative; display:block;
  perspective:1400px;
  background:none; border:0; padding:0; box-shadow:none;
}
.distinta__giro{ display:grid; height:100% }

/* ⚠ Acá estaba el bug de «la imagen se corta al girar» (2026-08-29), y la causa vale para cualquier tarjeta que gire con una foto adentro: el `overflow:hidden` de la foto y el `will-change` de la <img> fuerzan a rasterizar ese subárbol en su propia capa, y una capa hija NO hereda la matriz 3D del ancestro — se dibuja plana y recortada contra el rectángulo que tenía ANTES de girar (sin un error en la consola, y nunca en una tarjeta sin imagen). La solución no es sacar el `overflow` ni el `will-change`: es NO ANIDAR contextos 3D, así que cada cara gira por su cuenta media vuelta con la perspectiva puesta en la tarjeta. Las dos siguen en la misma celda (`grid-area:1/1`) y ninguna es `absolute`, y `backface-visibility` va en el CSS porque sin JS la tarjeta no gira y el dorso tiene que quedar escondido igual. */
.distinta__cara{
  grid-area:1 / 1;
  display:flex; flex-direction:column;
  padding:clamp(1.4rem,2.4vw,2rem);
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:var(--sombra-panel);
  backface-visibility:hidden; -webkit-backface-visibility:hidden;
  transform:rotateY(0deg);
}
.distinta__cara--dorso{ transform:rotateY(180deg) }
.distinta__caja.volteada .distinta__cara{ transform:rotateY(-180deg) }
.distinta__caja.volteada .distinta__cara--dorso{ transform:rotateY(0deg) }

/* ⚠ Acá estaba «las imágenes se tapan entre sí y no se lee el texto» (2026-08-30): la tarjeta entraba con un tween que le escribía `perspective(900px) … rotateX(-34deg)` en línea y el turno de las vueltas arrancaba encima, y un ancestro con matriz 3D y `transform-style:flat` APLASTA el subárbol, así que `backface-visibility` deja de ser confiable y el dorso se dibuja espejado encima del frente. Se arregló del lado del JS —la entrada ya no escribe transforms y el turno espera a que entren las tres— y acá va el cinturón: la cara que no toca se apaga con `opacity`, de golpe a mitad de la vuelta, cuando las dos están de canto. Con `opacity` y no con `visibility:hidden`, que sacaría el dorso del árbol de accesibilidad, y el dorso es la mitad del texto de la sección. */
.distinta__cara{
  opacity:1;
  transition:transform .95s var(--ease-mat), opacity 0s linear .475s;
}
.distinta__cara--dorso{ opacity:0 }
.distinta__caja.volteada .distinta__cara{ opacity:0 }
.distinta__caja.volteada .distinta__cara--dorso{ opacity:1 }

/* ⚠ La entrada de las tres tarjetas también es CSS y sin nada de 3D: `unaAUna` pone `.turnos` y después `.entro`, y el movimiento lo hace una transición, así que al terminar el `transform` vuelve a `none` de verdad y no queda un ancestro con matriz encima de algo que gira. */
.distinta__grid.turnos .distinta__caja{
  opacity:0; transform:translate3d(0,26px,0);
}
.distinta__grid.turnos .distinta__caja.entro{
  opacity:1; transform:none;
  transition:opacity .8s var(--ease), transform .9s var(--ease-mat);
}
@media (prefers-reduced-motion:reduce){
  .distinta__grid.turnos .distinta__caja{ opacity:1; transform:none }
}
/* El dorso va un punto más cálido que el frente: al girar tiene que notarse que es OTRA cara y no la misma con otro texto. */
.distinta__cara--dorso{ background:var(--surface-2); border-color:var(--line-strong) }
.distinta__cara--dorso h3{ color:var(--oro) }
/* ⚠ Sin JavaScript la tarjeta no gira nunca y el dorso queda escondido detrás del frente para siempre, y está bien: el frente dice lo que tiene que decir solo. Lo que NO puede pasar es que el dorso quede a la vista de costado, y por eso `backface-visibility` está en el CSS. */
/* ⚠ «GIRÁ», Y ES INFORMACIÓN, NO ADORNO (2026-09-05, lo pidió Jope).
   La mitad del texto de esta sección vive en el dorso de las tarjetas, y
   hasta hoy la única forma de enterarse era esperar a que a esa tarjeta
   le tocara el turno de darse vuelta sola. El que pasa scrolleando no
   espera. Con la chapita, el dorso deja de ser un premio para el que se
   queda y pasa a ser algo que se puede pedir.
   Va sólo en la cara de frente: en el dorso diría que hay un tercer
   lado. Y se apaga mientras la tarjeta está dada vuelta, que es cuando
   ya no hay nada que avisar. */
.distinta__vuelta{
  position:absolute; top:clamp(1.4rem,2.4vw,2rem); right:clamp(1.4rem,2.4vw,2rem);
  display:inline-flex; align-items:center; gap:.3rem;
  padding:.22rem .5rem .22rem .42rem; border-radius:var(--radius);
  border:1px solid var(--line); color:var(--muted);
  font-size:.72rem; letter-spacing:.05em; text-transform:uppercase;
  transition:opacity .3s var(--ease), color .3s var(--ease), border-color .3s var(--ease);
}
.distinta__caja.volteada .distinta__vuelta{ opacity:0 }
@media (hover:hover){
  .distinta__caja:hover .distinta__vuelta{ color:var(--accent); border-color:var(--accent) }
}

.distinta__n{
  font-family:var(--display); font-weight:400; font-size:.95rem;
  color:var(--accent); letter-spacing:.14em;
}
.distinta__caja h3{
  font-family:var(--display); font-weight:400; text-transform:uppercase;
  font-size:clamp(1.35rem,2.7vw,1.9rem);
  margin:.55rem 0 .7rem; letter-spacing:.046em;
}
.distinta__caja p{ margin:0 0 1.4rem; color:var(--text-2); line-height:1.62 }
/* ⚠ La foto sobresale un 14 % para que el parallax tenga de dónde correrse: con la imagen al 100 % del alto, moverla un 7 % deja a la vista una franja del fondo de la tarjeta. Es la misma cuenta que hace `.banda` en la plantilla. */
/* ⚠⚠ LA FOTO YA NO CRECE, Y ES EL ARREGLO DEL 2026-08-31. Hasta hoy
   tenía `flex:1 1 auto` para tapar el pozo negro que dejaba la cara
   más corta —las dos caras comparten celda y la tarjeta mide lo que
   mide el dorso, que explica más largo—. El precio era que la foto se
   estiraba fuera de su proporción y `object-fit:cover` le comía los
   costados: las tres empezaban a distinta altura, ninguna se veía
   entera y la de la tarjeta 2 llegaba a medir 70 px más que la de la 1.
   Eso es lo que Jope vio como «se superponen y no se lee».
   El pozo se tapa por el otro lado: la foto queda en su 3:2 y se va al
   PIE de la cara con `margin-top:auto`, así que el aire sobrante cae
   entre el párrafo y la hairline —que es justo donde tiene que estar—
   y las tres fotos apoyan en la misma línea sin reservar renglones. */
.distinta__foto{
  margin:1.3rem 0 0; overflow:hidden; border-radius:var(--radius);
  aspect-ratio:3/2; min-height:132px; flex:0 0 auto; margin-top:auto;
  position:relative;
}
/* ⚠ La foto del dorso es la misma y no se mueve: sin `data-parallax-foto` no la toca nadie y se queda en el mismo -7 %, y por eso al girar se lee como que la tarjeta giró y no como que apareció otra tarjeta con la misma foto. */
.distinta__cara--dorso .distinta__foto{ opacity:.72 }
/* ⚠ EL SOBRANTE ES 7 %, NO 14, Y ES UNA CUENTA: `data-parallax-foto="7"`
   corre la imagen entre -3,5 % y +3,5 % de su propio alto, así que con
   7 % de más cada lado tiene 3,5 % y le gana justo al recorrido. Con
   14 % se recortaba el doble de lo necesario — en una foto de una hoja
   entera, eso es la punta de la hoja. */
.distinta__foto img{
  position:absolute; left:0; top:-3.5%;
  width:100%; height:107%; object-fit:cover; display:block;
}
/* ⚠ El `will-change` sólo en las tres que se mueven de verdad: estaba en las seis, y las tres del dorso eran tres capas de compositor promovidas para siempre a cambio de nada — en una página con 22 imágenes eso se paga en memoria de video. */
.distinta__foto img[data-parallax-foto]{ will-change:transform }


/* ══ LAS CINCO MOLIENDAS — EL RIEL ══ La pista mide cinco pantallas y el marco queda pinchado adentro: eso convierte el scroll en el control del grano, y sin `position:sticky` no existe — por eso la regla dos del proyecto es la que sostiene la sección. Las cinco fotos están SIEMPRE en el mismo lugar del documento y lo único que cambia es su `transform`: vivo.js escribe `--dx`, `--sc` y `--ry` más la opacidad, cinco veces en toda la sección y nunca por cuadro, y el `transform` que las usa está armado acá — la custom property no se interpola sola, pero el transform que la usa sí, y la transición hace todo el movimiento. */
/* ⚠ El título de esta sección va en dos renglones y necesita más medida que los otros (2026-08-30): «Una para cada mate.» mide 586 px contra los 585 de la medida general de los `.h2`, y por seis píxeles el PUNTO FINAL se caía solo a un tercer renglón. Se arregló por los dos lados —el punto entró adentro del `<em>` y la medida subió a 23ch, que deja un 10 % de aire—; los otros ocho títulos no se tocan. */
.moliendas .h2{ max-width:23ch }

/* ⚠ LA ALTURA DE LA PISTA SE REPARTE ENTRE LAS MOLIENDAS, ASÍ QUE CAMBIA
   CUANDO CAMBIA CUÁNTAS SON. Eran cinco con 460vh —una pantalla para la
   primera y noventa por cada una que sigue—. Al pasar a cuatro (2026-09-04,
   la extrafina salió del catálogo) quedarían 115vh por molienda en vez de
   92: el mismo scroll para un producto menos, o sea cada paso un 25 % más
   lento. No se nota como «hay una menos», se nota como que la sección se
   hizo pesada. 368vh mantiene el ritmo que tenía. */
.moliendas__pista{ height:368vh; position:relative }
.moliendas__marco{
  position:sticky; top:0; min-height:100svh;
  display:grid; align-content:center; justify-items:center;
  gap:clamp(1.2rem,2.6vh,2rem);
  max-width:var(--maxw); margin-inline:auto;
  padding:clamp(2rem,6vh,4rem) var(--pad);
}

/* ⚠ El riel recorta a propósito: las dos fotos de los costados salen por el borde y se cortan, que es lo que dice «esto sigue para allá» — enteras se leerían como tres fotos puestas en fila. Y el `overflow:hidden` va acá y no más arriba: en `html` o `body` rompería el `sticky` del marco, que es la regla dos. */
.moliendas__riel{
  position:relative; width:100%;
  aspect-ratio:16/10; max-height:60svh;
  overflow:hidden;
  perspective:1600px;
  --lupa-x:0%; --lupa-y:0%;
}
/* ⚠ Las cinco están cargadas desde el principio y apiladas en el mismo punto, y lo único que las separa es el `--dx`: al cambiar el `src` de una sola imagen, el navegador tira el fotograma que estaba pintando y deja el hueco en blanco hasta decodificar el nuevo, que en medio de un scroll es un parpadeo. */
.moliendas__foto{
  --dx:0%; --sc:1; --ry:0deg;
  position:absolute; left:50%; top:50%;
  width:min(62%, 640px); aspect-ratio:4/3;
  object-fit:cover; display:block;
  border-radius:var(--radius);
  border:1px solid var(--line-strong);
  box-shadow:var(--sombra-panel);
  transform-origin:50% 50%;
  transform:translate(-50%,-50%) translateX(var(--dx)) scale(var(--sc)) rotateY(var(--ry));
  opacity:0;
  transition:transform .82s var(--ease-mat), opacity .6s var(--ease-mat);
  will-change:transform, opacity;
}
/* El estado por omisión, para el que llega sin JavaScript: la primera al frente y las otras cuatro escondidas detrás, con la sección quieta y entera. */
.moliendas__foto.es-la{ opacity:1 }

/* ⚠ El contador es la única pieza que no se mueve, y por eso se lee: cinco rayas, y la que toca se estira y se enciende. Es lo que dice «vas por la tercera de cinco» sin escribirlo, y lo que reemplaza al bulto del mazo viejo. */
.moliendas__marcas{
  list-style:none; margin:0; padding:0;
  display:flex; gap:.5rem; align-items:center;
}
.moliendas__marcas li{
  width:26px; height:2px; border-radius:2px;
  background:var(--line-strong);
  transform-origin:50% 50%;
  transition:transform .5s var(--ease-mat), background-color .5s var(--ease);
}
.moliendas__marcas li.es-la{
  background:var(--accent);
  transform:scaleX(1.9);
}

/* ⚠ Los cinco textos están apilados en la misma celda y el bloque mide siempre lo mismo: con `max-height` transicionado, cada cambio de paso cambiaba el alto y movía lo que hay abajo — cinco saltos de layout en la parte más scrolleada de la página. Y no se escribe `textContent` al cambiar de paso: los cinco están en el HTML desde el principio, los lee Google y los lee un lector de pantalla, y lo único que cambia es la opacidad. */
.moliendas__lista{
  list-style:none; margin:0; padding:0;
  display:grid; width:100%; max-width:56ch;
  text-align:center;
}
.moliendas__paso{
  grid-area:1 / 1;
  opacity:0; pointer-events:none;
  transform:translate3d(0,10px,0);
  transition:opacity .45s var(--ease), transform .55s var(--ease-mat);
}
.moliendas__paso.es-la{ opacity:1; transform:none; pointer-events:auto }
.moliendas__paso b{
  display:block; font-family:var(--display); font-weight:400;
  text-transform:uppercase; letter-spacing:.05em;
  font-size:clamp(1.9rem,5.2vw,3.4rem); line-height:1.05;
  color:var(--text);
}
.moliendas__paso span{
  display:block; margin-top:.7rem; color:var(--text-2);
  font-size:clamp(.95rem,1.5vw,1.05rem); line-height:1.6;
}

@media (max-width:820px){
  .moliendas__pista{ height:320vh }   /* mismo cálculo: 400 × 4/5 */
  .moliendas__riel{ aspect-ratio:5/4; max-height:46svh }
  .moliendas__foto{ width:min(74%, 420px) }
}
@media (prefers-reduced-motion:reduce){
  .moliendas__foto{ transition:none }
  .moliendas__paso{ transition:none }
  .moliendas__marcas li{ transition:none }
}


/* ══ ACÁ VIVÍA «FINA NO ES POLVORIENTA» ══ Se fue entera el 2026-08-31 con su sección: las dos columnas, la línea del medio, el remate que crecía y las letras que llegaban desparejas. Son 3,5 KB de CSS que ya no pintan nada. Lo único que sobrevive de esa sección es el celeste, que era la línea del cotejo y ahora se usa una sola vez —el anillo de foco—, así que la regla 4 de la cabecera pasó a valer para UN uso y no dos. */

/* ══ LOS BLENDS ══ La sección está a medio cargar a propósito: no tenemos los nombres, así que el <ul> está escrito y vacío y `:empty` lo esconde. Hoy se ve una sección terminada, y el día que lleguen los nombres alcanza con pegar los <li>: ni una línea de CSS ni de JS para tocar. */
/* ⚠ La sección va sobre otra superficie por un motivo concreto: sin los nombres es medio titular, dos renglones y un botón, y en una página donde todas miden dos pantallas una que mide media se lee como que faltó cargarla. Sobre `--bg-2` y entre dos hairlines pasa a leerse como un intervalo — la misma superficie de «Para dietéticas», la otra sección que interrumpe el relato. */
.blends{ background:var(--bg-2); border-block:1px solid var(--line) }
.blends__lista{
  list-style:none; margin:clamp(2rem,4vw,3.2rem) 0 0; padding:0;
  display:grid; gap:clamp(1.4rem,2.8vw,2.4rem);
  grid-template-columns:repeat(3, minmax(0,1fr));
}
.blends__lista:empty{ display:none }
@media (max-width:820px){ .blends__lista{ grid-template-columns:1fr } }

.blends__item{
  display:flex; flex-direction:column;
}
/* ⚠ Acá vivían el tinte de color y los nueve dibujos, y se fueron el 2026-08-30: existían por una carencia —no había foto de ningún blend y las tres tarjetas eran la misma yerba sobre mármol negro—, y con las fotos de Jope las tres se distinguen a un metro, así que un dibujo de menta encima de una foto de menta se lee como un error. Se fueron `--bl`, `.blends__tinte`, `.blends__dibujo`, `.blends__hoja`, el `clip-path` que los destapaba en vivo.js y el `translateZ(16px)` huérfano del `data-tilt`. Lo único que queda encima de la foto es un velo neutro, y hace falta: las tres fotos nuevas son claras y la sección es negra. Es un degradado y no un `filter`: se compone sin repintar la imagen. */
.blends__foto{
  position:relative; margin:0 0 1.1rem;
  aspect-ratio:4/3; overflow:hidden;
  border-radius:var(--radius);
  border:1px solid var(--line);
}
.blends__foto img{
  width:100%; height:100%; object-fit:cover; display:block;
  transform:scale(1.04);
}
.blends__foto::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(180deg,
    transparent 0%, transparent 52%, rgba(5,18,11,.62) 100%);
}
.blends__item b{
  display:block; font-family:var(--display); font-weight:400;
  text-transform:uppercase; letter-spacing:.05em;
  font-size:clamp(1.2rem,2.4vw,1.62rem); line-height:1.14;
}
.blends__item span{
  display:block; margin-top:.5rem; color:var(--text-2);
  font-size:.97rem; line-height:1.6;
}
.blends__pedir{ margin-top:clamp(1.8rem,4vw,2.6rem) }


/* ══ DÓNDE SE CONSIGUE ══ Cinco localidades y nada más, en versales y con la tipografía de los títulos: son nombres propios y tienen que leerse como el titular de la sección, no como una lista de compras. Sin mapa —cinco puntos en la llanura son un rectángulo casi vacío que pide una biblioteca y no se lee de un vistazo— y sin iconito de chinche, que sumaría cinco manchas de oro iguales. */
/* ⚠ Dos columnas fijas y no `auto-fit`: con `minmax(200px,1fr)`, a 1440 ponía las cinco en un solo renglón, «BAHÍA BLANCA» se salía de su celda y «CORONEL SUÁREZ» se partía en dos, porque los nombres miden entre 6 y 14 caracteres y no hay ancho que sirva para las cinco. Dos columnas dan tres renglones, el último con uno solo, y eso se lee como una lista que terminó. */
.donde__lista{
  list-style:none; margin:clamp(1.8rem,4vw,3rem) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(2, minmax(0,1fr));
  column-gap:clamp(2rem,5vw,4.5rem); row-gap:0;
}
/* ⚠ Cada nombre es una ficha con profundidad, igual que los tres carteles del bloque quieto: `data-tilt` la ladea hacia el puntero y el nombre vive 26 px por delante. Cinco nombres iguales en versales son cinco renglones muertos, y el volumen es lo que los vuelve mirables sin agregar un iconito de chinche. */
.donde__item{
  padding:clamp(.95rem,2vw,1.35rem) 0;
  border-top:1px solid var(--line);
  transition:border-color .5s var(--ease);
}
.donde__item span{
  display:block;
  transition:color .5s var(--ease);
  font-family:var(--display); font-weight:400;
  text-transform:uppercase; letter-spacing:.05em;
  font-size:clamp(1.2rem,2.4vw,1.7rem); line-height:1.14;
  color:var(--text);
  /* Un nombre largo se parte antes de empujar la columna. */
  overflow-wrap:break-word;
}
@media (max-width:560px){
  .donde__lista{ grid-template-columns:1fr }
}
/* ── EL SEXTO RENGLÓN ── ⚠ No es una localidad y tiene que notarse (2026-08-29). Acá había un cartel aparte y Jope pidió que fuera un renglón más de la lista, entrando igual que los otros cinco: es mejor, porque así se enumera hablando. Lo que NO puede pasar es que se lea como un pueblo llamado «Y seguimos expandiéndonos», así que entra igual pero se ve distinto: oro, bastardilla, sin versales y sin borde arriba. Y sigue siendo un enlace al formulario con el <a> ocupando el renglón entero: tres palabras clicables en 300 px son un blanco que la mitad de la gente falla. */
.donde__item--mas{ border-top-color:transparent }
.donde__item--mas a{
  display:block; text-decoration:none;
  padding:inherit;
}
.donde__item--mas span{
  font-family:var(--serif); font-style:italic;
  text-transform:none; letter-spacing:0;
  color:var(--oro);
  font-size:clamp(1.15rem,2.3vw,1.6rem);
}
.donde__item--mas a:hover span{ color:var(--accent) }

/* ⚠ El tilt se fue de las fichas (2026-08-29), y con él la única diferencia entre un nombre y otro en un teléfono, que es donde se mira. Ahora entran de a una con el nombre subiendo desde abajo de un filo —el `overflow:hidden`—, el mismo gesto de los títulos, y funciona igual con mouse que sin él. */
.donde__item{ overflow:hidden }
/* ⚠ El nombre no se pone oro al entrar, y es a propósito: encender los cinco de forma permanente deja la lista entera en oro viejo, y ahí el sexto renglón —que ES oro porque no es una localidad— deja de distinguirse. Lo que se enciende es la línea de arriba, que marca que el renglón llegó sin robarle el color a la única pieza que lo necesita. */
.donde__item.entro{ border-top-color:var(--line-strong) }
@media (hover:hover){
  .donde__item:hover span{ color:var(--oro) }
}

/* ══ LA TIRA DE FOTOS ══ Dos filas cruzadas, cada una para su lado: eso se lee como movimiento y no como un carrusel. Cada fila tiene el mismo juego de fotos dos veces y se corre -50 %, así al llegar al final el segundo juego está exactamente donde estaba el primero y el salto no existe; el duplicado va con `aria-hidden` y `alt=""`, y no cuesta memoria porque son las MISMAS direcciones. La velocidad la modula el scroll desde vivo.js tocando el `playbackRate`, nunca la `animation-duration`, que reinicia la animación en cada cuadro y hace tironear la tira. */
.seccion--tira{ padding-block:clamp(2.5rem,6vw,5rem) }

/* ⚠ LA GUÍA NO EXISTE EN LA COMPUTADORA, y no es por ahorrar píxeles:
   ahí las dos filas se mueven solas, o sea que ya se ve que hay más
   fotos de las que entran. Un cartel que dice «deslizá» al lado de algo
   que se está deslizando solo es una instrucción para algo que nadie
   necesita hacer. En el teléfono la animación se apaga —el arrastre del
   dedo y el `translate3d` del keyframe no pueden convivir— y ahí sí
   hace falta decirlo. */
.tira__guia{ display:none }
.tira{
  --g:clamp(.55rem,1.2vw,.9rem); --dur:64s;
  display:grid; gap:var(--g);
  /* ⚠ `width:100%` y no `100vw` (2026-08-30): `.tira` es hija directa de la <section>, que ya mide el ancho del cuerpo, y `100vw` mide la ventana CON la barra de scroll — la tira sobresalía 5 px por lado y la página se podía correr de costado. `body{overflow-x:clip}` no lo tapa, porque `clip` no se propaga al viewport como se propaga `hidden`. Es el mismo motivo por el que `.banda` de la plantilla no usa `100vw`. */
  width:100%;
  overflow:hidden;
  mask-image:linear-gradient(90deg,transparent 0,#000 6%,#000 94%,transparent 100%);
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 6%,#000 94%,transparent 100%);
}
.tira__fila{ display:flex; width:max-content; animation:tiraCorre var(--dur) linear infinite }
.tira__fila--der{ animation-direction:reverse }
@keyframes tiraCorre{ from{ transform:translate3d(0,0,0) } to{ transform:translate3d(-50%,0,0) } }
.tira__set{ display:flex; flex:0 0 auto; gap:var(--g); padding-right:var(--g) }
/* ⚠ LA CAJA SE ACHICÓ CON EL ARCHIVO (2026-08-30). La tira pasó de 8 fotos a 12 y los archivos de 440 a 340 px para entrar en el presupuesto de memoria; si la caja se quedaba en 248, la cobertura caía a 1,37× —por debajo del 1,6× de la regla— y en una tira que se mueve eso se ve como fotos blandas. A 208 queda en 1,63×. De paso entran más fotos en pantalla, que es lo que una tira tiene que hacer. */
/* ⚠ LA CAJA BAJÓ OTRA VEZ CON EL ARCHIVO (2026-09-01), por la misma
   cuenta de siempre: la tira pasó de 16 fotos a 21 —se fue la calabaza
   sola y entraron seis del shooting de la portada— y para entrar en los
   40 MB de memoria los archivos bajaron de 340 a 310. Con la caja en
   208 la cobertura caía a 1,49×; en 194 queda en 1,60×, que es lo que
   pide la regla. */
.tira figure{ margin:0; width:clamp(150px,15vw,194px); flex:0 0 auto }
.tira img{
  width:100%; height:auto; display:block;
  border-radius:var(--radius); aspect-ratio:4/3; object-fit:cover;
}
.tira:hover .tira__fila,
.tira[data-quieto] .tira__fila{ animation-play-state:paused }
@media (prefers-reduced-motion:reduce){ .tira__fila{ animation:none } }

@media (max-width:760px){
  /* ⚠ En el teléfono la regla pide 2,0× y no 1,6×: con el archivo de 340 la caja no puede pasar de 170 px. A 46vw da 172 en una pantalla de 375, o sea 1,98×. */
  /* ⚠ Y en el teléfono baja a 155: con 186 la cobertura quedaba en
     1,67× y la regla pide 2,0× en un celular. Estaba mal desde antes
     —con archivos de 340 daba 1,83×—; con 310/155 queda en 2,00×. */
  .tira figure{ width:min(46vw,155px) }
  /* ⚠ La animación y el arrastre no pueden convivir en el mismo elemento: el `translate3d` del keyframe pelea contra el `scrollLeft` del dedo y la fila tironea. Abajo de 760 la animación se apaga y manda el dedo. */
  .tira__fila{
    animation:none; width:auto;
    overflow-x:auto; overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory;
    -webkit-overflow-scrolling:touch; scrollbar-width:none;
  }
  .tira__fila::-webkit-scrollbar{ display:none }
  .tira__set + .tira__set{ display:none }   /* el duplicado sólo sirve para el bucle */
  .tira figure{ scroll-snap-align:center }

  .tira__guia{
    display:flex; align-items:center; justify-content:center; gap:.45rem;
    width:max-content; margin:0 auto .75rem; padding:.42rem .9rem;
    border:1px solid var(--line); border-radius:var(--radius);
    color:var(--muted); font-size:.82rem; letter-spacing:.02em;
    transition:opacity .5s var(--ease), transform .5s var(--ease);
  }
  /* La flecha empuja sola: es lo que convierte un rótulo en una
     invitación. Sólo `transform`, o sea que vive en el compositor y no
     le cuesta nada a la fila que está al lado. */
  .tira__guia svg{ animation:guiaEmpuja 1.9s var(--ease) infinite }
  .ya-deslizo .tira__guia{ opacity:0; transform:translateY(-6px); pointer-events:none }
}
@keyframes guiaEmpuja{ 0%,100%{ transform:translateX(0) } 50%{ transform:translateX(5px) } }
@media (prefers-reduced-motion:reduce){ .tira__guia svg{ animation:none } }


/* ══ DETRÁS DE JEFRA ══ Texto a la izquierda y el paquete sangrando por el borde derecho. El cuerpo está sin escribir a propósito: no hay historia, ni fechas, ni años hasta que los mande la clienta (ver el HTML). */
.historia{ overflow:hidden }
/* ⚠ La foto acompaña al texto, no flota al lado (2026-08-30): con `align-items:center` y un tope de `74svh` quedaba más corta que la columna y sobraban unos 70 px de negro arriba y abajo, como una imagen suelta puesta al costado. Con `stretch` mide exactamente lo que mide el texto y se va por el borde derecho, y el que lee tiene la cara de Yesi a la altura de lo que está leyendo. ⚠ Y la columna de la foto no se puede agrandar: se probó `.86fr` —de 462 a 642 px— y hay que dejar escrito por qué se volvió atrás, porque NO EXISTE un archivo más grande: `yesi.webp` mide 740×925, recortado de una captura del Figma de la clienta, y a 642 px la cubre 1,15 veces cuando la regla pide 1,6. */
.historia__grid{
  display:grid; align-items:stretch;
  grid-template-columns:minmax(0,1fr) minmax(0,.72fr);
  gap:clamp(2rem,5vw,4.5rem);
}
/* El texto sí va centrado dentro de su columna: es lo que lo deja a la misma altura que la cara sin obligarlo a estirarse. */
.historia__texto{ align-self:center }
.historia__texto p{ color:var(--text-2); line-height:1.68; max-width:46ch }
.historia__texto p + p{ margin-top:1.1rem }
/* ⚠ Acá estaba `.historia__sub`, el rótulo chico que separaba los bloques de la historia, y se fue el 2026-08-30 con el último párrafo: con dos párrafos seguidos no hay nada que saltear. Queda anotado porque el día que Yesi mande más texto, esto es lo que vuelve. */
/* ⚠ El margen no puede ser `calc(50% - 50vw)`, que es el de la tira: acá es una columna de una grilla, así que ese 50 % es la mitad de la COLUMNA y el margen sale casi mil píxeles — medido, la caja terminaba en 974 px con un archivo de 900. Lo que hay que descontar es el padding del contenedor más lo que sobra a cada lado cuando la ventana es más ancha que el máximo; con eso la caja queda en 594 px y el archivo de 1000 la cubre 1,68 veces. */
.historia__foto{
  position:relative; margin:0;
  margin-right:calc(-1 * (var(--pad) + max(0px, (100vw - var(--maxw)) / 2)));
  border-radius:var(--radius) 0 0 var(--radius);
  overflow:hidden;
}
/* ⚠ El aire para el parallax bajó de 14 % a 7 % (2026-08-30), y es una cuenta: `data-parallax-foto="6"` mueve la imagen entre -3 % y +3 % de su propio alto, así que con un 7 % de sobrante cada lado tiene 3,5 % y le gana al recorrido. Importa desde que la foto se estira a la altura del texto: con `height:114%` la caja quedaba en 1025 px contra un archivo de 925 y el navegador agrandaba una cara al 111 %; con 107 % la agranda un 4 %, que no se ve. */
.historia__foto img{
  display:block; width:100%; height:107%;
  object-fit:cover;
  position:relative; top:-3.5%;
  will-change:transform;
}
/* Un velo del lado del texto: la foto tiene el mármol muy iluminado en el borde izquierdo y el párrafo quedaba pegado a una mancha clara. */
.historia__foto::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(90deg, var(--bg) 0%, transparent 26%);
}
@media (max-width:820px){
  .historia__grid{ grid-template-columns:1fr; gap:1.8rem }
  .historia__foto{ margin-inline:calc(50% - 50vw); border-radius:0 }
  .historia__foto img{ max-height:56svh }
  .historia__foto::after{ background:linear-gradient(180deg, var(--bg) 0%, transparent 22%) }
}


/* ══ DE LA HOJA AL PAQUETE ══ Cuatro pasos que se muestran de a uno con el scroll; lo maneja `unoPorVez` de vivo.js con la clase `es-el`. */
/* ⚠ El `position:relative` está para que la línea tenga de dónde colgarse y el padding izquierdo le hace lugar; en el teléfono los dos se van, porque una línea vertical en 375 px se come el ancho del texto y no aporta nada que el orden de los números no diga ya. */
/* ⚠ Horizontal en la computadora y vertical en el teléfono, y no es la misma línea girada: es otra lectura. Vertical acompaña el scroll y los cuatro pasos se leen como una lista; horizontal se ve de dónde sale y a dónde llega ANTES de leer una palabra, que es lo único que esta sección tiene para decir. El corte está en 860 y no en 640 porque cuatro columnas en 800 px dan 200 px por paso, o sea «EL ESTACIONAMIENTO» partido en tres renglones. */
.camino{
  margin-top:clamp(2.4rem,5vw,3.6rem); position:relative;
  padding-top:clamp(2rem,3.6vw,2.8rem);
  display:grid; grid-template-columns:repeat(4, minmax(0,1fr));
  gap:clamp(1.2rem,2.6vw,2.4rem);
}

/* ── LA LÍNEA QUE UNE LOS CUATRO PASOS ── Dos piezas: el riel apagado, que está siempre, y el trazo de oro de adentro, que crece con el scroll; sin las dos se lee como una línea que aparece y no como una que SE DIBUJA. */
/* ⚠ El riel es horizontal y el trazo crece con `scaleX` desde la izquierda: es lo único que se puede atar a un `scrub` sin pagar un reflow por cuadro, porque un `width` animado recalcula el layout de la sección sesenta veces por segundo mientras alguien baja. Y arranca en 1 y no en 0: sin JavaScript la línea está dibujada entera, y `caminoAvanza` la manda a 0 recién cuando ya sabe que la va a poder animar. */
.camino__linea{
  position:absolute; left:0; right:0; top:0; height:2px;
  background:var(--line); border-radius:2px; overflow:hidden;
  pointer-events:none;
}
.camino__linea i{
  position:absolute; inset:0; display:block;
  transform-origin:0% 50%; transform:scaleX(1);
  background:linear-gradient(90deg,
    var(--accent-2), var(--accent) 55%, var(--accent-deep));
  will-change:transform;
}
@media (max-width:860px){
  .camino{
    grid-template-columns:1fr; gap:0;
    padding-top:0; padding-left:clamp(1.4rem,3vw,2.4rem);
  }
  .camino__linea{
    left:0; right:auto; top:0; bottom:0; width:2px; height:auto;
  }
  .camino__linea i{ transform-origin:50% 0%; transform:scaleY(1);
    background:linear-gradient(180deg,
      var(--accent-2), var(--accent) 55%, var(--accent-deep)); }
}
@media (max-width:640px){
  .camino{ padding-left:0 }
  .camino__linea{ display:none }
}
@media (prefers-reduced-motion:reduce){
  .camino__linea i{ transform:none }
}
/* ⚠ En horizontal el paso es una columna y el numeral va arriba, no al costado: con el número a la izquierda, una columna de 300 px le regala 60 al numeral y el título se parte igual. La chapita que marca dónde toca la línea vive en el `::before`, encima del riel. */
.camino__paso{
  position:relative;
  padding-top:clamp(1.1rem,2.2vw,1.6rem);
  border-top:1px solid var(--line);
}
/* ⚠ SE TRAZA CON `scaleX` Y NO CON `width` (2026-08-30): la barra mide el 100 % desde siempre y lo que cambia es la escala. Animar `width` es relayout en cada cuadro, que es la regla 7 — la misma barra de «Qué es / Para quién» ya se hacía así. */
.camino__paso::before{
  content:''; position:absolute; left:0; right:0; top:-1px;
  height:2px; background:var(--accent);
  transform:scaleX(0); transform-origin:0 50%;
  transition:transform .5s var(--ease-mat);
}
.camino__paso.es-el::before{ transform:scaleX(1) }
@media (max-width:860px){
  .camino__paso{
    display:grid; grid-template-columns:auto 1fr;
    column-gap:clamp(1rem,2.6vw,2rem); align-items:start;
    padding-block:clamp(1.1rem,2.4vw,1.8rem); padding-top:clamp(1.1rem,2.4vw,1.8rem);
  }
  .camino__paso::before{ display:none }
}
.camino__n{
  display:block; margin-bottom:.5rem;
  font-family:var(--display); font-weight:400; letter-spacing:.06em;
  font-size:clamp(1.5rem,3.4vw,2.4rem); line-height:1;
  color:var(--accent);
}
@media (max-width:860px){
  .camino__n{ grid-row:1 / span 2; margin-bottom:0 }
}
/* ⚠ En horizontal el titular va más chico y con dos renglones reservados: «EL ESTACIONAMIENTO» son dieciocho caracteres en una columna de 300 px y entra en dos líneas mientras las otras tres entran en una, así que sin el `min-height` los cuatro párrafos arrancan a alturas distintas. Medido en 1440, donde la columna es más angosta en proporción al cuerpo. */
.camino__paso h3{
  font-family:var(--display); font-weight:400; text-transform:uppercase;
  font-size:clamp(1.05rem,1.85vw,1.5rem); margin:0 0 .5rem;
  letter-spacing:.032em;
  /* Dos renglones reservados. `lh` es la altura de línea de ESTE elemento, así que no hay que adivinar cuánto mide una línea; el `em` de arriba queda de respaldo para el navegador que no lo entienda. */
  min-height:2.4em; min-height:calc(2lh);
}
@media (max-width:860px){
  .camino__paso h3{
    font-size:clamp(1.3rem,2.8vw,1.95rem); margin:0 0 .4rem;
    letter-spacing:.046em; min-height:0;
  }
}
.camino__paso p{ margin:0; color:var(--text-2); line-height:1.62; max-width:52ch }
/* ⚠ El estado apagado lo habilita el JS poniendo `data-vivo` y no existe sin él: la marca es el permiso para esconder algo, así que sin vivo.js —o con «menos animación» pedido— los cuatro pasos se ven enteros y quietos. Y no se apagan los que ya pasaron, que convertiría un camino en un carrusel: hay tres estados y no dos — el que viene (apagado), el que va (encendido) y el que ya pasó (a media luz). */
[data-vivo] > .camino__paso{
  opacity:.3; transform:scale(.94);
  transform-origin:0% 0%;
  transition:opacity .6s var(--ease), transform .6s var(--ease-mat);
}
[data-vivo] > .camino__paso.paso-visto{ opacity:.62; transform:scale(.94) }
/* ⚠ El que toca crece, y crece con `scale`, nunca con `font-size` (2026-08-29): los cuatro pasos son columnas de la misma grilla y cambiarle el cuerpo al activo recalcula el layout de la fila entera en cada cambio de paso, con `scrub` y mientras alguien baja. El origen va en la esquina de arriba a la izquierda —desde el centro, el que crece se mete por arriba del riel y se descuelga de la línea de base de sus vecinos— y los tres que no tocan quedan en 0,94 y no en 1, porque lo que se lee es la DIFERENCIA: así el promedio no cambia y el bloque de abajo no se corre. */
[data-vivo] > .camino__paso.es-el{ opacity:1; transform:scale(1.12) }
@media (max-width:860px){
  /* Apilados, el que crece empuja visualmente al de abajo porque la columna es una sola: el salto se achica a la mitad. */
  [data-vivo] > .camino__paso.es-el{ transform:scale(1.05) }
}
@media (prefers-reduced-motion:reduce){
  [data-vivo] > .camino__paso,
  [data-vivo] > .camino__paso.paso-visto,
  [data-vivo] > .camino__paso.es-el{ opacity:1; transform:none; transition:none }
}
@media (prefers-reduced-motion:reduce){
  [data-vivo] > .camino__paso{ opacity:1; transform:none }
  .camino__paso::before{ transition:none }
}


/* Los tres datos de contacto del pie: en una fila en la computadora y apilados en el teléfono, con un punto medio de separador —no una barra— para que no se lea como una ruta. */
.footer__contacto{
  list-style:none; margin:.9rem 0 0; padding:0;
  display:flex; flex-wrap:wrap; justify-content:center;
  gap:.4rem clamp(.9rem,2.5vw,1.6rem);
  color:var(--muted); font-size:.92rem;
}
.footer__contacto li + li::before{
  content:'·'; margin-right:clamp(.9rem,2.5vw,1.6rem);
  color:var(--line-strong);
}
.footer__contacto a{ color:var(--text-2) }
.footer__contacto a:hover{ color:var(--oro) }
@media (max-width:520px){
  .footer__contacto{ flex-direction:column; gap:.45rem }
  .footer__contacto li + li::before{ content:none }
}


/* ══ PARA DIETÉTICAS Y COMERCIOS ══ La sección que no existía en el diseño anterior y la que decide si esta página sirve para algo: Jefra vende más por mayor que por menor. */
.mayorista{ background:var(--bg-2); border-block:1px solid var(--line) }
.mayorista__lista{ list-style:none; margin:clamp(1.6rem,3vw,2.4rem) 0 0; padding:0 }
.mayorista__lista li{
  display:grid; grid-template-columns:auto 1fr; gap:.9rem;
  align-items:start; padding-block:.95rem;
  border-top:1px solid var(--line);
  color:var(--text-2); line-height:1.58;
}
.mayorista__lista svg{ color:var(--accent); margin-top:.18rem }
.mayorista__lista b{ color:var(--text); font-weight:600 }
/* ⚠ LA SEGUNDA SALIDA DEL FORMULARIO. Va debajo de la nota y en voz baja: el camino principal es el formulario —seis datos ordenados que Jefra puede leer en la bandeja— y esto es para el que no llena formularios. Subrayado y no botón, que competiría con el que acaba de leer. */
.form__otro{
  margin:.75rem 0 0; text-align:center;
  font-size:.9rem; color:var(--text-2);
}
.form__otro a{
  color:var(--oro); text-decoration:underline;
  text-underline-offset:.22em; text-decoration-thickness:1px;
}
@media (hover:hover){ .form__otro a:hover{ color:var(--accent) } }

/* ⚠ DOS RENGLONES RESERVADOS EN LOS CUATRO PASOS DEL CAMINO (2026-08-31): «El estacionamiento» es la única de las cuatro que se parte en dos, y sin la reserva sus párrafos arrancaban 28 px más abajo que los de las vecinas — cuatro columnas iguales con los textos escalonados se leen como un error de maquetado. `lh` es la altura de línea de este h3 y el `em` queda de respaldo. */
.camino__paso h3{ min-height:2.3em; min-height:calc(2lh) }
@media (max-width:860px){ .camino__paso h3{ min-height:0 } }
.form__titulo{
  font-family:var(--display); font-weight:400; text-transform:uppercase;
  font-size:clamp(1.15rem,2.3vw,1.5rem);
  margin:0 0 1.2rem; letter-spacing:.06em;
}

/* ⚠ 16 px como piso en todo lo que se escribe: con menos, iOS hace zoom solo al tocar el campo, la página queda corrida a la derecha y el que estaba llenando el formulario tiene que arrastrar para volver. Es el único número que apaga ese comportamiento. */
.field input, .field select, .field textarea{ font-size:16px }

/* El anillo de foco: el segundo y último uso del celeste del logo. */
:where(a, button, input, select, textarea, [tabindex]):focus-visible{
  outline:2px solid var(--celeste); outline-offset:3px;
}


/* ══ LA BARRA DE ABAJO, SÓLO EN EL TELÉFONO ══ `#mayorista` es la sección que deja plata y estaba enterrada a seis pantallas de scroll: en 375 px el visitante decide en los primeros diez segundos, y hasta ahora las dos acciones —comprar y vender— vivían sólo arriba de todo y sólo al final. Dos botones y no tres, que convertirían la barra en un menú. Y hay que mover lo que ya estaba abajo: el flotante de WhatsApp se apaga —su función pasó al botón «Comprar», que es el mismo enlace— y el sello de demo sube por encima. */
.barra-pie{ display:none }
@media (max-width:760px){
  .barra-pie{
    display:grid; grid-template-columns:1fr 1fr; gap:.55rem;
    position:fixed; left:0; right:0; bottom:0; z-index:870;
    padding:.6rem .7rem calc(.6rem + env(safe-area-inset-bottom,0px));
    background:color-mix(in srgb, var(--bg) 92%, transparent);
    backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    border-top:1px solid var(--line-strong);
    transform:translateY(110%);
    transition:transform .45s var(--ease);
  }
  .barra-pie.is-visible{ transform:none }
  .barra-pie a{
    display:grid; place-items:center; min-height:48px;
    padding:.7rem .5rem; border-radius:var(--radius);
    font-size:.95rem; font-weight:600; letter-spacing:-.01em;
    text-decoration:none; line-height:1.15; text-align:center;
  }
  .barra-pie__wa{ background:#25D366; color:#08150C }
  .barra-pie__mayor{ background:var(--accent); color:var(--on-accent) }
  .wa{ display:none }
  .sello-demo{ bottom:calc(4.4rem + env(safe-area-inset-bottom,0px)) }
  .footer{ padding-bottom:calc(5.2rem + env(safe-area-inset-bottom,0px)) }
}
@media (prefers-reduced-motion:reduce){ .barra-pie{ transition:none } }


/* ══ EL DINAMISMO ══ Los estados de arranque de todo lo que anima vivo.js. Van acá y no en el JS por lo de siempre: cada regla pregunta por una marca que ESCRIBE EL JS (`data-vivo`, `data-mask`), así que si el script no llega no queda nada escondido y la página se ve entera y quieta. */
[data-vivo] .es-pieza{ will-change:transform, opacity }

/* El numeral del ambo, con máscara vertical: `clip-path` con un `inset` simple lo compone la placa igual que un transform; lo que no entra acá es `filter`, que obliga a rasterizar de nuevo. */
[data-mask] .eyebrow__n{
  clip-path:inset(105% 0 0 0);
  transform:translate3d(0,.16em,0);
}
[data-mask].esta .eyebrow__n{
  clip-path:inset(0 0 0 0);
  transform:none;
  transition:clip-path .62s var(--ease) .05s, transform .62s var(--ease) .05s;
}
@media (prefers-reduced-motion:reduce){
  [data-mask] .eyebrow__n{ clip-path:none; transform:none }
}

/* ══ EL PULSO DEL BOTÓN DE MAYORISTA ══ Una sola vez, cuando la sección entra: uno que late todo el tiempo se lee a banner y se deja de ver a los diez segundos; uno que late una vez se lee como que algo pasó ahí. */
@keyframes pulsoUnico{
  0%   { transform:scale(1) }
  38%  { transform:scale(1.035) }
  100% { transform:scale(1) }
}
.btn.pulso-unico{ animation:pulsoUnico .72s cubic-bezier(.34,1.3,.4,1) }
@media (prefers-reduced-motion:reduce){ .btn.pulso-unico{ animation:none } }


/* ══ LAS PREGUNTAS QUE CRUZAN LA PANTALLA ══ Cada una entra por un costado y sale por el otro, atada al scroll; el tween lo hace `preguntasCruzan` y acá va sólo lo que tiene que ser verdad ANTES de que ese archivo llegue. Sin JavaScript no se esconde nada —no hay ni un `opacity:0`— y las siete se ven enteras y quietas. Y la que está abierta no se mueve: si alguien despliega una respuesta y el bloque se le va de costado mientras la lee, el efecto le sacó lo único que había ido a buscar. */
/* ⚠ Las preguntas tienen más aire que antes y el motivo no es de gusto: sin espacio no hay salida. Una pregunta sólo puede irse por arriba si queda página abajo para empujarla, y seis renglones de 64 px entran enteros en una pantalla — medido, ninguna de las seis alcanzaba a salir y el efecto quedaba en sólo entrar. Y de paso un acordeón apretado obliga a apuntar entre dos renglones para tocar el que uno quiere. */
[data-preguntas] details{
  padding-block:clamp(1.35rem,3.2vh,2.4rem);
  will-change:transform, opacity;
}
/* ⚠ ACÁ HABÍA UNA COLA DE 44vh Y SE FUE EL 2026-08-31, cuando las preguntas dejaron de ser la última sección. La cola existía porque una pregunta sólo puede irse por arriba si queda página abajo para empujarla, y con el pie a un dedo de la última no quedaba nada: había que fabricar ese recorrido con relleno. Ahora abajo hay una sección entera —«Para revender», con su formulario—, así que el recorrido lo pone la página y el relleno pasó a ser un pozo negro de 400 px en el medio del scroll. La cuenta vieja sigue valiendo si alguna vez vuelven al final: cada 76 px de cola era una pregunta más que alcanzaba a cruzar. */
/* ⚠ Esta regla congelaba la primera pregunta para siempre (2026-08-29): decía `details[open]` a secas y con `!important`, y la primera VIENE con `open` desde el HTML, así que la única que nunca cruzaba era la que más gente ve. Lo que hay que congelar no es «la que está abierta» sino «la que ABRIÓ ALGUIEN»: la clase `a-mano` la pone `preguntasCruzan` con un `pointerdown` o un Enter sobre el <summary>, que es lo único que garantiza que hay una persona del otro lado. */
[data-preguntas] details.a-mano[open]{ transform:none !important; opacity:1 !important }
@media (prefers-reduced-motion:reduce){
  [data-preguntas] details{ transform:none !important; opacity:1 !important; will-change:auto }
}


/* ══ EL FORMULARIO QUE ENTRA DE COSTADO ══ Lo mueve vivo.js; acá va sólo la promesa de composición — el `will-change` se pone en el CSS y lo saca el JS al terminar, para que la capa no quede viva el resto de la página. Y entra el panel entero, no campo por campo: seis campos escalonados son un formulario que se arma solo delante del que lo va a llenar y no se puede empezar a escribir hasta que termina. */
[data-forma-lado]{ will-change:transform, opacity }


/* ══ LOS PÁRRAFOS DE «SOY YESI», ENTRANDO POR LOS COSTADOS ══ El `overflow` ya está en `.historia` y es lo que hace que esto no abra una barra horizontal, porque los párrafos arrancan 46 px afuera de su lugar. Es `overflow` en una SECCIÓN, no en `html` ni en `body`: la regla dos del proyecto sigue intacta. */
[data-lados] > *{ will-change:auto }


/* ══ `.renglones` — UN PÁRRAFO QUE ENTRA DE A UN RENGLÓN ══ Reemplaza a un `.lectura` que no se veía (2026-08-29): ése enciende palabra por palabra ATADO AL SCROLL, entre «top 92%» y «top 52%», así que el que baja a ritmo normal cruzaba el párrafo entero con media frase apagada — no estaba roto, estaba mal elegido para ese lugar. Esto entra UNA vez, de a un renglón desde abajo de un filo, y termina siempre. El filo es el `overflow:hidden` de cada renglón y no del párrafo —si no, el renglón de abajo se ve viajar por delante del de arriba— y los renglones los arma el JS midiendo, después de que llegó la tipografía. */
.renglones .rg-l{ display:block; overflow:hidden }
.renglones .rg-i{ display:block; will-change:transform }
.renglones.listo .rg-i{ will-change:auto }


/* ══ EL PANEL DE FOTO ══ La pieza que comparten «de dónde sale» y «dónde se consigue»: una foto que entra destapándose desde abajo con `clip-path:inset()`, igual que el numeral del ambo, y que después se queda quieta. Es la misma forma simple que la placa compone como un transform; nada de `filter`. El estado tapado lo pone el JS con `data-panel`, así que sin JavaScript las dos fotos se ven enteras. */
.panel-foto{
  position:relative; margin:0;
  overflow:hidden; border-radius:var(--radius);
  border:1px solid var(--line);
  box-shadow:var(--sombra-panel);
}
/* ⚠ 107 % Y NO 114 (2026-08-31), Y ES LA MISMA CUENTA DE SIEMPRE: estas fotos llevan `data-parallax-foto="5"`, o sea que se corren 2,5 % para cada lado; con 7 % de sobrante alcanza y sobra. Con 14 % se recortaba el doble de lo necesario y era la mitad de lo que Jope vio como «la imagen está recortada» — la otra mitad era el zoom automático de motor.js, que ahora estas dos frenan con un `data-zoom` escrito a mano. */
.panel-foto img{
  display:block; width:100%; height:107%;
  object-fit:cover;
  position:relative; top:-3.5%;
  will-change:transform;
}
/* El velo del borde inferior: las dos fotos tienen luz cálida abajo y el filo blanco contra el negro de la página se lee como un corte. */
.panel-foto::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(180deg, transparent 62%, rgba(5,18,11,.42) 100%);
}
[data-panel] .panel-foto{ clip-path:inset(100% 0 0 0) }
[data-panel] .panel-foto.entro{
  clip-path:inset(0 0 0 0);
  transition:clip-path 1.05s var(--ease-mat);
}
@media (prefers-reduced-motion:reduce){
  [data-panel] .panel-foto{ clip-path:none }
}


/* ══ DE DÓNDE SALE — LA CABECERA ══ Dos columnas: el título a la izquierda y la escena a la derecha. La foto va acá arriba y no adentro de un paso porque no hay foto de la chacra ni del secado, y los cuatro pasos siguen siendo texto en fila, con su línea, sin tocar una sola medida de `caminoAvanza`. */
/* ⚠ LA CABECERA YA NO ES DE DOS COLUMNAS (2026-09-01). Tenía el título
   a la izquierda y una foto a la derecha, las dos apoyadas en la misma
   línea de abajo. Desde que las fotos son dos, no entran al costado del
   título: en un contenedor de 1176 el par quedaría en 340 px por foto y
   eso es la miniatura que Jope ya había rechazado una vez. Así que el
   título toma su renglón y el par toma el suyo, a todo el ancho. */
.origen__cab{ display:block }
/* ⚠ LAS DOS DEL MISMO ANCHO Y CON UN HUECO CHICO. Son las dos puntas
   del mismo camino —la hoja y el paquete—, así que ninguna manda: con
   `1fr 1fr` miden lo mismo, y el hueco es la mitad del que separa las
   secciones para que se lean como UNA pieza de dos partes y no como dos
   fotos sueltas que quedaron al lado. */
.origen__par{
  display:grid; grid-template-columns:1fr 1fr;
  gap:clamp(.9rem,1.8vw,1.75rem);
  margin-top:clamp(1.6rem,3.4vw,2.6rem);
}
.origen__intro .h2{ margin-bottom:0 }
.origen__foto{ aspect-ratio:3/2 }
@media (max-width:900px){
  /* En el teléfono las fotos van DESPUÉS del título y antes de los pasos: el orden de lectura no cambia y no parten la frase en dos.
     ⚠ Y SE APILAN, no quedan en dos columnas. En 390 px de ancho dos columnas dejan cada foto en 188 px, que es la miniatura que Jope ya rechazó una vez en esta misma sección. Apiladas cada una toma el ancho entero y el orden sigue diciendo lo mismo: primero la hoja, después el paquete. */
  .origen__par{ grid-template-columns:1fr; gap:clamp(.9rem,3vw,1.4rem) }
  .origen__foto{ aspect-ratio:16/10 }
}


/* ══ DÓNDE SE CONSIGUE — LISTA Y LOCAL ══ La lista en una columna y la dietética al lado. En dos columnas los seis renglones se leían como una tabla con un hueco y la mitad derecha de la sección era negro vacío. */
/* ⚠ .78fr y no .92: con la columna más ancha la caja de la foto medía 653 px y el archivo de 960 la cubría 1,47×, por debajo del 1,6× que pide la regla. Medido: a .78 la caja queda en 591 px y la cobertura en 1,62×. Achicar la caja sale gratis; agrandar el archivo son 0,6 MB de memoria en un teléfono. */
.donde__grid{
  display:grid; align-items:start;
  grid-template-columns:minmax(0,1fr) minmax(0,.78fr);
  gap:clamp(2rem,5vw,4.5rem);
  margin-top:clamp(1.8rem,4vw,3rem);
}
.donde__grid .donde__lista{
  grid-template-columns:1fr; margin-top:0;
}
.donde__foto{ aspect-ratio:4/3; position:sticky; top:clamp(5rem,12vh,8rem) }
@media (max-width:900px){
  .donde__grid{ grid-template-columns:1fr; gap:clamp(1.6rem,4vw,2.2rem) }
  .donde__foto{ position:static; aspect-ratio:16/10 }
}


/* ══ PREGUNTAS — EL PANEL DE AL LADO ══ La mitad derecha era negro vacío. Una lista de preguntas es lo último que lee el que está por decidir: si la suya no está, la salida tiene que quedarle a la vista mientras baja, y por eso el panel es `sticky`. */
.preguntas__grid{
  display:grid; align-items:start;
  grid-template-columns:minmax(0,1fr) minmax(0,.46fr);
  gap:clamp(2rem,5vw,4rem);
}
.preguntas__lado{ position:sticky; top:clamp(5rem,14vh,9rem) }
.preguntas__panel{
  background:var(--vidrio); border:1px solid var(--line);
  border-radius:var(--radius); padding:clamp(1.2rem,2.2vw,1.7rem);
  box-shadow:var(--sombra-panel);
}
.preguntas__foto{
  margin:0 0 1.2rem; overflow:hidden; border-radius:var(--radius);
  aspect-ratio:4/3;
}
.preguntas__foto img{ width:100%; height:100%; object-fit:cover; display:block }
.preguntas__titulo{
  font-family:var(--display); font-weight:400; text-transform:uppercase;
  font-size:clamp(1.15rem,2.2vw,1.45rem); letter-spacing:.05em;
  margin:0 0 .6rem;
}
.preguntas__panel p{
  margin:0 0 1.2rem; color:var(--text-2);
  font-size:.97rem; line-height:1.6;
}
@media (max-width:960px){
  .preguntas__grid{ grid-template-columns:1fr; gap:clamp(2rem,5vw,2.6rem) }
  .preguntas__lado{ position:static }
  /* Apilado, la foto del panel es la tercera imagen seguida en la misma pantalla y no aporta nada: queda el texto y el botón, que es lo que hace falta. */
  .preguntas__foto{ display:none }
}


/* ══ LOS TÍTULOS, POR MODO ══ Los tres modos de bloque mueven el h2 entero y por eso NO pueden llevar el `overflow:hidden` de `.entra`: ese filo existe para que una palabra se descubra subiendo, y un título que llega de costado se cortaría contra el borde de su propia caja. Los dos modos por palabra lo conservan. */
.entra[data-entra="izq"],
.entra[data-entra="der"],
.entra[data-entra="zoom"]{ overflow:visible }
/* ⚠ El que entra de costado necesita de dónde salir sin abrir una barra horizontal. Lo recortan `body{overflow-x:clip}` de base.css y el `overflow:hidden` que ya tienen `.historia` y las secciones con panel; es `overflow` en el body y en una sección, nunca en `html`. */
.entra[data-entra="izq"],
.entra[data-entra="der"]{ will-change:transform }
.entra.entro{ will-change:auto }


/* ══ EL BLOQUE QUIETO — CADA PASO EN SU CUADRO ══ Los tres pasos pasaron de tres columnas de texto suelto a tres cuadros de oro muy diluido. El oro acá NO rompe la regla 1 de la paleta —«el oro es luz, no relleno»— porque no es una superficie de oro: es un velo del 4-12 % sobre el verde monte, que sigue leyéndose oscuro y sólo marca el borde de cada pieza. Medido sobre el compuesto más cargado (el 12 % de arriba, #1C2213): el texto secundario queda en 12,2:1, el título en 15,8:1 y el numeral de oro en 6,3:1. */
.simple__paso{
  padding:clamp(1.25rem,2.4vw,1.9rem);
  border:1px solid rgba(197,155,75,.30);
  border-radius:var(--radius);
  background:
    linear-gradient(168deg, rgba(197,155,75,.12) 0%, rgba(197,155,75,.04) 62%, rgba(197,155,75,.07) 100%);
  transition:transform .5s var(--ease-mat), border-color .5s var(--ease);
}
/* La raya que se traza sigue estando y ahora corre por ARRIBA del cuadro, de esquina a esquina: es el borde de la tarjeta el que se enciende. */
.simple__paso::before{ left:-1px; right:-1px; top:-1px; height:2px }

/* ⚠ EL HALO ES UN PSEUDO QUE SÓLO CAMBIA DE `opacity`, Y ES LA REGLA 7: la sombra está dibujada de una vez y quieta, y lo que se anima es cuánto se ve. Animar el `box-shadow` en sí —que es lo que hacía esto hasta el 2026-08-30— obliga al navegador a volver a pintar el desenfoque en cada cuadro, y son tres cuadros a la vez en un teléfono. */
.simple__paso::after{
  content:''; position:absolute; inset:-1px; border-radius:var(--radius);
  box-shadow:0 16px 46px -18px rgba(197,155,75,.55);
  opacity:0; pointer-events:none;
}
/* ⚠ EL DINAMISMO NO ES SÓLO HOVER, y ése es el punto: en un teléfono `(hover:hover)` no existe y los tres cuadros se quedarían quietos. Al entrar, cada uno levanta su propio halo de oro y lo baja solo — pasa una vez, con el turno que ya reparte `unaAUna`. */
.simple__pasos.turnos .simple__paso.entro::after{ animation:pasoHalo 1.5s var(--ease) .34s both }
@keyframes pasoHalo{
  0%   { opacity:0 }
  38%  { opacity:1 }
  100% { opacity:.34 }
}
@media (hover:hover){
  .simple__paso::after{ transition:opacity .5s var(--ease) }
  .simple__paso:hover{
    transform:translate3d(0,-5px,0);
    border-color:rgba(197,155,75,.52);
  }
  .simple__paso:hover::after{ opacity:1 }
}
@media (prefers-reduced-motion:reduce){
  .simple__pasos.turnos .simple__paso.entro::after{ animation:none }
  .simple__paso{ transition:none }
}


/* ══ LAS TRES TARJETAS — TEXTO Y FOTO SEPARADOS ══ ⚠ ACÁ HABÍA CUATRO RENGLONES RESERVADOS (`min-height:calc(4lh)`) para que las tres fotos arrancaran a la misma altura, y se fueron el 2026-08-31: desde que la foto se va al pie con `margin-top:auto`, las tres apoyan solas en la misma línea y reservar renglones sólo estiraba la tarjeta de más. El aire lo pone el `margin-top:auto`, no un mínimo escrito a mano. */
/* ⚠ LA HAIRLINE VIVE EN EL PÁRRAFO Y NO EN LA FOTO, y es por una cuenta que no se ve: la <img> está en `position:absolute`, así que su `height:107%` se mide contra la CAJA DE RELLENO de la figura — con el borde y su aire adentro, el 107 % se convertía en un 120 % y `cover` volvía a comerse los costados, que es lo que se estaba arreglando. Con la línea en el párrafo, la figura es un 3:2 limpio y el 107 % vale lo que dice. Y el aire lo pone `margin-top:auto`, que además manda la foto al PIE de la cara: las tres apoyan en la misma línea midan lo que midan los textos. */
.distinta__caja p{
  padding-bottom:clamp(1.1rem,2vw,1.5rem);
  border-bottom:1px solid var(--line);
}
.distinta__foto{ margin-top:auto; border-radius:0 }
.distinta__foto img{ border-radius:var(--radius) }



/* ══ DÓNDE SE CONSIGUE — LAS TILDES ══ Cada localidad lleva su tilde de oro. No es decoración: cinco nombres en versales sin una sola marca al lado se leen como un índice, y con la tilde se leen como una lista de lugares CONSEGUIDOS, que es lo que la sección dice. */
.donde__item{
  display:grid; grid-template-columns:auto 1fr;
  align-items:center; column-gap:clamp(.7rem,1.4vw,1.05rem);
}
.donde__tilde, .donde__flecha{
  color:var(--accent); flex:0 0 auto;
  transition:transform .62s var(--ease), opacity .4s var(--ease);
}
/* ⚠ EL ESTADO TAPADO VA DETRÁS DE `data-tildes`, QUE LA ESCRIBE `localidades()`. Sin esa marca —o sea, el día que `vivo.js` no cargue— las seis tildes se ven enteras y quietas. Es la regla de siempre: la marca es el permiso para esconder algo, y el que esconde tiene que ser el mismo que puede volver a mostrar. */
[data-tildes] .donde__tilde,
[data-tildes] .donde__flecha{ transform:scale(.55) rotate(-12deg); opacity:0 }
/* ⚠ La tilde llega DESPUÉS que el nombre, no con él: el nombre sube desde el filo en 0,8 s y la tilde entra a los 0,34 — se lee como que primero aparece el lugar y después se confirma. */
[data-tildes] .donde__item.entro .donde__tilde,
[data-tildes] .donde__item.entro .donde__flecha{
  transform:none; opacity:1;
  transition-delay:.34s;
}
@media (hover:hover){
  .donde__item:hover .donde__tilde{ color:var(--oro) }
}

/* ── EL SEXTO RENGLÓN ── No lleva tilde sino flecha, porque no es un lugar conseguido: es la invitación. Y la flecha se corre, que es lo único de la lista que se mueve al pasarle el dedo o el puntero. */
.donde__item--mas a{
  display:grid; grid-template-columns:auto 1fr;
  align-items:center; column-gap:clamp(.7rem,1.4vw,1.05rem);
}
.donde__flecha{ color:var(--oro) }
.donde__item--mas.entro .donde__flecha{
  animation:flechaLate 2.6s var(--ease) 1.1s 2;
}
@keyframes flechaLate{
  0%,100% { transform:translate3d(0,0,0) }
  22%     { transform:translate3d(7px,0,0) }
  44%     { transform:translate3d(0,0,0) }
}
@media (hover:hover){
  .donde__item--mas a:hover .donde__flecha{ transform:translate3d(7px,0,0) }
}
@media (prefers-reduced-motion:reduce){
  .donde__tilde, .donde__flecha{ transform:none; opacity:1; transition:none; animation:none }
}


/* ══════════════════════════════════════════════════════════════════
   «LA RESERVA ORGÁNICA» — LO QUE CAMBIÓ EL 2026-08-31
   Cuatro cosas, y las cuatro están acá abajo para poder volverlas atrás
   de una: las secciones claras, las transiciones entre secciones, el
   difuminado del video de portada y los bordes de oliva.
   ══════════════════════════════════════════════════════════════════ */

/* ── 1 · LAS SECCIONES CLARAS ────────────────────────────────────
   ⚠ NO SE PINTA UN FONDO: SE DAN VUELTA LOS TOKENS. La sección
   redefine `--bg`, `--text`, `--line` y compañía para sus hijos, así
   que las reglas que ya usaban variables —el ambo, las hairlines, los
   campos, los botones— se acomodan solas y no hay que escribir una
   versión clara de cada componente. Lo único que se escribe a mano es
   lo que tenía un color literal.

   ⚠ Y EL ORO CAMBIA DE TONO, NO DE IDEA: el oro viejo #C59B4B sobre
   crema da 2,49:1 y como texto es ilegible. Adentro de una sección
   clara el acento pasa a #6E5320 —el mismo oro bajado de valor—, que
   da 6,96:1. Es la única manera de que la paleta sea la misma en las
   dos superficies sin dejar un renglón que no se lee. */
.seccion--claro{
  --bg:          var(--crema);
  --bg-2:        var(--crema-2);
  --surface:     var(--crema-2);
  --surface-2:   var(--crema-3);
  --line:        rgba(74,83,60,.22);
  --line-strong: rgba(74,83,60,.40);

  --text:        #05120B;
  --text-2:      #3A4438;
  --muted:       #6B7263;

  --accent:      #6E5320;
  --accent-2:    #8A6A2C;
  --on-accent:   #FDFBF7;
  --oro:         #7A5C22;
  --oro-luz:     #A8842F;
  --glow:        rgba(110,83,32,.20);
  --glow-soft:   rgba(110,83,32,.08);

  --vidrio:        linear-gradient(165deg,rgba(74,83,60,.05),rgba(74,83,60,.015));
  --vidrio-fuerte: linear-gradient(165deg,rgba(74,83,60,.09),rgba(74,83,60,.03));
  --campo-bg:      rgba(253,251,247,.75);
  --sombra-panel:  0 30px 70px -46px rgba(5,18,11,.45);

  background:var(--crema);
  color:var(--text);
  position:relative; z-index:1;
}
.seccion--claro .h2,
.seccion--claro .h3,
.seccion--claro h3{ color:var(--text) }
/* El velo de las fotos de panel está pensado contra un fondo oscuro; sobre crema, oscurecerle el pie a la foto la despega de la página en vez de fundirla. */
.seccion--claro .panel-foto::after{ background:none }
.seccion--claro .panel-foto{ border-color:rgba(74,83,60,.30) }

/* ── 2 · LAS TRANSICIONES ENTRE SECCIONES ────────────────────────
   ⚠ NINGÚN BORDE DURO EN TODA LA PÁGINA. Entre dos superficies
   distintas va una banda de degradado que empieza en el color de la
   sección anterior y termina en el de la propia; entre dos secciones
   del mismo verde va una hairline que se apaga en las puntas, que es
   lo mismo que hacía el borde recto pero sin el filo que cortaba el
   ancho de la pantalla en dos.
   Son pseudo-elementos quietos, sin `filter` y sin nada que se anime:
   no cuestan un cuadro. */
/* ⚠ LA BANDA VA DE UN COLOR AL OTRO, NUNCA A `transparent`. Un degradado de verde a transparente sobre crema pasa por el gris —el alfa mezcla los dos en el medio y el resultado es sucio, se lee como una mancha de humo—; escribiendo los DOS colores, la banda recorre el verde hasta la crema sin pasar por ningún tono que no sea de la paleta.
   Y son cinco paradas y no dos: un degradado lineal de 120 px entre dos colores tan separados se banda en escalones visibles, y las paradas intermedias curvan el reparto lo suficiente para que no se vean. */
.seccion--claro::before,
.seccion--claro::after{
  content:''; position:absolute; left:0; right:0;
  height:clamp(90px,11vw,190px); pointer-events:none; z-index:0;
}
.seccion--claro::before{
  top:0;
  background:linear-gradient(180deg,
    #05120B 0%, #0B1A12 18%, #35402F 46%, #9EA48F 72%, #E4E2D8 89%, var(--crema) 100%);
}
.seccion--claro::after{
  bottom:0;
  background:linear-gradient(0deg,
    #05120B 0%, #0B1A12 18%, #35402F 46%, #9EA48F 72%, #E4E2D8 89%, var(--crema) 100%);
}
/* El contenido va por encima de las dos bandas. */
.seccion--claro > *{ position:relative; z-index:1 }

/* ⚠ LAS SOMBRAS DE TEXTO SE APAGAN EN LAS SECCIONES CLARAS. `base.css` le pone una sombra oscura a todo párrafo y a todo título, y ahí es correcto: el texto va sobre un fondo animado y esa sombra es lo que le fija el piso de contraste. Sobre crema, la misma sombra es un borrón gris alrededor de cada palabra — se lee como una impresión corrida. */
.seccion--claro .h1, .seccion--claro .h2, .seccion--claro .h3,
.seccion--claro p, .seccion--claro .lead,
.seccion--claro summary, .seccion--claro b, .seccion--claro span{ text-shadow:none }

/* Las tarjetas del bloque quieto, en versión clara: el mismo velo de oro pero al doble de diluido —sobre crema, el 12 % se lee como una mancha— y el borde en oliva seco, que es lo que las dibuja. */
/* ⚠⚠ EL CARTEL ES UN CUADRO DE VERDE TRASLÚCIDO Y NO UNA CAJA CON BORDE (2026-08-31, pedido de Jope: «los bordes no me gustan, hazlo más redondeado y que sean todo el cuadro traslúcido color verde»). Se fue el borde de 1 px —era lo que lo hacía leer como una caja de formulario— y lo que dibuja la pieza ahora es el velo: 20 % de su verde arriba, 9 % en el medio y 14 % abajo, sobre la crema.
   ⚠ EL RADIO NO SALE DE `--radius`, y es la segunda excepción del sistema después del botón de WhatsApp: la marca entera va en esquina viva de 2 px, y estos tres van en 16-26 px. Un cuadro relleno con esquina viva se lee como un bloque de texto resaltado; con la esquina redonda se lee como una pieza.
   Medido sobre el peor compuesto —#C8CDC6, el del verde monte al 22 %—: el texto secundario da 6,3:1, el título 11,8:1 y el numeral 9,6:1. */
.seccion--claro .simple__paso{
  border:0;
  border-radius:clamp(16px,2.4vw,26px);
  background:linear-gradient(168deg,
    color-mix(in srgb, var(--tono) 22%, transparent) 0%,
    color-mix(in srgb, var(--tono) 10%, transparent) 62%,
    color-mix(in srgb, var(--tono) 16%, transparent) 100%);
}
/* ⚠ LA RAYA QUE SE TRAZA PASA A SER UNA BARRA CORTA, y es por el radio: una raya de esquina a esquina sobre un cuadro redondeado corta las dos curvas y se ve como un error de dibujo. Corta y metida adentro del margen, cae justo encima del numeral y sigue siendo la misma animación de `scaleX`. */
.seccion--claro .simple__paso::before{
  left:clamp(1.25rem,2.4vw,1.9rem); right:auto;
  top:clamp(1.25rem,2.4vw,1.9rem);
  width:2.4rem; height:2px;
}
/* El halo y la luz que cruza siguen el mismo radio que el cuadro. */
.simple__paso::after,
.paso__luz{ border-radius:inherit }
.seccion--claro .simple__paso::after{ box-shadow:0 16px 40px -20px rgba(5,18,11,.35) }
.seccion--claro .simple__paso::before{ background:var(--accent) }

/* La hairline que se apaga en las puntas, para los pasos de verde a verde. Reemplaza a los `border-block` rectos de «Los blends» y «Para revender». */
.blends, .mayorista{ border-block:0 }
.blends::before, .blends::after,
.mayorista::before, .mayorista::after{
  content:''; position:absolute; left:0; right:0; height:1px;
  background:linear-gradient(90deg, transparent, var(--line-strong) 22%, var(--line-strong) 78%, transparent);
  pointer-events:none;
}
.blends::before, .mayorista::before{ top:0 }
.blends::after,  .mayorista::after{ bottom:0 }

/* ── 3 · EL VIDEO DE PORTADA SE FUNDE CON LA PÁGINA ──────────────
   ⚠ ES UNA MÁSCARA, NO UN DEGRADADO ENCIMA. Un overlay pinta el color
   de la página sobre el video y funciona sólo si abajo hay ese mismo
   color plano; la máscara recorta el video de verdad, así que lo que
   aparece del otro lado es el fondo real —el verde, las vetas y el
   clima— y el borde deja de existir en lugar de quedar tapado.
   Dos gradientes cruzados con `intersect`: uno se lleva el lateral
   izquierdo, donde vive el titular, y el otro la base. Se declara la
   versión `-webkit-` primero porque Safari sigue pidiéndola. */
.banda--video video,
.banda--video img{
  -webkit-mask-image:
    radial-gradient(88% 52% at 0% 53%, transparent 0%, transparent 34%,
      rgba(0,0,0,.55) 64%, #000 96%),
    linear-gradient(180deg, #000 0%, #000 86%, transparent 100%);
  mask-image:
    radial-gradient(88% 52% at 0% 53%, transparent 0%, transparent 34%,
      rgba(0,0,0,.55) 64%, #000 96%),
    linear-gradient(180deg, #000 0%, #000 86%, transparent 100%);
  -webkit-mask-composite:source-in;
  mask-composite:intersect;
}
/* ⚠ ACÁ NO VA NINGÚN VELO, Y ES A PROPÓSITO (2026-09-01).
   Hubo dos intentos antes: primero dos degradados de punta a punta
   —la portada daba 5,2 % de luminancia media y se leía como un filtro
   verde encima de una foto que es casi toda crema—, y después un
   radial debajo del titular, que subió a 11,1 % pero seguía siendo un
   velo. Lo que pidió la dueña es la foto como es, sin filtro.

   Entonces el titular no se sostiene tapando la foto: se sostiene
   donde la foto TODAVÍA NO EMPEZÓ. Eso lo hace la máscara de acá
   arriba, que deja pasar el fondo de la página hasta el 30 % y recién
   entrega la foto entera en el 68 %. Y no se pierde nada: en esta toma
   el lado izquierdo es una pared crema vacía, y el mate arranca en el
   66 %. O sea que lo que la máscara se lleva es el vacío, y el sujeto
   queda entero y sin tocar.

   Medido a 1440: luminancia 12,1 % (contra 5,2 del primer intento),
   crema 6,27:1 y oro 3,67:1 en el percentil 1. Un solo píxel de toda
   la portada queda abajo de 3:1, y está sobre el mate, no sobre una
   letra: es ruido de que el video avanzó un cuadro entre las dos
   capturas de la medición. */
/* En el teléfono la máscara sólo se lleva la base: a 375 px sacarle el
   28 % izquierdo al video es sacarle el video.

   ⚠ EL RECORTE VA AL 68 %. El teléfono no baja el video: lo único que
   se ve es el póster, y el póster es apaisado con el mate a la DERECHA
   y el lado izquierdo casi vacío. En una caja vertical se ve apenas el
   23 % del ancho del cuadro: con `center` eso es el fondo desenfocado
   y la portada del teléfono queda SIN PRODUCTO. Con 68 % entra el mate
   con su virola grabada. Medido acá: crema 7,36:1 y oro 5,80:1.

   ⚠ Y ACÁ SÍ HAY UNA BANDA, aunque en la computadora no haya nada.
   No es una excepción caprichosa: en la computadora el titular se
   sostiene porque la máscara le entrega el fondo de la página hasta el
   68 % del ancho, y el texto vive en esa mitad. En un teléfono el
   titular cruza el ancho ENTERO —no hay mitad libre a la que
   correrlo—, así que abajo del texto hay foto sí o sí. La banda es lo
   más chico que la deja leer: horizontal, centrada en el texto, y se
   apaga antes del mate. Sin ella el oro da 1,4:1. Y la máscara vertical
   baja recién en el 84 % para no comerse la marca del mate. */
@media (max-width:760px){
  /* ⚠ EL TEXTO SUBE PARA DEJAR VER LA YERBA (2026-09-05, lo pidió Jope).

     `.hero` es una columna centrada, así que el bloque de texto cae
     justo en el medio de la pantalla — y en el medio, con el encuadre
     nuevo, está la boca del mate: la yerba queda tapada por el titular.
     Medido en el teléfono: la yerba se dibuja entre los 375 y los 435 px
     del alto de la portada, y el titular ocupaba de 282 a 428.

     Se sube con `padding-bottom`, no con un `transform` ni con
     `justify-content:flex-start` + un `padding-top` a ojo: al centrado
     se le achica el espacio por abajo y el bloque sube solo, sin dejar
     de estar centrado en lo que queda. Así sigue funcionando en
     cualquier alto de pantalla.

     ⚠ VA EN `svh` Y NO EN PÍXELES. Con un valor fijo, en un teléfono
     chico (667 px de alto) esos píxeles son la mitad de la portada y el
     texto se sale por arriba. En `svh` el empujón es proporcional.

     ⚠ Y NO SE PUEDE DESPEJAR TODO EL BLOQUE. Mide 437 px y la franja de
     la yerba está a 375: para que ni la bajada ni los botones la
     rozaran, el bloque tendría que arrancar en negativo. Lo que se
     despeja es el TITULAR, que es lo que se leía como «tapa la yerba»;
     la bajada queda apoyada en el filo de la virola, que es plata y no
     hoja. */
  .hero{ padding-bottom:19svh }

  /* ⚠ SIN SOBRANTE EN EL TELÉFONO. El `top:-6% / height:112%` de arriba
     existe para que el parallax tenga de dónde correrse; en el teléfono
     el parallax ya no corre (ver el script del cuerpo), así que ese 12 %
     sólo estaba agrandando la foto. Sacándolo, la escala baja de 1,199 a
     1,071 y se ve más ancho de la toma con el mismo encuadre. */
  .banda--video video,
  .banda--video img{ top:0; height:100% }

  /* ⚠ 86 % Y NO 68 % (2026-09-05, lo vio Jope: «está cortada en JEF»).

     La foto es 16:9 y la portada de un teléfono es casi 2:5. Con
     `cover`, de los 1400 px de ancho de la foto se ven 325 en una
     pantalla de 390: el 23 %. Lo único que se puede elegir es DÓNDE cae
     esa ventana, y al 68 % caía justo sobre las letras: entraba «JEF» y
     la marca quedaba partida al medio, que se lee como un error de
     maquetación y no como un encuadre.

     Medido recortando la foto de verdad a esos 325 px: al 50 % se ve la
     pared vacía; al 70 % entra «JEF»; al 78 % se corta la «A»; al 86 %
     entran el mate entero, la marca completa y la bombilla. Más a la
     derecha se empieza a comer el mate por el otro lado.

     ⚠ NO SE ARREGLA CON UNA FOTO NUEVA: el mate mide 400 px de los
     1400 y la ventana mide 325. No entra en ningún recorte de esta
     toma. Si algún día hay una foto vertical del mate, esto se borra. */
  .banda--video video,
  .banda--video img{
    object-position:86% 50%;
    -webkit-mask-image:linear-gradient(180deg, #000 0%, #000 84%, transparent 100%);
    mask-image:linear-gradient(180deg, #000 0%, #000 84%, transparent 100%);
  }
  .banda--video::after{
    background:radial-gradient(155% 42% at 50% 45%,
      rgba(5,18,11,.90) 0%, rgba(5,18,11,.68) 48%, rgba(5,18,11,0) 84%);
  }
}

/* ── 4 · LOS BORDES DE OLIVA ─────────────────────────────────────
   El filo de las piezas deja de ser una crema al 10 % y pasa a ser
   oliva seco. Es el mismo peso de línea y el mismo grosor: cambia el
   color, que ahora es un verde de la paleta y no un gris. ⚠ Sólo
   borde: sobre el verde monte el oliva da 3,04:1 y como texto no se
   lee (regla 3 de la cabecera). */
.distinta__cara,
.blends__foto,
.panel-foto,
.preguntas__lado,
.form{ border-color:var(--oliva-2) }
.mayorista__lista li{ border-top-color:rgba(92,99,75,.55) }
.camino__paso,
.simple__paso::before{ border-top-color:rgba(92,99,75,.55) }

/* ── 5 · LAS REDES DEL PIE ───────────────────────────────────────
   Tres íconos y nada más: el pie ya dice el WhatsApp, el usuario de
   Instagram y la ciudad en texto, así que esto no repite un dato —es
   el atajo para el que ya decidió seguirla. Van en oliva apagado y se
   encienden en oro al pasar por encima: quietos no le compiten al
   único enlace del pie que tiene que verse siempre, que es el
   WhatsApp. El área táctil es de 44 px aunque el dibujo mida 20. */
.footer__redes{
  margin:1.35rem 0 .4rem; padding:0;
  display:flex; justify-content:center;
}
/* ⚠ ES UN RENGLÓN, NO UN ÍCONO (2026-09-05). El ícono suelto de 20 px
   se leía como un dato más del pie. Con el nombre al lado es una puerta:
   se ve que lleva a algún lado y se ve a dónde. El borde tenue es lo que
   lo separa del texto que tiene arriba y abajo — sin él, con el mismo
   color del pie, vuelve a ser un renglón de información. */
.footer__redes a{
  display:inline-flex; align-items:center; gap:.6rem;
  padding:.6rem 1.05rem; border-radius:var(--radius);
  border:1px solid var(--line);
  font-size:.94rem; letter-spacing:-.01em; text-decoration:none;
  /* ⚠ NO VAN EN OLIVA AUNQUE SEAN «DETALLE»: sobre el verde monte el oliva da 3,04:1 y un ícono de 20 px a ese contraste no se reconoce — hay que saber que está para verlo. Van en el gris apagado de la paleta (7,90:1), que es el mismo tono del resto del pie, y se encienden en oro al pasar por encima. */
  color:var(--muted);
  transition:color .35s var(--ease), transform .35s var(--ease-mat);
}
.footer__redes b{ color:var(--text); font-weight:600 }
.footer__redes svg{ flex:0 0 auto }
@media (hover:hover){
  .footer__redes a:hover{ color:var(--accent); border-color:var(--accent); transform:translate3d(0,-2px,0) }
  .footer__redes a:hover b{ color:var(--accent) }
}
@media (prefers-reduced-motion:reduce){
  .footer__redes a{ transition:none }
}

/* ── 6 · EL BOTÓN DE WHATSAPP, SÓLO EL LOGO ──────────────────────
   Sacada la palabra (2026-09-05, lo pidió Jope), la píldora de
   `base.css` queda un óvalo: su relleno es asimétrico justamente para
   acomodar el texto a la derecha. Acá se lo empareja y vuelve a ser un
   círculo, que es la forma con la que se reconoce este botón.
   ⚠ El relleno no es decorativo: 26 px de logo + 2 × .9rem son 55 px de
   lado, o sea por encima de los 48 que necesita un dedo. Si se achica
   el logo, hay que subir el relleno para no bajar de ahí. */
.wa{ padding:.9rem; border-radius:50% }

/* ⚠ EN LA COMPUTADORA EL BOTÓN ESTÁ SIEMPRE (2026-09-05, lo pidió Jope:
   «no veo el botón de WhatsApp»).

   `base.css` lo deja en opacidad 0 y lo enciende `initChrome` cuando se
   scrollea un tercio de pantalla. Esa espera tiene sentido en una
   portada donde el botón taparía algo; acá no tapa nada —la esquina de
   abajo a la derecha está vacía— y lo único que consigue es que alguien
   que abre la página y mira, no lo encuentre. Que es exactamente lo que
   pasó.

   En el teléfono NO se toca: ahí manda la barra de abajo y este botón
   sigue escondido, o serían dos accesos al mismo WhatsApp peleándose el
   lugar del pulgar. */
@media (min-width:761px){
  .wa{ opacity:1; transform:none; pointer-events:auto }

  /* El anillo que late. Es lo que hace que el ojo lo encuentre sin
     buscarlo, y no cuesta nada: es un pseudo-elemento que sólo anima
     `transform` y `opacity`, o sea que vive en el compositor y no
     obliga a repintar el botón. Se apaga al pasar el mouse —ya lo
     encontraste— y con «menos animación» pedido. */
  .wa::before{
    content:''; position:absolute; inset:0; border-radius:50%;
    background:#25D366; z-index:-1;
    animation:waLate 2.6s var(--ease) infinite;
  }
  .wa:hover::before{ animation-play-state:paused; opacity:0 }
}
@keyframes waLate{
  0%   { transform:scale(1);    opacity:.55 }
  70%  { transform:scale(1.55); opacity:0 }
  100% { transform:scale(1.55); opacity:0 }
}
@media (prefers-reduced-motion:reduce){
  .wa::before{ animation:none; opacity:0 }
}
.barra-pie__wa{ display:flex !important; align-items:center; justify-content:center; gap:.45rem }


/* ══════════════════════════════════════════════════════════════════
   LO QUE PIDIÓ JOPE EL 2026-08-31, SEGUNDA TANDA
   ══════════════════════════════════════════════════════════════════ */

/* ── EL BLOQUE QUIETO: UN TONO POR CARTEL Y UNA LUZ QUE CRUZA ─────
   ⚠ TRES TONOS DE LA MISMA PALETA, NO TRES COLORES. Cada cartel toma
   uno —oliva, oro viejo y verde monte— y lo usa en las tres piezas que
   lo dibujan: la raya de arriba, el numeral y el borde. Que sean tres
   y no uno tiene un motivo: los tres carteles dicen cosas distintas
   —qué es, para quién, dónde— y con el mismo color se leen como tres
   pedazos de un mismo párrafo cortado en tres.
   Los tres tonos están medidos contra la crema: oliva 7,83:1, oro
   oscuro 6,96:1 y verde monte 18,51:1. Ninguno baja de 4,5. */
.simple__paso{ --tono:var(--accent); position:relative; overflow:visible }
/* ⚠ LOS TRES SON VERDES DE LA MISMA FAMILIA Y NO TRES COLORES (2026-08-31, lo pidió Jope): verde hoja, el verde de la marca —el mismo del ícono— y verde monte. Puestos en fila se leen como tres pasos de una misma escala, que es lo que son —qué es, para quién, dónde—, y no como tres etiquetas de colores. ⚠ Y son verdes CON CROMA, no los grises verdosos del fondo: al 22 % sobre crema, un #05120B da un gris cálido que no se lee verde — hay que subir el verde del color de origen, no la opacidad del velo, o el texto empieza a perder contraste. Acá había un oro viejo en el del medio y rompía la fila. */
.simple__paso:nth-child(1){ --tono:#2F5D3A }   /* verde hoja        */
.simple__paso:nth-child(2){ --tono:#1E4A2E }   /* verde de la marca */
.simple__paso:nth-child(3){ --tono:#0B2A17 }   /* verde monte       */
/* ⚠ LA RAYA DE ARRIBA DEL NÚMERO SE FUE (2026-09-01, la pidió sacar
   Jope). Era el trazo de la entrada, y sobre el cuadro translúcido y
   redondeado no sumaba: leía como un subrayado suelto encima del
   número. Se esconde en vez de borrarse porque el `::before` es el
   mismo elemento que la versión oscura de estos pasos usa como raya
   larga, y ahí sí funciona. */
.seccion--claro .simple__paso::before{ display:none }

/* ⚠ EL NÚMERO CAMBIA DE COLOR, Y LO HACE CON `opacity` (regla 7).
   Animar `color` repinta el glifo en cada cuadro; acá hay DOS números
   apilados —el del HTML en el verde del cuadro y una copia en oro
   dentro del `::after`— y lo único que se mueve es la opacidad de la
   copia. El navegador lo resuelve en el compositor y no repinta nada.
   Los tres van desfasados 1,1 s para que no latan juntos, que es lo que
   convertiría tres cuadros en un cartel de neón. */
/* ⚠ Y EL NÚMERO CRECE. Con 1,05 rem era un numerito gris al que no se
   le veía el color, y el color es justamente lo que se le pidió. A
   1,9 rem el glifo tiene superficie suficiente para que el cruce a oro
   se lea de lejos, que era el punto: que la sección deje de ser pálida. */
.seccion--claro .simple__n{
  color:var(--tono); position:relative; display:inline-block;
  font-size:1.9rem; line-height:1; margin-bottom:.9rem;
}
.seccion--claro .simple__n::after{
  content:attr(data-n);
  position:absolute; left:0; top:0;
  color:var(--accent); opacity:0;
  animation:n-cruce 5.4s var(--ease) infinite;
}
.seccion--claro .simple__paso:nth-child(2) .simple__n::after{ animation-delay:1.1s }
.seccion--claro .simple__paso:nth-child(3) .simple__n::after{ animation-delay:2.2s }
@keyframes n-cruce{
  0%, 18%   { opacity:0 }
  38%, 58%  { opacity:1 }
  78%, 100% { opacity:0 }
}
@media (prefers-reduced-motion:reduce){
  .seccion--claro .simple__n::after{ animation:none; opacity:0 }
}
@media (hover:hover){
  /* Sin borde, lo que responde al puntero es el propio velo: sube dos puntos y el cuadro se acerca. */
  .seccion--claro .simple__paso:hover{
    background:linear-gradient(168deg,
      color-mix(in srgb, var(--tono) 30%, transparent) 0%,
      color-mix(in srgb, var(--tono) 15%, transparent) 62%,
      color-mix(in srgb, var(--tono) 22%, transparent) 100%);
  }
}

/* ⚠ LA LUZ ES UN <span> DEL HTML Y NO UN PSEUDO, y hay una razón: el
   `::after` del cartel ya es el halo, y el barrido necesita su propio
   `overflow:hidden` para no salirse — poner ese recorte en el cartel
   recortaría también el halo, que vive AFUERA del borde. El <span> es
   la caja recortada y su `::before` es la luz que la cruza.
   Se anima `transform` y `opacity`, nada más; pasa UNA vez, con el
   mismo turno que reparte `unaAUna`, y después no queda nada. */
.paso__luz{
  position:absolute; inset:0; overflow:hidden;
  border-radius:var(--radius); pointer-events:none;
}
.paso__luz::before{
  content:''; position:absolute; top:-40%; bottom:-40%; left:-50%; width:42%;
  background:linear-gradient(100deg, transparent, color-mix(in srgb, var(--tono) 26%, transparent), transparent);
  transform:translate3d(0,0,0) skewX(-14deg); opacity:0;
  will-change:transform, opacity;
}
.simple__pasos.turnos .simple__paso.entro .paso__luz::before{
  animation:pasoLuz 1.25s var(--ease) .42s both;
}
@keyframes pasoLuz{
  0%   { opacity:0; transform:translate3d(0,0,0) skewX(-14deg) }
  14%  { opacity:1 }
  100% { opacity:0; transform:translate3d(340%,0,0) skewX(-14deg) }
}
@media (prefers-reduced-motion:reduce){
  .paso__luz{ display:none }
}

/* ── LOS TRES NOMBRES DE LOS BLENDS ──────────────────────────────
   El nombre sube desde abajo de un filo, igual que los títulos de
   sección, y detrás se traza una hairline de oro. Es el mismo gesto de
   la página aplicado a una pieza chica: no hay un efecto nuevo que
   aprender.
   ⚠ EL ESTADO TAPADO VA DETRÁS DE `data-blends-listo`, que la escribe
   `blends()` en el JS. Sin esa marca —el día que vivo.js no cargue—
   los tres nombres se ven enteros y quietos, que es la regla de
   siempre: el que esconde tiene que ser el mismo que puede mostrar. */
.blends__item b{ position:relative; overflow:hidden; padding-bottom:.42rem }
.blends__item b span{ display:block }
.blends__item b::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:1px;
  background:var(--accent);
  transform-origin:0 50%;
}
/* ⚠ LA TRANSICIÓN VA EN EL ESTADO DE PARTIDA Y NO EN EL DE LLEGADA, y esto costó media hora de medir: escrita sólo en la regla de `.entro`, la clase le cambia el `transform` Y le estrena la transición en el mismo cuadro, y el nombre se quedaba clavado en su posición de partida —con la transición ya declarada, o sea que la regla matcheaba— sin avanzar nunca. */
/* ⚠ EL ESTADO DE LLEGADA ES EL QUE VALE POR DEFECTO Y LO QUE SE ESCRIBE ES EL TAPADO, con `:not(.entro)`. Escrito al revés —tapado por defecto y destapado con `.entro`— cualquier cosa que impida que la transición avance deja el nombre escondido para siempre; así, el día que la clase llegue, el nombre aparece, con animación si el navegador la corrió y de golpe si no. Es la misma idea de la red de los títulos. */
[data-blends-listo] .blends__item b span{ transition:transform .9s var(--ease-mat) }
[data-blends-listo] .blends__item b::after{ transition:transform .8s var(--ease-mat) .28s }
[data-blends-listo] .blends__item:not(.entro) b span{ transform:translate3d(0,110%,0) }
[data-blends-listo] .blends__item:not(.entro) b::after{ transform:scaleX(0) }
@media (prefers-reduced-motion:reduce){
  [data-blends-listo] .blends__item:not(.entro) b span{ transform:none }
  [data-blends-listo] .blends__item:not(.entro) b::after{ transform:scaleX(1) }
}

/* ── LAS PREGUNTAS: EL VERDE QUE SE ENCIENDE ─────────────────────
   ⚠ EL SOMBREADO ES UN VELO DE OPACIDAD, NO UN `background` QUE
   CAMBIA. El color está pintado desde el principio en un pseudo y lo
   único que se anima es cuánto se ve: cambiar el `background` de un
   bloque obliga a repintarlo entero en cada cuadro, y son siete
   bloques que además se están moviendo de costado al mismo tiempo.
   El velo es el verde oliva al 7 % sobre la crema —el mismo verde de
   los bordes, no un color nuevo— y se enciende en dos momentos: al
   pasarle el dedo o el puntero, y mientras la respuesta está abierta.
   La abierta se queda encendida: es la única manera de saber cuál de
   las siete está abierta cuando la respuesta es larga y el título
   quedó tres renglones arriba. */
.faq details{ position:relative; isolation:isolate }
.faq details::before{
  content:''; position:absolute; z-index:-1;
  left:calc(-1 * clamp(.7rem,1.6vw,1.2rem));
  right:calc(-1 * clamp(.7rem,1.6vw,1.2rem));
  top:.35rem; bottom:.35rem;
  border-radius:var(--radius);
  background:linear-gradient(100deg, rgba(74,83,60,.10), rgba(74,83,60,.045) 62%, rgba(110,83,32,.06));
  opacity:0; pointer-events:none;
  transition:opacity .42s var(--ease);
}
.faq details[open]::before{ opacity:1 }
@media (hover:hover){
  .faq details:hover::before{ opacity:.62 }
}
/* La pregunta abierta pasa al oro oscuro y engorda medio paso: con el velo solo, en una pantalla chica y con luz de sol la diferencia no se ve. */
.faq details[open] summary{ color:var(--accent); font-weight:600 }
/* Y la cruz que cierra gira sobre el mismo eje que ya tenía; acá sólo se le suma el color del tono abierto. */
.faq details[open] summary::after{ color:var(--accent) }
@media (prefers-reduced-motion:reduce){
  .faq details::before{ transition:none }
}


/* ══════════════════════════════════════════════════════════════════
   EL VERDE, UN ESCALÓN MÁS ARRIBA EN EL TELÉFONO
   (2026-09-05, lo pidió Jope: «lo noto algo oscuro»)
   ══════════════════════════════════════════════════════════════════

   ⚠ NO ES OTRO VERDE: ES EL MISMO, CON LUZ. Los cuatro escalones se
   subieron **5 puntos de luminosidad HSL**, sin tocar el tono ni la
   saturación. Tono 144-148° y saturación 36-57 % quedan exactamente
   como estaban, que es lo único que separa este verde de un verde de
   plantilla. Si se subiera la saturación para «que se note más», ahí sí
   aparecería el verde artificial que Jope no quiere.

       --bg          #05120B → #0B2617    3,1× más luz
       --bg-2        #08160E → #0F291A    2,7×
       --surface     #0B1C13 → #122E1F    2,3×
       --surface-2   #12261A → #1A3726    1,9×

   Los escalones de arriba suben menos que los de abajo a propósito: si
   todos subieran lo mismo, la escalera se aplanaría y las tarjetas
   dejarían de despegarse del fondo.

   ⚠ Y ESTO SE PAGA EN CONTRASTE, así que está medido. El peor caso de
   toda la escalera pasa de 6,19:1 a **5,04:1** —el oro viejo sobre
   `--surface-2`—, que sigue por encima del 4,5:1 que pide la norma.
   Con +6 puntos caía a 4,79 y ahí ya no hay margen para nada. Si algún
   día se sube otro escalón, hay que volver a medir estas seis
   combinaciones: texto, texto-2, apagado, oro viejo, oro claro y
   celeste, contra los cuatro fondos.

   ⚠ POR QUÉ SÓLO EN EL TELÉFONO. En una computadora el verde casi negro
   funciona: la pantalla es grande, se mira de frente y con luz pareja.
   Un teléfono se mira en la calle, con reflejo encima, y ahí el mismo
   color se lee como una pantalla apagada.

   Y la viñeta se afloja: es un negro al 55 % en los bordes, y en una
   pantalla angosta y alta esos bordes son proporcionalmente mucho más
   de lo que ocupan en una de 1440. La mitad de la sensación de oscuro
   venía de ahí, y aflojarla no le cuesta contraste a nadie. */
@media (max-width:760px){
  :root{
    --bg:        #0B2617;
    --bg-2:      #0F291A;
    --surface:   #122E1F;
    --surface-2: #1A3726;

    /* ⚠ El fondo de los campos del formulario es un rgba del verde
       ESCRITO A MANO, no la variable, así que no se entera de que el
       fondo subió y quedaría un pozo negro adentro de una sección
       clara. Sube con el resto, con la misma opacidad. */
    --campo-bg:  rgba(11,38,23,.55);

    /* De .55 a .32, y el borde libre empieza antes: 58 % → 66 %. */
    --vineta: radial-gradient(112% 92% at 50% 45%, transparent 66%, rgba(0,0,0,.32) 100%);
  }
}
