# 03 — Charte TERO applicable à l'artefact archify, et copie des parcours

> **But** : remapper un artefact HTML autonome produit par un outil tiers (archify 3.1.0) vers la charte TERO — couleurs, fonds, texte, accent d'action, rayons, motif de points signature, typographie, vocabulaire.
> **Règle appliquée** : « On mesure, on ne suppose pas » (AGENTS.md). Chaque affirmation porte un fichier + une ligne, ou une route réellement présente.
> **Sources lues** : `craft/tero-rules.md` (667 l.) · `design-systems/tero/DESIGN.md` (120 l.) · `design-systems/tero/tokens.css` (61 l.) · `design-tokens.json` (97 l.) · `src/styles/global.css` · `src/data/ui.ts` · `src/content/*/pages/*.json` · `src/components/PressPage.astro` · `src/data/press.ts`.
> **Support archify réellement mesuré** : `docs/matrice/matrice-tero.html` (archify 3.1.0, 14 888 l., `data-theme`/`data-preset`) — c'est de là que viennent les sélecteurs de C.3, pas d'une supposition.
> **Contrastes** : recalculés ici (WCAG 2.x, luminance sRGB) et identiques au centième aux valeurs documentées (`global.css:68-76`, `design-tokens.json:80-95`).

## A — Tokens à injecter

### A.1 Couleurs : usage autorisé et ratio mesuré

« Décoratif » = ne porte jamais de texte. « Texte » = ratio calculé sur le fond nommé.

| Hex | Token | Usage autorisé | Ratio mesuré |
|---|---|---|---|
| `#FF2E82` | `--color-clay` | **Décoratif seul** : filets, halos, focus, trame de points. Jamais en texte courant | 3.52:1 sur blanc · 4.75:1 sur navy `#0D1F30` · **3.06:1 sur bleu `#123F6B` = interdit** |
| `#D9216B` | `--color-clay-ink` | Texte magenta **sur blanc uniquement** | 4.79:1 blanc · 4.41:1 crème · 3.83:1 sable (**échec AA**) |
| `#C21C5E` | `--color-clay-text` | Texte magenta dès que le fond est crème ou sable | 5.80:1 blanc · 5.34:1 crème · 4.63:1 sable |
| `#E9F44E` | `--color-lime` | **Aplats d'action** ; texte navy obligatoire dessus | 13.95:1 avec `#0D1F30` · **1.20:1 sur blanc = jamais en texte** |
| `#F0EC82` | `--color-ball` | Variante chaude, même règle que le lime | 13.56:1 avec `#0D1F30` · 1.23:1 sur blanc |
| `#123F6B` | `--color-forest` | Bleu du pictogramme officiel ; porte du texte | 10.77:1 blanc · 9.92:1 crème · 8.60:1 sable · **1.55:1 sur navy = jamais** |
| `#0D1F30` | `--color-forest-deep` | Navy du logo, bandes profondes ; texte blanc dessus | 16.72:1 avec blanc · 13.95:1 avec lime. **Jamais `#081422`** |
| `#31549B` | `--color-moss` | Palette de la charte (aplats, filets) | 7.31:1 blanc · **2.29:1 sur navy = jamais en texte** |
| `#41B0E4` | `--color-fern` | Accent secondaire **décoratif** | 6.81:1 sur navy · 2.45:1 sur blanc (décor) |
| `#007864` | `--color-teal` | Vert profond de la charte | 5.43:1 blanc |
| `#FFFFFF` | `--color-sand` | Sol A (fond clair) | — |
| `#F9F5EF` | `--color-paper` | Surface chaude, sol B | — |
| `#ECE5D8` | `--color-sand-deep` | Filets, séparateurs, bordures | — |
| `#1A202C` | `--color-ink` | Texte principal | 16.32:1 blanc · 15.02:1 crème · 13.03:1 sable |
| `#4A5568` | `--color-stone` | Texte secondaire — **le token à utiliser dès qu'un contraste est douteux** | 7.53:1 blanc · 6.93:1 crème · 6.01:1 sable |

