/* ============================================================
   AppClub · /blog — hoja de estilo

   Mismo lenguaje que la portada y /demo: papel de invernadero,
   tinta verde y los tres verdes de la marca. Tipos: Bricolage
   Grotesque (titulares), Instrument Sans (texto), Spline Sans
   Mono (rótulos y metadatos).

   Pero esto NO es la portada: es una superficie de lectura larga.
   Lo que manda aquí es la columna de texto. Por eso:

   · Una sola columna de ~66 caracteres, centrada, con el índice
     flotando fuera del raíl a partir de 1100px. Ni bento, ni
     rejilla de tarjetas iguales, ni tres cajitas de métricas.
   · La jerarquía la dan el ESPACIO y el PESO, no los recuadros.
     Los <h2> respiran 3 líneas por arriba y llevan su número en
     mono: se puede recorrer el post en diagonal sin leerlo.
   · El color aparece cuatro veces por página como mucho, y
     siempre significa algo (verde = marca y foco; ámbar = ojo;
     azul = dato). Nada de un chip de color por tarjeta.
   · Tema claro y oscuro. Quien lee un artículo de 2.000 palabras
     de noche tiene derecho a que no le queme la pantalla.

   Prefijo bp- (blog post) en todo, para no chocar con lp- de la
   portada ni con las clases de la app.
   ============================================================ */

:root {
  --paper: #f4f8f0;
  --paper-2: #eaf2e4;
  --surface: #ffffff;
  --ink: #16241d;
  --ink-2: #46584e;
  --ink-3: #75857b;
  --line: #d8e2d2;
  --line-2: #c3d2ba;
  --marca: #10795c;
  --marca-claro: #7ad693;
  --ambar: #b47b24;
  --azul: #2f6fe0;

  --display: 'Bricolage Grotesque', 'Instrument Sans', sans-serif;
  --body: 'Instrument Sans', ui-sans-serif, system-ui, -apple-system, sans-serif;
  --mono: 'Spline Sans Mono', ui-monospace, 'SFMono-Regular', monospace;

  --sh-sm: 0 1px 2px rgba(22, 36, 29, .05), 0 6px 16px -10px rgba(22, 36, 29, .18);
  --sh-md: 0 1px 2px rgba(22, 36, 29, .05), 0 16px 38px -18px rgba(22, 36, 29, .28);

  /* Lo que se apoya SOBRE el verde de marca, y el botón macizo. Son los dos
     sitios donde el color no se aclara al pasar a oscuro: se invierte. Como
     tokens, las reglas que los usan valen para los dos temas sin duplicarse. */
  --sobre-marca: #ffffff;
  --boton-fg: var(--paper);
  --boton-bg: var(--ink);
  --boton-fg-hover: #ffffff;
  --boton-bg-hover: var(--marca);

  --shell: 1180px;
  --gutter: clamp(20px, 5vw, 56px);
  --col: 66ch;            /* la medida de lectura; todo lo demás orbita alrededor */
  --indice: 200px;        /* ancho del índice lateral */
  --calle: clamp(36px, 5vw, 76px);  /* separación entre el índice y el texto */
}

/* ---------- Tema oscuro ----------
   Se declara DOS VECES, y no es un descuido:

     · el bloque de @media es para quien llega con el sistema en oscuro y NO ha
       tocado el interruptor (y también para quien tenga el JavaScript
       desactivado, que entonces es la única regla que actúa);
     · el bloque de [data-modo="oscuro"] es para quien lo ha elegido a mano,
       tenga el sistema como lo tenga.

   El `:not([data-modo])` del primero es lo que hace que elegir CLARO gane con
   el sistema en oscuro. Con data-theme solo no se podía distinguir: el tema
   claro es la AUSENCIA de atributo, así que «claro elegido» y «nada elegido»
   eran el mismo estado. Por eso blog.js escribe siempre data-modo con el modo
   ya resuelto. Y no se usa light-dark(), que ahorraría la duplicación, porque
   en un navegador que no la soporte los tokens quedan inválidos y la página
   sale sin colores: en una página de captación eso no se arriesga.

   Si tocas un color, tócalo en los dos sitios. */
