# GAB-191 · PathMapRewardPeek — « Aperçu reward conditionnel »

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

## Pack (structure officielle par-GAB)
```
GAB-191/
  renderer.html            ← moteur aperçu reward (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` · `reward_peek_id` · `title` · `reward_title` · `benefit_text` · `disclaimer_text` · `primary_cta{label,action}`

Optionnels : `subtitle`, `banner_label`, `banner_icon`, `reward_icon`, `reward_source_label`, `benefit_label`, `benefit_icon`, `primary_cta.confirm_message`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, icônes, libellés bandeau, reward, bénéfice pédagogique, disclaimer, libellé du bouton CTA.
- **HTML** : layout carte dorée, boîte reward, bloc bénéfice, bouton structurel, positionnement.

## Garde-fous (child_safety)
- **disclaimer_text OBLIGATOIRE** : le gabarit n'attribue rien — il affiche seulement un aperçu. Sans disclaimer, BLOCKED.
- **Anti-attribution** : reward_title est un aperçu conditionnel, jamais une promesse. PlayKit valide la complétion en dehors de ce gabarit.
- **BLOCKED** si `reward_peek_id` absent / `reward_title` absent / `disclaimer_text` absent / `primary_cta` absent.

## Usage (extrait de la source)
- **use_when** : reward réellement configuré côté PlayKit · bénéfice pédagogique annoncé en parallèle · motivation légère, pas pression
- **do_not_use_when** : célébration post-validation (→ GAB-037) · aucune reward configurée · aperçu transformé en boutique

## QA à vérifier
1. Modifier `reward_title` / `benefit_text` → rendu change sans toucher au HTML (critère d'or).
2. `disclaimer_text` absent → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. Clic bouton CTA → message de confirmation `confirm_message` affiché.
5. Responsive 375/768/1024 — aucun débordement horizontal.

## Source
`INDEX-300-pathmap-GAB-191-195-PLAYABLE.html` (stage `data-tpl="191"`, handler `peConfirm`).

## external_refs / dependencies
- `peConfirm` dans la source originale est un helper global partagé par les GAB-191→195 dans le fichier INDEX jouable. Dans ce renderer autonome, la logique est internalisée dans `ENGINE.ctaAction()`.
- Pas de référence à d'autres GAB de ce lot (GAB-192→195) dans ce renderer.