Sources : `tero-rules.md:38-60` · `DESIGN.md:27-49` · `tokens.css:5-24` · `global.css:62-104`.

### A.2 Bloc CSS autonome (à insérer APRÈS la feuille d'archify)

Aucune dépendance externe. Les variables remappées sont **celles qu'archify définit réellement** (`matrice-tero.html:175-215`, `219-256`), pas des noms supposés.

```css
/* 1. Jetons TERO — valeurs mesurées, ne pas arrondir */
:root{
  --tero-clay:#ff2e82; --tero-clay-ink:#d9216b; --tero-clay-text:#c21c5e;
  --tero-lime:#e9f44e; --tero-ball:#f0ec82;
  --tero-forest:#123f6b; --tero-forest-deep:#0d1f30; --tero-moss:#31549b;
  --tero-fern:#41b0e4; --tero-teal:#007864;
  --tero-sand:#ffffff; --tero-sand-deep:#ece5d8; --tero-paper:#f9f5ef;
  --tero-ink:#1a202c; --tero-stone:#4a5568;
  /* contrat OpenDesign (design-tokens.json:22-29) */
  --bg:var(--tero-sand); --surface:var(--tero-paper); --fg:var(--tero-ink);
  --muted:var(--tero-stone); --border:var(--tero-sand-deep); --accent:var(--tero-clay);
  /* filet = structure : 1 px, jamais plus (tero-rules.md:109-110). Repli sans color-mix. */
  --tero-filet:rgba(13,31,48,.20);
  --tero-filet:color-mix(in srgb,#0d1f30 20%,transparent);
  /* rayons : boutons et rares plaques seulement (tokens.css:54-56) */
  --tero-radius-card:1.25rem; --tero-radius-plate:1.75rem; --tero-radius-pill:999px;
  /* motif signature : pastille = 50 % du pas (global.css:223-224) */
  --tero-dots:radial-gradient(circle at center,currentColor 4.5px,transparent 4.6px);
  --tero-dots-size:18px;
  --tero-font:'Almarose','Almarose Fallback',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
}
/* 2. Repli métrique identique — recopié de global.css:47-54, utilisable sans réseau */
@font-face{
  font-family:'Almarose Fallback';
  src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans'),local('DejaVu Sans');
  size-adjust:85.08%; ascent-override:90.5%; descent-override:21.2%; line-gap-override:3.3%;
}
/* Almarose n'est PAS chargée par l'artefact. Les fichiers existent dans le dépôt (public/fonts/
   almarose-{400,500,600,700,900}.woff2, wildyouth-script.woff2 — mesuré) mais leur service par
   le domaine de production n'est pas vérifié ici. Décommenter UNIQUEMENT si /fonts/ est publié :
@font-face{font-family:'Almarose';src:url('/fonts/almarose-900.woff2') format('woff2');font-weight:900;font-display:swap}
@font-face{font-family:'Almarose';src:url('/fonts/almarose-700.woff2') format('woff2');font-weight:700;font-display:swap}
@font-face{font-family:'Almarose';src:url('/fonts/almarose-400.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'WildYouth';src:url('/fonts/wildyouth-script.woff2') format('woff2');font-weight:400;font-display:swap}
*/
/* 3. Remap des variables archify. Spécificité (0,3,1) > [data-preset][data-theme] (0,2,0) :
   le remap tient même si le script d'archify (matrice-tero.html:12-33) repose data-theme="dark". */
html[data-preset][data-theme]{
  --bg:var(--tero-sand); --grid:var(--tero-sand-deep); --canvas-dot:var(--tero-sand-deep);
  --text:var(--tero-ink); --text-muted:var(--tero-stone);
  --text-dim:var(--tero-stone); --text-faint:var(--tero-stone); /* jamais plus clair : AA partout */
  --panel:transparent; --panel-border:var(--tero-sand-deep);
  --lane-fill:transparent; --lane-stroke:var(--tero-sand-deep);
  --arrow:var(--tero-stone); --arrow-emphasis:var(--tero-clay-text); --mask:#ffffff;
  /* familles sémantiques : trait de 1 px, AUCUN aplat -> pas de boîte */
  --frontend-fill:none; --frontend-stroke:var(--tero-forest);
  --backend-fill:none; --backend-stroke:var(--tero-teal);
  --database-fill:none; --database-stroke:var(--tero-moss);
  --cloud-fill:none; --cloud-stroke:var(--tero-forest-deep);
  --security-fill:none; --security-stroke:var(--tero-clay-text);
  --messagebus-fill:none; --messagebus-stroke:var(--tero-teal);
  --external-fill:none; --external-stroke:var(--tero-stone);
  --toolbar-bg:rgba(255,255,255,.92); --toolbar-border:var(--tero-sand-deep);
  --toolbar-text:var(--tero-ink); --toolbar-hover:#ffffff; --toolbar-menu-bg:#ffffff;
  color-scheme:light;
}
/* 4. Base typographique (échelle tokens.css:39-47 ; graisses DESIGN.md:59) */
html[data-preset][data-theme] body{
  background:var(--tero-sand); color:var(--tero-ink); font-family:var(--tero-font);
  font-size:clamp(1rem,.97rem + .16vw,1.0625rem); line-height:1.65;
}
html[data-preset][data-theme] h1{
  font-family:var(--tero-font); font-weight:900; color:var(--tero-forest-deep);
  font-size:clamp(2rem,1.55rem + 2.1vw,3.25rem); line-height:1.08; letter-spacing:-.022em; text-wrap:balance;
}
html[data-preset][data-theme] h2{
  font-family:var(--tero-font); font-weight:800; color:var(--tero-ink);
  font-size:clamp(1.6875rem,1.4rem + 1.3vw,2.5rem); line-height:1.12; letter-spacing:-.022em;
}
html[data-preset][data-theme] h3{
  font-family:var(--tero-font); font-weight:700;
  font-size:clamp(1.1875rem,1.13rem + .32vw,1.4rem); line-height:1.25; letter-spacing:-.022em;
}
html[data-preset][data-theme] p{ max-width:66ch; color:var(--tero-ink); }
/* les presets d'archify passent les titres en Georgia serif (:724, :745, :821) : on les ramène */
html[data-preset][data-theme] .header h1,
html[data-preset][data-theme] .diagram-guide-title,
html[data-preset][data-theme] .card h3{ font-family:var(--tero-font); }
/* 5. Neutralisation des cartes d'archify (voir C.3) */
html[data-preset][data-theme] .diagram-container{
  position:relative; background:var(--tero-sand); border:0; border-radius:0; box-shadow:none;
  border-block-start:1px solid var(--tero-filet);
}
html[data-preset][data-theme] .card{
  background:none; border:0; border-radius:0; box-shadow:none; padding:0;
  border-block-start:1px solid var(--tero-filet); padding-block-start:.75rem;
}
html[data-preset][data-theme] .card::before{ content:none; }
html[data-preset][data-theme] .cards{ gap:2.5rem; } /* l'espace remplace la bordure (tokens.css:53) */
/* 6. Motif signature sur un calque dédié, opacité 0,06-0,08 (DESIGN.md:89) */
html[data-preset][data-theme] .diagram-container::before{
  content:''; position:absolute; inset:0; pointer-events:none;
  background-image:var(--tero-dots); background-size:var(--tero-dots-size) var(--tero-dots-size);
  background-repeat:repeat; color:var(--tero-clay); opacity:.07;
}
/* 7. Traits SVG : 1 px, jamais plus */
html[data-preset][data-theme] .diagram-container svg .c-grid{ stroke:var(--tero-sand-deep); }
html[data-preset][data-theme] .diagram-container svg .a-default,
html[data-preset][data-theme] .diagram-container svg .a-emphasis,
html[data-preset][data-theme] .diagram-container svg .a-dashed{ stroke-width:1px; }
/* 8. Bande profonde : navy uniquement, texte blanc, accent lime */
html[data-preset][data-theme] .tero-deep{ background-color:var(--tero-forest-deep); color:var(--tero-sand); }
html[data-preset][data-theme] .tero-deep a{ color:var(--tero-lime); }
/* 9. Action : aplat lime, texte navy, 44 px minimum (DESIGN.md:84) */
html[data-preset][data-theme] .tero-btn{
  display:inline-flex; align-items:center; justify-content:center; min-height:44px;
  padding:.75rem 1.25rem; background-color:var(--tero-lime); color:var(--tero-forest-deep);
  border:0; border-radius:var(--tero-radius-pill); font-family:var(--tero-font);
  font-weight:600; font-size:1rem; text-decoration:none;
}
html[data-preset][data-theme] .tero-btn--ghost{
  background:transparent; color:var(--tero-ink); border:1px solid var(--tero-filet);
}
/* 10. Focus et mouvement (DESIGN.md:86, :98) */
html[data-preset][data-theme] :focus-visible{ outline:3px solid var(--tero-clay); outline-offset:3px; }
@media (prefers-reduced-motion: reduce){
  html[data-preset][data-theme] *, html[data-preset][data-theme] *::before{
    animation-duration:.01ms !important; transition-duration:.01ms !important;
  }
}
```

