> ⚠️ **GAB SENSIBLE — VALIDATION BOSS OBLIGATOIRE avant tout usage.** (child-safety / RGPD / orientation / career). Contenu extrait sans invention ; à relire par un humain.

# GAB-344 · SafetyFallbackLearningAgeSensitiveTopic — « Sujet sensible (mineur) »

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

## 🛡️ GAB SENSIBLE — FLAG REVUE BOSS (child-safety / RGPD)

> ⚠️ **REVUE BOSS OBLIGATOIRE AVANT PROD.** Ce gabarit concerne un **public mineur** et des **sujets sensibles**.
> Garde-fous non négociables : ton prudent, **aucun diagnostic**, **aucun contenu inadapté détaillé**, redirection vers un adulte de confiance.
> Toute évolution du contenu (`context_notice`, `response_options`, feedbacks) doit être validée par Boss. Le champ `child_safety.review_required` documente cette obligation dans l'instance.

## Pack (structure officielle par-GAB)
```
GAB-344/
  renderer.html            ← moteur écran sujet sensible (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` · `sensitive_topic_id` · `context_notice` · `prompt` · `response_options[]{kind,label,icon,blocked,feedback,result_state}`
Optionnels : `title`, `topic_label`, `state`, `use_when[]`, `do_not_use_when[]`, `child_safety{audience,non_diagnostic,adult_redirect,block_inappropriate,review_required}`.

## Ce qui vient du JSON vs HTML
- **JSON** : bandeau de contexte, invite, liste des options de réponse (libellé, icône, statut bloqué, feedback), listes use_when / do_not_use_when, méta child_safety.
- **HTML** : layout, bandeau d'alerte, liste de choix, panneau de feedback, navigation clavier, structure usage-panel/slots.

## Garde-fous (child_safety)
- **Public mineur détecté** → ton prudent imposé par le bandeau `context_notice`.
- **Non-diagnostic** : l'option « diagnostic » est un choix **bloqué** (feedback `bad`), jamais exécuté.
- **Anti-contenu inadapté** : l'option « détailler un contenu inadapté » est bloquée et ne révèle rien.
- **Orientation adulte** : la seule voie sûre (`blocked:false`) oriente vers un adulte de confiance / une ressource.
- **BLOCKED** si `context_notice` / `prompt` absents, `response_options` vides, ou **aucune option sûre** (`blocked:false`).

## QA à vérifier
1. Modifier un `feedback`/`label` → rendu change sans toucher au HTML (critère d'or).
2. `response_options:[]` → BLOCKED propre.
3. Supprimer la seule option safe → BLOCKED « aucune réponse sûre ».
4. Clic option `diag`/`detail` → panneau « Bloqué », aucun contenu inadapté affiché.
5. Clic option `safe` → panneau ok + état `safe_answer`.
6. Responsive 375/768/1024.

## external_refs / dependencies
- Aucune dépendance hors-lot. Gabarit autonome au sein du lot `LOT-safetyfallbacklearning-GAB-341-345`.
- Voisins du lot (contexte, non requis au runtime) : GAB-341 (contenu manquant), GAB-342 (réponse incertaine), GAB-343 (source nécessaire), GAB-345 (escalade vers humain).

## Anti-invention
Tout le contenu est extrait **uniquement** du HTML source (`INDEX-300-safetyfallbacklearning-GAB-341-345-PLAYABLE.html`, stage `data-tpl="344"`, handlers `d344Pick`). Aucun texte pédagogique inventé. Aucun `_TODO` : la source couvre l'intégralité des champs requis.

## Source
`INDEX-300-safetyfallbacklearning-GAB-341-345-PLAYABLE.html` (stage `data-tpl="344"`, handler `d344Pick`, état `st344` / `sensitive_detected`).
