/* =========================================================
   PEQUEÑA GRAN INTERNA — sistema de diseño compartido
   ========================================================= */

/* ---------- tokens ---------- */
:root{
  /* --- Lienzo y Superficies limpias (Slate-50 / Blanco / Slate-100) --- */
  --bg:#F8FAFC; --surface:#FFFFFF; --surface-2:#F1F5F9;
  --ink:#0F172A; --muted:#475569; --faint:#526075;
  --line:#E2E8F0; --line-strong:#CBD5E1; --zebra:#F8FAFC;

  /* --- Acento interactivo clínico (Sky Blue) --- */
  --accent:#0284C7; --accent-soft:#F0F9FF; --accent-ink:#0369A1;

  /* --- Semántica y feedback clínico --- */
  --crit:#DC2626; --crit-soft:#FEF2F2; --crit-ink:#991B1B;
  --pearl:#D97706; --pearl-soft:#FFFBEB; --mnemo:#059669; --mnemo-soft:#ECFDF5;
  --tangelo:#EA580C; --tangelo-soft:#FFF7ED;
  --verify:#92400E; --verify-soft:#FFFBEB;
  --pearl-ink:#92400E; --tangelo-ink:#9A3412; --mnemo-ink:#065F46;

  /* --- Alias de compatibilidad y normalización --- */
  --border:var(--line); --border-dark:var(--line-strong);
  --text:var(--ink); --text-muted:var(--muted);
  --pri:var(--accent); --pri-light:var(--accent-soft);
  --green:var(--mnemo); --green-light:var(--mnemo-soft); --green-dark:var(--mnemo-ink);
  --red:var(--crit); --red-light:var(--crit-soft); --red-dark:var(--crit-ink);
  --bg-hover:var(--surface-2);

  /* --- Escala de elevación orgánica (sombras sutiles de baja opacidad) --- */
  --shadow-1:0 1px 3px 0 rgba(0,0,0,.05),0 1px 2px -1px rgba(0,0,0,.05);
  --shadow-2:0 4px 6px -1px rgba(0,0,0,.06),0 2px 4px -2px rgba(0,0,0,.05);
  --shadow-3:0 10px 15px -3px rgba(0,0,0,.08),0 4px 6px -4px rgba(0,0,0,.04);
  --shadow-3-side:4px 0 12px 0 rgba(0,0,0,.06);
  --appbar-h:58px;
  --shadow:var(--shadow-2);   /* alias de compatibilidad — NO borrar */

  /* --display para títulos, --read para prosa de ficha, --sans para la interfaz.
     Antes --sans hacía de cuerpo Y de interfaz; ahora son roles separados. */
  --display:'Fraunces','Spectral',Georgia,'Times New Roman',serif;
  --read:'Newsreader','Spectral',Georgia,'Times New Roman',serif;
  --serif:var(--display);    /* alias: 28 reglas apuntan acá y todas son títulos */
  --sans:'Public Sans','IBM Plex Sans',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,Menlo,Consolas,monospace;

  /* --- escalas del sistema ---
     La hoja había acumulado 14 radios y 19 tamaños de letra distintos sin
     criterio. Estas escalas son la referencia para la superficie de lectura
     (fichas, tablas, tarjetas, callouts). Los widgets y textos dentro de SVG
     mantienen sus tamaños propios: ahí manda la geometría, no la tipografía. */
  /* El esquema lo manda el tema de la página, NO el del sistema operativo.
     Con <meta name="color-scheme" content="light dark"> el navegador pintaba
     las barras de scroll según Windows: en modo oscuro salían negras aunque la
     página estuviera en claro. Acá van atadas a data-theme y del color del fondo. */
  color-scheme:light;
  scrollbar-color:var(--line-strong) transparent;

  --r-xs:6px; --r-sm:9px; --r-md:12px; --r-lg:14px; --r-pill:20px;
  --fs-h1:2rem;       /* 32px bold - títulos principales */
  --fs-h2:1.5rem;     /* 24px semibold - secciones       */
  --fs-h3:1.25rem;    /* 20px medium - subsecciones      */
  --fs-micro:11px;    /* teclas, rótulos diminutos       */
  --fs-tag:12px;      /* eyebrow, etiquetas, epígrafes   */
  --fs-meta:13.5px;   /* citas, metadatos, secundario    */
  --fs-card:14.5px;   /* tablas, callouts, tarjetas      */
  --fs-body:16px;     /* prosa de lectura                */
  --pad-card:20px 24px;

  /* ---- colores que NO siguen al tema, y es a propósito ----
     Los de acá abajo van encima de una imagen —una radiografía, un esquema
     con relleno propio—, no encima del papel de la página. Cambiarlos con el
     tema los rompería: un pin oscuro sobre un pulmón negro no se ve, sea cual
     sea el tema del resto.

     Que no cambien no es razón para dejarlos sueltos. Estaban repetidos entre
     la hoja y el HTML de las fichas —#FF5B5B aparecía cinco veces en el CSS
     y una sexta a mano en el pie de rx-torax—, y ahí el riesgo no es el modo
     oscuro sino la deriva: se retoca el pin y la leyenda queda mintiendo. */

  /* atlas radiográfico (.fig-rx): rojo = el signo clave, amarillo = lo que
     lo acompaña. El par se repite en el aro del SVG, en el pin y en la clave. */
  --rx-clave:#FF5B5B;   --rx-clave-borde:#2A0000;
  --rx-dato:#FFC53D;
  --rx-tinta:#151515;   /* texto sobre el amarillo: 11,7:1 */
  --rx-info:#E7E0CF;    /* pin neutro, para lo que no es hallazgo */
  --rx-marco:#000;      /* borde de la placa */
  --rx-negatoscopio:#0C0C0C;  /* el fondo sobre el que se monta la placa */
  --rx-papel:#FBF7EF;   /* fondo de las láminas de Servier (PNG transparente) */

  /* mapa coronario del SCA: el azul del cambio especular. Vive en el SVG, en
     el radio de la derivación y en la muestra de la leyenda. */
  --sca-espejo:#4F80B3; --sca-espejo-borde:#38618C;

  /* mapa arterial del ACV */
  --acv-vaso:#C56A63;   --acv-trombo:#241813;

  /* depósitos glomerulares: el sitio del depósito ES el diagnóstico, así que
     el color del esquema y el de la leyenda tienen que ser el mismo. Estaban
     escritos dos veces cada uno —una en el <g> del SVG y otra a mano en el
     renglón de la leyenda— y nada ataba los dos. */
  --dep-subepitelial:#E0872E;
  --dep-intramembranoso:#C0392B;
  --dep-subendotelial:#8E6FC4;
  --dep-mesangial:#3E9B7E;

  /* ---- SNC — escena de las vías (D-05, Fase 3). El bloque oscuro (más abajo)
     es el piloto verbatim (D-04: «el piloto es el oscuro»); este bloque claro
     es el trabajo nuevo de 03-UI-SPEC § Color, piloteado y capturado antes de
     fijarse. Paleta interna de un «dibujo dentro de una tarjeta» — no sigue el
     60/30/10 de la página. */
  --snc-lienzo:#F1E9D6; --snc-vineta:#F6F0DE; --snc-sust-blanca:#EAE0C4; --snc-sust-gris:#DDCEA9; --snc-sust-gris-hi:#D2C097;
  --snc-capsula:#E4D8B8; --snc-linea:#846E50; --snc-linea-suave:#B4A17E; --snc-ventriculo:#3A2A1C;
  --snc-rotulo:#382219; --snc-rotulo-2:#6F5C4F;
  --snc-via-motor:#B81643; --snc-via-stt:#08677A; --snc-via-dc:#2A46B8; --snc-via-trigem:#7C5F0F;
  --snc-pulso:#FFFFFF; --snc-musculo:#241320; --snc-musculo-linea:#7A4254; --snc-receptor-base:#55657F;
  --snc-guia-nombre:#33425E; --snc-tip-fondo:#FBF7EA; --snc-btn-texto:#FBF7EA;
  /* -ink claras iguales a su base (03-UI-SPEC § Color ya midió estos pares: el
     texto claro sobre --surface-2 usa el color saturado/oscuro de vía tal cual,
     sin variante aparte). */
  --snc-via-motor-ink:#B81643; --snc-via-stt-ink:#08677A; --snc-via-dc-ink:#2A46B8; --snc-via-trigem-ink:#7C5F0F;

  /* ---- SNC 3D — escena del bulbo en Three.js (D-05, Fase 4, plan 04-03).
     PUNTO DE PARTIDA DEL PILOTO, no contrato: se congelan cuando el usuario
     mire las nueve capturas de 04-UI-SPEC.md § Piloto — mismo criterio que
     Fase 3 usó para su variante clara. Three.js los lee en runtime con
     getComputedStyle (colorDeToken/numeroDeToken en snc-3d.js) — nunca un hex
     adentro de snc-3d.js (04-UI-SPEC.md § No hay hex en el código). */
  --snc-3d-tejido:#C9A894; --snc-3d-tejido-prof:#9C5C52; --snc-3d-corte:#E6D2BE;
  --snc-3d-gris:#8E7A86; --snc-3d-blanca:#E8DCC8; --snc-3d-difuso:#A8929C;
  /* --snc-3d-sel: violeta a propósito — es el único hue libre en la escena:
     carmín, cian, azul y oliva ya son de las cuatro vías (--snc-via-*). */
  --snc-3d-sel:#6B2FA8;
  /* --snc-3d-arteria: bermellón/naranja, NUNCA carmín — --snc-via-motor ya es
     carmín en los dos temas, y dos rojos en la misma escena es la confusión
     más cara posible («¿esto es la vía motora o la PICA?»). */
  --snc-3d-arteria:#C24A16; --snc-3d-arteria-2:#D9793F;
  --snc-3d-key:#FFF6E6;
  /* --snc-3d-rim/-rim-int: la luz de borde es ASIMÉTRICA entre temas a
     propósito, no el mismo recurso con otro número. Acá (claro) el fondo es
     crema y el tejido ya es más oscuro que él: una luz de borde brillante
     BORRARÍA la silueta en vez de levantarla, así que el borde se oscurece
     (rim-int baja a 0.22) y la separación la hace la oclusión de contacto
     (SSAO) en el contorno. Ver el par oscuro más abajo — ahí el efecto es el
     opuesto porque el fondo es casi negro. */
  --snc-3d-rim:#6B4A33; --snc-3d-rim-int:0.22;
  --snc-3d-amb-int:0.85;

  /* --ease-snc, --fs-snc-h1 y --fs-snc-h2 son de ESTA herramienta y NO tokens
     globales: promoverlos retemporizaría/reescalaría 130+ fichas existentes
     que no piden nada de esto. Sólo declarados en :root — no cambian con el tema. */
  --ease-snc:cubic-bezier(0.25, 1, 0.5, 1); --fs-snc-h1:26px; --fs-snc-h2:17px;
}
html[data-theme="dark"]{
  color-scheme:dark;
  --bg:#2B1C15; --surface:#352419; --surface-2:#3E2C1F;
  /* --faint subió de #8C7A65 a #A08D78: daba 3,59 contra --surface. Ahora 4,64. */
  --ink:#F3EAD3; --muted:#BBA890; --faint:#A08D78;
  --line:#453524; --line-strong:#56432F; --zebra:#31221A;
  --accent:#7FA998; --accent-soft:#283530; --accent-ink:#A6C8BA;
  --crit:#A8222D; --crit-soft:#3A211E; --crit-ink:#E68C88;
  --pearl:#D2A551; --pearl-soft:#332715; --mnemo:#93BBAC; --mnemo-soft:#243029;
  --tangelo:#FE8A24; --tangelo-soft:#3A2A18;
  --verify:#D2A551; --verify-soft:#332715;
  /* En oscuro el pearl y el tangelo ya pasan AA como texto (6,41 y 5,82),
     así que la variante tintada es el mismo color. */
  --pearl-ink:#D2A551; --tangelo-ink:#FE8A24; --mnemo-ink:#93BBAC;
  --shadow-1:0 1px 2px rgba(0,0,0,.28),0 2px 6px rgba(0,0,0,.24);
  --shadow-2:0 1px 2px rgba(0,0,0,.34),0 8px 24px rgba(0,0,0,.32);
  --shadow-3:0 2px 8px rgba(0,0,0,.44),0 20px 56px rgba(0,0,0,.50);
  --shadow-3-side:2px 0 8px rgba(0,0,0,.44),20px 0 56px rgba(0,0,0,.50);
  --shadow:var(--shadow-2);

  /* ---- SNC — escena de las vías (D-05, Fase 3). Verbatim del piloto oscuro
     aprobado (D-04, PROH-03-08): no se retoca ni un valor de acá. */
  --snc-lienzo:#060A13; --snc-vineta:#0C1424; --snc-sust-blanca:#0F192B; --snc-sust-gris:#18243B; --snc-sust-gris-hi:#1F2D48;
  --snc-capsula:#142139; --snc-linea:#5A6E92; --snc-linea-suave:#26344D; --snc-ventriculo:#04070D;
  --snc-rotulo:#C8D3E4; --snc-rotulo-2:#8391AA;
  --snc-via-motor:#FF3B6B; --snc-via-stt:#22D3EE; --snc-via-dc:#6D8DFF; --snc-via-trigem:#E8B23D;
  --snc-pulso:#FFFFFF; --snc-musculo:#241320; --snc-musculo-linea:#7A4254; --snc-receptor-base:#55657F;
  --snc-guia-nombre:#33425E; --snc-tip-fondo:#080D18; --snc-btn-texto:#050810;
  /* -ink oscuras: el panel oscuro del SITIO (--surface-2 #3E2C1F) es más claro
     que el del piloto (#0E1729), así que un neón como texto de 11px puede no
     llegar a 4,5:1 ahí. Se sube SOLO la luminosidad (mismo tono/hue) hasta
     pasar contra --surface-2 y --surface, medido con build/contraste.js — los
     TRAZOS de la escena (vías, halo) siguen usando el token base --snc-via-*,
     sin tocar. */
  --snc-via-motor-ink:#FF5F86;  /* 4.56:1 vs --surface-2, 5.10:1 vs --surface (base FF3B6B daba 3.84/4.30) */
  --snc-via-stt-ink:#22D3EE;    /* igual a la base: ya da 7.33:1 vs --surface-2 */
  --snc-via-dc-ink:#7291FF;     /* 4.55:1 vs --surface-2, 5.09:1 vs --surface (base 6D8DFF daba 4.36/4.87) */
  --snc-via-trigem-ink:#E8B23D; /* igual a la base: ya da 6.86:1 vs --surface-2 */

  /* ---- SNC 3D — mismo bloque que :root, valores de oscuro (plan 04-03).
     rim/rim-int: acá el fondo es casi negro (--snc-lienzo #060A13): una luz
     fría y brillante en el borde SÍ despega la silueta — es el recurso
     CONTRARIO al de claro, no el mismo recurso con otro número (04-UI-SPEC.md
     § Tema oscuro: «Three.js no recomputa un var() solo», por eso snc-3d.js
     necesita repintarTokens() en cada cambio de data-theme). */
  --snc-3d-tejido:#B9836F; --snc-3d-tejido-prof:#8A3A34; --snc-3d-corte:#D8A891;
  --snc-3d-gris:#9E8AA6; --snc-3d-blanca:#E6D8C6; --snc-3d-difuso:#7D6C86;
  --snc-3d-sel:#C79BFF;
  --snc-3d-arteria:#FF7A3C; --snc-3d-arteria-2:#FFB183;
  --snc-3d-key:#FFEFD8;
  --snc-3d-rim:#9CC4FF; --snc-3d-rim-int:0.95;
  --snc-3d-amb-int:0.55;
}