Cible : `<html lang="fr" data-theme="light" data-preset="classic">`. `classic` est le seul preset sans gradient ni serif (C.3) ; le remap tient de toute façon quel que soit `data-theme`.

## B — Typographie

- **Familles réelles** : **Almarose** (marque, auto-hébergée, graisses **400/500/600/700/900** — `public/fonts/almarose-400.woff2` à `-900.woff2`, mesuré) et **WildYouth** (script, `public/fonts/wildyouth-script.woff2`). `tero-rules.md:67-70`.
- **Fallback réellement utilisable hors du site** : `'Almarose Fallback'` = `local('Arial')`, `local('Helvetica Neue')`, `local('Liberation Sans')`, `local('DejaVu Sans')` + `size-adjust: 85.08%` (`global.css:47-54`). C'est la **seule** pile garantie sans réseau : si Almarose n'est pas servie, le rendu réel est Arial — metric-compatible, pas identité visuelle. WildYouth absente retombe sur `cursive` : à traiter comme **décor**, jamais comme texte porteur.
- **Graisses imposées** : h1 **900** · h2 **800** · h3 **700** · corps 400 · emphase 600 (`DESIGN.md:59`, `tero-rules.md:71`). Jamais tout en 600. **Écart mesuré** : aucun `almarose-800.woff2` n'existe et `global.css:29-33` ne déclare que 400/500/600/700/900 → un `font-weight:800` est rendu par la graisse **900** (appariement CSS des graisses > 500) : le h2 de la charte est un 900 en pratique.
- **Échelle** (`tokens.css:39-47`) : display `clamp(2.5rem,1.5rem+4.4vw,5.25rem)` (lh 1.02) · title-l `clamp(2rem,1.55rem+2.1vw,3.25rem)` (1.08) · title-m `clamp(1.6875rem,1.4rem+1.3vw,2.5rem)` (1.12) · title-s `clamp(1.1875rem,1.13rem+.32vw,1.4rem)` (1.25) · body `clamp(1rem,.97rem+.16vw,1.0625rem)` (1.65) · meta `clamp(.8125rem,…,.875rem)` · label `clamp(.7rem,…,.78rem)`. Bornes : display 2.5→5.25 rem, corps max 1.0625 rem.
- **Casse et interlettrage** : `text-wrap: balance` sur les titres ; `letter-spacing` −0.02 à −0.022em (display −0.030 à −0.035em) ; labels **majuscules** +0.14 à +0.18em. Interligne **jamais < 1.4** (corps 1.6-1.7). Mesures : chapô 58ch, FAQ 62ch, corps 66ch.
- **Interdits** : serif éditoriale en titre (`DESIGN.md:112`) · > 2 familles · emoji comme iconographie (`tero-rules.md:248`) · accents manquants (`tero-rules.md:307-308`) · `font-display` sans repli métrique · `user-scalable=no`.

