/* =====================================================================
   PRODUCTO 51 — hoja compartida por las paginas de /producto/*
   Publicada el 2026-09-08 al migrar /producto/provenzal (decision D-2).

   Son DOS hojas del borrador concatenadas, en este orden:
     1) _compartido/css/producto-51.css   (la hoja base, compartida)
     2) _compartido/css/dir-lamina.css    (la direccion visual «lamina»)

   ⚠ LA DIRECCION VISUAL SIGUE SCOPEADA BAJO [data-dir="lamina"], y el
   <html> de la pagina lleva ese atributo escrito. NO se desataron los
   selectores a proposito: dejarlos intactos hace que la pagina publicada
   renderice identico al borrador, y que cambiar de direccion sea cambiar
   el atributo y el bloque 2 de esta hoja, no reescribir 50 selectores.
   La otra direccion, «mostrador», vive en el borrador y no se publico.
   ===================================================================== */

/* =====================================================================
   HOJA COMPARTIDA · las cuatro páginas de producto
   design-drafts/producto-4/_compartido/css/producto-51.css

   ⚠ ESTA HOJA NO SE COPIA POR PÁGINA. Es una sola, y las cuatro la cargan.
   Lo único que cambia entre pescado, aves, provenzal y adobo son los ~14
   tokens del bloque `[data-producto]` de más abajo. Está explicado en
   README.md → «El CSS de las cuatro».

   Hereda el sistema visual de producto-arroz/css/arroz.css: fondo tinta
   cálida, Playfair display + Lora cuerpo, kickers letterspaced, bandas
   alternadas, cards con borde cálido y lift en hover. Lo que cambia por
   producto es el acento, igual que arroz re-tintó a pimienta.

   ⛔ PREFIJO `p5-` EN TODAS LAS CLASES PROPIAS, SIN EXCEPCIÓN.
      Dos motivos, y el segundo es nuevo:
      1. El CSS del sitio (assets/css/style.min.css) pisa las genéricas. El
         caso que costó una ronda entera en el arroz: el sitio le pone
         `overflow:hidden` a `.hero`, y eso rompe el `position:sticky` del
         sobre — se despega y se va de pantalla al scrollear.
      2. La página del arroz ya usa `.hero-pack`, `.qa`, `.band`, `.scard`,
         `.cv`… SIN prefijo. Si estas cuatro reusaran esos nombres y algún día
         las cinco páginas comparten una hoja, chocan entre ellas. `p5-` las
         mantiene disjuntas de las dos familias a la vez.
   ===================================================================== */

/* ── Fuentes locales. Sin CDN: los .woff2 son los del sitio. ──────────
   Copiado de arroz.css, incluida la decisión de NO traer Playfair 600:
   sus 23,5 KB caían en la ventana del LCP y ningún elemento de arriba del
   fold la usa. El navegador resuelve `font-weight:600` con el 700, que es el
   vecino más cercano. Medido allá: −135 ms de LCP sólo por eso. */
@font-face{
  font-family:'Lora';font-style:normal;font-weight:400;font-display:swap;
  src:url('/assets/fonts/lora-latin-400-normal.woff2') format('woff2');
  ascent-override:91%;descent-override:22%;line-gap-override:0%;
}
@font-face{
  font-family:'Lora';font-style:normal;font-weight:600;font-display:swap;
  src:url('/assets/fonts/lora-latin-600-normal.woff2') format('woff2');
  ascent-override:91%;descent-override:22%;line-gap-override:0%;
}
@font-face{
  font-family:'Playfair Display';font-style:normal;font-weight:700;font-display:swap;
  src:url('/assets/fonts/playfair-display-latin-700-normal.woff2') format('woff2');
  ascent-override:91%;descent-override:22%;line-gap-override:0%;
}

/* =====================================================================
   LOS TOKENS
   Lo neutro va en :root. Lo que cambia por producto va en [data-producto],
   que se declara en el <body> de cada página.
   ===================================================================== */
:root{
  --p5-ink:#120d06;
  --p5-ink-2:#1a1208;          /* = rgb(26,18,8), el fondo de Enciclopedia */
  --p5-ink-3:#241a0c;
  --p5-cream:#f5e8d2;          /* = --brand-bg del sitio */
  --p5-paper:#e9dcc0;
  --p5-sheet:#f2e4c6;
  --p5-sheet-2:#e7d5b0;
  --p5-muted-1:#b9a982;
  /* #927f55 y no #8c7a52: el segundo da 4,43:1 sobre #1a1208, por debajo del
     mínimo AA de 4,5 para cuerpo. Un 4 % más de brillo lo lleva a 4,75:1.
     El número sale medido en la página del arroz; acá se hereda tal cual. */
  --p5-muted-2:#927f55;
  --p5-ease:cubic-bezier(.22,.61,.36,1);

  /* Valores por defecto del acento — los pisa cada [data-producto]. Si un
     producto nuevo se olvida de declararlos, la página sale en el oro del
     arroz en vez de salir sin color. Un default visible es mejor que uno
     invisible: se nota que falta. */
  --p5-acento:#FBC02D;
  --p5-acento-2:#c99516;
  --p5-acento-soft:rgba(251,192,45,.16);
  --p5-linea:rgba(251,192,45,.18);
  --p5-linea-soft:rgba(251,192,45,.09);
  --p5-glow-1:rgba(251,192,45,.20);
  --p5-glow-2:rgba(211,47,47,.10);
  --p5-sobre-tinta:#1a1208;    /* el texto que va ENCIMA del acento */
  --p5-amb-pos:center 30%;     /* el punto focal del fondo de ambiente */
}

/* ── PESCADO · el petróleo del sobre ─────────────────────────────────
   El triángulo del corte del envase es #1a5563 medido sobre el arte de
   imprenta. Ese tono exacto sobre el fondo tinta da 2,1:1 y no llega a AA
   para texto, así que el token de TEXTO es una versión aclarada del mismo
   matiz y el del envase se guarda para los planos de color. */
[data-producto='pescado']{
  --p5-acento:#5fb6cf;
  --p5-acento-2:#2f8ba3;
  --p5-acento-soft:rgba(95,182,207,.16);
  --p5-linea:rgba(95,182,207,.20);
  --p5-linea-soft:rgba(95,182,207,.10);
  --p5-glow-1:rgba(95,182,207,.20);
  --p5-glow-2:rgba(26,85,99,.14);
  --p5-sobre-tinta:#08222a;
  --p5-amb-pos:center 34%;
}

/* ── AVES · el ocre del sobre ─────────────────────────────────────── */
[data-producto='aves']{
  --p5-acento:#e0b93c;
  --p5-acento-2:#b8952a;
  --p5-acento-soft:rgba(224,185,60,.16);
  --p5-linea:rgba(224,185,60,.18);
  --p5-linea-soft:rgba(224,185,60,.09);
  --p5-glow-1:rgba(224,185,60,.20);
  --p5-glow-2:rgba(184,149,42,.10);
  --p5-sobre-tinta:#1f1806;
  --p5-amb-pos:center 32%;
}

/* ── PROVENZAL · el verde del sobre, con la lima del triángulo ────── */
[data-producto='provenzal']{
  --p5-acento:#9fce4e;
  --p5-acento-2:#5c9a35;
  --p5-acento-soft:rgba(159,206,78,.16);
  --p5-linea:rgba(159,206,78,.20);
  --p5-linea-soft:rgba(159,206,78,.10);
  --p5-glow-1:rgba(159,206,78,.18);
  --p5-glow-2:rgba(74,155,63,.12);
  --p5-sobre-tinta:#16240a;
  --p5-amb-pos:center 36%;
}

/* ── ADOBO · el rojo del sobre ──────────────────────────────────────
   ⚠ El rojo del envase es #A81E22 y el secundario arrancó en #b8322c. Los
   dos dan por debajo de 3,0 sobre el fondo más claro de la página (#241a0c):
   2,87 el segundo, medido con _qa/contraste.py. El secundario dibuja los
   puntos del eje de desvíos, que llevan información — no es decoración.
   Se aclara el token hasta 3,76 en vez de bajar el umbral. */
[data-producto='adobo']{
  --p5-acento:#e8776e;
  --p5-acento-2:#cc4a41;
  --p5-acento-soft:rgba(232,119,110,.16);
  --p5-linea:rgba(232,119,110,.20);
  --p5-linea-soft:rgba(232,119,110,.10);
  --p5-glow-1:rgba(232,119,110,.18);
  --p5-glow-2:rgba(168,50,31,.12);
  --p5-sobre-tinta:#2a0b09;
  --p5-amb-pos:center 34%;
}

/* =====================================================================
   BASE
   ===================================================================== */
*{box-sizing:border-box}
/* El header del sitio es sticky (100 px en escritorio, 140 en celular). Sin
   scroll-padding, al saltar a un ancla el título queda debajo de la barra.
   Los números salen medidos en la página del arroz con sus anclas reales. */
html{scroll-behavior:smooth;scroll-padding-top:116px}
@media(max-width:768px){html{scroll-padding-top:160px}}
body{
  margin:0;
  font-family:'Lora',Georgia,serif;
  background:var(--p5-ink);
  color:var(--p5-paper);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:clip;
}
a{color:var(--p5-acento);text-decoration:none}
a:hover{text-decoration:underline}
/* height:auto es obligatorio: los atributos width/height del HTML entran como
   hint de presentación y, si no se anulan, le ganan al aspect-ratio del CSS.
   Los atributos se quedan — son los que reservan el espacio y dan CLS 0. */
img{max-width:100%;display:block;height:auto}
h1,h2,h3,h4{font-family:'Playfair Display',Georgia,serif;letter-spacing:-.01em}
::selection{background:var(--p5-acento-2);color:#fff}

/* Grano de papel sobre toda la página: saca el plano digital sin costo de red */
body::after{
  content:'';position:fixed;inset:0;z-index:80;pointer-events:none;
  opacity:.045;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
}

.p5-wrap{max-width:1040px;margin:0 auto;padding:0 24px}
.p5-wrap-wide{max-width:1180px;margin:0 auto;padding:0 24px}

.p5-kick{
  font-size:11.5px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--p5-acento);margin:0 0 12px;font-weight:600;
}
.p5-band{padding:96px 0;position:relative}
.p5-band h2{
  font-size:clamp(27px,3.4vw,40px);margin:0 0 18px;color:var(--p5-cream);
  line-height:1.12;font-weight:700;
}
/* Los dos contenedores listados a propósito: en el arroz una sección pasó de
   .wrap a .wrap-wide y su bajada perdió medida, color e interlineado sin que
   saltara ningún error, porque el selector exigía el padre directo. */
.p5-band > .p5-wrap > .p5-intro,
.p5-band > .p5-wrap-wide > .p5-intro,
/* ⚠ Tercera ruta, agregada el 2026-09-02 con la ventana líquida: al partir
   una sección en dos columnas los <p> pasan a NIETOS de .p5-wrap y el
   combinador de hijo directo deja de matchear. Es la misma trampa que
   describe el comentario de arriba, y no avisa: el texto sigue ahí, sólo que
   sin medida, sin color y sin interlineado.
   ⚠ 2026-09-04: HOY NO LA USA NADIE. «Por qué este ajo» volvió a una sola
   columna y la grilla se mudó a «Cómo se hidrata», donde la columna de texto
   lleva la lista de pasos y la tabla de dosis, no <p class="p5-intro">. LA
   REGLA SE DEJA IGUAL: es la red que atrapa el día que alguien vuelva a meter
   una bajada adentro de la grilla, y ese día el fallo es mudo. */
.p5-band > .p5-wrap > .p5-lamina-2col > .p5-lamina-texto > .p5-intro{
  line-height:1.75;color:var(--p5-muted-1);font-size:16px;max-width:62ch;margin:0 0 8px;
}

.p5-draft{
  position:fixed;top:12px;right:14px;z-index:99;
  background:var(--p5-acento-soft);
  border:1px dashed var(--p5-linea);
  color:var(--p5-acento);font-size:11px;letter-spacing:.1em;
  padding:5px 10px;border-radius:8px;
}
@media(max-width:700px){
  /* En mobile la etiqueta pisaba el breadcrumb: se va al pie, y OPACA — si no,
     se lee encima del texto. */
  .p5-draft{top:auto;bottom:10px;right:10px;font-size:9.5px;padding:4px 8px;
            opacity:.95;background:var(--p5-ink-3)}
}

.p5-crumbs{padding:26px 0 0;font-size:13px;color:var(--p5-muted-2);letter-spacing:.04em}
@media(max-width:880px){.p5-crumbs{padding-top:12px}}
.p5-crumbs a{color:var(--p5-muted-2)}
.p5-crumbs a:hover{color:var(--p5-acento)}
.p5-crumbs .p5-here{color:var(--p5-muted-1)}

.p5-btn{
  display:inline-block;padding:13px 28px;border-radius:999px;
  font-size:14.5px;font-weight:600;
  transition:transform .18s var(--p5-ease), background .2s var(--p5-ease), border-color .2s var(--p5-ease);
}
.p5-btn:hover{transform:translateY(-2px);text-decoration:none}
.p5-btn-solid{background:var(--p5-acento);color:var(--p5-sobre-tinta)}
.p5-btn-solid:hover{filter:brightness(1.08)}
.p5-btn-ghost{border:1px solid rgba(245,232,210,.32);color:var(--p5-cream)}
.p5-btn-ghost:hover{border-color:var(--p5-cream);background:rgba(245,232,210,.05)}

/* =====================================================================
   1 · HERO
   La foto de enciclopedia entra como AMBIENTE. La imagen principal es el
   sobre, y es la primera del DOM.
   ===================================================================== */
/* overflow:clip y NO hidden: hidden crea un contenedor de scroll y eso rompe
   el position:sticky del sobre. clip recorta igual sin crear scrollport. */
.p5-hero{position:relative;overflow:clip;isolation:isolate}

/* Acotada al tope y no a inset:0: el hero mide bastante más que una pantalla
   y con inset:0 la foto se estira a lo largo.
   Brillo y opacidad están al máximo que deja contraste HOLGADO sobre el texto.
   El fondo lo pone cada página con --p5-amb, porque la url() de una hoja
   compartida no puede depender del producto. */
.p5-hero-amb{
  position:absolute;inset:0 0 auto;height:min(105vh,1000px);z-index:-2;
  pointer-events:none;
  background-image:var(--p5-amb);
  background-position:var(--p5-amb-pos);
  background-size:cover;background-repeat:no-repeat;
  filter:saturate(.85) brightness(.66) contrast(1);
  opacity:.72;
  -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.7) 45%,transparent 92%);
          mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.7) 45%,transparent 92%);
}

/* El halo detrás del sobre cuelga de .p5-pack y NO del hero. En el arroz
   colgaba del hero con top:44%, o sea de un porcentaje del alto del hero —
   que se asienta tarde—, y cada reflow corría el halo: 0,25 de CLS medido.
   .p5-pack tiene alto derivado del VIEWPORT (min(46vh,370px)), no del
   contenido, así que no se mueve nunca.
   Ojo: .p5-pack es flex, pero un hijo absolute no es flex item. */
.p5-pack::before{
  content:'';position:absolute;z-index:-1;
  left:50%;top:50%;width:min(760px,86vw);aspect-ratio:1;
  transform:translate(-50%,-50%);
  background:radial-gradient(circle,var(--p5-glow-1) 0%,var(--p5-glow-2) 38%,transparent 68%);
  pointer-events:none;
}

.p5-hero-grid{
  display:grid;grid-template-columns:1.05fr .95fr;gap:48px;align-items:start;
  padding:36px 0 68px;
}
/* La cita del dorso es el tercer hijo de la grilla, colocada explícita bajo
   el sobre: en escritorio conserva su relación con el 3D, que es donde
   refuerza lo que el giro muestra.
   ⚠ En provenzal no matchea nada desde el 2026-09-07 (esa página se quedó sin
   el pie); en adobo, aves y pescado sigue siendo lo que sostiene el hero. */
