# GAB-271 · MethodLearningIntro — « Contrat d'usage d'une méthode »

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

## Pack (structure officielle par-GAB)
```
GAB-271/
  renderer.html            ← moteur contrat méthode (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` · `method_intro_id` · `title` · `method_goal` · `use_case` · `expected_output` · `primary_cta{label,action}`

Optionnels : `prerequisites`, `limit`, `estimated_duration`, `difficulty`, `method_scope`, `fallback_help_ref{label,gab_ref,gab_type,text}`, `secondary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre de la méthode, texte des 4 clauses (when/prereq/result/limit), fallback, libellés des boutons, métadonnées (durée, difficulté, domaine).
- **HTML** : structure du contrat à 4 clauses, blocs visuels, boutons structurels, layout, raison pédagogique fixe.

## Archétype : MethodLearningIntro
GAB-271 implémente le gabarit **contrat d'usage d'une méthode** du module 19 (EdTechMethodLearning). Une méthode n'est pas une liste décorative — c'est un contrat : quand l'utiliser (use_case), ce qu'il faut savoir avant (prerequisites), ce qu'on doit produire (expected_output), ses limites (limit), et un fallback si l'élève est bloqué. Ce contrat rend la méthode auto-portante.

## Garde-fous
- **BLOCKED** si l'un des 6 champs requis est absent (method_intro_id, title, method_goal, use_case, expected_output, primary_cta).
- **Clauses optionnelles** (prerequisites, limit) : le HTML les masque si absentes — pas d'erreur, pas de texte vide visible.
- **Bloc fallback** : masqué si `fallback_help_ref` absent.
- **Anti-invention** : contenu extrait uniquement du source HTML ; aucun champ inventé.
- **Ombres colorées** : 0 `box-shadow` avec rgba(0,0,0,...) — DS V2 strict.

## Chaîne module 19
GAB-271 est le premier gabarit de la chaîne EdTechMethodLearning :
`271 Intro → 272 StepByStep → 273 AnswerStructure → 274 JustificationBuilder → 275 ExamChecklist`

## external_refs / dependencies
- `fallback_help_ref.gab_ref` : référence `GAB-088` (type Visual) présente dans l'instance exemple. Ce GAB appartient à un autre lot/module. À résoudre lors du chargement runtime si lien actif souhaité.

## QA à vérifier
1. Modifier `use_case`/`title`/`expected_output` → rendu change sans toucher au HTML (critère d'or).
2. Supprimer `use_case` → BLOCKED propre.
3. Supprimer `prerequisites` → clause PREREQ masquée, reste du rendu intact.
4. Supprimer `fallback_help_ref` → bloc fallback masqué, reste du rendu intact.
5. CTA primaire → panel de confirmation affiché.
6. Responsive 375/768/1024.

## Source
`INDEX-300-methodlearning-GAB-271-275-PLAYABLE.html` (stage `data-tpl="271"`, section `<!-- GAB-271 INTRO -->`).
