# GAB-187 · PathMapUnitSegment — « Segment de parcours »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechPathMap
**Critère validé :** changer le JSON change le rendu du segment sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-187/
  renderer.html            ← moteur segment de parcours (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
```

## Archétype

GAB-187 représente un **segment de parcours** (PathMapUnitSegment) : une zone thématique regroupant plusieurs nœuds-missions au sein d'un parcours long. Il affiche :
- L'en-tête du segment (titre, sous-titre, compteur de missions)
- L'objectif pédagogique du segment
- La barre de progression intra-segment
- La liste des nœuds-missions avec leurs états (completed / active / available / locked)
- Un CTA principal pour continuer le segment

## Champs requis (instance, à plat)

`gab_id` · `segment_id` · `title` · `summary` · `nodes[]{num,title,mod_type,mod_label,mod_icon,duration,state}`

Optionnels : `mission_count`, `objective`, `progress{completed,total,percent}`, `primary_cta{label,action}`.

## Ce qui vient du JSON vs HTML

- **JSON** : titre, résumé, nombre de missions, objectif, progression, chaque nœud (titre, type de module, icône, durée, état), libellé du bouton CTA.
- **HTML** : layout card, barre de progression, liste nœuds, gestion des états (classes CSS), bouton structurel.

## Garde-fous (child_safety)

- **Contenu extrait uniquement** depuis le HTML source — aucune invention pédagogique.
- **Nœuds verrouillés** (state=locked) non focalisables (tabindex=-1) pour accessibilité.
- **BLOCKED** si `title` absent, `summary` absent ou `nodes` vide/absent.
- **Fail-soft** : si `progress` absent, la barre est masquée (hidden) sans erreur.

## QA à vérifier

1. Modifier `title`/`nodes[].title` → rendu change sans toucher au HTML (critère d'or).
2. `nodes:[]` ou absent → BLOCKED propre.
3. `node.state='completed'` → checkmark ✓ + couleur mint.
4. `node.state='active'` → numéro violet surligné + ombre violette.
5. `node.state='locked'` → opacité 0.6 + cursor not-allowed + tabindex=-1.
6. `progress.percent=33` → barre remplie à 33%.
7. Clic CTA → feedback `panel.ok` avec l'action.
8. Responsive 375/768/1024 px.

## Références externes (external_refs / dependencies)

Ce GAB s'inscrit dans le **module EdTechPathMap** (INDEX-300, vague 1) et orchestre des nœuds-missions qui correspondent à d'autres GABs :

| Dépendance | Description |
|---|---|
| **GAB-186** (PathMapIntroHero) | Hero d'entrée du parcours — contient la liste des segments |
| **GAB-188** (PathMapMissionNode) | Nœud mission individuel — détail d'un nœud actif/disponible |
| **GAB-189** (PathMapLockedNode) | Nœud verrouillé — affiché quand conditions non remplies |
| **GAB-190** (PathMapCheckpointBoss) | Checkpoint boss — fin de segment ou validation de zone |

Les types `mod_type` (story, interactive, exercise, visual, memory, game) référencent les modules cibles des autres lots (StoryLearning, InteractiveLearning, ExerciseLearning, VisualLearning, MemoryLearning, GameLearning). GAB-187 ne calcule pas XP/badge — délégué à PlayKit.

## Source

`INDEX-300-pathmap-GAB-186-190-PLAYABLE.html` (stage `data-tpl="187"`, section `<!-- GAB-187 -->`).