.p5-hero-grid > .p5-sobre-pie{grid-column:1;grid-row:2;justify-self:center;margin-top:14px}
/* ⛔⛔ EL SOBRE NO ES STICKY, Y NO ES UN OLVIDO. NO SE LO VUELVAS A PONER.
   Tres rondas se fueron en esto. El comentario largo está en la página del
   arroz (producto/assets/arroz.css, regla `.hero-pack`); el resumen:

   Thomas: «el sobre no se debe mover nada, se tiene que quedar quieto en su
   lugar, anclado». Y la primera vez, la misma queja sin que la supiéramos
   leer: «cuando bajás, bajan un poco también».

   `position:sticky` significa quedarse fijo en la PANTALLA, y eso ES LO MISMO
   que deslizarse hacia abajo respecto de la PÁGINA. No hay configuración que
   haga las dos. Por eso cada ronda lo empeoró: 130 px de recorrido → 370 →
   790, y con cada una el sobre se deslizaba más lejos del texto de al lado.

   Quieto en su lugar = elemento normal = sin `position:sticky`. */
/* ── EL AIRE DE ABAJO DEL HERO ────────────────────────────────────────
   El hero terminaba con 356 px de negro debajo del último contenido. 240 los
   había puesto una ronda anterior para comprarle recorrido a un sticky que
   después se sacó del todo, y 68 eran el padding de siempre. Se devuelven los
   dos. Sólo escritorio. */
@media(min-width:881px){
  .p5-hero-grid{padding-bottom:0}
}
/* ── ESCRITORIO BAJO · que el selector de gramaje no quede bajo el borde ──
   2026-09-07. SÍNTOMA (medido, no supuesto): a 1366×768 el bloque
   `.p5-gram` —el control principal de la página— terminaba en y=809 sobre un
   viewport de 768. Cuarenta y un píxeles por debajo del pliegue: el que abre
   la página en una notebook de 768 no ve que hay dos gramajes hasta que
   scrollea, y no tiene motivo para scrollear.

   ⛔ NO SE ARREGLA ACHICANDO EL SOBRE. El sobre es el producto y es el LCP;
   bajarle la altura arregla el número y rompe la página. Lo que se reduce es
   EL AIRE DE ARRIBA, que es lo que empuja el bloque hacia abajo: los 26 px de
   padding del hilo de migas y los 36 del tope de la grilla. El sobre no
   cambia de tamaño ni un píxel — se sube entero, con su selector.

   ⚠ VA CONDICIONADO A max-height Y NO SUELTO. A 1440×900 el hero ya entraba
   (margen de 19 px) y ahí este aire SÍ es el ritmo bueno de la página. Un
   ajuste global le sacaría el respiro a las pantallas que no tienen el
   problema, para arreglar las que sí.

   ⚠⚠ SEGUNDA RONDA, MISMO DÍA: NO ALCANZABA. La primera versión de esta regla
   sólo apretaba el aire de arriba y dejaba el selector entrando por 11 px a
   1366×768. Thomas lo siguió viendo cortado, y el barrido de alturas explicó
   por qué: 11 px es cero, y ADEMÁS abajo de 740 px de viewport seguía cortado
   de verdad (−7 a 740, −33 a 600). Ojo con esto, que es lo que hizo perder la
   primera ronda: EL VIEWPORT NO ES LA PANTALLA. Una notebook de 768 con la
   barra de título, las pestañas, la barra de direcciones y la de marcadores
   deja unos 630-660 de viewport, o sea de lleno en la zona rota. Medir sólo a
   768 «de pantalla» es medir un caso que casi nadie tiene.
   Y la propia regla había creado una franja nueva rota entre 821 y 880: ahí
   el `max-height:820px` ya no aplicaba pero el layout todavía lo necesitaba
   (−17 px a 860). Un corte duro en una media query es un acantilado.

   ⭐ POR ESO AHORA SE TOCA EL ALTO DEL SOBRE, y es lo que la ronda anterior
   dejó anotado como pendiente de decisión: el `74vh` se mide contra la
   ventana ENTERA aunque 100 px de esa ventana los tape el header fijo, o sea
   que el sobre venía pidiendo el 85 % del alto REALMENTE usable. El tercer
   término del min() es el arreglo: `calc(100vh - Kpx)`, donde K es todo lo
   que la pantalla gasta y no es el sobre. K NO SE ESTIMÓ, se midió en el DOM
   real (scratchpad/derivar2.py), y es constante dentro de cada régimen:
     · apretado (esta regla):  arriba del pack 129 + selector y su gap 60 + 32
       de aire  =  221
     · normal (sin apretar):   arriba del pack 177 + 64 + 32  =  273
   El aire de 32 px es deliberado y no cosmético: con 11 se lee como cortado
   aunque el número diga que entra.
   ⚠ SE MIDIÓ CON EL PACK ASENTADO. El botón «Ver el dorso» arranca
   `position:absolute` y sobre-51.js lo devuelve al flujo; medir antes de que
   el pack tome su clase final da una constante optimista.

   LO QUE CUESTA, dicho con números y no con «queda mejor»: el sobre se achica
   sólo donde no entraba. A 800 pierde 13 px (−2 %), a 768 pierde 21 (−4 %), a
   700 pierde 39 (−8 %) y a 600 pierde 65 (−15 %). De 860 para arriba no
   cambia NADA: sigue clavado en los 640 px de siempre. O sea que la pantalla
   grande —donde el sobre es el argumento— queda igual, y el precio lo paga la
   pantalla chica, que es donde el sobre no se veía entero de todos modos.

   ⚠ VA SCOPEADO A [data-producto="provenzal"] Y NO SUELTO, y ésa es la otra
   mitad de la decisión. Esta hoja la comparten las CUATRO páginas de
   producto, y las otras tres tienen MÁS contenido en el hero que provenzal
   —conservan la nota de gramaje y el pie del dorso—, así que su aritmética es
   distinta y no se midió en esta corrida. Apretarles el aire de arriba sin
   haberlas medido sería arreglar a ojo tres páginas para arreglar una
   medida. Si algún día se miden y les hace falta, se agrega su selector a
   esta lista; el número de max-height ya está pensado para el caso. */
/* El techo de siempre, aplicado ya en escritorio ancho: de 901 px de alto para
   arriba el sobre no se mueve de sus 640 px y esto no llega a morder nunca. */
@media(min-width:881px){
  [data-producto="provenzal"] .p5-pack{--p5-sobre-alto:min(74vh,640px,calc(100vh - 273px))}
}
/* ⚠ EL CORTE SUBIÓ DE 820 A 900 y no es un número redondo por gusto: con 820
   quedaba la franja 821-880 sin apretar y rota (−17 px a 860). A 901 el sobre
   ya está clavado en 640 y sobra aire, así que ahí el aprieto no hace falta. */
@media(min-width:881px) and (max-height:900px){
  [data-producto="provenzal"] .p5-crumbs{padding-top:6px}
  [data-producto="provenzal"] .p5-hero-grid{padding-top:8px}
  [data-producto="provenzal"] .p5-pack{
    gap:10px;
    --p5-sobre-alto:min(74vh,640px,calc(100vh - 221px));
  }
}
@media(max-width:880px){
  /* El aire sale de la CAJA —grilla, márgenes del pack, kicker, H1— y no del
     sobre, que es la pieza que tiene que verse grande. */
  .p5-hero-grid{grid-template-columns:1fr;gap:8px;padding:12px 0 72px;min-height:auto}
  .p5-pack{margin-bottom:10px}
  .p5-hero-copy .p5-kicker{margin-bottom:8px}
  .p5-hero-copy h1{margin-bottom:10px}
  .p5-crumbs{padding-top:8px}
  .p5-hero-grid > .p5-sobre-pie{grid-column:auto;grid-row:auto;margin-top:18px}
}

.p5-hero-copy .p5-kicker{
  font-size:11.5px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--p5-acento);margin:0 0 14px;font-weight:600;
}
.p5-hero-copy h1{
  font-size:clamp(40px,6vw,74px);
  line-height:.98;margin:0 0 18px;color:#fbf3e2;font-weight:700;
}
.p5-hero-copy h1 em{font-style:normal;color:var(--p5-acento)}
.p5-hero .p5-notes{
  font-size:14px;color:var(--p5-muted-1);letter-spacing:.02em;
  margin:0 0 22px;font-style:italic;
  padding-bottom:20px;border-bottom:1px solid var(--p5-linea-soft);
  max-width:44ch;
}
/* Va DESPUÉS de la regla base a propósito: misma especificidad = gana el que
   está más abajo. Con el override arriba, perdía sin avisar. */
@media(max-width:880px){
  .p5-hero .p5-notes{padding-bottom:12px}
}
.p5-hero .p5-lead{
  font-size:17px;line-height:1.68;color:var(--p5-cream);
  max-width:46ch;margin:0 0 30px;
}
.p5-hero .p5-lead b{color:#fff;font-weight:600}
.p5-cta-row{display:flex;gap:12px;flex-wrap:wrap}

/* =====================================================================
   EL SOBRE · imagen principal, LCP, primera del DOM
   ===================================================================== */
/* ⚠ `top` TIENE QUE LIBRAR EL HEADER, que es sticky y mide 100 px.
   Estaba en 5vh = 45 px sobre un viewport de 900, así que al pegarse el sobre
   sus primeros 55 px quedaban DEBAJO de la barra de navegación. Medido el
   2026-08-25 en las cinco páginas, la publicada incluida: header bottom 100,
   pack top 45. No se lee como un bug sino como que el sobre se mete abajo del
   menú, y es parte de lo que se percibía como «el sticky no anda».
   112 px = 100 del header + 12 de aire. Fijo y no vh: con 5vh el número
   depende del alto de la ventana y en una pantalla baja vuelve a taparse.
   ⚠ Esto NO le devuelve recorrido al sticky —lo acorta—. El recorrido era un
   problema aparte y se resolvió el 2026-08-25 arriba, en la regla que colocaba
   la cita del dorso bajo el sobre. Medido en _qa/sticky.py.
   ⚠ Ojo con el sujeto: la cita del dorso (`.p5-sobre-pie`) salió del hero DE
   PROVENZAL el 2026-09-07, pero la regla sigue existiendo y sigue en uso en
   adobo, aves y pescado, que comparten esta hoja. */
.p5-pack{
  /* ⛔ ACÁ NO VA `position:sticky`. Ver el comentario de arriba, en el bloque
     que empieza «EL SOBRE NO ES STICKY». `relative` se queda porque las capas
     del 3D y del derrame son absolutas y lo necesitan como referencia. */
  position:relative;
  display:flex;flex-direction:column;align-items:center;gap:14px;
  /* ⭐ EL ALTO DEL SOBRE, EN UN SOLO LUGAR — 2026-09-07.
     Lo leen la <img> y el canvas 3D, que TIENEN que medir lo mismo al píxel:
     el visor encuadra contra el tamaño del canvas, así que si las dos cajas
     se separan el fundido de la foto al 3D se ve como un salto. Estaban
     escritas dos veces con el mismo literal, o sea a un descuido de
     divergir. Acá el valor es uno. */
  --p5-sobre-alto:min(74vh,640px);
}
.p5-pack img.p5-sobre-img{
  width:auto;height:var(--p5-sobre-alto);position:relative;z-index:2;
  aspect-ratio:1100/1440;                     /* CLS 0 aunque tarde */
  filter:drop-shadow(-30px 26px 40px rgba(0,0,0,.7));
  transition:transform .45s var(--p5-ease);
}
.p5-pack:hover img.p5-sobre-img{transform:translateY(-8px) rotateY(-5deg) rotateX(1.5deg)}
@media(max-width:880px){
  /* ⚠ `top:auto` no es decorativo: la regla base pone sticky con un `top`, y
     sobre un elemento relative ese `top` SIGUE aplicando y lo corre hacia
     abajo sin mover el layout. En el arroz eso dejaba el botón encima del
     kicker. Con top:177 el desfase sería de 177 px, así que menos decorativo
     todavía. */
  .p5-pack{position:relative;top:auto;order:-1;margin-bottom:18px;gap:10px}
  .p5-pack img.p5-sobre-img{height:min(46vh,370px)}
  @media(max-height:800px){
    .p5-pack img.p5-sobre-img,
    .p5-pack .p5-sobre3d{height:min(41vh,330px)}
    .p5-pack{gap:8px;margin-bottom:14px}
    .p5-sobre-pie{font-size:12.5px;line-height:1.5}
    .p5-hero-grid{padding-top:4px}
    .p5-hero-copy .p5-kicker{margin-bottom:4px}
    .p5-hero-copy h1{margin-bottom:6px}
    .p5-pack{margin-bottom:6px}
    .p5-crumbs{padding-top:4px}
    .p5-hero .p5-notes{padding-bottom:0;border-bottom:none;margin-bottom:14px}
  }
}

/* El canvas se monta ENCIMA del <img> y arranca invisible: recién cuando el
   GLB terminó de cargar se cruza el fundido. El LCP sigue siendo la imagen. */
.p5-pack .p5-sobre3d{
  /* Misma caja que la <img>, al píxel: el visor encuadra contra el tamaño del
     canvas, así que si la caja no coincide el fundido se ve como un salto. */
  position:absolute;left:50%;top:0;transform:translateX(-50%);
  height:var(--p5-sobre-alto);aspect-ratio:1100/1440;max-width:100%;
  z-index:3;pointer-events:none;
}
.p5-pack .p5-sobre3d canvas{
  width:100%;height:100%;display:block;
  opacity:0;transition:opacity .6s var(--p5-ease);
  touch-action:pan-y;                 /* en touch el scroll vertical siempre gana */
}
.p5-pack.p5-live3d .p5-sobre3d{pointer-events:auto}
.p5-pack.p5-live3d .p5-sobre3d canvas{opacity:1;cursor:grab}
.p5-pack.p5-live3d .p5-sobre3d canvas:active{cursor:grabbing}
/* ⛔ ESTE SELECTOR NO PUEDE LLEVAR `>`. Costó el bug que Thomas vio como
   «atrás del sobre 3D está el sobre viejo».
   La regla original era `.p5-pack.p5-live3d > img.p5-sobre-img`, copiada de la
   página del arroz, donde la <img> SÍ es hija directa de `.hero-pack`. Acá no:
   al agregar el volteo de tarjeta, la imagen pasó a vivir dentro de `.p5-flip`,
   así que el combinador de hijo directo dejó de matchear y la <img> se quedó
   en opacity 1 — entera, perfectamente alineada detrás del canvas. Medido:
   opacity 1 en las cuatro páginas nuevas, opacity 0 en el arroz publicado.
   No rompía nada, no daba error de consola y las cajas coincidían al píxel;
   sólo se veía el sobre estático asomando alrededor del modelo que giraba.

   Se oculta el `.p5-flip` ENTERO y no sólo el frente: bajo 3D no se usa
   ninguna de las dos caras.
   `visibility:hidden` además de `opacity:0` para que el navegador no siga
   componiendo una imagen de 1100×1440 en cada cuadro del giro. */
.p5-pack.p5-live3d .p5-flip{
  /* La animación de entrada corre con fill:both y su último keyframe deja
     opacity:1; una declaración normal no le gana. Se apaga la animación. */
  animation:none;opacity:0;visibility:hidden;
}
.p5-pack.p5-live3d .p5-sobre-img{animation:none}
.p5-pack.p5-live3d:hover img.p5-sobre-img{transform:none}
@media(max-width:880px){
  .p5-pack .p5-sobre3d{height:min(46vh,370px)}
}

.p5-pack .p5-spill{
  /* Decorativo y absoluto: sin esto se come los clics de lo que tiene abajo. */
  position:absolute;bottom:2%;left:50%;transform:translateX(-50%);
  pointer-events:none;
  width:72%;height:70px;z-index:1;
  background:radial-gradient(50% 100% at 50% 100%,var(--p5-glow-1) 0%,rgba(26,18,8,.9) 58%,transparent 76%);
  filter:blur(10px);
}

/* =====================================================================
   EL VOLTEO SIN 3D
   La rama de fallback no tiene sprite sheet — para estos seis modelos no
   existen los frames del paso 40 del estudio (el arroz tiene 36, estos
   tienen cero, y generarlos pide re-renderizar en Blender). Así que el
   dorso se muestra con la imagen del dorso, que SÍ existe para los seis, y
   el gesto es un volteo de tarjeta.

   Las dos caras ocupan la misma celda de una grilla 1×1 y la caja tiene
   alto fijo: el volteo no mueve una sola línea de layout. Con
   prefers-reduced-motion la transición se apaga y el cambio es instantáneo,
   pero SIGUE funcionando: el que no puede ver la animación igual ve el dorso.
   ===================================================================== */
.p5-flip{position:relative;z-index:2;transform-style:preserve-3d;
         transition:transform .62s var(--p5-ease)}
.p5-pack.p5-dorso .p5-flip{transform:rotateY(180deg)}
.p5-flip > img{backface-visibility:hidden;-webkit-backface-visibility:hidden}
.p5-flip > .p5-cara-dorso{
  position:absolute;inset:0;transform:rotateY(180deg);
  width:100%;height:100%;object-fit:contain;
}
/* Hasta que el JS confirma que la imagen del dorso bajó, la cara de atrás no
   existe: un volteo hacia una imagen vacía es peor que no voltear. */
.p5-pack:not(.p5-flipready) .p5-flip{transform:none;transition:none}
.p5-pack:not(.p5-flipready) .p5-cara-dorso{display:none}
@media(prefers-reduced-motion:reduce){
  .p5-flip{transition:none}
}

/* =====================================================================
   LA FRANJA DE CONTROL
   Alto fijo reservado desde el primer pintado. Adentro va la pista
   (escritorio con 3D) o el botón de dorso (todo lo demás), y cuál aparece
   se decide recién después del load. Sin el alto reservado son 58 px de
   CLS, medidos en el arroz.
   ===================================================================== */
.p5-accion{
  /* Ancho fijo además del alto: si la caja se encoge al cambiar pista por
     botón, el re-centrado cuenta igual como layout shift. */
  width:100%;min-height:48px;
  display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
}
.p5-pista{
  margin:0;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--p5-muted-2);opacity:0;transition:opacity .4s var(--p5-ease);
  pointer-events:none;
}
.p5-pack.p5-live3d .p5-pista{opacity:.8}

