# GAB-157 · GamePowerUpEducational — « Power-up pédagogique »

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

## Pack (structure officielle par-GAB)
```
GAB-157/
  renderer.html            ← moteur power-ups (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` · `powerup_id` · `instruction` · `items[]{id,icon,label,description,cost_label,cost_value,locked,feedback_msg}`

Optionnels : `title`, `doctrine_hint`, `primary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque power-up (icône, titre, description, coût, état verrouillé), l'instruction d'en-tête, la doctrine hint, le feedback affiché après activation.
- **HTML** : grille 2 colonnes, styles visuels, états `used`/`locked`, moteur d'activation, layout responsive.

## Garde-fous (child_safety / doctrine pédagogique)
- **Anti-triche** : un power-up éclaire la MÉTHODE, il n'achète jamais la bonne réponse. Le `feedback_msg` doit rester une aide méthodologique.
- **Locked items** : `locked:true` = `aria-disabled="true"` + aucun feedback (feedback_msg null).
- **Idempotent** : un item déjà utilisé (classe `used`) ne peut pas être réactivé.
- **BLOCKED** si `items` vide / `instruction` absente / `powerup_id` absent.

## QA à vérifier
1. Modifier un `label`/`feedback_msg` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. Cliquer un item locked → aucun feedback, aucune classe `used`.
4. Cliquer un item normal → feedback affiché, item passe en `used`, second clic inactif.
5. Responsive 375/768/1024 : grille 1 col mobile, 2 cols desktop, aucun débordement.

## Source
`INDEX-300-gamelearning-GAB-156-160-PLAYABLE.html` (stage `data-tpl="157"`, handler `puUse`, données `PU_DATA`).

## external_refs / dependencies
- GAB-127 : indice qui donne la réponse directe (cas où un power-up ne doit PAS être utilisé → renvoyer vers GAB-127).
- GAB-039 : aide PlayKit globale (cas d'aide au niveau du mini-jeu entier, différent du power-up contextuel).
