# GAB-031 · NextActionCTA — « Proposition d'action suivante »

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

## Pack (structure officielle par-GAB)
```
GAB-031/
  renderer.html            ← moteur carte action suivante (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` · `next_action_id` · `title` · `primary_action{icon,label,action_title,action}` · `alternatives[]{icon,label,action}`

Optionnels : `renderer_key`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre de la carte, icône/label/titre de l'action principale, liste des alternatives avec icônes et libellés.
- **HTML** : layout carte, mise en forme flèche, feedback textuel au clic, grille alternatives, moteur BLOCKED.

## Archétype
GAB-031 est un **CTA directionnel post-contenu** : 1 action principale mise en avant (recommandée) + 2 à N alternatives secondaires. S'utilise après un cours, une étape ou une session pour orienter l'élève vers la suite la plus utile.

## Garde-fous (child_safety)
- **BLOCKED** si `title` absent / `primary_action` absent / `alternatives` vides.
- **Anti-invention** : aucun libellé, aucune action, aucun parcours n'est codé en dur dans le HTML.
- **Feedback neutre** : le feedback au clic se limite à répéter le label choisi (→ label), jamais de jugement.

## QA à vérifier
1. Modifier `title` → rendu change sans toucher au HTML (critère d'or).
2. `alternatives:[]` → BLOCKED propre.
3. Clic action principale → feedback `→ <action_title>`.
4. Clic alternative → feedback `→ <label>`.
5. Navigation clavier Tab+Entrée sur action principale et alternatives.
6. Responsive 375/768/1024 — alternatives s'empilent en colonne sur mobile.

## Références externes (external_refs / dependencies)
- **GAB-021** : récap complet — à utiliser à la place de GAB-031 si on veut un résumé structuré.
- **ENG-013** : routage moteur de fin — pour la logique de navigation automatique (hors périmètre GAB-031).
- **GAB-035** : déblocage — pour les CTA de déverrouillage de contenu (hors périmètre GAB-031).

## Source
`INDEX-300-playkit-GAB-031-035-PLAYABLE.html` (stage `data-tpl="31"`, handler `ncaPick`).