:root[data-modo="oscuro"] {
  --paper: #0f1713;
  --paper-2: #131d17;
  --surface: #16211b;
  --ink: #e9f4ec;
  --ink-2: #a8bcaf;
  --ink-3: #7f9388;
  --line: #26362d;
  --line-2: #32463a;
  --marca: #5fc98a;
  --marca-claro: #9ee5b6;
  --ambar: #d9a44e;
  --azul: #7aa8f5;
  --sh-sm: 0 1px 2px rgba(0, 0, 0, .35), 0 6px 16px -10px rgba(0, 0, 0, .55);
  --sh-md: 0 1px 2px rgba(0, 0, 0, .35), 0 16px 38px -18px rgba(0, 0, 0, .7);
  --sobre-marca: #0f1713;
  --boton-fg: #0f1713;
  --boton-bg: var(--marca);
  --boton-fg-hover: #0f1713;
  --boton-bg-hover: var(--marca-claro);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-modo]) {
    --paper: #0f1713;
    --paper-2: #131d17;
    --surface: #16211b;
    --ink: #e9f4ec;
    --ink-2: #a8bcaf;
    --ink-3: #7f9388;
    --line: #26362d;
    --line-2: #32463a;
    --marca: #5fc98a;
    --marca-claro: #9ee5b6;
    --ambar: #d9a44e;
    --azul: #7aa8f5;
    --sh-sm: 0 1px 2px rgba(0, 0, 0, .35), 0 6px 16px -10px rgba(0, 0, 0, .55);
    --sh-md: 0 1px 2px rgba(0, 0, 0, .35), 0 16px 38px -18px rgba(0, 0, 0, .7);
    --sobre-marca: #0f1713;
    --boton-fg: #0f1713;
    --boton-bg: var(--marca);
    --boton-fg-hover: #0f1713;
    --boton-bg-hover: var(--marca-claro);
  }
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--body);
  font-size: 17px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}
img { max-width: 100%; height: auto; }
a { color: inherit; }
::selection { background: color-mix(in srgb, var(--marca) 30%, transparent); }

:where(a, button, summary, input):focus-visible {
  outline: 2.5px solid var(--marca);
  outline-offset: 3px;
  border-radius: 4px;
}

/* Salto directo al contenido: en un artículo largo, tabular por la cabecera
   y el índice antes de llegar al texto es una pérdida de tiempo real. */
.bp-saltar {
  position: absolute; left: -9999px; top: 0; z-index: 60;
  background: var(--ink); color: var(--paper);
  padding: 12px 18px; border-radius: 0 0 10px 0; font-weight: 600;
}
.bp-saltar:focus { left: 0; }

/* ---------- Raíl común ---------- */
.bp-shell {
  max-width: var(--shell); width: 100%;
  margin-inline: auto; padding-inline: var(--gutter);
}

/* ---------- Cabecera ----------
   Flota sobre el papel, sin barra ni cristal, igual que en /demo. Se queda
   pegada arriba porque en un texto de diez minutos la salida tiene que estar
   siempre a mano. */
