/* =============================================================================
   Charte du pack FORVIA — clients/forvia/ (docs/PACK-CLIENT.md).
   Servie sur /client/theme.css et chargée APRÈS public/style.css, dont elle ne
   redéfinit que des variables de :root (plus les @font-face de sa police) : la
   structure de l'interface reste celle du moteur.

   Source : maquette du site CES 2027 de FORVIA (FORVIA_Landing_V2.html, relevée
   le 12/10/2026 ; règles « .canvas .chat* », « .msg », « .chip », « .slot » et
   « .chat-input » pour le chat, « .v2 .canvas .btn* » pour les boutons,
   « .canvas .input » et « .canvas .field > label » pour le formulaire de
   rendez-vous du 13/10/2026).
   CHARTE DE NUIT INTÉGRALE du chat (12/10/2026, sur les variables du moteur
   ouvertes le même jour pour elle) : page, en-tête et panneau nuit #010016 ;
   questions suggérées à filet et texte blancs, survolées #303030 cerclées du
   dégradé (« .chip.selected » ; blanches depuis le 13/10/2026, voir
   FINITIONS) ; formulaire de rendez-vous dans la carte,
   champs nuit à filet blanc à 40 %, texte blanc, filet blanc au focus, texte
   indicatif blanc à 65 %, libellés blancs ; rayon 0,5em (8px) hors des bulles
   et de la barre de saisie ; Inter.
   BULLES ET BARRE DE SAISIE DE MESSAGERIE (13/10/2026, choix d'Arthur, hors
   maquette ; liste validée en trois tours le même jour) : panneau SANS CADRE,
   en page pleine comme dans /embed (nuit unie, plus de liseré autour de la
   conversation) ; bulle de l'assistant nuit cerclée d'un liseré de 1px au
   dégradé de marque, texte blanc (la bulle « … » d'une réponse qui s'écrit est
   la même bulle, vide) ; bulle utilisateur BLANCHE sans filet, texte nuit,
   sur-titre « You » #5a5968 ; coins de 18px, petit coin de 4px côté émetteur
   (bas droit de l'utilisateur, bas gauche de l'assistant) ; dans la bulle de
   l'assistant, micro-contrôles et badge technique transparents (la nuit se
   voit dessous), filets porteurs gris #8e8e93
   (micro-contrôles, badge, formulaire du retour, pastille du chronométrage),
   source surlignée #303030, filet au-dessus des sources #545458 ; barre de
   saisie en pilule nuit cerclée du même liseré (rayon 28px, champ 22px, 6px de
   marge intérieure), texte blanc, texte indicatif #b8b8be, anneau de focus
   blanc de 2px ; bouton d'envoi rond BLANC, icône nuit, survolé #e6e6eb ; Stop
   rond (50 %), nuit à filet et texte blancs, inversé au survol ; bascule
   « Technical details » enfoncée BLANCHE à texte nuit, cerclée du liseré (la
   marque d'un choix dans la charte, « .chip.selected »), survolée #e6e6eb ;
   erreur #ff8f8f.
   FINITIONS (13/10/2026, liste validée par Arthur le même jour, sur des
   variables du moteur ouvertes pour elle) : questions suggérées BLANCHES à
   texte nuit, sans filet, rayon 8px, survolées #e6e6eb, anneau de focus blanc
   de 2px décalé de 2px sur la nuit ; bulle de l'assistant à 85 % de la
   colonne, largeur fixe (elle ne change pas de taille pendant l'écriture) ;
   bouton « New conversation » de l'en-tête blanc à texte et filet nuit,
   survolé #e6e6eb ; bascule « Technical details » RELÂCHÉE nuit à texte et
   filet blancs (l'état se lit d'un coup d'œil), enfoncée inchangée mais posée
   sur un fond blanc uni sous ses deux couches (au survol, plus de passage par
   le transparent : la bascule ne disparaît plus 0,2s), de même en icône sous
   768px ; plus de filet entre la conversation et la barre de saisie ; carte
   de rendez-vous nuit à filet gris #8e8e93, sans liseré.
   Jetons repris : nuit #010016, blanc, ignite #0024d3 (« --ignite-ui » : liens et
   action de l'administration ; plus aucun fond du chat depuis le 13/10/2026 :
   bulle utilisateur, envoi et bascule enfoncée sont passés du bleu au blanc),
   bleu profond #030723 (« --blue-dark » : état actif de l'administration), royal
   #215099, neutres #f5f6f6, #dadada, #d0d1d2 et #666666 (« --n100 » à
   « --n700 »), lavande #eceeff (survol du bouton principal v2), phosphore
   #81cedd (« --phos » : liens posés sur la nuit), vert #76d077 et jaune #fdd34b
   (« --green », « --yellow » : confirmation et alerte), gris
   #303030 (fond des pastilles et créneaux choisis : source surlignée), rose
   #f15ea5 et violet #9484eb (arrêts du dégradé) ; dégradé de marque
   linear-gradient(135deg, #ff7f34, #f15ea5 35%, #9484eb 65%, #6aa8e8).
   Les blancs translucides de la charte sont écrits composés sur la nuit (fond
   uni) : 70 % → #b3b3b9 (texte doux), 65 % → #a6a6ad (texte indicatif du
   commentaire et du formulaire de rendez-vous), 40 % → #676673 (champs du
   formulaire de rendez-vous, barre de défilement, pointillé du reste du
   chronométrage), 20 % → #343345 (filets de l'en-tête, filets et piste du
   chronométrage), 12 % → #1f1f32 (champ du retour en lecture seule) ; la nuit
   à 65 % sur blanc → #5a5968 (texte
   indicatif de l'administration, sur-titre « You » de la bulle utilisateur).
   Gris de messagerie (13/10/2026, hors charte) : #8e8e93 (filets porteurs,
   carte de rendez-vous comprise), #545458 (filet des sources), #b8b8be (texte
   indicatif de la saisie), #e6e6eb (survol des blancs : envoi, bascule
   enfoncée, questions suggérées, « New conversation »).
   Liseré en dégradé (bulle de l'assistant, barre de saisie, bascule enfoncée ;
   carte de rendez-vous et question suggérée survolée jusqu'au 13/10/2026) : la
   technique
   « .chip.selected » de la charte, sans pseudo-élément — un filet transparent
   de 1px et deux couches de fond, l'unie « linear-gradient(<couleur>,
   <couleur>) padding-box » par-dessus le dégradé « border-box ». Chaque
   surface a le sien (attache du moteur) ; le panneau n'en a plus depuis le
   13/10/2026 (ni liseré, ni attache fixed, qui ne servait qu'à raccorder le
   sien d'une moitié à l'autre).

   Police (fichiers dans fonts/, provenance et licence : fonts/LICENCES.txt) :
   - Inter, texte et titres : SIL OFL 1.1 (fonts/OFL-Inter.txt), fichiers
     variables latin et latin-ext. La police de titres de la charte, Apax, police
     de marque, n'est pas fournie : la charte retombe elle-même sur Inter (pile
     "Apax", "Inter", system-ui), et Apax n'est pas nommée ici (aucune police
     locale du visiteur ne doit s'y substituer).

   ÉCARTS À LA CHARTE (assumés) :
   - liens, appels de citation et numéros des sources en phosphore #81cedd,
     soulignés pour les liens (charte : liens hérités, blancs) : un appel de
     citation [1] blanc ne se distinguerait du texte que par sa position ;
   - erreur en rouge clair #ff8f8f, hors charte : la charte n'a pas de rouge, et
     un état ne prend jamais une couleur de marque (orange du dégradé) ; #ff6b6b
     jusqu'au 13/10/2026 (choix d'Arthur du même jour) ;
   - bouton Stop nuit à filet et texte blancs, inversé au survol, au lieu du rouge
     du moteur : la seule tache rouge de la barre aurait été un bouton d'usage ;
     rond depuis le 13/10/2026 (rayon 50 %, comme l'icône d'envoi) ;
   - bulles et barre de saisie de messagerie (13/10/2026, voir plus haut) au lieu
     des bulles nuit et blanc à 20 % cerclées de blanc et de la barre nuit à filet
     blanc de la maquette, et panneau sans le liseré de la maquette ; anneau de
     focus de 2px dans la barre et sur les questions suggérées seulement (3px du
     moteur ailleurs) ; finitions du même jour (voir FINITIONS) : questions
     suggérées blanches au lieu de la « .chip » à filet blanc, bulle de
     l'assistant à 85 % de la colonne, carte de rendez-vous sans liseré, plus
     de filet au-dessus de la barre de saisie ;
   - bascule « Technical details » enfoncée blanche à texte nuit, cerclée du
     liseré (13/10/2026 ; fond ignite auparavant), et relâchée nuit à texte et
     filet blancs (13/10/2026 ; jusque-là le bouton neutre blanc du moteur, si
     bien que l'état ne se lisait qu'au liseré de 1px) : l'état se lit au fond
     plein, comme le veut la règle du moteur ;
   - administration CLAIRE (fond #f5f6f6, surfaces blanches, texte nuit, liens
     ignite) sous l'en-tête nuit : elle n'emploie aucune variable du chat ;
   - bouton principal NUIT à texte blanc (.btn-primary de la charte d'origine) :
     il ne se pose plus que sur les surfaces claires de l'administration (et sur
     la barre de saisie d'un pack sans icônes) ; le bouton de la carte de
     rendez-vous a les siens, blanc à texte nuit (.v2 .btn-primary) ;
   - boutons de l'en-tête blancs à texte nuit (.btn-primary v2) : le bouton neutre
     du moteur a un fond --card (blanc) que le pack ne règle pas ; « New
     conversation » aussi, à texte et filet nuit depuis le 13/10/2026 (ignite
     auparavant, comme les boutons secondaires de l'administration) ;
   - « FORVIA: AI Concierge » écrit tel quel (pas de capitales imposées :
     --casse-surtitre, aussi casse du titre de l'en-tête) ; les sur-titres en
     capitales espacées de la charte (« eyebrow ») ne sont donc pas repris ;
   - texte des bulles en 16px et interlignage 1,5 du moteur (charte : 1,6) ;
   - champs du formulaire de rendez-vous à filet blanc à 40 % (« .canvas
     .input », règle générale des champs de la charte ; la page de réservation de
     la maquette, « .canvas .book .input », les cercle de blanc plein), 44px de
     haut et marges du moteur (charte : 54px) ;
   - aucun texte en dégradé (« .glow-text ») ni lueur ;
   - <meta name="theme-color"> reste #ffffff, écrit en dur par le moteur : la
     barre d'un navigateur mobile reste blanche au-dessus de l'en-tête nuit ;
   - chronométrage des détails techniques (« Response time », 13/10/2026), que
     la charte ne prévoit pas : teintes des natures tirées des arrêts du dégradé
     (rose éclairci #f58dbf OpenAI, bleu #6aa8e8 base de données, violet
     éclairci #ad9ff0 calcul — éclaircis pour la bulle grise essayée le
     13/10/2026, gardés avec la bulle nuit par choix d'Arthur ; attente client
     en texte doux ; jamais l'orange, voisin du rouge de l'erreur), sur une piste
     blanc à 20 % ; repère blanc, chevron phosphore ; pastille de la branche
     nuit à filet gris #8e8e93 ; résumé replié à la ligne (insécable, il
     débordait de la bulle en 375px). Il ne sert qu'en recette : en ligne, le
     déploiement FORVIA pose CHAT_TIMINGS_IN_SSE=false (noms des étapes en
     français, aucun chronométrage dans le chat) ;
   - à l'impression, le moteur ramène textes, liens, sources et carte de
     rendez-vous à leurs tons clairs sur papier blanc (bulles blanches à filet
     gris). Le sur-titre de l'assistant (« FORVIA: AI Concierge ») et la
     note « not transmitted yet » affichée après l'envoi du formulaire de
     rendez-vous, posés ici sur --chat-texte-doux, le suivent : le bloc
     d'impression du moteur ramène cette variable (et --carte-rdv-texte-doux) à
     --muted, #575b61, 6,83:1 sur blanc (le formulaire, lui, ne s'imprime pas).
     Le sur-titre « You », écrit en valeur (#5a5968, pensé pour la bulle
     blanche), s'imprime tel quel : 6,85:1 sur le papier. Le chronométrage ouvert
     s'imprime aux couleurs du moteur (le même bloc ramène les --chrono-* à leurs
     défauts). Seul le logo blanc garde son ton d'écran (invisible sur papier).

   CONTRASTES — tous calculés (WCAG 2, rapport de luminance), aucun estimé ;
   verrou : test/ui.test.js de ce pack. Seuil AA du texte : 4,5:1 ; anneau de
   focus, icônes et filets porteurs : 3:1. Fonds unis (dégradés posés en liseré
   seulement, jamais sous un texte : le texte se pose sur la couche unie) ; une
   surface transparente se mesure sur ce qu'elle laisse voir (la nuit de la
   bulle de l'assistant).
   Sur la nuit (page, en-tête, panneau, bulle de l'assistant et barre de saisie,
   carte de rendez-vous et son formulaire, retour détaillé, pastille du
   chronométrage, bouton Stop, bascule relâchée ; micro-contrôles et badge
   transparents posés dans la bulle) — texte blanc 20,73:1 (titre, réponse,
   texte saisi, liens survolés, libellés du chronométrage, Stop, bascule
   relâchée, carte, libellés et champs des formulaires, pastille) ; texte doux
   #b3b3b9 9,94:1 (sous-titre, mention, aide, « rédaction en cours », sur-titre
   de l'assistant, titre « Sources » et détails, pied de réponse,
   micro-contrôles, badge technique, saisie en lecture seule, aides du retour,
   mention des champs obligatoires et note du formulaire de rendez-vous, textes
   doux du chronométrage, nature « attente client ») ; texte indicatif de la
   saisie #b8b8be 10,50:1 ; texte indicatif #a6a6ad 8,57:1 (commentaire, champ
   e-mail du formulaire) ; liens, appels de citation, numéros des sources et
   puces (#81cedd) 11,66:1 ; erreur (#ff8f8f) 9,46:1, filet d'un champ fautif
   compris ; confirmation du retour et remerciement du vote (#76d077) 10,92:1 ;
   alerte du compteur (#fdd34b) 14,41:1 ; natures du chronométrage : OpenAI
   (#f58dbf) 9,32:1, base de données (#6aa8e8) 8,27:1, calcul (#ad9ff0)
   8,88:1 ; anneau de focus blanc 20,73:1 (2px dans la barre et sur les
   questions suggérées, 3px ailleurs) ; icône micro blanche 20,73:1, survolée
   phosphore 11,66:1 ; chevron phosphore 11,66:1 ; repère blanc 20,73:1 ;
   filets porteurs #8e8e93 (micro-contrôles, badge, formulaire du retour,
   pastille du chronométrage, carte de rendez-vous) 6,36:1 ; #676673 (champs
   du formulaire de rendez-vous, pointillé du reste du chronométrage) et pouce
   de la barre de défilement 3,68:1 ; filet blanc des champs (commentaire,
   champ du formulaire de rendez-vous au focus), du Stop et de la bascule
   relâchée 20,73:1 ; fonds blancs qui portent leur forme : questions suggérées
   sur la bulle, bouton d'envoi sur la barre, « New conversation » et bascule
   enfoncée sur l'en-tête, 20,73:1 (survolés, #e6e6eb 16,67:1) ; arrêts du
   dégradé (liserés de la bulle de l'assistant, de la barre de saisie et de la
   bascule enfoncée) 6,67:1 au pire (#9484eb ; #f15ea5 6,80:1, #ff7f34
   8,23:1, #6aa8e8 8,27:1).
   Barres du chronométrage (3:1) sur leur piste #343345 : OpenAI 5,54:1, base
   de données 4,91:1, calcul 5,27:1, attente client 5,90:1, repère blanc
   12,31:1 ; pastilles de la légende sur la bulle, mêmes valeurs que les
   natures.
   Bulle utilisateur (blanche) — texte nuit 20,73:1, sur-titre « You » (#5a5968)
   6,85:1, anneau --focus-invert (nuit) 20,73:1.
   Bouton d'envoi (blanc) — icône nuit 20,73:1 ; survolé (#e6e6eb) 16,67:1.
   Questions suggérées (blanches, 13/10/2026) — texte nuit 20,73:1 ; survolées
   (#e6e6eb) 16,67:1 ; anneau de focus blanc de 2px, décalé de 2px : il se pose
   sur la nuit de la bulle, 20,73:1.
   Bouton Stop (nuit) — texte blanc 20,73:1 ; survolé, texte nuit sur blanc
   20,73:1.
   Source surlignée (#303030, gris de la charte) — texte blanc 13,20:1, liens
   #81cedd 7,42:1, détails #b3b3b9 6,33:1.
   Champ du retour en lecture seule (#1f1f32) — texte #b3b3b9 7,74:1.
   Bouton de la carte de rendez-vous — texte nuit sur blanc 20,73:1, survolé sur
   lavande #eceeff 18,01:1, actif sur #dadada 14,83:1.
   Administration (claire) — texte nuit 20,73:1 sur blanc, 19,15:1 sur
   --fond-page ; --primaire 9,58:1 sur blanc, 8,84:1 sur --fond-page ; --muted
   6,83:1 sur blanc, 6,31:1 sur --fond-page ; texte indicatif (#5a5968) 6,85:1
   sur blanc, 6,33:1 sur --fond-page ; --err 7,16:1 sur blanc, 6,61:1 sur
   --fond-page ; --ok 5,70:1 sur --fond-page ; anneau de focus nuit 20,73:1 ;
   filet porteur --border-strong 5,74:1 sur blanc, 5,30:1 sur --fond-page ;
   survols (#eceeff) : --primaire 8,32:1, texte nuit 18,01:1 ; étiquette « type »
   (royal #215099) 6,62:1 sur sa teinte ; badge accent --primaire 8,32:1.
   Boutons — principal : texte blanc sur nuit 20,73:1, survol sur --primaire
   9,58:1, actif sur #030723 19,84:1 ; en-tête (posés sur la nuit) : neutres nuit
   sur blanc 20,73:1, 18,01:1 survolés ; « New conversation » (13/10/2026) :
   texte nuit sur blanc 20,73:1, survolé sur #e6e6eb 16,67:1 ; secondaire de
   l'administration --primaire sur blanc 9,58:1, 8,32:1 survolé ; bascule
   enfoncée (« Technical details ») : texte nuit sur blanc 20,73:1, liseré sur
   la nuit de l'en-tête 6,67:1 au pire, survolée texte nuit sur #e6e6eb
   16,67:1 ; la même en icône, sous 768px : icône nuit sur blanc 20,73:1, fond
   blanc sur la nuit 20,73:1 (avant le 13/10/2026, fond ignite à 2,17:1 sur la
   nuit, et d'abord #030723 à 1,05:1) ; bascule relâchée (13/10/2026), à
   libellé et en icône : texte ou icône blancs sur nuit 20,73:1, filet blanc
   sur l'en-tête 20,73:1, survolée texte nuit sur #eceeff 18,01:1 (survol du
   bouton neutre) ; d'un état à l'autre, fond blanc contre fond nuit, 20,73:1 ;
   lien d'évitement blanc sur --primaire 9,58:1.
   Sous les seuils, sans qu'un critère les vise : états DÉSACTIVÉS (opacité 0,6
   du moteur), exemptés par WCAG 1.4.3 — ils restent pourtant lisibles : icône
   d'envoi nuit 7,34:1 sur son fond blanc à 60 % (sur la barre nuit),
   micro-contrôle (« Copied ») 3,96:1 sur la bulle, bouton principal de
   l'administration 5,64:1 ; formes et filets DÉCORATIFS : couches unies de la
   bulle de l'assistant et de la barre de saisie, nuit sur la nuit (1,00:1 :
   l'une et l'autre se repèrent à leur liseré, 6,67:1 au pire ; la barre aussi
   à son texte indicatif, à l'icône d'envoi et à l'anneau de focus) ; fond nuit
   du Stop sur la barre (cerné du filet blanc) ; fond nuit de la bascule
   relâchée sur l'en-tête nuit (cernée de son filet blanc) ; fond nuit de la
   carte de rendez-vous sur la bulle nuit (repérée à son filet #8e8e93,
   6,36:1) ; filet des sources #545458 2,75:1, source surlignée #303030 1,57:1
   (repère blanc) sur la bulle ; filet de l'en-tête #343345 1,68:1 sur la nuit
   (plus de filet entre la conversation et la saisie depuis le 13/10/2026 :
   #1f1f32, 1,28:1, auparavant) ; filets du
   chronométrage et piste de ses barres #343345, 1,68:1 sur la bulle (durées
   et parts sont écrites) ; liseré de la bascule enfoncée sur son fond blanc,
   2,51:1 au pire (#6aa8e8 ; il se lit sur la nuit de l'en-tête), --divider
   #dadada 1,40:1 sur blanc, filet du badge accent (violet #9484eb) 3,11:1 sur
   blanc ; marqueurs --tertiaire de l'administration (rose #f15ea5), toujours
   doublés d'un texte, 3,05:1 sur blanc et 2,72:1 sur leur teinte.
   Aucune valeur de ce fichier ne figure dans public/style.css (test du moteur).
   ============================================================================= */

