/* ═══════════════════════════════════════════════════════════════════════════
   guiafondosindexados.com · CSS compartido (chrome, navegación, impresión)
   ---------------------------------------------------------------------------
   ⚠ NO CARGAR ESTE ARCHIVO DE FORMA ASÍNCRONA.
   Tres páginas dibujan gráficos en <canvas> leyendo canvas.clientWidth en la
   primera llamada síncrona. Con rel=preload+onload o el truco media="print",
   clientWidth valdría el ancho por defecto (300px) y los gráficos saldrían
   deformados hasta que el usuario redimensionara la ventana.
   Debe ir siempre como <link rel="stylesheet"> normal y bloqueante.

   ⚠ VERSIONADO EN EL NOMBRE: si editas este archivo, renómbralo a .v2.css y
   actualiza el <link> de todas las páginas. La cabecera Cache-Control lleva
   "immutable" con un año de duración: sin renombrar, los visitantes que ya
   estuvieron seguirían viendo la versión antigua.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── 1. Tokens: cada color del sitio se define UNA sola vez ─────────────── */
:root{
  /* neutros de la portada del libro */
  --papel:#F7ECE1; --papel2:#FFFCF8; --linea:#E6D9C9; --gris:#6E6559;
  --tinta:#12233C; --oro:#96630D; --oro-claro:#D9A854;

  /* marca: navy de la portada */
  --verde:#0B2245; --verde-osc:#041C37;

  /* acento por defecto = marca (lo usan index y las páginas sin data-cat) */
  --cat:#0B2245; --cat-dark:#041C37;

  /* paleta de acentos por herramienta */
  --c-interes:#0E7A5F;          --cd-interes:#07523F;
  --c-independencia:#0B7285;    --cd-independencia:#0A4E5C;
  --c-tiempo:#6D4AAE;           --cd-tiempo:#4A3080;
  --c-carteras:#C2660D;         --cd-carteras:#8A4A0C;
  --c-comisiones:#B3261E;       --cd-comisiones:#7A1815;
  --c-fiscalidad:#0F7A6E;       --cd-fiscalidad:#0A5A50;
  --c-plan:#3D4EAB;             --cd-plan:#2C3985;
  --c-checklists:#B0294B;       --cd-checklists:#851E3B;
  --c-arranque:#1D6FA5;         --cd-arranque:#0D5580;
  --c-notas:#334155;            --cd-notas:#1E293B;
  --c-mapa:#0B2245;             --cd-mapa:#041C37;
  --c-faq:#2451A3;              --cd-faq:#1A3D7A;
  --c-biblio:#96591C;           --cd-biblio:#6B3D14;
  --c-actualizaciones:#96630D;  --cd-actualizaciones:#6B4709;
  --c-diferimiento:#A61E64;     --cd-diferimiento:#7D1449;
  --c-rebalanceo:#5A7302;       --cd-rebalanceo:#3F5101;
  --c-dca:#0E5A8A;              --cd-dca:#08405F;
  --c-pensiones:#7A4A21;        --cd-pensiones:#573317;
  --c-ladrillo:#B45309;         --cd-ladrillo:#8A3F07;
}

/* ─── 2. Mapa de temas: <html data-cat="..."> elige el acento ────────────── */
/* [data-cat] tiene especificidad (0,2,0) y gana al :root pelado (0,1,0). */
:root[data-cat="interes"]        {--cat:var(--c-interes);        --cat-dark:var(--cd-interes)}
:root[data-cat="independencia"]  {--cat:var(--c-independencia);  --cat-dark:var(--cd-independencia)}
:root[data-cat="tiempo"]         {--cat:var(--c-tiempo);         --cat-dark:var(--cd-tiempo)}
:root[data-cat="carteras"]       {--cat:var(--c-carteras);       --cat-dark:var(--cd-carteras)}
:root[data-cat="comisiones"]     {--cat:var(--c-comisiones);     --cat-dark:var(--cd-comisiones)}
:root[data-cat="fiscalidad"]     {--cat:var(--c-fiscalidad);     --cat-dark:var(--cd-fiscalidad)}
:root[data-cat="plan"]           {--cat:var(--c-plan);           --cat-dark:var(--cd-plan)}
:root[data-cat="checklists"]     {--cat:var(--c-checklists);     --cat-dark:var(--cd-checklists)}
:root[data-cat="arranque"]       {--cat:var(--c-arranque);       --cat-dark:var(--cd-arranque)}
:root[data-cat="notas"]          {--cat:var(--c-notas);          --cat-dark:var(--cd-notas)}
:root[data-cat="mapa"]           {--cat:var(--c-mapa);           --cat-dark:var(--cd-mapa)}
:root[data-cat="faq"]            {--cat:var(--c-faq);            --cat-dark:var(--cd-faq)}
:root[data-cat="biblio"]         {--cat:var(--c-biblio);         --cat-dark:var(--cd-biblio)}
:root[data-cat="actualizaciones"]{--cat:var(--c-actualizaciones);--cat-dark:var(--cd-actualizaciones)}
:root[data-cat="diferimiento"]   {--cat:var(--c-diferimiento);   --cat-dark:var(--cd-diferimiento)}
:root[data-cat="rebalanceo"]     {--cat:var(--c-rebalanceo);     --cat-dark:var(--cd-rebalanceo)}
:root[data-cat="dca"]            {--cat:var(--c-dca);            --cat-dark:var(--cd-dca)}
:root[data-cat="pensiones"]      {--cat:var(--c-pensiones);      --cat-dark:var(--cd-pensiones)}
:root[data-cat="ladrillo"]       {--cat:var(--c-ladrillo);       --cat-dark:var(--cd-ladrillo)}

