/* ═══════════════════════════════════════════════════════════════════
   um encarte não solicitado
   Hereda el lenguaje visual del zine de Gabriel, no su identidad.
   9 colores, 4 tipografías con un trabajo cada una, y un solo
   momento teatral: el aterrizaje de la polaroid.
   ═══════════════════════════════════════════════════════════════════ */

:root {
  /* --- tinta: tres oscuros, cada uno con su temperatura -------------- */
  --ink:       #14100c;
  --ink-warm:  #1c1410;
  --ink-deep:  #0d0b09;

  /* --- papel -------------------------------------------------------- */
  --paper:     #f4ece0;
  --paper-2:   #fbf7f0;

  /* --- acentos ------------------------------------------------------ */
  --burnt:     #c4562a;   /* la tinta del encarte. Es la voz de Enrique. */
  --amber:     #e8a856;   /* el acento de Gabriel */
  --lime:      #dfe2a8;   /* aparece UNA sola vez, en el cap. 03 */
  --coffee:    #6b4a2f;

  /* --- por página: cada .page sobrescribe esto ---------------------- */
  --bg:     var(--ink);
  --fg:     var(--paper);
  --accent: var(--amber);
  /* --accent es para display grande, trazos y bloques de fondo.
     Todo texto chico usa --accent-fine, que siempre pasa AA.
     --burnt sobre ink-warm da 4.07:1 y sobre crema 3.80:1: falla. */
  --accent-fine: var(--amber);
  --muted:  rgba(244, 236, 224, .62);
  --rule:   rgba(244, 236, 224, .14);

  /* --- escala ------------------------------------------------------- */
  --fs-hero:    min(clamp(72px, 19vw, 250px), 19svh);
  --fs-display: clamp(38px, 9vw, 96px);
  --fs-product: clamp(30px, 6.4vw, 56px);
  --fs-body:    clamp(14px, 1.4vw, 15px);
  --fs-meta:    10.5px;
  --fs-hand:    clamp(19px, 2.8vw, 26px);

  --gutter: 20px;
  --wide:   1320px;
  --narrow: 640px;

  /* --- curvas: propias, nunca las de fábrica ------------------------ */
  --ease-out:    cubic-bezier(0.23, 1, 0.32, 1);
  --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
  --ease-drop:   cubic-bezier(0.34, 1.40, 0.64, 1);  /* overshoot, un solo uso */
  --ease-pen:    cubic-bezier(0.6, .05, .3, 1);      /* gesto de mano, no de UI */
}

@media (min-width: 760px) { :root { --gutter: 40px; } }
@media (max-width: 400px) {
  :root { --gutter: 18px; }
  /* El folio del masthead es el guardrail: tiene que caber en una línea
     aunque el teléfono sea angosto, así que aprieta antes de partirse. */
  .masthead .folio { font-size: 9.5px; letter-spacing: .06em; }
}
@media (max-width: 340px) { :root { --gutter: 16px; } }

/* Respaldo con métricas ajustadas: si Anton tarda, el titular ocupa
   aproximadamente la misma caja y el swap no mueve el layout. */
@font-face {
  font-family: "Anton Fallback";
  src: local("Haettenschweiler"), local("Arial Narrow Bold"), local("Impact");
  size-adjust: 104%; ascent-override: 92%; descent-override: 20%; line-gap-override: 0%;
}

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

