# GAB-016 · SessionExitConfirm — « Confirmation de sortie »

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

## Pack (structure officielle par-GAB)
```
GAB-016/
  renderer.html            ← moteur modale sortie (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` · `session_exit_id` · `title` · `body` · `primary_cta{label,action}` · `secondary_cta{label,action}`

Optionnels : `icon`, `progress{current_step,total_steps}`

## Ce qui vient du JSON vs HTML
- **JSON** : titre de la modale, corps explicatif, libellé du bouton rester, libellé du bouton quitter, badge progression, icône.
- **HTML** : structure de la modale, overlay semi-transparent, disposition des boutons, styles DS V2, logique retrigger.

## Archétype
Modale de confirmation d'intention de sortie (UX pattern : gate). Ton attention coral doux (couleur d'alerte douce, pas d'erreur critique). Deux CTA structurels : primary = maintien (violet), secondary = sortie (coral outline).

## Garde-fous
- **V1_CORE · S · P0** : GAB critique, toujours présent quand la session est quittable.
- **Ne pas confondre** avec :
  - GAB-007 (pause simple — pas de risque de perte)
  - GAB-013 (fin de session nominale)
  - GAB-017 (saut d'une étape, pas une sortie complète)
- **BLOCKED** si `title`, `body`, `primary_cta` ou `secondary_cta` absent.
- `progress` optionnel mais recommandé pour rassurer l'élève sur la sauvegarde.

## QA à vérifier
1. Modifier `title`/`body`/`primary_cta.label` → rendu change sans toucher au HTML.
2. Supprimer `title` → BLOCKED propre avec message lisible.
3. Clic primary_cta → overlay masqué, feedback mint, bouton retrigger.
4. Clic secondary_cta → overlay masqué, feedback coral, bouton retrigger.
5. Retrigger → modale réapparaît.
6. `progress` présent → badge "Étape X / Y" visible.
7. Responsive 375/768/1024 — modale centrée, pas de débordement.

## Source
`INDEX-300-playengine-GAB-016-020-PLAYABLE.html` (stage `data-tpl="16"`, handlers `exitClose`, `exitShow`).

## external_refs / dependencies
- GAB-007 : pause simple (alternative si sortie temporaire sans risque de perte)
- GAB-013 : fin de session (alternative si l'élève a terminé normalement)
- GAB-017 : saut d'étape (alternative si l'action est de skipper, pas de quitter)
- GAB-018 : barre de navigation (contexte d'appel du bouton quit → GAB-016)
