# GAB-138 · InteractiveSimulationSimple — « Simulation simple »

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

## Pack (structure officielle par-GAB)
```
GAB-138/
  renderer.html            ← moteur simulation simple (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
```

## Archétype
Simulation discrète : l'apprenant sélectionne un état parmi N options (typiquement 3 : bas/moyen/haut) et observe immédiatement la valeur de sortie, la barre de progression et le texte résultat. Le moteur est data-driven : aucun contenu n'est codé en dur dans le HTML.

## Champs requis (instance, à plat)
`gab_id` · `simulation_id` · `instruction` · `factor_label` · `states[]{key, label, output_value, output_bar_pct, result_text}` · `output_label`

Optionnels : `primary_cta{label, action}`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : libellé du facteur, libellé de chaque état, valeur numérique, pourcentage de barre, texte résultat, libellé du CTA.
- **HTML** : contrôle boutons, zone de visualisation (valeur + barre), zone résultat, layout.

## Garde-fous
- **BLOCKED** si `simulation_id` absent, `states` vide/absent, ou `factor_label` absent.
- `output_bar_pct` est capé dans [0, 100] par le moteur — jamais de dépassement.
- L'état `default:true` est appliqué au chargement ; à défaut, `states[0]` est utilisé.
- Aucune ombre `rgba(0,0,0,…)` — DS V2 strict (ombres colorées uniquement).

## QA à vérifier
1. Modifier `result_text` / `output_value` → rendu change sans toucher au HTML (critère d'or).
2. `states:[]` → BLOCKED propre.
3. `simulation_id` absent → BLOCKED propre.
4. Clic état `low` → valeur 35, barre 25%, texte déclinant.
5. Clic état `high` → valeur 175, barre 90%, texte croissance.
6. CTA → réinitialise à l'état `default`.
7. Responsive 375/768/1024.

## Source
`INDEX-300-interactivelearning-GAB-136-140-PLAYABLE.html` (stage `data-tpl="138"`, handler `ssPick`, data object `SS_DATA`).
