/* Vaucai — self-hosted webfonts (TAC-FIX-04 + TAC-FIX-05).
 *
 * Replaces:
 *   <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800
 *               &family=Instrument+Serif:ital@1&display=swap" rel="stylesheet">
 *
 * Why self-hosted:
 *  - TAC-FIX-04 (CWE-345, SRI Missing): cross-origin font CSS could not
 *    carry a stable integrity hash (Google ships UA-dependent CSS).
 *    Same-origin removes the need for SRI entirely.
 *  - TAC-FIX-05 (CWE-693, COEP Missing): require-corp blocks cross-origin
 *    resources without explicit CORP headers. Google Fonts does NOT emit
 *    CORP on its CSS or .woff2 — self-hosting from /assets/fonts/* under
 *    our own security-headers snippet (Cross-Origin-Resource-Policy:
 *    same-origin) makes COEP require-corp viable.
 *
 * Instrument Serif: same files Google was serving (latin + latin-ext
 * split) since the upstream repo doesn't publish webfont packages.
 *
 * Cache: served via /assets/* — matches the existing 30d expires +
 * public, immutable directive in vaucai.conf.
 *
 * ---------------------------------------------------------------------------
 * EL TITULAR NO SALTA AL ENTRAR (2026-09-22). Con `font-display: swap` el
 * texto se pinta primero en una fuente del sistema y luego cambia a la
 * nuestra; si llega tarde, el titular ya visible se estrecha o salta de
 * línea (medido: 54 px en la portada, 141 px en /privacidad/). Tres piezas:
 *
 *  1. Inter RECORTADA. El fichero de rsms trae 2.937 glifos (cirílico,
 *     griego…) y pesaba ~112 KB por peso. `-latin` lleva lo que usa la web
 *     (~35 KB, hinting intacto: 0 px de diferencia medidos en 22 capturas).
 *     `-resto` lleva TODO lo demás y sólo se descarga si un carácter suyo
 *     aparece en la página: no se pierde ningún glifo. Se generan desde el
 *     fichero completo de Inter con fontTools (layout_features='*',
 *     hinting=True); los rangos de abajo son los del recorte.
 *  2. PRECARGA por página (<link rel="preload"> en cada HTML), sólo de lo
 *     que esa página pinta al entrar.
 *  3. RESERVA CON LAS MEDIDAS DE INTER. «Inter Fallback» es Arial (o
 *     Liberation Sans, su clon métrico en Linux) y «Inter Fallback Roboto»
 *     es la Roboto de Android, reescaladas con size-adjust y con las
 *     métricas verticales de Inter (typo, USE_TYPO_METRICS: 1984/-494/0 sobre
 *     2048). Mientras Inter no ha llegado, el texto ocupa ya el mismo sitio
 *     y el cambio no mueve nada. Igual para Instrument Serif (990/-310/0
 *     sobre 1000) con Georgia y Noto Serif.
 *     size-adjust = ancho medio de Inter / ancho medio de la reserva,
 *     ponderado con el texto REAL de la web en cada peso.
 *     ascent/descent-override = métrica de Inter / size-adjust.
 *     Si ninguna fuente local() existe, la cara no carga y el navegador
 *     pasa a la siguiente de la pila: nunca queda peor que antes.
 *  Las pilas que usan Inter / Instrument Serif nombran estas reservas justo
 *  detrás de la fuente web.
 * ---------------------------------------------------------------------------
 */

/* Inter — latin (lo que pinta la web). */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/Inter-Regular-latin.woff2') format('woff2');
  unicode-range: U+0000-017F, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2190-2194, U+2212, U+2215, U+2264-2265, U+2318, U+26A0, U+2713, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/Inter-SemiBold-latin.woff2') format('woff2');
  unicode-range: U+0000-017F, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2190-2194, U+2212, U+2215, U+2264-2265, U+2318, U+26A0, U+2713, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/Inter-ExtraBold-latin.woff2') format('woff2');
  unicode-range: U+0000-017F, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2190-2194, U+2212, U+2215, U+2264-2265, U+2318, U+26A0, U+2713, U+FEFF, U+FFFD;
}