.p5-boton{
  display:inline-flex;align-items:center;gap:10px;
  font-family:'Lora',Georgia,serif;font-size:14.5px;font-weight:600;
  color:var(--p5-sobre-tinta);background:var(--p5-acento);
  border:none;border-radius:999px;padding:13px 24px;
  cursor:pointer;min-height:44px;
  transition:filter .2s var(--p5-ease), transform .15s var(--p5-ease);
}
.p5-boton:hover{filter:brightness(1.08)}
.p5-boton:active{transform:translateY(1px)}
.p5-boton:focus-visible{outline:2px solid var(--p5-cream);outline-offset:3px}
.p5-boton .p5-ico{font-size:16px;line-height:1}
/* Ocupa su lugar desde el primer pintado pero no se ve ni la lee un lector de
   pantalla hasta que el JS lo habilita. visibility y no display: display lo
   sacaría del flujo y devolvería el salto. */
.p5-boton{visibility:hidden;position:absolute}
.p5-pack.p5-flipready .p5-boton{visibility:visible;position:static}
.p5-pack.p5-live3d .p5-boton{visibility:hidden;position:absolute}
.p5-pack.p5-live3d .p5-pista{display:block}

/* =====================================================================
   ⭐ EL SELECTOR DE GRAMAJE
   Sólo en provenzal y adobo. En pescado y aves el bloque no se emite.

   Es un radiogroup de verdad: dos <input type=radio> reales con su <label>.
   Eso da, de fábrica y sin una línea de JS: navegación con flechas, Espacio
   para elegir, anuncio correcto en lector de pantalla, y un estado que
   sobrevive a que el JS falle. El JS sólo escucha el `change`.

   ⚠ El gramaje va ESCRITO en el control, no insinuado con dos íconos: el
   brief lo pide explícito y además es lo que el que compra viene a buscar.
   ===================================================================== */
.p5-gram{
  display:inline-flex;position:relative;
  background:rgba(0,0,0,.34);
  border:1px solid var(--p5-linea);
  border-radius:999px;padding:4px;gap:2px;
  /* contiene el pulgar deslizante */
  isolation:isolate;
}
.p5-gram input{
  /* No se esconde con display:none ni visibility:hidden — las dos lo sacan
     del árbol de foco y matan la navegación por teclado, que es justo lo que
     este control tiene que conservar. Se apila DEBAJO de su label. */
  position:absolute;opacity:0;pointer-events:none;
  width:1px;height:1px;margin:0;
}
.p5-gram label{
  position:relative;z-index:2;
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:40px;padding:0 20px;border-radius:999px;
  font-family:'Lora',Georgia,serif;font-size:14px;font-weight:600;
  color:var(--p5-muted-1);cursor:pointer;white-space:nowrap;
  transition:color .28s var(--p5-ease);
}
.p5-gram input:checked + label{color:var(--p5-sobre-tinta)}
/* El foco se dibuja sobre el LABEL porque el input es de 1 px y su anillo no
   se vería. `:focus-visible` en el input, anillo en el label hermano. */
.p5-gram input:focus-visible + label{outline:2px solid var(--p5-cream);outline-offset:2px}
/* El pulgar: un solo elemento que se desliza, no dos fondos que se prenden y
   apagan. Con dos opciones alcanza con translateX del 100 % de su ancho. */
.p5-gram-pulgar{
  position:absolute;z-index:1;top:4px;bottom:4px;left:4px;
  width:calc(50% - 4px);border-radius:999px;
  background:var(--p5-acento);
  transition:transform .34s var(--p5-ease);
  pointer-events:none;
}
.p5-gram[data-sel='100'] .p5-gram-pulgar{transform:translateX(100%)}
@media(prefers-reduced-motion:reduce){
  .p5-gram-pulgar{transition:none}
}
/* El estado de carga del segundo modelo. El porcentaje es real: sale de
   leer el stream del fetch, no de un temporizador que finge. */
.p5-gram[data-cargando='1'] label{cursor:progress}
.p5-gram-carga{
  position:absolute;left:4px;right:4px;bottom:-1px;height:2px;z-index:3;
  border-radius:999px;overflow:hidden;
  background:rgba(245,232,210,.14);
  opacity:0;transition:opacity .2s var(--p5-ease);
}
.p5-gram[data-cargando='1'] .p5-gram-carga{opacity:1}
.p5-gram-carga i{
  display:block;height:100%;width:0;border-radius:999px;
  background:var(--p5-cream);transition:width .18s linear;
}
/* ⚠⚠ ESTAS DOS REGLAS SIGUEN VIVAS Y NO SON HUÉRFANAS, aunque provenzal ya no
   las use — 2026-09-07. Se borraron por un rato ese mismo día y hubo que
   ponerlas de vuelta: ESTA HOJA ES DE LAS CUATRO PÁGINAS.
     · .p5-gram-nota  la sigue usando adobo-para-pizza (con sus data-nota25 y
       data-nota100 puestos, o sea que además la cambia al vivo).
     · .p5-sobre-pie  la siguen usando adobo, aves y pescado.
   provenzal perdió sus dos <p> del hero porque a 1366×768 el selector de
   gramaje caía 41 px por debajo del viewport; el detalle está en el HTML, en
   el comentario que quedó dentro de .p5-pack.
   ⛔ REGLA GENERAL PARA LA PRÓXIMA VEZ, que es la lección real: antes de
   borrar una regla de estas tres hojas por «huérfana», hay que verificarla
   contra el MARCADO DE LAS CUATRO PÁGINAS y descontando los comentarios — un
   comentario que cita la clase que acaba de borrar cuenta como uso en un grep
   crudo, y una clase que sólo usa otra página no aparece si mirás una sola.
   Hay un chequeo hecho en scratchpad/huerfanos.js de esa corrida. */
/* La nota cambia de texto al cambiar de gramaje, así que su caja tiene que
   estar reservada o el cambio empuja todo lo de abajo. Una línea en
   escritorio, dos en los anchos donde el texto envuelve. Medido a 360 px:
   la nota del de 100 g entra en dos renglones. */
.p5-gram-nota{
  margin:0;font-size:12.5px;line-height:1.45;letter-spacing:.05em;
  color:var(--p5-muted-2);min-height:2.9em;text-align:center;max-width:34ch;
}
.p5-gram-nota b{color:var(--p5-muted-1);font-weight:600}

/* =====================================================================
   EL PIE DEL SOBRE — la transcripción del dorso
   El texto del envase no se lee en el render ni con la mejor luz. Esto es
   la letra chica en tamaño que se lee, escrita como pie de foto.
   ===================================================================== */
.p5-sobre-pie{
  max-width:38ch;margin:0;text-align:center;
  font-size:13.5px;line-height:1.6;color:var(--p5-muted-1);font-style:italic;
}
.p5-sobre-pie span{
  display:block;font-style:normal;font-size:12.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--p5-muted-2);margin-bottom:6px;
}

/* Entrada escalonada — un solo momento orquestado, no micro-interacciones */
@media(prefers-reduced-motion:no-preference){
  .p5-hero-copy > *,.p5-pack img.p5-sobre-img{animation:p5-rise .8s var(--p5-ease) both}
  .p5-pack img.p5-sobre-img{animation-delay:.05s}
  .p5-hero-copy .p5-kicker{animation-delay:.10s}
  .p5-hero-copy h1{animation-delay:.16s}
  .p5-hero .p5-notes{animation-delay:.24s}
  .p5-hero .p5-lead{animation-delay:.30s}
  .p5-hero .p5-cta-row{animation-delay:.38s}
}
@keyframes p5-rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

/* =====================================================================
   2 · LO QUE TODOS PREGUNTAN
   Antes del 20 % del scroll, sin acordeón: visible por defecto.
   Regla de escritura: la primera oración ES la respuesta.
   ===================================================================== */
.p5-preguntas{padding:0 0 96px;position:relative}
.p5-hoja{max-width:980px;margin:0 auto}
.p5-hoja-head{border-bottom:1px solid var(--p5-linea);padding-bottom:18px;margin-bottom:30px}
.p5-hoja-head .p5-kick{margin-bottom:8px}
.p5-hoja-head h2{font-size:clamp(26px,3.2vw,38px);color:var(--p5-cream);margin:0}
.p5-qa{padding:22px 0}
.p5-qa + .p5-qa{border-top:1px solid var(--p5-linea-soft)}
.p5-qa h3{
  font-size:clamp(18px,2vw,21px);color:var(--p5-cream);
  margin:0 0 10px;font-weight:700;line-height:1.25;
}
.p5-qa p{margin:0;font-size:16px;line-height:1.75;color:var(--p5-muted-1)}
.p5-qa p b{color:var(--p5-acento);font-weight:600}

/* =====================================================================
   3 · LO QUE TIENE ADENTRO — las cards de especias
   ===================================================================== */