html {
  scroll-behavior: smooth;
  overflow-x: hidden;
  scroll-padding-top: 68px;
  background: var(--ink);          /* cero flash blanco, en ningún estado */
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  max-width: 100vw;
  position: relative;
  /* overflow-x en <body> rompe position:sticky en iOS Safari.
     El guard vive en #app. */
  font-family: "Space Mono", ui-monospace, Menlo, monospace;
  font-size: var(--fs-body);
  line-height: 1.65;
  color: var(--paper);
  background: var(--ink);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

#app { overflow-x: hidden; }

h1, h2, p, dl, dd, ol, figure { margin: 0; }
ol { padding: 0; list-style: none; }
img { display: block; max-width: 100%; }
code { font-family: inherit; font-size: .95em; color: var(--accent-fine); }
em { font-style: normal; color: var(--accent-fine); }

/* ── grano analógico ───────────────────────────────────────────────
   feTurbulence inline. Barato, fijo, y lo cambia todo.            */
body::before {
  content: '';
  position: fixed; inset: 0;
  pointer-events: none;
  z-index: 60;
  opacity: .042;
  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='0.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ── páginas: el cambio de color ES el separador. Nunca <hr>. ─────── */
.page {
  position: relative;
  background: var(--bg);
  color: var(--fg);
  isolation: isolate;
}
.page--ink      { --bg: var(--ink);      --fg: var(--paper); --accent: var(--amber); --accent-fine: var(--amber); } /* 9.17:1 */
.page--ink-warm { --bg: var(--ink-warm); --fg: var(--paper); --accent: var(--burnt); --accent-fine: var(--amber); } /* 7.75:1 */
.page--ink-deep { --bg: var(--ink-deep); --fg: var(--paper); --accent: var(--lime);  --accent-fine: var(--lime);  } /* 14.58:1 */
.page--paper {
  --bg: var(--paper); --fg: var(--ink); --accent: var(--burnt);
  --accent-fine: var(--coffee);                 /* 6.77:1 sobre crema */
  --muted: rgba(20, 16, 12, .62);
  --rule:  rgba(20, 16, 12, .16);
}
.page--paper::after {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: -1;
  background: radial-gradient(120% 90% at 50% 40%, transparent 55%, rgba(107, 74, 47, .07) 100%);
}

.page-in {
  width: min(100% - var(--gutter) * 2, var(--wide));
  margin-inline: auto;
  padding-block: clamp(64px, 13vw, 150px);
}
.page-in.narrow { max-width: var(--narrow); }

/* ── masthead ──────────────────────────────────────────────────────
   Es el marco, no contenido. Nunca se anima: está desde el frame 1. */
.masthead {
  position: sticky; top: 0; z-index: 50;
  background: color-mix(in srgb, var(--ink) 92%, transparent);
  backdrop-filter: saturate(140%) blur(8px);
  border-bottom: 1px solid rgba(244, 236, 224, .10);
}
.masthead-in {
  width: min(100% - var(--gutter) * 2, var(--wide));
  margin-inline: auto;
  padding-top: max(12px, calc(env(safe-area-inset-top) + 6px));
  padding-bottom: 12px;
  display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
}

.folio {
  font-size: var(--fs-meta);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--muted);
  line-height: 1.5;
}
.folio--end { white-space: nowrap; color: var(--amber); }
.folio--fine { text-transform: none; letter-spacing: .02em; line-height: 1.7; }

.skip {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--paper); color: var(--ink);
  padding: 12px 18px; font-size: 12px; text-decoration: none;
}
.skip:focus { left: 8px; top: 8px; }

/* ── tipografía de bloque ──────────────────────────────────────────── */
.kicker {
  font-size: var(--fs-meta);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent-fine);
  margin-bottom: clamp(18px, 4vw, 30px);
}
.kicker-dom {
  display: block;
  font-size: clamp(12px, 3.2vw, 14px);
  letter-spacing: .08em;
  color: var(--amber);
}
.kicker-sub {
  display: block;
  margin-top: 6px;
  color: var(--muted);
  letter-spacing: .14em;
}
.kicker--mid { margin-top: clamp(48px, 9vw, 78px); color: var(--muted); }

.chapter {
  font-family: Anton, "Anton Fallback", Impact, sans-serif;
  font-weight: 400;
  text-transform: uppercase;
  font-size: var(--fs-display);
  line-height: .92;
  letter-spacing: -.01em;
  position: relative;
  margin-bottom: clamp(26px, 5vw, 40px);
}

.body { max-width: 52ch; margin-bottom: 1.15em; }
.body--aside { color: var(--muted); }

/* Fredoka es la voz. En toda la página aparece exactamente dos veces. */
.punch {
  font-family: Fredoka, ui-rounded, system-ui, sans-serif;
  font-weight: 700;
  font-size: var(--fs-product);
  line-height: 1.05;
  color: var(--accent);
  margin: .35em 0 .8em;
}

/* Caveat. Rotado, porque una nota al margen nunca sale derecha. */
.hand {
  font-family: Caveat, cursive;
  font-weight: 600;
  font-size: var(--fs-hand);
  line-height: 1.25;
  color: var(--accent-fine);
  transform: rotate(-1.5deg);
  transform-origin: left center;
  max-width: 26ch;
  margin-top: clamp(22px, 5vw, 34px);
}

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
  white-space: nowrap; border: 0;
}

