# GAB-351 · MotivationLearningIntro — « Intro motivation (éthique) »

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

## Pack (structure officielle par-GAB)
```
GAB-351/
  renderer.html            — moteur intro motivation (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
Écran d'introduction à une session motivante éthique. Pose un cadre sain en 3 temps :
1. Un bloc document (kind, titre, corps) présentant la session.
2. Deux boutons : démarrer ou refuser librement.
3. Un contrat éthique (liste d'items icon/titre/description) révélé en séquence au clic démarrer.

Principe fort : **aucune pression, aucun piège, le choix appartient toujours à l'élève.**

## Champs requis (instance, à plat)
`gab_id` · `motivation_intro_id` · `doc_kind` · `doc_title` · `doc_body` · `primary_cta{label,action}` · `secondary_cta{label,action}` · `contract_items[]{icon,title,description}`

Optionnels : `feedback_start`, `feedback_skip`, `use_when`, `do_not_use_when`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : doc_kind, doc_title, doc_body, libellés des deux boutons, chaque item du contrat éthique, messages de feedback après clic.
- **HTML** : structure doc-paper, cta-row, animation contract-items, layout, fallback BLOCKED.

## Garde-fous (child_safety)
- **Non-manipulation** : aucun dark pattern — l'élève peut refuser sans pénalité, aucun message culpabilisant.
- **Feedback skip neutre** : le message affiché après refus est `feedback_skip` (extrait source : *"Pas de souci — aucune pénalité, aucun rappel forcé. Reviens quand tu veux."*).
- **BLOCKED** si `doc_title` absent / `contract_items` vide / `primary_cta` absent.
- **Aucun contenu en dur** : 0 texte hardcodé dans le HTML moteur.

## QA à vérifier
1. Modifier `doc_title`/`doc_body` → rendu change sans toucher au HTML (critère d'or).
2. `contract_items:[]` → BLOCKED propre.
3. Clic Démarrer → contract_items révélés en séquence, bouton désactivé (`✓ En session`), panel ok.
4. Clic « Pas envie maintenant » → panel note (aucune pénalité), aucun blocage.
5. Instance externe injectée via `ENGINE.init(ext)` → rendu change.
6. Responsive 375/768/1024 : aucun débordement horizontal.

## Source
`INDEX-300-motivationlearning-GAB-351-355-PLAYABLE.html` (stage `data-tpl="351"`, handlers `d351Start`, `d351Skip`).

## Références externes (lot)
- GAB-352 (MotivationLearningStreakNudge) : pour les streaks — do_not_use_when de ce GAB.
- GAB-353 (MotivationLearningEffortReward) : récompense effort — complémentaire.
- GAB-354 (MotivationLearningChallengeChoice) : choix de défi — complémentaire.
- GAB-355 (MotivationLearningComeBackLater) : revenir plus tard — complémentaire.


## external_refs / dependencies
Réfs à d'autres GAB présentes dans le contenu de CET écran (navigation/prérequis pédagogiques extraits de la source, PAS des GAB à convertir ici) :
- GAB-352
