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

# GAB-348 · SafetyFallbackLearningPrivacyDataWarning — « Alerte données privées »

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

> 🚨 **GAB SENSIBLE — REVUE BOSS REQUISE** (child-safety / RGPD / données de mineur).
> Toute évolution du wording (detection_notice, feedbacks, minor_message) ou de la logique de minimisation/masquage doit être **relue et validée par Boss** avant diffusion. Aucune donnée personnelle réelle ne doit jamais entrer dans l'instance (l'exemple « Léa Martin » est un texte de démo extrait de la source).

## Pack (structure officielle par-GAB)
```
GAB-348/
  renderer.html            ← moteur alerte données privées (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` · `privacy_warning_id` · `document{kind,original_text,masked_text}` · `detection_notice` · `primary_cta{label,action,masked_label,next_state}`
Optionnels : `title`, `state_badge`, `secondary_cta{label,action,next_state}`, `mask_feedback`, `keep_feedback`, `use_when[]`, `do_not_use_when[]`, `child_safety{minimization,user_choice,no_clear_storage,minor_message}`.

## Ce qui vient du JSON vs HTML
- **JSON** : le texte saisi (original + masqué), le message de détection, les libellés des deux boutons, les feedbacks masquer/garder, les états du badge, les listes use_when/do_not_use_when.
- **HTML** : layout, panneaux warn/ok, boutons structurels (Masquer / Garder), barre de slots, fallback.

## Flow extrait de la source
1. Détection → badge `risk_detected` + panneau warn `detection_notice`.
2. **Masquer mes infos** → `original_text` remplacé par `masked_text`, badge `private_mode`, panneau ok, bouton désactivé (`masked_label`).
3. **Garder tel quel** → badge `confirmation_needed`, panneau warn rappelant que les infos ne sont pas nécessaires + qu'on peut masquer à tout moment.

## Garde-fous (child_safety)
- **Minimisation par défaut** : on rappelle que les données ne sont pas nécessaires pour apprendre.
- **Choix laissé à l'élève** : masquer ou garder, jamais imposé, jamais bloquant.
- **Aucun stockage en clair** : le masquage est purement d'affichage (« Rien n'est stocké en clair »).
- **Message adapté mineur** : `child_safety.minor_message`.
- **Anti-invention** : aucun texte hors source HTML ; aucune donnée perso réelle.
- **BLOCKED** si `document.original_text` / `detection_notice` / `primary_cta` absent.

## QA à vérifier
1. Modifier un libellé/feedback → rendu change sans toucher au HTML (critère d'or). 2. Retirer `detection_notice` → BLOCKED propre. 3. Clic Masquer → texte masqué + bouton désactivé. 4. Clic Garder → rappel minimisation. 5. Responsive 375/768/1024.

## external_refs / dependencies
Aucune dépendance hors-lot. GAB autonome du lot `safetyfallbacklearning-GAB-346-350`.

## Source
`INDEX-300-safetyfallbacklearning-GAB-346-350-PLAYABLE.html` (stage `data-tpl="348"`, handlers `d348Mask` / `d348Keep`).