/* Inter — resto (todo lo que no es latin). Sólo se descarga si hace falta. */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/Inter-Regular-resto.woff2') format('woff2');
  unicode-range: U+0180-01C3, U+01C5-0254, U+0256-027B, U+027E-0284, U+0286-0290, U+0292-02A4, U+02A6-02BA, U+02BD-02C5, U+02C7-02D9, U+02DB, U+02DD-0303, U+0306-0307, U+0309-030A, U+030C, U+030F, U+0313, U+0315, U+031B, U+0323, U+0326-0328, U+032C, U+0337-0338, U+0342-0343, U+0346-036F, U+0374-0376, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03D7, U+03DC-03DD, U+03F0-03F6, U+03F9-03FA, U+03FC-0479, U+0480-049D, U+04A0-04FF, U+052F, U+0E3F, U+1D00, U+1D0D, U+1D1B, U+1D43, U+1D47-1D49, U+1D4D, U+1D4F-1D50, U+1D52, U+1D56-1D58, U+1D5B, U+1D62-1D65, U+1D9C, U+1DA0, U+1DBB, U+1DBF-1DF5, U+1DFC-1E9B, U+1E9D-1F15, U+1F18-1F1D, U+1F20-1F45, U+1F48-1F4D, U+1F50-1F57, U+1F59, U+1F5B, U+1F5D, U+1F5F-1F7D, U+1F80-1FB4, U+1FB6-1FC4, U+1FC6-1FD3, U+1FD6-1FDB, U+1FDD-1FEF, U+1FF2-1FF4, U+1FF6-1FFE, U+2070-2071, U+2074-208E, U+2090-209C, U+20A0-20AB, U+20AD-20AF, U+20B1-20B5, U+20B8-20BA, U+20BC-20C0, U+20DB-20DE, U+20E8, U+20F0, U+2100-2101, U+2103, U+2105-2106, U+2109, U+2113, U+2116-2117, U+211E-2121, U+2126, U+212A-212B, U+212E, U+2132, U+213B, U+214D, U+2150-217F, U+2183-2186, U+2189, U+2195-2199, U+21A9-21AA, U+21B0-21B1, U+21B3-21B5, U+21BA-21BB, U+21D0, U+21D2, U+21D4, U+21DE-21DF, U+21E4-21E5, U+21E7, U+21EA, U+2202, U+2205-2206, U+220F, U+2211, U+221A, U+221E, U+222B, U+2236, U+2248, U+2260, U+2295-2298, U+2303-2305, U+2325-2327, U+232B, U+2380, U+2387, U+238B, U+23CE-23CF, U+2423, U+2460-2468, U+24B6-24CF, U+24EA, U+25A0-25A2, U+25AA, U+25B2-25B3, U+25B6-25B7, U+25BA-25BD, U+25C0-25C1, U+25C4-25C7, U+25CA-25CB, U+25CF, U+25E6, U+25EF, U+2600, U+2605-2606, U+263C, U+2661, U+2665, U+266A-266B, U+2717, U+2756, U+2764, U+2780-2788, U+27EF, U+27F5-27FA, U+2913, U+2A38, U+2B06, U+2B12-2B13, U+2B1C, U+2B24, U+2C7C, U+2C7F, U+2DFF, U+2E18, U+A69F, U+A7FF, U+A92E, U+E000, U+E002-E05E, U+E06A-E0BD, U+E0C8-E0CC, U+E0DC-E0E6, U+E0F3-E0F5, U+E106, U+E109-E10A, U+E10C-E10F, U+E111-E113, U+E117-E118, U+E121-E122, U+E124, U+E12A-E15E, U+E163, U+E1C3, U+E1D2-E1DF, U+E1E1-E2DC, U+EE01-EE07, U+EE09-EE0A, U+EE0C-EE12, U+EE14, U+EE17, U+EE1D-EE45, U+EE47-EE84, U+EE87-EED6, U+EED8-EEE1, U+F6C3, U+1F12F-1F149, U+1F16A-1F16B, U+1F850, U+1F852;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/Inter-SemiBold-resto.woff2') format('woff2');
  unicode-range: U+0180-01C3, U+01C5-0254, U+0256-027B, U+027E-0284, U+0286-0290, U+0292-02A4, U+02A6-02BA, U+02BD-02C5, U+02C7-02D9, U+02DB, U+02DD-0303, U+0306-0307, U+0309-030A, U+030C, U+030F, U+0313, U+0315, U+031B, U+0323, U+0326-0328, U+032C, U+0337-0338, U+0342-0343, U+0346-036F, U+0374-0376, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03D7, U+03DC-03DD, U+03F0-03F6, U+03F9-03FA, U+03FC-0479, U+0480-049D, U+04A0-04FF, U+052F, U+0E3F, U+1D00, U+1D0D, U+1D1B, U+1D43, U+1D47-1D49, U+1D4D, U+1D4F-1D50, U+1D52, U+1D56-1D58, U+1D5B, U+1D62-1D65, U+1D9C, U+1DA0, U+1DBB, U+1DBF-1DF5, U+1DFC-1E9B, U+1E9D-1F15, U+1F18-1F1D, U+1F20-1F45, U+1F48-1F4D, U+1F50-1F57, U+1F59, U+1F5B, U+1F5D, U+1F5F-1F7D, U+1F80-1FB4, U+1FB6-1FC4, U+1FC6-1FD3, U+1FD6-1FDB, U+1FDD-1FEF, U+1FF2-1FF4, U+1FF6-1FFE, U+2070-2071, U+2074-208E, U+2090-209C, U+20A0-20AB, U+20AD-20AF, U+20B1-20B5, U+20B8-20BA, U+20BC-20C0, U+20DB-20DE, U+20E8, U+20F0, U+2100-2101, U+2103, U+2105-2106, U+2109, U+2113, U+2116-2117, U+211E-2121, U+2126, U+212A-212B, U+212E, U+2132, U+213B, U+214D, U+2150-217F, U+2183-2186, U+2189, U+2195-2199, U+21A9-21AA, U+21B0-21B1, U+21B3-21B5, U+21BA-21BB, U+21D0, U+21D2, U+21D4, U+21DE-21DF, U+21E4-21E5, U+21E7, U+21EA, U+2202, U+2205-2206, U+220F, U+2211, U+221A, U+221E, U+222B, U+2236, U+2248, U+2260, U+2295-2298, U+2303-2305, U+2325-2327, U+232B, U+2380, U+2387, U+238B, U+23CE-23CF, U+2423, U+2460-2468, U+24B6-24CF, U+24EA, U+25A0-25A2, U+25AA, U+25B2-25B3, U+25B6-25B7, U+25BA-25BD, U+25C0-25C1, U+25C4-25C7, U+25CA-25CB, U+25CF, U+25E6, U+25EF, U+2600, U+2605-2606, U+263C, U+2661, U+2665, U+266A-266B, U+2717, U+2756, U+2764, U+2780-2788, U+27EF, U+27F5-27FA, U+2913, U+2A38, U+2B06, U+2B12-2B13, U+2B1C, U+2B24, U+2C7C, U+2C7F, U+2DFF, U+2E18, U+A69F, U+A7FF, U+A92E, U+E000, U+E002-E05E, U+E06A-E0BD, U+E0C8-E0CC, U+E0DC-E0E6, U+E0F3-E0F5, U+E106, U+E109-E10A, U+E10C-E10F, U+E111-E113, U+E117-E118, U+E121-E122, U+E124, U+E12A-E15E, U+E163, U+E1C3, U+E1D2-E1DF, U+E1E1-E2DC, U+EE01-EE07, U+EE09-EE0A, U+EE0C-EE12, U+EE14, U+EE17, U+EE1D-EE45, U+EE47-EE84, U+EE87-EED6, U+EED8-EEE1, U+F6C3, U+1F12F-1F149, U+1F16A-1F16B, U+1F850, U+1F852;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/Inter-ExtraBold-resto.woff2') format('woff2');
  unicode-range: U+0180-01C3, U+01C5-0254, U+0256-027B, U+027E-0284, U+0286-0290, U+0292-02A4, U+02A6-02BA, U+02BD-02C5, U+02C7-02D9, U+02DB, U+02DD-0303, U+0306-0307, U+0309-030A, U+030C, U+030F, U+0313, U+0315, U+031B, U+0323, U+0326-0328, U+032C, U+0337-0338, U+0342-0343, U+0346-036F, U+0374-0376, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03D7, U+03DC-03DD, U+03F0-03F6, U+03F9-03FA, U+03FC-0479, U+0480-049D, U+04A0-04FF, U+052F, U+0E3F, U+1D00, U+1D0D, U+1D1B, U+1D43, U+1D47-1D49, U+1D4D, U+1D4F-1D50, U+1D52, U+1D56-1D58, U+1D5B, U+1D62-1D65, U+1D9C, U+1DA0, U+1DBB, U+1DBF-1DF5, U+1DFC-1E9B, U+1E9D-1F15, U+1F18-1F1D, U+1F20-1F45, U+1F48-1F4D, U+1F50-1F57, U+1F59, U+1F5B, U+1F5D, U+1F5F-1F7D, U+1F80-1FB4, U+1FB6-1FC4, U+1FC6-1FD3, U+1FD6-1FDB, U+1FDD-1FEF, U+1FF2-1FF4, U+1FF6-1FFE, U+2070-2071, U+2074-208E, U+2090-209C, U+20A0-20AB, U+20AD-20AF, U+20B1-20B5, U+20B8-20BA, U+20BC-20C0, U+20DB-20DE, U+20E8, U+20F0, U+2100-2101, U+2103, U+2105-2106, U+2109, U+2113, U+2116-2117, U+211E-2121, U+2126, U+212A-212B, U+212E, U+2132, U+213B, U+214D, U+2150-217F, U+2183-2186, U+2189, U+2195-2199, U+21A9-21AA, U+21B0-21B1, U+21B3-21B5, U+21BA-21BB, U+21D0, U+21D2, U+21D4, U+21DE-21DF, U+21E4-21E5, U+21E7, U+21EA, U+2202, U+2205-2206, U+220F, U+2211, U+221A, U+221E, U+222B, U+2236, U+2248, U+2260, U+2295-2298, U+2303-2305, U+2325-2327, U+232B, U+2380, U+2387, U+238B, U+23CE-23CF, U+2423, U+2460-2468, U+24B6-24CF, U+24EA, U+25A0-25A2, U+25AA, U+25B2-25B3, U+25B6-25B7, U+25BA-25BD, U+25C0-25C1, U+25C4-25C7, U+25CA-25CB, U+25CF, U+25E6, U+25EF, U+2600, U+2605-2606, U+263C, U+2661, U+2665, U+266A-266B, U+2717, U+2756, U+2764, U+2780-2788, U+27EF, U+27F5-27FA, U+2913, U+2A38, U+2B06, U+2B12-2B13, U+2B1C, U+2B24, U+2C7C, U+2C7F, U+2DFF, U+2E18, U+A69F, U+A7FF, U+A92E, U+E000, U+E002-E05E, U+E06A-E0BD, U+E0C8-E0CC, U+E0DC-E0E6, U+E0F3-E0F5, U+E106, U+E109-E10A, U+E10C-E10F, U+E111-E113, U+E117-E118, U+E121-E122, U+E124, U+E12A-E15E, U+E163, U+E1C3, U+E1D2-E1DF, U+E1E1-E2DC, U+EE01-EE07, U+EE09-EE0A, U+EE0C-EE12, U+EE14, U+EE17, U+EE1D-EE45, U+EE47-EE84, U+EE87-EED6, U+EED8-EEE1, U+F6C3, U+1F12F-1F149, U+1F16A-1F16B, U+1F850, U+1F852;
}

