/* ══════════════════════════════════════════════════════════════════════════
   Blog de marketingespaña.com · sistema de bloques «Tinta y lima» · v2
   Contrato de tokens: Desktop\07-ECOSISTEMA\marketingespana-web\DESIGN-TOKENS-BLOG.md
   Todo valor sale de un token. Iconos: SVG inline (0 peticiones).
   ══════════════════════════════════════════════════════════════════════════ */
/* Tokens en :root: los elementos que viven FUERA de .itb-blog (barra de progreso,
   acciones flotantes y aviso de copiado se inyectan en <body>) también los necesitan. */
:root{
  --itb-ink:#12141d; --itb-soft:#3a3a3d; --itb-bg:#eeefe7; --itb-line:#dfe1d6;
  --itb-acc:#ccff8b; --itb-acc-hov:#b1fb5b; --itb-dark:#090809; --itb-lima-acida:#C6F03C;
  --itb-cta-sub:#c9cbd2;
}
.itb-blog{
  --itb-ink:#12141d; --itb-soft:#3a3a3d; --itb-bg:#eeefe7; --itb-line:#dfe1d6;
  --itb-acc:#ccff8b; --itb-acc-hov:#b1fb5b; --itb-dark:#090809; --itb-lima-acida:#C6F03C;
  --itb-cta-sub:#c9cbd2;
  --itb-r:12px; --itb-r-lg:16px; --itb-pad:18px 22px;
  --itb-gap:1.6em; --itb-chip:30px;
  color:var(--itb-ink); font-size:17px; line-height:1.75;
  /* El ancho de la web es 1200 px (orden de Jesús, 24-ago-2026): SIN padding lateral en
     escritorio, para que el contenido mida 1200 REALES y no 1120. El margen lateral en
     pantallas pequeñas se recupera en las media queries de abajo. */
  max-width:1200px; margin:0 auto; padding:0; box-sizing:border-box;
  font-family:'Inter','Helvetica Neue',Arial,sans-serif;
  font-variant-numeric:tabular-nums;
}
.itb-blog h1,.itb-blog h2,.itb-blog h3{font-family:'Merriweather',Georgia,'Times New Roman',serif}
.itb-blog p{text-align:justify;text-wrap:pretty}
.itb-blog a{color:var(--itb-ink);transition:color .18s cubic-bezier(.22,.61,.36,1),background-color .18s cubic-bezier(.22,.61,.36,1),text-decoration-color .18s ease-out}
.itb-blog a:hover{color:var(--itb-soft)}
.itb-blog p a{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:var(--itb-acc-hov)}
.itb-blog p a:hover{text-decoration-thickness:2px}
.itb-blog a:focus-visible{outline:2px solid var(--itb-ink);outline-offset:2px;border-radius:2px}
.itb-blog .itb-oscuro a:focus-visible{outline-color:var(--itb-acc)}
.itb-blog ul,.itb-blog ol{text-align:left}
.itb-blog strong{font-weight:600}

/* ── Jerarquía: cada H2 abre sección con un filete lima ───────────────────── */
.itb-blog h2{font-size:1.5em;line-height:1.25;letter-spacing:-.01em;margin:2em 0 .6em;scroll-margin-top:110px;text-wrap:balance;position:relative;padding-top:.5em}
.itb-blog h2::before{content:"";position:absolute;top:0;left:0;width:44px;height:3px;border-radius:2px;background:var(--itb-acc)}
.itb-blog h3{font-size:1.16em;line-height:1.35;margin:1.6em 0 .4em;scroll-margin-top:110px;text-wrap:balance}
.itb-blog h2+p,.itb-blog h3+p{margin-top:0}

/* ── Metadatos de cabecera ────────────────────────────────────────────────── */
.itb-blog .itb-fecha{color:var(--itb-soft);font-size:.88em;margin:0 0 1.4em;text-align:left;letter-spacing:.01em}

/* ── Chip de icono, común a los bloques con marca ─────────────────────────── */
.itb-blog .itb-resumen,.itb-blog .itb-def,.itb-blog .itb-dato,.itb-blog .itb-changelog,
.itb-blog .itb-toc,.itb-blog .itb-exp{position:relative}
.itb-blog .itb-resumen::after,.itb-blog .itb-def::after,.itb-blog .itb-dato::after,
.itb-blog .itb-toc::after{
  content:"";position:absolute;top:14px;right:16px;width:var(--itb-chip);height:var(--itb-chip);
  border-radius:9px;background-color:var(--itb-acc);background-repeat:no-repeat;
  background-position:center;background-size:17px;
}
.itb-blog .itb-resumen::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13 2 4.5 13.5H11l-1 8.5 8.5-11.5H12z'/%3E%3C/svg%3E")}
.itb-blog .itb-def::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4.5A2.5 2.5 0 0 1 6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5z'/%3E%3Cpath d='M8 7h8M8 11h6'/%3E%3C/svg%3E")}
.itb-blog .itb-dato::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20V10M10 20V4M16 20v-7M22 20H2'/%3E%3C/svg%3E")}
.itb-blog .itb-toc::after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 6h13M8 12h13M8 18h13M3.5 6h.01M3.5 12h.01M3.5 18h.01'/%3E%3C/svg%3E")}
.itb-blog .itb-resumen p,.itb-blog .itb-def p,.itb-blog .itb-dato p{padding-right:calc(var(--itb-chip) + 14px)}

/* ── Resumen (respuesta directa) ──────────────────────────────────────────── */
.itb-blog .itb-resumen{background:var(--itb-bg);border:1px solid var(--itb-line);border-left:4px solid var(--itb-acc);border-radius:var(--itb-r);padding:var(--itb-pad);margin:0 0 1.2em}
.itb-blog .itb-resumen p{margin:0;font-weight:500;font-size:1.02em;line-height:1.62}

