{
  "contract_version": "gab_036_contract_v1",
  "gab_id": "GAB-036",
  "canonical_name": "WarningBlock",
  "module_owner": "EdTechPlayKit",
  "renderer_key": "text_cta",
  "required_fields": [
    "gab_id",
    "warning_block_id",
    "title",
    "body"
  ],
  "optional_fields": [
    "icon",
    "highlight"
  ],
  "field_types": {
    "title": "string — titre de l'avertissement affiché en gras dans la carte",
    "body": "string — texte explicatif de l'avertissement (phrase ou paragraphe court)",
    "icon": "string — emoji affiché dans l'icône de la carte (défaut : ⚠️)",
    "highlight": "string | null — texte de note secondaire affiché sous la carte (italique, centré) ; null = absent"
  },
  "constraints": [
    "title et body doivent être non vides ; sinon BLOCKED.",
    "Pas de contenu pédagogique en dur dans le HTML — tout vient de l'instance.",
    "Ton : avertissement doux, jamais alarmiste. Rester en gold, jamais en rouge.",
    "icon facultatif : si absent, défaut ⚠️ appliqué par le moteur.",
    "highlight optionnel : si null ou absent, la note secondaire n'est pas affichée."
  ],
  "blocked_conditions": [
    "title absent ou vide",
    "body absent ou vide"
  ],
  "accessibility": [
    "keyboard_navigable",
    "focus_visible",
    "prefers_reduced_motion",
    "role_img_sur_icone"
  ],
  "qa_cases": [
    { "case": "instance conforme", "expected": "rendu complet : icône + titre + corps, 0 erreur" },
    { "case": "title absent", "expected": "BLOCKED listant title absent ou vide" },
    { "case": "body absent", "expected": "BLOCKED listant body absent ou vide" },
    { "case": "highlight fourni", "expected": "note secondaire affichée sous la carte" },
    { "case": "highlight null", "expected": "note secondaire absente du rendu" },
    { "case": "instance externe injectée via init(ext)", "expected": "le rendu change sans modifier le HTML" },
    { "case": "responsive 375/768/1024", "expected": "aucun débordement horizontal" }
  ],
  "traceability": {
    "derived_from_core_gab": "GAB-036",
    "note": "Ce schema VALIDE l'instance. Le contrat pédagogique complet (input_contract/validation_logic/feedback_scoring_logic) vit dans le CORE-GAB officiel, pas ici (évite la duplication)."
  }
}