/* ── capa ──────────────────────────────────────────────────────────── */
.cover { overflow: hidden; }
.cover-in { position: relative; padding-block: clamp(26px, 6vw, 64px) clamp(40px, 8vw, 92px); }

.cover-title {
  font-family: Anton, "Anton Fallback", Impact, sans-serif;
  font-weight: 400;
  text-transform: uppercase;
  font-size: var(--fs-hero);
  line-height: .88;
  letter-spacing: -.015em;
  color: var(--paper);
  position: relative;
  z-index: 2;
  overflow-wrap: break-word;
}
/* Con line-height .82, cualquier overflow:hidden sobre una línea recorta
   el acento de É. Por eso el titular se revela con translateY, nunca con
   máscara de clip-path. */
.cover-title .l { display: block; }
.cover-title .dot {
  color: var(--burnt);
  display: inline-block;
  transform-origin: 22% 92%;
}

.deck {
  font-size: clamp(15px, 1.9vw, 18px);
  line-height: 1.55;
  max-width: 30ch;
  margin-top: clamp(20px, 4vw, 30px);
}

.hand--cover { color: var(--muted); max-width: 30ch; }

.cover-scroll { margin-top: clamp(30px, 6vw, 46px); }
.cover-scroll a {
  font-size: var(--fs-meta);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--muted);
  text-decoration: none;
  transition: color 160ms var(--ease-out);
}
.cover-scroll .arr { display: inline-block; animation: nudge 2.4s ease-in-out infinite; }
@keyframes nudge { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(3px); } }
/* El cue avisa que hay más abajo. En cuanto cumple su trabajo, se va:
   movimiento infinito que no caduca es ruido. */
body.is-scrolled .cover-scroll { opacity: 0; transition: opacity 200ms var(--ease-out); }
body.is-scrolled .cover-scroll .arr { animation: none; }

@media (hover: hover) and (pointer: fine) {
  .cover-scroll a:hover { color: var(--amber); }
}

/* ── la polaroid ───────────────────────────────────────────────────
   La única foto de la página. No es un marco: es un objeto físico que
   alguien pegó encima. Por eso su ventana es 1:1 — la única vez que se
   rompe el 4:5 del sistema. */
.cover-figures {
  position: relative;
  margin-top: clamp(20px, 5vw, 32px);
  display: flex; align-items: flex-end;
}

.polaroid {
  --tilt: -3.2deg;
  position: relative;
  z-index: 4;
  width: 46%;
  max-width: 210px;
  margin-left: -2%;              /* sangra al gutter, a propósito */
  padding: 8px 8px 30px;
  background: var(--paper-2);
  box-shadow: 0 14px 34px -12px rgb(0 0 0 / .68);
  transform: rotate(var(--tilt));
}
.polaroid-window {
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--coffee);     /* mientras decodifica hay color, no un hueco */
}
.polaroid-window img { width: 100%; height: 100%; object-fit: cover; }
.polaroid-cap {
  font-family: Caveat, cursive;
  font-weight: 600;
  font-size: 15px;
  line-height: 1;
  color: var(--ink);
  text-align: center;
  margin-top: 9px;
}
/* Una sola pieza de cinta. Dos es de diseñador; una es de persona apurada. */
.polaroid::before {
  content: '';
  position: absolute; top: -9px; left: -14px;
  width: 62px; height: 19px;
  background: color-mix(in srgb, var(--paper) 20%, transparent);
  transform: rotate(14deg);
  clip-path: polygon(3% 0, 97% 6%, 100% 92%, 6% 100%);
}

/* ── doodles ───────────────────────────────────────────────────────
   --len y --dur los calcula pagina.js midiendo el path real, para que
   todos los trazos salgan de la misma pluma a la misma velocidad. */
.doodle path {
  fill: none;
  stroke: var(--accent);
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: var(--len, 429);
}
.js .doodle path { stroke-dashoffset: var(--len, 429); }
.doodle.drawn path { animation: draw var(--dur, 420ms) var(--ease-pen) forwards; }
@keyframes draw { to { stroke-dashoffset: 0; } }

