/* ═══════════════════════════════════════════════════════════════
   YEFRIS · fonts.css · LA UNICA DECLARACION DE FUENTES (30/08, TD-TIPOGRAFIA-AUDIT)

   QUE HABIA ANTES. Catorce cabeceras distintas pedian las letras a Google
   Fonts: base.html (que extienden 130 plantillas), superadmin/base_admin
   (4) y doce paginas sin base -- entre ellas las cuatro de loyalty, que
   ademas pedian Inter, una cuarta familia. Son DOS dominios distintos --el
   de la hoja de estilo y el de los binarios--: dos resoluciones de DNS y dos
   negociaciones TLS antes de pintar la primera letra. En un bar con
   cobertura floja eso se nota, y desde 2020 el navegador ya no comparte la
   cache de fuentes entre webs distintas, asi que Google tampoco ahorra la
   segunda descarga. Encima de eso, seis plantillas repetian a mano el
   @font-face de Butler y tokens.css tenia los suyos.

   QUE HAY AHORA. Todo autoalojado, y las cinco caras declaradas aqui y en
   ningun otro sitio. Cero dominios externos. Lo guarda
   tests/test_tipografia.py, que falla si vuelve a aparecer una cara
   declarada fuera de este fichero o una peticion a un dominio de fuentes.

   OJO AL ESCRIBIR EN ESTE FICHERO: el test prohibe los nombres de esos dos
   dominios en cualquier .css y .html del repo, comentarios incluidos. Por
   eso aqui se describen y no se nombran. Escritos con todas las letras
   estan en web/static/fonts/LICENSES.md, que es un .md y no lo barre el
   test: ahi es donde tienen sentido, porque son la procedencia de los
   binarios.

   POR QUE VARIABLES. Un fichero por familia en vez de cinco pesos sueltos,
   y los pesos intermedios salen de verdad en vez de redondeados al estatico
   mas cercano: los tres 650 del repo son 650, y el 800 es 800.

   POR QUE SOLO EL SUBSET latin. Cubre U+0000-00FF (tildes, dieresis, la
   enne, la cedilla, ordinales, los signos de apertura), el euro y el bloque
   de guiones y comillas tipograficas. Es el espannol entero. Cargar
   latin-ext, cirilico, griego o vietnamita seria pagar por alfabetos que
   esta app no escribe.

   LA REGLA QUE NO SE ROMPE: UN WOFF2 NUNCA SE SOBRESCRIBE. Si cambia,
   cambia de nombre. Los src: de aqui van a proposito SIN ?v=, porque nginx
   sirve /static/ con expires 7d y Cache-Control immutable, y el service
   worker hace cacheFirst con la URL entera como clave: un fichero con la
   misma URL no vuelve a bajar nunca para quien ya lo tiene. Eso es
   exactamente lo que queremos de un woff2 -- y justo por eso, sustituir el
   binario dejando el nombre significa que media base de usuarios se queda
   con el viejo para siempre.

   LICENCIAS Y PROCEDENCIA: web/static/fonts/LICENSES.md.

   font-display: swap en las cinco. Es la eleccion de la casa: se pinta ya
   con la de respaldo y se cambia al llegar la buena. En una PWA con
   cacheFirst la fuente esta en cache desde la segunda visita, asi que el
   cambio solo lo ve quien entra por primera vez.

   format('woff2') a secas, sin tech(): no lo entienden todos los Android
   de gama baja que hay en la barra de un bar, y aqui no aporta nada.

   ESTE FICHERO SE ENLAZA ANTES QUE tokens.css, y siempre via static(): el
   navegador tiene que conocer las familias antes de que ningun CSS las
   pida, y el ?v= del hash es lo que hace que un cambio aqui llegue.
   ═══════════════════════════════════════════════════════════════ */

/* ─── Plus Jakarta Sans · la interfaz ─── */
/* El eje de peso va de 200 a 800. NO llega a 900: un font-weight: 900 sobre
   esta familia pide un peso que no existe y el navegador sirve el 800 sin
   decir nada. Por eso los pesos se piden por rol (--y-fw-*) y no a mano. */
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('/static/fonts/PlusJakartaSans-VF-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* La italica se usa en 28 sitios. Declararla no cuesta nada en las paginas
   que no la pintan: el navegador solo descarga una @font-face cuando algun
   elemento la necesita de verdad. Por eso tampoco se precarga en ningun
   sitio. */
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: italic;
  font-weight: 200 800;
  font-display: swap;
  src: url('/static/fonts/PlusJakartaSans-Italic-VF-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ─── JetBrains Mono · los datos ─── */
/* Importes, numeros tabulares, identificadores y horas. De 100 a 800: aqui
   tampoco hay 900. No hay italica de mono en el repo y no se annade. */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('/static/fonts/JetBrainsMono-VF-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ─── Butler · la voz ─── */
/* Las dos venian de tokens.css, donde se declararon el 25/08 al descubrir
   que base.html llevaba desde el 14/08 precargando los woff2 sin que ningun
   @font-face global los reclamara: --y-font-voice caia a Georgia en toda la
   app salvo en tres plantillas que llevaban su face inline. Se mudan aqui
   tal cual, sin tocar un valor.

   Son estaticas, una cara por peso, y sin unicode-range a proposito: es
   como estaban, y Butler solo pinta titulares cortos en espannol.

   EL 900 SOLO EXISTE AQUI. Es el unico sitio de todo el repo donde
   font-weight: 900 pide un peso que la fuente tiene de verdad. */
@font-face {
  font-family: 'Butler';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/static/fonts/Butler-Bold.woff2') format('woff2');
}
@font-face {
  font-family: 'Butler';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url('/static/fonts/Butler-Black.woff2') format('woff2');
}
