/* ── Las fuentes del panel, autoalojadas ──────────────────────────────────────
   Inter para todo el texto y JetBrains Mono para cifras y códigos en tablas
   densas. Los archivos viven en `static/vendor/fonts/` y se sirven desde este
   mismo dominio.

   POR QUÉ NO SE CARGAN DE GOOGLE FONTS
   ------------------------------------
   La CSP del panel es `style-src 'self'`: el navegador bloquearía la hoja de
   `fonts.googleapis.com` y el panel se quedaría con la tipografía del sistema,
   sin un solo error visible. Autoalojarlas respeta la CSP, carga más rápido y no
   manda la IP de cada persona del plantel a un tercero en cada visita.

   `font-display:swap`: mientras la fuente baja se ve la del sistema, en vez de
   quedarse el texto invisible. El texto se lee siempre; lo que llega tarde es la
   forma, no el contenido.

   Los pesos son SOLO los que usa el diseño (400, 500, 600) y el subconjunto es
   `latin`, que cubre el español entero. La procedencia y la licencia están en
   `static/vendor/fonts/LEEME.md`. */

@font-face{
  font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/inter-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;
  src:url('/static/vendor/fonts/inter-latin-500-normal.woff2') format('woff2')}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/inter-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/jetbrains-mono-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url('/static/vendor/fonts/jetbrains-mono-latin-500-normal.woff2') format('woff2')}

/* ── EL CATÁLOGO (2026-10-11) ────────────────────────────────────────────────
   Lo pidió el dueño: «trae las mejores tipografías para sitios web y agrégalas a
   las que ya tenemos». Están todas autoalojadas, como Inter y JetBrains Mono, por
   la misma razón: la CSP del panel es `style-src 'self'`.

   Para qué sirve cada una (no es un catálogo de adorno):
     · Source Sans 3 ......... lectura en pantalla, paneles densos
     · IBM Plex Sans ......... alternativa sobria y técnica
     · Public Sans ........... institucional, muy neutra y legible
     · Atkinson Hyperlegible . pensada para BAJA VISIÓN: es la que hay que ofrecer
                               si alguien del plantel lee con dificultad
     · Fraunces .............. titulares con carácter (serif de contraste)
     · Fira Code ............. cifras y código (como JetBrains Mono)

   Todas son SIL Open Font License 1.1 (se pueden redistribuir); el detalle de cada
   archivo y su licencia está en `CREDITOS.md` y en `static/vendor/fonts/LEEME.md`.
   Se traen con `herramientas/preparar-fuentes.py`, que además deja el TTF para el
   PDF, para que el papel salga con la MISMA tipografía que la pantalla.        */

@font-face{
  font-family:'Source Sans 3';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/source-sans-3-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Source Sans 3';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/source-sans-3-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/ibm-plex-sans-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/ibm-plex-sans-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'Public Sans';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/public-sans-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Public Sans';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/public-sans-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'Atkinson Hyperlegible';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/atkinson-hyperlegible-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Atkinson Hyperlegible';font-style:normal;font-weight:700;font-display:swap;
  src:url('/static/vendor/fonts/atkinson-hyperlegible-latin-700-normal.woff2') format('woff2')}

@font-face{
  font-family:'Fraunces';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/fraunces-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Fraunces';font-style:normal;font-weight:700;font-display:swap;
  src:url('/static/vendor/fonts/fraunces-latin-700-normal.woff2') format('woff2')}

@font-face{
  font-family:'Fira Code';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/fira-code-latin-400-normal.woff2') format('woff2')}

@font-face{
  font-family:'Manrope';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/manrope-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Manrope';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/manrope-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'Figtree';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/figtree-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Figtree';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/figtree-latin-600-normal.woff2') format('woff2')}

@font-face{
  font-family:'Newsreader';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vendor/fonts/newsreader-latin-400-normal.woff2') format('woff2')}
@font-face{
  font-family:'Newsreader';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/vendor/fonts/newsreader-latin-600-normal.woff2') format('woff2')}