/* ---------- reset + base ---------- */
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;scrollbar-gutter:stable;scrollbar-width:thin;}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-size:15.5px;line-height:1.65;-webkit-font-smoothing:antialiased;}
/* Foco de teclado por defecto. Cubre los ~2.441 enfocables que no tenian regla
   propia (links del cajon, tarjetas del inicio, grupos plegables, botones de
   widget, campos). Usa --accent-ink y no --accent: en tema claro el acento da
   2,12 contra el fondo y WCAG 2.2 pide 3:1 para un indicador no textual.
   Va temprano a proposito: las reglas especificas (.sabd, .lung-pt, .foco,
   .valv, .ez) y .art le ganan, y conservan su tratamiento propio sobre SVG. */
:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px;}
/* La prosa de las fichas va en --read (Newsreader, hecha para leer largo en
   pantalla); la interfaz se queda en --sans. Los rótulos utilitarios que viven
   DENTRO de una ficha vuelven a --sans más abajo, cada uno en su regla. */
.view p,.view li,.view dd,.view td,.view blockquote{font-family:var(--read);}
.view table{font-variant-numeric:tabular-nums;}
/* Excepción: la cita de canon es un rótulo utilitario, no prosa, y va en --sans
   (decisión 3.4). Como es un <p>, la regla de arriba (0,1,1) le gana a un `.cite`
   pelado (0,1,0): hace falta el selector doble para devolverla a la interfaz. */
.view p.cite{font-family:var(--sans);}
/* Atenuador inline. Se usa 6 veces en index.html y no tenía ninguna regla: los
   <span class="muted"> venían renderizando como texto normal. */
.muted{color:var(--muted);}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}

