# GAB-127 · ExerciseHintPanel — « Panneau d'indice »

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

## Pack (structure officielle par-GAB)
```
GAB-127/
  renderer.html            ← moteur panneau d'indice (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` · `hint_panel_id` · `title` · `initial_hint` · `hints[]` · `cta_continue` · `cta_more`
Optionnels : `icon`, `cost_label`, `cost_icon`, `cta_no_more`.

## Ce qui vient du JSON vs HTML
- **JSON** : texte de chaque indice (initial + progressifs), libellé du coût, icône, libellé des boutons.
- **HTML** : layout carte, bordure gauche dorée, logique de révélation progressive, état désactivé des boutons.

## Comportement du moteur
1. `initial_hint` est affiché au chargement.
2. Clic sur le bouton « Un autre indice » révèle `hints[0]`, puis `hints[1]`, etc.
3. Quand `hints[]` est épuisé, le bouton passe en état désactivé avec le texte `cta_no_more`.
4. Clic sur « Continuer sans plus » confirme l'action et désactive le bouton.

## Garde-fous (child_safety)
- **Anti-invention** : `hints[]` extrait intégralement du HTML source (`HP_HINTS` array).
- **BLOCKED** si `title`, `initial_hint` ou `hints` absents.
- `hints[]` vide `[]` est autorisé (bouton « indice suivant » désactivé d'emblée).

## QA à vérifier
1. Modifier un élément de `hints[]` → texte change sans toucher au HTML (critère d'or).
2. `title` absent → BLOCKED propre.
3. `hints:[]` → bouton plus d'indice désactivé immédiatement.
4. Clic répété → chaque hint révélé dans l'ordre, bouton désactivé après le dernier.
5. `init(extInstance)` → rendu change sans recharger la page.
6. Responsive 375/768/1024.

## external_refs / dependencies
- **GAB-113** : indice mémoire personnel (ne pas confondre — GAB-127 = aide pendant exercice noté).
- **GAB-128** : solution étape par étape (plus détaillée que GAB-127).
- **GAB-026** : callout générique (ne pas utiliser à la place de GAB-127 pour un indice contextuel).

## Source
`INDEX-300-exerciselearning-GAB-126-130-PLAYABLE.html` (bloc `<!-- GAB-127 -->`, handlers `hpMoreHint` / `hpContinue`, array `HP_HINTS`).
