# GAB-072 · StoryCastCharacterCard — « Cast de personnages »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechStoryLearning
**Critère validé :** changer le JSON change le cast sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-072/
  renderer.html            ← moteur carte cast (ne pas modifier par instance)
  instance.example.json    ← SOURCE DE VÉRITÉ (contenu réel, à plat)
  schema.contract.json     ← contrat de validation
  README-contract.md       ← ce fichier
```

## Champs requis (instance, à plat)
`gab_id` · `cast_card_id` · `title` · `members[]{id,avatar,name,tag,role_description,member_type}`

Optionnels : `cta_label`, `cta_action`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque personnage (avatar, nom, tag, description), le libellé du bouton.
- **HTML** : grille de membres, coloration par `member_type`, layout, fallback BLOCKED.

## Garde-fous (child_safety)
- **Anti-invention** : avatars, noms et rôles extraits fidèlement du HTML source. Aucun personnage inventé.
- **BLOCKED** si `members` absent/vide ou contient moins de 2 membres.
- **member_type** : `ai_guide` → gradient magenta/violet ; `fictional` → alternance gold/coral et sky/sky-deep.
- **Usage unique** : si 1 seul personnage → rediriger vers GAB-053 ; si dialogue en cours → GAB-047.

## QA à vérifier
1. Modifier un `name`/`role_description` → rendu change sans toucher au HTML (critère d'or).
2. `members:[]` → BLOCKED propre.
3. `members.length < 2` → BLOCKED avec message GAB-053.
4. `member_type:'ai_guide'` → fond magenta/violet.
5. CTA absent → libellé par défaut 'Continuer'.
6. Responsive 375/768/1024.

## Source
`INDEX-300-storylearning-GAB-070-073-PLAYABLE.html` (stage `data-tpl="72"`, section `<!-- GAB-072 -->`).

## external_refs / dependencies
- **GAB-053** (SingleCharacterCard) — à utiliser si 1 seul personnage à présenter.
- **GAB-047** (DialogueBubble) — à utiliser si dialogue en cours entre personnages.
- **GAB-045 → GAB-073** — périmètre complet EdTechStoryLearning (29 gabarits, module 3/12).