## C — Motifs, filets, rayons, ombres : ce qu'on applique et ce qu'on évite

### C.1 Le motif de points signature
Géométrie : **pastille = 50 % du pas** — au logo, 58,5 unités pour un pas de 117 (`tero-rules.md:92-93`) ; en CSS `radial-gradient(circle at center, currentColor 4.5px, transparent 4.6px)` sur un pas de **18 px** (`global.css:216-225`). Usages : trame de fond des bandes profondes, puces, séparateurs, filigrane. **Jamais en trame fine de 1,4 px** (`tero-rules.md:150`). Dans un artefact tiers : poser la trame sur un **calque dédié** (`::before`, `pointer-events:none`) — jamais sur le conteneur qui porte le texte, sinon le motif descend dans les interlettres.
**Écart mesuré à signaler** : la charte documente une opacité de trame **0,06 à 0,08** (`DESIGN.md:89`, `tero-rules.md:149`) ; le code mesure **0,2** (`Hero.astro:317`) et **0,22** (`global.css:392`). Pour un fond derrière du texte, tenir la valeur de charte : 0,2 sur du texte de 14 px dégrade le contraste utile.

### C.2 Filets, rayons, ombres
- **Filet** : `border-block-start: 1px solid color-mix(in srgb, var(--color-forest-deep) 14-22%, transparent)` — **jamais plus épais** (`tero-rules.md:109-110`). Repli sans `color-mix` : `rgba(13,31,48,.20)`.
- **Rayons** : les tokens existent (`--radius-card:1.25rem`, `--radius-plate:1.75rem`, `--radius-pill:999px` — `tokens.css:54-56`) mais **ne servent qu'aux boutons et à de rares plaques, pas aux cartes de contenu** (`DESIGN.md:72`). Dans l'artefact : rayons des nœuds = **0**.
- **Ombres** : les ombres TERO sont teintées navy (`global.css:169-173`) ; l'ombre est **exclue** de tout conteneur de contenu par la règle « aucune carte ».
- **Exception légitime** : le bouton secondaire porte un contour 1 px sur fond transparent (`DESIGN.md:85`) ; la carte est interdite, le contour d'un contrôle ne l'est pas.

