# GAB-030 · ErrorFallbackBlock — « Fallback d'erreur transverse »

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

## Pack (structure officielle par-GAB)
```
GAB-030/
  renderer.html            ← moteur fallback d'erreur (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` · `error_fallback_id` · `error_title` · `fallback_text` · `primary_cta{label,action}`

Optionnels : `error_subtitle`, `error_icon`, `fallback_label`, `retry_cta{label,action}`, `feedback_continue`, `feedback_retry`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre de l'erreur, sous-titre rassurant, icône, libellé de la zone de secours, texte de secours, libellé et action des deux boutons, messages feedback post-clic.
- **HTML** : carte de fallback, tête icône+titre, zone de secours, boutons structurels, zone feedback, layout responsive.

## Archétype
`ErrorFallbackBlock` est un bloc **utilitaire transverse** EdTechPlayKit : il s'insère dans n'importe quelle session lorsqu'un sous-bloc ou une ressource (vidéo, image, iFrame) ne s'affiche pas. L'erreur est **non bloquante** : l'élève peut continuer via le contenu textuel de secours.

## Garde-fous
- **BLOCKED** si `error_title`, `fallback_text` ou `primary_cta` absent — le bloc ne peut pas guider l'élève sans ces trois champs.
- `retry_cta` est optionnel : si absent, le bouton « Réessayer » n'est pas rendu (pas d'élément fantôme).
- Le bloc n'est **pas** un remplacement d'erreur moteur (→ ENG-011) ni de perte réseau (→ ENG-009).
- Ne pas utiliser pour un état vide normal (→ GAB-029).

## QA à vérifier
1. Modifier `error_title` → rendu change sans toucher au HTML (critère d'or).
2. `error_title` absent → BLOCKED propre.
3. `retry_cta` absent → un seul bouton rendu.
4. Clic « Continuer » → `feedback_continue` affiché en vert mint.
5. Clic « Réessayer » → `feedback_retry` affiché en or gold.
6. Responsive 375/768/1024 — boutons empilés sur mobile.

## Source
`INDEX-300-playkit-GAB-026-030-PLAYABLE.html` (stage `data-tpl="30"`, handler `errfAct`).