/* o laço: sale de la polaroid, cruza la página y apunta al dominio.
   En portugués laço es el moño de un regalo y el lazo entre dos personas. */
.doodle--laco {
  position: absolute;
  left: 42%; bottom: 22%;
  width: 54%;          /* la punta de flecha aterriza dentro, sin rozar el borde */
  z-index: 2;
  pointer-events: none;
  overflow: visible;
}
.doodle--laco path { stroke: var(--amber); }

.doodle--rule {
  display: block;
  width: min(100%, 320px);
  height: 12px;
  margin-top: 10px;
}

/* ── o recibo ──────────────────────────────────────────────────────
   Funciona porque es uniforme. Una sola fila rompe la uniformidad,
   y esa fila es el chiste. */
.rcpt { margin-block: clamp(8px, 2vw, 16px) clamp(30px, 6vw, 44px); }
.rcpt-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: baseline;
  column-gap: 8px;
  padding-block: 9px;
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: .06em;
}
.rcpt-row dt { grid-column: 1; color: var(--muted); }
.rcpt-row dd { grid-column: 3; }
.rcpt-row::after {
  content: ''; grid-column: 2; align-self: center;
  border-bottom: 1px dotted currentColor;
  opacity: .34;
  transform: translateY(2px);
}
.rcpt-row--punch { padding-top: 16px; }
.rcpt-row--punch dd {
  font-family: Fredoka, ui-rounded, system-ui, sans-serif;
  font-weight: 700; font-size: 21px; letter-spacing: 0;
  color: var(--burnt);           /* 21px bold sobre crema → AA Large ✓ */
}
@media (max-width: 400px) { .rcpt-row { font-size: 11px; } }

/* ── pasos ─────────────────────────────────────────────────────────── */
.passos { margin-block: clamp(20px, 4vw, 30px); display: grid; gap: clamp(20px, 4vw, 28px); }
.passos li { display: grid; grid-template-columns: 34px 1fr; column-gap: 14px; align-items: start; }
.passos-n {
  font-size: var(--fs-meta); letter-spacing: .12em;
  color: var(--accent-fine); padding-top: .45em;
}
.passos li > p { grid-column: 2; max-width: 50ch; }
.passos li > p + p { margin-top: .7em; }
.passos-sub { color: var(--muted); font-size: .95em; }
.passos-sub strong { color: var(--fg); font-weight: 400; }

/* ── la caja: el antídoto anti-phishing ────────────────────────────── */
.caixa {
  margin-block: clamp(30px, 6vw, 44px);
  padding: clamp(20px, 4vw, 28px);
  border: 1px solid var(--rule);
  background: rgba(244, 236, 224, .035);
}
.caixa p { max-width: 50ch; }
.caixa p + p { margin-top: .9em; }
.caixa-lbl {
  font-size: var(--fs-meta); letter-spacing: .18em; text-transform: uppercase;
  color: var(--accent-fine); margin-bottom: .9em;
}
.caixa-punch { color: var(--paper); font-weight: 700; }

/* ── cinco perguntas ───────────────────────────────────────────────── */
.faq { border-top: 1px solid var(--rule); }
.q { border-bottom: 1px solid var(--rule); }
.q summary {
  list-style: none;
  cursor: pointer;
  padding-block: 18px;
  padding-right: 28px;
  position: relative;
  display: grid; grid-template-columns: 34px 1fr; column-gap: 14px;
  font-size: 14px;
  transition: color 160ms var(--ease-out);
}
.q summary::-webkit-details-marker { display: none; }
.q summary::after {
  content: '↓';
  position: absolute; right: 2px; top: 18px;
  color: var(--accent);
  transition: transform 200ms var(--ease-out);
}
.q[open] summary::after { transform: rotate(180deg); }
.q-n { font-size: var(--fs-meta); letter-spacing: .12em; color: var(--accent-fine); padding-top: .3em; }
.q-body { padding: 0 0 22px 48px; }
.q-body p { max-width: 50ch; }
.q-body p + p { margin-top: .9em; }
.q-punch { color: var(--accent-fine); }
.q summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
@media (hover: hover) and (pointer: fine) {
  .q summary:hover { color: var(--accent-fine); }
}
@media (max-width: 400px) { .q-body { padding-left: 0; } }