### C.3 Interdits opposables, et ce qu'ils donnent sur l'artefact archify
Règle d'origine : « **Aucune carte.** Pas de fond + bordure + rayon + ombre. C'est le vocabulaire de toutes les interfaces générées, et la raison exacte du rejet de la première version du site. » (`tero-rules.md:21-22`, `tero-rules.md:107-108`). Mesuré sur archify 3.1.0 :
- `.diagram-container` = fond `var(--panel)` + `border:1px` + `border-radius:1rem` + `box-shadow` → **exactement la combinaison interdite** (`matrice-tero.html:753-763`).
- `.card` = `background:var(--panel)` + `border:1px solid` + `border-radius:0.75rem` (`:2540-2552`), et les presets y **ajoutent** ombre et dégradés : `signal-flow` (`:2554-2560`), `blueprint` (`:2589-2595`), `editorial` (`:2605-2616`).
- `editorial` remet **Georgia, serif** sur les titres (`:724`, `:745`, `:821`) — anti-pattern n° 3 de la charte (`DESIGN.md:112`).
→ **Décision** : `data-preset="classic"` + neutralisation CSS (A.2, point 5). Aucun `box-shadow` ne doit subsister sur un conteneur de contenu ; le seul voile admis est la trame de points à 0,06-0,08.

## D — Copie : vocabulaire éditorial et libellés d'action officiels

