/* = Utilitaires — ADR 0005 (docs/adr/0005-utilitaires-liste-fermee.md).
   Deux familles, rien d'autre : l'échelle de spacing (N × 4 px) et une liste
   fermée d'utilitaires à une seule propriété. Tout ce qui combine deux
   propriétés, ou nomme une valeur (--sm-mb16, --fs13), est un block ou un
   modifier BEM dans la feuille de son module. La quarantaine des modifiers
   par valeur (.css-utilitaires-quarantine) est vide depuis le lot D-1 du
   design system (21/09/2026) ; test_utilitaires.py la tient à zéro. Chargée
   en dernier, exprès : un utilitaire ajuste un block et doit gagner sur lui
   à spécificité égale (ADR 0004).  */

/* --- Liste fermée ---
   Une propriété par classe. Ajouter une entrée ici, c'est amender l'ADR 0005 et test_utilitaires.py.  */
.nowrap {
  white-space: nowrap;
}

.italic {
  font-style: italic;
}

.text-right {
  text-align: right;
}

.text-center {
  text-align: center;
}

.text-left {
  text-align: left;
}

.text-muted {
  color: var(--color-text-muted);
}

.flex {
  display: flex;
}

.flex-wrap {
  flex-wrap: wrap;
}

.flex-1 {
  flex: 1;
}

.items-center {
  align-items: center;
}

.items-start {
  align-items: flex-start;
}

.items-end {
  align-items: flex-end;
}

.items-baseline {
  align-items: baseline;
}

.justify-between {
  justify-content: space-between;
}

.justify-end {
  justify-content: flex-end;
}

.justify-center {
  justify-content: center;
}

.text-xs {
  font-size: var(--text-11);
}

.text-sm {
  font-size: var(--text-12);
}

/* 13 et 16 px (ADR 0005, amendement du 21/09/2026, lot D-1 du design
   system) : `text-md` est la taille la plus répétée du dépôt — 352
   déclarations, celle des champs, des textes d'aide, des tables et des
   en-têtes de carte —, `text-lg` celle des titres de section. L'échelle se lit
   par taille croissante : xs 11, sm 12, md 13, base 14 (le corps), lg 16. */
.text-md {
  font-size: var(--text-13);
}

.text-base {
  font-size: var(--text-14);
}

.text-lg {
  font-size: var(--text-16);
}

/* La police à chasse fixe seule, sans fond (ADR 0005, amendement du
   19/09/2026, lot B-17) : un champ de saisie de JSON ou de HTML, une cellule
   de SIRET, un numéro de police. L'étiquette de code avec son fond est
   `<code class="code">` (code.css) ; un chiffre n'est jamais en mono. */
.text-mono {
  font-family: var(--font-mono);
}

.font-medium {
  font-weight: var(--weight-medium);
}

.font-semibold {
  font-weight: var(--weight-semibold);
}

.font-normal {
  font-weight: var(--weight-normal);
}

.text-danger {
  color: var(--color-danger);
}

.text-success {
  color: var(--color-success);
}

.text-warning {
  color: var(--color-warning);
}

.hidden {
  display: none;
}

.block {
  display: block;
}

.inline-block {
  display: inline-block;
}

/* `inline` et `contents` (design system, lot D-3, ADR 0005 amendé) : un
   <form> posé dans une ligne de texte ou d'actions (`form--inline`, 49
   usages), un <form> transparent pour la grille qui le contient
   (`form--contents`). */
.inline {
  display: inline;
}

.contents {
  display: contents;
}

.inline-flex {
  display: inline-flex;
}


.flex-none {
  flex: none;
}

.overflow-x-auto {
  overflow-x: auto;
}

/* Un enfant de grille sur toute la largeur (ADR 0005, amendement du
   19/09/2026, lot B-18) : trois blocks de module disaient `grid-column: 1 / -1`
   sous trois noms. */
.col-span-full {
  grid-column: 1 / -1;
}

.relative {
  position: relative;
}

/* Les deux compagnons de `flex-1` (ADR 0005, amendement du 21/09/2026,
   lot D-1) : `min-w-0` laisse un enfant flex rétrécir sous son contenu
   (`flex: 1; min-width: 0` était écrit onze fois), `shrink-0` l'en empêche. */
.min-w-0 {
  min-width: 0;
}

.shrink-0 {
  flex-shrink: 0;
}

/* Un filet de séparation en haut ou en bas, et la main sur un élément
   cliquable qui n'est pas un lien (ADR 0005, amendement du 21/09/2026,
   lot D-1) : 31 blocks ne disaient qu'un `border-top`, 19 qu'un `cursor`. */
