/* ───────────────────────────────────────────────────────────────────────────
   Librairie Speyy : thème « Ivoire arrondi » (Core 3.14, 22/10/2026).

   🔴 LE SEUL FICHIER DU PRODUIT QUI PORTE DES VALEURS. Une couleur, une
   police, un rayon ou une ombre s'écrit ici et nulle part ailleurs ; tout le
   reste lit des jetons (`jetons.css`). Le garde-fou
   `v3/tests/test_librairie_garde.py` refuse toute valeur hors de ce dossier.

   D'où viennent les valeurs (maquettes du 21/10, branche `v3-maquettes-olympe`,
   `docs/design/speyy-olympe-couleurs/`) :
     couleurs et ombres  `themes/b.css`, bloc `b-ivoire` de JOUR, à la valeur près ;
     polices             EB Garamond (titres), Geist (texte), Geist Mono (code) ;
     rayons              `themes/c.css`, `c-sauge` : 12 / 8 / 18, et ses règles
                         de fin de fichier (blocs du fil 16, fichier 14, carte de
                         mail 18, corps du mail 12, bulle 20 20 6 20,
                         compositeur 24, envoi rond, boutons et recherche en pilule).
   Les rares valeurs sans équivalent dans la maquette sont marquées « Speyy ».

   Deux blocs (décision D12 du 22/10/2026, mission M6) : le JOUR (`:root`), et la
   NUIT (`:root[data-theme="nuit"]`), valeurs de `themes/b.css`, bloc `b-ivoire`
   `[data-theme="dark"]`, à la valeur près. `data-theme` est posé sur `<html>`
   avant le premier rendu (`bridge.speyy_ui_head`) puis par Réglages › Apparence
   et le menu du compte (`access-chat.js::setAppearance`). La nuit ne réécrit
   que ce qui change ; tout le reste (rôles, éléments, pages) suit seul.

   Les polices passent par Google Fonts, comme Manrope avant elles : cette
   feuille est posée en tête de page (`bridge.speyy_ui_head`), son `@import` est
   donc la première requête de police de la page.
   ─────────────────────────────────────────────────────────────────────────── */

@import url("https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Geist:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;600&display=swap");

