# GAB-199 · PathMapKettyGuide — « Guide Ketty contextuel court »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechPathMap
**Critère validé :** changer le JSON change le rendu (titre, conseil, tonalité, CTAs) sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-199/
  renderer.html            ← moteur guide Ketty (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
Guide contextuel court et dismissible : mascotte Ketty (🦊) + bulle conseil + résumé de l'étape recommandée + 2 CTAs (primaire = suivre le conseil, secondaire = explorer librement) + variantes de tonalité (encouraging / calm / exam_focus).

Ce gabarit est distinct du chat Ketty complet (autre module). Il est conçu pour une aide contextuelle brève, facile à fermer, non intrusive.

## Champs requis (instance, à plat)
`gab_id` · `guide_id` · `title` · `body` · `primary_cta{label,action}` · `secondary_cta{label,action}`

## Champs optionnels
`summary` · `next_action` · `tone_variants[]{key,label,body}` · `default_tone`

## Ce qui vient du JSON vs HTML
- **JSON** : titre de la bulle, texte du conseil, résumé de l'étape, libellés CTAs, variantes tonales, tonalité par défaut.
- **HTML** : layout card, mascotte emoji 🦊, animation nod, bouton dismiss, structure bulle, chips tonalité (moteur).

## Garde-fous (child_safety)
- **Guide dismissible** : l'élève peut toujours fermer le guide — jamais bloquer la navigation.
- **Tonalité exam_focus** : orientée brevet/DNB, ne pas générer d'anxiété (pas de formulation type "tu vas échouer si tu ne fais pas…").
- **BLOCKED** si `guide_id`, `title`, `body`, `primary_cta` ou `secondary_cta` absent.
- **Tonalités** : si `tone_variants` absent, les chips sont masquées et le `body` reste statique — aucun crash.

## Variantes tonales (source HTML INDEX-300)
| Clé | Usage |
|---|---|
| `encouraging` | Tonalité par défaut — encourageante, accentue le "pourquoi" |
| `calm` | Rassurante, sans précipitation |
| `exam_focus` | Orientée épreuve brevet/DNB, cite les attentes des correcteurs |

## QA à vérifier
1. Modifier `body` dans l'instance → bulle change sans toucher au HTML (critère d'or).
2. `primary_cta` absent → BLOCKED propre.
3. Clic chip tonalité → `body` change via moteur JS (live).
4. Clic ✕ dismiss → fade-out + fade-in auto (reset démo, non bloquant).
5. `tone_variants` absent → section chips masquée, aucun crash.
6. Instance externe injectée `ENGINE.init(ext)` → rendu change sans modifier le HTML.
7. Responsive 375/768/1024 — CTAs en colonne sur mobile.

## Source
`INDEX-300-pathmap-GAB-196-200-PLAYABLE.html` (stage `data-tpl="199"`, handlers `kgTone`, `kgDismiss`, `KG_TEXTS`).
