/* Fichier généré par bin/build-bo-css.php : ne pas modifier, modifier les sources puis relancer le script. */

/* ===== charte-sobre.css ===== */
/*
 * Charte sobre (Julien, 06/10/2026) : « pas trop agressif visuellement, pas de
 * couleurs flashy ni de boutons très agressifs ». Feuille chargée en dernier,
 * au cabinet (back-office) comme dans l'espace client : une seule identité.
 *
 * Règles :
 * - le bleu LCP (#1b4962) porte l'action et la structure, à plat, sans dégradé ;
 * - le violet de la marque (#bc46b6) reste un accent : focus, lien actif, filet ;
 * - les pictogrammes reposent sur un fond bleu très clair, jamais sur un dégradé ;
 * - les jauges sont pleines et sobres ; les titres de groupe en gris-bleu.
 */
:root {
  --sobre-bleu: #1b4962;
  --sobre-bleu-fonce: #153a4f;
  --sobre-bleu-clair: #eef3f7;
  --sobre-bleu-trait: #d8e2ea;
  --sobre-gris: #6b6886;
  --sobre-trait: #e7e4ee;
  --sobre-accent: #bc46b6;
  --sobre-bandeau: linear-gradient(100deg, #1b4962 0%, #20506a 55%, #2e4d6f 100%);
}

/* ---------- Bandeaux d'en-tête : bleu calme, une seule nuance ---------- */
.bo-entete,
.ec-bandeau { background: var(--sobre-bandeau) !important; }
.flex:has(.dcarte) > main { background: var(--sobre-bandeau) top / 100% 64px no-repeat !important; }

/* ---------- Boutons : le bleu à plat, sans dégradé ni ombre forte ---------- */
.adm-btn-principal,
.cf .cf-b.adm-btn-principal,
.cf__legende .cf-b.adm-btn-principal,
.ec-btn.principal,
.ec-nav .envoi,
.ec-nav .envoi:hover {
  background: var(--sobre-bleu) !important;
  border-color: var(--sobre-bleu) !important;
  color: #fff !important;
  box-shadow: none !important;
  filter: none !important;
}
.adm-btn-principal:hover:not(:disabled),
.ec-btn.principal:hover { background: var(--sobre-bleu-fonce) !important; border-color: var(--sobre-bleu-fonce) !important; }
/* Boutons secondaires : contour gris-bleu, texte bleu ; jamais rose. */
.cf-b--envoyer, .cf__envoi[open] > summary { color: var(--sobre-bleu) !important; border-color: var(--sobre-bleu-trait) !important; }
.cf-b--envoyer:hover:not(:disabled) { border-color: var(--sobre-bleu) !important; }
.cf__etapes a, .dcarte__coord a { color: var(--sobre-bleu) !important; }

/* ---------- Pictogrammes et avatars : fond clair, trait bleu ---------- */
.cf__ic,
.crm-nav__item.is-actif .crm-nav__ic,
.dcarte__nav > a.is-actif .ic,
.dcarte__grp > summary.is-actif .ic,
.kl-resume__ic,
.kl-liste[data-lignes] .kl-resume__ic { color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }
.dcarte__avatar,
.ec-avatar,
.cl-av,
.cl-av--pm,
.cl-av--prospect,
.cl-av--lead,
.cfo-av { color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }
.kl-dlg__cote,
.kl-dlg--biens .kl-dlg__cote,
.kl-dlg--placements .kl-dlg__cote,
.kl-dlg--credits .kl-dlg__cote { background: var(--sobre-bleu) !important; }

/* ---------- Jauges : pleines, bleu sobre ---------- */
.cf__pct > span,
.dcarte__jauge > div > span,
.fiche-kpis .crm-jauge i,
.cl-kyc i b,
.ec-jauge > div > span,
.fp-jauge i { background: var(--sobre-bleu) !important; }

/* ---------- Repères d'onglet actif : un filet discret ---------- */
.crm-nav__item.is-actif::after,
.dcarte__nav > a.is-actif::before,
.dcarte__grp > summary.is-actif::before { background: var(--sobre-bleu) !important; }
.dcarte__nav a.is-actif,
.dcarte__sous a.is-sous { color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }

/* ---------- Tuiles chiffrées : plus de grand aplat dégradé ---------- */
.fiche-kpis .crm-kpi--plein { color: #fff !important; background: var(--sobre-bleu) !important; }
.acc-nb, .fp-type, .vr-onglets a.actif { background: var(--sobre-bleu) !important; border-color: var(--sobre-bleu) !important; }

/* ---------- Prochaine étape du dossier : vert pâle, plus de grand bloc vif ---------- */
.dcarte__suite { color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; box-shadow: none !important; }
.dcarte__suite--ok { color: #0f5c47 !important; background: #eaf5f0 !important; }

/* ---------- Titres de groupe : gris-bleu, plus de violet ---------- */
.cfo-nav2__lib, .cfo-syn__bloc h2, .acc-panneau h2, .acc .bo-panel__titre, .rg__partie h2,
.dos .kicker, .dos .grp, .avis__t, .ec-grp, .dcarte__tete, .dcarte__sous-titre { color: var(--sobre-gris) !important; }

/* ---------- Focus et cible : l'accent de la marque, discret ---------- */
.cf__carte:target { border-color: var(--sobre-bleu-trait) !important; box-shadow: 0 0 0 3px rgba(27, 73, 98, .10) !important; }
.acc-recherche:focus-within { border-color: var(--sobre-bleu) !important; box-shadow: 0 0 0 3px rgba(27, 73, 98, .10) !important; }
:focus-visible { outline-color: var(--sobre-accent); }

/* ---------- Blocs dépliables : la même apparence partout ---------- */
details.ec-compl > summary,
details.mguide > summary,
details.sco__rep > summary,
details.dcarte__grp > summary,
.bo-panel details > summary { color: var(--sobre-bleu); }

/* ---------- Espace client : rubrique active et liens en bleu ---------- */
.ec-nav a.actif { color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }
.ec-nav a.actif .ic { color: var(--sobre-bleu) !important; }
.ec-lien { color: var(--sobre-bleu) !important; }

/* ---------- Cases de saisie : une seule apparence (Julien, 06/10/2026) ----------
 * Même trait, même arrondi, même hauteur et même anneau de focus au cabinet,
 * chez le consultant et dans l'espace client. Les réglages compacts plus
 * précis (tableaux, filtres) gardent leur taille. */
.adm-champ,
.ec-in,
.ec-champ select, .ec-champ textarea,
.ec-deux select, .ec-ligne select, .ec-ligne textarea,
.bo-search__input {
  border: 1px solid #d9d5e3 !important;
  border-radius: 10px !important;
  background-color: #fff;
  color: #2d2a3e;
  font: inherit;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.adm-champ, .ec-in, .ec-champ select, .ec-deux select { padding: 9px 12px; min-height: 40px; font-size: 14px; }
textarea.adm-champ, .ec-champ textarea, .ec-ligne textarea { min-height: 84px; line-height: 1.5; }
.adm-champ:hover:not(:focus):not(:disabled),
.ec-in:hover:not(:focus):not(:disabled),
.ec-champ select:hover:not(:focus), .ec-deux select:hover:not(:focus), .ec-ligne select:hover:not(:focus) { border-color: #bfc9d4 !important; }
.adm-champ:focus, .ec-in:focus,
.ec-champ select:focus, .ec-champ textarea:focus,
.ec-deux select:focus, .ec-ligne select:focus, .ec-ligne textarea:focus,
.bo-search__input:focus {
  outline: none !important;
  border-color: var(--sobre-bleu) !important;
  box-shadow: 0 0 0 3px rgba(27, 73, 98, .12) !important;
}
.adm-champ:disabled, .ec-in:disabled, .adm-champ[readonly] { background-color: #f6f5f9; color: #6b6886; }
/* Contre-audit 21/10/2026 (D-UX-09) : texte indicatif à 5,8:1 (#9a96ad donnait 2,86:1). */
.adm-champ::placeholder, .ec-in::placeholder { color: #66627f; }
/* Champ montant : le suffixe € épouse la case. */
.ec-montant .ec-in { border-radius: 10px 0 0 10px !important; }

/* Repli des précisions facultatives : une ligne d'explication. */
.ec-compl__aide { grid-column: 1 / -1; margin: 0 0 10px; font-size: 12.5px; color: var(--sobre-gris); }

/* ---------- Choix à cocher (Julien, 06/10/2026) : même taille que les cases de saisie ----------
 * Les réponses proposées (vigilance, LCB-FT opération, questionnaires) ont la hauteur, le trait et
 * l'arrondi des autres champs ; la réponse retenue est en bleu clair, trait bleu. */
.dos .choix { gap: 8px !important; }
.dos .choix label {
  min-height: 40px;
  padding: 8px 14px !important;
  border: 1px solid #d9d5e3 !important;
  border-radius: 10px !important;
  background: #fff;
  font-size: 13.5px !important;
}
.dos .choix label:has(input:checked) { border-color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }
.dos .choix label:has(input:focus-visible) { box-shadow: 0 0 0 3px rgba(27, 73, 98, .12); }
.qo .choix label:has(input:checked) { background: var(--sobre-bleu-clair) !important; border-color: var(--sobre-bleu) !important; }
.qo .choix input:checked + span { color: var(--sobre-bleu) !important; font-weight: 600; }

/* ---------- Hauteur unique des champs (Julien, 06/10/2026 : « listes déroulantes de la même taille ») ----------
 * Cases de saisie et listes déroulantes : 42 px partout (fiche, connaissance, conformité, listes, espace client). */
input.adm-champ:not([type=checkbox]):not([type=radio]):not([type=file]),
select.adm-champ,
.ec-in,
.ec-champ select, .ec-deux select, .ec-ligne select,
.dos-cons select, .la__attribuer select, .bo-filtres select, .cl-confier select {
  box-sizing: border-box !important;
  height: 42px !important;
  min-height: 42px !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  line-height: 40px;
  font-size: 14px !important;
}
.dos-cons select { width: 100%; border: 1px solid #d9d5e3; border-radius: 10px; padding: 0 10px; background: #fff; }
.la__attribuer select { padding: 0 10px !important; border-radius: 10px !important; }
input[type=date].adm-champ, input[type=date].ec-in { line-height: normal; }

/* ---------- Réglages, modèles de documents : même tuile que le tableau de conformité (Julien, 06/10/2026) ---------- */
.mdl__carte { border: 1px solid #e3e0ea !important; border-radius: 14px !important; box-shadow: none !important; padding: 14px 16px !important; }
.mdl__carte:hover { border-color: var(--sobre-bleu) !important; box-shadow: 0 2px 10px rgba(27, 73, 98, .08) !important; transform: none !important; }
.mdl__ic { width: 40px !important; height: 40px !important; border-radius: 12px !important; color: var(--sobre-bleu) !important; background: var(--sobre-bleu-clair) !important; }
.mdl__t b { font-weight: 600; font-size: 14px !important; }
.mdl__fam h2 { font-size: 20px !important; font-weight: 400 !important; }
.mdl__note { border-radius: 14px !important; border-color: #e3e0ea !important; }
.mdl__tag--r { background: #fff4e0 !important; color: #9a5b00 !important; }

/* 06/10/2026 (Julien, « la police des champs n'est pas celle du site ») : un champ de formulaire n'hérite pas
   de la police de la page par défaut (le navigateur prend la sienne). Champs, listes, zones de texte et boutons
   prennent la police du site, au cabinet comme dans l'espace client. */
input, select, textarea, button, optgroup { font-family: 'DM Sans', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; }
input::placeholder, textarea::placeholder { font-family: inherit; }

/* 06/10/2026 (lot z9) : les boutons d'en-tête restent à droite, même quand le titre est long et qu'ils passent à la ligne. */
.bo-entete { flex-wrap: wrap; }
.bo-entete__actions { margin-left: auto; justify-content: flex-end; flex-wrap: wrap; }

/* ---------- 06/10/2026 (z15) : connaissance client peu remplie, action indisponible ---------- */
.cl-kyc--moyen i b { background: #c98a1a !important; }
.cl-kyc--bas i b { background: #b4413a !important; }
.cl-kyc--bas span { color: #9b2f28; font-weight: 600; }
.cl-act--vide { opacity: .35; cursor: not-allowed; }
.acc-nb { color: #fff !important; }
/* 06/10/2026 (z15) : chiffres alignés (Playfair a des chiffres elzéviriens). */
.crm-kpi b, .acc-kpi b, .fiche-kpis .crm-kpi b, .bo-cartes b, .crm-nav__txt em { font-variant-numeric: lining-nums tabular-nums; }
/* 06/10/2026 (z15) : zone de dépôt de fichier commune aux écrans d'import. */
.imp-depot{display:block;width:100%;padding:22px 16px;border:1.5px dashed #d9d3e6;border-radius:14px;background:#fbfaff;font-size:13px;color:#4a4760;cursor:pointer}
.imp-depot:hover,.imp-depot:focus{border-color:#bc46b6}
.imp-depot::file-selector-button{margin-right:12px;padding:7px 14px;border:1px solid #1b4962;border-radius:999px;background:#fff;color:#1b4962;font:inherit;cursor:pointer}
/* 06/10/2026 (z15) : badges communs à tous les écrans (jusqu'ici définis dans les listes seulement). */
.pastille{display:inline-block;margin:0 4px 4px 0;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;vertical-align:1px}
.pastille--vert{background:#e4f3ec;color:#0f6e56}.pastille--violet{background:#f3e8f6;color:#6d3f86}.pastille--gris{background:#f0eff4;color:#66627f}
.pastille--bleu{background:#e8eef3;color:#1b4962}.pastille--ambre{background:#fdf1e1;color:#9a5b00}.pastille--rouge{background:#fbe9e7;color:#b8382f}
/* 06/10/2026 (z15) : un seul contour de focus sur la recherche (celui du cadre). */
.bo-search__input:focus { box-shadow: none !important; border-color: transparent !important; }
.bo-search:focus-within { border-color: var(--sobre-bleu) !important; box-shadow: 0 0 0 3px rgba(27, 73, 98, .12) !important; }

/* ---------- Passe d'alignement du 16/10/2026 (audit visuel : champs, rangées, pastilles, cibles tactiles) ---------- */
/* Champs en rangée : largeur souple, au lieu des 100 % de .adm-champ qui empilaient les formulaires. */
/* 17/10/2026 : pas dans une colonne (flex-col) : la base de 200 px y devenait une hauteur (champs géants sur la connexion et le mot de passe). */
form.flex:not(.flex-col) > label .adm-champ, form.flex:not(.flex-col) > .adm-champ, .flex:not(.flex-col) > .adm-champ, .flex:not(.flex-col) > label > .adm-champ { width: auto; flex: 1 1 200px; }
/* Pastilles de filtre : un espace entre le texte et le compteur (le flex avalait l'espace). */
a.rounded-full.border { gap: .35em; }
/* Dépôt de fichier : même hauteur et même style que les boutons. */
.adm-fichier, .kyc__depot input[type=file] { font-size: 13px; min-height: 40px; display: flex; align-items: center; }
.kyc__depot { align-items: center; }
.adm-fichier::file-selector-button, .kyc__depot input[type=file]::file-selector-button { min-height: 32px; margin-right: 10px; border: 1px solid var(--mq-trait-champ, #d9d4e6); border-radius: 8px; background: #fff; font: 600 13px inherit; padding: 0 12px; cursor: pointer; }
/* Cases à cocher de taille unique, alignées sur la première ligne. */
.ecr-pieces input[type=checkbox] { flex: none; width: 18px; height: 18px; margin: 1px 0 0; }
/* Rubrique Échéances et Liens du DER : champs alignés en bas quand un libellé passe sur deux lignes. */
.der-champs { align-items: end; }
.der-champs label { display: flex; flex-direction: column; justify-content: space-between; }
.der-champs label > :is(input, select) { margin-top: auto; }
/* Nouvelle proposition : la colonne suit la largeur du parcours. */
.pr-colonne { max-width: none !important; }
/* Select « Suivi par » : plus de texte coupé. */
.dcarte__coord .dos-cons form { flex-wrap: wrap; }
.dcarte__coord .dos-cons label { flex-basis: 100%; }
/* Bouton « Fait » d'une tâche : à la hauteur de la ligne. */
li > form > button.adm-btn, li > form > .adm-btn { min-height: 28px; padding: 2px 10px; margin-left: 8px; vertical-align: middle; }
/* Comptes : en-têtes alignés sur leurs valeurs, lignes en haut de cellule. */
.bo-conv__table td { vertical-align: top; }
/* Flèche de « Prochaine étape » : jamais seule sur sa ligne. */
.tc-suite span[aria-hidden] { white-space: nowrap; }
@media (max-width: 700px) {
  .bo-corps :is(.la__ico, .cl-act, .ra-auto__sw, .ecr-agrandir, .pr-aide-btn, .der-copie, .mtabs a, .rc-sommaire a, .rg-annees a, .crm-carte header a, .dcarte__grp--cf .dcarte__sous a) { min-height: 40px; min-width: 40px; display: inline-flex; align-items: center; justify-content: center; }
  .bo-corps input[type=checkbox] { width: 22px; height: 22px; }
  .bo-entete__actions .adm-btn { flex: 1 1 100%; }
}
/* 16/10/2026 : comptes, rubriques en pastilles sans coupure ; recherche de l'accueil lisible en mobile. */
.bo-conv__table .rubrique, .bo-conv__table td span.rounded-full { display: inline-block; margin: 2px 2px 2px 0; }
@media (max-width: 480px) {
  .acc-recherche input { font-size: 14px; text-overflow: ellipsis; }
  .acc-recherche kbd { display: none; }
}

/* Contre-audit 21/10/2026 (D-UX-16) : focus clavier bien visible dans l'espace client, comme dans le BO (bo-mobile.css,
   qui n'y est pas chargé) : contour de 2 px, #1b4962 (9,65:1 sur blanc). Placé en dernier pour passer après les
   « outline: none » des champs. */
.ec-maq :focus-visible { outline: 2px solid #1b4962 !important; outline-offset: 2px !important; }

/* ===== bo-maquette.css ===== */
/*
 * Unité graphique du back-office : la maquette du 14/10/2026 (étape 5 de la refonte, 15/10/2026).
 *
 * Décision de Julien : « les pages, les boutons… ressemblent à la maquette », dans tous les écrans du BO
 * (cabinet, consultants, site). Cette feuille remplace le « bandeau bleu calme » du 06/10/2026 pour le BO.
 * Elle passe en dernier dans bo-fin.css et se limite à .bo-cadre : l'espace client (.ec-*) n'est pas touché ici.
 * Pour revenir en arrière : retirer cette feuille de bin/build-bo-css.php et relancer le script.
 *
 * Repères de la maquette : police DM Sans, fond #f6f4f7, texte #14323f, texte secondaire gris-bleu,
 * titre d'écran 30 px à plat (ni bandeau, ni Playfair), cartes blanches à filet #e4dde9 et rayon 14 px,
 * boutons bleu nuit #14323f à rayon 10 px, pastilles teintées, intitulés de section en capitales violettes.
 */

/* ---------- Jetons : la palette de la maquette remplace celle du BO, à l'intérieur du cadre seulement ---------- */
.bo-cadre, .bo-auth {
  --mq-nuit: #16424f;
  --mq-nuit-fonce: #0f3340;
  --mq-prim: #1f6f8b;
  --mq-degrade: linear-gradient(135deg, #1f6f8b 0%, #a83aa2 100%);
  --mq-degrade-fonce: linear-gradient(135deg, #185a73 0%, #8e2f8a 100%);
  --mq-fond: #f6f4f7;
  --mq-trait: #e4dde9;
  --mq-trait-champ: #d9d2de;
  --mq-doux: #4d6571;
  --mq-section: #7b4b94;
  --bo-bleu: var(--mq-nuit);
  --bo-bleu-doux: #2b4a5a;
  --bo-encre: var(--mq-nuit);
  --bo-texte-moyen: var(--mq-doux);
  --bo-texte-doux: var(--mq-doux);
  --bo-trait: var(--mq-trait);
  --bo-trait-clair: #eee8f1;
  --color-bleu: var(--mq-nuit);
  --color-bleu-fonce: var(--mq-nuit-fonce);
  --color-texte: var(--mq-nuit);
  --color-doux: var(--mq-doux);
  --color-bord: var(--mq-trait);
  --color-fond: var(--mq-fond);
  --sobre-bleu: var(--mq-nuit);
  --sobre-bleu-fonce: var(--mq-nuit-fonce);
  --sobre-gris: var(--mq-doux);
  --color-violet: #a83aa2;
  --radius-carte: 14px;
  --shadow-carte: none;
  font-family: var(--bo-police);
  color: var(--mq-nuit);
}
.bo-cadre { background: var(--mq-fond); }
.bo-auth { background: #fff; }
body:has(.bo-cadre), body:has(.bo-auth) { background: #f6f4f7; }

/* ---------- En-tête d'écran : à plat, sur le fond de la page ---------- */
:is(.bo-cadre, .bo-auth) .bo-entete,
:is(.bo-cadre, .bo-auth) .flex:has(.dcarte) > main { background: none !important; }
:is(.bo-cadre, .bo-auth) .bo-entete { padding-top: 28px; padding-bottom: 12px; align-items: center; }
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__titre {
  font-family: var(--bo-police);
  font-size: 30px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: 0;
  color: var(--mq-nuit);
}
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__titre::after { display: none; }
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__contexte { color: var(--mq-doux); font-size: 14.5px; }
:is(.bo-cadre, .bo-auth) .bo-entete a:not(.adm-btn) { color: var(--mq-nuit); }
:is(.bo-cadre, .bo-auth) .bo-entete input, :is(.bo-cadre, .bo-auth) .bo-entete select { color: var(--mq-nuit); }
:is(.bo-cadre, .bo-auth) .bo-corps { padding-top: 8px; }

/* ---------- Boutons : le bleu nuit pour l'action, le contour pour le reste ---------- */
:is(.bo-cadre, .bo-auth) .adm-btn,
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn,
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-menu > div .adm-btn {
  box-sizing: border-box;
  min-height: 40px;
  padding: 9px 18px;
  border: 1px solid var(--mq-trait-champ);
  border-radius: 10px;
  background: #fff;
  color: var(--mq-nuit);
  font-size: 14px;
  font-weight: 600;
  box-shadow: none;
  transform: none;
}
:is(.bo-cadre, .bo-auth) .adm-btn:hover:not(:disabled),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn:not(.adm-btn-danger):hover:not(:disabled) {
  border-color: var(--mq-nuit);
  background: #fff;
  color: var(--mq-nuit);
  box-shadow: none;
  transform: none;
}
:is(.bo-cadre, .bo-auth) .adm-btn:focus-visible { outline: 2px solid var(--mq-nuit); outline-offset: 2px; }

/* Boutons secondaires de l'en-tête : plus de verre dépoli sur bandeau, un contour sur fond de page (écrase bo-charte). */
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn:not(.adm-btn-danger):not(.adm-btn-principal),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn:not(.adm-btn-danger):not(.adm-btn-principal):hover:not(:disabled) {
  border-color: var(--mq-trait-champ);
  background: #fff;
  color: var(--mq-nuit);
}
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn:not(.adm-btn-danger):not(.adm-btn-principal):hover:not(:disabled) { border-color: var(--mq-nuit); }
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn-danger { background: #fff; }

/* Bouton principal : explicite (adm-btn-principal) ou, dans l'en-tête, le dernier bouton quand aucun n'est désigné. */
:is(.bo-cadre, .bo-auth) .adm-btn.adm-btn-principal,
:is(.bo-cadre, .bo-auth) .cf .cf-b.adm-btn-principal,
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn.adm-btn-principal,
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions:not(:has(.adm-btn-principal)) .adm-btn:not(.adm-btn-danger):not(.adm-btn-sec):last-child:not(:first-child),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions:not(:has(.adm-btn-principal)) > .adm-menu:last-child:not(:first-child) > .adm-btn {
  border-color: transparent !important;
  background: var(--mq-degrade) !important;
  color: #fff !important;
  box-shadow: none !important;
  filter: none !important;
}
:is(.bo-cadre, .bo-auth) .adm-btn.adm-btn-principal:hover:not(:disabled),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn.adm-btn-principal:hover:not(:disabled),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions:not(:has(.adm-btn-principal)) .adm-btn:not(.adm-btn-danger):not(.adm-btn-sec):last-child:not(:first-child):hover:not(:disabled),
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions:not(:has(.adm-btn-principal)) > .adm-menu:last-child:not(:first-child) > .adm-btn:hover:not(:disabled) {
  border-color: transparent !important;
  background: var(--mq-degrade-fonce) !important;
  color: #fff !important;
  box-shadow: none !important;
  transform: none !important;
}
/* Suppression et gestes à risque : le rouge de la maquette, sur fond blanc. */
:is(.bo-cadre, .bo-auth) .adm-btn.adm-btn-danger,
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn-danger {
  border-color: #ecc3be;
  background: #fff;
  color: #8c2a1c;
}
:is(.bo-cadre, .bo-auth) .adm-btn.adm-btn-danger:hover:not(:disabled) { border-color: #8c2a1c; background: #fbe9e7; color: #8c2a1c; }
:is(.bo-cadre, .bo-auth) .adm-btn:disabled { opacity: .45; cursor: not-allowed; }
:is(.bo-cadre, .bo-auth) .adm-btn-icone { border-radius: 10px; }

/* ---------- Champs : le trait et le rayon de la maquette (la hauteur reste celle de charte-sobre : 42 px partout) ---------- */
:is(.bo-cadre, .bo-auth) .adm-champ,
:is(.bo-cadre, .bo-auth) .bo-search__input {
  border-color: var(--mq-trait-champ) !important;
  border-radius: 10px !important;
  color: var(--mq-nuit);
}
:is(.bo-cadre, .bo-auth) .adm-champ:focus,
:is(.bo-cadre, .bo-auth) .bo-search__input:focus {
  border-color: var(--mq-nuit) !important;
  box-shadow: 0 0 0 3px rgba(31, 111, 139, .18) !important;
}
/* Contre-audit 21/10/2026 (D-UX-09) : texte indicatif à 5,2:1 (#7d8f98 donnait 3,4:1). */
:is(.bo-cadre, .bo-auth) .adm-champ::placeholder { color: #5f6f78; }
:is(.bo-cadre, .bo-auth) .adm-label { font-size: 13px; font-weight: 600; color: var(--mq-nuit); }
:is(.bo-cadre, .bo-auth) .adm-aide { color: var(--mq-doux); }

/* ---------- Cartes et panneaux : blanc, filet #e4dde9, rayon 14, sans ombre ---------- */
:is(.bo-cadre, .bo-auth) .bo-panel,
:is(.bo-cadre, .bo-auth) .adm-carte,
:is(.bo-cadre, .bo-auth) .bo-data-card,
:is(.bo-cadre, .bo-auth) .bo-stat-card,
:is(.bo-cadre, .bo-auth) .acc-panneau,
:is(.bo-cadre, .bo-auth) .acc-kpi,
:is(.bo-cadre, .bo-auth) .mdl__carte,
:is(.bo-cadre, .bo-auth) .mdl__note {
  border: 1px solid var(--mq-trait);
  border-radius: 14px;
  box-shadow: none;
}
:is(.bo-cadre, .bo-auth) .bo-stat-card::before { display: none; }
:is(.bo-cadre, .bo-auth) .bo-stat-card:is(a):hover,
:is(.bo-cadre, .bo-auth) .acc-kpi:hover,
:is(.bo-cadre, .bo-auth) .mdl__carte:hover { transform: none; border-color: var(--mq-nuit); box-shadow: none; }
:is(.bo-cadre, .bo-auth) .acc-recherche { border-radius: 14px; border-color: var(--mq-trait); box-shadow: none; }
:is(.bo-cadre, .bo-auth) .acc-panneau h2 { font-family: var(--bo-police); font-size: 13px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }

/* Chiffres clés en tête d'écran : des cartes séparées (comme les cartes de l'accueil), plus une bande d'un seul bloc. */
:is(.bo-cadre, .bo-auth) .acc-kpis { gap: 14px; background: none; border: 0; border-radius: 0; overflow: visible; }
:is(.bo-cadre, .bo-auth) .acc-kpis > .acc-kpi { background: #fff; box-shadow: none; }

/* ---------- Intitulés de section : capitales violettes (maquette) ---------- */
:is(.bo-cadre, .bo-auth) .cfo-nav2__lib,
:is(.bo-cadre, .bo-auth) .cfo-syn__bloc h2,
:is(.bo-cadre, .bo-auth) .acc-panneau h2,
:is(.bo-cadre, .bo-auth) .acc .bo-panel__titre,
:is(.bo-cadre, .bo-auth) .rg__partie h2,
:is(.bo-cadre, .bo-auth) .dos .kicker,
:is(.bo-cadre, .bo-auth) .dos .grp,
:is(.bo-cadre, .bo-auth) .avis__t,
:is(.bo-cadre, .bo-auth) .dcarte__tete,
:is(.bo-cadre, .bo-auth) .dcarte__sous-titre,
:is(.bo-cadre, .bo-auth) .bo-filtres__titre { color: var(--mq-section) !important; }
:is(.bo-cadre, .bo-auth) .bo-filtres__titre { font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }

/* ---------- Palette vivante : dégradé bleu pétrole vers violet (boutons principaux, pastilles actives, numéros d'étape, jauges, bandeaux) ---------- */
:is(.bo-cadre, .bo-auth) .crm-kpi--plein,
:is(.bo-cadre, .bo-auth) .bo-comment__num,
:is(.bo-cadre, .bo-auth) .cv-barre i,
:is(.bo-cadre, .bo-auth) .kyc__jauge span,
:is(.bo-cadre, .bo-auth) .pr-section__num,
:is(.bo-cadre, .bo-auth) .pr-parcours__num,
:is(.bo-cadre, .bo-auth) .pr-recap__carte:first-child,
:is(.bo-cadre, .bo-auth) .pr-bandeau,
:is(.bo-cadre, .bo-auth) .ra-etape h3 span,
:is(.bo-cadre, .bo-auth) .acc-nb,
:is(.bo-cadre, .bo-auth) .fp-type,
:is(.bo-cadre, .bo-auth) .vr-onglets a.actif,
:is(.bo-cadre, .bo-auth) .bo-barre__avatar { background: var(--mq-degrade) !important; border-color: transparent !important; color: #fff !important; }
:is(.bo-cadre, .bo-auth) .crm-av,
:is(.bo-cadre, .bo-auth) .crm-av--lead,
:is(.bo-cadre, .bo-auth) .crm-av--prospect,
:is(.bo-cadre, .bo-auth) .crm-av--ancien { background: #e9eef1 !important; background-image: none !important; color: var(--mq-nuit) !important; }

/* ---------- Une seule police : DM Sans partout dans les écrans (plus de Playfair sur les chiffres et titres de cartes) ---------- */
:is(.bo-cadre, .bo-auth) :is(h1, h2, h3, .cf__groupe, .cfo-liste__tete h2, .crm-carte h2, .crm-kpi b, .cv-synth b, .d-tot, .fp-carte-id h2, .kpi b, .mdl__fam h2, .pa-bloc__tete h3, .pr-bandeau__chiffres b, .pr-recap__total, .pr-section__titre, .pr__retenu .grand, .questions b, .rc-titre, .sel__liste em, .sit__cartes b, .sit__mots, .acc-kpi b, .bo-stat-card b, .bo-panel__titre) { font-family: var(--bo-police); }
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__titre { font-family: var(--bo-police); }

/* Titres de carte : DM Sans gras, taille de lecture (le corps de la carte garde la vedette). */
:is(.bo-cadre, .bo-auth) :is(.crm-carte h2, .cfo-liste__tete h2, .pa-bloc__tete h3, .fp-carte-id h2, .mdl__fam h2) { font-size: 18px !important; font-weight: 700 !important; color: var(--mq-nuit); }

/* ---------- Tableaux : lignes à peine teintées, survol neutre ---------- */
:is(.bo-cadre, .bo-auth) .bo-corps table tbody tr:nth-child(even) > *,
:is(.bo-cadre, .bo-auth) .bo-main table tbody tr:nth-child(even) > * { background-color: #fbfafc; }
:is(.bo-cadre, .bo-auth) .bo-corps table tbody tr:hover > *,
:is(.bo-cadre, .bo-auth) .bo-main table tbody tr:hover > * { background-color: var(--mq-fond); }
:is(.bo-cadre, .bo-auth) .cl td { border-color: var(--mq-trait); }
:is(.bo-cadre, .bo-auth) .cl td:first-child { border-radius: 14px 0 0 14px; }
:is(.bo-cadre, .bo-auth) .cl td:last-child { border-radius: 0 14px 14px 0; }

/* ---------- Pastilles d'état : teintes de la maquette ---------- */
:is(.bo-cadre, .bo-auth) .pastille,
:is(.bo-cadre, .bo-auth) .acc-pastille,
:is(.bo-cadre, .bo-auth) .rg-s { font-weight: 700; }
:is(.bo-cadre, .bo-auth) .pastille--vert, :is(.bo-cadre, .bo-auth) .rg-s--configure, :is(.bo-cadre, .bo-auth) .rg-s--oui, :is(.bo-cadre, .bo-auth) .mbadge--client { background: #e3f4ec; color: #0b6b49; }
:is(.bo-cadre, .bo-auth) .pastille--ambre, :is(.bo-cadre, .bo-auth) .rg-s--incomplet, :is(.bo-cadre, .bo-auth) .rg-s--a_verifier, :is(.bo-cadre, .bo-auth) .mbadge--a_classer { background: #fdf0dc; color: #8a5200; }
:is(.bo-cadre, .bo-auth) .pastille--rouge, :is(.bo-cadre, .bo-auth) .rg-s--manquant, :is(.bo-cadre, .bo-auth) .rg-s--invalide, :is(.bo-cadre, .bo-auth) .mbadge--ambigu { background: #fbe9e7; color: #8c2a1c; }
:is(.bo-cadre, .bo-auth) .pastille--violet { background: #f1e8f5; color: var(--mq-section); }
:is(.bo-cadre, .bo-auth) .pastille--gris, :is(.bo-cadre, .bo-auth) .pastille--bleu { background: #eef0f2; color: var(--mq-doux); }

/* ---------- Barre de recherche et de filtres des listes (une seule définition, voir _filtres.html.twig et contact-messages) ---------- */
:is(.bo-cadre, .bo-auth) .bo-filtres { display: flex; flex-direction: column; gap: 12px; margin: 0 0 18px; padding: 14px 16px; border: 1px solid var(--mq-trait); border-radius: 14px; background: #fff; }
:is(.bo-cadre, .bo-auth) .bo-filtres__recherche { display: flex; gap: 8px; }
:is(.bo-cadre, .bo-auth) .bo-filtres__recherche .adm-champ { flex: 1; min-width: 0; }
:is(.bo-cadre, .bo-auth) .bo-filtres__blocs { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 22px; }
:is(.bo-cadre, .bo-auth) .bo-filtres__bloc { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
:is(.bo-cadre, .bo-auth) .bo-filtres__pastilles { display: flex; flex-wrap: wrap; gap: 6px; font-size: 13px; }
:is(.bo-cadre, .bo-auth) .bo-filtres select.adm-champ { width: 220px; max-width: 100%; }
:is(.bo-cadre, .bo-auth) .bo-filtres select.bo-filtres__actif { border-color: var(--mq-nuit) !important; background-color: #f1f5f8; font-weight: 600; color: var(--mq-nuit); }
:is(.bo-cadre, .bo-auth) .bo-filtres__effacer { margin-left: auto; align-self: center; font-size: 12.5px; }
@media (max-width: 700px) {
  :is(.bo-cadre, .bo-auth) .bo-filtres select.adm-champ { width: 100%; }
  :is(.bo-cadre, .bo-auth) .bo-filtres__bloc { width: 100%; }
  :is(.bo-cadre, .bo-auth) .bo-filtres__recherche { flex-wrap: wrap; }
}

/* ---------- Écran étroit : le titre rétrécit, les boutons gardent une cible tactile de 40 px ---------- */
@media (max-width: 900px) {
  :is(.bo-cadre, .bo-auth) .bo-entete { padding-top: 20px; }
  :is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__titre { font-size: 24px; }
}

/* Lien de retour ou de navigation de l'en-tête : toujours à contour, même en dernier du groupe (écrase la règle « dernier bouton » de bo-charte). */
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn.adm-btn-sec {
  border-color: var(--mq-trait-champ) !important;
  background: #fff !important;
  color: var(--mq-nuit) !important;
}
:is(.bo-cadre, .bo-auth) .bo-entete .bo-entete__actions .adm-btn.adm-btn-sec:hover:not(:disabled) { border-color: var(--mq-nuit) !important; }

/* Téléphone : cibles tactiles de 44 px (barre du haut, tiroir, onglets, champs, boutons). */
@media (max-width: 899px) {
  :is(.bo-cadre, .bo-auth) .bo-barre__bouton:not(.bo-barre__replier), :is(.bo-cadre, .bo-auth) .bo-barre__entree, :is(.bo-cadre, .bo-auth) .bo-barre__compte summary,
  :is(.bo-cadre, .bo-auth) .bo-rail__titre--lien, :is(.bo-cadre, .bo-auth) .bo-rail__entree, :is(.bo-cadre, .bo-auth) .bo-onglets__lien, :is(.bo-cadre, .bo-auth) .bo-sous-onglets__lien { min-height: 44px; display: flex; align-items: center; }
  :is(.bo-cadre, .bo-auth) .adm-btn { min-height: 44px !important; }
  :is(.bo-cadre, .bo-auth) .crm-nav__item, :is(.bo-cadre, .bo-auth) .liste-lien { min-height: 44px; display: flex; align-items: center; box-sizing: border-box; }
  :is(.bo-cadre, .bo-auth) .liste-lien { display: inline-flex; }
  :is(.bo-cadre, .bo-auth) input[type=checkbox], :is(.bo-cadre, .bo-auth) input[type=radio] { width: 20px; height: 20px; }
  :is(.bo-cadre, .bo-auth) input.adm-champ:not([type=checkbox]):not([type=radio]):not([type=file]), :is(.bo-cadre, .bo-auth) select.adm-champ { height: 44px !important; min-height: 44px !important; }
}

/* Titres de section des listes produits : violet de contraste suffisant sur le fond de page. */
:is(.bo-cadre, .bo-auth) .fp-titre { color: var(--mq-section); }

/* ---------- Palette vivante : menu, accueil, cartes chiffrées de la fiche client ---------- */
:is(.bo-cadre, .bo-auth) .bo-rail { background: linear-gradient(180deg, #1b5f78 0%, #2b4f87 55%, #6b3a8f 100%); }
:is(.bo-cadre, .bo-auth) .acc-pilotage { background: var(--mq-degrade); }
:is(.bo-cadre, .bo-auth) .crm-jauge i, :is(.bo-cadre, .bo-auth) .acc-jauge i { background: var(--mq-degrade) !important; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi--plein .crm-jauge i { background: #fff !important; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi--plein .crm-jauge { background: rgba(255, 255, 255, .3) !important; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi__lib { min-height: 40px; padding-right: 52px; box-sizing: border-box; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi b { white-space: nowrap; font-size: clamp(22px, 2.1vw, 28px); }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi__ic { background: #e6f1f5; color: var(--mq-prim); }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi__ic--violet { background: #f3e8f6; color: #8e2f8a; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi__ic--vert { background: #e3f4ec; color: #0b6b49; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi--plein .crm-kpi__ic { background: rgba(255, 255, 255, .22); color: #fff; }
:is(.bo-cadre, .bo-auth) .fiche-kpis .crm-kpi:hover { transform: none; box-shadow: none; }
:is(.bo-cadre, .bo-auth) .bo-filtres__plus > summary { cursor: pointer; font-size: 13px; font-weight: 600; color: var(--mq-nuit); }
/* Pastilles actives des filtres (classes utilitaires du BO) : même dégradé que les boutons principaux. */
:is(.bo-cadre, .bo-auth) .bg-bleu { background: var(--mq-degrade) !important; color: #fff !important; }
:is(.bo-cadre, .bo-auth) .text-bleu { color: var(--mq-prim); }

/* RB-21 : uniformisation finale (alertes, en-têtes de tableau, titres de bloc) */
.bo-cadre [class*="bg-rouge-fond"],
.bo-cadre [class*="bg-ambre-fond"],
.bo-cadre [class*="bg-vert-fond"] { border-radius: 10px !important; }
.bo-cadre table thead th,
.bo-cadre table > tr:first-child > th {
  font-family: "DM Sans", system-ui, sans-serif !important;
  font-size: 11.5px !important;
  font-weight: 700 !important;
  letter-spacing: .04em;
  text-transform: uppercase !important;
  color: #4d6571 !important;
}
/* 15/10/2026 : la règle ci-dessus grisait les en-têtes de la grille des frais (texte gris sur fond bleu et violet). */
.bo-cadre .gf__t thead th { color: #fff !important; }
.bo-cadre h2:not([class*="text-"]):not(.fp-titre),
.bo-cadre .adm-carte > h2,
.bo-cadre .carte > h2 { font-family: "DM Sans", system-ui, sans-serif; }

/* RB-23 : cartes repliables (attribut data-plie, voir base.html.twig) */
.bo-cadre .plie > summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 44px; }
.bo-cadre .plie > summary::-webkit-details-marker { display: none; }
.bo-cadre .plie > summary > :is(h2, h3) { margin: 0 !important; }
.bo-cadre .plie > summary::after { content: 'Voir'; flex: none; font-size: 12.5px; font-weight: 600; color: #7b4b94; }
.bo-cadre .plie[open] > summary::after { content: 'Replier'; }
.bo-cadre .plie[open] > summary { margin-bottom: 10px; }
.bo-cadre [data-plie-gap] > .plie > :not(summary) ~ :not(summary) { margin-top: 14px; }
@media (max-width: 700px) {
  .bo-cadre .bo-filtres__plus > summary,
  .bo-cadre .mguide > summary,
  .bo-cadre details.ld-defaut > summary,
  .bo-cadre .plie > summary { display: flex; align-items: center; min-height: 44px; }
  .bo-cadre input[list] { min-height: 44px; }
  .bo-cadre .lf-nom { min-height: 44px; display: inline-flex; align-items: center; }
}

/* RB-24 : liens de tableau soulignés (lisibles sans la couleur) ; cibles tactiles de 44 px sur mobile */
.bo-cadre a.text-bleu.no-underline { text-decoration: underline !important; text-underline-offset: 3px; }
@media (max-width: 700px) {
  .bo-cadre .bo-zone details:not(.plie) > summary { padding-block: 12px; }
  .bo-cadre .bo-barre__site { display: inline-flex; align-items: center; min-height: 44px; }
  .bo-cadre .dcarte__rb { min-height: 44px; }
  .bo-cadre .bo-zone :is(input[type=text], input[type=date], input[type=email], input[type=number], input[type=search], input[type=tel], input[type=password], select, textarea) { min-height: 44px; }
}

/* 15/10/2026 : gestes rapides sur « Mails à ranger » (Hors archive, Partenaire, Corbeille). */
.bo-cadre .mail-gestes { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.bo-cadre .mail-gestes form { display: inline-flex; gap: 6px; margin: 0; }
.bo-cadre .mail-geste { min-height: 32px; padding: 4px 10px; font-size: 12px; border: 1px solid #c9ced6; border-radius: 6px; background: #fff; color: #1f2933; cursor: pointer; }
.bo-cadre .mail-geste:hover { background: #f1f4f8; }

/* 16/10/2026 (Julien) : « Prochaine étape » du dossier et de la conformité suit le bouton principal de la maquette : dégradé bleu-violet, texte blanc, plus de bleu nuit quasi noir ni de bleu uni. */
:is(.bo-cadre, .bo-auth) .dcarte__suite:not(.dcarte__suite--ok),
:is(.bo-cadre, .bo-auth) .tc-suite:not(.tc-suite--ok) {
  border-color: transparent !important;
  background: var(--mq-degrade) !important;
  color: #fff !important;
  box-shadow: none !important;
  filter: none !important;
}
:is(.bo-cadre, .bo-auth) .dcarte__suite:not(.dcarte__suite--ok):hover,
:is(.bo-cadre, .bo-auth) .tc-suite:not(.tc-suite--ok):hover {
  background: var(--mq-degrade-fonce) !important;
  color: #fff !important;
}

/* ===== bo-mobile.css ===== */
/*
 * Lot 2a (11/10/2026) : corrections mobile du back-office (CDC §4 : contrôle sur ordinateur et mobile).
 * Relevé : docs/lot2/RELEVE-ECARTS.md. Rien ici ne change l'affichage au-dessus de 700 px.
 */
@media (max-width: 700px) {
  /* M1 : le sous-titre de l'écran passe à la ligne au lieu d'être coupé par « … ». */
  .bo-entete__contexte,
  .bo-entete .bo-entete__contexte {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    line-height: 1.35;
  }
  /* La phrase « À quoi sert cette page ? » se lit en entier. */
  .bo-comment-replie summary {
    white-space: normal;
    flex-wrap: wrap;
    align-items: flex-start;
    row-gap: 2px;
  }
  .bo-comment-replie summary span {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    flex: 1 1 100%;
  }

  /* M2 : la pastille de version ne recouvre plus le contenu : bandeau fin en bas, hauteur réservée. */
  .h-screen.overflow-hidden { height: calc(100vh - 18px); height: calc(100dvh - 18px); }
  .bo-lot {
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    border-radius: 0 !important;
    background: #f1eff7 !important;
    height: 18px;
    line-height: 18px;
    padding: 0 10px !important;
    text-align: center;
    font-size: 10.5px !important;
  }

  /* M3 : un tableau qui défile le montre (ombre sur le bord) et garde son premier champ visible. */
  .bo-conv,
  .bo-corps table:not(.pr-table):not(.gf__t) {
    background:
      linear-gradient(to right, var(--bo-blanc) 30%, rgba(255, 255, 255, 0)) left center / 28px 100% no-repeat local,
      linear-gradient(to left, var(--bo-blanc) 30%, rgba(255, 255, 255, 0)) right center / 28px 100% no-repeat local,
      radial-gradient(farthest-side at 0 50%, rgba(27, 73, 98, .22), rgba(27, 73, 98, 0)) left center / 12px 100% no-repeat scroll,
      radial-gradient(farthest-side at 100% 50%, rgba(27, 73, 98, .22), rgba(27, 73, 98, 0)) right center / 12px 100% no-repeat scroll;
  }
  .bo-conv__table tbody th[scope="row"] {
    position: sticky;
    left: 0;
    z-index: 1;
    background: var(--bo-blanc);
    box-shadow: 1px 0 0 var(--bo-trait-clair);
  }

  /* M4 : cibles tactiles d'au moins 40 px (WCAG 2.2, critère 2.5.8 : 24 px minimum ; 40 px pour le pouce). */
  button.adm-btn,
  a.adm-btn,
  .dcab-retablir { min-height: 40px; }
  .bo-corps a[href]:not(.adm-btn):not([class*="rounded"]):not(.no-underline) { padding-block: 6px; }
  a.rounded-full.border { min-height: 40px; display: inline-flex; align-items: center; }
}

/*
 * 18/10/2026 (lot 3, audit D-UX) : contour de focus clavier visible partout dans le BO. L'anneau des champs
 * (bleu à 12 % d'opacité) et le contour violet clair n'atteignaient pas le contraste de 3:1 demandé pour un
 * indicateur de focus. Contour plein bleu #1b4962 (environ 9:1 sur blanc, 7:1 sur le fond #eef3f7), seulement au
 * clavier (:focus-visible) : un clic à la souris ne l'affiche pas sur les boutons.
 */
:where(a, button, summary, select, textarea, input, [tabindex], [role="button"]):focus-visible {
  outline: 2px solid var(--sobre-bleu, var(--bo-bleu)) !important;
  outline-offset: 2px !important;
}
.adm-champ:focus-visible, .ec-in:focus-visible,
.ec-champ select:focus-visible, .ec-champ textarea:focus-visible,
.ec-deux select:focus-visible, .ec-ligne select:focus-visible, .ec-ligne textarea:focus-visible {
  outline: 2px solid var(--sobre-bleu, var(--bo-bleu)) !important;
  outline-offset: 1px !important;
  box-shadow: none !important;
}
/* Sur fond sombre (bandeaux, rail replié), le contour passe en blanc. */
.bo-rail :where(a, button, summary):focus-visible, .pr-bandeau :where(a, button):focus-visible {
  outline-color: var(--bo-blanc, #fff) !important;
}

/* 21/10/2026 : la recherche a déjà son cadre (anneau du conteneur) ; le contour de focus global ne s'y ajoute pas. */
.acc-recherche input:focus-visible, .bo-search input:focus-visible, .bo-search__input:focus-visible, input#bo-recherche:focus-visible {
  outline: none !important;
}
