/* ------------------------------------------------------------------ */
/* Tokens                                                              */
/* ------------------------------------------------------------------ */
:root {
  --paper: #eef1f4;
  --surface: #ffffff;
  --ink: #16202b;
  --ink-soft: #4b5a67;
  --ink-faint: #8695a3;
  --line: #d3dae1;
  --line-forte: #b7c2cd;

  --brand: #1d3a5f;
  --brand-strong: #142943;
  --brand-soft: #e7ecf2;

  --ok: #1e7a4c;
  --ok-bg: #e4f3ea;
  --warn: #9a5f00;
  --warn-bg: #fbf0dd;
  --danger: #b23a2e;
  --danger-bg: #f7e4e1;

  --rayon: 6px;
  /* Calibri (postes Windows / Office) ; Carlito est sa jumelle libre, aux
     memes proportions ; a defaut, la police systeme. */
  --sofi-bleu: #13304f;  /* logo SoFi (3.8.2), propre au produit */
  --sofi-rouge: #c4122f;
  --police: Calibri, Carlito, "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
  --police-mono: ui-monospace, SFMono-Regular, "Cascadia Code", Consolas, monospace;
}

/* ------------------------------------------------------------------ */
/* Reset minimal                                                       */
/* ------------------------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  font-family: var(--police);
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3 { margin: 0; font-weight: 600; }
p { margin: 0 0 0.6em; }
p:last-child { margin-bottom: 0; }
button, input, select, textarea { font: inherit; color: inherit; }
a { color: var(--brand); }
table { font-variant-numeric: tabular-nums; }

:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

/* ------------------------------------------------------------------ */
/* Structure generale                                                  */
/* ------------------------------------------------------------------ */
.app {
  display: flex;
  height: 100vh;
}

.nav {
  width: 232px;
  flex: none;
  background: var(--brand-strong);
  color: #fff;
  padding: 20px 14px;
  display: flex;
  flex-direction: column;
  gap: 22px;
  height: 100vh;
  overflow-y: auto;
}
.nav__marque {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 10px 8px 4px;
}
/* 3.8.2 : logo SoFi en texte (tuile « S » + « oFi », Calibri), comme sur la
   vitrine ; couleurs propres au produit, indépendantes de l'identité de l'agence. */
.logo-sofi { display: inline-flex; align-items: baseline; gap: 0.03em; font-family: Calibri, Carlito, "Segoe UI", sans-serif; font-weight: 700; font-size: 34px; line-height: 1; color: var(--sofi-bleu); letter-spacing: -0.01em; }
.logo-sofi__tuile { position: relative; display: inline-block; padding: 0.2em 0.28em 0.28em; border-radius: 0.24em; background: var(--sofi-bleu); color: #fff; line-height: 1; }
.logo-sofi__tuile::after { content: ""; position: absolute; right: 0.1em; bottom: 0.17em; width: 0.19em; height: 0.19em; border-radius: 50%; background: var(--sofi-rouge); }
.logo-sofi--inverse { color: #fff; }
/* Relecture 3.8.2 → 3.8.4 : « S » blanc très gras ; sur fond sombre, la tuile
   garde la couleur du fond et se détache par son seul liseré blanc. */
.logo-sofi__tuile { -webkit-text-stroke: 0.045em currentColor; paint-order: stroke fill; }
.logo-sofi--inverse .logo-sofi__tuile { background: transparent; color: #fff; box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, 0.55); }
.nav__marque .logo-sofi { font-size: 36px; }

/* ------------------------------------------------------------------ */
/* Accueil - choix du dossier                                          */
/* ------------------------------------------------------------------ */
.grille-dossiers {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 14px;
  margin-top: 6px;
}
.carte-dossier {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 20px 14px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  cursor: pointer;
  text-align: center;
}
.carte-dossier:hover { border-color: var(--brand); }
.carte-dossier--actif { border-color: var(--brand); background: var(--brand-soft); }
/* 3.19.0 : zone du logo a hauteur fixe ; sans logo depose, logo par defaut
   (pictogramme d'etablissement public) : toutes les cartes ont la meme
   taille. */
.carte-dossier__visuel { display: flex; align-items: center; justify-content: center; height: 48px; max-width: 100%; }
.carte-dossier__logo { max-height: 48px; max-width: 100%; object-fit: contain; }
.carte-dossier__logo[hidden], .carte-dossier__logo-defaut[hidden] { display: none; }
.carte-dossier__logo-defaut {
  display: flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border-radius: 10px;
  background: var(--brand-soft); color: var(--brand);
  border: 1px solid var(--line);
}
.carte-dossier__logo-defaut svg { width: 28px; height: 28px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.carte-dossier--actif .carte-dossier__logo-defaut { background: var(--surface); }
/* 3.19.0 : pastilles cote a cote en haut a droite de la carte : bordereaux
   a traiter (rouge), informations non lues (bleu canard), questions en
   attente (bleu, comme la pastille des questions du menu). */
.carte-dossier__pastilles { position: absolute; top: -9px; right: -8px; display: flex; gap: 4px; }
.pastille-carte {
  display: inline-flex; align-items: center; gap: 3px;
  height: 20px; padding: 0 7px 0 5px; border-radius: 10px;
  color: #fff; font-size: 12.5px; font-weight: 700; line-height: 20px;
  font-variant-numeric: tabular-nums; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}
.pastille-carte svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.pastille-carte--bordereaux { background: var(--danger); }
.pastille-carte--informations { background: #2f6fb0; } /* 3.68.0 : nuance du tableau de bord (charte B) */
.pastille-carte--questions { background: #1f6fb5; }

/* Pastille de notification (nombre de bordereaux a traiter), en haut a
   droite d'une carte dossier ou d'un bouton de menu. Rouge, ronde,
   toujours lisible. */
.pastille-notif {
  position: absolute;
  top: -8px;
  right: -8px;
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  border-radius: 10px;
  background: var(--danger);
  color: #fff;
  font-size: 12.5px;
  font-weight: 700;
  line-height: 20px;
  text-align: center;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  font-variant-numeric: tabular-nums;
}
.carte-dossier__nom { font-weight: 600; font-size: 13.5px; }
.carte-dossier__exercice { font-size: 12px; color: var(--ink-soft); }
.nav nav { display: flex; flex-direction: column; gap: 2px; }
.nav__lien {
  display: block;
  padding: 9px 10px;
  border-radius: var(--rayon);
  color: rgba(255, 255, 255, 0.78);
  text-decoration: none;
  font-size: 13.5px;
}
.nav__lien:hover { background: rgba(255, 255, 255, 0.08); color: #fff; }
.nav__lien--actif {
  background: rgba(255, 255, 255, 0.14);
  color: #fff;
  font-weight: 600;
}
.nav__section {
  padding: 14px 10px 4px;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: rgba(255, 255, 255, 0.45);
}
.nav__section--a-venir { display: flex; align-items: center; gap: 6px; }
.nav__badge-a-venir {
  font-size: 9px;
  font-weight: 600;
  text-transform: none;
  letter-spacing: normal;
  background: rgba(255, 255, 255, 0.12);
  color: rgba(255, 255, 255, 0.65);
  padding: 1px 6px;
  border-radius: 999px;
}

.nav__utilisateur {
  /* 3.19.0 : volet « Mon compte » en tete du menu, toujours deplie : nom
     (lien vers Mon compte), type de compte, deconnexion. */
  padding: 2px 10px 8px;
  font-size: 12px;
}
/* 3.19.0 : le nom ouvre « Mon compte » (plus de lien a part). */
.nav__utilisateur-nom {
  color: #fff;
  font-weight: 600;
  font-size: 13px;
  text-decoration: underline dotted rgba(255, 255, 255, 0.5);
  text-underline-offset: 3px;
}
.nav__utilisateur-nom:hover, .nav__utilisateur-nom:focus-visible { text-decoration: underline solid #fff; }
.nav__utilisateur-nom--actif { text-decoration: underline solid var(--sofi-rouge); text-decoration-thickness: 2px; }
.nav__utilisateur-role { margin-top: 3px; }
.nav__deconnexion {
  margin-top: 8px;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.25);
  color: rgba(255, 255, 255, 0.85);
  border-radius: var(--rayon);
  padding: 6px 10px;
  font-size: 12px;
  cursor: pointer;
  width: 100%;
}
.nav__deconnexion:hover { background: rgba(255, 255, 255, 0.1); }

.app__principal {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  height: 100vh;
  overflow: hidden;
}

.entete {
  padding: 22px 32px 14px;
  flex: none;
}
.entete__dossier h1 {
  font-size: 28px;
  font-weight: 800;
  color: var(--brand);
  line-height: 1.1;
}
.entete__exercice {
  font-size: 14px;
  color: var(--ink-soft);
  margin-top: 2px;
}
/* Selecteur d'exercice (1.26.0) */
.entete__exercice { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.entete__select-exercice {
  font: inherit;
  font-size: 14px;
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 3px 8px;
  margin-top: 2px;
  cursor: pointer;
}
.entete__consultation {
  font-size: 12.5px;
  color: #7a4b00;
  background: #fbf0dd;
  border: 1px solid #e3c68f;
  border-radius: 999px;
  padding: 2px 10px;
}

.contenu {
  padding: 18px 32px 48px;
  flex: 1;
  overflow-y: auto;
}

/* Ecran de connexion : pas de barre laterale, formulaire centre */
body.non-authentifie .nav,
body.non-authentifie .entete { display: none; }
body.non-authentifie .contenu {
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}
.ecran-connexion {
  display: flex;
  justify-content: center;
  width: 100%;
  padding: 20px;
}

.chargement, .texte-discret {
  color: var(--ink-soft);
  padding: 6px 2px;
}

.etat-vide {
  padding: 32px;
  text-align: center;
  color: var(--ink-soft);
}
.etat-vide--erreur { color: var(--danger); }
.etat-vide__detail { font-size: 12.5px; color: var(--ink-soft); margin-top: 6px; }

/* ------------------------------------------------------------------ */
/* Panneaux / cartes                                                    */
/* ------------------------------------------------------------------ */
.panneau {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  padding: 20px 22px;
  margin-bottom: 20px;
}
.panneau[hidden] { display: none; } /* 3.47.0 : cadres masqués tant qu'ils sont vides */
.panneau__titre { font-size: 16px; margin-bottom: 4px; }
.panneau__intro { color: var(--ink-soft); font-size: 14px; margin-bottom: 16px; max-width: 62ch; }
.panneau__entete-actions {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}

.grille-kpi {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 14px;
  margin-bottom: 20px;
}
.carte-kpi {
  background: var(--surface);
  border: 1px solid var(--line);
  border-left: 3px solid var(--line-forte);
  border-radius: var(--rayon);
  padding: 14px 16px;
}
.carte-kpi--ok { border-left-color: var(--ok); }
.carte-kpi--warn { border-left-color: var(--warn); }
.carte-kpi--danger { border-left-color: var(--danger); }
.carte-kpi__label { font-size: 12px; color: var(--ink-soft); margin-bottom: 6px; }
.carte-kpi__valeur { font-size: 21px; font-weight: 600; font-variant-numeric: tabular-nums; }
.carte-kpi__detail { font-size: 12px; color: var(--ink-soft); margin-top: 4px; }

/* ------------------------------------------------------------------ */
/* Avis / bandeaux                                                      */
/* ------------------------------------------------------------------ */
.avis {
  border-radius: var(--rayon);
  padding: 12px 14px;
  font-size: 14px;
  margin-top: 12px;
}
.avis--ok { background: var(--ok-bg); color: #145c38; }
.avis--danger { background: var(--danger-bg); color: #8a2c22; }
.avis + .avis { margin-top: 10px; }
.avis__titre { font-weight: 600; margin-bottom: 4px; }

/* ------------------------------------------------------------------ */
/* Badges                                                               */
/* ------------------------------------------------------------------ */
.badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 600;
  white-space: nowrap;
}
.badge--ok { background: var(--ok-bg); color: var(--ok); }
.badge--warn { background: var(--warn-bg); color: var(--warn); }
.badge--danger { background: var(--danger-bg); color: var(--danger); }

.etiquette {
  display: inline-block;
  font-size: 11px;
  color: var(--ink-soft);
  background: var(--brand-soft);
  border-radius: 4px;
  padding: 1px 6px;
  font-family: var(--police-mono);
}

/* ------------------------------------------------------------------ */
/* Boutons                                                              */
/* ------------------------------------------------------------------ */
.bouton {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--line-forte);
  background: var(--surface);
  color: var(--ink);
  padding: 8px 14px;
  border-radius: var(--rayon);
  cursor: pointer;
  font-size: 14px;
  font-weight: 500;
}
.bouton:hover { background: var(--paper); }
.bouton:disabled { opacity: 0.5; cursor: not-allowed; }
.bouton--principal {
  background: var(--brand);
  border-color: var(--brand);
  color: #fff;
}
.bouton--principal:hover { background: var(--brand-strong); }
.bouton--discret {
  border-color: transparent;
  background: transparent;
  padding: 6px 10px;
}
.bouton--discret:hover { background: var(--brand-soft); }
.bouton--danger { color: var(--danger); }
.bouton--danger:hover { background: var(--danger-bg); }

/* Bouton de dictee vocale en cours d'ecoute : fond rouge pale et
   pulsation discrete pour signaler clairement l'enregistrement actif. */
.bouton--dictee-active {
  background: var(--danger-bg);
  color: var(--danger);
  animation: pulsation-dictee 1.4s ease-in-out infinite;
}
@keyframes pulsation-dictee {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}
@media (prefers-reduced-motion: reduce) {
  .bouton--dictee-active { animation: none; }
}

/* ------------------------------------------------------------------ */
/* Formulaires                                                         */
/* ------------------------------------------------------------------ */
.champ {
  border: 1px solid var(--line-forte);
  border-radius: var(--rayon);
  padding: 8px 10px;
  background: var(--surface);
  font-size: 13px;
}
.barre-filtres {
  display: flex;
  gap: 10px;
  margin-bottom: 14px;
  flex-wrap: wrap;
}
.barre-filtres .champ { flex: 1; min-width: 180px; }
.champ--select { flex: none; min-width: 170px; }
.champ--inline {
  border: 1px solid transparent;
  background: transparent;
  padding: 3px 5px;
  font-size: 12.5px;
  width: 100%;
  border-radius: 4px;
}
.champ--inline:hover { border-color: var(--line); }
.champ--inline:focus { border-color: var(--brand); background: var(--surface); }
.champ--inline::placeholder { color: var(--ink-faint); }
.champ--etroit { max-width: 90px; }

.case-a-cocher {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13px;
  color: var(--ink-soft);
  cursor: pointer;
}

/* Zone de depot : grande, dessinee, explicite. Le fichier se depose par
   glisser ou par clic - les deux gestes menent au meme endroit. */
.zone-depot {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  text-align: center;
  border: 2px dashed var(--line-forte);
  border-radius: 10px;
  padding: 26px 20px;
  cursor: pointer;
  margin-bottom: 12px;
  background: var(--paper);
  transition: border-color 0.12s, background 0.12s;
}
.zone-depot:hover { border-color: var(--brand); background: var(--brand-soft); }
.zone-depot__illustration {
  width: 64px;
  height: 48px;
  fill: none;
  stroke: var(--brand);
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0.75;
  margin-bottom: 4px;
}
.zone-depot:hover .zone-depot__illustration { opacity: 1; }
.zone-depot__titre { font-size: 14px; font-weight: 600; color: var(--ink); }
.zone-depot__aide { font-size: 12.5px; color: var(--ink-soft); max-width: 46em; }
.zone-depot__texte { font-size: 12.5px; color: var(--brand); font-weight: 600; min-height: 1.2em; }
.zone-depot--large { padding: 34px 20px; }
.zone-depot--survol {
  border-color: var(--brand);
  background: var(--brand-soft);
}
.zone-depot--survol .zone-depot__illustration { opacity: 1; }

.form-import { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }

.form-pec { margin-top: 8px; padding-top: 14px; border-top: 1px solid var(--line); }
.form-pec__grille {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px 14px;
  margin-bottom: 16px;
}
.form-pec__grille label {
  display: flex;
  flex-direction: column;
  gap: 5px;
  font-size: 12.5px;
  color: var(--ink-soft);
}
.form-pec__grille input, .form-pec__grille select, .form-pec__grille textarea {
  border: 1px solid var(--line-forte);
  border-radius: var(--rayon);
  padding: 7px 9px;
  color: var(--ink);
  font-size: 13px;
  background: var(--surface);
}
.form-pec__col-large { grid-column: span 2; }
.form-pec__actions { display: flex; gap: 10px; }

/* ------------------------------------------------------------------ */
/* Tableaux                                                             */
/* ------------------------------------------------------------------ */
.tableau {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}
.tableau th, .tableau td {
  padding: 9px 10px;
  border-bottom: 1px solid var(--line);
  text-align: left;
  vertical-align: middle;
}
.tableau th {
  color: var(--ink-soft);
  font-weight: 600;
  font-size: 12px;
  text-transform: none;
}
.tableau tbody tr:hover { background: var(--paper); }
.tableau td.col-nombre { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.tableau td.col-actions { text-align: right; white-space: nowrap; }

/* Presentation inspiree du grand-livre Excel : quadrillage complet plutot
   que de simples filets horizontaux, en-tete et pied figes au defilement. */
.tableau-scroll {
  max-height: 68vh;
  overflow: auto;
  border: 1px solid var(--line-forte);
  border-radius: var(--rayon);
}
.tableau--grille th, .tableau--grille td { border: 1px solid var(--line); }
.tableau-scroll thead tr.ligne-entetes th {
  position: sticky;
  top: 0;
  background: var(--surface);
  z-index: 3;
}
.tableau-scroll thead tr.ligne-totaux td {
  position: sticky;
  background: var(--brand-soft);
  font-weight: 700;
  font-size: 14px;
  z-index: 2;
}
.tableau-scroll thead tr.ligne-totaux--selection td {
  color: var(--danger);
  background: var(--danger-bg);
}

/* En-tetes de colonnes : fond bleu fonce, texte blanc gras majuscule */
.tableau--excel { table-layout: fixed; }
.tableau--excel thead tr.ligne-entetes th {
  background: var(--brand);
  color: #fff;
  font-weight: 700;
  text-transform: uppercase;
  text-align: center;
  font-size: 11px;
  letter-spacing: 0.02em;
}

/* Filtres directement dans les en-tetes (comme Excel) : le libelle de
   colonne garde le style ci-dessus, le controle de filtre en dessous
   reste lisible sur le fond bleu fonce et se distingue visuellement du
   texte du titre. */
.tableau--excel thead tr.ligne-entetes th > div {
  margin-bottom: 3px;
}

/* Lignes resserrees, une seule ligne de haut */
.tableau--compact td { padding: 0 5px; vertical-align: middle; line-height: 1.25; }
.cellule-tronquee {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 0; /* force le respect de la largeur de colonne fixee par colgroup */
}

/* Mise en forme conditionnelle selon la nature d'operation - une seule de
   ces regles s'applique par ligne, la nature etant un champ unique. */
.ligne-routine td { background: #ededed; color: var(--ink); }
.ligne-odp td { font-weight: 700; font-style: italic; color: #6b3fa0; }
.ligne-orv td { font-weight: 700; font-style: italic; color: #6b3fa0; background: #f0e6fa; }
.ligne-cpta td { color: var(--ok); background: var(--ok-bg); }

/* Mise en forme conditionnelle selon le libelle - independante de la
   nature, donc placee apres pour l'emporter sur un fond eventuel ci-dessus
   (un signal comme "rejet" est plus urgent qu'une simple categorie). */
.ligne-paypal td { background: #e3f0fc; }
.ligne-rejet td { font-weight: 700; color: var(--danger); background: var(--danger-bg); }

/* 2.20.0 (registre ligne 66) : N° op coloré selon la nature (champ de
   saisie ou numéro de bordereau). Placé avant la règle d'héritage des
   champs : le N° op garde ses couleurs sur toute ligne colorée. */
.numop { font-weight: 700; color: #fff; border-radius: 3px; }
span.numop { display: inline-block; padding: 0 5px; }
.numop--mandat { background: #1f2f5c; }
.numop--titre { background: #1f6fb2; }  /* 3.0.1 : bleu (gris foncé en 2.25, noir avant) */
.numop--rdm { background: #6b3fa0; }
.numop--rdt { background: #d6338a; }

/* 2.23.0 (registre ligne 63) : couleurs réglées par dossier selon un mot
   clé du libellé (variables posées sur la ligne). */
.ligne-mot-cle td { background: var(--fond-mot-cle); color: var(--texte-mot-cle); }
.ligne-mot-cle--gras td { font-weight: 700; }
.ligne-mot-cle td input { color: inherit; font-weight: inherit; }
.apercu-couleur { display: inline-block; padding: 1px 8px; border-radius: 3px; border: 1px solid var(--line); }

/* 2.19.0 (registre ligne 62) : ligne pointée ou rapprochée = vert foncé
   sur fond vert clair, quelle que soit sa nature (placée après les règles
   de nature et de libellé pour l'emporter). */
.ligne-pointee td { color: #145c38; background: var(--ok-bg); }
.pastille-rapproche { display: inline-block; margin-left: 3px; padding: 0 3px; border-radius: 3px; background: #145c38; color: #fff; font-size: 11px; font-weight: 700; line-height: 15px; }

/* Les champs de saisie en ligne (input) ne prennent pas la couleur de
   texte de leur cellule par heritage CSS : un input a sa propre couleur
   par defaut. Sur une ligne coloree par sa nature (REJET, ODP...), le
   fond de la cellule changeait donc mais pas le texte tape dans les
   champs (date, libelle, montants...), qui restait sombre - illisible,
   voire percu comme absent, sur un fond rouge pale. On force donc
   l'heritage explicite. */
.ligne-routine td input,
.ligne-odp td input,
.ligne-orv td input,
.ligne-cpta td input,
.ligne-paypal td input,
.ligne-rejet td input,
.ligne-pointee td input {
  color: inherit;
  font-weight: inherit;
  font-style: inherit;
}

/* Colonne d'action compacte (rapprochement) */
.col-actions-compact { text-align: center; }
.bouton-icone {
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 13px;
  padding: 2px 4px;
  border-radius: 4px;
  line-height: 1;
}
.bouton-icone:hover { background: var(--brand-soft); }
.puce-rapproche { color: var(--ok); font-size: 14px; }

.pagination {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 14px;
  font-size: 12.5px;
  color: var(--ink-soft);
}
.pagination__bandeau {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  width: 100%;
  padding: 10px 16px;
  background: var(--brand-soft);
  border: 1px solid var(--line-forte);
  border-radius: var(--rayon);
}
.pagination__info { color: var(--ink); }

/* ------------------------------------------------------------------ */
/* Graphique mensuel (SVG maison, sans librairie)                      */
/* ------------------------------------------------------------------ */
.graphique-mensuel { width: 100%; height: 160px; display: block; }
.graphique-axe { stroke: var(--line-forte); stroke-width: 0.3; }
.barre--debit { fill: var(--danger); opacity: 0.75; }
.barre--credit { fill: var(--brand); opacity: 0.85; }
.graphique-mois {
  display: flex;
  font-size: 11px;
  color: var(--ink-soft);
  margin-top: 4px;
}
.graphique-mois span { text-align: center; text-transform: capitalize; }
.graphique-legende { display: flex; gap: 16px; margin-top: 10px; font-size: 12px; color: var(--ink-soft); }
.pastille { display: inline-block; width: 9px; height: 9px; border-radius: 2px; margin-right: 6px; }
.pastille--debit { background: var(--danger); opacity: 0.75; }
.pastille--credit { background: var(--brand); opacity: 0.85; }

/* Grands badges chiffres du tableau de bord */
.grille-badges {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
  margin-bottom: 18px;
}
.badge-chiffre {
  border-radius: 10px;
  padding: 18px 22px;
  border: 1px solid var(--line-forte);
  background: var(--surface);
}
.badge-chiffre__label { font-size: 13px; color: var(--ink-soft); margin-bottom: 8px; }
.badge-chiffre__nombre { font-size: 48px; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.badge-chiffre--neutre .badge-chiffre__nombre { color: var(--brand); }
.badge-chiffre--vert { background: var(--ok-bg); border-color: var(--ok); }
.badge-chiffre--vert .badge-chiffre__nombre { color: var(--ok); }
.badge-chiffre--orange { background: #fdf0e0; border-color: #b5650a; }
.badge-chiffre--orange .badge-chiffre__nombre { color: #b5650a; }
.badge-chiffre--rouge-clair { background: #ffffff; border-color: var(--danger); }
.badge-chiffre--rouge-clair .badge-chiffre__nombre { color: var(--danger); }
.badge-chiffre--rouge-plein { background: var(--danger); border-color: var(--danger); }
.badge-chiffre--rouge-plein .badge-chiffre__nombre { color: #fff; }
.badge-chiffre--rouge-plein .badge-chiffre__label { color: rgba(255,255,255,0.85); }
.grille-badges { overflow: visible; }
.tendance { font-size: 0.6em; vertical-align: middle; }
.tendance--hausse { color: var(--danger); }
.tendance--baisse { color: var(--ok); }
.badge-chiffre__detail { font-size: 11.5px; color: var(--ink-soft); margin-top: 6px; }
.badge-chiffre--rouge-plein .badge-chiffre__detail { color: rgba(255,255,255,0.75); }
.badge-chiffre__message { font-size: 12.5px; font-weight: 700; margin-top: 6px; }
.badge-chiffre--orange .badge-chiffre__message { color: #b5650a; }
.badge-chiffre--rouge-plein .badge-chiffre__message { color: #fff; }

/* 2.25.0 : badge visuel - pictogramme, libellé court, chiffre ; le
   détail apparaît au survol (ou au focus) dans une bulle. */
.badge-visuel {
  position: relative; display: flex; align-items: center; gap: 14px;
  padding: 14px 18px; min-height: 92px; text-decoration: none; color: inherit;
}
.badge-visuel__pastille {
  flex: 0 0 auto; width: 52px; height: 52px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: rgba(31, 47, 92, 0.08); color: var(--brand);
}
.badge-visuel__icone { width: 30px; height: 30px; }
.badge-chiffre--vert .badge-visuel__pastille { background: var(--ok); color: #fff; }
.badge-chiffre--orange .badge-visuel__pastille { background: #b5650a; color: #fff; }
.badge-chiffre--rouge-clair .badge-visuel__pastille { background: var(--danger); color: #fff; }
.badge-chiffre--rouge-plein .badge-visuel__pastille { background: #fff; color: var(--danger); }
.badge-visuel__corps { display: flex; flex-direction: column; min-width: 0; }
.badge-visuel .badge-chiffre__label { margin-bottom: 4px; font-weight: 700; text-transform: uppercase; font-size: 12px; letter-spacing: .02em; }
.badge-visuel .badge-chiffre__nombre { font-size: 38px; white-space: nowrap; }
.badge-visuel--solde .badge-chiffre__nombre { font-size: 28px; }
.badge-visuel .badge-chiffre__message { margin-top: 4px; }
.badge-visuel__survol {
  display: none; position: absolute; z-index: 30; left: 12px; right: 12px; top: calc(100% + 6px);
  padding: 10px 12px; border-radius: 8px; background: #1f2a3a; color: #fff;
  font-size: 12.5px; font-weight: 400; line-height: 1.45; box-shadow: 0 6px 18px rgba(0,0,0,.18);
}
.badge-visuel__survol::before {
  content: ""; position: absolute; top: -6px; left: 30px; border: 6px solid transparent;
  border-top: 0; border-bottom-color: #1f2a3a;
}
.badge-visuel__survol .texte-discret { color: rgba(255,255,255,.7); }
.badge-visuel__survol .autres-banques { margin-top: 6px; color: #fff; }
.badge-visuel:hover .badge-visuel__survol,
.badge-visuel:focus .badge-visuel__survol,
.badge-visuel:focus-within .badge-visuel__survol { display: block; }
.badge-visuel:focus { outline: 2px solid var(--brand); outline-offset: 2px; }

/* 3.0.1 : badge en dégradé, pictogramme ton sur ton (modèle de Régis :
   aplat dégradé, libellé en capitales, grand chiffre blanc, pictogramme
   trait blanc translucide à droite). Nos couleurs : vert, orange, rouge,
   bleu de la marque pour le neutre (suit l'identité du client). */
.badge-visuel {
  --badge-de: color-mix(in srgb, var(--brand) 78%, #ffffff);
  --badge-a: var(--brand-strong);
  border: 0; overflow: visible; color: #fff;
  background: linear-gradient(120deg, var(--badge-de), var(--badge-a));
  box-shadow: 0 2px 6px rgba(16, 24, 40, .18);
  padding: 14px 84px 14px 18px; min-height: 96px; align-items: center;
}
/* 3.68.0 : charte B — une tuile neutre prend la nuance du module de sa
   section (--section), jamais un bleu fixe ; vert, orange, rouge gardent
   le sens du statut. */
.tdb-section .badge-visuel.badge-chiffre--neutre {
  --badge-de: color-mix(in srgb, var(--section) 78%, #ffffff);
  --badge-a: color-mix(in srgb, var(--section) 82%, #000000);
}
.badge-visuel.badge-chiffre--vert { --badge-de: #2f9e63; --badge-a: #1b6b42; }
.badge-visuel.badge-chiffre--orange { --badge-de: #ef9a2b; --badge-a: #c26a08; }
.badge-visuel.badge-chiffre--rouge-clair { --badge-de: #df5a4b; --badge-a: #b23a2e; }
.badge-visuel.badge-chiffre--rouge-plein { --badge-de: #b23a2e; --badge-a: #7e2219; box-shadow: 0 0 0 2px #7e2219, 0 3px 10px rgba(126, 34, 25, .35); }
.badge-visuel .badge-visuel__pastille,
.badge-visuel.badge-chiffre--vert .badge-visuel__pastille,
.badge-visuel.badge-chiffre--orange .badge-visuel__pastille,
.badge-visuel.badge-chiffre--rouge-clair .badge-visuel__pastille,
.badge-visuel.badge-chiffre--rouge-plein .badge-visuel__pastille {
  position: absolute; right: 16px; top: 50%; transform: translateY(-50%);
  width: 60px; height: 60px; border-radius: 0; background: none; color: rgba(255, 255, 255, .32);
}
.badge-visuel .badge-visuel__icone { width: 58px; height: 58px; stroke-width: 1.3; }
.badge-visuel .badge-chiffre__label,
.badge-visuel.badge-chiffre--rouge-plein .badge-chiffre__label { color: rgba(255, 255, 255, .92); font-size: 12.5px; }
.badge-visuel .badge-chiffre__nombre,
.badge-visuel.badge-chiffre--neutre .badge-chiffre__nombre,
.badge-visuel.badge-chiffre--vert .badge-chiffre__nombre,
.badge-visuel.badge-chiffre--orange .badge-chiffre__nombre,
.badge-visuel.badge-chiffre--rouge-clair .badge-chiffre__nombre,
.badge-visuel.badge-chiffre--rouge-plein .badge-chiffre__nombre { color: #fff; font-size: 34px; }
.badge-visuel--solde .badge-chiffre__nombre { font-size: 26px !important; }
.badge-visuel .badge-chiffre__message,
.badge-visuel.badge-chiffre--orange .badge-chiffre__message { color: #fff; }
.badge-visuel .tendance--hausse, .badge-visuel .tendance--baisse { color: #fff; }
.badge-visuel.badge-chiffre--lien:hover { filter: brightness(1.06); }
.badge-visuel:focus { outline-color: var(--brand-strong); }

.courbe--attente { stroke: var(--danger); }
.courbe--pec { stroke: var(--brand); }

/* Histogramme mensuel en HTML/CSS (plutot qu'en SVG a l'echelle non
   uniforme, qui deformerait le texte des etiquettes de valeur). */
.histogramme {
  display: flex;
  align-items: flex-end;
  height: 170px;
  gap: 2px;
  border-bottom: 1px solid var(--line-forte);
  padding-bottom: 2px;
}
.histogramme__colonne {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  height: 100%;
  min-width: 0;
}
.histogramme__etiquette {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--ink);
  margin-bottom: 2px;
  font-variant-numeric: tabular-nums;
}
.histogramme__etiquette--alerte { color: var(--danger); }
.histogramme__etiquette--vert { color: #1E7A4C; }
.histogramme__etiquette--orange { color: #A85D10; }
.histogramme__etiquette--rouge { color: #B23A2E; }
.histogramme__etiquette--defaut { color: var(--brand-strong); }
.histogramme__etiquette--accent { color: #A85D10; }
.histogramme__barre {
  width: 60%;
  max-width: 26px;
  background: var(--brand-strong); /* 3.4.2 : bleu du menu */
  border-radius: 4px 4px 0 0;
}
.histogramme__barre--vert { background: #8FDBB2; }
.histogramme__barre--orange { background: #E8912D; } /* 3.4.2 : orange plus foncé */
.histogramme__barre--rouge { background: #F0A0A0; }
.histogramme__barre--defaut { background: var(--brand-strong); }
.histogramme__barre--accent { background: #E8912D; }
.histogramme__mois {
  font-size: 10.5px;
  color: var(--ink-soft);
  text-transform: capitalize;
  margin-top: 4px;
}

/* ------------------------------------------------------------------ */
/* Ecran de rapprochement                                               */
/* ------------------------------------------------------------------ */
.rapprochement {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  align-items: start;
}
.rapprochement__colonne { margin-bottom: 0; }

.liste-selection {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 10px;
  max-height: 480px;
  overflow-y: auto;
}
.ligne-selection {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  background: var(--surface);
  text-align: left;
  cursor: pointer;
  font-size: 13px;
  width: 100%;
}
button.ligne-selection { font: inherit; }
.ligne-selection:hover { border-color: var(--brand); }
.ligne-selection--actif { border-color: var(--brand); background: var(--brand-soft); }
.ligne-selection__date { color: var(--ink-soft); font-variant-numeric: tabular-nums; flex: none; width: 66px; }
.ligne-selection__libelle { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ligne-selection__montant { flex: none; font-variant-numeric: tabular-nums; font-weight: 600; }
.ligne-selection--coche { cursor: default; }
.ligne-selection--coche input[type=checkbox] { flex: none; }

.mouvement-actif {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  padding: 10px 12px;
  background: var(--paper);
  border-radius: var(--rayon);
  margin-top: 10px;
  margin-bottom: 4px;
  font-size: 13px;
  flex-wrap: wrap;
}
.mouvement-actif__montant { font-weight: 600; font-variant-numeric: tabular-nums; }

.barre-total {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
  font-size: 13px;
}
.barre-total strong { font-variant-numeric: tabular-nums; }

/* ------------------------------------------------------------------ */
/* Toasts                                                               */
/* ------------------------------------------------------------------ */
.toasts {
  position: fixed;
  right: 20px;
  bottom: 20px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 100;
}
.toast {
  background: var(--ink);
  color: #fff;
  padding: 10px 16px;
  border-radius: var(--rayon);
  font-size: 13px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 0.2s ease, transform 0.2s ease;
}
.toast--visible { opacity: 1; transform: translateY(0); }
.toast--succes { background: var(--ok); }
.toast--erreur { background: var(--danger); }
.toast--alerte { background: var(--warn); } /* 3.11.1 : avertissement non bloquant */

/* ------------------------------------------------------------------ */
/* Reactif                                                              */
/* ------------------------------------------------------------------ */
/* Tableau des mouvements : quand la fenetre se reduit, le libelle de
   l'operation est plus utile que le commentaire au quotidien - on efface
   la colonne commentaire (colonne flexible du colgroup) plutot que de
   laisser les autres s'ecraser. */
@media (max-width: 1300px) {
  /* Colonne Commentaire masquee sur ecran etroit. Reperee par sa CLASSE,
     jamais par sa position : une regle en nth-child(4) masquait la 4e
     cellule de l'en-tete et du corps, mais pas la bonne cellule des lignes
     de totaux (construites avec des colspan), qui se retrouvaient decalees
     d'une colonne vers la droite. Chaque ligne - totaux compris - porte
     desormais sa propre cellule .col-commentaire, masquee avec les autres.
     verif_masquage_colonnes.py interdit le retour d'un masquage par position. */
  .tableau--mouvements .col-commentaire {
    display: none;
  }
}

@media (max-width: 860px) {
  .rapprochement { grid-template-columns: 1fr; }
}

@media (max-width: 720px) {
  .form-pec__col-large { grid-column: span 1; }
}

/* ------------------------------------------------------------------ */
/* Dossier de revision (operations annuelles)                          */
/* ------------------------------------------------------------------ */
.grille-balances {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 16px;
  margin-top: 12px;
}
.carte-balance {
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  padding: 14px;
  background: var(--surface);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.carte-balance__entete { display: flex; align-items: center; gap: 12px; }
.carte-balance__position {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  height: 32px;
  padding: 0 8px;
  border-radius: var(--rayon);
  background: var(--brand-soft);
  color: var(--brand);
  font-weight: 700;
}
.carte-balance__titre { font-weight: 600; }
.carte-balance__etat { display: flex; flex-direction: column; gap: 8px; }
.carte-balance__etat .bouton { align-self: flex-start; }

.ligne-cliquable { cursor: pointer; }
.ligne-revisee td { background: var(--ok-bg); }
.ligne-rubrique td {
  background: var(--brand-soft);
  font-weight: 600;
  color: var(--brand);
}
.ecart-notable { color: var(--danger); font-weight: 600; }

.sous-titre {
  margin: 18px 0 8px;
  font-size: 14px;
  font-weight: 700;
  color: var(--brand);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.lien-retour { text-decoration: none; font-weight: 500; }
.lien-retour:hover { text-decoration: underline; }
.entete-outils { display: flex; align-items: center; gap: 10px; }

.grille-programmes {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
  margin-top: 12px;
}
.carte-programme {
  display: grid;
  grid-template-columns: 40px 1fr;
  grid-template-areas: "code libelle" "code jauge";
  gap: 4px 12px;
  align-items: center;
  padding: 12px 14px;
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  background: var(--surface);
  color: inherit;
  text-decoration: none;
}
.carte-programme:hover { border-color: var(--brand); }
.carte-programme__code {
  grid-area: code;
  font-size: 20px;
  font-weight: 800;
  color: var(--brand);
  text-align: center;
}
.carte-programme__libelle { grid-area: libelle; font-weight: 600; }
.carte-programme .badge-avancement { grid-area: jauge; justify-self: start; }

.bloc-synthese { display: block; margin-bottom: 14px; }
.bloc-synthese__titre {
  display: block;
  margin-bottom: 4px;
  font-weight: 600;
  color: var(--brand);
}
.bloc-synthese textarea { width: 100%; resize: vertical; }

/* ------------------------------------------------------------------ */
/* Presentation des tableaux du dossier de revision                    */
/* ------------------------------------------------------------------ */

/* En-tetes : gras sur fond gris moyen. Sur une feuille maitresse de cent
   lignes, l'en-tete reste colle en haut au defilement - il doit donc se
   distinguer nettement du corps du tableau, sinon la premiere ligne de
   donnees se confond avec lui. */
.tableau--grille thead tr.ligne-entetes th,
.tableau-scroll thead tr.ligne-entetes th {
  background: #c8d0d8;
  color: var(--brand-strong);
  font-weight: 700;
  font-size: 14px;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  /* Une seule ligne : un en-tete qui se renvoie a la ligne decale toutes
     les colonnes voisines et fait perdre le rapport entre un intitule et
     sa colonne. Un intitule trop long est tronque, jamais replie. */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  border-color: var(--line-forte);
}

/* Libelle : une seule ligne, coupee par des points de suspension plutot
   que renvoyee a la ligne. Un tableau dont les lignes n'ont pas toutes la
   meme hauteur se parcourt beaucoup moins vite du regard. Le libelle
   complet reste accessible en infobulle. */
.tableau .col-libelle {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  /* width + max-width : 0 est la recette qui force une colonne de tableau
     a absorber la largeur restante tout en autorisant la troncature. Sans
     le max-width, la colonne se contenterait de sa largeur naturelle et
     le texte deborderait au lieu d'etre coupe. */
  width: 100%;
  max-width: 0;
}

/* Colonnes de texte long (questions de controle interne, diligences) :
   elargies elles aussi, mais SANS troncature - ce sont des consignes a
   lire, pas des libelles a identifier d'un coup d'oeil. */
.tableau .col-texte {
  width: 100%;
  min-width: 260px;
}

/* Exercice revise : la colonne que l'on lit en premier. Fond teinte et
   filets lateraux marques pour la retrouver d'un coup d'oeil au milieu
   des colonnes de comparaison. */
.tableau .col-exercice-n {
  background: #eaf0f7;
  font-weight: 600;
  border-left: 2px solid var(--brand);
  border-right: 2px solid var(--brand);
}
.tableau--grille thead tr.ligne-entetes th.col-exercice-n {
  background: var(--brand);
  color: #ffffff;
}
.tableau tbody tr:hover .col-exercice-n { background: #dfe8f3; }
.ligne-revisee .col-exercice-n { background: #dcecdf; }

/* Badge d'avancement */
.badge-avancement {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 3px 9px;
  border-radius: 999px;
  border: 1px solid transparent;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.badge-avancement__pct { font-size: 13px; font-weight: 700; }
.badge-avancement__detail { font-size: 11px; opacity: 0.8; font-family: var(--police-mono); }
.badge-avancement--vide {
  background: var(--paper);
  border-color: var(--line-forte);
  color: var(--ink-soft);
}
.badge-avancement--encours {
  background: var(--warn-bg);
  border-color: var(--warn);
  color: var(--warn);
}
.badge-avancement--termine {
  background: var(--ok-bg);
  border-color: var(--ok);
  color: var(--ok);
}

/* Saisie de l'exercice au depot d'une balance */
.champ-annee {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--ink-soft);
}
.champ-annee .champ { width: 82px; }

/* ------------------------------------------------------------------ */
/* Lisibilite des colonnes chiffrees                                   */
/* ------------------------------------------------------------------ */

/* Chiffres a chasse fixe : sans cela, un « 1 » etroit et un « 8 » large
   decalent les colonnes d'une ligne a l'autre et les rangs (unites,
   dizaines, centaines) ne se superposent plus verticalement. C'est ce qui
   rend une colonne de montants penible a comparer du regard.
   Calibri possede bien un jeu de chiffres tabulaires ; la police mono en
   dernier recours garantit le meme resultat partout. */
.tableau td.col-nombre,
.tableau th.col-nombre {
  font-variant-numeric: tabular-nums lining;
  font-feature-settings: "tnum" 1, "lnum" 1;
  letter-spacing: 0.01em;
}

/* Numeros de compte : chasse fixe des chiffres, pour que les rangs se
   superposent d'une ligne a l'autre malgre les longueurs variables
   (531, 5151, 515100). */
code, .etiquette, .badge-avancement__detail {
  font-variant-numeric: tabular-nums lining;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

/* En-tetes de colonnes centres */
.tableau thead tr.ligne-entetes th { text-align: center; }
.tableau td.col-centre, .tableau th.col-centre { text-align: center; }

/* Lien-icone : dans une colonne etroite, une puce cliquable remplace un
   libelle repete a chaque ligne. Le libelle reste en infobulle et en
   aria-label pour la lecture d'ecran. */
.lien-icone {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--brand-soft);
  color: var(--brand);
  font-size: 13px;
  line-height: 1;
  text-decoration: none;
}
.lien-icone:hover { background: var(--brand); color: #ffffff; }

/* Montant cliquable menant au grand livre du compte */
.lien-montant {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px dotted var(--line-forte);
}
.lien-montant:hover { color: var(--brand); border-bottom-color: var(--brand); }

/* Discordance entre la balance et le grand livre sur un compte */
.cellule-discordante { color: var(--danger); }
.marque-ecart {
  margin-left: 4px;
  font-weight: 700;
  color: var(--danger);
}

/* ------------------------------------------------------------------ */
/* Grand livre : lecture compte par compte                             */
/* ------------------------------------------------------------------ */

/* Un grand livre se lit par bloc de compte. Sans separation, la derniere
   ecriture d'un compte et la premiere du suivant se confondent - et un
   solde se lit sur le mauvais bloc. */
.tableau tbody tr.debut-de-compte td { border-top: 2px solid var(--brand); }
.tableau tbody tr.debut-de-compte:first-child td { border-top-width: 1px; }

/* Pieces justificatives attachees a une ecriture */
.cellule-pieces { white-space: nowrap; }
.piece {
  display: inline-block;
  padding: 0 4px;
  margin-right: 3px;
  border-radius: 3px;
  background: var(--brand-soft);
  color: var(--brand);
  font-size: 10px;
  font-weight: 700;
  line-height: 15px;
  text-decoration: none;
  vertical-align: middle;
}
.piece:hover { background: var(--brand); color: #ffffff; }
/* 2.12.0 : ligne de bordereau liee a l'ecriture (M 12, T 7...) */
.lien-bordereau {
  display: inline-block; padding: 0 4px; margin-right: 3px; border-radius: 3px;
  font-size: 10.5px; font-weight: 700; line-height: 15px; text-decoration: none; vertical-align: middle;
  background: #e3f1e7; color: #1d6b3a; border: 1px solid #b9dcc4;
}
a.lien-bordereau:hover { background: #1d6b3a; color: #fff; }
.lien-bordereau--propose, .lien-bordereau--candidat { background: #fff6e0; color: #8a5a00; border: 1px dashed #d9a63c; }
a.lien-bordereau--propose:hover { background: #8a5a00; color: #fff; }
.liens-pieces__barre { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin-bottom: 8px; }
.liens-pieces__propositions { margin-bottom: 12px; max-height: 360px; overflow: auto; }
.ligne-lien-manuel > td { background: #f7f9fb; }
.lien-manuel { display: flex; flex-direction: column; gap: 6px; padding: 6px 2px; white-space: normal;
  position: sticky; left: 0; width: min(1000px, 80vw); }
.lien-manuel__liste { max-height: 260px; overflow: auto; }
.bouton-piece {
  width: 17px;
  height: 17px;
  line-height: 15px;
  padding: 0;
  font-size: 13px;
  vertical-align: middle;
}

/* Numero de version, en pied de barre de navigation */
.nav__version {
  padding: 4px 14px 10px;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--ink-faint);
  letter-spacing: 0.03em;
}

/* Ligne selectionnee (case a cocher cochee) dans les tableaux avec
   selection multiple - placee en toute fin de feuille de style pour
   l'emporter sur les couleurs conditionnelles de nature (REJET, ODP...),
   la selection etant un etat transitoire plus pertinent a l'instant T.
   Gras + leger changement de couleur de police plutot qu'un fond ou une
   bordure, pour rester discret ; cible aussi les champs de saisie en
   ligne, qui ne recuperent pas toujours la couleur du texte par simple
   heritage CSS. */
tr.ligne-selectionnee td,
tr.ligne-selectionnee td input {
  font-weight: 700;
  color: var(--brand);
}

/* ----------------------------------------------------------------------
   Demandes de prise en charge
   Trois sorts possibles pour une ligne, trois signaux distincts : une ligne
   rejetee reprend le rouge gras sur fond rose des lignes REJET du suivi des
   prises en charge (meme idee, meme couleur) ; une ligne en suspens passe en
   orange, parce qu'elle n'est pas refusee, seulement remise a plus tard ;
   une ligne validee reste neutre, c'est le cas courant.
   ---------------------------------------------------------------------- */
.badge--neutre { background: var(--paper); color: var(--ink-soft); }

/* Orange clair : ligne en suspens (instruction d'un bordereau, suivi des
   prises en charge) ou deja transmise au PES. Un fond seul, sans graisse :
   la ligne reste a reprendre, elle n'est pas en faute. */
.tableau tbody tr.ligne-suspens td,
.tableau tbody tr.ligne-orange-clair td { background: #fdf0e1; }
.tableau tbody tr.ligne-suspens:hover td,
.tableau tbody tr.ligne-orange-clair:hover td { background: #fbe6cc; }
.ligne-orange-clair td input { color: inherit; }

/* Jaune : ligne SOUS RESERVE (1.23.0) - les controles ont releve une
   anomalie et l'agent comptable n'a pas encore decide. Distincte de
   l'orange du suspens, qui est une decision. */
.tableau tbody tr.ligne-reserve td { background: #fff7d1; }
.tableau tbody tr.ligne-reserve:hover td { background: #fdefb0; }
.badge--reserve { background: #fff0b3; color: #7a5a00; border: 1px solid #e6c44d; }
.avis--reserve { background: #fff7d1; color: #6b4e00; border: 1px solid #e6c44d; }

/* Vert : ligne validee dont aucun controle n'a rien trouve a redire. */
.tableau tbody tr.ligne-controles-ok td { background: var(--ok-bg); }
.tableau tbody tr.ligne-controles-ok:hover td { background: #d5ecdd; }

/* Le controle de montant colore la cellule du montant TTC lui-meme. */
.tableau td.montant-ko { color: var(--danger); font-weight: 700; }
.tableau td.montant-alerte { color: var(--warn); font-weight: 700; }

.tableau td.col-centre { text-align: center; }

/* Tableaux « une ligne par enregistrement » : rien ne se replie, le texte
   trop long est coupe par des points de suspension et reste lisible au
   survol (attribut title). */
.tableau--une-ligne td {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  height: 24px;
  padding-top: 1px;
  padding-bottom: 1px;
}
.tableau-scroll--court { max-height: 42vh; }

.bouton-icone { color: var(--brand); display: inline-flex; align-items: center; vertical-align: middle; }
.bouton-icone--danger { color: var(--danger); }
.bouton-icone--danger:hover { background: var(--danger-bg); }

/* Decision sur une ligne : V valider, S suspendre, R rejeter. Le bouton de
   la decision en vigueur est plein, les autres au trait. */
.bouton-decision {
  width: 22px; height: 20px; margin: 0 1px; padding: 0;
  border: 1px solid var(--line-forte); border-radius: 3px;
  background: var(--surface); color: var(--ink-soft);
  font-size: 11px; font-weight: 700; cursor: pointer; line-height: 1;
}
.bouton-decision:disabled { cursor: default; opacity: 0.55; }
.bouton-decision--validee.est-actif { background: var(--ok); border-color: var(--ok); color: #fff; }
.bouton-decision--suspens.est-actif { background: var(--warn); border-color: var(--warn); color: #fff; }
.bouton-decision--rejet.est-actif { background: var(--danger); border-color: var(--danger); color: #fff; }
.champ-commentaire-decision { width: 100%; box-sizing: border-box; }

/* Poignee de largeur de colonne, sur le bord droit de chaque en-tete. */
.tableau thead th { position: relative; }
.poignee-colonne {
  position: absolute; top: 0; right: 0; bottom: 0; width: 6px;
  cursor: col-resize; user-select: none; z-index: 4;
}
.poignee-colonne:hover { background: rgba(255, 255, 255, 0.35); border-right: 2px solid var(--brand-soft); }
body.redimension-en-cours, body.redimension-en-cours * { cursor: col-resize !important; user-select: none !important; }

/* L'IBAN n'est jamais lu de bout en bout : il sert a comparer, pas a lire.
   Un corps plus petit lui laisse sa colonne sans ecraser le reste. */
.tableau td.cellule-iban { font-size: 11.5px; color: var(--ink-soft); white-space: nowrap; }

/* ----------------------------------------------------------------------
   En-tetes de colonnes : meme taille que les lignes du tableau, en gras
   et en majuscules. Place en fin de feuille, avec les memes selecteurs que
   les regles precedentes, pour l'emporter sur toutes : un en-tete plus gros
   que les donnees prenait de la hauteur et de la largeur pour rien, et
   tronquait les intitules des colonnes etroites.
   ---------------------------------------------------------------------- */
.tableau thead th,
.tableau--grille thead tr.ligne-entetes th,
.tableau-scroll thead tr.ligne-entetes th,
.tableau--excel thead tr.ligne-entetes th {
  font-size: inherit;
  font-weight: 700;
  text-transform: uppercase;
}

/* Tableau de bord : un graphique et, a sa droite, le badge qui le resume. */
.bloc-avec-badge { display: flex; gap: 18px; align-items: stretch; }
.bloc-avec-badge__principal { flex: 1; min-width: 0; }
.badge-taux-erreur { flex: 0 0 250px; align-self: center; }
.badge-taux-erreur .badge-chiffre__nombre { font-size: 34px; white-space: nowrap; }
@media (max-width: 900px) {
  .bloc-avec-badge { flex-direction: column; }
  .badge-taux-erreur { align-self: stretch; }
}

/* ----------------------------------------------------------------------
   Barre de navigation : quatre volets separes, une icone par ecran et un
   libelle court (l'intitule complet reste en infobulle). Les icones sont
   dessinees au trait, dans la couleur du lien : elles servent de reperes
   visuels, pas de decoration.
   ---------------------------------------------------------------------- */
.nav { gap: 6px; padding: 16px 12px; }
.nav__groupe { padding-top: 8px; }
.nav__groupe + .nav__groupe { border-top: 1px solid rgba(255, 255, 255, 0.12); margin-top: 6px; }
.nav__groupe[hidden] { display: none; }
.nav__section { padding: 6px 10px 4px; }

.nav__lien {
  position: relative;
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 7px 10px;
  border-left: 3px solid transparent;
  line-height: 1.2;
}
/* Pastille dans un lien de menu : a droite du libelle, dans le flux (pas
   en coin absolu comme sur une carte dossier). */
.pastille-notif--menu {
  position: static;
  margin-left: auto;
  box-shadow: none;
}
.nav__lien svg {
  width: 17px;
  height: 17px;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0.7;
}
.nav__lien:hover svg { opacity: 0.9; }
.nav__lien--actif { border-left-color: var(--accent, #7fb2e5); }
.nav__lien--actif svg { opacity: 1; }
.nav__version { margin-top: auto; }

/* 3.15.0 : volets repliables. L'en-tete d'un volet est un bouton (clavier,
   lecteur d'ecran : aria-expanded) au style des anciens intitules de
   section ; le chevron tourne quand le volet est plie. Le tableau de bord et
   les informations (nav__fixe) restent hors volet. */
.nav__fixe { padding-top: 0; }
.nav__entete {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 7px 10px 5px;
  border: 0;
  border-radius: var(--rayon);
  background: none;
  color: rgba(255, 255, 255, 0.55);
  font: inherit;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  text-align: left;
  cursor: pointer;
}
.nav__entete:hover { color: #fff; background: rgba(255, 255, 255, 0.06); }
.nav__entete:focus-visible { outline: 2px solid var(--accent, #7fb2e5); outline-offset: -2px; }
.nav__entete-titre { flex: 1; }
.nav__chevron {
  width: 15px;
  height: 15px;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform 0.15s ease;
}
.nav__groupe--replie .nav__chevron { transform: rotate(-90deg); }
.nav__groupe--replie { padding-bottom: 2px; }
.nav__volet[hidden] { display: none; }
.nav__volet { padding-bottom: 2px; }
/* Point rouge : un volet plie cache une demande ou une question en attente. */
.nav__alerte-volet {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--danger);
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.15);
}
.nav__alerte-volet[hidden] { display: none; }
.nav__compte .nav__utilisateur { margin: 0 4px 2px; }
/* Intitule du volet « Mon compte » : meme style qu'un en-tete de volet, sans
   chevron ni clic (toujours deplie). */
.nav__entete--fixe { cursor: default; }
.nav__entete--fixe:hover { color: rgba(255, 255, 255, 0.55); background: none; }
@media (prefers-reduced-motion: reduce) { .nav__chevron { transition: none; } }

/* ----------------------------------------------------------------------
   Depot d'un lot de bordereaux : une barre par fichier. Pendant l'envoi
   elle suit l'avancement reel ; une fois le fichier arrive, le serveur lit
   le bordereau et passe les controles - duree inconnue, d'ou une animation
   indeterminee qui balaie la barre plutot qu'une jauge figee a 100 %.
   ---------------------------------------------------------------------- */
.depot-progression {
  display: grid;
  grid-template-columns: minmax(140px, 1fr) minmax(120px, 2fr) minmax(150px, 1fr);
  align-items: center;
  gap: 10px;
  padding: 5px 2px;
  font-size: 12.5px;
}
.depot-progression__nom { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.depot-progression__piste {
  height: 8px;
  border-radius: 999px;
  background: var(--line);
  overflow: hidden;
}
.depot-progression__jauge {
  height: 100%;
  width: 0;
  background: var(--brand);
  transition: width 0.15s linear;
}
.depot-progression__etat { color: var(--ink-soft); }
.depot-progression--analyse .depot-progression__jauge {
  width: 40% !important;
  animation: depot-balayage 1.1s ease-in-out infinite;
}
.depot-progression--ok .depot-progression__jauge { background: var(--ok); }
.depot-progression--ok .depot-progression__etat { color: var(--ok); }
.depot-progression--erreur .depot-progression__jauge { background: var(--danger); }
.depot-progression--erreur .depot-progression__etat { color: var(--danger); font-weight: 600; }
@keyframes depot-balayage {
  0% { margin-left: 0; }
  50% { margin-left: 60%; }
  100% { margin-left: 0; }
}

.sous-titre { font-size: 13.5px; font-weight: 700; color: var(--brand-strong); margin: 14px 0 6px; }
.lot-actions { display: flex; gap: 10px; align-items: center; margin-top: 10px; }
.champ-libelle-lot { text-transform: uppercase; width: 100%; }

/* Suite d'un meme envoi dans « Mes demandes » : les lignes d'un lot se
   suivent sans repeter sa date ni son numero, et un filet plus discret les
   relie - on voit d'un coup d'oeil ou commence l'envoi suivant. */
.tableau tbody tr.ligne-suite-lot td { border-top-color: #eef2f6; }
.tableau tbody tr.ligne-suite-lot td:first-child,
.tableau tbody tr.ligne-suite-lot td:nth-child(2) { background: transparent; }

/* Barre d'export d'un tableau (XLSX / PDF), en tete de panneau, discrete. */
.barre-export {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  margin-bottom: 8px;
  font-size: 12.5px;
}
.barre-export .bouton { padding: 4px 10px; }

/* ---- Gestion des utilisateurs : dossiers confies, lien d'activation ---- */
.choix-dossiers {
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  padding: 10px 14px 12px;
  margin: 12px 0 4px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px 22px;
}
.choix-dossiers legend { padding: 0 6px; font-weight: 600; color: var(--ink-soft); font-size: 13px; }
.choix-dossiers select { min-width: 260px; }
.panneau--encart { background: var(--brand-soft); border: 1px solid var(--line); margin-bottom: 12px; }
.message-ok {
  background: var(--ok-bg); color: var(--ok);
  border-radius: var(--rayon); padding: 10px 14px; margin: 10px 0;
}
.message-alerte {
  background: var(--warn-bg); color: var(--ink);
  border-left: 4px solid var(--warn); border-radius: var(--rayon);
  padding: 10px 14px; margin: 10px 0;
}
.message-alerte p { margin: 4px 0; }
.lien-a-copier { display: flex; gap: 8px; margin-top: 8px; }
.lien-a-copier input { flex: 1; font-family: var(--police-mono); font-size: 12.5px; }

/* =====================================================================
   Porte d'entree : connexion et activation du compte
   ---------------------------------------------------------------------
   Un seul cadre, centre sur le fond de l'application : sobre, sans
   illustration.
   ===================================================================== */
body.non-authentifie .contenu { display: block; }

.porte {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding: 32px 20px;
  background: var(--paper);
}

.porte__formulaire {
  width: 100%;
  max-width: 420px;
  padding: 40px 40px 32px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 12px;
  box-shadow: 0 1px 2px rgba(22, 32, 43, 0.06), 0 12px 32px rgba(22, 32, 43, 0.06);
}
.porte__corps { width: 100%; }
.porte__marque { display: flex; flex-direction: column; align-items: center; gap: 10px; margin: -40px -40px 28px; padding: 28px 20px 22px; background: var(--sofi-bleu); border-radius: 12px 12px 0 0; }
.porte__marque .logo-sofi { font-size: 44px; }
.porte__marque-sous { font-size: 13px; color: #c9d6e4; letter-spacing: 0.04em; }

.porte__titre {
  margin: 0 0 6px;
  font-family: var(--police);
  font-size: 30px;
  font-weight: 600;
  color: var(--ink);
  line-height: 1.2;
}
.porte__intro { margin: 0 0 26px; color: var(--ink-soft); font-size: 14.5px; }

.porte__champ { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; font-size: 13.5px; font-weight: 600; color: var(--ink); }
.porte__champ input {
  padding: 11px 13px;
  border: 1px solid var(--line-forte);
  border-radius: 8px;
  font: inherit;
  font-weight: 400;
  font-size: 15px;
  background: var(--surface);
  color: var(--ink);
}
.porte__champ input:focus-visible { outline: 3px solid rgba(29, 58, 95, 0.25); outline-offset: 1px; border-color: var(--brand); }
.porte__champ input[readonly] { background: var(--paper); color: var(--ink-soft); }
.porte__indice { font-weight: 400; font-size: 12.5px; color: var(--ink-soft); }
.porte__indice--ok { color: var(--ok); }

.porte__bouton {
  width: 100%;
  margin-top: 6px;
  padding: 12px 16px;
  border: 0;
  border-radius: 8px;
  background: var(--brand);
  color: #fff;
  font: inherit;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
}
.porte__bouton:hover { background: var(--brand-strong); }
.porte__bouton:focus-visible { outline: 3px solid rgba(29, 58, 95, 0.35); outline-offset: 2px; }
.porte__bouton:disabled { opacity: 0.6; cursor: wait; }

.porte__erreur {
  margin: 0 0 16px;
  padding: 10px 13px;
  border-left: 4px solid var(--danger);
  border-radius: 6px;
  background: var(--danger-bg);
  color: var(--ink);
  font-size: 14px;
}
.porte__succes {
  margin: 0 0 20px;
  padding: 12px 14px;
  border-left: 4px solid var(--ok);
  border-radius: 6px;
  background: var(--ok-bg);
  color: var(--ink);
}
.porte__aide { margin: 22px 0 0; font-size: 13px; color: var(--ink-soft); }
.porte__pied { margin: 28px 0 0; padding-top: 16px; border-top: 1px solid var(--line); font-size: 12px; color: var(--ink-faint); }
.porte__lien { color: var(--brand); font-weight: 600; }

@media (max-width: 480px) {
  .porte { padding: 0; align-items: stretch; background: var(--surface); }
  .porte__formulaire { max-width: none; border: 0; border-radius: 0; box-shadow: none; padding: 32px 22px; }
  .porte__marque { margin: -32px -22px 24px; border-radius: 0; }
}

/* Titre de panneau accompagne d'un lien vers un site exterieur */
.panneau__entete-lien { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.lien-externe {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px; border: 1px solid var(--line-forte); border-radius: var(--rayon);
  color: var(--brand); font-weight: 600; font-size: 13.5px; text-decoration: none; white-space: nowrap;
}
.lien-externe:hover { background: var(--brand-soft); border-color: var(--brand); }
.lien-externe svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
/* 3.4.2 : pictogramme du portail DFT-net (Trésor) devant le lien. */
.lien-externe__portail { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 5px; background: var(--brand-strong); color: #fff; }
.lien-externe__portail svg { width: 15px; height: 15px; }
.lien-externe__fleche { opacity: .7; }

/* ---- Pied du menu : Documentation, puis version ---- */
.nav__pied { margin-top: auto; border-top: 1px solid rgba(255, 255, 255, 0.12); padding-top: 6px; }
.nav__pied .nav__version { margin-top: 0; }
.nav__lien--pied { margin: 0 8px 2px; }

/* ---- Page Documentation ---- */
.guides { display: flex; flex-direction: column; gap: 12px; }
.guide {
  display: flex; align-items: center; gap: 16px;
  padding: 16px 18px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface);
}
.guide__icone {
  flex: none; width: 46px; height: 56px; border-radius: 6px;
  background: var(--brand-soft); color: var(--brand); border: 1px solid var(--line-forte);
  display: flex; align-items: flex-end; justify-content: center; padding-bottom: 8px;
  font-size: 11px; font-weight: 700; letter-spacing: 0.04em;
}
.guide__corps { flex: 1; min-width: 0; }
.guide__titre { margin: 0 0 4px; font-size: 16px; color: var(--ink); }
.guide__resume { margin: 0 0 4px; color: var(--ink-soft); font-size: 14px; }
.guide__meta { margin: 0; color: var(--ink-faint); font-size: 12.5px; }
.guide__lien { flex: none; text-decoration: none; }
@media (max-width: 640px) { .guide { flex-wrap: wrap; } .guide__lien { width: 100%; text-align: center; } }

/* ---- Circuit de signature des lots (1.18.0) ---- */
.bouton--petit { padding: 4px 10px; font-size: 13px; }
.bouton--alerte { background: var(--surface); color: var(--danger); border-color: var(--danger); }
.bouton--alerte:hover { background: var(--danger-bg); }
.avis--alerte { background: var(--warn-bg); border-left: 4px solid var(--warn); }
.lot-bordereau { border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin: 12px 0; }
.lot-bordereau__titre { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.lot-bordereau__titre .bouton { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; }
.lot-bordereau__titre .bouton svg { width: 15px; height: 15px; }
.lot-decision {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 16px; padding: 14px 16px; border-radius: 8px; background: var(--brand-soft);
}
.lot-decision p { margin: 0 auto 0 0; }
.dialogue-motif { border: 0; border-radius: 12px; padding: 0; width: min(520px, 92vw); box-shadow: 0 18px 50px rgba(22, 32, 43, 0.25); }
.dialogue-motif::backdrop { background: rgba(22, 32, 43, 0.45); }
.dialogue-motif__corps { padding: 22px 24px; display: flex; flex-direction: column; gap: 10px; }
.dialogue-motif__corps h3 { margin: 0; color: var(--brand); }
.dialogue-motif__corps label { display: flex; flex-direction: column; gap: 6px; font-weight: 600; }
.dialogue-motif__corps textarea { font: inherit; padding: 9px 11px; border: 1px solid var(--line-forte); border-radius: 8px; resize: vertical; }
.dialogue-motif__erreur { margin: 0; color: var(--danger); font-size: 13px; }
.dialogue-motif__actions { display: flex; justify-content: flex-end; gap: 8px; }
.bouton-lien { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; }
.bouton-lien:hover .badge { outline: 2px solid var(--line-forte); }

/* ----------------------------------------------------------------------
   Tableaux du dossier de revision (1.20.0, registre lignes 11 et 12) :
   meme presentation que le suivi bancaire - lignes basses d'une seule
   hauteur, champs de saisie integres a la ligne - avec une police un peu
   plus grande, les feuilles maitresses se lisant a l'ecran pendant de
   longues seances de revue.
   ---------------------------------------------------------------------- */
.tableau--revision { font-size: 14px; }
.tableau--revision td { height: 22px; padding: 0 6px; line-height: 1.25; }
.tableau--revision tbody tr:nth-of-type(even) td { background-color: #f4f7fa; }
.tableau--revision tbody tr:nth-of-type(even) td.col-exercice-n { background-color: #e1e9f3; }
.tableau--revision .champ--inline { font-size: inherit; padding: 1px 4px; }
.tableau--revision td.col-actions input[type="checkbox"] { margin: 0; vertical-align: middle; }

/* Colonne « Ecart K€ » en gras italique : c'est elle qui oriente la revue. */
.tableau .col-ecart { font-weight: 700; font-style: italic; }

/* En-tetes a filtres du grand livre : libelle sur une ligne, champ dessous. */
.tableau--filtres thead tr.ligne-entetes th { vertical-align: top; white-space: normal; }
.tableau--filtres thead tr.ligne-entetes th > div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 3px; }

/* Compte filtre au grand livre : intitule, solde, comptes voisins. */
/* 3.19.0 (relecture) : barre du compte affiche au grand livre, a la couleur
   de son cycle (--cycle), separee du bandeau ; comptes voisins en boutons. */
.barre-compte {
  --cycle-fond: color-mix(in srgb, var(--cycle, var(--brand)) 12%, #fff);
  display: flex;
  align-items: stretch;
  gap: 12px;
  margin: 12px 0 10px;
  padding: 10px 12px;
  border: 1px solid color-mix(in srgb, var(--cycle, var(--brand)) 45%, #fff);
  border-left: 6px solid var(--cycle, var(--brand));
  border-radius: var(--rayon);
  background: var(--cycle-fond);
}
.barre-compte__centre { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; align-self: center; }
.barre-compte__numero { font-size: 24px; font-weight: 700; color: var(--cycle, var(--brand)); font-variant-numeric: tabular-nums; letter-spacing: .02em; }
.barre-compte__intitule { font-size: 18px; font-weight: 600; color: var(--ink); }
.barre-compte__solde { margin-left: auto; font-size: 16px; color: var(--ink-soft); white-space: nowrap; }
.barre-compte__solde strong { font-size: 18px; color: var(--ink); font-variant-numeric: tabular-nums; }
.barre-compte__voisin {
  flex: none; display: inline-flex; align-items: center; gap: 8px; min-width: 150px;
  padding: 6px 12px; border: 1px solid var(--line-forte); border-radius: var(--rayon);
  background: var(--surface); color: var(--ink); font: inherit; cursor: pointer; text-align: left;
  box-shadow: 0 1px 2px rgba(19, 48, 79, .08);
}
.barre-compte__voisin--suivant { flex-direction: row-reverse; text-align: right; }
.barre-compte__voisin:hover { border-color: var(--cycle, var(--brand)); background: #fff; }
.barre-compte__voisin:focus-visible { outline: 2px solid var(--cycle, var(--brand)); outline-offset: 2px; }
.barre-compte__fleche { font-size: 22px; font-weight: 700; color: var(--cycle, var(--brand)); line-height: 1; }
.barre-compte__voisin-texte { display: flex; flex-direction: column; line-height: 1.2; }
.barre-compte__voisin-libelle { font-size: 11.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-soft); }
.barre-compte__voisin-numero { font-size: 17px; font-weight: 700; font-variant-numeric: tabular-nums; }
.barre-compte__voisin--vide { cursor: default; opacity: .55; box-shadow: none; background: transparent; }
@media (max-width: 760px) {
  .barre-compte { flex-wrap: wrap; }
  .barre-compte__centre { order: -1; flex-basis: 100%; }
  .barre-compte__voisin { flex: 1; min-width: 0; }
}

/* ---- Modeles de courriels (1.22.0) - tailles de la charte : texte 14 px,
   textes secondaires 12,5 px, titres 16 px ---- */
.courriels-style { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px 24px; margin-top: 8px; }
.courriels-style__champs { display: flex; flex-wrap: wrap; gap: 16px 24px; flex: 1; }
.courriels-style__champs label { display: flex; flex-direction: column; gap: 6px; font-weight: 600; font-size: 14px; }
.courriels-style__champs textarea { min-width: 360px; font: inherit; font-weight: 400; padding: 7px 9px; border: 1px solid var(--line-forte); border-radius: 6px; }
.courriels-style__couleur { display: inline-flex; align-items: center; gap: 8px; }
.courriels-style__couleur input[type=color] { width: 42px; height: 32px; padding: 0; border: 1px solid var(--line-forte); border-radius: 6px; background: none; }
.courriels-style__couleur input[type=text] { font-family: var(--police-mono); padding: 6px 8px; border: 1px solid var(--line-forte); border-radius: 6px; }
.courriels-style__actions { display: flex; gap: 8px; }

.courriels { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 20px; }
.courriels__liste { display: flex; flex-direction: column; gap: 6px; }
.courriels__entree {
  display: flex; flex-direction: column; gap: 3px; text-align: left; cursor: pointer;
  padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); font: inherit;
}
.courriels__entree:hover { border-color: var(--line-forte); }
.courriels__entree--actif { border-color: var(--brand); background: var(--brand-soft); box-shadow: inset 3px 0 0 var(--brand); }
.courriels__nom { font-weight: 600; color: var(--ink); }
.courriels__dest { font-size: 12.5px; color: var(--ink-soft); }
.courriels__entete h3 { margin: 0 0 2px; color: var(--brand); font-size: 16px; }
.courriels__entete p { margin: 0 0 14px; }
.courriels__colonnes { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; align-items: start; }
.courriels__champ { display: flex; flex-direction: column; gap: 5px; margin-bottom: 12px; font-weight: 600; font-size: 14px; }
.courriels__champ input, .courriels__champ textarea {
  font: inherit; font-weight: 400; font-size: 14px; padding: 8px 10px; border: 1px solid var(--line-forte); border-radius: 6px;
}
.courriels__champ textarea { resize: vertical; line-height: 1.45; }
.courriels__champ .texte-discret { font-weight: 400; font-size: 12.5px; }
.courriels__variables { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 10px; }
.courriels__variables-titre { width: 100%; font-size: 12.5px; color: var(--ink-soft); }
.puce-variable {
  font-family: var(--police-mono); font-size: 12.5px; padding: 3px 8px; cursor: pointer;
  border: 1px solid var(--line-forte); border-radius: 12px; background: var(--paper); color: var(--brand);
}
.puce-variable:hover { background: var(--brand-soft); border-color: var(--brand); }
.courriels__blocs { font-size: 12.5px; }
.courriels__erreurs { background: var(--danger-bg); border-left: 4px solid var(--danger); border-radius: 6px; padding: 8px 12px; margin: 8px 0; font-size: 14px; }
.courriels__erreurs p { margin: 2px 0; }
.courriels__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.courriels__apercu { position: sticky; top: 12px; }
.courriels__apercu-titre { font-weight: 600; margin-bottom: 6px; }
.courriels__objet { padding: 8px 12px; border: 1px solid var(--line); border-bottom: 0; border-radius: 8px 8px 0 0; background: var(--surface); font-size: 14px; }
.courriels__rendu { border: 1px solid var(--line); border-radius: 0 0 8px 8px; max-height: 70vh; overflow: auto; background: #eef1f4; }
@media (max-width: 1200px) { .courriels__colonnes { grid-template-columns: 1fr; } .courriels__apercu { position: static; } }
@media (max-width: 800px) { .courriels { grid-template-columns: 1fr; } }

/* Exercices (1.27.0) */
.badge--ouvert { background: var(--ok-bg); color: var(--ok); }
.badge--cloture { background: var(--paper); color: var(--ink-soft); border: 1px solid var(--line); }
.entete__cloture {
  font-size: 12.5px;
  color: var(--ink-soft);
  background: #e9ecef;
  border: 1px solid var(--line-forte);
  border-radius: 999px;
  padding: 2px 10px;
}
.liste-journal { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.7; }
/* Exercice cloture : la saisie est refusee par le serveur ; on retire en
   plus les zones de depot et les boutons d'envoi des formulaires, sauf sur
   les ecrans qui ne dependent pas de l'exercice. */
body.exercice-cloture .contenu:not([data-vue="accueil"]):not([data-vue="exercices"]):not([data-vue="parametres-application"]):not([data-vue="informations"]):not([data-vue="questions"]):not([data-vue="documentation"]) .zone-depot,
body.exercice-cloture .contenu:not([data-vue="accueil"]):not([data-vue="exercices"]):not([data-vue="parametres-application"]):not([data-vue="informations"]):not([data-vue="questions"]):not([data-vue="documentation"]) form button[type="submit"],
body.editeur-invite .contenu .zone-depot,
body.editeur-invite .contenu form button[type="submit"],
body.licence-expiree .contenu:not([data-vue="connexion"]) .zone-depot,
body.licence-expiree .contenu:not([data-vue="connexion"]) form button[type="submit"] {
  display: none;
}

/* Depot en deux temps (1.29.0) */
.analyse-pieces { font-size: 12.5px; white-space: nowrap; }
.analyse-pieces--cours { color: var(--brand); }
.analyse-pieces--cours::before {
  content: ""; display: inline-block; width: 9px; height: 9px; margin-right: 6px;
  border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%;
  animation: rotation-analyse 0.9s linear infinite; vertical-align: -1px;
}
.analyse-pieces--ok { color: var(--ok); }
.analyse-pieces--erreur { color: var(--danger); margin-right: 6px; }
@keyframes rotation-analyse { to { transform: rotate(360deg); } }

/* Badge cliquable du tableau de bord (1.30.1) */
a.badge-chiffre--lien { text-decoration: none; color: inherit; cursor: pointer; }
a.badge-chiffre--lien:hover { box-shadow: 0 0 0 2px var(--brand); }

/* Rattachement manuel d'une piece (1.31.0) */
.panneau-rattachement { border: 1px solid var(--line-forte); border-radius: 8px; padding: 12px 16px; margin: 12px 0; background: var(--surface); }
.bouton-rattacher { margin-left: 2px; font-size: 13px; }

/* ------------------------------------------------------------------ */
/* Page Banque : onglets par banque, en-tete et courbe (1.32.0)        */
/* ------------------------------------------------------------------ */
.onglets-banques { display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid var(--line-forte); margin-bottom: 12px; }
.onglets-banques:empty { display: none; }
.onglet-banque {
  font: inherit; font-size: 14px; padding: 6px 14px; cursor: pointer;
  background: transparent; color: var(--ink-soft);
  border: 1px solid transparent; border-bottom: none; border-radius: var(--rayon) var(--rayon) 0 0;
  margin-bottom: -1px;
}
.onglet-banque:hover { color: var(--brand); background: var(--brand-soft); }
.onglet-banque--actif { color: var(--brand); font-weight: 700; background: var(--surface); border-color: var(--line-forte); }
.entete-banque { display: flex; flex-wrap: wrap; gap: 16px; align-items: stretch; margin-bottom: 14px; }
.entete-banque__badge { flex: 0 0 260px; }
.entete-banque__badge .badge-chiffre { height: 100%; padding: 12px 16px; }
.entete-banque__courbe {
  flex: 1 1 380px; min-width: 300px; background: var(--surface);
  border: 1px solid var(--line-forte); border-radius: 10px; padding: 10px 14px;
}
.entete-banque__titre { font-size: 12.5px; color: var(--ink-soft); margin-bottom: 4px; }
.badge-banque__compte { font-size: 15px; font-weight: 700; color: var(--brand); font-variant-numeric: tabular-nums; }
.badge-banque__libelle { font-size: 12.5px; color: var(--ink-soft); margin-bottom: 6px; }
.badge-banque__solde { font-size: 24px; font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; }
.badge-chiffre--vert .badge-banque__solde { color: var(--ok); }
.badge-chiffre--orange .badge-banque__solde { color: #b5650a; }
.badge-chiffre--rouge-plein .badge-banque__solde,
.badge-chiffre--rouge-plein .badge-banque__compte,
.badge-chiffre--rouge-plein .badge-banque__libelle { color: #fff; }
.courbe { width: 100%; height: auto; display: block; }
.courbe__grille { stroke: var(--line); stroke-width: 1; }
.courbe__zero { stroke: var(--danger); stroke-width: 1; stroke-dasharray: 3 3; }
.courbe__axe { font-size: 10px; fill: var(--ink-faint); font-family: var(--police); }
.courbe__ligne { fill: none; stroke: var(--brand); stroke-width: 2; stroke-linejoin: round; }
.courbe__point { fill: var(--brand); }
/* Autres banques sous le badge de solde du tableau de bord */
.autres-banques { font-size: 12.5px; color: var(--ink-soft); margin-top: 8px; }
.autres-banques li { display: flex; justify-content: space-between; gap: 8px; font-variant-numeric: tabular-nums; }
.liste-nue { list-style: none; margin: 0; padding: 0; }

/* ------------------------------------------------------------------ */
/* Pointage bancaire : panneau a droite de la page Banque (1.33.0)     */
/* ------------------------------------------------------------------ */
.barre-pointage { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.ligne-cliquable { cursor: pointer; }
.tableau tbody tr.ligne-panneau td { background: var(--brand-soft); }
.puce-a-confirmer { color: var(--warn); font-size: 14px; }
.texte-danger { color: var(--danger); }
.panneau-pointage {
  position: fixed; top: 0; right: 0; bottom: 0; width: min(460px, 100vw); z-index: 40;
  background: var(--surface); border-left: 1px solid var(--line-forte);
  box-shadow: -6px 0 18px rgba(20, 41, 67, 0.12); padding: 16px 18px; overflow-y: auto;
}
.panneau-pointage[hidden] { display: none; }
.panneau-pointage__entete { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; margin-bottom: 12px; }
.panneau-pointage__titre { font-size: 16px; font-weight: 700; color: var(--brand); }
.panneau-pointage__liens li { display: flex; justify-content: space-between; gap: 10px; padding: 2px 0; font-variant-numeric: tabular-nums; }
.panneau-pointage__table td { padding: 3px 5px; vertical-align: top; }
.panneau-pointage__table tbody tr:nth-child(even) td { background: #f4f7fa; }
.panneau-pointage__total { margin: 10px 0; font-size: 14px; min-height: 20px; font-variant-numeric: tabular-nums; }
.panneau-pointage__actions { display: flex; gap: 8px; margin-top: 10px; }
/* 1.40.0 : pointage force, sans prise en charge, replie par defaut. */
.panneau-pointage__sans-pec { margin-top: 14px; border-top: 1px solid var(--line); padding-top: 8px; }
.panneau-pointage__sans-pec summary { cursor: pointer; color: var(--ink-soft); font-size: 13px; }
.panneau-pointage__sans-pec[open] summary { margin-bottom: 6px; }
.panneau-pointage input[type=search] { box-sizing: border-box; }
.panneau-pointage__table { table-layout: fixed; width: 100%; }
.panneau-pointage__table td { white-space: normal; overflow-wrap: anywhere; }

/* Pages a onglets (1.34.0) */
.onglets-page { display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid var(--line-forte); margin-bottom: 14px; }
.onglet-page {
  font: inherit; font-size: 14px; padding: 7px 16px; cursor: pointer;
  background: transparent; color: var(--ink-soft);
  border: 1px solid transparent; border-bottom: none; border-radius: var(--rayon) var(--rayon) 0 0; margin-bottom: -1px;
}
.onglet-page:hover { color: var(--brand); background: var(--brand-soft); }
.onglet-page--actif { color: var(--brand); font-weight: 700; background: var(--surface); border-color: var(--line-forte); }
[data-onglet-panneau][hidden] { display: none; }

/* Etat de rapprochement bancaire (1.36.0) */
.rb-synthese { max-width: 760px; margin-bottom: 8px; }
.rb-synthese td:first-child { width: 78%; }
.rb-synthese tr.rb-total td { font-weight: 700; background: var(--brand-soft); }
.rb-synthese tr.rb-ok td { background: var(--ok-bg); color: var(--ok); }
.rb-synthese tr.rb-ecart td { background: var(--danger-bg); color: var(--danger); }
/* 3.3.0 : validation du rapprochement, historique. */
.rb-validation { max-width: 760px; margin: 8px 0; }

/* 3.12.1 : etat de rapprochement presente comme la feuille du modele
   d'impression (bandeau des feuilles de travail, soldes et ecart, etat en
   Debit / Credit / Solde, ecart restant, signatures). La couleur est celle
   des documents du dossier de revision (reglage commun du modele). */
/* 3.67.0 : charte B du 24/10/2026 — marine SoFi pour la structure du dossier de révision (le bleu canard #2f7f93 est abandonné). */
:root { --revision-accent: #1d3a5f; --revision-accent-doux: #dde3ea; --erb-solde: #e9f0f8; --revision-titre: #1d3a5f; --revision-module: #5b4fb3; }
.erb { max-width: 980px; margin: 4px 0 14px; }
.erb-bandeau { background: var(--revision-accent); color: #fff; border-radius: 4px; padding: 10px 16px; display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.erb-type { font-size: 11px; text-transform: uppercase; letter-spacing: .12em; opacity: .85; }
.erb-titre { font-size: 19px; font-weight: 700; }
.erb-droite { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; font-size: 12.5px; font-weight: 700; text-align: right; }
.erb-statut { font-weight: 400; font-size: 12px; padding: 1px 8px; border-radius: 10px; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.45); }
.erb-statut--valide { background: #fff; color: var(--ok); border-color: #fff; font-weight: 700; }
.erb-synth { display: grid; grid-template-columns: 1fr 1.3fr 1.3fr .8fr; gap: 10px; align-items: end; margin: 14px 0 12px; }
.erb-synth__lib { font-weight: 700; padding-bottom: 8px; }
.erb-carte__titre { font-size: 12.5px; font-weight: 700; text-align: center; border: 1px solid #555; border-bottom: 0; padding: 2px 4px; background: #f4f6f8; }
.erb-mini { width: 100%; border-collapse: collapse; }
.erb-mini th { background: var(--revision-accent); color: #fff; font-size: 12px; font-weight: 700; padding: 2px 6px; border: 1px solid #555; text-align: center; }
.erb-mini td { border: 1px solid #555; padding: 2px 6px; height: 21px; }
.erb-solde { background: var(--erb-solde); }
.erb-ecart { border: 1.5px solid #555; text-align: center; font-weight: 700; min-width: 120px; }
.erb-ecart__titre { font-size: 12px; text-transform: uppercase; border-bottom: 1px solid #555; padding: 2px; }
.erb-ecart__val { padding: 4px 6px; font-size: 16px; font-variant-numeric: tabular-nums; }
.erb-ecart--nul .erb-ecart__val { background: var(--ok-bg); color: var(--ok); }
.erb-ecart--ko .erb-ecart__val { background: var(--danger-bg); color: var(--danger); }
.erb-etat-cadre { max-width: 760px; }
.erb-etat.rb-synthese td:first-child { width: auto; }
.tableau.erb-etat thead tr th.col-nombre { background: var(--revision-accent); color: #fff; width: 130px; text-align: right; }
.tableau.erb-etat thead tr th:first-child { background: transparent; border: 0; }
.erb-etat tr.erb-rubrique td { font-weight: 700; color: var(--revision-titre); border-bottom: 1px solid var(--revision-titre); background: transparent; padding-top: 8px; }
.erb-etat tr.erb-fort td { font-weight: 700; }
.erb-etat tr.erb-total td { font-weight: 700; background: var(--revision-accent-doux); border-top: 1.5px solid var(--revision-accent); }
.erb-etat tbody tr:not(.erb-rubrique):not(.erb-total) td.erb-solde { background: var(--erb-solde); }
.erb-pied { max-width: 760px; display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; margin-top: 8px; }
.erb-pied p { margin: 0; }
.erb-ecart--restant { min-width: 160px; }
.erb-sign { display: flex; gap: 16px; margin-top: 12px; max-width: 760px; }
.erb-sign__case { flex: 1; border: 1px solid #9aa6b2; min-height: 56px; padding: 6px 8px; display: flex; flex-direction: column; gap: 4px; }
/* 3.67.0 : etat au modele valide le 24/10/2026 (meme lecture que le PDF). */
.erb-bandeau { border-bottom: 4px solid var(--revision-module); }
.erb-cases { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 14px 0 12px; max-width: 760px; }
.erb-case { background: #dde3ea; border: 1px solid #b9c7d9; border-top: 5px solid var(--revision-accent); padding: 7px 10px; display: flex; flex-direction: column; gap: 2px; color: var(--revision-accent); }
.erb-case span { font-size: 12px; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; }
.erb-case b { font-size: 20px; text-align: right; font-variant-numeric: tabular-nums; }
.erb-case--ecart { background: #f7dcd8; border-color: #e6b3ab; border-top-color: #b23a2e; color: #a3241a; }
.tableau.erb-lignes thead tr th { background: var(--revision-accent); color: #fff; }
.tableau.erb-lignes thead tr th.col-nombre { width: 140px; text-align: center; }
.erb-lignes .erb-signe { width: 26px; text-align: center; font-weight: 700; font-size: 16px; color: var(--revision-accent); }
.erb-lignes .erb-symbole { width: 34px; text-align: center; font-weight: 700; font-size: 17px; }
.erb-lignes tr.erb-j1 td { background: #e3eefb; } .erb-lignes tr.erb-j1 td:first-child { box-shadow: inset 4px 0 0 #3d86d6; }
.erb-lignes tr.erb-j2 td { background: #fbe4ee; } .erb-lignes tr.erb-j2 td:first-child { box-shadow: inset 4px 0 0 #c94f86; }
.erb-lignes tr.erb-resultat td { font-weight: 700; font-size: 15px; }
.erb-lignes tr.erb-resultat--ok td { background: var(--ok-bg); color: var(--ok); }
.erb-lignes tr.erb-resultat--ko td { background: var(--danger-bg); color: var(--danger); }
.erb-note { max-width: 760px; margin: 6px 0 0; }
.rb-titre--j1 { color: #1f5fa8; border-bottom: 2px solid #3d86d6; padding-bottom: 2px; }
.rb-titre--j2 { color: #9c2f62; border-bottom: 2px solid #c94f86; padding-bottom: 2px; }
@media (max-width: 760px) {
  .erb-cases { grid-template-columns: 1fr; }
  .erb-synth { grid-template-columns: 1fr 1fr; }
  .erb-synth__lib { grid-column: 1 / -1; padding: 0; }
  .erb-pied, .erb-sign { flex-direction: column; }
}

/* 3.11.1 : bordereau depose sans piece justificative (avertissement). */
.depot-progression--avertissement .depot-progression__jauge { background: var(--warn); }
.depot-progression--avertissement .depot-progression__etat { color: var(--warn); font-weight: 600; white-space: normal; }
/* 3.11.0 : propositions de rapprochement a confirmer ou ecarter. */
.rb-propositions { margin: 10px 0 14px; padding: 10px 12px; border: 1px solid var(--warn); border-left: 4px solid var(--warn); border-radius: 8px; background: var(--surface); }
.rb-propositions .tableau-scroll { max-height: 360px; margin-top: 8px; }
.rb-proposition--a-verifier td:first-child { box-shadow: inset 3px 0 0 var(--warn); }
.rb-validation__actions { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 6px; }
.rb-historique { max-width: 760px; margin: 0 0 10px; }
.rb-historique summary { cursor: pointer; font-weight: 600; padding: 4px 0; }
.rb-listes { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 16px; margin-top: 12px; }
.rb-titre { font-size: 15px; color: var(--brand); margin: 10px 0 6px; }
.rb-liste { max-height: 360px; }
/* 2.11.0 : disposition des deux listes (cote a cote ou l'une seule) */
.rb-disposition { display: flex; align-items: center; gap: 6px; margin-top: 10px; }
.rb-disposition .bouton--actif { background: var(--brand); color: #fff; }
.rb-listes--mouvements, .rb-listes--ecritures { grid-template-columns: 1fr; }
.rb-listes--mouvements .rb-bloc--ecritures, .rb-listes--ecritures .rb-bloc--mouvements { display: none; }
.rb-listes--mouvements .rb-liste, .rb-listes--ecritures .rb-liste { max-height: 640px; }
.rb-numop { font-weight: 700; text-align: center; white-space: nowrap; }
/* 1.41.0 : selection multiple et operations a passer. */
.rb-boutons-liste { display: flex; gap: 4px; margin-bottom: 4px; }
.rb-selection { flex-wrap: wrap; gap: 6px 22px; margin-top: 10px; }
.rb-form-op { display: flex; flex-wrap: wrap; align-items: end; gap: 8px 12px; margin-top: 10px; padding: 10px;
  border: 1px solid var(--line); border-radius: var(--rayon); background: var(--surface); }
.rb-form-op[hidden] { display: none; }
.rb-form-op label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }

/* ------------------------------------------------------------------ */
/* Barre de filtres au-dessus des tableaux (1.38.0, registre ligne 30)  */
/* ------------------------------------------------------------------ */
.zone-filtres { margin: 8px 0 10px; }
.filtres {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 8px;
}
.filtres__titre {
  font-size: 12.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ink-soft);
}
.filtres__ajout { padding: 4px 8px; font-size: 13px; min-width: 150px; }
.filtre-etiquette {
  display: inline-flex;
  align-items: stretch;
  border: 1px solid var(--line-forte);
  border-radius: 999px;
  background: var(--brand-soft);
  font-size: 12.5px;
  overflow: hidden;
}
.filtre-etiquette--edition { border-color: var(--brand); box-shadow: 0 0 0 1px var(--brand); }
.filtre-etiquette__texte,
.filtre-etiquette__retirer {
  border: 0;
  background: transparent;
  font: inherit;
  color: var(--ink);
  cursor: pointer;
}
.filtre-etiquette__texte { padding: 3px 4px 3px 10px; max-width: 420px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.filtre-etiquette__champ { font-weight: 700; }
.filtre-etiquette__retirer { padding: 3px 9px 3px 5px; color: var(--ink-soft); }
.filtre-etiquette__retirer:hover { color: var(--danger); }
.filtres__editeur:not(:empty) {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  margin-top: 8px;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: var(--rayon);
  background: var(--surface);
}
.filtres__editeur .champ { padding: 4px 8px; }
.filtres__editeur input[type="search"] { min-width: 220px; }
.filtres__cases {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 14px;
  flex-basis: 100%;
  max-height: 160px;
  overflow-y: auto;
}
.filtres__option { white-space: nowrap; font-size: 13px; }
.filtres__option[hidden] { display: none; }

/* Cycles suivis par le dossier (1.39.0, registre ligne 14) */
.grille-cycles-suivis {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 4px 18px;
  margin-top: 8px;
}
.grille-cycles-suivis code { font-weight: 700; margin-right: 4px; }

/* Badge de role (1.39.3, registre ligne 39) : police blanche, une couleur
   par role. Teintes choisies assez soutenues pour que le blanc reste
   lisible (contraste >= 4,5:1), y compris le « bleu clair ». */
.badge-role {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 700;
  line-height: 1.5;
  color: #fff;
  background: #5f6b77;
  white-space: nowrap;
}
/* 3.41.0 : l'administrateur est l'agent comptable reference (vert fonce,
   famille de l'agent comptable). */
.badge-role--administrateur { background: #1b5e20; }
.badge-role--direction-financiere { background: #1f78b4; }
.badge-role--agent-comptable { background: #2e7d32; }
.badge-role--ordonnateur { background: #7b3fa0; }
.badge-role--regisseur { background: #1f7a5c; } /* 3.44.0 */
/* 3.0.0 : l editeur de SoFi, qui gere les clients, en gris ardoise. */
.badge-role--editeur { background: #455a64; }

/* « Se connecter en tant que » (1.42.0, registre ligne 38) */
.bandeau-en-tant-que {
  position: sticky;
  top: 0;
  z-index: 1000;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px 16px;
  padding: 6px 16px;
  background: #c62828;
  color: #fff;
  font-size: 14px;
}
.bandeau-en-tant-que .badge-role { background: rgba(255, 255, 255, 0.22); }
.bandeau-en-tant-que .bouton { background: #fff; color: #c62828; border-color: #fff; }

/* Types et droits (1.43.0, registre ligne 41) */
.matrice-droits td { white-space: nowrap; }
.matrice-droits--oui { color: var(--ok); font-weight: 600; }
.matrice-droits--non { color: var(--ink-faint); }
.matrice-droits--option { color: var(--warn); font-style: italic; }

/* Module Immobilisations (2.0.0) */
.immo-options { display: flex; flex-wrap: wrap; gap: 8px 24px; align-items: center; margin-bottom: 10px; }
.immo-form__grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px 14px; }
.immo-form__grille label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.immo-form__large { grid-column: 1 / -1; }
.texte-ok { color: var(--ok); }
.immo-plan, .immo-ecritures { max-width: 760px; }
.pi-grille { max-width: 640px; margin: 10px 0; }
.immo-traitement { padding: 8px 4px; display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: end; }
.immo-traitement label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
/* 3.21.0 (registre ligne 75) : écritures du grand livre à justifier, groupées par compte en écart. */
.immo-gl-groupe td { background: #eef3f8; font-weight: 600; border-top: 2px solid #c9d6e3; }
.immo-gl-groupe .badge { margin-left: 6px; }
.immo-gl-libelle { min-width: 260px; }
.immo-gl-ecartees { margin-top: 10px; }
.immo-gl-ecartees summary { cursor: pointer; color: var(--texte-discret, #5b6b7b); }
/* Inventaire, sorties et subventions (2.3.0) */
.avis--info { background: #eef4fa; border-left: 4px solid #2d6da3; }
.immo-sortie label[hidden] { display: none; }
.immo-sortie .immo-form__large { flex-basis: 100%; }
.immo-sortie [data-role="apercu"] .tableau { margin: 6px 0; }
.champ--montant { width: 120px; text-align: right; font-variant-numeric: tabular-nums; }
.immo-sub-biens { max-height: 360px; overflow-y: auto; margin-bottom: 8px; }
/* Cadres d'information (2.4.0) */
.annonces { display: flex; flex-direction: column; gap: 10px; }
.annonce { border: 1px solid var(--line); border-left: 4px solid var(--brand); border-radius: 6px; padding: 10px 14px; background: #fff; }
.annonce--nouveaute { border-left-color: #2d6da3; }
.annonce--information { border-left-color: var(--ok); }
.annonce--importante { background: #fffaf0; border-left-color: var(--warn); }
.annonce--lue { opacity: .82; }
.annonce__entete { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; font-size: 12.5px; color: var(--ink-soft); }
.annonce__categorie { font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: var(--brand); }
.annonce--information .annonce__categorie { color: var(--ok); }
.annonce__date { margin-left: auto; }
.annonce__marque { font-size: 12px; font-weight: 700; padding: 1px 7px; border-radius: 10px; background: var(--brand); color: #fff; }
.annonce__marque--importante { background: var(--warn); }
.annonce__marque--epinglee { background: #5b4a8b; } /* 3.47.0 : épinglée par son auteur */
.annonce--epinglee.annonce--lue { opacity: 1; }
.annonce__marque--hors-ligne { background: var(--ink-faint); }
.annonce__titre { font-size: 15px; margin: 6px 0 4px; color: var(--ink); }
.annonce__contenu { font-size: 14px; line-height: 1.5; }
.annonce__contenu p { margin: 0 0 6px; }
.annonce__contenu ul { margin: 0 0 6px 18px; padding: 0; }
.annonce__contenu--repliable { max-height: 7.6em; overflow: hidden; }
.annonce__contenu--repliable.annonce__contenu--deplie { max-height: none; }
.annonce__actions { display: flex; gap: 6px; margin-top: 4px; }
.annonce__actions .bouton { padding: 2px 6px; font-size: 13px; }
.badge-compteur { display: inline-block; min-width: 20px; padding: 0 6px; border-radius: 10px; background: var(--danger); color: #fff; font-size: 12.5px; text-align: center; vertical-align: middle; }
.info-form__grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 8px 14px; }
.info-form__grille label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.info-form__grille label[hidden], .info-form__dossiers[hidden] { display: none; }
.info-form__large { grid-column: 1 / -1; }
.info-form__dossiers { border: 1px solid var(--line); border-radius: 6px; margin: 10px 0; padding: 6px 12px; display: flex; flex-wrap: wrap; gap: 4px 18px; align-items: center; }
.annonce__actions [hidden] { display: none; }
/* Questions, tickets et FAQ (2.5.0) */
.q-filtres { display: flex; flex-wrap: wrap; gap: 8px 20px; align-items: end; margin-bottom: 10px; }
.q-filtres label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.q-meta { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; color: var(--ink-soft); font-size: 13.5px; margin: 0 0 12px; }
.q-fil { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.q-message { border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; max-width: 900px; background: #fff; }
.q-message--client { align-self: flex-start; border-left: 4px solid var(--ink-faint); }
.q-message--comptable { align-self: flex-end; border-left: 4px solid var(--ok); background: var(--ok-bg); }
.q-message__entete { font-size: 12.5px; color: var(--ink-soft); margin-bottom: 4px; }
.q-message__texte p { margin: 0 0 6px; }
.q-message__texte ul { margin: 0 0 6px 18px; padding: 0; }
.q-message__pieces { margin: 6px 0 0 18px; padding: 0; font-size: 13px; }
.q-reponse { display: flex; flex-direction: column; gap: 8px; max-width: 900px; }
.q-reponse > label, .q-pieces { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.faq-theme { font-size: 15px; color: var(--brand); margin: 14px 0 6px; border-bottom: 1px solid var(--line); padding-bottom: 3px; }
.faq-fiche { border: 1px solid var(--line); border-radius: 6px; margin-bottom: 6px; background: #fff; }
.faq-fiche > summary { cursor: pointer; padding: 8px 12px; font-weight: 600; }
.faq-fiche[open] > summary { border-bottom: 1px solid var(--line); }
.faq-fiche__corps { padding: 8px 14px; }
.faq-fiche__corps p { margin: 0 0 6px; }
.faq-fiche__question { color: var(--ink-soft); font-style: italic; margin-bottom: 6px; }
/* Documentation en deux étagères (2.6.0) */
.guide__icone--m4 { background: var(--ok-bg); color: var(--ok); border-color: var(--ok); }
.guide__actions { margin: 4px 0 0; display: flex; gap: 6px; }
.guide__actions .bouton { padding: 2px 6px; font-size: 13px; }
/* 3.20.2 : guides du logiciel gérés par l'éditeur */
.guide--retire { opacity: .6; }
.guides-gestion { align-items: center; gap: 12px; margin-bottom: 10px; }
.guides-gestion p { margin: 0; }
.doc-plan { margin-top: 10px; }
.doc-plan__liste { max-height: 520px; overflow-y: auto; }
.doc-plan__niveau-1 td, .doc-plan__niveau-2 td { font-weight: 700; color: var(--brand); }
.doc-plan__niveau-3 td:last-child { padding-left: 14px; font-weight: 600; }
.doc-plan__niveau-4 td:last-child { padding-left: 28px; }
.doc-plan__niveau-5 td:last-child { padding-left: 42px; }
.doc-plan__niveau-6 td:last-child { padding-left: 56px; color: var(--ink-soft); }
/* Etat de rapprochement : lignes rapprochees mises en evidence (2.7.1) */
.rb-rapprochee td { background: var(--ok-bg) !important; color: #145c38; }
.rb-rapprochee .bouton { padding: 0 4px; font-size: 12.5px; }
.rb-filtres { margin-top: 8px; }
.rb-filtres label.case-a-cocher, .ap-filtres-journal label.case-a-cocher { flex-direction: row; align-items: center; gap: 6px; }
/* Pastilles des questions (2.8.0) : bleue pour les questions comptables,
   violette pour l'assistance logiciel ; deux pastilles cote a cote. */
.pastille-notif--question { background: #1f6fb5; }
.pastille-notif--assistance { background: #7b3fa0; }
.pastille-notif--menu + .pastille-notif--menu { margin-left: 4px; }
.badge--assistance { background: #efe4f6; color: #5d2c7a; border-color: #c9a9dd; }
.q-depot .zone-depot { padding: 10px; min-height: 0; }
.q-depot .zone-depot svg { display: none; }
.q-depot__liste { margin: 4px 0 0 18px; padding: 0; font-size: 13px; }
.q-depot__liste button { padding: 0 4px; font-size: 12.5px; }
/* Solde quotidien de la banque, FR et BFR (2.9.0) */
.courbe__ligne--lisse { stroke-width: 2.2; }
.courbe__aire { fill: var(--brand); opacity: 0.07; }
.courbe__point--jour { fill: var(--brand); stroke: #fff; stroke-width: 1.5; }
.courbe__valeur { font-size: 11px; font-weight: 700; fill: var(--brand); font-family: var(--police); }
.courbe__repere { stroke-width: 1.4; stroke-dasharray: 6 4; }
.courbe__repere--fr { stroke: var(--ok); }
.courbe__repere--bfr { stroke: var(--warn); }
.courbe__axe--fr { fill: var(--ok); font-weight: 700; }
.courbe__axe--bfr { fill: var(--warn); font-weight: 700; }
.courbe__legende { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 12.5px; margin-top: 4px; }
.courbe__cle { display: inline-block; width: 16px; height: 0; border-top: 2px solid var(--brand); margin-right: -4px; }
.courbe__cle--fr { border-top: 2px dashed var(--ok); }
.courbe__cle--bfr { border-top: 2px dashed var(--warn); }
/* 2.9.2 : partie de la courbe sous le fonds de roulement (ou au-dessus du
   plafond d'une regie) en rouge */
.courbe__ligne--alerte { stroke: var(--danger); }
.courbe__point--alerte { fill: var(--danger); }
.courbe__valeur--alerte, .texte-alerte { fill: var(--danger); color: var(--danger); }
/* 2.10.0 : plafond d'une regie et solde au-dessus */
.courbe__repere--regie { stroke: var(--danger); }
.courbe__axe--regie { fill: var(--danger); font-weight: 700; }
.courbe__cle--regie { border-top: 2px dashed var(--danger); }
.tableau td.solde-hors-plafond { color: var(--danger); background: var(--danger-bg); font-weight: 700; }

/* ======================================================================
   2.13.0 — Tablette et telephone
   ----------------------------------------------------------------------
   Sous 1024 px (tablette en portrait, telephone), le menu lateral se
   replie : un bouton de l'en-tete l'ouvre par-dessus la page. Les marges
   se resserrent, les grilles de formulaire passent sur une colonne, les
   tableaux defilent dans leur cadre (jamais la page entiere) et les zones
   a toucher grandissent sur ecran tactile.
   ====================================================================== */
.bouton-menu { display: none; }
.nav-voile { display: none; }

@media (max-width: 1024px) {
  .bouton-menu {
    display: inline-flex; align-items: center; justify-content: center; flex: none;
    width: 42px; height: 42px; margin-right: 12px; padding: 0;
    border: 1px solid var(--line); border-radius: var(--rayon); background: var(--surface); color: var(--brand); cursor: pointer;
  }
  .bouton-menu svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
  .entete { display: flex; align-items: flex-start; padding: 14px 20px 10px; }
  .nav {
    position: fixed; top: 0; left: 0; bottom: 0; z-index: 60;
    width: min(290px, 86vw); height: 100%;
    transform: translateX(-105%); visibility: hidden;
    transition: transform 0.2s ease, visibility 0s linear 0.2s;
  }
  body.menu-ouvert .nav {
    transform: none; visibility: visible; transition: transform 0.2s ease;
    box-shadow: 4px 0 18px rgba(0, 0, 0, 0.25);
  }
  .tableau .col-libelle { min-width: 220px; }
  body.menu-ouvert .nav-voile { display: block; position: fixed; inset: 0; z-index: 55; background: rgba(15, 30, 50, 0.45); }
  body.menu-ouvert { overflow: hidden; }
  .contenu { padding: 12px 20px 40px; }
  body.non-authentifie .bouton-menu { display: none; }
}

@media (max-width: 640px) {
  .entete { padding: 10px 12px 8px; }
  .entete__dossier h1 { font-size: 21px; }
  .contenu { padding: 8px 10px 32px; }
  .panneau { padding: 14px 12px; margin-bottom: 14px; border-radius: 8px; }
  .panneau__intro { font-size: 13.5px; }
  .form-pec__grille { grid-template-columns: 1fr !important; }
  .entete-banque__badge { flex: 1 1 100%; }
  .toasts { left: 10px; right: 10px; bottom: 10px; }
  .barre-total { flex-wrap: wrap; gap: 4px 12px; }
  .panneau-pointage__actions, .barre-pointage { flex-wrap: wrap; }
  /* Graphiques en SVG : le texte retrecit avec le dessin ; on le
     grossit pour qu'il reste lisible une fois l'image reduite. */
  .courbe text { font-size: 17px; }
  .courbe__valeur { font-size: 19px; }
  /* Pas de zoom automatique d'iOS sur les champs (police >= 16 px). */
  input:not([type="checkbox"]):not([type="radio"]), select, textarea { font-size: 16px; }
  .tableau .champ--inline { font-size: 14px; }
}

/* Ecran tactile : cibles d'au moins 40 px dans le menu et les onglets. */
@media (pointer: coarse) {
  .nav__lien { min-height: 42px; }
  .onglet-page, .onglet-banque { min-height: 40px; }
  .tableau-scroll { -webkit-overflow-scrolling: touch; }
}

/* ---- Page « À propos » de l'administrateur (2.14.0) ---- */
.ap-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; margin: 12px 0 6px; }
.ap-carte { border: 1px solid var(--line); border-radius: var(--rayon); padding: 12px 14px; background: var(--surface); display: flex; flex-direction: column; gap: 6px; }
.ap-carte__titre { font-size: 12.5px; font-weight: 700; color: var(--ink-soft); text-transform: uppercase; letter-spacing: 0.03em; }
.ap-carte__chiffre { font-size: 20px; font-weight: 700; color: var(--brand); font-variant-numeric: tabular-nums; }
.ap-carte__chiffre span { font-size: 13px; font-weight: 400; color: var(--ink-soft); }
.jauge { height: 9px; border-radius: 999px; background: var(--line); overflow: hidden; }
.jauge__barre { height: 100%; border-radius: 999px; transition: width 0.4s ease; }
.jauge__barre--ok { background: var(--ok); }
.jauge__barre--alerte { background: var(--warn, #c98a00); }
.jauge__barre--danger { background: var(--danger); }
.ap-journal {
  max-height: 560px; overflow: auto; margin: 6px 0 0; padding: 10px 12px; border-radius: var(--rayon);
  background: #0f1d2e; color: #d8e1ea; font: 12px/1.5 Consolas, "DejaVu Sans Mono", monospace; white-space: pre-wrap; word-break: break-word;
}
.ap-journal--erreur { color: #ff9b8f; font-weight: 700; }
.ap-journal--alerte { color: #f5c96b; }
.ap-restauration { margin-top: 14px; padding: 12px 14px; border: 1px solid var(--danger); border-radius: var(--rayon); background: #fff8f7; }
.ap-form-restauration { margin-top: 10px; align-items: flex-end; }
.entete-triable { cursor: pointer; user-select: none; }
.entete-triable:hover { text-decoration: underline; }
.texte-succes { color: var(--ok); }
.ap-copie-distante { margin: 6px 0 10px; overflow-wrap: anywhere; }
.ap-commande { margin: 8px 0 0; padding: 8px 10px; border-radius: var(--rayon); background: #0f1d2e; color: #d8e1ea; font: 12.5px/1.5 Consolas, "DejaVu Sans Mono", monospace; white-space: pre-wrap; user-select: all; }

/* 2.15.0 : champ obligatoire non renseigne */
.champ.champ--erreur, .champ--inline.champ--erreur { border: 2px solid var(--danger) !important; background: var(--danger-bg); }
.message-erreur { color: var(--danger); font-weight: 600; margin: 6px 0; }
.libelle-instruction { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px; margin: 8px 0 12px; }
.libelle-instruction label { display: flex; flex-direction: column; gap: 4px; min-width: min(420px, 100%); }
.libelle-instruction .message-erreur { margin: 0; }

/* 2.20.0 : le N° op coloré l'emporte sur l'héritage des lignes colorées et
   sur la sélection. */
.champ--centre { text-align: center; }
tr td input.numop,
tr.ligne-selectionnee td input.numop { color: #fff; }
.champ--inline.numop:focus { color: var(--ink); }

/* 2.21.0 (registre ligne 64) : champ vide avec une valeur proposée d'après
   le lot (en filigrane) ; double-clic pour l'appliquer. */
.champ--inline.champ--propose { border: 1px dashed #c98a1b; background: #fff8e6; }
.champ--inline.champ--propose::placeholder { color: #9a6a10; font-style: italic; }

/* 2.26.0 (registre ligne 60) : budget annexe affiché - sélecteur de
   l'en-tête en violet, pour ne jamais saisir dans le mauvais budget. */
body.budget-annexe .entete__select-exercice { border-color: #6b3fa0; background: #f3ecfb; color: #4a2a75; font-weight: 700; }

/* 2.27.0 (registre ligne 60) : base de test - bandeau rouge sur chaque
   page et liseré rouge autour de l'écran, pour ne jamais la confondre avec
   SoFi. */
.bandeau-base-test {
  position: sticky; top: 0; z-index: 1001;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: 6px 16px; padding: 6px 16px;
  background: #b71c1c; color: #fff; font-size: 14px;
}
.bandeau-base-test strong { letter-spacing: .08em; font-size: 15px; }
.bandeau-base-test .bouton { background: #fff; color: #b71c1c; border-color: #fff; }
body.mode-base-test { box-shadow: inset 0 0 0 4px #b71c1c; }

/* 2.28.0 (registre ligne 68) : identité de l'agence - logo et nom sous la
   marque SoFi dans le menu, logo au-dessus du cadre de connexion. */
.nav__agence { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 0 16px 14px; text-align: center; color: rgba(255,255,255,.85); font-size: 12.5px; font-weight: 600; line-height: 1.25; }
.nav__agence-logo { max-width: 150px; max-height: 56px; background: #fff; border-radius: 6px; padding: 4px; }
.porte__logo-agence { text-align: center; margin-bottom: 18px; }
.porte__logo-agence img { max-width: 220px; max-height: 90px; }
.porte__contact a { color: var(--brand); }
.identite-apercu { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.identite-apercu img { max-width: 200px; max-height: 80px; border: 1px solid var(--line); border-radius: 6px; padding: 4px; background: #fff; }
.identite-couleur { display: inline-flex; align-items: center; gap: 8px; }
.identite-couleur input[type=color] { width: 44px; height: 32px; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: none; }

.formulaire-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px 20px; }
.formulaire-grille label { display: flex; flex-direction: column; gap: 4px; font-weight: 600; font-size: 13px; }
.formulaire-grille label .texte-discret { font-weight: 400; }

/* 2.29.0 (registre ligne 68) : échéance de la licence. */
.bandeau-licence {
  position: sticky; top: 0; z-index: 999;
  display: flex; justify-content: center; padding: 6px 16px;
  background: #fdf0e0; color: #7a4a05; border-bottom: 1px solid #e3b26b; font-size: 14px;
}
.bandeau-licence--grave { background: #b23a2e; color: #fff; border-bottom-color: #8f2c22; }


/* 2.30.0 (registre ligne 68) : pages légales. */
.page-legale { max-width: 860px; margin: 0 auto; padding: 24px 16px; }
.texte-legal h1 { font-size: 24px; color: var(--brand); margin: 4px 0 16px; }
.texte-legal h2 { font-size: 16px; color: var(--brand); margin: 22px 0 6px; }
.texte-legal p, .texte-legal li { line-height: 1.6; }
.pied-legal { margin-top: 28px; border-top: 1px solid var(--line); padding-top: 12px; }
.porte__legal { font-size: 12px; text-align: center; margin-top: 10px; }
.porte__legal a, .nav__legal a { color: inherit; }
.nav__legal { font-size: 11.5px; color: rgba(255,255,255,.6); text-align: center; padding: 4px 8px; line-height: 1.6; }
@media print { .pied-legal, #btn-imprimer { display: none; } .page-legale { max-width: none; } }
.texte-legal-saisie { width: 100%; font-family: var(--police-mono); font-size: 12.5px; }
.apercu-legal { border: 1px solid var(--line); border-radius: 6px; padding: 8px 16px; margin-top: 8px; background: #fff; }

/* 3.0.0 : editeur dans un dossier sur invitation, consultation seule. */
.bandeau-invite {
  background: #455a64; color: #fff; padding: 6px 16px; font-size: 13px;
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
}
/* 3.0.2 : console des clients en tableau (code, agent comptable, agence,
   dossiers). Lignes à hauteur libre : plusieurs dossiers par client. */
.tableau-clients td { vertical-align: top; white-space: normal; height: auto; }
.code-client { font-variant-numeric: tabular-nums; white-space: nowrap; }
.ligne-client--suspendu td { opacity: .6; }

/* 3.0.1 : montants (débit, crédit, montant) et lot en gras dans tous les
   tableaux - cellules affichées (col-montant) comme champs de saisie. */
td.col-montant,
.champ[data-champ="debit"], .champ[data-champ="credit"], .champ[data-champ="montant"], .champ[data-champ="lot"] { font-weight: 700; }

/* 3.0.4 : la courbe du solde ne grandit plus avec la largeur de l écran
   (dessin adapté à la place, components.js HAUTEUR_COURBE_MAX). */
.courbe--quotidienne { max-height: 260px; }

/* 3.1.0 : abonnements. Module non souscrit : lien grisé (il mène à l'écran
   « Découvrir ») ; abonnement terminé : consultation seule. */
.nav__lien--grise { opacity: .45; }
.nav__lien--grise:hover { opacity: .7; }
body.module-echu .contenu .zone-depot,
body.module-echu .contenu form button[type="submit"] { display: none !important; }
.decouvrir { max-width: 760px; }
.decouvrir__etiquette { display: inline-block; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
  color: var(--brand); background: var(--brand-soft); border-radius: 4px; padding: 2px 8px; margin-bottom: 8px; }
.decouvrir__points { margin: 8px 0 14px 18px; line-height: 1.7; }
.etat-module { display: inline-block; font-size: 12px; font-weight: 700; border-radius: 4px; padding: 1px 7px; white-space: nowrap; }
.etat-module--actif { background: var(--ok-bg); color: var(--ok); }
.etat-module--echu { background: var(--warn-bg); color: var(--warn); }
.etat-module--absent { background: #eef1f4; color: var(--ink-faint); }
.tableau-abonnements td { vertical-align: top; white-space: normal; height: auto; }
.tableau-abonnements .periode { font-size: 12px; color: var(--ink-soft); }

/* 3.2.0 : bon de commande et factures. */
.statut-commande { display: inline-block; font-size: 12px; font-weight: 700; border-radius: 4px; padding: 1px 7px; white-space: nowrap; }
.statut-commande--VALIDEE { background: var(--brand-soft); color: var(--brand); }
.statut-commande--FACTUREE { background: var(--warn-bg); color: var(--warn); }
.statut-commande--PAYEE { background: var(--ok-bg); color: var(--ok); }
.statut-commande--ANNULEE { background: #eef1f4; color: var(--ink-faint); }

/* 3.41.0 : espace éditeur, commercialisation (views/commercial.js ; maquette
   « Espace éditeur SoFi » validée le 22/10/2026). */
.cm-intro { margin: 0 0 10px; }
.cm-tete { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 14px; margin-bottom: 10px; }
.cm-tete .texte-discret { font-size: 13px; }
.cm-note { margin-top: 8px; font-size: 13px; }
.cm-tuiles { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; }
.cm-tuile { background: var(--surface); border: 1px solid var(--line); border-radius: var(--rayon); padding: 10px 12px; min-width: 0; }
.cm-tuile__k { font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-soft); }
.cm-tuile__v { font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; margin-top: 2px; }
.cm-tuile__s { font-size: 12.5px; color: var(--ink-soft); }
.cm-hausse { color: var(--ok); font-weight: 700; }
.cm-baisse { color: var(--danger); font-weight: 700; }
.cm-grille { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 14px; }
.cm-grille > .panneau { min-width: 0; }
.cm-graphique { display: block; width: 100%; height: auto; max-height: 260px; }
.cm-g-grille { stroke: var(--line); stroke-width: 1; }
.cm-g-texte { font-size: 11px; fill: var(--ink-soft); }
.cm-g-sofi { fill: var(--brand); }
.cm-g-hc { fill: #8fb7de; }
.cm-g-n1 { fill: none; stroke: var(--ink-faint); stroke-width: 1.5; }
.cm-legende { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12.5px; color: var(--ink-soft); margin-top: 4px; }
.cm-legende i { display: inline-block; width: 11px; height: 11px; border-radius: 2px; margin-right: 5px; vertical-align: -1px; }
.cm-l-sofi { background: var(--brand); }
.cm-l-hc { background: #8fb7de; }
.cm-l-n1 { border: 1.5px solid var(--ink-faint); }
.badge.cm-badge--info { background: var(--brand-soft); color: var(--brand); }
.badge.cm-badge--neutre { background: #eef1f4; color: var(--ink-soft); }
.cm-matrice th.cm-phase { text-align: center; background: var(--brand-soft); color: var(--brand); }
.tableau.cm-matrice thead tr.ligne-entetes th.cm-etape-titre { white-space: normal; font-size: 10.5px; min-width: 82px; max-width: 104px; line-height: 1.2; text-align: center; }
.cm-matrice td:first-child { min-width: 230px; }
.cm-titre { font-size: 20px; margin: 0 0 2px; }
.cm-etape { text-align: center; font-size: 12px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.cm-point { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 4px; vertical-align: 0; }
.cm-etape--fait .cm-point { background: var(--ok); }
.tableau tbody td.cm-etape--cours { background: var(--warn-bg); }
.cm-etape--cours .cm-point { background: var(--warn); }
.cm-etape--avenir { color: var(--ink-faint); }
.cm-ligne { cursor: pointer; }
.cm-ligne--choisie { outline: 2px solid var(--brand); outline-offset: -2px; }
.cm-ajout { margin-top: 10px; }
.cm-ajout > summary, .cm-action details > summary, .panneau details > summary.bouton { list-style: none; }
.cm-fiche { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr); gap: 14px; margin-top: 14px; }
.cm-col { display: grid; gap: 14px; align-content: start; min-width: 0; }
.cm-col > .panneau { margin: 0; }
.cm-timeline { list-style: none; margin: 0; padding: 0; }
.cm-tl { display: grid; grid-template-columns: 22px 1fr; gap: 8px; position: relative; padding-bottom: 10px; }
.cm-tl::before { content: ""; position: absolute; left: 10px; top: 18px; bottom: 0; width: 2px; background: var(--line); }
.cm-tl:last-child::before { display: none; }
.cm-tl__m { width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--line); background: var(--surface); display: flex;
  align-items: center; justify-content: center; font-size: 11px; font-weight: 700; color: var(--ink-soft); z-index: 1; }
.cm-tl--fait .cm-tl__m { background: var(--ok); border-color: var(--ok); color: #fff; }
.cm-tl--cours .cm-tl__m { border-color: var(--warn); color: var(--warn); }
.cm-tl__date { display: block; font-size: 12.5px; border: 1px solid transparent; background: transparent; color: var(--ink-soft); padding: 0; }
.cm-tl__date:hover, .cm-tl__date:focus { border-color: var(--line); }
.cm-actions { display: grid; gap: 10px; }
.cm-action { border-top: 1px solid var(--line); padding-top: 8px; display: grid; gap: 6px; }
.cm-action:first-child { border-top: 0; padding-top: 0; }
.cm-liste { margin: 0; padding-left: 18px; }
.cm-pieces { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.cm-courriel { border: 1px solid var(--line); border-radius: var(--rayon); padding: 10px 12px; margin-top: 10px; background: var(--paper); }
.cm-courriel pre { white-space: pre-wrap; font-family: var(--police); margin: 8px 0; }
.cm-reprise { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.cm-reprise li { display: flex; gap: 8px; align-items: center; }
.cm-recu { color: var(--ok); font-weight: 600; }
.cm-lignes input, .cm-lignes select { width: 100%; min-width: 64px; }
.cm-lignes .cm-n { text-align: right; font-variant-numeric: tabular-nums; }
.cm-libre td { background: var(--brand-soft); }
.cm-date { display: inline-flex; gap: 6px; align-items: center; margin-left: auto; }
.cm-inline { display: inline-flex; gap: 4px; align-items: center; flex-wrap: wrap; margin-left: 4px; }
.cm-inline input { width: auto; max-width: 140px; }
.cm-lignes [hidden], .cm-lignes label[hidden] { display: none !important; }
.tableau td.cm-num { white-space: nowrap; }
.tableau td.cm-objet { min-width: 180px; }
/* 3.52.0 : courriels du parcours (liste, texte modifiable, aperçu) et
   formulaires PDF complétés (maquette « Courriels du parcours »). */
.cmc { margin-top: 14px; }
.cmc-outil { display: grid; grid-template-columns: 220px minmax(0, 1fr) minmax(0, 1.15fr); gap: 14px; align-items: start; }
.cmc-liste { display: grid; gap: 4px; }
.cmc-liste button { font: inherit; text-align: left; cursor: pointer; border: 1px solid var(--line); background: var(--surface);
  color: var(--ink); border-radius: 4px; padding: 7px 10px; display: grid; gap: 1px; }
.cmc-liste button small { color: var(--ink-soft); font-size: 12px; }
.cmc-liste button[aria-pressed="true"] { border-color: var(--brand); box-shadow: inset 3px 0 0 var(--brand); }
.cmc-groupe { font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--ink-soft); margin: 8px 0 2px; }
.cmc-edition { min-width: 0; }
.cmc-edition > label { display: grid; gap: 3px; font-size: 12.5px; color: var(--ink-soft); margin-bottom: 9px; }
.cmc-edition input:not([type="checkbox"]), .cmc-edition textarea { font: inherit; font-size: 14px; width: 100%; }
.cmc-edition textarea { min-height: 250px; resize: vertical; line-height: 1.45; }
.cmc-titre { margin: 0 0 2px; font-size: 16px; }
.cmc-aide { margin: 0 0 8px; font-size: 13px; }
.cmc-modifie[hidden] { display: none; }
.cmc-modifie { display: inline-block; margin-left: 6px; font-size: 11.5px; font-weight: 700; color: var(--warn); background: var(--warn-bg); border-radius: 3px; padding: 0 6px; vertical-align: 2px; }
.cmc-envoi, .cmc-boite { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; font-size: 13px; margin: 0 0 10px; }
.cmc-envoi dt, .cmc-boite dt { color: var(--ink-soft); }
.cmc-envoi dd, .cmc-boite dd { margin: 0; overflow-wrap: anywhere; }
.cmc-variables { display: flex; flex-wrap: wrap; gap: 4px; margin: -2px 0 10px; }
.cmc-variables button { font: inherit; font-size: 12px; cursor: pointer; border: 1px dashed var(--brand); color: var(--brand); background: var(--brand-soft); border-radius: 3px; padding: 1px 7px; }
.cmc-sous-titre { margin: 4px 0 6px; font-size: 14px; }
.cmc-pieces { list-style: none; margin: 0 0 4px; padding: 0; display: grid; gap: 4px; font-size: 13.5px; }
.cmc-pieces li { display: flex; gap: 8px; align-items: center; border: 1px solid var(--line); border-radius: 4px; padding: 4px 8px; background: #f4f7fa; }
.cmc-pieces label { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.cmc-pieces label small { display: block; color: var(--ink-soft); font-size: 12px; }
.cmc-pdf { font-size: 10px; font-weight: 700; color: #b42318; border: 1px solid currentColor; border-radius: 2px; padding: 0 3px; }
.cmc-oblig { font-size: 11.5px; color: var(--ink-soft); white-space: nowrap; }
.cmc-apercu { background: #eef1f4; border: 1px solid var(--line); border-radius: 4px; padding: 14px 10px; min-width: 0; }
.cmc-boite { max-width: 600px; margin: 0 auto 8px; color: #4b5a67; font-size: 12px; }
.cmc-rendu > table { background: transparent !important; }
.cmc-rendu td[style*="padding:28px 12px"] { padding: 0 !important; }
.cm-relance { margin: 0; padding: 6px 8px; border-radius: 4px; background: var(--warn-bg); }
.cmf-depot { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin-bottom: 10px; }
.cmf-depot .bouton { cursor: pointer; }
.cmf { border: 1px solid var(--line); border-radius: var(--rayon); padding: 10px 12px; margin-bottom: 12px; background: var(--paper); }
.cmf-table td:first-child { width: 28px; }
.cmf-valeur { white-space: pre-line; }
.cmf-erreur td { background: var(--danger-bg, #fdecea); }
.cmf-alerte { color: var(--warn); font-size: 12.5px; }
@media (max-width: 1180px) {
  .cmc-outil { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .cmc-liste { grid-column: 1 / -1; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }
  .cmc-groupe { grid-column: 1 / -1; }
}
@media (max-width: 760px) { .cmc-outil { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 1000px) {
  .cm-tuiles { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .cm-grille, .cm-fiche { grid-template-columns: 1fr; }
}
@media (max-width: 560px) { .cm-tuiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.tableau-commandes td { vertical-align: top; white-space: normal; height: auto; }
.tableau-commandes .detail { font-size: 12px; color: var(--ink-soft); }
.commande-total { font-size: 15px; margin: 10px 0; }
.commande-choix td:first-child { width: 28px; }

/* 3.1.1 : base de démonstration (écran de connexion, bandeau). */
.porte__bouton--secondaire { background: var(--surface); color: var(--brand); border: 1px solid var(--brand); }
.porte__bouton--secondaire:hover { background: var(--brand-soft); }
.bandeau-demo { background: #6b3fa0; color: #fff; padding: 6px 16px; font-size: 13px; display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
/* 3.76.0 : mode présentateur de la démonstration. */
.bandeau-demo--presentateur { background: #1f6f4a; }
.bandeau-demo--presentateur .bandeau-demo__lien + .bandeau-demo__lien { margin-left: 0; }
.bandeau-demo__bouton { font: inherit; font-size: 12.5px; color: #fff; background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.55);
  border-radius: 12px; padding: 2px 10px; cursor: pointer; }
.bandeau-demo__bouton:hover, .bandeau-demo__bouton:focus-visible { background: rgba(255,255,255,.28); }
.bandeau-demo__bouton:disabled { opacity: .6; cursor: default; }
body.mode-demo .contenu form button[type="submit"] { display: none !important; }
/* 3.19.0 (relecture) : en démonstration, la zone de dépôt reste visible
   (le visiteur voit comment on dépose un relevé, un lot, un grand livre…)
   mais inerte, avec la mention du mode ; le serveur refuse de toute façon. */
body.mode-demo .contenu .zone-depot { pointer-events: none; cursor: default; position: relative; }
body.mode-demo .contenu .zone-depot::after {
  content: "Dépôt désactivé en démonstration"; position: absolute; top: 8px; right: 10px;
  font-size: 11.5px; font-weight: 700; color: #6b3fa0; background: #f1ebf8; border: 1px solid #d6c6ea;
  border-radius: 10px; padding: 1px 8px;
}
/* 3.1.2 : page publique de démonstration (choix du type de compte). */
.porte__formulaire--large { max-width: 640px; }
.choix-demo { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; margin: 14px 0; }
.choix-demo__carte { display: flex; flex-direction: column; gap: 4px; text-align: left; padding: 12px 14px; cursor: pointer;
  background: var(--surface); border: 1px solid var(--line-forte); border-radius: 8px; font: inherit; color: var(--ink); }
.choix-demo__carte:hover, .choix-demo__carte:focus-visible { border-color: var(--brand); background: var(--brand-soft); }
.choix-demo__titre { font-weight: 700; color: var(--brand); }
.choix-demo__texte { font-size: 12.5px; color: var(--ink-soft); }

/* 3.4.2 : actions en pictogrammes (console des clients). */
.actions-icones { display: flex; gap: 4px; flex-wrap: nowrap; }
.bouton-icone--danger { color: var(--danger, #b23a2e); }

/* 3.4.2 : pictogramme du type de compte sur la page de démonstration. */
.choix-demo__carte { flex-direction: row; align-items: flex-start; gap: 12px; }
.choix-demo__libelles { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.choix-demo__picto { flex: none; width: 42px; height: 42px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; color: #fff; background: var(--brand-strong); }
.choix-demo__picto svg { width: 24px; height: 24px; }
.choix-demo__picto--agent-comptable { background: #2e7d32; }
.choix-demo__picto--direction-financiere { background: #1f78b4; }
.choix-demo__picto--ordonnateur { background: #7b3fa0; }
.choix-demo__picto--administrateur { background: #c62828; }
.choix-demo__picto--regisseur { background: #1f7a5c; } /* 3.44.0 */

/* 3.4.2 : espace propre de l'éditeur (hors dossier) — menu ardoise et
   mention « Espace éditeur », pour ne pas le confondre avec un compte d'agence. */
body.espace-editeur .nav { background: #2f3b44; }
body.espace-editeur .nav__marque::after {
  content: "Espace éditeur";
  display: block; margin-top: 10px; padding: 4px 8px; border-radius: 4px;
  background: #455a64; color: #fff; font-size: 11px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase; text-align: center;
}
body.espace-editeur .app__principal { box-shadow: inset 4px 0 0 #455a64; }

/* 3.4.2 : recherche dans la liste des utilisateurs. */
.recherche-utilisateurs { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 10px; }
.recherche-utilisateurs .champ { flex: 1 1 260px; max-width: 420px; }

/* 3.6.0 : prestations (tarifs de l'éditeur, bon de commande). */
.sous-titre-tarifs { font-size: 14px; font-weight: 700; color: var(--brand); margin: 16px 0 4px; }
.champ--quantite { width: 90px; text-align: right; }
/* 3.17.0 : tarifs en tableaux (éditeur), formules au bon de commande,
   remises et gratuités. */
.tableau-tarifs td { vertical-align: middle; height: auto; }
.tableau-scroll--etroit { max-width: 560px; }
.tableau-tarifs [data-champ-prestation="libelle"] { width: 100%; min-width: 240px; box-sizing: border-box; }
.champ--prix { width: 120px; text-align: right; font-variant-numeric: tabular-nums; }
.coche-offre { color: var(--ok); font-weight: 700; }
.offres-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; margin: 6px 0 14px; }
.offre-carte { border: 1px solid var(--line-forte); border-radius: var(--rayon); padding: 10px 12px; background: var(--surface); }
.offre-carte--premium { border-color: var(--brand); background: var(--brand-soft); }
.offre-carte__titre { font-weight: 700; color: var(--brand); font-size: 15px; }
.offre-carte__prix { font-size: 17px; font-weight: 700; font-variant-numeric: tabular-nums; margin: 4px 0; }
.offre-carte__prix span { font-size: 12px; font-weight: 400; color: var(--ink-soft); }
.offre-carte__liste { margin: 4px 0 0 16px; font-size: 13px; line-height: 1.5; }
.commande-formules td { vertical-align: top; white-space: normal; height: auto; }
.commande-formules .module-etat { font-size: 12.5px; margin-bottom: 2px; }
.commande-formules .periode { font-size: 12px; color: var(--ink-soft); }
.ligne-club td { background: var(--brand-soft); }
.panneau-gestes { margin-bottom: 14px; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--rayon); }
.tableau-gestes td { vertical-align: middle; white-space: normal; height: auto; }
.tableau-commandes s { color: var(--ink-faint); }
/* 3.6.0 : SIRET de l'acheteur reconnu (annuaire des entreprises). */
.siret-etat { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; font-size: 12.5px; font-weight: 400; color: var(--ink-soft); min-height: 1em; }
.siret-etat--ok { color: #1e7a4c; }
.siret-etat--alerte { color: #a85d10; }
.siret-etat__detail { color: var(--ink-soft); }

/* ------------------------------------------------------------------ */
/* Feuilles de travail (3.12.0, registre ligne 71)                     */
/* ------------------------------------------------------------------ */
.ft-entete { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; }
.ft-form { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; margin: 10px 0; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--rayon); background: var(--brand-soft); }
.ft-form label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; color: var(--ink-soft); }
.ft-form input[name=titre] { min-width: 280px; }
.ft-form[hidden] { display: none; }
.ft-cadre { display: grid; grid-template-columns: minmax(200px, 260px) minmax(0, 1fr); gap: 14px; margin-top: 12px; align-items: start; }
@media (max-width: 1024px) { .ft-cadre { grid-template-columns: 1fr; } }
.ft-onglets { display: flex; flex-direction: column; gap: 10px; border-right: 1px solid var(--line); padding-right: 10px; min-width: 0; }
@media (max-width: 1024px) { .ft-onglets { border-right: 0; padding-right: 0; border-bottom: 1px solid var(--line); padding-bottom: 10px; } }
.ft-groupe__titre { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 3px; }
.ft-onglet { display: flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: var(--rayon); color: var(--ink); text-decoration: none; font-size: 14px; min-width: 0; }
.ft-onglet:hover { background: var(--brand-soft); }
.ft-onglet--actif { background: var(--brand); color: #fff; }
.ft-onglet__ref { font-weight: 700; color: var(--sofi-rouge); min-width: 44px; font-variant-numeric: tabular-nums; }
.ft-onglet--actif .ft-onglet__ref { color: #fff; }
.ft-onglet__titre { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ft-statut { width: 9px; height: 9px; border-radius: 50%; flex: none; background: var(--warn); }
.ft-statut--TERMINEE { background: var(--ok); }
.ft-statut--REVUE { background: var(--brand); box-shadow: 0 0 0 2px var(--surface); }
.ft-feuille { min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.ft-titre { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.ft-ref { font-size: 30px; font-weight: 700; color: var(--sofi-rouge); line-height: 1; min-width: 56px; }
.ft-titre__champ { flex: 1; min-width: 220px; font-size: 16px; font-weight: 700; }
.ft-etat { font-size: 12.5px; color: var(--ink-soft); }
.ft-etat--ok { color: var(--ok); }
.ft-etat--erreur { color: var(--danger); }
.ft-bloc { display: flex; flex-direction: column; gap: 3px; }
.ft-bloc__titre { background: var(--brand); color: #fff; font-weight: 700; font-size: 13px; padding: 2px 8px; border-radius: 3px 3px 0 0; align-self: flex-start; }
.ft-bloc textarea { width: 100%; resize: vertical; }
.ft-outils { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; font-size: 13px; color: var(--ink-soft); }
.ft-outils label { display: inline-flex; align-items: center; gap: 4px; }
.ft-outils .champ { padding: 3px 6px; }
.ft-outils [aria-pressed="true"] { background: var(--brand); color: #fff; }
.ft-barre-formule { display: flex; gap: 6px; align-items: center; }
.ft-adresse { min-width: 48px; text-align: center; font-weight: 700; font-family: var(--police-mono); font-size: 13px; padding: 4px; border: 1px solid var(--line); border-radius: var(--rayon); background: var(--brand-soft); }
.ft-formule { flex: 1; font-family: var(--police-mono); font-size: 13px; }
.ft-grille-defil { overflow: auto; max-height: 70vh; border: 1px solid var(--line-forte); border-radius: var(--rayon); }
.ft-grille { border-collapse: collapse; table-layout: fixed; font-size: 13.5px; }
.ft-grille th { position: sticky; background: #eef1f4; color: var(--ink-soft); font-weight: 600; font-size: 12px; border: 1px solid var(--line); padding: 2px 4px; text-align: center; }
.ft-grille thead th { top: 0; z-index: 2; }
.ft-grille tbody th { left: 0; z-index: 1; }
.ft-grille td { border: 1px solid var(--line); padding: 0; height: 22px; background: var(--surface); }
.ft-grille td .ft-saisie { width: 100%; height: 22px; border: 0; padding: 0 5px; font: inherit; background: transparent; color: var(--ink); }
.ft-grille td .ft-saisie:focus { outline: 2px solid var(--brand); outline-offset: -2px; background: var(--surface); }
.ft-grille td.ft-cel--nombre .ft-saisie { text-align: right; font-variant-numeric: tabular-nums; }
.ft-grille td.ft-cel--gras .ft-saisie { font-weight: 700; }
.ft-grille td.ft-cel--formule .ft-saisie { color: #4a2b8a; }
.ft-grille td.ft-cel--erreur .ft-saisie { color: var(--danger); font-weight: 700; }
.ft-cel--active { box-shadow: inset 0 0 0 2px var(--brand); }
.ft-fond--vert { background: #dff0d8 !important; }
.ft-fond--jaune { background: #fff4c7 !important; }
.ft-fond--bleu { background: #e3edf8 !important; }
.ft-fond--gris { background: #eceff2 !important; }
.ft-fond--rouge { background: #f7dcd9 !important; }
/* 3.16.0 : mise en forme des cellules (barre d'outils de la feuille). */
.ft-grille td.ft-cel--ital .ft-saisie { font-style: italic; }
.ft-grille td.ft-cel--soul .ft-saisie { text-decoration: underline; text-underline-offset: 2px; }
.ft-grille td.ft-cel--gras .ft-saisie { font-weight: 700; }
.ft-grille td.ft-al--g .ft-saisie { text-align: left; }
.ft-grille td.ft-al--c .ft-saisie { text-align: center; }
.ft-grille td.ft-al--d .ft-saisie { text-align: right; }
.ft-grille td.ft-coul--rouge .ft-saisie { color: #b3261e; }
.ft-grille td.ft-coul--bleu .ft-saisie { color: #1f5fa8; }
.ft-grille td.ft-coul--vert .ft-saisie { color: #1d7148; }
.ft-grille td.ft-coul--orange .ft-saisie { color: #b45f06; }
.ft-grille td.ft-coul--violet .ft-saisie { color: #6b2fa0; }
.ft-grille td.ft-coul--gris .ft-saisie { color: #6a7783; }
.ft-grille td.ft-bord-h { border-top: 1.5px solid #1b2733; }
.ft-grille td.ft-bord-b { border-bottom: 1.5px solid #1b2733; }
.ft-grille td.ft-bord-g { border-left: 1.5px solid #1b2733; }
.ft-grille td.ft-bord-d { border-right: 1.5px solid #1b2733; }
/* Renvoi a la ligne : la cellule est un textarea qui grandit avec son texte. */
.ft-grille td textarea.ft-saisie { display: block; resize: none; overflow: hidden; white-space: pre-wrap; overflow-wrap: anywhere;
  height: auto; min-height: 22px; line-height: 1.35; padding: 3px 5px; field-sizing: content; }
.ft-grille td.ft-cel--rl { vertical-align: top; }
/* Fusion : la cellule du coin couvre la plage ; son texte se centre verticalement. */
.ft-grille td.ft-fusion { position: relative; vertical-align: middle; }
.ft-grille td.ft-fusion > input.ft-saisie { position: absolute; inset: 0; height: 100%; }
.ft-outils .ft-icone svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; vertical-align: -3px; }
.ft-dec { font-size: 12px; font-variant-numeric: tabular-nums; }
.ft-badge-n { display: inline-block; font-size: 10px; font-weight: 700; color: #fff; background: var(--brand); border-radius: 3px; padding: 0 3px; }

/* 3.13.0 : la grille s'utilise comme un tableur (selection, poignee de
   recopie, menu clic droit, largeur a la souris, ligne et colonne figees). */
.ft-outils__groupe { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; padding-right: 10px; border-right: 1px solid var(--line); }
.ft-outils__groupe:last-child { border-right: 0; }
.ft-icone { font-size: 16px; line-height: 1; padding: 2px 8px; }
.ft-sigma { font-weight: 700; }
.ft-fx { font-style: italic; font-weight: 700; color: var(--ink-soft); font-family: Georgia, "Times New Roman", serif; padding: 0 2px; }
.ft-suggestions { list-style: none; margin: -6px 0 0; padding: 4px 0; border: 1px solid var(--line-forte); border-radius: var(--rayon); background: var(--surface); box-shadow: 0 6px 18px rgba(20, 41, 67, .14); max-width: 560px; font-size: 13px; }
.ft-suggestions li { padding: 3px 10px; cursor: pointer; display: flex; gap: 10px; }
.ft-suggestions li:first-child, .ft-suggestions li:hover { background: var(--brand-soft); }
.ft-suggestions li b { font-family: var(--police-mono); font-weight: 600; }
.ft-suggestions li span { color: var(--ink-soft); }
.ft-grille-defil { position: relative; }
.ft-grille { user-select: none; }
.ft-grille td .ft-saisie { cursor: cell; caret-color: transparent; }
.ft-grille td.ft-cel--edition .ft-saisie { cursor: text; caret-color: auto; background: var(--surface); box-shadow: 0 0 0 2px var(--brand); position: relative; z-index: 3; }
.ft-grille td .ft-saisie::selection { background: transparent; }
.ft-grille td.ft-cel--edition .ft-saisie::selection { background: var(--brand-soft); }
.ft-grille td .ft-saisie:focus { outline: none; }
.ft-grille td.ft-cel--sel { background-image: linear-gradient(rgba(29, 58, 95, .11), rgba(29, 58, 95, .11)); }
.ft-grille td.ft-cel--active, .ft-grille td.ft-cel--active .ft-saisie { box-shadow: inset 0 0 0 2px var(--brand); }
.ft-poignee { position: absolute; width: 8px; height: 8px; background: var(--brand); border: 1px solid var(--surface); cursor: crosshair; z-index: 4; }
.ft-grille thead th { position: sticky; }
.ft-grille th[data-entete-col], .ft-grille th[data-entete-ligne] { cursor: pointer; user-select: none; }
.ft-grille th[data-entete-col] { position: sticky; }
.ft-redim { position: absolute; top: 0; right: -3px; width: 7px; height: 100%; cursor: col-resize; z-index: 3; }
.ft-redim:hover { background: var(--brand-soft); }
.ft-grille .ft-coin { left: 0; z-index: 4; }
.ft-grille td.ft-fige-ligne { position: sticky; top: 24px; z-index: 1; box-shadow: inset 0 -2px 0 var(--line-forte); }
.ft-grille tbody th.ft-fige-ligne { top: 24px; z-index: 3; }
.ft-grille td.ft-fige-colonne { position: sticky; left: 42px; z-index: 1; box-shadow: inset -2px 0 0 var(--line-forte); }
.ft-grille thead th.ft-fige-colonne { left: 42px; z-index: 3; }
.ft-grille td.ft-fige-ligne.ft-fige-colonne { z-index: 2; }
.ft-statut-selection { min-height: 18px; font-size: 12.5px; color: var(--ink-soft); text-align: right; font-variant-numeric: tabular-nums; margin-top: -6px; }
.ft-menu { position: fixed; z-index: 50; min-width: 240px; padding: 4px 0; background: var(--surface); border: 1px solid var(--line-forte); border-radius: var(--rayon); box-shadow: 0 10px 28px rgba(20, 41, 67, .2); }
.ft-menu button { display: block; width: 100%; text-align: left; font: inherit; font-size: 13.5px; padding: 5px 14px; border: 0; background: transparent; color: var(--ink); cursor: pointer; }
.ft-menu button:hover, .ft-menu button:focus-visible { background: var(--brand-soft); outline: none; }
.ft-menu hr { border: 0; border-top: 1px solid var(--line); margin: 4px 0; }
.ft-menu__aide { margin: 4px 14px 2px; font-size: 12px; color: var(--ink-faint); }
/* ----------------------------------------------------------------------
   3.19.0 (relecture) : pictogramme du format sur tout bouton ou lien qui
   exporte, telecharge ou depose un fichier (pictosFichiers.js) ; toujours
   accompagne du texte.
   ---------------------------------------------------------------------- */
.picto-fichier { flex: none; width: 19px; height: 22px; vertical-align: -6px; }
.bouton .picto-fichier { margin: -3px 0 -3px -3px; }
.bouton--principal .picto-fichier path { stroke: rgba(255, 255, 255, 0.9); }
.lien-fichier { display: inline-flex; align-items: center; gap: 4px; }
.zone-depot__formats { display: flex; justify-content: center; gap: 6px; }
.zone-depot__formats .picto-fichier { width: 22px; height: 26px; }
.guide__icone--picto { background: none; border: 0; padding: 0; align-items: center; }
.guide__icone--picto .picto-fichier { width: 40px; height: 48px; }
/* 3.19.0 : liste repliable de l'etat de rapprochement (Rapprochements
   manuels), fermee par defaut ; titre cliquable avec le nombre de lignes. */
.rb-replie { margin-top: 14px; }
.rb-replie__titre { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 6px; }
.rb-replie__titre::-webkit-details-marker { display: none; }
.rb-replie__titre::before { content: "▸"; color: var(--ink-soft); transition: transform 0.15s ease; }
.rb-replie[open] > .rb-replie__titre::before { transform: rotate(90deg); }
.rb-replie__nombre { font-weight: 400; color: var(--ink-soft); }
@media (prefers-reduced-motion: reduce) { .rb-replie__titre::before { transition: none; } }

/* ----------------------------------------------------------------------
   3.19.0 (relecture) : couleur discrete de chaque cycle de revision
   (couleursCycles.js, variable --cycle) : bande sur les cartes des
   programmes, bande en tete des ecrans d'un cycle (programme, feuille
   maitresse, feuilles de travail, grand livre compte par compte), pastille
   du code du cycle.
   ---------------------------------------------------------------------- */
.carte-programme--cycle { border-left: 5px solid var(--cycle); padding-left: 11px; }
.carte-programme--cycle .carte-programme__code { color: var(--cycle); }
.carte-programme--cycle:hover { border-color: var(--cycle); }
.panneau--cycle { border-top: 4px solid var(--cycle); }
.pastille-cycle {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 26px; height: 22px; padding: 0 6px; border-radius: 6px;
  background: var(--cycle); color: #fff; font-weight: 700; font-size: 13px;
  vertical-align: 1px; letter-spacing: 0.02em;
}
.bande-cycle { border-left: 4px solid var(--cycle); padding-left: 8px; }

/* ----------------------------------------------------------------------
   3.19.0 (relecture) : en-tete du dossier de revision (enteteRevision.js)
   et feuille maitresse presentee comme le modele d'impression valide
   (« Modeles d'impression SoFi », document « Feuille maitresse » : bandeau,
   colonne N accentuee, ecarts en gras et en couleur, Ref en rouge,
   sous-totaux, total general, commentaire du cycle). Couleur des documents
   de revision --revision-accent ; couleur du cycle --cycle (lettre).
   ---------------------------------------------------------------------- */
:root { --revision-accent-fonce: #142943; --revision-col-n: #eceef1; --revision-col-n-total: #d5d9de; --revision-accent-clair: #dde3ea; --revision-noir-n: #111111; }
.rv-bandeau {
  background: var(--revision-accent); color: #fff; border-radius: 4px; padding: 10px 16px;
  display: flex; justify-content: space-between; align-items: center; gap: 12px 20px; flex-wrap: wrap;
  border-bottom: 4px solid var(--revision-module); margin-bottom: 12px; /* 3.67.0 : filet de la nuance du module (charte B) */
}
.rv-bandeau__type { font-size: 11px; text-transform: uppercase; letter-spacing: .12em; opacity: .85; }
.rv-bandeau__dossier { font-size: 19px; font-weight: 700; }
.rv-bandeau__droite { display: flex; align-items: center; gap: 12px; margin-left: auto; }
.rv-bandeau__texte { text-align: right; font-size: 12px; line-height: 1.35; }
.rv-bandeau__titre { font-size: 16px; font-weight: 700; }
.rv-bandeau__detail, .rv-bandeau__avancement { opacity: .92; }
.rv-bandeau__lettre {
  display: inline-flex; align-items: center; justify-content: center; min-width: 52px; height: 52px; padding: 0 8px;
  border-radius: 6px; background: var(--cycle, var(--revision-accent-fonce)); color: #fff;
  font-family: Arial, "Arimo", sans-serif; font-weight: 700; font-size: 30px; line-height: 1;
  box-shadow: 0 0 0 2px rgba(255, 255, 255, .55);
}
.fm-navigation { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.fm-navigation .lien-retour { margin-right: auto; }
table.fm-tab { width: 100%; border-collapse: collapse; font-size: 14px; font-variant-numeric: tabular-nums; }
.fm-tab th {
  background: var(--revision-accent); color: #fff; font-weight: 700; padding: 3px 6px; text-align: center;
  border: 1px solid #fff; white-space: nowrap; position: sticky; top: 0; z-index: 1;
}
.fm-tab th.col-nombre { text-align: right; }
.fm-tab th.fm-col-n { background: var(--revision-noir-n); font-size: 15px; } /* 3.67.0 : colonne N en noir */
.fm-tab td.fm-col-n { border-left: 1px solid var(--revision-noir-n); border-right: 1px solid var(--revision-noir-n); }
.fm-tab th.fm-ref { background: #d9534f; }
.fm-tab td { padding: 1px 6px; height: 21px; border: 1px solid #c9d0d7; vertical-align: middle; }
.fm-tab tbody tr:nth-child(even):not(.fm-sous) td { background: #f7f9fb; }
.fm-tab td.fm-col-n, .fm-tab tbody tr:nth-child(even):not(.fm-sous) td.fm-col-n { background: var(--revision-col-n); font-weight: 700; font-size: 14.5px; }
.fm-tab td.fm-ecart { font-weight: 700; }
.fm-tab .fm-ecart-plus { color: #1d6b2f; }
.fm-tab .fm-ecart-moins { color: #a12020; }
.fm-tab tr.fm-sous td { font-weight: 700; background: #f4f6f8; }
.fm-tab tr.fm-sous td.fm-col-n { background: var(--revision-col-n); }
.fm-tab tr.fm-total td { font-weight: 700; background: var(--revision-accent-clair); border-top: 1.5px solid var(--revision-accent); }
.fm-tab tr.fm-total td.fm-col-n { background: var(--revision-col-n-total); }
.fm-tab td.fm-compte { font-family: Calibri, Carlito, sans-serif; white-space: nowrap; }
.fm-tab td.fm-libelle { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-tab .fm-ok { text-align: center; padding: 0; }
.fm-tab td.fm-ref input { color: #c0262d; font-weight: 700; text-align: center; }
.fm-tab td .champ--inline { width: 100%; }
/* Case « ok » : « V » blanc sur gris, vert du modele quand le compte est revise. */
.fm-case-ok { position: relative; display: flex; align-items: center; justify-content: center; height: 21px; cursor: pointer; }
.fm-case-ok input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.fm-case-ok span { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 17px; border-radius: 3px; border: 1px dashed #b6c0ca; color: transparent; font-weight: 700; }
.fm-case-ok input:checked + span { background: #dff0d8; color: #2d6a2d; border: 1px solid #9cc79c; }
.fm-case-ok input:focus-visible + span { outline: 2px solid var(--revision-accent); outline-offset: 1px; }
.fm-case-ok:hover span { border-color: var(--revision-accent); }
.fm-tab tr.ligne-revisee td.fm-ok { background: #dff0d8; }
/* Vue d'ensemble : une ligne par cycle, pastille a la couleur du cycle. */
.fm-tab--synthese tr.fm-ligne-cycle td:first-child { border-left: 4px solid var(--cycle); }
.fm-tab--synthese td.fm-cycle { text-align: center; }
.fm-tab--synthese tr.ligne-cliquable:hover td { background: #eef4f6; }
/* Commentaire du cycle, en pied de la feuille (modele : bloc titre + zone grise). */
.fm-commentaire { margin-top: 14px; }
.fm-bloc-titre { display: block; background: var(--revision-accent); color: #fff; font-weight: 700; padding: 2px 8px; font-size: 13px; }
.fm-zone { display: block; width: 100%; border: 1px solid #9aa6b2; background: #f2f2f2; min-height: 64px; padding: 6px 8px; font: inherit; font-size: 14px; resize: vertical; }
.fm-zone:focus { background: #fff; outline: 2px solid var(--revision-accent); outline-offset: -1px; }
@media (max-width: 640px) {
  .rv-bandeau__droite { margin-left: 0; width: 100%; justify-content: space-between; }
  .rv-bandeau__texte { text-align: left; }
}
/* 3.19.0 : feuilles de travail a la couleur de leur cycle (liste des
   feuilles, reference) ; en-tete du dossier de revision au-dessus. */
.ft-groupe { border-left: 3px solid var(--cycle, var(--line)); padding-left: 6px; }
.ft-groupe__titre .pastille-cycle { min-width: 22px; height: 18px; font-size: 11.5px; padding: 0 5px; }
.ft-titre .ft-ref { color: var(--cycle, var(--sofi-rouge)); font-size: 22px; min-width: 0; }
.ft .rv-bandeau { margin-bottom: 8px; }
/* 3.19.0 : grand livre au format de la balance (premier ecran) : filtres
   Lettre / Solde / Revise proposes d'office, une ligne par compte. */
.gl-filtres { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 16px; margin: 4px 0 8px; }
.gl-recherche { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; color: var(--ink-soft); }
.gl-recherche .champ { min-width: 200px; }
.gl-filtre { display: inline-flex; align-items: center; border: 1px solid var(--line-forte); border-radius: var(--rayon); overflow: hidden; background: var(--surface); }
.gl-filtre__libelle { font-size: 12.5px; font-weight: 700; color: var(--ink-soft); padding: 6px 8px; border-right: 1px solid var(--line); text-transform: uppercase; letter-spacing: .04em; }
.gl-filtre__choix { border: 0; background: none; padding: 6px 10px; font: inherit; font-size: 13px; cursor: pointer; color: var(--ink); }
.gl-filtre__choix + .gl-filtre__choix { border-left: 1px solid var(--line); }
.gl-filtre__choix[aria-pressed="true"] { background: var(--revision-accent); color: #fff; font-weight: 700; }
.gl-filtre__choix:focus-visible { outline: 2px solid var(--revision-accent); outline-offset: -2px; }
.gl-toutes { margin-left: auto; }
.gl-compte-lignes { margin: 4px 0; }
.gl-balance tbody tr.ligne-cliquable { cursor: pointer; }
.gl-balance tbody tr.ligne-cliquable:hover td, .gl-balance tbody tr.ligne-cliquable:focus-visible td { background: #eef4f6; }
.gl-balance tr.fm-ligne-cycle td:first-child { border-left: 4px solid var(--cycle); }
.gl-ok { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 17px; border-radius: 3px; background: #dff0d8; color: #2d6a2d; border: 1px solid #9cc79c; font-weight: 700; }
.gl-solde-nul { color: var(--ok); font-weight: 400; font-style: italic; font-size: 12.5px; }

/* 3.19.0 (relecture) : totaux du grand livre sous l'en-tete des colonnes,
   chacun dans sa colonne, sur un fond propre (bleu canard des documents de
   revision) pour se distinguer des ecritures. */
.tableau-scroll thead tr.gl-totaux td {
  background: var(--revision-accent-clair); color: var(--revision-titre);
  border-top: 2px solid var(--revision-accent); border-bottom: 2px solid var(--revision-accent);
  font-size: 14.5px; font-weight: 700; height: 26px;
}
.tableau-scroll thead tr.gl-totaux td:first-child { text-align: left; font-weight: 600; color: var(--revision-accent-fonce); }
.tableau-scroll thead tr.gl-totaux td.gl-totaux__solde { background: var(--revision-col-n-total); }
/* 3.19.0 (relecture) : filtres Lettre / Solde / Revise repris au-dessus de la
   barre du compte : les fleches passent au compte voisin qui reste a traiter. */
.gl-filtres--navigation { margin: 6px 0 0; align-items: center; }
/* 3.21.0 (registre ligne 76) : case « ok » du compte dans la balance du
   grand livre, bouton « Marquer le compte révisé » de l'écran compte par compte. */
.gl-balance .gl-case-revise { margin: 0; width: 15px; height: 15px; cursor: pointer; accent-color: #2d6a2d; vertical-align: middle; }
.gl-filtres--navigation .gl-btn-reviser { margin-left: auto; }

.gl-filtres__titre { font-size: 12.5px; font-weight: 700; color: var(--ink-soft); text-transform: uppercase; letter-spacing: .04em; }

/* 3.19.0 (relecture) : feuilles maitresses et balance du grand livre en
   colonnes fixes. N et N-1 tiennent « -99 999 999 » (sans decimale) ou
   « -99 999 999,99 » (grand livre), alignes a droite ; ecarts K€, %, Ref,
   comptes et compteurs reduits a leur contenu ; seuls le libelle (intitule)
   et le commentaire s'ajustent a la largeur de l'ecran. Lignes resserrees. */
table.fm-tab { table-layout: fixed; }
.fm-tab th { padding: 2px 6px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fm-tab td { padding: 0 6px; height: 20px; line-height: 19px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fm-tab td.col-nombre, .fm-tab th.col-nombre { text-align: right; font-variant-numeric: tabular-nums; }
.fm-tab .fm-ok { width: 34px; }
.fm-tab .fm-compte { width: 66px; }
.fm-tab .fm-cycle { width: 50px; text-align: center; }
.fm-tab .fm-montant { width: 104px; }
.fm-tab .fm-ecart-col { width: 68px; }
/* En-tete d'une colonne etroite : sur deux lignes plutot que tronque. */
.fm-tab th.fm-ecart-col, .fm-tab th.fm-nb, .fm-tab th.gl-montant { white-space: normal; text-overflow: clip; }
.fm-tab .fm-pct { width: 48px; }
.fm-tab .fm-ref { width: 56px; }
.fm-tab .fm-nb { width: 66px; }
.fm-tab .fm-avancement { width: 124px; }
.fm-tab .fm-programme { width: 84px; text-align: center; }
.fm-tab .fm-libelle { width: auto; max-width: none; }
.fm-tab .fm-commentaire-col { width: auto; }
.fm-tab td .champ--inline { height: 18px; padding: 0 4px; font-size: 13px; line-height: 18px; }
.fm-tab td.fm-ref .champ--inline { padding: 0 2px; }
.fm-case-ok { height: 19px; }
.fm-case-ok span { width: 22px; height: 15px; line-height: 13px; font-size: 12px; }
.fm-tab .pastille-cycle { height: 17px; min-width: 22px; font-size: 12px; padding: 0 5px; }
.fm-tab .badge-avancement { transform: scale(.9); transform-origin: left center; }
.gl-balance .gl-lettrage { width: 82px; }
.gl-balance .gl-montant { width: 118px; }

/* 3.19.0 (relecture) : feuilles maitresses plus lisibles — police agrandie
   (15 px, 16 px pour la colonne N), lignes de 22 px, separation des lignes
   plus marquee, libelles en encre pleine. */
table.fm-tab { font-size: 15px; }
.fm-tab th { font-size: 14px; padding: 3px 6px; }
.fm-tab td { height: 22px; line-height: 21px; color: var(--ink); border-color: #bcc6d0; }
.fm-tab td.fm-col-n, .fm-tab tbody tr:nth-child(even):not(.fm-sous) td.fm-col-n { font-size: 16px; }
.fm-tab tbody tr:nth-child(even):not(.fm-sous) td { background: #f1f5f8; }
.fm-tab tbody tr:hover td { background: #e6f0f3; }
.fm-tab td .champ--inline { height: 20px; line-height: 20px; font-size: 14px; }
.fm-tab .fm-montant { width: 116px; }
.fm-tab .fm-ecart-col { width: 74px; }
.fm-tab .fm-pct { width: 52px; }
.fm-tab .fm-ref { width: 60px; }
.fm-tab .fm-compte { width: 72px; }
.fm-tab tr.fm-sous td, .fm-tab tr.fm-total td { font-size: 15px; }
.gl-balance.fm-tab { font-size: 14.5px; }
.gl-balance .gl-montant { width: 126px; }

/* Relecture 3.19.0 (Régis, 16/10/2026) : en-têtes N-1, N, Écarts et %
   centrés au-dessus de leur colonne ; les montants restent à droite. */
.fm-tab th.fm-montant, .fm-tab th.fm-ecart-col, .fm-tab th.fm-pct { text-align: center; }
/* Balance du grand livre : texte de tous les en-têtes de colonne centré
   (relecture de Régis, 16/10/2026). */
.gl-balance.fm-tab thead th, .gl-balance.fm-tab thead th.col-nombre { text-align: center; }

/* 3.20.0 (demande de Regis du 16/10/2026) : grand livre — selection des
   ecritures (somme debit / credit / solde, lettrage) et lettrage pose dans
   SoFi, d'une couleur propre (ambre), distinct du lettrage du fichier. */
.gl-col-sel { width: 30px; min-width: 30px; text-align: center; padding-left: 2px; padding-right: 2px; }
.gl-barre-selection { margin: 6px 0; padding-top: 6px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.gl-barre-selection[hidden] { display: none; }
.gl-col-lettrage { white-space: nowrap; }
.gl-lettrage-fichier { margin-right: 4px; }
.gl-lettrage-manuel {
  display: inline-block; padding: 0 5px; border-radius: 3px; line-height: 16px;
  background: #fdecc8; color: #8a4b00; border: 1px solid #e3a33b; font-weight: 700; font-size: 12.5px;
}
tr.ligne-selectionnee td .gl-lettrage-manuel { color: #8a4b00; }

/* 3.20.0 : balance du grand livre — colonne Intitule reduite a l'intitule
   le plus long, tableau a sa largeur naturelle (plus etire a toute la page). */
table.fm-tab.gl-balance { width: auto; table-layout: auto; }
.gl-balance th.fm-libelle, .gl-balance td.fm-libelle { width: auto; white-space: nowrap; overflow: visible; text-overflow: clip; }
/* Plafond : sur un ecran etroit, un intitule tres long est coupe (texte
   complet au survol) plutot que de faire deborder le tableau. */
.gl-balance .gl-intitule { display: block; max-width: max(300px, calc(100vw - 1130px)); overflow: hidden; text-overflow: ellipsis; }
.gl-balance th.fm-ok, .gl-balance td.fm-ok { min-width: 34px; }
.gl-balance th.fm-compte, .gl-balance td.fm-compte { min-width: 66px; }
.gl-balance th.gl-montant, .gl-balance td.col-montant { min-width: 118px; }
.gl-balance th.gl-lettrage { min-width: 82px; }

/* 3.22.0 : parcours guidé de la démonstration (parcoursGuide.js). Bulle fixe
   en bas à droite (pleine largeur sur téléphone), liseré pulsé sur
   l'élément à regarder. Couleurs du produit, jamais celles de l'agence. */
.parcours-demo { display: flex; gap: 14px; align-items: flex-start; width: 100%; margin: 14px 0 4px; padding: 14px 16px; text-align: left;
  cursor: pointer; font: inherit; color: #fff; border: 0; border-radius: 10px;
  background: linear-gradient(135deg, var(--sofi-bleu), #1d4670); box-shadow: 0 6px 18px rgba(19, 48, 79, .25); }
.parcours-demo:hover, .parcours-demo:focus-visible { background: linear-gradient(135deg, #18406a, #24578a); }
.parcours-demo:disabled { opacity: .7; cursor: wait; }
.parcours-demo__picto { flex: none; width: 44px; height: 44px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; background: var(--sofi-rouge); }
.parcours-demo__picto svg { width: 26px; height: 26px; }
.parcours-demo__libelles { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.parcours-demo__sur { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #ffb3bd; }
.parcours-demo__titre { font-size: 16px; font-weight: 700; line-height: 1.3; }
.parcours-demo__texte { font-size: 13px; font-weight: 700; color: #dfe8f2; }
.choix-demo__autres { margin-top: 12px; }
.choix-demo__autres summary { cursor: pointer; color: var(--ink-soft); font-size: 13px; }

.parcours-guide { position: fixed; right: 20px; bottom: 20px; z-index: 1200; width: min(400px, calc(100vw - 32px)); background: var(--surface);
  color: var(--ink); border: 1px solid var(--line); border-top: 4px solid var(--sofi-rouge); border-radius: 10px;
  box-shadow: 0 18px 48px rgba(16, 32, 52, .28); padding: 14px 16px 16px; display: grid; gap: 8px; }
.parcours-guide__tete { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.parcours-guide__etape { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--sofi-rouge); }
.parcours-guide__fermer { border: 0; background: transparent; font-size: 22px; line-height: 1; cursor: pointer; color: var(--ink-soft); padding: 0 4px; }
.parcours-guide__points { display: flex; gap: 5px; }
.parcours-guide__points i { width: 26px; height: 4px; border-radius: 2px; background: var(--line); }
.parcours-guide__points i.est-fait { background: var(--sofi-bleu); }
.parcours-guide__titre { margin: 0; font-size: 17px; color: var(--sofi-bleu); }
.parcours-guide__texte { margin: 0; font-size: 14px; line-height: 1.5; }
.parcours-guide__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.parcours-cible { outline: 3px solid var(--sofi-rouge) !important; outline-offset: 2px; border-radius: 4px; }
tr.parcours-cible { outline-offset: -2px; }
@media (prefers-reduced-motion: no-preference) {
  .parcours-cible { animation: parcours-pulse 1.6s ease-in-out infinite; }
  @keyframes parcours-pulse { 50% { outline-color: rgba(196, 18, 47, .35); } }
}
@media (max-width: 600px) {
  .parcours-guide { right: 8px; left: 8px; bottom: 8px; width: auto; }
}
.bandeau-demo__lien { margin-left: auto; color: #fff; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }

/* 3.22.0 : audience du site (onglet de l'éditeur, audienceSite.js). */
.audience-periodes { display: flex; gap: 6px; flex-wrap: wrap; }
.audience-graphique svg { width: 100%; height: auto; max-height: 220px; display: block; }
.audience-legende { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 12.5px; color: var(--ink-soft); margin-top: 6px; }
.audience-legende__item { display: inline-flex; align-items: center; gap: 6px; }
.audience-legende__item i { width: 12px; height: 12px; border-radius: 2px; display: inline-block; }
.audience-colonnes { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 0 18px; align-items: start; }
tr.parcours-cible, tr.parcours-cible td { cursor: pointer; }

/* 3.22.0 : documentation non consultable en démonstration (volet masqué). */
body.mode-demo .nav__groupe[data-groupe="documentation"] { display: none; }

/* ----------------------------------------------------------------------
   3.24.0 : impression du dossier de revision et note de synthese.
   Couleur des documents du dossier de revision (--revision-accent).
   ---------------------------------------------------------------------- */
.rv-outils { display: flex; justify-content: flex-end; gap: 8px; margin-bottom: 8px; }
.dialogue-impression { width: min(640px, 94vw); }
.dialogue-impression .dialogue-motif__corps h3 { color: var(--revision-accent); }
.imp-actions-rapides { display: flex; gap: 8px; }
.imp-arbre { max-height: min(56vh, 520px); overflow-y: auto; border: 1px solid var(--line); border-radius: 8px; padding: 6px 12px; }
.imp-groupe { border: 0; border-bottom: 1px solid var(--line); margin: 0; padding: 8px 0; }
.imp-groupe:last-child { border-bottom: 0; }
.imp-groupe legend { font-weight: 700; padding: 0; color: var(--revision-titre); }
.dialogue-motif__corps .imp-case { display: flex; flex-direction: row; align-items: center; gap: 8px; font-weight: 400; padding: 2px 0 2px 18px; cursor: pointer; }
.dialogue-motif__corps .imp-case--cycle { padding-left: 0; font-weight: 700; }
.dialogue-motif__corps .imp-niveau-2 { padding-left: 36px; }
.dialogue-motif__corps .imp-niveau-3 { padding-left: 54px; }
.imp-ref { font-weight: 700; color: #b3261e; min-width: 38px; font-variant-numeric: tabular-nums; }
.imp-piece span:last-child { font-style: italic; }
.dialogue-impression .dialogue-motif__actions { align-items: center; }
.dialogue-impression .dialogue-motif__actions [data-role=compte] { margin-right: auto; }

.ns-missions { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px; margin-top: 12px; }
.ns-mission { display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; border: 1px solid var(--line); border-left: 4px solid var(--revision-accent);
  border-radius: 8px; text-decoration: none; color: inherit; background: #fff; }
.ns-mission:hover { border-color: var(--revision-accent); box-shadow: 0 2px 8px rgba(22, 32, 43, 0.08); }
.ns-mission__titre { font-weight: 700; font-size: 16px; color: var(--revision-titre); }
.ns-mission__etat { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ns-entete { display: flex; gap: 14px; align-items: flex-end; flex-wrap: wrap; margin: 10px 0 14px; }
.ns-entete label { display: flex; flex-direction: column; gap: 4px; font-weight: 600; }
.ns-entete #ns-titre { width: min(520px, 80vw); }
.ns-blocs { display: flex; flex-direction: column; gap: 12px; }
.ns-bloc { border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.ns-bloc--reprise { background: #f7fafb; }
.ns-bloc__entete { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 6px 10px; border-bottom: 1px solid var(--line); }
.ns-bloc__type { font-size: 12.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--revision-accent); }
.ns-bloc__outils { margin-left: auto; display: flex; gap: 4px; }
.ns-barre { display: flex; gap: 2px; flex-wrap: wrap; }
.ns-barre__bold { font-weight: 700; }
.ns-barre__italic { font-style: italic; }
.ns-barre__underline { text-decoration: underline; }
.ns-editeur { min-height: 72px; padding: 10px 14px; outline: none; line-height: 1.45; }
.ns-editeur:focus { box-shadow: inset 0 0 0 2px var(--revision-accent-doux); }
.ns-editeur:empty::before { content: attr(data-placeholder); color: var(--texte-discret, #8a96a3); }
.ns-editeur h3 { font-size: 16px; color: var(--revision-titre); margin: 6px 0 4px; }
.ns-editeur p { margin: 0 0 6px; }
.ns-editeur ul, .ns-editeur ol { margin: 0 0 6px 22px; padding: 0; }
.ns-choix { display: flex; gap: 6px 14px; flex-wrap: wrap; align-items: center; padding: 6px 12px; }
.ns-choix label { display: flex; gap: 5px; align-items: center; }
.ns-choix-cycles summary { cursor: pointer; padding: 2px 12px; color: var(--revision-titre); }
.ns-apercu { padding: 8px 14px 10px; }
.ns-cycle { margin-bottom: 8px; }
.ns-cycle__titre { font-weight: 700; display: flex; gap: 6px; align-items: center; }
.ns-cycle__rubrique { padding-left: 26px; }
.ns-cycle__rubrique p { margin: 2px 0 6px; }
.ns-donnees__titre { font-weight: 700; margin-bottom: 4px; }
.ns-table { max-width: 640px; }
.ns-table td.col-montant, .ns-table th.col-montant { text-align: right; font-variant-numeric: tabular-nums; }
.ns-table .ns-total td { font-weight: 700; border-top: 1px solid var(--line-forte); }
.ns-barres { display: flex; align-items: flex-end; gap: 6px; height: 150px; max-width: 640px; padding-top: 14px; }
.ns-barres__col { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; min-width: 0; }
.ns-barres__barre { width: 70%; max-width: 28px; background: var(--revision-accent); border-radius: 2px 2px 0 0; min-height: 0; }
.ns-barres__val { font-size: 11px; font-variant-numeric: tabular-nums; }
.ns-barres__mois { font-size: 11px; color: var(--texte-discret, #6a7783); white-space: nowrap; }
.ns-barres__total { margin: 4px 0 0; }
.ns-indicateur { display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap; }
.ns-indicateur strong { font-size: 22px; color: var(--revision-accent); }
.ns-indicateur--vert strong { color: #1d7148; }
.ns-indicateur--orange strong { color: #b45f06; }
.ns-indicateur--rouge strong { color: #b3261e; }
.ns-ajout { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--line-forte); }
.ns-ajout select { max-width: 320px; }
.ns-pied { display: flex; gap: 10px; align-items: center; justify-content: flex-end; margin-top: 14px; flex-wrap: wrap; }
.ns-bloc .bouton--mini { padding: 2px 8px; font-size: 12.5px; line-height: 1.3; min-height: 0; }
.ns-table { width: auto; min-width: min(560px, 100%); } .ns-table th, .ns-table td { padding: 3px 12px; } .ns-table th { text-transform: uppercase; font-size: 12.5px; }
/* 3.25.0 : couverture et avant-propos de la note, encadré, chiffres clés (modèle d'impression). */
.ns-avant-propos { display: flex; flex-direction: column; gap: 4px; font-weight: 600; margin-bottom: 12px; }
.ns-avant-propos textarea { font: inherit; font-weight: 400; }
.ns-bloc--encadre .ns-editeur { background: #ece9f7; border-left: 4px solid var(--revision-module); }
.ns-chiffres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; max-width: 640px; }
.ns-chiffres div { border: 1px solid var(--line); padding: 8px; text-align: center; display: flex; flex-direction: column; }
.ns-chiffres strong { font-size: 20px; color: var(--revision-accent); font-variant-numeric: tabular-nums; }

/* 3.26.0 : en-tête du dossier de révision — nom du cycle plus grand, avancement en évidence (relecture du 17/10/2026). */
.rv-bandeau__titre { font-size: 22px; line-height: 1.15; }
.rv-bandeau__avancement { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 4px; opacity: 1; }
.rv-bandeau__pct { font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; }
.rv-bandeau__jauge { display: inline-block; width: 120px; height: 9px; border-radius: 5px; background: rgba(255, 255, 255, .28); overflow: hidden; }
.rv-bandeau__jauge i { display: block; height: 100%; background: #fff; border-radius: 5px; }
@media (max-width: 700px) { .rv-bandeau__avancement { justify-content: flex-start; } }

/* 3.26.0 : feuille maîtresse — bloc Bilan, ligne vide, en-tête repris pour le Compte de résultat. */
.fm-tab tbody.fm-separation td { height: 18px; background: #fff !important; border: 0; }
.fm-tab tbody.fm-separation tr.fm-entete-repris th { position: static; }

/* 3.26.0 : tri sur toutes les colonnes des tableaux (triTableaux.js). */
th.th-triable { cursor: pointer; user-select: none; }
th.th-triable:hover, th.th-triable:focus-visible { text-decoration: underline; outline: none; }
th.th-triable { position: relative; }
th.th-triable .tri-fleche { position: absolute; right: 2px; top: 50%; transform: translateY(-50%); font-size: 10px; opacity: 0; text-decoration: none; pointer-events: none; }
th.th-triable:hover .tri-fleche, th.th-triable:focus-visible .tri-fleche { opacity: .55; }
th.th-triable[aria-sort="ascending"] .tri-fleche, th.th-triable[aria-sort="descending"] .tri-fleche { opacity: 1; }

/* ---------- 3.27.0 : pièce jointe annotée (feuilles de travail) ---------- */
.ft-onglet__pj { display: inline-flex; vertical-align: -2px; margin-right: 4px; }
.ft-onglet__pj svg, .ft-onglet__pj img { width: 13px; height: 13px; }
.fm-tab td.fm-ref { position: relative; }
.fm-ref-lien { position: absolute; right: 1px; top: 50%; transform: translateY(-50%); font-size: 11px; line-height: 1;
  color: #c0262d; text-decoration: none; font-weight: 700; padding: 1px 2px; border-radius: 3px; }
.fm-ref-lien:hover, .fm-ref-lien:focus-visible { background: #fbe3e3; }
.pj { margin: 10px 0; }
.pj-outils { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 6px 8px; border: 1px solid var(--bordure, #d8dee4);
  border-radius: 6px; background: #f7f9fb; position: sticky; top: 0; z-index: 3; }
.pj-modes { display: inline-flex; gap: 2px; }
.pj-modes .bouton[aria-pressed="true"] { background: var(--brand, #1d3a5f); color: #fff; }
.pj-zoom { display: inline-flex; align-items: center; gap: 4px; }
.pj-fichier { margin-left: auto; color: var(--texte-discret, #5d6a77); font-size: 12px; max-width: 32ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pj-corps { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; margin-top: 10px; align-items: start; }
.pj-pages { --pj-zoom: 1; display: flex; flex-direction: column; align-items: center; gap: 14px; padding: 12px; background: #e9edf1;
  border-radius: 6px; max-height: 78vh; overflow: auto; outline: none; }
.pj-pages:focus-visible { box-shadow: 0 0 0 2px var(--brand, #1d3a5f); }
.pj-page { position: relative; margin: 0; width: calc(820px * var(--pj-zoom)); max-width: none; box-shadow: 0 1px 4px rgba(0,0,0,.25); background: #fff; }
.pj-page img { display: block; width: 100%; height: auto; user-select: none; }
.pj-calque { position: absolute; inset: 0; }
.pj-pages[data-mode="surlignage"] .pj-calque, .pj-pages[data-mode="note"] .pj-calque { cursor: crosshair; }
.pj-num { position: absolute; top: 6px; right: 8px; background: var(--brand, #1d3a5f); color: #fff; font-size: 11px; font-weight: 700;
  padding: 1px 6px; border-radius: 3px; pointer-events: none; }
.pj-annot { position: absolute; box-sizing: border-box; }
.pj-surlignage { mix-blend-mode: multiply; opacity: .45; cursor: pointer; }
.pj-note { border: 2px solid; cursor: pointer; background: transparent; }
.pj-apercu { border: 1px dashed #333; opacity: .5; }
.pj-annot--choisie { outline: 2px solid #1b2733; outline-offset: 1px; }
.pj-c-jaune { --pj-c: #ffde3d; } .pj-c-vert { --pj-c: #78d678; } .pj-c-rouge { --pj-c: #f06e6e; } .pj-c-bleu { --pj-c: #6eaaf0; }
.pj-surlignage, .pj-apercu { background: var(--pj-c); }
.pj-note { border-color: var(--pj-c); }
.pj-pastille { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 4px; border-radius: 9px;
  background: var(--brand, #1d3a5f); color: #fff; font-size: 11px; font-weight: 700; border: 1px solid #fff; box-sizing: border-box; }
.pj-note .pj-pastille { position: absolute; left: -10px; top: -10px; }
.pj-notes { border: 1px solid var(--bordure, #d8dee4); border-radius: 6px; padding: 10px; max-height: 78vh; overflow: auto; background: #fff; }
.pj-notes__titre { margin: 0 0 4px; font-size: 15px; }
.pj-aide { font-size: 12px; margin: 0 0 8px; }
.pj-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.pj-item { border: 1px solid var(--bordure, #d8dee4); border-left: 4px solid var(--pj-c, #ccc); border-radius: 5px; padding: 6px 8px; }
.pj-item--choisi { box-shadow: 0 0 0 2px var(--brand, #1d3a5f); }
.pj-item--surl { border-left-color: #9aa6b2; }
.pj-item__tete { display: flex; align-items: center; gap: 6px; font-size: 12px; margin-bottom: 4px; }
.pj-item__tete .pj-suppr { margin-left: auto; }
.pj-saisie { width: 100%; box-sizing: border-box; resize: vertical; font-size: 13px; }
.pj-texte { margin: 0; white-space: pre-wrap; font-size: 13px; }
.pj-renvois { margin: 4px 0 0; font-size: 12px; color: var(--texte-discret, #5d6a77); }
.pj-renvoi { font-weight: 700; color: #c0262d; text-decoration: none; padding: 0 2px; border-radius: 3px; }
a.pj-renvoi:hover, a.pj-renvoi:focus-visible { background: #fbe3e3; text-decoration: underline; }
.pj-renvoi--inconnu { color: #8a96a3; font-weight: 600; text-decoration: line-through dotted; }
.pj-surl-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 3px; font-size: 12px; }
.pj-surl-liste li { display: flex; align-items: center; gap: 6px; }
.pj-carre { width: 12px; height: 12px; border-radius: 2px; background: var(--pj-c); }
@media (max-width: 1100px) {
  .pj-corps { grid-template-columns: 1fr; }
  .pj-page { width: min(100%, calc(820px * var(--pj-zoom))); }
}
.lien-bouton { background: none; border: 0; padding: 0; color: var(--brand, #1d3a5f); text-decoration: underline; cursor: pointer; font: inherit; }

/* ---------- 3.28.0 : reprise N+1 des feuilles de travail ---------- */
.ft-badge-n1 { background: #6b7a89; }
.ft-cel--a-revoir { box-shadow: inset 0 0 0 2px #e08a1e; background-image: linear-gradient(225deg, #e08a1e 6px, transparent 6px); }
.ft-a-revoir { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 8px 0; padding: 7px 10px;
  border: 1px solid #f0c27a; border-left: 4px solid #e08a1e; border-radius: 5px; background: #fff7ea; font-size: 13px; }
.ft-a-revoir span { flex: 1; min-width: 220px; }

/* ---------- 3.29.0 : fichier des écritures comptables ---------- */
.fec-cadre { margin-top: 14px; padding: 10px 12px; border: 1px solid var(--bordure, #d8dee4); border-radius: 6px; background: #f7f9fb; }
.fec-cadre__titre { margin: 0 0 4px; font-weight: 700; }
.fec-cadre .avis { margin-top: 10px; }
.fec-cadre .avis ul { margin: 6px 0; padding-left: 18px; }

/* ------------------------------------------------------------------ */
/* 3.30.0 : pilotage de la gestion comptable (maquette du 18/10/2026)  */
/* ------------------------------------------------------------------ */
.pc-bandeau {
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px;
  background: var(--revision-accent); color: #fff; border-radius: var(--rayon); padding: 14px 20px;
  border-bottom: 4px solid var(--module-pilotage); /* 3.68.0 : filet du module (charte B) */
}
.pc-bandeau > div:first-child { display: flex; flex-direction: column; gap: 2px; }
.pc-bandeau__sur { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: #dcecf0; }
.pc-bandeau__titre { font-size: 22px; font-weight: 700; }
.pc-bandeau__outils { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.pc-comparer { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.pc-comparer select { font: inherit; padding: 5px 8px; border-radius: 6px; border: 1px solid #c9d0d7; background: #fff; color: #1b2733; opacity: 1; }
.pc-fleche { font-size: 18px; margin-left: 6px; vertical-align: 6px; }
.pc-bandeau .bouton--discret { background: #fff; }
.pc-message { margin-top: 10px; }
.pc-entete { padding-bottom: 12px; }
.pc-tuiles { margin-bottom: 16px; }
.badge-chiffre__complement { font-size: 12.5px; font-weight: 700; color: rgba(255, 255, 255, .85); margin-top: 3px; white-space: nowrap; }
.pc-tuile .badge-chiffre__nombre { font-size: 32px; }
.pc-colonnes { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 460px), 1fr)); gap: 16px; align-items: start; }
.pc-colonnes--3-2 { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
@media (max-width: 1280px) { .pc-colonnes--3-2 { grid-template-columns: minmax(0, 1fr); } }
.pc-equation { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 10px 0; }
.pc-equation__case {
  flex: 1 1 130px; display: flex; flex-direction: column; gap: 2px; padding: 10px 12px;
  border-radius: 8px; background: var(--revision-accent-clair); color: var(--revision-titre);
}
.pc-equation__case span { font-size: 12.5px; }
.pc-equation__case b { font-size: 24px; font-variant-numeric: tabular-nums; }
.pc-equation__case--fort { background: var(--revision-accent-fonce); color: #fff; }
.pc-equation__op { font-size: 24px; font-weight: 700; color: var(--revision-accent); }
.pc-ok { color: var(--ok); font-weight: 700; }
.pc-ko { color: var(--danger); font-weight: 700; }
.pc-points { margin: 0; padding-left: 20px; line-height: 1.55; }
.pc-source { margin-top: 10px; }
/* Tableaux : en-têtes à la couleur du dossier de révision, colonne N
   accentuée comme les feuilles maîtresses, cellule N du total plus foncée
   que la ligne (relecture du 18/10/2026). */
.pc-tab { font-variant-numeric: tabular-nums; }
.pc-tab th { background: var(--revision-accent); color: #fff; text-align: center; white-space: nowrap; }
.pc-tab th.pc-th-lib { text-align: left; }
.pc-tab th.pc-col-n { background: var(--revision-accent-fonce); font-size: 14px; }
.pc-tab td { height: 21px; }
.pc-tab td.col-montant { text-align: right; white-space: nowrap; }
.pc-tab td.pc-col-n { background: var(--revision-col-n); font-weight: 700; font-size: 14.5px; }
.pc-tab th, .pc-tab td { padding: 3px 8px; line-height: 1.3; vertical-align: middle; }
.pc-tab td.pc-lib { min-width: 210px; }
.pc-tab td.pc-comptes { color: var(--ink-soft); font-size: 12px; max-width: 130px; }
.pc-tab tr.pc-ligne--sous td { background: #dde3ea; font-weight: 700; }
.pc-tab tr.pc-ligne--sous td.pc-col-n { background: var(--revision-col-n-total); }
.pc-tab tr.pc-ligne--total td { background: #142943; color: #fff; font-weight: 700; }
.pc-tab tr.pc-ligne--total td.pc-col-n { background: #0f2236; color: #fff; font-size: 15px; }
.pc-tab tr.pc-repliable { cursor: pointer; }
.pc-tab tr.pc-repliable:hover td { background: var(--brand-soft); }
.pc-tab tr.pc-repliable:hover td.pc-col-n { background: var(--revision-col-n-total); }
.pc-chevron { display: inline-block; width: 14px; color: var(--revision-accent); }
.pc-tab tr.pc-detail td { font-size: 13px; color: var(--ink-soft); background: #fbfcfd; }
.pc-tab tr.pc-detail td.pc-lib { padding-left: 28px; }
.pc-tab tr.pc-detail td.pc-col-n { background: #f0f6f8; font-weight: 400; font-size: 13px; }
.pc-cases { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 12px; margin-bottom: 16px; }
.pc-case { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; display: flex; flex-direction: column; gap: 4px; }
.pc-case b { font-size: 24px; font-variant-numeric: tabular-nums; }
.pc-case span { font-size: 13px; color: var(--ink-soft); }
.pc-case--alerte { border-color: var(--danger); box-shadow: inset 0 0 0 1px var(--danger); }
.pc-fonctionnel { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); gap: 18px; }
.pc-fonctionnel__titre { display: block; font-weight: 700; color: var(--ink-soft); margin-bottom: 4px; }
.pc-masses { height: 220px; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 6px; overflow: hidden; }
.pc-masse { display: flex; justify-content: space-between; padding: 4px 10px; font-size: 13px; min-height: 22px; overflow: hidden; }
.pc-masse--immo { background: var(--revision-accent); color: #fff; }
.pc-masse--tres { background: #142943; color: #fff; }
.pc-masse--circ { background: #b9d8e0; }
.pc-masse--ress { background: #5d6a77; color: #fff; }
.pc-masse--dettes { background: #c9d0d7; }
.pc-structure { display: flex; height: 34px; border-radius: 6px; overflow: hidden; font-size: 12.5px; color: #fff; }
.pc-part { padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 30px; }
.pc-part--1 { background: #142943; }
.pc-part--2 { background: var(--revision-accent); }
.pc-part--3 { background: #5f9fb0; }
.pc-part--4 { background: #5d6a77; }
.pc-part--5 { background: #8a96a3; }
.pc-pastille { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 8px; vertical-align: middle; background: #4f6582; }
.pc-pastille--vert { background: #2f9e63; }
.pc-pastille--orange { background: #ef9a2b; }
.pc-pastille--rouge-plein { background: #b23a2e; }
.pc-origine { margin-left: 8px; font-size: 12.5px; }
.pc-tab tr.pc-ind-detail td { background: #fbfcfd; }
.pc-form { display: flex; flex-direction: column; gap: 8px; padding: 6px 4px; }
.pc-form p { margin: 0; }
.pc-form__ligne { display: flex; flex-wrap: wrap; gap: 14px; }
.pc-champ { display: flex; flex-direction: column; gap: 3px; font-size: 13px; font-weight: 700; min-width: 180px; }
.pc-champ input { font: inherit; font-weight: 400; padding: 5px 8px; border: 1px solid #c9d0d7; border-radius: 6px; }
.pc-champ .texte-discret { font-weight: 400; }
.pc-form__actions { display: flex; flex-wrap: wrap; gap: 8px; }
.pc-base-tab input { width: 100%; box-sizing: border-box; font: inherit; padding: 3px 6px; border: 1px solid #c9d0d7; border-radius: 4px; }
@media print {
  .pc-bandeau__outils, .onglets-page, .nav, .barre-haute { display: none !important; }
  .pc-tab tr.pc-detail[hidden] { display: none; }
  .badge-visuel__survol { display: none !important; }
}

/* 3.31.0 : pilotage de la gestion budgétaire (maquette validée le 18/10/2026) */
#gb-contenu .exe-entete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
#gb-contenu .exe-titre{margin:0;font-size:19px;letter-spacing:.03em;color:#142943}
#gb-contenu .sources{display:flex;flex-wrap:wrap;gap:8px;font-size:12.5px}
#gb-contenu .src{padding:3px 9px;border-radius:12px;border:1px solid}
#gb-contenu .src.ancien{background:#fff4e0;color:#8a4b00;border-color:#d08a1e}
#gb-contenu .src.perime{background:#fbeaea;color:#a12020;border-color:#b02030}
#gb-contenu .src.frais{background:#e3f4ea;color:#1b6b42;border-color:#2f9e63}
#gb-contenu .src.neutre{background:#f4f7fa;color:#5d6a77;border-color:#d5dce3}
#gb-contenu .exe{border-collapse:collapse;table-layout:fixed;font-size:13.5px;font-variant-numeric:tabular-nums;width:auto}
#gb-contenu .exe th{font-size:11px;font-weight:700;text-transform:uppercase;padding:3px 4px;text-align:center;line-height:13px;white-space:normal;vertical-align:middle}
#gb-contenu .exe th:not(.titre-section):not(.sp),#gb-contenu .exe td.k{width:62px;min-width:62px;max-width:62px;box-sizing:border-box}
#gb-contenu .exe th.titre-section,#gb-contenu .exe td.lib{width:330px;min-width:330px;box-sizing:border-box}
#gb-contenu .exe th.sp,#gb-contenu .exe td.sp{width:12px;min-width:12px;max-width:12px;padding:0;border:0!important;background:none!important}
#gb-contenu .exe th.titre-section{text-align:left;color:#142943;font-size:15px;line-height:18px;background:none;border:0;padding-left:0;white-space:nowrap}
#gb-contenu .exe th.bud{background:#1d3a5f;color:#fff;border:1px solid #fff}
#gb-contenu .exe th.bud.fort{background:#24697a}
#gb-contenu .exe th.emis{background:#e6f4ec;color:#1b6b42;border:1px solid #2f9e63}
#gb-contenu .exe th.eng{background:#a8741a;color:#fff;border:1px solid #a8741a}
#gb-contenu .exe th.exe-col{background:#2f9e63;color:#fff;border:2px solid #1b6b42}
#gb-contenu .exe th.marine{background:#142943;color:#fff;border:1px solid #142943}
#gb-contenu .exe td{padding:1px 8px;height:19px;line-height:17px;border-bottom:1px dotted #b8c2cc;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#gb-contenu .exe td.lib{border-left:1px solid #1d3a5f;border-right:1px solid #1d3a5f}
#gb-contenu .exe tr.premiere td{border-top:1px solid #1d3a5f}
#gb-contenu .exe .code{display:inline-block;width:38px;color:#4a5866}
#gb-contenu .exe td.k{width:62px;min-width:62px;max-width:62px;box-sizing:border-box}
#gb-contenu .exe td.k{position:relative;text-align:right;padding:1px 5px;border-left:1px solid #d5dce3;overflow:visible;cursor:default}
#gb-contenu .exe td.bud{background:#eef1f5}
#gb-contenu .exe td.bud.fort{background:#dde3ea;font-weight:700}
#gb-contenu .exe td.emis{color:#1b6b42}
#gb-contenu .exe td.exe-col{background:#e6f4ec;font-weight:700;color:#1b6b42;border-left:2px solid #2f9e63;border-right:2px solid #2f9e63}
#gb-contenu .exe td.eng{font-weight:700;color:#7a4a00;background:#fdf6e7}
#gb-contenu .exe td.na,#gb-contenu .exe th.na{color:#9aa6b2}
#gb-contenu .exe td.marine{border-left:2px solid #142943;border-right:2px solid #142943;font-weight:700;color:#142943}
#gb-contenu .exe td.neg{color:#b02030;font-weight:700}
#gb-contenu .exe tr.report td{color:#1d5fb8;font-weight:700}
#gb-contenu .exe tr.report td .code,#gb-contenu .exe tr.virement td .code,#gb-contenu .exe tr.ordre td .code{color:inherit}
#gb-contenu .exe tr.virement td{color:#6b3fa0;font-weight:700}
#gb-contenu .exe tr.ordre td{color:#b4530a}
#gb-contenu .exe tr.depasse td{background:#fbeaea!important;color:#a12020!important;font-weight:700}
#gb-contenu .exe tr.depasse td.lib{box-shadow:inset 4px 0 0 #b02030}
#gb-contenu .exe tr.total td{background:#dde3ea;font-weight:700;border-top:1px solid #1d3a5f;border-bottom:2px solid #1d3a5f}
#gb-contenu .exe tr.total td.bud{background:#1d3a5f;color:#fff}
#gb-contenu .exe tr.total td.exe-col{background:#2f9e63;color:#fff}
#gb-contenu .exe tr.total td.marine{background:#142943;color:#fff}
#gb-contenu .exe tr.total td.lib{text-transform:uppercase;color:#142943}
#gb-contenu .exe tr.solde td{border:0;font-weight:700;font-size:12.5px}
#gb-contenu .exe tr.solde td{height:26px;font-size:14px}
#gb-contenu .exe tr.solde td.lib{font-size:14px;text-transform:uppercase;letter-spacing:.02em}
#gb-contenu .exe tr.solde td.lib{text-align:right;padding-right:10px}
#gb-contenu .exe tr.solde td.res{font-size:14px}
#gb-contenu .exe tr.solde td.res-pos{background:#e3f4ea;color:#1b6b42;border:1px solid #2f9e63}
#gb-contenu .exe tr.solde td.res-nul{background:#f4f7fa;color:#5d6a77;border:1px solid #c9d0d7}
#gb-contenu .exe tr.solde td.res.fort{font-size:15px;box-shadow:inset 0 0 0 1px currentColor}
#gb-contenu .exe tr.solde td.lib small{font-size:11px;text-transform:none;font-weight:400}
#gb-contenu .exe tr.solde td.res-neg{background:#fbeaea;color:#8e1b1b;border:1px solid #b02030}
#gb-contenu .exe td.pos{color:#1d7148}
#gb-contenu .exe td.negtxt{color:#b02030}
#gb-contenu .exe tr.espace td{border:0;height:12px}
#gb-contenu .exe .bulle{display:none;position:absolute;z-index:20;right:0;top:calc(100% + 4px);padding:6px 9px;border-radius:6px;background:#1f2a3a;color:#fff;font-size:12.5px;font-weight:400;font-style:normal;white-space:nowrap;box-shadow:0 6px 18px rgba(0,0,0,.18)}
#gb-contenu .exe td.k:hover .bulle{display:block}
#gb-contenu .exe tr td.sp,#gb-contenu .exe tr th.sp{background:none!important;border:0!important;box-shadow:none!important}
#gb-contenu .exe td.k:hover{outline:2px solid #1d3a5f;outline-offset:-2px}
#gb-contenu .gb-ca,#gb-contenu .gb-ve{border-collapse:collapse;table-layout:fixed;font-size:13.5px;font-variant-numeric:tabular-nums;width:100%;min-width:900px}
#gb-contenu .gb-ve{min-width:640px}
#gb-contenu .gb-ca col.c-code{width:44px}
#gb-contenu .gb-ca col.c-lib,#gb-contenu .gb-ve col.c-lib{width:auto}
#gb-contenu .gb-ca col.c-n,#gb-contenu .gb-ve col.c-n{width:84px}
#gb-contenu .gb-ca col.c-ctl{width:64px}
#gb-contenu .gb-ca th:not(.titre-section):not(.ctl),#gb-contenu .gb-ca td.n,#gb-contenu .gb-ve th:not(.titre-section),#gb-contenu .gb-ve td.n{width:84px;min-width:84px;max-width:84px;box-sizing:border-box}
#gb-contenu .gb-ca th.ctl,#gb-contenu .gb-ca td.ctl{width:64px;min-width:64px;max-width:64px;box-sizing:border-box}
#gb-contenu .gb-ca th.t-code{width:44px;overflow:visible;white-space:nowrap;position:relative;z-index:1}
#gb-contenu .gb-ca td.code{width:44px;min-width:44px;max-width:44px;box-sizing:border-box}
#gb-contenu .gb-ca th,#gb-contenu .gb-ve th{font-size:11px;font-weight:700;text-transform:uppercase;padding:3px 4px;text-align:center;line-height:13px;vertical-align:middle}
#gb-contenu .gb-ca th.titre-section,#gb-contenu .gb-ve th.titre-section{text-align:left;color:#142943;font-size:15px;line-height:18px;background:none;border:0;padding-left:0;text-transform:none}
#gb-contenu .gb-ca th.bud,#gb-contenu .gb-ve th.bud{background:#1d3a5f;color:#fff;border:1px solid #fff}
#gb-contenu .gb-ca th.exe-col,#gb-contenu .gb-ve th.exe-col{background:#2f9e63;color:#fff;border:2px solid #1b6b42}
#gb-contenu .gb-ca th.exe2{background:#e6f4ec;color:#1b6b42;border:1px solid #2f9e63}
#gb-contenu .gb-ca th.rar{background:#fff;color:#142943;border:1px solid #1d3a5f}
#gb-contenu .gb-ca th.ann{background:#142943;color:#fff;border:1px solid #142943}
#gb-contenu .gb-ca th.ctl{background:#eef1f4;color:#5d6a77;border:1px dashed #9aa6b2}
#gb-contenu .gb-ca td,#gb-contenu .gb-ve td{padding:1px 6px;height:19px;line-height:17px;border-bottom:1px dotted #b8c2cc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#gb-contenu .gb-ca td.code{color:#4a5866;border-left:1px solid #1d3a5f;padding-left:8px}
#gb-contenu .gb-ca td.lib{border-right:1px solid #1d3a5f}
#gb-contenu .gb-ve td.lib{border-left:1px solid #1d3a5f;border-right:1px solid #1d3a5f;padding-left:8px}
#gb-contenu .gb-ca tr.premiere td,#gb-contenu .gb-ve tr.premiere td{border-top:1px solid #1d3a5f}
#gb-contenu .gb-ca td.n,#gb-contenu .gb-ve td.n{text-align:right;border-left:1px solid #d5dce3;position:relative;overflow:visible}
#gb-contenu .gb-ca td.bud{background:#eef1f5}
#gb-contenu .gb-ca td.exe-col,#gb-contenu .gb-ve td.exe-col{background:#e6f4ec;font-weight:700;color:#1b6b42;border-left:2px solid #2f9e63;border-right:2px solid #2f9e63}
#gb-contenu .gb-ca td.ann{font-weight:700;color:#142943}
#gb-contenu .gb-ca td.ctl{text-align:center;font-size:12px;border-left:1px dashed #9aa6b2;border-right:1px dashed #9aa6b2}
#gb-contenu .gb-ca td.ctl.ok{color:#1d7148}
#gb-contenu .gb-ca td.ctl.ko{color:#a12020;font-weight:700;background:#fbeaea}
#gb-contenu .gb-ca td.ecart{background:#fbeaea!important;color:#a12020!important;font-weight:700;box-shadow:inset 0 -2px 0 #b02030;cursor:default}
#gb-contenu .gb-ca .bulle{display:none;position:absolute;z-index:20;right:0;top:calc(100% + 4px);padding:6px 9px;border-radius:6px;background:#1f2a3a;color:#fff;font-size:12.5px;font-weight:400;white-space:nowrap;box-shadow:0 6px 18px rgba(0,0,0,.18)}
#gb-contenu .gb-ca td.ecart:hover .bulle{display:block}
#gb-contenu .gb-ca tr.st td,#gb-contenu .gb-ve tr.st td{background:#eef1f5;font-weight:700}
#gb-contenu .gb-ca tr.st td.lib{font-style:italic}
#gb-contenu .gb-ca tr.total td,#gb-contenu .gb-ve tr.total td{background:#dde3ea;font-weight:700;border-top:1px solid #1d3a5f;border-bottom:2px solid #1d3a5f}
#gb-contenu .gb-ca tr.total td.exe-col,#gb-contenu .gb-ve tr.total td.exe-col{background:#2f9e63;color:#fff}
#gb-contenu .gb-ca tr.total td.lib,#gb-contenu .gb-ve tr.total td.lib{text-transform:uppercase;color:#142943}
#gb-contenu .gb-ca tr.report td,#gb-contenu .gb-ve tr.report td{color:#1d5fb8;font-weight:700}
#gb-contenu .gb-ca tr.virement td{color:#6b3fa0;font-weight:700}
#gb-contenu .gb-ca tr.ordre td{color:#b4530a}
#gb-contenu .gb-ve td.pos{color:#1d7148}
#gb-contenu .gb-ve td.neg{color:#b02030}
#gb-contenu .exe td.lib a{color:inherit;text-decoration:none}
#gb-contenu .exe td.lib a:hover{text-decoration:underline}
#gb-contenu .tableau-scroll{margin-bottom:16px}
#gb-contenu .exe-entete + .tableau-scroll, #gb-contenu .tableau-scroll:has(> table.exe), #gb-contenu .tableau-scroll:has(> table.gb-ca), #gb-contenu .tableau-scroll:has(> table.gb-ve){border:0;box-shadow:none}
.gb-outils{display:flex;gap:8px;flex-shrink:0}
.gb-sources-ligne{margin:0 0 10px}
.gb-alerte{border-color:var(--danger);box-shadow:inset 4px 0 0 var(--danger)}
.gb-alerte .panneau__titre{color:var(--danger)}
.gb-barres{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:14px 28px}
.gb-barres__groupe h3{margin:0 0 6px;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:#142943}
.gb-barre{display:grid;grid-template-columns:minmax(0,1fr) 160px 48px;align-items:center;gap:10px;padding:3px 0;text-decoration:none;color:inherit;font-size:13.5px}
.gb-barre:hover .gb-barre__lib{text-decoration:underline}
.gb-barre__lib{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gb-barre__piste{position:relative;height:12px;background:#eef1f4;border-radius:3px}
.gb-barre__piste i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:#1d3a5f}
.gb-barre--vert .gb-barre__piste i{background:#2f9e63}
.gb-barre--orange .gb-barre__piste i{background:#ef9a2b}
.gb-barre--rouge .gb-barre__piste i{background:#b23a2e}
.gb-barre__piste em{position:absolute;top:-3px;bottom:-3px;width:2px;background:#1b2733}
.gb-barre__val{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.gb-choix{margin-bottom:10px}
.gb-choix select{font:inherit;padding:5px 8px;border:1px solid #c9d0d7;border-radius:6px;margin-left:6px;max-width:100%}
.gb-articles th.gb-th-eng,.tableau th.gb-th-eng{background:#a8741a;color:#fff}
.tableau td.gb-eng{color:#7a4a00;font-weight:700}
.gb-articles tr.gb-info td{background:#fff4e0}
.gb-articles td.gb-neg{color:#9a5a00;font-weight:700}
.gb-mini{height:10px;background:#eef1f4;border-radius:3px;position:relative;min-width:120px}
.gb-mini i{position:absolute;left:0;top:0;bottom:0;background:#1d3a5f;border-radius:3px}
.gb-mini b{position:absolute;top:-3px;bottom:-3px;width:2px;background:#1b2733}
.gb-espace{height:14px}
.gb-depots{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,360px),1fr));gap:14px}
.gb-depots #gb-comptes-rendus{grid-column:1/-1}
.gb-depots #gb-comptes-rendus p{margin:2px 0}
.gb-badge{display:inline-block;font-size:12px;font-weight:700;border-radius:4px;padding:1px 6px;color:#fff;margin-right:4px}
.gb-docs tr.groupe td{background:#fff;font-weight:700;color:#4a5866;font-size:12.5px;text-transform:uppercase;padding-top:10px}
@media print { .gb-outils, .gb-depots { display:none !important; } }

/* ======================================================================
   3.32.0 — Menu latéral au modèle validé le 18/10/2026 : carte du dossier,
   socle en tuiles (tableau de bord, informations, questions), MODULES
   repliables à pastille de couleur, Réglages et compte en pied de menu.
   ====================================================================== */
:root {
  /* 3.53.0 (registre ligne 113, maquette validée le 22/10/2026) : une
     nuance par module, dégradé régulier du bleu de l'agence vers le violet
     dans l'ordre du menu (teinte 212° → 272°, même clarté) ; la Régie du
     régisseur prend la nuance suivante (284°) ; Réglages en gris discret. */
  /* 3.68.0 : charte B retenue le 24/10/2026 (onglet Design) — une nuance
     par module, du bleu vers le violet, plus soutenue pour porter un
     pictogramme blanc ; rouge Marianne réservé à la clôture des comptes. */
  --module-tdb: #2f6fb0;
  --module-pilotage: #3a63b8;
  --module-quotidien: #4a57b8;
  --module-revision: #5b4fb3;
  --module-immobilisations: #6a48ad;
  --module-poste-client: #7151ad;
  --module-tva: #7d4aa8;
  --module-documentation: #7a43a6;
  --module-regie: #8a5cb8;
  --module-reglages: #9aa5b0;
  --module-cloture: #E1000F;
  --module-glyphe: #ffffff; /* pictogramme blanc posé sur la pastille du module */
}
.nav { padding: 0; gap: 0; overflow: visible; }
@media (min-width: 1025px) { .nav { width: 264px; } }
.nav__panneau { flex: 1; min-height: 0; min-width: 0; display: flex; flex-direction: column; }
.nav__panneau > nav { flex: 1; min-height: 0; overflow-y: auto; padding: 0 12px 10px; gap: 2px; }

/* Marque SoFi et agence, sur une ligne */
.nav .nav__marque { flex-wrap: wrap; justify-content: space-between; gap: 8px; padding: 16px 16px 12px; }
.nav .nav__marque .logo-sofi { font-size: 30px; }
.nav .nav__agence { flex-direction: row; align-items: center; gap: 6px; padding: 0; max-width: 140px; text-align: right; font-size: 11.5px; font-weight: 400; color: rgba(255, 255, 255, .65); }
.nav .nav__agence-logo { max-width: 60px; max-height: 32px; padding: 2px; }
body.espace-editeur .nav__marque::after { width: 100%; margin-top: 4px; }

/* Carte du dossier ouvert */
.nav__dossier { position: relative; padding: 0 12px 12px; }
.nav__dossier-carte {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px;
  border: 1px solid rgba(255, 255, 255, .16); border-radius: 10px; background: rgba(255, 255, 255, .06);
  color: #fff; font: inherit; text-align: left; cursor: pointer;
}
.nav__dossier-carte:hover { background: rgba(255, 255, 255, .11); }
.nav__dossier-carte:focus-visible { outline: 2px solid #9fc7f0; outline-offset: 1px; }
.nav__dossier-carte--fige { cursor: default; }
.nav__dossier-carte--fige:hover { background: rgba(255, 255, 255, .06); }
.nav__dossier-carte--fige .nav__dossier-fleches { display: none; }
.nav__dossier-image, .nav__pop-logo {
  width: 44px; height: 44px; flex: none; border-radius: 9px; background: #fff; overflow: hidden;
  display: flex; align-items: center; justify-content: center; color: var(--brand-strong);
}
.nav__dossier-image img, .nav__pop-logo img { max-width: 40px; max-height: 40px; object-fit: contain; }
.nav__dossier-image svg, .nav__pop-logo svg, .nav__dossier-image-defaut svg, .nav__pop-logo-defaut svg {
  width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round;
}
.nav__dossier-image-defaut, .nav__pop-logo-defaut { display: flex; }
.nav__dossier-image-defaut[hidden], .nav__pop-logo-defaut[hidden] { display: none; }
.nav__dossier-texte { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.nav__dossier-nom { font-size: 14px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nav__dossier-budget { font-size: 12px; color: rgba(255, 255, 255, .68); }
body.budget-annexe .nav__dossier-budget { color: #d5c8ff; }
.nav__dossier-fleches { width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; opacity: .7; }

/* Fenêtres flottantes (Mes dossiers, Mon compte) */
.nav__pop {
  position: absolute; left: 12px; right: 12px; z-index: 80;
  background: #fff; color: var(--ink, #1d2b3a); border-radius: 12px; padding: 12px;
  box-shadow: 0 12px 32px rgba(10, 25, 45, .32); display: flex; flex-direction: column; gap: 6px;
}
.nav__pop[hidden] { display: none; }
.nav__pop--dossiers { top: calc(100% - 6px); max-height: 70vh; overflow-y: auto; }
.nav__pop--compte { bottom: calc(100% + 6px); }
.nav__pop-titre { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #5b6b7c; }
.nav__pop-attente { margin: 4px 0; font-size: 13px; color: #5b6b7c; }
.nav__pop-recherche { display: flex; align-items: center; gap: 8px; border: 1px solid #cfd8e2; border-radius: 8px; padding: 6px 9px; color: #5b6b7c; }
.nav__pop-recherche svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.nav__pop-recherche input { border: 0; outline: 0; font: inherit; font-size: 13.5px; flex: 1; min-width: 0; color: inherit; }
.nav__pop-liste { display: flex; flex-direction: column; gap: 2px; }
.nav__pop-dossier, .nav__pop-ligne {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 7px 8px; border: 0; border-radius: 8px;
  background: transparent; color: inherit; font: inherit; text-align: left; text-decoration: none; cursor: pointer;
}
.nav__pop-dossier[hidden] { display: none; }
.nav__pop-dossier:hover, .nav__pop-ligne:hover { background: #f1f5f9; }
.nav__pop-dossier:focus-visible, .nav__pop-ligne:focus-visible { outline: 2px solid var(--brand); outline-offset: 1px; }
.nav__pop-dossier--actif { background: #eaf2fb; }
.nav__pop-logo { width: 30px; height: 30px; border-radius: 7px; border: 1px solid #dfe7f0; box-sizing: border-box; }
.nav__pop-logo img { max-width: 26px; max-height: 26px; }
.nav__pop-logo svg { width: 18px; height: 18px; }
.nav__pop-texte { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.nav__pop-nom { font-size: 14px; font-weight: 700; }
.nav__pop-detail { font-size: 12px; color: #5b6b7c; }
.nav__pop-coche { width: 18px; height: 18px; flex: none; fill: none; stroke: #1f6fb2; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.nav__pop-lien { align-self: flex-start; margin-top: 2px; font-size: 13.5px; font-weight: 700; color: #1f6fb2; text-decoration: none; }
.nav__pop-lien:hover { text-decoration: underline; }
.nav__pop-ligne svg { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.nav__pop-ligne--sortie { color: #b42318; }
.nav__pop-entete { display: flex; align-items: center; gap: 10px; padding: 2px 4px 10px; margin-bottom: 2px; border-bottom: 1px solid #e3e9ef; }
.nav__pop .nav__utilisateur { padding: 0; font-size: 13px; display: flex; flex-direction: column; gap: 2px; }
.nav__pop .nav__utilisateur-nom { color: inherit; font-size: inherit; text-decoration: none; }
.nav__pop .nav__utilisateur-nom--actif { background: #eaf2fb; }
.nav__pop .nav__legal { margin-top: 4px; padding: 8px 4px 0; border-top: 1px solid #e3e9ef; color: #5b6b7c; text-align: left; }
.nav__pop .nav__version { display: inline-block; padding: 0 0 0 6px; color: #5b6b7c; }

/* Socle commun : tuiles en dégradé, comme les badges du tableau de bord */
.nav .nav__socle { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: repeat(2, minmax(0, 1fr)); gap: 6px; padding: 0; }
.nav .nav__socle[hidden] { display: none; }
.nav .nav__tuile {
  position: relative; overflow: hidden; border: 2px solid transparent; border-left-width: 2px; color: #fff; font-weight: 700;
  border-radius: 10px; text-decoration: none;
}
.nav .nav__tuile:hover { filter: brightness(1.12); background-color: transparent; }
.nav .nav__tuile--tdb {
  grid-row: span 2; flex-direction: column; align-items: flex-start; justify-content: flex-start;
  padding: 9px 10px; font-size: 12px; letter-spacing: .05em; text-transform: uppercase; line-height: 1.2;
  background: linear-gradient(135deg, #2b8bd6, #1a5f9e);
}
.nav .nav__tuile-picto { position: absolute; right: 6px; bottom: 4px; width: 40px; height: 40px; opacity: .35; }
.nav .nav__tuile--mini { min-height: 34px; padding: 0 8px; gap: 6px; font-size: 12.5px; }
.nav .nav__tuile--mini svg { width: 15px; height: 15px; opacity: 1; }
.nav .nav__tuile--info { background: linear-gradient(135deg, #5f9ad3, #3a7dc0); } /* 3.68.0 : nuance du tableau de bord (charte B) */
.nav .nav__tuile--questions { background: linear-gradient(135deg, #5b7fa8, #3c5b80); }
.nav .nav__tuile--mini .pastille-notif--menu { min-width: 17px; height: 17px; font-size: 10.5px; line-height: 17px; }
.nav .nav__tuile.nav__lien--actif { border-color: #fff; box-shadow: 0 2px 10px rgba(0, 0, 0, .35); font-weight: 700; }
.nav .nav__tuile.nav__lien--grise { opacity: .5; }

/* Modules */
.nav__titre-modules { margin: 16px 0 6px; padding: 0 2px; font-size: 10.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: rgba(255, 255, 255, .55); }
.nav__titre-modules[hidden] { display: none; }
.nav .nav__module { --module: var(--module-reglages); padding: 2px; border-radius: 10px; border-top: 0; margin-top: 2px; }
.nav .nav__module + .nav__module { border-top: 0; margin-top: 2px; }
.nav .nav__module:not(.nav__groupe--replie) { background: rgba(255, 255, 255, .05); }
.nav .nav__module--quotidien { --module: var(--module-quotidien); }
.nav .nav__module--pilotage { --module: var(--module-pilotage); }
.nav .nav__module--revision { --module: var(--module-revision); }
.nav .nav__module--immobilisations { --module: var(--module-immobilisations); }
.nav .nav__module--poste-client { --module: var(--module-poste-client); }
.nav .nav__module--regie { --module: var(--module-regie); }
.nav .nav__module--tva { --module: var(--module-tva); }
.nav .nav__module--reglages { --module: var(--module-reglages); }
.nav .nav__module .nav__entete {
  gap: 10px; padding: 6px 8px; border-radius: 9px; color: #fff;
  font-size: 14.5px; font-weight: 700; letter-spacing: 0; text-transform: none; line-height: 1.15;
}
.nav .nav__module .nav__entete:hover { color: #fff; background: rgba(255, 255, 255, .07); }
.nav__module-icone {
  width: 30px; height: 30px; flex: none; border-radius: 8px; background: var(--module); color: var(--module-glyphe);
  display: flex; align-items: center; justify-content: center;
}
.nav__module-icone svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.nav .nav__module .nav__chevron { opacity: .75; transform: rotate(180deg); }
.nav .nav__module.nav__groupe--replie .nav__chevron { transform: none; }
.nav .nav__module .nav__alerte-volet {
  width: auto; min-width: 20px; height: 20px; padding: 0 6px; box-sizing: border-box; border-radius: 10px;
  font-size: 12px; font-weight: 700; line-height: 20px; text-align: center; color: #fff; box-shadow: none;
}
.nav .nav__module .nav__alerte-volet:empty { min-width: 9px; width: 9px; height: 9px; padding: 0; }
.nav .nav__module .nav__volet { display: flex; flex-direction: column; gap: 1px; padding: 2px 0 6px; }
.nav .nav__module .nav__volet[hidden] { display: none; }
.nav .nav__module .nav__lien {
  padding: 6px 10px 6px 48px; border-left: 0; border-radius: 7px; font-size: 13.5px; color: rgba(255, 255, 255, .82);
}
.nav .nav__module .nav__lien:hover { background: rgba(255, 255, 255, .07); color: #fff; }
.nav .nav__module .nav__lien--actif { background: rgba(255, 255, 255, .13); color: #fff; font-weight: 700; box-shadow: inset 3px 0 0 var(--module); }

/* Pied : réglages, documentation, compte */
.nav .nav__pied { margin-top: 0; padding: 8px 12px 0; display: flex; flex-direction: column; gap: 2px; border-top: 1px solid rgba(255, 255, 255, .12); }
.nav .nav__pied .nav__groupe { padding-top: 0; }
.nav .nav__aide { display: flex; flex-direction: column; gap: 2px; }
.nav .nav__pied .nav__lien--pied { margin: 0; padding: 7px 10px; border-left: 0; font-size: 13.5px; }
.nav .nav__pied .nav__lien--pied.nav__lien--actif { background: rgba(255, 255, 255, .14); }
.nav__compte { position: relative; margin: 8px -12px 0; }
.nav__compte-bouton {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 14px; border: 0; border-top: 1px solid rgba(255, 255, 255, .12);
  background: rgba(0, 0, 0, .18); color: #fff; font: inherit; text-align: left; cursor: pointer;
}
.nav__compte-bouton:hover { background: rgba(0, 0, 0, .28); }
.nav__compte-bouton:focus-visible { outline: 2px solid #9fc7f0; outline-offset: -2px; }
.nav__avatar {
  width: 42px; height: 42px; flex: none; border-radius: 50%; background: #3a63b8; color: #fff;
  font-size: 15px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.nav__avatar--administrateur { background: #c62828; }
.nav__avatar--direction-financiere { background: #1f6fb2; }
.nav__avatar--ordonnateur { background: #6a3fb5; }
.nav__avatar--editeur { background: #455a64; }
.nav__avatar--grand { width: 38px; height: 38px; font-size: 14px; }
.nav__compte-texte { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.nav__compte-nom { font-size: 16px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nav__compte-role { font-size: 13.5px; color: #8fd19e; }
.nav__compte-plus { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; opacity: .75; }
.nav__pop--compte { left: 12px; right: 12px; }

@media (pointer: coarse) {
  .nav .nav__tuile--mini { min-height: 40px; }
  .nav .nav__module .nav__lien { min-height: 40px; }
}
@media (prefers-reduced-motion: reduce) { .nav .nav__module .nav__chevron { transition: none; } }

/* ---- 3.32.0 : choix de la présentation du menu (fenêtre du compte) ---- */
.nav__pop-mode { display: flex; align-items: center; gap: 6px; margin-top: 4px; padding: 8px 4px 0; border-top: 1px solid #e3e9ef; font-size: 12.5px; color: #5b6b7c; }
.nav__pop-mode span { margin-right: auto; }
.nav__pop-mode button { border: 1px solid #cfd8e2; border-radius: 7px; background: #fff; color: #1d2b3a; font: inherit; font-size: 12.5px; padding: 4px 9px; cursor: pointer; }
.nav__pop-mode button[aria-pressed="true"] { background: var(--brand-strong); border-color: var(--brand-strong); color: #fff; font-weight: 700; }
@media (max-width: 1024px) { .nav__pop-mode { display: none; } }

/* ---- 3.32.0 : menu en rail (version B) ---- */
.nav__rail[hidden] { display: none; }
body.menu-rail .nav { flex-direction: row; }
@media (min-width: 1025px) { body.menu-rail .nav { width: 288px; } }
@media (max-width: 1024px) { body.menu-rail .nav { width: min(300px, 92vw); } }
.nav__rail {
  width: 72px; flex: none; display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: 14px 0 12px; background: rgba(0, 0, 0, .22); overflow-y: auto;
}
.nav__rail-logo { font-size: 24px; margin-bottom: 10px; }
.nav__rail-item {
  position: relative; width: 62px; flex: none; padding: 8px 0 6px; border: 0; border-radius: 10px;
  background: transparent; color: rgba(255, 255, 255, .85); font: inherit; font-size: 11px; line-height: 1.1;
  display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center; text-decoration: none; cursor: pointer;
}
.nav__rail-item[hidden] { display: none; }
.nav__rail-item svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.nav__rail-item:hover { background: rgba(255, 255, 255, .08); color: #fff; }
.nav__rail-item:focus-visible, .nav__rail-avatar:focus-visible { outline: 2px solid #9fc7f0; outline-offset: 1px; }
.nav__rail-item--actif { background: rgba(255, 255, 255, .16); color: #fff; font-weight: 700; }
.nav__rail-module { color: color-mix(in srgb, var(--module) 55%, #ffffff); } /* 3.68.0 : nuance éclaircie, lisible sur le rail marine */
.nav__rail-module:hover { color: color-mix(in srgb, var(--module) 40%, #ffffff); }
.nav__rail-module.nav__rail-item--actif { background: var(--module); color: var(--module-glyphe); }
.nav__rail-module.nav__rail-item--ecran:not(.nav__rail-item--actif)::after {
  content: ""; position: absolute; left: 4px; top: 50%; width: 4px; height: 18px; margin-top: -9px; border-radius: 2px; background: var(--module);
}
.nav__rail-badge {
  position: absolute; top: 3px; right: 9px; min-width: 17px; height: 17px; padding: 0 4px; box-sizing: border-box;
  border-radius: 9px; background: var(--danger); color: #fff; font-size: 10.5px; font-weight: 700; line-height: 17px;
}
.nav__rail-badge[hidden] { display: none; }
.nav__rail-sep { width: 36px; height: 1px; flex: none; margin: 6px 0; background: rgba(255, 255, 255, .15); }
.nav__rail-espace { flex: 1; min-height: 8px; }
.nav__rail-avatar {
  width: 40px; height: 40px; flex: none; margin-top: 6px; border: 2px solid #8fd19e; border-radius: 50%;
  background: #3a63b8; color: #fff; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer;
}
body.menu-rail .nav .nav__marque { padding: 14px 12px 10px; }
body.menu-rail .nav .nav__marque .logo-sofi { display: none; }
body.menu-rail .nav .nav__agence { max-width: none; text-align: left; }
body.menu-rail .nav .nav__dossier { padding: 0 10px 6px; }
body.menu-rail .nav .nav__dossier-image { width: 34px; height: 34px; }
body.menu-rail .nav .nav__dossier-image img { max-width: 30px; max-height: 30px; }
body.menu-rail .nav .nav__socle,
body.menu-rail .nav .nav__titre-modules,
body.menu-rail .nav .nav__aide,
body.menu-rail .nav .nav__compte-bouton,
body.menu-rail .nav .nav__module:not(.nav__module--choisi) { display: none !important; }
body.menu-rail .nav__panneau > nav { flex: 0 0 auto; padding: 0 10px; overflow: visible; }
body.menu-rail .nav__panneau { overflow-y: auto; }
body.menu-rail .nav .nav__pied { border-top: 0; padding: 0 10px; }
body.menu-rail .nav .nav__compte { margin: 0; }
body.menu-rail .nav .nav__module--choisi { background: transparent; }
body.menu-rail .nav .nav__module--choisi .nav__entete { cursor: default; padding: 16px 4px 8px; font-size: 17px; }
body.menu-rail .nav .nav__module--choisi .nav__entete:hover { background: none; }
body.menu-rail .nav .nav__module--choisi .nav__chevron,
body.menu-rail .nav .nav__module--choisi .nav__alerte-volet { display: none; }
body.menu-rail .nav .nav__module--choisi .nav__module-icone { width: 10px; height: 10px; border-radius: 3px; }
body.menu-rail .nav .nav__module--choisi .nav__module-icone svg { display: none; }
body.menu-rail .nav .nav__module .nav__lien { padding-left: 12px; }
body.menu-rail .nav__pop--compte { position: fixed; left: 80px; right: auto; bottom: 16px; width: 280px; }
.nav__rail-avatar.nav__avatar--administrateur { background: #c62828; }
.nav__rail-avatar.nav__avatar--direction-financiere { background: #1f6fb2; }
.nav__rail-avatar.nav__avatar--ordonnateur { background: #6a3fb5; }
.nav__rail-avatar.nav__avatar--editeur { background: #455a64; }

/* ======================================================================
   3.33.0 — Tuiles du tableau de bord (registre ligne 84, maquette validée
   le 18/10/2026) : sections par module, graphiques choisis sur trois
   colonnes, fenêtre « Mon tableau de bord » / « Mes indicateurs ».
   ====================================================================== */
.tdb-barre { display: flex; justify-content: flex-end; margin: 0 0 -4px; }
.ct-bouton { display: inline-flex; align-items: center; gap: 8px; }
.ct-bouton svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.tdb-section {
  --section: var(--module-reglages);
  display: flex; align-items: center; gap: 8px; margin: 14px 0 8px;
  font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft);
}
.tdb-section::after { content: ""; flex: 1; height: 1px; background: var(--line); margin-left: 6px; }
.tdb-section__pastille { width: 10px; height: 10px; border-radius: 3px; background: var(--section); }
.tdb-section--quotidien { --section: var(--module-quotidien); }
.tdb-section--pilotage { --section: var(--module-pilotage); }
.tdb-section--revision { --section: var(--module-revision); }
.tdb-section--graphiques { --section: var(--module-tdb); }
.tdb-graphiques { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 18px; }
.tdb-graphiques .panneau { margin-bottom: 0; min-width: 0; }
.tdb-graphique .panneau__titre { font-size: 15px; }
.tdb-graphique .histogramme { gap: 2px; }
.tdb-graphique .histogramme__mois { font-size: 10px; }
.tdb-graphique .histogramme__etiquette { font-size: 10.5px; }
@media (max-width: 1280px) { .tdb-graphiques { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 760px) { .tdb-graphiques { grid-template-columns: minmax(0, 1fr); } }

.tdb-exe { display: flex; flex-direction: column; gap: 9px; padding: 6px 0 4px; }
.tdb-exe__ligne { display: flex; align-items: center; gap: 10px; color: var(--ink-soft); text-decoration: none; font-size: 12.5px; }
.tdb-exe__ligne:hover .tdb-exe__chap { color: var(--brand); text-decoration: underline; }
.tdb-exe__chap { width: 38px; flex: none; font-weight: 700; color: var(--ink); }
.tdb-exe__chap--large { width: 120px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tdb-exe__piste { position: relative; flex: 1; height: 12px; border-radius: 6px; background: #e3e9ef; }
.tdb-exe__barre { display: block; height: 100%; border-radius: 6px; background: #2b8bd6; }
.tdb-exe__barre--depassement { background: #d64545; }
.tdb-exe__barre--revision { background: var(--module-revision); }
.tdb-exe__temps { position: absolute; top: -5px; bottom: -5px; width: 2px; margin-left: -1px; background: #1d3a5c; }
.tdb-exe__taux { width: 44px; flex: none; text-align: right; font-variant-numeric: tabular-nums; font-weight: 700; color: var(--ink); }
.tdb-exe__repere { display: inline-block; width: 2px; height: 12px; margin-right: 6px; vertical-align: middle; background: #1d3a5c; }

.dialogue-tuiles { width: min(1000px, 94vw); }
.ct-corps { gap: 12px; }
.ct-entete { display: flex; align-items: flex-start; gap: 16px; }
.ct-entete > div { flex: 1; }
.ct-entete p { margin: 4px 0 0; }
.ct-fermer { width: 36px; height: 36px; border: 0; border-radius: 8px; background: #f1f5f9; color: var(--ink-soft); font-size: 20px; cursor: pointer; }
.ct-onglets { display: flex; gap: 4px; border-bottom: 1px solid var(--line); }
.ct-onglet { height: 38px; padding: 0 16px; border: 0; border-bottom: 3px solid transparent; background: transparent; font: inherit; font-size: 14.5px; color: var(--ink-soft); cursor: pointer; }
.ct-onglet--actif { font-weight: 700; color: var(--brand-strong); border-bottom-color: var(--brand-strong); }
.ct-colonnes { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); gap: 0; min-height: 0; max-height: min(60vh, 560px); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.ct-liste { padding: 6px 14px 12px; overflow-y: auto; border-right: 1px solid var(--line); }
.ct-apercu { padding: 12px 16px; background: #f6f8fb; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; }
.ct-apercu__titre { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-soft); }
.ct-section { --section: var(--module-reglages); }
.ct-section__titre { display: flex; align-items: center; gap: 8px; margin: 12px 0 4px; padding: 0 6px; font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--ink-soft); }
.ct-pastille { width: 10px; height: 10px; border-radius: 3px; background: var(--section); }
.ct-ligne { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-bottom: 1px solid #eef2f6; border-radius: 6px; }
.ct-ligne:hover { background: #f4f7fa; }
.dialogue-motif__corps .ct-case { flex: 1; min-width: 0; display: flex; flex-direction: row; align-items: center; gap: 10px; font-weight: 400; cursor: pointer; }
.ct-case input { width: 18px; height: 18px; flex: none; accent-color: var(--brand-strong); }
.ct-texte { display: flex; flex-direction: column; min-width: 0; }
.ct-libelle { font-size: 14px; font-weight: 700; color: var(--ink); }
.ct-libelle--masque { color: var(--ink-faint); }
.ct-detail { font-size: 12px; color: var(--ink-soft); }
.ct-fleche { width: 30px; height: 30px; flex: none; border: 1px solid var(--line); border-radius: 7px; background: #fff; color: var(--brand-strong); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; }
.ct-fleche:hover:not(:disabled) { background: #e3ebf3; }
.ct-fleche:disabled { opacity: .3; cursor: default; }
.ct-fleche svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.ct-apercu__groupe { --section: var(--module-reglages); display: flex; flex-direction: column; gap: 6px; }
.ct-apercu__groupe .ct-section__titre { margin: 0; padding: 0; font-size: 11px; }
.ct-apercu__grille { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.ct-apercu__tuile { padding: 8px 10px; border-radius: 7px; background: linear-gradient(135deg, #2b8bd6, #1a5f9e); color: #fff; font-size: 11px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ct-espace { flex: 1; }
@media (max-width: 700px) { .ct-colonnes { grid-template-columns: minmax(0, 1fr); } .ct-apercu { display: none; } }

/* Réglages des tuiles (dossier, éditeur) */
.tr-sous-titre { margin: 14px 0 4px; font-size: 15px; color: var(--brand-strong); }
.tr-tableau .tr-groupe th { --section: var(--module-reglages); text-align: left; padding-top: 12px; font-size: 12px; letter-spacing: .07em; text-transform: uppercase; color: var(--ink-soft); background: transparent; }
.tr-tableau .tr-groupe--quotidien th { --section: var(--module-quotidien); }
.tr-tableau .tr-groupe--pilotage th { --section: var(--module-pilotage); }
.tr-tableau .tr-groupe--revision th { --section: var(--module-revision); }
.tr-pastille { display: inline-block; width: 10px; height: 10px; margin-right: 8px; border-radius: 3px; background: var(--section); vertical-align: -1px; }
.tr-libelle { font-weight: 700; padding-left: 26px !important; }
.tr-exclue { display: inline-block; width: 16px; height: 16px; border-radius: 4px; background: #e3e9ef; }
.tr-etat { font: inherit; font-size: 13px; padding: 2px 6px; border-radius: 6px; border: 1px solid var(--line); }
.tr-etat--PROPOSEE { background: var(--revision-accent, #1d3a5f); color: #fff; }
.tr-etat--DISPONIBLE { background: #fff; color: var(--brand-strong); }
.tr-etat--EXCLUE { background: #e3e9ef; color: var(--ink-soft); }

/* ------------------------------------------------------------------ */
/* 3.34.0 : poste client, relances et contentieux (registre ligne 88)  */
/* ------------------------------------------------------------------ */
.pcl-t--non_echu { background: #e4ecf4; color: #1d3a5c; }
.pcl-t--j30 { background: #fbefc4; color: #5a4300; }
.pcl-t--j60 { background: #f6cf98; color: #5a3200; }
.pcl-t--j90 { background: #e98e4f; color: #2a1400; }
.pcl-t--plus90 { background: #b5432e; color: #fff; }
.pcl-entete__titre { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; justify-content: space-between; }
.pcl-entete__actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.pcl-source { margin: 4px 0 0; font-size: 13px; color: var(--ink-soft); }
.pcl-depot-gl { margin-top: 12px; }
.pcl-tuiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; }
@media (max-width: 1024px) { .pcl-tuiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .pcl-tuiles { grid-template-columns: 1fr; } }
.pcl-anteriorite__titre { display: flex; flex-wrap: wrap; gap: 10px; align-items: baseline; }
.pcl-anteriorite__titre h3 { margin: 0; font-size: 16px; }
.pcl-barre { display: flex; height: 28px; border-radius: 6px; overflow: hidden; margin: 10px 0 8px; }
.pcl-barre__seg { display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; min-width: 0; }
.pcl-legende { display: flex; flex-wrap: wrap; gap: 16px; font-size: 13.5px; }
.pcl-legende > span { display: inline-flex; align-items: center; gap: 6px; }
.pcl-pastille { width: 13px; height: 13px; border-radius: 3px; border: 1px solid #c7d3df; display: inline-block; }
.pcl-outils { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 10px; }
.pcl-outils__titre { margin: 0; font-size: 16px; flex: 1; }
.pcl-outils__pousse { flex: 1; }
.pcl-filtre { border: 1px solid #c7d3df; border-radius: 16px; padding: 4px 12px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.pcl-filtre:not([class*="pcl-t--"]) { background: #fff; color: var(--ink, #16202b); }
.pcl-filtre--actif { outline: 2px solid #1d3a5c; outline-offset: 1px; }
.pcl-tab td { vertical-align: top; }
.pcl-tab td.col-montant { font-variant-numeric: tabular-nums; }
.pcl-vide { color: #9aa8b5; }
.pcl-nom { font-weight: 700; color: #1d3a5c; text-decoration: none; }
.pcl-nom:hover { text-decoration: underline; }
.pcl-sous { font-size: 12px; color: var(--ink-soft); }
.pcl-manque { color: #8a4b00; font-weight: 700; }
.pcl-num { font-variant-numeric: tabular-nums; white-space: nowrap; }
.pcl-case { width: 28px; text-align: center; }
.pcl-age { display: inline-block; min-width: 76px; text-align: center; padding: 1px 8px; border-radius: 10px; font-size: 12.5px; font-weight: 700; }
.pcl-etape { font-size: 13px; }
.pcl-etape--due { color: #8a4b00; font-weight: 700; }
.pcl-etape--ctx { color: #b5432e; font-weight: 700; }
.pcl-etape--neutre { color: var(--ink-soft); }
.pcl-chip { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; font-weight: 700; }
.pcl-chip--aucune { background: #eef2f6; color: #4a5a6a; }
.pcl-chip--n1 { background: #e4ecf4; color: #1d3a5c; }
.pcl-chip--n2 { background: #fbefc4; color: #5a4300; }
.pcl-chip--n3 { background: #e98e4f; color: #2a1400; }
.pcl-chip--n4, .pcl-chip--ctx { background: #b5432e; color: #fff; }
.pcl-compteur { display: inline-block; background: #4a5a6a; color: #fff; border-radius: 9px; padding: 0 7px; font-size: 12px; }
.pcl-compteur--rouge { background: #c2503a; }
.pcl-barre-selection, .pcl-envoi { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; margin-top: 10px; }
.pcl-relances { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; }
.pcl-relances__liste { flex: 999 1 560px; min-width: 0; }
.pcl-relances__cote { flex: 1 1 300px; min-width: 0; }
.pcl-carte { box-shadow: inset 0 4px 0 #e4ecf4; }
.pcl-carte--n2 { box-shadow: inset 0 4px 0 #f6cf98; }
.pcl-carte--n3 { box-shadow: inset 0 4px 0 #e98e4f; }
.pcl-carte--n4 { box-shadow: inset 0 4px 0 #b5432e; }
.pcl-carte__tete { display: flex; gap: 12px; align-items: center; }
.pcl-carte__tete input[type=checkbox] { width: 18px; height: 18px; }
.pcl-carte__nom { flex: 1; display: flex; flex-direction: column; }
.pcl-carte__nom a { font-weight: 700; font-size: 16px; color: #1d3a5c; }
.pcl-carte__montant { display: flex; flex-direction: column; align-items: flex-end; }
.pcl-carte__montant b { font-size: 18px; font-variant-numeric: tabular-nums; }
.pcl-carte__grille { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 10px 0; font-size: 13.5px; }
@media (max-width: 760px) { .pcl-carte__grille { grid-template-columns: 1fr; } }
.pcl-carte__grille label { display: flex; flex-direction: column; gap: 4px; }
.pcl-carte__pied { display: flex; gap: 10px; align-items: center; justify-content: space-between; flex-wrap: wrap; }
.pcl-cote__titre { margin: 0 0 8px; font-size: 15px; }
.pcl-cote__ligne { display: flex; gap: 10px; font-size: 13.5px; padding: 5px 0; border-bottom: 1px solid #e3e9ef; }
.pcl-cote--alerte { background: #fbefc4; }
.pcl-resultats { margin: 0; padding-left: 18px; font-size: 13.5px; }
.pcl-echec { color: #b5432e; }
.pcl-champ-court { width: 90px; }
.pcl-fiche { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; }
.pcl-fiche__gauche { flex: 1 1 320px; min-width: 0; }
.pcl-fiche__droite { flex: 999 1 560px; min-width: 0; }
.pcl-form { display: flex; flex-direction: column; gap: 8px; }
.pcl-form label { display: flex; flex-direction: column; gap: 3px; font-size: 13px; color: var(--ink-soft); }
.pcl-form label.case-a-cocher { flex-direction: row; align-items: center; }
.pcl-form__ligne { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.pcl-form--acte { flex-direction: row; flex-wrap: wrap; align-items: flex-end; }
.pcl-form--acte label { min-width: 150px; }
.pcl-form__large { flex: 1 1 260px; }
.pcl-piece { display: flex; gap: 8px; align-items: center; border-top: 1px solid #e3e9ef; padding: 6px 0; font-size: 13.5px; }
.pcl-piece > span:first-child { flex: 1; }
.pcl-etapes { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
@media (max-width: 760px) { .pcl-etapes { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.pcl-etape-case { display: flex; flex-direction: column; gap: 3px; padding: 8px; border-radius: 8px; border: 1px solid #c7d3df; font-size: 13px; color: #4a5a6a; }
.pcl-etape-case b { color: #16202b; }
.pcl-etape-case__num { font-size: 11.5px; font-weight: 700; letter-spacing: .05em; }
.pcl-etape-case--fait { background: #e4ecf4; border-color: #e4ecf4; color: #1d3a5c; }
.pcl-etape-case--en-cours { background: #b5432e; border-color: #b5432e; color: #fff; }
.pcl-etape-case--en-cours b, .pcl-etape-case--en-cours a { color: #fff; }
.pcr-modele { border: 1px solid #e3e9ef; border-radius: 8px; margin: 0 0 10px; padding: 8px 12px; display: flex; flex-direction: column; gap: 6px; }
.pcr-modele label { display: flex; flex-direction: column; gap: 3px; font-size: 13px; }

/* 3.34.0 (relecture du menu, 19/10/2026) : pictogrammes des modules d'une
   même couleur, comme avant la 3.32.0 (la couleur du module reste sur le
   lien actif et le rail) ; volet déplié sur un fond un peu plus clair ;
   trait entre les modules de base et les modules en option. */
.nav .nav__module .nav__module-icone { background: rgba(255, 255, 255, .14); color: #fff; }
.nav .nav__module:not(.nav__groupe--replie) > .nav__volet { margin: 2px 2px 0; padding: 4px 0 6px; border-radius: 8px; background: rgba(255, 255, 255, .09); }
.nav .nav__titre-modules--options { margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255, 255, 255, .22); }
/* 3.34.1 (relecture du 19/10/2026) : montants du poste client à droite. */
.pcl-tab th.col-montant, .pcl-tab td.col-montant { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pcl-tab td.col-montant span[title] { cursor: help; }

/* 3.35.0 (registre ligne 87) : régies de recettes (regieRecettes.js). */
.rr-chip { display: inline-block; padding: 0 7px; margin-right: 6px; border-radius: 9px; font-size: 11.5px; font-weight: 700; line-height: 16px; vertical-align: 1px; background: #eef2f6; color: #4a5a6a; }
.rr-chip--cb { background: #e4ecf4; color: #1d3a5c; }
.rr-chip--comm_cb { background: #fbefc4; color: #5a4300; }
.rr-chip--ancv { background: #e7e1fa; color: #3f2a8a; }
.rr-chip--comm_ancv { background: #f6cf98; color: #5a3200; }
.rr-chip--esp { background: #dcefe6; color: #1d5c3d; }
.rr-chip--chq { background: #e1eef3; color: #1f5566; }
.rr-chip--autre_debit { background: #fde8e8; color: #8a1c14; }
.rr-panneau { border-top: 4px solid var(--revision-accent, #1d3a5f); }
.rr-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.rr-tab th { text-align: right; white-space: nowrap; }
.rr-tab th:first-child, .rr-tab .rr-groupes th { text-align: center; }
.rr-tab .rr-groupes th:first-child { text-align: left; }
.rr-tab th.rr-com, .rr-tab td.rr-com { background: #fdf6dc; color: #6b4a00; }
.rr-tab .rr-mois { font-weight: 700; color: #1d3a5c; white-space: nowrap; }
.rr-tab .rr-fort { font-weight: 700; }
.rr-tab .rr-en-cours .rr-mois { font-style: italic; }
.rr-total td, .rr-tab .rr-total td.rr-com { background: #1d3a5c; color: #fff; font-weight: 700; }
.rr-ecritures { margin-top: 14px; padding-top: 10px; border-top: 1px solid #e3e9ef; }
.rr-barre { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.rr-barre .panneau__titre { margin: 0; flex: 0 1 auto; min-width: 0; overflow-wrap: anywhere; }
.rr-tab-ecritures .rr-separation td { border-top: 2px solid #c7d3df; }
.rr-tab-ecritures .rr-compte { font-weight: 700; color: #1d3a5c; }
.rr-reglages .rr-mots { width: 100%; min-width: 260px; }
.rr-reglages h3.panneau__titre { margin-top: 14px; font-size: 15px; }
.rr-tab .rr-total td.rr-mois { color: #fff; }
/* 3.51.0 (registre ligne 118, maquette validée) : natures de la régie,
   versement au comptable, contrôle du retour au point de départ, assistant. */
.rr-chip--vers { background: #e6defa; color: #4b2c86; }
.rr-chip--dossier { background: #d9f0f0; color: #145a5a; }
.rr-chip--autre { background: #fde9d9; color: #8a3b00; }
.rr-tab th.rr-vers, .rr-tab td.rr-vers, .rr-tab-mois th.rr-vers, .rr-tab-mois td.rr-vers { background: #f1ecfc; color: #4b2c86; }
.rr-tab .rr-total td.rr-vers { background: #1d3a5c; color: #fff; }
.rr-natures-lecture { margin: 8px 0; }
.rr-natures-lecture summary { cursor: pointer; color: #1d3a5c; font-weight: 700; }
.rr-bandeau { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; width: 100%; margin: 12px 0 4px; padding: 9px 14px; border: 1px solid #cfe3d6; border-left: 5px solid #1d7a46; border-radius: 8px; background: #f2faf5; font: inherit; text-align: left; cursor: pointer; }
.rr-bandeau--ecart { border-color: #f3d2b8; border-left-color: #c2410c; background: #fff7f0; }
.rr-bandeau b { color: #1d3a5c; }
.rr-bandeau__ecart { margin-left: auto; font-weight: 700; color: #1d7a46; font-variant-numeric: tabular-nums; }
.rr-bandeau--ecart .rr-bandeau__ecart { color: #c2410c; }
.rr-bandeau__lien { color: var(--revision-accent, #1d3a5f); text-decoration: underline; }
.rr-controle { margin-top: 12px; padding-top: 10px; border-top: 1px solid #e3e9ef; }
.rr-controle h3.panneau__titre { font-size: 15px; }
.rr-tuiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; margin: 8px 0 10px; }
.rr-tuile { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: 8px; background: #f4f7fa; border-top: 3px solid #c7d3df; }
.rr-tuile__lib { font-size: 12px; text-transform: uppercase; letter-spacing: .03em; color: #4a5a6a; }
.rr-tuile__val { font-size: 19px; font-weight: 700; color: #1d3a5c; font-variant-numeric: tabular-nums; }
.rr-tuile__det { font-size: 12px; color: #6a7a8a; }
.rr-tuile--enc { border-top-color: #1d7a46; }
.rr-tuile--com { border-top-color: #d9a400; background: #fdf6dc; }
.rr-tuile--vers { border-top-color: #4b2c86; background: #f1ecfc; }
.rr-tuile--fonce { background: #1d3a5c; border-top-color: #1d3a5c; }
.rr-tuile--fonce .rr-tuile__lib, .rr-tuile--fonce .rr-tuile__val, .rr-tuile--fonce .rr-tuile__det { color: #fff; }
.rr-tuile--ecart { background: #fff1e6; border-top-color: #c2410c; }
.rr-tuile--ecart .rr-tuile__val { color: #c2410c; }
.rr-tuile--ok { background: #eaf6ee; border-top-color: #1d7a46; }
.rr-tuile--ok .rr-tuile__val { color: #1d7a46; }
.rr-explication { margin: 0 0 12px; padding: 8px 12px; border-radius: 8px; background: #fff7f0; border: 1px solid #f3d2b8; }
.rr-barre--vers { margin-top: 10px; }
.rr-ok { color: #1d7a46; font-weight: 700; }
.rr-ko { color: #c2410c; font-weight: 700; }
.rr-etat { display: inline-block; padding: 0 8px; border-radius: 9px; font-size: 12px; font-weight: 700; line-height: 18px; white-space: nowrap; }
.rr-etat--ok { background: #dcefe6; color: #1d5c3d; }
.rr-etat--attente { background: #fbefc4; color: #5a4300; }
.rr-etat--ko { background: #fde8e8; color: #8a1c14; }
.rr-etat--neutre { background: #eef2f6; color: #4a5a6a; }
.rr-tab-vers .rr-a-confirmer td { background: #fffaf0; }
.rr-tab-vers .col-actions { white-space: nowrap; }
.rr-tab-mois .rr-mois { font-weight: 700; color: #1d3a5c; white-space: nowrap; }
.rr-tab-mois .rr-total td { color: #fff; }
.rr-fonds { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; margin: 6px 0 4px; padding: 10px 12px; border-radius: 8px; background: #f4f7fa; }
.rr-fonds label { display: flex; flex-direction: column; gap: 4px; font-weight: 700; color: #1d3a5c; }
.rr-fonds input { max-width: 160px; text-align: right; }
.rr-tab-natures .rr-lib { min-width: 150px; }
.rr-tab-natures .rr-compte-saisie { width: 80px; }
.rr-tab-natures select.champ { min-width: 96px; }
.rr-tab-natures .rr-origine { display: block; font-size: 11.5px; color: #6a7a8a; }
.rr-tab-natures .rr-obligatoire td { background: #f6f2fd; }
.rr-tab-natures .rr-inactive td { color: #8a96a3; }
.rr-tab-natures .rr-inactive input[type=text] { text-decoration: line-through; }
.rr-actif { white-space: nowrap; font-size: 12.5px; }
.rr-nouvelle { margin: 12px 0; padding: 10px 12px; border: 1px dashed #b9c7d4; border-radius: 8px; }
.rr-nouvelle legend { font-weight: 700; color: #1d3a5c; padding: 0 4px; }
.rr-compteur { display: inline-block; min-width: 20px; padding: 0 6px; margin-right: 4px; border-radius: 10px; background: #c2410c; color: #fff; font-weight: 700; text-align: center; }
.rr-assistant { margin: 10px 0 14px; padding: 10px 12px; border: 1px solid #f3d2b8; border-radius: 8px; background: #fffbf7; }
.rr-groupe { margin: 10px 0; padding: 8px 10px; border-radius: 8px; background: #fff; border: 1px solid #e3e9ef; }
.rr-groupe__tete { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.rr-groupe--isole { background: #f8f9fb; }
.rr-proposition { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
.rr-proposition label { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; color: #4a5a6a; }
.rr-tout { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-top: 10px; padding: 10px 12px; border-radius: 8px; background: #1d3a5c; color: #fff; }
@media (max-width: 600px) {
  .rr-bandeau__ecart { margin-left: 0; }
  .rr-tuile__val { font-size: 16px; }
  .rr-reglages .rr-mots { min-width: 180px; }
}

/* 3.36.0 (maquette des points en suspens, 19/10/2026) : tuiles du socle à
   texte centré et pictogramme fondu dans le dégradé ; « Points en suspens »
   présenté comme un module ; traits à la place des intitulés « Modules ». */
.nav .nav__socle { grid-template-rows: repeat(2, minmax(0, 1fr)) auto; }
.nav .nav__tuile--tdb { align-items: center; justify-content: center; text-align: center; }
.nav .nav__tuile--tdb .nav__tuile-libelle { position: relative; }
.nav .nav__tuile--mini { justify-content: center; text-align: center; padding: 0 8px; }
.nav .nav__tuile--mini .nav__tuile-picto { position: absolute; right: -4px; bottom: -7px; width: 32px; height: 32px; opacity: .25; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.nav .nav__tuile--mini .nav__tuile-libelle { position: relative; }
.nav .nav__tuile--mini .pastille-notif--menu { position: relative; }
.nav .nav__entree {
  grid-column: 1 / -1; display: flex; align-items: center; gap: 10px; margin-top: 4px; padding: 6px 8px; border-radius: 9px;
  color: #fff; font-size: 14.5px; font-weight: 700; text-decoration: none; border-left: 0;
}
.nav .nav__entree:hover { background: rgba(255, 255, 255, .07); color: #fff; }
.nav .nav__entree .nav__module-icone { background: rgba(255, 255, 255, .14); color: #fff; }
.nav .nav__entree-titre { flex: 1; min-width: 0; }
.nav .nav__entree.nav__lien--actif { background: rgba(255, 255, 255, .12); box-shadow: inset 3px 0 0 #9fc7f0; }
.pastille-notif--suspens-ac { background: #c0392b; }
.pastille-notif--suspens-ordo { background: #7b3fa0; }
.nav .nav__separateur { height: 0; margin: 12px 4px 8px; padding: 0; border-top: 1px solid rgba(255, 255, 255, .22); font-size: 0; }
.nav .nav__titre-modules--options.nav__separateur { margin-top: 12px; padding-top: 0; }

/* Écran des points en suspens (views/pointsSuspens.js). */
.ps-barre { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; }
.ps-barre label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--ink-soft, #4a5a6a); }
.ps-espace { flex: 1; }
.ps-tab .ps-objet { font-weight: 700; }
.ps-ligne--levee td { color: #6b7a88; background: #f1f7f3; }
.ps-qui { display: inline-block; padding: 1px 9px; border-radius: 10px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.ps-qui--ac { background: #e4ecf4; color: #1d3a5c; }
.ps-qui--ordo { background: #efe4f7; color: #5b2a7e; }
.ps-qui--regie { background: #dff3ea; color: #1f5f47; } /* 3.44.0 */
.ps-statut { font-size: 12.5px; font-weight: 700; white-space: nowrap; }
.ps-statut--ouvert { color: #1f6fb2; }
.ps-statut--reponse { color: #b45309; }
.ps-statut--leve { color: #1d5c3d; }
.ps-form__grille { display: grid; grid-template-columns: 150px minmax(0, 1fr) 170px 190px; gap: 12px; margin-bottom: 10px; }
.ps-form__grille label, .ps-form > label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
@media (max-width: 760px) { .ps-form__grille { grid-template-columns: 1fr; } }
.ps-retour { margin: 0 0 10px; }
.ps-entete { border-top: 4px solid #1d3a5c; }
.ps-entete--ordo { border-top-color: #7b3fa0; }
.ps-entete--regie { border-top-color: #1f7a5c; }
.ps-entete__ligne { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; }
.ps-entete__titre { flex: 1; min-width: 260px; }
.ps-entete__titre .panneau__titre { font-size: 20px; }
.ps-entete__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.nav .nav__tuile--tdb .nav__tuile-picto { right: -4px; bottom: -6px; width: 48px; height: 48px; opacity: .25; }
.nav .nav__tuile--mini .nav__tuile-picto { right: -7px; bottom: -9px; width: 30px; height: 30px; opacity: .22; }
/* Trait des modules en option masqué quand aucun d'eux n'est affiché
   (direction financière, ordonnateur, module non souscrit). */
.nav .nav__titre-modules--options:not(:has(~ .nav__module--pilotage:not([hidden]), ~ .nav__module--poste-client:not([hidden]), ~ .nav__module--tva:not([hidden]))) { display: none; }

/* 3.37.0 : notes de suivi dans la note de synthèse ; bloc « Faits marquants ». */
.ns-notes-suivi { border-left: 4px solid #e0b100; }
.ns-notes-suivi textarea { width: 100%; resize: vertical; box-sizing: border-box; }
.ns-bloc--faits { border-color: #e0b100; background: #fffbea; }
.ns-faits__titre { display: flex; align-items: center; gap: 8px; font-size: 13px; margin: 8px 14px 4px; }
.ns-faits__titre input { max-width: 320px; }
/* 3.37.0 : ajout manuel d'une ligne au suivi des prises en charge. */
.pec-ajout { display: flex; justify-content: flex-end; margin-top: 6px; }
.pec-ajout .bouton { font-size: 12.5px; opacity: .8; }
.pec-ajout .bouton:hover { opacity: 1; }
.pec-form-ajout .form-pec__grille { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }

/* 3.37.1 (relecture du 19/10/2026) : lignes du menu un peu plus serrées. */
.nav .nav__module, .nav .nav__module + .nav__module { margin-top: 0; padding: 1px 2px; }
.nav .nav__module .nav__entete { padding: 4px 8px; }
.nav .nav__module .nav__lien { padding-top: 4px; padding-bottom: 4px; }
.nav .nav__module .nav__volet { padding: 1px 0 4px; }
.nav .nav__entree { padding: 4px 8px; margin-top: 2px; }
.nav .nav__separateur { margin: 8px 4px 6px; }

/* 3.38.0 : référentiel du dossier (règles d'affectation propres au dossier) */
.rd-ajout { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin-top: 12px; padding: 12px 14px;
  background: #f4f7fa; border: 1px dashed #b9c6d4; border-radius: 8px; }
.rd-ajout label { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; color: var(--ink-soft); }
.rd-ajout__large { flex: 1; min-width: 220px; }
.rd-ajout .texte-discret { align-self: center; }
.ligne-barree td { color: var(--ink-soft); text-decoration: line-through; }
.ligne-barree td .badge { text-decoration: none; }
.rd-dialogue { width: min(860px, 94vw); }

/* 3.41.0 (registre ligne 99) : ordres de paiement à régulariser (4721, 4091),
   tuile pleine largeur du tableau de bord, maquette validée le 20/10/2026. */
/* 3.47.0 (registre ligne 117, maquette validée le 22/10/2026) : section à
   bandeau violet juste après le Pilotage, une tuile violette par compte au
   gabarit des tuiles, tableau compact déplié sous la rangée. */
.tdb-ordres { --op-violet: #6a3fa6; --op-violet-de: #8d5bd0; --op-violet-a: #5a2d94; --op-violet-ligne: #d9cbef; --op-violet-soft: #f2ecfa; margin-bottom: 20px; }
.op-bandeau { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 16px; margin: 6px 0 10px;
  padding: 9px 14px; border-radius: 8px; color: #fff; background: linear-gradient(120deg, var(--op-violet-de), var(--op-violet-a)); }
.op-bandeau__titre { margin: 0; font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; display: flex; align-items: center; gap: 8px; }
.op-bandeau__pastille { width: 10px; height: 10px; border-radius: 3px; background: #fff; opacity: .85; }
.op-bandeau__date { margin: 0; font-size: 12.5px; color: rgba(255, 255, 255, .88); }
.badge-visuel.badge-chiffre--violet { --badge-de: var(--op-violet-de, #8d5bd0); --badge-a: var(--op-violet-a, #5a2d94); }
.grille-badges.op-tuiles { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); margin-bottom: 0; }
.op-tuile { font: inherit; text-align: left; width: 100%; cursor: pointer; }
.op-tuile .badge-chiffre__label b { font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.op-tuile .badge-chiffre__nombre { font-size: 26px; font-variant-numeric: tabular-nums; }
.op-tuile:hover { filter: brightness(1.06); }
.op-tuile:focus:not(:focus-visible) { outline: none; }
.op-tuile:focus-visible { outline: 2px solid var(--op-violet); outline-offset: 3px; }
.op-tuile[aria-expanded="true"] { box-shadow: 0 0 0 3px var(--op-violet-ligne), 0 3px 10px rgba(74, 37, 128, .35); }
.op-tuile__pastilles { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.op-tuile__pastilles > span { font-size: 11.5px; background: rgba(255, 255, 255, .18); border-radius: 10px; padding: 1px 8px; white-space: nowrap; }
.op-tuile__pastilles > .op-tuile__voir { background: rgba(255, 255, 255, .32); font-weight: 700; }
.op-tuile__chevron { display: inline-block; width: 7px; height: 7px; border-right: 2px solid #fff; border-bottom: 2px solid #fff;
  transform: rotate(45deg); margin-left: 8px; position: relative; top: -2px; transition: transform .15s; }
.op-tuile[aria-expanded="true"] .op-tuile__chevron { transform: rotate(225deg); top: 1px; }
.op-details { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12px; margin-top: 12px; }
.op-detail { flex: 0 1 auto; min-width: min(100%, 380px); max-width: 100%; background: var(--surface); border: 1px solid var(--op-violet-ligne);
  border-top: 3px solid var(--op-violet); border-radius: 6px; padding: 8px 12px; }
.op-detail[hidden] { display: none; }
.op-detail__tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px; margin-bottom: 6px; }
.op-compte__num { font-weight: 700; font-size: 15px; color: var(--op-violet); font-variant-numeric: tabular-nums; }
.op-compte__lib { font-weight: 700; font-size: 15px; color: var(--ink); }
.tdb-ordres .op-ligne--lien:hover td { background: var(--op-violet-soft); }
.op-tableau { table-layout: auto; width: auto; font-size: 12.5px; }
.op-tableau td { height: 19px; padding-top: 1px; padding-bottom: 1px; line-height: 1.3; white-space: nowrap; }
.op-tableau th { white-space: nowrap; }
.op-tableau td { vertical-align: top; }
.op-date { white-space: nowrap; font-variant-numeric: tabular-nums; }
.op-journal { color: var(--ink-soft); }
.op-tiers { font-weight: 600; }
.op-montant { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.op-ancien { margin-left: 4px; font-size: 10.5px; color: var(--warn); background: var(--warn-bg); border-radius: 3px; padding: 0 4px; }
.op-ligne--lien { cursor: pointer; }
.op-ligne--lien:focus-visible { outline: 2px solid var(--brand); outline-offset: -2px; }
.op-tableau tbody tr.op-ligne--correspond, .op-tableau tbody tr.op-ligne--correspond:nth-child(even) { background: var(--ok-bg); }
.op-ligne--correspond td:first-child { box-shadow: inset 3px 0 0 var(--ok); }
.op-indice { display: block; font-size: 11.5px; color: var(--ok); font-weight: 600; margin-top: 1px; }
.op-tableau tfoot td { font-weight: 700; border-top: 2px solid var(--line); }
.op-legende { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-soft); margin-top: 8px; }
.op-legende i { width: 12px; height: 12px; border-radius: 2px; background: var(--ok-bg); box-shadow: inset 3px 0 0 var(--ok); }
.op-tableau th.col-montant, .op-tableau td.op-montant { text-align: right; padding-right: 12px; }

/* 3.42.0 : pieces multiples d'une ligne de bordereau (colonne « Pieces »,
   panneau « Pieces de la ligne N »). L'absence de piece est grise, jamais
   rouge : elle n'est plus bloquante. */
.pieces-ligne__bouton {
  display: inline-flex; align-items: center; gap: 3px; padding: 1px 7px;
  border: 1px solid var(--line-forte, #c3ccd6); border-radius: 10px; background: #fff;
  color: var(--brand); font-size: 12px; font-weight: 600; cursor: pointer; line-height: 18px;
}
.pieces-ligne__bouton:hover { background: var(--brand); color: #fff; }
.pieces-ligne__bouton--vide,
.pieces-ligne__aucune { color: var(--ink-soft, #7a8591); font-weight: 400; font-size: 12px; }
.pieces-ligne__bouton--vide { border-style: dashed; }
.pieces-ligne__liste { display: flex; flex-direction: column; gap: 6px; margin: 8px 0; }
.pieces-ligne__piece {
  display: grid; grid-template-columns: auto 1fr auto; gap: 10px; align-items: center;
  padding: 7px 10px; border: 1px solid var(--line, #dde3ea); border-radius: 6px; background: #fff;
}
.pieces-ligne__format {
  font-size: 10px; font-weight: 700; color: #b42318; background: #fdecea;
  border-radius: 4px; padding: 3px 5px;
}
.pieces-ligne__texte { display: flex; flex-direction: column; min-width: 0; }
.pieces-ligne__texte strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pieces-ligne__texte .badge { align-self: flex-start; }
.pieces-ligne__actions { display: flex; gap: 4px; }
.pieces-ligne__boutons { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0 10px; }
@media (max-width: 700px) {
  .pieces-ligne__piece { grid-template-columns: 1fr; }
}

/* Pieces jointes des fiches d'immobilisation (3.42.0, ligne 106) : trombone
   de la colonne « Pièce » (maquette validee du 22/10/2026), liste des pieces
   de la fiche et zone de depot. */
.immo-pj-cellule { position: relative; white-space: nowrap; }
.immo-pj { display: inline-flex; gap: 4px; align-items: center; border: 1px solid var(--line); border-radius: 4px; padding: 1px 7px;
  background: var(--surface); color: var(--brand); font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
  font-variant-numeric: tabular-nums; min-height: 24px; }
.immo-pj:hover, .immo-pj:focus-visible { border-color: var(--brand); background: var(--brand-soft); }
.immo-pj svg { width: 13px; height: 13px; }
.immo-pj-menu { position: fixed; z-index: 60; min-width: 220px; max-width: min(320px, 90vw);
  background: var(--surface); border: 1px solid var(--line-forte); border-radius: var(--rayon); box-shadow: 0 4px 14px rgba(0,0,0,.15);
  padding: 4px; text-align: left; }
.immo-pj-menu a { display: flex; gap: 8px; align-items: center; padding: 6px 8px; border-radius: 4px; color: var(--ink); text-decoration: none; }
.immo-pj-menu a:hover, .immo-pj-menu a:focus-visible { background: var(--brand-soft); }
.immo-pj-menu span { display: flex; flex-direction: column; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.immo-pj-menu small { color: var(--ink-soft); font-size: 11.5px; }
.immo-pieces { list-style: none; margin: 0 0 10px; padding: 0; display: grid; gap: 6px; }
.immo-pieces__ligne { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 8px; align-items: center;
  border: 1px solid var(--line); border-radius: 4px; padding: 6px 8px; }
.immo-pieces__picto svg, .immo-pieces__picto img { width: 24px; height: 28px; }
.immo-pieces__texte { display: flex; flex-direction: column; min-width: 0; }
.immo-pieces__nom { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; min-width: 0; }
.immo-pieces__nom strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.immo-pieces__nature { font-size: 11.5px; padding: 0 6px; border-radius: 3px; background: var(--brand-soft); color: var(--brand); }
.immo-pieces__texte .texte-discret { font-size: 12.5px; }
.immo-pieces__actions { display: flex; gap: 4px; flex-wrap: wrap; justify-content: flex-end; }
.immo-pieces__depot { display: grid; gap: 8px; margin-bottom: 10px; }
.immo-pieces__depot label { display: flex; gap: 8px; align-items: center; }
@media (max-width: 600px) {
  .immo-pieces__ligne { grid-template-columns: 28px minmax(0, 1fr); }
  .immo-pieces__actions { grid-column: 1 / -1; justify-content: flex-start; }
}

/* 3.42.0 (registre ligne 111) : mot clé des couleurs jusqu'à 120 caractères */
.champ--mot-cle { width: 46ch; max-width: 100%; }

/* 3.43.0 (registre ligne 107) : instructions M4 / M57 */
.pastille-imput { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; font-size: 12.5px; font-weight: 700; color: #fff; cursor: help; }
.pastille-imput--ok { background: #2e7d32; }
.pastille-imput--alerte { background: #c77700; }
.pastille-imput--ko { background: #b42318; }
.nm-onglets { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 10px; }
.nm-onglet { border: 1px solid var(--line); background: var(--surface, #fff); border-radius: 6px; padding: 6px 12px; font: inherit; cursor: pointer; text-align: left; display: flex; flex-direction: column; gap: 1px; }
.nm-onglet__info { font-size: 12px; color: var(--ink-soft); }
.nm-onglet--actif { border-color: var(--brand); background: var(--brand-soft); font-weight: 700; }
.nm-outils { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; margin-bottom: 8px; }
.nm-filtre input { width: min(280px, 100%); }
.nm-tableau td.nm-compte { font-weight: 700; }
.nm-import { margin-top: 12px; }
.nm-import summary { cursor: pointer; font-weight: 700; }
.nm-import__ligne { margin: 8px 0; }
.id-choix { display: flex; flex-wrap: wrap; gap: 8px; border: 0; padding: 0; margin: 8px 0; }
.id-choix__option { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: 6px; padding: 7px 12px; cursor: pointer; }
.id-choix__option--actif { border-color: var(--brand); background: var(--brand-soft); font-weight: 700; }
.id-titre { font-size: 14px; margin: 14px 0 6px; }
.id-ajout { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px; margin-top: 10px; }
.id-ajout__libelle input { width: min(260px, 100%); }
.id-actions { margin-top: 12px; }
/* 3.44.0 (registre ligne 108) : tableau de bord du régisseur et module Régie à venir. */
.tdb-section--regie { --section: var(--module-regie); }
.tdb-regie__tete { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.tdb-regie-courbe { overflow: hidden; }
/* 3.61.0 : module Régie (maquette validée le 23/10/2026), régies de recettes.
   Violet du module, tuiles douces (relecture : « moins flashy »), tableaux à
   l'accent du dossier de révision. */
.rg-page { --rg-violet: #8a5cb8; --rg-violet-fonce: #6a4fa0; --rg-violet-clair: #efe9f6; --rg-violet-bord: #b9a6d4;
  --rg-accent: var(--revision-accent, #1d3a5f); display: flex; flex-direction: column; gap: 0; }
.rg-entete { background: linear-gradient(135deg, #f6f2fb, #ece4f5); border: 1px solid #ddd0ec; border-radius: 10px 10px 0 0;
  padding: 14px 18px; display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.rg-entete__module { font-size: 11.5px; letter-spacing: .08em; font-weight: 700; color: var(--rg-violet-fonce); text-transform: uppercase; }
.rg-entete__titre { margin: 2px 0; font-size: 22px; color: #2b2140; }
.rg-entete__sous { font-size: 13px; color: #4b5a67; }
.rg-onglets { display: flex; gap: 4px; padding: 10px 14px 0; border-bottom: 2px solid var(--rg-violet); flex-wrap: wrap; }
.rg-onglet { padding: 7px 16px; border: 2px solid var(--rg-violet-bord); border-bottom: 0; border-radius: 6px 6px 0 0;
  background: var(--rg-violet-clair); color: #4b3d63; text-decoration: none; font-weight: 600; display: inline-flex; gap: 6px; align-items: center; }
.rg-onglet--on { background: #fff; color: var(--rg-violet-fonce); border-color: var(--rg-violet); margin-bottom: -2px;
  border-bottom: 2px solid #fff; font-weight: 700; }
.rg-onglet__nb, .rg-puce__nb { background: #b5823a; color: #fff; border-radius: 9px; padding: 0 6px; font-size: 11.5px; font-weight: 700; }
.rg-corps { background: #fff; border: 1px solid var(--line, #d3dae1); border-top: 0; border-radius: 0 0 10px 10px; padding: 14px;
  display: flex; flex-direction: column; gap: 14px; }
.rg-puces { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.rg-puces__titre { font-size: 11.5px; font-weight: 700; letter-spacing: .08em; color: #4b5a67; margin-right: 4px; }
.rg-puce { border: 1px solid #b7c2cd; border-radius: 16px; padding: 4px 12px; background: #fff; font-size: 13px; cursor: pointer;
  display: inline-flex; gap: 6px; align-items: center; }
.rg-puce--on { background: var(--rg-violet); border-color: var(--rg-violet); color: #fff; font-weight: 700; }
#rg-contenu { display: flex; flex-direction: column; gap: 14px; }
.rg-barre-annee { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rg-barre-annee__info { color: #4b5a67; font-size: 13px; margin-left: 8px; }
.rg-tuiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; }
.rg-tuile { position: relative; overflow: hidden; border-radius: 10px; padding: 12px 14px; display: flex; flex-direction: column; gap: 2px;
  min-height: 86px; box-sizing: border-box; background: linear-gradient(135deg, #f3eef9, #e6dcf2); border: 1px solid #d6c8e8; }
.rg-tuile__l { font-size: 11px; letter-spacing: .08em; font-weight: 700; color: #4b3d63; text-transform: uppercase; position: relative; }
.rg-tuile__v { font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums; color: #2b2140; position: relative; }
.rg-tuile__c { font-size: 12.5px; color: #4b5a67; position: relative; }
.rg-tuile svg { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; stroke: var(--rg-violet);
  opacity: .28; fill: none; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.rg-tuile--vert { background: linear-gradient(135deg, #eef7f1, #dcefe3); border-color: #bfdccb; }
.rg-tuile--vert .rg-tuile__l { color: #1e5a3a; } .rg-tuile--vert svg { stroke: #1e7a4c; }
.rg-tuile--rouge { background: linear-gradient(135deg, #fcf1ef, #f6dfdb); border-color: #ecc3bd; }
.rg-tuile--rouge .rg-tuile__l { color: #8c1d18; } .rg-tuile--rouge svg { stroke: #b23a2e; }
.rg-tuile--ambre { background: linear-gradient(135deg, #fbf5ea, #f3e6cc); border-color: #e5cf9f; }
.rg-tuile--ambre .rg-tuile__l { color: #7a5200; } .rg-tuile--ambre svg { stroke: #b5823a; }
.rg-grille { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 14px; }
@media (max-width: 1100px) { .rg-grille { grid-template-columns: 1fr; } }
.rg-cadre { border: 1px solid #d3dae1; border-radius: 8px; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; background: #fff; min-width: 0; }
.rg-cadre__titre { font-size: 16px; font-weight: 700; color: #1f3d66; display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.rg-cadre__info { font-size: 13px; font-weight: 400; color: #4b5a67; }
.rg-note { margin: 0; font-size: 12.5px; color: #4b5a67; }
.rg-graphe { display: flex; flex-direction: column; gap: 4px; }
.rg-barres { display: flex; align-items: flex-end; gap: 8px; height: 190px; padding: 0 6px; border-bottom: 1px solid #b7c2cd; }
.rg-mois { flex: 1; display: flex; align-items: flex-end; justify-content: center; gap: 3px; position: relative; height: 100%;
  border: 0; background: transparent; padding: 0; cursor: pointer; border-radius: 4px 4px 0 0; }
.rg-mois:hover, .rg-mois--choisi { background: var(--rg-violet-clair); }
.rg-bN, .rg-bN1 { width: 40%; max-width: 16px; border-radius: 2px 2px 0 0; display: block; }
.rg-bN { background: var(--rg-violet); }
.rg-bN--partiel { background: repeating-linear-gradient(45deg, var(--rg-violet), var(--rg-violet) 4px, #a985cc 4px, #a985cc 8px); }
.rg-bN1 { background: #c9badf; }
.rg-bud { position: absolute; left: 8%; right: 8%; border-top: 2px dashed #b5823a; }
.rg-libelles { display: flex; gap: 8px; padding: 0 6px; }
.rg-libelles span { flex: 1; text-align: center; font-size: 12px; color: #4b5a67; }
.rg-legende { display: flex; gap: 14px; font-size: 12.5px; color: #4b5a67; }
.rg-legende span { display: inline-flex; align-items: center; gap: 6px; }
.rg-sw { display: inline-block; width: 12px; height: 12px; border-radius: 2px; }
.rg-sw--n { background: var(--rg-violet); } .rg-sw--n1 { background: #c9badf; } .rg-sw--bud { height: 0; border-top: 2px dashed #b5823a; }
.rg-tab th { text-align: center; }
.rg-tab td { padding-top: 0; padding-bottom: 0; height: 22px; white-space: nowrap; }
.rg-tab td.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rg-tab .rg-col-n { background: #e8f1f4; font-weight: 700; }
.rg-tab tr.rg-ligne--choisie td { background: var(--rg-violet-clair); }
.rg-ligne-mois, .rg-ligne-etat { cursor: pointer; }
.rg-up, .rg-ok { color: #1e7a4c; font-weight: 700; }
.rg-down, .rg-ko { color: #b23a2e; font-weight: 700; }
.rg-neutre { color: #4b5a67; }
.rg-depot { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; }
@media (max-width: 900px) { .rg-depot { grid-template-columns: 1fr; } }
.rg-formats { display: flex; flex-direction: column; gap: 8px; }
.rg-format { background: #fff; border: 1px solid #d3dae1; border-radius: 8px; padding: 8px 12px; display: flex; flex-wrap: wrap;
  gap: 4px 8px; align-items: baseline; font-size: 13px; }
.rg-format span:last-of-type { color: #4b5a67; }
.rg-src { display: inline-block; border-radius: 10px; padding: 1px 9px; font-size: 12px; font-weight: 700; }
.rg-src--aloa { background: #e3eef8; color: #1f4f7a; }
.rg-src--excel { background: #e3f2e8; color: #1e5a3a; }
.rg-src--elisath { background: #fff3cd; color: #7a5200; }
.rg-fichier { max-width: 220px; overflow: hidden; text-overflow: ellipsis; }
.rg-statut { display: inline-block; border-radius: 10px; padding: 1px 9px; font-size: 12px; font-weight: 700; }
.rg-statut--valide { background: #dcefe3; color: #1e5a3a; }
.rg-statut--attente { background: #fff3cd; color: #7a5200; }
.rg-statut--ko { background: #f6dfdb; color: #8c1d18; }
.rg-detail { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 1100px) { .rg-detail { grid-template-columns: 1fr; } }
.rg-controles { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
.rg-controles li { font-weight: 600; }
.rg-actions { display: flex; gap: 8px; flex-wrap: wrap; }
/* 3.62.0 : ventilation rapprochée de la banque */
.rg-lien { font-weight: 600; color: var(--rg-violet-fonce); }
.rg-alerte { display: flex; gap: 12px; align-items: center; background: #fdf0ee; border: 1px solid #ecc3bd; border-left: 4px solid #b23a2e;
  border-radius: 8px; padding: 10px 14px; color: #7d241b; font-size: 14px; }
.rg-alerte__signe { flex: none; width: 26px; height: 26px; border-radius: 50%; background: #b23a2e; color: #fff; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center; }
.rg-tab tr.rg-ligne--ecart td { background: #fbdedb; color: #8c1d18; font-weight: 600; }
.rg-explication { white-space: normal !important; color: #4b5a67; font-size: 13px; }
.rg-defile { max-height: 340px; overflow-y: auto; }
.rg-cadre__titre--petit { font-size: 14px; margin-top: 4px; }
.rg-regles { margin: 0; padding-left: 18px; font-size: 13px; color: #4b5a67; display: flex; flex-direction: column; gap: 2px; }
.rg-budget { display: flex; flex-direction: column; gap: 10px; min-width: min(560px, 90vw); }
.rg-budget h3 { margin: 0; }
.rg-budget__annuel { display: flex; flex-direction: column; gap: 4px; font-weight: 600; max-width: 220px; }
.rg-budget__boutons { display: flex; gap: 8px; flex-wrap: wrap; }
.rg-budget__mois { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
@media (max-width: 600px) { .rg-budget__mois { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rg-budget__mois label { display: flex; flex-direction: column; gap: 2px; font-size: 12.5px; color: #4b5a67; text-transform: capitalize; }
.rg-budget input { text-align: right; font-variant-numeric: tabular-nums; }
/* 3.45.0 (registre ligne 109) : onglets des banques — principale au Trésor en
   vert, hors DFT en bleu avec la mention, autres comptes DFT neutres. */
.onglet-banque--principale { color: #1d6b3a; background: #e3f3e8; border-color: #b7dcc3; }
.onglet-banque--principale.onglet-banque--actif { color: #fff; background: #2e7d4f; border-color: #2e7d4f; }
.onglet-banque--hors-dft { color: #1d4e89; background: #e4eefa; border-color: #bcd2ee; }
.onglet-banque--hors-dft.onglet-banque--actif { color: #fff; background: #2d66b0; border-color: #2d66b0; }
/* 3.47.0 (ligne 119) : régie de recettes rattachée à un régisseur, en violet. */
.onglet-banque--regisseur { color: #5b2d8a; background: #f0e8f8; border-color: #d7c3ea; }
.onglet-banque--regisseur.onglet-banque--actif { color: #fff; background: #6b3fa0; border-color: #6b3fa0; }
.onglet-banque--regisseur .onglet-banque__mention { background: rgba(91, 45, 138, .14); }
.onglet-banque__mention { margin-left: 6px; padding: 0 6px; border-radius: 8px; font-size: 11px; font-weight: 700; background: rgba(29, 78, 137, .14); }
.onglet-banque--actif .onglet-banque__mention { background: rgba(255, 255, 255, .25); }
.badge-regisseur { display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 8px; font-size: 11px; font-weight: 700; color: #5b2d8a; background: #f0e8f8; } /* 3.47.0 */
.badge-hors-dft { display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 8px; font-size: 11px; font-weight: 700; color: #1d4e89; background: #e4eefa; }

/* Relevé hors DFT : aperçu contrôlé avant intégration */
.rhd { border: 1px solid var(--line); border-radius: 6px; padding: 12px 14px; margin-top: 12px; background: var(--surface); }
.rhd__tete { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: baseline; margin-bottom: 10px; }
.rhd__badge { font-weight: 700; color: #1d6b3a; background: #e3f3e8; border-radius: 10px; padding: 1px 9px; font-size: 12.5px; }
.rhd__grille { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 4px 16px; margin: 0; }
.rhd__grille dt { color: var(--ink-soft); font-size: 13px; }
.rhd__grille dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.rhd__num { font-variant-numeric: tabular-nums; }
.rhd-ok { color: #1d6b3a; font-weight: 700; }
.rhd-ko { color: #b42318; font-weight: 700; }
.rhd__blocage { margin: 10px 0 0; }
.rhd__actions { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; margin: 12px 0 4px; }
.rhd-choix { display: flex; gap: 6px; align-items: center; font-size: 13px; }
.rhd-creer { margin-top: 10px; padding: 10px 12px; border: 1px dashed var(--line-forte); border-radius: 6px; }
.rhd-creer__titre { margin: 0 0 6px; font-weight: 700; }
.rhd-creer__champs { display: flex; flex-wrap: wrap; gap: 8px 12px; }
.rhd-creer__champs label { display: flex; flex-direction: column; gap: 2px; font-size: 13px; min-width: 0; }
.rhd__sous-titre { font-size: 13px; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); margin: 14px 0 6px; }
.rhd__tab td { white-space: nowrap; }
@media (max-width: 600px) { .rhd__grille { grid-template-columns: minmax(0, 1fr); } .rhd__grille dt { margin-top: 4px; } }
/* ----------------------------------------------------------------------
   3.46.0 (registre ligne 110) : module TVA, maquette validée le 22/10/2026
   ---------------------------------------------------------------------- */
:root { --tva: #7a3e9d; --tva-soft: #f1e9f7; }
.tva-bandeau { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; justify-content: space-between;
  background: var(--brand); color: #fff; border-radius: 6px; padding: 10px 16px; margin-bottom: 12px;
  border-bottom: 4px solid var(--module-tva); /* 3.68.0 : bandeau marine, filet du module (charte B) */ }
.tva-bandeau b { display: block; font-size: 18px; }
.tva-bandeau span { font-size: 13px; opacity: .92; }
.tva-bandeau__sel { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.tva-periode { display: flex; gap: 6px; align-items: center; font-size: 13px; }
.tva-periode select { min-width: 150px; color: var(--ink); background: #fff; }
.tva-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 12px; }
.tva-kpi { border-radius: 6px; padding: 10px 12px; color: #fff; background: linear-gradient(135deg, #7a3e9d, #56287a); min-width: 0; }
.tva-kpi--b { background: linear-gradient(135deg, #1d3a5f, #142943); }
.tva-kpi--g { background: linear-gradient(135deg, #1e7a4c, #145737); }
.tva-kpi--o { background: linear-gradient(135deg, #b8780f, #8a5800); }
.tva-kpi__k { font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em; opacity: .9; }
.tva-kpi__v { font-size: 23px; font-weight: 700; font-variant-numeric: tabular-nums; }
.tva-kpi__s { font-size: 12px; opacity: .9; }
.tva-panel-tete { display: flex; flex-wrap: wrap; gap: 4px 14px; justify-content: space-between; align-items: baseline; margin-bottom: 10px; }
.tva-panel-tete p { margin: 0; color: var(--ink-soft); font-size: 13px; max-width: 95ch; }
.tva-grille2 { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 14px; align-items: start; }
.tva-grille2 > .panneau { margin: 0; min-width: 0; }
.tva-tab td.tva-d, .tva-d { font-variant-numeric: tabular-nums; white-space: nowrap; }
.tva-tab tr.tva-sous td { background: var(--tva-soft); font-weight: 700; }
.tva-tab tr.tva-ligne--alerte td { background: var(--warn-bg); }
.tva-tab tr.tva-ligne--exclu td { color: var(--ink-soft); }
.tva-pill { display: inline-block; border-radius: 3px; padding: 0 7px; font-size: 12px; font-weight: 700; white-space: nowrap; background: #e7ecf2; color: var(--ink-soft); }
.tva-bandeau .tva-pill { background: rgba(255, 255, 255, .2); color: #fff; border: 1px solid rgba(255, 255, 255, .45); }
.tva-pill--ok { background: var(--ok-bg); color: var(--ok); }
.tva-pill--warn { background: var(--warn-bg); color: var(--warn); }
.tva-pill--bad { background: #f7e4e1; color: #b23a2e; }
.tva-pill--info { background: var(--brand-soft); color: var(--brand); }
.tva-pill--mute { background: #e7ecf2; color: var(--ink-soft); }
.tva-pill--tva { background: var(--tva-soft); color: var(--tva); }
.tva-actions { margin-top: 10px; }
.tva-boutons { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 10px; }
.tva-note { font-size: 13px; color: var(--ink-soft); margin: 8px 0 0; max-width: 95ch; }
.tva-note--warn { color: var(--warn); }
.tva-dates, .tva-ventil, .tva-expl { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: end; margin-top: 8px; }
.tva-dates label, .tva-ventil label { display: grid; gap: 2px; font-size: 12.5px; color: var(--ink-soft); }
.tva-ventil input { width: 9ch; }
.tva-tab td.tva-motif { min-width: 280px; }
.tva-expl input { min-width: 220px; flex: 1; }
.tva-choix-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
.tva-choix { display: flex; gap: 8px; align-items: flex-start; border: 1px solid var(--line); border-radius: 6px; padding: 8px 10px; cursor: pointer; }
.tva-choix:has(input:checked) { border-color: var(--tva); background: var(--tva-soft); }
.tva-choix small { display: block; color: var(--ink-soft); font-size: 12.5px; }
.tva-sous-titre { font-size: 12px; text-transform: uppercase; letter-spacing: .07em; color: var(--ink-soft); margin: 14px 0 6px; }
/* Formulaire pré-rempli : papier blanc, comme la maquette. */
.tva-cerfa { background: #fff; color: #16202b; border: 1px solid #c5ced8; border-radius: 4px; padding: 14px 18px; max-width: 880px; font-size: 13px; }
.tva-cerfa__ent { display: grid; grid-template-columns: 130px minmax(0, 1fr) 170px; gap: 10px; align-items: start; border-bottom: 2px solid #16202b; padding-bottom: 8px; margin-bottom: 10px; }
.tva-cerfa__ent h4 { margin: 0; text-align: center; font-size: 14px; }
.tva-cerfa__ent h4 small { display: block; font-weight: 400; color: #4b5a67; font-size: 12px; }
.tva-cerfa__n, .tva-cerfa__p { font-size: 11.5px; color: #4b5a67; }
.tva-cerfa__p { text-align: right; }
.tva-cerfa__cad { margin-top: 10px; }
.tva-cerfa__cad h5 { margin: 0 0 4px; background: #1d3a5f; color: #fff; padding: 3px 8px; font-size: 12.5px; }
.tva-cerfa__cad h6 { margin: 8px 0 2px; font-size: 12px; color: #4b5a67; }
.tva-cerfa__hd, .tva-cerfa__lg { display: grid; grid-template-columns: 36px minmax(0, 1fr) 120px 120px; gap: 8px; align-items: center; }
.tva-cerfa__hd { font-size: 11px; color: #4b5a67; text-transform: uppercase; letter-spacing: .05em; }
.tva-cerfa__hd .tva-cerfa__dr { text-align: right; }
.tva-cerfa__lg { border-bottom: 1px solid #e1e6ec; padding: 3px 0; }
.tva-cerfa__lg--tot { background: #eef2f6; font-weight: 700; }
.tva-cerfa__no { font-weight: 700; color: #1f5f99; }
.tva-cerfa__m { text-align: right; background: #fff6d6; border: 1px solid #e0d39a; padding: 1px 6px; font-variant-numeric: tabular-nums; }
.tva-cerfa__pied { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px; margin-top: 12px; font-size: 11.5px; color: #4b5a67; }
@media (max-width: 1100px) { .tva-grille2 { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 760px) {
  .tva-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tva-cerfa { padding: 10px; overflow-x: auto; }
  .tva-cerfa__ent { grid-template-columns: minmax(0, 1fr); }
  .tva-cerfa__p { text-align: left; }
  .tva-cerfa__hd, .tva-cerfa__lg { grid-template-columns: 30px minmax(0, 1fr) 76px 76px; gap: 4px; font-size: 12px; }
}

/* 3.48.0 (registre lignes 114 et 120) : tuiles commerciales au design des
   tuiles de l'application ; offre à la carte (bon de commande, devis). */
.grille-badges.cm-tuiles { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; }
.cm-tuiles .badge-visuel .badge-chiffre__nombre { font-size: 30px; }
@media (max-width: 1000px) { .grille-badges.cm-tuiles { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); } }
@media (max-width: 560px) { .grille-badges.cm-tuiles { grid-template-columns: 1fr; } }
.offre-carte--carte { border-style: dashed; }
.commande-carte, .cm-carte { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 6px; font-size: 12.5px; }
.commande-carte[hidden] { display: none; }
.commande-carte .periode { flex-basis: 100%; }
.cm-carte-module { white-space: nowrap; }
.commande-formules label[hidden] { display: none; }
/* 3.49.0 (registre ligne 124) : dossier en installation. Editeur : bandeau
   ardoise teinte bleu (parametrage ouvert) ; comptes du client : bandeau
   discret jusqu'a la validation de la livraison. */
.bandeau-invite--installation { background: #2f5d7c; }
.bandeau-installation {
  background: #eef4f9; color: #1d2b3a; border-bottom: 1px solid #cfdde9; padding: 6px 16px; font-size: 13px;
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
}
.bandeau-installation strong { color: #2f5d7c; }
.bandeau-installation__lien { margin-left: auto; font-weight: 700; color: var(--brand); }
.badge-installation { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 3px; font-size: 11px;
  font-weight: 700; background: #fff4e0; color: #8a5a00; vertical-align: middle; white-space: nowrap; }
.installation-cadre--encours { border-left: 4px solid #e0aa45; }
.installation-historique ul { margin: 6px 0 0; padding-left: 18px; font-size: 13px; line-height: 1.6; }

/* 3.53.0 (registre ligne 113, maquette validée le 22/10/2026, « choix 2 ») :
   seul le pictogramme porte la nuance de son module (remplace la règle
   3.34.0 des pictogrammes tous blancs) ; le fond ne se teinte que pour le
   module déplié ; Réglages en gris discret (texte plus petit et plus pâle,
   pictogramme neutre). Un navigateur sans color-mix garde le fond 3.34. */
.nav .nav__module .nav__module-icone { background: var(--module); color: var(--module-glyphe); }
.nav .nav__module:not(.nav__groupe--replie) { background: rgba(255, 255, 255, .05); background: color-mix(in srgb, var(--module) 14%, transparent); }
.nav .nav__module:not(.nav__groupe--replie) > .nav__volet { background: color-mix(in srgb, var(--module) 11%, transparent); }
.nav .nav__module--reglages .nav__module-icone { background: rgba(255, 255, 255, .08); color: #fff; }
.nav .nav__module--reglages:not(.nav__groupe--replie) { background: color-mix(in srgb, var(--module) 7%, transparent); }
.nav .nav__module--reglages:not(.nav__groupe--replie) > .nav__volet { background: color-mix(in srgb, var(--module) 6%, transparent); }
.nav .nav__module--reglages .nav__entete { color: rgba(255, 255, 255, .72); font-size: 13.5px; }
body.menu-rail .nav .nav__module--choisi { background: transparent; }

/* 3.55.0 (ligne 128, maquette B validee le 22/10/2026) : cadre « Pieces de
   la ligne » deplie sous la ligne cliquee, ligne et cadre en ambre, bouton
   « Voir la piece » en evidence. */
:root { --pieces-ambre: #f2a33a; --pieces-ambre-doux: #fff4e2; --pieces-ambre-texte: #8a5a00; }
tr.ligne-pieces-active > td { background: var(--pieces-ambre-doux) !important;
  border-top: 2px solid var(--pieces-ambre); border-bottom: 2px solid var(--pieces-ambre); }
tr.ligne-pieces-active > td:first-child { box-shadow: inset 4px 0 0 var(--pieces-ambre); }
tr.ligne-pieces-active .pieces-ligne__bouton { background: var(--pieces-ambre); border-color: var(--pieces-ambre); color: #1d2a38; }
tr.pieces-ligne-depli > td { padding: 0 !important; background: var(--surface, #fff) !important; white-space: normal;
  height: auto; border-top: 0; }
.pieces-ligne-depli__contenu { position: sticky; left: 0; max-width: min(100%, 1100px); }
.pieces-ligne--depli { position: relative; margin: 8px 10px 12px 34px; border: 2px solid var(--pieces-ambre);
  border-radius: 0 8px 8px 8px; background: var(--surface, #fff); box-shadow: 0 6px 22px rgba(176, 122, 18, .18);
  text-align: left; font-size: 14px; }
.pieces-ligne--depli::before { content: ""; position: absolute; left: 18px; top: -9px; width: 14px; height: 14px;
  background: var(--pieces-ambre-doux); border-left: 2px solid var(--pieces-ambre); border-top: 2px solid var(--pieces-ambre);
  transform: rotate(45deg); }
.pieces-ligne__bandeau { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: center; justify-content: space-between;
  background: var(--pieces-ambre-doux); padding: 8px 14px; border-bottom: 1px solid var(--pieces-ambre); border-radius: 0 6px 0 0; }
.pieces-ligne__titre { margin: 0; font-size: 14px; text-transform: uppercase; letter-spacing: .02em; }
.pieces-ligne__titre b { color: var(--pieces-ambre-texte); font-variant-numeric: tabular-nums; }
.pieces-ligne__corps { padding: 10px 14px 12px; }
.pieces-ligne__somme { margin: 0; color: var(--ink-soft, #5b6b7c); }
.pieces-ligne__somme b { color: var(--ink, #1d2a38); font-variant-numeric: tabular-nums; }
.pieces-ligne__ecart { color: #b42318; font-weight: 700; }
.pieces-ligne__attente { font-style: italic; }
.bouton--voir { display: inline-flex; align-items: center; gap: 7px; background: var(--brand); border: 1px solid var(--brand);
  color: #fff; font-weight: 700; padding: 6px 14px; border-radius: 6px; box-shadow: 0 2px 6px rgba(45, 109, 163, .3); cursor: pointer; }
.bouton--voir:hover { background: var(--brand-strong, var(--brand)); }
.bouton--voir:focus-visible { outline: 3px solid var(--pieces-ambre); outline-offset: 2px; }
.bouton--voir svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2; }
@media (prefers-reduced-motion: no-preference) {
  .pieces-ligne--depli { animation: pieces-entree .3s ease-out; }
  @keyframes pieces-entree { from { transform: translateY(-4px); box-shadow: 0 0 0 6px rgba(242, 163, 58, .45); } }
}
@media (max-width: 700px) { .pieces-ligne--depli { margin-left: 10px; } }

/* 3.55.1 (ligne 132) : « Instruire » amene l'ecran sur le tableau des
   operations, un peu d'air au-dessus des en-tetes. */
.instruction-operations { scroll-margin-top: 16px; }

/* 3.56.0 (ligne 133) : declaration de TVA deja deposee (totaux saisis),
   ecarts avec le calcul de SoFi. */
.tva-depose__barre { display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: center; margin-bottom: 10px; }
.tva-depose__barre label { display: inline-flex; gap: 6px; align-items: center; }
.tva-depose__code { font-weight: 700; color: var(--tva); width: 48px; }
.tva-depose__calc { color: var(--ink-soft); }
.tva-depose__saisie { width: 120px; text-align: right; font-variant-numeric: tabular-nums; }
.tva-depose__expl { width: 100%; min-width: 220px; }
.tva-depose__ko { color: #b42318; font-weight: 700; }
.tva-depose__ok { color: var(--ink-soft); }
.tva-tab tr.tva-depose__ecart td { background: #fdecea; }
.tva-depose__resume { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; }
.tva-depose__resume > div { flex: 1 1 200px; display: grid; gap: 2px; border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; }
.tva-depose__resume small { color: var(--ink-soft); text-transform: uppercase; font-size: 11px; letter-spacing: .05em; }
.tva-depose__resume b { font-size: 20px; font-variant-numeric: tabular-nums; }
.tva-depose__resume span { color: var(--ink-soft); font-size: 12.5px; }
.tva-depose__resume .tva-depose__resume--ko { border-color: #b42318; background: #fdecea; }
.tva-depose__resume .tva-depose__resume--ko b { color: #b42318; }

/* ---- Grand livre 3.60.0 (maquette validée le 23/10/2026) : onglets
   Comptes généraux / Comptes de tiers, balance des tiers et contrôle,
   bandeau de navigation compte par compte, points « P » ---- */
.gl-onglets { display: flex; gap: 6px; margin: 10px 0 12px; padding-left: 8px; border-bottom: 2px solid var(--revision-accent, #1d3a5f); flex-wrap: wrap; }
.gl-onglet {
  padding: 7px 18px; border: 2px solid #9fb2be; border-bottom: 0; border-radius: 6px 6px 0 0;
  background: #e4eaee; color: var(--ink-soft); text-decoration: none; font-weight: 600;
}
.gl-onglet:hover { background: #f4f7fa; color: var(--ink); }
.gl-onglet--actif {
  background: var(--surface); color: var(--revision-accent, #1d3a5f); font-weight: 700;
  border-color: var(--revision-accent, #1d3a5f); border-bottom: 2px solid var(--surface); margin-bottom: -2px;
}
.gl-collectifs { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 0 0 10px; }
.gl-collectif {
  padding: 4px 12px; border: 1px solid var(--line-forte); border-radius: 16px; background: var(--surface);
  color: var(--ink); text-decoration: none; font-size: 13.5px; white-space: nowrap;
}
.gl-collectif:hover { border-color: var(--revision-accent, #1d3a5f); }
.gl-collectif--actif { background: var(--revision-accent, #1d3a5f); border-color: var(--revision-accent, #1d3a5f); color: #fff; }
.gl-collectif--actif .gl-p { background: #fff; color: var(--danger); }
.gl-controle {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0 0 10px;
  padding: 9px 14px; border: 2px solid; border-radius: var(--rayon); font-size: 14px;
}
.gl-controle strong { font-variant-numeric: tabular-nums; }
.gl-controle--ok { background: var(--ok-bg); border-color: var(--ok); color: #155c39; }
.gl-controle--ecart { background: var(--danger-bg); border-color: var(--danger); color: #7d241b; }
.gl-controle__icone {
  flex: none; display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px;
  border-radius: 50%; color: #fff; font-weight: 700;
}
.gl-controle--ok .gl-controle__icone { background: var(--ok); }
.gl-controle--ecart .gl-controle__icone { background: var(--danger); }
.gl-controle__lien { margin-left: auto; color: #7d241b; font-weight: 700; }
.gl-revision { white-space: nowrap; font-variant-numeric: tabular-nums; }
.gl-jauge { display: inline-block; width: 64px; height: 6px; margin-right: 6px; vertical-align: middle; border-radius: 3px; background: #dbe3e9; overflow: hidden; }
.gl-jauge > span { display: block; height: 100%; background: var(--ok); }
.gl-sans-tiers td { font-style: italic; color: var(--ink-soft); }

/* Points « P » */
.gl-p {
  display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 18px; padding: 0 4px;
  border: 0; border-radius: 3px; background: var(--danger); color: #fff; font: inherit; font-size: 12px; font-weight: 700;
  line-height: 1; vertical-align: middle;
}
button.gl-p { cursor: pointer; }
button.gl-p:disabled { cursor: default; }
.gl-p--leve { background: #9aa7b0; margin-left: 4px; }
.gl-p--petit { min-width: 16px; height: 15px; font-size: 11px; }
.gl-p--compte { margin-left: 6px; }
.tableau--revision tbody tr.ligne-probleme td,
.tableau--revision tbody tr.ligne-probleme:nth-of-type(even) td { background-color: #fbdedb; color: #8c1d18; font-weight: 600; }
.tableau--revision tbody tr.ligne-probleme .champ--inline { color: inherit; }
.tableau--revision tbody tr.gl-p-commentaire td,
.tableau--revision tbody tr.gl-p-commentaire:nth-of-type(even) td {
  background-color: #fdf0ee; color: #8c1d18; font-size: 12.5px; height: 20px; border-top: 0;
}
.tableau--revision tbody tr.gl-p-commentaire a,
.tableau--revision tbody tr.gl-p-commentaire .bouton-lien { color: #8c1d18; text-decoration: underline; }
.tableau--revision tbody tr.gl-ligne-active td { box-shadow: inset 0 1px 0 #3b82c4, inset 0 -1px 0 #3b82c4; }
.tableau--revision tbody tr.gl-ligne-active:not(.ligne-probleme) td { background-color: #e1eefa; }
.tableau--revision tbody tr[data-cle]:focus { outline: none; }

/* Bandeau de navigation compte par compte / tiers par tiers */
.barre-compte__centre { flex-direction: column; align-items: stretch; flex-wrap: nowrap; gap: 8px; }
.barre-compte__ligne { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; }
.barre-compte__choix {
  min-width: 260px; max-width: 100%; font-size: 17px; font-weight: 700;
  border-color: color-mix(in srgb, var(--cycle, var(--brand)) 45%, #fff);
}
.barre-compte__rang { font-size: 13.5px; color: var(--ink-soft); white-space: nowrap; }
.barre-compte__filtres { gap: 6px 10px; }
.gl-outils-lignes { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 0 0 10px; }
.gl-outils-lignes .gl-btn-reviser { margin-left: auto; }
.gl-touches { font-size: 12.5px; color: var(--ink-soft); }
.gl-touches kbd, .gl-dialogue-p kbd {
  display: inline-block; min-width: 16px; padding: 0 5px; border: 1px solid var(--line-forte); border-bottom-width: 2px;
  border-radius: 4px; background: var(--surface); font: inherit; font-size: 11.5px; font-weight: 700; text-align: center; color: var(--ink);
}

/* Fenêtre du point P */
.gl-dialogue-p { width: min(640px, 94vw); overflow: hidden; }
.gl-dialogue-p__tete { display: flex; align-items: center; gap: 12px; padding: 14px 20px; background: var(--danger); color: #fff; }
.gl-dialogue-p__tete h3 { margin: 0; font-size: 18px; color: #fff; }
.gl-dialogue-p__tete p { margin: 2px 0 0; font-size: 12.5px; opacity: .92; }
.gl-dialogue-p__marque {
  flex: none; display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px;
  border-radius: 5px; background: #fff; color: var(--danger); font-weight: 700; font-size: 18px;
}
.gl-dialogue-p__ligne {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px 14px; margin: 0;
  padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--rayon); background: #f4f7fa; font-size: 13px;
}
.gl-dialogue-p__ligne dt { font-size: 11px; letter-spacing: .06em; font-weight: 700; color: var(--ink-soft); text-transform: uppercase; }
.gl-dialogue-p__ligne dd { margin: 0; }
.gl-dialogue-p__montant { text-align: right; }
.gl-dialogue-p__montant dd { font-weight: 700; font-variant-numeric: tabular-nums; }
.gl-dialogue-p__libelle { grid-column: 1 / -1; }
.gl-dialogue-p__avis, .gl-dialogue-p__actuel {
  margin: 0; padding: 10px 12px; border: 1px solid #f0c3bd; border-radius: var(--rayon); background: #fdf0ee; color: #6e1a15; font-size: 13px;
}
.gl-dialogue-p .dialogue-motif__actions { align-items: center; flex-wrap: wrap; }
.gl-dialogue-p .dialogue-motif__actions .gl-touches { margin-right: auto; }
.gl-dialogue-p .obligatoire { color: var(--danger); }
@media (max-width: 600px) {
  .gl-dialogue-p__ligne { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .barre-compte__choix { min-width: 0; width: 100%; }
}
/* 3.60.0 : le libellé des écritures ne disparaît plus sur un écran de
   1 440 px (15 colonnes) : largeur minimale, le tableau défile au besoin. */
.tableau--revision th.col-libelle, .tableau--revision td.col-libelle { min-width: 240px; }

/* 3.63.0 : image de la signature (Mon compte) */
.mc-signature { display: flex; gap: 16px; align-items: flex-start; flex-wrap: wrap; }
.mc-signature__apercu { width: 260px; height: 90px; border: 1px dashed #b7c2cd; border-radius: 8px; display: flex;
  align-items: center; justify-content: center; background: #fff; }
.mc-signature__apercu img { max-width: 240px; max-height: 80px; }
.mc-signature__texte { flex: 1; min-width: 240px; display: flex; flex-direction: column; gap: 8px; }
.mc-signature__boutons { display: flex; gap: 8px; flex-wrap: wrap; }

/* 3.63.0 : contrôle de caisse (module Régie) */
.rg-champ-inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }
.rg-ctrl-entete { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-size: 15px; }
.rg-ctrl { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(0, 1.6fr) minmax(0, 1.6fr); gap: 12px; align-items: start; }
@media (max-width: 1100px) { .rg-ctrl { grid-template-columns: 1fr; } }
.rg-contenant { width: 100%; display: flex; justify-content: space-between; gap: 8px; padding: 7px 10px; margin-bottom: 4px;
  border: 1px solid #d3dae1; border-radius: 6px; background: #fff; cursor: pointer; font-size: 13.5px; text-align: left; }
.rg-contenant strong { font-variant-numeric: tabular-nums; }
.rg-contenant--on { border-color: var(--rg-violet); background: var(--rg-violet-clair); }
.rg-billetage .rg-nb { width: 80px; text-align: right; padding: 1px 6px; height: 22px; }
.rg-billetage .rg-coupure { font-weight: 700; }
.rg-tab tr.rg-section td { background: #eef2f5; font-weight: 700; }
.rg-montant-contenant { display: flex; flex-direction: column; gap: 8px; }
.rg-montant-contenant label, .rg-commentaire { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #4b5a67; }
.rg-apports { width: 110px; text-align: right; padding: 1px 6px; height: 22px; }
.rg-lien-pdf { display: inline-flex; gap: 4px; align-items: center; }

/* 3.64.0 : régie d'avances (views/regieAvances.js) */
.rg-av-etat { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12.5px; font-weight: 700; white-space: nowrap; }
.rg-av-etat--vert { background: #dcefe3; color: #1e5a3a; }
.rg-av-etat--bleu { background: #e2ebf5; color: #1f3d66; }
.rg-av-etat--ambre { background: #f3e6cc; color: #7a5200; }
.rg-av-etat--rouge { background: #f6dfdb; color: #8c1d18; }
.rg-av-etat--gris { background: #eef2f5; color: #4b5a67; font-weight: 400; }
.rg-av-controle { border-left: 4px solid #b23a2e; }
.rg-av-controle--ok { border-left-color: #1e7a4c; }
.rg-av-equation { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: baseline; font-variant-numeric: tabular-nums; }
.rg-av-equation b { margin-left: 4px; }
.rg-av-verdict { font-weight: 700; color: #b23a2e; }
.rg-av-controle--ok .rg-av-verdict { color: #1e7a4c; }
.rg-av-actions { white-space: nowrap; text-align: right; }
.rg-av-actions .bouton + .bouton { margin-left: 4px; }
.rg-av-sans-piece select, .rg-av-sans-piece { color: #b23a2e; }
.rg-av-ecartee td { color: #8a96a0; }
.rg-av-rattacher { margin: 6px 0; }
.rg-av-champs { display: flex; flex-direction: column; gap: 10px; min-width: min(420px, 80vw); }
.rg-av-champs label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #4b5a67; }
.rg-av-candidats { margin-top: 8px; }
.rg-av-piece { height: 22px; padding: 0 4px; font: inherit; font-size: 13px; border: 1px solid #c5cfd8; border-radius: 4px; background: #fff; }

/* 3.64.1 : écrans et serveur de versions différentes (versionControle.js) */
.bandeau-version { position: sticky; top: 0; z-index: 1000; display: flex; gap: 12px; flex-wrap: wrap; align-items: center; padding: 8px 16px; font-size: 14px; }
.bandeau-version--recharger { background: #fbf5ea; border-bottom: 2px solid #b5823a; color: #5c3d00; }
.bandeau-version--redemarrer { background: #b23a2e; color: #fff; }
.bandeau-version .bouton { margin-left: auto; }

/* ------------------------------------------------------------------
   3.66.0 : archives des exercices (maquettes « Archives » et « Archiver »
   validées le 24/10/2026) ; couleur du dossier de révision.
   ------------------------------------------------------------------ */
.ar-page { display: flex; flex-direction: column; gap: 14px; }
.ar-bandeau { background: var(--revision-accent, #1d3a5f); border-bottom: 4px solid var(--module-reglages); border-radius: 4px; padding: 16px 20px;
  display: flex; justify-content: space-between; align-items: center; color: #fff; flex-wrap: wrap; gap: 10px; }
.ar-bandeau > div:first-child { display: flex; flex-direction: column; gap: 4px; }
.ar-bandeau__sur { font-size: 11px; letter-spacing: .12em; font-weight: 700; opacity: .9; }
.ar-bandeau__titre { font-size: 21px; font-weight: 700; }
.ar-bandeau__droite { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; text-align: right; }
.ar-bandeau__dossier { font-size: 19px; font-weight: 700; }
.ar-bandeau__info { font-size: 12.5px; opacity: .95; }
.ar-alerte { display: flex; gap: 12px; align-items: center; background: #fbf5ea; border: 1px solid #e5cf9f; border-radius: 6px;
  padding: 10px 14px; color: #5c3d00; flex-wrap: wrap; }
.ar-alerte > span:not(.ar-alerte__pastille) { flex: 1 1 300px; }
.ar-alerte--info { background: #eef1f5; border-color: #c3cfdc; color: #1f3d66; }
.ar-alerte__pastille { width: 22px; height: 22px; border-radius: 50%; background: #b5823a; color: #fff; display: inline-flex;
  align-items: center; justify-content: center; font-weight: 700; flex: none; }
.ar-cartes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.ar-carte { background: #fff; border: 1px solid #d3dae1; border-radius: 8px; padding: 12px 16px; display: flex; flex-direction: column; gap: 2px; }
.ar-carte__titre { font-size: 11px; font-weight: 700; letter-spacing: .06em; color: #4b5a67; }
.ar-carte__valeur { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; }
.ar-carte__valeur small { font-size: 14px; font-weight: 400; color: #4b5a67; }
.ar-carte__note { font-size: 12.5px; color: #4b5a67; }
.ar-panneau__entete { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.ar-tab th { background: var(--revision-accent, #1d3a5f); color: #fff; }
.ar-tab .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ar-tab tr.total td { font-weight: 700; background: #dfeaee; }
.ar-ligne-version td { color: #6b7782; }
.ar-tab label { white-space: nowrap; display: inline-flex; gap: 6px; align-items: center; }
.ar-actions { white-space: nowrap; display: flex; gap: 8px; align-items: center; }
.ar-empreinte { font-family: Consolas, "Courier New", monospace; font-size: 12px; color: #3d4a56; white-space: nowrap; }
.ar-etat { display: inline-block; border-radius: 10px; padding: 1px 9px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.ar-etat--ouvert { background: #e9edf1; color: #3d4a56; }
.ar-etat--afaire { background: #fbf0d9; color: #7a5200; }
.ar-etat--prod { background: #e1eefa; color: #1f4f80; }
.ar-etat--archive { background: #e4f3ea; color: #155c39; }
.ar-etat--echec { background: #f6dfdb; color: #8c1d18; }
.ar-etat--rempl { background: #eceff2; color: #5b6772; text-decoration: line-through; }
.ar-note { font-size: 12.5px; }
.ar-etapes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.ar-etape { display: flex; gap: 8px; align-items: center; padding: 8px 12px; border-radius: 6px; background: #fff; border: 1px solid #d3dae1; color: #4b5a67; }
.ar-etape.fait { background: #e4f3ea; border-color: #bfdccb; color: #155c39; }
.ar-etape.on { border: 2px solid var(--revision-accent, #1d3a5f); background: #eef1f5; color: #16202b; font-weight: 700; }
.ar-rond { width: 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; background: #c9d2da; color: #16202b; flex: none; }
.ar-etape.fait .ar-rond { background: #1e7a4c; color: #fff; }
.ar-etape.on .ar-rond { background: var(--revision-accent, #1d3a5f); color: #fff; }
.ar-colonnes { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-start; }
.ar-colonne-principale { flex: 1 1 560px; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.ar-colonne-laterale { flex: 1 1 340px; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.ar-production { border: 2px solid var(--revision-accent, #1d3a5f); }
.ar-ctrl { display: flex; gap: 10px; align-items: flex-start; padding: 6px 0; border-bottom: 1px solid #edf0f3; }
.ar-pastille { width: 20px; height: 20px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  color: #fff; font-size: 12px; font-weight: 700; flex: none; }
.ar-pastille--ok { background: #1e7a4c; }
.ar-pastille--alerte { background: #b5823a; }
.ar-barre-ligne { margin: 8px 0; }
.ar-barre-ligne--attente { color: #4b5a67; }
.ar-barre-libelle { display: flex; justify-content: space-between; gap: 8px; }
.ar-barre { height: 8px; border-radius: 4px; background: #e3e8ed; overflow: hidden; margin-top: 3px; }
.ar-barre span { display: block; height: 100%; background: var(--revision-accent, #1d3a5f); }
.ar-ensemble { display: flex; justify-content: space-between; font-weight: 700; margin: 8px 0; }
@media (max-width: 760px) {
  .ar-cartes, .ar-etapes { grid-template-columns: 1fr; }
  .ar-bandeau__droite { align-items: flex-start; text-align: left; }
}

/* 3.69.0 : clôture des comptes (lot Clôture 1, maquettes du canevas). Entrée
   rouge Marianne en tête du menu pendant la campagne ; écrans en marine,
   pastilles de statut du CdC. */
.nav .nav__entree--cloture { background: var(--module-cloture); margin: 0 0 8px; }
.nav .nav__entree--cloture[hidden] { display: none !important; }
.nav .nav__entree--cloture:hover { background: color-mix(in srgb, var(--module-cloture) 88%, #000000); }
.nav .nav__entree--cloture .nav__module-icone { background: rgba(255, 255, 255, .2); }
.nav .nav__entree--cloture.nav__lien--actif { background: color-mix(in srgb, var(--module-cloture) 82%, #000000); box-shadow: inset 3px 0 0 #ffffff; }
.nav__cloture-jx { font-size: 12px; font-weight: 700; padding: 1px 7px; border-radius: 10px; background: rgba(255, 255, 255, .22); }
.pastille-notif--cloture { background: #ffffff; color: var(--module-cloture); }
.cl-bandeau { background: var(--brand); color: #fff; border-radius: 8px; padding: 14px 18px; border-bottom: 4px solid var(--module-cloture); margin-bottom: 12px; }
.cl-surtitre { font-size: 11.5px; letter-spacing: .08em; font-weight: 700; opacity: .85; }
.cl-titre { margin: 2px 0; font-size: 20px; }
.cl-fiche-tete .cl-titre, .cl-fiche-tete .cl-surtitre { color: #1d3a5f; }
.cl-sous { font-size: 13px; opacity: .9; }
.cl-onglets, .cl-filtres { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 12px; }
.cl-onglet, .cl-filtre { padding: 6px 12px; border-radius: 6px; border: 1px solid #c3cfdc; background: #fff; color: #16202b; text-decoration: none; font-size: 13.5px; }
.cl-onglet--actif, .cl-filtre--actif { background: #1d3a5f; border-color: #1d3a5f; color: #fff; font-weight: 700; }
.cl-alerte { display: flex; align-items: center; gap: 12px; background: #fde7e8; border: 1px solid #f3b8bb; border-radius: 8px; padding: 10px 14px; margin-bottom: 12px; color: #6d0008; }
.cl-alerte > div { flex: 1; }
.cl-alerte-picto { width: 24px; height: 24px; border-radius: 50%; background: var(--module-cloture); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; }
.cl-info { background: #eef1f5; border: 1px solid #c3cfdc; border-radius: 8px; padding: 8px 12px; margin-bottom: 12px; font-size: 13.5px; }
.cl-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; margin-bottom: 12px; }
.cl-carte { background: #fff; border: 1px solid #d3dae1; border-radius: 8px; padding: 12px 14px; display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
.cl-lib { font-size: 11px; font-weight: 700; letter-spacing: .06em; color: #4b5a67; }
.cl-chiffre { font-size: 22px; color: #1d3a5f; }
.cl-rouge { color: var(--module-cloture); }
.cl-jx { font-size: 12px; padding: 1px 7px; border-radius: 10px; background: #fde7e8; color: #a3000b; vertical-align: middle; }
.cl-deux { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 12px; }
.cl-cadre { background: #fff; border: 1px solid #d3dae1; border-radius: 8px; padding: 12px 16px; margin-bottom: 12px; overflow-x: auto; }
.cl-cadre h3 { margin: 0 0 8px; font-size: 15px; color: #1d3a5f; }
.cl-cadre-tete { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.cl-cadre-tete h3 { margin: 0; }
.cl-tab { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.cl-tab th { background: #1d3a5f; color: #fff; font-size: 12px; padding: 6px 8px; text-align: left; white-space: nowrap; text-transform: uppercase; letter-spacing: .03em; }
.cl-tab td { padding: 6px 8px; border-bottom: 1px solid #e3e8ed; vertical-align: middle; }
.cl-tab tr:nth-child(even) td { background: #f4f7fa; }
.cl-tab .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cl-tab input[type="text"] { width: 100%; min-width: 120px; }
.cl-ecartee td { color: #7b8794; }
.cl-etat { display: inline-block; border-radius: 10px; padding: 1px 9px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.cl-etat--afaire { background: #e9edf1; color: #3d4a56; }
.cl-etat--encours { background: #fbf0d9; color: #7a5200; }
.cl-etat--fait { background: #e3eefb; color: #1d4f8a; }
.cl-etat--verifie { background: #e4f3ea; color: #155c39; }
.cl-etat--sofi { background: #ece9f7; color: #4a3a8f; }
.cl-etat--sansobjet { background: #f0efec; color: #5d6670; }
.cl-etat--retard { background: #fde7e8; color: #a3000b; }
.cl-qui { display: inline-block; border-radius: 4px; padding: 0 6px; font-size: 11.5px; font-weight: 700; border: 1px solid #b7c2cd; color: #3d4a56; }
.cl-propre { font-size: 11px; padding: 0 6px; border-radius: 4px; background: #eef1f5; color: #1d3a5f; }
.cl-nb { font-size: 11px; padding: 0 6px; border-radius: 8px; background: #1d3a5f; color: #fff; }
.cl-barre { display: inline-block; width: 100%; min-width: 80px; height: 8px; background: #e3e8ed; border-radius: 4px; overflow: hidden; vertical-align: middle; }
.cl-barre span { display: block; height: 8px; background: #1d3a5f; }
.cl-acteur { display: grid; grid-template-columns: auto 1fr auto; gap: 4px 10px; align-items: center; margin-bottom: 10px; }
.cl-acteur .cl-barre { grid-column: 1 / -1; }
.cl-fil { font-size: 13px; margin-bottom: 8px; }
.cl-fiche-tete { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; background: #fff; border: 1px solid #d3dae1; border-top: 4px solid var(--module-cloture); border-radius: 8px; padding: 12px 16px; margin-bottom: 12px; }
.cl-fiche-tete .cl-sous { opacity: 1; color: #4b5a67; }
.cl-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.cl-bouton-valider { background: #2e8b57; border-color: #2e8b57; color: #fff; font-weight: 700; }
.cl-etapes { display: flex; list-style: none; padding: 0; margin: 0 0 12px; gap: 8px; }
.cl-etapes li { flex: 1 1 0; display: flex; flex-direction: column; align-items: center; gap: 3px; font-size: 12.5px; color: #4b5a67; }
.cl-etapes small { color: #7b8794; }
.cl-pt { width: 22px; height: 22px; border-radius: 50%; border: 2px solid #b7c2cd; background: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 12px; }
.cl-etape--faite .cl-pt { background: #2e8b57; border-color: #2e8b57; color: #fff; }
.cl-etape--courante .cl-pt { border-color: #1d3a5f; color: #1d3a5f; }
.cl-dl { display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px; font-size: 13px; margin: 8px 0 0; }
.cl-dl dt { font-size: 11px; font-weight: 700; letter-spacing: .06em; color: #4b5a67; padding-top: 2px; }
.cl-dl dd { margin: 0; }
.cl-fil-messages { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; }
.cl-msg { background: #f4f7fa; border-radius: 6px; padding: 7px 10px; display: flex; flex-direction: column; gap: 2px; font-size: 13.5px; }
.cl-msg--statut, .cl-msg--piece, .cl-msg--reglage { background: transparent; border-left: 3px solid #c3cfdc; border-radius: 0; color: #4b5a67; font-size: 12.5px; }
.cl-msg-tete { font-size: 11.5px; color: #7b8794; }
.cl-form-message { display: flex; gap: 8px; align-items: flex-end; }
.cl-form-message textarea { flex: 1; }
.cl-vide { max-width: 640px; background: #fff; border: 1px solid #d3dae1; border-top: 4px solid var(--module-cloture); border-radius: 8px; padding: 16px 20px; }
.cl-form, .cl-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; align-items: end; margin-bottom: 12px; }
.cl-form label, .cl-grille label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
.cl-form .cl-case { flex-direction: row; align-items: center; }
.cl-pied { display: flex; justify-content: flex-end; margin-top: 10px; }
.cl-ouvrir { display: flex; align-items: center; justify-content: space-between; gap: 16px; background: #fff; border: 1px solid #d3dae1; border-left: 4px solid var(--module-cloture); border-radius: 8px; padding: 12px 16px; }

/* 3.70.0 : clôture des comptes, lot 2 (tuile du tableau de bord, fermeture, mes tâches). */
.tdb-cloture { display: grid; grid-template-columns: 1fr auto; gap: 4px 16px; align-items: center; background: var(--module-cloture);
  color: #fff; border-radius: 10px; padding: 14px 18px; margin-bottom: 14px; text-decoration: none; }
.tdb-cloture:hover { background: color-mix(in srgb, var(--module-cloture) 88%, #000000); color: #fff; }
.tdb-cloture__titre { font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; opacity: .9; }
.tdb-cloture__chiffre { font-size: 22px; font-weight: 700; grid-row: span 2; text-align: right; }
.tdb-cloture__chiffre small { font-size: 12px; font-weight: 400; display: block; opacity: .9; }
.tdb-cloture__barre { height: 6px; background: rgba(255, 255, 255, .3); border-radius: 3px; overflow: hidden; }
.tdb-cloture__barre span { display: block; height: 6px; background: #fff; }
.tdb-cloture__taches { font-size: 13.5px; grid-column: 1 / -1; }
.cl-fermer, .cl-close { display: flex; align-items: center; justify-content: space-between; gap: 16px; background: #fff; border: 1px solid #d3dae1;
  border-left: 4px solid var(--module-cloture); border-radius: 8px; padding: 10px 16px; margin-bottom: 12px; font-size: 13.5px; }
.cl-close { border-left-color: #2e8b57; }
.cl-cadre--retard { border-color: #f3b8bb; }
.cl-cadre--retard h3 { color: #a3000b; }
.cl-msg--relance { background: transparent; border-left: 3px solid #f3b8bb; border-radius: 0; color: #4b5a67; font-size: 12.5px; }

/* 3.71.0 : fiches de risque du programme de travail (lot Clôture 3). Criticité
   en quatre zones (faible, moyen, élevé, critique), conclusion en pastille. */
.fr-entete { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
.fr-entete .sous-titre { margin: 0; }
.fr-entete .bouton { margin-left: auto; }
.fr-fiche { border: 1px solid #d3dae1; border-left: 4px solid var(--cycle, #1d3a5f); border-radius: 8px; background: #fff; margin: 8px 0; }
.fr-fiche--sensible { border-left-width: 6px; }
.fr-fiche--ecartee { opacity: .6; }
.fr-fiche > summary { display: grid; grid-template-columns: 64px 1fr auto; gap: 12px; align-items: center; padding: 10px 14px; cursor: pointer; list-style: none; }
.fr-fiche > summary::-webkit-details-marker { display: none; }
.fr-code { font-weight: 700; color: #1d3a5f; }
.fr-resume { font-size: 13.5px; }
.fr-resume span { color: #4b5a67; }
.fr-tete-droite { display: flex; gap: 6px; align-items: center; white-space: nowrap; }
.fr-op { font-size: 11px; font-weight: 700; padding: 1px 6px; border-radius: 4px; background: #fde7e8; color: #a3000b; }
.fr-crit { display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 22px; border-radius: 11px; font-weight: 700; font-size: 12px; }
.fr-crit--vide { background: #e9edf1; color: #7b8794; }
.fr-crit--faible { background: #e4f3ea; color: #155c39; }
.fr-crit--moyen { background: #f9eeda; color: #7a5200; }
.fr-crit--eleve { background: #f9e1cf; color: #8a3a00; }
.fr-crit--critique { background: #E1000F; color: #fff; }
.fr-concl { font-size: 12px; font-weight: 700; padding: 1px 9px; border-radius: 10px; background: #e9edf1; color: #3d4a56; }
.fr-concl--maitrise { background: #e4f3ea; color: #155c39; }
.fr-concl--partiel { background: #f9eeda; color: #7a5200; }
.fr-concl--non_maitrise { background: #fde7e8; color: #a3000b; }
.fr-corps { padding: 4px 14px 14px; display: flex; flex-direction: column; gap: 10px; font-size: 13.5px; }
.fr-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 8px; }
.fr-lib { display: block; font-size: 11px; font-weight: 700; letter-spacing: .06em; color: #4b5a67; margin-bottom: 2px; }
.fr-bloc p { margin: 0 0 6px; }
.fr-bloc ul { margin: 0; padding-left: 18px; }
.fr-bloc--ac { background: #eef1f5; border-radius: 6px; padding: 8px 10px; }
.fr-bloc label, .fr-large { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; color: #4b5a67; }
.fr-corps textarea { width: 100%; }
.fr-diligences { list-style: none; padding: 0; margin: 4px 0 8px; }
.fr-diligences li { padding: 2px 0; }
.fr-rep { display: inline-block; min-width: 52px; font-size: 11px; font-weight: 700; padding: 0 6px; border-radius: 4px; background: #e9edf1; color: #3d4a56; text-align: center; }
.fr-rep--faite { background: #e4f3ea; color: #155c39; }
.fr-cotation, .fr-action { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }
.fr-cotation label, .fr-action label { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; color: #4b5a67; }
.fr-action .fr-large { flex: 1 1 320px; }
.fr-n1 { font-size: 12.5px; color: #4b5a67; padding: 4px 8px; background: #f4f7fa; border-radius: 6px; }
.fr-pied { display: flex; gap: 12px; align-items: center; justify-content: flex-end; }
.fr-rouge { color: #a3000b; }
.fr-plan { margin-top: 14px; }
.fr-plan input[type="number"] { width: 72px; }

/* 3.72.0 : contrôle interne (cartographie des risques, plan d'action). */
.ci-grille-cadre { display: grid; grid-template-columns: auto 1fr; gap: 6px 10px; align-items: center; }
.ci-axe { font-size: 11px; font-weight: 700; letter-spacing: .06em; color: #4b5a67; text-transform: uppercase; }
.ci-axe--p { writing-mode: vertical-rl; transform: rotate(180deg); }
.ci-axe--i { grid-column: 2; text-align: center; }
.ci-grille { border-collapse: separate; border-spacing: 3px; width: 100%; }
.ci-grille th { font-size: 12px; color: #4b5a67; width: 18px; }
.ci-case { position: relative; vertical-align: top; height: 78px; min-width: 80px; border-radius: 6px; padding: 16px 6px 6px; background: #f4f7fa; }
.ci-grille--note .ci-case { height: 54px; }
.ci-case--faible { background: #e4f3ea; }
.ci-case--moyen { background: #f9eeda; }
.ci-case--eleve { background: #f9e1cf; }
.ci-case--critique { background: #E1000F; color: #fff; }
.ci-case--critique a { color: #fff; }
.ci-crit { position: absolute; top: 3px; right: 6px; font-size: 10.5px; opacity: .75; }
.ci-risque { display: inline-flex; align-items: center; gap: 3px; margin: 2px 4px 0 0; font-size: 12px; font-weight: 700; }
.ci-legende { grid-column: 2; display: flex; flex-wrap: wrap; gap: 6px 14px; list-style: none; padding: 0; margin: 6px 0 0; font-size: 12px; }
.ci-legende span { display: inline-block; width: 12px; height: 12px; border-radius: 3px; margin-right: 4px; vertical-align: -2px; }
.ci-retard td { background: #fdf2f3 !important; }
.ci-bandeau { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; border-bottom-color: var(--module-revision); }
.ci-bandeau .bouton { background: #fff; }

/* 3.73.0 : documents de gestion des comptes DFT (registre ligne 144,
   maquettes du canevas « SoFi — Documents DFT-net »). Bandeau marine et
   filet du module Opérations quotidiennes ; vert du compte DFT principal
   (onglet-banque--principale) pour les repères propres au DFT. */
/* 3.73.1 : onglet Documents DFT-net, le dernier de la page Banque. */
a.onglet-banque { text-decoration: none; display: inline-flex; align-items: center; gap: 6px; }
.onglet-banque--dft { margin-left: auto; color: #1d6b3a; }
.onglet-banque--dft.onglet-banque--actif { color: #fff; background: #2e7d4f; border-color: #2e7d4f; }
.dft { display: flex; flex-direction: column; gap: 14px; --dft-vert: #2e7d4f; --dft-vert-doux: #e3f3e8; }
.dft-bandeau { background: var(--revision-accent, #1d3a5f); border-bottom: 4px solid var(--module-quotidien); border-radius: 4px;
  padding: 14px 20px; display: flex; justify-content: space-between; align-items: center; color: #fff; flex-wrap: wrap; gap: 10px; }
.dft-bandeau > div:first-child { display: flex; flex-direction: column; gap: 4px; }
.dft-bandeau__sur { font-size: 11px; letter-spacing: .12em; font-weight: 700; opacity: .9; }
.dft-bandeau__titre { font-size: 21px; font-weight: 700; }
.dft-bandeau__droite { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; text-align: right; }
.dft-bandeau__lien { color: #fff; font-size: 13px; }
.dft-bandeau__info { font-size: 13px; opacity: .95; }
.dft-choix { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.dft-choix select { font: inherit; font-size: 13px; padding: 4px 6px; max-width: 100%; color: #1d2433; background: #fff; border: 1px solid #c6cfdc; border-radius: 4px; }
.dft-alerte { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; background: #fbf5ea;
  border: 1px solid #e5cf9f; border-radius: 6px; padding: 9px 14px; color: #5c3d00; font-size: 14px; }
.dft-alerte--ko { background: #fbeceb; border-color: #e3b4b0; color: #8a1f17; }
.dft-colonnes { display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-start; }
.dft-cadre { background: #fff; border: 1px solid #d3dae1; border-radius: 6px; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.dft-cadre--large { flex: 3 1 560px; min-width: 0; }
.dft-cote { flex: 2 1 320px; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.dft-cadre__entete { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.dft-cadre__entete h2 { margin: 0; font-size: 16px; color: var(--revision-accent, #1d3a5f); }
.dft-tableau td { vertical-align: middle; }
.dft-ligne--attente td { color: #6b7785; }
.dft-taux { color: var(--dft-vert); font-weight: 700; font-variant-numeric: tabular-nums; }
.dft-note { margin: 0; font-size: 12.5px; color: #4b5a67; }
.dft-teneur { font-size: 14px; line-height: 1.55; }
.dft-references { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 6px; font-size: 14px; }
.dft-references a { display: inline-flex; align-items: center; gap: 6px; }
.dft-statut { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12.5px; font-weight: 600; }
.dft-statut--brouillon { background: #eef1f5; color: #3c4b5c; }
.dft-statut--genere { background: #fdf1dd; color: #8a5300; }
.dft-actions { white-space: nowrap; }
.dft-legende { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; font-size: 13px; color: #3c4658; }
.dft-legende__taux { margin-left: auto; color: var(--dft-vert); }
.dft-origine { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.dft-origine--dossier { background: #e7f1fb; color: #1f4f8f; }
.dft-origine--compte { background: var(--dft-vert-doux); color: #1d6b3a; }
.dft-origine--utilisateur { background: #efedff; color: #4b3f9e; }
.dft-origine--saisie { background: #eef1f5; color: #3c4b5c; }
.dft-origine--nc { background: #fdf1dd; color: #8a5300; }
.dft-formulaire { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.dft-groupe { border: 1px solid #d3dae1; border-radius: 6px; background: #fff; margin: 0; padding: 10px 14px 12px;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px 14px; min-width: 0; }
.dft-groupe legend { font-size: 14px; font-weight: 700; color: var(--revision-accent, #1d3a5f); padding: 0 4px; }
.dft-groupe--plein { display: block; }
.dft-champ { display: flex; flex-direction: column; gap: 3px; font-size: 13px; color: #3c4658; min-width: 0; }
.dft-champ > span:first-child { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.dft-champ--large { grid-column: 1 / -1; }
.dft-champ input, .dft-champ select, .dft-groupe td input { font: inherit; font-size: 14px; padding: 5px 7px; border: 1px solid #c6cfdc;
  border-radius: 4px; background: #fff; color: #1d2433; box-sizing: border-box; width: 100%; }
.dft-champ--nc { background: #fffaf0; border-radius: 4px; padding: 4px 6px; }
.dft-champ--nc input { border-color: #e0b46a; }
.dft-aide { font-size: 12px; color: #6b7785; }
.dft-cases { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 5px 14px; }
.dft-case { display: flex; gap: 8px; align-items: flex-start; font-size: 13.5px; }
.dft-case input { margin-top: 2px; }
.dft-boutons { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; justify-content: flex-end; }
.dft-boutons .dft-case, .dft-boutons .dft-note { margin-right: auto; }
.dft-apercu { background: #fff; border: 1px solid #d3dae1; border-radius: 6px; padding: 12px 14px; position: sticky; top: 10px; }
.dft-pages { display: flex; flex-direction: column; gap: 10px; }
.dft-pages img { width: 100%; height: auto; display: block; border: 1px solid #c6cfdc; background: #fff; }
.dft-pages--attente { opacity: .55; }
@media (max-width: 760px) {
  .dft-groupe, .dft-cases { grid-template-columns: minmax(0, 1fr); }
  .dft-bandeau__droite { align-items: flex-start; text-align: left; }
  .dft-apercu { position: static; }
}
/* 3.74.0 : mandataires et habilitations DFT-net. */
.dft-hab-form { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px 12px; padding: 10px 12px;
  background: #f7f9fb; border: 1px solid #d3dae1; border-radius: 6px; margin: 4px 0 10px; }
.dft-hab-edition td { background: #f7f9fb; }
.dft-doc { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 12px; font-weight: 600; background: #fdf1dd; color: #8a5300; white-space: nowrap; }
.dft-statut--afaire { background: #fdf1dd; color: #8a5300; }
.dft-statut--place { background: var(--dft-vert-doux); color: #1d6b3a; }
.dft-statut--retrait { background: #fbeceb; color: #8a1f17; }
.dft-statut--retire, .dft-statut--ko { background: #eef1f5; color: #5a6475; }
.dft-statut--ko { background: #fbeceb; color: #8a1f17; }
.dft-ligne--retiree td { color: #8a93a3; }
.dft-cellule--ko { background: #fbeceb !important; color: #8a1f17; font-weight: 600; }
.dft-controles, .dft-profils { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 7px; font-size: 13.5px; line-height: 1.4; }
.dft-controle { display: flex; gap: 8px; }
.dft-controle > span:first-child { flex: 0 0 18px; font-weight: 700; }
.dft-controle--ok > span:first-child { color: var(--dft-vert); }
.dft-controle--alerte > span:first-child { color: #b5823a; }
.dft-controle--erreur > span:first-child { color: #9b2c2c; }
@media (max-width: 760px) { .dft-hab-form { grid-template-columns: minmax(0, 1fr); } }
/* 3.75.0 (lot 3) : cycle du journal, « À régulariser », propositions, pastille de l'onglet. */
.dft-statut--signe { background: #e7f1fb; color: #1d4f86; }
.dft-statut--envoye { background: #efedff; color: #4a3a9a; }
.dft-statut--vise { background: var(--dft-vert-doux); color: #1d6b3a; }
.dft-statut--abandonne { background: #eef1f5; color: #5a6475; }
.dft-statut--retard { background: #fbeceb; color: #8a1f17; }
.dft-ligne--retard td { background: #fdf6f5; }
.dft-suivi { white-space: normal; min-width: 210px; }
.dft-etapes { font-size: 12.5px; color: #5a6475; font-variant-numeric: tabular-nums; }
.dft-etape-form { background: #f7f9fc; }
.dft-regulariser { border-left: 4px solid #c0392b; }
.dft-regulariser__liste, .dft-propositions__liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.dft-regulariser__liste li { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
.dft-propositions { border-left: 4px solid var(--module-quotidien); }
.dft-proposition { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; justify-content: space-between; padding: 6px 0; border-bottom: 1px solid #e6eaf0; }
.dft-proposition:last-child { border-bottom: 0; }
.onglet-banque__pastille { display: inline-block; min-width: 18px; margin-left: 6px; padding: 0 5px; border-radius: 9px; background: #c0392b; color: #fff; font-size: 11px; font-weight: 700; text-align: center; line-height: 18px; }
.dft-tableau--hab td { white-space: nowrap; }
.dft-tableau--hab td.dft-docs { white-space: normal; min-width: 170px; }