.bp-top {
  position: sticky; top: 0; z-index: 40;
  background: color-mix(in srgb, var(--paper) 88%, transparent);
  backdrop-filter: saturate(1.2) blur(10px);
  border-bottom: 1px solid transparent;
  transition: border-color .2s ease;
}
.bp-top.bp-top-pegada { border-bottom-color: var(--line); }
.bp-top-in {
  display: flex; align-items: center; gap: 16px;
  min-height: 62px;
}
.bp-marca {
  display: inline-flex; align-items: center; gap: 9px;
  text-decoration: none; color: var(--ink);
  font-family: var(--display); font-size: 18px; font-weight: 640; letter-spacing: -.02em;
}
.bp-marca svg { display: block; }
.bp-marca-sub {
  font-family: var(--mono); font-size: 12px; font-weight: 400;
  color: var(--ink-3); letter-spacing: .02em;
  padding-left: 10px; margin-left: 2px; border-left: 1px solid var(--line-2);
}
.bp-top-nav { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.bp-top-nav a {
  font-size: 13.5px; font-weight: 500; color: var(--ink-2); text-decoration: none;
  padding: 8px 12px; border-radius: 999px;
}
.bp-top-nav a:hover { background: var(--paper-2); color: var(--ink); }
/* Interruptor de tema. Mismo objeto que en la portada (.lp-tema): un círculo a
   trazo con el sol o la luna. Se dibuja el DESTINO, no el estado actual —en
   claro se ve la luna, porque es lo que vas a obtener al pulsar—, que es la
   convención que menos confunde. Sobrevive en móvil aunque los enlaces de
   texto se escondan: en una página de lectura larga es de lo más útil que hay
   en la cabecera. */
.bp-modo {
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; flex: 0 0 auto; padding: 0;
  color: var(--ink-2); background: transparent; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: 50%;
  transition: color .15s ease, border-color .15s ease, transform .15s ease;
}
.bp-modo:hover { color: var(--ink); border-color: var(--ink-3); transform: translateY(-1px); }
.bp-modo svg { display: block; }
@media (prefers-reduced-motion: no-preference) {
  .bp-modo svg { animation: bp-modo-gira .32s cubic-bezier(.2, .7, .2, 1); }
}
@keyframes bp-modo-gira { from { opacity: 0; transform: rotate(-35deg) scale(.8); } to { opacity: 1; transform: none; } }

/* Rótulo solo para lectores de pantalla (el botón no lleva texto visible). */
.bp-sr {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

.bp-cta-top {
  font-size: 13.5px; font-weight: 600; color: var(--ink) !important;
  padding: 8px 15px !important; border: 1.5px solid var(--ink); border-radius: 999px;
  transition: background .15s ease, color .15s ease, transform .15s ease;
}
.bp-cta-top:hover { background: var(--ink); color: var(--paper) !important; transform: translateY(-1px); }

/* Barra de avance de lectura: 2px de verde bajo la cabecera. Solo en el post. */
.bp-avance {
  position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: var(--marca); transform: scaleX(0); transform-origin: left center;
}

/* ---------- Migas ---------- */
.bp-migas {
  font-family: var(--mono); font-size: 12px; color: var(--ink-3);
  margin: 26px 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
}
.bp-migas a { color: var(--ink-3); text-decoration: none; }
.bp-migas a:hover { color: var(--marca); text-decoration: underline; }
.bp-migas span[aria-hidden] { color: var(--line-2); }

/* ============================================================
   ÍNDICE  ·  /blog
   ============================================================ */

/* --- Portada del blog: un titular grande y nada más. Sin hero de tres
       columnas ni tarjetas de reclamo. --- */
.bp-portada { padding: clamp(38px, 7vh, 76px) 0 clamp(28px, 5vh, 52px); }
.bp-eyebrow {
  font-family: var(--mono); font-size: 12px; font-weight: 500;
  letter-spacing: .14em; text-transform: uppercase; color: var(--ink-2);
  margin: 0 0 18px; display: flex; align-items: center; gap: 10px;
}
.bp-eyebrow::before { content: ""; width: 26px; height: 2px; background: var(--marca); flex: 0 0 auto; }
.bp-portada h1 {
  font-family: var(--display);
  font-size: clamp(38px, 6vw, 68px); line-height: 1.02; letter-spacing: -.035em;
  font-weight: 700; margin: 0 0 18px; max-width: 17ch;
}
.bp-portada h1 em { font-style: normal; color: var(--marca); }
.bp-portada-sub {
  font-size: clamp(16px, 1.8vw, 19px); line-height: 1.55; color: var(--ink-2);
  max-width: 56ch; margin: 0;
}

/* --- Filtro por tema: píldoras de mono. Se mantienen todas las entradas en
       el HTML (el buscador las ve); el filtro solo esconde. --- */
.bp-temas {
  display: flex; flex-wrap: wrap; gap: 7px;
  padding: 0 0 clamp(26px, 4vh, 42px);
  border-bottom: 1px solid var(--line);
}
/* Son <a href="/blog/?tema=…"> de verdad, no <button>: sin JavaScript siguen
   navegando, y con JavaScript el filtro es instantáneo. Por eso hay que
   apagarles el subrayado del navegador a mano. */
.bp-tema {
  font-family: var(--mono); font-size: 12px; letter-spacing: .02em;
  text-decoration: none;
  color: var(--ink-2); background: transparent; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: 999px; padding: 7px 14px;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.bp-tema:hover { border-color: var(--ink-3); color: var(--ink); }
.bp-tema[aria-pressed="true"] { background: var(--marca); border-color: var(--marca); color: var(--sobre-marca); }

/* --- La entrada destacada: EL elemento dominante de la portada.
       Ocupa el ancho entero y el dibujo se sale de la caja. --- */
/* OJO: el `display: grid` de aquí abajo es una regla de AUTOR y gana al
   `[hidden] { display: none }` de la hoja del navegador. Sin esta línea, el
   atributo `hidden` que le pone el filtro no surtía ningún efecto y la guía se
   quedaba clavada en pantalla aunque filtraras por «Socios» o por «Cultivo».
   A las entradas de la lista sí se les puso el respaldo en su día; a esta no.
   Misma trampa que con cualquier elemento al que se le fija el display. */
.bp-destacada[hidden] { display: none; }
.bp-destacada {
  display: grid; grid-template-columns: minmax(0, 1fr) 240px;
  align-items: center; gap: clamp(24px, 5vw, 56px);
  padding: clamp(30px, 5vh, 54px) 0;
  border-bottom: 1px solid var(--line);
  text-decoration: none; color: inherit;
}
.bp-destacada h2 {
  font-family: var(--display); font-size: clamp(28px, 3.6vw, 44px);
  line-height: 1.08; letter-spacing: -.03em; font-weight: 680;
  margin: 12px 0 12px; max-width: 20ch;
}
.bp-destacada:hover h2 { color: var(--marca); }
.bp-destacada p { color: var(--ink-2); margin: 0 0 18px; max-width: 52ch; }
.bp-destacada .bp-motivo { width: 100%; height: auto; color: var(--marca); opacity: .9; }
.bp-leer {
  font-family: var(--mono); font-size: 13px; color: var(--marca); font-weight: 500;
  display: inline-flex; align-items: center; gap: 8px;
}
.bp-destacada:hover .bp-leer span { transform: translateX(4px); }
.bp-leer span { transition: transform .15s ease; }

/* --- El resto, en LISTA editorial, no en rejilla de tarjetas iguales:
       número en mono, dibujo pequeño, titular y una línea. --- */
.bp-lista { list-style: none; margin: 0; padding: 0; }
.bp-lista li { border-bottom: 1px solid var(--line); }
.bp-lista li[hidden] { display: none; }
.bp-entrada {
  display: grid; grid-template-columns: 52px 64px minmax(0, 1fr) auto;
  align-items: center; gap: clamp(14px, 2.4vw, 28px);
  padding: 26px 0; text-decoration: none; color: inherit;
}
/* En la primera columna iba un número de orden (01, 02, 03…). No decía nada:
   con el filtro puesto había que renumerar por JavaScript, y aun así el número
   solo contaba posiciones. Ahora va la FECHA, que es lo que un lector busca en
   un blog con publicación diaria y lo que hace visible la cadencia. */
.bp-fecha {
  font-family: var(--mono); font-size: 12px; color: var(--ink-3);
  white-space: nowrap; letter-spacing: .02em;
}
.bp-entrada .bp-motivo { width: 64px; height: auto; color: var(--ink-3); transition: color .18s ease, transform .18s ease; }
.bp-entrada:hover .bp-motivo { color: var(--marca); transform: translateY(-2px); }
.bp-entrada h3 {
  font-family: var(--display); font-size: clamp(19px, 2.1vw, 24px);
  line-height: 1.2; letter-spacing: -.02em; font-weight: 620; margin: 0 0 5px;
}
.bp-entrada:hover h3 { color: var(--marca); }
.bp-entrada p { margin: 0; font-size: 14.5px; color: var(--ink-2); max-width: 60ch; }
.bp-etiqueta {
  font-family: var(--mono); font-size: 11px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--ink-3); white-space: nowrap;
}
.bp-vacio {
  padding: 40px 0 0; color: var(--ink-2); font-size: 15px;
}

/* ============================================================
   ARTÍCULO
   ============================================================ */

.bp-cab { padding: clamp(22px, 4vh, 40px) 0 clamp(24px, 4vh, 40px); }
.bp-cab-in { max-width: 62rem; }
/* El titular tiene que arrancar en la MISMA vertical que el primer párrafo.
   Antes la cabecera vivía en el raíl completo y el cuerpo empezaba pasado el
   índice: eran dos márgenes izquierdos distintos separados casi 200px, y en
   una página que es 90% texto ese escalón se ve enseguida. Cabecera y migas
   se meten ahora en la misma calle que el cuerpo. */
@media (min-width: 1100px) {
  .bp-cab-in {
    display: grid;
    grid-template-columns: var(--indice) minmax(0, var(--col));
    column-gap: var(--calle);
    max-width: none;
  }
  .bp-cab-in > * { grid-column: 2; }
  /* Solo las migas del artículo: en la portada del blog no hay índice lateral
     y sangrarlas ahí las dejaría flotando en medio de la nada. */
  .bp-migas-art { padding-left: calc(var(--indice) + var(--calle)); }
}
.bp-cat {
  font-family: var(--mono); font-size: 12px; font-weight: 500;
  letter-spacing: .12em; text-transform: uppercase; color: var(--marca);
  margin: 22px 0 14px;
}
.bp-h1 {
  font-family: var(--display);
  font-size: clamp(32px, 5.2vw, 58px); line-height: 1.03; letter-spacing: -.035em;
  font-weight: 700; margin: 0 0 20px; max-width: 20ch;
}
.bp-entradilla {
  font-size: clamp(17.5px, 2vw, 21px); line-height: 1.5; color: var(--ink-2);
  max-width: 50ch; margin: 0 0 26px; font-weight: 400;
}
.bp-meta {
  font-family: var(--mono); font-size: 12.5px; color: var(--ink-3);
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  padding-top: 18px; border-top: 1px solid var(--line);
}
.bp-meta span + span::before { content: "·"; margin-right: 10px; color: var(--line-2); }

/* --- El cuerpo y su índice --- */
.bp-doc { padding-bottom: clamp(40px, 7vh, 84px); }
.bp-doc-in { display: block; }
@media (min-width: 1100px) {
  .bp-doc-in {
    display: grid;
    grid-template-columns: var(--indice) minmax(0, var(--col));
    column-gap: var(--calle);
    align-items: start;
  }
}

/* Índice lateral: en un artículo de 2.000 palabras es la diferencia entre
   leerlo y cerrarlo. Fuera del móvil va pegado; dentro, es un plegable. */
.bp-indice { font-size: 13.5px; }
@media (min-width: 1100px) {
  .bp-indice { position: sticky; top: 92px; max-height: calc(100vh - 130px); overflow-y: auto; }
  .bp-indice-tit { display: block; }
  .bp-indice > summary { display: none; }
}
.bp-indice-tit {
  font-family: var(--mono); font-size: 11px; letter-spacing: .1em; text-transform: uppercase;
  color: var(--ink-3); margin: 0 0 12px;
}
.bp-indice ol { list-style: none; margin: 0; padding: 0; }
.bp-indice li { margin: 0; }
.bp-indice a {
  display: block; padding: 6px 0 6px 14px; color: var(--ink-2); text-decoration: none;
  border-left: 2px solid var(--line);
  line-height: 1.35;
  transition: color .15s ease, border-color .15s ease;
}
.bp-indice a:hover { color: var(--ink); border-left-color: var(--line-2); }
.bp-indice a.bp-aqui { color: var(--marca); border-left-color: var(--marca); font-weight: 500; }
/* En móvil el índice es un <details> plegado. */
@media (max-width: 1099px) {
  .bp-indice {
    background: var(--surface); border: 1px solid var(--line); border-radius: 14px;
    padding: 4px 16px; margin-bottom: 32px;
  }
  .bp-indice > summary {
    list-style: none; cursor: pointer; padding: 14px 0;
    font-family: var(--mono); font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
    color: var(--ink-2); display: flex; justify-content: space-between; align-items: center;
  }
  .bp-indice > summary::-webkit-details-marker { display: none; }
  .bp-indice > summary::after { content: "+"; font-size: 16px; color: var(--marca); }
  .bp-indice[open] > summary::after { content: "–"; }
  .bp-indice[open] > summary { border-bottom: 1px solid var(--line); }
  .bp-indice-tit { display: none; }
  .bp-indice ol { padding: 10px 0 16px; }
  .bp-indice a { border-left: none; padding-left: 0; }
  .bp-indice a.bp-aqui { border-left: none; }
}

/* --- «En corto»: lo primero que lee quien tiene prisa, y lo que un buscador
       puede extraer. Es el post-it del sistema: papel, esquina doblada y una
       inclinación mínima. No es un recuadro de aviso más. --- */
.bp-encorto {
  position: relative;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 22px 24px;
  margin: 0 0 40px;
}
.bp-encorto::after {
  content: ""; position: absolute; right: -1px; top: -1px;
  width: 26px; height: 26px;
  background: var(--paper); border-left: 1px solid var(--line); border-bottom: 1px solid var(--line);
  border-radius: 0 14px 0 6px;
}
.bp-encorto h2 {
  font-family: var(--mono); font-size: 11px; font-weight: 500;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3);
  margin: 0 0 14px; padding: 0; border: 0;
}
.bp-encorto ul { margin: 0; padding: 0; list-style: none; }
.bp-encorto li {
  position: relative; padding-left: 20px; margin: 0 0 10px;
  font-size: 15.5px; line-height: 1.5; color: var(--ink);
}
.bp-encorto li:last-child { margin-bottom: 0; }
.bp-encorto li::before {
  content: ""; position: absolute; left: 0; top: .62em;
  width: 8px; height: 2px; background: var(--marca); border-radius: 2px;
}

/* --- Tipografía del cuerpo --- */
.bp-cuerpo { font-size: 18px; line-height: 1.68; }
.bp-cuerpo > p { margin: 0 0 1.35em; }
.bp-cuerpo > p:first-of-type { font-size: 19px; }
.bp-cuerpo strong { font-weight: 600; }
.bp-cuerpo a {
  color: var(--ink); text-decoration: underline;
  text-decoration-color: color-mix(in srgb, var(--marca) 55%, transparent);
  text-decoration-thickness: 1.5px; text-underline-offset: 3px;
  transition: color .15s ease, text-decoration-color .15s ease;
}
.bp-cuerpo a:hover { color: var(--marca); text-decoration-color: currentColor; }

/* Los <h2> respiran. El contador en mono deja recorrer el post en diagonal. */
.bp-cuerpo h2 {
  counter-increment: bp-sec;
  font-family: var(--display); font-size: clamp(23px, 2.8vw, 30px);
  line-height: 1.16; letter-spacing: -.025em; font-weight: 660;
  margin: 2.4em 0 .7em; scroll-margin-top: 84px;
  position: relative;
}
.bp-cuerpo h2::before {
  content: counter(bp-sec, decimal-leading-zero);
  display: block; margin-bottom: 10px;
  font-family: var(--mono); font-size: 12px; font-weight: 400; letter-spacing: .1em;
  color: var(--marca);
}
.bp-cuerpo { counter-reset: bp-sec; }
.bp-cuerpo h3 {
  font-family: var(--display); font-size: clamp(18px, 2vw, 21px);
  line-height: 1.25; letter-spacing: -.015em; font-weight: 620;
  margin: 2em 0 .5em;
}

.bp-cuerpo ul, .bp-cuerpo ol { margin: 0 0 1.35em; padding-left: 1.3em; }
.bp-cuerpo li { margin-bottom: .55em; }
.bp-cuerpo li::marker { color: var(--ink-3); }
.bp-cuerpo ol li::marker { font-family: var(--mono); font-size: .9em; }

/* Lista de comprobación: la palomita en verde dice «esto se puede tachar». */
.bp-cuerpo ul.bp-check { list-style: none; padding-left: 0; }
.bp-cuerpo ul.bp-check li { position: relative; padding-left: 30px; }
.bp-cuerpo ul.bp-check li::before {
  content: ""; position: absolute; left: 3px; top: .42em;
  width: 11px; height: 6px; border-left: 2px solid var(--marca); border-bottom: 2px solid var(--marca);
  transform: rotate(-45deg);
}

/* Cita: sin comillas gigantes ni cursiva de folleto. Una línea verde y peso. */
.bp-cuerpo blockquote.bp-cita {
  margin: 2em 0; padding: 2px 0 2px 24px;
  border-left: 2px solid var(--marca);
}
.bp-cuerpo blockquote.bp-cita p {
  font-family: var(--display); font-size: clamp(19px, 2.2vw, 23px);
  line-height: 1.34; letter-spacing: -.015em; font-weight: 500; margin: 0;
}
.bp-cuerpo blockquote.bp-cita cite {
  display: block; margin-top: 12px;
  font-family: var(--mono); font-size: 12.5px; font-style: normal; color: var(--ink-3);
}

/* Los tres recuadros. Se distinguen por el COLOR DEL RÓTULO, no por tres
   fondos distintos: el papel es siempre el mismo y así no parece un
   semáforo. Cada color cumple lo que significa en el resto del sistema. */
.bp-cuerpo aside {
  margin: 2em 0; padding: 20px 22px;
  background: var(--surface);
  border: 1px solid var(--line); border-radius: 14px;
  font-size: 16.5px; line-height: 1.58;
}
.bp-cuerpo aside p { margin: 0 0 .7em; }
.bp-cuerpo aside p:last-child { margin-bottom: 0; }
.bp-cuerpo aside h4 {
  font-family: var(--mono); font-size: 11px; font-weight: 500;
  letter-spacing: .12em; text-transform: uppercase;
  margin: 0 0 10px;
}
.bp-cuerpo aside.bp-clave { border-left: 3px solid var(--marca); }
.bp-cuerpo aside.bp-clave h4 { color: var(--marca); }
/* Aviso legal: ámbar, que en el sistema es «pide atención sin ser un error».
   El texto va en tinta porque el ámbar sobre este papel no llega a 4,5:1. */
.bp-cuerpo aside.bp-aviso { border-left: 3px solid var(--ambar); background: var(--paper-2); }
.bp-cuerpo aside.bp-aviso::before {
  content: "Aviso";
  display: block; margin-bottom: 8px;
  font-family: var(--mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--ambar);
}
.bp-cuerpo aside.bp-aviso p { font-size: 15.5px; color: var(--ink-2); }
/* La mención al producto. Deliberadamente la pieza MÁS discreta de la página:
   sin fondo, sin botón, sin borde de caja. Solo un filete verde y el nombre
   en versalitas. Si gritara, el artículo dejaría de creerse. */
.bp-cuerpo aside.bp-producto {
  background: transparent; border: 0; border-left: 2px solid var(--line-2);
  border-radius: 0; padding: 4px 0 4px 22px; margin: 2.2em 0;
  font-size: 16px; color: var(--ink-2);
}
.bp-cuerpo aside.bp-producto::before {
  content: "AppClub";
  display: block; margin-bottom: 6px;
  font-family: var(--mono); font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3);
}

