# GAB-070 · StoryReadingFastSkip — « Lecture rapide / saut de scène »

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

## Pack (structure officielle par-GAB)
```
GAB-070/
  renderer.html            ← moteur lecture rapide (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` · `story_reading_fast_skip_id` · `body` · `summary` · `primary_cta{label,action}` · `skip_cta{label,action}`
Optionnel : `title`.

## Ce qui vient du JSON vs HTML
- **JSON** : texte long (`body`), version essentielle (`summary`), libellés des deux boutons (`primary_cta.label`, `skip_cta.label`), titre.
- **HTML** : structure card, logique collapsed/expanded, animation slide-in de l'essentiel, responsive, fallback BLOCKED.

## Comportement moteur
1. `body` affiché collapsed par défaut (max-height 72px + dégradé).
2. Clic `primary_cta` → `body` expand complet, `essential` masqué.
3. Clic `skip_cta` → `body` recollapsed, `essential` affiché (bande magenta, animation).
4. Les libellés des boutons viennent exclusivement de `primary_cta.label` / `skip_cta.label`.

## Garde-fous (child_safety)
- **Anti-invention** : `summary` doit être une condensation fidèle de `body` — jamais inventée par le renderer.
- **BLOCKED** si `body`, `summary`, `primary_cta` ou `skip_cta` absent.
- Texte toujours visible (pas de contenu uniquement CSS).

## QA à vérifier
1. Modifier `body`/`summary` → rendu change sans toucher au HTML (critère d'or).
2. `body` absent → BLOCKED propre.
3. Clic skip → essentiel visible + body collapsed.
4. Clic read → body dépliée entièrement.
5. Instance externe injectée via `ENGINE.init(ext)` → rendu change sans modifier le HTML.
6. Responsive 375/768/1024 : aucun débordement horizontal.

## Source
`INDEX-300-storylearning-GAB-070-073-PLAYABLE.html` (stage `data-tpl="70"`, handlers `fskRead`/`fskSkip`).

## external_refs / dependencies
Aucune dépendance hors-lot. Gabarit autonome dans le lot `LOT-storylearning-GAB-070-073`.