/* ── el CTA ────────────────────────────────────────────────────────
   No es un botón burnt: paper sobre burnt da 3.80:1 y falla AA.
   Es ink relleno (16.16:1) con el burnt detrás, desfasado 4px, como
   un misregistro de risografía. La restricción de accesibilidad
   produjo el mejor detalle visual de la página. */
.falar .body--aside { margin-top: 1.6em; }
.falar .page-in { min-height: 78svh; display: flex; flex-direction: column; justify-content: center; }
.cta-wrap { margin-top: clamp(28px, 5vw, 40px); }

.cta {
  position: relative;
  display: inline-flex; align-items: center; gap: 10px;
  min-height: 56px;
  padding: 16px 24px;
  background: var(--ink);
  color: var(--paper);
  font-family: "Space Mono", ui-monospace, monospace;
  font-weight: 700; font-size: 15px;
  letter-spacing: .1em; text-transform: uppercase;
  text-decoration: none;
  transition: transform 140ms var(--ease-out);
}
.cta::before {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: var(--burnt);
  transform: translate(4px, 4px);
}
/* Al presionar, el botón viaja hacia su sombra: la prensa se cierra. */
.cta:active { transform: translate(2px, 2px) scale(.985); }
.cta-arrow { transition: transform 160ms var(--ease-out); }
.cta:focus-visible { outline: 2px solid var(--burnt); outline-offset: 4px; }
@media (hover: hover) and (pointer: fine) {
  .cta:hover { transform: translate(-1px, -1px); }
  .cta:hover .cta-arrow { transform: translate(2px, -2px); }
}
.cta-sub {
  margin-top: 22px;
  font-size: var(--fs-meta); letter-spacing: .14em; text-transform: uppercase;
  color: var(--muted);
}

/* ── colofão ───────────────────────────────────────────────────────── */
.colofao .page-in { padding-block: clamp(48px, 9vw, 80px); }
.colofao .folio + .folio { margin-top: .7em; }
.colofao .folio--fine { max-width: 46ch; margin-top: 1.4em; }
.fim {
  margin-top: clamp(30px, 6vw, 44px);
  font-family: Fredoka, ui-rounded, system-ui, sans-serif;
  font-weight: 600;
  font-size: clamp(17px, 2.4vw, 21px);
  color: var(--paper);
}
.fim .star {
  color: var(--amber);
  font-family: "Space Mono", ui-monospace, monospace;
  font-variant-emoji: text;
}

/* ═══ movimiento ═══════════════════════════════════════════════════
   Una sola regla: un momento teatral, y todo lo demás son 14 píxeles.
   El momento teatral es el aterrizaje de la polaroid, porque es el
   instante en que Enrique entra a la página.
   ═════════════════════════════════════════════════════════════════ */

.js .rise { opacity: 0; transform: translateY(14px); }
.rise.in {
  opacity: 1;
  transform: none;
  transition: opacity .6s ease var(--d, 0ms), transform .6s var(--ease-out) var(--d, 0ms);
}

/* Coreografía del hero: cada pieza declara su propio --d. */
.cover [data-seq="1"] { --d:  80ms; }
.cover [data-seq="2"] { --d: 140ms; }
.cover [data-seq="3"] { --d: 200ms; }
.cover [data-seq="4"] { --d: 260ms; }
.cover [data-seq="5"] { --d: 380ms; }

/* El punto final: nunca desde scale(0). Nada en el mundo real
   aparece de la nada. */
.js .cover-title .dot { opacity: 0; transform: scale(.86); }
.cover-title .l.in .dot {
  opacity: 1; transform: scale(1);
  transition: opacity 200ms var(--ease-out) 440ms, transform 200ms var(--ease-out) 440ms;
}

/* La polaroid aterriza. Dos elementos anidados: el overshoot afecta
   solo a la rotación; escala y opacidad entran limpias, sin rebote. */
.js .polaroid { opacity: 0; transform: rotate(-9deg); }
.polaroid-window, .polaroid-cap { transition: none; }
.polaroid.landed {
  opacity: 1;
  transform: rotate(var(--tilt));
  transition: transform 620ms var(--ease-drop), opacity 380ms var(--ease-out);
}

