# GAB-181 · LevelTestWeaknessMap — « Carte des fragilités priorisées »

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

## Pack (structure officielle par-GAB)
```
GAB-181/
  renderer.html            ← moteur carte des fragilités (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` · `weakness_map_id` · `title` · `items[]{id, label, priority, priority_label, score_text, score_pct, action_label}`

Optionnels : `subtitle`, `legend{high,mid,low}`, `primary_cta{label,action}`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, libellés de légende, chaque item (label, priorité, score, barre, action), libellé du CTA principal.
- **HTML** : grille 2 colonnes, cellules colorées par priorité (high/mid/low), barre de progression, bouton CTA structurel, layout responsive, feedback au clic.

## Garde-fous (child_safety)
- **Diagnostic interne** : pas de note officielle, pas de classement entre élèves.
- **items[] vide** → BLOCKED propre.
- **weakness_map_id absent** → BLOCKED propre.
- **title absent** → BLOCKED propre.
- Palette couleurs : high=coral, mid=gold, low=mint — signaux visuels non-punitifs.

## QA à vérifier
1. Modifier un `label`/`score_text` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. Clic sur une cellule → feedback label + action_label.
4. CTA principal → déclenche l'action sur le premier item high.
5. Responsive 375/768/1024 — grille 1 col mobile, 2 col desktop.

## external_refs / dependencies
- **GAB-179** (LevelTestFullProfile) : profil complet — ne pas confondre avec la carte de fragilités.
- **GAB-180** (LevelTestPriorityRecos) : recos priorisées listées — format liste vs format carte ici.
- **GAB-185** (LevelTestProgressCompare) : progression temporelle entre deux diagnostics.

## Source
`INDEX-300-leveltest-GAB-181-185-PLAYABLE.html` (stage `data-tpl="181"`, CSS `.wm-*`, handler `peConfirm`).