/* Inter Fallback — Arial (Windows, macOS, iOS) / Liberation Sans (Linux),
 * con las medidas de Inter. 600 y 800 sobre la Bold. */
@font-face {
  font-family: 'Inter Fallback';
  font-style: normal;
  font-weight: 400;
  src: local('Arial'), local('ArialMT'), local('Liberation Sans'), local('LiberationSans');
  size-adjust: 103.94%;
  ascent-override: 93.2%;
  descent-override: 23.21%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback';
  font-style: normal;
  font-weight: 600;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 100.92%;
  ascent-override: 95.99%;
  descent-override: 23.9%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback';
  font-style: normal;
  font-weight: 800;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 102.46%;
  ascent-override: 94.55%;
  descent-override: 23.54%;
  line-gap-override: 0%;
}

/* Inter Fallback Roboto — Android, donde no hay Arial. */
@font-face {
  font-family: 'Inter Fallback Roboto';
  font-style: normal;
  font-weight: 400;
  src: local('Roboto'), local('Roboto-Regular');
  size-adjust: 105.19%;
  ascent-override: 92.1%;
  descent-override: 22.93%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback Roboto';
  font-style: normal;
  font-weight: 600;
  src: local('Roboto Medium'), local('Roboto-Medium');
  size-adjust: 107.96%;
  ascent-override: 89.73%;
  descent-override: 22.34%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback Roboto';
  font-style: normal;
  font-weight: 800;
  src: local('Roboto Bold'), local('Roboto-Bold');
  size-adjust: 109.18%;
  ascent-override: 88.73%;
  descent-override: 22.09%;
  line-gap-override: 0%;
}