/* Tabla: sin filas rayadas ni cabecera de color. Hairlines y espacio. */
.bp-tabla-wrap { margin: 2em 0; overflow-x: auto; }
.bp-cuerpo table {
  width: 100%; border-collapse: collapse; font-size: 15.5px; min-width: 34rem;
}
.bp-cuerpo th, .bp-cuerpo td {
  text-align: left; padding: 12px 16px 12px 0; border-bottom: 1px solid var(--line);
  vertical-align: top;
}
.bp-cuerpo th {
  font-family: var(--mono); font-size: 11.5px; font-weight: 500;
  letter-spacing: .07em; text-transform: uppercase; color: var(--ink-3);
  border-bottom-color: var(--line-2);
}
.bp-cuerpo tbody tr:last-child td { border-bottom: 0; }

/* Pasos numerados: el raíl con puntos de la app, en versión artículo. */
.bp-cuerpo figure.bp-pasos { margin: 2.2em 0; padding: 0; }
.bp-cuerpo figure.bp-pasos ol {
  list-style: none; counter-reset: bp-paso; padding: 0; margin: 0;
  border-left: 1px solid var(--line);
}
.bp-cuerpo figure.bp-pasos li {
  counter-increment: bp-paso; position: relative;
  padding: 0 0 22px 28px; margin: 0;
}
.bp-cuerpo figure.bp-pasos li:last-child { padding-bottom: 0; }
.bp-cuerpo figure.bp-pasos li::before {
  content: counter(bp-paso);
  position: absolute; left: -11px; top: 1px;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--paper); border: 1px solid var(--line-2); color: var(--ink-3);
  font-family: var(--mono); font-size: 11px; line-height: 20px; text-align: center;
}
.bp-cuerpo figure.bp-pasos figcaption {
  margin-top: 14px; padding-left: 28px;
  font-family: var(--mono); font-size: 12px; color: var(--ink-3);
}

