# GAB-005 · SessionStepTransition — « Transition entre deux étapes »

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

## Pack (structure officielle par-GAB)
```
GAB-005/
  renderer.html            ← moteur transition (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` · `transition_id` · `body` · `next_action`

Optionnels : `title`, `hint`, `icon_from`, `icon_to`, `label_from`, `label_to`, `progress`.

## Ce qui vient du JSON vs HTML
- **JSON** : texte narratif (`body`), phrase secondaire (`hint`), libellé du bouton (`next_action`), icônes et labels from/to.
- **HTML** : layout carte, zone from/to animée, flèche, bouton structurel, fallback BLOCKED.

## Garde-fous
- **BLOCKED** si `body` absent/vide ou `next_action` absent/vide.
- **Icônes from/to** : zone masquée si l'un des deux est absent (les deux nécessaires).
- **Labels from/to** : affichés seulement si icon_from et icon_to présents.
- **progress** : optionnel, non affiché dans ce renderer (slot réservé pour composition avec GAB-004).
- **Ombres colorées uniquement** (DS V2) — aucune rgba(0,0,0,…).

## QA à vérifier
1. Modifier `body`/`hint`/`next_action` → rendu change sans toucher au HTML (critère d'or).
2. `body` absent → BLOCKED propre.
3. `next_action` absent → BLOCKED propre.
4. `icon_from` présent sans `icon_to` → zone from/to masquée.
5. Responsive 375/768/1024 (flèche pivotée en colonne mobile).

## Source
`INDEX-300-playengine-GAB-001-005-PLAYABLE.html` (stage `data-tpl="5"`, bloc `<!-- GAB-005 -->`).

## external_refs / dependencies
- **GAB-003** (SessionStepPlayerShell) : shell contenant une session — la transition s'insère entre deux steps du shell.
- **GAB-004** (SessionProgressHeader) : header de progression — `progress` slot de GAB-005 prévu pour composition future avec GAB-004.
- **KIT-032** (récompense/recap) : cas exclu — si l'écran est un résumé de fin, utiliser KIT-032, pas GAB-005.
- **STO-084** (cliffhanger narratif) : cas exclu — pour suspens narratif, préférer STO-084.
