# GAB-085 · VisualGeoMapStatic — « Carte géographique »

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

## Pack (structure officielle par-GAB)
```
GAB-085/
  renderer.html            ← moteur carte géo (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` · `map_id` · `title` · `markers[]{marker_id,label,top_pct,left_pct,detail}` · `legend_entries[]{color_token,label}`

Optionnels : `map_description`, `map_bg_alt`, `prompt_text`, `primary_cta{label,action}`, `accessibility`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, description, chaque repère (position top/left en %, label, détail au clic), la légende (couleur DS V2 + label), libellé du bouton CTA.
- **HTML** : fond de carte schématique, zone de détail, layout légende, bouton structurel, fallback BLOCKED.

## Archétype
**VisualGeoMapStatic** — carte géographique statique avec repères cliquables et légende. Le fond est un schéma CSS symbolique (formes géométriques) ; les repères sont positionnés par `top_pct` / `left_pct`. Adapté à tout cours de géographie, SVT ou histoire-géo nécessitant de localiser des éléments spatiaux.

## Garde-fous (child_safety)
- **Anti-hardcode** : aucune ville, aucune couleur, aucun texte en dur dans le renderer. Tout vient du JSON.
- **BLOCKED** si `markers` vide, `legend_entries` vide, ou `map_id` absent.
- `top_pct` / `left_pct` dans [0, 100] — positionnement CSS percent.
- `color_token` → variable CSS DS V2 uniquement (coral, mint, sky, violet, gold, magenta).

## QA à vérifier
1. Modifier un `detail` dans `markers` → texte change au clic sans toucher au HTML.
2. `markers:[]` → BLOCKED propre affiché.
3. Clic repère → détail affiché dans `.geo-detail`.
4. CTA → tous les repères surlignés + noms concaténés dans le détail.
5. Responsive 375/768/1024 — aucun débordement.
6. Navigation clavier (Tab + Entrée) sur chaque repère.

## Source
`INDEX-300-visuallearning-GAB-081-085-PLAYABLE.html` (stage `data-tpl="85"`, handler `geoPick`).
