# GAB-264 · ComprehensionLearningQuestionIntent — « Questions sur le texte »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechComprehensionLearning
**Critère validé :** changer le JSON change les questions/réponses/CTAs sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-264/
  renderer.html            ← moteur questions de compréhension (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` · `question_intent_id` · `title` · `subtitle` · `question_type` · `questions[]{id,type,type_label,type_icon,text,hint,answers[]}` · `primary_cta{label,action}`

Optionnels : `secondary_cta{label,action}`, `source_passage`, `instruction`, `icon`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque question (texte, type, hint), chaque réponse (lettre, texte, correct), le titre, le sous-titre, les libellés des CTAs.
- **HTML** : layout cartes, tags colorés par type, grille réponses, boutons structurels, fallback.

## 3 types de question (enum question_type)
| Valeur | Couleur tag | Usage |
|---|---|---|
| `literal` | vert (mint) | Réponse explicite dans le texte |
| `inference` | or (gold) | Réponse à déduire du contexte |
| `opinion` | magenta | Avis argumenté, pas de bonne réponse unique |

Les questions `opinion` peuvent avoir `answers:[]` (champ ouvert, pas de choix).

## Garde-fous (child_safety)
- **BLOCKED** si `questions` absent/vide, `question_intent_id` absent, ou `title` absent.
- Les questions `opinion` (réponse libre) n'affichent pas de choices — protège l'élève d'une réponse « incorrecte » sur un avis personnel.
- `hint` affiché en italique grisé — aide sans révéler la réponse.

## QA à vérifier
1. Modifier le texte d'une question → rendu change sans toucher au HTML (critère d'or).
2. `questions:[]` → BLOCKED propre.
3. Question `opinion` avec `answers:[]` → aucune carte réponse affichée, hint visible.
4. Instance externe injectée via `ENGINE.init({...})` → rendu mis à jour.
5. Responsive 375/768/1024.

## Source
`INDEX-300-comprehensionlearning-GAB-261-265-PLAYABLE.html` (stage `data-tpl="264"`, handlers `qaPick`, objet `QA_TYPES`).
