feat(fonts): embed fonts for offline rendering (#9) #46

Merged
Reliodas merged 1 commit from feat/9-offline-fonts into develop 2026-07-01 08:06:57 +00:00
Owner

Implémente le ticket #9 (rendre les polices plus robustes hors ligne).

Décision

Les polices sont embarquées localement (validé) plutôt que chargées depuis Google Fonts.

Ce que fait la PR

  • fonts/ : ajout des polices self-hostées (sous-ensemble latin, .woff2) — cinzel.woff2, cinzel-decorative.woff2, eb-garamond.woff2, eb-garamond-italic.woff2. Cinzel et EB Garamond étant des polices variables, un seul fichier par famille couvre la plage de graisses utilisée (~140 Ko au total).
  • shared.css : déclarations @font-face centralisées (un seul point de chargement, partagé par toutes les pages ; règles à plage de graisses).
  • 9 pages HTML : retrait du <link> Google Fonts.
  • fonts/OFL.txt : licence SIL OFL 1.1 + copyrights des trois familles (redistribution conforme).

Résultat

Rendu identique en ligne et hors ligne, zéro requête réseau. Cela stabilise les longueurs de texte à l'impression (des polices de substitution les modifieraient).

Vérification (critères d'acceptation)

  • Comportement hors ligne explicite : testé réseau coupé (context.setOffline(true)) → les 4 faces chargent (document.fonts = "loaded"), document.fonts.check OK, aucune requête externe tentée.
  • Toutes les pages partagent la même stratégie (chargement unique dans shared.css).
  • Rendu identique en ligne/hors ligne : capture hors ligne confirmée (titres Cinzel + corps/italique EB Garamond).
  • Documentation : section « Polices » du README (+ arborescence, intro) et fonts/OFL.txt.
  • Non-régression : node scripts/smoke-test.js OK ; node tests/visual-validation.js 8/8 OK.

Closes #9

🤖 Generated with Claude Code

Implémente le ticket #9 (rendre les polices plus robustes hors ligne). ## Décision Les polices sont **embarquées localement** (validé) plutôt que chargées depuis Google Fonts. ## Ce que fait la PR - **`fonts/`** : ajout des polices self-hostées (sous-ensemble latin, `.woff2`) — `cinzel.woff2`, `cinzel-decorative.woff2`, `eb-garamond.woff2`, `eb-garamond-italic.woff2`. Cinzel et EB Garamond étant des **polices variables**, un seul fichier par famille couvre la plage de graisses utilisée (~140 Ko au total). - **`shared.css`** : déclarations `@font-face` **centralisées** (un seul point de chargement, partagé par toutes les pages ; règles à plage de graisses). - **9 pages HTML** : retrait du `<link>` Google Fonts. - **`fonts/OFL.txt`** : licence SIL OFL 1.1 + copyrights des trois familles (redistribution conforme). ## Résultat Rendu **identique en ligne et hors ligne**, **zéro requête réseau**. Cela stabilise les longueurs de texte à l'impression (des polices de substitution les modifieraient). ## Vérification (critères d'acceptation) - Comportement hors ligne explicite : testé réseau coupé (`context.setOffline(true)`) → les 4 faces chargent (`document.fonts` = "loaded"), `document.fonts.check` OK, **aucune requête externe tentée**. - Toutes les pages partagent la même stratégie (chargement unique dans `shared.css`). - Rendu identique en ligne/hors ligne : capture hors ligne confirmée (titres Cinzel + corps/italique EB Garamond). - Documentation : section « Polices » du README (+ arborescence, intro) et `fonts/OFL.txt`. - Non-régression : `node scripts/smoke-test.js` OK ; `node tests/visual-validation.js` 8/8 OK. Closes #9 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(fonts): embed fonts for offline rendering (#9)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
9fe5af94d2
Self-host the Cinzel, Cinzel Decorative and EB Garamond fonts (latin
subset, woff2, SIL OFL 1.1) under fonts/, loaded via @font-face rules
centralised in shared.css. Remove the Google Fonts <link> from all nine
HTML pages.

Cinzel and EB Garamond are variable fonts, so a single woff2 per family
covers the weight range used (weight-range @font-face). Rendering is now
identical online and offline with zero network requests, which keeps text
lengths stable for printing. Strategy and license documented in the README
and fonts/OFL.txt.

Verified: with the network offline, all four faces load (document.fonts
reports "loaded"), no external request is attempted, and the cards render
with the correct fonts; smoke and visual validation pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019fEfJomg2UxRUoR6fduyAC
Reliodas merged commit c2d14723f2 into develop 2026-07-01 08:06:57 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: dnd/cards#46
No description provided.