/* ═══════════════════════════════════════════════════════════════════════════
   `/fournisseurs#afaire` — L'ONGLET D'ARRIVÉE (2026-09-14)

   UNE carte à zones (`.jv-*`), cinq groupes. Rien ici ne redéfinit une classe
   du socle : les rangées sont des `.dash-row` de `.dash-table--todo` (déjà
   d'airfact) et les cellules à deux lignes sont l'idiome `.cell-main` /
   `.cell-sub` d'`app-core/…/tables.css`. Il ne reste que ce que ni le socle ni
   la carte ne connaissent : le récap des écarts, et les amorces de chat.

   ⚠ `.af-afaire-col` A ÉTÉ RETIRÉE le 14-09 avec la `.dash-grid` qui la
   portait — « grande carte à zones partout » (Olivier). La pile d'une colonne
   est maintenant celle d'une `.jv-zone`, et son rythme celui de `.jv-groupe` :
   déclaré UNE fois dans `airfact-custom.css`, pour les trois écrans.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Une rangée de file MÈNE QUELQUE PART : le curseur doit le dire avant le clic.
   `.dash-row:hover` (socle) porte déjà le fond survolé — on n'ajoute que ça. */
.af-file { cursor: pointer; }

/* ⚠ `.af-file-perimetre` RETIRÉE le 14-09 (6e passe) avec les sous-lignes des
   files : « supprimer la deuxième ligne sur chaque ligne » (Olivier). Le
   dénominateur n'a pas disparu pour autant — il a remonté dans l'infobulle de
   la rangée (`infobulleDe()`), avec le constat, l'ancienneté et le montant.
   Ne pas RENDRE n'est pas masquer : ce qu'on replie doit remonter, sinon
   l'écran devient muet, ce qui est pire qu'illisible. */

/* ⚠ `.af-afaire-achat-tete` RETIRÉE le 14-09 (9e passe) avec la phrase
   « N factures — N fournisseurs actifs sur N référencés » (Olivier). Elle n'a
   pas disparu : elle est dans le `title` de chaque puce de fenêtre — et sur
   CHAQUE puce, pas seulement la fenêtre ouverte, de sorte que le volume d'un
   mois et celui d'une année se comparent sans changer de fenêtre. */

/* Les amorces de chat : des liens, empilés, qui se lisent comme des questions
   déjà écrites. Pas des boutons — on n'exécute rien, on ouvre une conversation. */
.af-afaire-xori {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
/* ⚠ TROIS TOKENS FANTÔMES CORRIGÉS (14-09). `--border-color`, `--radius-md` et
   `--t-sm` ne sont définis NULLE PART dans le vocabulaire (`tokens.css` dit
   `--border`, `--radius`, et l'échelle d'airfact dit `--t-corps`). Sans repli,
   `var(--inconnu)` rend la déclaration INVALIDE AU CALCUL : la propriété
   retombe à sa valeur initiale. Ces amorces étaient donc rendues SANS bordure,
   SANS arrondi et à la taille du corps de page — visiblement pas les cartes
   qu'elles prétendaient être, et rien ne l'annonçait. Vu par
   `app-core/cli/probe-css-tokens.php --app=airfact`. */
.af-afaire-amorce {
  display: block;
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text-secondary);
  text-decoration: none;
  font-size: var(--t-corps);
  line-height: 1.4;
}
.af-afaire-amorce:hover {
  border-color: var(--primary);
  color: var(--primary);
}


/* ─────────────────────────────────────────────────────────────────────────
   LES ÉCARTS — UNE table, toutes natures mêlées (2026-09-14, 5e passe)
   ─────────────────────────────────────────────────────────────────────────
   ⚠ LES DIX RÈGLES DES DEUX FAMILLES (`.af-ecart-famille`, `-tete`, `-ligne`,
   `-qui`, `-montant`, `-reste`) SONT PARTIES AVEC ELLES. La table est un
   `dash_table()` comme les deux files du rail : elle hérite de `.dash-row`, de
   `.todo-label` / `.todo-amount` et des cellules à deux lignes du socle. Il ne
   reste ici que ce que le socle ne connaît pas — la couleur du verdict.

   ⚠ LE MONTANT DE L'ÉCART EST LE SEUL ENDROIT COLORÉ DE LA TABLE. C'est le
   verdict ; le reste — l'affaire, la nature, le constaté, le commandé — est du
   contexte à l'encre. Peindre la rangée entière ferait de chaque ouverture de
   page une alarme, et une alarme permanente n'est plus lue. */
.af-ecart-val { color: var(--error); }

/* La note sous la table : les deux enveloppes, puis les dénominateurs. Elle
   QUALIFIE les 29 lignes au-dessus, elle n'en est pas une trentième. */
.af-ecart-perimetre {
  margin: var(--space-3) 0 0;
  font-size: var(--t-meta);
  color: var(--text-muted);
  line-height: 1.5;
}
.af-ecart-perimetre:empty { display: none; }

/* ─────────────────────────────────────────────────────────────────────────
   LA CARTE À ZONES (2026-09-14) — ce que les cinq panneaux portaient
   ─────────────────────────────────────────────────────────────────────────
   Le logement du compte d'un groupe. ⚠ C'est un LOGEMENT, pas un badge : il
   reste dans le DOM quand le module n'a rien à y mettre, sinon la pose devrait
   savoir où insérer — et c'est exactement ce qui a cassé le badge en passant
   des cartes aux zones (`.dash-card-title` n'existe plus). */
.af-tete-badge { margin-left: auto; display: inline-flex; }

/* La bande d'achat et les amorces de chat vivaient dans un `.dash-card` qui
   portait leur rembourrage. Dans une zone, le pas vient du groupe : on ne
   redonne QUE l'espace au-dessus du premier contenu. */
.jv-groupe > .af-afaire-achat,
.jv-groupe > .af-afaire-xori,
.jv-groupe > .af-afaire-ecarts { margin-top: var(--space-3); }


/* Les deux fenêtres du bloc d'achat (14-09) — des puces du socle
   (`window.kpiChip`), pas des boutons locaux. Elles se rangent au-dessus de la
   phrase qu'elles pilotent. */
.af-achat-fenetres {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}
