# GAB-356 · MotivationLearningProgressCelebration — « Célébrer un progrès »

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

## Pack (structure officielle par-GAB)
```
GAB-356/
  renderer.html            ← moteur célébration (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` · `celebration_id` · `progress_proof` · `tone_options[]{id,label,panel_class,message,next_action}` · `partial_progress_label` · `partial_progress_message`

Optionnels : `doc_kind`, `tone_prompt`, `slots`, `use_when`, `do_not_use_when`.

## Ce qui vient du JSON vs HTML
- **JSON** : preuve de progrès (texte + chiffres), libellé de catégorie, question de ton, options de ton avec leurs messages et next actions, message progrès partiel.
- **HTML** : moteur chips/panels, layout, logique affichage/état, BLOCKED guard.

## Archétype pédagogique
Célébration d'un **progrès prouvé** : on présente la preuve mesurable (avant/après), on propose deux tons contrastés (sincère vs surenchère), et on valorise aussi les progrès partiels. Le message de célébration est proportionné et suivi d'une next action concrète.

## Garde-fous (child_safety)
- **Anti-surenchère** : le ton excessif est affiché comme `warn` — visiblement contre-productif.
- **Preuve obligatoire** : `progress_proof` requis — on ne célèbre jamais sans donnée mesurable (BLOCKED sinon).
- **Progrès partiel valorisé** : `partial_progress_message` valorise le chemin sans minimiser ni surjouer.
- **BLOCKED** si `progress_proof` absent / `tone_options` vides / `celebration_id` absent.

## QA à vérifier
1. Modifier `progress_proof` → rendu change sans toucher au HTML (critère d'or).
2. `tone_options:[]` → BLOCKED propre.
3. Clic "Sincère & mesuré" → panel ok + next_action visible.
4. Clic "Surenchère totale" → panel warn, next_action null = pas affiché.
5. Clic progrès partiel → panel ok avec `partial_progress_message`.
6. Responsive 375/768/1024.

## external_refs / dependencies
- GAB-357 (MotivationLearningBadgeUnlock) : le `do_not_use_when` mentionne explicitement "débloquer un badge → GAB-357". Les deux GAB sont distincts : GAB-356 célèbre un progrès, GAB-357 débloque un badge sur critères prouvés. Pas de dépendance technique, référence éditoriale uniquement.

## Source
`INDEX-300-motivationlearning-GAB-356-360-PLAYABLE.html` (stage `data-tpl="356"`, handlers `d356Tone`, `d356Partial`).
