# GAB-069 · StoryReadingSimpleMode — « Mode lecture simplifiée »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechStoryLearning
**Critère validé :** changer le JSON change le texte, les tags et le libellé du bouton sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-069/
  renderer.html            ← moteur lecture simplifiée (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` · `reading_mode_id` · `toggle_label` · `text_normal` · `text_simplified` · `primary_cta{label,action}`
Optionnels : `tag_normal`, `tag_simplified`, `accessibility{aria_label_toggle_off, aria_label_toggle_on}`.

## Ce qui vient du JSON vs HTML
- **JSON** : les deux versions de texte (`text_normal`, `text_simplified`), les tags labels (`tag_normal`, `tag_simplified`), le libellé du toggle (`toggle_label`), le libellé du bouton CTA (`primary_cta.label`), les aria-labels d'accessibilité.
- **HTML** : layout du toggle, bascule CSS (`.simplified`), transitions, bouton structurel, moteur ENGINE.

## Comportement du moteur
1. **Défaut** : mode normal, affiche `text_normal` + `tag_normal`, toggle OFF.
2. **Toggle activé** : fond passe à `mint-soft`, texte grossit légèrement (`font-size:16px`, `line-height:1.9`), tag et texte basculent vers version simplifiée.
3. **Toggle re-désactivé** : retour exact à l'état normal.
4. **CTA** : affiche un panel indiquant l'`action` (non-navigant dans ce renderer, câblé côté moteur narrative).

## Garde-fous (child_safety)
- **Anti-invention** : `text_normal` et `text_simplified` extraits tels quels du source HTML. Aucun texte en dur dans le moteur.
- **Accessibilité** : `aria-pressed` dynamique, `aria-label` bascule ON/OFF depuis l'instance.
- **BLOCKED** si `text_normal` / `text_simplified` / `primary_cta` absents.
- **text_simplified** doit couvrir le MÊME contenu pédagogique que `text_normal` — charge cognitive réduite, sens préservé.

## QA à vérifier
1. Modifier `text_normal`/`text_simplified` → rendu change sans toucher au HTML (critère d'or).
2. `text_normal` absent → BLOCKED propre.
3. Toggle activé → tag + fond + texte basculent correctement.
4. Toggle désactivé → retour exact au texte normal.
5. `init(ext)` avec instance externe → rendu mis à jour.
6. Responsive 375/768/1024.

## Source
`INDEX-300-storylearning-GAB-065-069-PLAYABLE.html` (stage `data-tpl="69"`, handler `simpleFlip`, constantes `SIMPLE_NORMAL` / `SIMPLE_EASY`).

## external_refs / dependencies
Aucune dépendance hors-lot. GAB-069 est autonome dans EdTechStoryLearning.
Référence contextuelle dans la source : `mode rapide moteur (→ ENG-019)` — ENG-019 est un moteur distinct, hors périmètre de ce pack.