/* ---- Police : auto-hébergée, jamais par un CDN ------------------------------ */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("/client/fonts/inter-latin-variable.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
    U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("/client/fonts/inter-latin-ext-variable.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304,
    U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4,
    U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  /* ---- Couleurs de marque ------------------------------------------------- */
  --primaire: #0024d3; /* ignite : liens et action de l'administration (claire) ; 9,58:1 sur blanc */
  --primaire-actif: #030723; /* bleu profond : état actif ; 19,84:1 sous texte blanc */
  --secondaire: var(--encre); /* sur-titres de l'administration, survol des liens */
  /* Rose du dégradé : marqueurs non textuels de l'administration (pastille « non enregistré », barre de la ligne
     modifiée), toujours doublés d'un texte ; 3,05:1 sur blanc, 2,72:1 sur --teinte-tertiaire. */
  --tertiaire: #f15ea5;
  --quaternaire: #215099; /* royal : étiquette « type », nature cpu du chronométrage */
  --encre: #010016; /* nuit : fond du chat et de l'en-tête, texte de l'administration */
  --fond-page: #f5f6f6; /* neutre 100 : fond de l'administration */
  --divider: #dadada; /* neutre 300 : filet décoratif de l'administration (1,40:1 sur blanc) */
  --border-strong: #666666; /* neutre 700 : champs et boutons neutres de l'administration ; 5,74:1 sur blanc */

  /* ---- Teintes de fond et filets dérivés (administration) ------------------- */
  --teinte-primaire: #eceeff; /* lavande (survol du bouton principal v2) : badge accent, survols, bouton de la carte survolé */
  --teinte-secondaire: #e3e6fb; /* sélection de texte, badge secondaire de l'administration */
  --teinte-tertiaire: #fdeef5; /* rose très clair : ligne modifiée non enregistrée */
  --teinte-quaternaire: #e6ecf5; /* royal très clair : étiquette « type » */
  --accent-border: #9484eb; /* violet du dégradé : filet du badge accent (décoratif) */
  --secondaire-filet: #d0d1d2; /* neutre 500 : filet du badge secondaire (décoratif) */

  /* ---- Anneau de focus : nuit sur l'administration claire et sur la bulle utilisateur (blanche), blanc partout ailleurs
     dans le chat (charte : 2px blanc ; 2px dans la barre de saisie, --composeur-focus-epaisseur, et sur les questions
     suggérées, --suggestion-focus-epaisseur ; 3px du moteur ailleurs) */
  --focus: var(--encre);
  --focus-invert: var(--encre); /* bulle utilisateur (blanche) : 20,73:1 ; garde-fou du moteur, rien n'y est focalisable */
  --focus-sur-sombre: var(--blanc); /* en-tête, action de l'embarqué, conversation, lien d'évitement */
  /* Anneau de la conversation (#chat, focalisable quand elle défile) rentré dans le panneau : posé autour, il passerait
     sous le pied de saisie et sortirait de l'écran étroit. 3px de trait, de 2 à 5px du bord intérieur. */
  --chat-focus-decalage: -5px;

  /* ---- Forme : rayon 0,5em de la charte, boutons sans capitales ------------- */
  --radius-xs: var(--radius); /* champs, carte de rendez-vous, formulaire du retour : 0,5em aussi */
  --radius: 8px; /* cartes, tableaux (bulles : --bulle-rayon) */
  --radius-pill: 8px; /* badges et pastilles : la charte arrondit tout à 0,5em, jamais en pilule */
  --bouton-radius: var(--radius);
  --bouton-padding: 12px 22px; /* boutons d'en-tête de la charte (.v2 header .btn) ; corps 15px et graisse 600 du moteur */
  --bouton-casse: none;
  --bouton-ls: normal;
  --shadow: none; /* charte plate : aucune ombre */

  /* ---- Boutons --------------------------------------------------------------
     Principal : nuit à texte blanc, survol ignite ; il ne se pose que sur les surfaces claires de l'administration. */
  --bouton-primaire-fond: var(--encre);
  --bouton-primaire-survol: var(--primaire);
  --bouton-primaire-actif: var(--primaire-actif);
  /* Boutons de l'en-tête posés sur la nuit : blancs, comme le bouton principal v2 de la charte (texte nuit, survol
     lavande #eceeff) ; l'inversion du moteur (fond --accent ou --secondaire) se fondrait dans l'en-tête. */
  --bouton-neutre-texte: var(--encre);
  --bouton-neutre-survol: var(--teinte-primaire);
  --bouton-secondaire-fond: var(--blanc);
  --bouton-secondaire-survol: var(--teinte-primaire);
  --bouton-secondaire-texte-survol: var(--primaire);
  /* Bascule « Technical details » (13/10/2026, choix d'Arthur ; liste validée le même jour) : ENFONCÉE blanche à texte
     nuit (20,73:1), cerclée du liseré de 1px au dégradé de marque (« .chip.selected » de la charte : filet transparent,
     couche unie blanche sur le dégradé), 6,67:1 au pire sur l'en-tête nuit ; sous les deux couches, un fond blanc
     uni (« … border-box var(--blanc) ») : au survol, le fond passe du blanc à #e6e6eb sans repasser par le transparent
     (avant : la bascule disparaissait le temps de la transition, 0,2s). Survolée : #e6e6eb, texte nuit (16,67:1) ; le
     filet du survol est alors celui du bouton neutre (--text, nuit : le liseré s'efface). RELÂCHÉE nuit à texte et
     filet blancs (20,73:1) : l'état se lit d'un coup d'œil au fond plein ; survolée, celle du bouton neutre (#eceeff,
     texte et filet nuit, 18,01:1). */
  --bouton-bascule-fond: linear-gradient(var(--blanc), var(--blanc)) padding-box, linear-gradient(135deg, #ff7f34, #f15ea5 35%, #9484eb 65%, #6aa8e8) border-box var(--blanc);
  --bouton-bascule-texte: var(--encre);
  --bouton-bascule-filet: transparent;
  --bouton-bascule-survol: #e6e6eb;
  --bouton-bascule-texte-survol: var(--encre);
  /* La même en icône, sous 768px : les couleurs de la bascule enfoncée (fond blanc, liseré, icône nuit), et non celles de
     sa version survolée (défaut du moteur), qui perdrait le liseré. */
  --bouton-bascule-icone-fond: var(--bouton-bascule-fond);
  --bouton-bascule-icone-filet: var(--bouton-bascule-filet);
  --bouton-bascule-icone-texte: var(--bouton-bascule-texte);
  --bouton-bascule-relachee-fond: var(--encre);
  --bouton-bascule-relachee-texte: var(--blanc);
  --bouton-bascule-relachee-filet: var(--blanc);
  /* Bouton « New conversation » de l'en-tête (13/10/2026) : blanc (--bouton-secondaire-fond) à texte et filet nuit, comme
     les autres boutons blancs (ignite auparavant, celui de l'administration) ; survolé #e6e6eb, texte nuit (16,67:1). */
  --bouton-nouvelle-conversation-texte: var(--encre);
  --bouton-nouvelle-conversation-filet: var(--encre);
  --bouton-nouvelle-conversation-survol: #e6e6eb;
  --bouton-nouvelle-conversation-texte-survol: var(--encre);

  /* ---- Libellés : « FORVIA: AI Concierge » écrit tel quel ------------------- */
  --casse-surtitre: none;
  --ls-surtitre: normal;
  --casse-display: none; /* titres de l'administration : la charte n'écrit pas ses titres en capitales */

  /* ---- Typographie ----------------------------------------------------------- */
  --font-texte: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --font-titre: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;

  /* ---- Logotype blanc (logo.svg, 168 × 50 : 121 × 36 affiché, 94 × 28 sous 768px) */
  --logo-hauteur: 36px;
  --logo-hauteur-mobile: 28px;

  /* ---- Chevron des listes déroulantes : trait de la couleur de --encre (%23010016) */
  --chevron-liste: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%23010016' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round' d='M1 1.75 6 6.25l5-4.5'/%3E%3C/svg%3E");
  --placeholder: #5a5968; /* champs de l'administration : nuit à 65 % sur blanc, 6,85:1 ; 6,33:1 sur --fond-page */

  /* ---- En-tête (chat et administration) : nuit, filet blanc à 20 % ---------- */
  --entete-fond: var(--encre);
  --entete-texte: var(--blanc);
  --entete-texte-doux: #b3b3b9; /* blanc à 70 % sur la nuit (--muted de la charte) */
  --entete-filet: #343345; /* blanc à 20 % : filet bas de l'en-tête de chat de la charte, et filet logo | titre */
  /* Titre « FORVIA: AI Concierge » : 18px, graisse 500 (en-tête du chat de la charte) ; 20px dès 1520px */
  --titre-app-fs: 1.125rem;
  --titre-app-fs-grand: 1.25rem;
  --titre-app-graisse: 500;

  /* ---- Fond, mention et panneau du chat : nuit unie, panneau sans cadre (13/10/2026, choix d'Arthur : plus de liseré
     autour de la conversation, en page pleine comme dans /embed). Panneau centré de 800px au plus (marges de 8px sur un
     écran étroit), rayon 0,5em ; attache du moteur (scroll) : il n'y a plus de dégradé à raccorder. */
  --chat-fond: var(--encre);
  --chat-surface: transparent; /* la mention se pose à même la nuit */
  --chat-surface-filet: transparent; /* aucun filet entre la conversation et la saisie (13/10/2026 ; blanc à 12 % avant) */
  --chat-texte: var(--blanc);
  --chat-texte-doux: #b3b3b9; /* mention, aide de la saisie, « rédaction en cours » */
  --chat-mention-marge: var(--sp-2);
  --chat-panneau-largeur: min(100% - 1rem, 800px);
  --chat-panneau-rayon: var(--radius);
  --chat-panneau-filet: none;
  --chat-panneau-fond: var(--encre);
  --chat-redaction-points: var(--blanc); /* points de « rédaction en cours » (décoratifs) */
  /* Posés sur la nuit par les pages vocales seulement (le pack n'a pas de voice.json) : réglés quand même, pour qu'un
     vocal ouvert un jour n'y garde pas les tons du moteur, pensés pour un fond clair. */
  --chat-erreur: var(--bulle-erreur);
  --chat-alerte: var(--retour-alerte);
  --chat-puce: var(--bulle-lien);
  --defilement-couleur: #676673 transparent; /* blanc à 40 % de la charte */
  --defilement-marge: var(--sp-2); /* l'anneau de focus n'est pas rogné au bord de la conversation */

  /* ---- Bulles de messagerie (13/10/2026, choix d'Arthur) : coins de 18px, petit coin de 4px côté émetteur ------ */
  --bulle-rayon: 18px;
  --bulle-assistant-largeur: 85%; /* bulle de l'assistant à 85 % de la colonne, largeur fixe (13/10/2026) */
  --bulle-coin: 4px;
  --bulle-surtitre-fs: 0.8125rem;
  --bulle-surtitre-marge: var(--sp-2);
  /* Utilisateur : blanche, sans filet, texte nuit (20,73:1), sur-titre « You » #5a5968 (nuit à 65 % sur blanc, 6,85:1 ;
     écrit en valeur : une variable du chat ne renvoie jamais à une couleur de l'administration, --placeholder) */
  --bulle-utilisateur-fond: var(--blanc);
  --bulle-utilisateur-texte: var(--encre);
  --bulle-utilisateur-surtitre: #5a5968;
  --bulle-utilisateur-filet: none;
  /* Assistant : nuit cerclée d'un liseré de 1px au dégradé de marque (filet transparent, couche unie nuit sur le
     dégradé, règle .msg--assistant, bulle « … » d'une réponse qui s'écrit comprise), texte blanc (20,73:1) ; ce qui s'y
     pose suit (liens phosphore, textes doux, anneau blanc), mesuré sur la nuit */
  --bulle-assistant-fond: linear-gradient(#010016, #010016) padding-box, linear-gradient(135deg, #ff7f34, #f15ea5 35%, #9484eb 65%, #6aa8e8) border-box;
  --bulle-assistant-texte: var(--blanc);
  --bulle-assistant-surtitre: var(--chat-texte-doux);
  --bulle-assistant-filet: 1px solid transparent;
  --bulle-lien: #81cedd; /* phosphore : liens, appels de citation */
  --bulle-lien-survol: var(--blanc);
  --bulle-texte-doux: var(--chat-texte-doux);
  --bulle-puce: var(--bulle-lien);
  --bulle-erreur: #ff8f8f; /* rouge clair, hors charte (aucun rouge de marque) ; 9,46:1 sur la nuit de la bulle */
  --bulle-succes: #76d077; /* vert de la charte */
  --bulle-filet: #545458; /* filet au-dessus des sources, décoratif (2,75:1 sur la bulle) */
  --bulle-focus: var(--blanc);
  --bulle-badge-fond: transparent; /* la nuit de la bulle */
  --bulle-badge-texte: var(--chat-texte-doux);
  --bulle-badge-filet: #8e8e93;
  /* Sources : titre doux, numéros phosphore ; source surlignée au clic d'un appel de citation : gris #303030 de la
     charte (pastilles choisies), repère blanc */
  --sources-titre: var(--chat-texte-doux);
  --sources-numero: var(--bulle-lien);
  --sources-surlignage: #303030;
  --sources-surlignage-repere: var(--blanc);

  /* ---- Micro-contrôles (« Copy », 👍, 👎, boutons du retour, « New conversation » de /embed) : transparents (la nuit,
     dans la bulle comme hors d'elle), filet gris #8e8e93, texte doux ; survolés : texte et filet blancs */
  --micro-controle-fond: transparent;
  --micro-controle-texte: var(--chat-texte-doux);
  --micro-controle-filet: #8e8e93;
  --micro-controle-texte-survol: var(--blanc);
  --micro-controle-filet-survol: var(--blanc);

  /* ---- Questions suggérées (13/10/2026, choix d'Arthur) : BLANCHES sur la bulle nuit, texte nuit (20,73:1), sans filet
     (transparent : le blanc du fond s'y étend), rayon 8px des micro-contrôles ; survolées #e6e6eb, texte nuit
     (16,67:1) ; anneau de focus blanc de 2px (couleur de la bulle, --bulle-focus), décalé de 2px sur la nuit */
  --suggestion-fond: var(--blanc);
  --suggestion-texte: var(--encre);
  --suggestion-filet: transparent;
  --suggestion-fond-survol: #e6e6eb;
  --suggestion-texte-survol: var(--encre);
  --suggestion-filet-survol: transparent;
  --suggestion-focus-epaisseur: 2px;

  /* ---- Carte « Book a meeting » : nuit à filet gris #8e8e93 (13/10/2026 ; liseré en dégradé auparavant), 6,36:1 sur la
     bulle nuit ; texte blanc, liens phosphore ; bouton blanc à texte nuit (.v2 .btn-primary : survol lavande) ;
     formulaire de rendez-vous posé dedans */
  --carte-rdv-fond: var(--encre);
  --carte-rdv-texte: var(--blanc);
  --carte-rdv-filet: #8e8e93;
  --carte-rdv-lien: var(--bulle-lien);
  --carte-rdv-lien-survol: var(--blanc);
  --carte-rdv-focus: var(--blanc);
  --carte-rdv-bouton-fond: var(--blanc);
  --carte-rdv-bouton-texte: var(--encre);
  --carte-rdv-bouton-survol: #eceeff; /* lavande (.v2 .btn-primary:hover) */
  --carte-rdv-bouton-texte-survol: var(--encre);
  --carte-rdv-bouton-actif: #dadada; /* neutre 300 */
  /* Formulaire de rendez-vous des visiteurs sans identité (ui.bookingForm de client.json, 13/10/2026), dans la carte :
     champs « .canvas .input » de la charte — nuit, filet blanc à 40 %, texte blanc, filet blanc au focus (plus l'anneau
     blanc de la carte), texte indicatif blanc à 65 % ; libellés et légende blancs (« .canvas .field > label », graisse
     500 du moteur) ; mention des champs obligatoires et note « not transmitted yet » en texte doux ; erreur et filet
     d'un champ fautif dans le rouge clair du chat (#ff8f8f, 9,46:1 sur la nuit). */
  --carte-rdv-champ-libelle: var(--blanc);
  --carte-rdv-champ-fond: var(--encre);
  --carte-rdv-champ-texte: var(--blanc);
  --carte-rdv-champ-filet: #676673; /* blanc à 40 % : limite du champ, 3,68:1 sur la nuit */
  --carte-rdv-champ-filet-focus: var(--blanc);
  --carte-rdv-champ-placeholder: #a6a6ad; /* blanc à 65 % (charte) */
  --carte-rdv-champ-erreur: var(--bulle-erreur);
  --carte-rdv-texte-doux: var(--chat-texte-doux);

  /* ---- Retour détaillé (👎) : formulaire nuit à filet gris #8e8e93 (6,36:1 sur la bulle nuit), champ nuit à filet
     blanc */
  --retour-fond: var(--encre);
  --retour-filet: #8e8e93;
  --retour-libelle: var(--blanc);
  --retour-texte-doux: var(--chat-texte-doux);
  --retour-champ-fond: var(--encre);
  --retour-champ-texte: var(--blanc);
  --retour-champ-filet: var(--blanc);
  --retour-champ-filet-focus: var(--blanc); /* l'anneau de focus blanc marque le focus */
  --retour-champ-fond-lecture: #1f1f32; /* blanc à 12 % */
  --retour-placeholder: #a6a6ad;
  --retour-alerte: #fdd34b; /* jaune de la charte */
  --retour-erreur: var(--bulle-erreur);
  --retour-succes: var(--bulle-succes);
  --retour-focus: var(--blanc);

  /* ---- Chronométrage des détails techniques (« Response time », dans la bulle de l'assistant) : recette seulement
     (CHAT_TIMINGS_IN_SSE=false en ligne). Libellés blancs, le reste en texte doux ; filets entre les lignes et piste des
     barres blanc à 20 % (décoratifs), reste non imputé en pointillé blanc à 40 % (la durée est écrite) ; natures
     tirées des arrêts du dégradé (rose et violet éclaircis pour la bulle grise essayée le 13/10/2026, gardés avec la
     bulle nuit), attente client en texte doux ; repère blanc ; chevron phosphore, anneau blanc ; pastille de la branche
     nuit, filet gris #8e8e93, texte blanc ; résumé replié à la ligne. */
  --chrono-texte: var(--blanc);
  --chrono-texte-doux: var(--chat-texte-doux);
  --chrono-filet: #343345;
  --chrono-filet-fort: #676673;
  --chrono-barre-fond: #343345;
  --chrono-chevron: var(--bulle-lien);
  --chrono-focus: var(--blanc);
  --chrono-pastille-fond: var(--encre);
  --chrono-pastille-texte: var(--blanc);
  --chrono-pastille-filet: #8e8e93;
  --chrono-teinte-openai: #f58dbf; /* rose du dégradé éclairci ; 9,32:1 sur la bulle, 5,54:1 sur la piste */
  --chrono-teinte-db: #6aa8e8; /* bleu du dégradé ; 8,27:1 sur la bulle, 4,91:1 sur la piste */
  --chrono-teinte-cpu: #ad9ff0; /* violet du dégradé éclairci ; 8,88:1 sur la bulle, 5,27:1 sur la piste */
  --chrono-teinte-client: var(--chat-texte-doux);
  --chrono-repere: var(--blanc);
  --chrono-resume-retour: normal; /* « first word at 3.11 s (3.11 s in the browser) · … » : insécable, il débordait en 375px */

  /* ---- Barre de saisie de messagerie (13/10/2026) : pilule nuit cerclée du liseré de la bulle de l'assistant (filet
     transparent de 1px, couche unie nuit sur le dégradé), champ transparent. Marge intérieure de 6px (charte : 6px) :
     l'anneau de focus blanc du champ et des boutons (2px à 2px du bord) reste dans la barre. Bouton d'envoi (barre à
     icônes, ui.composerIcons) : rond blanc, icône nuit ; survolé #e6e6eb. Stop : rond, nuit à filet blanc, inversé au
     survol. */
  --composeur-fond: linear-gradient(#010016, #010016) padding-box, linear-gradient(135deg, #ff7f34, #f15ea5 35%, #9484eb 65%, #6aa8e8) border-box;
  --composeur-filet: 1px solid transparent;
  --composeur-rayon: 28px;
  --composeur-padding: 6px;
  --composeur-focus: var(--blanc);
  --composeur-focus-epaisseur: 2px; /* charte : anneau blanc de 2px */
  --saisie-fond: transparent;
  --saisie-filet: transparent;
  --saisie-rayon: 22px; /* rayon de la barre moins sa marge intérieure : le champ et son anneau épousent la barre */
  --saisie-filet-focus: transparent; /* l'anneau de focus seul, sans double contour */
  --saisie-fond-lecture: transparent; /* pendant une réponse : pas de rectangle dans la barre */
  --saisie-texte: var(--blanc);
  --saisie-texte-lecture: var(--chat-texte-doux);
  --saisie-placeholder: #b8b8be; /* 10,50:1 sur la barre nuit */
  --composeur-icone: var(--blanc);
  --composeur-icone-survol: var(--bulle-lien);
  --composeur-envoi-fond: var(--blanc); /* blanc (choix d'Arthur, au lieu de l'ignite) ; icône nuit 20,73:1 */
  --composeur-envoi-filet: 0;
  --composeur-envoi-texte: var(--encre);
  --composeur-envoi-fond-survol: #e6e6eb; /* icône nuit 16,67:1 */
  --composeur-envoi-texte-survol: var(--encre);
  --composeur-envoi-rayon: 50%;
  --composeur-envoi-texte-desactive: var(--encre); /* opacité 0,6 du moteur : 7,34:1 sur son fond, sur la barre nuit */
  --composeur-stop-fond: var(--encre);
  --composeur-stop-texte: var(--blanc);
  --composeur-stop-filet: var(--blanc);
  --composeur-stop-fond-survol: var(--blanc);
  --composeur-stop-texte-survol: var(--encre);
  --composeur-stop-rayon: 50%; /* rond, comme l'icône d'envoi */
}