.p5-cinco{background:var(--p5-ink-2)}
.p5-cards{display:grid;gap:14px;margin-top:34px;
          grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.p5-scard{
  display:block;border:1px solid var(--p5-linea-soft);border-radius:16px;
  overflow:hidden;background:rgba(0,0,0,.22);
  transition:transform .22s var(--p5-ease), border-color .22s var(--p5-ease);
}
.p5-scard:hover{transform:translateY(-5px);border-color:var(--p5-linea);text-decoration:none}
.p5-scard .p5-txt{padding:18px 18px 20px}
.p5-scard h3{
  font-size:19px;margin:0 0 8px;color:var(--p5-cream);font-weight:700;
  display:flex;align-items:baseline;gap:9px;
}
.p5-scard h3 .p5-n{
  font-family:'Lora',Georgia,serif;font-size:11px;letter-spacing:.14em;
  color:var(--tono,var(--p5-acento));font-weight:600;
}
.p5-scard p{margin:0 0 14px;font-size:14.5px;line-height:1.65;color:var(--p5-muted-1)}
.p5-scard .p5-go{font-size:13px;color:var(--tono,var(--p5-acento));font-weight:600}
.p5-cierre-esp{margin-top:34px!important}

/* ── LOS DIBUJOS EN NEGATIVO · la receta ────────────────────────────────
   2026-09-04. Los cinco WebP de assets/images/botanica/negativo/ son dibujos
   a lápiz CLAROS sobre fondo OSCURO, RGB y SIN canal alfa. Son el negativo
   del set de la enciclopedia, que es tinta oscura sobre papel claro.

   ⭐ EL BLEND ES `screen`, que es el espejo del `multiply` de la enciclopedia.
   multiply mantiene lo oscuro y descarta lo blanco; screen mantiene lo claro
   y descarta lo NEGRO. Por eso, para que no quede un rectángulo alrededor del
   dibujo, el fondo del archivo tiene que llegar a NEGRO PURO — igual que allá
   tenía que llegar a blanco puro.

   ⚠ Y NO LLEGA SOLO. Medido píxel a píxel en las esquinas de los cinco
   archivos: el fondo real es #130f0c (19,15,12), con ruido de dithering del
   encoder hasta #150f0c (21,15,12). No es #0d0906 como decía el encargo.
   Sobre un fondo de tarjeta de #140e06, screen de un negro 19 da 32: seis
   niveles más claro, o sea el rectángulo que hay que evitar. La enciclopedia
   documentó el mismo defecto al revés en su CHANGELOG v41.1: subir la
   opacidad convirtió un defecto invisible en uno visible.

   ⚠ LA CORRECCIÓN NO ES `brightness()` SOLO. brightness escala, y para llevar
   19 a 0 escalando hay que multiplicar por 0 — se va el dibujo con el fondo.
   Lo que hace falta es mover el PUNTO NEGRO, y eso en CSS se arma con las dos
   funciones encadenadas. Con `brightness(b) contrast(c)`, y todo en sRGB 0-1:
       salida = (entrada · b − 0,5) · c + 0,5
   Pidiendo que la entrada 21/255 = 0,0824 dé exactamente 0:
       0,0824 · b = 0,5 − 0,5/c   →   con c = 1,18, b = 0,926
   Y el blanco se conserva: (1 · 0,926 − 0,5) · 1,18 + 0,5 = 1,0027, que satura
   en 1. O sea: el fondo cae a negro puro y la tinta del lápiz no se pierde.
   Es el mismo cálculo que el brightness(1.13) de la enciclopedia —donde 226 ·
   1,13 = 255 exacto— resuelto para el extremo opuesto de la rampa.

   ⛔ EL FONDO OPACO DEL <span> NO ES DECORATIVO, igual que el
   `background:var(--papel)` de los iconos de la enciclopedia. `screen` se
   mezcla con lo que haya PINTADO DEBAJO dentro de su contexto de apilado. La
   tarjeta tiene `background:rgba(0,0,0,.22)`, que es semitransparente: sin un
   fondo opaco propio, el resultado depende de contra qué se componga y deja de
   ser predecible. El <span> pinta el color real de la tarjeta y se aísla con
   `isolation:isolate`, así el blend siempre se resuelve contra ese color y
   contra ningún otro. Cada dirección le pasa SU color en --p5-neg-fondo: si
   una dirección cambia el fondo de la tarjeta y se olvida de esa variable,
   vuelve el rectángulo.

   ⚠ `aspect-ratio` FIJO Y `object-fit:contain`: la caja fija es lo que da
   CLS 0 —el hueco está reservado antes de que la imagen llegue— y lo que
   mantiene las dos tarjetas alineadas si algún día las dos imágenes dejan de
   tener la misma proporción.

   ⭐ LA CAJA ES 16/9 DESDE EL 2026-09-07, y el número sale de lo que va
   adentro: las dos fotos hero son 1200×669 = 1,7937, o sea 16/9 con dos
   milésimas de diferencia. Con `contain` llenan la caja exacta y no queda
   aire arriba ni abajo. Antes era 4/3 acá, 5/4 en mostrador y 16/10 en
   mostrador-celular, y esos tres números estaban calculados para los DIBUJOS
   («el manojo de perejil es apaisado, 672×566»). Los dibujos se fueron; el
   motivo de la caja se fue con ellos.
   ────────────────────────────────────────────────────────────────────── */
:root{
  --p5-neg-filtro:brightness(.926) contrast(1.18);   /* punto negro 21 -> 0 */
  --p5-neg-fondo:#140e06;      /* = rgba(0,0,0,.22) sobre --p5-ink-2 */
  --p5-neg-caja:16/9;          /* la proporción de la caja de la tarjeta */
}
.p5-scard-lam{
  display:block;position:relative;width:100%;
  aspect-ratio:var(--p5-neg-caja);
  background:var(--p5-neg-fondo);
  isolation:isolate;
}
/* ⭐⭐ EL TOGGLE QUE THOMAS TIENE QUE COMPARAR — 2026-09-07 ───────────────
   Se da vuelta con UNA LÍNEA: agregar la clase `p5-cards-plano` al
   <section class="p5-band p5-cinco"> de «Qué tiene adentro», en el HTML.
   Puesta = las fotos se apoyan tal cual (`normal`). Sacada = `screen`, que
   es el default y lo que se ve ahora.

   LA MEDICIÓN, para que la comparación tenga un número al lado. Punto negro
   REAL de las dos fotos: (0,0,0) — no es una aproximación, el 23 % de los
   píxeles de cada una es negro exacto y un tercio está por debajo de L=8.
   Mediana del borde de 12 px: perejil (15,10,6), ajo (1,1,1). Con `screen`
   un píxel (0,0,0) deja el fondo EXACTAMENTE como estaba, así que el borde
   de la foto se disuelve en la tarjeta en vez de dibujar un rectángulo.

   Cuánto se despega el borde del fondo de cada dirección (ΔL sobre 255):
                              screen        normal
     lámina --lam-tierra      +9,9 / +1,0   +0,7 / −8,7
     lámina --lam-tierra-2    +9,7 / +1,0   −2,3 / −11,7
     mostrador --mos-verde    +9,0 / +0,9   −22,0 / −31,3
     mostrador --mos-negro    +9,9 / +1,0   +1,7 / −7,7
   (primer número perejil, segundo ajo)

   LO QUE DICEN ESOS NÚMEROS: sobre los fondos casi negros de lámina las dos
   opciones están cerca y es cuestión de gusto. Sobre `--mos-verde`, que es
   verde y no negro, `normal` deja el borde 22 y 31 puntos POR DEBAJO del
   fondo: eso es el rectángulo oscuro visible, y es el caso que justifica el
   default. Por eso el default es `screen` y por eso la decisión no se tomó
   acá: hay que mirarlo. */
.p5-scard-lam img{
  display:block;width:100%;height:100%;object-fit:contain;
  mix-blend-mode:var(--p5-scard-blend, screen);
}
.p5-cards-plano .p5-scard-lam img{--p5-scard-blend:normal}
/* ⛔ ACÁ NO VA `filter:var(--p5-neg-filtro)`, Y NO ES UN OLVIDO. Ese filtro
   —brightness(.926) contrast(1.18)— estaba calibrado para llevar de 21 a 0 el
   gris del PAPEL de un dibujo a lápiz. Una foto no tiene papel: su punto
   negro medido ya es (0,0,0). Aplicárselo no arreglaba nada y le comía
   contraste real. La variable sigue viva porque la usan los `.p5-bot`, que
   siguen siendo dibujos. */
/* Sin blend no hay dibujo claro sobre fondo oscuro: hay un rectángulo con un
   dibujo adentro. Si el navegador no soporta mix-blend-mode, es preferible
   bajar la imagen a un tamaño chico y centrada, que se lee como viñeta. */
@supports not (mix-blend-mode:screen){
  .p5-scard-lam img{width:72%;height:72%;margin:14% auto}
}
/* ⛔ NADA DE ESTO CORRE CON `forced-colors`: el modo de alto contraste pisa
   los colores y un blend contra un fondo que ya no controlamos deja el dibujo
   invisible. Se apaga el blend y se deja la imagen tal cual. */
@media (forced-colors:active){
  .p5-scard-lam img{mix-blend-mode:normal;filter:none}
}

/* =====================================================================
   MECÁNICA COMPARTIDA POR LAS DOS DIRECCIONES
   Lo que va acá es lo que las dos necesitan igual. Lo que cambia entre una
   y otra vive en dir-lamina.css y dir-mostrador.css, cada una scopeada bajo
   su [data-dir], y ninguna de las dos toca el hero (scopean todo bajo
   `main > section`, y el hero es un <header>).
   ===================================================================== */

/* ── LOS DIBUJOS DE FONDO ──────────────────────────────────────────────
   Mismo mecanismo que los 38 de la enciclopedia, con dos cambios: `screen`
   en vez de `multiply` (el papel acá es negro) y el filtro de punto negro
   documentado arriba, en el bloque de `.p5-scard-lam`.

   ⛔ `overflow:clip` EN LA SECCIÓN Y NO EN OTRO LADO. Es lo que hace cumplir
   la regla de que un dibujo puede sangrar por los costados pero NUNCA por el
   borde de arriba ni por el de abajo: el sangrado lateral se lee como
   sangrado y el vertical se lee como error. `clip` y no `hidden` para no
   crear un contenedor de scroll.

   ⚠ `--p5-bot-op` ARRANCA EN 0 y cada dirección le da su valor. El default
   de 0 está escrito además en el `style` inline de cada <img> del HTML: si
   una hoja no llega, o si una dirección decide no usar un dibujo, no aparece
   a tamaño natural encima del texto ni por un cuadro.
   ────────────────────────────────────────────────────────────────────── */
/* ⛔ LA MÁSCARA DE MARGEN NO ES UN EFECTO: es lo que hace que el dibujo NO
   quede detrás del texto. Y no es una preferencia estética — está medido.

   EL CÁLCULO, primero. El fondo bajo un trazo del dibujo no se estima:
       screen(fondo, trazo) = 255 − (255−fondo)(255−trazo)/255
       compuesto            = fondo·(1−α) + screen·α
   Con el peor caso posible (trazo = 255, blanco puro) sobre la tierra #0e0a05
   y α = 0,22, el fondo sube a (67,64,60). Contra el crema #f5e8d2 eso da
   8,5:1 y sobra; pero contra el cuerpo --p5-muted-1 (#b9a982) da 4,45:1 —
   POR DEBAJO del 4,5 de AA.

   Y DESPUÉS, MEDIDO CONTRA LA PÁGINA REAL. scratchpad/gate-contraste.py
   renderiza la página con el texto vuelto transparente, busca el píxel MÁS
   CLARO del fondo debajo de cada texto que pisa un dibujo y calcula el
   contraste contra su color. 39 pares en «lámina» y 5 en «mostrador». El gate
   se probó con los dibujos al 0,9 y sin máscara: 12 reprobados, o sea que sí
   puede fallar. Peor contraste de la página, por opacidad:

       α        con máscara         sin máscara
       0,30     4,95 / 4,83  ✔      4,95 / 4,77  ✔
       0,40     4,95 / 4,83  ✔      4,46 / 4,44  ✘ (rompe AA)
       0,50     4,95 / 4,77  ✔      3,64 / 3,61  ✘✘
       0,60     4,95 / 4,77  ✔        —

   O sea: la máscara es exactamente lo que hace que la perilla de opacidad se
   pueda tocar. Sin ella la página pasa hoy de casualidad y se rompe en cuanto
   alguien sube el número dos puntos — y se rompe SIN AVISAR. Con ella el
   contraste no se mueve, porque el dibujo directamente ya no llega al texto.
   Es el mismo recurso que la enciclopedia usa en su lámina de hero, que
   también es el único dibujo suyo con texto encima.

   Cada dirección le pasa el lado por --p5-bot-mask; sin máscara declarada, la
   imagen se pinta entera (el fallback del var() es "none"). */
.p5-bot{
  position:absolute;z-index:0;pointer-events:none;user-select:none;
  max-width:none;width:auto;object-fit:contain;
  mix-blend-mode:screen;
  filter:var(--p5-neg-filtro);
  opacity:var(--p5-bot-op,0);
  -webkit-mask-image:var(--p5-bot-mask,none);
          mask-image:var(--p5-bot-mask,none);
}
/* Los dos lados, como valores reusables.

   ⚠ EL NOMBRE DICE DÓNDE ESTÁ EL DIBUJO, no hacia dónde va el degradé. La
   primera versión los llamaba izq/der a secas y los NUEVE quedaron al revés:
   es ambiguo, porque «izquierda» tanto puede ser el lado de la página donde
   vive el dibujo como el lado hacia el que se apaga, y son opuestos. Con el
   nombre así el error no se puede cometer:
     · margen-izq → el dibujo vive en el MARGEN IZQUIERDO (queda anclado con
                    `right:calc(50% + N)`). Tiene tinta contra el borde de la
                    página y se apaga HACIA LA DERECHA, que es de donde viene
                    el texto.
     · margen-der → el dibujo vive en el MARGEN DERECHO (anclado con
                    `left:calc(50% + N)`). Se apaga hacia la izquierda.
   La regla mecánica, para no volver a errarle: si la regla dice `right:`, la
   máscara es margen-izq; si dice `left:`, es margen-der.

   Van como variables y no como dos clases más en el marcado porque el lado no
   es del dibujo, es de DÓNDE LO PUSO ESTA DIRECCIÓN: el mismo archivo está a la
   izquierda en una y a la derecha en la otra. */
:root{
  --p5-bot-mask-margen-izq:linear-gradient(to right,#000 0 30%,rgba(0,0,0,.45) 62%,transparent 88%);
  --p5-bot-mask-margen-der:linear-gradient(to left, #000 0 30%,rgba(0,0,0,.45) 62%,transparent 88%);
}
/* El contenido por encima del dibujo. .p5-wrap/.p5-wrap-wide no traían
   contexto propio; sin esto el texto y el dibujo comparten plano y el orden
   lo decide el orden del marcado, que es frágil. */
.p5-band > .p5-wrap,
.p5-band > .p5-wrap-wide{position:relative;z-index:1}
/* Alto contraste: el blend deja el dibujo invisible cuando el sistema pisa
   los colores. Se apaga entero — es decoración. */
@media (forced-colors:active){ .p5-bot{display:none} }

/* ── EL CONMUTADOR DE DIRECCIONES ──────────────────────────────────────
   ⛔ HERRAMIENTA DE BORRADOR. Se borra al publicar, junto con `.p5-draft` y
   el <footer class="p5-footer">. Está anotado en la lista de bajas de
   migracion-producto-provenzal-2026-09-03.md.
   Abajo a la izquierda y no arriba a la derecha: ahí está el cartel de
   BORRADOR, y dos chapas superpuestas tapan el sobre del hero. */
/* ⚠ ABAJO A LA DERECHA, NO A LA IZQUIERDA — 2026-09-07. Estaba en
   `left:14px` y en una pantalla baja (viewport de 660-720, que es lo que deja
   una notebook de 768 con las barras del navegador) se apoyaba JUSTO encima
   del selector de gramaje: el sobre y el pack viven en la columna IZQUIERDA
   del hero. O sea que la herramienta de revisión tapaba el control que había
   que revisar, y se leía igual que si el hero estuviera cortado.
   A la derecha cae bajo la columna de texto, donde lo más bajo son los dos
   botones de llamada y todavía queda aire. En celular sigue centrada y a lo
   ancho, que ahí el pack va arriba y no hay conflicto.
   ⛔ Esto es herramienta de borrador y se borra entera al publicar, junto con
   .p5-draft y el <footer class="p5-footer">. */
.p5-swap{
  position:fixed;right:14px;bottom:14px;z-index:99;
  display:flex;align-items:center;gap:2px;
  background:rgba(10,7,3,.92);border:1px solid rgba(245,232,210,.22);
  border-radius:999px;padding:5px 6px;
  font-family:"Lora",Georgia,serif;font-size:12px;
  box-shadow:0 6px 22px rgba(0,0,0,.55);
}
.p5-swap-t{
  font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--p5-muted-2);padding:0 8px 0 6px;
}
.p5-swap a{
  color:var(--p5-muted-1);padding:5px 12px;border-radius:999px;
  transition:background .18s var(--p5-ease), color .18s var(--p5-ease);
}
.p5-swap a:hover{color:var(--p5-cream);background:rgba(245,232,210,.10)}
.p5-swap a[aria-current]{background:var(--p5-cream);color:#120d06;font-weight:600}
.p5-swap a:focus-visible{outline:2px solid var(--p5-cream);outline-offset:2px}
@media(max-width:700px){
  .p5-swap{left:8px;right:8px;bottom:8px;justify-content:center;font-size:11px}
  .p5-swap a{padding:5px 9px}
}
@media print{ .p5-swap,.p5-draft{display:none} }

/* =====================================================================
   4 · EL MÉTODO
   Cada paso se lleva su porqué adentro. La fila que recitaba el método
   aparte se eliminó — en el arroz repetía literal treinta palabras después.
   ===================================================================== */
.p5-metodo{display:grid;grid-template-columns:1.15fr .85fr;gap:40px;margin-top:36px;align-items:start}
@media(max-width:880px){.p5-metodo{grid-template-columns:1fr;gap:28px}}
.p5-pasos{list-style:none;margin:0;padding:0;display:grid;gap:26px}
.p5-pasos li{
  position:relative;padding-left:22px;
  border-left:2px solid var(--paso,var(--p5-acento));
}
.p5-pasos h3{
  font-size:19px;margin:0 0 10px;color:var(--p5-cream);font-weight:700;
  display:flex;align-items:baseline;gap:10px;
}
.p5-pasos h3 .p5-n{
  font-family:'Lora',Georgia,serif;font-size:12px;
  color:var(--paso,var(--p5-acento));letter-spacing:.1em;
}
.p5-pasos .p5-que{margin:0 0 8px;font-size:15.5px;line-height:1.7;color:var(--p5-cream)}
.p5-pasos .p5-que em{font-style:normal;color:var(--p5-acento);font-weight:600}
.p5-pasos .p5-por{margin:0;font-size:14px;line-height:1.7;color:var(--p5-muted-1)}

.p5-lado{display:grid;gap:22px}
.p5-plato{margin:0}
.p5-plato img{border-radius:14px;width:100%}
.p5-plato figcaption{margin-top:9px;font-size:12.5px;color:var(--p5-muted-2);text-align:center}

.p5-dosis{border:1px solid var(--p5-linea-soft);border-radius:14px;overflow:hidden}
.p5-dosis-h{
  background:var(--p5-acento-soft);color:var(--p5-acento);
  font-size:12.5px;letter-spacing:.2em;text-transform:uppercase;
  padding:11px 16px;font-weight:600;
}
.p5-dosis-row{
  display:flex;justify-content:space-between;gap:14px;
  padding:12px 16px;font-size:14px;line-height:1.45;
}
.p5-dosis-row + .p5-dosis-row{border-top:1px solid var(--p5-linea-soft)}
.p5-dosis-row span{color:var(--p5-muted-1)}
.p5-dosis-row b{color:var(--p5-cream);font-weight:600;text-align:right}

/* El bloque de dato propio. Se usa para lo que ninguna otra página del SERP
   dice, NO para advertencias genéricas. Dos por página como mucho: si todo
   está resaltado, nada está resaltado. */
.p5-ojo{
  margin:34px 0 0;padding:18px 20px;border-radius:14px;
  background:var(--p5-acento-soft);border-left:3px solid var(--p5-acento);
  font-size:15px;line-height:1.7;color:var(--p5-cream);
}
.p5-ojo b{color:var(--p5-acento)}
.p5-bajo-riel{grid-column:1/-1}

.p5-handoff{
  margin:0 0 26px;padding:14px 18px;border-radius:12px;
  background:rgba(0,0,0,.26);border:1px solid var(--p5-linea-soft);
  font-size:14.5px;line-height:1.65;color:var(--p5-muted-1);
}

/* =====================================================================
   5 · LOS DESVÍOS — variaciones de UN método
   No son cards sueltas: cada una cambia exactamente una cosa, y la etiqueta
   dice cuál. Por eso cuelgan de un eje y no flotan en una grilla.
   ===================================================================== */
.p5-desvios{display:grid;gap:2px;margin-top:34px;
            border-left:2px solid var(--p5-linea)}
.p5-desvio{padding:20px 0 20px 22px;position:relative}
.p5-desvio::before{
  content:'';position:absolute;left:-6px;top:28px;width:10px;height:10px;
  border-radius:50%;background:var(--p5-acento-2);
}
.p5-desvio.p5-fuerte::before{background:var(--p5-acento);width:12px;height:12px;left:-7px}
.p5-desvio .p5-cambia{
  margin:0 0 6px;font-size:12.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--p5-muted-2);font-weight:600;
}
.p5-desvio h3{font-size:18px;margin:0 0 8px;color:var(--p5-cream);font-weight:700}
.p5-desvio .p5-q{margin:0;font-size:14.5px;line-height:1.7;color:var(--p5-muted-1)}

.p5-armar{
  margin-top:44px;padding:26px 28px;border-radius:16px;
  background:rgba(0,0,0,.26);border:1px solid var(--p5-linea-soft);
}
.p5-armar h3{font-size:21px;margin:0 0 12px;color:var(--p5-cream)}
.p5-armar p{font-size:15px;line-height:1.7;color:var(--p5-muted-1);margin:0 0 12px}
.p5-armar ul{margin:0;padding-left:20px;display:grid;gap:9px}
.p5-armar li{font-size:14.5px;line-height:1.65;color:var(--p5-muted-1)}
.p5-armar li b{color:var(--p5-cream)}

/* =====================================================================
   6 · EL TEST DE 30 SEGUNDOS
   ===================================================================== */
.p5-chequeos{list-style:none;margin:34px 0 0;padding:0;display:grid;gap:12px}
.p5-chequeos li{
  padding:15px 18px 15px 46px;border-radius:12px;position:relative;
  font-size:15px;line-height:1.65;color:var(--p5-muted-1);
  background:rgba(0,0,0,.22);border:1px solid var(--p5-linea-soft);
}
.p5-chequeos li b{color:var(--p5-cream)}
.p5-chequeos li::before{
  position:absolute;left:17px;top:15px;font-size:15px;font-weight:700;
}
.p5-chequeos li.p5-ok::before{content:'✓';color:#7fbf6a}
.p5-chequeos li.p5-mal::before{content:'✕';color:#d9705f}
.p5-cierre{margin:26px 0 0;font-size:15.5px;line-height:1.7;color:var(--p5-cream);max-width:62ch}

/* =====================================================================
   7 · CON QUÉ MÁS VA
   ===================================================================== */
.p5-jcards{display:grid;gap:14px;margin-top:34px;
           grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.p5-jcard{
  display:flex;gap:14px;align-items:center;
  padding:14px;border-radius:14px;
  background:rgba(0,0,0,.22);border:1px solid var(--p5-linea-soft);
  transition:transform .2s var(--p5-ease), border-color .2s var(--p5-ease);
}
.p5-jcard:hover{transform:translateY(-4px);border-color:var(--p5-linea);text-decoration:none}
.p5-jcard .p5-pack-mini{flex:0 0 76px}
.p5-jcard .p5-pack-mini img{width:76px;height:auto;border-radius:6px}
.p5-jcard .p5-h{display:block;font-family:'Playfair Display',Georgia,serif;
                font-size:17px;color:var(--p5-cream);margin-bottom:5px;font-weight:700}
.p5-jcard .p5-d{display:block;font-size:13px;line-height:1.6;color:var(--p5-muted-1)}

/* =====================================================================
   8 · RECETAS
   ===================================================================== */
.p5-rgrid{display:grid;gap:16px;margin-top:34px;
          grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.p5-rcard{
  border-radius:16px;overflow:hidden;
  background:rgba(0,0,0,.24);border:1px solid var(--p5-linea-soft);
  transition:transform .22s var(--p5-ease), border-color .22s var(--p5-ease);
}
.p5-rcard:hover{transform:translateY(-5px);border-color:var(--tono,var(--p5-acento));text-decoration:none}
.p5-rcard img{width:100%;object-fit:cover}
.p5-rcard .p5-bd{padding:16px 18px 20px}
.p5-rcard h3{font-size:19px;margin:0 0 8px;color:var(--p5-cream);font-weight:700}
.p5-rcard p{margin:0 0 12px;font-size:14px;line-height:1.65;color:var(--p5-muted-1)}
.p5-rcard .p5-go{font-size:13px;color:var(--tono,var(--p5-acento));font-weight:600}

/* ── LA FILA COMPACTA · las otras cinco recetas ────────────────────────
   ⭐ 2026-09-07, con la fusión de las dos secciones de recetas. Las cinco que
   antes eran chips de texto pelado (pollo, provoleta, pastas, verduras,
   mariscos) ahora llevan miniatura y momento.

   ⚠ NO ES UNA GRILLA DE OCHO IGUALES, Y ÉSE ES TODO EL DISEÑO. Tres anclas
   grandes arriba y cinco filas compactas acá: la jerarquía es lo que hace que
   la sección se lea en vez de mirarse. Ocho tarjetas idénticas serían un
   catálogo, y en un catálogo no hay nada que elegir.

   ⚠ auto-fit con minmax(190px,1fr): a 1120 px entran las cinco en una fila; a
   partir de ahí baja a tres, a dos y a una sin un solo breakpoint escrito. El
   quinto ítem quedando solo en una fila de tres es aceptable — lo alternativo
   era fijar columnas y romper en algún ancho.

   ⚠ LA MINIATURA VA CON aspect-ratio Y alt VACÍO. El ratio reservado da CLS 0
   igual que en las tarjetas grandes. Y el alt vacío + aria-hidden es correcto
   acá y NO lo es arriba: el nombre del plato está escrito al lado en texto, o
   sea que la foto no aporta información que el link no tenga. Repetirla en el
   alt le haría leer dos veces lo mismo a un lector de pantalla. */
.p5-rlist{
  list-style:none;margin:22px 0 0;padding:0;
  display:grid;gap:12px;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
}
.p5-rlist a{
  display:block;height:100%;
  border:1px solid var(--p5-linea-soft);border-radius:12px;overflow:hidden;
  background:rgba(0,0,0,.22);
  transition:transform .22s var(--p5-ease), border-color .22s var(--p5-ease);
}
.p5-rlist a:hover{transform:translateY(-4px);border-color:var(--p5-acento);text-decoration:none}
.p5-rlist a:focus-visible{outline:2px solid var(--p5-cream);outline-offset:2px}
.p5-rlist img{width:100%;aspect-ratio:900/502;object-fit:cover}
.p5-rlist .p5-rl-t{
  display:block;padding:12px 14px 0;
  font-size:15.5px;line-height:1.3;font-weight:700;color:var(--p5-cream);
}
.p5-rlist .p5-rl-m{
  display:block;padding:5px 14px 14px;
  font-size:12.5px;line-height:1.4;letter-spacing:.04em;color:var(--p5-muted-2);
}

/* ── «¿Y SI LA HAGO CON FRESCO?» · ahora sección propia ────────────────
   ⭐ 2026-09-07. Salió del <div class="p5-armar"> en el que colgaba al final
   de la sección de desvíos y pasó a ser una sección con su propio H2. Por eso
   la lista ya no necesita la caja de .p5-armar: la banda ES la caja.
   ⚠ .p5-armar NO se borró de la hoja: la siguen usando adobo, aves y pescado,
   que comparten estas cuatro hojas. Verificado página por página. */
.p5-fresco{
  list-style:none;margin:22px 0 0;padding:0;
  display:grid;gap:14px;max-width:62ch;
}
.p5-fresco li{
  padding-left:18px;border-left:2px solid var(--p5-acento);
  font-size:15.5px;line-height:1.7;color:var(--p5-muted-1);
}
.p5-fresco li b{color:var(--p5-cream)}

/* =====================================================================
   9 · CÓMO VIENE — la ficha técnica y los formatos
   SIN JAVASCRIPT: radios nativos y el combinador `~`. El panel ya viene
   renderizado en el HTML, así que no hay reflow al hidratar (CLS 0), anda
   con JS apagado y es navegable por teclado de fábrica. Es el mismo
   mecanismo que la sección «Cómo viene» del arroz.
   ===================================================================== */
.p5-viene{background:var(--p5-ink-2)}
.p5-cv{margin-top:34px;position:relative}
.p5-cv > input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.p5-slots{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:22px}
.p5-slot{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  width:132px;padding:12px 10px;border-radius:14px;cursor:pointer;
  border:1px solid var(--p5-linea-soft);background:rgba(0,0,0,.2);
  transition:border-color .2s var(--p5-ease), background .2s var(--p5-ease);
}
.p5-slot:hover{border-color:var(--p5-linea)}
.p5-slot .p5-thumb{height:88px;display:flex;align-items:center;justify-content:center}
.p5-slot .p5-thumb img{max-height:88px;width:auto}
.p5-slot .p5-name{font-size:13px;color:var(--p5-muted-1);text-align:center}
.p5-cv #cv-s1:checked ~ .p5-slots [for='cv-s1'],
.p5-cv #cv-s2:checked ~ .p5-slots [for='cv-s2'],
.p5-cv #cv-sg:checked ~ .p5-slots [for='cv-sg']{
  border-color:var(--p5-acento);background:var(--p5-acento-soft);
}
.p5-cv #cv-s1:checked ~ .p5-slots [for='cv-s1'] .p5-name,
.p5-cv #cv-s2:checked ~ .p5-slots [for='cv-s2'] .p5-name,
.p5-cv #cv-sg:checked ~ .p5-slots [for='cv-sg'] .p5-name{color:var(--p5-cream);font-weight:600}
.p5-cv input:focus-visible ~ .p5-slots label{outline:none}
.p5-cv #cv-s1:focus-visible ~ .p5-slots [for='cv-s1'],
.p5-cv #cv-s2:focus-visible ~ .p5-slots [for='cv-s2'],
.p5-cv #cv-sg:focus-visible ~ .p5-slots [for='cv-sg']{outline:2px solid var(--p5-cream);outline-offset:2px}

.p5-panel{
  border:1px solid var(--p5-linea);border-radius:18px;
  padding:26px 28px;background:rgba(0,0,0,.26);
}
.p5-selname{margin:0 0 18px;font-size:13px;letter-spacing:.14em;
            text-transform:uppercase;color:var(--p5-muted-2)}
.p5-selname b{color:var(--p5-cream);letter-spacing:.06em}
.p5-selname > span{display:none}

/* ── LAS SOLAPAS · SOBRE SOLO | CAJAS ─────────────────────────────────
   ⛔ ESTE COMPONENTE FALTABA ENTERO EN LAS CUATRO PÁGINAS. Thomas: «las cajas
   no las veo en ninguna de las 4, o sea el botón de caja no está».

   Qué había pasado: la sesión que armó las cuatro copió el CONTENIDO de la
   ficha B2B del arroz pero no el CONTROL que la organiza. El arroz tiene DOS
   ejes de radios —`cv-slot` (qué formato) y `cv-vista` (sobre solo / cajas)—
   y acá se reusó `cv-slot` para el gramaje y el eje `cv-vista` desapareció.
   Los DUN estaban escritos en el HTML pero no había solapa que los mostrara.
   Es la parte que más le importa al comerciante, que es el público de la
   sección entera.

   ⭐ LA DECISIÓN DE DISEÑO, que era la parte no obvia: en provenzal y adobo
   hay dos gramajes, así que podrían ser dos controles. NO lo son. Las cajas
   que se muestran son SIEMPRE las del gramaje elegido en la fila de arriba,
   dentro de esta misma sección. Un control propio de gramaje adentro del
   panel podría contradecir al de arriba, y dos controles que dicen cosas
   distintas al mismo tiempo confunden más que la falta de solapa.
   Además el dato manda: cada gramaje tiene sus PROPIOS DUN, así que
   «las cajas» sin decir de qué gramaje no significa nada.

   El cruce de los dos ejes se resuelve encadenando `~`, igual que el arroz.
   ⚠ Ojo con el combinador: `.p5-panel` está ADENTRO de `.p5-panelwrap`, así
   que `~ .p5-panel` no lo alcanza nunca y el panel queda vacío. Hay que
   apuntar al hermano real y bajar desde ahí.
   ⚠ Y el ORDEN DEL DOM importa: los cuatro radios van antes de `.p5-slots` y
   de `.p5-panelwrap`, o el hermano general no matchea. */
.p5-tabs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:28px}
.p5-tab{
  display:inline-flex;align-items:center;min-height:46px;
  background:var(--p5-ink-3);border:1px solid var(--p5-linea);
  color:var(--p5-muted-1);font-size:14.5px;padding:11px 22px;border-radius:999px;
  cursor:pointer;
  transition:border-color .16s var(--p5-ease),background .16s var(--p5-ease),color .16s var(--p5-ease);
}
.p5-tab:hover{border-color:var(--p5-acento);color:var(--p5-acento)}
.p5-cv #cv-v1:checked ~ .p5-panelwrap [for='cv-v1'],
.p5-cv #cv-v2:checked ~ .p5-panelwrap [for='cv-v2']{
  background:var(--p5-acento);border-color:var(--p5-acento);
  color:var(--p5-sobre-tinta);font-weight:600;cursor:default;
}
/* ── EL TERCER FORMATO · GRANEL ───────────────────────────────────────
   ⭐ 2026-09-08. El selector nació con DOS ejes: formato (cv-s1/cv-s2) y
   vista (cv-v1/cv-v2), y las cuatro vistas son el producto de los dos.
   El granel NO multiplica: no es un sobre y no viene en caja de sobres, así
   que con `#cv-sg` elegido el eje de vista deja de existir. De las SEIS
   combinaciones (3 formatos × 2 vistas), las dos del granel colapsan en la
   misma vista — y por eso ninguna regla del granel mira cv-v1/cv-v2.
   ⚠ Los selectores de las otras cuatro vistas NO se tocaron y siguen
   funcionando solos: `cv-sg` comparte el name «cv-slot», así que elegirlo
   apaga `#cv-s1:checked` y `#cv-s2:checked` y las cuatro dejan de matchear.
   Los slots del granel (fondo activo y foco) ya estaban en el CSS desde
   antes, arriba, junto a los de cv-s1 y cv-s2. */
.p5-tab--granel{display:none}
.p5-cv #cv-sg:checked ~ .p5-panelwrap .p5-tab--sobre{display:none}
.p5-cv #cv-sg:checked ~ .p5-panelwrap .p5-tab--granel{display:inline-flex}
/* Rótulo, no control: no se puede elegir porque no hay nada que elegir. Es
   un <span>, así que no responde al hover de .p5-tab tampoco. */
.p5-tab--fijo{
  background:var(--p5-acento);border-color:var(--p5-acento);
  color:var(--p5-sobre-tinta);font-weight:600;cursor:default;
}

.p5-cv #cv-v1:focus-visible ~ .p5-panelwrap [for='cv-v1'],
.p5-cv #cv-v2:focus-visible ~ .p5-panelwrap [for='cv-v2']{
  outline:2px solid var(--p5-cream);outline-offset:3px;
}

/* el nombre de lo elegido — cruce de los dos ejes */
.p5-selname span{display:none}
.p5-cv #cv-s1:checked ~ #cv-v1:checked ~ .p5-panelwrap .p5-n1s,
.p5-cv #cv-s1:checked ~ #cv-v2:checked ~ .p5-panelwrap .p5-n1c,
.p5-cv #cv-s2:checked ~ #cv-v1:checked ~ .p5-panelwrap .p5-n2s,
.p5-cv #cv-s2:checked ~ #cv-v2:checked ~ .p5-panelwrap .p5-n2c{display:inline}
.p5-cv #cv-sg:checked ~ .p5-panelwrap .p5-ng{display:inline}

/* ── QUÉ VISTA SE VE · Y POR QUÉ NO SALTA EL LAYOUT ───────────────────
   Cambiar de solapa cambiaba el alto del panel entre 78 y 141 px según la
   página, y el salto se veía. La caja tiene que estar RESERVADA, igual que la
   línea de estado del selector de gramaje.

   ⚠ NO se reserva con un `min-height` a ojo. Un número escrito a mano queda
   viejo en cuanto alguien suma una fila a una tabla, y queda viejo EN SILENCIO
   —de más deja un hueco, de menos vuelve el salto—. Además habría que
   calcularlo por página, porque las vistas miden distinto en cada una.

   Se resuelve con la grilla: el panel es `grid` y TODAS las vistas se apilan
   en la MISMA celda (fila 3, columna 1). El alto de esa fila es el de la vista
   más alta, calculado por el navegador, y no hay número que mantener.
   Se muestra con `visibility` y no con `display`, porque una vista en
   `display:none` no ocupa celda y la fila volvería a medir sólo la activa.

   ✔ `visibility:hidden` también saca la vista del árbol de accesibilidad y del
   orden de tabulación, así que el lector de pantalla no anuncia las tres
   ocultas — que es lo que pasaría con `opacity:0`. */
.p5-panel{display:grid;grid-template-columns:minmax(0,1fr)}
.p5-selname{grid-row:1}
.p5-tabs{grid-row:2}
.p5-vista{grid-row:3;grid-column:1;visibility:hidden}
.p5-cv #cv-s1:checked ~ #cv-v1:checked ~ .p5-panelwrap .p5-v1s,
.p5-cv #cv-s1:checked ~ #cv-v2:checked ~ .p5-panelwrap .p5-v1c,
.p5-cv #cv-s2:checked ~ #cv-v1:checked ~ .p5-panelwrap .p5-v2s,
.p5-cv #cv-s2:checked ~ #cv-v2:checked ~ .p5-panelwrap .p5-v2c{visibility:visible}
.p5-cv #cv-sg:checked ~ .p5-panelwrap .p5-vg{visibility:visible}

/* ── el panel de cajas ────────────────────────────────────────────────
   Dos columnas: la tabla dice los números y el dibujo dice la relación.
   Portado del arroz, donde es `.cajas-2col` + `.dib2`. */
.p5-cajas-2col{
  display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  gap:40px;align-items:center;
}
/* ── ACÁ ESTUVIERON LAS REGLAS DEL COMPARADOR DE SOBRES ────────────────
   Salieron el 2026-09-08 junto con el figure.p5-comparador de provenzal
   (decisión de Thomas: el diagrama es irrelevante para el lector). Provenzal
   era la ÚNICA de las cuatro páginas que lo usaba — verificado con grep sobre
   adobo, aves, pescado y provenzal antes de borrar. El porqué largo está en el
   comentario que quedó en provenzal/index.html, donde vive la pregunta.
   ⚠ .p5-dib2 NO se borra: la siguen usando adobo y aves. */

.p5-dib2 svg{width:100%;height:auto;display:block}
.p5-dib2 figcaption{margin-top:9px;font-size:12.5px;line-height:1.55;color:var(--p5-muted-2)}
.p5-dib2{margin:0}
@media(max-width:820px){
  .p5-cajas-2col{grid-template-columns:1fr;gap:26px}
}

.p5-info2{display:grid;grid-template-columns:1fr 1fr;gap:34px}
@media(max-width:760px){.p5-info2{grid-template-columns:1fr;gap:26px}}
.p5-info2 h3{font-size:17px;margin:0 0 14px;color:var(--p5-cream);font-weight:700}
.p5-deflist{display:grid;gap:9px;margin-bottom:16px}
.p5-deflist > div{
  display:flex;justify-content:space-between;gap:16px;
  font-size:14px;line-height:1.5;color:var(--p5-muted-1);
  padding-bottom:9px;border-bottom:1px solid var(--p5-linea-soft);
}
.p5-deflist b{color:var(--p5-cream);font-weight:600;text-align:right;max-width:60%}
.p5-registros{
  margin:0;font-size:12.5px;line-height:1.7;color:var(--p5-muted-2);
  padding-top:12px;border-top:1px solid var(--p5-linea-soft);
}
.p5-registros .p5-num{color:var(--p5-muted-1);font-variant-numeric:tabular-nums;letter-spacing:.04em}
.p5-eanrow{margin-top:14px}
.p5-eanrow .p5-l{margin:0 0 4px;font-size:12.5px;letter-spacing:.18em;
                 text-transform:uppercase;color:var(--p5-muted-2)}
.p5-eanrow .p5-v{margin:0;font-size:19px;color:var(--p5-cream);
                 font-variant-numeric:tabular-nums;letter-spacing:.08em}
.p5-nota2{margin:12px 0 0;font-size:13px;line-height:1.65;color:var(--p5-muted-2)}
/* ── EL ARGUMENTO DEL GRANEL ──────────────────────────────────────────
   NO es una .p5-nota2: la nota es el pie de una ficha —13 px, gris— y esto
   es lo que el comerciante vino a leer. Va a ancho completo bajo las dos
   columnas, separado por una línea, al cuerpo de la página. */
.p5-granelarg{
  margin-top:26px;padding-top:22px;border-top:1px solid var(--p5-linea);
}
.p5-granelarg p{margin:0;font-size:15.5px;line-height:1.75;color:var(--p5-muted-1);max-width:64ch}
.p5-granelarg b{color:var(--p5-cream);font-weight:600}
.p5-granelarg a{color:var(--p5-acento);text-decoration:underline;text-underline-offset:3px}
.p5-granelarg a:hover{text-decoration:none}
.p5-nota2 b{color:var(--p5-muted-1)}

/* ── LA TABLA DE CÓDIGOS POR CAJA ──────────────────────────────────────
   Portada de `.tbl2` de la página del arroz, con el prefijo p5-. Es la
   sección que le sirve a un comercio: sin los DUN-14 informaba la mitad.
   El `data-k` de cada celda NO es decorativo — es lo que se usa como
   etiqueta cuando la tabla se apila en celular (ver la media query de 560). */
/* Sólo para lectores de pantalla. La tabla de códigos va bajo un <h3> que
   dice «El sobre», así que su <caption> es lo único que le dice a alguien que
   navega por tablas de qué producto y qué gramaje son estos DUN. Visible no
   aporta —el encabezado ya está ahí— y ocupa un renglón de más. */
.p5-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
       overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.p5-tbl2{width:100%;border-collapse:collapse;font-size:14.5px;margin-top:12px}
.p5-tbl2 th{
  text-align:left;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--p5-muted-2);padding:0 18px 12px 0;
  border-bottom:1px solid var(--p5-linea);font-weight:600;
}
.p5-tbl2 td{padding:15px 18px 15px 0;border-bottom:1px solid var(--p5-linea-soft);
            color:var(--p5-muted-1)}
.p5-tbl2 tr:last-child td{border-bottom:0}
.p5-tbl2 td:first-child{color:var(--p5-cream);font-weight:600}
.p5-tbl2 .p5-cod{font-variant-numeric:tabular-nums;letter-spacing:.06em;
                 color:var(--p5-cream);white-space:nowrap}
@media(max-width:560px){
  /* Cuatro columnas de código no entran en un teléfono sin scroll
     horizontal. La tabla deja de ser tabla y cada fila se apila con su
     etiqueta sacada de `data-k`. Mismo recurso que en el arroz. */
  .p5-tbl2,.p5-tbl2 tbody,.p5-tbl2 tr,.p5-tbl2 td{display:block;width:100%}
  .p5-tbl2 thead{position:absolute;width:1px;height:1px;overflow:hidden;
                 clip:rect(0 0 0 0);white-space:nowrap}
  .p5-tbl2 tr{padding:14px 0;border-bottom:1px solid var(--p5-linea-soft)}
  .p5-tbl2 tr:last-child{border-bottom:0}
  .p5-tbl2 td{padding:2px 0;border:0;display:flex;justify-content:space-between;gap:16px}
  .p5-tbl2 td::before{
    content:attr(data-k);flex:0 0 auto;
    font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;
    color:var(--p5-muted-2);align-self:center;
  }
  .p5-tbl2 td:first-child{font-size:16px;margin-bottom:6px}
}
/* El hueco declarado. NO es un campo vacío ni un guión: un dato ausente es
   neutro, un guión en una ficha técnica se lee como error. Esto DICE que
   falta y por qué, que es distinto de omitirlo y distinto de inventarlo. */
.p5-hueco{
  margin:14px 0 0;padding:11px 14px;border-radius:10px;
  background:rgba(245,232,210,.05);border:1px dashed var(--p5-linea);
  font-size:13px;line-height:1.6;color:var(--p5-muted-1);
}
.p5-hueco b{color:var(--p5-cream)}

.p5-cvcta{
  margin-top:34px;padding:24px 28px;border-radius:16px;
  background:var(--p5-acento-soft);border:1px solid var(--p5-linea);
  display:flex;justify-content:space-between;align-items:center;gap:22px;flex-wrap:wrap;
}
.p5-cvcta h3{margin:0 0 6px;font-size:21px;color:var(--p5-cream)}
.p5-cvcta p{margin:0;font-size:14.5px;color:var(--p5-muted-1)}
.p5-cvcta .p5-btns{display:flex;gap:10px;flex-wrap:wrap}

/* =====================================================================
   PIE DE BORRADOR
   ===================================================================== */
.p5-footer{
  padding:40px 0 60px;border-top:1px solid var(--p5-linea-soft);
  font-size:12.5px;line-height:1.7;color:var(--p5-muted-2);
}

/* =====================================================================
   360 px — el ancho de referencia del piso.
   Nada de esta hoja puede desbordar horizontalmente ahí.
   ===================================================================== */
@media(max-width:400px){
  .p5-wrap,.p5-wrap-wide{padding:0 16px}
  .p5-band{padding:64px 0}
  .p5-panel{padding:20px 16px}
  .p5-armar{padding:20px 18px}
  .p5-cvcta{padding:20px 18px}
  .p5-slot{width:calc(50% - 6px)}
  /* El control de gramaje entero mide 196 px con las dos etiquetas: entra en
     360 con margen. Pero si el nombre del formato crece, que envuelva antes
     de empujar la página. */
  .p5-gram label{padding:0 14px;font-size:13px}
  .p5-eanrow .p5-v{font-size:16px;letter-spacing:.04em}
  /* La tabla de deflist a 360: el valor a la derecha con max-width 60 %
     apretaba a dos caracteres por línea. En el ancho chico va debajo. */
  .p5-deflist > div{flex-direction:column;gap:3px}
  .p5-deflist b{text-align:left;max-width:100%}
}

/* ── Piso de legibilidad: 12,5 px para todo rotulo que nombre un dato ───
   2026-09-02. Cinco reglas estaban entre 10 y 11,5 px y no eran adorno:
   `p5-desvio .p5-cambia`, `p5-eanrow .p5-l` («EAN-13 del sobre») las dos que
   dan los encabezados de las tablas de DUN-14 — en escritorio el `th` y en
   <560 px el `td::before` que lo reemplaza — y `p5-dosis-h` («Cuánto poner»).
   ⚠ DOS DE LAS CINCO YA NO APLICAN EN provenzal: `p5-sobre-pie span` y
   `p5-gram-nota` salieron de SU hero el 2026-09-07. Las reglas siguen acá
   porque las otras tres páginas sí las usan. El piso de 12,5 px vale igual
   para las cinco; lo que cambió es en cuántas páginas se ven, no la regla.
   Un codigo de caja sin su encabezado legible no es un dato: es una tira de
   catorce digitos. Los kickers decorativos (`p5-kick`, 11,5 px) NO subieron:
   no nombran ningun dato, y subirlos cambiaria el ritmo de toda la pagina.
   Tampoco los dos numerales de paso dentro de un h3 (`p5-scard h3 .p5-n` a
   11 px y `p5-pasos h3 .p5-n` a 12 px): son tipografia de titulo, no rotulos,
   y subirlos rompe la linea de base contra el texto del h3. Con eso, lo que
   queda bajo 12,5 px son SEIS reglas y las seis son deliberadas.
   Si subio en cambio `p5-pista` («Arrastra el sobre para girarlo»): es el unico
   cartel que avisa que el sobre se agarra, y a 11 px la interaccion no existe. */

/* ── LA VENTANA LÍQUIDA · «Cómo se hidrata la provenzal y cuándo va» ───
   ⭐ SE MUDÓ ACÁ EL 2026-09-04 (Thomas). Vivía en «Por qué este ajo y no
   otro». El motivo del traslado es de orden, no de estilo: «Cómo se hidrata»
   pasó a ser la SEGUNDA sección de la página —primero qué es, después cómo se
   usa— y lo interactivo va arriba, no enterrado en la cuarta banda. Y encima
   dice más: la lámina muestra el blend SECO al lado mismo de los tres pasos
   que lo hidratan.
   ⛔ EL EFECTO NO SE TOCÓ: mismo motor campo, mismos 16 valores, mismo gate,
   mismo tamaño. Cambió de contenedor y nada más.
   El cursor entra sobre la lámina y el film se abre; debajo asoma el grano.
   Lo maneja _compartido/js/ventana-51.js, que sólo arranca con
   `data-ventana="on"` y recién en el primer pointerenter.

   ⛔ ACÁ TAMPOCO VA `position:sticky`, por el mismo motivo que en el pack:
   ver el bloque «EL SOBRE NO ES STICKY». Este efecto es de CURSOR y no lee
   el scroll — no hay nada que fijar.

   La lámina va al LADO del texto y no debajo: separados dejan de leerse
   juntos. Lo que tiene al lado ahora son los TRES PASOS del método, y no es
   una preferencia — es lo que obliga la caja del efecto. La escena mide
   1100×1440 y a 1280 pide unos 578 px de alto; al lado de una bajada de dos
   renglones deja medio metro de columna vacía. Los pasos más la tabla de
   dosis son el único contenido de la sección que llega a esa altura. */
.p5-lamina-2col{
  display:grid;
  /* minmax(0,…) en las dos: un track `1fr` hereda el min-content de su
     contenido y cualquier hijo que no se achique empuja la grilla fuera del
     viewport. Es la misma trampa que ya cazó el sidebar de las fichas. */
  grid-template-columns:minmax(0,1fr) minmax(0,clamp(285px,34.5vw,495px));
  gap:clamp(30px,3.6vw,56px);align-items:start;
  /* ⭐ SANGRÍA A LA DERECHA (2026-09-02). El sobre pasó a medir el doble y no
     entra en los 1040 px de `.p5-wrap`: se le deja invadir el margen de la
     página, que es espacio muerto. El `clamp` es lo que impide que eso se
     vuelva scroll horizontal — sólo saca lo que el viewport regala:
     (100vw - 1040) / 2 es el margen libre a cada lado, menos 20 px de aire, y
     nunca más de 340. Con viewport <= 1040 da 0 y no sangra nada.

     ⚠ SE MIDIÓ SI YA SE PODÍA SACAR (2026-09-03), al achicar la ventana un
     25 % (el clamp de arriba pasó de 380/46vw/660 a 285/34.5vw/495). SE DEJA.
     Encajar, encaja: sin sangría no hay desborde en ningún ancho (a 1280 las
     dos columnas + gap suman 992 px justos, que es el interior de .p5-wrap, y
     scrollWidth == clientWidth hasta 1920). Pero encajar no era el problema.
     Medido en Chromium sobre esta misma página:
       1280 → texto 604 px con sangría vs 504 px sin ella
       1440 → texto 625 px con sangría vs 445 px sin ella
       1920 → texto 781 px con sangría vs 441 px sin ella
     Y contando renglones reales con Range.getClientRects(), sacarla deja el
     cuerpo en 45 caracteres por línea de 1440 para arriba, contra 59 con ella.
     Esos 441-445 px caen DENTRO de la banda de 396-468 px que el comentario
     del @media de abajo ya declaró «demasiado angosto para cuerpo» — o sea que
     sacarla resucita, en escritorio ancho, el defecto por el que se movió el
     breakpoint a 1023. La sangría no estaba tapando un desborde: estaba
     sosteniendo la medida del texto, y eso sigue vigente con el sobre chico.
     Para sacarla alcanza con poner esta línea en `margin-right:0`. */
  margin-right:calc(-1 * clamp(0px, (100vw - 1040px) / 2 - 20px, 340px));
}
.p5-lamina-texto > .p5-intro{max-width:none}

/* ⚠ SIN SANGRÍA cuando la sección tiene algo más abajo. En «Por qué este ajo»
   la grilla era lo único de la banda y el desborde hacia el margen de la
   página se leía como intencional. En «Cómo se hidrata» hay una figura más
   debajo, y con la sangría puesta el borde derecho de la sección queda
   dentado: una fila que llega 100 px más a la derecha que la de abajo.
   Y el argumento que sostenía la sangría —la medida del cuerpo, 59 caracteres
   por línea contra 45— acá no aplica: esta columna lleva una lista de pasos
   cortos y una tabla, no prosa corrida. */
.p5-lamina-2col.p5-sin-sangria{margin-right:0}

/* El aire que antes daba `.p5-lado{gap:22px}` entre la foto y la tabla. Acá
   la tabla va debajo de la lista de pasos, que ya trae 26 px entre ítems: 30
   la separa del grupo sin abrir un hueco. */
.p5-lamina-texto > .p5-dosis{margin-top:30px}

/* ⛔ SALIÓ .p5-plato-cierre — 2026-09-07. Era la foto de las papas al cierre
   de «Cómo se hidrata», y salió con la foto. Verificado antes de borrar la
   regla: de las CUATRO páginas que comparten esta hoja, `p5-plato-cierre` lo
   usaba SÓLO provenzal, así que no deja a nadie sin estilo.
   ⚠ `.p5-plato` a secas NO se toca: lo siguen usando adobo, aves y pescado.

   ══ EL MÓDULO QUE OCUPÓ ESE LUGAR · tres links profundos a la ficha ══════
   ⭐ 2026-09-07. Reemplaza a la foto, al remite genérico y al handoff. El
   porqué está entero en el comentario del HTML; acá va lo de la forma.
   ⚠ ES UN MÓDULO Y NO UN PÁRRAFO, a propósito: tres links de texto corrido
   se leen como una nota al pie y no los toca nadie. Con caja, filete y una
   promesa por línea, se leen como una lista de destinos.
   ⚠ El filete lateral y no un borde entero: la sección ya tiene la lista de
   pasos con filete izquierdo, así que el módulo se lee como parte del mismo
   sistema y no como un cartel pegado encima.
   ⚠ La promesa va en <span> de bloque y NO adentro del <a>: el anchor tiene
   que ser el texto informacional solo. Si la promesa entrara al link, el
   anchor pasaría a ser un párrafo y dejaría de decirle nada claro a nadie
   —ni a un lector de pantalla listando enlaces, ni al buscador. */
.p5-ficha3{
  margin:40px 0 0;padding:22px 24px;
  border-left:2px solid var(--p5-acento);
  background:rgba(0,0,0,.24);
  border-radius:14px;
}
.p5-ficha3 .p5-kick{margin:0 0 6px}
.p5-ficha3 h3{
  font-size:20px;line-height:1.3;margin:0 0 18px;
  color:var(--p5-cream);font-weight:700;
}
.p5-ficha3 ul{list-style:none;margin:0;padding:0;display:grid;gap:16px}
.p5-ficha3 li{
  padding-top:16px;border-top:1px solid var(--p5-linea-soft);
}
.p5-ficha3 li:first-child{padding-top:0;border-top:none}
.p5-ficha3 a{
  display:inline-block;font-size:16.5px;line-height:1.4;font-weight:600;
  color:var(--p5-acento);
  text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;
  text-decoration-color:rgba(251,192,45,.35);
  transition:text-decoration-color .18s var(--p5-ease), color .18s var(--p5-ease);
}
.p5-ficha3 a:hover{text-decoration-color:currentColor}
.p5-ficha3 a:focus-visible{outline:2px solid var(--p5-cream);outline-offset:3px;border-radius:2px}
.p5-ficha3 span{
  display:block;margin-top:6px;
  font-size:14.5px;line-height:1.65;color:var(--p5-muted-1);max-width:66ch;
}
@media(max-width:560px){
  .p5-ficha3{padding:18px 16px;margin-top:32px}
  .p5-ficha3 h3{font-size:18px}
  .p5-ficha3 a{font-size:15.5px}
}

/* ⛔ SALIÓ .p5-faq-lead — 2026-09-07, ronda 2. Era la bajada de la FAQ, que
   explicaba el criterio editorial de la sección y llevaba el conteo de
   preguntas escrito (o sea que se rompía sola cada vez que entraba o salía
   una). El motivo largo está en el HTML, en el comentario que quedó en su
   lugar; su interlink a la ficha no se perdió, se mudó al bloque de «¿Y si la
   hago con fresco?».
   ⚠ VERIFICADO ANTES DE BORRAR, y no por grep crudo: se contó sobre el
   marcado de las CUATRO páginas que comparten esta hoja y DESCONTANDO LOS
   COMENTARIOS — porque esta ronda dejó comentarios que citan la clase que
   acaban de borrar, y un grep los cuenta como uso. Las cuatro dan cero. Es la
   misma trampa que en la ronda 1 hizo borrar por error .p5-gram-nota y
   .p5-sobre-pie, que SÍ usaban las otras tres páginas y hubo que restituir.
   El chequeo está en scratchpad/huerfanos.js. */

.p5-ventana{margin:0}
/* ⛔ SIN CAJA. El sobre va directo sobre el fondo de la banda: nada de panel,
   de borde ni de esquina redondeada. El film ya viene recortado con alfa, así
   que lo que se ve es la silueta del sobre y no un rectángulo. Tampoco lleva
   drop-shadow: se la aplicaría al <svg> que el motor filtra cuadro a cuadro, y
   además tendría que apagarse al montar (la lámina quieta y el motor son dos
   nodos distintos), o sea que la sombra parpadearía al pasar el cursor. */
.p5-ventana-escena{
  position:relative;width:100%;aspect-ratio:1100/1440;   /* CLS 0 aunque tarde */
  /* ⚠ La caja es 1100x1440 porque es el viewBox con el que el motor dibuja y
     con el que `clips.js` calcula los recortes — no se puede recortar sin
     desalinear todo. Pero el sobre NO llena esa caja: medido sobre el alfa de
     sobre-25-capa-film.webp, lo opaco va de y=230 a y=1199, o sea 16,7 % de
     aire transparente abajo. Sin la caja de fondo ese aire dejo de ser panel y
     paso a ser un hueco de 144 px entre el sobre y su epigrafe.
     El margen negativo se lo come. Va en %, que resuelve contra el ANCHO del
     contenedor: 16,67 % del alto x (1440/1100) = 21,8 % del ancho. Se deja en
     20 % para que quede algo de aire. Sólo abajo: el hueco de arriba desplaza
     el sobre respecto del texto y eso se lee como intencional, mientras que
     tirar del borde superior lo montaria sobre el h2. */
  margin-bottom:-20%;
}
.p5-ventana-escena > *{position:absolute;inset:0}
.p5-ventana-escena svg{width:100%;height:100%;display:block}
.p5-ventana-escena img.p5-ventana-solo{width:100%;height:100%;object-fit:contain}
/* Con el motor vivo el <svg> ya dibuja el film Y el grano: la lámina quieta
   quedaría pintándose debajo sin que nadie la vea. Se apaga al montar y
   vuelve sola si el montaje falla (el catch saca `viva`). */
.p5-ventana-viva .p5-ventana-escena img.p5-ventana-solo{display:none}
/* El cursor es la única señal de que esto se toca: sin él, un visitante con
   mouse pasa por encima y no se entera. Sólo cuando el motor está vivo. */
.p5-ventana-lista .p5-ventana-escena{cursor:crosshair}
.p5-ventana-pie{
  font-size:12.5px;line-height:1.5;color:var(--p5-muted-2);
  margin:10px 0 0;text-align:center;
}
/* La pista sobra si no hay efecto: sin puntero fino la lámina es una foto y
   decir «pasá el cursor» es mentirle a quien no tiene cursor. */
.p5-ventana-pie .p5-ventana-pista{display:none}
.p5-ventana-lista .p5-ventana-pie .p5-ventana-pista{display:inline}

/* ⚠ 1023 y no 880 (que es el corte del resto de la página): con el sobre al
   doble, entre 880 y 1024 la columna de texto caía a 396-468 px — unos 40
   caracteres, demasiado angosto para cuerpo. El corte lo manda el ancho que
   necesitan LAS DOS columnas, no el breakpoint de la plantilla.
   ⚠ 2026-09-03: el sobre ya no está al doble y este 1023 NO se volvió a
   evaluar — queda holgado a propósito. Con el clamp nuevo, a 1024 la columna
   de texto mide 586 px (medido), o sea que el corte podría bajar; nadie lo
   pidió y bajarlo mueve el layout de las cuatro páginas, no sólo de ésta. */
@media(max-width:1023px){
  /* Una sola columna: la lámina pasa DEBAJO del texto, no al costado. Y se
     apaga la sangría — acá no hay margen de página del que robar, y dejarla
     puesta sería scroll horizontal. En celular no hay efecto (no hay puntero
     fino), así que lo que queda es la capa del film sola con su alt. */
  .p5-lamina-2col{grid-template-columns:minmax(0,1fr);gap:34px;margin-right:0}
  .p5-ventana-escena{max-width:285px;margin:0 auto}
}
@media(prefers-reduced-motion:reduce){
  /* Cinturón y tiradores: el JS ya devuelve antes de montar nada con
     reduced-motion. Si algún día ese gate se cae, acá no se anima igual. */
  .p5-ventana-lista .p5-ventana-escena{cursor:default}
}

/* ══ DIRECCION VISUAL «LAMINA» — desde _compartido/css/dir-lamina.css ══ */
/* =====================================================================
   DIRECCIÓN 1 · «LÁMINA» — el cuaderno de la fábrica, en negativo
   design-drafts/producto-4/_compartido/css/dir-lamina.css
   Escrita el 2026-09-04. Se carga siempre y sólo pinta con
   <html data-dir="lamina">.

   LA IDEA. Producto es el hermano oscuro de la enciclopedia. Mismo lenguaje
   —dibujos a lápiz, ritmo de láminas, secciones numeradas, filetes— pero
   sobre negro y con los dibujos en negativo. El que viene de la enciclopedia
   siente que sigue en el mismo libro, con la luz apagada.

   LO QUE NO ES: no es «la enciclopedia en oscuro». Es la misma familia con
   otra personalidad — más técnica, más de fábrica. La enciclopedia es un
   libro de cocina; esto es la libreta del que fracciona. De ahí que el acento
   sea UNO SOLO y que se use en muy poco: la austeridad no es falta de color,
   es una decisión sobre para qué sirve el color.

   ⛔ EL HERO NO SE TOCA. Todo cuelga de `main > section`, y el hero es un
   <header class="p5-hero">. No hay una sola regla acá que pueda alcanzarlo.
   ⛔ NADA DE ESTO TOCA `position`, LEE scrollY NI OBSERVA SCROLL. El sobre no
   es sticky. Se mueve de sección, no de lugar en pantalla.
   ===================================================================== */

[data-dir="lamina"]{
  /* ── LA TIERRA ──────────────────────────────────────────────────────
     Dos negros, no uno. Se alternan sección por sección y la diferencia es
     de cinco niveles: no se ve como «franjas», se siente como que la página
     respira. Los dos son CÁLIDOS —tienen más rojo que azul— porque son el
     negativo del papel #f6efe2 de la enciclopedia, no un gris neutro. Un
     negro frío al lado de un crema cálido se lee como pantalla; éste se lee
     como tinta. */
  --lam-tierra:#0e0a05;
  --lam-tierra-2:#130d06;

  /* ── EL ÚNICO ACENTO ────────────────────────────────────────────────
     El amarillo del rombo 51 del logo. Es --brand-yellow del sitio, el mismo
     token que ya usan el subrayado de la nav y el default del acento de esta
     hoja. Medido sobre --lam-tierra da 11,4:1, así que sirve hasta para
     texto chico — aunque acá casi no lleva texto: numeración, un filete y la
     pista del cursor. Todo lo demás es crema sobre negro.
     ⚠ NO es el verde #9fce4e del sobre. Ese verde es del PRODUCTO y vive en
     el hero, que no se toca. Que el cuerpo tenga otro acento es a propósito:
     el hero muestra el sobre, el cuerpo es el cuaderno que lo describe. */
  --lam-oro:#FBC02D;
  --lam-oro-2:#c99516;

  /* ── LOS DIBUJOS DE FONDO ───────────────────────────────────────────
     ⭐ ESTA ES LA PERILLA. 0,22 es el punto de partida: la enciclopedia usa
     0,32 sobre papel, pero en negativo el ojo lee el dibujo CLARO sobre
     oscuro y a igual opacidad pesa más. Subilo y ganan los dibujos; bajalo y
     gana el texto.

     ⭐ Y SE PUEDE TOCAR CON CONFIANZA, que es lo que importa de una perilla.
     Medido con scratchpad/gate-contraste.py sobre la página real: con la
     máscara de margen puesta, el peor contraste de toda la página se queda en
     4,95:1 desde 0,30 hasta 0,60 — o sea que no se mueve, porque el dibujo ya
     no llega al texto. (Sin máscara AA se rompería en 0,40; la tabla entera
     está en producto-51.css, arriba de `.p5-bot`.)
     El techo, entonces, no es de contraste sino de lectura: arriba de ~0,34 el
     dibujo empieza a competir con el cuerpo por atención. Ese es el número que
     hay que juzgar a ojo, y para eso está la perilla. */
  --p5-bot-op:.22;
  --lam-bot-op-movil:.13;
}

/* ═════════════════════════════════════════════════════════════════════
   1 · EL RITMO DE PÁGINA — secciones numeradas y con filete
   ═════════════════════════════════════════════════════════════════════ */

[data-dir="lamina"] main{counter-reset:lam}

[data-dir="lamina"] main > section{
  counter-increment:lam;
  position:relative;
  /* ⛔ El que impide que un dibujo cruce el borde de arriba o el de abajo.
     `clip` y no `hidden`: hidden crea un contenedor de scroll. */
  overflow:clip;
  padding:74px 0 92px;
  border-top:1px solid rgba(251,192,45,.16);

  /* El acento del CUERPO pasa a oro. Va acá y no en :root a propósito: en
     :root se lo comería el hero, que tiene que quedar idéntico en las dos
     direcciones. `main > section` son exactamente las ocho bandas. */
  --p5-acento:var(--lam-oro);
  --p5-acento-2:var(--lam-oro-2);
  --p5-acento-soft:rgba(251,192,45,.13);
  --p5-linea:rgba(251,192,45,.20);
  --p5-linea-soft:rgba(251,192,45,.10);
  --p5-sobre-tinta:#17110a;
}
[data-dir="lamina"] main > section:first-of-type{border-top:none}

/* Las dos tierras, alternadas. Y con cada una viaja su --p5-neg-fondo: es el
   color contra el que `screen` resuelve el fondo de los dibujos. Si algún día
   se cambia uno y no el otro, vuelve el rectángulo alrededor del dibujo —
   está explicado entero en producto-51.css, arriba de `.p5-scard-lam`. */
[data-dir="lamina"] main > section:nth-of-type(odd){
  background:var(--lam-tierra);  --p5-neg-fondo:var(--lam-tierra);
}
[data-dir="lamina"] main > section:nth-of-type(even){
  background:var(--lam-tierra-2); --p5-neg-fondo:var(--lam-tierra-2);
}

/* ── LA RÚBRICA: el numeral romano y su filete ────────────────────────
   ⚠ ROMANOS, Y ES UNA DIFERENCIA DELIBERADA CON LA ENCICLOPEDIA. El encargo
   los pidió «como la enciclopedia», pero la enciclopedia numera en DECIMAL
   CON CERO A LA IZQUIERDA (01, 02…, renderSpice.js:2632 y su contador CSS de
   la FAQ). Se hacen romanos igual, por dos motivos: es lo que el encargo pide
   explícitamente, y le da a esta dirección una voz propia dentro de la misma
   familia — que es justo lo que pide el «no es copiar la enciclopedia en
   oscuro». Ocho secciones, o sea que el numeral más largo es VIII: no hay
   riesgo de que se vuelva ilegible, que es el problema real de los romanos.

   ⚠ VA SOBRE EL WRAP Y NO SOBRE LA SECCIÓN. Las ocho bandas usan .p5-wrap
   (1040 px) o .p5-wrap-wide (1180 px), y un pseudo-elemento colgado de la
   <section> tendría que adivinar cuál para alinearse con el texto. Colgado
   del wrap se alinea solo, siempre, con las dos medidas. */
[data-dir="lamina"] main > section > .p5-wrap::before,
[data-dir="lamina"] main > section > .p5-wrap-wide::before{
  content:counter(lam, upper-roman);
  display:block;
  font-family:'Playfair Display',Georgia,serif;
  font-size:13px;
  font-weight:700;
  letter-spacing:.24em;
  color:var(--lam-oro);
  padding-bottom:11px;
  margin-bottom:30px;
  border-bottom:1px solid rgba(251,192,45,.15);
}

/* Los títulos, en la serif de la casa. La hoja base los deja en la de cuerpo
   (Lora); acá se van a Playfair, que es la que la enciclopedia usa para sus
   títulos y la única que la página ya precarga. La negativa del letterspacing
   es lo que hace que una Playfair grande se lea como titular de lámina y no
   como un párrafo agrandado. */
[data-dir="lamina"] main > section h2{
  font-family:'Playfair Display',Georgia,serif;
  letter-spacing:-.022em;
  max-width:19ch;
}
[data-dir="lamina"] main > section h2 em{font-style:italic;color:var(--lam-oro)}

/* El kicker: crema apagado, no oro. Si el kicker también fuera oro, el acento
   dejaría de ser «muy poco» y pasaría a ser el color de la página. */
[data-dir="lamina"] main > section .p5-kick{
  color:var(--p5-muted-2);
  font-weight:600;
}

/* ═════════════════════════════════════════════════════════════════════
   2 · LAS TARJETAS DE «QUÉ TIENE ADENTRO» SON LÁMINAS
   El bug medido: la grilla auto-fit repartía 700-800 px entre dos tarjetas y
   adentro había una foto de 380 px apoyada a tamaño natural. Acá la caja se
   arregla LIMITANDO LA GRILLA, que es la mitad de la solución; la otra mitad
   es que la imagen LLENE SU CAJA.
   ⚠ ESA OTRA MITAD CAMBIÓ DOS VECES Y HOY DICE OTRA COSA. El 2026-09-04 la
   resolvió metiendo dibujos en negativo (que llenan la caja porque son
   dibujos). El 2026-09-07 volvieron las fotos —las hero de cada ficha de
   ingrediente, 1200×669— y la caja pasó a 16/9, que es su proporción exacta:
   con `contain` la llenan igual y sin aire. O sea que el bug sigue arreglado,
   pero NO por el motivo que decía este comentario. El nombre «lámina» de la
   clase quedó de aquella ronda; renombrarlo tocaría las cuatro páginas y no
   arregla nada.
   ═════════════════════════════════════════════════════════════════════ */

[data-dir="lamina"] .p5-cards{
  grid-template-columns:repeat(2, minmax(0, 420px));
  justify-content:center;
  gap:clamp(22px,3.4vw,52px);
  margin-top:44px;
}

/* ⛔ SIN CHAPA. Una lámina de cuaderno no tiene marco: el dibujo se apoya
   sobre el papel. Sacar el borde y el fondo de la tarjeta hace además que el
   fondo contra el que `screen` resuelve sea el de la SECCIÓN —que ya viaja en
   --p5-neg-fondo— y no un rgba() semitransparente encima de él. Un color
   menos que mantener sincronizado es un rectángulo menos que puede aparecer. */
[data-dir="lamina"] .p5-scard{
  background:transparent;border:none;border-radius:0;overflow:visible;
  transition:opacity .22s var(--p5-ease);
}
[data-dir="lamina"] .p5-scard:hover{transform:none}
/* ⚠ El `var(--p5-neg-filtro)` salió de esta cadena el 2026-09-07 junto con el
   del bloque base: era la calibración del papel de un lápiz y acá adentro ya
   no hay lápiz. El brightness del hover se queda, que es lo que hace el
   realce. */
[data-dir="lamina"] .p5-scard:hover .p5-scard-lam img{filter:brightness(1.18)}
[data-dir="lamina"] .p5-scard-lam img{transition:filter .22s var(--p5-ease)}

/* El nombre, centrado y en serif, con su filete debajo: es el pie de lámina.
   El numeral 01/02 que la tarjeta ya trae queda como marca de plancha. */
[data-dir="lamina"] .p5-scard .p5-txt{padding:0}
[data-dir="lamina"] .p5-scard h3{
  font-family:'Playfair Display',Georgia,serif;
  font-size:clamp(22px,2.4vw,28px);
  font-weight:700;letter-spacing:-.015em;
  justify-content:center;text-align:center;
  margin:22px 0 0;padding-bottom:14px;
  border-bottom:1px solid rgba(251,192,45,.16);
}
[data-dir="lamina"] .p5-scard h3 .p5-n{color:var(--lam-oro)}
[data-dir="lamina"] .p5-scard p{margin:18px 0 14px;font-size:15px}
/* ⚠ Pisa el `--tono` verde que cada tarjeta trae inline. En esta dirección el
   único acento es el oro; si el inline ganara, habría dos. */
[data-dir="lamina"] .p5-scard .p5-go{color:var(--lam-oro)}

/* ═════════════════════════════════════════════════════════════════════
   3 · EL RESTO DEL COLOR SE APAGA
   «Un solo acento» no se cumple poniendo oro: se cumple sacando lo demás.
   Estas cinco reglas pisan los colores que las secciones traen inline.
   ═════════════════════════════════════════════════════════════════════ */

[data-dir="lamina"] .p5-pasos li{border-left-color:rgba(251,192,45,.30)}
[data-dir="lamina"] .p5-pasos h3 .p5-n{color:var(--lam-oro)}
[data-dir="lamina"] .p5-ficha3{background:rgba(0,0,0,.30)}
[data-dir="lamina"] .p5-ficha3 a{color:var(--lam-oro)}
[data-dir="lamina"] .p5-rcard{border-radius:2px;background:rgba(0,0,0,.30)}
[data-dir="lamina"] .p5-rcard:hover{border-color:rgba(251,192,45,.38)}
[data-dir="lamina"] .p5-rcard .p5-go{color:var(--lam-oro)}

/* Esquinas: el cuaderno es de papel cortado a guillotina, no de tarjetas.
   2 px es «casi recto» sin llegar a la esquina viva, que a esta escala se ve
   descuidada más que austera. */
[data-dir="lamina"] main > section .p5-dosis,
[data-dir="lamina"] main > section .p5-armar,
[data-dir="lamina"] main > section .p5-ficha3,
[data-dir="lamina"] main > section .p5-plato img,
[data-dir="lamina"] main > section .p5-panel,
[data-dir="lamina"] main > section .p5-slot{border-radius:2px}
/* ⚠ `.p5-chip` salió de esta lista el 2026-09-07: los chips de los siete
   platos se fusionaron con las tarjetas de recetas en una sola sección de
   ocho, y en esta página ya no existe ninguno. La regla no se reemplazó por
   otra: entró `.p5-ficha3`, que es el módulo nuevo de la misma sección de
   arriba y necesita el mismo canto de guillotina. */

/* ═════════════════════════════════════════════════════════════════════
   4 · LOS DIBUJOS DE FONDO
   Uno o dos por sección, NO todos en todas: si están en todas dejan de ser
   un hallazgo y pasan a ser una textura. Van a los márgenes y sangran por los
   costados, nunca por arriba ni por abajo (lo hace cumplir el overflow:clip).
   Las posiciones están medidas contra el DOM real a 1280 para que ninguno
   caiga encima de un texto largo.
   ⚠ LA SECCIÓN DE RECETAS NO LLEVA NINGUNO: es una grilla de fotos y un
   dibujo detrás de una foto no se ve, se ensucia. (Se llamaba «Tres recetas»;
   desde el 2026-09-07 es «Ocho recetas» y absorbió a la sección de los
   desvíos. La regla no cambió — con ocho fotos vale todavía más.)
   ⚠ Y por eso el `.p5-bot--platos-a` que era de los desvíos se mudó al bloque
   de «¿Y si la hago con fresco?», que es texto: ver su regla más abajo, donde
   está anotado el recálculo del `top`.
   ═════════════════════════════════════════════════════════════════════ */

/* ⚠ CADA UNO DECLARA SU LADO con --p5-bot-mask, y no es opcional: es lo que
   apaga el dibujo antes de que llegue al texto. Sin eso, el peor caso de
   contraste del cuerpo sobre un trazo blanco da 4,45:1 y no pasa AA — el
   cálculo entero está en producto-51.css, arriba de `.p5-bot`.
   ⚠ Y LOS `top` ESTÁN MEDIDOS CONTRA EL DOM REAL a 1280, 1440 y 1920 con
   scratchpad/chequeo-dibujos.py, que verifica las tres reglas de la casa:
   que ninguno cruce el borde de arriba ni el de abajo de su sección, que
   ninguno se acerque a menos de 20 px del texto y que dos no se pisen. No se
   escribieron a ojo, y si se mueve uno hay que volver a correrlo. */

[data-dir="lamina"] .p5-bot--hidrata-a{                 /* planta de perejil */
  top:150px; right:calc(50% + 430px); width:330px; transform:rotate(-9deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-izq);
}
[data-dir="lamina"] .p5-bot--ajo-a{                     /* cabeza de ajo */
  top:120px; right:calc(50% + 400px); width:300px; transform:rotate(11deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-izq);
}
/* ⚠ ESTABA EN top:560px Y CRUZABA EL BORDE INFERIOR DE SU SECCIÓN POR 185 px,
   medido a 1280/1440/1920. El `overflow:clip` lo tapaba, así que a la vista no
   se notaba — se leía como un dibujo cortado a la mitad, que es exactamente el
   defecto que la regla de la casa quiere evitar. Sube a 300. */
[data-dir="lamina"] .p5-bot--ajo-b{                     /* ristra */
  top:300px; left:calc(50% + 425px); width:210px; transform:rotate(-6deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-der);
}
[data-dir="lamina"] .p5-bot--ctrl-a{                    /* manojo de perejil */
  top:210px; left:calc(50% + 400px); width:340px; transform:rotate(8deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-der);
}
/* ⚠ EL `top` BAJÓ DE 170 A 40 EL 2026-09-07, y no es un retoque estético.
   Este dibujo vivía en la sección de los desvíos, que era larga (siete chips
   más el bloque de fresco). Esa sección se fusionó con la de recetas y el
   dibujo se mudó al bloque de «¿Y si la hago con fresco?», que es un H2, un
   párrafo y dos ítems — mucho más corta. Con top:170 sobre una sección de ese
   alto el dibujo arrancaba casi en el borde de abajo y el `overflow:clip`
   de la sección se lo comía entero: no se veía nada y no fallaba nada, que es
   la peor combinación. Medido contra el DOM nuevo. */
[data-dir="lamina"] .p5-bot--platos-a{                  /* planta de ajo */
  top:40px; right:calc(50% + 455px); width:230px; transform:rotate(-13deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-izq);
}
[data-dir="lamina"] .p5-bot--faq-a{                     /* ristra */
  top:230px; left:calc(50% + 480px); width:200px; transform:rotate(9deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-der);
}
[data-dir="lamina"] .p5-bot--viene-a{                   /* planta de perejil */
  top:190px; right:calc(50% + 500px); width:300px; transform:rotate(6deg);
  --p5-bot-mask:var(--p5-bot-mask-margen-izq);
}

/* ═════════════════════════════════════════════════════════════════════
   5 · CELULAR
   Como en la enciclopedia: menos dibujos, más chicos, y cero scroll
   horizontal. Los de escritorio están en `calc(50% ± 400-500px)` y medidos
   contra alturas de escritorio: a 390 px caerían fuera de la pantalla o
   encima del texto. Se apagan y quedan DOS, centrados, sangrando por los dos
   costados, con el `top` en porcentaje de la sección (no en px: el texto
   reflowea y un px medido a 1280 no significa nada a 390).
   ⚠ DOS Y NO SIETE, por peso: hoy en celular no se baja ninguno (van lazy y
   con display:none). Prender dos suma ~57 KB sobre el 87 % del tráfico; los
   siete sumarían el set entero.
   ═════════════════════════════════════════════════════════════════════ */
@media(max-width:1023px){
  [data-dir="lamina"] .p5-bot{display:none}
  [data-dir="lamina"] .p5-bot--ajo-a,
  [data-dir="lamina"] .p5-bot--ctrl-a{
    display:block;
    left:50%; right:auto; top:14%;
    width:128vw;
    transform:translateX(-50%) rotate(-7deg);
    opacity:var(--lam-bot-op-movil);
  }
  [data-dir="lamina"] .p5-bot--ctrl-a{top:20%; transform:translateX(-50%) rotate(6deg)}
  [data-dir="lamina"] .p5-cards{grid-template-columns:minmax(0,420px)}
}
@media(max-width:700px){
  [data-dir="lamina"] main > section{padding:52px 0 62px}
  [data-dir="lamina"] main > section > .p5-wrap::before,
  [data-dir="lamina"] main > section > .p5-wrap-wide::before{margin-bottom:22px}
}
