# GAB-353 · MotivationLearningEffortReward — « Récompenser l'effort »

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

## Pack (structure officielle par-GAB)
```
GAB-353/
  renderer.html            ← moteur récompense effort (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

**Récompenser l'effort, pas le farming.** Ce gabarit présente une preuve d'effort mesurable (exercices terminés + durée) et permet à l'élève de réclamer sa récompense. Un second bouton simule un comportement de farming (clics rapides sans effort réel) et déclenche un blocage explicite. Aucune récompense sans effort prouvé.

## Champs requis (instance, à plat)
`gab_id` · `effort_reward_id` · `effort_proof` · `reward_cta_label` · `farming_feedback`

Optionnels : `title`, `intro_note`, `effort_kind_label`, `reward_claimed_label`, `reward_feedback`, `farming_cta_label`, `use_when`, `do_not_use_when`.

## Ce qui vient du JSON vs HTML
- **JSON** : preuve d'effort, libellés des boutons (claim / claimed / farm), feedbacks ok/bad, intro, usage.
- **HTML** : layout carte, boutons structurels, panneaux ok/bad, responsive, fallback BLOCKED.

## Garde-fous (child_safety / éthique)
- **Anti-farming** : le moteur refuse explicitement la récompense si farming simulé — message `farming_feedback` clair et non punitif.
- **Effort ≠ résultat** : `effort_proof` décrit le travail fourni (durée + quantité), pas uniquement le score.
- **Proportionnalité** : `reward_feedback` doit mentionner la proportionnalité (texte du JSON, jamais inventé).
- **BLOCKED** si `effort_proof`, `reward_cta_label` ou `farming_feedback` sont absents.

## QA à vérifier
1. Modifier `effort_proof` → rendu change sans toucher au HTML (critère d'or).
2. `effort_proof:""` → BLOCKED propre avec message lisible.
3. Clic claim → bouton désactivé + panel ok vert.
4. Clic farm → panel bad rouge + bouton claim inchangé (non désactivé par le farming).
5. Instance externe injectée via `init(ext)` → rendu change.
6. Responsive 375/768/1024 — usage-panel empilé sur mobile.

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


## 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