Ton : chaleureux, vivant, premium mais accessible ; **on vouvoie** en FR ; phrases courtes ; zéro superlatif vide (`tero-rules.md:304-306`). **FR = référence** ; NL et EN sont des **adaptations natives**, pas du mot-à-mot (`tero-rules.md:311-312`). NL : néerlandais belge, **tutoiement obligatoire, jamais « u »** (`tero-rules.md:464`). EN : **anglais britannique** (*organise, programme, centre* — `tero-rules.md:473`).

| Action | FR (source) | NL (source) | EN (source) |
|---|---|---|---|
| Réserver un terrain | **Réservez votre terrain** `fr/pages/accueil.json:13`, `fr/pages/terrains.json:13` · **Réserver** `ui.ts:117` | **Reserveer je baan** `nl/pages/accueil.json:13` · **Reserveren** `ui.ts:327` | **Book your court** `en/pages/accueil.json:13` · **Book** `ui.ts:537` |
| Réserver (action globale) | **Réserver maintenant** `ui.ts:191` | **Boek nu** `ui.ts:401` | **Book now** `ui.ts:611` |
| Réservation de terrain | **Réserver sur Playtomic** `ui.ts:239` | **Reserveer via Playtomic** `ui.ts:449` | **Book on Playtomic** `ui.ts:659` |
| Louer une raquette | **Louer une raquette — 7 €** `fr/pages/boutique.json:25` · **Louez-en une pour 7 €** `fr/clubs/waterloo.json:98` | **Racket huren** `nl/clubs/charleroi.json:110` · **Huur er een voor 7 €** `nl/clubs/garisart.json:117` | **Racket rental** `en/clubs/charleroi.json:110` · **Rent one for 7 €** `en/clubs/garisart.json:314` |
| Organiser un événement | **Organiser un événement** `fr/clubs/waterloo.json:118` · **Organisez votre événement dans l'un de nos six clubs** `fr/pages/groupes.json:130` | **Organiseer een evenement** `nl/clubs/waterloo.json:118` · **Organiseer je evenement in een van onze zes clubs** `nl/pages/groupes.json:130` | **Organise an event** `en/clubs/waterloo.json:118` · **Organise your event in one of our six clubs** `en/pages/groupes.json:130` |
| Cours | **S'inscrire aux cours** `ui.ts:200` · **Réservez vos cours collectifs** `fr/pages/academie.json:13` · **Écrire à l'académie** `fr/pages/academie.json:176` | **Inschrijven voor de lessen** `ui.ts:410` · **Reserveer je groepslessen** `nl/pages/academie.json:13` | **Sign up for classes** `ui.ts:620` · **Book your group classes** `en/pages/academie.json:13` |
| Groupe / team building | **Groupes** `ui.ts:180` · **Groupes et entreprises** `fr/pages/groupes.json:7` | **Groepen** `ui.ts:390` · **Groepen en bedrijven** `nl/pages/groupes.json:7` | **Groups** `ui.ts:600` · **Groups and companies** `en/pages/groupes.json:7` |
| Événement | **Événements** `ui.ts:183` · **Événements et team building** `fr/clubs/waterloo.json:115` | **Evenementen** `ui.ts:393` | **Events** `ui.ts:603` |
| Contact | **Contactez-nous** `ui.ts:126`/`196` · **Écrivez-nous** `ui.ts:197` · **Envoyer** `ui.ts:265` | **Contacteer ons** `ui.ts:336` · **Mail ons** `ui.ts:407` | **Contact us** `ui.ts:546` · **Write to us** `ui.ts:617` |
| Presse | **Presse** `ui.ts:857` · **Une question presse ?** `PressPage.astro:46` · « Qui contacter pour une demande presse ? » `PressPage.astro:87` | **Pers** `ui.ts:862` · **Een persvraag?** `PressPage.astro:61` | **Press** `ui.ts:867` · **A press enquiry?** `PressPage.astro:76` |
| WhatsApp | **Rejoindre le groupe WhatsApp** `ui.ts:202` | **Word lid van de WhatsApp-groep** `ui.ts:412` | **Join the WhatsApp group** `ui.ts:622` |

