# GAB-160 · GameRewardBridge — « Pont vers PlayKit »

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

## Pack (structure officielle par-GAB)
```
GAB-160/
  renderer.html            ← moteur pont récompense (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 : pont transversal lecture seule
GAB-160 est un **composant transversal embarquable** : il affiche la transition entre le résultat local d'un mini-jeu (score, erreurs) et la validation PlayKit/Gamification, avant de rediriger vers la célébration officielle (GAB-038). Il ne déclenche PAS la récompense — il la présente après validation.

## Champs requis (instance, à plat)
`gab_id` · `bridge_id` · `reward_context{heading, text}` · `primary_cta{label, action}`

Optionnels : `title`, `banner_text`, `game_result{icon,label,value}`, `playkit_grant{icon,label,value}`, `reward_context.highlight`.

## Ce qui vient du JSON vs HTML
- **JSON** : icônes, libellés, valeurs du résultat jeu, grant PlayKit, heading et texte de confirmation, libellé et action du bouton CTA, message banner.
- **HTML** : layout flow grid, bandeau banner, blocs game/playkit, bloc confirmation, bouton structurel, fallbacks.

## Garde-fous
- **Lecture seule** : ce gabarit présente uniquement, ne déclenche jamais la récompense.
- **BLOCKED** si `bridge_id`, `reward_context` ou `primary_cta` absents.
- `game_result` et `playkit_grant` sont optionnels : si absents, rendu dégradé gracieux avec `'—'`.
- `reward_context.highlight` (optionnel) : substring du `text` qui sera mis en `<b>` pour emphase.

## QA à vérifier
1. Modifier `game_result.value` / `playkit_grant.value` → rendu change sans toucher au HTML.
2. `bridge_id` absent → BLOCKED propre.
3. `reward_context` absent → BLOCKED propre.
4. Clic CTA → panel ok avec action confirmée.
5. Responsive 375/768/1024 : flèche pivote à 90° sur mobile.

## Références externes (external_refs / dependencies)
- **GAB-038** — célébration officielle (destination du `primary_cta.action='open_celebration'`).
- **GAB-155** — feedback de fin de jeu (upstream de ce composant, pas downstream).
- **PlayKit/Gamification** — service externe validant la récompense côté back avant affichage.

## Source
`INDEX-300-gamelearning-GAB-156-160-PLAYABLE.html` (stage `data-tpl="160"`, bloc `.rb-*`, handler `peConfirm`).
