# GAB-390 · MediaLearningMediaEmptyState — « Média indisponible »

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

## Pack (structure officielle par-GAB)
```
GAB-390/
  renderer.html            ← moteur état vide média (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` · `empty_state_id` · `title` · `body` · `actions[]{id, label, feedback_type, feedback_text}`

Optionnels : `prompt_actions`, `no_fake_media_guard`, `fallback_text_summary`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, corps, libellé prompt, liste des actions (label + type de panneau + texte de retour).
- **HTML** : carte vide, zone chips, rendu du panneau de retour, layout, slots summary.

## Archétype
État vide / fallback pédagogique. Pas de faux média. Trois actions proposables :
1. **Alternative texte** → panneau `ok` (description écrite équivalente, pédagogiquement utile).
2. **Cas bloqué par droits** → panneau `warn` (média existe mais non diffusable, alternative libre proposée).
3. **Signalement admin** → panneau `note` (log admin séparé, message élève neutre).

## Garde-fous (child_safety / no_fake_media)
- **Règle absolue** : aucun faux média ne doit être affiché, quelle que soit la valeur de `no_fake_media_guard`.
- **BLOCKED** si `actions` est absent ou vide / `title` absent / `empty_state_id` absent.
- `feedback_type` contraint à `ok | warn | note` — le rendu du panneau en dépend directement.

## QA à vérifier
1. Modifier un `feedback_text` → panneau change sans toucher au HTML (critère d'or).
2. `actions:[]` → BLOCKED propre.
3. `title` absent → BLOCKED propre.
4. Clic "Cas : bloqué par droits" → panneau `warn` (fond doré).
5. Clic "Alternative texte" → panneau `ok` (fond menthe).
6. Clic "Signaler à l'admin" → panneau `note` (fond surface).
7. Responsive 375/768/1024 — chips passent en colonne mobile.

## Source
`INDEX-300-medialearning-GAB-386-390-PLAYABLE.html` (stage `data-tpl="390"`, handlers `d390Act`, `d390Rights`, `d390Report`).