.border-t {
  border-top: 1px solid var(--color-border);
}

.border-b {
  border-bottom: 1px solid var(--color-border);
}

.cursor-pointer {
  cursor: pointer;
}

.text-primary {
  color: var(--color-primary);
}

.text-emphasis {
  color: var(--color-text);
}

/* La couleur de texte secondaire, entre le texte et l'atténué (ADR 0005,
   amendement du 19/09/2026, lot B-18) : les compteurs en texte (« 12 contacts »,
   « 3 étapes ») que la quarantaine count et la quarantaine KPI retenaient. */
.text-secondary {
  color: var(--color-text-secondary);
}

/* --- Échelle de spacing ---
   N × 4 px : 0 1 2 3 4 5 6 8 10, lus dans tokens.css (--space-N), seule
   source des valeurs. Grille complète, 15 familles × 9 paliers : un palier
   inutilisé reste défini, c'est un menu. Ordre tous-côtés → axe → côté,
   pour qu'une composition `m-0 mb-3` (= margin: 0 0 12px) rende le côté
   gagnant. mx-auto / ml-auto / mr-auto : centrage.  */

.m-0 {
  margin: var(--space-0);
}

.m-1 {
  margin: var(--space-1);
}

.m-2 {
  margin: var(--space-2);
}

.m-3 {
  margin: var(--space-3);
}

.m-4 {
  margin: var(--space-4);
}

.m-5 {
  margin: var(--space-5);
}

.m-6 {
  margin: var(--space-6);
}

.m-8 {
  margin: var(--space-8);
}

.m-10 {
  margin: var(--space-10);
}

.mx-0 {
  margin-inline: var(--space-0);
}

.mx-1 {
  margin-inline: var(--space-1);
}

.mx-2 {
  margin-inline: var(--space-2);
}

.mx-3 {
  margin-inline: var(--space-3);
}

.mx-4 {
  margin-inline: var(--space-4);
}

.mx-5 {
  margin-inline: var(--space-5);
}

.mx-6 {
  margin-inline: var(--space-6);
}

.mx-8 {
  margin-inline: var(--space-8);
}

.mx-10 {
  margin-inline: var(--space-10);
}

.my-0 {
  margin-block: var(--space-0);
}

.my-1 {
  margin-block: var(--space-1);
}

.my-2 {
  margin-block: var(--space-2);
}

.my-3 {
  margin-block: var(--space-3);
}

.my-4 {
  margin-block: var(--space-4);
}

.my-5 {
  margin-block: var(--space-5);
}

.my-6 {
  margin-block: var(--space-6);
}

.my-8 {
  margin-block: var(--space-8);
}

.my-10 {
  margin-block: var(--space-10);
}

.mt-0 {
  margin-top: var(--space-0);
}

.mt-1 {
  margin-top: var(--space-1);
}

.mt-2 {
  margin-top: var(--space-2);
}

.mt-3 {
  margin-top: var(--space-3);
}

.mt-4 {
  margin-top: var(--space-4);
}

.mt-5 {
  margin-top: var(--space-5);
}

.mt-6 {
  margin-top: var(--space-6);
}

.mt-8 {
  margin-top: var(--space-8);
}

.mt-10 {
  margin-top: var(--space-10);
}

.mr-0 {
  margin-right: var(--space-0);
}

.mr-1 {
  margin-right: var(--space-1);
}

.mr-2 {
  margin-right: var(--space-2);
}

.mr-3 {
  margin-right: var(--space-3);
}

.mr-4 {
  margin-right: var(--space-4);
}

.mr-5 {
  margin-right: var(--space-5);
}

.mr-6 {
  margin-right: var(--space-6);
}

.mr-8 {
  margin-right: var(--space-8);
}

.mr-10 {
  margin-right: var(--space-10);
}

.mb-0 {
  margin-bottom: var(--space-0);
}

.mb-1 {
  margin-bottom: var(--space-1);
}

.mb-2 {
  margin-bottom: var(--space-2);
}

.mb-3 {
  margin-bottom: var(--space-3);
}

.mb-4 {
  margin-bottom: var(--space-4);
}

.mb-5 {
  margin-bottom: var(--space-5);
}

.mb-6 {
  margin-bottom: var(--space-6);
}

.mb-8 {
  margin-bottom: var(--space-8);
}

.mb-10 {
  margin-bottom: var(--space-10);
}

.ml-0 {
  margin-left: var(--space-0);
}

.ml-1 {
  margin-left: var(--space-1);
}

.ml-2 {
  margin-left: var(--space-2);
}

.ml-3 {
  margin-left: var(--space-3);
}

.ml-4 {
  margin-left: var(--space-4);
}

