/* ============================================================================
   MOD-275 · TIPOGRAFÍA · los interruptores
   ----------------------------------------------------------------------------
   La familia se cambia sola: casi toda la app usa `var(--font)` y el módulo
   reescribe esa variable. Lo que NO se puede cambiar con una variable son las
   mayúsculas y el grosor, porque están declarados regla por regla — 333 veces
   `text-transform:uppercase` y 2.485 `font-weight`. Este archivo es el
   interruptor para esas dos cosas.

   POR QUÉ HAY `!important` AQUÍ, Y SÓLO AQUÍ:
   No hay otra forma de vencer 333 reglas específicas sin editarlas una por una
   —y editarlas sería irreversible—. Cada bloque de abajo está atado a un
   atributo de `<html>` que sólo existe cuando el usuario lo enciende: en el
   estado de fábrica (`data-mayus="si"`, `data-peso="normal"`) NINGUNA de estas
   reglas hace nada. Se puede volver atrás con un clic.

   NO SE TOCAN, a propósito:
     · `#mo-tipo`  el propio panel, que ya escribe sus tamaños a mano
     · `#login-screen` y el arranque, fuera del sistema de temas por decisión previa
     · `.warexpdf`, `.pdf-page` y demás lienzos de PDF: usan Helvetica local para
       no depender de una webfont que quizá no cargó cuando html2canvas dispara
     · los iconos (`.fa`, `.fas`, `.far`, `.fab`) — no son texto
   ========================================================================== */

/* ── MINÚSCULAS ───────────────────────────────────────────────────────────
   `body{text-transform:uppercase}` (app.css:239) manda sobre toda la app y ya
   tiene 822 excepciones escritas en contra. Esto la apaga de raíz, junto con
   las reglas puntuales que la repiten. */
html[data-mayus="no"] body,
html[data-mayus="no"] body *:not(.fa):not(.fas):not(.far):not(.fab):not(i) {
    text-transform: none !important;
}
/* El espaciado extra existe porque las mayúsculas lo necesitan. En minúsculas
   sobra y hace el texto más difícil de leer, no más. */
html[data-mayus="no"][data-espaciado="normal"] body,
html[data-mayus="no"][data-espaciado="normal"] body * {
    letter-spacing: normal !important;
}
/* Salvo donde el espaciado ES el diseño: etiquetas diminutas de sección. */
html[data-mayus="no"] .tp-sec,
html[data-mayus="no"] .colhead,
html[data-mayus="no"] thead th {
    letter-spacing: .06em !important;
}

/* ── ESPACIADO ────────────────────────────────────────────────────────────── */
html[data-espaciado="compacto"] body { letter-spacing: 0 !important; }
html[data-espaciado="amplio"]   body { letter-spacing: .06em; }

/* ── GROSOR LIGERO ────────────────────────────────────────────────────────
   El 77% del texto va en 700 o más. Aquí el cuerpo baja a 450 y la jerarquía
   se CONSERVA: los títulos y las negritas siguen por encima. No se aplana todo
   al mismo peso, que sería peor que el problema. */
html[data-peso="ligero"] body :is(td, span, div, p, li, label, small, input, select, textarea, button, a) {
    font-weight: 450 !important;
}
html[data-peso="ligero"] body :is(h1, h2, h3, h4, h5, b, strong, th, .pdb-nm, .card .t) {
    font-weight: 600 !important;
}
/* Las cifras grandes de los tableros pierden presencia si se adelgazan. */
html[data-peso="ligero"] body :is(.stat-v, .kpi .n, .pbox .n, .pdb-pct, .tp-prev .h) {
    font-weight: 600 !important;
}
/* El panel de tipografía se queda como está: es el espejo donde se compara. */
html[data-peso="ligero"] #mo-tipo * { font-weight: revert !important; }
html[data-mayus="no"] #mo-tipo *   { text-transform: none !important; }

/* ── Lo que NUNCA cambia ──────────────────────────────────────────────────
   El login y el arranque ya se blindan solos con `!important` en
   `273-arranque.css`. Los lienzos de PDF se declaran aquí explícitamente para
   que ningún interruptor futuro los alcance por accidente. */
.warexpdf, .warexpdf *,
.pdf-page, .pdf-page *,
#fw-pdf-caja, #fw-pdf-caja * {
    font-family: Helvetica, Arial, sans-serif !important;
}
