/*
Theme Name:   Pression Focale — thème enfant
Theme URI:    https://pressionfocale.com
Description:  Thème enfant d'Astra portant le design system de la refonte Pression Focale®. Véhicule technique canonique des tokens, conformément à D-035. Palette et typographie issues de D-033 / D-034 (rapport 4B).
Author:       Jérémy Jacq
Template:     astra
Version:      0.28.18
Text Domain:  pression-focale-child
*/

/* ==========================================================================
   SOCLE DU DESIGN SYSTEM — PHASE 6, INCRÉMENT 1
   Source canonique : D-033 (direction C) · D-034 (rapport 4B) · D-035 (véhicule)
   Aucune valeur inventée : toutes proviennent du rapport 4B.
   ========================================================================== */

/* ==========================================================================
   FONTES CANONIQUES — AUTO-HÉBERGÉES (D-035)
   Aucune ressource externe : ni Google Fonts, ni CDN. Les fichiers sont
   versionnés dans le dépôt, sous `assets/fonts/`.

   Provenance — releases upstream officielles, licence SIL OFL 1.1 :
     Inter 4.1            · github.com/rsms/inter          · Inter-LICENSE.txt
     Source Serif 4.005R  · github.com/adobe-fonts/source-serif
                                                           · SourceSerif4-LICENSE.md

   Quatre fichiers variables, non sous-ensemblés : la couverture de glyphes
   est celle, complète, des fontes amont. Les axes `wght` sont couverts en
   continu, sans synthèse de graisse ni d'oblique par le navigateur.
   ========================================================================== */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("assets/fonts/InterVariable.woff2") format("woff2");
}

@font-face {
  font-family: "Inter";
  font-style: italic;
  font-weight: 100 900;
  font-display: swap;
  src: url("assets/fonts/InterVariable-Italic.woff2") format("woff2");
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url("assets/fonts/SourceSerif4Variable-Roman.woff2") format("woff2");
}

@font-face {
  font-family: "Source Serif 4";
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url("assets/fonts/SourceSerif4Variable-Italic.woff2") format("woff2");
}

:root {
  /* --- Marque et accents (ancrage : orange réel du logo) ------------------ */
  --pf-marque: #E8653C;          /* logo, graphique, accents et CTA sur strate */
  --pf-marque-hover: #EB7B57;    /* état hover sur strate */
  --pf-accent: #AA3814;          /* texte, liens, CTA sur clair — 6,07:1 sur fond */
  --pf-accent-hover: #933011;    /* 7,47:1 */
  --pf-accent-active: #812A0F;   /* 8,78:1 */

  /* --- Fonds ------------------------------------------------------------- */
  --pf-fond: #FAF9F6;            /* fond clair de lecture */
  --pf-papier: #F3EFE7;          /* bandes neutres */
  --pf-strate: #221E1A;          /* seuils sombres */
  --pf-strate-2: #2B2620;        /* élévation */

  /* --- Encre et filets --------------------------------------------------- */
  --pf-encre: #201D1A;           /* texte principal — 15,93:1 */
  --pf-encre-2: #56514B;         /* texte secondaire — 7,46:1 */
  --pf-ivoire: #F4F1EA;          /* texte sur sombre — 15,72:1 */
  --pf-filet: #DAD3C6;           /* bordures sur clair */
  --pf-filet-sombre: #3A332B;    /* bordures sur sombre */

  /* --- Vigilance (système indépendant de la marque) ----------------------- */
  --pf-vigilance-texte: #7A5300; /* 6,20:1 */
  --pf-vigilance-fond: #FBF3DF;
  --pf-vigilance-bord: #E4CE9A;

  /* --- Réservé, non alloué (D-034) --------------------------------------- */
  --pf-cypres: #2E4B3F;

  /* --- Typographie -------------------------------------------------------
     Inter = principale (lecture + interface + titres structurels)
     Source Serif 4 = éditoriale secondaire (chapôs, citations)
     Auto-hébergées depuis l'incrément 4 — @font-face en tête de fichier.
     Les replis système sont CONSERVÉS : ils servent avant le chargement
     (`font-display: swap`) et si un fichier venait à manquer. */
  --pf-fonte-principale: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --pf-fonte-editoriale: "Source Serif 4", Georgia, "Times New Roman", serif;

  --pf-corps: 1.09375rem;        /* 17,5 px — référence de travail 4B */
  --pf-interligne: 1.72;         /* référence de travail 4B */
  --pf-mesure: 68ch;             /* colonne 68ch ≈ 65–75 caractères/ligne */

  /* --- Espacements -------------------------------------------------------- */
  --pf-espace-3xs: 0.25rem;
  --pf-espace-2xs: 0.5rem;
  --pf-espace-xs: 0.75rem;
  --pf-espace-s: 1rem;
  --pf-espace-m: 1.5rem;
  --pf-espace-l: 2.25rem;
  --pf-espace-xl: 3.5rem;
  --pf-espace-2xl: 5rem;

  /* --- Rayons -------------------------------------------------------------- */
  --pf-rayon-s: 2px;
  --pf-rayon-m: 4px;
  --pf-rayon-l: 8px;

  /* --- Largeurs ------------------------------------------------------------ */
  --pf-largeur-lecture: 68ch;
  --pf-largeur-contenu: 1200px;
}

/* --- Base de lecture ------------------------------------------------------ */

body {
  background-color: var(--pf-fond);
  color: var(--pf-encre);
  font-family: var(--pf-fonte-principale);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  -webkit-font-smoothing: antialiased;
}

/* --- Titres : structure majoritairement sans-serif (D-034) ---------------- */

h1, h2, h3, h4, h5, h6 {
  font-family: var(--pf-fonte-principale);
  color: var(--pf-encre);
  line-height: 1.22;
  text-wrap: balance;
}

h1 { font-size: clamp(2rem, 1.5rem + 2.2vw, 2.9rem); margin-block-end: var(--pf-espace-m); }
h2 { font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem); margin-block-start: var(--pf-espace-xl); margin-block-end: var(--pf-espace-s); }
h3 { font-size: clamp(1.24rem, 1.1rem + 0.6vw, 1.5rem); margin-block-start: var(--pf-espace-l); margin-block-end: var(--pf-espace-xs); }

/* --- Mesure de lecture ----------------------------------------------------
   Le contexte `.entry-content[data-ast-blocks-layout]` n'est pas décoratif :
   Astra impose `max-width: var(--wp--custom--ast-content-width-size)` (1200 px)
   à TOUS les enfants directs, avec une spécificité de 0,2,0. Une règle en
   `.entry-content > p` (0,1,1) ne peut pas l'atteindre. Reprendre la même
   forme de sélecteur, une seule fois, suffit : la feuille du thème enfant est
   déjà chargée après Astra. `:where()` maintient la liste à coût nul.
   Mesuré le 2026-08-17 : sans cette forme, 1200 px ; avec, ≈ 68ch. */

.entry-content[data-ast-blocks-layout] > :where(p, ul, ol, blockquote, .pf-chapo) {
  max-width: var(--pf-largeur-lecture);
}

/* Ce qui doit légitimement dépasser la mesure de lecture garde la main. */
.entry-content[data-ast-blocks-layout] > :where(.alignfull, .alignwide, .wp-block-cover, .wp-block-columns) {
  max-width: none;
}

.entry-content > p { margin-block-end: var(--pf-espace-m); }

/* --- Appels de sources ----------------------------------------------------
   Deux appels ACCOLÉS se colleraient et se liraient comme un seul nombre :
   « 1 » suivi de « 12 » donne « 112 ». Sur une page qui porte « appelez le 15
   ou le 112 », c'est le pire nombre à faire apparaître par accident.
   Reprise de la correction §31.4 de la planche 5P.

   LA SÉPARATION EST VISUELLE, JAMAIS TEXTUELLE — correction B-01, 2026-08-18.
   Une virgule injectée par `::before` était de la ponctuation : elle entrait
   dans l'arbre d'accessibilité et dans le copier-coller d'un texte santé sans
   avoir été écrite par personne. Et surtout, `sup + sup` ne distingue pas deux
   appels accolés de deux appels séparés par une phrase entière : un combinateur
   de frères ignore les nœuds de texte. Mesuré sur le contenu gelé : quatre
   occurrences — une en 5Q, trois en 5R — TOUTES séparées par une phrase, et
   AUCUNE paire réellement accolée. La règle ne produisait donc qu'une virgule
   posée après un point. Un simple espacement rend cette imprécision inoffensive :
   il n'affirme rien, ne s'entend pas, ne se copie pas.

   La garantie de fond n'est pas ici mais dans le contenu : plusieurs références
   se notent dans UN SEUL appel — `<sup>4,7</sup>` — convention déjà tenue par
   les quatre pages de la vague 1. */

sup + sup { margin-inline-start: 0.2em; }

/* --- Kicker du hero -------------------------------------------------------
   Situe la page dans l'arborescence, au-dessus du titre. Sobre : il oriente,
   il n'accroche pas. */

.pf-kicker {
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
  margin-block-end: var(--pf-espace-2xs);
}

/* --- Chapô éditorial (Source Serif 4) ------------------------------------- */

.pf-chapo {
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.2em;
  line-height: 1.6;
  color: var(--pf-encre-2);
  max-width: var(--pf-largeur-lecture);
}

/* --- Liens ---------------------------------------------------------------- */

a {
  color: var(--pf-accent);
  text-underline-offset: 0.18em;
  text-decoration-thickness: 1px;
}

a:hover { color: var(--pf-accent-hover); }
a:active { color: var(--pf-accent-active); }

/* --- Accessibilité : focus visible partout -------------------------------- */

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 3px solid var(--pf-accent);
  outline-offset: 2px;
  border-radius: var(--pf-rayon-s);
}

/* --- Boutons -------------------------------------------------------------- */

/* CIBLE TACTILE — 44 px, standard du site (BUILD-5.1).
   Mesuré avant correction : 40,4 px pour les boutons du hero, 42 px pour le
   bouton praticien. Le manque venait du retrait vertical, pas de la fonte.

   `min-height` plutôt qu'un retrait plus grand : le retrait déplacerait le
   texte dans sa boîte, la hauteur minimale ne fait que garantir un plancher.
   `inline-flex` centre le libellé dans cette hauteur — sans elle, un bouton
   plus haut que son contenu collerait son texte en haut.

   NI LARGEUR, NI COULEUR, NI RAYON, NI LIBELLÉ NE CHANGENT : la largeur reste
   déterminée par le retrait horizontal et le texte. */
.pf-bouton,
.wp-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  background-color: var(--pf-accent);
  color: var(--pf-fond);
  border: 1px solid transparent;
  border-radius: var(--pf-rayon-m);
  padding: var(--pf-espace-xs) var(--pf-espace-m);
  font-family: var(--pf-fonte-principale);
  font-weight: 600;
  line-height: 1.3;
  text-decoration: none;
}

.pf-bouton:hover,
.wp-block-button__link:hover {
  background-color: var(--pf-accent-hover);
  color: var(--pf-fond);
}

.pf-bouton:active,
.wp-block-button__link:active { background-color: var(--pf-accent-active); }

.pf-bouton--secondaire {
  background-color: transparent;
  color: var(--pf-accent);
  border-color: var(--pf-filet);
}

/* --- Bandes neutres et seuils sombres ------------------------------------- */

.pf-bande-papier { background-color: var(--pf-papier); }

.pf-strate {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-strate a { color: var(--pf-marque); }
.pf-strate a:hover { color: var(--pf-marque-hover); }
.pf-strate h1, .pf-strate h2, .pf-strate h3 { color: var(--pf-ivoire); }

/* --- Bloc de vigilance (système indépendant de la marque) ------------------ */

.pf-vigilance {
  background-color: var(--pf-vigilance-fond);
  color: var(--pf-vigilance-texte);
  border: 1px solid var(--pf-vigilance-bord);
  border-radius: var(--pf-rayon-m);
  padding: var(--pf-espace-m);
  max-width: var(--pf-largeur-lecture);
}

/* ==========================================================================
   COMPOSANTS ÉDITORIAUX TRANSVERSAUX — PHASE 6, INCRÉMENT 2
   Véhicules de composition (D-035). Aucun contenu clinique n'est porté ici :
   ces règles décrivent la forme, jamais l'affirmation.
   ========================================================================== */

/* --- 1. Vigilance : hiérarchie à trois degrés (D-036 §4) -------------------
   Le principe opposable est la hiérarchisation, pas une forme imposée.
   La distinction se fait par le POIDS et la STRUCTURE, non par de nouvelles
   couleurs : le système de vigilance ne dispose que d'un triplet alloué. */

.pf-vigilance {
  margin-block: var(--pf-espace-l);
}

.pf-vigilance > :first-child { margin-block-start: 0; }
.pf-vigilance > :last-child { margin-block-end: 0; }

/* Corps lisible en encre ; seule l'étiquette porte la teinte de vigilance. */
.pf-vigilance p,
.pf-vigilance li {
  color: var(--pf-encre);
  max-width: none;
}

/* Le titre est qualifié par son composant — 0,2,0 — pour ne pas être capturé
   par `.pf-vigilance p` (0,1,1) juste au-dessus, qui impose l'encre au corps
   du bloc. Mesuré le 2026-08-17 : l'étiquette rendue en `#201D1A` au lieu de
   la teinte de vigilance, et marge basse à 28 px au lieu de 8 px.
   La variante `--urgence` conserve la main : sa règle, de même poids, est
   déclarée plus bas. */
.pf-vigilance .pf-vigilance__titre {
  color: var(--pf-vigilance-texte);
  font-weight: 600;
  line-height: 1.35;
  margin-block-end: var(--pf-espace-2xs);
}

/* Les intitulés sont des titres NATIFS, pour qu'un lecteur d'écran navigant
   par titres rencontre les repères de sécurité. Leur taille est ramenée à
   celle d'un intitulé d'encart : le niveau sémantique ne dicte pas l'échelle.

   h4 est admis parce qu'une page peut grouper ses paliers sous un intertitre
   commun — « les autres situations, par ordre de délai » — auquel cas les
   paliers lui sont subordonnés. L'échelle visuelle reste la même : c'est la
   hiérarchie du document qui change, pas le poids du repère. */
h3.pf-vigilance__titre,
h4.pf-vigilance__titre {
  font-size: 1.0625rem;
  margin-block-start: 0;
}

/* Degré 1 — conseil de consultation : présence discrète. */
.pf-vigilance--consultation {
  border-inline-start: 3px solid var(--pf-vigilance-bord);
}

/* Degré 2 — avis sans attendre : bord porteur, étiquette appuyée. */
.pf-vigilance--sans-attendre {
  border-inline-start: 5px solid var(--pf-vigilance-texte);
}

/* Degré 3 — urgence réelle : inversion du même couple de tokens.
   #F4F1EA sur #7A5300 = 6,07:1 (AA texte normal, AAA grand texte).
   Réservé aux situations où l'urgence est réellement établie. */
.pf-vigilance--urgence {
  background-color: var(--pf-vigilance-texte);
  border-color: var(--pf-vigilance-texte);
  color: var(--pf-ivoire);
}

.pf-vigilance--urgence p,
.pf-vigilance--urgence li,
.pf-vigilance--urgence .pf-vigilance__titre {
  color: var(--pf-ivoire);
}

.pf-vigilance--urgence a {
  color: var(--pf-ivoire);
  text-decoration-thickness: 2px;
}

.pf-vigilance--urgence a:focus-visible { outline-color: var(--pf-ivoire); }

/* --- 2. Statut épistémique (D-020 · D-036 §3 · D-040 §A-5) -----------------
   Chrome NEUTRE et IDENTIQUE pour tous les statuts : la distinction est
   portée par le mot, jamais par une échelle graphique. Aucun code couleur
   de « niveau de preuve » n'est introduit — il produirait un score de
   crédibilité que le canon n'autorise pas. */

.pf-statut {
  border-inline-start: 3px solid var(--pf-filet);
  padding-inline-start: var(--pf-espace-m);
  margin-block: var(--pf-espace-l);
  max-width: var(--pf-largeur-lecture);
}

.pf-statut__label {
  display: block;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--pf-encre-2);
  margin-block-end: var(--pf-espace-3xs);
}

.pf-statut p { margin-block-end: 0; }

/* Encart « ce que les données permettent — et ne permettent pas — de
   conclure » (porteur canonique, D-040 §A-5). Quatre lignes de même poids. */

.pf-statut-encart {
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  padding: var(--pf-espace-m);
  margin-block: var(--pf-espace-xl);
  max-width: var(--pf-largeur-lecture);
}

.pf-statut-encart > :first-child { margin-block-start: 0; }
.pf-statut-encart > :last-child { margin-block-end: 0; }

/* Qualifié par son composant — 0,2,0 — pour reprendre la main sur la marge
   de paragraphe d'Astra. Mesuré : 27,2 px au lieu de 16 px. */
.pf-statut-encart .pf-statut-encart__titre {
  font-size: 1.0625rem;
  font-weight: 600;
  color: var(--pf-encre);
  margin-block-end: var(--pf-espace-s);
}

.pf-statut-encart .pf-statut {
  border-inline-start-color: var(--pf-filet);
  margin-block: var(--pf-espace-s);
}

.pf-statut-encart .pf-statut:last-of-type { margin-block-end: 0; }

.pf-statut__date {
  display: block;
  font-size: 0.8125rem;
  color: var(--pf-encre-2);
  margin-block-start: var(--pf-espace-s);
}

/* --- 2 bis. Périmètre de la page (5F · D-032) ------------------------------
   Chrome NEUTRE, délibérément distinct du système de vigilance : borner un
   sujet n'est pas alerter. Aucun code couleur n'est employé pour opposer
   « traité » et « non traité ». */

.pf-perimetre {
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  padding: var(--pf-espace-m);
  margin-block: var(--pf-espace-l);
  max-width: var(--pf-largeur-lecture);
}

.pf-perimetre > :first-child { margin-block-start: 0; }
.pf-perimetre > :last-child { margin-block-end: 0; }

/* Qualifié par son composant — 0,2,0 — même motif : marge mesurée à 24 px
   au lieu de 8 px. La couleur, elle, était déjà conforme. */
.pf-perimetre .pf-perimetre__titre {
  font-size: 0.9375rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pf-encre-2);
  margin-block: var(--pf-espace-s) var(--pf-espace-2xs);
}

.pf-perimetre > .pf-perimetre__titre:first-child { margin-block-start: 0; }

.pf-perimetre__liste {
  margin-block: 0;
  padding-inline-start: var(--pf-espace-m);
  max-width: none;
}

.pf-perimetre__liste li { margin-block-end: var(--pf-espace-3xs); }

.pf-perimetre__renvoi {
  margin-block-start: var(--pf-espace-s);
  padding-block-start: var(--pf-espace-s);
  border-block-start: 1px solid var(--pf-filet);
  font-size: 0.9375rem;
  color: var(--pf-encre-2);
  max-width: none;
}

/* --- 2 ter. Sources et références -----------------------------------------
   Le composant liste, il ne qualifie pas. Aucun intitulé valorisant n'est
   fourni : ni « preuves scientifiques », ni « études démontrant… ». */

/* Le sélecteur est qualifié par la balise — 0,1,1 — parce que le contrat de
   cascade en fin de fichier porte `h2, .entry-content :where(h2)` à 0,1,0 :
   à spécificité égale, la dernière déclaration gagnerait et promouvrait ce
   titre à l'échelle d'un titre de section. Mesuré le 2026-08-17 : 32,80 px au
   lieu de 19,84 px. Qualifier la balise rend la règle indépendante de l'ordre.
   Les huit usages du dépôt — patterns et snapshots de la vague 1 — sont des
   `h2`, sans exception. */
/* `margin-block-end` ajouté ici, en 0,1,1, parce que la marge basse des
   titres vient d'Astra en 0,1,0 : mesurée à 20 px au lieu des 16 px du jeton.
   La couleur, elle, est rétablie par le contrat de cascade en fin de fichier,
   qui couvre tous les titres. */
/* `line-height` déclaré ici parce que la règle structurelle de contrat, en fin
   de fichier, porte 1,22 sur tous les h2 : un titre de composant n'a pas le
   rythme d'un titre de section. La valeur n'est pas inventée — c'est celle que
   déclare `.pf-cta .pf-cta__titre`, titre frère de taille identique
   (1.24rem), et celle que cet élément rendait avant l'ajout du contrat.
   Mesuré le 2026-08-17 : 24,20 px contre 25,79 px pour le titre de CTA. */
h2.pf-sources__titre { font-size: 1.24rem; line-height: 1.3; margin-block-end: var(--pf-espace-s); }

.pf-sources {
  margin-block: var(--pf-espace-s) var(--pf-espace-xl);
  max-width: var(--pf-largeur-lecture);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-sources__liste {
  margin-block: 0;
  padding-inline-start: var(--pf-espace-m);
  max-width: none;
}

.pf-sources__liste li {
  margin-block-end: var(--pf-espace-2xs);
  /* Les libellés de sources contiennent des URL longues. */
  overflow-wrap: anywhere;
}

.pf-sources__date {
  margin-block-start: var(--pf-espace-s);
  font-size: 0.875rem;
  color: var(--pf-encre-2);
  max-width: none;
}

/* --- 3. Byline santé ------------------------------------------------------
   Aucune mention de relecture n'est produite par le composant : chaque ligne
   est facultative et n'est renseignée que si l'acte a réellement eu lieu. */

.pf-byline {
  border-block: 1px solid var(--pf-filet);
  padding-block: var(--pf-espace-xs);
  margin-block: var(--pf-espace-l);
  max-width: var(--pf-largeur-lecture);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

.pf-byline > :first-child { margin-block-start: 0; }
.pf-byline > :last-child { margin-block-end: 0; }

.pf-byline p {
  color: var(--pf-encre-2);
  margin-block-end: var(--pf-espace-3xs);
  max-width: none;
}

/* Qualifié par son composant — 0,2,0 — pour ne pas être capturé par
   `.pf-byline p` (0,1,1). Mesuré : `#56514B` au lieu de `#201D1A`, ce qui
   effaçait la distinction entre l'auteur et les dates. */
.pf-byline .pf-byline__auteur {
  color: var(--pf-encre);
  font-weight: 600;
}

.pf-byline__dates { font-size: 0.875rem; }

/* --- 4. CTA patient sobre -------------------------------------------------
   Une seule action principale par instance. Aucune urgence artificielle,
   aucun compte à rebours, aucune promesse de résultat. */

.pf-cta {
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-l);
  padding: var(--pf-espace-l);
  margin-block: var(--pf-espace-xl);
  max-width: var(--pf-largeur-lecture);
}

.pf-cta > :first-child { margin-block-start: 0; }
.pf-cta > :last-child { margin-block-end: 0; }

/* Qualifié par son composant — 0,2,0 — pour ne pas être capturé par
   `.pf-cta p` (0,1,1), qui impose l'encre secondaire et une marge de 24 px au
   corps du bloc. Mesuré : couleur `#56514B` au lieu de `#201D1A`, marge
   24 px au lieu de 8 px. */
.pf-cta .pf-cta__titre {
  font-size: 1.24rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
  margin-block-end: var(--pf-espace-2xs);
}

.pf-cta p {
  color: var(--pf-encre-2);
  max-width: none;
  margin-block-end: var(--pf-espace-m);
}

.pf-cta .wp-block-buttons { margin-block-end: 0; }

/* Action secondaire : lien de texte, jamais un second bouton concurrent. */
.pf-cta__secondaire {
  display: inline-block;
  margin-block-start: var(--pf-espace-s);
  font-size: 0.9375rem;
}

@media (max-width: 782px) {
  .pf-cta { padding: var(--pf-espace-m); }
  .pf-vigilance { padding: var(--pf-espace-s) var(--pf-espace-m); }
  .pf-perimetre { padding: var(--pf-espace-s) var(--pf-espace-m); }
}

/* --- Filets --------------------------------------------------------------- */

hr, .pf-filet {
  border: 0;
  border-block-start: 1px solid var(--pf-filet);
  margin-block: var(--pf-espace-xl);
}

/* --- Mobile : la lecture prime -------------------------------------------- */

@media (max-width: 782px) {
  :root {
    --pf-corps: 1.0625rem;       /* 17 px */
    --pf-interligne: 1.68;
  }

  h2 { margin-block-start: var(--pf-espace-l); }
}

/* ==========================================================================
   CONTRAT DE CASCADE ASTRA ↔ THÈME ENFANT — 2026-08-17
   Application de D-042 §I. Rien n'est inventé : chaque règle ci-dessous
   répond à une règle d'Astra MESURÉE comme gagnante sur le rendu servi, et
   reprend EXACTEMENT sa forme de sélecteur, une seule fois.

   Le problème n'était pas l'ordre de chargement — la feuille du thème enfant
   est bien la dernière feuille de thème. Le problème est que **Astra apparie
   chaque sélecteur d'élément à une branche `.entry-content :where(élément)`**,
   ce qui porte toutes ses règles à 0,1,0, là où le design system n'écrivait
   que 0,0,1. Aucun `!important` n'est employé, et Astra n'est pas modifié.
   Dette ajoutée : au plus un cran de spécificité, une seule fois par
   propriété ; aucune règle ne dépasse 0,2,1, qui est le poids d'Astra.
   ========================================================================== */

/* --- 1. Base des `rem` sur mobile -----------------------------------------
   Astra réduit la racine à `91.2%` sous 921 px. Effet mesuré : tous les
   jetons exprimés en `rem` rétrécissent de 8,8 % sans que rien ne le
   signale — corps à 15,5 px au lieu des 17 px annoncés par `--pf-corps`.
   Le correctif est borné au même périmètre que la règle d'Astra : pas de
   sur-correction globale. 100 % respecte la taille de texte choisie par
   la personne dans son navigateur. */

@media (max-width: 921px) {
  html { font-size: 100%; }
}

/* --- 2. Échelle typographique --------------------------------------------
   Astra : `hN, .entry-content :where(hN)` → 0,1,0. Même forme ici.
   `h4` manquait : sa valeur ne crée aucun palier nouveau, elle réutilise
   deux valeurs déjà canoniques du fichier — `--pf-corps` (1.09375rem) en
   plancher et le plancher de `h3` (1.24rem) en plafond. Contrainte
   vérifiée aux trois largeurs : h1 > h2 > h3 > h4 > corps. */

/* Le rythme vertical rejoint ces mêmes règles plutôt que d'ouvrir une seconde
   série. Mesuré le 2026-08-17 : Astra imposait `line-height` 1,2 sur h1 et h4,
   1,3 sur h2 et h3 — au lieu du 1,22 canonique — et une marge basse uniforme
   de 20 px là où le design system prévoit 24 / 16 / 12 px. Les marges HAUTES,
   elles, étaient déjà gouvernées par le thème enfant : elles ne sont pas
   réaffirmées ici.
   `h4` ne reçoit que l'interligne : le thème enfant ne déclare aucune marge
   canonique pour ce niveau, et cette passe n'ouvre aucune décision de design. */

h1, .entry-content :where(h1) { font-size: clamp(2rem, 1.5rem + 2.2vw, 2.9rem); color: var(--pf-encre); line-height: 1.22; margin-block-end: var(--pf-espace-m); }
h2, .entry-content :where(h2) { font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem); color: var(--pf-encre); line-height: 1.22; margin-block-end: var(--pf-espace-s); }
h3, .entry-content :where(h3) { font-size: clamp(1.24rem, 1.1rem + 0.6vw, 1.5rem); color: var(--pf-encre); line-height: 1.22; margin-block-end: var(--pf-espace-xs); }
h4, .entry-content :where(h4) { font-size: clamp(1.09375rem, 1.05rem + 0.25vw, 1.24rem); color: var(--pf-encre); line-height: 1.22; }

/* --- 3. Titre de la page ---------------------------------------------------
   Le `h1` est rendu par Astra HORS `post_content` : aucun second `h1` n'est
   créé ici. Astra le cible par `header.entry-header .entry-title` (0,2,1),
   qui écrase toute règle `h1`. Même forme, une seule fois. */

header.entry-header .entry-title { font-size: clamp(2rem, 1.5rem + 2.2vw, 2.9rem); line-height: 1.22; margin-block-end: var(--pf-espace-m); }

/* --- 3 bis. Largeur des composants ----------------------------------------
   Même règle d'Astra que pour la mesure de lecture — `.entry-content
   [data-ast-blocks-layout] > *` en 0,2,0 — mais elle frappe ici les GROUPES
   des composants, dont la largeur canonique `var(--pf-largeur-lecture)` n'est
   déclarée qu'en 0,1,0. Mesuré le 2026-08-17 : les neuf instances rendues à
   1200 px au lieu de 68ch, alors que le paragraphe éditorial voisin, lui,
   respectait 746,66 px.
   Le périmètre est limité aux composants du design system : aucun
   `wp-block-group` générique n'est visé. */

/* L'exclusion est portée par le sélecteur lui-même, et non par l'ordre du
   fichier : la règle d'exception `> :where(.alignfull, .alignwide, …)` plus
   haut pèse aussi 0,2,0 et serait perdante ici, étant déclarée avant.
   `:not(:where(…))` maintient le coût de l'exception à zéro — l'ensemble reste
   à 0,2,0, à égalité avec Astra.
   Mesuré le 2026-08-17 : aujourd'hui, un composant portant `alignwide` reçoit
   déjà `calc(1200px + 3em + 3em)` et un composant `alignfull` reçoit `100vw`,
   parce que les règles d'Astra pèsent 0,3,0 et davantage. L'exclusion ne change
   donc aucun rendu actuel : elle rend l'intention explicite et supprime la
   dépendance à une spécificité d'Astra que rien ne garantit dans le temps. */

.entry-content[data-ast-blocks-layout] > :where(.pf-vigilance, .pf-perimetre, .pf-statut, .pf-statut-encart, .pf-sources, .pf-byline, .pf-cta):not(:where(.alignwide, .alignfull)) {
  max-width: var(--pf-largeur-lecture);
}

/* --- 4. Paddings des composants -------------------------------------------
   Astra : `.entry-content > .wp-block-group, …` → quatre LONGHANDS
   (`padding-top/right/bottom/left`) alimentés par
   `var(--wp--custom--ast-default-block-*-padding)`, en 0,2,0. Un raccourci
   `padding` en 0,1,0 ne les atteint pas : mesuré à 52,5 px sur les sept
   composants au lieu des jetons.
   Les règles canoniques `.pf-*` plus haut restent la source de vérité et
   servent les instances IMBRIQUÉES — Astra ne cible que les enfants
   DIRECTS. Les règles ci-dessous ne redéfinissent aucune valeur : elles
   réaffirment les mêmes jetons au poids nécessaire, et respectent les
   différences intentionnelles entre composants. */

.entry-content > .wp-block-group:where(.pf-vigilance, .pf-perimetre, .pf-statut-encart) {
  padding: var(--pf-espace-m);
}

.entry-content > .wp-block-group:where(.pf-cta) { padding: var(--pf-espace-l); }

.entry-content > .wp-block-group:where(.pf-statut) {
  padding: 0;
  padding-inline-start: var(--pf-espace-m);
}

.entry-content > .wp-block-group:where(.pf-sources) { padding: 0; }

.entry-content > .wp-block-group:where(.pf-byline) { padding: var(--pf-espace-xs) 0; }

@media (max-width: 782px) {
  .entry-content > .wp-block-group:where(.pf-vigilance, .pf-perimetre) {
    padding: var(--pf-espace-s) var(--pf-espace-m);
  }

  .entry-content > .wp-block-group:where(.pf-cta) { padding: var(--pf-espace-m); }
}

/* --- 5. Fond de lecture ---------------------------------------------------
   Astra pose le fond via la classe de conteneur portée par `body`
   (`.ast-plain-container`, 0,1,0), ce qui écrase `body` (0,0,1) : mesuré
   blanc au lieu de `--pf-fond`. */

body.ast-plain-container,
body.ast-separate-container,
body.ast-narrow-container { background-color: var(--pf-fond); }

/* --- 6. Boutons -----------------------------------------------------------
   Source instruite avant écriture : la déclaration gagnante est
   `.wp-block-button .wp-block-button__link { background-color:
   var(--ast-global-color-0) }` (0,2,0), engendrée par le CSS dynamique
   d'Astra — `inc/class-astra-dynamic-css.php`, l. 3016 et 3047 — avec
   `:root { --ast-global-color-0: #046BD2 }` par défaut, `astra-settings`
   ne portant aucune palette.
   Ce n'est donc PAS `theme.json` : la règle engendrée par `theme.json`
   (`:root :where(.wp-element-button, .wp-block-button__link)`) ne pèse que
   0,1,0 et perd elle aussi contre Astra. Déclarer le bouton dans le
   `theme.json` du thème enfant ne corrigerait rien — le niveau sémantique
   correct est ici le contrat de cascade. `theme.json` reste inchangé. */

.wp-block-button .wp-block-button__link {
  background-color: var(--pf-accent);
  color: var(--pf-fond);
  padding: var(--pf-espace-xs) var(--pf-espace-m);
}

.wp-block-button .wp-block-button__link:hover,
.wp-block-button .wp-block-button__link:focus {
  background-color: var(--pf-accent-hover);
  color: var(--pf-fond);
}

.wp-block-button .wp-block-button__link:active { background-color: var(--pf-accent-active); }

/* ==========================================================================
   PHASE BUILD-1 — HEADER GLOBAL ET ACCUEIL
   Source éditoriale : reports/2026-08-09_PHASE_5A_HOME_EDITORIAL_CONCEPTION.md
   Aucune valeur chromatique nouvelle. Une seule teinte est AJOUTÉE, et elle est
   DÉRIVÉE de deux jetons existants : `--pf-ivoire-2`, texte secondaire sur
   sombre. Le système ne couvrait pas ce cas — `--pf-encre-2` est prévue pour
   les fonds clairs et serait illisible sur la strate.
   Contrastes mesurés : 8,18:1 sur `--pf-strate` · 7,41:1 sur `--pf-strate-2`.
   ========================================================================== */

:root {
  --pf-ivoire-2: color-mix(in srgb, var(--pf-ivoire) 72%, var(--pf-strate));
  --pf-header-h: 68px;
  /* 44 px, ET NON 36, DEPUIS BUILD-13.2A : le bandeau porte desormais un lien
     reel, et une barre qui contient une cible doit etre aussi haute qu'elle.
     Mesure a l'appui, ci-dessous. */
  --pf-topbar-h: 44px;
}

/* --- Débordement horizontal des sections pleine largeur -------------------
   Astra réalise `alignfull` avec `width: 100vw`, unité qui INCLUT la largeur
   de la barre de défilement verticale. Mesuré sur l'accueil : les quatre
   sections pleine largeur faisaient 1280 px dans une zone visible de 1265 px,
   soit un défilement horizontal parasite de 8 px que rien ne justifiait.

   `clip` plutôt que `hidden` : `hidden` créerait un conteneur de défilement,
   ce qui casserait `position: sticky` et l'ancrage par fragment. `clip` coupe
   sans rien de tout cela. */

#page { overflow-x: clip; }

.pf-marque-deposee {
  font-size: 0.62em;
  vertical-align: super;
  line-height: 0;
  letter-spacing: 0;
}

/* --- Bandeau utilitaire (5A · E0) ----------------------------------------- */

.pf-topbar {
  background-color: var(--pf-strate-2);
  border-block-end: 1px solid var(--pf-filet-sombre);
}

.pf-topbar__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--pf-espace-m);
  max-width: var(--pf-largeur-contenu);
  min-height: var(--pf-topbar-h);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

.pf-topbar__baseline,
.pf-topbar__pro {
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.4;
  color: var(--pf-ivoire-2);
}

/* ACCÈS PROFESSIONNEL — BUILD-13.2A.
   Le lien était inerte : ni couleur de lien, ni cible tactile, ce qui était
   cohérent tant qu'il n'était ni cliquable ni focalisable. Il devient réel, et
   reçoit donc les deux.

   COULEUR : `--pf-marque-hover`, exactement le jeton que le thème emploie déjà
   pour un lien sur fond sombre (`.pf-formation__orientation a`) et que la
   planche V3 pose sur ce bandeau. Ce n'est pas une mise en avant : c'est ce qui
   rend un lien reconnaissable comme tel.

   ÉTAT COURANT : filet inférieur transparent qui prend la couleur de marque sous
   `aria-current`, convention de la planche V3.

   CIBLE TACTILE — DEUX CANDIDATS MESURÉS, LE PREMIER ÉCARTÉ. Le pseudo-élément
   de hauteur calculée de BUILD-13.1R3 est repris, mais il ne suffisait pas seul :
   le lien siège à 8 px du haut de page, si bien que la moitié haute de la zone
   tombait HORS PAGE et se perdait — 40 px atteignables sur 44 attendus, mesuré à
   1440, 1280 et 1024.

   Étendre la zone vers le bas seulement portait bien à 45 px, mais la faisait
   finir à 52 px quand le CTA du header commence à 53 : UN PIXEL de marge, donc un
   défaut latent au moindre changement de rembourrage. Écarté.

   Retenu : porter le bandeau de 36 à 44 px. La zone atteignable coïncide alors
   EXACTEMENT avec la barre visible — [0, 43] dans un bandeau de 44 — sans aucune
   portée invisible au-dehors, et 17 px séparent la zone du CTA. Le prix est un
   décalage de 8 px du chrome desktop, assumé : une barre qui porte une cible doit
   être aussi haute que sa cible. Le mobile n'est pas concerné, le bandeau y étant
   masqué sous 1000 px. */
.pf-topbar__pro {
  position: relative;
  color: var(--pf-marque-hover);
  text-decoration: none;
  border-block-end: 1px solid transparent;
}

.pf-topbar__pro:hover,
.pf-topbar__pro:focus-visible { border-block-end-color: currentColor; }

.pf-topbar__pro[aria-current] { border-block-end-color: var(--pf-marque-hover); }

.pf-topbar__pro::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  inset-block: calc((100% - 44px) / 2);
}

/* --- Barre principale ----------------------------------------------------- */

.pf-header {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-header__inner {
  display: flex;
  align-items: center;
  gap: var(--pf-espace-m);
  max-width: var(--pf-largeur-contenu);
  min-height: var(--pf-header-h);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

/* --- Lockup : symbole officiel + nom en typographie du système ------------
   Le symbole n'est ni redessiné ni redimensionné dans son fichier : seule sa
   taille de rendu est fixée ici. Le nom est du TEXTE — jamais rastérisé. */

.pf-lockup {
  display: inline-flex;
  align-items: center;
  gap: 11px;
  margin-inline-end: auto;
  text-decoration: none;
  color: inherit;
}

.pf-lockup__symbole {
  width: 36px;
  height: 36px;
  flex: 0 0 auto;
  display: block;
}

.pf-lockup__texte {
  font-family: var(--pf-fonte-principale);
  font-size: 1.0625rem;
  font-weight: 600;
  letter-spacing: -0.005em;
  line-height: 1.1;
  color: var(--pf-ivoire);
  white-space: nowrap;
}

/* --- Navigation ----------------------------------------------------------- */

.pf-nav {
  display: flex;
  align-items: center;
  gap: var(--pf-espace-l);
}

.pf-nav__liste {
  display: flex;
  align-items: center;
  gap: var(--pf-espace-l);
  margin: 0;
  padding: 0;
  list-style: none;
}

.pf-nav__element { margin: 0; }

/* Aucune destination n'existe encore : les entrées sont rendues sans `href`,
   donc non cliquables et non focalisables. Le curseur reste neutre — laisser
   `pointer` promettrait une navigation qui n'existe pas. */
.pf-nav__lien {
  font-size: 0.9375rem;
  font-weight: 500;
  line-height: 1.3;
  color: var(--pf-ivoire-2);
  text-decoration: none;
  white-space: nowrap;
  transition: color 160ms ease;
}

.pf-nav__lien:hover,
.pf-nav__lien:focus-visible { color: var(--pf-ivoire); }

/* CONTOUR DE FOCUS SUR FOND SOMBRE — BUILD-6.5.
   Même doctrine que le pied de page, et pour la même raison mesurée : le
   contour global d'accessibilité vaut `--pf-accent`, soit 2,59:1 contre
   `--pf-strate` — sous le seuil de 3:1 des éléments non textuels. Ces entrées
   sont focalisables depuis BUILD-5 ; le défaut est donc antérieur, et il est
   corrigé ici en même temps que son jumeau du pied.

   La déclaration est ajoutée SÉPARÉMENT de la règle de couleur ci-dessus, et
   non fusionnée avec elle : celle-ci porte aussi `:hover`, qui n'a pas de
   contour. Les fusionner appliquerait une couleur de contour à un état qui
   n'en affiche aucun — inoffensif, mais faux à lire.

   RIEN HORS DE L'ÉTAT DE FOCUS N'EST TOUCHÉ : repos, survol et couleurs sont
   inchangés. */
.pf-nav__lien:focus-visible { outline-color: var(--pf-ivoire); }

.pf-nav__pro { display: none; }

/* --- CTA primaire du header ----------------------------------------------
   Encre sombre sur orange de marque : 5,01:1, mesuré. L'inverse (ivoire sur
   orange) ne donnerait que 3,17:1 et échouerait au niveau AA. */

.pf-header__cta {
  display: inline-flex;
  align-items: center;
  padding: 0.5rem var(--pf-espace-m);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-marque);
  color: var(--pf-strate);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 160ms ease;
}

.pf-header__cta:hover,
.pf-header__cta:focus-visible { background-color: var(--pf-marque-hover); }

/* --- Déclencheur mobile --------------------------------------------------- */

.pf-burger {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: var(--pf-rayon-m);
  background: transparent;
  cursor: pointer;
}

.pf-burger__trait {
  display: block;
  width: 22px;
  height: 2px;
  margin-inline: auto;
  background-color: var(--pf-ivoire);
}

/* --- Header sous 1000 px --------------------------------------------------
   Ce n'est pas un desktop réduit : le bandeau utilitaire disparaît et sa porte
   professionnelle est reprise en pied de navigation dépliée, là où elle reste
   secondaire sans être perdue. */

@media (max-width: 999px) {
  .pf-topbar { display: none; }

  .pf-header__inner {
    flex-wrap: wrap;
    padding-inline: var(--pf-espace-s);
  }

  .pf-burger { display: flex; }

  .pf-nav {
    flex-basis: 100%;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding-block-end: var(--pf-espace-s);
    border-block-start: 1px solid var(--pf-filet-sombre);
  }

  .pf-nav__liste {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
  }

  .pf-nav__lien {
    display: block;
    padding-block: var(--pf-espace-xs);
    font-size: 1rem;
    white-space: normal;
  }

  .pf-header__cta {
    justify-content: center;
    margin-block-start: var(--pf-espace-xs);
  }

  /* `position: relative` DEPUIS BUILD-13.2A-R1 : ce paragraphe est le bloc
     conteneur de la cible tactile du lien — et il ne contient que ce lien.
     Voir le commentaire du pseudo-élément, plus bas. */
  .pf-nav__pro {
    position: relative;
    display: block;
    margin: var(--pf-espace-s) 0 0;
    font-size: 0.8125rem;
    line-height: 1.45;
  }

  /* Même contrat que le bandeau desktop — BUILD-13.2A. Ici le lien est dans le
     menu déplié, où rien ne le contraint en hauteur : la zone de 44 px est
     obtenue par un pseudo-élément calculé, sans déplacer la ligne.

     PLUS DE `position: relative` ICI DEPUIS BUILD-13.2A-R1 : c'était la cause
     exacte du défaut B-01. Le bloc conteneur est passé au paragraphe. */
  .pf-nav__pro-lien {
    color: var(--pf-marque-hover);
    text-decoration: none;
    border-block-end: 1px solid transparent;
  }

  .pf-nav__pro-lien:hover,
  .pf-nav__pro-lien:focus-visible { border-block-end-color: currentColor; }

  .pf-nav__pro-lien[aria-current] { border-block-end-color: var(--pf-marque-hover); }

  /* CIBLE TACTILE D'UN LIEN QUI S'ENROULE — B-01, BUILD-13.2A-R1.

     BUILD-13.2A rattachait ce pseudo-élément au lien lui-même. Sous 343 px le
     libellé passe sur deux lignes, et le bloc conteneur d'un élément EN LIGNE
     fragmenté ne s'étend que du DÉBUT du premier fragment à la FIN du dernier
     — à 320 px, de x=0 à x=49. La bande de 44 px ne couvrait donc que la
     seconde ligne et le début de la première ; tout le reste retombait sur la
     boîte en ligne, 17 px. Mesuré 17 px au minimum, 45 px au maximum ; le gate
     indépendant a relevé les mêmes chiffres.

     Le pseudo-élément est désormais rattaché au PARAGRAPHE, dont ce lien est
     le seul contenu. La bande couvre les deux lignes sur toute leur largeur,
     et AUCUN pixel du rendu ne bouge : position du texte, position du filet,
     largeur des fragments et hauteur du menu sont identiques avant et après,
     mesure à l'appui, aux six largeurs.

     `min(0px, …)` ET NON `calc(…)` SEUL. Dès que le paragraphe dépasse 44 px
     — trois lignes, ou zoom texte du navigateur — le calcul redevient POSITIF
     et rentre la bande VERS L'INTÉRIEUR, ce qui réintroduit très exactement le
     défaut corrigé ici. Mesuré à 150 % de zoom texte : 49 à 53 px selon la
     colonne avec le calcul seul, 58 px uniformes avec la garde. Celle-ci ne
     change rien entre 320 et 1440 px ; elle empêche le défaut de revenir
     au-dehors. */
  .pf-nav__pro-lien::after {
    content: "";
    position: absolute;
    inset-inline: 0;
    inset-block: min(0px, calc((100% - 44px) / 2));
  }

  /* Repli de la navigation — CONDITIONNÉ à la présence de JavaScript.
     Sans `pf-js`, la navigation reste dépliée : plus haute, jamais perdue. */
  .pf-js .pf-nav { display: none; }
  .pf-js.pf-nav-ouverte .pf-nav { display: flex; }
}

/* ==========================================================================
   ACCUEIL — HERO (5A · E1)
   Fond sombre = `--pf-strate`, seuil canonique de D-033. Aucune valeur neuve.
   ========================================================================== */

.entry-content > .wp-block-group:where(.pf-hero) {
  padding: 0;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
}

/* Retrait vertical ramené de `2xl` à `xl` — phase HOME V2. Le hero mesurait
   705 px, au-delà de la doctrine « hero sombre court, un écran max » (4A · 5A).
   Aucune valeur hors jeton n'est introduite : c'est le cran immédiatement
   inférieur de l'échelle D-034, pas une valeur ad hoc. */
.pf-hero__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding: var(--pf-espace-xl) var(--pf-espace-m);
}

.pf-hero__inner > * { max-width: 33rem; }

/* --- Motif de pression ---------------------------------------------------
   Motif propriétaire de D-033/D-034 : focalisation, profondeur, ondes de
   pression. STATIQUE dans cette passe — aucune animation.

   Le `repeating-radial-gradient` de BUILD-1 a été RETIRÉ : par construction,
   il ne pouvait produire que des anneaux rigoureusement concentriques à
   espacement constant, c'est-à-dire une cible. La géométrie irrégulière vit
   désormais dans un SVG du DOM, `inc/pf-motif.php`, où chaque ellipse est un
   élément adressable.

   `currentColor` porte la couleur : une seule déclaration ici la propage aux
   quatre ellipses et au foyer.

   PRÉPARATION DE LA FINITION FUTURE, NON IMPLÉMENTÉE ICI : `transform-box:
   fill-box` fait porter `transform-origin` par la boîte propre de chaque
   ellipse, et non par celle du SVG. Sans cela, une rotation future tournerait
   toutes les ellipses autour d'un centre commun — donc les remettrait en
   mouvement solidaire, exactement l'effet mécanique que cette passe corrige.
   Toute animation devra être neutralisée sous `prefers-reduced-motion`. */

/* GÉOMÉTRIE INCHANGÉE — seule la POSE est retouchée.
   Le § 2F de la consigne demande de recomparer le dessin aux captures
   historiques avant d'y toucher : ces captures ne sont pas parvenues, donc le
   SVG de `inc/pf-motif.php` n'est pas modifié d'une unité. Ce qui change ici
   est uniquement son cadrage dans le hero, rendu nécessaire par la réduction
   de hauteur : le foyer passe d'environ 79 % à environ 71 % de la largeur, et
   le dessin est légèrement réduit pour rester entier dans un hero plus court.
   Le débordement reste celui de la seule ellipse extérieure. */
.pf-motif-pression {
  position: absolute;
  z-index: 0;
  inset-block-start: 50%;
  inset-inline-end: -1rem;
  width: 34rem;
  height: 34rem;
  translate: 0 -50%;
  overflow: visible;
  pointer-events: none;
  color: var(--pf-marque);
}

.pf-focus-ring,
.pf-focus-halo,
.pf-focus-foyer {
  transform-box: fill-box;
  transform-origin: center;
}

/* --- Pile éditoriale du hero ---------------------------------------------
   Sélecteurs explicites par rôle, jamais `.pf-hero p` : une règle large
   capturerait les titres du composant. C'est exactement le défaut B-4
   diagnostiqué au gate, et il n'est pas reproduit ici. */

.pf-hero .pf-hero__eyebrow {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  line-height: 1.4;
  text-transform: uppercase;
  color: var(--pf-marque);
}

.pf-hero .pf-hero__titre {
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-principale);
  font-size: clamp(2.1rem, 1.4rem + 2.9vw, 3.4rem);
  font-weight: 600;
  line-height: 1.14;
  letter-spacing: -0.018em;
  color: var(--pf-ivoire);
  text-wrap: balance;
}

.pf-hero .pf-hero__definition {
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-ivoire-2);
}

.pf-hero .pf-hero__cadre {
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 2px solid var(--pf-filet-sombre);
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--pf-ivoire-2);
}

/* La signature reste DÉTACHÉE de la pile de titre — exigence 5A · F, qui la
   veut « en pied de hero » et non empilée comme un troisième slogan. Son
   écart passe de `xl` à `l` : assez pour qu'elle ne se lise pas dans la
   suite du CTA, assez peu pour qu'elle n'ait plus l'air posée par accident. */
.pf-hero .pf-hero__signature {
  margin-block: var(--pf-espace-l) 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 0.9375rem;
  font-style: italic;
  line-height: 1.5;
  color: var(--pf-ivoire-2);
}

/* --- Boutons du hero -----------------------------------------------------
   Même poids (0,2,0) que le contrat de bouton, déclaré après : l'emporte
   sans ajouter de spécificité. */

.pf-hero .wp-block-buttons { gap: var(--pf-espace-s); }

.pf-hero .wp-block-button__link {
  padding: 0.7rem var(--pf-espace-l);
  border-radius: var(--pf-rayon-m);
  font-size: 1rem;
  font-weight: 600;
  background-color: var(--pf-marque);
  color: var(--pf-strate);
}

.pf-hero .wp-block-button__link:hover,
.pf-hero .wp-block-button__link:focus-visible {
  background-color: var(--pf-marque-hover);
  color: var(--pf-strate);
}

.pf-hero .pf-hero__cta-secondaire .wp-block-button__link {
  background-color: transparent;
  color: var(--pf-ivoire);
  box-shadow: inset 0 0 0 1px var(--pf-filet-sombre);
}

.pf-hero .pf-hero__cta-secondaire .wp-block-button__link:hover,
.pf-hero .pf-hero__cta-secondaire .wp-block-button__link:focus-visible {
  background-color: var(--pf-strate-2);
  color: var(--pf-ivoire);
}

/* --- Hero sous 782 px ----------------------------------------------------
   Le motif devient discret et volontairement recadré : la lisibilité du H1
   passe avant l'intégralité du dessin. */

@media (max-width: 782px) {
  .pf-hero__inner {
    padding-block: var(--pf-espace-xl);
    padding-inline: var(--pf-espace-s);
  }

  .pf-hero__inner > * { max-width: none; }

  /* Le motif reste secondaire et accepte d'être partiellement hors champ :
     la lisibilité du H1 passe avant l'intégralité du dessin. */
  .pf-motif-pression {
    inset-block-start: auto;
    inset-block-end: -16rem;
    inset-inline-end: -13rem;
    width: 32rem;
    height: 32rem;
    translate: 0 0;
    opacity: 0.55;
  }

  .pf-hero .pf-hero__signature { margin-block-start: var(--pf-espace-l); }
}

/* ==========================================================================
   ACCUEIL — SECTIONS CLAIRES
   ========================================================================== */

/* --- CONTRAT DE BANDES — phase HOME V2 -----------------------------------
   DÉFAUT CORRIGÉ, MESURÉ AVANT ÉCRITURE SUR LA PAGE 18 LE 2026-08-18.
   Aucune section ne portait de filet — `border-top` et `border-bottom` à 0
   sur les sept bandes — et deux bandes papier se suivaient : « État des
   connaissances » puis « Trouver un praticien ». Deux aplats papier contigus
   sans filet ne forment plus deux sections, mais une seule zone longue de
   937 px. C'est la cause mesurable de la perte de rythme signalée.

   L'alternance cible est celle des planches 4B : fond de lecture et papier
   se succèdent, et c'est le PAPIER qui est posé sur le fond — lui seul porte
   un filet haut et un filet bas. Le fond, lui, n'en porte aucun : il est le
   support, pas un objet.

   Séquence obtenue : strate (hero) · fond (douleurs) · papier (méthode) ·
   strate (seuil) · fond (savoirs) · papier (praticien) · fond (fondateur) ·
   strate (pied). Trois immersions sombres exactement — l'entrée, le pivot,
   le socle.

   DETTE ASSUMÉE, ET SIGNALÉE. La section « La méthode » est la seule
   `.pf-section` sans qualificatif dans le contenu de la page 18 ; elle est
   donc désignée par exclusion. Le correctif propre est une classe
   `pf-methode` dans le contenu — écriture Gutenberg qui exige la file
   d'attente du Block Editor, hors du périmètre autorisé ici. Si une section
   sans qualificatif est ajoutée un jour, elle héritera du papier : le défaut
   serait visible immédiatement, jamais silencieux. */

/* Le retrait latéral est porté par le CONTENEUR INTÉRIEUR, pas par la bande.
   MESURÉ APRÈS LA PREMIÈRE PASSE : avec le retrait sur la bande, le conteneur
   de 1200 px se centrait dans 1392 px et commençait à 112,5 px, alors que le
   lockup du header et le titre du hero commencent à 136,5 px. Vingt-quatre
   pixels d'écart, sur toute la hauteur de la page.

   En déplaçant le retrait vers l'intérieur, le conteneur se centre dans 1440
   et son CONTENU tombe exactement sur 136,5 px — la même construction que le
   header, le hero et le pied de page, qui étaient déjà justes. */
.entry-content > .wp-block-group:where(.pf-section, .pf-savoirs) {
  padding: var(--pf-espace-2xl) 0;
}

.entry-content > .wp-block-group.pf-section--papier,
.entry-content > .wp-block-group.pf-section:not(.pf-douleurs, .pf-fondateur) {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

.pf-section__inner {
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

.pf-section .pf-section__titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
}

.pf-section .pf-section__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Deux colonnes texte / image ----------------------------------------- */

.pf-duo {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--pf-espace-xl);
  align-items: center;
}

/* Colonne de texte plus large que la colonne d'image : à parts égales, les
   quatre repères se retrouvaient sur deux colonnes d'environ 180 px, où
   chaque phrase se brisait en cinq lignes. */
@media (min-width: 900px) {
  .pf-duo { grid-template-columns: 1.2fr 0.8fr; }
}

/* --- Les quatre repères du geste (5A · E3) -------------------------------- */

/* Même discipline à filets que les portes. Le filet orange de 2 px qui
   bordait chaque repère est retiré : superposé à une grille à filets, il
   produisait deux systèmes de bordure concurrents sur le même écran. La
   marque reste présente ailleurs — CTA, fil du pied de page, renvois. */

.pf-reperes {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

@media (min-width: 640px) {
  .pf-reperes { grid-template-columns: 1fr 1fr; }
}

.pf-repere {
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-repere .pf-repere__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-repere .pf-repere__texte {
  margin: 0;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Figures -------------------------------------------------------------- */

.pf-figure { margin: 0; }

.pf-figure img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--pf-rayon-l);
}

.pf-figure figcaption {
  margin-block-start: var(--pf-espace-2xs);
  font-size: 0.8125rem;
  line-height: 1.45;
  color: var(--pf-encre-2);
}

/* --- Emplacement réservé du portrait du fondateur -------------------------
   La photo définitive n'existe pas. L'illustration de consultation n'est PAS
   utilisée en substitut : elle ne représente pas Jérémy Jacq.

   Le bloc porte le ratio définitif, de sorte que la vraie photo s'y insère
   plus tard sans reconstruire la mise en page. L'étiquette de construction est
   posée par CSS et n'apparaît QUE sous `body.pf-preprod`, c'est-à-dire tant
   que `blog_public` vaut 0 : elle disparaît d'elle-même à l'ouverture
   publique, sans suppression manuelle. */

.pf-portrait {
  position: relative;
  aspect-ratio: 4 / 5;
  max-width: 13rem;
  border: 1px dashed var(--pf-filet);
  border-radius: var(--pf-rayon-l);
  background-color: var(--pf-papier);
}

.pf-preprod .pf-portrait::after {
  content: "TODO — photo Jérémy définitive";
  position: absolute;
  inset-block-end: var(--pf-espace-xs);
  inset-inline: var(--pf-espace-xs);
  font-size: 0.75rem;
  line-height: 1.35;
  text-align: center;
  color: var(--pf-encre-2);
}

.pf-fondateur .pf-fondateur__texte {
  margin: 0;
  font-size: 1.0625rem;
  line-height: 1.6;
  color: var(--pf-encre);
}

/* --- Hauteur et alignement du fondateur — V2.1 ---------------------------
   MESURÉ AVANT ÉCRITURE : 420 px, soit 80 + 260 + 80. La hauteur était donc
   entièrement dictée par le portrait et par le retrait de section ; le contenu,
   lui, n'occupait que 82 px.

   Le retrait passe à `xl` et le portrait à 11,5 rem : 56 + 230 + 56 = 342 px,
   dans la fourchette demandée. Ni le contenu ni l'emplacement réservé ne sont
   touchés — seule leur enveloppe se resserre.

   Le texte passe d'un centrage vertical à un alignement sur le HAUT du
   portrait : c'est ce que « aligner le bloc texte avec le portrait » décrit, et
   c'est aussi la seule position qui restera juste quand la photo définitive
   remplacera l'emplacement réservé, quel que soit son cadrage. */

.entry-content > .wp-block-group:where(.pf-fondateur) {
  padding-block: var(--pf-espace-xl);
}

.pf-fondateur .pf-duo { align-items: start; }

.pf-fondateur .pf-portrait { max-width: 11.5rem; }

/* --- Photographie définitive du fondateur --------------------------------
   L'emplacement réservé ci-dessus reçoit la photographie. Ni sa largeur ni
   son rapport ne changent : la hauteur de 342 px établie en V2.1 juste
   au-dessus est conservée telle quelle, et la section ne bouge pas.

   MESURÉ AVANT ÉCRITURE, sur la variante 819 × 1024 : le sommet des cheveux
   est à 205 px, soit 20,0 % de la hauteur. La consigne est d'en retirer la
   moitié, pas la totalité.

   LA SOURCE EST DÉJÀ AU RAPPORT 4:5. `object-fit` et `object-position` n'ont
   donc rien à recadrer : le cliché remplit le cadre exactement, et les
   déplacer ne produit aucun effet. Le recadrage ne peut venir que d'un
   agrandissement dans un cadre qui masque le débordement.

   `scale(1.20)` à partir d'une origine située à 70 % de la hauteur retire
   14 % du cadre en haut et 6 % en bas : 0,7 × (1 − 1,20) = −0,14 pour le
   bord supérieur, 0,7 + 1,20 × 0,3 = 1,06 pour le bord inférieur. Le vide
   supérieur passe donc de 20 % à 10 % — exactement la moitié. Le sommet des
   cheveux reste dans le cadre, le bas retiré est du buste et non des
   épaules, et le visage n'est pas déformé puisque l'agrandissement est
   homothétique sur les deux axes.

   `:has(img)` conditionne la bascule à la PRÉSENCE de la photographie :
   retirer le bloc image restitue de lui-même l'emplacement réservé et sa
   bordure tiretée, sans rien changer ici. La bordure passe au transparent
   plutôt que d'être retirée : le modèle de boîte ne bouge pas d'un pixel. */

.pf-portrait:has(img) {
  overflow: hidden;
  border-color: transparent;
}

.pf-portrait > .wp-block-image {
  margin: 0;
}

.pf-portrait img {
  display: block;
  width: 100%;
  height: auto;
  transform: scale(1.20);
  transform-origin: 50% 70%;
}

/* Sur une seule colonne — le `pf-duo` ne se scinde qu'à 900 px — l'emplacement
   réservé était aligné à gauche. Vide, cela ne se voyait pas ; avec la
   photographie, cela se lit comme une erreur de composition.

   `width: 100%` N'EST PAS DÉCORATIF, ET SON ABSENCE A ÉTÉ MESURÉE EN 0.28.17 :
   sur un élément de grille dont la largeur reste `auto`, des marges `auto`
   font basculer la résolution en « largeur au contenu ». Or le contenu est
   une image en `width: 100%`, qui dépend elle-même du cadre : la dépendance
   est circulaire et se résout à zéro. Le cadre s'effondrait alors à 2 px de
   bordures, et la photographie disparaissait sous 900 px. Une largeur
   explicite donne aux marges `auto` une valeur à répartir. `justify-self:
   center` a été essayé et produit exactement le même effondrement. */
@media (max-width: 899px) {
  .pf-fondateur .pf-portrait:has(img) { width: 100%; margin-inline: auto; }
}

/* ==========================================================================
   ACCUEIL — E2 « VOS DOULEURS » (5A · E2)

   NOMBRE DE CARTES VOLONTAIREMENT NON FIGÉ DANS LE CSS.
   `E2 ARCHITECTURE = OPEN BEFORE PUBLICATION` : le nombre de portes et leur
   taxonomie restent ouverts. D-037 et la vague 1 ont introduit depuis la
   cervicalgie et la névralgie cervico-brachiale, qui n'ont aujourd'hui aucune
   porte parmi les six de 5A.

   La grille emploie donc `auto-fit` avec une largeur minimale, et non un
   nombre de colonnes écrit en dur : ajouter, retirer ou réordonner une carte
   ne demandera aucune retouche de mise en page. C'est la raison de ce choix,
   et la seule.
   ========================================================================== */

/* --- Tête de section : titre à gauche, renvoi à droite ---------------------
   Reprise du `section-head` des planches 4B. Le renvoi cesse d'être un
   bouton plein posé sous la grille : il redevient un lien, calé sur la ligne
   de base du chapô. Un seul bouton plein subsiste dans tout le corps de page,
   celui de « Trouver un praticien » — l'unicité fait sa force.

   Le placement est fait en grille, sans toucher au contenu : l'ordre du DOM
   reste titre, chapô, portes, bouton. */

.pf-douleurs .pf-section__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: var(--pf-espace-l);
  align-items: end;
}

.pf-douleurs .pf-section__titre { grid-column: 1; grid-row: 1; }
.pf-douleurs .pf-section__chapo { grid-column: 1; grid-row: 2; }
/* PATIENT CARDS V1 — la carte transversale prend la ligne 3, la grille passe
   en ligne 4. Ce placement est EXPLICITE et il doit l'être : `.pf-section__inner`
   est ici une grille dont le titre, le chapô, la grille de portes et le bouton
   sont tous placés à la main. Un enfant supplémentaire sans placement serait
   AUTO-placé après les lignes déjà occupées — donc SOUS la grille, à l'inverse
   de la fonction de point de départ, et en collision avec le bouton dans le
   bloc mobile, où celui-ci occupe la ligne 4. */
.pf-douleurs .pf-porte--transversale { grid-column: 1 / -1; grid-row: 3; }
.pf-douleurs .pf-portes        { grid-column: 1 / -1; grid-row: 4; }

/* --- Rangée incomplète centrée, DESKTOP UNIQUEMENT — PATIENT CARDS V1 -------

   La grille de trois colonnes laisse une cellule vide dès que le nombre de
   portes n'est pas un multiple de trois. Depuis le retrait de la carte
   transversale, elles sont cinq : trois puis deux, alignées à gauche, avec un
   vide à droite.

   GRILLE VIRTUELLE À SIX COLONNES. Chaque porte occupe deux colonnes, ce qui
   redonne exactement trois portes par rangée et la MÊME largeur qu'avant —
   2/6 = 1/3. La demi-colonne ainsi gagnée sert d'unité de décalage : une
   rangée finale de deux portes démarre en colonne 2 et se termine en colonne 5,
   donc avec un sixième de vide de chaque côté.

   `:nth-last-child(2):nth-child(3n + 1)` — l'avant-dernière porte, ET seulement
   si elle ouvre une rangée. Avec 5 portes, c'est la 4e : 4 = 3n+1. Avec 6, la
   5e ne satisfait pas 3n+1 : LA RÈGLE NE S'APPLIQUE PLUS D'ELLE-MÊME et la
   grille redevient un 3 × 2 régulier. Aucune classe éditoriale n'est requise,
   rien n'est à retirer le jour où une porte est ajoutée — même doctrine que
   `:has(a)`.

   LE FILET GAUCHE CHANGE DE PORTEUR, et ce n'est pas cosmétique. Il appartient
   au conteneur, donc il court sur TOUTE la hauteur : sur une rangée centrée il
   resterait seul à l'extrême gauche, à un sixième des portes, avec rien en face
   à droite — exactement l'asymétrie que ce correctif doit supprimer. Il est
   donc porté par les portes qui OUVRENT une rangée, `:nth-child(3n + 1)`, qui
   sont en colonne 1 dans le cas régulier et en colonne 2 dans le cas centré.
   À six portes, le rendu est identique au pixel près à celui d'avant.

   Portée : `.pf-douleurs .pf-portes` et ses enfants directs, au-dessus du
   breakpoint desktop seul. Sous 1101 px, rien de ce bloc ne s'applique. */

@media (min-width: 1101px) {

  .pf-douleurs .pf-portes {
    grid-template-columns: repeat(6, minmax(0, 1fr));
    border-inline-start: 0;
  }

  .pf-douleurs .pf-portes > * { grid-column: span 2; }

  .pf-douleurs .pf-portes > :nth-child(3n + 1) {
    border-inline-start: 1px solid var(--pf-filet);
  }

  /* LES DEUX BORNES SONT ÉCRITES, et c'est le correctif. La première version
     posait `grid-column-start: 2` seul : cette forme écrase le
     `grid-column-start: span 2` hérité de la règle générique et laisse
     `grid-column-end` à `auto`, c'est-à-dire UNE seule colonne. Mesuré sur le
     DOM : 206,67 px au lieu de 413,33 px, et une rangée de deux cartes de
     largeurs inégales. Écrire `2 / span 2` fixe start ET end. */
  .pf-douleurs .pf-portes > :nth-last-child(2):nth-child(3n + 1) {
    grid-column: 2 / span 2;
  }

  .pf-douleurs .pf-portes > :last-child:nth-child(3n + 2) {
    grid-column: 4 / span 2;
  }
}

.pf-douleurs .wp-block-buttons {
  grid-column: 2;
  grid-row: 1 / 3;
  align-self: end;
  margin-block: 0 var(--pf-espace-l);
}

/* Les renvois de section sont des LIENS, pas des boutons. Un seul bouton plein
   subsiste dans le corps de page — « Trouver un praticien ». Mesuré après la
   première passe : il en restait deux, celui des douleurs ayant été traité mais
   pas celui de l'état des connaissances. Deux boutons pleins de même couleur
   dans une page de compréhension mettent sur le même plan « explorer un sujet »
   et « prendre rendez-vous » ; ce n'est pas le parcours voulu par 5A, qui
   explique d'abord et ne convertit qu'en section 6. */
.pf-douleurs .wp-block-button__link,
.pf-savoirs .wp-block-button__link {
  /* LA HAUTEUR TACTILE DE 44 px EST EXPRESSÉMENT ANNULÉE ICI, et c'est le
     point le plus délicat de BUILD-5.1. Ces deux objets ne sont pas des
     boutons : HOME V2.2 les a retirés du registre bouton — « les renvois de
     section sont des LIENS » —, et leur imposer 44 px ajouterait 23 px de vide
     sous chacun, c'est-à-dire une modification visible d'une composition
     gelée. Ils restent donc à 21 px, et ce reliquat est signalé au rapport
     plutôt que corrigé en silence. */
  display: inline-block;
  min-height: 0;
  padding: 0 0 var(--pf-espace-3xs);
  border-radius: 0;
  border-block-end: 1px solid var(--pf-marque);
  background-color: transparent;
  color: var(--pf-accent);
  font-size: 0.9375rem;
}

.pf-douleurs .wp-block-button__link { white-space: nowrap; }

.pf-douleurs .wp-block-button__link:hover,
.pf-douleurs .wp-block-button__link:focus-visible,
.pf-savoirs .wp-block-button__link:hover,
.pf-savoirs .wp-block-button__link:focus-visible {
  background-color: transparent;
  color: var(--pf-accent-hover);
}

/* --- Les six portes : grille à filets, 3 × 2 ------------------------------
   MESURÉ AVANT ÉCRITURE : `auto-fit` avec un minimum de 17 rem produisait
   QUATRE colonnes de 282 px à 1200 px de large, donc une rangée de quatre
   puis une rangée de deux. Six portes rendues en quinconce, avec arrondis de
   8 px et gouttières de 24 px : c'est la lecture « cartes génériques » que le
   propriétaire a relevée, et elle est structurelle, pas subjective.

   La grille devient explicite — 3 × 2 —, les gouttières disparaissent et les
   filets sont MUTUALISÉS : la grille porte le filet haut et le filet gauche,
   chaque porte porte son filet droit et son filet bas. Un seul trait entre
   deux portes, jamais deux traits accolés. C'est la « grille à filets,
   discipline A » prescrite par le rapport 4B § 5.

   Aucune ombre, aucun arrondi, aucun soulèvement au survol : le survol change
   le fond, rien d'autre. */

.pf-portes {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-porte {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-radius: 0;
  background-color: transparent;
  transition: background-color 180ms ease;
}

/* DOCTRINE D'INACTIVITÉ, REPRISE TELLE QUELLE DU HUB — BUILD-14A.
   Le hub `/vos-douleurs/` la tient depuis BUILD-4 : une carte qui a une
   destination porte un filet de marque et réagit au survol ; une carte qui n'en
   a pas ne porte rien et ne réagit pas. L'accueil ne l'appliquait pas — ses six
   portes s'éclairaient TOUTES au survol, y compris les quatre qui ne menaient
   nulle part, et rien ne distinguait au repos celles dont la page existe déjà.

   `:has(a)` plutôt qu'une classe `--inactive` posée dans le contenu : la règle
   suit alors l'état RÉEL de la carte. Le jour où une page manquante est créée et
   son titre relié, la porte s'active d'elle-même — personne n'a de classe à
   retirer, donc personne ne peut oublier de la retirer. Là où `:has()` n'existe
   pas, ces deux règles sont ignorées : on retrouve exactement l'état d'avant
   cette passe, jamais pire.

   Le filet est peint en OMBRE INTERNE, pas en bordure, et c'est mesuré : une
   bordure de 3 px décale le titre de la carte active de 3 px vers le bas par
   rapport à ses voisines de rangée, à 1280 px. L'ombre peint le même filet sans
   occuper la moindre place. */
.pf-porte:has(a) { box-shadow: inset 0 3px 0 var(--pf-marque); }

.pf-porte:has(a):hover { background-color: var(--pf-papier); }

/* Même reliquat que celui corrigé sur le hub en BUILD-4, ici en BUILD-4.1.
   WordPress pose `margin-block-start: 24px` sur tout enfant de groupe qui n'est
   pas le premier — `:where(.is-layout-flow) > :not(:first-child)`, à
   spécificité nulle. Dans une GRILLE, l'écart entre cellules est porté par la
   grille elle-même, et ce reliquat décalait vers le bas toutes les portes sauf
   la première. Mesuré à 1440 px avant correction : sommets de la première
   rangée à 1042, 1066 et 1066 px.

   Correction de rendu, et rien d'autre : ni contenu, ni ordre, ni couleur, ni
   taille, ni filet, ni structure de grille ne sont touchés. */
.pf-portes > * { margin-block-start: 0; }

.pf-porte .pf-porte__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* CIBLE TACTILE DU TITRE ACTIF — même recette que le hub, et pour les mêmes
   raisons. Le titre est un lien de niveau texte : sa boîte ne fait que la
   hauteur de sa ligne, 22 px ici. Le retrait vertical la porte à 44 ; la marge
   négative de même valeur la retire à la ligne. La cible double, la composition
   ne bouge pas d'un pixel.

   `position: relative`, SANS le moindre décalage, n'est pas décorative : sans
   elle, la marge négative basse remonte `.pf-porte__texte`, qui se peint
   PAR-DESSUS le retrait du lien. Mesuré dans cet état : 21 px atteignables, et
   TROIS TROUS à 320 px. Avec elle : 45 px pleins, aucun trou, aux trois
   largeurs testées. */
.pf-porte .pf-porte__titre a {
  color: var(--pf-accent);
  text-decoration: none;
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  position: relative;
}

.pf-porte .pf-porte__titre a:hover { color: var(--pf-accent-hover); }

.pf-porte .pf-porte__titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-porte .pf-porte__texte {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* Renvoi secondaire de la porte « Tendinites » (cadrage D-023). Sans
   destination : rendu comme un libellé, jamais comme un lien actif.

   ET ENFIN COLORÉ COMME TEL — BUILD-14A. Il portait `--pf-accent`, la couleur
   des liens du site : la doctrine était écrite juste au-dessus, et la règle
   disait le contraire. Il prend l'encre secondaire, celle du corps de la carte,
   comme le hub le fait déjà pour ses sous-portes sans destination
   (`span.pf-hub-sous`). Le filet pointillé et la position en pied de carte
   suffisent à le détacher. */
/* Filet POINTILLÉ, et c'est délibéré : un filet plein serait indistinguable
   de ceux de la grille, et le renvoi se lirait comme une septième porte. */
.pf-porte .pf-porte__renvoi {
  margin-block: auto 0;
  padding-block-start: var(--pf-espace-xs);
  border-block-start: 1px dotted var(--pf-filet);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* Carte transversale — traitement visuel distinct prescrit par 5A : ce n'est
   pas une pathologie de plus, c'est le pilier qui les traverse (D-027). */
.pf-porte--transversale {
  background-color: var(--pf-strate);
  border-inline-end-color: var(--pf-strate);
  border-block-end-color: var(--pf-strate);
}

.pf-porte--transversale:has(a):hover { background-color: var(--pf-strate-2); }

.pf-porte--transversale .pf-porte__titre { color: var(--pf-ivoire); }
.pf-porte--transversale .pf-porte__texte { color: var(--pf-ivoire-2); }

/* Titre ACTIF de la carte transversale — PATIENT CARDS V1.

   `--pf-accent` est calibré « sur clair ». Mesuré sur `--pf-strate`, il tombe à
   2,59:1 — sous le seuil AA. Tant que la carte n'avait pas de destination, la
   règle générique `.pf-porte .pf-porte__titre a` ne s'appliquait à rien et le
   défaut restait théorique ; il devient RÉEL le jour où le titre porte un lien.

   L'ivoire du corps de carte donne 14,67:1. `--pf-marque` — la couleur que le
   jeton déclare lui-même « sur strate » — donne 5,01:1, au survol comme au
   focus, où elle dépasse aussi le seuil de 3:1 des éléments non textuels.

   Portée strictement limitée au titre LIÉ de cette seule variante : la carte
   inactive, les cinq portes claires et le composant générique ne sont pas
   touchés. Aucun jeton, aucun style global. */
.pf-porte--transversale .pf-porte__titre a { color: var(--pf-ivoire); }
.pf-porte--transversale .pf-porte__titre a:hover { color: var(--pf-marque); }
.pf-porte--transversale .pf-porte__titre a:focus-visible { outline-color: var(--pf-marque); }

/* ==========================================================================
   ACCUEIL — E4 SEUIL « SOUS LA SURFACE, LA MATIÈRE » (5A · E4)

   VERSION TYPOGRAPHIQUE SEULE, et c'est un choix instruit, pas un manque.
   5A prévoit une révélation A3-E3b → A3-E3a ; ces masters n'existent pas.
   Aucune image de remplacement n'est produite, et la « légende de statut »
   de 5A n'est pas rendue : elle qualifie une représentation évocatrice, et
   il n'y en a aucune ici à qualifier. Écrire la légende sans son objet
   serait annoncer une image absente.
   ========================================================================== */

/* --- Stratification du seuil — phase HOME V2 ------------------------------
   Le seuil était un rectangle sombre uni. 5A § E4 et § G en font pourtant le
   SEUL passage vers la profondeur du parcours, et 4A § E lui donne son
   langage : « coupe stratigraphique ».

   AUCUNE COULEUR NOUVELLE. Les nuances viennent des jetons existants et de
   l'opacité seule — `--pf-strate-2` pour les bancs, `--pf-ivoire` très
   dilué pour le grain. Les valeurs `#2E271F` et `#342C23` des planches
   cliniques ne sont PAS reprises : elles appartiennent aux trames d'identité
   des pages cliniques, et les confondre effacerait la distinction.

   CE QUE CELA ÉVOQUE, ET CE QUE CELA NE PRÉTEND PAS. Des bancs horizontaux
   de densité irrégulière — matière, épaisseur, passage sous la surface. Ni
   anatomie, ni histologie, ni mécanisme démontré. C'est exactement pourquoi
   la légende de statut de 5A § E4 accompagne désormais la section : elle
   qualifie une représentation qui, jusqu'ici, n'existait pas.

   Contraste préservé : l'ivoire sur `--pf-strate-2` reste au-dessus de 15:1,
   donc AAA — les bancs ne dégradent pas la lecture du titre ni du texte. */

.entry-content > .wp-block-group:where(.pf-seuil) {
  /* TROIS VOILES NOMMÉS — phase BUILD-4.2.
     Ce ne sont pas des couleurs mais des PROPORTIONS d'ivoire sur la strate,
     substituées dans les deux dégradés ci-dessous. Les nommer permet de les
     remonter en mobile sans dupliquer une seule coordonnée de géométrie : ni
     hauteur de banc, ni transition, ni nombre de bancs ne changent d'un
     format à l'autre. */
  --pf-seuil-voile-faible: 4%;
  --pf-seuil-voile-moyen: 7%;
  --pf-seuil-voile-fort: 10%;
  --pf-seuil-nappe: 7%;
  --pf-seuil-angle: 177deg;

  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding: var(--pf-espace-xl) 0;
  background-color: var(--pf-strate);
}

/* DÉCOR REPRIS EN V2.1 — le rendu précédent lisait « scanlines ».
   DIAGNOSTIC : le grain était un `repeating-linear-gradient` posant un filet
   tous les 17 px sur toute la hauteur. Une répétition à pas constant ne produit
   pas de la matière, elle produit du papier réglé. Le motif répété est donc
   SUPPRIMÉ, pas atténué : aucun réglage d'opacité n'aurait corrigé sa
   régularité.

   CE QUI LE REMPLACE : cinq bancs larges, de hauteurs inégales — 9, 7, 16, 8 et
   8 % de la section —, séparés par des transitions elles aussi inégales, de 3 à
   5 %. Les arêtes ne sont plus franches : chaque banc entre et sort en fondu,
   ce qui supprime l'effet de trait.

   DENSITÉS NON UNIFORMES — ÉCHELLE REVUE EN BUILD-4.2. La V2.1 employait trois
   bancs en `--pf-strate-2` et deux mélanges d'ivoire à 6 et 4 %. Mesuré depuis :
   `--pf-strate-2` équivaut à environ 4,3 % d'ivoire sur strate, c'est-à-dire au
   mélange à 4 % — deux des trois traitements étaient donc le MÊME. Le seuil
   n'avait pas cinq strates perceptibles, il en avait trois, dont deux
   confondues, et c'est la vraie raison pour laquelle il se lisait fondu.

   Les trois voiles sont désormais nommés et réellement séparés — 4, 7 et 10 %
   en desktop —, et ils se succèdent sans progression lisible : moyen, fort,
   faible, moyen, fort. Le banc le plus large est le plus FAIBLE, ce qui empêche
   la lecture « ça s'assombrit vers le bas ». Aucune couleur nouvelle : ce sont
   toujours les mêmes deux jetons et un rapport entre eux.

   Les bornes sont écrites en `--pf-strate` plutôt qu'en `transparent` :
   interpoler vers `transparent` peut produire un liséré sombre au fondu, là où
   interpoler vers la couleur de fond réelle ne le peut pas. Même résultat
   visuel, l'artefact en moins. */
.pf-seuil::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: linear-gradient(
    to bottom,
    var(--pf-strate) 0 4%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-voile-moyen), var(--pf-strate)) 7% 16%,
    var(--pf-strate) 20% 22%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-voile-fort), var(--pf-strate)) 27% 34%,
    var(--pf-strate) 39% 41%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-voile-faible), var(--pf-strate)) 45% 61%,
    var(--pf-strate) 66% 69%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-voile-moyen), var(--pf-strate)) 73% 81%,
    var(--pf-strate) 86% 88%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-voile-fort), var(--pf-strate)) 92% 100%
  );
}

/* RUPTURE DOUCE — une seule nappe très claire, légèrement inclinée, qui
   traverse les bancs horizontaux. C'est elle qui empêche la lecture « lignes
   parallèles » : trois degrés suffisent à casser l'horizontalité parfaite sans
   qu'aucune diagonale ne devienne lisible en tant que telle.

   Une seule nappe, non répétée — c'est tout le point : la moindre répétition
   ramènerait le défaut corrigé juste au-dessus. */
.pf-seuil::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: linear-gradient(
    var(--pf-seuil-angle),
    transparent 0 30%,
    color-mix(in srgb, var(--pf-ivoire) var(--pf-seuil-nappe), transparent) 45% 58%,
    transparent 73% 100%
  );
}

/* --- MOBILE — pourquoi les mêmes valeurs ne suffisent pas -----------------
   Deux causes, mesurées le 2026-08-18, et une seule est une question
   d'intensité.

   1. LA NAPPE NE CROISE PLUS RIEN. Son décalage vertical vaut la largeur
      multipliée par la tangente de son inclinaison : à 177 degrés, 75 px à
      1440 px de large, mais seulement 20 px à 390. Le second plan du décor ne
      traverse donc plus les bancs en mobile — il devient un banc de plus, et
      c'est exactement ce que la V2.1 avait corrigé sur desktop. L'angle passe
      à 172 degrés, ce qui rétablit environ 55 px de traversée à 390 px, sans
      qu'aucune diagonale ne devienne lisible en tant que telle.

   2. LES ÉCARTS DE VOILE SONT TROP FINS pour un écran de poche, plus petit,
      plus dense et souvent regardé en pleine lumière. Ils sont remontés d'à
      peu près la moitié — le voile le plus marqué reste à 16 % d'ivoire, très
      loin d'une bande franche.

   LA GÉOMÉTRIE NE BOUGE PAS. Les bancs mesurent les mêmes 15 à 59 px et les
   transitions les mêmes 11 à 19 px qu'en desktop : la hauteur du seuil est
   quasi identique d'un format à l'autre — 366 px contre 372 —, et ce n'est
   donc jamais la géométrie qui manquait. */
@media (max-width: 782px) {
  .entry-content > .wp-block-group:where(.pf-seuil) {
    --pf-seuil-voile-faible: 6%;
    --pf-seuil-voile-moyen: 11%;
    --pf-seuil-voile-fort: 16%;
    --pf-seuil-nappe: 9%;
    --pf-seuil-angle: 172deg;
  }
}

/* Légende de statut — texte réel, produit par `inc/pf-accueil.php`.
   Wording de 5A § E4, non modifié. */
.pf-seuil .pf-seuil__statut {
  max-width: 46ch;
  margin-block: var(--pf-espace-m) 0;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-ivoire-2);
}

.pf-seuil .pf-seuil__titre {
  max-width: 30rem;
  margin-block: 0 var(--pf-espace-m);
  font-size: clamp(1.7rem, 1.3rem + 1.8vw, 2.6rem);
  font-weight: 600;
  line-height: 1.16;
  letter-spacing: -0.015em;
  color: var(--pf-ivoire);
}

.pf-seuil .pf-seuil__texte {
  max-width: 34rem;
  margin: 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.125rem;
  line-height: 1.65;
  color: var(--pf-ivoire-2);
}

/* ==========================================================================
   ACCUEIL — E5 TEASER « RECHERCHE & CONNAISSANCES » (5A · E5)

   AVEC MINI-CAROTTE DEPUIS HOME V2 — ce commentaire disait l'inverse ; il est
   rectifié, pas supprimé, parce que sa raison reste vraie : 5A ne fixe le
   libellé patient que de la STRATE 4, et les cinq statuts de D-020 sont des
   catégories analytiques internes qu'on ne peut pas afficher comme libellés
   patients sans créer de l'éditorial santé non validé.

   L'obstacle n'a donc pas été levé : il a été CONTOURNÉ PAR LE HAUT. La
   carotte rend les cinq strates et NE NOMME QUE LA QUATRIÈME. La structure
   est portée par le graphique, le raisonnement par le texte adjacent, et
   aucun libellé patient n'est inventé pour les quatre autres niveaux.

   La seconde colonne annoncée ici est celle qui est désormais occupée ; ni le
   texte ni le CTA n'ont été touchés, comme prévu.

   La ligne d'état datée n'est PAS ici : le micro-arbitrage 5A.3 l'a déplacée
   vers la destination Recherche & connaissances. La home porte la logique
   épistémique, la destination porte l'état daté.
   ========================================================================== */

/* Passe en FOND DE LECTURE : la bande papier suivante — « Trouver un
   praticien » — se confondait avec elle. Le retrait vertical est porté par le
   contrat de bandes commun, plus haut. */
.entry-content > .wp-block-group:where(.pf-savoirs) {
  background-color: transparent;
}

/* Deux colonnes : le raisonnement à gauche, l'objet épistémique à droite.
   La seconde colonne était annoncée comme prête depuis BUILD-1 ; elle est
   désormais occupée. */
.pf-savoirs__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--pf-espace-xl);
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  align-items: start;
}

@media (min-width: 900px) {
  .pf-savoirs__inner { grid-template-columns: minmax(0, 1fr) 22rem; }
}

.pf-savoirs .pf-savoirs__titre {
  max-width: 34rem;
  margin-block: 0 var(--pf-espace-m);
  font-size: clamp(1.5rem, 1.25rem + 1.1vw, 2rem);
  font-weight: 600;
  line-height: 1.24;
  color: var(--pf-encre);
}

.pf-savoirs .pf-savoirs__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   PIED DE PAGE (5A · E7)
   ========================================================================== */

/* Filet supérieur de marque — le SEUL filet orange du site, réservé au socle.
   C'est la fermeture des planches 4B ; sans elle, le pied de page se lit comme
   une septième section sombre de plus, pas comme la fin de la page. */
.pf-footer {
  padding-block: var(--pf-espace-xl);
  border-block-start: 2px solid var(--pf-marque);
  background-color: var(--pf-strate);
  color: var(--pf-ivoire-2);
}

.pf-footer__inner {
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

.pf-footer__pro {
  padding-block-end: var(--pf-espace-l);
  border-block-end: 1px solid var(--pf-filet-sombre);
}

.pf-footer__pro-texte {
  max-width: 34rem;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

/* Le lien est désormais EN LIGNE dans sa phrase (version courte V3) : il suit
   donc la taille du paragraphe, au lieu de la sienne propre d'ancien bloc.

   CIBLE TACTILE D'UN LIEN AU MILIEU D'UNE PHRASE — B-02, BUILD-13.2A-R1.

   21 px atteignables, mesurés. Le procédé du chrome — pseudo-élément absolu
   de hauteur calculée — NE CONVIENT PAS ici : ce lien s'enroule pour de bon,
   entre 280 et 300 px, entre 324 et 356, et entre 476 et 520. Un pseudo
   rattaché à un élément en ligne fragmenté ne couvre pas ses lignes, c'est le
   défaut B-01 ; mesuré à 480 px avec ce procédé : 20 px, soit MOINS qu'avant
   correction. Le gate n'a pas vu la fragmentation parce que 320 et 390 px
   tombent tous deux hors des plages où elle se produit.

   Retenu : le retrait vertical, qui s'applique à CHAQUE fragment. C'est la
   doctrine de `.pf-footer__lien`, plus bas, simplifiée d'un cran : sur un
   élément resté EN LIGNE, un retrait vertical n'augmente pas la hauteur de
   ligne, si bien que la marge négative d'annulation n'a plus d'objet. Rien ne
   bouge, et rien ne pouvait bouger : ce lien n'a ni fond, ni bordure, ni
   soulignement à déplacer.

   12 px, ET NON une valeur calculée : la boîte vaut 20 px, invariable de 320
   à 1440 px puisque la taille de police ne change pas ici. 20 + 2 × 12 = 44.

   BORNE HONNÊTE : un glyphe d'une ligne voisine l'emporte sur le retrait
   transparent — c'est le comportement souhaitable, le lien ne capte pas les
   appuis destinés au texte qui l'entoure. La cible vaut donc 44 px partout
   dans la plage demandée, et retombe à 35 px à 300 px de large, hors plage et
   hors format d'appareil réel. */
.pf-footer__pro-lien {
  padding-block: 12px;
  font-size: inherit;
  font-weight: 600;
  color: var(--pf-marque);
  text-decoration: none;
}

.pf-footer__nav { padding-block: var(--pf-espace-l); }

.pf-footer__liste,
.pf-footer__utilitaires {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pf-espace-s) var(--pf-espace-l);
  margin: 0;
  padding: 0;
  list-style: none;
}

.pf-footer__element { margin: 0; }

/* CIBLE TACTILE — BUILD-6.5, ET SA BORNE RÉELLE.

   Trois de ces entrées sont devenues des liens de navigation en BUILD-6.4 ;
   leur boîte mesurait 19 px de haut, celle d'un texte en ligne. La technique
   est celle déjà validée pour les sous-portes du hub : retrait vertical, et
   marge négative de même valeur. Une marge verticale n'agrandit pas la ligne
   d'un élément EN LIGNE, mais celle d'un `inline-block` si — c'est ce qui
   permet l'annulation exacte. La zone interactive double, le texte ne bouge
   pas, la hauteur du pied ne change pas.

   POURQUOI 9 px ET NON 12,5 px, c'est-à-dire pourquoi 39 px et non 44.
   Mesuré à 320 comme à 390 px : les cinq entrées passent chacune sur SA
   rangée, et le pas vertical entre deux rangées vaut 40 à 41 px. Une cible de
   44 px centrée sur une ligne de 21 px déborde de 11,5 px de chaque côté :
   les zones de deux rangées voisines se RECOUVRIRAIENT, et un appui dans cette
   bande atteindrait la mauvaise entrée. La consigne subordonne explicitement
   l'agrandissement à l'absence de collision.

   La borne a été trouvée par la mesure, pas par le calcul : à 10 px, les
   cibles atteignaient 41 px et DEUX bornes sur quatre se recouvraient déjà
   d'un pixel. 9 px est le maximum réel — 39 px de cible, 1 à 2 px entre deux
   zones, aucun recouvrement.

   Atteindre 44 px demanderait de porter l'écart de rangée de 12 à 16 px, ce
   qui ajouterait environ 16 px à la hauteur du pied sur ces largeurs. C'est un
   changement d'espacement apparent, que cette passe s'interdit. L'écart
   restant est signalé, pas masqué. */
.pf-footer__lien {
  display: inline-block;
  padding-block: 9px;
  margin-block: -9px;
  font-size: 0.9375rem;
  line-height: 1.4;
  color: var(--pf-ivoire-2);
  text-decoration: none;
}

.pf-footer__lien--utilitaire { font-size: 0.8125rem; }

/* CONTRASTE DU CONTOUR DE FOCUS SUR FOND SOMBRE — BUILD-6.4.

   Le contour global d'accessibilité vaut `--pf-accent`. Mesuré sur les valeurs
   réelles : 2,59:1 contre `--pf-strate`, donc SOUS le seuil de 3:1 applicable
   aux éléments non textuels. Tant que ces entrées n'étaient pas focalisables la
   question ne se posait pas ; BUILD-6.4 les rend focalisables, donc elle se
   pose.

   `--pf-ivoire` donne 14,67:1 sur ce même fond, et c'est la valeur que le site
   emploie DÉJÀ pour ce cas exact — voir `.pf-vigilance--urgence a:focus-visible`.
   Aucune couleur n'est introduite, aucune convention n'est inventée.

   SEUL L'ÉTAT DE FOCUS EST TOUCHÉ : l'apparence au repos et au survol est
   inchangée. `.pf-footer__pro-lien` était couvert par anticipation, faute de
   destination ; BUILD-13.2A lui en a donné une, il est donc focalisable pour
   de bon et la règle joue désormais réellement. CORRECTION DE COMMENTAIRE
   SEULE — BUILD-13.2A-R1, aucune déclaration touchée. */
.pf-footer__lien:focus-visible,
.pf-footer__pro-lien:focus-visible { outline-color: var(--pf-ivoire); }

.pf-footer__bas {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--pf-espace-s) var(--pf-espace-l);
  padding-block-start: var(--pf-espace-l);
  border-block-start: 1px solid var(--pf-filet-sombre);
}

.pf-footer__signature {
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.4;
}

.pf-footer__utilitaires { gap: var(--pf-espace-s) var(--pf-espace-m); }

@media (max-width: 782px) {
  .pf-footer__inner { padding-inline: var(--pf-espace-s); }

  .pf-footer__liste { flex-direction: column; gap: var(--pf-espace-xs); }

  .pf-footer__bas { flex-direction: column; }
}

/* ==========================================================================
   ACCUEIL — MINI-CAROTTE ÉPISTÉMIQUE (5A · E5 · garde-fous 5C · P)

   CE N'EST PAS UN OBJET NOUVEAU : 5A § E5 la prévoit explicitement comme
   « rappel visuel » de la section, et 5C § P en fixe les règles. BUILD-1 ne
   l'avait pas construite — le commentaire de la section en donnait la raison :
   les libellés patients des cinq niveaux ne sont pas validés.

   CETTE VERSION LÈVE L'OBSTACLE SANS LE CONTOURNER : les cinq strates sont
   rendues, mais AUCUNE n'est nommée, sauf la quatrième — la seule dont 5A
   fixe le libellé. Le graphique porte la structure, le texte adjacent porte
   le raisonnement. Aucun éditorial santé n'est inventé.

   GARDE-FOU CENTRAL DE 5C § P, littéral : « cinq strates aux trames DISTINCTES
   (pleine, hachurée, pointillée — jamais un dégradé continu de densité) ».
   D'où le choix de trames et non d'opacités échelonnées : un dégradé
   suggérerait une accumulation mécanique 1 + 2 + 3 vers la preuve, ce que le
   garde-fou D-033 interdit. Les cinq traitements sont qualitativement
   différents, et leur ordre visuel ne dessine aucune montée.

   Frontière : double filet avant la quatrième strate — « 1+2+3 n'additionnent
   jamais un 4 ». Quatrième strate : cadre vide en pointillé. Cinquième : zone
   ouverte, bord inférieur non fermé — l'inconnu n'est pas une strate pleine.
   ========================================================================== */

.pf-carotte { margin: 0; }

.pf-carotte__figure {
  display: block;
  width: 100%;
  height: auto;
  color: var(--pf-encre);
}

/* Légende rapprochée de l'objet — V2.1. Seize pixels la faisaient flotter entre
   la carotte et le bas de la section ; huit la rattachent au dessin. */
.pf-carotte__legende {
  display: flex;
  gap: var(--pf-espace-2xs);
  align-items: flex-start;
  margin-block-start: var(--pf-espace-2xs);
}

/* Le témoin reprend EXACTEMENT le trait de la quatrième strate : c'est lui qui
   rattache la phrase au cadre vide, sans avoir à numéroter les niveaux — une
   numérotation 1 → 5 réintroduirait justement l'idée de progression que le
   garde-fou interdit. */
.pf-carotte__temoin {
  flex: 0 0 auto;
  width: 1.05rem;
  height: 1.05rem;
  margin-block-start: 0.2rem;
  border: 1px dashed var(--pf-encre);
}

.pf-carotte__texte {
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* --- Intensité des trames — V2.1 -----------------------------------------
   DEMANDE : contraste légèrement supérieur, lisibilité à distance normale,
   SANS transformer les trames en dégradé d'intensité.

   Les six valeurs ci-dessous montent d'environ un quart chacune. Elles montent
   ENSEMBLE : l'écart relatif entre les cinq traitements est conservé, donc
   aucun ordre d'intensité n'apparaît là où il n'y en avait pas. Ce qui change
   est la visibilité de l'objet, pas sa grammaire.

   Aucune couleur n'est introduite : seules des opacités sont ajustées sur
   `--pf-encre`, déjà portée par le SVG.

   SOURCE UNIQUE DEPUIS HOME V2.2. La dette signalée en V2.1 est résorbée : le
   SVG de `inc/pf-accueil.php` ne porte PLUS aucun attribut `fill-opacity` ni
   `stroke-opacity`. Les six valeurs ci-dessous sont désormais les seules à
   exister, et ce qui est lu ici est ce qui est affiché.

   Partage : la géométrie reste dans le SVG — positions, dimensions, épaisseurs
   de trait, pointillés, trames, masque — et la présentation vit ici. Les valeurs
   sont INCHANGÉES par rapport à V2.1 : le rendu est identique au pixel près, et
   c'était la condition de l'opération. */

/* Strate 1 — aplat. */
.pf-carotte__figure > rect:nth-of-type(1) { fill-opacity: 0.19; }

/* Strate 4 — cadre vide en pointillé. */
.pf-carotte__figure > rect:nth-of-type(4) { stroke-opacity: 0.72; }

/* Frontière de la preuve spécifique — les deux filets. */
.pf-carotte__figure > line { stroke-opacity: 0.8; }

/* Strate 2 — hachures serrées. */
#pfCarHachSerre line { stroke-opacity: 0.55; }

/* Strate 3 — semis de points. */
#pfCarSemis circle { fill-opacity: 0.54; }

/* Strate 5 — hachures lâches, zone ouverte. */
#pfCarHachLache line { stroke-opacity: 0.4; }

/* ==========================================================================
   ACCUEIL — BARRE D'ACTION PERSISTANTE MOBILE (5A · K · D-019)

   Prévue par la conception depuis 5A, jamais implémentée. Sans JavaScript :
   la barre est simplement fixée, donc elle ne provoque AUCUN décalage de mise
   en page — ni au chargement, ni au défilement.

   Le pied de page reçoit en compensation une réserve basse égale à la hauteur
   de la barre : sans elle, la barre masquerait les dernières lignes du socle.
   La réserve est portée par le PIED, et non par body : une réserve sur body
   laisserait apparaître le fond clair sous le pied sombre.

   La destination existe : le libellé est un lien réel vers `/praticiens/`,
   posé par `pf_accueil_barre_action()`.
   ========================================================================== */

/* ÉTAT COURANT — COMPOSANT ACTIF (BUILD-10.2, 2026-08-20).
   Le hub praticiens est publié : « Trouver un praticien » dispose d'une
   destination active, et l'arbitrage du 2026-08-18 qui maintenait la barre
   masquée — option B, tant qu'aucune destination n'existait — est éteint par
   la réalisation de sa propre condition.

   LES DEUX DÉCLARATIONS QUI PORTAIENT LA MENTION « ACTIVATION » SONT
   DÉSORMAIS ACTIVES : le `display` de la barre sous 782 px, et la réserve
   basse du pied de page. Elles restent solidaires — revenir sur l'une sans
   l'autre laisserait soit la dernière ligne du socle recouverte par la barre,
   soit une bande vide de 60 px sous le pied de page. */

.pf-sticky { display: none; }

@media (max-width: 782px) {
  .pf-sticky {
    /* Solidaire de la réserve basse du pied de page, plus bas. */
    display: block;
    position: fixed;
    z-index: 20;
    inset-inline: 0;
    inset-block-end: 0;
    padding: var(--pf-espace-2xs) var(--pf-espace-s);
    padding-block-end: calc(var(--pf-espace-2xs) + env(safe-area-inset-bottom, 0px));
    border-block-start: 1px solid var(--pf-filet-sombre);
    background-color: var(--pf-strate);
  }

  .pf-sticky__action {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    border-radius: var(--pf-rayon-m);
    background-color: var(--pf-marque);
    color: var(--pf-strate);
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.3;
    text-decoration: none;
  }

  .pf-accueil .pf-footer {
    /* Réserve de la hauteur de la barre. Solidaire du `display: block`
       ci-dessus : sans elle, la barre recouvrirait la dernière ligne du
       socle ; sans la barre, elle laisserait une bande vide de 60 px. */
    padding-block-end: calc(var(--pf-espace-xl) + 3.75rem + env(safe-area-inset-bottom, 0px));
  }
}

/* ==========================================================================
   ACCUEIL — ADAPTATIONS INTERMÉDIAIRES ET MOBILES (phase HOME V2)
   ========================================================================== */

/* Palier intermédiaire : 3 × 2 devient 2 × 3, jamais un quinconce. */
@media (max-width: 1100px) {
  .pf-portes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 782px) {
  /* Une colonne — et les six portes GARDENT leur phrase d'intention.
     5A § I l'exige : « un titre + une phrase d'intention par carte ». Une
     liste de titres seuls serait plus courte, mais elle retirerait au patient
     ce qui lui permet de reconnaître sa douleur, c'est-à-dire la fonction même
     de la section. */
  .pf-portes { grid-template-columns: 1fr; }

  /* Sous 782 px, TOUS les conteneurs intérieurs passent au même retrait que le
     hero. La règle doit vivre ICI et pas dans le bloc mobile du hero : à
     spécificité égale, c’est la dernière déclaration qui gagne, et les règles
     de base des sections sont déclarées APRÈS ce bloc-là. Mesuré : posée en
     haut, elle était réécrasée et les titres restaient à 24 px. */
  .pf-section__inner,
  .pf-savoirs__inner { padding-inline: var(--pf-espace-s); }

  /* La tête de section repasse en pile : le renvoi descend sous la grille. */
  .pf-douleurs .pf-section__inner {
    grid-template-columns: 1fr;
    align-items: start;
  }

  .pf-douleurs .wp-block-buttons {
    grid-column: 1;
    grid-row: 5;
    margin-block: var(--pf-espace-m) 0;
  }

  .pf-seuil .pf-seuil__statut { margin-block-start: var(--pf-espace-s); }
}

/* 320 px — les retraits latéraux passent sous le jeton m, comme sur les pages
   cliniques : à cette largeur, 24 px de chaque côté coûtent trop. */
/* 320 px — le retrait latéral est déjà à son cran mobile ; seuls les blocs
   internes se resserrent, sinon il ne reste plus de mesure de lecture. */
@media (max-width: 380px) {
  .pf-porte,
  .pf-repere { padding: var(--pf-espace-s); }
}

/* ==========================================================================
   TABLEAU COMPARATIF DES PAGES CLINIQUES — BUILD-14C

   PREMIER TABLEAU DU SITE. Aucune règle ne visait `wp-block-table` dans le
   périmètre clinique : sans ces règles, le tableau sortait aux styles par
   défaut du navigateur, bordures doubles comprises.

   PORTÉE VOLONTAIREMENT ÉTROITE. Tout est préfixé `.pf-clinique
   .pf-comparatif` : une seule classe, posée explicitement sur un seul bloc
   d'une seule page. Aucune règle ne peut atteindre un autre tableau, ni la page
   Formation qui a déjà les siennes.

   EMPILEMENT MOBILE PLUTÔT QUE DÉFILEMENT. Sous 600 px, trois colonnes de texte
   deviennent illisibles et un `overflow-x` ferait défiler un contenu que le
   lecteur ne sait pas être là. Chaque ligne devient donc un bloc, et les deux
   valeurs sont préfixées du nom de leur colonne.

   COÛT ASSUMÉ, ET IL DOIT ÊTRE ÉCRIT : ces deux libellés — « Sciatique » et
   « Cruralgie » — sont portés par le CSS, pas par le contenu. C'est un couplage
   réel. Il a été préféré à un `data-` attribut, qui invaliderait le bloc dans
   l'éditeur, et à une transposition en cartes, qui perdrait la comparaison
   ligne à ligne. Si les colonnes changent un jour, CES DEUX RÈGLES DOIVENT
   SUIVRE — c'est la seule maintenance manuelle de ce lot.
   ========================================================================== */

.pf-clinique .pf-comparatif { margin-block: var(--pf-espace-m); }

.pf-clinique .pf-comparatif table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.9375rem;
  line-height: 1.55;
}

.pf-clinique .pf-comparatif th,
.pf-clinique .pf-comparatif td {
  padding: var(--pf-espace-xs);
  text-align: start;
  vertical-align: top;
  border: 0;
  border-block-end: 1px solid var(--pf-filet);
}

.pf-clinique .pf-comparatif thead th {
  font-weight: 600;
  color: var(--pf-encre);
  border-block-end: 2px solid var(--pf-filet);
}

.pf-clinique .pf-comparatif tbody td:first-child {
  font-weight: 600;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-comparatif tbody tr:last-child th,
.pf-clinique .pf-comparatif tbody tr:last-child td { border-block-end: 0; }

@media (max-width: 600px) {
  .pf-clinique .pf-comparatif table,
  .pf-clinique .pf-comparatif tbody,
  .pf-clinique .pf-comparatif tr,
  .pf-clinique .pf-comparatif td { display: block; width: auto; }

  .pf-clinique .pf-comparatif thead { display: none; }

  .pf-clinique .pf-comparatif tr {
    padding-block-end: var(--pf-espace-s);
    margin-block-end: var(--pf-espace-s);
    border-block-end: 1px solid var(--pf-filet);
  }

  .pf-clinique .pf-comparatif tr:last-child {
    padding-block-end: 0;
    margin-block-end: 0;
    border-block-end: 0;
  }

  .pf-clinique .pf-comparatif td { border-block-end: 0; padding-block: 2px; }

  .pf-clinique .pf-comparatif tbody td:first-child {
    padding-block-end: var(--pf-espace-2xs);
    color: var(--pf-encre);
  }

  .pf-clinique .pf-comparatif tbody td:nth-child(2)::before { content: "Sciatique\A0: "; }
  .pf-clinique .pf-comparatif tbody td:nth-child(3)::before { content: "Cruralgie\A0: "; }

  .pf-clinique .pf-comparatif tbody td:nth-child(2)::before,
  .pf-clinique .pf-comparatif tbody td:nth-child(3)::before {
    font-weight: 600;
    color: var(--pf-encre-2);
  }
}

/* ==========================================================================
   COLONNE DE LECTURE UNIQUE — PHASE BUILD-2

   DÉFAUT CORRIGÉ, MESURÉ AVANT ÉCRITURE SUR 5P.
   Le rendu refusé n'était pas un fond blanc : la seule couche opaque de toute
   la chaîne était déjà `body` en `--pf-fond`. `html`, `#page`, `#content`,
   `.ast-container`, `#primary`, `.site-main`, `article`, `.entry-content` et
   `.entry-header` sont tous transparents.

   Le défaut réel était l'ALIGNEMENT. `68ch` est une unité relative à la taille
   de police de l'élément qui la lit : appliquée bloc par bloc, elle donnait à
   chacun une largeur différente — et comme Astra centre les enfants directs
   par marges automatiques, une largeur différente signifie un BORD GAUCHE
   différent. Cinq bords coexistaient dans la même page :

     h2, h3 ............................. bord 0      largeur 1200    (hors règle)
     p, .pf-kicker ...................... bord 308,42 largeur 583,14
     .pf-chapo .......................... bord 243,72 largeur 712,56
     ul, .pf-vigilance, .pf-perimetre ... bord 226,67 largeur 746,64
     .pf-sources, .pf-byline ............ bord 278,77 largeur 642,47

   Le texte flottait donc dans un champ de 1200 px sans colonne lisible, ce qui
   produisait l'effet de longue feuille uniforme.

   Le gate du design system avait mesuré les LARGEURS et les avait validées ;
   il n'avait jamais mesuré les POSITIONS. C'est un défaut nouveau, pas la
   réouverture d'un arbitrage.

   CORRECTION. La mesure est calculée UNE FOIS, sur l'article, puis héritée
   comme longueur absolue. `@property` avec `syntax: "<length>"` est ce qui le
   permet : sans lui, `68ch` serait de nouveau résolu chez chaque enfant et le
   problème reviendrait à l'identique.

   CONSÉQUENCE À CONNAÎTRE : `.pf-sources` et `.pf-byline` passent de 642,48 px
   à la largeur de colonne. Ces 642,48 px avaient été mesurés et validés au
   gate en tant que largeur ; ils étaient l'effet du même mécanisme que ce
   correctif supprime. Ils ne peuvent pas être conservés en même temps qu'une
   colonne unique.

   Les mises en pleine largeur restent exclues : l'accueil et ses sections
   `alignfull` ne sont pas touchés.
   ========================================================================== */

@property --pf-colonne {
  syntax: "<length>";
  inherits: true;
  initial-value: 0px;
}

.ast-article-single { --pf-colonne: var(--pf-largeur-lecture); }

.entry-content[data-ast-blocks-layout] > *:not(:where(.alignfull, .alignwide, .wp-block-cover, .wp-block-columns)) {
  max-width: var(--pf-colonne);
  margin-inline: auto;
}

/* Le titre de page vit dans `.entry-header`, hors de `.entry-content` : il
   échappait donc à toute contrainte de mesure et courait sur 1200 px. */
header.entry-header {
  max-width: var(--pf-colonne);
  margin-inline: auto;
}

/* --- Respect des préférences de mouvement (D-034 / D-035) ----------------- */

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ==========================================================================
   GABARIT CLINIQUE — PHASE BUILD-3
   ==========================================================================

   SOURCE VISUELLE DE RÉFÉRENCE : les quatre planches Claude Design versionnées
   au dépôt —
     reports/2026-08-14_PHASE_5P_PLANCHE_epicondylalgie.html
     reports/2026-08-15_PHASE_5Q_PLANCHE_tendon-achille.html
     reports/2026-08-15_PHASE_5R_PLANCHE_cervicalgie.html
     reports/2026-08-15_PHASE_5S_PLANCHE_ncb.html
   Toutes les valeurs ci-dessous en proviennent, relevées sur leur rendu réel à
   1440 px et à 390 px le 2026-08-18. Le `post_content` de la vague 1 reste la
   source ÉDITORIALE ; ces planches ne sont convoquées que comme source VISUELLE.

   GRAMMAIRE COMMUNE — CONSTAT MESURÉ, PAS INTERPRÉTÉ.
   Les feuilles de style des quatre planches ont été comparées sélecteur par
   sélecteur : 94 sélecteurs sont IDENTIQUES AU CARACTÈRE PRÈS sur les quatre.
   Ne divergent que la trame du hero, la mesure du `h1` du hero, et les
   composants propres à un tableau clinique donné. La grammaire est donc un
   fait constaté, et un gabarit unique suffit à la porter.

   ÉCHELLE TYPOGRAPHIQUE — ÉCART ASSUMÉ, NON RÉSOLU ICI.
   Les planches sont dessinées sur un corps de 14,5 px ; D-034 a validé 17,5 px.
   La MESURE DE LECTURE est la même de part et d'autre — 68 caractères —, mais
   sa largeur en pixels ne peut pas l'être : 531 px sur planche, 747 px ici.
   D-034 étant une décision validée et la consigne de reprise visuelle ne la
   visant pas explicitement, l'échelle du design system est CONSERVÉE et
   l'écart est porté au rapport. Il ne se corrige pas ici.

   PORTÉE. Tout est conditionné par `.pf-clinique`, posée sur `body` par
   `inc/pf-clinique.php` quand la page porte la byline santé (gabarit santé,
   D-032). L'accueil ne la porte pas : la non-régression est structurelle.
   ========================================================================== */

:root {
  /* --- Urgence vitale : triplet relevé sur les quatre planches -------------
     `#9B1B0C`, `#FDF4F1` et `#4A2016` figurent à l'identique dans 5P, 5Q, 5R
     et 5S. Ils sont ABSENTS du rapport 4B : le design system n'a jamais
     transposé ce registre, et l'implémentation lui avait substitué l'inversion
     du couple de vigilance — aplat `#7A5300`, texte ivoire —, rendu
     explicitement refusé.

     AJOUT AU DESIGN SYSTEM, À ARBITRER : ces trois valeurs sortent du triplet
     de vigilance alloué par D-034. Elles sont introduites parce que les
     planches validées les portent, pas parce qu'elles seraient préférables.

     Contrastes calculés : `#9B1B0C` sur `#FDF4F1` = 7,55:1 ;
     `#4A2016` sur `#FDF4F1` = 12,74:1. Les deux dépassent AAA en texte normal. */
  --pf-urgence: #9B1B0C;
  --pf-urgence-fond: #FDF4F1;
  --pf-urgence-encre: #4A2016;
}

/* --- Ancrage du gabarit sous le header ------------------------------------
   Les planches posent le fil d'Ariane immédiatement sous la navigation, sans
   respiration. Astra ouvre 60 px au-dessus de `#primary` : mesurés le
   2026-08-18, ils empêchaient toute lecture de seuil entre header sombre et
   hero sombre. */

.pf-clinique #content .ast-container { padding-block-start: 0; }
.pf-clinique #primary { margin-block-start: 0; padding-block-start: 0; }
.pf-clinique .entry-content > :first-child { margin-block-start: 0; }

/* --- Fil d'Ariane (planches : `.fil`) -------------------------------------
   Les planches ne posent PAS de bande teintée : le fil se lit sur le fond de
   lecture, PRIS ENTRE DEUX APLATS SOMBRES. C'est ce sandwich, et non une
   couleur propre, qui le fait lire comme une bande.
   Mesuré : hauteur 27 px, retrait supérieur 12 px, aucun retrait inférieur. */

.pf-clinique .pf-fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-clinique .pf-fil__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-fil__lien { color: var(--pf-accent); text-decoration: none; }
.pf-clinique .pf-fil__lien:hover { text-decoration: underline; }

/* Aucune destination : rendu comme un libellé, jamais comme un lien actif.
   Même doctrine que la navigation principale (BUILD-1). */
.pf-clinique .pf-fil__lien--inerte { color: var(--pf-encre-2); }

.pf-clinique .pf-fil__sep { color: var(--pf-filet); }
.pf-clinique .pf-fil__courant { color: var(--pf-encre-2); }

/* --- Hero clinique : socle commun (planches : `.heroS`) -------------------
   Retrait 46 px en haut, 38 px en bas ; kicker en `--marque-hover` ; chapô
   SANS empattement. Ce dernier point n'est pas un détail : sur les planches,
   le chapô du hero hérite de la fonte d'interface, là où le chapô de section
   est en Source Serif. Ce sont deux objets différents. */

.pf-clinique .pf-hero-clinique {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
  position: relative;
  overflow: hidden;
}

.pf-clinique .pf-hero-clinique__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: 46px 38px;
}

.pf-clinique .pf-hero-clinique__kicker {
  margin: 0;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--pf-marque-hover);
}

.pf-clinique .pf-hero-clinique__titre {
  max-width: 23ch;
  margin-block: 0.625rem 0;
  font-size: clamp(2rem, 1.5rem + 2.2vw, 2.9rem);
  font-weight: 600;
  line-height: 1.22;
  letter-spacing: -0.014em;
  color: var(--pf-ivoire);
}

.pf-clinique .pf-hero-clinique__chapo {
  max-width: 66ch;
  margin-block: 0.8125rem 0;
  font-family: var(--pf-fonte-principale);
  font-size: 1.125rem;
  line-height: 1.72;
  color: var(--pf-ivoire-2);
}

.pf-clinique .pf-hero-clinique__chapo strong { color: var(--pf-ivoire); }

/* ==========================================================================
   TRAMES DE HERO — QUATRE IDENTITÉS LOCALES, UN SEUL GABARIT

   Chaque page clinique possède SA trame. Ce n'est pas une variation
   décorative : les planches documentent explicitement que la trame distingue
   un tableau clinique d'un autre, et qu'AUCUNE lecture anatomique n'en est
   possible — ce ne sont ni des tendons, ni des vertèbres, ni des nerfs.

   Les substituer par un motif clinique générique effacerait cette
   distinction. Elles sont donc portées par des VARIANTES, pas par le socle.

   La technique est celle des planches, reprise à l'identique : deux
   `repeating-*-gradient` sur pseudo-éléments débordants. Aucune image, aucun
   SVG, aucune requête réseau — c'est aussi la méthode la plus légère.
   L'`inset` négatif couvre les coins que la rotation laisserait nus.

   Le socle ne déclare AUCUNE trame : une page clinique dont le motif n'est
   pas connu reçoit un hero sombre uni. Un aplat sobre est un défaut
   acceptable ; un motif attribué au hasard ne l'est pas.
   ========================================================================== */

.pf-clinique [class*="pf-hero-clinique--"]::before,
.pf-clinique [class*="pf-hero-clinique--"]::after {
  content: "";
  position: absolute;
  pointer-events: none;
}

/* --- 5P — arcs convergents / arc de contrainte ---------------------------- */
.pf-clinique .pf-hero-clinique--arcs::before,
.pf-clinique .pf-hero-clinique--arcs::after { inset: -30% -10%; }

.pf-clinique .pf-hero-clinique--arcs::before {
  background: repeating-radial-gradient(circle at -6% 50%, transparent 0 54px, #2E271F 54px 56px, transparent 56px 112px);
  opacity: 0.9;
}

.pf-clinique .pf-hero-clinique--arcs::after {
  background: repeating-radial-gradient(circle at -2% 62%, transparent 0 38px, #322A21 38px 39px, transparent 39px 96px);
  opacity: 0.55;
}

/* --- 5Q — cordon en tension ---------------------------------------------- */
.pf-clinique .pf-hero-clinique--cordon::before,
.pf-clinique .pf-hero-clinique--cordon::after { inset: -30% -14%; }

.pf-clinique .pf-hero-clinique--cordon::before {
  background: repeating-linear-gradient(97deg, transparent 0 26px, #2E271F 26px 28px, transparent 28px 54px);
  transform: skewX(-7deg);
  opacity: 0.9;
}

.pf-clinique .pf-hero-clinique--cordon::after {
  background: repeating-linear-gradient(83deg, transparent 0 62px, #332B22 62px 63px, transparent 63px 126px);
  transform: skewX(6deg);
  opacity: 0.5;
}

/* --- 5R — segments empilés, légèrement pivotants -------------------------- */
.pf-clinique .pf-hero-clinique--segments::before,
.pf-clinique .pf-hero-clinique--segments::after { inset: -30% -14%; }

.pf-clinique .pf-hero-clinique--segments::before {
  background: repeating-linear-gradient(177deg, transparent 0 29px, #2E271F 29px 32px, transparent 32px 61px);
  opacity: 0.92;
}

.pf-clinique .pf-hero-clinique--segments::after {
  background: repeating-linear-gradient(171deg, transparent 0 88px, #342C23 88px 89px, transparent 89px 177px);
  opacity: 0.55;
}

/* --- 5S — traînées divergentes qui s'estompent ---------------------------- */
.pf-clinique .pf-hero-clinique--trainees::before,
.pf-clinique .pf-hero-clinique--trainees::after { inset: -30% -14%; }

.pf-clinique .pf-hero-clinique--trainees::before {
  background: repeating-linear-gradient(96deg, transparent 0 21px, #2E271F 21px 24px, transparent 24px 45px);
  opacity: 0.9;
}

.pf-clinique .pf-hero-clinique--trainees::after {
  background:
    repeating-linear-gradient(103deg, transparent 0 66px, #352D24 66px 68px, transparent 68px 134px),
    linear-gradient(97deg, rgba(34, 30, 26, 0) 0%, rgba(34, 30, 26, 0.55) 58%, rgba(34, 30, 26, 0.9) 100%);
  opacity: 0.85;
}

/* --- 5K — deux trajectoires divergentes ------------------------------------
   Identité propre à la page sciatique / cruralgie : DEUX familles de lignes
   obliques de SENS OPPOSÉS — 74° et 106°, soit 16° de part et d'autre de la
   verticale. Elles divergent, puis se recroisent. C'est la figuration abstraite
   de deux trajets qui partent du même endroit et se séparent.

   Distincte des cinq trames existantes, et vérifiable : les traînées de 5S sont
   deux familles de MÊME sens (96° et 103°), le faisceau de 5L deux familles
   quasi verticales très légèrement divergentes (86° et 94°). Ici l'écart est
   large et symétrique — l'entrecroisement est le motif, pas un effet de moiré.

   AUCUNE ANATOMIE. Pas de nerf, pas de trajet nerveux, pas de dermatome, pas de
   jambe. Deux directions abstraites, rien d'autre : le brief l'exige, et une
   page dont le verrou principal est « le trajet ne diagnostique pas » ne peut
   pas ouvrir sur un pseudo-atlas.

   Même méthode que les cinq autres : `repeating-linear-gradient` sur
   pseudo-éléments débordants. Aucune image, aucun SVG, aucune requête réseau,
   rien à animer. */
.pf-clinique .pf-hero-clinique--trajectoires::before,
.pf-clinique .pf-hero-clinique--trajectoires::after { inset: -30% -14%; }

.pf-clinique .pf-hero-clinique--trajectoires::before {
  background: repeating-linear-gradient(74deg, transparent 0 26px, #2E271F 26px 28px, transparent 28px 54px);
  opacity: 0.9;
}

.pf-clinique .pf-hero-clinique--trajectoires::after {
  background:
    repeating-linear-gradient(106deg, transparent 0 30px, #352D24 30px 32px, transparent 32px 62px),
    linear-gradient(97deg, rgba(34, 30, 26, 0) 0%, rgba(34, 30, 26, 0.5) 60%, rgba(34, 30, 26, 0.88) 100%);
  opacity: 0.85;
}

/* --- 5L — faisceau sous tension -------------------------------------------
   Deux familles de lignes quasi verticales, très légèrement divergentes —
   86° et 94° — dont l'INTERFÉRENCE produit la tension. Angles et périodes
   relevés sur la planche, comme pour les quatre autres.

   UNE SEULE COUCHE, contrairement à ses sœurs. Les deux familles sont empilées
   dans le même `background` parce que c'est leur UNION qui doit se lire :
   réparties sur deux pseudo-éléments, chaque croisement serait composé deux
   fois, les points de rencontre s'assombriraient, et l'interférence
   deviendrait un quadrillage. La planche les porte elle aussi sur une couche.

   La couleur n'est pas une valeur intermédiaire comme chez les quatre autres :
   `#2B2620` est exactement `--pf-strate-2`, le jeton d'élévation de D-034. Le
   jeton est donc employé, pas sa copie.

   DIRECTION REFUSÉE PAR LA PLANCHE, et refusée ici : « des faisceaux qui
   retrouvent progressivement une organisation ». Une trame désordonnée
   devenant régulière encoderait visuellement « la méthode réorganise les
   fibres », et installerait la lecture « douleur = fibres encore désordonnées »
   que le verrou de la page interdit. Ce qui est repris est une tension SANS
   lecture avant/après : le motif est identique partout, il ne raconte rien.

   Le socle pose aussi un `::after` sur toute variante. Sans `inset` ni fond, il
   reste une boîte de taille nulle, invisible et non cliquable ; il n'est pas
   neutralisé, pour ne rien ajouter d'inutile. La trame est décorative par
   construction : un pseudo-élément n'entre pas dans l'arbre d'accessibilité, et
   le socle lui pose déjà `pointer-events: none`. Aucune animation. */
.pf-clinique .pf-hero-clinique--faisceau::before {
  inset: -30% -14%;
  background:
    repeating-linear-gradient(86deg, transparent 0 13px, var(--pf-strate-2) 13px 14px, transparent 14px 27px),
    repeating-linear-gradient(94deg, transparent 0 13px, var(--pf-strate-2) 13px 14px, transparent 14px 27px);
  opacity: 0.85;
}

/* --- 5J — empilement axial -------------------------------------------------
   Un empilement de segments horizontaux réguliers — 180°, période 35 px —
   croisé par UN axe vertical unique. La planche l'écrit ainsi : l'axe et la
   superposition, JAMAIS une colonne dessinée. Rien n'y est anatomique, rien
   ne s'y compte, rien ne s'y mesure.

   UNE SEULE COUCHE, comme pour 5L. L'empilement est posé AU-DESSUS de l'axe,
   dans l'ordre de la planche : l'axe ne se lit qu'entre les segments, et le
   motif ne se referme jamais en quadrillage. Répartis sur deux
   pseudo-éléments, empilement et axe se composeraient deux fois et
   produiraient un point sombre au centre du hero — exactement l'accent qu'une
   page lombaire ne doit pas porter.

   TOKENS SEULEMENT. Les segments emploient `--pf-strate-2`, qui EST la valeur
   de la planche. L'axe est très légèrement plus clair : il est obtenu par
   `color-mix` sur les deux mêmes jetons, construction déjà employée par le
   hero du hub. Aucune valeur hexadécimale nouvelle n'entre dans la feuille.

   INTERDITS ÉCRITS PAR LA PLANCHE, repris ici : pseudo-radiographie · faux
   compte rendu d'IRM · vertèbre déplacée ou « qui sort » · disque écrasé ·
   nerf pincé · bassin tordu · colonne « remise droite » · flèche de
   correction. Aucune animation. */
.pf-clinique .pf-hero-clinique--axial::before {
  inset: -30% -14%;
  background:
    repeating-linear-gradient(180deg, transparent 0 17px, var(--pf-strate-2) 17px 18px, transparent 18px 35px),
    linear-gradient(90deg, transparent calc(50% - 1px), color-mix(in srgb, var(--pf-ivoire) 3%, var(--pf-strate-2)) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px));
  opacity: 0.9;
}

/* --- BUILD-PERSIST-2 — lignes de lecture -----------------------------------
   Trame du pilier transversal « Comprendre les douleurs persistantes ».
   Direction arrêtée au §13 du rapport de conception gelé le 2026-08-23.

   ELLE NE FIGURE RIEN. C'est la seule trame du fichier dans ce cas, et c'est
   voulu : ses sept sœurs figurent abstraitement un tableau clinique, or ce
   pilier n'en décrit aucun. Il est transversal ; sa trame est un registre de
   LECTURE — des lignes de texte suggérées —, pas une image de la douleur.

   INTERDITS ÉCRITS PAR LE §13, tous tenus : aucun foyer dessiné · aucun centre
   visible · aucune convergence vers un point · aucun cerveau · aucun neurone ·
   aucune alarme · aucune anatomie · aucune jauge · aucune proportion
   biopsychosociale · aucune flèche · aucun chemin vers un appel à l'action.
   Un `repeating-linear-gradient` est uniforme en tout point de sa surface : il
   ne PEUT pas produire de centre. C'est la raison du choix technique, pas une
   commodité.

   ANGLE UNIQUE — 172deg pour LES DEUX familles. Deux angles différents
   produiraient une interférence, donc une tension : c'est exactement
   l'identité de 5L, et ce n'est pas celle-ci. Ici les lignes sont strictement
   parallèles et ne se croisent jamais.

   L'ORANGE APPARTIENT AUX LIGNES. Le §13 le veut « très retenu, appartenant
   aux lignes » : il partage leur angle et leur épaisseur — un pixel — et
   n'apparaît qu'une fois toutes les six lignes environ. Il ne marque aucun
   point, ne désigne rien et ne conduit nulle part.

   TOKENS SEULEMENT, aucune valeur hexadécimale nouvelle. Les lignes crème sont
   `--pf-strate-2` nuancée vers `--pf-ivoire`, construction déjà employée par
   l'axe de 5J ; l'accent est la même construction vers `--pf-marque`. Aucune
   animation, aucune image, aucun SVG, aucune requête réseau.

   ÉCART SIGNALÉ À LA REVUE. Le §13 dit « courbes crème fines ». Une courbe
   exigerait un `repeating-radial-gradient`, donc un CENTRE — que le même §13
   interdit deux fois. Les lignes sont donc DROITES. L'écart est déclaré au
   rapport de construction plutôt que résolu par un foyer placé hors cadre. */
.pf-clinique .pf-hero-clinique--lignes::before {
  inset: -30% -14%;
  background:
    repeating-linear-gradient(172deg, transparent 0 128px, color-mix(in srgb, var(--pf-marque) 10%, var(--pf-strate-2)) 128px 129px, transparent 129px 258px),
    repeating-linear-gradient(172deg, transparent 0 21px, color-mix(in srgb, var(--pf-ivoire) 4%, var(--pf-strate-2)) 21px 22px, transparent 22px 43px);
  opacity: 0.9;
}

/* --- 5I R3 — lignes longitudinales ----------------------------------------
   Trame du spoke « Périostite tibiale et douleur du tibia à l'effort ».
   Direction reprise de la planche R3, dont le commentaire nomme lui-même
   l'identité locale : « axe de l'os, répétition des appuis ».

   UNE SEULE FAMILLE DE LIGNES, et c'est la première trame du fichier dans ce
   cas. Ses sœurs en superposent deux ; R3 n'en porte qu'une, et en ajouter une
   seconde produirait une interférence — donc une tension — que la planche
   n'énonce pas. La reprise s'arrête donc où s'arrête la planche.

   L'ANGLE EST QUASI VERTICAL — 94deg. Il figure l'axe long de l'os, jamais l'os
   lui-même : aucune lecture anatomique n'en est possible, comme pour les huit
   trames précédentes. Rien n'y désigne le périoste, une insertion musculaire ni
   une zone douloureuse — ce que la page interdit précisément d'affirmer.

   VALEURS DE LA PLANCHE, TOKEN DU THÈME. La période de 27 px et le trait de
   1 px sont ceux de R3 au pixel près. La couleur `#2B2620` de la planche est
   `--pf-strate-2` : le token est employé à sa place, aucune valeur hexadécimale
   nouvelle n'entre dans le fichier. Aucune image, aucun SVG, aucune requête
   réseau, aucune animation.

   Comme pour 5L, 5J et BUILD-PERSIST-2, la MESURE DU TITRE n'est pas
   particularisée : la famille clinique publiée garde la sienne. */
.pf-clinique .pf-hero-clinique--longitudinal::before {
  inset: -30% -14%;
  background: repeating-linear-gradient(94deg, transparent 0 13px, var(--pf-strate-2) 13px 14px, transparent 14px 27px);
  opacity: 0.9;
}

/* Mesure du titre — propre à chaque page sur les planches : 21ch, 22ch, 23ch,
   23ch. Relevé, pas harmonisé : c'est ce qui règle le nombre de lignes du
   titre, donc la hauteur du hero.

   5L, cinquième planche, donne 24ch. L'arbitrage du 2026-08-20 NE LA REPREND
   PAS : la famille clinique publiée fait autorité sur la typographie, et
   `entorse-douleur-persistante` garde le défaut de 23ch. La trame vient de la
   planche ; la mesure du titre, non.

   5J, sixième planche, donne 20ch. MÊME ARBITRAGE, le 2026-08-21, et pour la
   même raison : `lombalgie-persistante` garde le défaut de 23ch. Son titre
   tient sur trois lignes là où ses sœurs en occupent deux — c'est la longueur
   du titre qui le veut, pas la mesure du gabarit. */
.pf-clinique .pf-hero-clinique--arcs .pf-hero-clinique__titre { max-width: 21ch; }
.pf-clinique .pf-hero-clinique--cordon .pf-hero-clinique__titre { max-width: 22ch; }

/* --- Bandes de section (planches : `.sec` / `.sec.perim`) -----------------
   Alternance stricte fond de lecture / papier à partir de la première
   section. `.perim` porte AUSSI un filet haut et un filet bas : sans eux, deux
   bandes papier voisines fusionnent et le rythme disparaît.

   Les enveloppes sont produites au rendu par `inc/pf-clinique.php` : le
   `post_content` n'en porte aucune et n'en portera aucune. Elles reçoivent
   `alignfull` pour EMPRUNTER le mécanisme pleine largeur déjà validé sur
   l'accueil plutôt que d'en inventer un second — effet de bord voulu :
   `alignfull` est déjà exclu de la règle de colonne de BUILD-2. */

.pf-clinique .pf-sec { padding-block: 38px; }

.pf-clinique .pf-sec--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

.pf-clinique .pf-sec__inner {
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

/* --- COLONNE DE LECTURE — CORRECTION DE BUILD-2 ---------------------------
   BUILD-2 avait diagnostiqué le bon défaut — cinq bords gauches concurrents —
   et appliqué la mauvaise correction : une largeur unique, CENTRÉE.

   Les planches, mesurées, font l'inverse : UN SEUL BORD GAUCHE, et des
   largeurs DÉLIBÉRÉMENT DIFFÉRENTES. À 1440, tout commence à 40 px du bord de
   page, et les largeurs s'échelonnent de 490 px (renvoi) à 1040 px (portes).
   L'espace vide est à DROITE, et il est voulu.

   C'est aussi ce que fait déjà l'accueil, validé : son titre de hero commence
   à 136,5 px, exactement où commence le lockup du header. Le centrage des
   pages cliniques était donc l'exception, pas la règle du site.

   Les largeurs restent en `ch`, à la taille de police de chaque élément :
   c'est le mécanisme même des planches, et c'est lui qui produit la variation.
   `@property` n'a plus lieu d'être ici — il servait à figer une longueur
   unique, ce que la référence ne demande pas. */

.pf-clinique .pf-sec__inner > * { margin-inline: 0; }
.pf-clinique .pf-sec__inner > :first-child { margin-block-start: 0; }
.pf-clinique .pf-sec__inner > :last-child { margin-block-end: 0; }

.pf-clinique .pf-sec__inner > h2,
.pf-clinique .pf-sec__inner > h3 { max-width: 72ch; }
.pf-clinique .pf-sec__inner > p { max-width: 68ch; }
.pf-clinique .pf-sec__inner > .pf-perimetre,
.pf-clinique .pf-sec__inner > .pf-statut-encart { max-width: 70ch; }
.pf-clinique .pf-sec__inner > .pf-statut { max-width: 68ch; }
.pf-clinique .pf-sec__inner > .pf-vigilance { max-width: 76ch; }

/* --- Verrou épistémique (planches : `.verrou`) ----------------------------
   Filet de 1,5 px en encre pleine, fond papier, AUCUN arrondi, intitulé en
   capitales et en accent. Le rendu actuel — filet clair de 1 px, arrondi de
   4 px, intitulé en encre secondaire, casse normale — ne porte pas ce poids.

   Sur une bande papier, le fond du verrou est celui de la bande : les
   planches font exactement cela, et c'est le filet d'encre, seul, qui le
   détache. */

.pf-clinique .pf-perimetre {
  border: 1.5px solid var(--pf-encre);
  border-radius: 0;
  background-color: var(--pf-papier);
  padding: var(--pf-espace-s) var(--pf-espace-m);
}

.pf-clinique .pf-perimetre .pf-perimetre__titre {
  font-size: 0.875rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-accent);
  margin-block: 0 var(--pf-espace-3xs);
}

/* --- Borne de la méthode (planches : `.pfCond`) ---------------------------
   MÊME géométrie que le verrou, mais filet ORANGE au lieu d'encre. Les
   planches distinguent ainsi ce qui borne la MÉTHODE de ce qui borne la
   CONNAISSANCE. Le `post_content` gelé emploie le même composant
   `pf-perimetre` pour les deux : rien, dans le balisage, ne les sépare.

   Le seul repère structurel disponible est la position — la borne de méthode
   précède immédiatement l'encart de bornes déclarées. Le sélecteur est donc
   POSITIONNEL, et c'est un pis-aller assumé : il est signalé au rapport, et
   sa correction propre est l'ajout d'une classe au contenu, opération qui
   modifierait les SHA et n'est pas autorisée ici.

   Dégradation si la position change : la borne reste rendue en verrou, donc
   lisible et correcte, seulement moins distinguée. */

.pf-clinique .pf-sec__inner > .pf-perimetre:has(+ .pf-statut-encart) {
  border-color: var(--pf-marque);
}

/* --- Rassurance (planches : `.rassur`) ------------------------------------
   Filet gauche orange, fond papier, mesure de 74 caractères. Même remarque
   que ci-dessus : le paragraphe de rassurance n'a pas de classe dans le
   contenu gelé. Il est identifié par sa position — premier paragraphe de la
   section qui porte l'encart d'urgence —, ce qui est exactement sa place dans
   les quatre planches.

   Dégradation si la position change : paragraphe courant. Aucune affirmation
   n'est ajoutée ni retirée par cette règle. */

.pf-clinique .pf-sec__inner:has(> .pf-vigilance--urgence) > h2 + p {
  max-width: 74ch;
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  border-inline-start: 3px solid var(--pf-marque);
  background-color: var(--pf-papier);
}

/* --- Renvoi de premier niveau (planches : `.renvoi`) ----------------------
   Ciblé sur le SEUL enfant direct de la bande : la même classe sert aussi de
   pied de bloc à l'intérieur d'un verrou, où elle garde son filet supérieur
   et rien d'autre. */

.pf-clinique .pf-sec__inner > .pf-perimetre__renvoi {
  max-width: 70ch;
  margin-block: var(--pf-espace-m) 0;
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  border-block-start: 0;
  border-inline-start: 3px solid var(--pf-marque);
  background-color: var(--pf-papier);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--pf-encre);
}

.pf-clinique .pf-sec__inner > .pf-perimetre__renvoi a {
  color: var(--pf-accent);
  font-weight: 600;
  text-decoration: none;
}

.pf-clinique .pf-sec__inner > .pf-perimetre__renvoi a:hover { text-decoration: underline; }

/* --- Urgence vitale (planches : `.urgBox`) --------------------------------
   RENDU EXPLICITEMENT REFUSÉ, ET REMPLACÉ.
   Avant : aplat `#7A5300` plein, texte ivoire, filet 1 px, arrondi 4 px.
   Planches : fond très légèrement rosé, filet ROUGE de 2 px, texte sombre,
   hiérarchie portée par le rouge, aucun arrondi.

   La différence n'est pas décorative. Un aplat sombre de la hauteur d'un
   écran, sur une page santé, se lit comme une alarme continue ; les planches
   réservent le rouge au filet et à l'intitulé, et laissent le corps lisible.
   La hiérarchie est plus forte, pas plus faible : elle redevient lisible. */

.pf-clinique .pf-vigilance--urgence {
  background-color: var(--pf-urgence-fond);
  border: 2px solid var(--pf-urgence);
  border-radius: 0;
  color: var(--pf-urgence-encre);
  padding: var(--pf-espace-m) var(--pf-espace-l);
}

.pf-clinique .pf-vigilance--urgence p,
.pf-clinique .pf-vigilance--urgence li { color: var(--pf-urgence-encre); }

.pf-clinique .pf-vigilance--urgence .pf-vigilance__titre {
  font-size: 1.1875rem;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.006em;
  color: var(--pf-urgence);
  text-transform: none;
}

.pf-clinique .pf-vigilance--urgence strong { color: var(--pf-urgence); }

/* CIBLE TACTILE DU LIEN DE STATUT — BUILD-14C.

   CE LIEN EST POSÉ DANS UNE PHRASE, ET LA PHRASE S'ENROULE. Mesuré sur le
   rendu réel : à 1440 px il occupe DEUX fragments de ligne, et sa boîte-union
   fait 728 × 51 px — dont le centre tombe dans le vide entre les deux
   fragments. Un retrait appliqué à la boîte serait donc inutile ; appliqué à un
   élément EN LIGNE, il vaut PAR FRAGMENT, et chaque fragment devient
   atteignable. C'est la recette retenue en BUILD-13.2A pour le lien du pied de
   page, pour exactement la même raison.

   Mesuré : la boîte de ligne fait 20 px ; 20 + 2 × 12 = 44.

   AUCUN DÉCALAGE DE COMPOSITION. Le retrait vertical d'un élément en ligne
   n'entre pas dans le calcul de la hauteur de ligne : la page ne bouge pas d'un
   pixel. Aucune marge négative n'est donc écrite — elle serait ignorée, et
   laisserait croire qu'elle sert à quelque chose.

   `position: relative`, sans décalage, empêche le fragment suivant de se
   peindre par-dessus le bas du retrait — même mécanisme que sur les portes de
   l'accueil, où il valait dix pixels.

   PORTÉE. Aucune autre page clinique ne porte de lien dans un `pf-statut` —
   vérifié sur les six pages publiées. La règle est donc sans effet ailleurs
   aujourd'hui, et prête si le cas se reproduit. */
.pf-clinique .pf-statut a {
  padding-block: 12px;
  position: relative;
}

/* CIBLE TACTILE ET RETOUR D'ANCRE DU RENVOI D'URGENCE — BUILD-14C.1.

   Le rappel du bas porte le PREMIER lien jamais pose dans un encart
   d'urgence clinique. Mesure sur le rendu reel : la boite de ligne fait
   20 px a 390 et 320 px, 21 px a 1440 px. Le lien s'enroule sur quatre a
   six fragments : un retrait applique a la boite-union ne servirait a rien,
   il ne vaut PAR FRAGMENT que sur un element EN LIGNE. Meme recette qu'en
   BUILD-13.2A, et que `.pf-clinique .pf-statut a` juste au-dessus.

   20 + 2 x 12 = 44.  21 + 2 x 12 = 45.

   CE QUE COUTE CE RETRAIT, DIT SANS L'ARRONDIR. Le pas de ligne mesure
   28,5 px et la boite de texte 20 px : l'intervalle entre deux lignes ne
   fait que 8,5 px. Le retrait de 12 px deborde donc de 3,5 px sur la ligne
   suivante. Entre deux fragments du MEME lien, c'est sans effet. Sous le
   DERNIER fragment, la zone sensible recouvre les 3,5 px superieurs du texte
   qui suit, sur la largeur de ce seul fragment (25 px a 390 px). Un appui
   exactement la ouvrirait l'ancre au lieu de ne rien faire. C'est assume :
   un lien de 20 px n'est pas atteignable du tout.

   `position: relative`, sans decalage, empeche la ligne suivante de se
   peindre par-dessus le bas du retrait. */
.pf-clinique .pf-vigilance--urgence a {
  color: var(--pf-urgence);
  text-decoration-thickness: 2px;
  padding-block: 12px;
  position: relative;
}

/* RETOUR D'ANCRE. Mesure sans cette regle : la cible arrive a -0,4 px,
   collee au bord haut de la fenetre. Le theme enonce deja la regle pour ses
   cinq niveaux de titre — le titre vise ne doit pas arriver colle au bord
   haut. Elle est ici portee par `[id]` : elle ne s'applique donc qu'aux
   encarts qui sont REELLEMENT des cibles d'ancre, et se maintient seule si
   un autre encart le devient. Aucun JavaScript. */
.pf-clinique .pf-vigilance[id] {
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-clinique .pf-vigilance--urgence a:focus-visible { outline-color: var(--pf-urgence); }

/* --- Paliers d'orientation (planches : `.vig` et ses `.niv`) --------------
   Les planches réunissent les paliers dans UN SEUL encart jaune et les
   distinguent par une étiquette en capitales. Le `post_content` gelé les porte
   en encarts distincts : la forme diffère, la hiérarchie non.

   Les filets latéraux de 5 px et 3 px qui distinguaient « sans attendre » de
   « consultation » sont retirés : aucune planche n'en porte, et la distinction
   y est portée par l'INTITULÉ. D-036 §4 rend opposable le principe de
   hiérarchisation, pas sa forme — la hiérarchie reste entière : rouge pour
   l'urgence, jaune pour l'orientation, et le délai est écrit en toutes lettres
   dans chaque intitulé. */

.pf-clinique .pf-vigilance--sans-attendre,
.pf-clinique .pf-vigilance--consultation {
  border: 1px solid var(--pf-vigilance-bord);
  border-radius: 0;
  background-color: var(--pf-vigilance-fond);
  padding: var(--pf-espace-m) var(--pf-espace-l);
}

.pf-clinique .pf-vigilance--sans-attendre .pf-vigilance__titre,
.pf-clinique .pf-vigilance--consultation .pf-vigilance__titre {
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-vigilance-texte);
  margin-block: 0 var(--pf-espace-2xs);
}

/* --- Bornes déclarées (planches : `.bornes`) ------------------------------ */

.pf-clinique .pf-statut-encart {
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  margin-block: var(--pf-espace-m);
}

.pf-clinique .pf-statut-encart .pf-statut-encart__titre {
  font-size: 0.875rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-accent);
  margin-block: 0 var(--pf-espace-2xs);
}

/* --- Portes de fin de page (planches : `.portes` / `.porte`) --------------
   Cible le SEUL `ul` enfant direct d'une bande : sur les quatre pages de la
   vague 1, toutes les autres listes vivent à l'intérieur d'un composant.
   Vérifié sur le rendu servi le 2026-08-18.

   ÉCART CONNU : les planches mettent le titre de porte en `display:block`. Le
   contenu gelé écrit « <strong>Titre</strong> — description » sur une seule
   ligne ; passer le titre en bloc ferait commencer la description par un tiret
   orphelin. Le titre reste donc en ligne. L'écart vient du balisage du
   contenu, pas de la feuille de style. */

.pf-clinique .pf-sec__inner > ul {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  max-width: 1040px;
  margin-block: var(--pf-espace-m) 0;
  padding: 0;
  list-style: none;
}

.pf-clinique .pf-sec__inner > ul > li {
  margin: 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-papier);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--pf-encre);
}

.pf-clinique .pf-sec__inner > ul > li > strong:first-child { color: var(--pf-accent); }

/* CIBLE TACTILE DES PORTES — 44 px, standard du site (BUILD-5.1).
   Mesuré avant correction, aux quatre largeurs de contrôle : 20 px. La porte
   d'une carte est le SEUL élément interactif du corps d'une page clinique, et
   BUILD-11 est la première page de la famille à en porter de réelles.

   NI `display:block`, NI `min-height` : le commentaire du bloc ci-dessus dit
   déjà pourquoi le titre de porte reste en ligne — le contenu écrit « titre —
   description » sur une seule ligne, et passer le titre en bloc ferait
   commencer la description par un tiret orphelin. Sur une boîte en ligne,
   `min-height` n'a de toute façon aucun effet.

   Le retrait vertical d'une boîte en ligne AGRANDIT la zone cliquable SANS
   changer la hauteur de la ligne : la grille, la hauteur des cartes et le
   rythme du texte restent au pixel près ce qu'ils étaient. Une ancre coupée
   sur deux lignes reçoit ce retrait sur CHACUN de ses fragments, qui atteignent
   donc la cible séparément.

   20 px + 2 × 12 px = 44 px. La garantie est MESURÉE sur la fonte servie, pas
   déduite : elle serait à re-mesurer si la pile typographique changeait.

   MESURÉ AU POINTEUR, PAS AU RECTANGLE. Le retrait seul produit bien un
   rectangle de 44 px — et c'est un piège. Sous la première ligne, la ligne
   suivante du texte appartient à une boîte de ligne postérieure, qui se peint
   PAR-DESSUS le retrait : `elementFromPoint` y rend la liste, pas l'ancre.
   Zone réellement atteignable relevée dans cet état : 35,5 px.

   `position: relative`, SANS aucun décalage, ne déplace rien : elle fait
   seulement peindre l'ancre après le contenu en flux, ce qui rend son retrait
   atteignable. Vérifié point par point, tous les 0,5 px, sur chaque fragment :
   44 px pleins. `z-index` a été essayé et ne change rien de plus ; il est donc
   absent.

   CONTREPARTIE ASSUMÉE : les 12 px du bas recouvrent le haut de la première
   ligne de description. Taper là ouvre la porte. Aucune autre commande ne se
   trouve dans cette zone, et aucun recouvrement entre deux ancres n'a été
   relevé aux quatre largeurs de contrôle. */
.pf-clinique .pf-sec__inner > ul > li a {
  position: relative;
  padding-block: var(--pf-espace-xs);
}

/* --- Bande des sources (planches : `.srcs`) -------------------------------
   Papier, filet supérieur, intitulé en capitales et en encre secondaire. Les
   planches ne donnent pas au mot « Sources » le poids d'un titre de section :
   c'est une étiquette d'appareil critique. */

.pf-clinique .pf-sec--sources {
  background-color: var(--pf-papier);
  border-block-start: 1px solid var(--pf-filet);
}

.pf-clinique h2.pf-sources__titre {
  max-width: none;
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  line-height: 1.4;
  text-transform: uppercase;
  color: var(--pf-encre-2);
  margin-block: 0 var(--pf-espace-s);
}

.pf-clinique .pf-sources {
  max-width: none;
  margin-block: 0;
}

.pf-clinique .pf-sources__liste li { max-width: 104ch; }

/* --- Bande de byline (planches : `.byline`) -------------------------------
   Seuil sombre en pied d'article, pleine largeur. Le rendu actuel — deux
   filets clairs sur fond de lecture — ne ferme pas la page. */

.pf-clinique .pf-sec--byline {
  background-color: var(--pf-strate);
  padding-block: var(--pf-espace-m);
}

.pf-clinique .pf-byline {
  max-width: none;
  margin-block: 0;
  padding-block: 0;
  border: 0;
  color: var(--pf-ivoire-2);
}

.pf-clinique .pf-byline p { color: var(--pf-ivoire-2); }
.pf-clinique .pf-byline .pf-byline__auteur { color: var(--pf-ivoire); }
.pf-clinique .pf-byline strong { color: var(--pf-ivoire); }

/* ==========================================================================
   OBJETS PROPRES AU SPOKE « PÉRIOSTITE TIBIALE » — 5I R3

   PORTÉE. Toutes les règles de ce bloc sont préfixées `pf-tibia-`, sauf une
   variante de liste de sources. Aucune ne peut atteindre les huit pages
   cliniques déjà construites : aucune d'elles ne porte l'une de ces classes.

   POURQUOI DES CLASSES NOUVELLES. La planche R3 porte six objets que la
   famille clinique publiée ne possède pas — quatre repères de structure, trois
   cartes de charge, un schéma à deux cas, des encadrés de question, quatre
   pastilles de méthode, et une borne d'exclusion. Ils ont d'abord été cherchés
   parmi les composants existants : `pf-perimetre`, `pf-statut`,
   `pf-statut-encart`, `pf-vigilance` et les portes couvrent tout le reste de la
   page et sont réemployés tels quels. Ces six-là n'ont pas d'équivalent, et les
   plier de force à un composant existant aurait effacé une distinction
   éditoriale — notamment entre ce qui borne la CONNAISSANCE (`pf-perimetre`) et
   ce qui borne la MÉTHODE.

   AUCUN TIRET DOUBLE DANS LES NOMS NOUVEAUX. Gutenberg échappe le tiret double en
   `\u002d\u002d` à l'intérieur des attributs de bloc, et l'omission de cet
   échappement est un défaut LATENT, invisible au rendu, qui ne se manifeste
   qu'à la réouverture dans l'éditeur — c'est exactement le défaut réparé sur
   5R le 2026-08-23. Les classes nouvelles évitent donc la forme `--` ; seules
   les classes de vigilance déjà canoniques la portent, et le contenu les écrit
   échappées.

   AUCUNE VALEUR HEXADÉCIMALE NOUVELLE. Les teintes de la planche sont
   reconstruites par `color-mix()` à partir des tokens, méthode déjà employée
   par la trame BUILD-PERSIST-2.
   ========================================================================== */

/* --- Note secondaire (planches : `.txt` réduit) ---------------------------
   Paragraphe de mise en garde ou de coût, en encre secondaire. C'est le
   niveau LE PLUS BAS de la page : il ne borne rien, il tempère. */

.pf-clinique .pf-sec__inner > .pf-tibia-note {
  max-width: 74ch;
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--pf-encre-2);
}

/* Même fonction, mais À L'INTÉRIEUR d'un encadré de vigilance. La couleur
   n'est PAS redéclarée : `.pf-vigilance p` impose `--pf-vigilance-texte`
   (6,20:1), et la remplacer par une encre plus claire ferait chuter le
   contraste sur le fond jaune. Seuls la taille et le filet changent. */
.pf-clinique .pf-vigilance .pf-tibia-precision {
  margin-block-start: var(--pf-espace-s);
  padding-block-start: var(--pf-espace-2xs);
  border-block-start: 1px dotted var(--pf-vigilance-bord);
  font-size: 0.875rem;
}

/* --- Quatre repères de structure (planches : `.struct`) -------------------
   Le `strong` de tête est le TERME, le reste est sa définition. Il passe en
   bloc : ici, contrairement aux portes de fin de page, la définition ne
   commence pas par un tiret, donc rien ne se retrouve orphelin. */

.pf-clinique .pf-sec__inner > .pf-tibia-reperes {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  max-width: 1040px;
  margin-block: var(--pf-espace-m) 0;
}

.pf-clinique .pf-tibia-reperes > .pf-tibia-repere {
  margin-block: 0;
  max-width: none;
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-tibia-repere > strong:first-child {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  color: var(--pf-encre);
}

/* --- Trois messages de charge (planches : `.charge3`) ---------------------
   La carte du milieu porte un filet HAUT en couleur de marque : c'est elle qui
   énonce le modèle dominant, et la planche la distingue ainsi. */

.pf-clinique .pf-sec__inner > .pf-tibia-charge {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
  max-width: 1040px;
  margin-block: var(--pf-espace-m) 0;
}

.pf-clinique .pf-tibia-charge > .pf-tibia-carte {
  margin-block: 0;
  max-width: none;
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
  padding: var(--pf-espace-s) var(--pf-espace-m);
}

.pf-clinique .pf-tibia-charge > .pf-tibia-carte-pivot { border-block-start: 3px solid var(--pf-marque); }

.pf-clinique .pf-tibia-carte > * { margin-block: 0; max-width: none; }

.pf-clinique .pf-tibia-carte > .pf-tibia-carte__titre {
  margin-block-end: var(--pf-espace-2xs);
  font-size: 0.9375rem;
  font-weight: 650;
  line-height: 1.35;
  color: var(--pf-encre);
}

.pf-clinique .pf-tibia-carte > p {
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Schéma « étendue / point » (planches : `.sch`) -----------------------
   DEUX FIGURES ABSTRAITES, ET RIEN D'AUTRE. Un axe et une marque : ni os
   dessiné, ni lésion, ni mécanisme, ni jambe. C'est la contrainte que la page
   énonce elle-même — le schéma « ne montre ni une lésion, ni un mécanisme, ni
   ce qui se passe dans votre os ».

   LES SVG SONT PORTEURS DE SENS, PAS DÉCORATIFS : ils reçoivent `role="img"`
   et un `aria-label` qui décrit la forme, jamais un diagnostic. Ils ne sont
   donc pas masqués aux technologies d'assistance.

   `figcaption` EN TÊTE : c'est un intitulé d'axe, pas une légende de bas de
   figure. La légende de fond, elle, est un paragraphe distinct APRÈS la
   figure — exactement comme sur la planche, et parce qu'elle porte un énoncé
   de portée, pas une description de l'image. */

.pf-clinique .pf-sec__inner > .pf-tibia-schema {
  max-width: 760px;
  margin-block: var(--pf-espace-m) 0;
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
  padding: var(--pf-espace-m);
}

.pf-clinique .pf-tibia-schema__axe {
  margin-block-end: var(--pf-espace-s);
  font-size: 0.75rem;
  font-weight: 650;
  letter-spacing: 0.1em;
  line-height: 1.4;
  text-transform: uppercase;
  text-align: center;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-tibia-schema__duo {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pf-espace-m);
}

.pf-clinique .pf-tibia-schema__cas { text-align: center; }

.pf-clinique .pf-tibia-schema__cas svg {
  display: block;
  margin-inline: auto;
  height: 210px;
  max-width: 100%;
}

.pf-clinique .pf-tibia-schema__cas b {
  display: block;
  margin-block-start: var(--pf-espace-xs);
  font-size: 0.9375rem;
  color: var(--pf-encre);
}

.pf-clinique .pf-tibia-schema__cas span {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-sec__inner > .pf-tibia-legende {
  max-width: 800px;
  margin-block-start: var(--pf-espace-s);
  padding-block-start: var(--pf-espace-2xs);
  border-block-start: 1px dotted var(--pf-filet);
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Encadré de question (planches : `.modele`) ---------------------------
   Filet TIRETÉ : il marque un aparté, un cran EN DESSOUS du verrou
   `pf-perimetre`, dont le filet est plein et l'intitulé en accent.

   L'INTITULÉ N'EST PAS EN COULEUR DE VIGILANCE. La planche emploie un jaune
   moutarde, très proche de `--pf-vigilance-texte` ; le reprendre ici ferait
   entrer la couleur RÉSERVÉE au système de vigilance dans un encadré qui n'en
   relève pas, et brouillerait la hiérarchie que D-036 §4 rend opposable.
   L'encre secondaire est retenue à sa place — 7,46:1, et aucune confusion. */

.pf-clinique .pf-sec__inner > .pf-tibia-encadre {
  max-width: 70ch;
  margin-block: var(--pf-espace-m) 0;
  border: 1px dashed var(--pf-filet);
  background-color: var(--pf-papier);
  padding: var(--pf-espace-s) var(--pf-espace-m);
}

.pf-clinique .pf-tibia-encadre > :first-child { margin-block-start: 0; }
.pf-clinique .pf-tibia-encadre > :last-child { margin-block-end: 0; }

.pf-clinique .pf-tibia-encadre > .pf-tibia-encadre__titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-tibia-encadre > p {
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.65;
}

/* --- Borne de la méthode (planches : `.pfCond`) ---------------------------
   La règle POSITIONNELLE écrite plus haut — `.pf-perimetre:has(+
   .pf-statut-encart)` — distinguait la borne de méthode du verrou faute de
   classe dans le contenu gelé de la vague 1, et son propre commentaire dit que
   la correction propre est l'ajout d'une classe. Cette page l'ajoute : elle
   n'est pas gelée, elle est écrite maintenant.

   SPÉCIFICITÉ. La règle positionnelle vaut 0,4,0. Les deux règles ci-dessous
   valent 0,4,0 elles aussi et sont écrites APRÈS : elles l'emportent par
   l'ordre, sans qu'aucune règle partagée ait été modifiée. Sur cette page,
   c'est `pf-tibia-exclusion` qui précède l'encart de bornes, et ce n'est PAS
   la borne de méthode — sans classe explicite, la couleur serait allée au
   mauvais objet. */

.pf-clinique .pf-sec__inner > .pf-perimetre.pf-tibia-borne {
  border: 0;
  border-inline-start: 3px solid var(--pf-marque);
  padding: var(--pf-espace-s) var(--pf-espace-m);
}

/* --- Borne d'exclusion de la méthode (planches : `.stop`) -----------------
   ELLE N'EMPRUNTE PAS LE COMPOSANT D'URGENCE, et c'est délibéré. « Si une
   fracture de fatigue est suspectée, la priorité est l'évaluation médicale »
   est une borne de la MÉTHODE, pas un motif d'appel aux secours : la peindre
   en rouge d'urgence placerait au même rang un renvoi vers un médecin et le
   bloc qui fait composer le 15. La hiérarchie de D-036 §4 l'interdit.

   Elle emprunte donc l'ACCENT — la couleur des liens et des intitulés de
   verrou —, sur un fond reconstruit par `color-mix()` à partir de l'accent et
   du fond de lecture. Contraste du corps : encre pleine sur teinte très
   claire. */

.pf-clinique .pf-sec__inner > .pf-perimetre.pf-tibia-exclusion {
  border: 1.5px solid var(--pf-accent);
  background-color: color-mix(in srgb, var(--pf-accent) 6%, var(--pf-fond));
}

/* --- Quatre pastilles de la méthode (planches : `.pfPts`) -----------------
   QUATRE, ET ELLES SEULES — D-063 §7. Aucune n'est un lien, aucune n'appelle
   une action, et aucune ne compare la méthode à une autre pratique. */

.pf-clinique .pf-sec__inner > .pf-tibia-pastilles {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pf-espace-2xs);
  max-width: 1040px;
  margin-block: var(--pf-espace-s) 0;
}

.pf-clinique .pf-tibia-pastilles > .pf-tibia-pastille {
  margin-block: 0;
  max-width: none;
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
  padding: var(--pf-espace-2xs) var(--pf-espace-xs);
  font-size: 0.875rem;
  line-height: 1.4;
  color: var(--pf-encre);
}

/* --- Sources à étiquettes explicites (planches : `.bib`) ------------------
   LA NUMÉROTATION EST DANS LE TEXTE, PAS DANS LA LISTE, et c'est une
   contrainte de fond, pas un choix de forme. Les quinze références de R3
   portent `[1]` à `[11]` PUIS `[N1]`, `[N2]`, `[N3]`, `[N6]` : une liste
   ordonnée les renumérotrait 1 à 15 et ferait disparaître les étiquettes `N`,
   auxquelles renvoient à la fois le corps de la page et les décisions D-063 §8
   et §9 — lesquelles rendent opposable la portée restreinte de N3 et
   l'absence de N4. La renumérotation exigerait une décision propriétaire
   distincte ; elle n'est pas faite ici.

   La famille clinique publiée emploie `<ol>` et des appels `<sup>` numériques.
   L'écart est donc RÉEL et il est signalé au rapport de construction. */

.pf-clinique .pf-sources__liste.pf-sources-etiquettes {
  list-style: none;
  padding-inline-start: 0;
}

/* --- Mobile des objets 5I -------------------------------------------------
   Les grilles se déplient AVANT d'être illisibles, pas quand elles débordent.
   Quatre repères à 390 px feraient des colonnes de 80 px ; ils passent donc en
   deux colonnes sous 1000 px, puis en une seule sous 782 px.

   LE DUO DU SCHÉMA RESTE À DEUX COLONNES à toutes les largeurs : sa lecture
   est une COMPARAISON — étendue contre point —, et l'empiler la détruirait.
   Ce sont deux formes simples ; seule leur hauteur diminue.

   Aucune règle ci-dessous ne masque de contenu ni n'en duplique : la source
   éditoriale reste unique et le DOM identique à toutes les largeurs. */

@media (max-width: 1000px) {
  .pf-clinique .pf-sec__inner > .pf-tibia-reperes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 782px) {
  .pf-clinique .pf-sec__inner > .pf-tibia-reperes { grid-template-columns: minmax(0, 1fr); }
  .pf-clinique .pf-sec__inner > .pf-tibia-charge { grid-template-columns: minmax(0, 1fr); }
  .pf-clinique .pf-sec__inner > .pf-tibia-schema { padding: var(--pf-espace-s); }
  .pf-clinique .pf-tibia-schema__cas svg { height: 170px; }
  .pf-clinique .pf-sec__inner > .pf-perimetre.pf-tibia-borne,
  .pf-clinique .pf-sec__inner > .pf-tibia-encadre { padding: var(--pf-espace-s) var(--pf-espace-m); }
}

@media (max-width: 380px) {
  .pf-clinique .pf-tibia-schema__duo { gap: var(--pf-espace-s); }
  .pf-clinique .pf-tibia-schema__cas svg { height: 150px; }
  .pf-clinique .pf-sec__inner > .pf-perimetre.pf-tibia-borne,
  .pf-clinique .pf-sec__inner > .pf-tibia-encadre { padding: var(--pf-espace-xs) var(--pf-espace-s); }
}

/* ==========================================================================
   GABARIT CLINIQUE — MOBILE
   Mesuré sur le rendu 390 des mêmes planches : hero 24/18/22, sections 20/18,
   et — point notable — l'ALTERNANCE DE FOND DISPARAÎT au profit d'un simple
   filet supérieur. Sur 354 px de large, deux aplats successifs ne se lisent
   plus comme un rythme, seulement comme des taches.

   Les trames mobiles des planches n'emploient qu'UNE seule couche : la
   seconde, à cette largeur, ne se distingue plus et ne coûte que du rendu.
   ========================================================================== */

@media (max-width: 782px) {
  .pf-clinique .pf-hero-clinique__inner { padding-block: 28px 24px; }
  .pf-clinique .pf-hero-clinique::after { display: none; }
  .pf-clinique .pf-sec { padding-block: 24px; }

  .pf-clinique .pf-vigilance--urgence,
  .pf-clinique .pf-vigilance--sans-attendre,
  .pf-clinique .pf-vigilance--consultation,
  .pf-clinique .pf-perimetre { padding: var(--pf-espace-s) var(--pf-espace-m); }

  .pf-clinique .pf-sec__inner > ul { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
  .pf-clinique .pf-sec--papier {
    background-color: transparent;
    border-block: 0;
  }

  .pf-clinique .pf-sec + .pf-sec { border-block-start: 1px solid var(--pf-filet); }
  .pf-clinique .pf-sec--sources { background-color: var(--pf-papier); }

  /* Le fil reprend le TITRE COMPLET de la page. Les planches, elles, portent un
     libellé court — « Douleur au cou » — qui n’existe pas dans le contenu gelé ;
     en fabriquer un serait un acte éditorial, hors de ce périmètre. Sous 600 px
     le fil tient donc sur une seule ligne, tronqué. Rien n’est perdu : le titre
     entier est lu juste en dessous, dans le hero. */
  .pf-clinique .pf-fil__inner { flex-wrap: nowrap; }

  .pf-clinique .pf-fil__courant {
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
}

/* 320 px — plus petite largeur tenue. Les retraits latéraux passent sous le
   jeton `m` : à 320, 24 px de chaque côté ne laisseraient que 272 px de texte. */
@media (max-width: 380px) {
  .pf-clinique .pf-fil__inner,
  .pf-clinique .pf-hero-clinique__inner,
  .pf-clinique .pf-sec__inner { padding-inline: var(--pf-espace-s); }

  .pf-clinique .pf-vigilance--urgence,
  .pf-clinique .pf-vigilance--sans-attendre,
  .pf-clinique .pf-vigilance--consultation,
  .pf-clinique .pf-perimetre { padding: var(--pf-espace-xs) var(--pf-espace-s); }
}

/* ==========================================================================
   HUB « VOS DOULEURS » — PHASE BUILD-4

   Sources, dans l'ordre d'autorité : conception 5O.1 pour l'éditorial et la
   hiérarchie · planche 5O.1 pour la composition, les filets et le rythme ·
   D-037 pour la couverture · D-034 pour les jetons · HOME V2.2 pour le contrat
   de bandes · BUILD-3 pour le fil d'Ariane et le hero sombre.

   ÉCHELLE — LE POINT LE PLUS SENSIBLE.
   La planche compose sur un corps d'environ 13 px ; l'implémentation web
   compose sur 17,5 px (D-034). Transposer les tailles au ratio produirait une
   troisième échelle typographique sur le site. Ce fichier n'en crée aucune :
   toutes les tailles employées ici EXISTENT DÉJÀ dans cette feuille, et les
   trois métriques de carte sont reprises telles quelles des portes de
   l'accueil — 1,0625rem / 0,9375rem / 0,875rem — qui décrivent exactement le
   même objet : un titre, une phrase d'intention, un renvoi.

   Un point où la planche et la conception divergent, tranché pour la
   conception : la planche rend le titre du bandeau à 19 px et celui des cartes
   à 17 px, là où le § 19.4 de la conception les donne tous deux à 17 px. Le
   bandeau se distingue donc par sa POSITION, son filet de marque et l'absence
   de bordure de carte — ce que le § 19.4 énonce précisément —, pas par sa
   taille.

   SCOPE. Toutes les règles sont préfixées par `.pf-douleurs-hub`, classe posée
   sur le `body` par `inc/pf-douleurs.php`. Aucune ne peut atteindre l'accueil
   ni une page clinique, et aucune ne dépend de leurs fichiers.
   ========================================================================== */

/* --- Fil d'Ariane ---------------------------------------------------------
   Valeurs identiques à celles du gabarit clinique : les deux fils décrivent la
   même arborescence et doivent se ressembler. Le CODE, lui, reste séparé — le
   hub ne doit dépendre d'aucun fichier gelé en BUILD-3. */

.pf-douleurs-hub .pf-hub-fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-douleurs-hub .pf-hub-fil__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-douleurs-hub .pf-hub-fil__lien { color: var(--pf-accent); text-decoration: none; }
.pf-douleurs-hub .pf-hub-fil__lien:hover { text-decoration: underline; }
.pf-douleurs-hub .pf-hub-fil__sep { color: var(--pf-filet); }
.pf-douleurs-hub .pf-hub-fil__courant { color: var(--pf-encre-2); }

/* --- Conteneur commun des bandes -----------------------------------------
   LE RETRAIT LATÉRAL EST PORTÉ PAR UN SEUL OBJET, et c'est le conteneur
   intérieur. Astra applique de son côté un retrait à tout bloc `alignfull` du
   contenu ; l'accueil le neutralise déjà par sa règle de bande — `padding:
   var(--pf-espace-2xl) 0`. Le hub n'avait pas d'équivalent, et les deux
   retraits s'additionnaient : mesuré à 320 px, le contenu du hub commençait à
   42 px quand celui de l'accueil commence à 16. Invisible en desktop, où le
   conteneur de 1200 px est plus étroit que la bande et se centre de lui-même. */

.pf-douleurs-hub .entry-content > .alignfull { padding-inline: 0; }

.pf-douleurs-hub .pf-hub__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-l);
}

/* --- Hero — trame « faisceau d'orientation » (5O § 19.3) -----------------
   Identité graphique locale du hub : UNE origine, PLUSIEURS directions, AUCUN
   croisement. C'est littéralement la fonction de la page. Elle ne figure ni
   tissu, ni fibre, ni strate, ni trajet nerveux : aucune lecture biologique
   n'en est possible, et c'est la condition que 5O pose explicitement.

   Distincte des quatre trames cliniques de BUILD-3, et pour une raison
   géométrique, pas décorative : celles-ci sont des répétitions LINÉAIRES ou
   RADIALES concentriques ; celle-ci est CONIQUE, donc divergente depuis un
   point unique. Deux familles ne peuvent pas se confondre.

   La trame est un FOND de pseudo-élément, jamais du `content` : elle ne porte
   aucune information, n'entre pas dans l'arbre d'accessibilité et ne se copie
   pas. Les deux nuances sont DÉRIVÉES des jetons par `color-mix` — aucune
   valeur hexadécimale nouvelle n'entre dans cette feuille. */

.pf-douleurs-hub .pf-hub__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-douleurs-hub .pf-hub__hero::before,
.pf-douleurs-hub .pf-hub__hero::after {
  content: "";
  position: absolute;
  pointer-events: none;
}

.pf-douleurs-hub .pf-hub__hero::before {
  inset: -10%;
  background: repeating-conic-gradient(from 196deg at 6% 116%,
    color-mix(in srgb, var(--pf-ivoire) 7%, var(--pf-strate)) 0 2.2deg,
    transparent 2.2deg 9deg);
  opacity: 0.92;
}

/* L'origine du faisceau, ancrée en bas à gauche : le point d'où tout part. */
.pf-douleurs-hub .pf-hub__hero::after {
  inset-inline-start: 0;
  inset-block-end: -14px;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 2px solid color-mix(in srgb, var(--pf-ivoire) 12%, var(--pf-strate));
  translate: -6px 0;
}

.pf-douleurs-hub .pf-hub__hero .pf-hub__inner {
  padding-block: var(--pf-espace-xl) var(--pf-espace-l);
}

.pf-douleurs-hub .pf-hub__kicker {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-marque-hover);
}

.pf-douleurs-hub .pf-hub__titre {
  margin-block: 0 var(--pf-espace-s);
  max-width: 22ch;
  color: var(--pf-ivoire);
}

.pf-douleurs-hub .pf-hub__intro {
  margin: 0;
  max-width: 64ch;
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-ivoire-2);
}

.pf-douleurs-hub .pf-hub__intro strong {
  color: var(--pf-ivoire);
  font-weight: 600;
}

/* --- Bandeau transversal (5F) — avant la grille, HORS de la grille -------
   Le placement dit le statut : ce qui est au-dessus de la grille et n'a pas sa
   forme n'est pas un élément de la grille. C'est l'ERREUR 1 nommée au § 9 de
   la conception, et la réponse retenue au § 19.4 : filet de marque à gauche,
   aucune bordure de carte.

   Il porte AUSSI un filet haut et un filet bas, que la planche ne montre pas :
   c'est le contrat de bandes gelé en HOME V2.2 — une bande papier porte ses
   deux filets, sans quoi deux bandes claires voisines fusionnent. */

.pf-douleurs-hub .pf-hub-transversal {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
  border-inline-start: 4px solid var(--pf-marque);
}

.pf-douleurs-hub .pf-hub-transversal__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-douleurs-hub .pf-hub-transversal__texte {
  margin: 0;
  max-width: 72ch;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* Renvoi du bandeau. La destination 5F n'existe pas : rendu comme un libellé,
   sans flèche et sans couleur de lien. Une flèche est une promesse de départ ;
   elle n'a pas à être faite tant qu'il n'y a nulle part où aller. */
.pf-douleurs-hub .pf-hub-transversal__renvoi {
  margin-block: var(--pf-espace-xs) 0;
  font-size: 0.875rem;
  font-weight: 600;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* --- Grille des familles -------------------------------------------------
   `auto-fit` + `minmax` : la grille absorbe 6, 7 ou 8 cartes sans être
   recomposée — c'est la propriété d'extensibilité que le § 17.4 de la
   conception attend d'elle.

   La borne basse passe de 300 px (planche) à 20rem (320 px) : le corps du site
   est plus grand que celui de la planche, et une carte de 300 px y couperait
   les phrases d'intention. Conséquence assumée à 1440 px : trois colonnes puis
   deux, au lieu de quatre puis une — un cinquième objet isolé en fin de rangée
   se lit comme un reliquat. */

.pf-douleurs-hub .pf-hub-grille__titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-douleurs-hub .pf-hub-grille {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
  gap: var(--pf-espace-s);
}

/* WordPress pose un écart de bloc par défaut sur tout enfant de groupe qui
   n'est pas le premier — `:where(.is-layout-flow) > :not(:first-child)`, à
   spécificité nulle. Dans un conteneur en flux c'est ce qu'on veut ; dans une
   GRILLE, l'écart est déjà porté par `gap`, et ce reliquat décalait chaque
   carte de 24 px vers le bas sauf la première. Mesuré au gate : rangée 1 à
   322 px de haut pour des cartes de 298 px, sommets désalignés. Les cartes
   reprennent ainsi leur hauteur commune, et le renvoi en bas de carte —
   `margin-block: auto 0` — retrouve la sienne. */
.pf-douleurs-hub .pf-hub-grille > *,
.pf-douleurs-hub .pf-hub-fond > * { margin-block-start: 0; }

/* --- Carte de famille -----------------------------------------------------
   Filet supérieur de marque, 3 px : « je suis une porte de premier rang »
   (§ 19.4). Une carte SANS destination ne le porte pas — c'est la seule
   différence visuelle entre les deux états, et elle est non textuelle. */

.pf-douleurs-hub .pf-hub-carte {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-marque);
  transition: background-color 180ms ease, border-color 180ms ease;
}

.pf-douleurs-hub .pf-hub-carte--inactive {
  border-block-start-color: var(--pf-filet);
  background-color: transparent;
}

.pf-douleurs-hub .pf-hub-carte__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* Le titre EST le lien quand une destination existe — jamais une division
   cliquable (§ 19.5). Quand elle n'existe pas, le titre reste un titre : il ne
   promet rien, et aucun `aria-disabled` n'a à compenser une fausse promesse. */
.pf-douleurs-hub .pf-hub-carte__titre a {
  color: var(--pf-accent);
  text-decoration: none;

  /* CIBLE TACTILE DU TITRE — BUILD-4.1.
     Le titre d'une carte est un lien de niveau texte : sa boîte ne fait que la
     hauteur de sa ligne, mesurée à 20 px. Le § 19.5 de 5O demande 44 px pour
     une porte. Le retrait vertical les lui donne, et la marge négative de même
     valeur les retire à la ligne : la boîte cliquable double, la composition
     ne bouge pas d'un pixel. Une marge verticale n'agrandit pas la ligne d'un
     élément en ligne, mais celle d'un `inline-block` si — c'est ce qui permet
     l'annulation exacte. */
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;

  /* MESURÉ AU POINTEUR, PAS AU RECTANGLE — BUILD-12.4R, 2026-08-21.
     Le retrait seul produit bien un rectangle de 44,1 px, et c'est exactement
     le piège déjà rencontré sur les pages cliniques : la marge négative basse
     remonte `.pf-hub-carte__texte`, qui se peint PAR-DESSUS le retrait du
     lien. `elementFromPoint` y rend le paragraphe, pas l'ancre. Zone réellement
     atteignable relevée dans cet état : 40 px — sur « Bas du dos » comme sur
     « Douleur au cou ». Le défaut est celui du composant, pas d'un contenu.

     `position: relative`, SANS aucun décalage, ne déplace rien : elle fait
     seulement peindre l'ancre après le contenu en flux. Vérifié point par
     point, tous les 0,5 px, à 1440, 390 et 320 : 44 px pleins. `z-index` ne
     change rien de plus et reste absent. Un titre sans destination n'est pas
     une ancre : cette règle ne l'atteint pas.

     CONTREPARTIE ASSUMÉE, la même que sur les pages cliniques : les 11 px du
     bas recouvrent le haut de la description. Taper là ouvre la porte, et
     aucune autre commande ne se trouve dans cette zone. */
  position: relative;
}

.pf-douleurs-hub .pf-hub-carte__titre a:hover { color: var(--pf-accent-hover); }

.pf-douleurs-hub .pf-hub-carte__titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-douleurs-hub .pf-hub-carte__texte {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* Le survol ne porte AUCUNE information : il change le fond et la bordure,
   rien n'apparaît, rien ne se déplace, tout le texte est visible au repos
   (§ 19.5). Une carte inactive ne réagit pas — elle n'a rien à offrir. */
.pf-douleurs-hub .pf-hub-carte:not(.pf-hub-carte--inactive):hover {
  background-color: var(--pf-papier);
  border-color: var(--pf-encre-2);
  border-block-start-color: var(--pf-marque);
}

/* --- Sous-portes ----------------------------------------------------------
   À l'intérieur de la carte, séparées par un filet pointillé, en retrait :
   « je suis DANS cette famille, pas à côté d'elle » (§ 19.4). Le filet
   pointillé n'est pas décoratif — un filet plein serait indistinguable de la
   bordure de la carte. */

.pf-douleurs-hub .pf-hub-carte__sous {
  margin-block: auto 0;
  padding-block-start: var(--pf-espace-xs);
  padding-inline-start: 0;
  list-style: none;
}

/* Le retrait et le filet sont portés par l'élément de liste, jamais par le
   lien : c'est ce qui permet à une sous-porte inactive — un `span` — d'occuper
   exactement la même géométrie qu'une sous-porte active. */
.pf-douleurs-hub .pf-hub-carte__sous > li {
  position: relative;
  margin-block-start: var(--pf-espace-2xs);
  padding-inline-start: var(--pf-espace-s);
  border-block-start: 1px dotted var(--pf-filet);
}

.pf-douleurs-hub .pf-hub-carte__sous > li:first-child { margin-block-start: 0; }

/* LA CIBLE TACTILE EST LE LIEN, PAS LA LIGNE QUI LE CONTIENT.
   5O § 19.5 demande 44 px pour une sous-porte ; un lien en ligne ne fait que
   la hauteur de sa ligne, soit 21 px, et agrandir l'élément de liste ne
   changerait rien — c'est l'ancre qui reçoit le doigt. Mesuré au gate 390 px :
   38 px avant correction. Le libellé inerte reçoit la même géométrie, pour que
   les deux états occupent exactement la même place. */
.pf-douleurs-hub .pf-hub-sous {
  display: block;
  padding-block: var(--pf-espace-2xs);
  min-height: 44px;
  font-size: 0.875rem;
  line-height: 1.5;
  text-decoration: none;
}

/* Le chevron est une affordance, pas une information : le libellé du lien se
   suffit à lui-même, et le § 19.5 exige que rien ne dépende du survol ni d'un
   signe. Il n'est posé QUE sur les sous-portes actives. */
.pf-douleurs-hub a.pf-hub-sous::before {
  content: "\203A";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: var(--pf-espace-2xs);
  color: var(--pf-marque);
  font-weight: 700;
}

.pf-douleurs-hub a.pf-hub-sous { color: var(--pf-accent); font-weight: 600; }
.pf-douleurs-hub a.pf-hub-sous:hover { text-decoration: underline; }

.pf-douleurs-hub a.pf-hub-sous:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

/* Sans destination : un libellé, jamais un lien. Même doctrine que la
   navigation principale depuis BUILD-1 — ni cliquable, ni focalisable, ni
   annoncé comme une porte. */
.pf-douleurs-hub span.pf-hub-sous { color: var(--pf-encre-2); }

/* --- Honnêteté de couverture ---------------------------------------------
   Bande papier, filets haut et bas, AUCUN lien : « je ne suis pas une porte »
   (§ 19.4). Ce bloc ne nomme aucune absence — le § 18.2 établit que nommer un
   sujet absent revient à l'annoncer. */

.pf-douleurs-hub .pf-hub-couverture {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

.pf-douleurs-hub .pf-hub-couverture__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-douleurs-hub .pf-hub-couverture__texte {
  margin: 0;
  max-width: 74ch;
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* --- Cadre et vigilance ---------------------------------------------------
   Le composant `.pf-vigilance` du design system est réemployé tel quel : il
   porte déjà les trois jetons de vigilance de D-034. Rien n'est redéfini ici,
   sauf la ligne d'urgence, qui n'existait pas encore comme objet. */

.pf-douleurs-hub .pf-hub-cadre .pf-vigilance {
  max-width: 76ch;
  /* Le composant porte une marge verticale propre, utile au fil du texte d'une
     page clinique. Ici la bande la porte déjà : la neutraliser évite un double
     espacement. */
  margin-block: 0;
}

.pf-douleurs-hub .pf-hub-cadre__titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-vigilance-texte);
}

/* La ligne d'urgence ne contient AUCUN critère clinique : elle ne dit pas
   quand, elle dit où. C'est la condition posée au § 21.5 pour qu'elle ne
   puisse ni diverger d'une liste existante, ni retarder une décision. */
.pf-douleurs-hub .pf-hub-cadre__urgence {
  margin-block: var(--pf-espace-s) 0;
  padding-block-start: var(--pf-espace-xs);
  border-block-start: 1px solid var(--pf-vigilance-bord);
  font-size: 0.9375rem;
  line-height: 1.6;
}

.pf-douleurs-hub .pf-hub-cadre__urgence strong { color: var(--pf-accent); }

/* --- Portes de fond -------------------------------------------------------
   Deux tuiles sobres, SANS filet de marque, en fin de page : « je suis un
   contexte, pas une orientation » (§ 19.4). */

.pf-douleurs-hub .pf-hub-fond {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pf-espace-s);
}

.pf-douleurs-hub .pf-hub-tuile {
  padding: var(--pf-espace-s);
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
}

.pf-douleurs-hub .pf-hub-tuile__titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 0.875rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--pf-encre-2);
}

/* CIBLE TACTILE DU RENVOI CONTEXTUEL — BUILD-14A.1. Ces deux tuiles nomment
   « La méthode Pression Focale » et « État des connaissances » : deux pages qui
   existent. Elles portent désormais un vrai lien, et le lien a besoin d'une
   cible, comme partout ailleurs dans cette feuille.

   Même recette que le titre de carte, avec une seule valeur différente : la
   ligne du titre de tuile fait 19,6 px et non 22, si bien que le retrait passe à
   13 px. Mesuré : 46,5 px atteignables à 1280, 390 et 320 px, aucun trou. Le
   retrait de 12 px suffirait tout juste — 44,5 px —, mais il ne laisse aucune
   marge aux arrondis ; celui de 13 en laisse deux et demi.

   `position: relative` est indispensable, et c'est mesuré : sans elle,
   `.pf-hub-tuile__texte` se peint par-dessus le bas du lien et la zone tombe à
   36,5 px. Sans le retrait du tout, elle vaut 18 px, avec jusqu'à CINQ TROUS à
   320 px.

   La tuile, elle, ne bouge pas d'un pixel : les hauteurs relevées sont
   identiques dans tous les cas de figure. Ce reste un renvoi secondaire, pas un
   appel à l'action. */
.pf-douleurs-hub .pf-hub-tuile__titre a {
  color: var(--pf-accent);
  text-decoration: none;
  display: inline-block;
  padding-block: 13px;
  margin-block: -13px;
  position: relative;
}

.pf-douleurs-hub .pf-hub-tuile__titre a:hover { color: var(--pf-accent-hover); }

.pf-douleurs-hub .pf-hub-tuile__titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-douleurs-hub .pf-hub-tuile__texte {
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Byline santé --------------------------------------------------------- */

.pf-douleurs-hub .pf-hub-byline {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire-2);
}

.pf-douleurs-hub .pf-hub-byline .pf-hub__inner {
  padding-block: var(--pf-espace-m);
}

.pf-douleurs-hub .pf-hub-byline__texte {
  margin: 0;
  max-width: 84ch;
  font-size: 0.8125rem;
  line-height: 1.7;
}

.pf-douleurs-hub .pf-hub-byline__texte strong { color: var(--pf-ivoire); }

/* --- Mobile ---------------------------------------------------------------
   Une seule colonne, et les cartes GARDENT leur phrase d'intention : c'est
   elle qui permet de reconnaître sa situation sans en connaître le nom, donc
   la fonction même de la page. */

@media (max-width: 782px) {
  .pf-douleurs-hub .pf-hub-fil__inner,
  .pf-douleurs-hub .pf-hub__inner { padding-inline: var(--pf-espace-s); }

  .pf-douleurs-hub .pf-hub__hero .pf-hub__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-douleurs-hub .pf-hub-grille { grid-template-columns: 1fr; }
  .pf-douleurs-hub .pf-hub-fond { grid-template-columns: 1fr; }
}

/* 320 px — plus petite largeur tenue. */
@media (max-width: 380px) {
  .pf-douleurs-hub .pf-hub-carte { padding: var(--pf-espace-s); }
  .pf-douleurs-hub .pf-hub-cadre .pf-vigilance { padding: var(--pf-espace-s); }
}

/* ==========================================================================
   PAGE « LA MÉTHODE » — PHASE BUILD-5

   AUTORITÉS.
   Éditorial : conception 5B du 2026-08-09, validée comme base de référence —
   arbitrage page-level, aucune décision D-XXX créée.
   Visuel : **aucune planche 5B n'existe au dépôt**. Celle de Claude Design est
   explicitement consignée « hors dépôt ». Les autorités visuelles sont donc,
   dans l'ordre : D-034, HOME V2.2, la section « Un geste précis, dosé,
   réévalué » de l'accueil, et la grammaire du site réel.

   AUCUNE TAILLE NOUVELLE. Les titres de section et les chapôs reprennent les
   déclarations exactes de l'accueil ; les cartes reprennent les trois métriques
   des portes — 1,0625rem / 0,9375rem / 0,875rem. Cette page n'introduit aucune
   échelle typographique.

   POURQUOI SON HERO EST CLAIR alors que l'accueil, le hub et les pages
   cliniques ont un hero sombre. 5B § D le demande explicitement — « hero
   d'explication (clair) » — et en donne le motif : le risque nommé de cette
   page est de répéter l'accueil. Un hero sombre en aurait fait un second
   seuil, là où sa fonction est d'expliquer. Le moment sombre arrive plus bas,
   au seuil « Ce que la science permet d'en dire », court parce que le sujet
   appartient à une autre page.

   RYTHME VERTICAL. Le site en a déjà deux : 80 px sur l'accueil, 38 px sur les
   pages cliniques. Cette page est un texte long : le rythme de l'accueil
   l'étirerait, celui des pages cliniques est plus serré que ce que sa lecture
   demande. `xl` est le cran de l'échelle D-034 entre les deux — un jeton
   existant, pas une troisième valeur inventée.
   ========================================================================== */

/* --- Fil d'Ariane ---------------------------------------------------------
   Valeurs identiques à celles du gabarit clinique et du hub : les fils
   décrivent la même arborescence et doivent se ressembler. Le code reste
   séparé. */

.pf-methode-page .pf-methode__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-methode-page .pf-methode__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-methode-page .pf-methode__fil-lien { color: var(--pf-accent); text-decoration: none; }
.pf-methode-page .pf-methode__fil-lien:hover { text-decoration: underline; }
.pf-methode-page .pf-methode__fil-sep { color: var(--pf-filet); }
.pf-methode-page .pf-methode__fil-courant { color: var(--pf-encre-2); }

/* Le retrait latéral est porté par un seul objet — même correction qu'au hub :
   Astra applique le sien à tout bloc `alignfull`, et les deux s'additionnaient. */
.pf-methode-page .entry-content > .alignfull { padding-inline: 0; }

.pf-methode-page .pf-methode__inner {
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

/* Bande papier — filets haut ET bas, contrat de bandes gelé en HOME V2.2. */
.pf-methode-page .pf-methode__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

/* Neutralisation préventive de l'écart de bloc de WordPress dans les grilles :
   `:where(.is-layout-flow) > :not(:first-child)` décale chaque enfant sauf le
   premier. Corrigé deux fois en BUILD-4 après mesure ; posé d'emblée ici. */
.pf-methode-page .pf-methode__traits > *,
.pf-methode-page .pf-methode__colonnes > * { margin-block-start: 0; }

/* --- Hero clair ----------------------------------------------------------- */

.pf-methode-page .pf-methode__hero {
  background-color: var(--pf-fond);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-methode-page .pf-methode__hero .pf-methode__inner {
  padding-block: var(--pf-espace-xl) var(--pf-espace-l);
}

.pf-methode-page .pf-methode__kicker {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-accent);
}

.pf-methode-page .pf-methode__titre {
  margin-block: 0 var(--pf-espace-m);
  max-width: 20ch;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__definition {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Titres et chapôs de section — métriques de l'accueil, à l'identique --- */

.pf-methode-page .pf-methode__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-methode-page .pf-methode__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* --- Les quatre traits du geste (5B § E2 et § G) --------------------------
   Grille à filets partagés, même grammaire que les portes de l'accueil : la
   grille porte le filet haut et le filet gauche, chaque case son filet droit
   et son filet bas. Une seule ligne entre deux traits, jamais deux accolées. */

.pf-methode-page .pf-methode__traits {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-methode-page .pf-methode__trait {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-methode-page .pf-methode__trait-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__trait-texte {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Schéma de principe (5B § E3) ----------------------------------------
   La géométrie vit dans `inc/pf-methode.php`, la présentation ici. La boucle
   de réévaluation est en pointillé et l'axe est plein : c'est ce qui distingue
   un retour d'une direction, sans qu'aucun texte ait à le dire. */

.pf-methode-page .pf-methode__schema {
  margin: var(--pf-espace-l) 0 0;
}

.pf-methode-page .pf-methode__schema-figure {
  display: block;
  width: 100%;
  max-width: 25rem;
  height: auto;
}

.pf-methode-page .pf-methode__etiquette {
  font-family: var(--pf-fonte-principale);
  font-size: 11px;
  fill: var(--pf-encre-2);
}

.pf-methode-page .pf-methode__boucle-trace,
.pf-methode-page .pf-methode__boucle-pointe { stroke-dasharray: 5 4; }

.pf-methode-page .pf-methode__palier { stroke-opacity: 0.62; }

.pf-methode-page .pf-methode__schema-legende {
  max-width: 52ch;
  margin-block-start: var(--pf-espace-s);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* --- La boucle clinique (5B § E4) ----------------------------------------
   Une liste ORDONNÉE, et pas un compteur en pseudo-élément : les quatre temps
   ont un ordre, et cet ordre doit exister dans l'arbre d'accessibilité, pas
   seulement à l'écran. Seule la couleur du marqueur est reprise. */

.pf-methode-page .pf-methode__temps {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  padding-inline-start: var(--pf-espace-m);
}

.pf-methode-page .pf-methode__temps > li {
  margin-block-end: var(--pf-espace-s);
  padding-inline-start: var(--pf-espace-2xs);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__temps > li::marker {
  color: var(--pf-marque);
  font-weight: 600;
}

/* --- Questions et réponses (5B § E5) -------------------------------------- */

.pf-methode-page .pf-methode__question {
  margin-block: var(--pf-espace-l) var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__question:first-of-type { margin-block-start: 0; }

.pf-methode-page .pf-methode__reponse {
  max-width: var(--pf-largeur-lecture);
  margin: 0;
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* --- Ce que l'examen peut orienter (5B § E6) -----------------------------
   La citation de marque revient ici UNE SEULE FOIS sur le site, et expliquée :
   c'est la fonction que 5B lui donne sur cette page. Le filet de marque à
   gauche la désigne comme une citation, pas comme un encadré de statut. */

.pf-methode-page .pf-methode__citation {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-m);
  border-inline-start: 3px solid var(--pf-marque);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__colonnes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pf-espace-m);
  margin-block: var(--pf-espace-l);
}

.pf-methode-page .pf-methode__colonne {
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
}

.pf-methode-page .pf-methode__colonne-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.9375rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pf-encre-2);
}

.pf-methode-page .pf-methode__colonne ul {
  margin: 0;
  padding-inline-start: var(--pf-espace-m);
}

.pf-methode-page .pf-methode__colonne li {
  margin-block-end: var(--pf-espace-2xs);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre);
}

.pf-methode-page .pf-methode__colonne li:last-child { margin-block-end: 0; }

/* --- Seuil « Ce que la science permet d'en dire » (5B § E7) ---------------
   Court, sombre, et SANS décor. 5B le veut « écho discret du langage de la
   Home sans reproduire son reveal » : la stratification du seuil de l'accueil
   n'est donc pas reprise. Le sujet appartient à l'état des connaissances ;
   cette section le situe et s'arrête. */

.pf-methode-page .pf-methode__seuil {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-methode-page .pf-methode__seuil .pf-methode__inner {
  padding-block: var(--pf-espace-xl);
}

.pf-methode-page .pf-methode__seuil-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-ivoire);
}

.pf-methode-page .pf-methode__seuil-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-ivoire-2);
}

/* --- Byline santé --------------------------------------------------------- */

.pf-methode-page .pf-methode__byline {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire-2);
}

.pf-methode-page .pf-methode__byline .pf-methode__inner {
  padding-block: var(--pf-espace-m);
}

.pf-methode-page .pf-methode__byline-texte {
  max-width: 84ch;
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.7;
}

.pf-methode-page .pf-methode__byline-texte strong { color: var(--pf-ivoire); }

/* --- Mobile ---------------------------------------------------------------
   Les deux grilles passent à une colonne, et les traits GARDENT leur phrase :
   c'est elle qui rend le geste concret, donc la fonction de la section. */

@media (max-width: 900px) {
  .pf-methode-page .pf-methode__colonnes { grid-template-columns: 1fr; }
}

@media (max-width: 782px) {
  .pf-methode-page .pf-methode__fil-inner,
  .pf-methode-page .pf-methode__inner { padding-inline: var(--pf-espace-s); }

  .pf-methode-page .pf-methode__inner { padding-block: var(--pf-espace-l); }

  .pf-methode-page .pf-methode__hero .pf-methode__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-methode-page .pf-methode__traits { grid-template-columns: 1fr; }
}

@media (max-width: 380px) {
  .pf-methode-page .pf-methode__trait,
  .pf-methode-page .pf-methode__colonne { padding: var(--pf-espace-s); }
}

/* ==========================================================================
   PAGE « RECHERCHE & CONNAISSANCES » — PHASE BUILD-6

   AUTORITÉS.
   Éditorial et scientifique : conception 5C du 2026-08-09, close comme base de
   référence — passe 5C.2 et micro-passe documentaire incluses.
   Architecture : D-019 (libellé de navigation) · D-020 (hub à cinq niveaux,
   niveau 4 déclarable vide et daté).
   Visuel : **aucune planche 5C n'existe au dépôt** — celle de Claude Design est
   consignée « hors dépôt » par le contrôle de périmètre de 5C lui-même. Les
   autorités visuelles sont donc, dans l'ordre : D-034 (jetons), 4B § 9 (« en-tête
   sombre validé comme seuil visuel localisé, lecture longue sur clair » ;
   « carotte stratigraphique et strate 4 vide/datée conservées »), 4A § 11
   (garde-fou des strates), HOME V2.2 pour le contrat de bandes, BUILD-4 pour le
   hero sombre et les cartes, BUILD-5 pour le rythme de lecture longue.

   AUCUNE ÉCHELLE NOUVELLE. Toutes les tailles employées ici existent déjà dans
   cette feuille. Les titres de section et les chapôs reprennent les
   déclarations de la page Méthode ; les cartes reprennent les trois métriques
   des portes de l'accueil — 1,0625rem / 0,9375rem / 0,875rem.

   OÙ S'ARRÊTE LE SOMBRE, ET POURQUOI.
   5C § D écrit « seuil sombre au hero et jusqu'à la carotte, puis retour au
   clair pour toute la lecture longue », et son § E donne « strate/papier » pour
   la section de la carotte : la phrase admet deux lectures. Le seuil s'arrête
   donc À la carotte, pas après elle — hero et règle de lecture sur strate, la
   carotte sur papier. Motif décisif, et il est graphique : les cinq trames de
   la carotte sont définies sur `--pf-encre`, sur fond clair, depuis la
   mini-carotte de l'accueil. Les inverser pour un fond sombre créerait un
   SECOND vocabulaire graphique pour le MÊME objet — exactement ce que la
   parenté des deux carottes doit éviter. 4B § 9 tranche dans le même sens :
   « en-tête sombre = seuil visuel LOCALISÉ, lecture longue sur clair ».

   SCOPE. Toutes les règles sont préfixées par `.pf-recherche-page`, classe
   posée sur le `body` par `inc/pf-recherche.php`. Aucune ne peut atteindre
   l'accueil, le hub, la page Méthode ni une page clinique.
   ========================================================================== */

/* --- Fil d'Ariane ---------------------------------------------------------
   Valeurs identiques à celles du gabarit clinique, du hub et de la page
   Méthode : les quatre fils décrivent la même arborescence et doivent se
   ressembler. Le code, lui, reste séparé. */

.pf-recherche-page .pf-recherche__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-recherche-page .pf-recherche__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-recherche-page .pf-recherche__fil-lien { color: var(--pf-accent); text-decoration: none; }
.pf-recherche-page .pf-recherche__fil-lien:hover { text-decoration: underline; }
.pf-recherche-page .pf-recherche__fil-sep { color: var(--pf-filet); }
.pf-recherche-page .pf-recherche__fil-courant { color: var(--pf-encre-2); }

/* Le retrait latéral est porté par un seul objet — même correction qu'au hub
   et à la page Méthode : Astra applique le sien à tout bloc `alignfull`, et
   les deux s'additionnaient. */
.pf-recherche-page .entry-content > .alignfull { padding-inline: 0; }

.pf-recherche-page .pf-recherche__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

/* Bande papier — filets haut ET bas, contrat de bandes gelé en HOME V2.2. */
.pf-recherche-page .pf-recherche__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

/* Neutralisation préventive de l'écart de bloc de WordPress dans les grilles :
   `:where(.is-layout-flow) > :not(:first-child)` décale chaque enfant sauf le
   premier. Corrigé deux fois par la mesure en BUILD-4 ; posé d'emblée ici. */
.pf-recherche-page .pf-recherche__cartes > *,
.pf-recherche-page .pf-recherche__portes > *,
.pf-recherche-page .pf-recherche__familles > *,
.pf-recherche-page .pf-recherche__hypotheses > * { margin-block-start: 0; }

/* --- Seuil sombre : hero -------------------------------------------------
   MOTIF PLEIN CONTENEUR — BUILD-6.2, sur arbitrage.

   HISTORIQUE ASSUMÉ, PARCE QU'IL EXPLIQUE LA FORME ACTUELLE. BUILD-6 laissait
   ce hero nu. BUILD-6.1 y a posé cinq lignes cantonnées à droite : le constat
   propriétaire est qu'elles se lisaient comme un décor secondaire posé à côté du
   texte, et que la parenté avec les pages cliniques en souffrait. BUILD-6.2
   change de principe, pas d'intensité : le motif OCCUPE TOUT LE HERO, comme les
   quatre trames cliniques, et c'est un masque — non un cantonnement — qui le
   fait reculer là où le texte se lit.

   POURQUOI CE N'EST PAS UNE FIGURE, ET DONC POURQUOI 5C § O N'EST PAS ENFREINT :
   ce que 5C refuse est une figure scientifique employée comme caution — imagerie
   cellulaire, schéma de mécanisme, diagramme. Ce motif ne représente rien : ni
   grandeur, ni échelle, ni relation. La carotte reste le seul objet porteur de
   sens de la page.

   IDENTITÉ PROPRE, ET DISTINCTE DES QUATRE TRAMES CLINIQUES.
   Les quatre trames cliniques sont des `repeating-*-gradient` : une géométrie
   répétée à pas constant, radiale pour 5P, linéaire pour 5Q/5R/5S. Celle-ci
   n'est pas une répétition du tout — c'est un ENSEMBLE DE LIGNES NOMMÉES, dix
   couches `no-repeat`, chacune avec sa longueur, son inclinaison, sa position et
   son intensité. Aucune ne peut être déduite d'une autre.

   Aucune parenté possible avec l'« arc de contrainte » de 5P : celui-ci produit
   des arcs concentriques autour d'un centre hors cadre ; ici il n'y a aucun arc,
   aucun centre, et aucune convergence — les deux obliques sont d'inclinaisons
   opposées et ne se rencontrent pas, leurs plages horizontales étant disjointes.

   CE QUE LE MOTIF ÉVOQUE : des niveaux qui ne s'alignent pas, des lignes de
   lecture de longueurs inégales, une continuité rompue. Neuf lignes dont une
   interrompue. Rien qui puisse se lire comme un graphique : aucune graduation,
   aucun repère, aucune flèche, aucun axe, aucune grille — les écarts verticaux
   entre lignes valent 28, 62, 30, 27, 39, 29, 43 et 107 px, série volontairement
   inégale, sans pas commun.

   LE TEXTE RESTE PRIORITAIRE, ET CE N'EST PAS L'AFFAIRE DES LIGNES.
   Le motif traverse bel et bien la zone de texte — la consigne l'autorise — mais
   un MASQUE ELLIPTIQUE l'y ramène à 16 % de sa valeur. Le masque est un trou
   souple centré sur le bloc de texte, pas un dégradé de gauche à droite : au
   bord supérieur, au bord inférieur ET au bord droit le motif retrouve sa pleine
   valeur, parce que ces trois zones sont à égale distance du centre du trou.
   C'est ce qui rend la variation organique plutôt que mécanique.

   TROIS JETONS, PAS UN DE PLUS : `--pf-marque` pour les lignes, `--pf-strate`
   pour le fond. Aucune valeur hexadécimale n'est écrite ici — contrairement aux
   trames cliniques, qui portent les leurs en dur. */

.pf-recherche-page .pf-recherche__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

/* Les neuf lignes, en dix couches — la cinquième est interrompue, donc portée
   par deux segments alignés sur la même inclinaison.

   Chaque couche dessine UNE ligne : le dégradé pose une bande de 1 px au centre
   de sa boîte, et la boîte ne se répète pas. La TAILLE de la couche est donc la
   longueur de la ligne, et sa POSITION est l'endroit où elle passe. Les dix
   plages horizontales, mises ensemble, couvrent le hero de bord à bord.

   Ordre de déclaration = ordre d'empilement, sans conséquence ici : aucune ligne
   n'en recouvre une autre sur plus d'un pixel. */
.pf-recherche-page .pf-recherche__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-repeat: no-repeat;

  background-image:
    /* L1 · palier long ancré à gauche, presque horizontal */
    linear-gradient(178.6deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L2 · palier court, juste sous le précédent — une paire, pas un pas */
    linear-gradient(181.2deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L3 · la plus longue, traverse le hero en son milieu */
    linear-gradient(179.2deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 18%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L4 · palier ancré à droite, le second plus affirmé */
    linear-gradient(181.6deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 26%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L5a · palier INTERROMPU, premier segment */
    linear-gradient(178.8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 16%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L5b · palier INTERROMPU, second segment — même inclinaison */
    linear-gradient(178.8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 16%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L6 · le plus net des paliers, à droite, hors du trou du masque */
    linear-gradient(182.4deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 30%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L7 · palier très long et très faible, bas du hero */
    linear-gradient(179.6deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 12%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L8 · première oblique, montante, au centre */
    linear-gradient(101deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 20%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* L9 · seconde oblique, DESCENDANTE et ailleurs — aucune rencontre avec L8 */
    linear-gradient(76deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 15%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px));

  background-size:
    620px 110px,
    380px 90px,
    900px 130px,
    560px 100px,
    300px 80px,
    200px 80px,
    340px 90px,
    1000px 120px,
    300px 130px,
    340px 150px;

  background-position:
    left 0 top 38px,
    left 300px top 76px,
    left 240px top 148px,
    right 0 top 190px,
    left 60px top 268px,
    left 430px top 272px,
    right 60px top 306px,
    left 120px top 398px,
    left 520px top 214px,
    right 190px top 108px;

  /* LE TROU SOUPLE. Centré à 26 % / 50 %, c'est-à-dire sur le bloc de texte, et
     non sur le hero. Les quatre paliers d'alpha font reculer le motif à 16 % de
     sa valeur au cœur du texte, puis le rendent progressivement, jusqu'à 100 %
     au-delà de l'ellipse.

     LES RAYONS SONT UN RÉGLAGE, PAS UNE FORMALITÉ, et ils ont été corrigés après
     calcul. Une première version portait 118 % / 108 % : l'ellipse était alors
     si vaste que le bord droit du hero — la zone vide, celle qui doit être « un
     peu plus lisible » — restait à 71 % du masque, et la ligne la plus nette de
     la page n'y rendait que 18 % au lieu de 30. 72 % / 85 % ramènent la fin du
     dégradé DANS la boîte : le bord droit atteint 100 %, la ligne L6 rend 28 %,
     et le cœur du texte reste à 16 %.

     CE N'EST PAS UN DÉGRADÉ GAUCHE-DROITE, et c'est vérifiable sur ces mêmes
     rayons : les deux coins gauches sont à 79 % du masque, le bord haut à 67 %,
     le bord droit à 100 %. Le motif est donc faible AU CENTRE GAUCHE et fort
     partout ailleurs — un trou, pas une pente. C'est ce que la consigne demande
     quand elle écarte la lecture « gauche faible → droite forte ». */
  -webkit-mask-image: radial-gradient(72% 85% at 26% 50%,
    rgba(0, 0, 0, 0.16) 0%,
    rgba(0, 0, 0, 0.30) 26%,
    rgba(0, 0, 0, 0.62) 55%,
    rgba(0, 0, 0, 0.92) 80%,
    #000 100%);
  mask-image: radial-gradient(72% 85% at 26% 50%,
    rgba(0, 0, 0, 0.16) 0%,
    rgba(0, 0, 0, 0.30) 26%,
    rgba(0, 0, 0, 0.62) 55%,
    rgba(0, 0, 0, 0.92) 80%,
    #000 100%);
}

.pf-recherche-page .pf-recherche__hero .pf-recherche__inner {
  padding-block: var(--pf-espace-xl) var(--pf-espace-l);
}

.pf-recherche-page .pf-recherche__kicker {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-marque-hover);
}

.pf-recherche-page .pf-recherche__titre {
  margin-block: 0 var(--pf-espace-m);
  max-width: 20ch;
  color: var(--pf-ivoire);
}

/* La promesse éditoriale : une phrase, en éditoriale, à la mesure de lecture.
   5C.2 a supprimé la seconde phrase, défensive — « la posture n'a pas besoin
   d'être plaidée ». */
.pf-recherche-page .pf-recherche__promesse {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

/* L'état daté. Un cadre, pas une pastille de certification : le filet est
   neutre, il n'emprunte ni à la marque ni au système de vigilance. */
.pf-recherche-page .pf-recherche__etat {
  display: inline-block;
  margin: 0;
  padding: var(--pf-espace-2xs) var(--pf-espace-s);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-ivoire);
}

/* --- Seuil sombre : la règle de lecture ----------------------------------
   Dernier élément sombre de la page. Elle est posée AVANT tout contenu
   classé, parce que c'est sa fonction : donner la clé avant la matière. */

/* AUCUN MOTIF ICI — BUILD-6.2.
   BUILD-6.1 avait posé sur ce bloc un filet de jonction de marque interrompu et
   un rappel graphique. Les deux sont RETIRÉS : l'arbitrage fait du motif
   l'identité du HERO, pas de toute la zone sombre. Ce bloc redevient ce qu'il
   était en BUILD-6 — un aplat sombre sobre, distingué du hero par sa valeur
   d'élévation et par un filet neutre.

   Le filet neutre est donc RESTAURÉ à l'identique : `--pf-filet-sombre`, 1 px,
   pleine largeur. C'est la « séparation structurelle normale » que la consigne
   demande de conserver, et rien de plus. */
.pf-recherche-page .pf-recherche__regle {
  background-color: var(--pf-strate-2);
  color: var(--pf-ivoire);
  border-block-start: 1px solid var(--pf-filet-sombre);
}

.pf-recherche-page .pf-recherche__regle .pf-recherche__inner {
  padding-block: var(--pf-espace-l);
}

.pf-recherche-page .pf-recherche__regle-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-ivoire);
}

.pf-recherche-page .pf-recherche__regle-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-s);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-ivoire);
}

.pf-recherche-page .pf-recherche__regle-texte:last-child { margin-block-end: 0; }
.pf-recherche-page .pf-recherche__regle-texte strong { font-weight: 600; }

/* --- Titres et chapôs de section — métriques de la page Méthode ---------- */

.pf-recherche-page .pf-recherche__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
  /* Les cinq niveaux sont des cibles d'ancre : le titre visé ne doit pas
     arriver collé au bord haut de la fenêtre. */
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-recherche-page .pf-recherche__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__sous-titre {
  margin-block: var(--pf-espace-l) var(--pf-espace-2xs);
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* ==========================================================================
   LA CAROTTE STRATIGRAPHIQUE (5C § P · D-033 · 4A § 11)

   CINQ TRAMES QUALITATIVEMENT DISTINCTES, JAMAIS UN DÉGRADÉ DE DENSITÉ.
   C'est le garde-fou littéral de 5C § P et de 4A § 11 : un dégradé continu
   suggérerait qu'une hypothèse est « presque » une preuve, et que 1 + 2 + 3
   s'accumulent vers le 4.

   LES CINQ TRAITEMENTS ET LES SIX OPACITÉS SONT CEUX DE LA MINI-CAROTTE DE
   L'ACCUEIL, repris valeur par valeur — aplat 19 %, hachures serrées 55 %,
   semis 54 %, cadre en pointillé 72 %, frontière 80 %, hachures lâches 40 %.
   Les métriques de trame aussi : pas de 6 px et trait de 2,6 px, pavé de 9 px
   et rayon de 1,3 px, pas de 15 px et trait de 1,3 px.

   POURQUOI DES DÉGRADÉS CSS ICI, LÀ OÙ L'ACCUEIL EMPLOIE DES `pattern` SVG.
   Ce n'est pas un changement de grammaire, c'est un changement de contrainte.
   La mini-carotte est un dessin de largeur fixe ; celle-ci est une grille dont
   chaque bande doit s'aligner EXACTEMENT sur la hauteur de son texte, à toutes
   les largeurs. Un SVG à `viewBox` fixe étirerait ses trames avec sa boîte —
   le pas de 6 px ne vaudrait plus 6 px. Un pavé CSS garde sa taille réelle
   quelle que soit la bande qu'il remplit. Le rendu visé est le même ; c'est la
   technique qui suit l'objet.

   AUCUNE COULEUR NOUVELLE : les cinq trames dérivent toutes de `--pf-encre`
   par `color-mix`, comme les voiles du seuil de l'accueil.
   ========================================================================== */

.pf-recherche-page .pf-recherche__carotte {
  margin: 0;
  max-width: 62rem;
}

.pf-recherche-page .pf-recherche__strates {
  display: grid;
  grid-template-columns: 108px minmax(0, 1fr);
  column-gap: var(--pf-espace-m);
  row-gap: 10px;
  align-items: stretch;
}

.pf-recherche-page .pf-recherche__strate {
  display: grid;
  grid-column: 1 / -1;
  grid-template-columns: subgrid;
}

/* Repli pour les moteurs sans `subgrid` : la strate redevient une grille
   ordinaire de mêmes proportions. Le rendu est identique ; seule la source de
   la colonne change. */
@supports not (grid-template-columns: subgrid) {
  .pf-recherche-page .pf-recherche__strate {
    grid-template-columns: 108px minmax(0, 1fr);
  }
}

.pf-recherche-page .pf-recherche__trame {
  display: block;
  min-height: 72px;
  background-repeat: repeat;
}

.pf-recherche-page .pf-recherche__strate-texte {
  align-self: center;
  padding-block: var(--pf-espace-3xs);
}

.pf-recherche-page .pf-recherche__strate-titre {
  display: flex;
  align-items: baseline;
  gap: var(--pf-espace-2xs);
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* Le numéro est une aide de repérage, pas une note : il reste en encre
   secondaire et en petite taille. `aria-hidden` dans le balisage — la
   numérotation est déjà portée par le titre de section correspondant. */
.pf-recherche-page .pf-recherche__strate-num {
  flex: 0 0 auto;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--pf-encre-2);
  font-variant-numeric: tabular-nums;
}

/* Le titre EST le lien — jamais une bande cliquable. Même doctrine qu'au hub,
   et même solution pour la cible tactile : retrait vertical de 11 px, marge
   négative de même valeur. La boîte double, la composition ne bouge pas. */
.pf-recherche-page .pf-recherche__strate-lien {
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-recherche-page .pf-recherche__strate-lien:hover {
  color: var(--pf-accent-hover);
  text-decoration: underline;
}

.pf-recherche-page .pf-recherche__strate-lien:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-recherche-page .pf-recherche__strate-ligne {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Strate 1 — aplat ----------------------------------------------------- */
.pf-recherche-page .pf-recherche__strate--1 .pf-recherche__trame {
  background-color: color-mix(in srgb, var(--pf-encre) 19%, transparent);
}

/* --- Strate 2 — hachures serrées, pas de 6 px, trait de 2,6 px, 45° ------- */
.pf-recherche-page .pf-recherche__strate--2 .pf-recherche__trame {
  background-image: repeating-linear-gradient(45deg,
    color-mix(in srgb, var(--pf-encre) 55%, transparent) 0 2.6px,
    transparent 2.6px 6px);
}

/* --- Strate 3 — semis de points, pavé de 9 px, rayon de 1,3 px ------------ */
.pf-recherche-page .pf-recherche__strate--3 .pf-recherche__trame {
  background-image:
    radial-gradient(circle 1.3px at 2.2px 2.2px,
      color-mix(in srgb, var(--pf-encre) 54%, transparent) 99%, transparent 100%),
    radial-gradient(circle 1.3px at 6.7px 6.7px,
      color-mix(in srgb, var(--pf-encre) 54%, transparent) 99%, transparent 100%);
  background-size: 9px 9px;
}

/* --- Strate 4 — cadre VIDE en pointillé -----------------------------------
   Le vide est l'information. Aucune trame, aucun fond : un cadre, et rien
   dedans. C'est le seul traitement de la carotte qui ne remplit pas sa bande,
   et c'est ce qui le rend immédiatement lisible comme une absence. */
.pf-recherche-page .pf-recherche__strate--4 .pf-recherche__trame {
  background-image: none;
  border: 2px dashed color-mix(in srgb, var(--pf-encre) 72%, transparent);
}

/* --- Strate 5 — hachures lâches, bord inférieur OUVERT --------------------
   L'inconnu n'est pas une strate pleine : la trame s'efface vers le bas au
   lieu de s'arrêter sur un bord. Le fondu reprend celui du masque de la
   mini-carotte — opaque jusqu'à la moitié, transparent au bord. */
.pf-recherche-page .pf-recherche__strate--5 .pf-recherche__trame {
  background-image: repeating-linear-gradient(45deg,
    color-mix(in srgb, var(--pf-encre) 40%, transparent) 0 1.3px,
    transparent 1.3px 15px);
  -webkit-mask-image: linear-gradient(to bottom, #000 50%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 50%, transparent 100%);
}

/* --- La frontière ---------------------------------------------------------
   Elle TRAVERSE l'objet entier, colonne de trame comprise : ce n'est pas un
   séparateur de lignes, c'est un arrêt. Double filet — « 1+2+3 n'additionnent
   jamais un 4 » —, écarté de 5 px comme sur la mini-carotte.

   2 px, ET NON 1,5 px COMME LE TRAIT DU SVG DE L'ACCUEIL. Mesuré : un
   `border-width` de 1,5 px est ramené à 1 px par le moteur, qui arrondit les
   bordures à un nombre entier de pixels physiques, là où un `stroke` SVG rend
   ses 1,5 px sans arrondi. À valeur déclarée égale, la frontière serait donc
   PLUS FINE que son homologue de l'accueil. 2 px est la valeur entière la plus
   proche par le haut, et la consigne demande une frontière franchement
   perceptible. Même raison pour le cadre vide de la strate 4. */

.pf-recherche-page .pf-recherche__frontiere {
  grid-column: 1 / -1;
  margin-block: var(--pf-espace-s);
}

.pf-recherche-page .pf-recherche__frontiere-filets {
  display: block;
  height: 6.5px;
  border-block: 2px solid color-mix(in srgb, var(--pf-encre) 80%, transparent);
}

.pf-recherche-page .pf-recherche__frontiere-libelle {
  margin-block: var(--pf-espace-2xs) 0;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__frontiere-note {
  margin-block: var(--pf-espace-3xs) 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__carotte-legende {
  margin-block-start: var(--pf-espace-m);
  max-width: var(--pf-largeur-lecture);
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   LES CINQ NIVEAUX
   ========================================================================== */

/* --- Familles du niveau 1 et hypothèses du niveau 2 -----------------------
   Un filet gauche, pas une carte : ces blocs sont du texte long, pas des
   objets à survoler. Le filet suffit à les rattacher les uns aux autres. */

.pf-recherche-page .pf-recherche__familles,
.pf-recherche-page .pf-recherche__hypotheses {
  display: grid;
  gap: var(--pf-espace-l);
  max-width: var(--pf-largeur-lecture);
}

.pf-recherche-page .pf-recherche__famille {
  padding-inline-start: var(--pf-espace-m);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-recherche-page .pf-recherche__famille-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-recherche-page .pf-recherche__famille p {
  max-width: none;
  margin-block: 0 var(--pf-espace-s);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* La ligne de source, compacte, sous filet — système 5C § Q. */
.pf-recherche-page .pf-recherche__source {
  margin-block: var(--pf-espace-s) 0;
  padding-block-start: var(--pf-espace-2xs);
  border-block-start: 1px solid var(--pf-filet);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
  overflow-wrap: anywhere;
}

.pf-recherche-page .pf-recherche__famille p.pf-recherche__source { margin-block-end: 0; }

/* Le porteur `.pf-statut` respire de 36 px de part et d'autre lorsqu'il est
   isolé dans une page clinique. Ici il y en a neuf, chacun au milieu d'un bloc
   déjà borné par son filet gauche : la marge du composant se cumulait à celle
   du bloc et étirait la lecture. Ramenée au cran `s` DANS ces blocs seulement —
   le composant garde ses valeurs partout ailleurs. */
.pf-recherche-page .pf-recherche__famille .pf-statut { margin-block: var(--pf-espace-s); }

/* --- Niveau 4 — l'état daté ----------------------------------------------
   Le cadre en pointillé de la carotte, à l'échelle d'un bloc de texte : le
   lecteur qui redescend reconnaît la strate vide. Aucune couleur d'alerte —
   un niveau vide n'est pas un problème, c'est un état. */

.pf-recherche-page .pf-recherche__vide {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l);
  padding: var(--pf-espace-l);
  border: 2px dashed color-mix(in srgb, var(--pf-encre) 72%, transparent);
  border-radius: var(--pf-rayon-m);
}

.pf-recherche-page .pf-recherche__vide > :first-child { margin-block-start: 0; }
.pf-recherche-page .pf-recherche__vide > :last-child { margin-block-end: 0; }

.pf-recherche-page .pf-recherche__vide-etat {
  margin-block: 0 var(--pf-espace-s);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.5;
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__vide p {
  max-width: none;
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__vide-date {
  margin-block: var(--pf-espace-s) 0;
  font-size: 0.875rem;
  color: var(--pf-encre-2);
}

/* --- Niveau 5 — les huit questions ouvertes -------------------------------
   Deux colonnes, et non quatre : 5C.2 le note explicitement — les cartes
   portent désormais deux phrases au lieu d'une. La seconde phrase, qui pose la
   question scientifique, est dans l'encre secondaire, SANS sous-titre ajouté :
   les deux phrases restent un seul texte, et restent solidaires. */

.pf-recherche-page .pf-recherche__cartes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-recherche-page .pf-recherche__carte {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-recherche-page .pf-recherche__carte-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__carte-texte {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   APPROFONDIR · SOURCES · SORTIE
   ========================================================================== */

/* --- Les trois portes -----------------------------------------------------
   AUCUNE N'A DE DESTINATION : les chapitres micro, macro et « travaux en
   cours » n'existent pas sur ce socle. Elles sont donc des cartes
   ÉDITORIALES — pas des liens désactivés.

   C'est la doctrine déjà tranchée au hub « Vos douleurs », reprise mot pour
   mot : « quand la destination n'existe pas, le titre reste un titre : il ne
   promet rien, et aucun `aria-disabled` n'a à compenser une fausse promesse ».
   Rien n'est cliquable, rien ne réagit au survol, aucun libellé n'annonce une
   disponibilité. */

.pf-recherche-page .pf-recherche__portes {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-recherche-page .pf-recherche__porte {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-filet);
}

.pf-recherche-page .pf-recherche__porte-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__porte-texte {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Bibliographie --------------------------------------------------------
   Le composant transversal `.pf-sources` porte déjà la liste ; ce qui suit ne
   règle que ce qu'il ne prévoit pas : la ligne de limite d'extrapolation, qui
   n'existe sur aucune autre page du site. */

.pf-recherche-page .pf-recherche__biblio .pf-recherche__limite {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__methode {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-recherche-page .pf-recherche__methode > :first-child { margin-block-start: 0; }
.pf-recherche-page .pf-recherche__methode > :last-child { margin-block-end: 0; }

.pf-recherche-page .pf-recherche__methode-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__methode p {
  max-width: none;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__methode p:last-child { margin-block-end: 0; }

/* --- Sortie légère et signature ------------------------------------------
   « Un lien, pas une campagne » (5C § E, section 7). La signature ne peut pas
   s'appeler `pf-byline` : cette chaîne est le marqueur de détection du gabarit
   clinique, et la poser ici ferait basculer la page dans ce gabarit. Elle en
   reprend en revanche les valeurs exactes — c'est le même objet. */

.pf-recherche-page .pf-recherche__sortie {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-recherche-page .pf-recherche__signature {
  border-block: 1px solid var(--pf-filet);
  padding-block: var(--pf-espace-xs);
  max-width: var(--pf-largeur-lecture);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__signature > :first-child { margin-block-start: 0; }
.pf-recherche-page .pf-recherche__signature > :last-child { margin-block-end: 0; }

.pf-recherche-page .pf-recherche__signature p {
  max-width: none;
  margin-block: 0 var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-recherche-page .pf-recherche__signature-auteur {
  color: var(--pf-encre);
  font-weight: 600;
}

/* --- Mobile ---------------------------------------------------------------
   La carotte reste VERTICALE ET COMPLÈTE — 5C § P l'exige. Ce qui change est
   la largeur de la colonne de trame, pas la structure : les cinq bandes, la
   frontière et le cadre vide sont tous présents, dans le même ordre. */

@media (max-width: 900px) {
  .pf-recherche-page .pf-recherche__portes { grid-template-columns: 1fr; }
}

@media (max-width: 782px) {
  .pf-recherche-page .pf-recherche__fil-inner,
  .pf-recherche-page .pf-recherche__inner { padding-inline: var(--pf-espace-s); }

  .pf-recherche-page .pf-recherche__inner { padding-block: var(--pf-espace-l); }

  .pf-recherche-page .pf-recherche__hero .pf-recherche__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-recherche-page .pf-recherche__cartes { grid-template-columns: 1fr; }

  .pf-recherche-page .pf-recherche__strates {
    grid-template-columns: 60px minmax(0, 1fr);
    column-gap: var(--pf-espace-s);
  }

  @supports not (grid-template-columns: subgrid) {
    .pf-recherche-page .pf-recherche__strate {
      grid-template-columns: 60px minmax(0, 1fr);
    }
  }

  .pf-recherche-page .pf-recherche__trame { min-height: 84px; }

  /* --- Motif du hero, version de poche — BUILD-6.2 -----------------------
     LE PRINCIPE PLEIN CONTENEUR EST CONSERVÉ : les quatre lignes couvrent
     encore le hero de bord à bord. Ce qui change est la densité — neuf lignes
     dans 1 440 px et quatre dans 390 px donnent la même respiration, alors que
     neuf y produiraient des rayures, ce que la consigne écarte nommément.

     Deux réductions, pas une : le NOMBRE de lignes, et leur INTENSITÉ, ramenée
     à 8-12 % contre 12-30 % en desktop. Et le trou du masque est élargi et
     approfondi — 10 % au cœur contre 16 % —, parce qu'à cette largeur le texte
     occupe toute la boîte : il n'y a plus de zone vide où le motif pourrait
     être laissé pleinement lisible. */
  .pf-recherche-page .pf-recherche__hero::before {
    background-image:
      /* M1 · palier ancré à gauche, haut */
      linear-gradient(178.6deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 12%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      /* M2 · palier ancré à droite, médian */
      linear-gradient(181.4deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 9%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      /* M3 · le plus long, bas */
      linear-gradient(179.4deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 11%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      /* M4 · l'unique oblique conservée, courte, en bas à droite */
      linear-gradient(100deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 8%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 300px 70px, 240px 60px, 340px 80px, 180px 100px;
    background-position: left 0 top 32px, right 0 top 168px, left 30px top 300px, right 20px top 372px;

    -webkit-mask-image: radial-gradient(78% 62% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.26) 40%,
      rgba(0, 0, 0, 0.70) 78%,
      #000 100%);
    mask-image: radial-gradient(78% 62% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.26) 40%,
      rgba(0, 0, 0, 0.70) 78%,
      #000 100%);
  }
}

@media (max-width: 380px) {
  .pf-recherche-page .pf-recherche__carte,
  .pf-recherche-page .pf-recherche__porte { padding: var(--pf-espace-s); }

  .pf-recherche-page .pf-recherche__vide { padding: var(--pf-espace-m); }

  .pf-recherche-page .pf-recherche__strates { grid-template-columns: 48px minmax(0, 1fr); }

  @supports not (grid-template-columns: subgrid) {
    .pf-recherche-page .pf-recherche__strate {
      grid-template-columns: 48px minmax(0, 1fr);
    }
  }

  /* 320 px — TROIS lignes, toujours de bord à bord. L'oblique est retirée :
     c'était la plus longue des quatre, et sur 288 px de colonne elle traversait
     la lecture sur toute sa hauteur. Les trois paliers restants se partagent la
     largeur sans jamais s'aligner. */
  .pf-recherche-page .pf-recherche__hero::before {
    background-image:
      linear-gradient(178.6deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 11%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(181.4deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 9%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(179.4deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 10%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 210px 60px, 190px 56px, 240px 64px;
    background-position: left 0 top 34px, right 0 top 190px, left 24px top 330px;
  }
}

/* ==========================================================================
   CHAPITRE « MÉCANOBIOLOGIE MICROSCOPIQUE » — PHASE BUILD-7

   AUTORITÉS.
   Éditorial et scientifique : conception 5D du 2026-08-09, état 5D.2, close
   comme base de référence par la note additive du 2026-08-18. Statut
   épistémique : D-020 (chapitre micro autonome et signé, 1/2 ; niveau 4
   déclarable vide et daté).
   Visuel : **aucune planche 5D n'existe au dépôt** — celle de Claude Design est
   consignée « hors dépôt » par le contrôle de périmètre de 5D lui-même. Les
   autorités visuelles sont donc, dans l'ordre : D-034 (jetons), 4A § 11
   (garde-fou : jamais un dégradé continu qui suggérerait une progression vers
   la preuve), HOME V2.2 (contrat de bandes), BUILD-5 (rythme de lecture
   longue), BUILD-6 (hero sombre localisé, titres et chapôs de section).

   AUCUNE ÉCHELLE NOUVELLE. Toutes les tailles employées ici existent déjà dans
   cette feuille : les titres et chapôs reprennent les déclarations de BUILD-5 et
   BUILD-6, les cartes les trois métriques des portes de l'accueil — 1,0625rem /
   0,9375rem / 0,875rem.

   L'OBJET RÉCURRENT DE CE CHAPITRE EST LA LIMITE, PAS LE MÉCANISME.
   Le hub a la carotte, la page Méthode a le schéma du geste. Ici, l'objet qui
   revient de section en section est `.pf-micro__limite` : la limite
   d'extrapolation attachée à chaque connaissance générale. C'est ce qui donne
   au chapitre son identité propre, et ce n'est pas un choix décoratif — 5D § I
   attache une limite à chacun des sept faits de niveau 1, et un chapitre qui les
   rendrait en note de bas de page dirait le contraire de ce qu'il affirme.
   La limite est donc composée comme une part du texte, à la même largeur de
   lecture, jamais en plus petit que le corps.

   OÙ S'ARRÊTE LE SOMBRE, ET POURQUOI IL REVIENT UNE FOIS.
   Deux zones sombres, et deux seulement : le hero, et le SEUIL de la section 8.
   4B § 9 valide le sombre comme « seuil visuel localisé, lecture longue sur
   clair » : les six sections de niveau 1 sont donc intégralement sur clair. Le
   seuil de la section 8 est le second — et c'est sa fonction exacte : marquer
   qu'on change de statut épistémique, pas de sujet. C'est le seul endroit du
   site où le sombre revient au milieu d'une page, et il le fait parce que
   l'architecture anti-accumulation de 5D § H repose entièrement sur ce moment.

   SCOPE. Toutes les règles sont préfixées par `.pf-micro-page`, classe posée sur
   le `body` par `inc/pf-mecanobio-micro.php`. Aucune ne peut atteindre
   l'accueil, le hub « Vos douleurs », la page Méthode, le hub « Recherche &
   connaissances » ni une page clinique.
   ========================================================================== */

/* --- Fil d'Ariane ---------------------------------------------------------
   Valeurs identiques à celles des quatre autres fils du site : ils décrivent la
   même arborescence et doivent se ressembler. Le code, lui, reste séparé.
   Trois niveaux ici, contre deux ailleurs — le chapitre est un enfant éditorial
   du hub. Le fil enveloppe, donc `flex-wrap` fait déjà le travail sur mobile. */

.pf-micro-page .pf-micro__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-micro-page .pf-micro__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-micro-page .pf-micro__fil-lien { color: var(--pf-accent); text-decoration: none; }
.pf-micro-page .pf-micro__fil-lien:hover { text-decoration: underline; }
.pf-micro-page .pf-micro__fil-sep { color: var(--pf-filet); }
.pf-micro-page .pf-micro__fil-courant { color: var(--pf-encre-2); }

/* Le retrait latéral est porté par un seul objet — même correction qu'au hub,
   à la page Méthode et au hub Recherche : Astra applique le sien à tout bloc
   `alignfull`, et les deux s'additionnaient. */
.pf-micro-page .entry-content > .alignfull { padding-inline: 0; }

.pf-micro-page .pf-micro__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

/* Bande papier — filets haut ET bas, contrat de bandes gelé en HOME V2.2. */
.pf-micro-page .pf-micro__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

/* Neutralisation préventive de l'écart de bloc de WordPress dans les grilles :
   `:where(.is-layout-flow) > :not(:first-child)` décale chaque enfant sauf le
   premier. Corrigé deux fois par la mesure en BUILD-4 ; posé d'emblée ici. */
.pf-micro-page .pf-micro__hypotheses > *,
.pf-micro-page .pf-micro__mesures > *,
.pf-micro-page .pf-micro__escalier > *,
.pf-micro-page .pf-micro__sorties > * { margin-block-start: 0; }

/* --- Seuil sombre : hero -------------------------------------------------
   MOTIF PLEIN CONTENEUR, comme au hub Recherche depuis BUILD-6.2 — et d'une
   FAMILLE GRAPHIQUE DIFFÉRENTE, ce qui est le point.

   CE QUI SÉPARE CE MOTIF DES CINQ AUTRES DU SITE.
   Les quatre trames cliniques sont des `repeating-*-gradient` : une géométrie
   répétée à pas constant. Celui du hub Recherche est un ensemble de neuf lignes
   NOMMÉES, toutes quasi horizontales — entre 178,6° et 182,4° — qui évoquent des
   niveaux qui ne s'alignent pas. Ici, aucune ligne n'est horizontale : les huit
   segments sont répartis sur SIX INCLINAISONS FRANCHEMENT DISTINCTES, de 24° à
   157°, sans qu'aucune direction ne domine.

   CE QUE LE MOTIF ÉVOQUE, ET CE QU'IL SE REFUSE À ÉVOQUER.
   Il évoque une dispersion de directions : plusieurs axes, aucun privilégié.
   C'est le seul énoncé graphique que le chapitre puisse tenir sans mentir, et
   c'est aussi celui de sa section 7 — plusieurs voies, pas un capteur unique.
   Il ne représente RIEN : ni cellule, ni membrane, ni fibre, ni canal, ni
   échelle, ni grandeur, ni relation. Aucune courbe, aucun cercle, aucun point,
   aucune texture organique — huit segments droits, et c'est tout. La consigne
   d'arbitrage écarte nommément la pseudo-microscopie décorative, les cellules
   3D, l'ADN et les membranes dessinées comme preuve : rien de tout cela n'est
   représentable avec des segments droits d'inclinaisons disjointes.

   AUCUN CROISEMENT N'EST SIGNIFIANT. Les segments ont des plages horizontales
   et verticales majoritairement disjointes ; là où deux se rencontrent, c'est
   sur un pixel, et rien dans le motif ne fait d'une intersection un nœud, un
   repère ou une flèche. Aucune graduation, aucun axe, aucune grille : les
   écarts sont volontairement irréguliers, sans pas commun.

   LE TEXTE RESTE PRIORITAIRE, ET CE N'EST PAS L'AFFAIRE DES SEGMENTS.
   Le motif traverse la zone de texte, et un MASQUE ELLIPTIQUE l'y ramène à 15 %
   de sa valeur — même principe qu'au hub Recherche, mêmes raisons : un trou
   souple centré sur le bloc de texte plutôt qu'un dégradé de gauche à droite,
   pour que la variation reste organique et que le motif retrouve sa pleine
   valeur aux trois bords éloignés du centre.

   DEUX JETONS, PAS UN DE PLUS : `--pf-marque` pour les segments, `--pf-strate`
   pour le fond. Aucune valeur hexadécimale n'est écrite ici. */

.pf-micro-page .pf-micro__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-micro-page .pf-micro__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-repeat: no-repeat;

  background-image:
    /* S1 · oblique montante douce, ancrée à gauche, haut de cadre */
    linear-gradient(24deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 24%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S2 · oblique descendante, plage disjointe de S1, à droite */
    linear-gradient(157deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 28%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S3 · la plus redressée, presque verticale, au tiers gauche */
    linear-gradient(96deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 16%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S4 · oblique moyenne, la plus longue des huit */
    linear-gradient(41deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 20%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S5 · descendante courte, bas de cadre à gauche */
    linear-gradient(133deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S6 · montante, la plus faible, traverse le bas du cadre */
    linear-gradient(63deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 12%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S7 · seconde à 24°, ailleurs — la seule inclinaison reprise, et de loin */
    linear-gradient(24deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 15%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* S8 · la plus nette, courte, en haut à droite — hors du trou du masque */
    linear-gradient(112deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 30%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px));

  background-size:
    260px 190px,
    300px 240px,
    150px 300px,
    420px 260px,
    190px 170px,
    360px 200px,
    170px 130px,
    130px 160px;

  background-position:
    left 40px top 20px,
    right 90px top 40px,
    left 330px top 130px,
    left 150px top 250px,
    left 20px top 330px,
    right 40px top 300px,
    left 640px top 60px,
    right 250px top 30px;

  /* LE TROU SOUPLE. Centré à 28 % / 50 %, c'est-à-dire sur le bloc de texte.
     Même construction qu'au hub Recherche — la parenté de traitement est
     voulue ; c'est le dessin, pas le procédé, qui distingue les deux pages. */
  -webkit-mask-image: radial-gradient(62% 66% at 28% 50%,
    rgba(0, 0, 0, 0.15) 0%,
    rgba(0, 0, 0, 0.32) 42%,
    rgba(0, 0, 0, 0.74) 78%,
    #000 100%);
  mask-image: radial-gradient(62% 66% at 28% 50%,
    rgba(0, 0, 0, 0.15) 0%,
    rgba(0, 0, 0, 0.32) 42%,
    rgba(0, 0, 0, 0.74) 78%,
    #000 100%);
}

.pf-micro-page .pf-micro__kicker {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-marque);
}

.pf-micro-page .pf-micro__titre {
  max-width: 20ch;
  margin-block: 0 var(--pf-espace-m);
  font-size: clamp(2.1rem, 1.6rem + 2.4vw, 3.2rem);
  line-height: 1.1;
  color: var(--pf-ivoire);
}

/* La question du chapitre, en éditoriale. Elle n'est pas un slogan : c'est
   l'énoncé exact de ce que la page traite, et elle se termine par un point
   d'interrogation parce que le chapitre n'y répond pas pour la méthode. */
.pf-micro-page .pf-micro__promesse {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

/* La note de lecture. Un filet vertical, pas un cadre : elle oriente, elle
   n'avertit pas — le système de vigilance est réservé au risque clinique et ne
   doit jamais être emprunté pour un propos éditorial. */
.pf-micro-page .pf-micro__lecture {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 2px solid var(--pf-filet-sombre);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

/* L'état daté. Un cadre, pas une pastille de certification : le filet est
   neutre, il n'emprunte ni à la marque ni au système de vigilance. Valeurs
   reprises telles quelles du hub Recherche — c'est le même objet. */
.pf-micro-page .pf-micro__etat {
  display: inline-block;
  margin: 0;
  padding: var(--pf-espace-2xs) var(--pf-espace-s);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-ivoire);
}

/* --- Titres, chapôs et texte courant — métriques de BUILD-5 et BUILD-6 ---- */

.pf-micro-page .pf-micro__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-micro-page .pf-micro__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__texte:last-child { margin-block-end: 0; }
.pf-micro-page .pf-micro__texte strong { font-weight: 600; }

.pf-micro-page .pf-micro__sous-titre {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) var(--pf-espace-2xs);
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* --- LA LIMITE D'EXTRAPOLATION — l'objet récurrent du chapitre -----------
   Attachée à chaque connaissance générale, elle dit jusqu'où la source porte,
   et où elle cesse de porter. 5D § I en attache une à chacun des sept faits de
   niveau 1 ; le chapitre les rend toutes.

   TRAITEMENT : filet épais à gauche, en `--pf-encre` et non en marque. Le motif
   est explicite — la limite n'est ni un avertissement clinique, ni un accent de
   marque. Elle est une part du raisonnement, et son chrome doit le dire : même
   corps que le texte courant, même largeur de lecture, aucune réduction.
   L'ÉTIQUETTE est le seul élément en petit — elle nomme l'objet, elle ne le
   porte pas. */

.pf-micro-page .pf-micro__limite {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 3px solid var(--pf-encre);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__limite-label {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

/* --- Appel de source en fin de paragraphe -------------------------------- */

.pf-micro-page .pf-micro__source {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- L'ESCALIER DES ÉCHELLES (section 5) ---------------------------------
   POURQUOI UN ESCALIER, ET POURQUOI IL NE MONTE PAS.
   5D § O impose « des sauts d'échelle affichés dans un encadré dédié à trois
   marches ». Le piège est évident : trois marches dessinées en escalier
   ascendant se liraient comme une progression vers la preuve — exactement ce
   que 4A § 11 interdit. Les trois marches ont donc le MÊME chrome, la MÊME
   hauteur et le MÊME retrait ; ce qui change d'une marche à l'autre est le
   TEXTE, et le fait que la troisième porte une négation.

   Le décalage horizontal est de 0. La numérotation est conservée parce que
   l'ordre des marches est un fait — cellule/animal, puis humain, puis effet
   thérapeutique —, mais rien dans la forme ne suggère que la troisième soit
   atteinte. */

.pf-micro-page .pf-micro__escalier {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) var(--pf-espace-m);
  border-block-start: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__marche {
  display: grid;
  grid-template-columns: 2.25rem minmax(0, 1fr);
  column-gap: var(--pf-espace-s);
  padding-block: var(--pf-espace-s);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__marche-num {
  margin: 0;
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: var(--pf-interligne);
  color: var(--pf-encre-2);
  font-variant-numeric: tabular-nums;
}

.pf-micro-page .pf-micro__marche-texte {
  margin: 0;
  max-width: none;
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__marche-texte strong { font-weight: 600; }

/* La phrase de fermeture de l'escalier, reprise mot pour mot de la passe 5D.2.
   Elle n'est pas dans une marche : elle porte sur les trois. */
.pf-micro-page .pf-micro__escalier-cloture {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) var(--pf-espace-m);
  font-size: var(--pf-corps);
  font-weight: 600;
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* ==========================================================================
   LE SCHÉMA DE SYNTHÈSE (5D § U · D-033 · D-034)

   « Plusieurs voies, pas un capteur unique. » Le titre de la section est aussi
   la contrainte de forme : deux voies partent de la MÊME entrée et arrivent à
   la MÊME sortie, sans se croiser entre les deux, et sans qu'aucune ne soit
   graphiquement privilégiée. Même largeur, même chrome, même corps ; la seule
   différence est le nombre d'étapes, qui est un fait de la littérature.

   LES CONNECTEURS SONT DES FILETS, PAS DES FLÈCHES.
   Une flèche affirme une direction causale. Un filet affirme une continuité.
   La littérature citée documente une continuité mécanique — matrice,
   adhésions, cytosquelette, noyau — et une perméabilité mécanosensible ; elle
   ne documente pas une chaîne causale déclenchée par un geste. Le schéma est
   donc dessiné en filets verticaux, et il n'y a pas une seule flèche dans tout
   l'objet.

   AUCUNE FORME N'IMITE UN OBJET BIOLOGIQUE : ni membrane, ni cellule, ni
   fibre, ni pore. Des cadres rectangulaires, des filets de 1 px et du texte.
   ========================================================================== */

.pf-micro-page .pf-micro__schema {
  max-width: 940px;
  margin-block: var(--pf-espace-l) 0;
  margin-inline: 0;
}

/* Entrée et sortie partagent exactement le même traitement — c'est ce qui fait
   du schéma un circuit et non une échelle. */
.pf-micro-page .pf-micro__schema-entree,
.pf-micro-page .pf-micro__schema-sortie {
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-fond);
  text-align: center;
}

.pf-micro-page .pf-micro__schema-entree > p,
.pf-micro-page .pf-micro__schema-sortie > p { margin: 0; max-width: none; }

.pf-micro-page .pf-micro__schema-terme {
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__schema-precision {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  font-size: 0.875rem;
  font-weight: 400;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* Les deux voies. La zone qui les contient porte les deux filets de jonction —
   un vers l'entrée, un vers la sortie — sous forme de bordures sur les colonnes
   elles-mêmes, pour qu'aucun pseudo-élément flottant n'ait à être positionné en
   absolu et ne se décale au premier changement de police. */
.pf-micro-page .pf-micro__schema-voies {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pf-espace-m);
  padding-block: var(--pf-espace-m);
}

.pf-micro-page .pf-micro__schema-voie {
  display: flex;
  flex-direction: column;
  gap: var(--pf-espace-2xs);
  padding: var(--pf-espace-s);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-fond);
}

.pf-micro-page .pf-micro__schema-voie-titre {
  margin: 0;
  max-width: none;
  padding-block-end: var(--pf-espace-2xs);
  border-block-end: 1px solid var(--pf-filet);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__schema-voie-sous {
  display: block;
  margin-block-start: 2px;
  font-size: 0.8125rem;
  font-weight: 400;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

/* Les étapes : une liste ordonnée, dépouillée de sa numérotation automatique.
   L'ordre compte — il est celui de la continuité décrite par les sources —,
   mais l'afficher en chiffres ferait de chaque voie un protocole. */
.pf-micro-page .pf-micro__schema-etapes {
  list-style: none;
  margin: 0;
  padding: 0;
}

.pf-micro-page .pf-micro__schema-etape {
  position: relative;
  padding: var(--pf-espace-2xs) 0 var(--pf-espace-2xs) var(--pf-espace-s);
  border-inline-start: 1px solid var(--pf-encre);
}

/* Le repère de continuité : un trait horizontal court, pas une pointe. */
.pf-micro-page .pf-micro__schema-etape::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: calc(var(--pf-espace-2xs) + 0.62em);
  width: 9px;
  height: 1px;
  background-color: var(--pf-encre);
}

.pf-micro-page .pf-micro__schema-etape .pf-micro__schema-terme {
  display: block;
  font-size: 0.9375rem;
}

.pf-micro-page .pf-micro__schema-legende {
  max-width: var(--pf-largeur-lecture);
  margin-block-start: var(--pf-espace-s);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__schema-legende strong { color: var(--pf-encre); font-weight: 600; }

/* ==========================================================================
   LE SEUIL « ET POUR PRESSION FOCALE ? » (5D § H, section 8)

   C'EST L'ARTICULATION DE TOUT LE CHAPITRE, ET ELLE EST STRUCTURELLE AVANT
   D'ÊTRE GRAPHIQUE. 5D § H l'écrit : « aucune hypothèse PF sous les sections
   3–7 — la biologie générale est exposée d'un bloc, puis UNE section
   d'hypothèses après le seuil ». Le sombre revient ici, et seulement ici, parce
   que le lecteur doit voir qu'il change de statut épistémique.

   CE QUI EST SUR LE SOMBRE : le seuil lui-même, et rien d'autre. Les deux
   hypothèses, le garde-fou et les mesures reviennent sur clair — ce sont des
   lectures longues, et 4B § 9 est explicite là-dessus. Un bloc d'hypothèses
   composé sur fond sombre aurait de surcroît l'effet exactement inverse de
   celui recherché : il les mettrait en valeur.
   ========================================================================== */

.pf-micro-page .pf-micro__seuil {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
  border-block: 1px solid var(--pf-filet-sombre);
}

.pf-micro-page .pf-micro__seuil .pf-micro__inner {
  padding-block: var(--pf-espace-l);
}

.pf-micro-page .pf-micro__seuil-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-ivoire);
}

.pf-micro-page .pf-micro__seuil-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-s);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-ivoire);
}

.pf-micro-page .pf-micro__seuil-texte:last-child { margin-block-end: 0; }
.pf-micro-page .pf-micro__seuil-texte strong { font-weight: 600; }

/* Le rappel du niveau 4, en une phrase. Il ne duplique NI la carotte du hub, NI
   sa ligne d'état datée : il renvoie à elles. D-020 fait du hub le porteur
   canonique de cet état, et un chapitre qui le redaterait de son côté créerait
   deux vérités à maintenir. */
.pf-micro-page .pf-micro__seuil-niveau4 {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

.pf-micro-page .pf-micro__seuil-niveau4 a { color: var(--pf-marque); }
.pf-micro-page .pf-micro__seuil-niveau4 a:hover { color: var(--pf-marque-hover); }

/* ==========================================================================
   LES DEUX HYPOTHÈSES (5D § J)

   FORMAT IMPOSÉ, ET IL EST IMPOSÉ POUR UNE RAISON : « une hypothèse discutée
   est que… », puis ce qui la rend plausible, ce qui lui manque, comment la
   tester. Les trois volets ont le MÊME chrome et la MÊME largeur. Composer
   « ce qui la rend plausible » plus large ou plus haut que « ce qui manque »
   suffirait à transformer la section en plaidoyer — et ce serait précisément
   l'argument par accumulation que 5D § J combat.

   DEUX HYPOTHÈSES, PAS TROIS. La passe 5D.2 a retiré la troisième et l'a
   transformée en pont de sortie ; aucune n'a été restaurée pour la symétrie.
   Les cartes sont donc empilées pleine largeur, jamais en grille de deux : une
   grille de deux cellules chercherait un équilibre que le contenu n'a pas.
   ========================================================================== */

.pf-micro-page .pf-micro__hypothese {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-micro-page .pf-micro__hypothese:last-child { margin-block-end: 0; }

.pf-micro-page .pf-micro__hypothese-cle {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__hypothese-enonce {
  max-width: none;
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.55;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__hypothese-volets {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__hypothese-volet {
  padding: var(--pf-espace-s);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__hypothese-volet > :first-child { margin-block-start: 0; }
.pf-micro-page .pf-micro__hypothese-volet > :last-child { margin-block-end: 0; }

.pf-micro-page .pf-micro__hypothese-volet-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__hypothese-volet p {
  max-width: none;
  margin-block: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- LE GARDE-FOU ANTI-ACCUMULATION --------------------------------------
   Affiché sur la page, pas relégué en note. C'est le remplacement direct de
   l'ancienne conclusion « l'ensemble de ces éléments soutient l'hypothèse »,
   identifiée en 5D § B (M-22) comme un argument par accumulation caractérisé.
   Il est donc composé pour être lu — corps courant, pleine largeur de lecture,
   fond papier et filet plein. */

.pf-micro-page .pf-micro__gardefou {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-papier);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__gardefou > :first-child { margin-block-start: 0; }
.pf-micro-page .pf-micro__gardefou > :last-child { margin-block-end: 0; }
.pf-micro-page .pf-micro__gardefou p { max-width: none; margin-block: 0; }
.pf-micro-page .pf-micro__gardefou strong { font-weight: 600; }

/* --- CE QU'IL FAUDRAIT MESURER — quatre blocs (5D § M) --------------------
   Grille à filets, mêmes métriques que les portes de l'accueil et du hub. Les
   quatre questions sont posées telles quelles ; l'objectif de 5D § M est de
   montrer que les hypothèses sont TESTABLES, pas de rédiger un protocole. */

.pf-micro-page .pf-micro__mesures {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__mesure {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__mesure-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__mesure p {
  margin: 0;
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* Les transferts explicites — une ligne, non dupliquée ailleurs (5D § M). */
.pf-micro-page .pf-micro__transferts {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   LE PONT « DU MICROSCOPIQUE AU PALPABLE » (5D § H section 9 · § J · 5E § AA)

   C'est une FRONTIÈRE, et sa forme doit le dire. Elle n'est ni une conclusion,
   ni une ouverture commerciale vers une page suivante : c'est l'endroit où le
   chapitre déclare que la question change d'échelle et qu'il ne la traite pas.

   TRAITEMENT : bande papier, filets haut et bas, et un double filet supérieur
   qui n'existe nulle part ailleurs sur la page. La doctrine du changement
   d'échelle est composée dans le même bloc, pas en aparté — c'est elle qui
   empêche le pont de se lire comme un pas de plus vers la preuve.
   ========================================================================== */

.pf-micro-page .pf-micro__pont {
  background-color: var(--pf-papier);
  border-block-start: 3px double var(--pf-encre);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__pont-eyebrow {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__doctrine {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) 0;
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 3px solid var(--pf-encre);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__doctrine strong { font-weight: 600; }

/* --- Sorties de fin de chapitre ------------------------------------------
   DEUX DESTINATIONS RÉELLES, UNE INEXISTANTE. Le hub et la page Méthode sont
   publiés : ce sont des liens. Le chapitre macroscopique n'existe pas : c'est
   une CARTE ÉDITORIALE, pas un lien désactivé.

   Doctrine reprise mot pour mot du hub « Vos douleurs » puis du hub Recherche :
   « quand la destination n'existe pas, le titre reste un titre — il ne promet
   rien, donc rien n'a à être désactivé ». Aucun faux `href`, aucun
   `aria-disabled` inutile, et aucun libellé n'annonce une disponibilité. */

.pf-micro-page .pf-micro__sorties {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__sortie {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-filet);
}

.pf-micro-page .pf-micro__sortie-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* CIBLE TACTILE DU TITRE — reprise EXACTE de BUILD-4.1, y compris ses valeurs.
   Le titre d'une sortie est un lien de niveau texte : sa boîte ne fait que la
   hauteur de sa ligne. Le retrait vertical lui donne ses 44 px, et la marge
   négative de même valeur les retire à la ligne — la boîte cliquable double,
   la composition ne bouge pas d'un pixel. Une marge verticale n'agrandit pas la
   ligne d'un élément en ligne, mais celle d'un `inline-block` si : c'est ce qui
   permet l'annulation exacte.

   MESURÉ AVANT CORRECTION : 19 px ici, contre 44 px pour l'objet équivalent du
   hub « Vos douleurs ». C'était un écart avec le standard du site, pas un choix. */
.pf-micro-page .pf-micro__sortie-titre a {
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-micro-page .pf-micro__sortie-titre a:hover { color: var(--pf-accent-hover); }

.pf-micro-page .pf-micro__sortie-titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-micro-page .pf-micro__sortie p {
  margin: 0;
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Bibliographie -------------------------------------------------------
   Le composant transversal `.pf-sources` porte déjà la liste ; ce qui suit ne
   règle que ce qu'il ne prévoit pas — la ligne de modèle et de limite attachée
   à chaque référence, qui est ici obligatoire : 5D § V donne pour chacune des
   treize son type, son modèle expérimental et sa portée. */

.pf-micro-page .pf-micro__biblio .pf-micro__ref-limite {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__methode {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-micro-page .pf-micro__methode > :first-child { margin-block-start: 0; }
.pf-micro-page .pf-micro__methode > :last-child { margin-block-end: 0; }

.pf-micro-page .pf-micro__methode-titre {
  margin-block: 0 var(--pf-espace-s);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-micro-page .pf-micro__methode p {
  max-width: none;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__methode p:last-child { margin-block-end: 0; }

/* --- Signature -----------------------------------------------------------
   Elle ne peut pas s'appeler `pf-byline` : cette chaîne est le marqueur de
   détection du gabarit clinique, et la poser ici ferait basculer la page dans
   ce gabarit. Elle en reprend en revanche les valeurs exactes — c'est le même
   objet, et c'est la même contrainte qu'au hub Recherche. */

.pf-micro-page .pf-micro__signature {
  border-block: 1px solid var(--pf-filet);
  padding-block: var(--pf-espace-xs);
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__signature > :first-child { margin-block-start: 0; }
.pf-micro-page .pf-micro__signature > :last-child { margin-block-end: 0; }

.pf-micro-page .pf-micro__signature p {
  max-width: none;
  margin-block: 0 var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-micro-page .pf-micro__signature-auteur {
  color: var(--pf-encre);
  font-weight: 600;
}

/* ==========================================================================
   ADAPTATIONS INTERMÉDIAIRES ET MOBILES — BUILD-7

   QUATRE LARGEURS CONTRÔLÉES : 1440, 1280, 390, 320. Entre 1440 et 1280 rien
   ne change — la colonne de contenu est plafonnée à 1200 px et la mesure de
   lecture à 68ch : les deux largeurs rendent le même objet, seul le blanc
   latéral varie. Les ruptures utiles sont donc plus bas.
   ========================================================================== */

/* Les grilles à trois colonnes tombent avant les autres : trois volets
   d'hypothèse ou trois sorties dans moins de 900 px produiraient des colonnes
   de six mots. */
@media (max-width: 900px) {
  .pf-micro-page .pf-micro__hypothese-volets { grid-template-columns: 1fr; }
  .pf-micro-page .pf-micro__sorties { grid-template-columns: 1fr; }
}

@media (max-width: 782px) {
  .pf-micro-page .pf-micro__fil-inner,
  .pf-micro-page .pf-micro__inner { padding-inline: var(--pf-espace-s); }

  .pf-micro-page .pf-micro__inner { padding-block: var(--pf-espace-l); }

  .pf-micro-page .pf-micro__hero .pf-micro__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-micro-page .pf-micro__titre { max-width: none; }

  .pf-micro-page .pf-micro__mesures { grid-template-columns: 1fr; }

  /* LE SCHÉMA PASSE EN COLONNE UNIQUE, ET LES DEUX VOIES RESTENT DEUX.
     Elles ne fusionnent pas et ne se numérotent pas : elles s'empilent, chacune
     gardant son titre. C'est le seul rendu qui conserve l'énoncé « plusieurs
     voies » sur une colonne de poche. */
  .pf-micro-page .pf-micro__schema-voies { grid-template-columns: 1fr; }

  .pf-micro-page .pf-micro__hypothese { padding: var(--pf-espace-s); }

  /* MOTIF DU HERO, VERSION DE POCHE.
     Le principe plein conteneur est conservé : quatre segments couvrent encore
     le hero de bord à bord. Deux réductions, pas une — le NOMBRE de segments,
     et leur INTENSITÉ, ramenée à 9-14 % contre 12-30 % en desktop. Les quatre
     inclinaisons retenues restent franchement distinctes : 24°, 157°, 96°, 63°.
     Le trou du masque est élargi et approfondi — 10 % au cœur contre 15 % —,
     parce qu'à cette largeur le texte occupe toute la boîte. */
  .pf-micro-page .pf-micro__hero::before {
    background-image:
      linear-gradient(24deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 13%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(157deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(96deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 9%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(63deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 11%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 170px 140px, 190px 160px, 90px 190px, 210px 150px;
    background-position: left 20px top 24px, right 20px top 60px, left 210px top 210px, left 40px top 330px;

    -webkit-mask-image: radial-gradient(80% 64% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.28) 42%,
      rgba(0, 0, 0, 0.72) 78%,
      #000 100%);
    mask-image: radial-gradient(80% 64% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.28) 42%,
      rgba(0, 0, 0, 0.72) 78%,
      #000 100%);
  }
}

@media (max-width: 380px) {
  .pf-micro-page .pf-micro__mesure,
  .pf-micro-page .pf-micro__sortie { padding: var(--pf-espace-s); }

  .pf-micro-page .pf-micro__gardefou,
  .pf-micro-page .pf-micro__methode { padding: var(--pf-espace-s); }

  .pf-micro-page .pf-micro__schema-entree,
  .pf-micro-page .pf-micro__schema-sortie { padding: var(--pf-espace-s); }

  /* La colonne du numéro de marche se resserre : à 320 px, 2,25rem de gouttière
     plus 2,25rem de colonne prenaient un cinquième de la largeur utile. */
  .pf-micro-page .pf-micro__marche {
    grid-template-columns: 1.5rem minmax(0, 1fr);
    column-gap: var(--pf-espace-2xs);
  }

  /* 320 px — TROIS segments, toujours de bord à bord. Le quatrième retiré est
     celui à 63°, le plus long des quatre : sur 288 px de colonne il traversait
     la lecture sur toute sa hauteur. Les trois restants gardent des
     inclinaisons disjointes et ne se rencontrent pas. */
  .pf-micro-page .pf-micro__hero::before {
    background-image:
      linear-gradient(24deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 12%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(157deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 13%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(96deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 9%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 130px 110px, 140px 120px, 70px 150px;
    background-position: left 10px top 26px, right 10px top 70px, left 150px top 240px;
  }
}

/* ==========================================================================
   BUILD-7.2 — ACTIVATION DE LA PORTE MICRO AU HUB « RECHERCHE & CONNAISSANCES »

   PORTÉE : une seule règle, un seul objet — le titre-lien de la porte
   « Mécanobiologie microscopique — chapitre 1/2 ». Les deux autres portes
   restent des cartes éditoriales sans destination, et rien ici ne les touche :
   le sélecteur exige un `a`, et elles n'en contiennent pas.

   POURQUOI CETTE RÈGLE N'EXISTAIT PAS.
   BUILD-6 a construit les trois portes sans destination. Un titre qui n'est pas
   un lien n'a pas besoin d'une règle de lien : il n'y en avait donc aucune, et
   `.pf-recherche__porte-titre a` était absent de cette feuille. Poser un `href`
   sans cette règle aurait laissé le lien hériter de la seule déclaration
   globale `a { color: var(--pf-accent) }` — soulignement par défaut, et une
   CIBLE TACTILE DE 19 px, mesurée.

   LE CONTRAT TACTILE EST REPRIS À L'IDENTIQUE, PAS RÉINVENTÉ.
   Valeurs de BUILD-4.1, déjà employées pour l'objet équivalent du hub « Vos
   douleurs » puis pour les sorties du chapitre micro en BUILD-7 : `inline-block`,
   retrait vertical de 11 px, marge négative de même valeur. Une marge verticale
   n'agrandit pas la ligne d'un élément en ligne, mais celle d'un `inline-block`
   si — c'est ce qui permet l'annulation exacte. LA BOÎTE CLIQUABLE DOUBLE, LA
   COMPOSITION NE BOUGE PAS D'UN PIXEL : ni la position, ni la hauteur apparente,
   ni la typographie, ni la couleur, ni les filets, ni le rythme de la grille.

   AUCUNE VALEUR NOUVELLE. Les trois métriques de carte de BUILD-6 — 1,0625rem /
   0,9375rem / 0,875rem — sont inchangées ; la couleur est le jeton `--pf-accent`
   déjà employé partout sur clair ; l'état de focus reprend le motif du site.

   CETTE RÈGLE NE RÉÉCRIT RIEN DE BUILD-6. Elle est ajoutée après la section
   BUILD-7, hors du bloc gelé, et n'entre en conflit avec aucune déclaration
   existante : le sélecteur `.pf-recherche-page .pf-recherche__porte-titre a`
   n'apparaissait nulle part dans cette feuille.
   ========================================================================== */

.pf-recherche-page .pf-recherche__porte-titre a {
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-recherche-page .pf-recherche__porte-titre a:hover { color: var(--pf-accent-hover); }

.pf-recherche-page .pf-recherche__porte-titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

/* ==========================================================================
   CHAPITRE « MÉCANOBIOLOGIE MACROSCOPIQUE » — PHASE BUILD-8

   AUTORITÉS.
   Éditorial et scientifique : conception 5E du 2026-08-09, état 5E.2, close
   comme base de référence par la note additive du 2026-08-18. Statut
   épistémique : D-020 (chapitre macro autonome et signé, 2/2).
   Visuel : **aucune planche 5E n'existe au dépôt** — celle de Claude Design est
   consignée « hors dépôt » par le contrôle de périmètre de 5E lui-même. Les
   autorités visuelles sont donc, dans l'ordre : D-034 (jetons), 4A § 11
   (garde-fou : jamais un dégradé continu qui suggérerait une progression vers
   la preuve), HOME V2.2 (contrat de bandes), BUILD-5 (rythme de lecture
   longue), BUILD-6 (hero sombre localisé, titres et chapôs), BUILD-7 (objets
   épistémiques du chapitre 1/2 — limite, seuil, hypothèses).

   AUCUNE ÉCHELLE NOUVELLE. Toutes les tailles employées ici existent déjà dans
   cette feuille.

   CE QUI DISTINGUE CE CHAPITRE DU CHAPITRE 1/2, ET POURQUOI C'EST STRUCTUREL.
   Le micro a UN objet récurrent — la limite d'extrapolation — parce qu'il expose
   sept faits généraux dont chacun doit être borné. Le macro en a un autre : la
   PARTITION. 5E § G impose « sections 3-6 = LE TISSU ; sections 7-8 = LA
   PERCEPTION », sans alternance, et 5E § Y en fait le garde-fou central — « deux
   familles, pas une histoire ». La page doit donc rendre visible, en
   permanence, de quelle famille on parle. C'est le rôle de `.pf-macro__partie`,
   et c'est ce qui donne à ce chapitre son identité propre.

   LES DEUX FAMILLES NE SONT JAMAIS HIÉRARCHISÉES. Même chrome, même poids, même
   traitement — dans le marqueur de partie, dans le schéma central, partout. Le
   tissu n'est pas premier et le nerf n'est pas second : ce sont deux familles
   documentées en général, et la page dit que leur poids relatif n'est pas établi.

   TROIS ZONES SOMBRES, ET TROIS SEULEMENT : le hero, le SEUIL de la section 9,
   et rien d'autre — la lecture longue est intégralement sur clair (4B § 9).

   SCOPE. Toutes les règles sont préfixées par `.pf-macro-page`, classe posée sur
   le `body` par `inc/pf-mecanobio-macro.php`. Aucune ne peut atteindre l'accueil,
   les deux hubs, la page Méthode, le chapitre 1/2 ni une page clinique.
   ========================================================================== */

/* --- Fil d'Ariane ---------------------------------------------------------
   Valeurs identiques à celles des cinq autres fils du site. Trois niveaux, comme
   au chapitre 1/2 : le macro est lui aussi un enfant éditorial du hub. */

.pf-macro-page .pf-macro__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-macro-page .pf-macro__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-macro-page .pf-macro__fil-lien { color: var(--pf-accent); text-decoration: none; }
.pf-macro-page .pf-macro__fil-lien:hover { text-decoration: underline; }
.pf-macro-page .pf-macro__fil-sep { color: var(--pf-filet); }
.pf-macro-page .pf-macro__fil-courant { color: var(--pf-encre-2); }

/* Le retrait latéral est porté par un seul objet — Astra applique le sien à tout
   bloc `alignfull`, et les deux s'additionnaient. */
.pf-macro-page .entry-content > .alignfull { padding-inline: 0; }

.pf-macro-page .pf-macro__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

.pf-macro-page .pf-macro__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

/* Neutralisation préventive de l'écart de bloc de WordPress dans les grilles. */
.pf-macro-page .pf-macro__hypotheses > *,
.pf-macro-page .pf-macro__mesures > *,
.pf-macro-page .pf-macro__sorties > * { margin-block-start: 0; }

/* --- Seuil sombre : hero -------------------------------------------------
   MOTIF PLEIN CONTENEUR, et d'une TROISIÈME famille graphique.

   CE QUI LE SÉPARE DES SIX AUTRES MOTIFS DU SITE.
   Les quatre trames cliniques sont des `repeating-*-gradient` — une géométrie
   répétée à pas constant. Celui du hub Recherche est un ensemble de neuf lignes
   quasi horizontales, toutes entre 178,6° et 182,4°, qui évoquent des niveaux
   qui ne s'alignent pas. Celui du chapitre 1/2 disperse huit segments sur six
   inclinaisons franchement distinctes, de 24° à 157°, sans direction dominante.

   ICI, LE PRINCIPE EST L'INVERSE DE LA DISPERSION : deux GROUPES de lignes
   parallèles, l'un à 8°, l'autre à 14°, décalés latéralement. À l'intérieur d'un
   groupe les lignes sont strictement parallèles ; entre les deux groupes,
   l'écart de six degrés est juste assez grand pour se voir et trop petit pour se
   lire comme deux directions sans rapport. C'est ce que le chapitre traite :
   des PLANS, et leur déplacement relatif.

   CE QUE LE MOTIF SE REFUSE À ÉVOQUER. Ni élastographie, ni échographie, ni
   coupe anatomique, ni imagerie d'aucune sorte — la consigne les écarte
   nommément, et huit segments droits ne peuvent en produire aucune. Il ne
   représente ni un tissu, ni une profondeur mesurée, ni une déformation
   quantifiée : aucune graduation, aucun axe, aucune échelle, aucune flèche.

   AUCUN DÉGRADÉ CONTINU DE DENSITÉ. 4A § 11 l'interdit, et pour une raison qui
   vaut aussi ici : un espacement régulièrement croissant se lirait comme une
   progression. Les écarts internes à chaque groupe sont donc INÉGAUX et sans pas
   commun — 34, 52, 41 px pour le premier groupe ; 46, 33, 58 px pour le second.

   LE TEXTE RESTE PRIORITAIRE. Le motif traverse la zone de texte, et un MASQUE
   ELLIPTIQUE l'y ramène à 14 % de sa valeur — même procédé qu'aux deux autres
   chapitres ; c'est le dessin, pas le procédé, qui distingue les trois pages.

   DEUX JETONS, PAS UN DE PLUS : `--pf-marque` pour les lignes, `--pf-strate`
   pour le fond. Aucune valeur hexadécimale n'est écrite ici. */

.pf-macro-page .pf-macro__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-repeat: no-repeat;

  background-image:
    /* GROUPE A — quatre lignes à 8°, ancrées à gauche. */
    linear-gradient(8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 26%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 18%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(8deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    /* GROUPE B — quatre lignes à 14°, décalées à droite. Six degrés d'écart :
       visible, mais jamais lisible comme une seconde direction indépendante. */
    linear-gradient(14deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 30%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(14deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 20%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(14deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 25%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(14deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 12%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px));

  background-size:
    520px 120px,
    430px 110px,
    600px 130px,
    360px 100px,
    480px 130px,
    380px 110px,
    560px 140px,
    320px 100px;

  background-position:
    left 0 top 46px,
    left 60px top 132px,
    left 0 top 225px,
    left 110px top 348px,
    right 0 top 74px,
    right 40px top 186px,
    right 0 top 273px,
    right 90px top 397px;

  /* LE TROU SOUPLE, centré sur le bloc de texte. */
  -webkit-mask-image: radial-gradient(60% 68% at 27% 50%,
    rgba(0, 0, 0, 0.14) 0%,
    rgba(0, 0, 0, 0.30) 42%,
    rgba(0, 0, 0, 0.72) 78%,
    #000 100%);
  mask-image: radial-gradient(60% 68% at 27% 50%,
    rgba(0, 0, 0, 0.14) 0%,
    rgba(0, 0, 0, 0.30) 42%,
    rgba(0, 0, 0, 0.72) 78%,
    #000 100%);
}

.pf-macro-page .pf-macro__kicker {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-marque);
}

.pf-macro-page .pf-macro__titre {
  max-width: 20ch;
  margin-block: 0 var(--pf-espace-m);
  font-size: clamp(2.1rem, 1.6rem + 2.4vw, 3.2rem);
  line-height: 1.1;
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__promesse {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__lecture {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 2px solid var(--pf-filet-sombre);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__etat {
  display: inline-block;
  margin: 0;
  padding: var(--pf-espace-2xs) var(--pf-espace-s);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-ivoire);
}

/* --- LE MARQUEUR DE PARTIE — l'objet propre à ce chapitre -----------------
   Il annonce de quelle famille on parle, et il le fait deux fois seulement :
   à l'ouverture de la partie A et à l'ouverture de la partie B.

   POURQUOI IL EST SYMÉTRIQUE, ET STRICTEMENT. 5E § Y fait de la non-hiérarchie
   des deux familles le garde-fou central du chapitre. Les deux marqueurs
   partagent donc exactement le même chrome : même filet, même corps, même
   couleur, même graisse. Aucun numéro d'ordre n'est affiché — « A » et « B »
   sont des noms, pas un classement, et rien dans la forme ne dit que la seconde
   viendrait après la première dans une chaîne.

   Le filet est double et pleine largeur de lecture : c'est une SÉPARATION, pas
   une décoration. */

.pf-macro-page .pf-macro__partie {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  padding-block-start: var(--pf-espace-xs);
  border-block-start: 3px double var(--pf-encre);
}

.pf-macro-page .pf-macro__partie-cle {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__partie-nom {
  display: block;
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* --- Titres, chapôs et texte courant -------------------------------------- */

.pf-macro-page .pf-macro__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-macro-page .pf-macro__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__texte:last-child { margin-block-end: 0; }
.pf-macro-page .pf-macro__texte strong { font-weight: 600; }

.pf-macro-page .pf-macro__sous-titre {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) var(--pf-espace-2xs);
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* --- La limite d'extrapolation — device repris de BUILD-7 -----------------
   Le chapitre 1/2 l'a introduite ; elle est désormais le marqueur épistémique
   commun aux deux chapitres, et il serait absurde d'en inventer un second pour
   dire la même chose. Valeurs identiques, à l'exception du préfixe de classe. */

.pf-macro-page .pf-macro__limite {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 3px solid var(--pf-encre);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__limite-label {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__source {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- L'ENCADRÉ ACCESSIBLE (§ J — viscoélasticité) -------------------------
   5E § J le prescrit explicitement : un encadré qui explique fluage, relaxation
   de contrainte et dépendance à la vitesse SANS formule et SANS jargon —
   l'hystérésis n'est volontairement pas nommée. C'est un objet de vulgarisation,
   pas un objet épistémique : il n'emprunte donc ni au chrome de la limite, ni à
   celui du système de vigilance. Fond papier, filet neutre. */

.pf-macro-page .pf-macro__encadre {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) var(--pf-espace-m);
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-macro-page .pf-macro__encadre > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__encadre > :last-child { margin-block-end: 0; }

.pf-macro-page .pf-macro__encadre-titre {
  margin-block: 0 var(--pf-espace-s);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__encadre p {
  max-width: none;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__encadre p:last-child { margin-block-end: 0; }

/* --- LE REGISTRE DE SOURCE (§ M, § N, § Q) --------------------------------
   Objet propre au chapitre macro, et rendu nécessaire par son sujet : la
   densification, le glissement et l'élastographie sont des domaines où la
   littérature dit MOINS que ce qu'on lui fait dire. 5E impose des registres
   exacts et non négociables — « postulated », jamais « mis en évidence » ;
   « prometteur », jamais « validé ».

   Le registre est donc affiché comme une étiquette, à côté de l'énoncé qu'il
   qualifie. Il ne ressemble ni à la limite — qui borne un fait établi —, ni à
   un avertissement clinique : filet fin, fond papier, étiquette en petites
   capitales. Il dit d'où vient le mot, pas ce qu'il faut craindre. */

.pf-macro-page .pf-macro__registre {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-papier);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__registre-label {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__registre em { font-style: italic; }

/* ==========================================================================
   LE SCHÉMA CENTRAL — « UNE CONTRAINTE, DEUX FAMILLES DE RÉPONSES » (5E § AB)

   DEUX COLONNES QUI NE COMMUNIQUENT PAS. C'est la forme qui porte l'argument :
   l'ancienne page avait un schéma en chaîne — stimulation, antalgie, adaptations
   — que 5E § B supprime nommément. Ici, aucune flèche ne passe d'une colonne à
   l'autre, aucune ne descend vers une douleur soulagée, et la ligne de
   conclusion dit que le poids relatif des deux familles n'est pas établi.

   ÉGALITÉ STRICTE : même largeur, même chrome, même nombre d'étages. Toute
   dissymétrie graphique reconstituerait la hiérarchie que le chapitre refuse.

   AUCUNE IMAGERIE. Des cadres, des filets, du texte — jamais une coupe, un
   organe, une échographie ou une élastographie.
   ========================================================================== */

.pf-macro-page .pf-macro__schema {
  max-width: 940px;
  margin-block: var(--pf-espace-l) 0;
  margin-inline: 0;
}

.pf-macro-page .pf-macro__schema-entree {
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-fond);
  text-align: center;
}

.pf-macro-page .pf-macro__schema-entree > p { margin: 0; max-width: none; }

.pf-macro-page .pf-macro__schema-terme {
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__schema-precision {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  font-size: 0.875rem;
  font-weight: 400;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__schema-familles {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pf-espace-m);
  padding-block: var(--pf-espace-m);
}

.pf-macro-page .pf-macro__schema-famille {
  display: flex;
  flex-direction: column;
  gap: var(--pf-espace-2xs);
  padding: var(--pf-espace-s);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-fond);
}

.pf-macro-page .pf-macro__schema-famille-titre {
  margin: 0;
  max-width: none;
  padding-block-end: var(--pf-espace-2xs);
  border-block-end: 1px solid var(--pf-filet);
  font-size: 0.9375rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__schema-etapes {
  list-style: none;
  margin: 0;
  padding: 0;
}

.pf-macro-page .pf-macro__schema-etape {
  position: relative;
  padding: var(--pf-espace-2xs) 0 var(--pf-espace-2xs) var(--pf-espace-s);
  border-inline-start: 1px solid var(--pf-encre);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre);
}

/* Repère de continuité : un trait court, jamais une pointe. Une flèche
   affirmerait une causalité que les sources n'établissent pas. */
.pf-macro-page .pf-macro__schema-etape::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: calc(var(--pf-espace-2xs) + 0.62em);
  width: 9px;
  height: 1px;
  background-color: var(--pf-encre);
}

.pf-macro-page .pf-macro__schema-conclusion {
  max-width: none;
  margin-block: 0 var(--pf-espace-s);
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-papier);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
  text-align: center;
}

.pf-macro-page .pf-macro__schema-legende {
  max-width: var(--pf-largeur-lecture);
  margin-block-start: var(--pf-espace-s);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__schema-legende strong { color: var(--pf-encre); font-weight: 600; }

/* ==========================================================================
   LE SEUIL « ET POUR PRESSION FOCALE ? » (5E § G section 9, wording 5E.2)
   ========================================================================== */

.pf-macro-page .pf-macro__seuil {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
  border-block: 1px solid var(--pf-filet-sombre);
}

.pf-macro-page .pf-macro__seuil .pf-macro__inner { padding-block: var(--pf-espace-l); }

.pf-macro-page .pf-macro__seuil-titre {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__seuil-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-s);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__seuil-texte:last-child { margin-block-end: 0; }
.pf-macro-page .pf-macro__seuil-texte strong { font-weight: 600; }

.pf-macro-page .pf-macro__seuil-niveau4 {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

.pf-macro-page .pf-macro__seuil-niveau4 a { color: var(--pf-marque); }
.pf-macro-page .pf-macro__seuil-niveau4 a:hover { color: var(--pf-marque-hover); }

/* --- L'OBSERVATION DE NIVEAU 3 (§ X) --------------------------------------
   Encadré séparé, placé AVANT les hypothèses et distinct d'elles. 5E § X est
   catégorique : une seule observation, isolée des mécanismes. Son chrome ne
   ressemble donc à aucune carte d'hypothèse — filet plein sur les quatre côtés,
   étiquette de niveau explicite, et la phrase de non-démonstration incluse dans
   le même bloc, jamais renvoyée ailleurs. */

.pf-macro-page .pf-macro__observation {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-papier);
}

.pf-macro-page .pf-macro__observation > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__observation > :last-child { margin-block-end: 0; }

.pf-macro-page .pf-macro__observation-label {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__observation p:not(.pf-macro__observation-label) {
  max-width: none;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__observation p:last-child { margin-block-end: 0; }

/* --- LES QUATRE HYPOTHÈSES (§ Y) ------------------------------------------
   Format imposé : énoncé, puis plausible / manque / test, à volets de largeur
   STRICTEMENT ÉGALE. Composer « ce qui la rend plausible » plus large que « ce
   qui manque » suffirait à transformer la section en plaidoyer.

   QUATRE, EN DEUX FAMILLES. Les cartes sont empilées pleine largeur et
   regroupées par un intertitre de famille : une grille de deux colonnes
   opposerait H-M à H-N comme deux moitiés d'un même argument, ce qui est
   exactement la narration unique que le garde-fou interdit. */

.pf-macro-page .pf-macro__famille-titre {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) var(--pf-espace-s);
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__hypothese {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-macro-page .pf-macro__hypothese-cle {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__hypothese-enonce {
  max-width: none;
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.55;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__hypothese-volets {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__hypothese-volet {
  padding: var(--pf-espace-s);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__hypothese-volet > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__hypothese-volet > :last-child { margin-block-end: 0; }

.pf-macro-page .pf-macro__hypothese-volet-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__hypothese-volet p {
  max-width: none;
  margin-block: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* La mention « hypothèse en chaîne », propre à H-N2. */
.pf-macro-page .pf-macro__hypothese-chaine {
  max-width: none;
  margin-block: var(--pf-espace-m) 0;
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 3px solid var(--pf-encre);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* ==========================================================================
   LE DISPOSITIF À TROIS ÉTAGES DE H-N2 (passe 5E.2, correction n° 5)

   C'est l'objet le plus délicat de la page, et le rapport le dit : l'objection
   résiduelle n° 1 de 5E.2 désigne H-N2 comme « le point de la page à relire en
   priorité avant publication », parce qu'un lecteur pressé peut lire la
   juxtaposition d'un fait général et d'une observation de pratique comme un
   argument.

   LA FORME EST LE GARDE-FOU, ET ELLE EST FAITE DE TROIS REFUS :

   1. AUCUNE PROGRESSION. Les trois étages ont un chrome identique — même fond,
      même filet, même corps. Aucun n'est plus haut, plus large ni plus sombre.
   2. AUCUN LIEN DESSINÉ. Ni flèche, ni chevron, ni connecteur : rien qui
      suggère que le deuxième découle du premier, ni le troisième des deux.
   3. AUCUN ORDRE NUMÉRIQUE. Les niveaux s'affichent 1, 3, 2 — l'ordre du
      raisonnement, pas celui des chiffres. Un lecteur qui chercherait une
      montée ne la trouve pas.

   La phrase de verrou occupe toute la largeur, sous les trois : c'est la
   conclusion de l'objet, pas une note.
   ========================================================================== */

.pf-macro-page .pf-macro__etages {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
}

.pf-macro-page .pf-macro__etages-titre {
  margin-block: 0 var(--pf-espace-s);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__etages-grille {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__etage {
  padding: var(--pf-espace-s);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
}

.pf-macro-page .pf-macro__etage-label {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
}

.pf-macro-page .pf-macro__etage-niveau {
  display: block;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__etage-intitule {
  display: block;
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__etage-texte {
  margin: 0;
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__etages-verrou {
  max-width: none;
  margin-block: var(--pf-espace-s) 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-s);
  background-color: var(--pf-papier);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

/* --- LE GARDE-FOU « DEUX FAMILLES, PAS UNE HISTOIRE » (§ Y) ---------------
   Il remplace la conclusion causale de l'ancienne page. Composé pour être lu :
   corps courant, pleine largeur de lecture, filet plein. */

.pf-macro-page .pf-macro__gardefou {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-papier);
  font-size: var(--pf-corps);
  line-height: var(--pf-interligne);
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__gardefou > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__gardefou > :last-child { margin-block-end: 0; }
.pf-macro-page .pf-macro__gardefou p { max-width: none; margin-block: 0 var(--pf-espace-2xs); }
.pf-macro-page .pf-macro__gardefou p:last-child { margin-block-end: 0; }
.pf-macro-page .pf-macro__gardefou strong { font-weight: 600; }

/* --- CE QU'IL FAUDRAIT MESURER — cinq blocs (§ Z) -------------------------- */

.pf-macro-page .pf-macro__mesures {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__mesure {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__mesure-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__mesure p {
  margin: 0;
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__transferts {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-m) 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Sorties de fin de chapitre -------------------------------------------
   TROIS DESTINATIONS, TOUTES RÉELLES. Contrairement au chapitre 1/2, qui devait
   nommer une destination inexistante, ce chapitre n'a aucune carte inerte : le
   hub, le chapitre 1/2 et la page Méthode sont tous les trois publiés. Aucun
   faux `href`, et aucun `aria-disabled` n'a lieu d'être. */

.pf-macro-page .pf-macro__sorties {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  border-block-start: 1px solid var(--pf-filet);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__sortie {
  display: flex;
  flex-direction: column;
  padding: var(--pf-espace-m);
  border-inline-end: 1px solid var(--pf-filet);
  border-block-end: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-filet);
}

.pf-macro-page .pf-macro__sortie-titre {
  margin-block: 0 var(--pf-espace-2xs);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

/* Cible tactile — contrat BUILD-4.1, repris valeur pour valeur. */
.pf-macro-page .pf-macro__sortie-titre a {
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-macro-page .pf-macro__sortie-titre a:hover { color: var(--pf-accent-hover); }

.pf-macro-page .pf-macro__sortie-titre a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

.pf-macro-page .pf-macro__sortie p {
  margin: 0;
  max-width: none;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Bibliographie, méthode, signature ------------------------------------ */

.pf-macro-page .pf-macro__biblio .pf-macro__ref-limite {
  display: block;
  margin-block-start: var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__methode {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
  background-color: var(--pf-fond);
}

.pf-macro-page .pf-macro__methode > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__methode > :last-child { margin-block-end: 0; }

.pf-macro-page .pf-macro__methode-titre {
  margin-block: 0 var(--pf-espace-s);
  max-width: none;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-macro-page .pf-macro__methode p {
  max-width: none;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__methode p:last-child { margin-block-end: 0; }

/* La signature ne peut pas s'appeler `pf-byline` : cette chaîne est le marqueur
   de détection du gabarit clinique. Elle en reprend les valeurs exactes. */
.pf-macro-page .pf-macro__signature {
  border-block: 1px solid var(--pf-filet);
  padding-block: var(--pf-espace-xs);
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__signature > :first-child { margin-block-start: 0; }
.pf-macro-page .pf-macro__signature > :last-child { margin-block-end: 0; }

.pf-macro-page .pf-macro__signature p {
  max-width: none;
  margin-block: 0 var(--pf-espace-3xs);
  color: var(--pf-encre-2);
}

.pf-macro-page .pf-macro__signature-auteur {
  color: var(--pf-encre);
  font-weight: 600;
}

/* ==========================================================================
   ADAPTATIONS INTERMÉDIAIRES ET MOBILES — BUILD-8

   QUATRE LARGEURS CONTRÔLÉES : 1440, 1280, 390, 320. Entre 1440 et 1280 rien ne
   change — la colonne est plafonnée à 1200 px et la mesure de lecture à 68ch.
   ========================================================================== */

@media (max-width: 900px) {
  .pf-macro-page .pf-macro__hypothese-volets { grid-template-columns: 1fr; }
  .pf-macro-page .pf-macro__sorties { grid-template-columns: 1fr; }

  /* LES TROIS ÉTAGES S'EMPILENT, ET RESTENT TROIS.
     Ils ne fusionnent pas et ne se renumérotent pas : l'ordre 1, 3, 2 est
     conservé, chaque étage garde son étiquette, et le verrou reste sous les
     trois. Empilés, ils gagnent même en lisibilité — le risque de lecture en
     progression était horizontal. */
  .pf-macro-page .pf-macro__etages-grille { grid-template-columns: 1fr; }
}

@media (max-width: 782px) {
  .pf-macro-page .pf-macro__fil-inner,
  .pf-macro-page .pf-macro__inner { padding-inline: var(--pf-espace-s); }

  .pf-macro-page .pf-macro__inner { padding-block: var(--pf-espace-l); }

  .pf-macro-page .pf-macro__hero .pf-macro__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-macro-page .pf-macro__titre { max-width: none; }

  .pf-macro-page .pf-macro__mesures { grid-template-columns: 1fr; }

  /* LE SCHÉMA PASSE EN COLONNE UNIQUE, ET LES DEUX FAMILLES RESTENT DEUX.
     Elles s'empilent en gardant chacune son titre : c'est le seul rendu qui
     conserve l'énoncé « deux familles » sur une colonne de poche. */
  .pf-macro-page .pf-macro__schema-familles { grid-template-columns: 1fr; }

  .pf-macro-page .pf-macro__hypothese { padding: var(--pf-espace-s); }

  /* MOTIF DU HERO, VERSION DE POCHE.
     Le principe des DEUX GROUPES est conservé — c'est lui qui porte le sens.
     Deux lignes par groupe au lieu de quatre, et l'intensité ramenée à 10-15 %
     contre 12-30 % en desktop. Les deux inclinaisons, 8° et 14°, sont
     inchangées : les réduire ferait disparaître le décalage entre plans. */
  .pf-macro-page .pf-macro__hero::before {
    background-image:
      linear-gradient(8deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(8deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 10%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(14deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 15%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(14deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 11%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 260px 90px, 210px 80px, 240px 95px, 190px 80px;
    background-position: left 0 top 40px, left 40px top 148px, right 0 top 258px, right 30px top 372px;

    -webkit-mask-image: radial-gradient(80% 64% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.28) 42%,
      rgba(0, 0, 0, 0.72) 78%,
      #000 100%);
    mask-image: radial-gradient(80% 64% at 40% 50%,
      rgba(0, 0, 0, 0.10) 0%,
      rgba(0, 0, 0, 0.28) 42%,
      rgba(0, 0, 0, 0.72) 78%,
      #000 100%);
  }
}

@media (max-width: 380px) {
  .pf-macro-page .pf-macro__mesure,
  .pf-macro-page .pf-macro__sortie { padding: var(--pf-espace-s); }

  .pf-macro-page .pf-macro__gardefou,
  .pf-macro-page .pf-macro__methode,
  .pf-macro-page .pf-macro__encadre,
  .pf-macro-page .pf-macro__observation { padding: var(--pf-espace-s); }

  .pf-macro-page .pf-macro__schema-entree,
  .pf-macro-page .pf-macro__schema-conclusion,
  .pf-macro-page .pf-macro__etages-verrou { padding: var(--pf-espace-s); }

  /* 320 px — UN GROUPE DE DEUX, UN GROUPE D'UNE. Le décalage entre plans reste
     lisible avec trois lignes ; en dessous, il disparaîtrait. */
  .pf-macro-page .pf-macro__hero::before {
    background-image:
      linear-gradient(8deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 13%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(8deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 10%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(14deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 190px 70px, 160px 64px, 175px 74px;
    background-position: left 0 top 42px, left 30px top 156px, right 0 top 292px;
  }
}

/* ==========================================================================
   PAGE « TRAVAUX EN COURS » — PHASE BUILD-9
   Portée : `.pf-travaux-page` exclusivement. Aucune règle de cette section ne
   peut atteindre une autre page. Rien n'est réécrit en amont : cette section
   est ajoutée après BUILD-8, hors des blocs gelés.

   IDENTITÉ. La page appartient à la famille Recherche → Micro → Macro : même
   hero sombre, mêmes métriques de titre et de chapô, même contrat tactile.
   Elle s'en distingue par son GENRE — c'est un registre daté, pas un chapitre.

   CE QUI EST DÉLIBÉRÉMENT ABSENT, ET POURQUOI. La carotte stratigraphique
   appartient au hub et n'est pas reprise. Surtout : aucune barre de
   progression, aucune jauge, aucun pourcentage, aucune frise, aucun entonnoir.
   Le sujet de la page est précisément qu'un statut qui avance ne fait pas
   monter un niveau de preuve ; toute figure ordonnée dirait le contraire du
   texte.

   MOTIF DU HERO. Des filets HORIZONTAUX, de longueurs volontairement non
   monotones et à des hauteurs irrégulières — l'image d'un registre, pas d'une
   courbe. L'horizontale ne suggère aucune montée ; l'irrégularité des
   longueurs interdit la lecture en histogramme. C'est le contre-pied exact des
   obliques de BUILD-7 et BUILD-8, qui disaient la contrainte.
   ========================================================================== */

.pf-travaux-page .pf-travaux__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-travaux-page .pf-travaux__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-travaux-page .pf-travaux__fil-lien {
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-travaux-page .pf-travaux__fil-lien:hover,
.pf-travaux-page .pf-travaux__fil-lien:focus-visible { text-decoration: underline; }

.pf-travaux-page .pf-travaux__fil-sep { color: var(--pf-filet); }

.pf-travaux-page .pf-travaux__fil-courant { color: var(--pf-encre-2); }

/* Le retrait lateral est porte par un seul objet — meme correction qu'au hub,
   a la page Methode, au hub Recherche et aux deux chapitres : Astra applique le
   sien a tout bloc `alignfull`, et les deux s'additionnaient. */
.pf-travaux-page .entry-content > .alignfull { padding-inline: 0; }

/* --- Conteneur commun ----------------------------------------------------- */

.pf-travaux-page .pf-travaux__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

/* --- Hero ----------------------------------------------------------------- */

.pf-travaux-page .pf-travaux__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

.pf-travaux-page .pf-travaux__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-repeat: no-repeat;

  background-image:
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 26%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 18%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 30%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 15%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-marque) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px));

  /* Longueurs NON MONOTONES — 210, 96, 168, 124, 62. Ni croissantes, ni
     décroissantes : aucune lecture en progression n'est possible. */
  background-size: 210px 2px, 96px 2px, 168px 2px, 124px 2px, 62px 2px;
  background-position:
    left 0 top 58px,
    right 40px top 122px,
    left 96px top 214px,
    right 0 top 286px,
    left 24px top 352px;

  -webkit-mask-image: radial-gradient(84% 66% at 38% 50%,
    rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.34) 44%, rgba(0, 0, 0, 0.76) 80%, #000 100%);
  mask-image: radial-gradient(84% 66% at 38% 50%,
    rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.34) 44%, rgba(0, 0, 0, 0.76) 80%, #000 100%);
}

.pf-travaux-page .pf-travaux__kicker {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-marque);
}

.pf-travaux-page .pf-travaux__titre {
  max-width: 20ch;
  margin-block: 0 var(--pf-espace-m);
  font-size: clamp(2.1rem, 1.6rem + 2.4vw, 3.2rem);
  line-height: 1.1;
  color: var(--pf-ivoire);
}

.pf-travaux-page .pf-travaux__intro {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-ivoire);
}

.pf-travaux-page .pf-travaux__etat {
  display: inline-block;
  margin: 0;
  padding: var(--pf-espace-2xs) var(--pf-espace-s);
  border: 1px solid var(--pf-filet-sombre);
  border-radius: var(--pf-rayon-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-ivoire);
}

/* --- Bandes et titres de section ------------------------------------------ */

/* Bande papier — filets haut ET bas, contrat de bandes gele en HOME V2.2. */
.pf-travaux-page .pf-travaux__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

.pf-travaux-page .pf-travaux__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.55rem, 1.3rem + 1.2vw, 2.05rem);
  line-height: 1.22;
  color: var(--pf-encre);
  scroll-margin-block-start: var(--pf-espace-m);
}

.pf-travaux-page .pf-travaux__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-l);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-travaux-page .pf-travaux__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
}

/* --- LE DISPOSITIF DES DEUX AXES ------------------------------------------
   Deux panneaux de MÊME poids, séparés par un vide réel et une règle. Aucun
   ordre, aucune flèche, aucun remplissage : la seule information de forme est
   la SÉPARATION, et elle est aussi écrite en toutes lettres dans le verrou.
   -------------------------------------------------------------------------- */

.pf-travaux-page .pf-travaux__axes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--pf-espace-xl);
  margin-block: var(--pf-espace-l) var(--pf-espace-l);
  padding: var(--pf-espace-l);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
}

.pf-travaux-page .pf-travaux__axe { min-width: 0; }

/* La séparation est portée par une bordure sur le second panneau, pas par une
   pseudo-flèche : rien ne relie les deux colonnes. */
.pf-travaux-page .pf-travaux__axe--niveau {
  padding-inline-start: var(--pf-espace-xl);
  border-inline-start: 1px solid var(--pf-filet);
}

.pf-travaux-page .pf-travaux__axe-titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-marque);
}

.pf-travaux-page .pf-travaux__axe-sous-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 1.1875rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-travaux-page .pf-travaux__axe-texte {
  margin-block: 0 var(--pf-espace-m);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-travaux-page .pf-travaux__axe-liste { margin: 0; }

.pf-travaux-page .pf-travaux__axe-liste dt {
  margin-block-start: var(--pf-espace-s);
  font-weight: 600;
  color: var(--pf-encre);
}

.pf-travaux-page .pf-travaux__axe-liste dd {
  margin: var(--pf-espace-3xs) 0 0;
  color: var(--pf-encre-2);
}

.pf-travaux-page .pf-travaux__axes-verrou {
  grid-column: 1 / -1;
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-s) 0;
  padding-block-start: var(--pf-espace-m);
  border-block-start: 1px solid var(--pf-filet);
  font-weight: 600;
  color: var(--pf-encre);
}

/* --- Fiches de travail ---------------------------------------------------- */

.pf-travaux-page .pf-travaux__travail {
  margin-block: 0 var(--pf-espace-l);
  padding: var(--pf-espace-l);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
}

.pf-travaux-page .pf-travaux__travail-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: clamp(1.24rem, 1.1rem + 0.6vw, 1.5rem);
  line-height: 1.25;
  color: var(--pf-encre);
}

/* LE STATUT EST DU TEXTE, JAMAIS UNE COULEUR SEULE. L'étiquette porte son
   libellé complet et sa date ; retirer toute couleur ne retire aucune
   information. */
.pf-travaux-page .pf-travaux__statut {
  display: inline-block;
  margin-block: 0 var(--pf-espace-m);
  padding: var(--pf-espace-3xs) var(--pf-espace-xs);
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-encre);
}

.pf-travaux-page .pf-travaux__travail-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
}

.pf-travaux-page .pf-travaux__fiche {
  margin: 0;
  padding-block-start: var(--pf-espace-s);
  border-block-start: 1px solid var(--pf-filet);
}

.pf-travaux-page .pf-travaux__fiche dt {
  margin-block-start: var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-travaux-page .pf-travaux__fiche dd {
  max-width: var(--pf-largeur-lecture);
  margin: var(--pf-espace-3xs) 0 0;
  color: var(--pf-encre);
}

/* --- Limites -------------------------------------------------------------- */

.pf-travaux-page .pf-travaux__limite {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-inline-start: 3px solid var(--pf-marque);
  border-radius: var(--pf-rayon-s);
}

/* --- Questions ouvertes --------------------------------------------------- */

.pf-travaux-page .pf-travaux__question {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  padding-block-end: var(--pf-espace-m);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-travaux-page .pf-travaux__question-titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--pf-encre);
}

/* --- Signature ------------------------------------------------------------ */

.pf-travaux-page .pf-travaux__signature {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding-block-start: var(--pf-espace-m);
  border-block-start: 1px solid var(--pf-filet);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

.pf-travaux-page .pf-travaux__signature-auteur {
  font-weight: 600;
  color: var(--pf-encre);
}

/* --- Sorties -------------------------------------------------------------- */

.pf-travaux-page .pf-travaux__sorties {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--pf-espace-m);
  margin-block-start: var(--pf-espace-l);
}

.pf-travaux-page .pf-travaux__sortie {
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
}

.pf-travaux-page .pf-travaux__sortie-titre {
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--pf-encre);
}

/* CIBLE TACTILE DU TITRE — contrat BUILD-4.1, repris valeur pour valeur, comme
   en BUILD-7 et BUILD-7.2. `inline-block` donne une boîte au lien, le
   `padding-block` l'agrandit, le `margin-block` négatif de même amplitude rend
   l'agrandissement invisible à la composition. Les quatre sorties de cette page
   pointent vers des pages publiées : la règle sert des liens réels. */
.pf-travaux-page .pf-travaux__sortie-titre a {
  display: inline-block;
  padding-block: 11px;
  margin-block: -11px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-travaux-page .pf-travaux__sortie-titre a:hover,
.pf-travaux-page .pf-travaux__sortie-titre a:focus-visible { text-decoration: underline; }

.pf-travaux-page .pf-travaux__sortie-texte {
  margin: 0;
  font-size: 1rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   ADAPTATIONS INTERMÉDIAIRES ET MOBILES — BUILD-9
   ========================================================================== */

@media (max-width: 1279px) {
  .pf-travaux-page .pf-travaux__sorties { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 900px) {

  /* LES DEUX AXES PASSENT EN COLONNE UNIQUE, ET RESTENT DEUX.
     La bordure verticale devient horizontale : la séparation ne disparaît
     jamais, parce qu'elle EST le propos du dispositif. */
  .pf-travaux-page .pf-travaux__axes {
    grid-template-columns: 1fr;
    gap: var(--pf-espace-l);
  }

  .pf-travaux-page .pf-travaux__axe--niveau {
    padding-inline-start: 0;
    padding-block-start: var(--pf-espace-l);
    border-inline-start: 0;
    border-block-start: 1px solid var(--pf-filet);
  }
}

@media (max-width: 782px) {
  .pf-travaux-page .pf-travaux__sorties { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
  .pf-travaux-page .pf-travaux__inner {
    padding-inline: var(--pf-espace-s);
    padding-block: var(--pf-espace-l);
  }

  .pf-travaux-page .pf-travaux__hero .pf-travaux__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-travaux-page .pf-travaux__fil-inner { padding-inline: var(--pf-espace-s); }

  .pf-travaux-page .pf-travaux__titre { max-width: none; }

  .pf-travaux-page .pf-travaux__axes,
  .pf-travaux-page .pf-travaux__travail { padding: var(--pf-espace-s); }

  .pf-travaux-page .pf-travaux__limite { padding: var(--pf-espace-s); }

  .pf-travaux-page .pf-travaux__sortie { padding: var(--pf-espace-s); }

  /* MOTIF DU HERO, VERSION DE POCHE. Trois filets au lieu de cinq, intensité
     ramenée à 11-16 % contre 15-30 %. Les longueurs restent non monotones —
     132, 58, 104 — pour la même raison qu'en desktop. */
  .pf-travaux-page .pf-travaux__hero::before {
    background-image:
      linear-gradient(0deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 16%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(0deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 11%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px)),
      linear-gradient(0deg,
        transparent calc(50% - 0.5px),
        color-mix(in srgb, var(--pf-marque) 14%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px));

    background-size: 132px 2px, 58px 2px, 104px 2px;
    background-position: left 0 top 54px, right 24px top 146px, left 40px top 252px;
  }
}

/* ==========================================================================
   RÉSEAU DE PRATICIENS — PHASE BUILD-10, DIRECTION ARTISTIQUE 2A
   Portées : `.pf-praticiens-page` (hub) et `.pf-praticien-page` (fiche),
   exclusivement. Aucune règle de cette section ne peut atteindre une autre
   page. Rien n'est réécrit en amont : elle est ajoutée après BUILD-9.

   AUTORITÉ VISUELLE : planche Claude Design `id="2a"` pour le hub — « Direction
   artistique finale — hub /praticiens/ · base de référence pour Opus ». Pour la
   fiche : planche `1d`, dont le langage graphique est aligné sur 2a.

   SÉQUENCE DU HAUT DE PAGE, imposée par 2a :
   header réel du site (sombre) → liseré fin → hero Praticiens (sombre) → retour
   au fond clair pour les territoires. Le hero ne redevient pas blanc.

   TRADUCTION DES COULEURS. 2a emploie des gris qui ne sont pas des jetons —
   `#8A8175` sur clair, `#D9D2C6` et `#BFB5A3` sur sombre. Aucune couleur
   nouvelle n'est introduite : les premiers deviennent `--pf-encre-2`, les
   seconds `--pf-ivoire-2`, jeton dérivé qui existe déjà. Sur clair, ce report
   AUGMENTE le contraste — 7,46:1 contre environ 3,5:1 — donc il ne dégrade
   rien.

   CE QUI EST DÉLIBÉRÉMENT ABSENT : aucune ombre, aucun angle arrondi de facture
   logicielle, aucun badge, aucune note, aucune étoile, aucune carte de France,
   aucun portrait factice, aucune animation.
   ========================================================================== */

/* --- Conteneurs ----------------------------------------------------------- */

.pf-praticiens-page .pf-praticiens__inner,
.pf-praticien-page .pf-praticien__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
}

/* Le retrait latéral est porté par un seul objet — même correction qu'aux sept
   pages précédentes : Astra applique le sien à tout bloc `alignfull`. */
.pf-praticiens-page .entry-content > .alignfull,
.pf-praticien-page .entry-content > .alignfull { padding-inline: 0; }

/* ==========================================================================
   HUB — `/praticiens/`
   ========================================================================== */

/* --- Hero sombre, en continuité du header -------------------------------- */

.pf-praticiens-page .pf-praticiens__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
  border-block-end: 1px solid var(--pf-filet);
}

/* LE LISERÉ. Une transition, pas une séparation : 1 px, chaud à gauche, éteint
   à droite. Il est posé en `::after` parce que `::before` porte le motif, et
   parce qu'un dégradé ne peut pas vivre dans une bordure. Aucune couleur
   nouvelle — les deux extrémités sont dérivées de jetons. */
.pf-praticiens-page .pf-praticiens__hero::after {
  content: "";
  position: absolute;
  inset-block-start: 0;
  inset-inline: 0;
  height: 1px;
  z-index: 2;
  pointer-events: none;
  background-image: linear-gradient(90deg,
    color-mix(in srgb, var(--pf-marque) 75%, transparent),
    color-mix(in srgb, var(--pf-ivoire) 35%, transparent) 60%,
    color-mix(in srgb, var(--pf-marque) 15%, transparent));
}

.pf-praticiens-page .pf-praticiens__hero .pf-praticiens__inner {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: var(--pf-espace-l);
  align-items: center;
  padding-block: var(--pf-espace-2xl) var(--pf-espace-xl);
}

.pf-praticiens-page .pf-praticiens__kicker {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--pf-marque);
}

/* LE TITRE EST EN SÉRIF. C'est le choix de 2a, et il porte l'identité du volet :
   plus humaine que les chapitres scientifiques, qui restent en Inter. */
.pf-praticiens-page .pf-praticiens__titre {
  max-width: 17ch;
  margin-block: 0 var(--pf-espace-s);
  font-family: var(--pf-fonte-editoriale);
  font-weight: 600;
  font-size: clamp(2.1rem, 1.4rem + 2.6vw, 3.125rem);
  letter-spacing: -0.024em;
  line-height: 1.08;
  color: var(--pf-ivoire);
}

.pf-praticiens-page .pf-praticiens__intro {
  max-width: 58ch;
  margin-block: 0 var(--pf-espace-2xs);
  font-size: 1rem;
  line-height: 1.7;
  color: var(--pf-ivoire-2);
}

.pf-praticiens-page .pf-praticiens__note {
  max-width: 58ch;
  margin: 0;
  font-size: 0.78125rem;
  line-height: 1.6;
  color: var(--pf-ivoire-2);
}

/* --- Motif du hero : cercles concentriques ------------------------------- */

.pf-praticiens-page .pf-praticiens__cercles {
  position: relative;
  min-height: 230px;
}

.pf-praticiens-page .pf-praticiens__cercles svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
}

/* --- Bandes de territoire ------------------------------------------------- */

.pf-praticiens-page .pf-praticiens__territoire { border-block-start: 1px solid var(--pf-filet); }
.pf-praticiens-page .pf-praticiens__territoire:first-of-type { border-block-start: 0; }

.pf-praticiens-page .pf-praticiens__territoire--papier { background-color: var(--pf-papier); }

.pf-praticiens-page .pf-praticiens__territoire .pf-praticiens__inner {
  padding-block: var(--pf-espace-xl) var(--pf-espace-xs);
}

/* L'EN-TÊTE DE TERRITOIRE EST UN REPÈRE, PAS UNE REVENDICATION. Le filet fort
   de 2 px structure la lecture ; l'intitulé « Territoire » reste en sur-titre
   discret, et la liste des communes s'aligne à droite sans emphase. */
.pf-praticiens-page .pf-praticiens__territoire-tete {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--pf-espace-s);
  padding-block-end: var(--pf-espace-2xs);
  border-block-end: 2px solid var(--pf-strate);
}

.pf-praticiens-page .pf-praticiens__territoire-label {
  margin: 0;
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-praticiens-page .pf-praticiens__territoire-nom {
  margin: 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.5rem;
  font-weight: 600;
  line-height: 1.2;
  color: var(--pf-encre);
}

.pf-praticiens-page .pf-praticiens__territoire-communes {
  margin: 0 0 0 auto;
  font-size: 0.75rem;
  color: var(--pf-encre-2);
}

/* --- Ligne de praticien ---------------------------------------------------
   Quatre colonnes : point focal · portrait 4:5 · identité · lien.
   Le portrait garde sa colonne quoi qu'il arrive : remplacer le monogramme par
   une vraie photo ne déplacera rien. */

.pf-praticiens-page .pf-praticiens__ligne {
  display: grid;
  grid-template-columns: 22px 104px 1fr auto;
  gap: var(--pf-espace-m);
  align-items: center;
  padding-block: var(--pf-espace-l);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-praticiens-page .pf-praticiens__ligne:last-of-type { border-block-end: 0; }

/* LE POINT FOCAL. Un accent identitaire, un par ligne. Il n'est ni un rail, ni
   une frise, ni une hiérarchie : les lignes ne sont pas reliées entre elles, et
   aucun trait ne court d'un point à l'autre.

   IL EST PRODUIT PAR LA FEUILLE, et non par un bloc. Un paragraphe vide dans le
   contenu serait un objet sans texte, annoncé pour ne rien dire par les lecteurs
   d'écran. Une décoration appartient à la présentation. */
.pf-praticiens-page .pf-praticiens__ligne::before {
  content: "";
  justify-self: start;
  align-self: center;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background-color: var(--pf-marque);
}

.pf-praticiens-page .pf-praticiens__hero-texte,
.pf-praticiens-page .pf-praticiens__corps { min-width: 0; }

.pf-praticiens-page .pf-praticiens__portrait {
  display: grid;
  place-items: center;
  width: 104px;
  aspect-ratio: 4 / 5;
  margin: 0;
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.875rem;
  color: var(--pf-encre-2);
}

/* Sur la bande papier, le cadre prend le fond clair : le contraste du bloc avec
   sa bande est conservé dans les deux sens. */
.pf-praticiens-page .pf-praticiens__territoire--papier .pf-praticiens__portrait {
  background-color: var(--pf-fond);
}

.pf-praticiens-page .pf-praticiens__nom {
  margin: 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.875rem;
  font-weight: 600;
  letter-spacing: -0.017em;
  line-height: 1.15;
  color: var(--pf-encre);
}

.pf-praticiens-page .pf-praticiens__ville {
  margin: var(--pf-espace-3xs) 0 0;
  font-size: 0.875rem;
  color: var(--pf-encre-2);
}

.pf-praticiens-page .pf-praticiens__fait {
  max-width: 52ch;
  margin: var(--pf-espace-2xs) 0 0;
  padding-block-start: var(--pf-espace-2xs);
  border-block-start: 1px dotted var(--pf-filet);
  font-size: 0.78125rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

/* LE LIEN DE FICHE EST LE CTA PRINCIPAL DU HUB. Doctolib n'apparaît pas ici :
   le patient passe par la fiche, puis prend rendez-vous depuis elle.

   CIBLE TACTILE. Le filet ne peut pas être la bordure de l'élément : agrandir
   la boîte à 44 px l'emmènerait 13 px sous le texte. Il est donc posé en
   `::after`, à hauteur fixe sous la ligne de base, pendant que le rembourrage
   agrandit la boîte sans rien déplacer. */
.pf-praticiens-page .pf-praticiens__lien {
  margin: 0;
  font-size: 0.8125rem;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
}

.pf-praticiens-page .pf-praticiens__lien a {
  position: relative;
  display: inline-block;
  padding-block: 13px;
  margin-block: -13px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-praticiens-page .pf-praticiens__lien a::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  inset-block-end: 10px;
  height: 1px;
  background-color: var(--pf-marque);
}

.pf-praticiens-page .pf-praticiens__lien a:hover::after,
.pf-praticiens-page .pf-praticiens__lien a:focus-visible::after { height: 2px; }

/* --- Clôture -------------------------------------------------------------- */

.pf-praticiens-page .pf-praticiens__cloture {
  background-color: var(--pf-papier);
  border-block-start: 1px solid var(--pf-filet);
}

.pf-praticiens-page .pf-praticiens__cloture .pf-praticiens__inner {
  padding-block: var(--pf-espace-m) var(--pf-espace-l);
}

.pf-praticiens-page .pf-praticiens__cloture-texte {
  max-width: 54ch;
  margin: 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.03125rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* GARDE ÉDITORIALE — arbitrage propriétaire BUILD-10.1, point D.1.

   La page emploie « formé à la méthode ». Cette phrase dit ce que la formule ne
   veut PAS dire.

   ELLE N'EST NI UNE CARD, NI UN ENCADRÉ, NI UN BADGE, et ce n'est pas une
   question de goût : un avertissement encadré se lit comme une alerte, et une
   alerte au bas d'une page de praticiens jette un doute sur les praticiens
   eux-mêmes. La précision doit être lisible sans être accusatrice. */
.pf-praticiens-page .pf-praticiens__garde {
  max-width: 62ch;
  margin: var(--pf-espace-m) 0 0;
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* ==========================================================================
   FICHE PRATICIEN
   Planche 1d, alignée sur le langage de 2a. La fiche N'A PAS de hero sombre :
   la continuité sombre est un dispositif du hub. Ici, le fil d'Ariane suit le
   header et la page s'ouvre sur le fond clair, comme en 1d.
   ========================================================================== */

.pf-praticien-page .pf-praticien__fil {
  background-color: var(--pf-fond);
  border-block-end: 1px solid var(--pf-filet);
  font-size: 0.75rem;
  line-height: 1.5;
}

.pf-praticien-page .pf-praticien__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-s);
}

.pf-praticien-page .pf-praticien__fil-lien { color: var(--pf-accent); text-decoration: none; }
.pf-praticien-page .pf-praticien__fil-lien:hover { text-decoration: underline; }
.pf-praticien-page .pf-praticien__fil-sep { color: var(--pf-filet); }
.pf-praticien-page .pf-praticien__fil-courant { color: var(--pf-encre); font-weight: 600; }

/* --- Composition principale ---------------------------------------------- */

.pf-praticien-page .pf-praticien__identite .pf-praticien__inner {
  display: grid;
  grid-template-columns: 330px 1fr;
  gap: var(--pf-espace-2xl);
  align-items: start;
  padding-block: var(--pf-espace-xl);
}

/* LE CADRE 4:5 EST DIMENSIONNÉ POUR LA PHOTO À VENIR. Sa largeur et son rapport
   sont fixés ; le monogramme n'est qu'un remplissage. Poser une vraie
   photographie n'exigera aucun changement de mise en page. */
.pf-praticien-page .pf-praticien__portrait {
  display: grid;
  place-items: center;
  width: 100%;
  max-width: 330px;
  aspect-ratio: 4 / 5;
  margin: 0;
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  font-family: var(--pf-fonte-editoriale);
  font-size: 4rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pf-encre-2);
}

/* Le point focal de 2a, en accent discret au-dessus du sur-titre. */
.pf-praticien-page .pf-praticien__kicker {
  display: flex;
  align-items: center;
  gap: var(--pf-espace-2xs);
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-praticien-page .pf-praticien__kicker::before {
  content: "";
  flex: 0 0 auto;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background-color: var(--pf-marque);
}

.pf-praticien-page .pf-praticien__titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-family: var(--pf-fonte-editoriale);
  font-weight: 600;
  font-size: clamp(2rem, 1.4rem + 2.4vw, 3rem);
  letter-spacing: -0.023em;
  line-height: 1.06;
  color: var(--pf-encre);
}

.pf-praticien-page .pf-praticien__meta {
  margin: 0;
  font-size: 0.9375rem;
  color: var(--pf-encre-2);
}

.pf-praticien-page .pf-praticien__cadre {
  margin-block: var(--pf-espace-l) 0;
  padding-block: var(--pf-espace-m);
  border-block: 1px solid var(--pf-filet);
}

.pf-praticien-page .pf-praticien__phrase {
  max-width: 52ch;
  margin: 0;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.125rem;
  line-height: 1.6;
  color: var(--pf-encre);
}

.pf-praticien-page .pf-praticien__annonce {
  max-width: 60ch;
  margin: var(--pf-espace-2xs) 0 0;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Rendez-vous ---------------------------------------------------------- */

.pf-praticien-page .pf-praticien__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pf-espace-m);
  margin-block: var(--pf-espace-l) 0;
}

/* LE SEUL APLAT ORANGE DE LA PAGE. Sur la fiche, prendre rendez-vous est
   l'action attendue : elle porte donc le seul bouton plein. Le texte est
   `--pf-strate` sur `--pf-marque`, comme dans 2a. */
.pf-praticien-page .pf-praticien__rdv a {
  display: inline-block;
  padding: 14px 20px;
  background-color: var(--pf-marque);
  color: var(--pf-strate);
  font-size: 0.875rem;
  font-weight: 700;
  line-height: 1.3;
  text-decoration: none;
}

.pf-praticien-page .pf-praticien__rdv a:hover,
.pf-praticien-page .pf-praticien__rdv a:focus-visible {
  background-color: var(--pf-accent);
  color: var(--pf-ivoire);
}

.pf-praticien-page .pf-praticien__rdv { margin: 0; }

.pf-praticien-page .pf-praticien__retour { margin: 0; font-size: 0.8125rem; font-weight: 600; }

.pf-praticien-page .pf-praticien__retour a {
  display: inline-block;
  padding-block: 12px;
  margin-block: -12px;
  color: var(--pf-encre);
  text-decoration: none;
  border-block-end: 1px solid var(--pf-encre-2);
}

.pf-praticien-page .pf-praticien__retour a:hover,
.pf-praticien-page .pf-praticien__retour a:focus-visible { border-block-end-color: var(--pf-marque); }

.pf-praticien-page .pf-praticien__note {
  max-width: 60ch;
  margin: var(--pf-espace-s) 0 0;
  font-size: 0.71875rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* --- Bande des autres praticiens ------------------------------------------ */

.pf-praticien-page .pf-praticien__reseau {
  background-color: var(--pf-papier);
  border-block-start: 1px solid var(--pf-filet);
}

.pf-praticien-page .pf-praticien__reseau .pf-praticien__inner {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--pf-espace-m);
  padding-block: var(--pf-espace-s) var(--pf-espace-m);
}

.pf-praticien-page .pf-praticien__reseau p { margin: 0; font-size: 0.78125rem; color: var(--pf-encre-2); }

.pf-praticien-page .pf-praticien__reseau a {
  display: inline-block;
  padding-block: 12px;
  margin-block: -12px;
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-praticien-page .pf-praticien__reseau a:hover,
.pf-praticien-page .pf-praticien__reseau a:focus-visible { text-decoration: underline; }

/* ==========================================================================
   ADAPTATIONS INTERMÉDIAIRES ET MOBILES — BUILD-10 / 2A
   ========================================================================== */

@media (max-width: 1023px) {
  .pf-praticien-page .pf-praticien__identite .pf-praticien__inner {
    grid-template-columns: 240px 1fr;
    gap: var(--pf-espace-xl);
  }
}

@media (max-width: 860px) {
  /* LE HERO PASSE EN UNE COLONNE, ET LES CERCLES PASSENT DESSOUS.
     Ils ne sont jamais placés derrière le texte : à cette largeur, un motif en
     fond rendrait le titre plus difficile à lire pour un gain nul. */
  .pf-praticiens-page .pf-praticiens__hero .pf-praticiens__inner {
    grid-template-columns: 1fr;
    gap: var(--pf-espace-m);
  }

  .pf-praticiens-page .pf-praticiens__cercles { min-height: 150px; opacity: 0.85; }

  .pf-praticien-page .pf-praticien__identite .pf-praticien__inner {
    grid-template-columns: 1fr;
    gap: var(--pf-espace-m);
  }

  .pf-praticien-page .pf-praticien__portrait { max-width: 240px; }
}

@media (max-width: 700px) {
  /* LA LIGNE DE PRATICIEN SE REPLIE, SANS PERDRE UN SEUL FAIT.
     Le point focal et le portrait restent sur la première rangée ; le nom, la
     ville, la phrase factuelle et le lien passent dessous, en pleine largeur.
     Rien n'est masqué. */
  .pf-praticiens-page .pf-praticiens__ligne {
    grid-template-columns: 22px 84px 1fr;
    gap: var(--pf-espace-s);
    align-items: start;
  }

  .pf-praticiens-page .pf-praticiens__portrait { width: 84px; }

  .pf-praticiens-page .pf-praticiens__lien {
    grid-column: 2 / -1;
    margin-block-start: var(--pf-espace-2xs);
    white-space: normal;
  }
}

@media (max-width: 600px) {
  .pf-praticiens-page .pf-praticiens__inner,
  .pf-praticien-page .pf-praticien__inner { padding-inline: var(--pf-espace-s); }

  .pf-praticien-page .pf-praticien__fil-inner { padding-inline: var(--pf-espace-s); }

  .pf-praticiens-page .pf-praticiens__hero .pf-praticiens__inner {
    padding-block: var(--pf-espace-xl) var(--pf-espace-l);
  }

  .pf-praticiens-page .pf-praticiens__territoire .pf-praticiens__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-2xs);
  }

  .pf-praticiens-page .pf-praticiens__titre { max-width: none; }

  .pf-praticiens-page .pf-praticiens__cercles { min-height: 118px; }

  .pf-praticiens-page .pf-praticiens__territoire-communes {
    margin-inline-start: 0;
    flex-basis: 100%;
  }

  .pf-praticiens-page .pf-praticiens__nom { font-size: 1.5rem; }

  .pf-praticien-page .pf-praticien__identite .pf-praticien__inner { padding-block: var(--pf-espace-l); }

  .pf-praticien-page .pf-praticien__actions { gap: var(--pf-espace-s); }
}

@media (max-width: 400px) {
  /* À 320 px, le portrait et le texte côte à côte laisseraient moins de 160 px
     au nom. Le portrait passe donc au-dessus, à gauche du point focal. */
  .pf-praticiens-page .pf-praticiens__ligne { grid-template-columns: 22px 1fr; }

  .pf-praticiens-page .pf-praticiens__portrait { width: 84px; grid-column: 2; }

  .pf-praticiens-page .pf-praticiens__corps { grid-column: 2; }

  .pf-praticiens-page .pf-praticiens__lien { grid-column: 2; }
}

/* La colonne de texte de la fiche est un enfant de grille : sans `min-width`,
   un mot long y forcerait un débordement au lieu de se replier. */
.pf-praticien-page .pf-praticien__texte { min-width: 0; }

/* ==========================================================================
   BRANCHE PROFESSIONNELLE — PHASE BUILD-13
   Portée : `.pf-formation-page` exclusivement, plus les deux modificateurs
   `.pf-formation-module` et `.pf-formation-qualite`. Aucune règle de cette
   section ne peut atteindre une autre page. Rien n'est réécrit en amont :
   elle est ajoutée après BUILD-12.

   AUTORITÉ. `reports/2026-08-21_BRANCHE_PRO_PLANCHE_formation_V3.html` pour la
   composition et l'ordre des sections ; D-033 / D-034 pour la palette, la
   typographie et les jetons d'espacement. Aucune valeur chromatique ni
   typographique nouvelle n'est introduite ici.

   IDENTITÉ. La branche n'appartient ni à la famille clinique, ni à la famille
   Recherche. C'est un registre d'organisation : titres en Source Serif 4 comme
   le hub praticiens — la seule autre famille qui parle de personnes et de
   structure —, tableau de définition comme le bloc « Territoire », et carte de
   module calquée sur la carte praticien.

   CE QUI EST DÉLIBÉRÉMENT ABSENT, ET POURQUOI. Aucun bouton dans le hero.
   Aucune barre collante propre à la branche : la barre du site reste patiente
   (D-019). Aucun encadré de prix, aucun chiffre agrandi, aucune couleur de
   promotion, aucun compteur, aucune jauge de places. Le tarif est une ligne de
   tableau parce que c'est une information, pas un argument.

   MOTIF DU HERO — « PALIERS ». Un axe vertical unique et cinq filets
   horizontaux de longueur croissante, régulièrement espacés, tous ancrés sur
   l'axe. Il figure une PROGRESSION PÉDAGOGIQUE par étapes, et rien d'autre :
   ni tissu, ni fibre, ni mécanisme biologique, ni réparation, ni efficacité.
   Il est l'écho du schéma de principe de la page Méthode — mêmes paliers
   croissants sur un axe — et se distingue des filets horizontaux NON monotones
   de BUILD-9, qui disaient précisément l'inverse d'une progression.
   Aucune animation.
   ========================================================================== */

/* --- Fil d'Ariane --------------------------------------------------------- */

.pf-formation-page .pf-formation__fil {
  background-color: var(--pf-fond);
  font-size: 0.875rem;
  line-height: 1.5;
}

.pf-formation-page .pf-formation__fil-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4em;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xs) 0;
}

.pf-formation-page .pf-formation__fil-lien {
  color: var(--pf-accent);
  text-decoration: none;
}

.pf-formation-page .pf-formation__fil-lien:hover,
.pf-formation-page .pf-formation__fil-lien:focus-visible { text-decoration: underline; }

.pf-formation-page .pf-formation__fil-sep { color: var(--pf-filet); }

.pf-formation-page .pf-formation__fil-courant { color: var(--pf-encre-2); }

/* Le retrait latéral est porté par un seul objet — même correction qu'au hub,
   à la page Méthode, au hub Recherche, aux deux chapitres et à BUILD-9 : Astra
   applique le sien à tout bloc `alignfull`, et les deux s'additionnaient. */
.pf-formation-page .entry-content > .alignfull { padding-inline: 0; }

/* --- Conteneur commun ----------------------------------------------------- */

.pf-formation-page .pf-formation__inner {
  position: relative;
  z-index: 1;
  max-width: var(--pf-largeur-contenu);
  margin-inline: auto;
  padding-inline: var(--pf-espace-m);
  padding-block: var(--pf-espace-xl);
}

/* --- Hero ----------------------------------------------------------------- */

.pf-formation-page .pf-formation__hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--pf-strate);
  color: var(--pf-ivoire);
}

/* L'axe est le premier calque, les paliers suivent du plus court au plus long.
   Chaque palier est positionné pour que son bord GAUCHE tombe exactement sur
   l'axe : `right` vaut donc 200px moins la longueur du palier. */
.pf-formation-page .pf-formation__hero::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-repeat: no-repeat;

  background-image:
    linear-gradient(90deg,
      transparent calc(50% - 1px),
      color-mix(in srgb, var(--pf-marque) 44%, transparent) calc(50% - 1px) calc(50% + 1px),
      transparent calc(50% + 1px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-ivoire) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-ivoire) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-ivoire) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-ivoire) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)),
    linear-gradient(0deg,
      transparent calc(50% - 0.5px),
      color-mix(in srgb, var(--pf-ivoire) 22%, transparent) calc(50% - 0.5px) calc(50% + 0.5px),
      transparent calc(50% + 0.5px));

  background-size: 2px 268px, 34px 2px, 56px 2px, 82px 2px, 112px 2px, 146px 2px;
  background-position:
    right 200px top 44px,
    right 166px top 88px,
    right 144px top 132px,
    right 118px top 176px,
    right  88px top 220px,
    right  54px top 264px;
}

/* --- Arc de la trame « paliers » — BUILD-13.1R ----------------------------
   La planche V3 compose le motif en TROIS traits : un arc, l'axe, les paliers.
   BUILD-13 n'en portait que deux. L'arc est ajouté ici ; l'axe et les paliers
   ne sont pas touchés.

   GÉOMÉTRIE RELEVÉE SUR LA PLANCHE, et non inventée. Le tracé y est
   « M300 290 C 200 280, 200 60, 300 40 » : une corde verticale de 250 px posée
   sur l'axe, et une flèche de 75 px vers la gauche — rapport 0,30. Sa couleur
   est --pf-ivoire à 18 %, contre 35 % pour les paliers : rapport 0,51. Les deux
   rapports sont conservés ici sur la corde de 268 px de l'axe : flèche 80 px,
   ivoire à 12 %.

   L'arc est porté par ::after — ::before porte déjà l'axe et les paliers.
   Il n'a NI fond, NI bordure droite : ce n'est pas un cercle, pas une cible,
   pas un diagramme, pas une figure anatomique. C'est la troisième ligne d'une
   composition graphique, et rien d'autre. Aucune animation.

   Il est posé sans z-index : .pf-formation__inner porte z-index 1, donc l'arc
   reste derrière le contenu en toutes circonstances.

   LES TROIS BORDURES SONT COLORÉES, pas seulement la gauche. Dans un coin
   arrondi, la jonction entre deux bordures se fait à 45 degrés : une bordure
   haute transparente ampute l'arc de ses deux extrémités — défaut mesuré au
   premier rendu de contrôle. Les rayons droits valant 0, les bords haut et bas
   n'ont aucune portion droite : ils ne peignent que l'arc. */

.pf-formation-page .pf-formation__hero::after {
  content: "";
  position: absolute;
  top: 44px;
  right: 200px;
  width: 80px;
  height: 268px;
  pointer-events: none;
  border: 1px solid color-mix(in srgb, var(--pf-ivoire) 12%, transparent);
  border-inline-end: 0;
  border-radius: 100% 0 0 100% / 50% 0 0 50%;
}

.pf-formation-page .pf-formation__kicker {
  margin-block: 0 var(--pf-espace-s);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  line-height: 1.4;
  text-transform: uppercase;
  color: var(--pf-marque);
}

/* Source Serif 4 — registre « organisation », comme le hub praticiens. */
.pf-formation-page .pf-formation__titre {
  max-width: 20ch;
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: clamp(2rem, 1.4rem + 2.4vw, 3rem);
  font-weight: 600;
  line-height: 1.14;
  letter-spacing: -0.012em;
  color: var(--pf-ivoire);
}

.pf-formation-page .pf-formation__definition {
  max-width: 58ch;
  margin-block: 0;
  font-size: 1.0625rem;
  line-height: 1.72;
  color: var(--pf-ivoire-2);
}

.pf-formation-page .pf-formation__definition strong { color: var(--pf-ivoire); font-weight: 600; }

/* Ligne d'orientation — un filet, pas une carte : elle oriente, elle n'appelle
   pas à l'action. */
.pf-formation-page .pf-formation__orientation {
  max-width: 58ch;
  margin-block: var(--pf-espace-m) 0;
  padding-inline-start: var(--pf-espace-s);
  border-inline-start: 2px solid var(--pf-filet-sombre);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--pf-ivoire-2);
}

.pf-formation-page .pf-formation__orientation a {
  color: var(--pf-marque-hover);
  text-decoration: none;
  border-block-end: 1px solid transparent;
}

.pf-formation-page .pf-formation__orientation a:hover,
.pf-formation-page .pf-formation__orientation a:focus-visible { border-block-end-color: currentColor; }

/* --- Bandes et titres ----------------------------------------------------- */

.pf-formation-page .pf-formation__bande--papier {
  background-color: var(--pf-papier);
  border-block: 1px solid var(--pf-filet);
}

.pf-formation-page .pf-formation__titre-section {
  margin-block: 0 var(--pf-espace-s);
  font-size: clamp(1.5rem, 1.25rem + 1.1vw, 1.95rem);
  font-weight: 650;
  line-height: 1.24;
  letter-spacing: -0.014em;
  color: var(--pf-encre);
}

.pf-formation-page .pf-formation__chapo {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.125rem;
  line-height: 1.7;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0 var(--pf-espace-m);
  line-height: var(--pf-interligne);
}

.pf-formation-page .pf-formation__texte:last-child { margin-block-end: 0; }

.pf-formation-page .pf-formation__inner a {
  color: var(--pf-accent);
  text-decoration: none;
  border-block-end: 1px solid var(--pf-marque);
}

.pf-formation-page .pf-formation__inner a:hover,
.pf-formation-page .pf-formation__inner a:focus-visible { color: var(--pf-accent-hover); }

/* --- Périmètre : ce qu'elle enseigne / ce qu'elle ne confère pas ----------- */

.pf-formation-page .pf-formation__perimetre {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--pf-espace-m);
  margin-block: var(--pf-espace-l) 0;
}

.pf-formation-page .pf-formation__volet {
  min-width: 0;
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-encre);
  border-radius: var(--pf-rayon-m);
}

.pf-formation-page .pf-formation__volet-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-accent);
}

.pf-formation-page .pf-formation__volet ul { margin: 0 0 0 1.15em; padding: 0; }

.pf-formation-page .pf-formation__volet li {
  margin-block-end: var(--pf-espace-2xs);
  font-size: 0.9375rem;
  line-height: 1.6;
}

.pf-formation-page .pf-formation__volet li:last-child { margin-block-end: 0; }

/* --- Statut épistémique --------------------------------------------------- */

.pf-formation-page .pf-formation__statut {
  max-width: var(--pf-largeur-lecture);
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-s) var(--pf-espace-m);
  background-color: var(--pf-papier);
  border-inline-start: 3px solid var(--pf-encre-2);
}

.pf-formation-page .pf-formation__statut-label {
  margin-block: 0 var(--pf-espace-3xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__statut p:last-child { margin-block-end: 0; }

/* --- Carte de module — calquée sur la carte praticien --------------------- */

.pf-formation-page .pf-formation__module {
  display: grid;
  grid-template-columns: 96px 1fr auto;
  gap: var(--pf-espace-m);
  align-items: center;
  margin-block: var(--pf-espace-l) 0;
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-block-start: 3px solid var(--pf-marque);
  border-radius: var(--pf-rayon-m);
}

.pf-formation-page .pf-formation__module-num {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 88px;
  font-family: var(--pf-fonte-editoriale);
  font-size: 2rem;
  color: var(--pf-encre-2);
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
}

.pf-formation-page .pf-formation__module-corps { min-width: 0; }

.pf-formation-page .pf-formation__module-titre {
  margin-block: 0 var(--pf-espace-3xs);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.3125rem;
  font-weight: 600;
  line-height: 1.25;
  color: var(--pf-encre);
}

.pf-formation-page .pf-formation__module-meta {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.875rem;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__module-corps ul { margin: 0 0 0 1.15em; padding: 0; }

.pf-formation-page .pf-formation__module-corps li {
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.9375rem;
  line-height: 1.55;
}

/* Cible tactile de 44 px, contrat repris de BUILD-4.1. */
.pf-formation-page .pf-formation__module-lien {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-weight: 600;
  white-space: nowrap;
}

/* LA CIBLE TACTILE EST LE LIEN, PAS LE PARAGRAPHE QUI LE PORTE — BUILD-13.1R2 bis.
   La regle ci-dessus pose 44 px sur le <p>, qui est `inline-flex` avec
   `align-items: center` : le <a> y est CENTRE et garde la hauteur de sa ligne.
   Les deux bandes restantes appartiennent au paragraphe, pas au lien. Mesure au
   gate independant, confirmee ici par balayage `elementFromPoint` : le <a>
   n offre que 31,09 px a 1440 et 1280, et 29,55 px a 390 et 320.

   DEUX CANDIDATS MESURES PUIS ECARTES.
   1. `display: inline-flex; align-items: center; min-height: 44px` sur le <a>
      atteint bien 44 px, mais le `border-block-end` herite de
      `.pf-formation__inner a` descend au bas de la boite : soulignement +6,5 px
      et texte -6,4 px a 1440. Composition modifiee sans necessite.
   2. `inset-block: -7px` sur un pseudo-element atteint 45 px a 1440 et 1280,
      mais seulement 43 px a 320 — sous le seuil.

   RETENU : un pseudo-element transparent dont la hauteur est CALCULEE, donc
   exacte quelles que soient les metriques de fonte. Mesure apres correction :
   45 px a 1440, 1280, 390 et 320, avec texte, soulignement, hauteur de document
   et position de la byline IDENTIQUES a la ligne de base. Aucun fond, aucune
   bordure, aucune couleur, aucun retrait horizontal, aucun deplacement.

   Le pseudo reste contenu dans les 44 px que le <p> reserve deja : il ne peut
   pas voler le clic d un element voisin.

   PORTEE ETENDUE A TOUTE LA BRANCHE — BUILD-13.1R4, sur arbitrage du 2026-08-22.
   R3 avait borne la correction a `.pf-formation-module`, tout en declarant que
   le lien de la carte de `/formation/` — « Programme complet » — partageait
   cette classe et presentait le meme defaut, mesure a 31,09 / 29,55 px, sans le
   corriger. Le proprietaire a autorise l extension stricte a ce second lien.
   La portee passe donc a `.pf-formation-page`, qui couvre EXACTEMENT les deux
   instances de cette classe dans la branche : la carte de `/formation/` et le
   lien de fin de programme de la page module. La page qualite n en porte aucune.
   Mesure sur la carte apres extension : 45 px a 1440, 1280, 390 et 320, sans
   trou dans la zone, sans recouvrement d un autre element interactif, texte et
   soulignement inchanges au dixieme de pixel. */
.pf-formation-page .pf-formation__module-lien a { position: relative; }

.pf-formation-page .pf-formation__module-lien a::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  inset-block: calc((100% - 44px) / 2);
}

/* --- Tableau d'organisation — forme du bloc « Territoire » ---------------- */

.pf-formation-page .pf-formation__org {
  display: grid;
  grid-template-columns: 220px 1fr;
  margin-block: var(--pf-espace-l) 0;
  border-block-start: 1px solid var(--pf-encre);
}

.pf-formation-page .pf-formation__org dt,
.pf-formation-page .pf-formation__org dd {
  padding-block: var(--pf-espace-xs);
  border-block-end: 1px solid var(--pf-filet);
  line-height: 1.55;
}

.pf-formation-page .pf-formation__org dt {
  margin: 0;
  padding-block-start: calc(var(--pf-espace-xs) + 3px);
  font-size: 0.78125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__org dd {
  margin: 0;
  font-size: 0.9375rem;
}

/* --- Sessions et demande -------------------------------------------------- */

.pf-formation-page .pf-formation__sessions {
  display: grid;
  grid-template-columns: 1fr 1.1fr;
  gap: var(--pf-espace-l);
  align-items: start;
  margin-block: var(--pf-espace-l) 0;
}

.pf-formation-page .pf-formation__dates,
.pf-formation-page .pf-formation__demande {
  min-width: 0;
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
}

.pf-formation-page .pf-formation__dates-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__demande-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 1.0625rem;
  font-weight: 650;
  color: var(--pf-encre);
}

/* Coquille visuelle du formulaire — BUILD-13 première passe.
   Les champs sont `disabled` : ils ne peuvent être ni focalisés, ni soumis, et
   aucun élément `form` n'existe. Le dispositif d'envoi relève d'une phase de
   recette distincte ; le bandeau d'attente ci-dessous le dit tant que le site
   n'est pas public, et disparaît de lui-même à l'ouverture. */
.pf-formation-page .pf-formation__champ { margin-block-start: var(--pf-espace-s); }

.pf-formation-page .pf-formation__champ label {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.78125rem;
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__champ input,
.pf-formation-page .pf-formation__champ textarea {
  width: 100%;
  padding: var(--pf-espace-2xs) var(--pf-espace-xs);
  font-family: inherit;
  font-size: 0.9375rem;
  color: var(--pf-encre-2);
  background-color: #fff;
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
}

.pf-formation-page .pf-formation__champ textarea { min-height: 5.5rem; resize: vertical; }

.pf-formation-page .pf-formation__envoi {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin-block-start: var(--pf-espace-m);
  padding-inline: var(--pf-espace-m);
  font-family: inherit;
  font-size: 0.9375rem;
  font-weight: 650;
  color: var(--pf-ivoire);
  background-color: var(--pf-accent);
  border: 0;
  border-radius: var(--pf-rayon-s);
}

/* Coquille non fonctionnelle : l'état désactivé doit SE VOIR. Un bouton inerte
   qui garde l'apparence d'un bouton actif ferait croire à un envoi possible. */
.pf-formation-page .pf-formation__champ input:disabled,
.pf-formation-page .pf-formation__champ textarea:disabled,
.pf-formation-page .pf-formation__envoi:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.pf-formation-page .pf-formation__finalite {
  margin-block: var(--pf-espace-s) 0;
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--pf-encre-2);
}

/* --- Repère de construction — pré-production seulement --------------------
   Même mécanisme que l'emplacement de portrait de l'accueil : le repère est
   conditionné à `body.pf-preprod`, posé tant que `blog_public` vaut 0. Il
   disparaît de lui-même à l'ouverture publique, sans suppression manuelle. */

.pf-formation-page .pf-formation__attente { display: none; }

.pf-formation-page.pf-preprod .pf-formation__attente {
  display: block;
  margin-block: var(--pf-espace-s) 0;
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-vigilance-texte);
  background-color: var(--pf-vigilance-fond);
  border: 1px dashed var(--pf-vigilance-bord);
  border-radius: var(--pf-rayon-s);
}

/* --- Formulaire fonctionnel — BUILD-13.2B --------------------------------
   S'ajoute à la coquille visuelle ci-dessus, sans la modifier : les champs
   texte, le bouton et le paragraphe de finalité gardent exactement leurs
   règles de BUILD-13. Ce bloc ne traite que ce qui n'existait pas — le groupe
   de boutons radio, les états d'erreur, la confirmation et le piège à robots.

   AUCUNE COULEUR NOUVELLE. Les états d'erreur reprennent le triplet
   `--pf-vigilance-*`, déjà canonique et déjà employé dans cette zone même par
   le repère de pré-production. Le triplet CLINIQUE `--pf-urgence-*` n'est pas
   touché : il est réservé à la vigilance clinique, et une erreur de saisie
   n'en relève pas. */

.pf-formation-page .pf-formation__form { margin: 0; }

/* Piège à robots. Retiré de l'affichage sans `display: none`, que certains
   robots savent ignorer, et sans décalage négatif, qui peut créer un
   débordement horizontal. `clip-path` le sort de la vue en le laissant dans
   l'arbre. Le champ est en outre `tabindex="-1"` et son conteneur
   `aria-hidden` : sans ces deux-là, le piège attraperait aussi la navigation
   au clavier et les lecteurs d'écran. */
.pf-formation-page .pf-formation__piege {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Groupe « objet de la demande ». Le `fieldset` ne porte PAS la classe
   `pf-formation__champ` : il hériterait sinon du style des libellés de champs
   texte — majuscules, 0,78 rem, couleur secondaire — qui ne convient pas à des
   intitulés de choix destinés à être lus. */
.pf-formation-page .pf-formation__objet {
  margin-block-start: var(--pf-espace-s);
  padding: 0;
  border: 0;
}

.pf-formation-page .pf-formation__objet legend {
  padding: 0;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.78125rem;
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

/* 44 px de haut : un bouton radio nu mesure une quinzaine de pixels, et le
   libellé qui l'enveloppe est la cible réelle. Même exigence que partout
   ailleurs dans le thème. */
.pf-formation-page .pf-formation__choix {
  display: flex;
  align-items: center;
  gap: var(--pf-espace-2xs);
  min-height: 44px;
  font-size: 0.9375rem;
  line-height: 1.4;
  color: var(--pf-encre);
  cursor: pointer;
}

.pf-formation-page .pf-formation__choix input { flex: none; }

/* `:has()` n'est pas indispensable : sans lui, le bouton reste désactivé et
   simplement moins visiblement grisé. Aucune fonction n'en dépend. */
.pf-formation-page .pf-formation__choix:has(input:disabled) {
  opacity: 0.55;
  cursor: not-allowed;
}

/* Marqueurs d'obligation. Ils sont ÉCRITS, et non signalés par un astérisque :
   un astérisque demande une légende, et une légende se lit rarement. */
.pf-formation-page .pf-formation__requis,
.pf-formation-page .pf-formation__facultatif {
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: lowercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__aide {
  margin-block: var(--pf-espace-3xs) 0;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

/* Récapitulatif d'erreurs, en tête de formulaire. Il porte `role="alert"` et
   `tabindex="-1"` : le script facultatif y amène le focus, et sans script il
   reste le premier élément lu après le titre. */
.pf-formation-page .pf-formation__erreurs {
  margin-block-end: var(--pf-espace-s);
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--pf-vigilance-texte);
  background-color: var(--pf-vigilance-fond);
  border: 1px solid var(--pf-vigilance-bord);
  border-radius: var(--pf-rayon-s);
}

.pf-formation-page .pf-formation__erreurs p { margin: 0; }

.pf-formation-page .pf-formation__erreurs ul {
  margin-block: var(--pf-espace-2xs) 0;
  padding-inline-start: var(--pf-espace-s);
}

/* CIBLE TACTILE DU RÉCAPITULATIF — R2. Ces liens mesuraient 18 px de haut : une
   boîte EN LIGNE prend la hauteur de la police, pas celle de la ligne. Pire, un
   libellé replié se fragmentait en deux boîtes et laissait, entre les deux
   lignes, un TROU non cliquable — mesuré à 390 px avant correction.

   `display: block` supprime les deux défauts d'un coup : une seule boîte, qui
   couvre toutes ses lignes. Aucun pseudo-élément : sa zone échouerait justement
   sur les fragments de ligne, comme on l'a vu ailleurs dans cette feuille.

   Le padding est en PIXELS, non en jeton d'espacement, et c'est délibéré : il
   vise un seuil chiffré — ligne de 21,7 px + 2 × 6 px ≈ 34 px, au-dessus des
   24 px exigés, avec de la marge pour les arrondis. Un jeton modifié ailleurs
   ferait passer la cible sous le seuil sans que rien ne le signale.

   Le `li` reçoit le même rythme, SAUF s'il porte un lien : sans cela, une entrée
   sans ancre — délai, transmission — serait visiblement plus serrée que ses
   voisines. Là où `:has()` n'existe pas, la règle est simplement ignorée : les
   entrées avec lien deviennent un peu plus hautes, jamais plus basses.

   Ni couleur, ni fond, ni bordure : cela reste un lien, pas un bouton. */
.pf-formation-page .pf-formation__erreurs li { padding-block: 6px; }
.pf-formation-page .pf-formation__erreurs li:has(> a) { padding-block: 0; }

.pf-formation-page .pf-formation__erreurs a {
  display: block;
  padding-block: 6px;
  color: inherit;
}

.pf-formation-page .pf-formation__erreur {
  margin-block: var(--pf-espace-3xs) 0;
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--pf-vigilance-texte);
}

/* L'erreur n'est JAMAIS portée par la seule couleur : chaque champ fautif a son
   texte, son `aria-invalid` et son entrée dans le récapitulatif. La bordure ne
   fait que confirmer ce qui est déjà écrit. */
.pf-formation-page .pf-formation__champ input[aria-invalid="true"],
.pf-formation-page .pf-formation__champ textarea[aria-invalid="true"] {
  border-color: var(--pf-vigilance-texte);
}

/* Confirmation. Sobre, sans couleur d'accent : elle annonce que le message est
   parti, pas une réussite à fêter. */
.pf-formation-page .pf-formation__succes {
  margin-block: 0 var(--pf-espace-s);
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--pf-encre);
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
}

/* --- Formateur ------------------------------------------------------------ */

.pf-formation-page .pf-formation__formateur {
  display: grid;
  grid-template-columns: 96px 1fr;
  gap: var(--pf-espace-m);
  align-items: start;
  margin-block: var(--pf-espace-l) 0;
}

.pf-formation-page .pf-formation__monogramme {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 88px;
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.75rem;
  color: var(--pf-encre-2);
  background-color: var(--pf-papier);
  border: 1px solid var(--pf-filet);
}

.pf-formation-page .pf-formation__formateur-nom {
  margin-block: 0 var(--pf-espace-3xs);
  font-family: var(--pf-fonte-editoriale);
  font-size: 1.1875rem;
  font-weight: 600;
  color: var(--pf-encre);
}

.pf-formation-page .pf-formation__formateur-meta {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.875rem;
  color: var(--pf-encre-2);
}

/* --- Organisme et certification ------------------------------------------ */

.pf-formation-page .pf-formation__organisme {
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: var(--pf-espace-m);
  align-items: start;
  margin-block: var(--pf-espace-l) 0;
}

/* LOGO QUALIOPI OFFICIEL EN PLACE DEPUIS LE 2026-08-27 — media 102,
   `LogoQualiopi-300dpi-Avec_Marianne.png`, 633 x 338 px, fichier d'origine intact.

   Les TROIS regles qui compensaient son absence sont RETIREES, et non neutralisees :
   `display: none` sur `.pf-formation__logo`, la reduction de la grille a une colonne
   hors pre-production, et le cadre pointille de l'emplacement reserve. Elles n'avaient
   de sens que tant qu'aucune image n'existait ; les conserver aurait masque le logo en
   public tout en le montrant sur le staging — exactement le defaut que l'avertissement
   de BUILD-13 annoncait a cet endroit.

   La colonne passe de 150 px a 300 px : c'est la largeur d'affichage visee, et l'actif
   fait 633 px de large, donc l'image est TOUJOURS REDUITE, jamais agrandie. En dessous
   de 600 px, la regle de media existante ramene la grille a une colonne ; `width: 100%`
   avec `max-width: 300px` fait alors suivre le logo sans jamais deborder. */
.pf-formation-page .pf-formation__logo {
  margin-block: 0;
}

.pf-formation-page .pf-formation__logo img {
  display: block;
  width: 100%;
  max-width: 300px;
  height: auto;
}

.pf-formation-page .pf-formation__organisme-mention {
  margin-block: var(--pf-espace-xs) 0;
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--pf-encre-2);
}

/* --- Byline --------------------------------------------------------------- */

.pf-formation-page .pf-formation__byline {
  background-color: var(--pf-strate);
  color: var(--pf-ivoire-2);
}

.pf-formation-page .pf-formation__byline .pf-formation__inner {
  padding-block: var(--pf-espace-l);
}

.pf-formation-page .pf-formation__byline-texte {
  max-width: var(--pf-largeur-lecture);
  margin-block: 0;
  font-size: 0.875rem;
  line-height: 1.7;
}

.pf-formation-page .pf-formation__byline-texte strong { color: var(--pf-ivoire); font-weight: 600; }

/* ==========================================================================
   PAGE DE PROGRAMME — `.pf-formation-module`
   ========================================================================== */

.pf-formation-module .pf-formation__hero .pf-formation__inner {
  padding-block: var(--pf-espace-l);
}

.pf-formation-module .pf-formation__titre { max-width: 26ch; font-size: clamp(1.75rem, 1.3rem + 1.8vw, 2.4rem); }

.pf-formation-page .pf-formation__module-ident {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--pf-espace-s);
  margin-block: var(--pf-espace-l) 0;
}

.pf-formation-page .pf-formation__ident-case {
  min-width: 0;
  padding: var(--pf-espace-xs) var(--pf-espace-s);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-s);
}

.pf-formation-page .pf-formation__ident-case--large { grid-column: 1 / -1; }

.pf-formation-page .pf-formation__ident-label {
  display: block;
  margin-block-end: var(--pf-espace-3xs);
  font-size: 0.71875rem;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__ident-valeur {
  display: block;
  font-size: 0.9375rem;
  line-height: 1.5;
}

.pf-formation-page .pf-formation__jours {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--pf-espace-m);
  margin-block: var(--pf-espace-l) 0;
}

.pf-formation-page .pf-formation__jour {
  min-width: 0;
  padding: var(--pf-espace-m);
  background-color: var(--pf-fond);
  border: 1px solid var(--pf-filet);
  border-radius: var(--pf-rayon-m);
}

.pf-formation-page .pf-formation__jour-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 1rem;
  font-weight: 650;
  color: var(--pf-encre);
}

.pf-formation-page .pf-formation__sequence {
  margin-block: var(--pf-espace-s) var(--pf-espace-3xs);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

.pf-formation-page .pf-formation__jour ul { margin: 0 0 0 1.15em; padding: 0; }

.pf-formation-page .pf-formation__jour li { font-size: 0.9375rem; line-height: 1.55; }

/* ==========================================================================
   PAGE QUALITÉ — `.pf-formation-qualite`
   Page documentaire : hero clair, pas de seuil sombre. Le sommaire est ancré,
   les sections sont nommées par l'obligation qu'elles remplissent.
   ========================================================================== */

.pf-formation-qualite .pf-formation__hero {
  background-color: var(--pf-papier);
  color: var(--pf-encre);
  border-block-end: 1px solid var(--pf-filet);
}

.pf-formation-qualite .pf-formation__hero::before { content: none; }

.pf-formation-qualite .pf-formation__hero .pf-formation__inner { padding-block: var(--pf-espace-l); }

.pf-formation-qualite .pf-formation__kicker { color: var(--pf-accent); }

.pf-formation-qualite .pf-formation__titre { max-width: 24ch; color: var(--pf-encre); }

/* Le hero de cette page est CLAIR : le chapô ne peut pas garder l'ivoire prévu
   pour le seuil sombre — contraste insuffisant, relevé au rendu de contrôle. */
.pf-formation-qualite .pf-formation__definition { color: var(--pf-encre-2); }

.pf-formation-qualite .pf-formation__sommaire {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pf-espace-xs) var(--pf-espace-m);
  margin-block: var(--pf-espace-m) 0;
  padding: 0;
  list-style: none;
  font-size: 0.9375rem;
}

.pf-formation-qualite .pf-formation__sommaire li { margin: 0; }

/* La section documentaire suit la convention du site : le bloc « alignfull »
   ne porte QUE le filet de séparation, et le retrait latéral est porté par
   « __inner ». Le faire porter par le bloc lui-même serait perdu : la règle
   « .pf-formation-page .entry-content > .alignfull » pèse 0,3,0 et remet le
   « padding-inline » à zéro. Défaut mesuré au rendu de contrôle du
   2026-08-22, puis corrigé ici. */
.pf-formation-page .pf-formation__qsec { border-block-end: 1px solid var(--pf-filet); }

.pf-formation-page .pf-formation__qsec .pf-formation__inner { padding-block: var(--pf-espace-l); }

.pf-formation-page .pf-formation__qsec-titre {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 1.25rem;
  font-weight: 650;
  color: var(--pf-encre);
}

.pf-formation-page .pf-formation__qsec p,
.pf-formation-page .pf-formation__qsec li {
  max-width: var(--pf-largeur-lecture);
  line-height: 1.65;
}

.pf-formation-page .pf-formation__qsec ul { margin: var(--pf-espace-xs) 0 0 1.15em; padding: 0; }

.pf-formation-page .pf-formation__qsec li { margin-block-end: var(--pf-espace-2xs); }

/* Tableau des indicateurs — la STRUCTURE existe avant les données. Les cellules
   portent un tiret cadratin, jamais un zéro ni un pourcentage : un tableau
   daté et vide se lit, un chiffre non consolidé induirait en erreur. */
.pf-formation-page .pf-formation__indicateurs { margin-block: var(--pf-espace-m) 0; overflow-x: auto; }

.pf-formation-page .pf-formation__indicateurs table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}

.pf-formation-page .pf-formation__indicateurs th,
.pf-formation-page .pf-formation__indicateurs td {
  padding: var(--pf-espace-2xs) var(--pf-espace-xs);
  text-align: left;
  vertical-align: top;
  border: 1px solid var(--pf-filet);
}

.pf-formation-page .pf-formation__indicateurs th {
  font-weight: 650;
  background-color: var(--pf-papier);
}

/* ==========================================================================
   ADAPTATIONS INTERMÉDIAIRES ET MOBILES — BUILD-13
   ========================================================================== */

@media (max-width: 1023px) {
  .pf-formation-page .pf-formation__module-ident { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 900px) {
  .pf-formation-page .pf-formation__perimetre,
  .pf-formation-page .pf-formation__sessions,
  .pf-formation-page .pf-formation__jours {
    grid-template-columns: 1fr;
  }

  /* Le tableau d'organisation passe en lecture verticale : l'intitulé au-dessus
     de sa valeur, sans jamais perdre le filet qui sépare deux entrées. */
  .pf-formation-page .pf-formation__org { grid-template-columns: 1fr; }

  .pf-formation-page .pf-formation__org dt {
    padding-block: var(--pf-espace-xs) 0;
    border-block-end: 0;
  }

  .pf-formation-page .pf-formation__org dd { padding-block-start: var(--pf-espace-3xs); }

  /* La carte de module empile numéro, corps, puis lien. */
  .pf-formation-page .pf-formation__module { grid-template-columns: 1fr; }

  /* Empilee, la pastille ne doit pas devenir une bande vide sur toute la
     largeur de la carte : elle se reduit a son contenu. */
  .pf-formation-page .pf-formation__module-num {
    justify-content: center;
    width: fit-content;
    min-width: 3.25rem;
    min-height: 0;
    padding: var(--pf-espace-2xs) var(--pf-espace-s);
  }
}

@media (max-width: 600px) {
  .pf-formation-page .pf-formation__inner {
    padding-inline: var(--pf-espace-s);
    padding-block: var(--pf-espace-l);
  }

  .pf-formation-page .pf-formation__hero .pf-formation__inner {
    padding-block: var(--pf-espace-l) var(--pf-espace-m);
  }

  .pf-formation-page .pf-formation__fil-inner { padding-inline: var(--pf-espace-s); }

  .pf-formation-page .pf-formation__qsec { padding-inline: var(--pf-espace-s); }

  .pf-formation-page .pf-formation__titre { max-width: none; }

  .pf-formation-page .pf-formation__module-ident { grid-template-columns: 1fr; }

  .pf-formation-page .pf-formation__volet,
  .pf-formation-page .pf-formation__module,
  .pf-formation-page .pf-formation__dates,
  .pf-formation-page .pf-formation__demande,
  .pf-formation-page .pf-formation__jour { padding: var(--pf-espace-s); }

  .pf-formation-page .pf-formation__formateur,
  .pf-formation-page .pf-formation__organisme { grid-template-columns: 1fr; }

  .pf-formation-page .pf-formation__monogramme {
    justify-content: center;
    width: fit-content;
    min-width: 3.25rem;
    min-height: 0;
    padding: var(--pf-espace-2xs) var(--pf-espace-s);
  }

  /* AUCUN MOTIF SOUS CE SEUIL — alignement sur la planche V3, dont la vue
     mobile ne porte aucun motif. Sous 600 px, le titre occupe toute la largeur
     du hero : l'axe, les paliers et l'arc le croisaient. BUILD-13.1R exige
     l'absence de collision avec le H1 et le chapô ; la version de poche de
     BUILD-13 est donc retirée, et non seulement atténuée. Le motif reprend
     normalement au-dessus du seuil. */
  .pf-formation-page .pf-formation__hero::before,
  .pf-formation-page .pf-formation__hero::after { content: none; }
}

/* Le motif n'est pas une information : il disparaît lorsque le contraste
   renforcé est demandé, comme les autres trames du site. */
@media (prefers-contrast: more) {
  .pf-formation-page .pf-formation__hero::before,
  .pf-formation-page .pf-formation__hero::after { content: none; }
}

/* ==========================================================================
   HUB TENDINEUX — CSS PROPRE À `tendinites-tendinopathies` (BUILD-TENDONS-V1)
   Source : planche `2026-08-25_TENDONS_HUB_5G_PLANCHE_SUPERSESSION_R4.html`,
   validée `PASS` par la revue Codex ciblée du 2026-08-25 · D-059.

   PÉRIMÈTRE. Toutes les règles de ce bloc sont portées par des classes qui
   n'existent que sur le hub tendineux : `pf-hero-clinique--fibres`,
   `pf-portes--tendons`, `pf-reperes--charge`, `pf-tendons-axe*`. Aucune règle
   générique n'est redéfinie, aucune page existante n'est atteinte — le
   centrage approuvé des cartes d'accueil (`.pf-douleurs .pf-portes`) et le
   rendu du pilier `comprendre-douleurs-persistantes` restent hors d'atteinte.

   AUCUN SECOND SYSTÈME DE COMPOSANTS. Le hub réutilise `pf-kicker`,
   `pf-chapo`, `pf-perimetre`, `pf-statut-encart`, `pf-reperes`, `pf-portes`,
   `pf-vigilance`, `pf-sources` et `pf-byline` tels qu'ils existent. Ce bloc ne
   crée qu'UNE figure — l'axe de charge — que le système ne portait pas, et
   trois adaptations de mesure sur des composants existants.
   ========================================================================== */

/* --- 5G — fibres parallèles ------------------------------------------------
   Huitième trame de la famille clinique. Géométrie relevée sur la planche R4 :
   UNE famille de lignes à 84°, période 16 px, trait de 1 px en `--pf-strate-2`
   sur le fond `--pf-strate`. Le jeton est employé, pas une copie : la planche
   écrit `#2B2620`, qui EST `--pf-strate-2`.

   Distincte des sept autres, et vérifiable : `--faisceau` porte DEUX familles
   quasi verticales (86° et 94°) dont l'interférence fait le motif,
   `--trajectoires` deux familles divergentes (74° et 106°), `--cordon` deux
   familles obliques déformées par `skewX`. Ici : une seule famille, aucune
   déformation, aucune interférence.

   CE QUE CETTE TRAME NE FAIT PAS. Elle ne figure aucun tendon, aucune fibre
   anatomique, aucune insertion. Elle est IDENTIQUE partout dans le hero — même
   angle, même période, même opacité, d'un bord à l'autre — donc elle ne peut
   pas raconter un avant/après. C'est le refus que 5L a formulé et que la
   famille tient depuis : une trame qui passerait du désordre à l'ordre
   encoderait « la méthode réorganise les fibres », et installerait la lecture
   « douleur = fibres encore désordonnées ». Rien ici ne varie, donc rien ne
   raconte.

   POURQUOI CE SÉLECTEUR, ET PAS `.pf-hero-clinique--fibres`. Les sept autres
   trames sont posées par une classe que `pf_clinique_trame()` ajoute au hero.
   Cette entrée n'a pas pu être écrite : `inc/pf-clinique.php` est du PHP, et la
   capacité d'écriture disponible refuse d'atteindre un fichier PHP hors du bac
   à sable Novamira ; la contourner par une capacité d'exécution générique est
   interdite par les règles du dépôt. La version précédente de ce bloc visait
   donc une classe modificatrice que rien ne posait — un sélecteur qui ne
   correspondait à AUCUN élément, mesuré et déclaré comme tel.

   Le hero est produit AVANT le contenu — offsets mesurés dans le HTML servi :
   hero 462, axe de charge 7 758, grille de portes 16 381. Aucun sélecteur de
   descendance ni de voisinage ne peut donc remonter du contenu vers le hero.
   `:has()` sur l'ancêtre commun le peut.

   L'ancre est DOUBLÉE sur les deux composants exclusifs du hub — l'axe de
   charge et sa grille de portes. Recensement exhaustif du site : ces deux noms
   n'apparaissent dans aucun autre contenu, dans aucun fichier du thème, dans
   aucune option ; les sept autres pages cliniques en comptent zéro et portent
   chacune sa propre classe de trame. Aucune dépendance à `page-id-86`, à un
   identifiant de staging ou à un domaine : le sélecteur suit le CONTENU, pas
   l'installation — le rapport de réinjection du 2026-08-17 établit que les
   identifiants numériques, eux, ne sont pas portables.

   FALLBACK SÛR, et c'est la doctrine que le thème tient déjà en douze endroits :
   là où `:has()` n'existe pas, la règle est simplement ignorée et le hub
   retrouve exactement le DÉFAUT SÛR de `pf_clinique_trame()` — un aplat sombre
   uni. Jamais pire que sans cette règle.

   Le socle `[class*="pf-hero-clinique--"]::before` ne s'applique pas ici, faute
   de classe modificatrice : `content`, `position` et `pointer-events` sont donc
   redéclarés. `.pf-hero-clinique` porte déjà `position: relative` et
   `overflow: hidden`, `__inner` porte `z-index: 1` : la trame reste derrière le
   texte.

   COUPLAGE ASSUMÉ. Si l'axe de charge ET la grille de portes disparaissaient un
   jour du contenu, la trame disparaîtrait avec eux. C'est un effet visible, pas
   silencieux — et préférable à un identifiant de page codé en dur. */
body.pf-clinique:has(.pf-tendons-axe, .pf-portes--tendons) .pf-hero-clinique::before {
  content: "";
  position: absolute;
  pointer-events: none;
  inset: -30% -14%;
  background: repeating-linear-gradient(84deg, transparent 0 7px, var(--pf-strate-2) 7px 8px, transparent 8px 16px);
  opacity: 0.9;
}

/* --- Mesure des figures : aucune règle, et c'est mesuré ---------------------
   Une première version de ce bloc bornait les figures à 53,75 rem, en visant
   `.entry-content[data-ast-blocks-layout] > :where(…)`. Cette règle NE
   S'APPLIQUAIT À RIEN : le gabarit clinique enveloppe chaque section dans
   `.pf-sec > .pf-sec__inner`, si bien qu'aucune figure n'est enfant direct de
   `.entry-content`. Mesuré au banc, `max-width` valait `none`.

   Elle n'est pas réécrite avec un sélecteur qui fonctionnerait, parce que la
   borne elle-même ne se transpose pas. La planche donne 860 px à l'axe et
   900 px aux portes dans une page de 920 px de contenu — 93 % et 98 % de sa
   mesure. Le gabarit rend ses sections dans une bande de 1 152 px : les
   mêmes proportions y vaudraient 1 075 et 1 130 px, soit la bande. Une borne
   absolue produirait donc une figure plus étroite que la planche, pas plus
   fidèle.

   Mesuré à 1440 px : prose 641 px, figures 1 152 px, `pf-sources` 1 152 px.
   Les figures prennent exactement la mesure que la famille clinique donne
   déjà à sa bibliographie. Aucune règle n'est ajoutée ici. */

/* --- Quatre portes : 2 × 2 -------------------------------------------------
   `.pf-portes` vaut trois colonnes au-dessus de 1100 px — la mesure de
   l'accueil, qui en porte cinq ou six. Le hub en porte QUATRE : trois colonnes
   y produiraient une rangée de trois puis une porte seule, le défaut de
   quinconce que le propriétaire a relevé sur l'accueil le 2026-08-25. La
   planche R4 les donne en 2 × 2 ; la règle ne vaut qu'au-dessus du palier, en
   dessous duquel `.pf-portes` passe déjà à deux colonnes puis à une. */
@media (min-width: 1101px) {
  .pf-portes--tendons { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* --- Le triptyque de la charge : trois colonnes ----------------------------
   `.pf-reperes` vaut deux colonnes à partir de 640 px. Les trois repères de la
   charge forment un SPECTRE — trop peu, adapté, trop — et 2 + 1 casserait la
   lecture en isolant le troisième terme. Trois colonnes seulement là où la
   mesure le permet. */
@media (min-width: 900px) {
  .pf-reperes--charge { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* --- Axe de charge ---------------------------------------------------------
   La seule figure que le système de composants ne portait pas. Trois zones
   contiguës et une bande de tolérance en pointillés, décalée et débordante.

   CE QU'ELLE MONTRE : un principe — adaptation, dose, récupération.
   CE QU'ELLE NE MONTRE PAS, et la légende de la page le dit en toutes
   lettres : aucun seuil universel, aucun protocole, aucune genèse de
   tendinopathie. La bande déborde volontairement des zones et ne s'aligne sur
   aucune frontière : sa position et sa largeur ne se lisent pas sur un dessin.

   Aucune image, aucun SVG, aucune requête réseau — même technique que les
   trames. Le rôle `img` et le libellé accessible sont portés par le contenu. */
.pf-tendons-axe {
  margin-block-start: var(--pf-espace-m);
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
}

.pf-tendons-axe__intitule {
  margin-block: 0 var(--pf-espace-xs);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-align: center;
  color: var(--pf-encre-2);
}

.pf-tendons-axe__zones {
  position: relative;
  display: flex;
  min-height: 4.625rem;
  border: 1px solid var(--pf-filet);
}

.pf-tendons-axe__zone {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--pf-espace-2xs) var(--pf-espace-xs);
  font-size: 0.8125rem;
  line-height: 1.45;
  text-align: center;
  color: var(--pf-encre);
}

.pf-tendons-axe__zone--faible {
  background: repeating-linear-gradient(84deg, var(--pf-ivoire) 0 6px, color-mix(in srgb, var(--pf-filet) 45%, var(--pf-ivoire)) 6px 7px);
}

.pf-tendons-axe__zone--adaptee {
  border-inline: 1px solid var(--pf-filet);
  background-color: color-mix(in srgb, var(--pf-filet) 55%, var(--pf-papier));
}

.pf-tendons-axe__zone--au-dela {
  background: repeating-linear-gradient(84deg, color-mix(in srgb, var(--pf-marque) 10%, var(--pf-fond)) 0 6px, color-mix(in srgb, var(--pf-marque) 24%, var(--pf-fond)) 6px 7px);
}

/* Débordement volontaire de 9 px en haut et en bas : la bande n'est pas une
   zone de plus, elle se superpose et déborde — c'est ce qui l'empêche d'être
   lue comme une quatrième catégorie. */
.pf-tendons-axe__bande {
  position: absolute;
  inset-block: -9px;
  inset-inline-start: 31%;
  width: 38%;
  border: 1.5px dashed var(--pf-accent);
  pointer-events: none;
}

.pf-tendons-axe__legende {
  margin-block: var(--pf-espace-s) 0;
  font-size: 0.75rem;
  font-weight: 600;
  text-align: center;
  color: var(--pf-accent);
}

.pf-tendons-axe__graduation {
  display: flex;
  justify-content: space-between;
  margin-block: var(--pf-espace-2xs) 0;
  font-size: 0.6875rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
}

@media (max-width: 600px) {
  .pf-tendons-axe { padding: var(--pf-espace-s); }

  .pf-tendons-axe__zone {
    padding: var(--pf-espace-2xs);
    font-size: 0.75rem;
    line-height: 1.35;
  }
}

/* ==========================================================================
   SPOKE TENDINOPATHIE PERSISTANTE — CSS PROPRE À `tendinopathie-persistante`
   Source : planche `2026-08-25_5M_PLANCHE_TENDINOPATHIE_PERSISTANTE_SUPERSESSION_R1.html`,
   validée `PASS — 0 C, 0 B, 3 N` par la revue Codex ciblée du 2026-08-25 · D-060.

   PÉRIMÈTRE. Toutes les règles de ce bloc sont portées par des classes qui
   n'existent que sur ce spoke : `pf-dimensions*` et `pf-portes--persistance`.
   Recensement exhaustif effectué avant écriture : ces deux noms n'apparaissent
   dans AUCUN autre contenu (requête `LIKE` sur tous les `post_content`, hors
   révisions), dans AUCUN fichier `.php` / `.css` / `.js` du thème enfant
   (parcours récursif), dans AUCUNE option et dans AUCUNE `postmeta`. Une seule
   page du site matche l'ancre.

   AUCUN SECOND SYSTÈME DE COMPOSANTS. Le spoke réutilise `pf-kicker`,
   `pf-chapo`, `pf-perimetre`, `pf-statut-encart`, `pf-reperes`, `pf-portes`,
   `pf-vigilance`, `pf-sources`, `pf-byline` et `pf-retour` tels qu'ils
   existent. Ce bloc ne crée qu'UNE figure — les trois dimensions — que le
   système ne portait pas, plus une mesure de grille et un état de lien.
   ========================================================================== */

/* --- 5M — strates décalées -------------------------------------------------
   Neuvième trame de la famille clinique. Géométrie relevée sur la planche R1 :
   DEUX familles strictement horizontales (180°), périodes 34 px et 62 px,
   traits de 1 px en `--pf-strate-2` et `#31291F`, opacités 0,9 et 0,55.

   Distincte des huit autres, et vérifiable : `--segments` (5R) est la plus
   proche mais ses deux familles sont INCLINÉES (177° et 171°) et ses périodes
   bien plus larges (61 px et 177 px) ; `--fibres` (hub) est une famille unique
   à 84°, quasi verticale ; `--axial` et `--lignes` ne portent qu'une couche.
   Ici : deux familles, horizontales exactes, périodes serrées.

   CE QUE CETTE TRAME NE FAIT PAS. Elle ne figure aucun tendon, aucune fibre,
   aucune insertion, et surtout aucune chronologie — elle est IDENTIQUE d'un
   bord à l'autre du hero, même angle, même période, même opacité. Elle ne peut
   donc raconter aucun avant/après. C'est le refus que la famille tient depuis
   5L : une trame qui passerait du désordre à l'ordre encoderait « la méthode
   réorganise les fibres ». Rien ici ne varie, donc rien ne raconte. Le motif
   dit la TEMPORALITÉ — des strates qui se déposent — pas la matière.

   POURQUOI CE SÉLECTEUR, ET PAS `.pf-hero-clinique--strates`. Les huit autres
   trames sont posées par une classe que `pf_clinique_trame()` ajoute au hero.
   Cette entrée n'a PAS pu être écrite : `inc/pf-clinique.php` est du PHP, et
   `novamira/edit-file` refuse explicitement d'atteindre un fichier PHP hors du
   bac à sable — refus obtenu et consigné dans cette passe, non supposé. La
   contourner par une capacité d'exécution générique est interdite par D-015 et
   par `CLAUDE.md` §3. Même doctrine, et même sélecteur de repli, que le hub
   tendineux au 2026-08-25.

   Le hero est produit AVANT le contenu : aucun sélecteur de descendance ni de
   voisinage ne peut remonter du contenu vers le hero. `:has()` sur l'ancêtre
   commun le peut.

   L'ancre est DOUBLÉE sur les deux composants exclusifs du spoke — la figure
   des trois dimensions et sa grille de portes — pour qu'aucun des deux ne
   porte seul la trame.

   FALLBACK SÛR. Là où `:has()` n'existe pas, la règle est ignorée et le hero
   retrouve exactement le DÉFAUT SÛR de `pf_clinique_trame()` : un aplat sombre
   uni. Jamais pire que sans cette règle.

   Le socle `[class*="pf-hero-clinique--"]::before` ne s'applique pas ici, faute
   de classe modificatrice : `content`, `position` et `pointer-events` sont donc
   redéclarés. `.pf-hero-clinique` porte déjà `position: relative` et
   `overflow: hidden`, `__inner` porte `z-index: 1` : la trame reste derrière le
   texte. Sous 782 px, `.pf-clinique .pf-hero-clinique::after` est déjà masqué
   par la règle existante — la seconde couche disparaît donc d'elle-même sur
   mobile, conformément à la doctrine de la famille.

   COUPLAGE ASSUMÉ. Si la figure ET la grille de portes disparaissaient un jour
   du contenu, la trame disparaîtrait avec elles. C'est un effet visible, pas
   silencieux — et préférable à un identifiant de page codé en dur, que le
   rapport de réinjection du 2026-08-17 a établi comme non portable. */
body.pf-clinique:has(.pf-dimensions, .pf-portes--persistance) .pf-hero-clinique::before {
  content: "";
  position: absolute;
  pointer-events: none;
  inset: -30% -14%;
  background: repeating-linear-gradient(180deg, transparent 0 13px, var(--pf-strate-2) 13px 14px, transparent 14px 34px);
  opacity: 0.9;
}

body.pf-clinique:has(.pf-dimensions, .pf-portes--persistance) .pf-hero-clinique::after {
  content: "";
  position: absolute;
  pointer-events: none;
  inset: -30% -14%;
  background: repeating-linear-gradient(180deg, transparent 0 27px, #31291F 27px 28px, transparent 28px 62px);
  opacity: 0.55;
}

/* --- Figure des trois dimensions -------------------------------------------
   La planche porte un SVG unique de 800 × 250 contenant ses propres libellés.
   Transposé tel quel, il se réduirait à 0,49× sur un mobile de 390 px et ses
   textes tomberaient sous 6 px. La figure est donc reconstruite en HTML — un
   libellé réel par piste, et un tracé SVG sans aucun texte —, ce qui reflue
   naturellement. La géométrie des trois courbes est reprise de la planche,
   translatée dans un `viewBox` par piste ; `preserveAspectRatio: none` étire
   horizontalement, et `vector-effect: non-scaling-stroke` maintient l'épaisseur
   du trait constante à toute largeur.

   CE QUE LA FIGURE NE DIT PAS. Aucune échelle, aucune valeur, aucune durée,
   aucun ordre : les trois pistes sont SÉPARÉES, chacune sur sa propre ligne de
   base, sans axe commun. C'est exactement la correction B03 de 5M.4 — des
   courbes superposées sur un axe partagé suggéraient une séquence-type. Le
   texte de la figure et le `role="img"` le disent, et l'encadré `pf-perimetre`
   qui la suit le répète. */
.pf-clinique .pf-dimensions {
  margin-block: var(--pf-espace-m) 0;
  padding: var(--pf-espace-m);
  border: 1px solid var(--pf-filet);
  background-color: var(--pf-fond);
}

.pf-clinique .pf-dimensions__intitule {
  margin: 0 0 var(--pf-espace-2xs);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--pf-encre-2);
  text-align: center;
}

.pf-clinique .pf-dimensions__amorce {
  margin: 0 0 var(--pf-espace-s);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

.pf-clinique .pf-dimensions__piste {
  display: grid;
  grid-template-columns: 7.5rem 1fr;
  align-items: center;
  gap: var(--pf-espace-xs);
  margin-block-start: var(--pf-espace-2xs);
}

.pf-clinique .pf-dimensions__nom {
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--pf-encre);
}

.pf-clinique .pf-dimensions__nom--douleur { color: var(--pf-accent); }
.pf-clinique .pf-dimensions__nom--imagerie { color: var(--pf-encre-2); }
.pf-clinique .pf-dimensions__nom--capacite { color: #2F6B52; }

.pf-clinique .pf-dimensions__trace {
  display: block;
  width: 100%;
  height: 3.5rem;
}

.pf-clinique .pf-dimensions__base {
  stroke: var(--pf-filet);
  stroke-width: 1;
}

.pf-clinique .pf-dimensions__trace path { stroke-width: 2; }
.pf-clinique .pf-dimensions__trace--douleur path { stroke: var(--pf-accent); }
.pf-clinique .pf-dimensions__trace--imagerie path { stroke: #8A8175; stroke-dasharray: 7 5; }
.pf-clinique .pf-dimensions__trace--capacite path { stroke: #2F6B52; }

.pf-clinique .pf-dimensions__mesure {
  margin: var(--pf-espace-s) 0 0;
  padding-block-start: var(--pf-espace-2xs);
  border-block-start: 1px dotted var(--pf-filet);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--pf-encre-2);
}

@media (max-width: 640px) {
  .pf-clinique .pf-dimensions { padding: var(--pf-espace-s); }
  .pf-clinique .pf-dimensions__piste { grid-template-columns: 1fr; gap: var(--pf-espace-3xs); }
  .pf-clinique .pf-dimensions__trace { height: 2.75rem; }
}

/* --- Grille des quatre portes ----------------------------------------------
   `.pf-portes` est une grille à trois colonnes : quatre portes y produiraient
   une rangée orpheline. Deux colonnes à partir de 640 px donnent 2 × 2. Sous
   ce seuil, la grille générique retombe déjà sur une colonne. Le modificateur
   n'existe que sur ce spoke — il ne peut atteindre ni l'accueil, ni le hub, ni
   `/vos-douleurs/`. */
@media (min-width: 640px) {
  .pf-clinique .pf-portes--persistance { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* --- Renvoi de la carte tendons sur l'accueil, à l'état lié -----------------
   Le renvoi `pf-porte__renvoi` était rendu « comme un libellé, jamais comme un
   lien actif », faute de destination. La destination existe désormais et le
   renvoi devient un lien. D-058 §3 et D-059 §3 le maintiennent en ACCÈS
   SECONDAIRE : il ne doit pas se lire comme une septième porte. Le lien
   conserve donc l'encre secondaire du renvoi — et non l'accent des titres de
   porte — et prend un soulignement pour l'affordance.

   CONTRASTES MESURÉS, non supposés, sur le rendu réel :
   `--pf-encre-2` #56514B sur `--pf-fond` #FAF9F6 = 7,46:1 ;
   sur `--pf-papier` #F3EFE7, fond au survol de la carte = 6,84:1.
   Les deux dépassent le seuil AA de 4,5:1 pour du texte normal. */
.pf-clinique .pf-porte__renvoi a,
.pf-douleurs .pf-porte__renvoi a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.2em;
  text-decoration-thickness: 1px;
}

.pf-clinique .pf-porte__renvoi a:hover,
.pf-douleurs .pf-porte__renvoi a:hover {
  color: var(--pf-accent);
}

.pf-clinique .pf-porte__renvoi a:focus-visible,
.pf-douleurs .pf-porte__renvoi a:focus-visible {
  outline: 2px solid var(--pf-accent);
  outline-offset: 3px;
}

/* ==========================================================================
   FOCUS CLAVIER DES CHAMPS DU FORMULAIRE — CORRECTIF WCAG 2.4.7

   LE DÉFAUT. La règle générique `input:focus-visible` du socle (ligne 234) est
   correcte, mais elle perd la cascade contre une règle du bloc inline
   `astra-theme-css-inline-css` :

     input[type="text"]:focus, …, select:focus, textarea:focus
     { border-color:#046BD2; box-shadow:none; outline:none; }

   Spécificité (0,2,1) contre (0,1,1) : Astra l'emporte. Résultat mesuré au
   clavier sur la page 66 : `outline-style: none` sur « Nom et prénom »,
   « Adresse électronique » et « Année », et aucun contour visible sur le
   « Message » — alors que `:focus-visible` correspond bien. Les radios, le
   bouton d'envoi et les liens n'étaient pas touchés.

   POURQUOI CE SÉLECTEUR-LÀ. `body.pf-formation-page` porte la spécificité à
   (0,3,2), ce qui dépasse Astra sans recourir à `!important`. Le préfixe `body`
   n'est pas décoratif : c'est lui qui fait la différence, la classe seule
   n'apportant que (0,2,2) sur `input[type="…"]`.

   PORTÉE VOLONTAIREMENT ÉTROITE. Seuls les types réellement présents dans le
   formulaire sont visés : `text`, `email`, et le `textarea`. Astra neutralise
   aussi `number`, `url`, `password`, `search`, `tel`, `date` et `select` : si
   un champ de l'un de ces types était ajouté à une page Formation, le défaut
   reviendrait et CETTE RÈGLE DEVRAIT SUIVRE. C'est le coût assumé d'une portée
   restreinte à ce qui est testé.

   RÉSULTAT MESURÉ. Contour relevé dans les pixels du rendu, à 1440, 768 et
   390 px, après navigation clavier réelle :
   - Nom et prénom, Adresse électronique, Année : contour de 3 px sur les
     quatre côtés. Il n'y en avait AUCUN avant ce correctif.
   - Message : cette règle lui appliquait, elle aussi, un contour de 3 px
     conforme sur les quatre côtés. Il est de nouveau couvert par ce groupe,
     et les quatre champs partagent donc le même anneau d'accent.
   Les radios et le bouton d'envoi restent à 3 px : aucune régression.

   RIEN NE CHANGE AU REPOS. Ces déclarations ne s'appliquent qu'à l'état
   `:focus-visible`, c'est-à-dire à la navigation clavier. Aucune géométrie
   n'est touchée : `outline` ne participe pas au flux, donc aucun déplacement
   de mise en page.
   ========================================================================== */

body.pf-formation-page input[type="text"]:focus-visible,
body.pf-formation-page input[type="email"]:focus-visible,
body.pf-formation-page textarea:focus-visible {
  outline: 3px solid var(--pf-accent);
  outline-offset: 2px;
}

/* ==========================================================================
   FOCUS CLAVIER — BOUTON GLOBAL « RETOUR EN HAUT »
   Passe du 2026-08-28. Technique WCAG C40, indicateur bicolore.

   LE DÉFAUT. Ce bouton peignait 3 px de `var(--pf-accent)`, mais il flotte
   au-dessus du pied de page `#221E1A`, où ce contour ne donne que 2,5893:1
   — sous le seuil de 3:1 de WCAG 1.4.11. Mesure stable : identique
   immédiatement et après stabilisation.

   POURQUOI DEUX COULEURS. Un contour d'une seule couleur ne peut pas être
   contrasté à la fois sur fond clair et sur fond sombre. C40 superpose deux
   bandes : la claire ressort sur le sombre, la sombre ressort sur le clair.
   Il y a donc toujours une bande d'au moins 3:1 quel que soit ce qui se
   trouve derrière — et ce bouton, précisément, traverse les deux. Mesuré :
   14,4338:1 sur fond clair, 15,7224:1 sur le pied de page sombre.

   POURQUOI DES COULEURS LITTÉRALES. `var(--pf-accent)` ne vaut pas la même
   chose partout : #AA3814 à la racine, une teinte plus sourde à l'intérieur
   du conteneur Formation. Un indicateur qui doit rester prévisible sur tout
   le site ne peut pas dépendre d'une variable contextuelle.

   GÉOMÉTRIE. `outline` de 2 px à l'offset 0, puis `box-shadow` d'étalement
   4 px : l'outline recouvre les 2 px internes de l'ombre, ce qui laisse voir
   2 px de chaque couleur. Ni l'un ni l'autre ne participe au flux : aucun
   déplacement de mise en page, aucun reflow.

   COULEURS FORCÉES. Le `box-shadow` y est supprimé par le système, pas
   l'`outline`. C'est pourquoi l'indicateur ne repose JAMAIS sur la seule
   ombre — vérifié sous `forced-colors: active`.

   SPÉCIFICITÉ, SANS `!important`. (1,1,0), ce qui dépasse la règle
   `#ast-scroll-top { outline: inherit }` d'Astra (1,0,0).

   PORTÉE GLOBALE, ASSUMÉE. Ce bouton est un composant d'Astra présent sur
   TOUT le site et traversant des arrière-plans clairs et sombres : la règle
   est délibérément globale et remplace une version bornée aux pages
   Formation, afin qu'il n'existe qu'une seule définition.

   CE BLOC NE CONCERNE QUE CE BOUTON. Un temps, la zone « Message » du
   formulaire a reçu le même indicateur. C'était fondé sur un constat de
   « contour de 1 px » qui s'est révélé être une ERREUR DE MESURE : le
   relevé avait été fait pendant la transition de 0,2 s du champ. Le constat
   est rétracté et le double anneau a été retiré du champ — les quatre
   champs du formulaire partagent de nouveau l'anneau d'accent, plus haut
   dans ce fichier.
   ========================================================================== */

#ast-scroll-top:focus-visible {
  outline: 2px solid #F9F9F9;
  outline-offset: 0;
  box-shadow: 0 0 0 4px #221E1A;
}
