/* ============================================================================
   Cumplo1000 — Base
   ----------------------------------------------------------------------------
   Regla que gobierna este archivo:

     base.css solo puede contener declaraciones cuyo VALOR COMPUTADO ya es
     idéntico en las 7 páginas, más el background del body vía --page-bg.

   Si una declaración difiere aunque sea en una página, se queda en el <style>
   local de cada una. La lista de exclusiones del final es parte del contrato:
   explica por qué algo que "parece base" no está acá.

   Carga en las 7 páginas, después de tokens.css. Ver ARQUITECTURA.md §1c.
   ========================================================================= */

/* Las 7 páginas ya declaraban box-sizing: border-box.
   OJO: el `margin: 0; padding: 0` del reset NO sube acá. El index depende de
   los márgenes por defecto del user agent para sus <p> y <ul> sin clase; su
   reset local es solo `* { box-sizing }`. Mandar el superset le borraría esos
   márgenes. Cada familia mantiene su propio reset de margin/padding. */
* { box-sizing: border-box; }

/* index y las 4 páginas públicas ya lo tenían. En admin y solicitar-acceso los
   hash son de routing (#/inicio) y no matchean ningún id, así que es inerte. */
html { scroll-behavior: smooth; }

body {
  /* El index lo declaraba explícito; el resto lo heredaba de su `* { margin:0 }`.
     Mismo valor computado en las 7. */
  margin: 0;
  font-family: var(--font-family);
  /* index y admin resolvían var(--gray-1000); las públicas tenían el literal
     rgb(31,41,55). Es el mismo color. */
  color: var(--text-primary);
  /* Única indirección del archivo: index y registro-sii sobreescriben
     --page-bg a blanco en su :root local. */
  background: var(--page-bg);
}

a { color: inherit; text-decoration: none; }

/* Necesita !important: tiene que ganarle a un display:flex/block declarado en
   el mismo elemento. Es la única excepción a la regla de "cero !important en
   los archivos compartidos". index y admin ya lo escribían así; las otras 5
   páginas no usan el atributo hidden, así que ahí es inerte. */
[hidden] { display: none !important; }

/* ----------------------------------------------------------------------------
   Accesibilidad
   Hasta ahora estas 3 reglas existían solo en el index. Se globalizan a
   propósito: el anillo de foco solo aparece navegando por teclado, y admin y
   los formularios son justo donde más se agradece.
   ------------------------------------------------------------------------- */
:focus-visible {
  outline: 3px solid var(--purple-800);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Los headers son sticky: sin esto las secciones quedan tapadas al llegar por
   ancla. */
:target,
section[id],
main[id] { scroll-margin-top: 84px; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001s !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001s !important;
  }
}

/* ----------------------------------------------------------------------------
   Excluido a propósito (esta lista importa tanto como lo de arriba)

   `* { margin: 0; padding: 0 }`
       Ver el comentario del reset. Tres variantes distintas entre familias.
   `line-height`
       Tres valores computados: 20px (index), 1.5 (públicas), normal (admin y
       solicitar-acceso, que no lo declaran). Queda local.
   `::selection`
       index usa --purple-200, las públicas --purple-300, y admin y
       solicitar-acceso no tienen la regla. Ponerla acá le pintaría el
       highlight a dos páginas que hoy usan el del browser. Queda local.
   `-webkit-font-smoothing: antialiased`
       Solo index y las 4 públicas. Agregarlo a admin y solicitar-acceso
       cambia el render de texto en macOS. Queda local.
   `input::placeholder`
       Solo listado y registro-sii. Global cambiaría los inputs de filtro de
       admin. Queda local; .c5-input::placeholder vive en components.css y usa
       --gray-700 a propósito (con --gray-600 el contraste daba 2,42:1).
   `h1` / `h2` / `h3`
       Cuatro definiciones incompatibles (index 40px/700, públicas
       clamp(28px,5vw,40px)/800, registro-sii clamp(28px,4vw,42px),
       solicitar-acceso 22px). Unificarlas es un rediseño, no un refactor.
   `min-height: 100vh`, `body { display: flex }`
       Específicos de admin y solicitar-acceso.
   ------------------------------------------------------------------------- */