.ml-5 {
  margin-left: var(--space-5);
}

.ml-6 {
  margin-left: var(--space-6);
}

.ml-8 {
  margin-left: var(--space-8);
}

.ml-10 {
  margin-left: var(--space-10);
}

.p-0 {
  padding: var(--space-0);
}

.p-1 {
  padding: var(--space-1);
}

.p-2 {
  padding: var(--space-2);
}

.p-3 {
  padding: var(--space-3);
}

.p-4 {
  padding: var(--space-4);
}

.p-5 {
  padding: var(--space-5);
}

.p-6 {
  padding: var(--space-6);
}

.p-8 {
  padding: var(--space-8);
}

.p-10 {
  padding: var(--space-10);
}

.px-0 {
  padding-inline: var(--space-0);
}

.px-1 {
  padding-inline: var(--space-1);
}

.px-2 {
  padding-inline: var(--space-2);
}

.px-3 {
  padding-inline: var(--space-3);
}

.px-4 {
  padding-inline: var(--space-4);
}

.px-5 {
  padding-inline: var(--space-5);
}

.px-6 {
  padding-inline: var(--space-6);
}

.px-8 {
  padding-inline: var(--space-8);
}

.px-10 {
  padding-inline: var(--space-10);
}

.py-0 {
  padding-block: var(--space-0);
}

.py-1 {
  padding-block: var(--space-1);
}

.py-2 {
  padding-block: var(--space-2);
}

.py-3 {
  padding-block: var(--space-3);
}

.py-4 {
  padding-block: var(--space-4);
}

.py-5 {
  padding-block: var(--space-5);
}

.py-6 {
  padding-block: var(--space-6);
}

.py-8 {
  padding-block: var(--space-8);
}

.py-10 {
  padding-block: var(--space-10);
}

.pt-0 {
  padding-top: var(--space-0);
}

.pt-1 {
  padding-top: var(--space-1);
}

.pt-2 {
  padding-top: var(--space-2);
}

.pt-3 {
  padding-top: var(--space-3);
}

.pt-4 {
  padding-top: var(--space-4);
}

.pt-5 {
  padding-top: var(--space-5);
}

.pt-6 {
  padding-top: var(--space-6);
}

.pt-8 {
  padding-top: var(--space-8);
}

.pt-10 {
  padding-top: var(--space-10);
}

.pr-0 {
  padding-right: var(--space-0);
}

.pr-1 {
  padding-right: var(--space-1);
}

.pr-2 {
  padding-right: var(--space-2);
}

.pr-3 {
  padding-right: var(--space-3);
}

.pr-4 {
  padding-right: var(--space-4);
}

.pr-5 {
  padding-right: var(--space-5);
}

.pr-6 {
  padding-right: var(--space-6);
}

.pr-8 {
  padding-right: var(--space-8);
}

.pr-10 {
  padding-right: var(--space-10);
}

.pb-0 {
  padding-bottom: var(--space-0);
}

.pb-1 {
  padding-bottom: var(--space-1);
}

.pb-2 {
  padding-bottom: var(--space-2);
}

.pb-3 {
  padding-bottom: var(--space-3);
}

.pb-4 {
  padding-bottom: var(--space-4);
}

.pb-5 {
  padding-bottom: var(--space-5);
}

.pb-6 {
  padding-bottom: var(--space-6);
}

.pb-8 {
  padding-bottom: var(--space-8);
}

.pb-10 {
  padding-bottom: var(--space-10);
}

.pl-0 {
  padding-left: var(--space-0);
}

.pl-1 {
  padding-left: var(--space-1);
}

.pl-2 {
  padding-left: var(--space-2);
}

.pl-3 {
  padding-left: var(--space-3);
}

.pl-4 {
  padding-left: var(--space-4);
}

.pl-5 {
  padding-left: var(--space-5);
}

.pl-6 {
  padding-left: var(--space-6);
}

.pl-8 {
  padding-left: var(--space-8);
}

.pl-10 {
  padding-left: var(--space-10);
}

.gap-0 {
  gap: var(--space-0);
}

.gap-1 {
  gap: var(--space-1);
}

.gap-2 {
  gap: var(--space-2);
}

.gap-3 {
  gap: var(--space-3);
}

.gap-4 {
  gap: var(--space-4);
}

.gap-5 {
  gap: var(--space-5);
}

.gap-6 {
  gap: var(--space-6);
}

.gap-8 {
  gap: var(--space-8);
}

.gap-10 {
  gap: var(--space-10);
}

.mx-auto {
  margin-inline: auto;
}

.ml-auto {
  margin-left: auto;
}

.mr-auto {
  margin-right: auto;
}
