feat(cards): adaptive body text for feats, species, origins (#80) #81

Merged
Reliodas merged 1 commit from feat/80-adaptive-text-more-editors into develop 2026-07-07 10:13:50 +00:00
Owner

Étend la stratégie de taille adaptative (#72, déjà utilisée par creatures/spells) aux dons, espèces et origines (#80).

Comportement

  • Carte courte : le texte du corps s'agrandit (jusqu'à 10px) pour combler l'espace vide au lieu de garder une petite police.
  • Carte longue : le texte se réduit progressivement (jusqu'à 4,5px) ; un avertissement s'affiche si ça déborde encore au minimum.
  • Impression = aperçu : la taille retenue est capturée dans le snapshot et réappliquée au panier et au recto/verso aligné (via un <style> scopé par carte). Le zoom d'aperçu n'affecte pas l'impression.

Implémentation

Chaque éditeur réplique le pattern de spells.html : {type}BodyFitCss(scope, fs) scopé, taille naturelle propre (7px dons/origines, 8px espèces ; plage dans shared.js), fit{Type}Body() en fin d'updatePreview mesurant le contenu réel (pas le conteneur flex) vs hauteur utile du corps. origins mesure ses sections + flavor hors .origin-spacer.

Quand le corps est agrandi, les labels/titres suivent la même proportion (label « Prérequis » des dons, titres de section des origines), et le nom de don est stylé comme le contenu des autres catégories (EB Garamond régulier) pour rester aligné — pas un titre en gras qui dominerait.

Hors périmètre (inchangé)

equipment.html ; le verso des classes/sous-classes (paginé, #73) plutôt que réduit.

Tests

checkBodyFitExamples (visual-validation) pour les 3 éditeurs : un préréglage court doit agrandir au-dessus du naturel, un corps long injecté doit réduire en dessous, l'impression doit réappliquer la taille, et un débordement au minimum doit afficher l'avertissement. Garde-fou validé (échoue si l'appel au fit est retiré).

Docs

README, AGENTS.md et CHANGELOG listent les éditeurs couverts et le hors-périmètre.

node scripts/smoke-test.js · node tests/visual-validation.js

Réf. #80

🤖 Generated with Claude Code

Étend la stratégie de taille adaptative (#72, déjà utilisée par creatures/spells) aux **dons, espèces et origines** (#80). ## Comportement - **Carte courte** : le texte du corps s'**agrandit** (jusqu'à 10px) pour combler l'espace vide au lieu de garder une petite police. - **Carte longue** : le texte se **réduit** progressivement (jusqu'à 4,5px) ; un **avertissement** s'affiche si ça déborde encore au minimum. - **Impression = aperçu** : la taille retenue est capturée dans le snapshot et réappliquée au panier et au recto/verso aligné (via un `<style>` scopé par carte). Le zoom d'aperçu n'affecte pas l'impression. ## Implémentation Chaque éditeur réplique le pattern de `spells.html` : `{type}BodyFitCss(scope, fs)` scopé, taille naturelle propre (7px dons/origines, 8px espèces ; plage dans `shared.js`), `fit{Type}Body()` en fin d'`updatePreview` mesurant le **contenu réel** (pas le conteneur flex) vs hauteur utile du corps. origins mesure ses sections + flavor **hors** `.origin-spacer`. Quand le corps est agrandi, les **labels/titres suivent** la même proportion (label « Prérequis » des dons, titres de section des origines), et le **nom de don** est stylé comme le contenu des autres catégories (EB Garamond régulier) pour rester aligné — pas un titre en gras qui dominerait. ## Hors périmètre (inchangé) `equipment.html` ; le verso des classes/sous-classes (paginé, #73) plutôt que réduit. ## Tests `checkBodyFitExamples` (visual-validation) pour les 3 éditeurs : un préréglage court doit agrandir au-dessus du naturel, un corps long injecté doit réduire en dessous, l'impression doit réappliquer la taille, et un débordement au minimum doit afficher l'avertissement. **Garde-fou validé** (échoue si l'appel au fit est retiré). ## Docs README, AGENTS.md et CHANGELOG listent les éditeurs couverts et le hors-périmètre. `node scripts/smoke-test.js` ✅ · `node tests/visual-validation.js` ✅ Réf. #80 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(cards): adaptive body text for feats, species, origins (#80)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
6869539b86
Extend the shared adaptive-text strategy (#72, used by creatures/spells) to
feats.html, species.html and origins.html so short cards enlarge their body text
to fill empty space instead of keeping a small fixed font, and long cards shrink
progressively.

Each editor mirrors the spells.html pattern: a scoped {type}BodyFitCss(scope, fs)
(natural size 7px for feats/origins, 8px for species; the range lives in shared.js
CARD_TEXT_FIT_SIZES), a fit{Type}Body() run at the end of updatePreview that
measures the real content (not the flex:1 container) against the body's inner
height, an .overflow-warning shown via .is-overflow when even the minimum size
overflows, and the retained size captured in the snapshot and reapplied to print
(queue + aligned recto/verso) through a card-scoped <style>. origins measures its
sections + flavor box, excluding the flex spacer.

When the body is enlarged, labels/titles scale with it (proportionally for
feats' "Prérequis" label and origins' section titles) so they don't look too
small next to the content, and the origin feat name is styled like the other
section contents (regular EB Garamond) instead of a bold heading, so it reads as
a section value aligned with the other categories at any size.

Out of scope (unchanged): equipment.html, and the class/subclass backs that are
paginated (#73) rather than shrunk.

Tests: visual-validation gains checkBodyFitExamples for the three editors — a
short real preset must enlarge above natural, an injected long body must shrink
below natural, print must reapply the chosen size, and overflow at the minimum
must show the warning (verified to fail when the fit call is removed).

Docs: README, AGENTS.md and CHANGELOG list the newly covered editors and what
stays out of scope.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 0628250a82 into develop 2026-07-07 10:13:50 +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#81
No description provided.