# GAB-153 · GameRulePanel — « Panneau de règles »

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

## Pack (structure officielle par-GAB)
```
GAB-153/
  renderer.html            ← moteur panneau de règles (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` · `rule_panel_id` · `title` · `instruction` · `items[]{type,icon,heading,text}`
Optionnels : `primary_cta{label,action}`, `examples`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, instruction, chaque règle (type/icône/heading/texte), libellé du bouton CTA.
- **HTML** : grille de règles, coloration par type (ok/ko/score/info), bouton structurel, layout, BLOCKED.

## Types de règles supportés
| type | couleur | usage |
|------|---------|-------|
| `ok` | menthe | bonne action / validation |
| `ko` | corail | erreur / malus |
| `score` | or | points / scoring |
| `info` | ciel | limites / contraintes générales |

## Garde-fous (child_safety)
- **BLOCKED** si `items` vide ou absent / `title` absent / `instruction` absent.
- `items[].type` hors enum → rétrogradé silencieusement à `info` (jamais crash).
- `primary_cta` absent → bouton masqué (`hidden`), jamais erreur.
- Le panneau est non-noté : aucun score officiel ni note bulletin.

## QA à vérifier
1. Modifier un `heading`/`text` d'un item → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre affiché.
3. `primary_cta` absent → bouton masqué, pas d'erreur.
4. `init(ext)` avec instance externe → rendu change (injection data-driven).
5. Responsive 375/768/1024 — grille 1 col sur 375, 2 col sur 768+.

## Source
`INDEX-300-gamelearning-GAB-151-155-PLAYABLE.html` (stage `data-tpl="153"`, CSS `.gr-*`).
Slots déclarés dans la source : `title` (req), `instruction` (req), `items` (req), `examples` (opt).

## external_refs / dependencies
- GAB-154 (GameActionChallenge) : ce panneau de règles est typiquement affiché AVANT GAB-154.
- GAB-155 (GameResultFeedback) : affiché après la session de jeu, en complément.
- ENG-009 : règles de méta-app (hors périmètre GAB-153).
- GAB-117 : consigne d'exercice (hors périmètre — use_when distinct).