:root {
  color-scheme: light;

  /* Marque */
  --sp-t-ivory: #F6F3ED;
  --sp-t-ink: #1C1B1A;
  --sp-t-sand: #E3CDB3;
  --sp-t-sepia: #4A2C18;

  /* Page et menu de chaque apparence : ceux du mode courant, et ceux des aperçus
     Jour / Nuit / Système des Réglages, qui montrent les deux à la fois. */
  --sp-t-day-page: #FBF9F7;
  --sp-t-day-sidebar: #F2EFEC;
  --sp-t-night-page: #171514;
  --sp-t-night-sidebar: #11100F;

  /* Surfaces */
  --sp-t-page: var(--sp-t-day-page);        /* page, fond du fil */
  --sp-t-sidebar: var(--sp-t-day-sidebar);  /* menu de gauche, panneaux */
  --sp-t-card: #FFFFFF;            /* cartes, compositeur, fenêtres */
  --sp-t-muted: #F1EDEA;           /* fond discret, bulle de la personne */
  --sp-t-hover: #EDE9E5;           /* survol */
  --sp-t-sidebar-active: #E9E4DF;  /* entrée active du menu, sélection */

  /* Encres */
  --sp-t-text: #1C1B1A;
  --sp-t-text-soft: #696766;
  --sp-t-sidebar-text: #3C3A38;
  --sp-t-faint-mix: 78%;           /* Speyy : texte pâle = texte atténué à 78 % sur la carte */

  /* Filets et champs */
  --sp-t-line: #E6E2DE;
  --sp-t-input: #DED9D4;
  --sp-t-ring: #C98A5E;

  /* Action principale, danger */
  --sp-t-primary: #AA4F13;
  --sp-t-primary-hover: #8A3F0F;
  --sp-t-on-primary: #FFFFFF;
  --sp-t-danger: #B3261E;
  --sp-t-on-danger: #FFFFFF;
  --sp-t-crit: #B3261E;            /* « Urgent » (« --m-crit » de la maquette, distinct du danger de nuit) */
  --sp-t-cta: #1C1B1A;             /* bouton d'encre, filtre actif : l'encre en aplat (« .s-pf.is-on » de la maquette) */
  --sp-t-on-cta: #F6F3ED;
  --sp-t-banner: #1C1B1A;          /* bandeau sombre (« --m-cta-bg » de la maquette, « .m-cta ») */
  --sp-t-on-banner: #F6F3ED;
  --sp-t-banner-ring: none;        /* son filet (« --m-cta-ring ») : aucun de jour */

  /* Statuts : toujours avec leur mot */
  --sp-t-ok: #2F7A4A;
  --sp-t-warn: #9A5D0C;
  --sp-t-wait: #55499F;
  --sp-t-info: #2B6099;
  --sp-t-badge-fill: 8%;           /* fond teinté d'un statut */
  --sp-t-badge-line: 22%;          /* filet teinté d'un statut */
  --sp-t-badge-ink: 72%;           /* mot d'un statut, mêlé à l'encre */

  /* Graphiques, ordre fixe */
  --sp-t-chart-1: #AA4F13;
  --sp-t-chart-2: #3F6FB0;
  --sp-t-chart-3: #C2861A;
  --sp-t-chart-4: #0E8C7C;
  --sp-t-chart-5: #8E4F8A;
  --sp-t-area-fill: 1;
  --sp-t-bar-top: #C4672A;
  --sp-t-bar-bottom: #8A3F0F;
  --sp-t-dotchart-dim: #C6BFB9;
  --sp-t-dotchart-ink: #AA4F13;    /* Speyy : points allumés d'un graphique en points (Mails, Prospection) */
  --sp-t-dotchart-accent: #AA4F13; /* Speyy : sa colonne mise en avant */
  --sp-t-dots: #AA4F13;
  --sp-t-dots-accent: #E3CDB3;
  --sp-t-city-1: #6E4226;
  --sp-t-city-2: #B98259;
  --sp-t-city-3: #EADBCB;
  --sp-t-city-mode: dither;        /* ville tramée (« --m-city-mode ») ; « nocturne » de nuit */
  --sp-t-city-light-1: #A8693A;    /* lumières de la ville de nuit (seulement en « nocturne ») */
  --sp-t-city-light-2: #DE9A4E;
  --sp-t-city-light-3: #F2D49C;
  --sp-t-logo-filter: none;        /* logo Speyy (noir) : « --s-logo-filter » de la maquette */

  /* Personnes : une couleur par personne (mission N2, 23/10/2026, Maxime : « chaque bulle a une couleur
     donnée »). Speyy : la maquette du 21/10 dessine tout le monde sur le sable. Teintes de la famille des
     graphiques (terracotta, bleu, ocre, sarcelle, prune), plus mousse, framboise, indigo ; toutes assez
     sourdes pour porter les initiales claires à 5,7:1 au moins. La teinte d'une personne se tire de son
     identifiant (`speyy-ui.js::personTone`) ; l'ordre ne se change pas sans changer la couleur de tout le monde. */
  --sp-t-person-1: #A64B14;        /* terracotta */
  --sp-t-person-2: #3A66A6;        /* bleu */
  --sp-t-person-3: #8A5A12;        /* ocre */
  --sp-t-person-4: #0B6E62;        /* sarcelle */
  --sp-t-person-5: #8A4A86;        /* prune */
  --sp-t-person-6: #5E6A2A;        /* mousse */
  --sp-t-person-7: #A63E5C;        /* framboise */
  --sp-t-person-8: #5650A0;        /* indigo */
  --sp-t-on-person: #FFFFFF;       /* les initiales sur la couleur d'une personne */

  /* Ombres, voiles, avatar */
  --sp-t-shadow: 0 1px 2px rgb(50 40 34 / 0.04), 0 4px 16px rgb(50 40 34 / 0.05);
  --sp-t-shadow-lift: 0 2px 6px rgb(50 40 34 / 0.06), 0 16px 40px rgb(50 40 34 / 0.09);
  --sp-t-shadow-focus: 0 0 0 3px rgb(201 138 94 / 0.28);   /* Speyy : anneau de focus, la teinte de --sp-t-ring */
  --sp-t-shadow-inset: inset 0 0 0 1px #E6E2DE;            /* Speyy : filet intérieur, la teinte de --sp-t-line */
  --sp-t-shadow-ring: 0 0 0 2px #FFFFFF;                   /* Speyy : liseré qui détache deux avatars empilés */
  --sp-t-avatar-overlap: 3px;   /* Speyy : chevauchement d'une pile d'avatars. Liseré (2 px) compris, il reste à côté des
                                   initiales de l'avatar recouvert (6 px les coupaient : « MA » se lisait « M », mission N5) */
  --sp-t-avatar-stack-inset: 5px;  /* Speyy : la part d'un avatar recouverte par son voisin (chevauchement + liseré) ; ses
                                      initiales se centrent dans le reste, même « WM » (N5) */
  --sp-t-shadow-row-selected: inset 3px 0 0 var(--sp-t-text);       /* Speyy : barre de la ligne choisie (Besoin de moi, Mails) */
  --sp-t-shadow-box-selected: inset 0 0 0 1px var(--sp-t-text);     /* Speyy : liseré de la boîte choisie (Mails) */
  --sp-t-shadow-halo: 0 0 0 4px color-mix(in srgb, var(--sp-t-info) 14%, transparent); /* Speyy : halo du point « en cours » d'un agent */
  --sp-t-shadow-none: none;        /* Speyy : élément à plat (bulle de la personne, maquette du 21/10) */
  --sp-t-backdrop: rgb(28 27 26 / 0.34);
  --sp-t-avatar-mix: 40%;          /* avatar = sable à 40 % */
  --sp-t-selection-mix: 18%;       /* Speyy : sélection de texte = action principale à 18 % */
  --sp-t-press-mix: 86%;           /* Speyy : survol d'un bouton plein = sa couleur à 86 %, mêlée à son encre */

  /* Polices */
  --sp-t-font-heading: "EB Garamond", Georgia, serif;
  --sp-t-font-sans: "Geist", system-ui, -apple-system, sans-serif;
  --sp-t-font-mono: "Geist Mono", ui-monospace, Menlo, monospace;

  /* Rayons (c-sauge), relevés le 22/10/2026 par la décision D7 de Maxime : « rien ne devient plus carré qu'en
     3.13.4 ». Les rayons du sauge sont un MINIMUM ; là où 3.13.4 était plus rond, sa valeur l'emporte. */
  --sp-t-radius-xs: 6px;           /* petits carrés de détail (aucun avatar : les avatars sont ronds) */
  --sp-t-radius-sm: 10px;          /* 3.13.4 : 10 (sauge 8) */
  --sp-t-radius-md: 14px;          /* 3.13.4 : 14 (sauge 12) ; entrées du menu, champs */
  --sp-t-radius-file: 14px;
  --sp-t-radius-field: 16px;       /* champs de la page de connexion et de /acces (3.13.4 : 16) */
  --sp-t-radius-block: 18px;       /* blocs du fil : réflexion, tableau, agents (3.13.4 : 18, sauge 16) */
  --sp-t-radius-lg: 20px;          /* cartes, carte de mail, menus (3.13.4 : jusqu'à 20) */
  --sp-t-radius-xl: 24px;          /* notification, alerte (3.13.4 : 22) */
  --sp-t-radius-xxl: 28px;         /* fenêtres, carte de connexion (3.13.4 : 22 à 28) */
  --sp-t-radius-composer: 32px;    /* compositeur (3.13.4 : 32, sauge 24) */
  --sp-t-radius-pill: 999px;
  --sp-t-radius-round: 50%;        /* avatars, pastilles de personnes, points d'état */
  --sp-t-radius-bubble: 22px;      /* bulle de la personne (3.13.4 : 22 aux quatre coins, sauge 20 20 6 20) */

  /* Visuels dans le chat (Core 3.15, mission V1, 25/10/2026) : la palette nommée de l'agent
     (`v3/docs/VISUELS-DANS-LE-CHAT.md` § 5). Trois rôles par nom : la teinte (traits, barres, icônes),
     le fond doux (carte teintée, carré d'icône, pastille) et l'encre lisible sur ce fond et sur la carte.
     Contraste mesuré le 25/10 (texte) : encre sur fond doux 5,7:1 au moins, encre sur carte 6,7:1,
     carte sur encre (ton « solid ») 6,7:1 ; teinte sur carte 3,1:1 au moins (graphique). Esprit des teintes
     des personnes et des graphiques ; `accent` suit l'action principale. */
  --sp-t-vis-sauge: #5E7F5F;
  --sp-t-vis-sauge-soft: #EBF1EA;
  --sp-t-vis-sauge-ink: #3A5A3C;
  --sp-t-vis-terracotta: #AA4F13;
  --sp-t-vis-terracotta-soft: #F8EAE0;
  --sp-t-vis-terracotta-ink: #8A3F0F;
  --sp-t-vis-ocre: #C2861A;
  --sp-t-vis-ocre-soft: #F8EFDC;
  --sp-t-vis-ocre-ink: #7A5208;
  --sp-t-vis-bleu: #3F6FB0;
  --sp-t-vis-bleu-soft: #E7EEF8;
  --sp-t-vis-bleu-ink: #2D5590;
  --sp-t-vis-sarcelle: #0E8C7C;
  --sp-t-vis-sarcelle-soft: #DFF2EF;
  --sp-t-vis-sarcelle-ink: #0B6559;
  --sp-t-vis-prune: #8E4F8A;
  --sp-t-vis-prune-soft: #F3E8F2;
  --sp-t-vis-prune-ink: #6E3A6B;
  --sp-t-vis-rose: #C2577A;
  --sp-t-vis-rose-soft: #F9E8EE;
  --sp-t-vis-rose-ink: #973C5B;
  --sp-t-vis-ardoise: #5B6878;
  --sp-t-vis-ardoise-soft: #ECEEF1;
  --sp-t-vis-ardoise-ink: #3E4957;
  --sp-t-vis-success: #2F7A4A;
  --sp-t-vis-success-soft: #E6F2EA;
  --sp-t-vis-success-ink: #25603A;
  --sp-t-vis-warning: #9A5D0C;
  --sp-t-vis-warning-soft: #F8EEDF;
  --sp-t-vis-warning-ink: #7A4808;
  --sp-t-vis-danger: #B3261E;
  --sp-t-vis-danger-soft: #FAE6E4;
  --sp-t-vis-danger-ink: #8F1D17;
  --sp-t-vis-info: #2B6099;
  --sp-t-vis-info-soft: #E5EDF7;
  --sp-t-vis-info-ink: #224C7A;
  --sp-t-vis-neutral: #696766;
  --sp-t-vis-neutral-soft: #F1EDEA;
  --sp-t-vis-neutral-ink: #4A4846;
  --sp-t-vis-accent: var(--sp-t-primary);
  --sp-t-vis-accent-soft: #F8EAE0;
  --sp-t-vis-accent-ink: #8A3F0F;

  /* ── Mouvement (3.15.4, 25/10/2026) : durées et courbes de toute animation du chat et des visuels ── */
  --sp-t-dur-1: 120ms;    /* micro : survol, pastille retirée, coche */
  --sp-t-dur-2: 200ms;    /* petit : menu, ligne dépliée, onglet */
  --sp-t-dur-3: 280ms;    /* moyen : panneau, bloc qui apparaît, tiroir */
  --sp-t-dur-4: 420ms;    /* grand : squelette vers visuel, entrée d'un bento */
  --sp-t-ease-out: cubic-bezier(.22, .8, .24, 1);       /* ce qui entre */
  --sp-t-ease-in: cubic-bezier(.4, 0, 1, 1);            /* ce qui sort */
  --sp-t-ease-in-out: cubic-bezier(.45, 0, .2, 1);      /* ce qui change de place ou de taille */
  --sp-t-ease-spring: cubic-bezier(.34, 1.36, .64, 1);  /* un léger rebond, avec parcimonie */
}

