{
 "$description": "TERO GROUP — jetons de marque (format DTCG). Fichier canonique de l'API de marque charte.tero.be/brand/. Reprend intégralement harness/tokens.json 1.0.0 (16/10/2026) et l'étend : paires de contraste WCAG 2.1 calculées avec verdict, trois piliers de regles.html 1.1.0, accents des 28 marques, polices livrées, focus (arbitrage A3), zone de protection et tailles minimales des logos tero et Koen. Aucune valeur inventée.",
 "$extensions": {
  "org.tero.harness": {
   "version": "1.0.0",
   "date": "2026-10-16",
   "entities": [
    "hospitality",
    "leisure-events"
   ],
   "brandCount": 28,
   "labels": [
    "MESURE",
    "REGLE",
    "A VALIDER CLIENT"
   ],
   "cssExport": "site/assets/css/charte.css",
   "contrastMethod": "WCAG 2.1, luminance relative",
   "supersededBy": "/brand/tokens.json",
   "supersededNote": "Depuis le 21/10/2026, la source canonique des jetons est /brand/tokens.json (v1.0.0 de l'API de marque), qui reprend ce fichier intégralement et l'étend (3 piliers, 28 accents, contrastes calculés, focus A3, logos). Ce fichier reste la photographie du harness 1.0.0 (2 entités) et n'évolue plus."
  },
  "org.tero.brand": {
   "version": "1.0.0",
   "date": "2026-10-21",
   "supersedes": "/harness/tokens.json (1.0.0, 16/10/2026 — conservé en lecture, pointe ici)",
   "sources": [
    "regles.html 1.1.0 § 2, § 3, § 4, § 7, § 12",
    "harness/tokens.json 1.0.0",
    "assets/css/charte.css",
    "docs/REGISTRE-LOGOS.md",
    "docs/koen/REGLES-KOEN.md",
    "assets/fonts/ (fichiers réellement livrés)"
   ],
   "cssExport": "/brand/tokens.css",
   "contrastMethod": "WCAG 2.1, luminance relative, arrondi à 2 décimales ; verdicts : AAA ≥ 7, AA texte ≥ 4,5, AA grand texte / UI ≥ 3",
   "piliers": "trois (Tero Hospitality · Tero Leisure · Tero Sport Events) selon regles.html 1.1.0 § 1.2 ; la fusion Leisure + Sport Events portée par harness 1.0.0 (entité leisure-events) reste [À VALIDER CLIENT] (regles § 1.4, note)"
  }
 },
 "color": {
  "$type": "color",
  "primitive": {
   "$description": "Couche 1 — mesuree. Un primitif n'est jamais consomme par un composant.",
   "black": {
    "$value": "#000000",
    "$description": "Texte et aplats. 21:1 sur blanc."
   },
   "white": {
    "$value": "#ffffff",
    "$description": "Fond principal. 1 443 occurrences mesurees sur tero.be."
   },
   "surface": {
    "$value": "#f6f4f4",
    "$description": "Surface secondaire. 388 occurrences."
   },
   "line": {
    "$value": "#d9d9d9",
    "$description": "Filet DECORATIF uniquement : 1,41:1 sur blanc, 1,29:1 sur surface. Jamais une bordure de controle."
   },
   "lineSoft": {
    "$value": "#e5e6e5",
    "$description": "Filet tres leger, fond de champ."
   },
   "inkSoft": {
    "$value": "#323232",
    "$description": "Encre forte alternative. 12,82:1 sur blanc."
   },
   "inkDeep": {
    "$value": "#212121",
    "$description": "Bande profonde alternative. Teal y tombe a 2,97:1 : jamais du texte teal dessus."
   },
   "fgMuted": {
    "$value": "#5f5f5f",
    "$description": "Encre discrete, libelles, placeholders. 6,39:1 sur blanc, 5,83:1 sur surface, 5,10:1 sur filet leger. REGLE v1.2."
   },
   "muted": {
    "$value": "#b9b9b9",
    "$description": "DESACTIVE uniquement : 1,96:1 sur blanc. Ne porte jamais de texte actif."
   },
   "borderStrong": {
    "$value": "#767676",
    "$description": "Toute bordure de CONTROLE : 4,54:1 sur blanc, 4,15:1 sur surface, 3,63:1 sur filet leger. SC 1.4.11. REGLE v1.2."
   },
   "deep": {
    "$value": "#0d1f30",
    "$description": "Bande profonde de reference (navy)."
   },
   "deepAlt": {
    "$value": "#212121",
    "$description": "Bande profonde alternative."
   },
   "darkBg": {
    "$value": "#0b1a28",
    "$description": "Fond du mode sombre."
   },
   "darkBgAlt": {
    "$value": "#0d1f30",
    "$description": "Surface du mode sombre."
   },
   "darkFg2": {
    "$value": "#d9d9d9",
    "$description": "Texte secondaire du mode sombre : 11,85:1 sur #0d1f30."
   },
   "darkFg3": {
    "$value": "#b9b9b9",
    "$description": "Texte tertiaire du mode sombre : 8,52:1 sur #0d1f30."
   },
   "codeFg": {
    "$value": "#e8f3f0",
    "$description": "Texte sur bloc de code profond : 14,74:1 sur #0d1f30."
   },
   "teal": {
    "$value": "#007864",
    "$description": "Accent institutionnel. 5,43:1 sur blanc. 2,97:1 sur #212121 : jamais en texte sur fond profond."
   },
   "petrol": {
    "$value": "#004b69",
    "$description": "Accent profond. 9,50:1 sur blanc."
   },
   "terracotta": {
    "$value": "#b93815",
    "$description": "Accent chaud, chiffres et signaletique. 5,77:1 sur blanc. Ancien accent du pilier Sport Events, supprime par la fusion du 16/10/2026."
   },
   "sand": {
    "$value": "#fad282",
    "$description": "Aplat chaud. 1,44:1 sur blanc : JAMAIS en texte ; noir dessus 14,61:1 ; 11,63:1 sur #0d1f30."
   },
   "rose": {
    "$value": "#d7b4b4",
    "$description": "Aplat doux. 1,90:1 sur blanc : jamais en texte ; noir dessus 11,08:1."
   },
   "cyan": {
    "$value": "#00b7ff",
    "$description": "Aplat frais. 2,28:1 sur blanc : jamais en texte ; noir dessus 9,22:1."
   },
   "pink": {
    "$value": "#ff1d58",
    "$description": "Aplat d'action rare. 3,77:1 sur blanc : jamais en texte, et jamais de texte blanc dessus."
   },
   "driftSage": {
    "$value": "#97ab83",
    "$description": "DERIVE, hors charte : 620 occurrences mesurees sur tero.be, 2,48:1. Interdit. Distinct de la sauge de Tero Studio #7c8f7a."
   },
   "logoArchive": {
    "$description": "5 valeurs des archives logo 2023 (rasters base64) : interdites en production.",
    "blue": {
     "$value": "#075f83"
    },
    "green": {
     "$value": "#068973"
    },
    "gold": {
     "$value": "#f4c567"
    },
    "mauve": {
     "$value": "#cea4a4"
    },
    "headerGrey": {
     "$value": "#292929"
    }
   },
   "$extensions": {
    "org.tero.cssNames": {
     "black": "--tero-black",
     "white": "--tero-white",
     "surface": "--tero-surface",
     "line": "--tero-line",
     "lineSoft": "--tero-line-soft",
     "inkSoft": "--tero-ink-soft",
     "inkDeep": "--tero-ink-deep",
     "muted": "--tero-muted",
     "inkMuted": "--tero-ink-muted",
     "borderStrong": "--ui-border-strong",
     "teal": "--tero-teal",
     "petrol": "--tero-petrol",
     "terracotta": "--tero-terracotta",
     "sand": "--tero-sand",
     "rose": "--tero-rose",
     "cyan": "--tero-cyan",
     "pink": "--tero-pink"
    }
   }
  },
  "semantic": {
   "$description": "Couche 2 — role. Le mode sombre est declare separement ; l'implementation est light-dark().",
   "light": {
    "bg": {
     "$value": "{color.primitive.white}",
     "$description": "Fond de page."
    },
    "bgAlt": {
     "$value": "{color.primitive.surface}",
     "$description": "Surface alternee."
    },
    "fg": {
     "$value": "{color.primitive.black}",
     "$description": "Texte principal. 21:1."
    },
    "fg2": {
     "$value": "{color.primitive.inkSoft}",
     "$description": "Texte secondaire. 12,82:1."
    },
    "fg3": {
     "$value": "{color.primitive.fgMuted}",
     "$description": "Texte discret, libelles, placeholders. 6,39:1."
    },
    "border": {
     "$value": "{color.primitive.lineSoft}",
     "$description": "Filet decoratif."
    },
    "hairline": {
     "$value": "{color.primitive.line}",
     "$description": "Filet decoratif 1 px. Jamais une bordure de controle."
    },
    "borderControl": {
     "$value": "{color.primitive.borderStrong}",
     "$description": "Bordure de champ, case, selecteur : 4,54:1. SC 1.4.11."
    },
    "accent": {
     "$value": "{color.primitive.teal}",
     "$description": "Accent par defaut du groupe."
    },
    "accentOn": {
     "$value": "{color.primitive.white}",
     "$description": "Texte sur aplat accent : 5,43:1."
    },
    "accentText": {
     "$value": "{color.primitive.teal}",
     "$description": "Accent en texte sur fond clair : 5,43:1 sur blanc, 4,95:1 sur surface."
    },
    "pillar": {
     "$value": "{color.primitive.teal}",
     "$description": "Accent de l'entite de rattachement."
    },
    "deep": {
     "$value": "{color.primitive.deep}",
     "$description": "Fond de bande profonde."
    },
    "deepFg": {
     "$value": "{color.primitive.white}",
     "$description": "Texte sur bande profonde : 16,72:1."
    },
    "deepAccent": {
     "$value": "{color.primitive.sand}",
     "$description": "Seul accent sur fond profond : 11,63:1 sur #0d1f30, 11,20:1 sur #212121."
    },
    "focus": {
     "$value": "{color.primitive.black}",
     "$description": "Anneau de focus sur fond clair ; halo blanc obligatoire."
    },
    "focusHalo": {
     "$value": "{color.primitive.white}",
     "$description": "Halo de separation de l'anneau."
    },
    "danger": {
     "$value": "{color.primitive.terracotta}",
     "$description": "Erreur : 5,77:1 sur blanc, 5,27:1 sur surface."
    },
    "success": {
     "$value": "{color.primitive.teal}",
     "$description": "Succes : 5,43:1."
    },
    "info": {
     "$value": "{color.primitive.petrol}",
     "$description": "Information : 9,50:1."
    },
    "disabledFg": {
     "$value": "{color.primitive.borderStrong}",
     "$description": "Etat desactive : 4,54:1, lisible bien que exempte de contraste."
    },
    "disabledBg": {
     "$value": "{color.primitive.surface}",
     "$description": "Fond desactive."
    },
    "selectionBg": {
     "$value": "{color.primitive.sand}",
     "$description": "Selection de texte."
    },
    "selectionFg": {
     "$value": "{color.primitive.black}",
     "$description": "Texte selectionne : 14,61:1."
    }
   },
   "dark": {
    "$description": "Mode sombre : tokens prets, deploiement public differe (arbitrage 8). Activations : prefers-color-scheme ou [data-theme=dark].",
    "bg": {
     "$value": "{color.primitive.darkBg}",
     "$description": "Fond : #0b1a28."
    },
    "bgAlt": {
     "$value": "{color.primitive.darkBgAlt}",
     "$description": "Surface : #0d1f30."
    },
    "fg": {
     "$value": "{color.primitive.white}",
     "$description": "Texte principal : 16,72:1 sur #0d1f30, 17,61:1 sur #0b1a28."
    },
    "fg2": {
     "$value": "{color.primitive.darkFg2}",
     "$description": "Texte secondaire : 11,85:1."
    },
    "fg3": {
     "$value": "{color.primitive.darkFg3}",
     "$description": "Texte tertiaire : 8,52:1. NE PAS reutiliser #5f5f5f ici : 2,62:1 seulement."
    },
    "border": {
     "$value": "rgba(255,255,255,0.16)",
     "$description": "Filet decoratif : 1,65:1. Decoratif uniquement."
    },
    "hairline": {
     "$value": "rgba(255,255,255,0.22)",
     "$description": "Filet decoratif : 2,02:1. Decoratif uniquement."
    },
    "borderControl": {
     "$value": "{color.primitive.borderStrong}",
     "$description": "Bordure de controle en mode sombre : 3,68:1 sur #0d1f30. REGLE — les filets alpha ci-dessus ne conviennent pas."
    },
    "accent": {
     "$value": "{color.primitive.sand}",
     "$description": "Accent du mode sombre : 11,63:1."
    },
    "accentOn": {
     "$value": "{color.primitive.black}",
     "$description": "Texte sur aplat sable : 14,61:1."
    },
    "accentText": {
     "$value": "{color.primitive.sand}",
     "$description": "Accent en texte sur fond sombre : 11,63:1."
    },
    "focus": {
     "$value": "{color.primitive.sand}",
     "$description": "Anneau de focus sur fond sombre."
    },
    "focusHalo": {
     "$value": "{color.primitive.black}",
     "$description": "Halo de separation."
    }
   }
  },
  "contrast": {
   "$description": "Paires calculées (WCAG 2.1). texte = couleur de premier plan sur fond ; aplat = texte noir ou blanc posé sur une des sept couleurs.",
   "texte": [
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 21.0,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 19.17,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 16.78,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 1.3,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 1.26,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "black",
     "fgHex": "#000000",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 1.19,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.1,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.14,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 19.17,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 14.7,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 15.26,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "surface",
     "fgHex": "#F6F4F4",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 16.07,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.41,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.29,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.13,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 14.88,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 11.41,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 11.85,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "line",
     "fgHex": "#D9D9D9",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 12.47,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.25,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.14,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 16.78,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 12.87,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 13.36,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "lineSoft",
     "fgHex": "#E5E6E5",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 14.07,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 12.82,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 11.7,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 10.25,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 1.64,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 1.26,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 1.3,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkSoft",
     "fgHex": "#323232",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 1.37,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 16.1,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 14.7,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 12.87,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 1.3,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 1.04,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkDeep",
     "fgHex": "#212121",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 1.09,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.96,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.79,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.57,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 10.7,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 8.21,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 8.52,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "muted",
     "fgHex": "#B9B9B9",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 8.97,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 6.39,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 5.83,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 5.1,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 3.29,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 2.52,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 2.62,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "inkMuted",
     "fgHex": "#5F5F5F",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 2.76,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 4.54,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 4.15,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 3.63,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 4.62,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 3.55,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 3.68,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "borderStrong",
     "fgHex": "#767676",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 3.88,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 5.43,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 4.95,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 4.34,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 3.87,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 2.97,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 3.08,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "teal",
     "fgHex": "#007864",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 3.25,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 9.5,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 8.67,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 7.59,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 2.21,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 1.69,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 1.76,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "petrol",
     "fgHex": "#004B69",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 1.85,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 5.77,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 5.27,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 4.61,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 3.64,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 2.79,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 2.9,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "terracotta",
     "fgHex": "#B93815",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 3.05,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.44,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.31,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.15,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 14.61,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 11.2,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 11.63,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "sand",
     "fgHex": "#FAD282",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 12.25,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 1.9,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.73,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.52,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 11.08,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 8.49,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 8.82,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "rose",
     "fgHex": "#D7B4B4",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 9.29,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 2.28,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 2.08,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.82,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 9.22,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 7.07,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 7.34,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "cyan",
     "fgHex": "#00B7FF",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 7.73,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "white",
     "bgHex": "#FFFFFF",
     "ratio": 3.77,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 3.44,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 3.01,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 5.57,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 4.27,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 4.43,
     "aaTexte": false,
     "aaGrandTexteUI": true,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "fg": "pink",
     "fgHex": "#FF1D58",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 4.67,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AA texte"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "surface",
     "bgHex": "#F6F4F4",
     "ratio": 1.1,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "lineSoft",
     "bgHex": "#E5E6E5",
     "ratio": 1.25,
     "aaTexte": false,
     "aaGrandTexteUI": false,
     "verdict": "échec"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "black",
     "bgHex": "#000000",
     "ratio": 21.0,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "inkDeep",
     "bgHex": "#212121",
     "ratio": 16.1,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "deep",
     "bgHex": "#0D1F30",
     "ratio": 16.72,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    },
    {
     "fg": "white",
     "fgHex": "#FFFFFF",
     "bg": "darkBg",
     "bgHex": "#0B1A28",
     "ratio": 17.61,
     "aaTexte": true,
     "aaGrandTexteUI": true,
     "verdict": "AAA texte"
    }
   ],
   "aplats": [
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "teal",
     "aplatHex": "#007864",
     "ratio": 3.87,
     "aaTexte": false,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "teal",
     "aplatHex": "#007864",
     "ratio": 5.43,
     "aaTexte": true,
     "verdict": "AA texte"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "petrol",
     "aplatHex": "#004B69",
     "ratio": 2.21,
     "aaTexte": false,
     "verdict": "échec"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "petrol",
     "aplatHex": "#004B69",
     "ratio": 9.5,
     "aaTexte": true,
     "verdict": "AAA texte"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "terracotta",
     "aplatHex": "#B93815",
     "ratio": 3.64,
     "aaTexte": false,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "terracotta",
     "aplatHex": "#B93815",
     "ratio": 5.77,
     "aaTexte": true,
     "verdict": "AA texte"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "sand",
     "aplatHex": "#FAD282",
     "ratio": 14.61,
     "aaTexte": true,
     "verdict": "AAA texte"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "sand",
     "aplatHex": "#FAD282",
     "ratio": 1.44,
     "aaTexte": false,
     "verdict": "échec"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "rose",
     "aplatHex": "#D7B4B4",
     "ratio": 11.08,
     "aaTexte": true,
     "verdict": "AAA texte"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "rose",
     "aplatHex": "#D7B4B4",
     "ratio": 1.9,
     "aaTexte": false,
     "verdict": "échec"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "cyan",
     "aplatHex": "#00B7FF",
     "ratio": 9.22,
     "aaTexte": true,
     "verdict": "AAA texte"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "cyan",
     "aplatHex": "#00B7FF",
     "ratio": 2.28,
     "aaTexte": false,
     "verdict": "échec"
    },
    {
     "texte": "black",
     "texteHex": "#000000",
     "aplat": "pink",
     "aplatHex": "#FF1D58",
     "ratio": 5.57,
     "aaTexte": true,
     "verdict": "AA texte"
    },
    {
     "texte": "white",
     "texteHex": "#FFFFFF",
     "aplat": "pink",
     "aplatHex": "#FF1D58",
     "ratio": 3.77,
     "aaTexte": false,
     "verdict": "AA grand texte / UI (SC 1.4.11)"
    }
   ]
  }
 },
 "brand": {
  "$description": "Les trois variables d'accent obligatoires. Un accent sans ses trois valeurs est refuse (regle 7).",
  "accent": {
   "$type": "color",
   "$value": "{color.primitive.teal}",
   "$description": "Groupe : aplat, filet, pastille. 5,43:1 en texte sur blanc."
  },
  "accentOn": {
   "$type": "color",
   "$value": "{color.primitive.white}",
   "$description": "Groupe : texte sur aplat accent. 5,43:1."
  },
  "accentText": {
   "$type": "color",
   "$value": "{color.primitive.teal}",
   "$description": "Groupe : accent en texte. 5,43:1 sur blanc, 4,95:1 sur #f6f4f4, 2,97:1 sur #212121 — interdit sur fond profond."
  }
 },
 "theme": {
  "$description": "Declinaison par entite et par marque. Seuls l'accent et l'imagerie sont surchargeables ; typographie, grille, rayons, etats et composants sont verrouilles. accentTextDeep : couleur de texte d'accent sur bande profonde (exigee par les 16 marques Hospitality).",
  "entity": {
   "hospitality": {
    "name": {
     "$type": "string",
     "$value": "Tero Hospitality",
     "$description": "16 marques. Toujours en toutes lettres, jamais abrege ni traduit."
    },
    "accent": {
     "$type": "color",
     "$value": "{color.primitive.teal}",
     "$description": "#007864."
    },
    "accentOn": {
     "$type": "color",
     "$value": "{color.primitive.white}",
     "$description": "5,43:1."
    },
    "accentText": {
     "$type": "color",
     "$value": "{color.primitive.teal}",
     "$description": "5,43:1 sur blanc ; 4,95:1 sur surface."
    }
   },
   "leisure-events": {
    "name": {
     "$type": "string",
     "$value": "Tero Leisure & Sport Events",
     "$description": "12 marques. Nom de travail issu de la fusion du 16/10/2026 : A ARBITRER."
    },
    "accent": {
     "$type": "color",
     "$value": "{color.primitive.petrol}",
     "$description": "#004b69."
    },
    "accentOn": {
     "$type": "color",
     "$value": "{color.primitive.white}",
     "$description": "9,50:1."
    },
    "accentText": {
     "$type": "color",
     "$value": "{color.primitive.petrol}",
     "$description": "9,50:1 sur blanc ; 8,67:1 sur surface."
    }
   },
   "campaign": {
    "name": {
     "$type": "string",
     "$value": "Campagne / signaletique",
     "$description": "Role transverse. N'est plus un accent de pilier depuis la fusion."
    },
    "accent": {
     "$type": "color",
     "$value": "{color.primitive.terracotta}",
     "$description": "#b93815."
    },
    "accentOn": {
     "$type": "color",
     "$value": "{color.primitive.white}",
     "$description": "5,77:1."
    },
    "accentText": {
     "$type": "color",
     "$value": "{color.primitive.terracotta}",
     "$description": "5,77:1 sur blanc ; 5,27:1 sur surface."
    }
   },
   "$description": "Entités du harness 1.0.0 (2 entités, fusion du 16/10/2026) — CONSERVÉ pour compatibilité ; la référence 1.1.0 est theme.pillar (3 piliers)."
  },
  "brand": {
   "$description": "Trois variables d'accent par marque, scellées au domaine (regles § 2.5 ; marques/*.html). accentText null = l'accent ne porte jamais de texte : liens en encre soulignés, aucune teinte dérivée par calcul.",
   "tero-lieux": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] accent du pilier ; aplat et texte autorisés sur blanc (5,43:1) ; interdit en texte sur #212121 (2,97:1)"
   },
   "tero-lodges": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] faute d'accent de marque mesuré : trois variables du pilier (marques/<id>.html § Signature visuelle)"
   },
   "malle-poste": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[MESURÉ] texte autorisé sur blanc (5,43:1) ; interdit en texte sur bande profonde (2,97:1)"
   },
   "river-house": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "house17": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "foresthouse": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "eventhouse-waterloo": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "terblock": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "lime-jhsp": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[À VALIDER CLIENT] accent du pilier appliqué faute d'accent de marque mesuré ; à confirmer si Lime possède son propre code couleur (marques/<id>.html § Signature visuelle)"
   },
   "river-woods": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "tero-team-building": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "teroir": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier ; --ui-accent-text #007864 (5,43:1) ; le logo couleur se pose sur fond clair"
   },
   "knokke-out": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "bistro-17": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "bistro-pilko": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "nest-zwin": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[RÈGLE] teal du pilier Tero Hospitality appliqué par défaut, aucun accent de marque mesuré (marques/<id>.html § Signature visuelle)"
   },
   "tero-padel-club": {
    "accent": {
     "$type": "color",
     "$value": "#FF2E82"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#000000",
     "$description": "5.97:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": null,
     "$description": "NON FOURNI — repli : liens en encre soulignés"
    },
    "$description": "[MESURÉ] magenta signature, 3,52:1 sur blanc : aplats, filets, pastilles — jamais du texte ; accentText NON FOURNI → liens en encre soulignés ; second accent lime #E9F44E, aplat uniquement (regles.html 1.1.0 § 2.5)"
   },
   "tero-padel-academy": {
    "accent": {
     "$type": "color",
     "$value": "#FF2E82"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#000000",
     "$description": "5.97:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": null,
     "$description": "NON FOURNI — repli : liens en encre soulignés"
    },
    "$description": "[RÈGLE] accent hérité du domaine teropadelclub.be — « un accent par marque, scellé à son domaine » : sans domaine, pas d'accent nouveau"
   },
   "tero-studio": {
    "accent": {
     "$type": "color",
     "$value": "#7C8F7A"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#000000",
     "$description": "6.07:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": null,
     "$description": "NON FOURNI — repli : liens en encre soulignés"
    },
    "$description": "[MESURÉ] sauge 3,46:1 sur blanc : jamais du texte ; aplats, filets, pastilles ; accentText NON FOURNI → liens en encre soulignés ; distincte de la sauge de dérive #97AB83"
   },
   "garisart": {
    "accent": {
     "$type": "color",
     "$value": "#AAC440"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#000000",
     "$description": "10.68:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": null,
     "$description": "NON FOURNI — repli : liens en encre soulignés"
    },
    "$description": "[MESURÉ] lime 1,97:1 sur blanc : aplats uniquement, jamais du texte ni un état ; accentText NON FOURNI → liens en encre soulignés"
   },
   "immorun": {
    "accent": {
     "$type": "color",
     "$value": "#263062"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "12.49:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#263062",
     "$description": "12.49:1 sur blanc ; 11.4:1 sur surface"
    },
    "$description": "[MESURÉ] navy theme-color ; 12,49:1 sur blanc ; jamais sur #212121 (1,29:1), jamais de noir sur aplat (1,68:1)"
   },
   "batirun": {
    "accent": {
     "$type": "color",
     "$value": "#C0001E"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "6.44:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#C0001E",
     "$description": "6.44:1 sur blanc ; 5.88:1 sur surface"
    },
    "$description": "[MESURÉ] rouge scellé à batirun.be ; 6,44:1 sur blanc ; noir sur aplat rouge 3,26:1 interdit ; regles.html 1.1.0 § 2.5 relève aussi #0E143C pour Batirun : À VALIDER CLIENT"
   },
   "bouwrun": {
    "accent": {
     "$type": "color",
     "$value": "#C0001E"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "6.44:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#C0001E",
     "$description": "6.44:1 sur blanc ; 5.88:1 sur surface"
    },
    "$description": "[MESURÉ] même accent que Batirun (6,44:1) ; attribution définitive à trancher avec Batirun"
   },
   "buildandrun": {
    "accent": {
     "$type": "color",
     "$value": "#575756"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "7.23:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#575756",
     "$description": "7.23:1 sur blanc ; 6.6:1 sur surface"
    },
    "$description": "[MESURÉ] gris 7,23:1 ; réservé aux filets, sur-titres et dossard — un aplat gris n'a pas de charge signalétique"
   },
   "impactrun": {
    "accent": {
     "$type": "color",
     "$value": "#183F3C"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "11.57:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#183F3C",
     "$description": "11.57:1 sur blanc ; 10.56:1 sur surface"
    },
    "$description": "[MESURÉ] vert encre theme-color ; 11,57:1 sur blanc ; noir sur aplat 1,82:1 interdit"
   },
   "terotrail": {
    "accent": {
     "$type": "color",
     "$value": "#2B4336"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "10.72:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#2B4336",
     "$description": "10.72:1 sur blanc ; 9.78:1 sur surface"
    },
    "$description": "[MESURÉ] vert forêt scellé à terotrail.be ; 10,72:1 ; noir sur aplat 1,96:1 interdit ; secondaire #8FB8A5 en aplat uniquement"
   },
   "bpp": {
    "accent": {
     "$type": "color",
     "$value": "#A56933"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#000000",
     "$description": "4.67:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#8E5525",
     "$description": "6.04:1 sur blanc ; 5.51:1 sur surface"
    },
    "$description": "[MESURÉ] orange 4,50:1 pile sur blanc : aplat avec encre noire ; accentText #8E5525 (6,04:1 sur blanc, 5,51:1 sur crème) recalculé le 16/10/2026"
   },
   "12km-anderlecht": {
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1 sur l'aplat"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface"
    },
    "$description": "[À VALIDER CLIENT] accent institutionnel, pas d'accent propre : collision teal marque / teal groupe à trancher"
   }
  },
  "accentTextDeep": {
   "$value": "#fad282",
   "$type": "color",
   "$description": "Texte d'accent sur bande profonde (sable officiel) : 11.20:1 sur #212121 et 14.61:1 sur noir. Ne jamais l'employer comme aplat portant du texte blanc."
  },
  "pillar": {
   "$description": "Accent de pilier (regles 1.1.0 § 21 : institutionnel teal → pilier Hospitality teal · Leisure pétrole · Sport Events terracotta). Toujours en toutes lettres, jamais abrégé ni traduit.",
   "hospitality": {
    "name": {
     "$type": "string",
     "$value": "Tero Hospitality"
    },
    "accent": {
     "$type": "color",
     "$value": "#007864"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.43:1"
    },
    "accentText": {
     "$type": "color",
     "$value": "#007864",
     "$description": "5.43:1 sur blanc ; 4.95:1 sur surface ; 2.97:1 sur #212121"
    },
    "brandCount": {
     "$type": "number",
     "$value": 16
    }
   },
   "leisure": {
    "name": {
     "$type": "string",
     "$value": "Tero Leisure"
    },
    "accent": {
     "$type": "color",
     "$value": "#004B69"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "9.5:1"
    },
    "accentText": {
     "$type": "color",
     "$value": "#004B69",
     "$description": "9.5:1 sur blanc ; 8.67:1 sur surface ; 1.69:1 sur #212121"
    },
    "brandCount": {
     "$type": "number",
     "$value": 4
    }
   },
   "sport-events": {
    "name": {
     "$type": "string",
     "$value": "Tero Sport Events"
    },
    "accent": {
     "$type": "color",
     "$value": "#B93815"
    },
    "accentOn": {
     "$type": "color",
     "$value": "#FFFFFF",
     "$description": "5.77:1"
    },
    "accentText": {
     "$type": "color",
     "$value": "#B93815",
     "$description": "5.77:1 sur blanc ; 5.27:1 sur surface ; 2.79:1 sur #212121"
    },
    "brandCount": {
     "$type": "number",
     "$value": 8
    }
   }
  }
 },
 "typography": {
  "$description": "Almarose uniquement. Une graisse n'est autorisee que si son fichier .woff2 existe : 400/500/600/700/900. Le 800 est interdit.",
  "family": {
   "display": {
    "$type": "fontFamily",
    "$value": [
     "Almarose",
     "Almarose Fallback",
     "ui-sans-serif",
     "system-ui",
     "sans-serif"
    ],
    "$description": "Famille unique du groupe."
   },
   "script": {
    "$type": "fontFamily",
    "$value": [
     "WildYouth",
     "Almarose",
     "sans-serif"
    ],
    "$description": "Script d'accent : un seul mot par page, 32 px maximum, subset latin obligatoire."
   }
  },
  "weight": {
   "regular": {
    "$type": "fontWeight",
    "$value": 400
   },
   "medium": {
    "$type": "fontWeight",
    "$value": 500
   },
   "semibold": {
    "$type": "fontWeight",
    "$value": 600
   },
   "bold": {
    "$type": "fontWeight",
    "$value": 700
   },
   "black": {
    "$type": "fontWeight",
    "$value": 900,
    "$description": "almarose-900.woff2 existe : autorise. Le 800 n'existe pas : interdit."
   }
  },
  "size": {
   "label": {
    "$type": "dimension",
    "$value": {
     "value": 0.75,
     "unit": "rem"
    },
    "$description": "12 px. Sur-titres en capitales, 600, letter-spacing .2em."
   },
   "meta": {
    "$type": "dimension",
    "$value": {
     "value": 0.875,
     "unit": "rem"
    },
    "$description": "14 px. Mentions, legendes, notes."
   },
   "body": {
    "$type": "dimension",
    "$value": {
     "value": 1,
     "unit": "rem"
    },
    "$description": "16 px. Corps de texte, interlignage 1,65."
   },
   "lead": {
    "$type": "dimension",
    "$value": {
     "value": 1.125,
     "unit": "rem"
    },
    "$description": "18 px. Chapo."
   },
   "h3": {
    "$type": "dimension",
    "$value": {
     "value": 1.25,
     "unit": "rem"
    },
    "$description": "20 px."
   },
   "h2": {
    "$type": "string",
    "$value": "clamp(1.75rem, 1.2rem + 2.2vw, 2.75rem)",
    "$description": "Expression CSS fluide : 28 a 44 px. DTCG n'exprime pas clamp() ; les bornes sont dans $extensions.",
    "$extensions": {
     "org.tero.fluid": {
      "minPx": 28,
      "maxPx": 44
     }
    }
   },
   "h1": {
    "$type": "string",
    "$value": "clamp(2.5rem, 1.4rem + 5vw, 5.5rem)",
    "$description": "Expression CSS fluide : 40 a 88 px. Un seul H1 par page. Bornes dans $extensions.",
    "$extensions": {
     "org.tero.fluid": {
      "minPx": 40,
      "maxPx": 88
     }
    }
   },
   "mega": {
    "$type": "string",
    "$value": "clamp(3.5rem, 1rem + 12vw, 11rem)",
    "$description": "Expression CSS fluide : 56 a 176 px. Couverture et titres d'accroche uniquement. Bornes dans $extensions.",
    "$extensions": {
     "org.tero.fluid": {
      "minPx": 56,
      "maxPx": 176
     }
    }
   }
  },
  "lineHeight": {
   "body": {
    "$type": "number",
    "$value": 1.65
   },
   "title": {
    "$type": "number",
    "$value": 1.06
   },
   "label": {
    "$type": "number",
    "$value": 1.2
   }
  },
  "letterSpacing": {
   "title": {
    "$type": "dimension",
    "$value": {
     "value": -0.022,
     "unit": "em"
    }
   },
   "label": {
    "$type": "dimension",
    "$value": {
     "value": 0.2,
     "unit": "em"
    }
   }
  },
  "measure": {
   "text": {
    "$type": "dimension",
    "$value": {
     "value": 62,
     "unit": "ch"
    },
    "$description": "Mesure de lecture maximale."
   }
  },
  "files": {
   "$description": "Graisses autorisées = fichiers réellement livrés. 800 interdit (aucun fichier : faux gras synthétique).",
   "delivered": [
    {
     "file": "/assets/fonts/almarose-400.woff2",
     "bytes": 18404
    },
    {
     "file": "/assets/fonts/almarose-500.woff2",
     "bytes": 18284
    },
    {
     "file": "/assets/fonts/almarose-600.woff2",
     "bytes": 18504
    },
    {
     "file": "/assets/fonts/almarose-700.woff2",
     "bytes": 23808
    },
    {
     "file": "/assets/fonts/almarose-900.woff2",
     "bytes": 15696
    },
    {
     "file": "/assets/fonts/wildyouth-subset.woff2",
     "bytes": 27772
    },
    {
     "file": "/assets/fonts/wildyouth.woff2",
     "bytes": 118728
    }
   ],
   "forbiddenWeights": [
    800
   ]
  },
  "scale": {
   "$description": "Rampe opposable regles § 3.2 (px → rem, interlignage). Aucune taille hors rampe.",
   "label": {
    "px": "12",
    "rem": "0.75",
    "lineHeight": 1.2,
    "usage": "libellés, sur-titres, majuscules espacées"
   },
   "meta": {
    "px": "13–14",
    "rem": "0.8125–0.875",
    "lineHeight": 1.45,
    "usage": "mentions, dates, légendes"
   },
   "body": {
    "px": "15–16",
    "rem": "0.9375–1",
    "lineHeight": 1.65,
    "usage": "corps (16 px à 375)"
   },
   "lead": {
    "px": "18",
    "rem": "1.125",
    "lineHeight": 1.6,
    "usage": "chapô"
   },
   "titleS": {
    "px": "20–25",
    "rem": "1.25–1.5625",
    "lineHeight": 1.25,
    "usage": "titre de carte, sous-titre"
   },
   "titleM": {
    "px": "30–32",
    "rem": "1.875–2",
    "lineHeight": 1.15,
    "usage": "titre de section"
   },
   "titleL": {
    "px": "40–50",
    "rem": "2.5–3.125",
    "lineHeight": 1.08,
    "usage": "titre de page"
   },
   "display": {
    "px": "60–80",
    "rem": "3.75–5",
    "lineHeight": 1.02,
    "usage": "titre d'accueil uniquement"
   }
  },
  "weightUsage": {
   "$description": "Arbitrage A2 (21/10/2026)",
   "coverH1": 900,
   "pageH1": "600–700",
   "h2": "500–600",
   "h3": 500,
   "body": 400,
   "emphasis": 600,
   "kpi": 900,
   "forbidden": 800
  },
  "letterSpacingRule": {
   "titles": "-0.01em à -0.02em",
   "eyebrow": "+0.18em (capitales)",
   "koenEndorsement": "+0.18em, Almarose 600, capitales"
  },
  "script": {
   "family": "WildYouth",
   "rule": "un seul mot par page ; jamais paragraphe, titre principal ni interface ; teal sur clair, sable sur profond ; ≤ 32 px ; subset latin (arbitrage A1)",
   "file": "/assets/fonts/wildyouth-subset.woff2"
  }
 },
 "space": {
  "$description": "Echelle unique. Aucune valeur hors echelle : un espacement hors echelle est un defaut.",
  "s1": {
   "$type": "dimension",
   "$value": {
    "value": 0.5,
    "unit": "rem"
   }
  },
  "s2": {
   "$type": "dimension",
   "$value": {
    "value": 1,
    "unit": "rem"
   }
  },
  "s3": {
   "$type": "dimension",
   "$value": {
    "value": 1.5,
    "unit": "rem"
   }
  },
  "s4": {
   "$type": "dimension",
   "$value": {
    "value": 2.5,
    "unit": "rem"
   }
  },
  "s5": {
   "$type": "dimension",
   "$value": {
    "value": 4,
    "unit": "rem"
   }
  },
  "s6": {
   "$type": "dimension",
   "$value": {
    "value": 6,
    "unit": "rem"
   }
  },
  "s7": {
   "$type": "dimension",
   "$value": {
    "value": 9,
    "unit": "rem"
   }
  },
  "section": {
   "$type": "string",
   "$value": "clamp(4rem, 3rem + 5vw, 8rem)",
   "$description": "Padding vertical d'une section : 64 a 128 px. Bornes dans $extensions.",
   "$extensions": {
    "org.tero.fluid": {
     "minPx": 64,
     "maxPx": 128
    }
   }
  },
  "gutter": {
   "$type": "string",
   "$value": "clamp(1.25rem, 4vw, 3.5rem)",
   "$description": "Marge laterale : 20 a 56 px. Bornes dans $extensions.",
   "$extensions": {
    "org.tero.fluid": {
     "minPx": 20,
     "maxPx": 56
    }
   }
  },
  "tapTarget": {
   "$type": "dimension",
   "$value": {
    "value": 44,
    "unit": "px"
   },
   "$description": "Cible tactile minimale. Plancher legal WCAG 2.2 : 24 x 24 px."
  }
 },
 "radius": {
  "$description": "Trois rayons opposables (regles § 7.2) : pill 999 px (boutons), plate 20 px (plaques rares), card 12 px (images et médias). Le harness ajoute s = 8 px (champs). Un rayon de plus est un défaut.",
  "s": {
   "$type": "dimension",
   "$value": {
    "value": 0.5,
    "unit": "rem"
   },
   "$description": "8 px : champs, petites surfaces."
  },
  "m": {
   "$type": "dimension",
   "$value": {
    "value": 0.75,
    "unit": "rem"
   },
   "$description": "12 px : medias."
  },
  "l": {
   "$type": "dimension",
   "$value": {
    "value": 1.25,
    "unit": "rem"
   },
   "$description": "20 px : plaques rares."
  },
  "pill": {
   "$type": "dimension",
   "$value": {
    "value": 999,
    "unit": "px"
   },
   "$description": "Boutons. Le CTA mesure du site faisait 38 px : on ne reproduit pas 38 px."
  },
  "plate": {
   "$type": "dimension",
   "$value": {
    "value": 1.25,
    "unit": "rem"
   },
   "$description": "20 px : plaques rares."
  },
  "card": {
   "$type": "dimension",
   "$value": {
    "value": 0.75,
    "unit": "rem"
   },
   "$description": "12 px : medias."
  }
 },
 "shadow": {
  "$description": "Une seule ombre, reservee aux surfaces flottantes (en-tete collant, menu, modale, notification). Jamais sur une carte de contenu : la carte empilee (fond + bordure + rayon + ombre) est interdite.",
  "soft": {
   "$type": "shadow",
   "$value": {
    "color": "rgba(0,0,0,0.06)",
    "offsetX": {
     "value": 0,
     "unit": "px"
    },
    "offsetY": {
     "value": 1,
     "unit": "px"
    },
    "blur": {
     "value": 2,
     "unit": "px"
    },
    "spread": {
     "value": 0,
     "unit": "px"
    }
   },
   "$description": "Premier niveau."
  },
  "float": {
   "$type": "shadow",
   "$value": {
    "color": "rgba(0,0,0,0.06)",
    "offsetX": {
     "value": 0,
     "unit": "px"
    },
    "offsetY": {
     "value": 10,
     "unit": "px"
    },
    "blur": {
     "value": 30,
     "unit": "px"
    },
    "spread": {
     "value": 0,
     "unit": "px"
    }
   },
   "$description": "Second niveau, surfaces flottantes."
  }
 },
 "motion": {
  "$description": "Une seule courbe pour toutes les transitions. Aucune transition de box-shadow.",
  "duration": {
   "instant": {
    "$type": "duration",
    "$value": {
     "value": 0,
     "unit": "ms"
    },
    "$description": "prefers-reduced-motion : les durees sont neutralisees."
   },
   "feedback": {
    "$type": "duration",
    "$value": {
     "value": 180,
     "unit": "ms"
    },
    "$description": "Couleur, opacite, soulignement, bouton."
   },
   "reveal": {
    "$type": "duration",
    "$value": {
     "value": 600,
     "unit": "ms"
    },
    "$description": "Apparition au defilement (CSS scroll-driven si disponible)."
   }
  },
  "easing": {
   "standard": {
    "$type": "cubicBezier",
    "$value": [
     0.23,
     1,
     0.32,
     1
    ],
    "$description": "Courbe unique du groupe."
   }
  },
  "rule": {
   "$description": "regles § 9 : 150 à 250 ms, courbe stable, mouvement dans l'image, prefers-reduced-motion respecté ; Koen : l'arc se lève une fois, 150–250 ms, out-expo",
   "minMs": 150,
   "maxMs": 250
  }
 },
 "layout": {
  "pageWidth": {
   "$type": "dimension",
   "$value": {
    "value": 1180,
    "unit": "px"
   },
   "$description": "Largeur de contenu maximale."
  },
  "sidebar": {
   "$type": "dimension",
   "$value": {
    "value": 260,
    "unit": "px"
   },
   "$description": "Colonne laterale des documents de charte (>= 1080 px)."
  },
  "breakpoints": {
   "$description": "Points de rupture de controle et de capture.",
   "xs": {
    "$type": "dimension",
    "$value": {
     "value": 360,
     "unit": "px"
    }
   },
   "sm": {
    "$type": "dimension",
    "$value": {
     "value": 390,
     "unit": "px"
    }
   },
   "md": {
    "$type": "dimension",
    "$value": {
     "value": 768,
     "unit": "px"
    }
   },
   "lg": {
    "$type": "dimension",
    "$value": {
     "value": 1024,
     "unit": "px"
    }
   },
   "xl": {
    "$type": "dimension",
    "$value": {
     "value": 1440,
     "unit": "px"
    }
   }
  },
  "zIndex": {
   "sticky": {
    "$type": "number",
    "$value": 20,
    "$description": "En-tete collant."
   },
   "progress": {
    "$type": "number",
    "$value": 50,
    "$description": "Barre de progression."
   },
   "overlay": {
    "$type": "number",
    "$value": 99,
    "$description": "Voile et lien d'evitement."
   }
  }
 },
 "component": {
  "$description": "Couche 3 — usage. Aucun composant ne consomme un primitif : il consomme semantic ou component.",
  "button": {
   "minHeight": {
    "$type": "dimension",
    "$value": {
     "value": 44,
     "unit": "px"
    }
   },
   "paddingInline": {
    "$type": "dimension",
    "$value": {
     "value": 1.1,
     "unit": "rem"
    }
   },
   "radius": {
    "$type": "dimension",
    "$value": "{radius.pill}"
   },
   "fontWeight": {
    "$type": "fontWeight",
    "$value": 600
   },
   "fontSize": {
    "$type": "dimension",
    "$value": {
     "value": 0.92,
     "unit": "rem"
    }
   },
   "primaryBg": {
    "$type": "color",
    "$value": "{color.primitive.black}",
    "$description": "CTA principal du groupe : usage mesure (.cta.bg-black). 21:1 avec texte blanc."
   },
   "primaryFg": {
    "$type": "color",
    "$value": "{color.primitive.white}"
   },
   "secondaryBg": {
    "$type": "color",
    "$value": "{color.primitive.teal}",
    "$description": "CTA secondaire et editorial : 5,43:1 avec texte blanc."
   },
   "deepBg": {
    "$type": "color",
    "$value": "{color.primitive.sand}",
    "$description": "Sur bande profonde uniquement : texte noir, 14,61:1."
   },
   "deepFg": {
    "$type": "color",
    "$value": "{color.primitive.black}"
   }
  },
  "field": {
   "border": {
    "$type": "color",
    "$value": "{color.semantic.light.borderControl}",
    "$description": "#767676 : 4,54:1. SC 1.4.11. Jamais #d9d9d9."
   },
   "placeholder": {
    "$type": "color",
    "$value": "{color.semantic.light.fg3}",
    "$description": "#5f5f5f : 6,39:1. Jamais #b9b9b9."
   },
   "fontSizeMin": {
    "$type": "dimension",
    "$value": {
     "value": 16,
     "unit": "px"
    },
    "$description": "Anti-zoom iOS."
   },
   "radioSize": {
    "$type": "dimension",
    "$value": {
     "value": 20,
     "unit": "px"
    }
   },
   "invalidBorder": {
    "$type": "color",
    "$value": "{color.semantic.light.danger}"
   }
  },
  "card": {
   "radius": {
    "$type": "dimension",
    "$value": "{radius.m}"
   },
   "background": {
    "$type": "color",
    "$value": "transparent",
    "$description": "Une carte n'a ni fond, ni bordure, ni rayon, ni ombre : le titre et le filet portent la structure."
   },
   "medium": {
    "$type": "string",
    "$value": "3 / 2",
    "$description": "Ratio de media par defaut."
   },
   "titleWeight": {
    "$type": "fontWeight",
    "$value": 600
   }
  },
  "band": {
   "background": {
    "$type": "color",
    "$value": "{color.primitive.deep}"
   },
   "color": {
    "$type": "color",
    "$value": "{color.primitive.white}",
    "$description": "16,72:1."
   },
   "accent": {
    "$type": "color",
    "$value": "{color.semantic.light.deepAccent}",
    "$description": "Sable : 11,63:1. Le teal tombe a 3,08:1 ici — jamais."
   },
   "rule": {
    "$type": "color",
    "$value": "rgba(255,255,255,0.25)",
    "$description": "Filet decoratif de bande."
   }
  },
  "focus": {
   "width": {
    "$type": "dimension",
    "$value": {
     "value": 2,
     "unit": "px"
    }
   },
   "offset": {
    "$type": "dimension",
    "$value": {
     "value": 3,
     "unit": "px"
    }
   },
   "ring": {
    "$type": "color",
    "$value": "{color.semantic.light.focus}",
    "$description": "Noir sur fond clair ; sable sur fond profond. Jamais supprime."
   },
   "halo": {
    "$type": "color",
    "$value": "{color.semantic.light.focusHalo}"
   }
  },
  "eyebrow": {
   "size": {
    "$type": "dimension",
    "$value": "{typography.size.label}"
   },
   "weight": {
    "$type": "fontWeight",
    "$value": 600
   },
   "spacing": {
    "$type": "dimension",
    "$value": "{typography.letterSpacing.label}"
   },
   "color": {
    "$type": "color",
    "$value": "{color.semantic.light.accentText}",
    "$description": "Sur-titre : accent en texte, contraste verifie."
   }
  },
  "kpi": {
   "weight": {
    "$type": "fontWeight",
    "$value": 900,
    "$description": "Les grands nombres sont en 900 (fichier existant), tabular-nums."
   },
   "variant": {
    "$type": "string",
    "$value": "tabular-nums"
   }
  }
 },
 "focus": {
  "$description": "Arbitrage A3 (regles § 7.1 / § 12.8). Anneau dépendant du champ, jamais supprimé, scroll-margin sur les cibles.",
  "ringWidth": {
   "$type": "dimension",
   "$value": {
    "value": 2,
    "unit": "px"
   }
  },
  "ringOffset": {
   "$type": "dimension",
   "$value": {
    "value": 2,
    "unit": "px"
   },
   "$description": "A3 : 2 px. charte.css mesure 3 px sur les pages doc : écart documenté, non bloquant."
  },
  "haloWidth": {
   "$type": "dimension",
   "$value": {
    "value": 4,
    "unit": "px"
   },
   "$description": "box-shadow: 0 0 0 4px <halo>"
  },
  "light": {
   "ring": {
    "$type": "color",
    "$value": "#000000"
   },
   "halo": {
    "$type": "color",
    "$value": "#FFFFFF"
   }
  },
  "deep": {
   "ring": {
    "$type": "color",
    "$value": "#FAD282",
    "$description": "sable : 11,20:1 sur #212121, 14,61:1 sur noir ; sur bande profonde, teal ou pétrole"
   },
   "halo": {
    "$type": "color",
    "$value": "#000000"
   }
  },
  "forbidden": [
   "teal seul (1,00:1 sur aplat teal, 2,97:1 sur #212121)",
   "cyan 3 px (2,28:1 sur blanc)",
   "outline: none"
  ]
 },
 "logo": {
  "$description": "Zone de protection et tailles minimales (docs/REGISTRE-LOGOS.md, regles § 4.2 et § 12.4). X = unité de respiration.",
  "tero": {
   "wordmark": {
    "viewBox": "0 0 100 40",
    "ratio": 2.535,
    "minWidthPx": 88,
    "minWidthMm": 25,
    "thinnestStrokePx": 5.7,
    "X": "0.265 × largeur du mot-symbole (diamètre de l'anneau du o)",
    "clearanceMin": "0.5 X",
    "clearanceRecommended": "1 X",
    "internalMargin": 0
   },
   "monogram": {
    "ratio": 0.684,
    "minHeightPx": 16,
    "minHeightMm": 6,
    "stampMm": 8,
    "strokePx": 2.7,
    "X": "0.684 × hauteur du monogramme"
   }
  },
  "koen": {
   "wordmark": {
    "viewBox": "3.002 2.705 115.925 36.901",
    "ratio": 3.142,
    "minWidthPx": 104,
    "minWidthMm": 30,
    "strokePxAtMin": 5.8,
    "X": "0.229 × largeur du mot-symbole",
    "clearanceMin": "0.5 X",
    "clearanceRecommended": "1 X",
    "maxHeightVsTero": 0.6
   },
   "symbol": {
    "viewBox": "0 13.456 26.509 25.569",
    "ratio": 1.037,
    "minHeightPx": 16,
    "minHeightMm": 6
   },
   "favicon": {
    "square": 38.173,
    "radiusPct": 22,
    "marginPct": 15,
    "background": "#000000"
   }
  }
 }
}
