# GAB-097 · VisualProgressiveReveal — « Révélation progressive »

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

## Pack (structure officielle par-GAB)
```
GAB-097/
  renderer.html            ← moteur révélation progressive (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` · `reveal_id` · `title` · `steps[]{num, text, pre_revealed}`

Optionnels : `cta_label`, `cta_done_label`, `caption`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque étape (num + texte), statut pré-révélé de l'amorce, libellé du bouton actif, libellé bouton terminé, légende.
- **HTML** : liste de layers, bouton structurel, transitions CSS, layout — jamais de contenu pédagogique en dur.

## Archétype
Révélation progressive couche par couche : l'apprenant découvre les étapes d'un processus ou d'un raisonnement une à une via un bouton. L'étape 1 est toujours pré-révélée (amorce visible). Le bouton se désactive et change de libellé une fois toutes les étapes révélées.

## Garde-fous (child_safety)
- **Anti-surcharge** : chaque étape est courte (label concis, pas de paragraphe).
- **Amorce obligatoire** : au moins 1 step porte `pre_revealed:true` pour éviter un écran vide.
- **BLOCKED** si `steps` absent/vide ou `reveal_id` absent.
- **Pas de notation** : ce gabarit est pédagogique (dévoilement), non évaluatif — ne pas scorer ici (→ module Quiz/Exercise).

## QA à vérifier
1. Modifier un `text` ou `num` → rendu change sans toucher au HTML (critère d'or).
2. `steps:[]` → BLOCKED propre.
3. `reveal_id` absent → BLOCKED.
4. Clic bouton jusqu'à la fin → bouton désactivé avec `cta_done_label`.
5. `instance externe` injectée via `ENGINE.init(ext)` → rendu change.
6. Responsive 375/768/1024 — aucun débordement horizontal.

## Source
`INDEX-300-visuallearning-GAB-096-100-PLAYABLE.html` (stage `data-tpl="97"`, handler `prReveal()`).

## external_refs / dependencies
Aucune dépendance externe hors-lot. Ce GAB est autonome (moteur inline).
