# GAB-080 · VisualComparisonHeavy2Col — « Comparaison détaillée (tableau) »

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

## Pack (structure officielle par-GAB)
```
GAB-080/
  renderer.html            ← moteur tableau de comparaison (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` · `comparison_id` · `column_a_label` · `column_b_label` · `rows[]{criterion, value_a, value_b}`
Optionnels : `title`, `primary_cta{label, action}`, `accessibility{table_caption}`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : libellés colonnes A et B, libellé de la colonne critère (header), chaque ligne du tableau, libellé du bouton CTA.
- **HTML** : structure de la grille `1.2fr 1fr 1fr`, styles DS V2 (violet/sky/surface), layout complet, logique BLOCKED.

## Garde-fous (child_safety)
- **Anti-invention** : le contenu pédagogique (critères, valeurs) est extrait tel quel de la source HTML — jamais inventé.
- **BLOCKED** si `rows` absent ou vide, ou si `column_a_label` / `column_b_label` absent.
- **Accessibility** : `role="table"`, `role="row"`, `role="columnheader"`, `role="rowheader"`, `role="cell"` appliqués. `aria-label` injecté depuis `accessibility.table_caption`.

## QA à vérifier
1. Modifier une valeur dans `rows` → rendu change sans toucher au HTML (critère d'or).
2. `rows:[]` → BLOCKED propre.
3. `column_a_label` absent → BLOCKED propre.
4. Instance externe injectée via `ENGINE.init(ext)` → rendu change.
5. Responsive 375/768/1024 — pas de débordement horizontal.

## external_refs / dependencies
- Aucune dépendance externe hors-lot.
- Archétype visuel référencé dans la source : GAB-079 (`VisualComparisonSimple2Col`) — comparaison rapide 2 colonnes sans colonne critère centrale ; GAB-080 en est la version « heavy » (tableau structuré multi-critères).

## Source
`INDEX-300-visuallearning-GAB-074-080-PLAYABLE.html` (stage `data-tpl="80"`, bloc CSS `.cmph-*`).