/* La nota a mano: no es un fade, es tinta cayendo. */
.js .hand [data-i] { opacity: 0; }
.hand.inked [data-i] {
  animation: ink .01s linear forwards;
  animation-delay: calc(var(--i) * 22ms);
}
@keyframes ink { to { opacity: 1; } }

/* El contenedor del recibo no se desvanece: sus filas ya entran una por una.
   Solo recibe .in para dispararlas. */
.rcpt.rise, .rcpt.rise.in { opacity: 1; transform: none; transition: none; }

/* Filas del recibo. La de R$ 0,00 llega un beat tarde: es tiempo cómico. */
.js .rcpt.in .rcpt-row { opacity: 0; transform: translateY(10px); animation: row 480ms var(--ease-out) forwards; }
.rcpt.in .rcpt-row:nth-child(1) { animation-delay:   0ms; }
.rcpt.in .rcpt-row:nth-child(2) { animation-delay:  45ms; }
.rcpt.in .rcpt-row:nth-child(3) { animation-delay:  90ms; }
.rcpt.in .rcpt-row:nth-child(4) { animation-delay: 135ms; }
.rcpt.in .rcpt-row:nth-child(5) { animation-delay: 180ms; }
.rcpt.in .rcpt-row:nth-child(6) { animation-delay: 225ms; }
.rcpt.in .rcpt-row--punch       { animation-delay: 390ms; }
@keyframes row { to { opacity: 1; transform: none; } }

/* Si el usuario hace scroll antes de que termine la coreografía, se
   acaba la coreografía. El stagger es decorativo y jamás retiene. */
body.is-scrolled .cover [data-seq] { --d: 0ms !important; }

/* ═══ desktop ══════════════════════════════════════════════════════ */
@media (min-width: 760px) {
  .cover-in { min-height: 72svh; display: flex; flex-direction: column; justify-content: center; }
  .cover-title { max-width: 62%; }
  .deck { margin-top: clamp(24px, 3vw, 36px); }

  /* La polaroid sale del flujo y se cuelga a la derecha del titular.
     El laço cruza el hueco que queda entre los dos. */
  .cover-figures {
    position: absolute;
    right: 0; bottom: clamp(56px, 8vw, 120px);
    width: min(34%, 240px);
    margin: 0;
    justify-content: flex-end;
  }
  .polaroid { width: 100%; max-width: 210px; margin-left: 0; padding: 10px 10px 38px; }
  .polaroid-cap { font-size: 17px; margin-top: 11px; }
  .doodle--laco { left: auto; right: 92%; bottom: 34%; width: 300px; }
}

@media (min-width: 1100px) {
  /* El titular rompe el margen izquierdo. Deliberado, solo en desktop. */
  .cover-title .l:first-child { margin-left: -.055em; }
}

@media (max-width: 400px) {
  .polaroid { --tilt: -2.6deg; width: 45%; margin-left: 0; padding: 7px 7px 28px; }
  .doodle--laco { left: 44%; width: 52%; }
}
@media (max-width: 340px) {
  .polaroid { width: 42%; padding: 6px 6px 24px; }
  .polaroid-cap { font-size: 13px; }
}

/* ═══ accesibilidad ════════════════════════════════════════════════ */
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

@media (prefers-contrast: more) {
  .page--ink, .page--ink-warm, .page--ink-deep { --muted: rgba(244, 236, 224, .82); }
  .page--paper { --muted: rgba(20, 16, 12, .80); --rule: rgba(20, 16, 12, .32); }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .rise { opacity: 1 !important; transform: none !important; }
  .doodle path { stroke-dashoffset: 0 !important; }
  .cover-title .dot { opacity: 1 !important; transform: none !important; }
  .polaroid { opacity: 1 !important; transform: rotate(var(--tilt)) !important; }
  .hand [data-i] { opacity: 1 !important; }
  .rcpt.in .rcpt-row { opacity: 1 !important; transform: none !important; }
  /* Excepción deliberada: se conserva el acuse de recibo del botón.
     Uno que no responde al dedo se siente roto aunque no se mueva. */
  .cta { transition: opacity 140ms linear !important; }
  .cta:active { opacity: .82; transform: none !important; }
}

@media print {
  body::before, .masthead, .cover-scroll { display: none !important; }
  .page { background: #fff !important; color: #000 !important; }
}
