# GAB-151 · GameIntroScreen — « Attrape les causes ! »

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

## Pack (structure officielle par-GAB)
```
GAB-151/
  renderer.html            ← moteur écran d'intro (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` · `game_intro_id` · `title` · `objective` · `primary_cta{label,action}`

Optionnels : `game_emoji`, `theme`, `stats[]{value,label}`, `objective_icon`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, emoji du jeu, thème, chaque stat (valeur + libellé), objectif, icône objectif, **libellé** du bouton CTA.
- **HTML** : layout carte, grille de stats, bouton structurel, décoration, fallback BLOCKED.

## Archétype
Écran d'intro de mini-jeu pédagogique : pose le décor (thème + durée + niveau + quantité) et déclenche l'envie de jouer. **Différent de :**
- GAB-136 : intro manipulation pédago (sans mécanique jeu)
- ENG-002 : intro session moteur
- GAB-045 : intro aventure narrative

## Garde-fous (child_safety)
- **BLOCKED** si `title` vide / `objective` vide / `primary_cta` absent.
- **Anti-invention** : aucun contenu pédagogique n'est généré côté moteur — tout vient du JSON.
- **stats** optionnels : si absents, la grille est masquée proprement, le reste du rendu est intact.
- **objective** = description de l'action du joueur, jamais une note ou un jugement scolaire.

## QA à vérifier
1. Modifier `title`/`objective`/`stats` → rendu change sans toucher au HTML (critère d'or).
2. `title:""` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. `stats:[]` ou absent → grille masquée, carte rendue normalement.
5. Instance externe injectée via `ENGINE.init(ext)` → rendu change immédiatement.
6. Responsive 375/768/1024 — grille 3 cols passe en 2 cols sur mobile.

## Source
`INDEX-300-gamelearning-GAB-151-155-PLAYABLE.html` (stage `data-tpl="151"`, bloc `.gi-card`).
