{
 "openapi": "3.1.0",
 "info": {
  "title": "Brand API — Charte TERO GROUP",
  "version": "1.0.0",
  "summary": "La charte de marque Tero lisible par les machines : fichiers statiques versionnés servis depuis charte.tero.be.",
  "description": "Ressources GET en lecture seule, sans authentification, servies en statique par nginx. Chaque fichier porte `version`, `date` et `source`. Le versionnage est sémantique : MAJOR = changement de structure incompatible, MINOR = champ ou entrée ajoutés, PATCH = correction de valeur. Les URL ne changent pas ; les anciennes versions sont archivées dans le dépôt, pas servies. Référence humaine : https://charte.tero.be/api.html et https://charte.tero.be/regles.html (qui prime en cas d'écart).",
  "contact": {"name": "Tero Digital — Koen", "url": "https://charte.tero.be/api.html"},
  "license": {"name": "Propriété du groupe Tero — usage interne et partenaires autorisés", "identifier": "LicenseRef-Tero-Brand"}
 },
 "servers": [{"url": "https://charte.tero.be", "description": "Production (statique, nginx)"}],
 "tags": [
  {"name": "marques", "description": "Le groupe, les trois piliers, les 28 marques, Koen"},
  {"name": "jetons", "description": "Jetons de marque (DTCG) et export CSS"},
  {"name": "logos", "description": "Registre des fichiers de logo réellement servis"},
  {"name": "regles", "description": "Règles opposables structurées"},
  {"name": "agents", "description": "Fichiers de découverte pour les agents et moteurs de réponse"}
 ],
 "paths": {
  "/brand/brands.json": {"get": {"tags": ["marques"], "operationId": "getBrands", "summary": "Groupe, piliers, 28 marques et Koen", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Brands"}}}}}}},
  "/brand/tokens.json": {"get": {"tags": ["jetons"], "operationId": "getTokens", "summary": "Jetons DTCG : couleurs, contrastes, typographie, espace, rayons, mouvement, focus, logos", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Tokens"}}}}}}},
  "/brand/tokens.css": {"get": {"tags": ["jetons"], "operationId": "getTokensCss", "summary": "Les jetons en variables CSS (clair / sombre, piliers, [data-brand])", "responses": {"200": {"description": "OK", "content": {"text/css": {"schema": {"type": "string"}}}}}}},
  "/brand/logos.json": {"get": {"tags": ["logos"], "operationId": "getLogos", "summary": "Registre des logos : tero, monogramme, Koen, marques (viewBox, ratio, usage, interdits)", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Logos"}}}}}}},
  "/brand/rules.json": {"get": {"tags": ["regles"], "operationId": "getRules", "summary": "Règles opposables de regles.html 1.1.0", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Rules"}}}}}}},
  "/brand/openapi.json": {"get": {"tags": ["agents"], "operationId": "getOpenApi", "summary": "Ce document", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}}}},
  "/llms.txt": {"get": {"tags": ["agents"], "operationId": "getLlmsTxt", "summary": "Carte du site pour les agents (convention llms.txt)", "responses": {"200": {"description": "OK", "content": {"text/plain": {"schema": {"type": "string"}}}}}}},
  "/llms-full.txt": {"get": {"tags": ["agents"], "operationId": "getLlmsFull", "summary": "La charte entière en Markdown (~9 000 tokens)", "responses": {"200": {"description": "OK", "content": {"text/plain": {"schema": {"type": "string"}}}}}}},
  "/brands/{id}/DESIGN.md": {"get": {"tags": ["marques"], "operationId": "getDesignMd", "summary": "DESIGN.md d'une marque (front-matter YAML + prose)", "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"$ref": "#/components/schemas/BrandId"}}], "responses": {"200": {"description": "OK", "content": {"text/markdown": {"schema": {"type": "string"}}}}, "404": {"description": "Marque inconnue"}}}}
 },
 "components": {
  "schemas": {
   "BrandId": {"type": "string", "enum": ["tero-lieux", "tero-lodges", "malle-poste", "river-house", "house17", "foresthouse", "eventhouse-waterloo", "terblock", "lime-jhsp", "river-woods", "tero-team-building", "teroir", "knokke-out", "bistro-17", "bistro-pilko", "nest-zwin", "tero-padel-club", "tero-padel-academy", "tero-studio", "garisart", "immorun", "batirun", "bouwrun", "buildandrun", "impactrun", "terotrail", "bpp", "12km-anderlecht"]},
   "Etiquette": {"type": "string", "enum": ["MESURÉ", "RÈGLE", "À VALIDER CLIENT"]},
   "Relation": {"type": "string", "enum": ["pilier", "marque-forte-endossee", "autonome-nominative", "co-marque-encadree"]},
   "PilierId": {"type": "string", "enum": ["hospitality", "leisure", "sport-events"]},
   "Hex": {"type": "string", "pattern": "^#[0-9A-Fa-f]{6}$"},
   "Versionne": {"type": "object", "required": ["version", "date", "source"], "properties": {"version": {"type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$"}, "date": {"type": "string", "format": "date"}, "source": {"type": "string"}}},
   "Accent": {"type": "object", "required": ["accent", "accentOn", "statut"], "properties": {"accent": {"$ref": "#/components/schemas/Hex"}, "accentOn": {"$ref": "#/components/schemas/Hex"}, "accentText": {"oneOf": [{"$ref": "#/components/schemas/Hex"}, {"type": "null"}], "description": "null = l'accent ne porte jamais de texte (liens en encre soulignés)"}, "ratioAccentTextSurBlanc": {"type": ["number", "null"]}, "ratioAccentOnSurAplat": {"type": "number"}, "statut": {"$ref": "#/components/schemas/Etiquette"}, "note": {"type": "string"}}},
   "Domaine": {"type": "object", "required": ["hote", "role", "source"], "properties": {"hote": {"type": "string"}, "role": {"type": "string"}, "source": {"type": "string"}}},
   "Lieu": {"type": "object", "description": "Valeurs relevées uniquement ; « [?] » = absent des sources", "properties": {"adresse": {"type": "string"}, "codePostal": {"type": "string"}, "ville": {"type": "string"}, "pays": {"type": "string"}, "telephone": {"type": "string"}, "email": {"type": "string"}, "source": {"type": "string"}}},
   "Marque": {"type": "object", "required": ["id", "nom", "pilier", "type", "endossement", "domaines", "schemaOrg", "accent", "pages"], "properties": {
    "id": {"$ref": "#/components/schemas/BrandId"}, "nom": {"type": "string", "description": "casse officielle exacte"}, "alias": {"type": "array", "items": {"type": "string"}},
    "pilier": {"type": "object", "properties": {"id": {"$ref": "#/components/schemas/PilierId"}, "nom": {"type": "string"}}},
    "type": {"type": "string"},
    "endossement": {"type": "object", "properties": {"relation": {"$ref": "#/components/schemas/Relation"}, "label": {"type": "string"}, "forme": {"type": "string"}, "mention": {"type": "string", "description": "mention exacte à afficher"}, "statut": {"$ref": "#/components/schemas/Etiquette"}, "source": {"type": "string"}}},
    "coMarque": {"type": ["object", "null"], "properties": {"partenaire": {"type": "string"}, "regime": {"type": "string"}, "statut": {"type": "string"}}},
    "domaines": {"type": "array", "items": {"$ref": "#/components/schemas/Domaine"}},
    "schemaOrg": {"type": "object", "properties": {"type": {"type": "string"}, "alternatif": {"type": ["string", "null"]}, "parentOrganization": {"type": "string"}, "note": {"type": ["string", "null"]}}},
    "lieu": {"$ref": "#/components/schemas/Lieu"}, "faits": {"type": "object"},
    "accent": {"$ref": "#/components/schemas/Accent"},
    "logos": {"type": "object", "properties": {"registre": {"type": "string"}, "note": {"type": "string"}}},
    "pages": {"type": "object", "properties": {"charte": {"type": "string"}, "designMd": {"type": "string"}, "silo": {"type": "string"}}},
    "notes": {"type": "array", "items": {"type": "string"}}}},
   "Brands": {"allOf": [{"$ref": "#/components/schemas/Versionne"}, {"type": "object", "required": ["groupe", "piliers", "relations", "marques", "fonctionInterne"], "properties": {"groupe": {"type": "object"}, "piliers": {"type": "array", "minItems": 3, "maxItems": 3}, "relations": {"type": "object"}, "marques": {"type": "array", "minItems": 28, "maxItems": 28, "items": {"$ref": "#/components/schemas/Marque"}}, "fonctionInterne": {"type": "object", "properties": {"koen": {"type": "object", "description": "Koen : fonction interne, pas une 29e marque"}}}}}]},
   "Tokens": {"type": "object", "description": "Design Tokens Community Group (DTCG) : groupes color, brand, theme, typography, space, radius, shadow, motion, layout, component, focus, logo. $extensions.org.tero.brand porte version, date et sources.", "required": ["color", "typography", "radius", "motion", "focus", "logo"]},
   "Logos": {"allOf": [{"$ref": "#/components/schemas/Versionne"}, {"type": "object", "required": ["tero", "koen", "marques"], "properties": {"tero": {"type": "object"}, "koen": {"type": "object"}, "marques": {"type": "object", "additionalProperties": {"type": "object", "properties": {"nom": {"type": "string"}, "logos": {"type": "array"}, "statut": {"type": "string"}, "note": {"type": ["string", "null"]}, "declinaisonsGenerees": {"type": "array"}}}}}}]},
   "Regle": {"type": "object", "required": ["id", "section", "etiquette", "enonce"], "properties": {"id": {"type": "string"}, "section": {"type": "string"}, "etiquette": {"$ref": "#/components/schemas/Etiquette"}, "enonce": {"type": "string"}}},
   "Rules": {"allOf": [{"$ref": "#/components/schemas/Versionne"}, {"type": "object", "required": ["etiquettes", "sections", "regles"], "properties": {"etiquettes": {"type": "object"}, "sections": {"type": "array"}, "regles": {"type": "array", "items": {"$ref": "#/components/schemas/Regle"}}}}]}
  }
 }
}