/* Inter Fallback Hero — SÓLO el titular de la portada («La IA de los
 * autónomos.»). El ajuste medio de 800 deja esa frase concreta un 1,5 % más
 * ancha en Arial, y es el texto que más se mira. Calibrado midiendo la frase
 * en el navegador sin hinting (como pintan Mac, iPhone y Windows), a 390 y a
 * 1440 px: diferencia 0,0-0,1 px con Inter en los dos. Si el titular cambia
 * de texto, se vuelve a medir (o se quita y hereda «Inter Fallback»). */
@font-face {
  font-family: 'Inter Fallback Hero';
  font-style: normal;
  font-weight: 800;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 101.2%;
  ascent-override: 95.73%;
  descent-override: 23.84%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Inter Fallback Hero Roboto';
  font-style: normal;
  font-weight: 800;
  src: local('Roboto Bold'), local('Roboto-Bold');
  size-adjust: 108.33%;
  ascent-override: 89.43%;
  descent-override: 22.27%;
  line-gap-override: 0%;
}

/* Instrument Serif italic — latin-ext (broader European glyphs). */
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/InstrumentSerif-Italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* Instrument Serif italic — latin (default). */
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/InstrumentSerif-Italic-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;
}

/* Instrument Serif Fallback — Georgia Italic, con las medidas de
 * Instrument Serif (que es mucho más estrecha: de ahí el 78,75 %). */
@font-face {
  font-family: 'Instrument Serif Fallback';
  font-style: italic;
  font-weight: 400;
  src: local('Georgia Italic'), local('Georgia-Italic');
  size-adjust: 78.75%;
  ascent-override: 125.71%;
  descent-override: 39.37%;
  line-gap-override: 0%;
}
/* Instrument Serif Fallback Noto — la serif de Android. */
@font-face {
  font-family: 'Instrument Serif Fallback Noto';
  font-style: italic;
  font-weight: 400;
  src: local('Noto Serif Italic'), local('NotoSerif-Italic');
  size-adjust: 76.18%;
  ascent-override: 129.96%;
  descent-override: 40.69%;
  line-gap-override: 0%;
}

