# GAB-034 · MiniCertificateBlock — « Attestation visuelle non officielle »

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

## Pack (structure officielle par-GAB)
```
GAB-034/
  renderer.html            ← moteur attestation (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` · `certificate_id` · `title` · `body` · `result`

Optionnels : `icon`, `kicker`, `disclaimer`, `cta{label,action}`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : icône du sceau, surtitre (kicker), titre, corps, résultat/score, disclaimer non-officiel, libellé du bouton CTA.
- **HTML** : structure carte, animation sceau (`cert-pop`), coins décoratifs, layout, panneaux BLOCKED.

## Garde-fous (child_safety)
- **Non-officiel obligatoire** : le champ `disclaimer` est présent dans l'instance. Si absent, le moteur insère un disclaimer de secours. L'attestation NE peut PAS prétendre à une valeur légale ou officielle.
- **BLOCKED** si `title`, `body` ou `result` absents — message d'erreur visible.
- **Contenu extrait uniquement** : icône 🏅, kicker "Attestation", titre "Défi Pythagore terminé", corps "Décerné à l'élève pour avoir complété la session", résultat "Score : 4/5 · Niveau atteint : Solide 💪" — tous issus du HTML source INDEX-300.

## QA à vérifier
1. Modifier `title`/`result`/`body` dans le JSON → rendu change sans toucher au HTML (critère d'or).
2. Supprimer `title` → BLOCKED propre affiché.
3. Clic bouton CTA → animation sceau rejouée.
4. `init(extInstance)` → rendu change (injection externe).
5. Responsive 375/768/1024 — pas de débordement.
6. `prefers-reduced-motion` → animation réduite.

## Archétype
Fin de session/mission avec valorisation de l'accomplissement. Variante légère du badge (pas de gamification lourde). Complémentaire de GAB-022 (célébration animée) et GAB-028 (simple complétion). Ne jamais prétendre à une valeur officielle ou de diplôme.

## Source
`INDEX-300-playkit-GAB-031-035-PLAYABLE.html` (stage `data-tpl="34"`, styles `.cert-*`, handler `certReplay()`).
