# GAB-212 · AdaptiveLearningRecommendationCard — « Carte de recommandation adaptative »

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

## Pack (structure officielle par-GAB)
```
GAB-212/
  renderer.html            ← moteur carte recommandation (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` · `recommendation_id` · `title` · `summary` · `reason` · `next_action` · `primary_cta{label,action}`

Optionnels : `recommendation_type` · `secondary_cta{label,action}` · `skip_cta{label,action}` · `meta_duration` · `meta_difficulty` · `accessibility` · `child_safety`

## Ce qui vient du JSON vs HTML
- **JSON** : titre, résumé, raison (obligatoire), type de recommandation (couleur tag), durée, difficulté, libellés des 3 boutons.
- **HTML** : structure de la carte, bloc reason, rangée méta, CTA row, moteur de validation.

## Archétype : 3 "recommandations" distinctes dans le système
| GAB | Nom | Usage |
|-----|-----|-------|
| GAB-180 | LevelTestRecommendationBridge | Pont **sortie diagnostic LevelTest**, contextuel à un test qui vient de finir |
| GAB-194 | PathMapRecommendedRoute | Route complète **dans la carte parcours**, multi-étapes |
| **GAB-212** | **AdaptiveLearningRecommendationCard** | **Card unique d'ACTION SUIVANTE** basée sur signal adaptatif (ce gabarit) |

## Doctrine reason (NEW slot canonique AdaptiveLearning)
Le slot `reason` est **obligatoire** sur tous les gabarits AdaptiveLearning (module 13). Transparence totale : l'élève comprend toujours **pourquoi** le système propose ceci. Jamais de boîte noire, jamais de stigmatisation.

- `reason` absent → **BLOCKED**
- `reason` en langage élève (jamais jargon technique)
- 1-2 phrases maximum

## Garde-fous (child_safety)
- **skip_cta disponible** : la recommandation est optionnelle, l'élève peut toujours passer.
- **Non punitif** : aucun message de sanction, aucun jugement sur le besoin de recommandation.
- **Transparence** : `reason` explique la logique adaptative en langage élève.
- **BLOCKED** si `title` / `summary` / `reason` / `primary_cta` absents.

## QA à vérifier
1. Modifier `title`/`summary`/`reason` → rendu change sans toucher au HTML (critère d'or).
2. `reason` absent → BLOCKED propre avec message explicite.
3. `primary_cta` absent → BLOCKED.
4. `skip_cta` présent → bouton "Passer" visible avec style dashed.
5. `recommendation_type: 'practice'` → tag corail affiché.
6. Responsive 375/768/1024 — CTAs en flex-wrap sur mobile.

## Source
`INDEX-300-adaptivelearning-GAB-211-215-PLAYABLE.html` (stage `data-tpl="212"`, bloc `.rc-card`, handlers `peNote`/`peConfirm`).

## external_refs / dependencies
- **GAB-211** (AdaptiveLearningEntrySignal) : fournit le signal source qui déclenche cette recommandation.
- **GAB-180** (LevelTestRecommendationBridge) : gabarit distinct pour pont sortie diagnostic.
- **GAB-194** (PathMapRecommendedRoute) : gabarit distinct pour routes multi-étapes PathMap.
