# GAB-320 · RevisionLearningEmptyState — « État vide (aucune révision) »

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

## Pack (structure officielle par-GAB)
```
GAB-320/
  renderer.html            ← moteur état vide (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
**Empty-state + CTA multi-action.** Affiché quand la banque de révision est vide. L'écran ne laisse jamais l'élève sans issue : il propose un choix d'actions utiles (activité libre, génération prudente, signalement admin). Ce gabarit est un **état d'exception** — si des items de révision existent, utiliser GAB-312 à la place.

## Champs requis (instance, à plat)
`gab_id` · `empty_state_id` · `actions[]{id, label, feedback, is_report?}`

Optionnels : `title`, `subtitle`, `cause_diagnostic`, `prompt_label`, `fallback_text_summary`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, diagnostic de cause, libellé de l'invite, liste complète des chips (label + feedback), style de feedback (is_report).
- **HTML** : layout doc-paper, rendu chips, panel feedback, slots, footer — strictement structurel.

## Garde-fous (child_safety)
- **Jamais d'écran vide** : `actions` vide → BLOCKED immédiat, l'élève ne peut pas se retrouver face à un écran sans issue.
- **Génération prudente uniquement** : une action de génération de cartes doit mentionner explicitement la prudence et la validation dans son `feedback`.
- **Signalement non-culpabilisant** : `is_report:true` → feedback orienté admin, message élève simple et positif (« profite ! »), sans exposer le problème technique.
- **Pas de surcharge** : ce GAB ne gère que l'état vide avéré. Si des items existent → GAB-312.

## QA à vérifier
1. Modifier `title` / `actions[].label` → rendu change sans toucher au HTML (critère d'or).
2. `actions:[]` → BLOCKED propre.
3. Clic « Activité libre » → panel class `ok` + feedback correspondant.
4. Clic « Signaler à l'admin » (`is_report:true`) → panel class `note` + feedback admin.
5. Instance externe injectée via `init(ext)` → rendu correct.
6. Responsive 375/768/1024 — chips empilées sur mobile, 0 débordement.

## Source
`INDEX-300-revisionlearning-GAB-316-320-PLAYABLE.html` (stage `data-tpl="320"`, handlers `d320Act`, `d320Report`).


## external_refs / dependencies
Réfs à d'autres GAB présentes dans le contenu de CET écran (navigation/prérequis pédagogiques extraits de la source, PAS des GAB à convertir ici) :
- GAB-312
