# GAB-115 · MemoryExamCramMode — « Mode révision express »

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

## Pack (structure officielle par-GAB)
```
GAB-115/
  renderer.html            ← moteur mode express (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` · `cram_id` · `title` · `subtitle` · `items[]{icon,label}` · `primary_cta{label,action}`

Optionnels : `badge_label` (badge urgence affiché si présent), `timer_seconds` (défaut 480 = 8 min).

## Ce qui vient du JSON vs HTML
- **JSON** : badge urgence, titre, sous-titre, durée du chrono, liste des groupes de cartes, libellé du bouton CTA.
- **HTML** : structure carte dark, affichage du chrono (décompte live), liste items, bouton CTA, layout, fallback BLOCKED.

## Archétype
GAB-115 est un écran de **lancement** (text_cta) : il présente les enjeux de la session express et propose un unique CTA fort pour démarrer. Le chrono n'est pas un exercice interactif — il matérialise l'urgence avant l'examen.

## Garde-fous
- **BLOCKED** si `title` absent, `items` vide/absent, ou `primary_cta` absent.
- `timer_seconds` doit être > 0 ; le moteur applique le défaut 480 si absent ou invalide.
- `badge_label` optionnel : si absent, le badge n'est pas rendu (aucun contenu inventé).
- Aucun contenu pédagogique (matière, notions, dates) n'est en dur dans le renderer.

## QA à vérifier
1. Modifier `title`/`subtitle`/`items` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. Clic CTA → chrono démarre, libellé change en « Révision en cours… ».
5. `timer_seconds:60` → affichage « 01:00 », décompte correct.
6. `badge_label` absent → zone badge non rendue.
7. Responsive 375/768/1024.

## Source
`INDEX-300-memorylearning-GAB-111-115-PLAYABLE.html` (stage `data-tpl="115"`, handler `cramStart()`).

## external_refs / dependencies
Aucune référence hors-lot. GAB-115 est autonome dans le lot EdTechMemoryLearning.

Pour compléter une session complète de révision espacée, voir :
- GAB-111 (MemoryDailyGoal) — objectif quotidien doux
- GAB-103 (hors-lot) — rappel espacé deck complet