/* --- Preguntas frecuentes: plegables. Van a FAQPage en los datos
       estructurados, así que el texto está siempre en el HTML. --- */
.bp-faq { margin: 3.5em 0 0; }
.bp-faq > h2 {
  font-family: var(--display); font-size: clamp(23px, 2.8vw, 30px);
  letter-spacing: -.025em; font-weight: 660; margin: 0 0 20px;
}
.bp-faq details { border-top: 1px solid var(--line); }
.bp-faq details:last-of-type { border-bottom: 1px solid var(--line); }
.bp-faq summary {
  list-style: none; cursor: pointer; padding: 18px 30px 18px 0; position: relative;
  font-size: 17px; font-weight: 500; line-height: 1.4;
}
.bp-faq summary::-webkit-details-marker { display: none; }
.bp-faq summary::after {
  content: ""; position: absolute; right: 6px; top: 26px;
  width: 9px; height: 9px; border-right: 1.8px solid var(--marca); border-bottom: 1.8px solid var(--marca);
  transform: rotate(45deg); transition: transform .18s ease;
}
.bp-faq details[open] summary::after { transform: rotate(-135deg); top: 30px; }
.bp-faq summary:hover { color: var(--marca); }
.bp-faq details > div { padding: 0 40px 20px 0; color: var(--ink-2); font-size: 16.5px; }
.bp-faq details > div p { margin: 0 0 .8em; }
.bp-faq details > div p:last-child { margin-bottom: 0; }