/* El truco de cascada, declarado UNA vez para todo el sitio: recolorea el
   interior de la página con su acento mientras nav y pie siguen en navy.
   Antes faltaba en 5 páginas, que habían perdido su color en silencio. */
main{--verde:var(--cat);--verde-osc:var(--cat-dark)}

/* ─── 3. Base ────────────────────────────────────────────────────────────── */
*{box-sizing:border-box}
html{overflow-x:hidden;scroll-behavior:smooth}
/* respeta a quien pide menos movimiento (antes sin guarda) */
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{margin:0;background:var(--papel);color:var(--tinta);line-height:1.6;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}

::selection{background:color-mix(in srgb,var(--verde),transparent 76%)}

a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible{
  outline:2px solid var(--verde);outline-offset:2px}
/* Bug corregido: sobre los paneles navy el contorno navy era invisible.
   En esos contextos el foco pasa a dorado claro. */
.core a:focus-visible,.idea-banner a:focus-visible,.livetool a:focus-visible,
.buybox a:focus-visible,.buybox button:focus-visible,
header a:focus-visible,header button:focus-visible{
  outline:3px solid #F2D9A0;outline-offset:3px}

/* ─── 4. Cabecera de página y franja de acento ───────────────────────────── */
header:not(.hero){position:relative}
header:not(.hero)::before{content:"";position:absolute;top:0;left:0;right:0;height:4px;
  background:var(--cat,transparent);z-index:2}
.eyebrow{color:var(--oro-claro);opacity:1;letter-spacing:.24em;text-transform:uppercase;
  font-size:.68rem;margin:0 0 8px}

a.back{display:inline-flex;align-items:center;gap:7px;color:#fff;text-decoration:none;
  font-size:.84rem;font-weight:600;background:rgba(255,255,255,.18);
  border:1px solid rgba(255,255,255,.42);padding:8px 15px;border-radius:100px;
  margin-bottom:16px;transition:background .15s,transform .15s}
a.back:hover{background:rgba(255,255,255,.34);transform:translateX(-3px)}

/* ─── 5. Navegación (.mnav) ──────────────────────────────────────────────── */
.mnav{position:sticky;top:0;z-index:200;background:rgba(255,253,248,.96);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid #e6e0d3;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
.mnav-in{max-width:1020px;margin:0 auto;padding:0 22px;height:64px;display:flex;align-items:center;gap:18px}
.mnav-brand{display:inline-flex;align-items:center;gap:9px;text-decoration:none;color:#15222e;
  font-family:Georgia,serif;font-weight:700;font-size:1.02rem;white-space:nowrap}
.mnav-brand svg{flex:none}
.mnav-burger{display:none;margin-left:auto;width:42px;height:36px;border:1px solid #e6e0d3;
  border-radius:9px;background:#fff;cursor:pointer;flex-direction:column;justify-content:center;
  align-items:center;gap:4px}
.mnav-burger span{display:block;width:18px;height:2px;background:#15222e;border-radius:2px;transition:.2s}
.mnav-links{margin-left:auto;display:flex;align-items:center;gap:3px}
.mnav-links>a,.nd>summary{display:inline-flex;align-items:center;gap:7px;text-decoration:none;
  color:#57616F;font-size:.95rem;font-weight:600;padding:10px 15px;border-radius:11px;cursor:pointer;
  list-style:none;white-space:nowrap;transition:background .15s,color .15s}
.nd>summary::-webkit-details-marker{display:none}
.nd>summary::after{content:"\25BE";font-size:.6rem;color:#9a998f}
.mnav-links>a:hover,.nd>summary:hover{background:#F4EFE4;color:#2B3A4A}
.mnav-links>a.on,.nd.on>summary{color:#1B2C42;background:#F0E8DA;box-shadow:inset 0 0 0 1px rgba(184,134,47,.28)}
.nd{position:relative}
.nd-pop{position:absolute;left:0;top:calc(100% + 8px);background:#fff;border:1px solid #e6e0d3;
  border-radius:13px;box-shadow:0 18px 44px rgba(20,30,28,.16);padding:7px;min-width:272px;z-index:210}
.nd-pop a{display:flex;align-items:flex-start;gap:10px;padding:8px 11px;border-radius:8px;
  text-decoration:none;color:#15222e;font-size:.86rem;font-weight:500;line-height:1.3}
.nd-pop a:hover{background:#f3efe4}
.nd-pop a[aria-current]{background:#f3efe4;font-weight:700}
.nd-pop small{display:block;color:#9a998f;font-size:.72rem;font-weight:400}

/* Puntos de color del menú: antes eran 195 hexadecimales repetidos en línea */
.nd-pop .dot{width:10px;height:10px;border-radius:3px;flex:none;margin-top:4px;background:var(--gris)}
.dot.interes{background:var(--c-interes)}
.dot.independencia{background:var(--c-independencia)}
.dot.tiempo{background:var(--c-tiempo)}
.dot.carteras{background:var(--c-carteras)}
.dot.comisiones{background:var(--c-comisiones)}
.dot.fiscalidad{background:var(--c-fiscalidad)}
.dot.plan{background:var(--c-plan)}
.dot.checklists{background:var(--c-checklists)}
.dot.arranque{background:var(--c-arranque)}
.dot.notas{background:var(--c-notas)}
.dot.mapa{background:var(--c-mapa)}
.dot.faq{background:var(--c-faq)}
.dot.biblio{background:var(--c-biblio)}
.dot.diferimiento{background:var(--c-diferimiento)}
.dot.rebalanceo{background:var(--c-rebalanceo)}
.dot.dca{background:var(--c-dca)}
.dot.pensiones{background:var(--c-pensiones)}
.dot.ladrillo{background:var(--c-ladrillo)}

/* Selector de idioma ES/EN: solo el idioma activo muestra su bandera */
.mnav-lang{margin-left:8px;display:inline-flex;align-items:center;gap:2px;flex:none;
  background:#FBF7EF;border:1px solid var(--linea);border-radius:100px;padding:3px}
.mnav-lang a{display:inline-flex;align-items:center;gap:6px;text-decoration:none;
  font-size:.8rem;font-weight:700;letter-spacing:.03em;color:#8A8578;border-radius:100px;
  padding:6px 12px;white-space:nowrap;transition:background .15s,color .15s}
.mnav-lang a:hover{color:#2B3A4A}
.mnav-lang a[aria-current="true"]{color:#1B2C42;background:#fff;cursor:default;
  box-shadow:0 1px 3px rgba(20,30,28,.12),inset 0 0 0 1px rgba(184,134,47,.3)}
.mnav-lang .flag{display:block;width:18px;height:13px;border-radius:2px;flex:none;
  box-shadow:0 0 0 1px rgba(0,0,0,.14)}

@media (max-width:820px){
  .mnav-burger{display:flex}
  .mnav-links{position:fixed;top:64px;left:0;right:0;margin:0;flex-direction:column;align-items:stretch;
    gap:2px;background:#fffdf8;border-bottom:1px solid #e6e0d3;padding:10px 14px 16px;
    box-shadow:0 18px 30px rgba(20,30,28,.14);max-height:calc(100vh - 64px);overflow-y:auto;
    transform:translateY(-8px);opacity:0;visibility:hidden;transition:.18s}
  .mnav-toggle:checked~.mnav-links{transform:none;opacity:1;visibility:visible}
  .mnav-links>a,.nd>summary{padding:12px;font-size:.98rem;width:100%}
  .nd{position:static}
  .nd>summary::after{margin-left:auto}
  .nd-pop{position:static;box-shadow:none;border:none;border-radius:0;padding:2px 0 8px 14px;min-width:0}
  .mnav-toggle:checked~.mnav-burger span:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .mnav-toggle:checked~.mnav-burger span:nth-child(2){opacity:0}
  .mnav-toggle:checked~.mnav-burger span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
  .mnav-lang{margin-left:auto;margin-right:8px}
}

/* ─── 6. Paginador entre herramientas ────────────────────────────────────── */
.cdh-pager{display:flex;gap:14px;margin-top:36px}
.cdh-pager .pg{flex:1;background:var(--papel2);border:1px solid var(--linea);border-radius:14px;
  padding:13px 18px;text-decoration:none;color:var(--tinta);
  transition:border-color .15s,transform .15s,box-shadow .15s}
.cdh-pager .pg:hover{border-color:var(--verde);transform:translateY(-2px);
  box-shadow:0 8px 20px rgba(20,30,28,.08)}
.cdh-pager .pg.next{text-align:right}
.cdh-pager .pg span{display:block;font-size:.7rem;color:var(--gris);text-transform:uppercase;
  letter-spacing:.1em;font-weight:700}
.cdh-pager .pg b{font-family:Georgia,serif;font-size:.97rem;color:var(--verde-osc);font-weight:600}

/* ─── 7. Pie ─────────────────────────────────────────────────────────────── */
footer.cdh-foot{margin-top:0;border-top:1px solid var(--linea);background:var(--papel2)}
.cdh-foot-in{max-width:1020px;margin:0 auto;padding:30px 20px 36px;text-align:center;
  color:var(--gris);font-size:.83rem}
.cdh-foot-in .fb{font-family:Georgia,serif;font-weight:700;letter-spacing:.22em;
  text-transform:uppercase;font-size:.76rem;color:var(--tinta);margin-bottom:6px}

/* Contacto en el pie */
.foot-mail{display:inline-flex;align-items:center;gap:7px;margin:14px 0 0;font-size:.84rem;
  font-weight:600;text-decoration:none;color:var(--verde-osc);background:#F4EFE4;
  border:1px solid var(--linea);border-radius:100px;padding:8px 16px;
  transition:background .15s,border-color .15s}
.foot-mail:hover{background:#EDE4D3;border-color:var(--oro)}
.foot-mail svg{width:15px;height:15px;stroke:var(--oro);fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.cdh-foot-in .fine{font-size:.75rem;max-width:640px;margin:10px auto 0;opacity:.85}

/* ─── 8. Tablas con desplazamiento horizontal ────────────────────────────── */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* ─── 9. Botones de acción de cabecera (imprimir / compartir) ────────────── */
.hdr-actions{display:flex;gap:12px;flex-wrap:wrap}
.print-btn{display:inline-flex;align-items:center;gap:9px;text-decoration:none;font-weight:700;
  font-size:.86rem;background:var(--oro-claro);color:#2b1c04;border:none;border-radius:100px;
  padding:11px 20px;box-shadow:0 8px 20px rgba(4,28,55,.22);cursor:pointer;font-family:inherit;
  margin-top:16px;transition:transform .15s,box-shadow .15s}
.print-btn:hover{transform:translateY(-2px);box-shadow:0 12px 26px rgba(4,28,55,.3)}
.print-btn svg{width:17px;height:17px;stroke:#2b1c04;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.share-btn{display:inline-flex;align-items:center;gap:9px;text-decoration:none;font-weight:700;
  font-size:.86rem;background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.42);
  border-radius:100px;padding:11px 20px;cursor:pointer;font-family:inherit;margin-top:16px;
  transition:background .15s,transform .15s}
.share-btn:hover{background:rgba(255,255,255,.26);transform:translateY(-2px)}
.share-btn svg{width:17px;height:17px;stroke:#fff;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:none}

/* <label> que envuelve un <input type=file> y debe parecer un botón.
   Necesita sus propios estilos: el CSS de esas páginas usa el selector de tipo
   «button.ghost», que nunca aplica a un <label>. */
label.as-btn{display:inline-flex;align-items:center;cursor:pointer;
  border:1px solid var(--linea);background:#fff;color:var(--tinta);
  border-radius:8px;padding:8px 14px;font-size:.84rem;line-height:1.2;
  font-family:inherit;white-space:nowrap;transition:border-color .15s}
label.as-btn:hover{border-color:var(--cat)}
label.as-btn:focus-within{outline:2px solid var(--verde);outline-offset:2px}
@media print{label.as-btn{display:none}}

/* Aviso de copia de seguridad en las páginas que guardan trabajo del lector */
.backup-note{margin:14px 0 0;font-size:.8rem;color:var(--gris);
  border-left:3px solid var(--oro);padding:4px 0 4px 14px;max-width:640px}
@media print{.backup-note{display:none}}

/* Sello de última revisión fiscal */
.revbadge{display:inline-flex;align-items:center;gap:8px;margin-top:18px;font-size:.8rem;
  font-weight:700;color:#F2D9A0;background:rgba(217,168,84,.12);
  border:1px solid rgba(217,168,84,.4);border-radius:100px;padding:8px 16px}
.revbadge svg{width:16px;height:16px;stroke:#F2D9A0;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:none}

/* ─── 9b. Portada 3D y visor de muestra del libro ────────────────────────── */
.book-open{display:block;border:0;background:none;padding:0;cursor:zoom-in;position:relative}
.book3d{--bw:280px;width:var(--bw);perspective:1600px;margin-inline:auto;position:relative}
.book3d-in{position:relative;transform-style:preserve-3d;transform:rotateY(12deg);
  transition:transform .5s cubic-bezier(.2,.8,.2,1)}
.book-open:hover .book3d-in{transform:rotateY(6deg)}
.book3d-face{display:block;width:100%;height:auto;border-radius:3px 8px 8px 3px;position:relative;
  box-shadow:0 30px 60px rgba(4,28,55,.38),0 6px 14px rgba(4,28,55,.22)}
.book3d-spine{--bt:calc(var(--bw)*.075);position:absolute;left:0;top:0;bottom:0;width:var(--bt);
  transform-origin:left center;transform:rotateY(-90deg) translateX(calc(var(--bt) / -2));
  background:linear-gradient(90deg,#0a1b30,#152c48 45%,#0a1b30);border-radius:3px 0 0 3px}
.book3d-gutter{position:absolute;left:0;top:2%;bottom:2%;width:5%;
  background:linear-gradient(90deg,rgba(0,0,0,.35),transparent);pointer-events:none}
.book3d-gloss{position:absolute;inset:0;border-radius:3px 8px 8px 3px;pointer-events:none;
  background:linear-gradient(115deg,rgba(255,255,255,.22) 0%,rgba(255,255,255,0) 26%)}
.book3d-shade{position:absolute;left:5%;right:-2%;bottom:-15px;height:26px;pointer-events:none;
  background:radial-gradient(ellipse at 50% 0%,rgba(4,28,55,.35),transparent 72%);filter:blur(4px)}
.book-peek{position:absolute;left:50%;bottom:-30px;transform:translateX(-50%);white-space:nowrap;
  display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--linea);
  border-radius:100px;padding:9px 16px;font-size:.82rem;font-weight:700;color:var(--verde-osc);
  box-shadow:0 10px 26px rgba(4,28,55,.18);pointer-events:none}
.book-peek svg{width:15px;height:15px;stroke:var(--oro);fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
@media(prefers-reduced-motion:reduce){.book3d-in{transition:none}}
@media(max-width:900px){.book3d{--bw:220px}.book-peek{bottom:-38px;font-size:.72rem;padding:6px 12px}}

dialog.viewer{padding:0;border:0;background:transparent;max-width:100vw;max-height:100vh;
  width:100vw;height:100vh;overflow:hidden}
dialog.viewer::backdrop{background:rgba(4,10,20,.86)}
.viewer-in{display:flex;flex-direction:column;align-items:center;justify-content:center;
  width:100%;height:100%;padding:56px 70px 0;position:relative;gap:0}
.viewer-close{position:absolute;top:16px;right:16px;width:44px;height:44px;border-radius:50%;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.24);color:#fff;
  font-size:1.5rem;line-height:1;cursor:pointer;z-index:5;transition:background .15s}
.viewer-close:hover{background:rgba(255,255,255,.18)}
.viewer-nav{position:absolute;top:50%;transform:translateY(-50%);width:52px;height:52px;
  border-radius:50%;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.24);
  cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:5;
  transition:background .15s}
.viewer-nav:hover{background:rgba(255,255,255,.18)}
.viewer-nav:disabled{opacity:.25;cursor:default}
.viewer-nav:disabled:hover{background:rgba(255,255,255,.08)}
.viewer-nav svg{width:22px;height:22px;stroke:#fff;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.viewer-prev{left:16px}
.viewer-next{right:16px}
.viewer-stage{position:relative;flex:1;min-height:0;width:100%}
/* La imagen va en posición absoluta dentro del escenario: así «max-height:100%»
   se resuelve contra una altura definida. Con la imagen en el flujo normal el
   porcentaje quedaba indefinido y la página se salía de la pantalla. */
.viewer-stage img{position:absolute;inset:0;margin:auto;
  max-width:100%;max-height:100%;width:auto;height:auto;display:block;
  border-radius:4px;box-shadow:0 26px 60px rgba(0,0,0,.55)}
.viewer-bar{width:100%;max-width:640px;margin:20px auto 0;padding:18px 0 26px;
  display:flex;flex-direction:column;align-items:center;gap:14px;flex:none}
.viewer-caption{margin:0;text-align:center;color:#fff;font-size:1rem;font-weight:700}
.viewer-caption span{display:block;margin-top:3px;color:rgba(255,255,255,.6);
  font-size:.78rem;font-weight:500}
.viewer-thumbs{display:flex;gap:7px;flex-wrap:wrap;justify-content:center}
.viewer-thumbs button{width:34px;height:48px;padding:0;border-radius:3px;cursor:pointer;
  border:2px solid transparent;background-size:cover;background-position:center;
  opacity:.55;transition:opacity .15s,transform .15s,border-color .15s}
.viewer-thumbs button:hover{opacity:.85;transform:translateY(-2px)}
.viewer-thumbs button[aria-current="true"]{opacity:1;border-color:#D9A854;
  box-shadow:0 4px 12px rgba(0,0,0,.4)}
.viewer-cta{display:inline-flex;align-items:center;text-decoration:none;font-weight:700;
  font-size:.9rem;background:#D9A854;color:#2b1c04;border-radius:100px;padding:11px 26px;
  transition:transform .15s,background .15s}
.viewer-cta:hover{background:#E2B565;transform:translateY(-2px)}
@media(max-width:640px){
  .viewer-in{padding:70px 14px 0}
  .viewer-nav{width:42px;height:42px}
  .viewer-prev{left:4px}
  .viewer-next{right:4px}
  .viewer-thumbs{display:none}
}
@media print{dialog.viewer,.book-peek{display:none!important}}

/* ─── 10. Impresión ─────────────────────────────────────────────────────── */
@page{margin:14mm 12mm}
@media print{
  .mnav,.cdh-pager,footer.cdh-foot,.print-btn,.share-btn,.mnav-lang,a.back{display:none!important}
  body{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  /* cabecera navy → papel blanco legible, aunque no se impriman los fondos */
  header{background:#fff!important}
  header::before{display:none!important}
  header .eyebrow,header h1,header p{color:#000!important;opacity:1!important}
  .revbadge{background:#fff!important;border:1.5px solid #000!important;color:#000!important}
  .revbadge svg{stroke:#000!important}
  /* que nada se salga del papel */
  .wrap{max-width:100%!important;width:100%!important}
  table{width:100%!important;min-width:0!important}
  .table-scroll{overflow:visible!important}
  img,svg,canvas{max-width:100%!important}
  /* que las tarjetas no se partan entre páginas */
  .card,.branch,.ibox,.panel,section,.stat,.week,.book,.post,.basebox,.ynbox,.dbox,
  .box,.keybox,.notesbox,.livetool{break-inside:avoid;page-break-inside:avoid}
  tr{page-break-inside:avoid}
  h1,h2,h3{page-break-after:avoid;break-after:avoid}
}

/* ─── 11. Fecha de revisión en herramientas (meta-revisado) ─────────────── */
.meta-revisado{margin:0 0 20px;padding:0;font-size:.75rem;color:var(--gris);
  letter-spacing:.05em;text-transform:uppercase;font-weight:600}

/* ─── 12. Modo oscuro (prefers-color-scheme) ─────────────────────────────
   Alcance deliberado: recolorea el fondo de página, tarjetas neutras,
   formularios y nav/menú — todo lo que usa los tokens --papel/--papel2/
   --linea/--gris/--tinta, que se propaga solo. La cabecera (siempre navy)
   y el pie (siempre navy, en base.css) no cambian: ya son "oscuros" en
   los dos modos, es la marca.
   Decisión consciente: las tarjetas de resultado con fondo pastel
   (.kpi, .stat, .verdict, .pill, botones .seg) se DEJAN en claro. Cada
   herramienta tiene su propia paleta de pasteles hardcodeada en su
   <style>; invertir 20 paletas distintas sin ver el resultado real es
   el tipo de cambio que rompe contraste en silencio. Quedan como
   "tarjetas de papel" sobre fondo oscuro — patrón habitual y sin riesgo.
   Los controles nativos (checkbox, select, scrollbar) se tiñen solos
   vía color-scheme, sin tocar su CSS. */
@media (prefers-color-scheme: dark){
  /* !important en cada variable: base.css define --papel/--linea/--gris/
     --tinta/--oro-claro también (para SU paleta, la de index/herramientas),
     y como base.css se carga DESPUÉS de este archivo en estas 32 páginas,
     su :root sin media-query ganaba por orden de cascada y anulaba estos
     valores en silencio — el bug real por el que el texto salía oscuro
     sobre fondo oscuro. Con !important gana esta declaración sí o sí. */
  :root{
    color-scheme: dark;
    --papel:#0E1B2E !important; --papel2:#152538 !important; --linea:#243247 !important;
    --gris:#9AA7B8 !important; --tinta:#E8EDF4 !important; --oro-claro:#E0B466 !important;
  }
  /* Dentro de <main> el acento de categoría (--cat-dark) estaba pensado
     como texto oscuro sobre papel claro (p.ej. #07523F). Sobre fondo
     oscuro eso es texto oscuro sobre fondo oscuro. Se relee la MISMA
     variable de categoría (--cat) pero aclarada, en vez de tocar a mano
     las 18 paletas: una sola línea arregla las 18 herramientas a la vez. */
  main{--verde-osc: color-mix(in srgb, var(--cat) 100%, white 32%)}

  /* Contenedores neutros hardcodeados en el <style> de cada herramienta
     (no usan var(), así que no heredan el cambio de --papel2 solos) */
  .grp,.controls .f input,input[type=number],input[type=text],
  input[type=email],input[type=password],select,textarea{
    background:var(--papel2)!important;color:var(--tinta)!important;
    border-color:var(--linea)!important
  }
  input[type=number]:focus,input[type=text]:focus{
    outline-color:var(--cat,var(--verde))!important
  }
  ::placeholder{color:var(--gris);opacity:.8}

  table{color:var(--tinta)}
  th,td{border-color:var(--linea)!important}

  /* Nav superior: en base.css es un panel translúcido claro con blur.
     Solo se sobrescribe aquí (con !important) porque tokens-herramientas.css
     carga antes que base.css en estas 32 páginas — así el cambio no
     alcanza a index.html ni a /herramientas, que no cargan este archivo. */
  .gf-nav{background:rgba(14,27,44,.86)!important;border-bottom-color:rgba(255,255,255,.09)!important}
  .gf-brand{color:#fff!important}
  .gf-brand-txt{border-bottom-color:var(--oro-claro)!important}
  .gf-nav-links>a,.gf-drop>summary{color:#C3CEDB!important}
  .gf-nav-links>a:hover,.gf-drop>summary:hover{background:rgba(255,255,255,.08)!important;color:#fff!important}
  .gf-nav-links>a[aria-current="page"]{background:rgba(255,255,255,.1)!important;color:#fff!important}
  .gf-nav-burger{background:rgba(255,255,255,.08)!important;border-color:rgba(255,255,255,.2)!important}
  .gf-nav-burger i{background:#fff!important}
  .gf-lang{background:rgba(255,255,255,.08)!important;border-color:rgba(255,255,255,.2)!important;color:#fff!important}
  .gf-pop{background:#12233A!important;border-color:rgba(255,255,255,.12)!important;box-shadow:0 18px 44px rgba(0,0,0,.5)!important}
  .gf-pop a{color:#E8EDF4!important}
  .gf-pop a:hover{background:rgba(255,255,255,.06)!important}
  .gf-pop small{color:#8A97A8!important}
  .gf-tipo{background:rgba(224,180,102,.18)!important;border-color:rgba(224,180,102,.4)!important;color:#F2D9A0!important}
  /* "Página actual" dentro del desplegable: usa --oro-pastel (crema fijo,
     sin dark mode) de base.css; el texto ya está en claro por el fix de
     arriba (.gf-pop a), así que quedaba texto claro sobre crema —
     ilegible. Aquí se convierte en un realce dorado translúcido, en vez
     de un bloque crema sólido. */
  .gf-pop a[aria-current="page"]{background:rgba(224,180,102,.16)!important;color:var(--oro-claro)!important}

  /* paginador entre herramientas: ya usa tokens, solo el hover necesita repaso */
  .cdh-pager .pg:hover{box-shadow:0 8px 20px rgba(0,0,0,.35)}

  /* "Herramientas relacionadas" (8 páginas): su <h2> usa var(--verde-osc),
     que SÍ se aclara en modo oscuro pero solo dentro de <main> (regla
     "main{--verde-osc:color-mix(...)}" más abajo en este archivo). Esta
     sección vive fuera de <main>, entre </main> y <footer>, así que
     hereda el valor de :root sin aclarar (#041C37, casi negro) — título
     invisible sobre fondo ya oscuro. Las tarjetas de abajo (.related-tool-card)
     ya usan var(--papel2)/var(--tinta) directamente y no tienen este problema. */
  .related-tools h2{color:var(--tinta)!important}

  ::selection{background:color-mix(in srgb, var(--cat,var(--verde)), transparent 70%)}

  /* Cajas de resultado: cada herramienta fija su propio fondo claro en el
     <style> de la página —blanco o un pastel semántico (verde=ganancia,
     azul=real, dorado=aviso)—, sin var(), así que quedan como recuadros
     claros flotando sobre fondo oscuro: el mismo bug que .faq, repetido
     en 13 componentes por 20 páginas (no todas usan todos). Se relee
     aquí con !important en vez de tocar cada hex; el matiz semántico de
     cada variante pasa al borde, no al fondo. Los colores de texto
     propios de cada herramienta (--merc, --tuyo, --idx…) se resuelven
     aparte, uno por archivo, más abajo en su <style>. */
  .kpi,.stat,.cruce,.fuente,.seccard,.aviso,.aviso-fiscal,.avisoRiesgo,.warn,.quote,
  .gitem,.verdict,.gpsbox,.breakeven,.mito,.duelo-col,.fase,.scenario-banner,
  .seg button,.pill,.aparte,.sinafiliacion,.veredicto,
  .faq,.cta-card,.addrow,.del,.frow{
    background:var(--papel2)!important;
  }
  /* Botón "eliminar fila" (tabla de rebalanceo): fondo ya cubierto arriba,
     pero su texto rojizo fijo #9a5b5b se apaga sobre papel oscuro — mismo
     aclarado que ya se probó a mano en calculadora-rebalanceo.html. */
  .del{color:#CA9191!important}
  /* Segunda ronda: componentes que se me habían escapado (botones de
     escenario "en reposo", pastillas .pill, notas .aparte/.sinafiliacion,
     .veredicto) — mismo bug, mismo fix. El texto de estos ya usa var()
     propia de cada herramienta (--barato, --ok, --exito…), aclarada más
     abajo por archivo; aquí solo el fondo. */
  .seg button{color:var(--tinta)!important;border-color:var(--linea)!important}
  .aparte{color:var(--gris)!important;border-color:rgba(224,180,102,.35)!important}
  .aparte b{color:var(--oro-claro)!important}
  .sinafiliacion{border-color:var(--linea)!important}
  .veredicto{border-color:var(--linea)!important}
  .cruce,.fuente,.aviso,.aviso-fiscal,.avisoRiesgo,.warn,.quote,
  .gitem,.verdict,.gpsbox,.breakeven,.mito,.duelo-col,.fase{
    border-color:var(--linea)!important;
  }
  .cruce p,.fuente p,.gitem p,.verdict p,.gpsbox p,.breakeven p,.fase p,.mito p,
  .warn,.quote{
    color:var(--gris)!important;
  }
  /* Avisos color dorado (fondo+texto+borde+icono a juego): se conservan
     como "nota destacada" pero con el dorado ya adaptado a modo oscuro. */
  .aviso,.aviso-fiscal,.scenario-banner{
    color:var(--gris)!important;border-color:rgba(224,180,102,.4)!important;
  }
  .aviso a,.aviso-fiscal .ft-k,.scenario-banner{color:var(--oro-claro)!important}
  .aviso-fiscal svg,.scenario-banner svg{stroke:var(--oro-claro)!important}
  /* Un hijo con su propio color: explícito gana siempre a la herencia del
     padre, aunque el padre lleve !important — .aviso b/.aviso p ponen su
     propio #5A3D06 y el fix de arriba no les llega. Van aparte. */
  .aviso b,.aviso p,.aviso-fiscal b,.aviso-fiscal p{color:var(--gris)!important}
  /* Aviso verde "sin afiliación": mismo patrón, texto propio en vez de dorado */
  .sinafiliacion{color:var(--gris)!important}
  /* Aviso de riesgo, en rojo en vez de dorado */
  .avisoRiesgo{border-color:rgba(232,121,115,.4)!important;color:var(--gris)!important}
  .avisoRiesgo svg{stroke:#E87973!important}
  .avisoRiesgo b{color:#E87973!important}

  /* Barra fija "Compra el libro" (definida en base.css, sin dark mode
     propio): fondo casi blanco translúcido fijo + texto var(--tinta), que
     en oscuro se vuelve claro sobre claro — invisible. */
  .gf-barra-compra{background:rgba(21,37,56,.94)!important}
  .gf-barra-compra-t b{color:var(--tinta)!important}
}

/* ─── 13. Puente entre calculadoras ──────────────────────────────────────
   Enlaza el resultado de una herramienta como punto de partida de otra.
   El valor se lee del DOM en el momento del clic (cdhPuente, en el JS
   compartido), nunca al cargar la página: así siempre lleva el número
   que el lector tiene delante, con los ajustes que haya hecho él mismo.
   El destino no necesita nada nuevo: reutiliza el mismo parámetro de la
   query string que ya usa su propio botón "Compartir". */
.puente{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  margin-top:18px;padding:16px 20px;border-radius:14px;cursor:pointer;
  background:color-mix(in srgb, var(--cat) 8%, var(--papel2));
  border:1px solid color-mix(in srgb, var(--cat) 32%, var(--linea));
  text-decoration:none;color:var(--tinta);transition:transform .15s,box-shadow .15s}
.puente:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(20,30,46,.12)}
.puente-tx{font-size:.88rem;line-height:1.4}
.puente-tx b{display:block;font-family:var(--f-display);font-size:.98rem;margin-bottom:2px;color:var(--cat)}
.puente-ir{flex:none;display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:.86rem;
  color:var(--cat);white-space:nowrap}
.puente-ir svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.3;transition:transform .15s}
.puente:hover .puente-ir svg{transform:translateX(3px)}
@media print{.puente{display:none!important}}
