"""Génère le bloc CSS @font-face avec les woff2 vendorisés embarqués en data-URI. Playwright rend via page.set_content() (pas de base URL) : les chemins de police relatifs ne se résolvent pas. On embarque donc les woff2 en base64 directement dans le CSS. Résultat mémoïsé (les fichiers ne changent pas au runtime).""" from __future__ import annotations import base64 from functools import lru_cache from pathlib import Path FONTS_DIR = Path(__file__).parent / "static" / "fonts" # (famille CSS, fichier, graisse) _FACES = [ ("Archivo", "archivo-700.woff2", 700), ("Archivo", "archivo-800.woff2", 800), ("JetBrains Mono", "jbmono-400.woff2", 400), ("JetBrains Mono", "jbmono-500.woff2", 500), ("JetBrains Mono", "jbmono-700.woff2", 700), ("JetBrains Mono", "jbmono-800.woff2", 800), ] @lru_cache(maxsize=1) def font_face_css() -> str: """CSS @font-face complet (data-URI) à injecter dans le