/* --- Cierre comercial. UNA por página, al final, después de haber dado
       algo. Material «ventana flotante» del sistema. --- */
.bp-cierre {
  margin: 4em 0 0; padding: clamp(26px, 4vw, 38px);
  background: var(--surface); border: 1px solid var(--line);
  border-radius: 18px; box-shadow: var(--sh-sm);
}
.bp-cierre h2 {
  font-family: var(--display); font-size: clamp(21px, 2.4vw, 27px);
  line-height: 1.15; letter-spacing: -.025em; font-weight: 660; margin: 0 0 12px;
}
.bp-cierre p { margin: 0 0 22px; color: var(--ink-2); font-size: 16.5px; max-width: 48ch; }
.bp-boton {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--body); font-size: 15.5px; font-weight: 600;
  color: var(--boton-fg); background: var(--boton-bg); border: none; border-radius: 999px;
  padding: 13px 24px; text-decoration: none;
  box-shadow: 0 10px 24px -12px rgba(22, 36, 29, .55);
  transition: transform .15s ease, background .15s ease;
}
.bp-boton:hover { transform: translateY(-2px); background: var(--boton-bg-hover); color: var(--boton-fg-hover); }
.bp-boton span { transition: transform .15s ease; }
.bp-boton:hover span { transform: translateX(3px); }


