# GAB-111 · MemoryDailyGoal — « Objectif du jour »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechMemoryLearning
**Critère validé :** changer le JSON change l'anneau, le titre, le sous-titre et le CTA sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-111/
  renderer.html            ← moteur objectif quotidien (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` · `goal_id` · `title` · `subtitle` · `progress_done` · `progress_total` · `primary_cta{label,action}`

Optionnels : `progress_unit`, `duration_label`, `streak_label`, `accessibility{ring_aria_label}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, valeurs de progression (done/total), unité, durée, streak, libellé du bouton, aria-label de l'anneau.
- **HTML** : structure SVG de l'anneau, calcul de stroke-dashoffset, logique de décompte, layout, styles DS V2.

## Archétype : Objectif quotidien doux
GAB-111 est un écran de **déclenchement de session** : il montre où l'élève en est dans son objectif du jour et invite à continuer. L'anneau SVG calcule sa position en fonction de `progress_done / progress_total`. Le CTA affiche le nombre de cartes restantes et se désactive (couleur mint) quand l'objectif est atteint.

## Garde-fous (child_safety)
- **Anti-invention** : aucun contenu pédagogique n'est inventé. Titre, sous-titre et libellés sont fournis par l'instance.
- **BLOCKED** si `title` absent, `progress_total < 1`, ou `primary_cta` absent.
- `progress_done` est plafonné à `progress_total` côté moteur (jamais d'arc > 100 %).
- La valeur de l'anneau et le label des restantes sont recalculés à chaque clic — état cohérent garanti.

## Références externes (external_refs / dependencies)
- **GAB-103** : répétition espacée d'un deck complet (à utiliser à la place si l'objectif porte sur un deck entier).
- **GAB-039** : streak de gamification (si le besoin est d'afficher la série, pas l'objectif du jour).
- **GAB-064** : objectif pédagogique (hors contexte mémorisation).

## QA à vérifier
1. Modifier `progress_done`/`progress_total` → arc SVG et label restantes changent sans toucher au HTML.
2. `progress_done == progress_total` → bouton mint désactivé, texte "Objectif du jour atteint !".
3. `title` absent → BLOCKED propre, carte masquée.
4. Clic CTA → décompte correct jusqu'à atteinte.
5. Responsive 375/768/1024 → anneau centré, aucun débordement.

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