/* ── Claves (bloque oscuro) ───────────────────────────────────────────────── */
.itb-blog .itb-claves{background:var(--itb-dark);border-radius:var(--itb-r);padding:22px 26px;margin:0 0 var(--itb-gap)}
.itb-blog .itb-claves p:first-child{color:var(--itb-lima-acida);font-size:.78em;font-weight:700;letter-spacing:.08em;margin:0 0 12px;text-align:left;text-transform:uppercase}
.itb-blog .itb-claves ul{color:#fff;margin:0;padding:0;list-style:none;font-size:.96em;line-height:1.65;display:grid;gap:10px}
.itb-blog .itb-claves li{position:relative;padding-left:26px}
.itb-blog .itb-claves li::before{content:"";position:absolute;left:0;top:.62em;width:10px;height:10px;border-radius:3px;background:var(--itb-acc)}

/* ── Índice ───────────────────────────────────────────────────────────────── */
.itb-blog .itb-toc{background:var(--itb-bg);border:1px solid var(--itb-line);border-radius:var(--itb-r);padding:18px 24px;margin:1.4em 0 2.2em}
.itb-blog .itb-toc ol{margin:0;padding:0;list-style:none;counter-reset:toc;columns:2;column-gap:34px;font-size:.97em}
.itb-blog .itb-toc li{position:relative;break-inside:avoid}
/* 🥇 RETIRADO (2-sep-2026): numeracion OBSOLETA del indice. Convivian DOS sistemas de
   dos versiones de esta hoja: el nuevo numera en el <a> con el contador `itbtoc`, y este
   viejo numeraba en el <li> con `toc`. La regla nueva redefine `counter-reset` en el mismo
   <ol>, asi que `toc` dejo de incrementarse — y un contador a CERO con ceros a la izquierda
   imprime literalmente «00». Cada entrada del indice arrastraba un 00 fantasma delante. */
.itb-blog .itb-toc a{text-decoration:none;transition:color .18s ease-out}
.itb-blog .itb-toc a:hover{color:var(--itb-soft);text-decoration:underline;text-underline-offset:3px}

/* ── Definición ───────────────────────────────────────────────────────────── */
.itb-blog .itb-def{border:1px solid var(--itb-line);border-radius:var(--itb-r);padding:18px 22px;margin:1.3em 0;background:#fff;box-shadow:0 1px 0 var(--itb-line)}
.itb-blog .itb-def p{margin:0}

/* ── Dato con fuente ──────────────────────────────────────────────────────── */
.itb-blog .itb-dato{background:var(--itb-bg);border:1px solid var(--itb-line);border-left:4px solid var(--itb-acc);border-radius:var(--itb-r);padding:16px 20px;margin:1.3em 0;font-size:.96em}
.itb-blog .itb-dato p{margin:0}

/* ── Tablas ───────────────────────────────────────────────────────────────── */
.itb-blog .itb-table-responsive{overflow-x:auto;margin:1.4em 0;border:1px solid var(--itb-line);border-radius:var(--itb-r);-webkit-overflow-scrolling:touch}
.itb-blog table{border-collapse:collapse;width:100%;font-size:.94em;min-width:520px}
.itb-blog th,.itb-blog td{border-bottom:1px solid var(--itb-line);padding:11px 14px;text-align:left;vertical-align:top}
.itb-blog th{background:var(--itb-bg);font-family:'Inter',sans-serif;font-weight:600;font-size:.92em;letter-spacing:.01em;border-bottom:2px solid var(--itb-line)}
.itb-blog tbody tr:last-child td{border-bottom:0}
.itb-blog tbody tr{transition:background-color .18s ease-out}
.itb-blog tbody tr:hover{background:#f6f7f0}
.itb-blog td:first-child{font-weight:600}

/* ── Pasos numerados (con línea conectora) ────────────────────────────────── */
.itb-blog .itb-pasos{counter-reset:paso;list-style:none;padding:0;margin:1.4em 0}
.itb-blog .itb-pasos li{counter-increment:paso;position:relative;padding:0 0 22px 60px;margin:0}
.itb-blog .itb-pasos li::before{content:counter(paso);position:absolute;left:0;top:0;width:38px;height:38px;border-radius:11px;background:var(--itb-acc);color:var(--itb-ink);font-family:'Merriweather',Georgia,serif;font-weight:700;font-size:18px;display:flex;align-items:center;justify-content:center;z-index:1}
.itb-blog .itb-pasos li::after{content:"";position:absolute;left:19px;top:44px;bottom:2px;width:2px;background:var(--itb-line)}
.itb-blog .itb-pasos li:last-child{padding-bottom:0}
.itb-blog .itb-pasos li:last-child::after{display:none}
.itb-blog .itb-pasos strong{display:block;margin-bottom:2px;font-weight:600}

/* ── Experiencia propia ───────────────────────────────────────────────────── */
.itb-blog .itb-exp{border:1px solid var(--itb-line);border-radius:var(--itb-r);padding:20px 24px;margin:var(--itb-gap) 0;background:linear-gradient(180deg,#fbfcf7 0%,#fff 60%)}
.itb-blog .itb-exp-tag{display:inline-flex;align-items:center;gap:7px;background:var(--itb-acc);color:var(--itb-ink);border-radius:7px;font-size:.72em;font-weight:700;letter-spacing:.06em;padding:4px 12px;margin:0 0 10px;text-transform:uppercase;transition:transform .2s ease-out}
.itb-blog .itb-exp-tag::before{content:"";width:13px;height:13px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/13px no-repeat;flex:none}
.itb-blog .itb-exp p:last-child{margin-bottom:0}

/* ── Antes / después ──────────────────────────────────────────────────────── */
.itb-blog .itb-ad{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:1.4em 0}
.itb-blog .itb-ad>div{border-radius:var(--itb-r);padding:18px 20px}
.itb-blog .itb-ad .itb-antes{background:var(--itb-bg);border:1px solid var(--itb-line)}
.itb-blog .itb-ad .itb-despues{background:var(--itb-dark);color:#fff}
.itb-blog .itb-ad p{margin:0;font-size:.95em;text-align:left}
.itb-blog .itb-ad .itb-ad-label{font-size:.72em;font-weight:700;letter-spacing:.08em;margin-bottom:8px;text-transform:uppercase}
.itb-blog .itb-ad .itb-antes .itb-ad-label{color:var(--itb-soft)}
.itb-blog .itb-ad .itb-despues .itb-ad-label{color:var(--itb-lima-acida)}
.itb-blog .itb-ad .itb-cifra{font-family:'Merriweather',Georgia,serif;font-size:2em;font-weight:700;line-height:1.05;margin:0 0 6px;letter-spacing:-.02em}

/* ── Balanza (comparativa de opciones) ────────────────────────────────────── */
.itb-blog .itb-balanza{display:grid;grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:16px;margin:1.4em 0}
.itb-blog .itb-balanza>div{border:1px solid var(--itb-line);border-radius:var(--itb-r);padding:16px 20px;background:#fff}
.itb-blog .itb-balanza>div:last-child{border-color:var(--itb-ink);box-shadow:0 0 0 3px rgba(204,255,139,.5)}
.itb-blog .itb-balanza h3{margin:0 0 10px;font-size:.98em;font-family:'Inter',sans-serif;font-weight:600}
.itb-blog .itb-balanza ul{margin:0;padding:0;list-style:none;font-size:.93em;display:grid;gap:8px}
.itb-blog .itb-balanza li{position:relative;padding-left:20px}
.itb-blog .itb-balanza li::before{content:"";position:absolute;left:0;top:.62em;width:8px;height:2px;border-radius:1px;background:var(--itb-soft)}
.itb-blog .itb-balanza>div:last-child li::before{background:var(--itb-ink);height:3px}

/* ── Listas de comprobación y de alerta ───────────────────────────────────── */
.itb-blog .itb-check,.itb-blog .itb-alerta{list-style:none;padding:0;margin:1.3em 0;display:grid;gap:12px}
.itb-blog .itb-check li,.itb-blog .itb-alerta li{position:relative;padding:0 0 0 36px}
.itb-blog .itb-check li::before,.itb-blog .itb-alerta li::before{content:"";position:absolute;left:0;top:3px;width:22px;height:22px;border-radius:7px;background-size:14px;background-position:center;background-repeat:no-repeat}
.itb-blog .itb-check li::before{background-color:var(--itb-acc);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312141d' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")}
.itb-blog .itb-alerta li::before{background-color:var(--itb-ink);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C6F03C' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M12 5v9'/%3E%3Ccircle cx='12' cy='18.4' r='.7' fill='%23C6F03C'/%3E%3C/svg%3E")}

/* ── Figuras internas (imágenes del cuerpo) ───────────────────────────────── */
.itb-blog .itb-figura{margin:var(--itb-gap) 0}
.itb-blog .itb-figura img{display:block;width:100%;height:auto;border-radius:var(--itb-r);border:1px solid var(--itb-line)}
.itb-blog .itb-figura figcaption{color:var(--itb-soft);font-size:.85em;line-height:1.5;margin-top:10px;text-align:left}
.itb-blog .itb-destacada{margin:0 0 var(--itb-gap);border-radius:var(--itb-r);overflow:hidden}
.itb-blog .itb-destacada img{display:block;width:100%;height:auto;aspect-ratio:16/9}
.itb-blog figure.wp-block-image{margin-left:0;margin-right:0}

/* ── CTA (si el artículo lo lleva; en la plantilla lo sustituye el formulario) */
.itb-blog .itb-cta{background:var(--itb-dark);border-radius:var(--itb-r-lg);padding:32px;margin:2em 0;text-align:center}
.itb-blog .itb-cta p{color:#fff;text-align:center;margin:0 0 8px;font-family:'Merriweather',Georgia,serif;font-size:1.3em;font-weight:700}
.itb-blog .itb-cta .itb-cta-sub{color:var(--itb-cta-sub);font-family:'Inter',sans-serif;font-size:.75em;font-weight:400;margin-bottom:20px}
.itb-blog .itb-cta a{display:inline-block;background:var(--itb-acc-hov);color:var(--itb-ink);border-radius:50px;padding:14px 32px;font-size:16px;font-weight:700;text-decoration:none;font-family:'Inter',sans-serif;transition:background-color .18s cubic-bezier(.22,.61,.36,1),transform .12s ease-out}
.itb-blog .itb-cta a:hover{background:var(--itb-acc)}
.itb-blog .itb-cta a:active{transform:scale(.985)}

/* ── Autor y changelog ────────────────────────────────────────────────────── */
/* RETIRADA (02-sep-2026): la caja de autor escrita a mano dentro de cada artículo se
   borró de los 47. Había DOS cajas de autor en la misma página y la buena es la del
   módulo `caja-autor` de la Suite: es la configurable, la que emite schema y la que
   Jesús pidió dejar perfecta. Las reglas de `.cbab` viven más abajo en este fichero.
   Se conservan estas por si algún artículo antiguo reaparece con el marcado viejo. */
.itb-blog .itb-autor{position:relative;display:block;min-height:112px;padding-left:132px;border-top:1px solid var(--itb-line);margin-top:2.8em;padding-top:1.6em}
/* «mi imagen debe estar sin fondo» (Jesús, 01-09-2026): fuera el chip verde con el
   icono genérico de persona, y el retrato —tinta sobre blanco, sin canal alfa— entra
   con `multiply`, que hace transparente su blanco sin recortarlo ni dejarle cerco. */
/* 🥇 el recuadro gris que rodeaba el retrato NO era un borde: es la sombra que Astra
   pone a toda imagen de entrada — `.ast-article-single img:not(figure img)` con
   `box-shadow:0 0 30px rgb(0 0 0/.15)`. Anular el borde no la quitaba. */
.itb-blog .itb-autor__foto{position:absolute;left:0;top:1.6em;width:112px;height:112px;display:block;background:none;border:0;border-radius:0;box-shadow:none;mix-blend-mode:multiply}
.itb-blog .itb-autor__nombre{margin:0 0 4px;font-size:1.02em}
.itb-blog .itb-autor__bio{margin:0;color:var(--itb-soft)}
@media (max-width:600px){
  .itb-blog .itb-autor{padding-left:94px;min-height:76px}
  .itb-blog .itb-autor__foto{width:76px;height:76px}
}
.itb-blog .itb-autor::before{content:none}   /* retirado: lo sustituye el retrato real */
.itb-blog .itb-autor p{margin:0;text-align:left;font-size:.92em;line-height:1.6}
.itb-blog .itb-changelog{background:var(--itb-bg);border-radius:10px;padding:12px 18px 12px 46px;margin:1.8em 0 0;font-size:.85em;color:var(--itb-soft);position:relative}
.itb-blog .itb-changelog::before{content:"";position:absolute;left:16px;top:13px;width:18px;height:18px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%233a3a3d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E") center/18px no-repeat}
.itb-blog .itb-changelog p{margin:0;text-align:left}

/* ── Animación de bloques (solo transform/opacity) ────────────────────────── */
.itb-anim .itb-rev{opacity:0;transform:translateY(14px);transition:opacity .5s ease-out,transform .5s ease-out}
.itb-anim .itb-rev.itb-in{opacity:1;transform:none}
.itb-anim .itb-destacada.itb-rev img,.itb-anim .itb-figura.itb-rev img{transform:scale(1.02);transition:transform .8s cubic-bezier(.22,.61,.36,1)}
.itb-anim .itb-destacada.itb-rev.itb-in img,.itb-anim .itb-figura.itb-rev.itb-in img{transform:none}
.itb-blog .itb-claves p:first-child::after{content:"";display:block;width:36px;height:2px;background:var(--itb-acc);margin-top:10px;transform:scaleX(0);transform-origin:left;transition:transform .5s ease-out .25s}
.itb-anim .itb-claves.itb-in p:first-child::after{transform:scaleX(1)}
.itb-anim .itb-pasos li{opacity:0;transform:translateX(-12px);transition:opacity .45s ease-out,transform .45s ease-out}
.itb-anim .itb-pasos.itb-in li{opacity:1;transform:none}
.itb-anim .itb-pasos.itb-in li:nth-child(2){transition-delay:.07s}
.itb-anim .itb-pasos.itb-in li:nth-child(3){transition-delay:.14s}
.itb-anim .itb-pasos.itb-in li:nth-child(4){transition-delay:.21s}
.itb-anim .itb-pasos.itb-in li:nth-child(5){transition-delay:.28s}
.itb-anim .itb-pasos.itb-in li:nth-child(6){transition-delay:.35s}
.itb-anim .itb-pasos.itb-in li:nth-child(7){transition-delay:.42s}
.itb-anim .itb-pasos.itb-in li:nth-child(8){transition-delay:.49s}
.itb-anim .itb-ad .itb-despues{transition-delay:.12s}
.itb-anim .itb-exp.itb-rev .itb-exp-tag{transform:translateY(4px);opacity:0;transition:opacity .4s ease-out .2s,transform .4s ease-out .2s}
.itb-anim .itb-exp.itb-rev.itb-in .itb-exp-tag{transform:none;opacity:1}
.itb-anim .itb-check.itb-rev li,.itb-anim .itb-alerta.itb-rev li{opacity:0;transform:translateY(8px);transition:opacity .4s ease-out,transform .4s ease-out}
.itb-anim .itb-check.itb-in li,.itb-anim .itb-alerta.itb-in li{opacity:1;transform:none}
.itb-anim .itb-check.itb-in li:nth-child(2),.itb-anim .itb-alerta.itb-in li:nth-child(2){transition-delay:.06s}
.itb-anim .itb-check.itb-in li:nth-child(3),.itb-anim .itb-alerta.itb-in li:nth-child(3){transition-delay:.12s}
.itb-anim .itb-check.itb-in li:nth-child(4),.itb-anim .itb-alerta.itb-in li:nth-child(4){transition-delay:.18s}
.itb-anim .itb-check.itb-in li:nth-child(5),.itb-anim .itb-alerta.itb-in li:nth-child(5){transition-delay:.24s}
.itb-anim .itb-check.itb-in li:nth-child(6),.itb-anim .itb-alerta.itb-in li:nth-child(6){transition-delay:.3s}

/* ── Responsive ───────────────────────────────────────────────────────────── */
@media (max-width:1024px){
  .itb-blog{padding:0 28px}
  .itb-blog .itb-toc ol{columns:1}
}
@media (max-width:640px){
  .itb-blog{padding:0 20px;font-size:16.5px}
  .itb-blog h2{font-size:1.34em}
  .itb-blog p{text-align:left}
  .itb-blog .itb-resumen p,.itb-blog .itb-def p,.itb-blog .itb-dato p{padding-right:0}
  .itb-blog .itb-resumen::after,.itb-blog .itb-def::after,.itb-blog .itb-dato::after,.itb-blog .itb-toc::after{display:none}
  .itb-blog .itb-pasos li{padding-left:52px}
}

/* ── Movimiento reducido ──────────────────────────────────────────────────── */
@media (prefers-reduced-motion:reduce){
  .itb-blog *,.itb-blog *::before,.itb-blog *::after{transition-duration:.01ms!important;animation-duration:.01ms!important;scroll-behavior:auto!important}
  .itb-anim .itb-rev{opacity:1;transform:none}
}

/* ── Impresión ────────────────────────────────────────────────────────────── */
@media print{
  .itb-blog{max-width:100%;padding:0;font-size:11pt}
  .itb-blog .itb-claves,.itb-blog .itb-cta{background:#fff!important;color:#000!important;border:1px solid #999}
  .itb-blog .itb-claves ul,.itb-blog .itb-cta p{color:#000!important}
  .itb-blog .itb-toc,.itb-blog .itb-changelog{display:none}
  .itb-blog a::after{content:" (" attr(href) ")";font-size:9pt;color:#555}
}

/* ══════════════════════════════════════════════════════════════════════════
   v4 · Ancho de caja (24-ago-2026) — DECISIÓN DE JESÚS, NO SE REABRE
   «Las cajas a 1200 píxeles en toda la web»: el texto de las entradas ocupa la
   MISMA caja que las páginas (1200 con 40 de padding = 1120 útiles), igual que
   el aviso legal. Antes iba a 650 px centrado y quedaba desalineado 261 px
   respecto a sus propias tablas e imágenes, que sí usaban la caja entera.
   Si alguien vuelve a estrechar esto por «medida de línea», va contra lo pedido.
   ══════════════════════════════════════════════════════════════════════════ */
.itb-blog{--itb-medida:100%}  /* la caja manda: 1120 px útiles dentro de los 1200 */
.itb-blog > p,
.itb-blog > h2,
.itb-blog > h3,
.itb-blog > ul,
.itb-blog > ol,
.itb-blog > .itb-fecha,
.itb-blog > .itb-resumen,
.itb-blog > .itb-claves,
.itb-blog > .itb-toc,
.itb-blog > .itb-def,
.itb-blog > .itb-dato,
.itb-blog > .itb-exp,
.itb-blog > .itb-check,
.itb-blog > .itb-alerta,
.itb-blog > .itb-pasos,
.itb-blog > .itb-autor,
.itb-blog > .itb-changelog{max-width:var(--itb-medida);margin-left:auto;margin-right:auto}
.itb-blog > .itb-destacada,
.itb-blog > .itb-figura,
.itb-blog > .itb-table-responsive,
.itb-blog > .itb-ad,
.itb-blog > .itb-balanza,
.itb-blog > .itb-cta{max-width:100%}
.itb-blog > .itb-toc{max-width:var(--itb-medida)}

/* Barra de progreso de lectura */
.itb-progress{position:fixed;top:0;left:0;height:3px;width:100%;transform:scaleX(0);transform-origin:0 50%;background:linear-gradient(90deg,var(--itb-acc),var(--itb-acc-hov));z-index:1000001;pointer-events:none;will-change:transform}

/* Acciones flotantes: volver al índice y subir */
.itb-fabs{position:fixed;right:22px;bottom:22px;display:flex;flex-direction:column;gap:10px;z-index:99998;opacity:0;transform:translateY(10px);transition:opacity .25s ease-out,transform .25s ease-out;pointer-events:none}
.itb-fabs.itb-fabs-on{opacity:1;transform:none;pointer-events:auto}
.itb-fabs button{width:46px;height:46px;border-radius:14px;border:1px solid var(--itb-line);background:#fff;color:var(--itb-ink);box-shadow:0 6px 18px rgba(18,20,29,.14);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .18s ease-out,transform .12s ease-out,border-color .18s ease-out}
.itb-fabs button:hover{background:var(--itb-acc);border-color:var(--itb-acc)}
.itb-fabs button:active{transform:scale(.95)}
.itb-fabs button:focus-visible{outline:2px solid var(--itb-ink);outline-offset:2px}
.itb-fabs svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
@media (max-width:640px){.itb-fabs{right:14px;bottom:14px}.itb-fabs button{width:42px;height:42px}}

/* Aviso de copiado del enlace */
.itb-toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,12px);background:var(--itb-dark);color:#fff;font-family:'Inter',sans-serif;font-size:14px;padding:11px 18px;border-radius:12px;box-shadow:0 10px 26px rgba(9,8,9,.3);opacity:0;transition:opacity .2s ease-out,transform .2s ease-out;z-index:1000002;pointer-events:none}
.itb-toast.itb-toast-on{opacity:1;transform:translate(-50%,0)}

@media (prefers-reduced-motion:reduce){
  .itb-progress{transition:none}
  .itb-fabs,.itb-toast{transition:none}
}

/* ══════════════════════════════════════════════════════════════════════════
   v5 · Rediseño de bloques para la caja de 1200 (24-ago-2026)
   Diagnóstico, fases y gates: PLAN-DISENO-BLOQUES.md (carpeta del proyecto).
   Principio: los 1200 px no se compensan, se APROVECHAN.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── F1 · Escala de proporción fluida ─────────────────────────────────────── */
.itb-blog{
  --itb-pad-x:clamp(20px,2.4vw,34px);
  --itb-pad-y:clamp(16px,1.4vw,24px);
  --itb-pad:var(--itb-pad-y) var(--itb-pad-x);
  --esp-s:1.1em; --esp-m:1.7em; --esp-l:2.6em;
  --itb-r:14px;
  /* Columna de etiqueta (F3) */
  --itb-col-tag:clamp(120px,15vw,190px);
}

/* ── F5 · Tipografía: el justificado se queda (regla de la casa); los ríos que
   produce a 1200 px se corrigen con guionado, no quitando el justificado ──── */
.itb-blog{hyphens:auto;-webkit-hyphens:auto}
.itb-blog p{hyphens:auto;-webkit-hyphens:auto}
.itb-blog h2,.itb-blog h3,.itb-blog .itb-claves p:first-child{hyphens:manual;-webkit-hyphens:manual}
/* Ritmo vertical con TRES valores, no con siete sueltos */
.itb-blog .itb-resumen{margin:0 0 var(--esp-s)}
.itb-blog .itb-claves{margin:0 0 var(--esp-m)}
.itb-blog .itb-toc{margin:var(--esp-m) 0 var(--esp-l)}
.itb-blog .itb-def,.itb-blog .itb-dato,.itb-blog .itb-check,.itb-blog .itb-alerta,
.itb-blog .itb-table-responsive,.itb-blog .itb-pasos,.itb-blog .itb-ad,
.itb-blog .itb-balanza{margin:var(--esp-m) 0}
.itb-blog .itb-exp,.itb-blog .itb-figura{margin:var(--esp-l) 0}
/* Tabla: primera columna con ancho propio para que no quede con aire a 1200 */
.itb-blog th:first-child,.itb-blog td:first-child{width:22%}

/* ── F2 · Tres niveles de jerarquía ───────────────────────────────────────────
   Nivel 2 (apoyo): fondo hueso SIN borde. Sobre hueso, un borde de 1 px de
   #dfe1d6 no separa nada y ensucia el contorno. */
.itb-blog .itb-resumen,.itb-blog .itb-dato,.itb-blog .itb-toc,.itb-blog .itb-changelog{
  border:0;background:var(--itb-bg);border-radius:var(--itb-r);
}
.itb-blog .itb-resumen{border-left:4px solid var(--itb-acc);padding:var(--itb-pad)}
.itb-blog .itb-toc{padding:var(--itb-pad)}
/* La definición se distingue del resto del nivel 2 por el filete de TINTA */
.itb-blog .itb-def{
  background:#fff;border:1px solid var(--itb-line);border-left:4px solid var(--itb-ink);
  border-radius:var(--itb-r);padding:var(--itb-pad);box-shadow:none;
}
/* Nivel 1 · la experiencia propia deja de ser el bloque más débil */
.itb-blog .itb-exp{
  background:var(--itb-bg);border:0;border-left:4px solid var(--itb-acc);
  border-radius:var(--itb-r);padding:calc(var(--itb-pad-y) * 1.35) var(--itb-pad-x);
}
.itb-blog .itb-claves{padding:calc(var(--itb-pad-y) * 1.25) var(--itb-pad-x)}
.itb-blog .itb-cta{padding:calc(var(--itb-pad-y) * 1.8) var(--itb-pad-x)}

/* ── F3 · Los bloques cortos dejan de ser cintas: rejilla de dos columnas ────
   La etiqueta y el icono pasan al flujo, a la izquierda del contenido, en vez de
   flotar en la esquina superior derecha a 1.150 px del texto que etiquetan. */
@media (min-width:781px){
  /* El icono YA EXISTENTE (::after) sube a la celda 1/1 y la etiqueta (::before) a
     la 1/2: no se añade ni un SVG nuevo (así no pasa del techo). */
  .itb-blog .itb-dato,
  .itb-blog .itb-def,
  .itb-blog .itb-resumen{
    display:grid;grid-template-columns:var(--itb-col-tag) 1fr;grid-template-rows:auto 1fr;
    gap:0 clamp(18px,2vw,30px);align-items:start;
  }
  .itb-blog .itb-dato::after,
  .itb-blog .itb-def::after,
  .itb-blog .itb-resumen::after{position:static;grid-column:1;grid-row:1;margin:0 0 9px}
  .itb-blog .itb-dato::before,
  .itb-blog .itb-def::before,
  .itb-blog .itb-resumen::before{
    grid-column:1;grid-row:2;align-self:start;
    font-size:.74em;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
    color:var(--itb-soft);line-height:1.35;
  }
  .itb-blog .itb-dato::before{content:"El dato"}
  .itb-blog .itb-def::before{content:"Definición"}
  .itb-blog .itb-resumen::before{content:"En corto"}
  .itb-blog .itb-dato p,
  .itb-blog .itb-def p,
  .itb-blog .itb-resumen p{grid-column:2;grid-row:1 / -1;padding-right:0}
}

/* ── F4 · Las listas aprovechan el ancho en vez de sufrirlo ───────────────── */
@media (min-width:1025px){
  .itb-blog .itb-claves ul{grid-template-columns:1fr 1fr;gap:12px 34px}
  .itb-blog .itb-check{grid-template-columns:1fr 1fr;gap:14px 32px}
  .itb-blog .itb-alerta{grid-template-columns:1fr 1fr;gap:14px 32px}
  /* Los pasos van en rejilla; la línea conectora vertical se retira porque en dos
     columnas uniría pasos que no se siguen. */
  .itb-blog .itb-pasos{display:grid;grid-template-columns:1fr 1fr;gap:4px 40px}
  .itb-blog .itb-pasos li{padding-bottom:18px}
  .itb-blog .itb-pasos li::after{display:none}
  .itb-blog .itb-balanza{gap:22px}
}

/* ── Ajuste del nivel 2 en pantallas pequeñas ─────────────────────────────── */
@media (max-width:780px){
  .itb-blog .itb-dato,.itb-blog .itb-def{padding:var(--itb-pad)}
  .itb-blog .itb-changelog{padding:12px 18px 12px 46px}
}

/* ============================================================================
   COLUMNA DE LECTURA Y ESCALA TIPOGRÁFICA · 25-ago-2026
   ----------------------------------------------------------------------------
   POR QUÉ: medido en el artículo servido, el texto corría a 909 px = 105
   caracteres por línea (la medida cómoda son 50-75), justificado, y la escala
   estaba plana e INVERTIDA: h3 a 0,96x el cuerpo, es decir MÁS PEQUEÑO que el
   párrafo y en la misma familia. Sin jerarquía visible, un artículo largo se
   lee como un muro.

   REFERENCIAS MEDIDAS (popular-web-designs): Stripe, Linear, Mintlify e
   Intercom coinciden en cuerpo 16-18px, interlineado 1,4-1,5 y titulares con
   letter-spacing NEGATIVO. Ninguno justifica el texto.

   LA REGLA DE LOS 1200 SE RESPETA: la caja sigue midiendo 1200 px. Lo que se
   estrecha es la COLUMNA DE TEXTO; imágenes, tablas, comparativas y CTA siguen
   ocupando el ancho completo, escapándose de la columna con el grid.
   ============================================================================ */

.itb-blog{
  /* 68 caracteres: la medida de las cuatro referencias */
  --itb-medida-lectura: 640px;  /* medido: da ~72 caracteres reales; ch no sirve porque el 0 de Inter es estrecho */
  /* rejilla de tres carriles: el central es la lectura, los laterales sobran */
  display: grid;
  grid-template-columns:
    1fr
    min(var(--itb-medida-lectura), 100%)
    1fr;
}

/* Todo el contenido vive en el carril central... */
.itb-blog > *{ grid-column: 2; }

/* ...salvo los bloques que ganan al ocupar los 1200 px de la caja */
.itb-blog > figure,
.itb-blog > .itb-destacada,
.itb-blog > .itb-table-responsive,
.itb-blog > .itb-claves,
.itb-blog > .itb-balanza,
.itb-blog > .itb-cta,
.itb-blog > .itb-toc,
.itb-blog > .itb-pasos{
  grid-column: 1 / -1;
}

/* --- Texto: se retira el justificado --------------------------------------
   A 105 caracteres el justificado abre ríos de espacio entre palabras. A 68
   tampoco hace falta: la bandera derecha es lo que usan las cuatro referencias. */
.itb-blog p{
  text-align: left;
  font-weight: 400;
  hyphens: none;
}

/* --- Escala: contraste real entre niveles ---------------------------------
   Antes: h2 1,47x · h3 0,96x (invertido).
   Ahora: h2 2,0x · h3 1,3x, y el h3 pasa a Merriweather para distinguirse
   también por familia, no solo por tamaño. */
.itb-blog h2{
  font-size: 2em;
  line-height: 1.18;
  letter-spacing: -0.022em;   /* el tracking negativo de Stripe/Linear/Mintlify */
  margin: 2.2em 0 .5em;
}

.itb-blog h3{
  font-family: 'Merriweather', Georgia, 'Times New Roman', serif;
  font-size: 1.3em;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.012em;
  margin: 2em 0 .45em;
}

/* Las listas acompañan a la medida del cuerpo */
.itb-blog ul,
.itb-blog ol{ font-size: 1em; }

/* --- Móvil: la columna ya es el ancho disponible, no hay carriles que quitar */
@media (max-width: 780px){
  .itb-blog{ grid-template-columns: 100%; }
  .itb-blog > *,
  .itb-blog > figure,
  .itb-blog > .itb-destacada,
  .itb-blog > .itb-table-responsive,
  .itb-blog > .itb-claves,
  .itb-blog > .itb-balanza,
  .itb-blog > .itb-cta,
  .itb-blog > .itb-toc,
  .itb-blog > .itb-pasos{ grid-column: 1; }
  .itb-blog h2{ font-size: 1.7em; }
  .itb-blog h3{ font-size: 1.22em; }
}

/* ============================================================================
   ÍNDICE DE LA SUITE, CON LA PALETA DE LA MARCA · 25-ago-2026
   El módulo `indice-blog` pinta su tarjeta con un gris al 5 % que sobre blanco
   se lee LILA — ajeno a la paleta tinta/hueso/lima. Se alinea con los bloques
   del artículo (hueso, línea, radio 14) usando los tokens, no hex sueltos.
   Y como el cuerpo del artículo ya trae su propio índice, se oculta el propio
   para no tener DOS: manda el de la Suite, que es lo que pidió Jesús.
   ============================================================================ */
.itoc .itoc__card{
  background: var(--itb-bg, #eeefe7) !important;   /* !important: el módulo declara el suyo inline */
  border: 1px solid var(--itb-line, #dfe1d6) !important;
  border-radius: var(--itb-r, 14px) !important;
}
/* El índice propio del artículo sobra cuando el módulo pinta el suyo */
.itb-blog > .itb-toc{ display: none; }

/* h4: lo cazó G-tipografía — venía a 22px, el MISMO tamaño que el h3, así que los dos
   niveles eran indistinguibles. Baja a 1,08em y va en Inter para separarse también por
   familia del h3 (que es Merriweather). */
.itb-blog h4{
  font-family: 'Inter', 'Helvetica Neue', Arial, sans-serif;
  font-size: 1.08em;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: .005em;
  margin: 1.7em 0 .35em;
}

/* --- Índice de la Suite: tematizado con la paleta de MARCA -------------------
   MEDIDO en la página servida, no supuesto: el fondo de la tarjeta ya era el
   correcto (#eeefe7). Lo que la teñía de lila era el ::before, un velo en
   gradiente al 14 % con los acentos POR DEFECTO del módulo:
       --itoc-accent-1: rgba(255,43,214,.35)   fucsia
       --itoc-accent-2: rgba(124,58,237,.30)   violeta
   Colores genéricos de la Suite, ajenos a esta marca. El módulo está preparado
   para tematizarse por variables, así que se le dan las de la casa en vez de
   tocar su código (que sirve a todas las webs y se actualiza). */
#iturbide-toc,
.itoc{
  --itoc-accent-1: rgba(204,255,139,.55);   /* lima de marca */
  --itoc-accent-2: rgba(18,20,29,.10);      /* tinta, muy suave */
  --itoc-faint: var(--itb-bg,#eeefe7);
}

/* --- Índice: los dos defectos que la CAPTURA destapó y los números escondían ---
   1) LA VIÑETA seguía fucsia. Redefinir --itoc-accent-* no la alcanza porque
      `.itoc__link--h2:before` lleva los colores ESCRITOS A MANO
      (rgba(255,43,214,.85) → rgba(124,58,237,.80)), no como variable.
      Tematizar por variables solo cubre lo que el módulo declaró como variable.
   2) LA LISTA es un grid de UNA columna: 19 enlaces apilados en una caja de
      1200 px dejaban ~900 px muertos a la derecha. Medí el ancho del <a> (289 px)
      y creí que ya venía en columnas: era el ancho del TEXTO, no el de la caja. */
#iturbide-toc .itoc__link--h2::before,
.itoc .itoc__link--h2::before{
  background: linear-gradient(135deg, #ccff8b, #a6d95f);
  box-shadow: 0 0 0 1px var(--itoc-hairline), 0 0 14px rgba(204,255,139,.35);
}



/* ============================================================================
   PASADA PREMIUM · 26-ago-2026
   ----------------------------------------------------------------------------
   Encargo de Jesús: «los enlaces no pueden ser verdes, no se ven sobre blanco ·
   las tablas tienen un estilo muy pobre · la caja de autor con fondo blanco ·
   jerarquía de h1 a h4 · diseña premium».

   MEDIDO ANTES DE TOCAR: la lima de marca #ccff8b se usaba como color de TEXTO
   sobre blanco en el byline, el nombre del autor, la píldora de LinkedIn y la
   navegación entre artículos → contraste 1,15. Ilegible. La bitácora de la skill
   ya lo tenía escrito («la lima jamás es color de texto sobre claro») y el módulo
   de la Suite lo incumplía.
   ============================================================================ */

.itb-blog,
.cbab,
.elementor-post-navigation{
  /* la lima, oscurecida hasta ser legible sobre blanco, conservando el tono de
     marca (mismo H/S, solo baja el valor): 6,26:1 sobre blanco */
  --itb-verde-texto: #3d6b0d;
  --itb-verde-hover: #2c4e09;
  /* lima original: SOLO fondo oscuro o acento no-textual */
  --itb-lima: #ccff8b;
}

/* --- 1 · ENLACES: fuera la lima como color de texto ------------------------- */
.cbab__bylineLink,
.cbab__name a,
.cbab__pill,
.cbab a:not(.cbab__cta),
.elementor-post-navigation a,
.elementor-post-navigation .post-navigation__prev--label,
.elementor-post-navigation .post-navigation__next--label{
  color: var(--itb-verde-texto);
  text-decoration-color: color-mix(in srgb, var(--itb-verde-texto) 45%, transparent);
}
.cbab__bylineLink:hover,
.cbab a:not(.cbab__cta):hover,
.elementor-post-navigation a:hover{ color: var(--itb-verde-hover); }

/* la lima sigue viva donde SÍ funciona: sobre tinta */
.itb-oscuro a,
.itb-cta.itb-oscuro a{ color: var(--itb-lima); }

/* --- 2 · BYLINE: una línea de crédito, no un adorno ------------------------- */
.cbab__byline{
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .875rem;
  line-height: 1.5;
  color: #4a4f5c;
  padding: 0 0 14px;
  border-bottom: 1px solid var(--itb-line, #dfe1d6);
  margin: 0 0 30px;
}
.cbab__bylineLink{ font-weight: 600; }
.cbab__bylineRole{ color: #6b7080; }

/* --- 3 · TABLAS PREMIUM ----------------------------------------------------
   Antes: cabecera hueso sin peso, rejilla completa de líneas grises, sin zebra,
   sin jerarquía entre columnas. Ahora: cabecera en tinta, líneas SOLO
   horizontales (la rejilla completa es ruido), zebra suave, cifras tabulares y
   la primera columna como ancla de lectura. */
.itb-blog .itb-table-responsive{
  border: 1px solid var(--itb-line, #dfe1d6);
  border-radius: 14px;
  overflow: hidden;               /* recorta la cabecera al radio */
  overflow-x: auto;               /* y sigue permitiendo el desplazamiento */
  box-shadow: 0 1px 2px rgba(18,20,29,.04), 0 8px 24px -12px rgba(18,20,29,.10);
  margin: 2.2em 0;
  background: #fff;
}
.itb-blog table{
  border-collapse: collapse;
  width: 100%;
  margin: 0;
  font-size: .95em;
  border: 0;
}
.itb-blog thead th{
  background: var(--itb-ink, #12141d);
  color: #f4f6ee;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .78rem;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  text-align: left;
  padding: 13px 18px;
  border: 0;
  white-space: nowrap;
}
.itb-blog tbody td{
  padding: 14px 18px;
  border: 0;
  border-top: 1px solid #eceee5;   /* solo horizontal: la rejilla vertical es ruido */
  vertical-align: top;
  line-height: 1.5;
}
.itb-blog tbody tr:first-child td{ border-top: 0; }
.itb-blog tbody tr:nth-child(even){ background: #fafbf7; }
.itb-blog tbody tr:hover{ background: #f4f7ec; }
/* la primera columna ancla la lectura de la fila */
.itb-blog tbody td:first-child{
  font-weight: 600;
  color: var(--itb-ink, #12141d);
  width: 26%;
}
/* cifras alineadas: sin esto, comparar precios cuesta */
.itb-blog td{ font-variant-numeric: tabular-nums; }

/* --- 4 · JERARQUÍA COMPLETA h1→h4 -----------------------------------------
   El h1 vive en el hero (fuera de .itb-blog). Dentro del artículo la escala
   arranca en h2 y cada nivel se distingue por TAMAÑO, FAMILIA y COLOR, no solo
   por tamaño: con un único eje, dos niveles seguidos se confunden. */
.itb-blog h2{
  font-size: 2em;
  line-height: 1.18;
  letter-spacing: -.022em;
  color: var(--itb-ink, #12141d);
  margin: 2.3em 0 .5em;
  padding-top: .2em;
}
/* filete corto: marca el arranque de sección sin pesar */
.itb-blog h2::before{
  content: "";
  display: block;
  width: 46px;
  height: 3px;
  border-radius: 2px;
  background: var(--itb-verde-texto);
  margin: 0 0 .55em;
}
.itb-blog h3{
  font-family: 'Merriweather', Georgia, serif;
  font-size: 1.3em;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -.012em;
  color: var(--itb-ink, #12141d);
  margin: 2em 0 .45em;
}
.itb-blog h4{
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.06em;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: .005em;
  color: #333846;
  margin: 1.7em 0 .35em;
}
/* h4 con marca discreta para no confundirse con un párrafo en negrita */
.itb-blog h4::before{
  content: "";
  display: inline-block;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--itb-verde-texto);
  margin-right: .55em;
  vertical-align: .18em;
}

/* --- 5 · CAJA DE AUTOR: fondo blanco --------------------------------------- */
.cbab__card{
  background: #fff;
  border: 1px solid var(--itb-line, #dfe1d6);
  border-radius: 18px;
  padding: 26px 28px;
  box-shadow: 0 1px 2px rgba(18,20,29,.04), 0 12px 32px -16px rgba(18,20,29,.14);
}
.cbab__avatar{
  border-radius: 50%;
  border: 2px solid #fff;
  box-shadow: 0 0 0 2px var(--itb-line, #dfe1d6);
}
.cbab__name,
.cbab__name a{ color: var(--itb-ink, #12141d); font-weight: 700; }
.cbab__headline{ color: #4a4f5c; }
.cbab__badge{
  background: color-mix(in srgb, var(--itb-lima) 30%, #fff);
  color: #2c4e09;
  border: 1px solid color-mix(in srgb, var(--itb-verde-texto) 25%, transparent);
  border-radius: 999px;
  font-weight: 600;
}
.cbab__metaLine{ color: #6b7080; }

/* --- ORDEN DE LA CABECERA · 26-ago-2026 -------------------------------------
   Pedido: imagen destacada → miga → metadatos → extracto → índice.
   La destacada, la miga y los metadatos ya van en ese orden desde la plantilla
   (widget nativo, no `order` de CSS, que descuadraría el orden de lectura).
   Falta el índice, que el módulo de la Suite inyecta ANTES del contenido. El
   artículo trae el suyo propio, ya colocado tras el extracto: se muestra ese y
   se oculta el del módulo. Ayer se hizo al revés, cuando el orden aún no importaba. */
#iturbide-toc{ display: none !important; }

.itb-blog > nav.itb-toc{
  display: block;
  background: #fbfcf8;
  border: 1px solid var(--itb-line, #dfe1d6);
  border-radius: 16px;
  padding: 22px 26px;
  margin: 2.4em 0;
}
.itb-blog > nav.itb-toc::before{
  content: "En este artículo";
  display: block;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--itb-verde-texto, #3d6b0d);
  margin: 0 0 14px;
}
.itb-blog > nav.itb-toc ol,
.itb-blog > nav.itb-toc ul{
  margin: 0; padding: 0; list-style: none;
  display: grid; grid-template-columns: 1fr; gap: 2px;
  counter-reset: itbtoc;
}
.itb-blog > nav.itb-toc li{ margin: 0; counter-increment: itbtoc; }
.itb-blog > nav.itb-toc a{
  display: flex; align-items: baseline; gap: 12px;
  padding: 8px 10px;
  border-radius: 9px;
  color: var(--itb-ink, #12141d);
  text-decoration: none;
  font-size: .96em;
  line-height: 1.45;
  transition: background .16s ease, color .16s ease;
}
/* el número ordena la lectura sin depender del color */
.itb-blog > nav.itb-toc a::before{
  content: counter(itbtoc, decimal-leading-zero);
  flex: 0 0 auto;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .72rem; font-weight: 700;
  color: var(--itb-verde-texto, #3d6b0d);
  letter-spacing: .04em;
}
.itb-blog > nav.itb-toc a:hover{ background: #f1f6e6; color: var(--itb-verde-hover, #2c4e09); }

@media (min-width: 900px){
  .itb-blog > nav.itb-toc ol,
  .itb-blog > nav.itb-toc ul{ grid-template-columns: 1fr 1fr; column-gap: 26px; }
}

/* ============================================================================
   EL CARRIL IZQUIERDO SE OCUPA · 02-sep-2026
   La rejilla del cuerpo es `1fr 640px 1fr`: en una caja de 1200 px eso deja
   280 px muertos a cada lado durante TODO el artículo. Medido: 42 bloques al
   53 % del ancho, y el hueco es justo lo que Jesús lleva señalando.
   La salida NO es estirar el párrafo (a 1200 px salen 130 caracteres por línea,
   ilegible): es LLENAR el carril. El índice deja de ser una caja que se ve una
   vez al principio y pasa a acompañar la lectura entera.
   Para que el carril sea suyo en exclusiva, los bloques a sangre arrancan en la
   columna del texto: si siguieran en `1 / -1` se solaparían con el índice fijo.
   ============================================================================ */
.itb-blog{ row-gap: 0; }   /* el índice abarca hasta la fila 400: con hueco entre filas,
                              las ~330 filas implícitas vacías abrirían un abismo al final */

@media (min-width: 1260px){
  .itb-blog > figure,
  .itb-blog > .itb-figura,
  .itb-blog > .itb-destacada,
  .itb-blog > .itb-table-responsive,
  .itb-blog > .itb-claves,
  .itb-blog > .itb-balanza,
  .itb-blog > .itb-ad,
  .itb-blog > .itb-cta,
  .itb-blog > .itb-pasos{ grid-column: 2 / -1; }

  .itb-blog > nav.itb-toc{
    grid-column: 1;
    grid-row: 1 / 400;          /* la columna 1 ya no la usa nadie más: cero colisión */
    align-self: start;
    position: sticky;
    top: 104px;
    max-width: none;
    margin: 0;
    padding: 2px 26px 0 0;
    background: none;
    border: 0;
    border-right: 1px solid var(--itb-line, #dfe1d6);
    border-radius: 0;
    max-height: calc(100vh - 150px);
    overflow-y: auto;
    overscroll-behavior: contain;
  }
  .itb-blog > nav.itb-toc::before{ margin-bottom: 12px; }
  /* la pastilla verde del icono era el adorno de la CAJA; sin caja se queda flotando
     sobre el carril como un botón que no lo es. Fuera en esta disposición. */
  .itb-blog > nav.itb-toc::after{ content: none; }
  .itb-blog > nav.itb-toc ol,
  .itb-blog > nav.itb-toc ul{ grid-template-columns: 1fr; column-gap: 0; gap: 1px; }
  .itb-blog > nav.itb-toc a{
    font-size: .82rem;
    line-height: 1.38;
    padding: 7px 8px 7px 0;
    gap: 9px;
  }
  .itb-blog > nav.itb-toc a::before{ font-size: .66rem; }
  .itb-blog > nav.itb-toc a:hover{ background: transparent; text-decoration: underline; text-underline-offset: 3px; }
}

/* ============================================================================
   LA CAJA DE AUTOR DE LA SUITE · 02-sep-2026
   🥇🥇 UNA SOLA CAUSA EXPLICA TODOS SUS DEFECTOS: la hoja del módulo se sirve
   dentro de `@layer itb-caja-autor`, y en CSS **lo que no está en una capa gana
   siempre a lo que sí lo está**, con independencia de la especificidad. De ahí:
     · `button{padding-left:32px}` de Astra (sin capa) pisaba el `padding:0` del
       módulo: el botón «Copiar enlace» medía 64 px con CERO de contenido, y su
       icono —un SVG sin ancho intrínseco, encogible como ítem flex— se quedaba
       en 0 px. Resultado: una pastilla lima vacía. El SVG estaba en el DOM y el
       contraste era 15,95; nada de eso se ve si el ancho es cero.
     · `.elementor-button` (sin capa) pintaba de gris los tres enlaces del autor:
       verde #3d6b0d sobre gris #69727d = **contraste 1,30**, cuando AA pide 4,5.
   Esta hoja no está en ninguna capa, así que aquí sí gana. El arreglo de fondo
   —sacar el módulo de la capa, o envolver también las reglas del tema— es del
   repo de la Suite, no de este sitio.
   ============================================================================ */
.cbab .cbab__btn.elementor-button{
  background: transparent;
  color: var(--itb-ink, #12141d);
  border: 1px solid var(--itb-ink, #12141d);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .92rem;
  font-weight: 600;
  padding: 11px 18px;
}
.cbab .cbab__btn.elementor-button:hover{
  background: var(--itb-acc-hov);
  border-color: var(--itb-acc-hov);
  color: var(--itb-ink, #12141d);
}
/* La biografía corría los 1030 px de la tarjeta: ~130 caracteres por línea. Estrecharla
   dejaría un tercio de la tarjeta vacío, que es el defecto contrario, así que los tres
   enlaces suben a una columna propia a la derecha y la tarjeta se llena. */
@media (min-width: 1000px){
  .cbab .cbab__content{
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 280px);
    column-gap: 34px;
    align-items: start;
  }
  .cbab .cbab__headline{ grid-column: 1 / -1; }
  .cbab .cbab__bio{ grid-column: 1; margin-bottom: 0; }
  .cbab .cbab__row--ctas{
    grid-column: 2; grid-row: 2;
    margin-top: 2px;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }
  .cbab .cbab__btn.elementor-button{ text-align: center; }
}

/* el botón de copiar, con su ancho y su icono defendidos del relleno del tema */
.cbab .cbab__copyBtn{ width: 42px; height: 42px; padding: 0; }
.cbab .cbab__copyBtn .cbab__icon{ flex: 0 0 18px; width: 18px; min-width: 18px; }
/* el retrato, sin el cerco que Astra le pone a toda imagen de entrada.
   Ojo: `cbab__avatar` es la PROPIA <img>, no un envoltorio — `.cbab__avatar img`
   no existe y una regla escrita así no falla, simplemente no hace nada. */
.cbab img.cbab__avatar,
.cbab .cbab__media img{ box-shadow: none; }
/* «Compartir» salía DOS veces en la misma pantalla: aquí y en la sección propia de
   la plantilla, que además ofrece WhatsApp y correo. Se queda aquella; esta fila
   pasa a ser solo «sígueme», que es otra cosa distinta y merece su sitio. */
.cbab .cbab__share{ display: none; }
/* Y la meta de la tarjeta repetía la fecha de la línea de arriba con OTRO tiempo de
   lectura (21 min frente a los 18 de la firma): dos cifras distintas para lo mismo en
   la misma pantalla. El cuándo va arriba; la tarjeta responde a quién.
   🥇 La clase va DOBLADA a propósito: el módulo trae `.cbab .cbab__metaLine{display:flex}`
   fuera de su capa, con la misma especificidad que la mía y CARGADA DESPUÉS, así que
   por orden ganaba él. Doblar la clase sube a 0-3-0 sin ensuciar con `!important`. */
.cbab .cbab__metaLine.cbab__metaLine{ display: none; }

/* --- La banda de llamada, compuesta en vez de estrechada -------------------
   Medido: su segunda línea corría 852 px, 129 caracteres — ilegible. Estrecharla
   habría dejado la banda medio vacía, que es el defecto contrario. Se reparte:
   el texto a la izquierda con su medida, el botón a la derecha, y la banda llena. */
@media (min-width: 900px){
  .itb-blog .itb-cta{
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 6px 40px;
    text-align: left;
  }
  .itb-blog .itb-cta p{ grid-column: 1; text-align: left; }
  .itb-blog .itb-cta .itb-cta-sub{ margin-bottom: 0; max-width: 60ch; }
  /* 🥇 el ítem de la rejilla NO es el <a>: wpautop envuelve el enlace suelto en un <p>,
     así que colocar el `<a>` no movía nada — se colocaba su envoltorio o nadie. Se apunta
     al párrafo que solo contiene el enlace, y al <a> por si algún artículo va sin envolver. */
  .itb-blog .itb-cta > p:has(> a:only-child),
  .itb-blog .itb-cta > a{
    grid-column: 2; grid-row: 1 / 3;
    justify-self: end; align-self: center;
    margin: 0;
  }
  .itb-blog .itb-cta > p:has(> a:only-child) a{ white-space: nowrap; }
}

/* 🥇 EL BOTÓN ERA LIMA SOBRE LIMA: contraste 1,08 medido, en el CTA de los 47 artículos.
   `.itb-cta.itb-oscuro a{color:var(--itb-lima)}` se escribió para los enlaces dentro de
   la banda oscura, pero el botón también es un <a> y su fondo YA es lima. Se le devuelve
   la tinta; los enlaces de texto dentro de la banda siguen en lima. */
.itb-blog .itb-cta.itb-oscuro a[href]{ color: var(--itb-ink, #12141d); }

/* --- la destacada del hero: sin costura con el fondo tinta ------------------ */
.elementor-widget-theme-post-featured-image img{
  display: block;
  width: 100%;
  height: auto;
  border-radius: 16px;
}

/* ── Cita destacada ───────────────────────────────────────────────────────────
   Una frase DEL PROPIO artículo, sacada a tamaño grande sobre fondo oscuro, con
   la sección de la que sale. No es un testimonio ni una cita de terceros: es el
   argumento del texto puesto en pausa, para dar respiro a piezas de 2.000-4.500
   palabras. Portada de la plantilla «ITB · C37 Cita a sangre» (post 4792), que ya
   estaba construida y validada en la biblioteca; aquí vive como HTML del sistema
   del blog para que cada artículo lleve SU frase y no una compartida.
   Añadida el 03-09-2026: ninguno de los 47 artículos tenía cita ni blockquote. */
.itb-blog .itb-cita{background:var(--itb-dark);border-radius:var(--itb-r-lg);padding:40px 44px;margin:var(--esp-m) 0}
.itb-blog .itb-cita p{color:#fff;font-family:"Merriweather",Georgia,serif;font-size:1.24em;line-height:1.5;margin:0;text-align:center;text-wrap:balance}
.itb-blog .itb-cita cite{display:block;margin-top:16px;color:var(--itb-cta-sub);font-family:"Inter",sans-serif;font-size:.8em;font-style:normal;text-align:center;letter-spacing:.02em}
@media (max-width:600px){.itb-blog .itb-cita{padding:28px 22px}.itb-blog .itb-cita p{font-size:1.08em}}

/* ============================================================================
   EL ÍNDICE SALE DEL CARRIL Y EL ARTÍCULO GANA LA PANTALLA · 04-09-2026
   Orden de Jesús: «el indice debe estar arriba y como boton flotante, no debe
   ocupar parte del ancho, el resto de los articulos deben ocupar todo el ancho
   de pantalla».
   Corrige explícitamente la decisión del 02-sep, que metió el índice en el
   carril izquierdo como columna fija. Medido antes de tocar a 1440: el índice
   sticky de 280 px dejaba los primeros párrafos en 349 px de ancho.
   Esta capa va al final del fichero a propósito: con la misma especificidad que
   la del 02-sep, gana por orden. No se borra la anterior para conservar el
   rastro de por qué se hizo y poder volver con un solo corte.
   ============================================================================ */

/* 1 · El cuerpo deja de topar en 1200: el contenedor de la plantilla ya va a
       ancho completo (single 4292, contenedor c257647). */
.itb-blog{
  max-width: none;
  /* 700 px ≈ 78 caracteres: el techo cómodo de lectura. Se sube desde 640 para
     que el aire lateral encoja sin llevar la línea a la zona ilegible. */
  --itb-medida-lectura: 700px;
}

/* 2 · Se deshace el carril: el índice vuelve al flujo, arriba, y los bloques a
       sangre recuperan los DOS carriles, que es lo que ocupa la pantalla. */
@media (min-width: 1260px){
  .itb-blog > figure,
  .itb-blog > .itb-figura,
  .itb-blog > .itb-destacada,
  .itb-blog > .itb-table-responsive,
  .itb-blog > .itb-claves,
  .itb-blog > .itb-balanza,
  .itb-blog > .itb-ad,
  .itb-blog > .itb-cta,
  .itb-blog > .itb-pasos{ grid-column: 1 / -1; }

  .itb-blog > nav.itb-toc{
    grid-column: 1 / -1;
    grid-row: auto;
    position: static;
    max-width: var(--itb-medida-lectura);
    margin: 2.4em auto;
    padding: 22px 26px;
    background: #fbfcf8;
    border: 1px solid var(--itb-line, #dfe1d6);
    border-right: 1px solid var(--itb-line, #dfe1d6);
    border-radius: 16px;
    max-height: none;
    overflow: visible;
  }
  .itb-blog > nav.itb-toc ol,
  .itb-blog > nav.itb-toc ul{ grid-template-columns: 1fr 1fr; column-gap: 26px; gap: 2px; }
  .itb-blog > nav.itb-toc a{ font-size: .96em; line-height: 1.45; padding: 8px 10px; gap: 12px; }
  .itb-blog > nav.itb-toc a::before{ font-size: .72rem; }
  .itb-blog > nav.itb-toc a:hover{ background: #f1f6e6; text-decoration: none; }
}
.itb-blog{ row-gap: normal; }

/* 3 · El índice como botón flotante: el FAB que ya existía hacía scroll hasta el
       índice; ahora lo ABRE en un <dialog> nativo. Nativo por tres cosas que no
       hay que escribir: Esc cierra, el fondo bloquea, y el foco queda atrapado. */
.itb-toc-panel{
  border: 0;
  border-radius: 18px;
  padding: 0;
  width: min(560px, calc(100vw - 32px));
  max-height: min(72vh, 620px);
  background: #fff;
  color: var(--itb-ink, #12141d);
  box-shadow: 0 24px 60px rgba(18,20,29,.28);
  overflow: hidden;
}
.itb-toc-panel::backdrop{ background: rgba(9,8,9,.52); }
.itb-toc-panel__cab{
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 18px 22px 14px;
  border-bottom: 1px solid var(--itb-line, #dfe1d6);
}
.itb-toc-panel__tit{
  margin: 0;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .72rem; font-weight: 700; letter-spacing: .13em; text-transform: uppercase;
  color: var(--itb-verde-texto, #3d6b0d);
}
.itb-toc-panel__x{
  flex: 0 0 auto;
  width: 34px; height: 34px;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--itb-line, #dfe1d6);
  border-radius: 10px;
  background: #fff; color: var(--itb-ink, #12141d);
  cursor: pointer;
  padding: 0;
}
.itb-toc-panel__x:hover{ background: var(--itb-bg, #eeefe7); }
.itb-toc-panel__x:focus-visible{ outline: 2px solid var(--itb-ink, #12141d); outline-offset: 2px; }
.itb-toc-panel__x svg{ width: 17px; height: 17px; stroke: currentColor; fill: none; stroke-width: 2.2; stroke-linecap: round; }
.itb-toc-panel__cuerpo{ overflow-y: auto; max-height: calc(min(72vh, 620px) - 66px); padding: 12px 14px 18px; overscroll-behavior: contain; }
.itb-toc-panel ol, .itb-toc-panel ul{ margin: 0; padding: 0; list-style: none; counter-reset: itbtocp; display: grid; gap: 2px; }
.itb-toc-panel li{ margin: 0; counter-increment: itbtocp; }
.itb-toc-panel a{
  display: flex; align-items: baseline; gap: 12px;
  padding: 10px 12px;
  border-radius: 9px;
  color: var(--itb-ink, #12141d);
  text-decoration: none;
  font-size: .96rem; line-height: 1.45;
}
.itb-toc-panel a::before{
  content: counter(itbtocp, decimal-leading-zero);
  flex: 0 0 auto;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .72rem; font-weight: 700; letter-spacing: .04em;
  color: var(--itb-verde-texto, #3d6b0d);
}
.itb-toc-panel a:hover{ background: #f1f6e6; color: var(--itb-verde-hover, #2c4e09); }
.itb-toc-panel a:focus-visible{ outline: 2px solid var(--itb-ink, #12141d); outline-offset: -2px; }
/* el FAB del índice deja de esconderse hasta el 60 % de scroll: el encargo pide que
   el índice esté disponible como botón flotante durante toda la lectura */
.itb-fabs.itb-fabs-toc{ opacity: 1; transform: none; pointer-events: auto; }
@media (max-width: 640px){
  .itb-toc-panel{ width: calc(100vw - 24px); max-height: 78vh; }
  .itb-toc-panel__cuerpo{ max-height: calc(78vh - 66px); }
}
@media (prefers-reduced-motion: reduce){ .itb-toc-panel{ animation: none; } }

/* --- La cita destacada necesita su propia medida · 04-09-2026 ---------------
   Medido en el servido tras aplicarla a los 47: la cita es un <figure>, así que
   la rejilla la manda a `1 / -1` y ocupa los 1360 px. Con eso la frase salía en
   UNA SOLA LÍNEA de 106 caracteres: deja de leerse como cita destacada y pasa a
   ser una tira de texto. El bloque sigue a sangre —esa es su fuerza—, pero la
   frase se queda en su medida y sube de tamaño, que es lo que la destaca. */
.itb-blog .itb-cita p{
  max-width: 820px;
  margin-inline: auto;
  font-size: 1.38em;
  line-height: 1.42;
}
@media (max-width:900px){ .itb-blog .itb-cita p{ max-width: 100%; font-size: 1.2em; } }
@media (max-width:600px){ .itb-blog .itb-cita p{ font-size: 1.08em; } }

/* --- 5.bis · LA BIO DEL AUTOR SE PASABA DE LARGO · 05-09-2026 ---------------
   MEDIDO: el párrafo de la caja de autor se servía a 876 px, que en Inter son
   107 caracteres por línea. El máximo legible del medidor de la casa son 92, y
   por encima de ~90 el ojo pierde el renglón al volver al margen izquierdo.
   Salía en LOS 47 artículos, porque la caja de autor va en todos.

   700 px son ~85 caracteres: dentro del límite y sin encoger la caja, que sigue
   a su ancho (el párrafo queda al 80 % de ella, lejos del umbral de «estrecho»).

   Especificidad 0,3,1 para ganar a `.cbab .cbab__bio p` de author-box.css sin
   recurrir a !important. Alcance medido: UN elemento por artículo. */
.cbab .cbab__card .cbab__bio p{ max-width: 700px; }

/* ══════════════════════════════════════════════════════════════════════════
   DECISIÓN DE JESÚS · 07-09-2026: «el ancho el mismo que las páginas»
   ----------------------------------------------------------------------------
   Cierra la contradicción entre el bloque del 24-ago («la caja manda, NO SE
   REABRE») y el del 25-ago («se estrecha la columna de texto a 640/700»).
   Gana el 24-ago: el texto de las entradas ocupa la caja entera, igual que
   las páginas de servicio.

   Cómo: la rejilla de tres carriles del 25-ago se colapsa a UNA columna al
   100 % en todos los anchos — la misma regla que ya usaba el móvil (<780)—
   y cada excepción «a sangre» (grid-column: 1 / -1) queda inocua. No se
   borra nada de arriba: este bloque va el último, gana por orden, y se
   revierte quitándolo. La medida de lectura del blog ya no existe: si
   algún día se quiere de nuevo, se borra ESTE bloque y vuelve la de 700.

   El mu-plugin itb-me-blog-ancho.php (que declaraba el aire de la columna)
   se retira el mismo día: ya no hay aire que declarar.
   ══════════════════════════════════════════════════════════════════════════ */
.itb-blog{
  grid-template-columns: 100%;
  --itb-medida-lectura: 100%;
  /* la MISMA caja que las páginas: 1200 px (medido en el DOM el 07-09: las páginas dan
     1200 a sus párrafos; el bloque del 25-ago había puesto max-width:none y el blog
     salía a 1360). Se centra, como el contenido boxed de Elementor. */
  max-width: 1200px;
  margin-inline: auto;
}
.itb-blog > *,
.itb-blog > figure,
.itb-blog > .itb-figura,
.itb-blog > .itb-destacada,
.itb-blog > .itb-table-responsive,
.itb-blog > .itb-claves,
.itb-blog > .itb-balanza,
.itb-blog > .itb-ad,
.itb-blog > .itb-cta,
.itb-blog > .itb-toc,
.itb-blog > .itb-pasos{ grid-column: 1; }
@media (min-width: 1260px){
  .itb-blog > nav.itb-toc{ max-width: none; }
  .itb-blog > .itb-pasos{ grid-column: 1; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   BLOQUES DEL BLOG · 07-09-2026 — encargo de Jesús: «bloques de diseño moderno
   y muy optimizados» para el blog y sus artículos.
   ------------------------------------------------------------------------------
   QUÉ ARREGLA (medido antes de escribir una línea):
     · Cuatro clases se usaban en los artículos SIN una sola regla en el CSS, así
       que se servían como párrafos corrientes: `.itb-preg` (3 artículos),
       `.itb-ok`, `.itb-ko` y `.itb-vermas`. «BIEN» y «ALARMA» —cuya única razón
       de ser es contrastar— salían en negro sobre blanco, indistinguibles.
     · `.itb-dato` enterraba la cifra dentro del párrafo en negrita.

   OPTIMIZACIÓN (el encargo pedía las dos cosas):
     · CSS puro: 0 JS, 0 imágenes, 0 fuentes nuevas, 0 dependencias.
     · Sin `@import`, sin `filter`, sin `backdrop-filter` (repintan en scroll).
     · Solo `transform`/`opacity` en lo que se mueve, con rama reducida.
     · Las variables son las que el blog ya declara: no se añade paleta nueva.
     · `content-visibility` NO se usa aquí: ya dio un falso verde en los gates.

   COLORES: los de la marca medidos, más el par semántico bien/alarma que ya
   usan los informes de la casa. Ratios contra su propio fondo, medidos:
     bien   #2C4E09 sobre #EDF6DE = 7,9:1     alarma #8E1B22 sobre #FBECEC = 7,5:1
   La lima JAMÁS como texto sobre claro (1,01): solo fondo con tinta, o acento
   sobre oscuro. Regla de la skill del proyecto.
   ══════════════════════════════════════════════════════════════════════════════ */

.itb-blog{
  --itb-bien:#2C4E09; --itb-bien-bg:#EDF6DE; --itb-bien-bd:#BFE08A;
  --itb-mal:#8E1B22;  --itb-mal-bg:#FBECEC;  --itb-mal-bd:#EFC3C3;
}

/* ── 1 · PREGUNTA CON SUS DOS RESPUESTAS ─────────────────────────────────────
   `.itb-preg` = h3 (la pregunta) + `.itb-ok` + `.itb-ko`. Se compone en tarjeta
   con la pregunta arriba y las respuestas en DOS columnas a partir de 860 px:
   el contraste bien/alarma se lee de un vistazo, que es su función. Por debajo,
   una columna (no hay ancho para dos sin partir palabras). */
.itb-blog .itb-preg{
  margin:1.6em 0;
  padding:22px 24px;
  background:#fff;
  border:1px solid var(--itb-line,#dfe1d6);
  border-radius:16px;
  box-shadow:0 1px 2px rgba(18,20,29,.04),0 12px 30px -18px rgba(18,20,29,.16);
}
.itb-blog .itb-preg > h3{
  margin:0 0 14px;
  font-size:1.12em;
  line-height:1.3;
}
.itb-blog .itb-preg > .itb-ok{ margin:0 0 10px }
.itb-blog .itb-preg > .itb-ko{ margin:0 }
/* 🥇 Aquí había una rejilla de dos columnas para leer BIEN|ALARMA en paralelo. MEDIDO al mirar
   la captura: el bloque lleva más hijos que esos dos —en el artículo real, un `.itb-dato`—, así
   que uno caía en la segunda celda y la fila estiraba la respuesta verde con 300 px de hueco
   vacío. Una rejilla fija sobre markup que no controlas es una apuesta. Apilado: cero huecos,
   funciona con cualquier combinación de hijos y son cuatro reglas menos. */

/* ── 2 · LAS DOS RESPUESTAS ──────────────────────────────────────────────────
   Pastilla de estado + texto. El `<strong>` que ya trae el HTML («BIEN»,
   «ALARMA») se convierte en la pastilla sin tocar el contenido de los artículos:
   el diseño se adapta al markup que existe, no al revés. */
.itb-blog .itb-ok,
.itb-blog .itb-ko{
  margin:1.1em 0;
  padding:14px 16px 14px 18px;
  border-radius:0 12px 12px 0;
  border-left:4px solid;
  font-size:.95em;
  line-height:1.6;
}
.itb-blog .itb-ok{ background:var(--itb-bien-bg); border-left-color:var(--itb-bien); color:#15250A }
.itb-blog .itb-ko{ background:var(--itb-mal-bg);  border-left-color:var(--itb-mal);  color:#3A1113 }
.itb-blog .itb-ok > strong,
.itb-blog .itb-ko > strong{
  display:inline-block;
  margin:0 8px 2px 0;
  padding:2px 9px;
  border-radius:999px;
  font-size:.72em;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  vertical-align:1px;
}
.itb-blog .itb-ok > strong{ background:var(--itb-bien); color:#fff }
.itb-blog .itb-ko > strong{ background:var(--itb-mal);  color:#fff }

/* ── 3 · PUENTE AL SERVICIO ──────────────────────────────────────────────────
   `.itb-vermas` cierra un apartado ofreciendo el servicio. No es una llamada
   a la acción grande (para eso está `.itb-cta`): es un puente discreto, con la
   flecha como marca de dirección. La flecha va en `::before` con `content`,
   no como imagen ni icono: cero peticiones. */
/* 🥇 Sin el prefijo del contenedor: MEDIDO el 07-09, en `que-incluye-auditoria-seo` el
   párrafo queda FUERA de `.itb-blog` (lo cierra un <div> antes), así que con
   `.itb-blog .itb-vermas` la regla estaba cargada y no se aplicaba a nada. La clase es
   propia y única del blog: no necesita ancestro para acotar. */
.itb-vermas{
  position:relative;
  margin:1.5em 0;
  padding:14px 18px 14px 46px;
  background:var(--itb-hues,#eeefe7);
  border-radius:12px;
  font-size:.95em;
  line-height:1.6;
}
.itb-vermas::before{
  content:"→";
  position:absolute;
  left:16px; top:13px;
  width:22px; height:22px;
  display:grid; place-items:center;
  background:var(--itb-acc,#ccff8b);
  color:var(--itb-ink,#12141d);
  border-radius:50%;
  font-size:13px; font-weight:700; line-height:1;
}
.itb-vermas a{ font-weight:600 }

/* ── 4 · EL DATO, CON LA CIFRA COMO PROTAGONISTA ─────────────────────────────
   El bloque ya existía y funcionaba; lo que no funcionaba era la JERARQUÍA: la
   cifra que justifica el dato iba dentro del párrafo en negrita, al mismo peso
   visual que el resto. Se marca con `<b class="itb-cifra-dato">` en el artículo
   y sale a tamaño de titular. Sin ese marcado, el bloque se ve exactamente como
   hasta hoy: la mejora es progresiva y no rompe los 46 artículos que lo usan. */
.itb-blog .itb-dato .itb-cifra-dato{
  display:block;
  margin:0 0 2px;
  font-family:var(--itb-serif,Merriweather,Georgia,serif);
  font-size:1.9em;
  font-weight:900;
  line-height:1.05;
  letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;
  color:var(--itb-ink,#12141d);
}

/* ── 5 · MOVIMIENTO ──────────────────────────────────────────────────────────
   Los bloques nuevos entran con el mismo `reveal` que ya usa el blog (una clase
   que pone su JS). Aquí solo se declara el estado, sin motor propio, y con la
   rama de movimiento reducido que exige la casa. */
@media (prefers-reduced-motion:reduce){
  .itb-blog .itb-preg,
  .itb-vermas{ transition:none }
}
