feat(creatures): adaptive body text size, applied to print (#40) #48

Merged
Reliodas merged 1 commit from feat/40-adaptive-text-size into develop 2026-07-01 08:44:18 +00:00
Owner

Implémente le ticket #40 (taille de texte adaptative), périmètre éditeur de créatures (portrait + paysage).

Approche

L'algorithme d'ajustement existant (#12) choisit déjà la plus grande taille qui tient dans une liste, en mesurant l'espace de façon indépendante du zoom. Il suffit de l'étendre vers le haut :

  • contenu court → le texte s'agrandit jusqu'au maximum lisible ;
  • contenu long → les grandes tailles ne tiennent pas, on retombe exactement sur le chemin de réduction actuel + l'avertissement de débordement (#12 préservé).

Limites explicites (constantes nommées) : portrait 4,5 → 10 px, paysage 4,5 → 9 px.

Impression

Point clé : renderCardPairHtml re-rend le verso depuis les données, sans le fit — l'impression n'était donc pas adaptative. La taille ajustée est désormais capturée depuis l'aperçu (lecture synchrone, en px, indépendante du zoom) et réappliquée à l'identique à l'impression via un style scopé par carte (mêmes règles que l'aperçu). Aucun changement au CSS de base → aucun risque sur le rendu existant.

Vérification (headless, critères d'acceptation)

  • Carte courte plus lisible : Zombie 7→10 px.
  • Carte longue reste lisible et ne déborde pas plus : contenu gonflé → 4,5 px + avertissement (inchangé).
  • Défaut inchangé : Wight 7 px.
  • Paysage : Vampire 9 px (≤ max paysage).
  • Aperçu == impression dans tous les cas ; indépendant du zoom (identique à x0.5/x1/x2/x4).
  • Testé sur un éditeur portrait et paysage (creatures couvre les deux).
  • Limites min/max explicites dans creatures.html (BODY_FONT_SIZES_*).
  • node scripts/smoke-test.js OK ; node tests/visual-validation.js 8/8 OK.

Documentation

  • README : section « Cartes de créatures (taille de texte adaptative) ».
  • CHANGELOG : entrée [Unreleased] > Changed.

Closes #40

🤖 Generated with Claude Code

Implémente le ticket #40 (taille de texte adaptative), périmètre **éditeur de créatures** (portrait + paysage). ## Approche L'algorithme d'ajustement existant (#12) choisit déjà **la plus grande taille qui tient** dans une liste, en mesurant l'espace de façon **indépendante du zoom**. Il suffit de l'**étendre vers le haut** : - **contenu court** → le texte s'agrandit jusqu'au maximum lisible ; - **contenu long** → les grandes tailles ne tiennent pas, on retombe exactement sur le chemin de réduction actuel + l'avertissement de débordement (**#12 préservé**). Limites explicites (constantes nommées) : portrait **4,5 → 10 px**, paysage **4,5 → 9 px**. ## Impression Point clé : `renderCardPairHtml` re-rend le verso depuis les données, sans le fit — l'impression n'était donc **pas** adaptative. La taille ajustée est désormais **capturée depuis l'aperçu** (lecture synchrone, en px, indépendante du zoom) et **réappliquée à l'identique à l'impression** via un style scopé par carte (mêmes règles que l'aperçu). Aucun changement au CSS de base → aucun risque sur le rendu existant. ## Vérification (headless, critères d'acceptation) - Carte courte plus lisible : Zombie **7→10 px**. - Carte longue reste lisible et ne déborde pas plus : contenu gonflé → **4,5 px + avertissement** (inchangé). - Défaut inchangé : Wight **7 px**. - Paysage : Vampire **9 px** (≤ max paysage). - **Aperçu == impression** dans tous les cas ; **indépendant du zoom** (identique à x0.5/x1/x2/x4). - Testé sur un éditeur portrait **et** paysage (creatures couvre les deux). - Limites min/max explicites dans `creatures.html` (`BODY_FONT_SIZES_*`). - `node scripts/smoke-test.js` OK ; `node tests/visual-validation.js` 8/8 OK. ## Documentation - README : section « Cartes de créatures (taille de texte adaptative) ». - CHANGELOG : entrée `[Unreleased] > Changed`. Closes #40 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(creatures): adaptive body text size, applied to print (#40)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
0846a6df92
Extend the existing fit algorithm's font-size list upward so short
creature statblocks grow to a larger, more readable size while the space
allows, instead of staying at the dense-content base size. Explicit
min/max ranges are named constants (BODY_FONT_SIZES_PORTRAIT 4.5–10 px,
BODY_FONT_SIZES_LANDSCAPE 4.5–9 px); the largest size that fits is chosen.

Long content is unchanged: the larger candidates simply don't fit, so it
falls through to the current shrink path and overflow warning (#12
preserved). The chosen size is captured from the adjusted preview and
re-applied identically to the printed snapshot via a per-card scoped style,
so print matches preview and is independent of the preview zoom.

Scope: creatures editor only (portrait and landscape). Documented in the
README and CHANGELOG.

Verified (headless): short card grows (Zombie 10px), default unchanged
(Wight 7px), landscape respects its max (Vampire 9px), long content stays
at 4.5px with the overflow warning; preview == print in every case and
across zoom x0.5–x4; 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 36b5857f47 into develop 2026-07-01 08:44:18 +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#48
No description provided.