/* --- Sigue leyendo --- */
.bp-sigue { margin: 4em 0 0; padding-top: 30px; border-top: 1px solid var(--line); }
.bp-sigue h2 {
  font-family: var(--mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--ink-3); font-weight: 500; margin: 0 0 6px;
}
.bp-sigue ul { list-style: none; margin: 0; padding: 0; }
.bp-sigue li { border-bottom: 1px solid var(--line); }
.bp-sigue li:last-child { border-bottom: 0; }
.bp-sigue a {
  display: flex; align-items: center; gap: 18px; padding: 18px 0;
  text-decoration: none; color: inherit;
}
.bp-sigue .bp-motivo { width: 52px; flex: 0 0 52px; height: auto; color: var(--ink-3); transition: color .18s ease; }
.bp-sigue a:hover .bp-motivo { color: var(--marca); }
.bp-sigue b {
  display: block; font-family: var(--display); font-size: 18px; font-weight: 620;
  letter-spacing: -.015em; line-height: 1.25; margin-bottom: 3px;
}
.bp-sigue a:hover b { color: var(--marca); }
.bp-sigue small { color: var(--ink-3); font-family: var(--mono); font-size: 11.5px; letter-spacing: .05em; text-transform: uppercase; }

/* ---------- Pie ---------- */
.bp-pie {
  margin-top: clamp(50px, 9vh, 96px);
  border-top: 1px solid var(--line);
  padding: 30px 0 34px;
  font-family: var(--mono); font-size: 12px; color: var(--ink-3);
}
.bp-pie-in { display: flex; flex-wrap: wrap; gap: 14px 26px; align-items: center; }
.bp-pie a { color: var(--ink-2); text-decoration: none; }
.bp-pie a:hover { color: var(--marca); text-decoration: underline; }
.bp-pie-fin { margin-left: auto; }

