/* La palette et les mesures de Félix Wash, et rien d'autre.
 *
 * Ce fichier ne style aucun élément : il nomme des valeurs. C'est `app.css` qui les
 * branche sur les éléments, et `admin-theme.css` qui les branche sur les variables
 * que django.contrib.admin attend.
 *
 * L'intérêt de cette couche intermédiaire : changer le bleu de la marque est une
 * seule ligne ici, au lieu d'un chercher-remplacer de code hexadécimal dans deux
 * feuilles de style qui n'ont pas les mêmes noms de variables.
 *
 * Les trois variables de densité (--fw-control-h, --fw-row-h, --fw-gap) sont
 * volontairement absentes d'ici : elles sont posées par les coquilles de gabarit,
 * parce que leur valeur dépend de l'univers dans lequel on se trouve.
 */

:root {
  /* Encre — trois niveaux, pas plus. Un quatrième gris serait un gris qu'on ne
   * saurait pas quand choisir.
   *
   * Les trois sont légèrement BLEUTÉS. C'est le réglage le moins visible de ce
   * fichier et le plus structurant : un gris neutre à côté d'un fond froid se lit
   * comme un gris sale, alors que le même gris tiré vers le bleu se lit comme une
   * nuance de la même famille. Toute la page tient dans une seule teinte. */
  --fw-ink: #131b2c;
  --fw-muted: #58637a;
  /* Relevé de #8b9297 : l'ancienne valeur donnait 3,2:1 sur blanc, sous le seuil
   * AA de 4,5:1. Elle n'était utilisée que par la galerie, donc rien à l'écran ne
   * le signalait — mais elle était nommée, donc disponible, donc une fuite qui
   * attendait son premier usage. Celle-ci donne 4,6:1. */
  --fw-subtle: #6b7688;

  /* Surfaces — trois plans, du plus haut au plus bas.
   *
   * `--fw-canvas` est le seul ajout de la refonte, et c'est lui qui fait le gros du
   * travail. Avant, la page était en blanc cassé CHAUD (#fafaf9) et les cartes en
   * blanc pur : deux valeurs si proches que la carte ne se détachait pas, et tout
   * l'écran avait le même poids. Un fond gris-bleu franc transforme les cartes en
   * surfaces posées sur un plan — c'est de là que vient la lisibilité, pas des
   * ombres, qui ne font ensuite que confirmer.
   *
   * `--fw-surface-alt` garde son rôle d'origine : le remplissage discret, à peine
   * distinct du blanc — survol de ligne, fond de bouton neutre pressé. Il ne sert
   * PAS de fond de page, sinon les deux rôles se confondent au premier changement. */
  --fw-surface: #ffffff;
  --fw-surface-alt: #f6f8fb;
  --fw-canvas: #eef1f6;
  --fw-border: #e1e6ef;
  --fw-border-strong: #bcc5d4;

  /* Accent — un bleu marine profond.
   *
   * La contrainte n'a pas changé : un accent unique doit passer AA dans ses DEUX
   * usages, fond de bouton avec texte blanc ET texte de lien sur blanc. Beaucoup de
   * bleus passent le premier et échouent le second, ce qui oblige à en maintenir
   * deux — et deux accents divergent au troisième changement.
   *
   * L'ancien #2563eb tenait à 5,2:1. Celui-ci tient à ~10,3:1, dans les deux sens :
   * en descendant en luminosité on gagne sur le texte sur blanc sans rien perdre sur
   * le blanc posé dessus. L'argument de l'accent unique est donc plus solide qu'avant,
   * pas moins.
   *
   * Le prix à payer est réel : un bleu aussi sombre se lit mal comme « lien » sans
   * soulignement. D'où le soulignement conservé sur les liens de texte (`app.css`). */
  --fw-accent: #1d3f7a;
  --fw-accent-hover: #16305d;
  --fw-accent-bg: #e8eefb;
  --fw-accent-ink: #1a3768;
  --fw-on-accent: #ffffff;

  /* L'envoi du bon — la SEULE exception à l'accent unique, et elle est datée.
   *
   * Le commentaire ci-dessus rejetait un second accent, pour une bonne raison : deux
   * accents divergent. Il est renversé le 14/08, sur demande client, et le motif tient
   * en une phrase — envoyer le bon est le seul geste de la journée qui SORTE de
   * l'application et parte chez un tiers. Tout le reste écrit dans une base qu'on peut
   * relire ; celui-là est irréversible pour l'ouvrier. Le peindre du même bleu
   * qu'« Ajouter une prestation » revenait à dire qu'il coûte la même chose.
   *
   * La contrainte qui remplace l'ancienne : cette teinte ne sert QU'À ce bouton. Elle
   * n'a pas de variante de fond, pas de variante d'encre, pas de jeton — trois
   * variables de moins, c'est trois occasions de moins de la voir déborder.
   *
   * L'ambre des états est juste à côté (`--fw-warning`, le badge « À clôturer »), et le
   * commentaire des types de véhicule plus bas dit pourquoi c'est dangereux : sur un
   * écran où ambre veut dire « à traiter », un second ton chaud se lit comme un
   * avertissement. La collision ne peut pourtant pas se produire, et c'est structurel :
   * le badge « À clôturer » ne s'affiche que sur un passage OUVERT, et le bouton du bon
   * n'est orange que sur un passage CLÔTURÉ. Les deux teintes ne sont jamais actives sur
   * la même carte. Cette exclusion est ce qui rend l'exception tenable — la retirer
   * (bouton actif sur passage ouvert) ramènerait le problème.
   *
   * ~4,8:1 sur blanc, donc AA sur le texte du bouton. Le hover descend, comme l'accent. */
  --fw-send: #c2410c;
  --fw-send-hover: #9a3412;

  /* États — inchangés depuis la refonte de palette, et volontairement.
   *
   * Ils ne couvrent que de petites surfaces (jetons, bandeaux) et leur teinte porte
   * du sens : le vert dit réglé, l'ambre dit « regarde », le rouge dit bloqué. Les
   * refroidir pour les assortir au reste aurait déplacé du sens pour gagner une
   * cohérence que personne ne regarde à cette taille. */
  --fw-success: #15803d;
  --fw-success-bg: #f0fdf4;
  --fw-warning: #a16207;
  --fw-warning-bg: #fefce8;
  --fw-danger: #b91c1c;
  --fw-danger-bg: #fef2f2;

  /* Les quatre types de véhicule — une CATÉGORIE, pas un état.
   *
   * La distinction est la raison d'être de ces huit variables, et elle vaut d'être
   * écrite : les couleurs d'état au-dessus veulent dire quelque chose de graduel —
   * réglé, regarde, bloqué. Celles-ci ne veulent rien dire du tout, elles ne font que
   * distinguer. Réutiliser l'ambre pour « occasion » ferait lire un type de véhicule
   * comme un avertissement, sur un écran dont tout le reste dit qu'ambre = à traiter.
   *
   * D'où des teintes choisies HORS de la famille des états : le bleu de la marque, un
   * bleu-vert assez éloigné du vert de succès, un violet, et un gris. Aucune n'est
   * rouge, aucune n'est ambre.
   *
   * Cinq, et closes : `VehicleType` est une enum fermée (VN, VO, VR, Démo, Location),
   * et c'est ce qui rend le codage couleur tenable. Une couleur par nature de
   * prestation serait ingérable — les natures sont des données, pas une enum. Un
   * SIXIÈME type ajouté au modèle sortirait sans couleur plutôt qu'avec celle d'un
   * autre : dégradation neutre, pas trompeuse.
   *
   * Utile parce que le type entre dans la clé de la grille tarifaire : voir d'un coup
   * d'œil qu'un listing est surtout du VN, c'est voir sur quelle ligne de tarif la
   * facture repose. */
  --fw-type-vn-bg: #e8eefb;
  --fw-type-vn-ink: #1a3768;
  --fw-type-vo-bg: #dcf0f2;
  --fw-type-vo-ink: #12545c;
  --fw-type-vr-bg: #ece7fa;
  --fw-type-vr-ink: #4a2f8f;
  --fw-type-demo-bg: #e9edf3;
  --fw-type-demo-ink: #46536b;
  /* Le vert, tiré vers l'olive pour rester à distance du vert de succès — la seule
   * teinte qui restait hors de la famille des états. */
  --fw-type-location-bg: #e4f0e2;
  --fw-type-location-ink: #2c5530;

  /* Typographie — pile système. Aucune police téléchargée : un ouvrier au fond
   * d'un garage a du réseau incertain, et une police web qui n'arrive pas décale
   * toute la mise en page au moment où il encode. */
  --fw-font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue",
    Arial, sans-serif;

  /* La pile MONOSPACE du système — elle non plus ne télécharge rien.
   *
   * Elle ne sert pas à faire « technique » : elle sert aux trois données qu'on lit
   * en colonne et qu'on compare verticalement — les montants, les heures, et les
   * châssis. Une police proportionnelle donne des largeurs de chiffre différentes,
   * donc des colonnes qui ondulent, donc un montant qu'on relit deux fois. Un châssis
   * mal tapé, lui, se repère parce que les caractères s'alignent au-dessus et en
   * dessous. */
  --fw-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
    "Liberation Mono", monospace;

  /* L'échelle. Les deux crans du haut sont nouveaux : l'ancien maximum (1.375rem)
   * était le titre de page, ce qui laissait moins d'un demi-cran entre un titre
   * d'écran et un intertitre. Rien ne ressortait parce que tout avait le même poids. */
  --fw-text-xs: 0.75rem;
  --fw-text-sm: 0.875rem;
  --fw-text-base: 1rem;
  --fw-text-lg: 1.125rem;
  --fw-text-xl: 1.375rem;
  --fw-text-2xl: 1.75rem;
  --fw-text-3xl: 2.125rem;

  /* Les graisses sont nommées parce qu'elles portent une hiérarchie, et qu'un `600`
   * écrit en dur dans une règle ne dit pas s'il veut dire « un cran au-dessus » ou
   * « exactement 600 ». */
  /* `normal` a besoin d'un nom lui aussi : sans lui, la seule règle du projet qui
   * revient au poids courant l'écrivait en dur, et c'était le seul `font-weight`
   * littéral de `app.css`. Une échelle qui commence à 500 pousse à écrire 400 à la
   * main dès qu'on doit ANNULER une graisse héritée. */
  --fw-weight-normal: 400;
  --fw-weight-medium: 500;
  --fw-weight-semibold: 600;
  --fw-weight-bold: 700;

  /* La micro-étiquette : en-têtes de tableau, sur-titres, libellés de section.
   * Trois propriétés qui vont toujours ensemble, donc trois variables qu'on pose
   * ensemble — sinon la troisième finit par manquer quelque part. */
  --fw-label-size: 0.6875rem;
  --fw-label-tracking: 0.06em;
  /* Le resserrement des gros titres. Négatif, parce qu'à partir de ~1.75rem
   * l'espacement par défaut d'une police d'interface fait paraître le titre lâche. */
  --fw-display-tracking: -0.02em;

  /* Espacement */
  --fw-space-1: 0.25rem;
  --fw-space-2: 0.5rem;
  --fw-space-3: 0.75rem;
  --fw-space-4: 1rem;
  --fw-space-5: 1.5rem;
  --fw-space-6: 2rem;
  --fw-space-7: 2.5rem;
  --fw-space-8: 3rem;

  /* Formes */
  --fw-radius: 8px;
  --fw-radius-lg: 12px;
  --fw-radius-pill: 999px;
  --fw-hairline: 0.5px;

  /* Élévation — deux niveaux, et un usage avare.
   *
   * L'ombre ne crée pas la séparation, c'est `--fw-canvas` qui la crée ; elle ne
   * fait que la confirmer. D'où des valeurs très basses : une ombre qu'on remarque
   * est une ombre trop forte. Teintées à l'encre plutôt qu'au noir pur, sinon le
   * gris qui en sort est plus chaud que le fond sur lequel il tombe. */
  --fw-shadow-sm: 0 1px 2px rgba(19, 27, 44, 0.06);
  --fw-shadow-md: 0 4px 14px rgba(19, 27, 44, 0.08);

  /* La largeur de la barre latérale de Félix. Ici et pas dans `app.css` parce que
   * deux règles en ont besoin — la barre elle-même et le décalage du contenu — et
   * que deux `15.5rem` écrits séparément finissent par ne plus être égaux. */
  --fw-sidebar-w: 15.5rem;

  /* Un halo de focus doit laisser voir la bordure qu'il entoure : d'où le canal
   * alpha plutôt qu'un bleu opaque. Le focus visible n'est pas décoratif — c'est
   * ce qui permet de remplir le formulaire au clavier. */
  --fw-focus-ring: rgba(29, 63, 122, 0.28);
}