Routes de presse présentes : `/presse/` (`src/pages/presse.astro`), `/nl/pers/` (`src/pages/nl/pers.astro`), `/en/press/` (`src/pages/en/press.astro`) — `PressPage.astro:26-30`. 6 clubs, mêmes slugs dans les 3 langues (`tero-rules.md:347`).

**Tournures interdites** : accents manquants (« Reserver » disqualifie la page — `tero-rules.md:307-308`) · « cliquez ici » et ancres non descriptives (`:356`) · « Ils nous font confiance » (`:246`) · « FR / NL / EN » en texte et drapeaux emoji (`:251`) · emoji comme iconographie (`:248`) · superlatif sans chiffre (`:405`) · NL tutoyé en « u » (`:464`) · EN américain (`:473`) · prix recalculés ou traduits (`:484`) · un même chiffre dans deux sections voisines (`:313`) · « Aucun résultat. » comme état vide (`:242`) · « Refuser » confondu avec `cookieSettings` = « Personnaliser » (`:459`). *(Les `:` seuls renvoient à `tero-rules.md`.)*

## E — Checklist de conformité (artefact HTML, 15 points)

1. `<html lang="fr|nl|en" data-theme="light" data-preset="classic">` ; aucune surface sombre résiduelle.
2. **Magenta visible** au moins une fois : filet, pastille, trame ou anneau de focus (`DESIGN.md:51`).
3. Aucune couleur hors charte : `#081422`, `#22d3ee`, `#34d399`, `#a78bfa`, `#fbbf24`, `#fb7185` (défauts archify, `matrice-tero.html:196-209`) absents du fichier livré.
4. `.diagram-container` : `background`, `border`, `border-radius`, `box-shadow` neutralisés.
5. `.card` : idem — aucun fond + bordure + rayon + ombre.
6. Aucun `box-shadow` sur un conteneur de contenu (devtools *Computed*).
7. Filets mesurés à **1 px** (`border-block-start-width` calculé), jamais plus.
8. Rayons : 0 sur les nœuds ; `999px` / 1.25 / 1.75 rem seulement sur bouton ou plaque.
9. Trame de points : 4.5 px pour un pas de 18 px, opacité 0.06-0.08 ; jamais 1.4 px.
10. Titres : h1 900, h2 800 (rendu 900 — pas de fichier 800), h3 700 ; **aucune serif**.
11. Corps 1 à 1.0625 rem, interligne ≥ 1.4 ; labels majuscules +0.14 à +0.18em.
12. Chaque couple texte/fond ≥ 4.5:1 (texte courant) ; pairs interdits absents (A.1).
13. Focus `3px solid #FF2E82` + offset 3 px, jamais supprimé ; cibles ≥ 44 px.
14. `prefers-reduced-motion: reduce` : plus aucune animation.
15. Copie FR accentuée, NL tutoyée, EN britannique ; aucun libellé de la liste « interdites ».

## F — Non mesuré / absent (à ne pas combler par hypothèse)

- **DOM de l'artefact à produire** : non mesuré. Les sélecteurs de C.3 sont relevés sur `docs/matrice/matrice-tero.html` (archify 3.1.0). Un autre preset, une autre version ou un autre gabarit peut introduire d'autres classes : vérifier par `grep` sur le fichier livré.
- **Service de `/fonts/` par le domaine de production** : non vérifié ici (les fichiers existent dans le dépôt, leur mise en ligne non). D'où le bloc Almarose commenté en A.2.
- **Rayons des nœuds SVG** : posés en attributs `rx`/`ry` — non mesuré dans ce dépôt ; à porter à 0.
- **Graisse 800 d'Almarose** : absente du dépôt (`public/fonts`) → h2 = 900 en pratique.
- **Opacité de trame** : divergence mesurée charte 0,06-0,08 vs code 0,2/0,22 — arbitrage client requis avant de figer l'artefact.
- **Presse** : aucune page de presse dans `src/content/*/pages/` ; libellés issus de `src/data/ui.ts` et `src/components/PressPage.astro` uniquement.