/* ── Nuit (« Ivoire arrondi » de nuit) ───────────────────────────────────────
   `themes/b.css` de la maquette, bloc `html[data-variante="b-ivoire"][data-theme="dark"]`,
   à la valeur près. Les valeurs « Speyy » (sans équivalent dans la maquette) gardent
   leur sens : le filet intérieur prend le filet de nuit, le liseré d'avatar la carte de
   nuit, l'encre en aplat (bouton d'encre, filtre actif) devient le texte clair sur la
   page sombre, comme `.s-pf.is-on` de la maquette (`--m-fg` sur `--m-bg`). Polices et
   rayons ne changent pas. */
:root[data-theme="nuit"] {
  color-scheme: dark;

  --sp-t-page: var(--sp-t-night-page);
  --sp-t-sidebar: var(--sp-t-night-sidebar);
  --sp-t-card: #201D1B;
  --sp-t-muted: #292624;
  --sp-t-hover: #2C2926;
  --sp-t-sidebar-active: #24211F;

  --sp-t-text: #EDE7E1;
  --sp-t-text-soft: #A6A09B;
  --sp-t-sidebar-text: #D4CEC9;
  --sp-t-faint-mix: 84%;           /* Speyy : texte pâle à 84 % sur la carte de nuit (4,5:1 au moins, `contraste.py` du banc v3-nuit) */

  --sp-t-line: #34302D;
  --sp-t-input: #423E3A;
  --sp-t-ring: #C98A5E;

  --sp-t-primary: #D9773F;
  --sp-t-primary-hover: #E58B57;
  --sp-t-on-primary: #1A1410;
  --sp-t-danger: #EE7D70;
  --sp-t-on-danger: #1A1410;
  --sp-t-crit: #F2867A;
  --sp-t-cta: #EDE7E1;             /* Speyy : l'encre en aplat = le texte de nuit (maquette : `.s-pf.is-on`) */
  --sp-t-on-cta: #171514;          /* … et son mot = la page de nuit */
  --sp-t-banner: #0E0C0B;
  --sp-t-on-banner: #F6F3ED;
  --sp-t-banner-ring: inset 0 0 0 1px #34302D;

  --sp-t-ok: #6CC08A;
  --sp-t-warn: #E3A55A;
  --sp-t-wait: #AFA2EE;
  --sp-t-info: #80B2E8;
  --sp-t-badge-fill: 14%;
  --sp-t-badge-line: 32%;
  --sp-t-badge-ink: 100%;

  --sp-t-chart-1: #D9773F;
  --sp-t-chart-2: #7489E2;
  --sp-t-chart-3: #C3841A;
  --sp-t-chart-4: #2AA88C;
  --sp-t-chart-5: #BE72CC;
  --sp-t-area-fill: .3;
  --sp-t-bar-top: #E58B57;
  --sp-t-bar-bottom: #A8521F;
  --sp-t-dotchart-dim: #58524E;
  --sp-t-dotchart-ink: #EDE7E1;    /* maquette : `MUI.dotChart` dessine en `--m-fg` … */
  --sp-t-dotchart-accent: #D9773F; /* … et met en avant en `--m-primary` (les `--sp-t-dots` de nuit, sourds, sont ceux du champ de points) */
  --sp-t-dots: #5C5045;
  --sp-t-dots-accent: #D9934A;
  --sp-t-city-mode: nocturne;
  --sp-t-city-1: #433A31;
  --sp-t-city-2: #5C4F42;
  --sp-t-city-3: #A08A70;
  --sp-t-logo-filter: invert(1) brightness(.93);

  /* Personnes : les mêmes teintes, un peu plus claires et moins saturées, pour se détacher de la page et de la
     carte de nuit (3,3:1 au moins) en gardant les initiales claires à 5:1 au moins. */
  --sp-t-person-1: #AE5723;
  --sp-t-person-2: #4870AC;
  --sp-t-person-3: #95661F;
  --sp-t-person-4: #167C70;
  --sp-t-person-5: #975993;
  --sp-t-person-6: #697536;
  --sp-t-person-7: #B14E6B;
  --sp-t-person-8: #6C67AA;
  --sp-t-on-person: #FFFFFF;

  --sp-t-shadow: 0 1px 2px rgb(0 0 0 / .35), 0 4px 16px rgb(0 0 0 / .25);
  --sp-t-shadow-lift: 0 2px 6px rgb(0 0 0 / .4), 0 16px 40px rgb(0 0 0 / .5);
  --sp-t-shadow-inset: inset 0 0 0 1px #34302D;            /* Speyy : filet intérieur, la teinte de --sp-t-line de nuit */
  --sp-t-shadow-ring: 0 0 0 2px #201D1B;                   /* Speyy : liseré qui détache deux avatars, la carte de nuit */
  --sp-t-backdrop: rgb(0 0 0 / .6);
  --sp-t-avatar-mix: 13%;          /* avatar = sable à 13 % (« --m-avatar-bg » de nuit) */

  /* Visuels : la palette de nuit (mêmes rôles). Teintes plus claires, fonds doux sombres, encres claires :
     encre sur fond doux 6,9:1 au moins, carte sur encre 8,2:1 au moins (mesuré le 25/10). */
  --sp-t-vis-sauge: #8DB38F;
  --sp-t-vis-sauge-soft: #252F27;
  --sp-t-vis-sauge-ink: #B5D3B6;
  --sp-t-vis-terracotta: #D9773F;
  --sp-t-vis-terracotta-soft: #3A271C;
  --sp-t-vis-terracotta-ink: #F0A57A;
  --sp-t-vis-ocre: #D9A23F;
  --sp-t-vis-ocre-soft: #372C18;
  --sp-t-vis-ocre-ink: #EBC57E;
  --sp-t-vis-bleu: #7E9CE6;
  --sp-t-vis-bleu-soft: #222A3D;
  --sp-t-vis-bleu-ink: #AFC2F2;
  --sp-t-vis-sarcelle: #2AA88C;
  --sp-t-vis-sarcelle-soft: #17332D;
  --sp-t-vis-sarcelle-ink: #7ED3C0;
  --sp-t-vis-prune: #BE72CC;
  --sp-t-vis-prune-soft: #33233A;
  --sp-t-vis-prune-ink: #DDA8E6;
  --sp-t-vis-rose: #E07A9A;
  --sp-t-vis-rose-soft: #3B2229;
  --sp-t-vis-rose-ink: #F2AEC3;
  --sp-t-vis-ardoise: #93A0B2;
  --sp-t-vis-ardoise-soft: #282B31;
  --sp-t-vis-ardoise-ink: #C2CAD6;
  --sp-t-vis-success: #6CC08A;
  --sp-t-vis-success-soft: #1E3326;
  --sp-t-vis-success-ink: #9DD9B1;
  --sp-t-vis-warning: #E3A55A;
  --sp-t-vis-warning-soft: #3A2B19;
  --sp-t-vis-warning-ink: #F0C793;
  --sp-t-vis-danger: #EE7D70;
  --sp-t-vis-danger-soft: #3E211E;
  --sp-t-vis-danger-ink: #F6AEA5;
  --sp-t-vis-info: #80B2E8;
  --sp-t-vis-info-soft: #1F2C3B;
  --sp-t-vis-info-ink: #B1D0F2;
  --sp-t-vis-neutral: #A6A09B;
  --sp-t-vis-neutral-soft: #292624;
  --sp-t-vis-neutral-ink: #D4CEC9;
  --sp-t-vis-accent: var(--sp-t-primary);
  --sp-t-vis-accent-soft: #3A271C;
  --sp-t-vis-accent-ink: #F0A57A;
}

/* Mouvement réduit (réglage du système) : toutes les durées à zéro, chaque animation qui lit les jetons devient
   instantanée. Un script ne doit donc jamais attendre `transitionend` sans délai de secours. */
@media (prefers-reduced-motion: reduce) {
  :root { --sp-t-dur-1: 0ms; --sp-t-dur-2: 0ms; --sp-t-dur-3: 0ms; --sp-t-dur-4: 0ms; }
}
