# GAB-052 · StoryMiniLesson — « Mini-leçon intégrée »

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

## Pack (structure officielle par-GAB)
```
GAB-052/
  renderer.html            ← moteur mini-leçon (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
```

## Archétype
Mini-leçon structurée intégrée à un épisode narratif. Affiche un icône + titre + phrase d'introduction contextuelle + liste de points clés numérotés avec label gras et détail. Bouton CTA pour progresser.

**Usage typique :** après une scène immersive (choix/révélation), synthétiser en 2–5 points les notions clés qui viennent d'être vécues dans le récit.

**Ne pas utiliser quand :** cours complet (→ module Visual/Exercise), révélation choc (→ GAB-051), explication par personnage (→ GAB-053).

## Champs requis (instance, à plat)
`gab_id` · `lesson_id` · `title` · `intro` · `key_points[]{num, label, detail}`

Optionnels : `icon`, `primary_cta{label, action}`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre de la leçon, icône, phrase d'intro, chaque point (numéro + label + détail), libellé du bouton CTA.
- **HTML** : layout carte, numéros stylisés, animation stagger, bouton structurel.

## Garde-fous (child_safety)
- **Anti-invention :** contenu extrait strictement du HTML source — aucun point pédagogique inventé.
- **BLOCKED** si `key_points` vide, `title` absent, `intro` absent, `lesson_id` absent ou `gab_id` absent.
- Contenu niveau collège/lycée — neutre, factuel, historique.

## QA à vérifier
1. Modifier un `label`/`detail` dans l'instance → rendu change sans toucher au HTML (critère d'or).
2. `key_points:[]` → BLOCKED propre.
3. Instance externe injectée via `ENGINE.init(data)` → rendu mis à jour.
4. Bouton CTA libellé = `primary_cta.label` du JSON.
5. Responsive 375/768/1024 — aucun débordement horizontal.

## Source
`INDEX-300-storylearning-GAB-050-054-PLAYABLE.html` (stage `data-tpl="52"`, section `<!-- GAB-052 -->`).
