# GAB-225 · SmartSelectReasonCard — « Méta-carte d'explication SmartSelect »

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

## Pack (structure officielle par-GAB)
```
GAB-225/
  renderer.html            ← moteur méta-carte (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` · `reason_card_id` · `title` · `body` · `reason` · `reason_type` · `meta_source` · `meta_target`

Optionnels : `primary_cta{label,action}`, `info_pill_label`, `reason_block_label`, `ack_notice`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, corps (body), justification (reason), libellé du bouton, pill info, label reason block, notice ack, méta-données (reason_type, source, target).
- **HTML** : layout carte, bloc méta read-only, pill de couleur sky, bouton structurel, affichage slots, fallback BLOCKED.

## Archétype
GAB-225 est la **méta-carte de transparence** de la chaîne SmartSelect (221→222→223→224→225). Elle explique en langage élève *pourquoi* une sélection a été faite sans exposer de raw data. Le `reason_type` identifie quel GAB amont a produit la décision :

| reason_type | GAB amont |
|---|---|
| `content` | GAB-221 SmartSelectContentMatch |
| `level` | GAB-222 SmartSelectLevelFit |
| `format` | GAB-223 SmartSelectFormatChoice |
| `fallback` | GAB-224 SmartSelectFallbackChoice |
| `teacher_assigned` | GAB-221 mode override prof |
| `adaptive_signal` | GAB-211 AdaptiveLearningEntrySignal + GAB-221 |

## Garde-fous (child_safety)
- **Read-only** : ReasonCard ne propose pas d'action de progression. CTA unique = acknowledge.
- **Anti-raw-data** : meta_source et meta_target sont des identifiants techniques, jamais des scores ou logs bruts exposés à l'élève.
- **Anti-culpabilisation** : body et reason doivent être formulés en langage élève positif.
- **BLOCKED** si `title` / `body` / `reason` / `reason_type` absents.

## QA à vérifier
1. Modifier `title`/`body`/`reason` → rendu change sans toucher au HTML (critère d'or).
2. Supprimer `body` → BLOCKED propre avec message.
3. `reason_type=teacher_assigned` → méta affichée correctement.
4. CTA → panel « Compris » apparaît.
5. Responsive 375/768/1024 — aucun débordement.

## external_refs / dependencies
Ce GAB est la méta-carte des 4 autres SmartSelect du lot :
- GAB-221 · SmartSelectContentMatch
- GAB-222 · SmartSelectLevelFit
- GAB-223 · SmartSelectFormatChoice
- GAB-224 · SmartSelectFallbackChoice

Distinction clé : **GAB-225 ≠ GAB-215** (AdaptiveProgressReason). GAB-215 explique une décision adaptative (advance/review/remediate). GAB-225 explique une sélection SmartSelect (content/level/format/fallback).

## Source
`INDEX-300-smartselect-GAB-221-225-PLAYABLE.html` (stage `data-tpl="225"`, handler `rsPick()`, styles `.rs-*`).