/* ---------- Responsive ---------- */
@media (max-width: 860px) {
  .bp-destacada { grid-template-columns: 1fr; }
  .bp-destacada .bp-motivo { width: 150px; order: -1; }
  .bp-entrada { grid-template-columns: 52px minmax(0, 1fr); gap: 12px 16px; padding: 22px 0; }
  .bp-entrada .bp-motivo { grid-row: 1 / span 2; width: 52px; }
  /* En móvil solo sobrevive la fecha encima del titular. La categoría se cae:
     ya está en las píldoras del filtro, y dos líneas de metadatos sobre un
     titular de dos líneas convierten cada entrada en más cabecera que
     artículo. */
  .bp-entrada .bp-fecha { grid-column: 2; order: -1; }
  .bp-entrada .bp-etiqueta { display: none; }
  .bp-entrada > div { grid-column: 2; }
  .bp-cuerpo { font-size: 17px; }
  .bp-marca-sub { display: none; }
  .bp-top-nav a:not(.bp-cta-top) { display: none; }
}
@media (max-width: 480px) {
  .bp-cuerpo aside { padding: 16px 18px; }
  .bp-encorto { padding: 18px 20px; }
}

/* ---------- Impresión: un club que quiere llevarse la guía en papel ---------- */
@media print {
  .bp-top, .bp-indice, .bp-cierre, .bp-sigue, .bp-temas, .bp-migas, .bp-saltar { display: none !important; }
  body { background: #fff; color: #000; font-size: 11pt; }
  .bp-doc-in { display: block; }
  .bp-cuerpo a { text-decoration: none; }
  .bp-cuerpo h2 { page-break-after: avoid; }
}
