/* Elevora CRM — feuille de style principale.
   Sortie du <style> d'index.html le 17/09/2026, sans une seule règle modifiée.
   Les jetons de thème sont dans :root (sombre) et body.light (clair) ; le reste du
   CRM n'écrit jamais une couleur en dur, il lit ces variables. */

/* ── Charte Elevora (Phase 2) : Bleu Klein (#1B4F8A) = couleur institutionnelle qui porte
   l'interface ; Framboise (#C9266A) = accent réservé à ce qui compte vraiment ; Nuit (#1A1A2E)
   en fond sombre ; Blanc / Gris clair (#F5F5F5) en thème clair. Typo Satoshi (Fontshare).
   En sombre, le Klein est éclairci (#3E7BC2) pour rester lisible ; jamais de framboise en aplat
   dominant — une seule chose audacieuse à la fois. Tous les noms de tokens sont conservés. ── */
/* ── Contraste WCAG 2.2 AA (audit du 18/09/2026, demande de Célian : « rendre le CRM vendable »).
   Seule la luminosité des jetons bouge ; teinte et noms restent. --text3 était à 2,6-3,7:1 dans
   les deux thèmes (452 usages) ; le thème clair n'avait ni vert, ni ambre, ni rouge à lui (1,7 à
   3,3:1 sur blanc) ; en sombre, --accent servait de texte ET de fond sous du blanc, et aucune
   valeur ne tient les deux : --accent-fill porte désormais les aplats sous texte blanc.
   --border-input donne aux contours de champs le 3:1 exigé pour un composant (1.4.11). ── */
:root{--bg:#101020;--bg2:#1A1A2E;--bg3:#24243B;--bg4:#2F2F4A;--border:rgba(255,255,255,0.07);--border2:rgba(255,255,255,0.13);--text:#ECEBF3;--text2:#A6A4BE;--text3:#9896B4;--accent:#5F9DE6;--accent-fill:#3B78BF;--red-fill:#D44044;--border-input:rgba(255,255,255,0.34);--accent2:#2C5C93;--glow:rgba(62,123,194,0.15);--rose:#C9266A;--rose-bg:rgba(201,38,106,0.14);--green:#35b586;--green-bg:rgba(53,181,134,0.1);--amber:#e0a63f;--amber-bg:rgba(224,166,63,0.1);--red:#ED7272;--red-bg:rgba(224,103,103,0.1);--blue:#67A0E4;--blue-bg:rgba(91,147,214,0.12);--pink:#F669AD;--pink-bg:rgba(224,85,154,0.12);--r:10px;--rl:14px;--rs:7px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--font:'Satoshi','Inter',-apple-system,'Segoe UI',sans-serif;--font-display:'Satoshi','Inter',sans-serif;--mono:'DM Mono',ui-monospace,monospace}
body.light{--bg:#F5F5F5;--bg2:#FFFFFF;--bg3:#ECECF1;--bg4:#E0E0EA;--border:rgba(26,26,46,0.09);--border2:rgba(26,26,46,0.17);--text:#1A1A2E;--text2:#474760;--text3:#626279;--accent:#1B4F8A;--accent-fill:#1B4F8A;--red-fill:#AD383D;--border-input:rgba(26,26,46,0.50);--accent2:#143C69;--glow:rgba(27,79,138,0.10);--rose:#C9266A;--rose-bg:rgba(201,38,106,0.10);--blue:#1B4F8A;--blue-bg:rgba(27,79,138,0.08);--pink:#BA0F5E;--pink-bg:rgba(201,38,106,0.10);--green:#01704F;--green-bg:rgba(1,112,79,0.10);--amber:#835B05;--amber-bg:rgba(131,91,5,0.10);--red:#AD383D;--red-bg:rgba(173,56,61,0.10)}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;font-size:14px;line-height:1.6}
::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}
.layout{display:flex;min-height:100vh}
.sidebar{width:220px;background:var(--bg2);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:50;padding:0 0 1.5rem;overflow:hidden}
.logo{padding:1.5rem 1.25rem 1rem;border-bottom:1px solid var(--border);margin-bottom:.75rem}
.logo-mark{display:flex;align-items:center;gap:8px}
.logo-icon{width:28px;height:28px;background:var(--accent-fill);border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#fff}
.logo-name{font-size:18px;font-weight:700;letter-spacing:.2px;font-family:var(--font-display)}
.logo-sub{font-size:10px;color:var(--text3);letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
.nav-s{padding:.25rem .75rem;margin-bottom:.25rem;flex:1;min-height:0;overflow-y:auto}
.nav-l{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.08em;padding:.5rem .5rem .25rem}
.nav-group-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;border-radius:6px;transition:background .12s;user-select:none}
.nav-group-header:hover{background:var(--bg3);color:var(--text2)}
.nav-group-chev{font-size:11px;color:var(--text3);transition:transform .2s;display:inline-block}
.nav-group-header.collapsed .nav-group-chev{transform:rotate(-90deg)}
.nav-group-body{overflow:hidden;transition:max-height .25s ease,opacity .2s,margin .2s;max-height:600px;opacity:1}
.nav-group-body.collapsed{max-height:0;opacity:0;margin:0;pointer-events:none}
.nav-i{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:var(--r);cursor:pointer;color:var(--text2);font-size:13.5px;transition:all .15s;user-select:none}
.nav-i:hover{background:var(--bg3);color:var(--text)}
.nav-i.active{background:var(--glow);color:var(--accent);font-weight:500}
.nav-ic{font-size:15px;width:18px;text-align:center;flex-shrink:0}
/* Densité d'affichage (préférence perso, Lot 1) — resserre les tableaux, surtout utile en Comptabilité.
   !important nécessaire : la majorité des cellules du CRM ont leur padding en style inline. */
body.density-compact td,body.density-compact th{padding:4px 8px!important;font-size:12.5px!important}
body.density-compact .nav-i{padding:5px 10px;font-size:12.5px}
/* Brief 09/2026 §25 — « Compact » et « Confortable » ne produisaient aucune différence visible hors
   tableaux. Compact resserre désormais tout : cartes, lignes de documents, tuiles KPI, champs,
   boutons, marges de section. Confortable = valeurs par défaut du thème. */
body.density-compact{--r:6px;--rl:9px}
body.density-compact .cc,body.density-compact .compta-section,body.density-compact .compta-kpi{padding:.8rem 1rem!important}
body.density-compact .compta-kpi-value{font-size:20px}
body.density-compact .di{padding:6px 10px}
body.density-compact .fi,body.density-compact .fsel,body.density-compact .fta{padding:6px 9px;font-size:12.5px}
body.density-compact .btn{padding:6px 11px;font-size:12.5px}
body.density-compact .sec{padding-top:1rem}
body.density-compact .profile-header{padding:1rem 1.2rem}
body.density-compact .compta-hero{gap:10px;margin-bottom:1rem}
body.density-compact .empty-state{padding:1.25rem}
body.density-compact h2{font-size:19px!important}
body.density-compact .doc-folder{padding:7px 10px}
.nav-b{margin-left:auto;background:var(--bg4);color:var(--text3);font-size:10px;font-family:var(--mono);padding:1px 6px;border-radius:20px;border:1px solid var(--border)}
.nav-i.active .nav-b{background:var(--glow);color:var(--accent);border-color:transparent}
.sb-bot{margin-top:auto;padding:.75rem;border-top:1px solid var(--border)}
.sb-stat{background:var(--bg3);border-radius:var(--r);padding:10px 12px}
.sb-stat-l{font-size:10px;color:var(--text3);margin-bottom:4px}
.sb-stat-v{font-size:18px;font-weight:600;font-family:var(--mono)}
.main{margin-left:220px;flex:1;display:flex;flex-direction:column;min-height:100vh}
/* Visible uniquement des lecteurs d écran : sert aux libellés d état (ex. téléchargement
   en cours) qui doivent être annoncés sans occuper de place à l écran. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.burger-btn{display:none;width:42px;height:42px;border-radius:var(--r);border:1px solid var(--border);background:var(--bg3);cursor:pointer;align-items:center;justify-content:center;color:var(--text2);transition:all .15s;flex-shrink:0}
.burger-btn:hover{border-color:var(--border2)}
.topbar{height:66px;background:var(--bg2);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 1.5rem;gap:12px;position:sticky;top:0;z-index:40;flex-wrap:nowrap}
.tb-title{font-size:19px;font-weight:700;flex:1;white-space:nowrap;font-family:var(--font-display);letter-spacing:0}
.tb-search{display:flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:0 12px;height:42px;width:260px;flex-shrink:0;transition:border-color .15s}
.tb-search:focus-within{border-color:var(--accent)}
.tb-search input{background:none;border:none;outline:none;color:var(--text);font-size:14px;width:100%;font-family:var(--font)}
.tb-search input::placeholder{color:var(--text3)}
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--r);border:1px solid var(--border2);background:transparent;color:var(--text2);font-size:13px;font-family:var(--font);cursor:pointer;transition:all .18s cubic-bezier(.2,.8,.3,1);white-space:nowrap}
.btn:active{transform:scale(.97)}
.btn:hover{background:var(--bg3);color:var(--text)}
.btn,.btn-p,.btn-sm,.btn-d,.qk-btn-white,.qk-linkbtn,.qk-iconbtn,.qk-fchip,.pt-cat,.eq-tab{transition:background-color .18s cubic-bezier(.2,.8,.3,1),color .18s cubic-bezier(.2,.8,.3,1),border-color .18s cubic-bezier(.2,.8,.3,1),transform .12s cubic-bezier(.2,.8,.3,1),box-shadow .18s cubic-bezier(.2,.8,.3,1)}
.btn:hover,.btn-p:hover,.btn-sm:hover,.btn-d:hover,.qk-btn-white:hover,.qk-iconbtn:hover,.qk-fchip:hover,.pt-cat:hover{transform:translateY(-1px);box-shadow:0 3px 10px -3px rgba(0,0,0,.28)}
.btn:active,.btn-p:active,.btn-sm:active,.btn-d:active,.qk-btn-white:active,.qk-iconbtn:active,.qk-fchip:active,.pt-cat:active{transform:translateY(0);box-shadow:none}
.btn:disabled:hover,.btn-p:disabled:hover,.btn-sm:disabled:hover{transform:none;box-shadow:none}
@media (prefers-reduced-motion:reduce){.btn,.btn-p,.btn-sm,.btn-d,.qk-btn-white,.qk-linkbtn,.qk-iconbtn,.qk-fchip,.pt-cat,.eq-tab{transition:none}.btn:hover,.btn-p:hover,.btn-sm:hover,.btn-d:hover,.qk-btn-white:hover,.qk-iconbtn:hover,.qk-fchip:hover,.pt-cat:hover{transform:none;box-shadow:none}}
.btn-p{background:var(--accent-fill);color:#fff;border-color:transparent;font-weight:500}
.btn-p:hover{background:var(--accent2);color:#fff}
.btn-sm{padding:4px 10px;font-size:12px}
.btn-g{border-color:transparent}.btn-g:hover{border-color:var(--border)}
.btn-d:hover{background:var(--red-bg);color:var(--red);border-color:transparent}
.period-filter{display:flex;gap:3px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:4px;flex-shrink:0;height:42px;align-items:center}
.pf-btn{padding:5px 13px;border-radius:7px;font-size:12px;cursor:pointer;color:var(--text2);background:transparent;border:none;font-family:var(--font);transition:all .15s;white-space:nowrap;height:32px;display:flex;align-items:center}
.pf-btn:hover{color:var(--text)}
.pf-btn.active{background:var(--bg2);color:var(--text);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.2)}
.pf-btn-sm{padding:3px 8px;border-radius:6px;font-size:11px;cursor:pointer;color:var(--text3);background:transparent;border:1px solid var(--border);font-family:var(--font);transition:all .15s}
.pf-btn-sm.active{background:var(--glow);color:var(--accent);border-color:transparent}
.theme-toggle{display:flex;align-items:center;gap:5px;cursor:pointer;user-select:none;flex-shrink:0}
.theme-toggle input{display:none}
.theme-track{width:34px;height:18px;background:var(--bg4);border-radius:20px;border:1px solid var(--border2);position:relative;transition:background .3s;flex-shrink:0}
.theme-thumb{position:absolute;width:12px;height:12px;border-radius:50%;background:var(--text3);top:2px;left:2px;transition:all .3s}
.theme-toggle input:checked~.theme-track{background:var(--accent)}
.theme-toggle input:checked~.theme-track .theme-thumb{transform:translateX(16px);background:#fff}
.theme-icon{font-size:13px}
.content{padding:1.5rem;flex:1}
.sec{display:none}.sec.active{display:block}
/* Entrée orchestrée (Phase 6) : UNE cascade discrète des premiers blocs de la section entrante
   — un seul mouvement, déclenché au bon moment, jamais d'effets dispersés. Les blocs au-delà
   du 6e arrivent ensemble : la cascade guide l'œil, elle ne fait pas attendre. */
.sec.active>*{animation:elv-rise .32s cubic-bezier(.2,.8,.3,1) both}
.sec.active>*:nth-child(1){animation-delay:0s}
.sec.active>*:nth-child(2){animation-delay:.045s}
.sec.active>*:nth-child(3){animation-delay:.09s}
.sec.active>*:nth-child(4){animation-delay:.135s}
.sec.active>*:nth-child(5){animation-delay:.18s}
.sec.active>*:nth-child(6){animation-delay:.225s}
.sec.active>*:nth-child(n+7){animation-delay:.25s}
@keyframes elv-rise{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.sec.active>*{animation:none}}
.mg{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:1.5rem}
/* ── GRILLE BENTO DE LA VUE D'ENSEMBLE (lot 1) ──────────────────────────────
   La page était en colonne unique : chaque bloc prenait toute la largeur, l'un sous l'autre,
   d'où « c'est très linéaire, tout en longueur ». 12 colonnes ≥1200px, 8 colonnes ≥1024px,
   une seule en dessous. Chaque bloc déclare sa largeur via --sp (span) aux trois paliers. */
.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:12px;margin-bottom:1.5rem;align-items:start}
.bento>*{grid-column:span var(--sp,12);min-width:0}
@media(max-width:1199px){.bento{grid-template-columns:repeat(8,1fr)}.bento>*{grid-column:span var(--sp-md,8)}}
@media(max-width:1023px){.bento{grid-template-columns:1fr}.bento>*{grid-column:1/-1}}
/* Tuiles KPI : 132px max, chiffres tabulaires pour que les colonnes s'alignent à l'œil. */
.kpi{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:.85rem 1rem;
     position:relative;overflow:hidden;max-height:132px;display:flex;flex-direction:column;justify-content:center}
.kpi-l{font-size:10.5px;color:var(--text3);text-transform:uppercase;letter-spacing:.07em;margin-bottom:5px;position:relative;z-index:1}
.kpi-v{font-size:24px;font-weight:600;font-family:var(--mono);letter-spacing:-1px;font-variant-numeric:tabular-nums;position:relative;z-index:1;line-height:1.1}
.kpi-s{font-size:11px;color:var(--text3);margin-top:4px;position:relative;z-index:1;line-height:1.35}
.kpi-hero{min-height:132px}
.kpi-hero .kpi-v{font-size:38px;font-weight:900;font-family:var(--font);letter-spacing:-1.5px;color:var(--green,#2dca8c)}
.kpi-spark{position:absolute;left:0;right:0;bottom:0;height:44px;opacity:.5;pointer-events:none;z-index:0}
.kpi-up{color:var(--green,#2dca8c)}.kpi-down{color:var(--red,#e06767)}
.kpi-grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:560px){.kpi-grid2{grid-template-columns:1fr}}
/* Entonnoir de production — barres horizontales décroissantes, pas un camembert. */
.fun{display:flex;flex-direction:column;gap:7px}
.fun-r{display:grid;grid-template-columns:118px 1fr auto;align-items:center;gap:10px;cursor:pointer}
.fun-r:hover .fun-b{filter:brightness(1.15)}
.fun-l{font-size:12px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fun-t{background:var(--bg4);border-radius:5px;height:22px;overflow:hidden}
.fun-b{height:100%;background:var(--accent);border-radius:5px;transition:width .3s;min-width:2px}
.fun-n{font-family:var(--mono);font-size:12px;color:var(--text2);font-variant-numeric:tabular-nums;white-space:nowrap}
/* Avancement projet avec repère d'échéance sur le même axe. */
.pj{display:flex;flex-direction:column;gap:11px}
.pj-r{cursor:pointer}
.pj-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px}
.pj-n{font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pj-m{font-size:11px;color:var(--text3);font-family:var(--mono);white-space:nowrap}
.pj-t{position:relative;background:var(--bg4);border-radius:5px;height:18px;overflow:visible}
.pj-b{height:100%;border-radius:5px;background:var(--accent);transition:width .3s}
.pj-b.late{background:var(--red,#e06767)}
.pj-d{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--text3);border-radius:1px}
.pj-d.over{background:var(--red,#e06767);width:3px}
.elv-empty{text-align:center;padding:1.5rem .75rem;color:var(--text3);font-size:12.5px;line-height:1.55}
.mc{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:1rem 1.1rem;transition:border-color .2s}
.mc:hover{border-color:var(--border2)}
.mc-l{font-size:11px;color:var(--text3);text-transform:uppercase;letter-spacing:.07em;margin-bottom:6px}
.mc-v{font-size:26px;font-weight:600;font-family:var(--mono);letter-spacing:-1px}
.mc-s{font-size:11px;color:var(--text3);margin-top:3px}
/* Tuile héro (Phase 6, dashboard) : LE chiffre qui compte — CA réalisé — seul à recevoir
   Satoshi Black + Framboise. Les autres tuiles restent sobres : hiérarchie, pas décoration. */
.mc-hero .mc-v{font-size:34px;font-weight:900;font-family:var(--font);letter-spacing:-1.5px;color:var(--rose)}
.cr{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:1.5rem}
.cc{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:1.1rem}
.ct{font-size:13px;font-weight:500;margin-bottom:4px}
.cs{font-size:11px;color:var(--text3);margin-bottom:.75rem}
.leg{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:10px}
.li{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--text2)}
.ld{width:8px;height:8px;border-radius:2px;flex-shrink:0}
.tc{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);overflow:hidden}
.th{padding:.875rem 1.25rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.fr{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.fs{background:var(--bg3);border:1px solid var(--border-input);border-radius:var(--r);color:var(--text2);font-size:12px;font-family:var(--font);padding:5px 10px;cursor:pointer;outline:none;transition:border-color .15s}
.fs:focus{border-color:var(--accent)}
/* Multi-filter dropdown */
.mf-wrap{position:relative;display:inline-block}
.mf-btn{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);color:var(--text2);font-size:12px;font-family:var(--font);padding:5px 10px;cursor:pointer;display:flex;align-items:center;gap:5px;user-select:none;transition:border-color .15s;white-space:nowrap}
.mf-btn:hover,.mf-btn.open{border-color:var(--border2);color:var(--text)}
.mf-btn .mf-count{background:var(--accent-fill);color:#fff;font-size:10px;font-weight:700;border-radius:10px;padding:0 5px;min-width:16px;text-align:center;display:none}
.mf-btn .mf-count.show{display:inline-block}
.mf-dropdown{display:none;position:absolute;top:calc(100% + 4px);left:0;background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r);box-shadow:0 4px 20px rgba(0,0,0,.4);z-index:100;min-width:170px;padding:4px;animation:mIn .15s ease}
.mf-wrap.open .mf-dropdown{display:block}
.mf-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:12px;color:var(--text2);transition:background .1s;user-select:none}
.mf-item:hover{background:var(--bg3);color:var(--text)}
.mf-item.checked{color:var(--accent)}
.mf-cb{width:14px;height:14px;border:1.5px solid var(--border-input);border-radius:3px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:9px;transition:all .15s}
.mf-item.checked .mf-cb{background:var(--accent-fill);border-color:var(--accent);color:#fff}
.mf-sep{height:1px;background:var(--border);margin:3px 0}
.mf-clear{font-size:11px;color:var(--text3);padding:5px 10px;cursor:pointer;text-align:center;border-top:1px solid var(--border);margin-top:2px}
.mf-clear:hover{color:var(--accent)}
table{width:100%;border-collapse:collapse}
thead th{text-align:left;padding:9px 14px;font-size:10.5px;font-weight:500;color:var(--text3);text-transform:uppercase;letter-spacing:.07em;border-bottom:1px solid var(--border);white-space:nowrap}
tbody td{padding:10px 14px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}
tbody tr:last-child td{border-bottom:none}
tbody tr{transition:background .1s;cursor:pointer}
tbody tr:hover td{background:var(--bg3)}
.pw{min-width:80px}
.pb{height:4px;background:var(--bg4);border-radius:2px;overflow:hidden;margin-bottom:3px}
.pf{height:100%;border-radius:2px;background:var(--accent);transition:width .3s}
.pl{font-size:10px;color:var(--text3);font-family:var(--mono)}
.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:500;white-space:nowrap}
.badge::before{content:'';width:5px;height:5px;border-radius:50%;flex-shrink:0}
.b-n{background:var(--blue-bg);color:var(--blue)}.b-n::before{background:var(--blue)}
.b-c{background:var(--amber-bg);color:var(--amber)}.b-c::before{background:var(--amber)}
.b-e{background:var(--glow);color:var(--accent)}.b-e::before{background:var(--accent)}
.b-a{background:var(--pink-bg);color:var(--pink)}.b-a::before{background:var(--pink)}
.b-l{background:var(--green-bg);color:var(--green)}.b-l::before{background:var(--green)}
.b-p{background:var(--red-bg);color:var(--red)}.b-p::before{background:var(--red)}
.tag{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:500;white-space:nowrap}
.tag-vip{background:rgba(245,166,35,.15);color:var(--amber);border:1px solid rgba(245,166,35,.25)}
.tag-urgent{background:var(--red-bg);color:var(--red);border:1px solid rgba(245,95,95,.2)}
.tag-pause{background:var(--bg4);color:var(--text3);border:1px solid var(--border)}
.tag-prospect{background:var(--blue-bg);color:var(--blue);border:1px solid rgba(91,163,245,.2)}
.tag-fidele{background:var(--green-bg);color:var(--green);border:1px solid rgba(45,202,140,.2)}
.ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:200;backdrop-filter:blur(4px);align-items:center;justify-content:center}
.ov.open{display:flex}
.modal{background:var(--bg2);border:1px solid var(--border2);border-radius:16px;padding:1.5rem;width:min(560px,95vw);max-height:90vh;overflow-y:auto;box-shadow:0 4px 24px rgba(0,0,0,.5);animation:mIn .18s ease}
@keyframes mIn{from{opacity:0;transform:translateY(8px) scale(.98)}}
.modal-t{font-size:16px;font-weight:600;margin-bottom:1.25rem}
.mf{display:flex;justify-content:flex-end;gap:8px;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border);align-items:center}
.stepper{display:flex;align-items:center;margin-bottom:1.5rem}
.step{display:flex;align-items:center;gap:7px}
.step-num{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0;transition:all .2s;border:2px solid var(--border2);color:var(--text3);background:var(--bg3)}
.step.done .step-num{background:var(--green-bg);border-color:var(--green);color:var(--green)}
.step.active .step-num{background:var(--glow);border-color:var(--accent);color:var(--accent)}
.step-label{font-size:12px;color:var(--text3)}
.step.active .step-label{color:var(--text);font-weight:500}
.step.done .step-label{color:var(--green)}
.step-line{flex:1;height:1px;background:var(--border2);margin:0 8px}
.step-content{display:none}.step-content.active{display:block}
.fg{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:start}
.fgr{display:flex;flex-direction:column;gap:5px}
.fgr.full{grid-column:1/-1}
.fl{font-size:11px;color:var(--text3);font-weight:500;text-transform:uppercase;letter-spacing:.05em;min-height:18px;display:flex;flex-wrap:wrap;align-items:flex-end;gap:4px}
.fi,.fsel,.fta{background:var(--bg3);border:1px solid var(--border-input);border-radius:var(--r);color:var(--text);font-size:13px;font-family:var(--font);padding:8px 11px;transition:border-color .15s;outline:none;width:100%}
/* Dossiers de documents (brief 09/2026 §8) */
.doc-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.doc-crumbs{display:flex;align-items:center;gap:4px;flex-wrap:wrap;font-size:13px}
.doc-crumb{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border-radius:7px;cursor:pointer;color:var(--text2);border:1px dashed transparent}
.doc-crumb:hover{background:var(--bg3)}.doc-crumb.cur{color:var(--text);font-weight:600}.doc-crumb.drag{border-color:var(--accent);background:var(--glow)}
.doc-crumb-sep{color:var(--text3);opacity:.6}
.doc-folders{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;margin-bottom:10px}
.doc-folder{display:flex;align-items:center;gap:9px;padding:10px 12px;background:var(--bg2);border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:border-color .15s,background .15s}
.doc-folder:hover{border-color:var(--border2)}.doc-folder.drag{border-color:var(--accent);background:var(--glow)}
.doc-folder-ic{color:var(--amber);display:inline-flex}.doc-folder-nm{flex:1;min-width:0;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc-folder-nb{font-size:11px;color:var(--text3);font-family:var(--mono)}
.doc-folder .drem{opacity:0}.doc-folder:hover .drem{opacity:1}
.doc-move{width:auto;max-width:150px;padding:5px 8px;font-size:11.5px;margin-right:6px}
.dz-import{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-bottom:12px;border:1px dashed var(--border2);border-radius:10px;font-size:12.5px;color:var(--text3);cursor:pointer;transition:border-color .15s,background .15s}
.dz-import:hover,.dz-import.drag{border-color:var(--accent);background:var(--glow);color:var(--text2)}
/* Suggestions code postal / ville (API Géo, brief 09/2026 §3) */
.adr-suggest{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--bg2);border:1px solid var(--border2);border-radius:8px;z-index:60;box-shadow:0 8px 24px rgba(0,0,0,.35);overflow:hidden;max-height:240px;overflow-y:auto}
.adr-suggest-item{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:8px 12px;cursor:pointer;font-size:13px;color:var(--text)}
.adr-suggest-item span{font-family:var(--mono);font-size:11.5px;color:var(--text3)}
.adr-suggest-item:hover,.adr-suggest-item.sel{background:var(--bg3)}
.fi::placeholder,.fta::placeholder{color:var(--text3)}
/* Points d'équipe (brief du 07/09/2026, §3) */
.eq-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:1.25rem}
.eq-tab{font-family:var(--font);font-size:13.5px;font-weight:600;color:var(--text3);background:none;border:none;
  border-bottom:2px solid transparent;padding:9px 14px;cursor:pointer;margin-bottom:-1px}
.eq-tab:hover{color:var(--text2)}
.eq-tab.on{color:var(--accent);border-bottom-color:var(--accent)}
.pt-cats{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.pt-cat{font-family:var(--font);font-size:13px;font-weight:600;color:var(--text2);background:var(--bg3);
  border:1px solid var(--border);border-radius:999px;padding:7px 15px;cursor:pointer}
.pt-cat.on{background:var(--glow);border-color:transparent;color:var(--accent)}
.pt-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:16px 18px}
.pt-hist{display:grid;gap:8px}
.pt-hrow{display:flex;align-items:center;gap:12px;padding:10px 13px;background:var(--bg3);
  border:1px solid var(--border);border-radius:var(--r);cursor:pointer;text-align:left;width:100%;font-family:var(--font)}
.pt-hrow.on{border-color:var(--accent)}
.pt-sec{margin-top:16px}
.pt-sec h4{font-size:13px;font-weight:700;color:var(--text);margin:0 0 7px;text-transform:uppercase;letter-spacing:.05em}
.pt-sec ul{margin:0;padding-left:18px;color:var(--text2);font-size:13px;line-height:1.65}
.pt-tag{display:inline-block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
  padding:2px 7px;border-radius:5px;background:var(--glow);color:var(--accent);margin-left:7px}
/* Agrandissement +15 % (retour du 07/09) — même convention que les agrandissements précédents
   du CRM (font-size:115% sur le conteneur, brief 09/2026 §14 et §21) : on pose l'échelle une
   fois sur la page plutôt que de retoucher chaque taille une par une, sinon la moindre ligne
   ajoutée plus tard revient à la taille d'avant sans que personne ne s'en aperçoive. */
#declarations-content,#compta-regles-zone{font-size:115%}
#declarations-content .fi,#declarations-content .fsel,#declarations-content .fta,
#compta-regles-zone .fi,#compta-regles-zone .fsel,#compta-regles-zone .fta{font-size:15px}
#declarations-content .btn,#compta-regles-zone .btn{font-size:1em}
/* N° de TVA intracommunautaire — sélecteur pays + saisie doivent lire comme un seul champ.
   Même hauteur, même police, même taille, même retrait de texte des deux côtés. */
.tva-row>.fsel,.tva-row .fi{height:36px;box-sizing:border-box;font-size:13px;line-height:18px;padding:8px 11px}
.tva-row>.fsel{width:118px;flex-shrink:0;font-family:var(--mono)}
.tva-row .fi{width:100%;font-family:var(--mono);padding-left:38px}
#f-tva-prefix{position:absolute;left:11px;top:50%;transform:translateY(-50%);font-family:var(--mono);font-size:13px;line-height:18px;color:var(--text3);pointer-events:none;user-select:none}
.fi:focus,.fsel:focus,.fta:focus{border-color:var(--accent)}
.fsel option{background:var(--bg3)}
.fta{resize:vertical;min-height:60px;line-height:1.5}
.step-nav{display:flex;justify-content:space-between;align-items:center;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border)}
.ts{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}
.ts input{opacity:0;width:0;height:0}
.tsl{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--bg4);border-radius:20px;transition:.3s;border:1px solid var(--border-input)}
.tsl::before{content:'';position:absolute;height:14px;width:14px;left:2px;bottom:2px;background:var(--text3);border-radius:50%;transition:.3s}
input:checked+.tsl{background:var(--accent-fill);border-color:var(--accent)}
input:checked+.tsl::before{transform:translateX(16px);background:#fff}
.profile-header{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:1.25rem;margin-bottom:1rem;display:flex;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.profile-av{width:52px;height:52px;border-radius:12px;background:var(--glow);color:var(--accent);font-size:18px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.profile-info{flex:1;min-width:0}
.profile-name{font-size:18px;font-weight:600;letter-spacing:-.3px;margin-bottom:4px}
.profile-meta{font-size:12px;color:var(--text2);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.prog-hero{height:6px;background:var(--bg4);border-radius:3px;overflow:hidden;margin:8px 0 4px}
.prog-hero-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--blue));transition:width .4s}
.ptabs{display:flex;gap:2px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--rl);padding:4px;margin-bottom:1.25rem;width:fit-content;flex-wrap:wrap}
.ptab{padding:9px 20px;border-radius:var(--r);font-size:13.5px;font-weight:500;cursor:pointer;color:var(--text2);transition:all .15s;user-select:none;white-space:nowrap}
.ptab:hover{color:var(--text)}
.ptab.active{background:var(--bg2);color:var(--text);font-weight:500}
/* Profile action buttons bigger */
.profile-actions .btn-sm{padding:7px 14px;font-size:13px}
/* Avancement slider */
.pct-slider-wrap{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:10px 14px;margin-top:8px}
.pct-slider-label{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;color:var(--text2)}
.pct-val{font-size:16px;font-weight:700;font-family:var(--mono);color:var(--accent)}
input[type=range].pct-range{width:100%;-webkit-appearance:none;appearance:none;height:6px;border-radius:3px;background:var(--bg4);outline:none;cursor:pointer}
input[type=range].pct-range::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--accent);cursor:pointer;border:2px solid var(--bg2);box-shadow:0 1px 4px rgba(0,0,0,.3)}
input[type=range].pct-range::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--accent);cursor:pointer;border:2px solid var(--bg2)}
.pct-marks{display:flex;justify-content:space-between;font-size:10px;color:var(--text3);margin-top:4px}
.pct-save-btn{margin-top:8px;width:100%}
.ptab-content{display:none}.ptab-content.active{display:block}
.det-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:1rem}
.det-item{background:var(--bg3);border-radius:var(--r);padding:14px 16px;border:1px solid var(--border)}
.det-label{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text3);margin-bottom:6px}
.det-value{font-size:14px;font-weight:500;color:var(--text);word-break:break-word}
.det-label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}
.det-value{font-size:13px;font-weight:500}
.hist-item{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.hist-item:last-child{border-bottom:none}
.hist-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);margin-top:6px;flex-shrink:0}
.hist-body{flex:1}
.hist-action{font-size:13px}
.hist-time{font-size:11px;color:var(--text3);margin-top:2px}
.pb-board{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;overflow-x:auto;padding-bottom:1rem}
.pb-col{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:10px;min-width:148px}
.pb-ch{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.pb-cnt{font-size:10px;font-family:var(--mono);background:var(--bg4);color:var(--text3);padding:1px 6px;border-radius:20px}
.pb-card{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:9px 10px;margin-bottom:7px;cursor:grab;transition:all .15s}
.pb-card:hover{border-color:var(--border2);transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.3)}
/* Drag&drop pipeline (Phase 6) : feedback minimal — opacité sur la carte tirée, bordure accent
   sur la colonne cible. Un seul moment marqué : l'arrivée en « Livré » (flash Framboise bref). */
.pb-card.dragging{opacity:.45;cursor:grabbing}
.pb-col.drop-hover{border-color:var(--accent);border-style:dashed;background:var(--glow)}
.pb-age{font-size:10px;color:var(--text3);margin-top:5px}
.pb-age.old{color:var(--amber)}
@keyframes pb-livre-flash{0%{box-shadow:0 0 0 0 rgba(201,38,106,.55);border-color:var(--rose)}100%{box-shadow:0 0 0 14px rgba(201,38,106,0);border-color:var(--border)}}
.pb-card.flash-livre{animation:pb-livre-flash .6s ease-out}
@media (prefers-reduced-motion:reduce){.pb-card.flash-livre{animation:none}}
/* Grille horaire calendrier (Phase 6) */
.gcal-ev{transition:opacity .15s}
.gcal-ev.dragging{opacity:.45}
.gcal-rz{position:absolute;left:0;right:0;bottom:0;height:7px;cursor:ns-resize}
.gcal-rz:hover{background:rgba(255,255,255,.22)}
.gcal-col{cursor:pointer}
.pb-cn{font-size:12px;font-weight:500;margin-bottom:3px}
.pb-m{font-size:11px;color:var(--text3)}
.pb-b{font-size:11px;color:var(--accent);font-family:var(--mono);margin-top:4px}
.dg{display:grid;grid-template-columns:240px 1fr;gap:14px}
.dsl{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);overflow:hidden;max-height:600px;overflow-y:auto}
.dci{padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--border);font-size:13px;display:flex;align-items:center;justify-content:space-between;transition:background .1s}
.dci:last-child{border-bottom:none}
.dci:hover{background:var(--bg3)}
.dci.active{background:var(--glow);color:var(--accent)}
.dm-wrap{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:1.25rem}
.dz{border:1.5px dashed var(--border2);border-radius:var(--rl);padding:1.75rem;text-align:center;cursor:pointer;color:var(--text3);font-size:13px;transition:all .2s;margin-bottom:1rem}
.dz:hover,.dz.drag{border-color:var(--accent);background:var(--glow);color:var(--text2)}
.dl{display:flex;flex-direction:column;gap:7px}
.di{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--r)}
.dic{width:32px;height:32px;border-radius:8px;background:var(--glow);display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.din{flex:1;min-width:0}
.dn2{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dm2{font-size:11px;color:var(--text3)}
.drem{color:var(--text3);background:none;border:none;cursor:pointer;padding:4px;font-size:14px;transition:color .15s}
.drem:hover{color:var(--red)}
.di-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.di-action{background:none;border:1px solid var(--border);color:var(--text2);cursor:pointer;padding:7px 14px;font-size:13px;border-radius:7px;font-weight:600;font-family:var(--font);transition:all .15s;white-space:nowrap}
.di-action:hover{background:var(--bg3);color:var(--text);border-color:var(--border2)}
.di-action.edit{color:var(--accent);border-color:rgba(62,123,194,.3)}
.di-action.edit:hover{background:var(--glow);border-color:var(--accent)}
.di-action.dl{color:var(--blue);border-color:rgba(91,163,245,.3)}
.di-action.dl:hover{background:var(--blue-bg);border-color:var(--blue)}
.di-clickable{cursor:pointer;transition:background .12s}
.di-clickable:hover{background:var(--bg3)}
.di-status-badge{display:inline-block;padding:2px 7px;border-radius:10px;font-size:9.5px;font-weight:600;letter-spacing:.04em;margin-left:6px;vertical-align:middle}
.di-status-draft{background:rgba(245,166,35,.14);color:var(--amber)}
.di-status-sent{background:rgba(45,202,140,.14);color:var(--green)}
/* ─── Onglets de projets (refonte) ─── */
.proj-tabs-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;background:linear-gradient(135deg,var(--bg3) 0%,var(--bg2) 100%);border:1px solid var(--border);border-radius:14px;padding:6px;box-shadow:inset 0 1px 0 rgba(255,255,255,.02)}
.proj-tab{display:flex;align-items:center;gap:9px;padding:9px 14px;border-radius:10px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text2);background:transparent;border:1px solid transparent;transition:all .15s cubic-bezier(.4,0,.2,1);white-space:nowrap;position:relative;user-select:none}
.proj-tab:hover{background:var(--bg2);color:var(--text)}
.proj-tab:hover .proj-tab-icon{color:var(--accent)}
.proj-tab.active{background:var(--bg);color:var(--text);font-weight:600;border-color:var(--border2);box-shadow:0 1px 3px rgba(0,0,0,.08),0 0 0 1px rgba(62,123,194,.06)}
.proj-tab.active .proj-tab-icon{color:var(--accent)}
.proj-tab.active::before{content:'';position:absolute;top:-1px;left:50%;transform:translateX(-50%);width:32px;height:2px;background:linear-gradient(90deg,var(--accent),var(--blue));border-radius:0 0 2px 2px}
.proj-tab-icon{display:flex;align-items:center;color:var(--text3);transition:color .15s;flex-shrink:0}
.proj-tab-dot{width:7px;height:7px;border-radius:50%;background:var(--dot-color);flex-shrink:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--dot-color) 18%,transparent),0 0 6px color-mix(in srgb,var(--dot-color) 50%,transparent)}
.proj-tab-name{letter-spacing:.005em}
.proj-tab-pct{font-size:11px;font-family:var(--mono);color:var(--text3);background:var(--bg3);padding:2px 7px;border-radius:10px;font-weight:600}
.proj-tab.active .proj-tab-pct{background:var(--glow);color:var(--accent)}
.proj-tab-close{background:none;border:none;cursor:pointer;padding:4px;border-radius:5px;color:var(--text3);display:flex;align-items:center;justify-content:center;line-height:1;margin-left:2px;transition:all .12s}
.proj-tab-close:hover{background:rgba(255,80,80,.15);color:#ff5050}
.proj-tab-add{display:flex;align-items:center;gap:5px;background:transparent;border:1.5px dashed var(--border2);border-radius:10px;padding:8px 13px;cursor:pointer;color:var(--text3);font-size:12.5px;font-weight:500;font-family:var(--font);transition:all .15s;white-space:nowrap}
.proj-tab-add:hover{color:var(--accent);border-color:var(--accent);background:var(--glow);border-style:solid}
.proj-tab-add svg{transition:transform .2s}
.proj-tab-add:hover svg{transform:rotate(90deg)}
/* ─── Aspects (prestations) d'un projet — multi-sélection ─── */
.aspect-grid{display:flex;flex-wrap:wrap;gap:7px;margin-top:2px}
.aspect-chip{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border-radius:9px;border:1.5px solid var(--border2);background:var(--bg2);color:var(--text2);font-size:12.5px;font-weight:500;cursor:pointer;user-select:none;transition:all .13s}
.aspect-chip:hover{border-color:var(--accent);color:var(--text)}
.aspect-chip .aspect-box{width:15px;height:15px;border-radius:4px;border:1.5px solid var(--border-input);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .13s;color:transparent;font-size:10px;font-weight:800;line-height:1}
.aspect-chip.selected{border-color:var(--accent);background:var(--glow);color:var(--text);font-weight:600}
.aspect-chip.selected .aspect-box{background:var(--accent-fill);border-color:var(--accent);color:#fff}
.aspect-hint{font-size:11px;color:var(--text3);margin-top:8px;line-height:1.4}
.back-btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text3);cursor:pointer;transition:color .15s;background:none;border:none;font-family:var(--font);padding:0;margin-bottom:1rem}
.back-btn:hover{color:var(--text)}
.toasts{position:fixed;bottom:1.5rem;right:1.5rem;z-index:999;display:flex;flex-direction:column;gap:8px}
.toast{background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r);padding:10px 14px;font-size:13px;color:var(--text);box-shadow:0 4px 24px rgba(0,0,0,.4);animation:tIn .2s ease;display:flex;align-items:center;gap:8px}
/* Bandeau de notification (Phase 5) — distinct des toasts de confirmation ci-dessus :
   plus large, cliquable, reste jusqu'à interaction/expiration. Empilé au-dessus. */
#notif-toasts{position:fixed;bottom:calc(1.5rem + 60px);right:1.5rem;z-index:998;display:flex;flex-direction:column-reverse;gap:10px;max-width:360px}
.notif-toast{background:var(--bg2);border:1px solid var(--border2);border-radius:var(--rl);padding:13px 14px;box-shadow:0 12px 40px rgba(0,0,0,.35);display:flex;gap:11px;align-items:flex-start;cursor:pointer;animation:elvSlideUp .22s cubic-bezier(.2,.8,.3,1);transition:transform .15s}
.notif-toast:hover{transform:translateY(-2px)}
.notif-toast .nt-actions{flex-shrink:0;display:flex;flex-direction:column;gap:4px}
.notif-toast .nt-snooze,.notif-toast .nt-close{background:none;border:none;color:var(--text3);cursor:pointer;font-size:13px;padding:3px;line-height:1;border-radius:6px;display:flex;align-items:center;justify-content:center;transition:color .15s,background .15s}
.notif-toast .nt-snooze:hover,.notif-toast .nt-close:hover{color:var(--text);background:var(--bg3)}
@media (prefers-reduced-motion:reduce){.notif-toast{animation:none}}
@keyframes tIn{from{opacity:0;transform:translateX(20px)}}
.esending{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text3)}
.sp{width:12px;height:12px;border:2px solid var(--border2);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
/* Animation des sous-lignes projets dans la table clients */
@keyframes subRowIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.cl-subrow{animation:subRowIn .22s cubic-bezier(.4,0,.2,1) both}
.cl-subrow td{animation:none}
.av{width:28px;height:28px;border-radius:8px;background:var(--glow);color:var(--accent);font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.empty-state{text-align:center;padding:3rem 1rem;color:var(--text3);font-size:13px}
/* ── BLOC 2: DEVIS / CONTRAT ── */
.gen-ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:300;backdrop-filter:blur(6px);align-items:flex-start;justify-content:center;padding:1.5rem 1rem;overflow-y:auto}
.gen-ov.open{display:flex}
.gen-modal{background:var(--bg2);border:1px solid var(--border2);border-radius:18px;width:min(1400px,98vw);box-shadow:0 8px 40px rgba(0,0,0,.6);animation:mIn .18s ease;overflow:visible;margin:auto;display:flex;flex-direction:column;max-height:calc(100vh - 3rem)}
.gen-header{background:var(--bg3);border-bottom:1px solid var(--border);padding:1.1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;gap:10px;border-radius:18px 18px 0 0;flex-shrink:0}
.gen-title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}
.gen-title-ico{width:28px;height:28px;border-radius:8px;background:var(--glow);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.gen-close{width:28px;height:28px;background:none;border:1px solid var(--border2);border-radius:8px;color:var(--text3);cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;transition:all .15s}
.gen-close:hover{background:var(--red-bg);color:var(--red);border-color:transparent}
.gen-body{display:grid;grid-template-columns:minmax(380px,1fr) 1.6fr;gap:0;overflow:hidden;flex:1;min-height:0}
.gen-form-side{padding:1.25rem 1.5rem;overflow-y:auto;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:12px}
.gen-preview-side{padding:1.25rem;overflow-y:auto;background:var(--bg3)}
#devis-ov .gen-body{grid-template-columns:1fr}
#devis-ov .gen-preview-side{display:none}
#devis-ov .gen-form-side>.gen-section:not(#dv-gen-section){display:none}
#devis-ov #dv-sections{display:none}
#devis-ov .gen-modal{width:min(680px,96vw)}
#devis-ov #dv-gen-section{padding:44px 26px}
#devis-ov .gen-footer{display:none}
#devis-ov .gen-form-side{border-right:none}
#devis-ov .gen-body{padding:10px}
#contrat-ov .gen-body{grid-template-columns:1fr}
#contrat-ov .gen-preview-side{display:none}
#contrat-ov .gen-form-side>.gen-section:not(#ct-gen-section){display:none}
#contrat-ov .gen-modal{width:min(680px,96vw)}
#contrat-ov #ct-gen-section{padding:44px 26px}
#contrat-ov .gen-footer{display:none}
#contrat-ov .gen-form-side{border-right:none}
#contrat-ov .gen-body{padding:10px}
.gen-section{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:10px 12px}
.gen-section-title{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text3);margin-bottom:8px}
.gen-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;align-items:start}
.gen-row.full{grid-template-columns:1fr}
.gen-f{display:flex;flex-direction:column;gap:4px}
.gen-l{font-size:10px;color:var(--text3);font-weight:500;text-transform:uppercase;letter-spacing:.04em;min-height:26px;display:flex;flex-wrap:wrap;align-items:flex-end;gap:4px}
.gen-footer{padding:1rem 1.5rem;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;flex-shrink:0;border-radius:0 0 18px 18px}
/* Line items table */
.li-table{width:100%;border-collapse:collapse}
.li-table th{text-align:left;font-size:10px;font-weight:500;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;padding:5px 6px;border-bottom:1px solid var(--border)}
.li-table td{padding:4px 4px;border-bottom:1px solid var(--border);vertical-align:middle}
.li-table tr:last-child td{border-bottom:none}
.li-inp{background:var(--bg3);border:1px solid var(--border-input);border-radius:6px;color:var(--text);font-size:12px;font-family:var(--font);padding:5px 7px;width:100%;outline:none;transition:border-color .15s}
.li-inp:focus{border-color:var(--accent)}
.li-inp.narrow{width:70px}
.li-inp.med{width:90px}
.li-del{background:none;border:none;color:var(--text3);cursor:pointer;font-size:13px;padding:2px 4px;transition:color .15s;border-radius:4px}
.li-del:hover{color:var(--red);background:var(--red-bg)}
.add-line-btn{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--accent);background:var(--glow);border:1.5px solid var(--accent);border-radius:7px;padding:7px 14px;cursor:pointer;transition:all .15s;font-family:var(--font);font-weight:600;margin-top:6px}
.add-line-btn:hover{color:#fff;background:var(--accent-fill);border-color:var(--accent);box-shadow:0 2px 8px rgba(62,123,194,.3);transform:translateY(-1px)}
/* Bouton "Ajouter une section" — encore plus visible (pleine largeur) */
.add-section-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;font-size:13px;color:#fff;background:var(--accent-fill);border:none;border-radius:8px;padding:11px 16px;cursor:pointer;transition:all .15s;font-family:var(--font);font-weight:600;margin-top:10px;box-shadow:0 2px 6px rgba(62,123,194,.25)}
.add-section-btn:hover{background:var(--accent2);box-shadow:0 4px 12px rgba(62,123,194,.4);transform:translateY(-1px)}
/* Preview pane */
.preview-doc{background:#fff;border-radius:var(--r);padding:28px 24px;color:#111;font-family:var(--font);font-size:12px;line-height:1.6;min-height:500px;box-shadow:0 2px 12px rgba(0,0,0,.15)}
.preview-doc.dark-preview{background:#1a1a1e;color:var(--text)}
.prev-logo{font-size:17px;font-weight:700;color:#3E7BC2;letter-spacing:-.4px;margin-bottom:2px}
.prev-ref{font-size:10px;color:#888;font-family:monospace}
.prev-separator{height:2px;background:linear-gradient(90deg,#3E7BC2,#5ba3f5);border-radius:1px;margin:10px 0}
.prev-parties{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:12px}
.prev-party-label{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#888;margin-bottom:4px}
.prev-party-name{font-size:13px;font-weight:600;margin-bottom:2px}
.prev-party-info{font-size:11px;color:#555;line-height:1.5}
.preview-doc.dark-preview .prev-party-info{color:var(--text2)}
.prev-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:11px}
.prev-table th{text-align:left;padding:6px 8px;background:#f4f3f8;font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#555;border-bottom:1px solid #e0dfea}
.preview-doc.dark-preview .prev-table th{background:var(--bg4);color:var(--text3);border-bottom-color:var(--border)}
.prev-table td{padding:6px 8px;border-bottom:1px solid #f0eff6}
.preview-doc.dark-preview .prev-table td{border-bottom-color:var(--border)}
.prev-table tr:last-child td{border-bottom:none}
.prev-total-row{display:flex;justify-content:flex-end;margin-top:8px}
.prev-total-box{background:#3E7BC2;color:#fff;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:600}
.prev-notes{font-size:10.5px;color:#666;line-height:1.7;margin-top:12px;padding-top:10px;border-top:1px solid #eee}
.preview-doc.dark-preview .prev-notes{color:var(--text2);border-top-color:var(--border)}
.prev-sig-box{border:1.5px dashed #ccc;border-radius:8px;padding:14px;text-align:center;color:#999;font-size:11px;margin-top:14px}
.prev-footer-doc{font-size:9.5px;color:#aaa;text-align:center;margin-top:14px;padding-top:10px;border-top:1px solid #f0eff0}
/* Send email modal */
.send-ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:10100;backdrop-filter:blur(4px);align-items:center;justify-content:center}
.send-ov.open{display:flex}
.send-modal{background:var(--bg2);border:1px solid var(--border2);border-radius:14px;padding:1.5rem;width:min(480px,95vw);box-shadow:0 4px 24px rgba(0,0,0,.5);animation:mIn .18s ease}
/* Doc type badge in profile tabs */
.doc-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:20px;font-size:10px;font-weight:500}
.doc-badge-devis{background:rgba(91,163,245,.12);color:var(--blue);border:1px solid rgba(91,163,245,.2)}
.doc-badge-contrat{background:var(--glow);color:var(--accent);border:1px solid rgba(62,123,194,.2)}
.doc-badge-doc{background:var(--bg4);color:var(--text3);border:1px solid var(--border)}
/* Actions strip in profile header */
.profile-actions{display:flex;gap:6px;flex-wrap:wrap;align-self:flex-start}
@media(max-width:1100px){.mg{grid-template-columns:repeat(2,1fr)}.pb-board{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.gen-body{grid-template-columns:1fr;max-height:none}.gen-form-side{border-right:none;border-bottom:1px solid var(--border)}}
@media(max-width:768px){.sidebar{display:none;position:fixed;top:0;left:0;bottom:0;width:240px;z-index:300;transform:translateX(-100%);transition:transform .25s ease}.sidebar.mob-open{display:flex;transform:translateX(0)}.mob-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:299;backdrop-filter:blur(2px)}.mob-overlay.open{display:block}.burger-btn{display:flex!important}.main{margin-left:0}.cr{grid-template-columns:1fr}.dg{grid-template-columns:1fr}.fg{grid-template-columns:1fr}.det-grid{grid-template-columns:1fr}.period-filter{display:none}}

/* ═══════════ FONDATIONS ELEVORA (Phase 2) — composants partagés ═══════════ */
/* Badge unifié — base commune pour tous les badges de statut du CRM */
.elv-badge{display:inline-flex;align-items:center;gap:var(--s1);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px var(--s3);border-radius:20px;white-space:nowrap;line-height:1.5}
.elv-badge.b-accent{background:var(--glow);color:var(--accent)}
.elv-badge.b-green{background:var(--green-bg);color:var(--green)}
.elv-badge.b-amber{background:var(--amber-bg);color:var(--amber)}
.elv-badge.b-red{background:var(--red-bg);color:var(--red)}
.elv-badge.b-blue{background:var(--blue-bg);color:var(--blue)}
.elv-badge.b-muted{background:var(--bg3);color:var(--text3)}
/* Skeletons de chargement — remplacent les "Chargement…" en texte brut */
.skel{position:relative;overflow:hidden;background:var(--bg3);border-radius:var(--s2);min-height:14px}
.skel::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent);animation:skel-shimmer 1.4s infinite}
body.light .skel::after{background:linear-gradient(90deg,transparent,rgba(20,20,46,.05),transparent)}
@keyframes skel-shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
@media (prefers-reduced-motion:reduce){.skel::after{animation:none}}
/* États vides — bloc icône + message + action au lieu d'un simple texte centré */
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s3);padding:var(--s6) var(--s5);text-align:center;color:var(--text3)}
.empty-state .es-icon{width:46px;height:46px;border-radius:var(--s3);background:var(--bg3);display:flex;align-items:center;justify-content:center;color:var(--text3)}
.empty-state .es-title{font-size:14px;font-weight:600;color:var(--text2)}
.empty-state .es-sub{font-size:12.5px;max-width:360px;line-height:1.55}
/* Barre de chargement fine en haut d'écran (requêtes réseau) */
#top-progress{position:fixed;top:0;left:0;height:2px;width:0;background:linear-gradient(90deg,var(--accent),var(--accent2));z-index:20000;opacity:0;transition:width .35s ease,opacity .3s;box-shadow:0 0 8px var(--glow);pointer-events:none}
/* Barres de progression — généralise la transition de largeur déjà bien faite sur les étapes projet */
.pb>div,.pb-fill{transition:width .6s cubic-bezier(.2,.8,.3,1)}
/* Accessibilité — focus clavier visible partout, sans gêner le clic souris */
:where(button,a,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Icônes Lucide inline — dimensionnement homogène dans la nav et les boutons */
.nav-ic svg,.elv-ic svg{width:16px;height:16px;display:block}

/* ══════════════════════════════════════════════════════════════════════════════════════
   VUE D'ENSEMBLE — refonte du 18/09/2026, sur le modèle du tableau de bord de Pennylane
   ══════════════════════════════════════════════════════════════════════════════════════
   Le reproche de l'appel du 13/09 : « trop widget ». Dix tuiles de tailles différentes, chacune
   avec son fond, son titre en capitales espacées, son chiffre en police machine. Ce que Pennylane
   fait à la place, et qui est repris ici :
     · un seul bandeau de chiffres, séparés par des filets, au lieu de cinq tuiles ;
     · une grille deux tiers / un tiers : l'analyse à gauche, ce qui attend une action à droite ;
     · des listes denses — une ligne, un nom, une précision grise, le montant aligné à droite ;
     · des libellés en casse de phrase, des chiffres dans la police du texte en chasse fixe ;
     · une seule couleur d'accent ; le rouge, l'ambre et le vert ne servent qu'aux états.
   Aucun jeton de la charte n'est modifié : tout est lu dans les variables des deux thèmes.
   La grille « bento » et les classes .kpi restent définies plus haut, pour les autres écrans. */

.vd{display:grid;gap:16px}
.vd-card{background:var(--bg2);border:1px solid var(--border);border-radius:12px;padding:18px 20px;min-width:0}
.vd-card.vd-flush{padding:0;overflow:hidden}
.vd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.vd-flush .vd-head{padding:18px 20px 0;margin-bottom:10px}
.vd-title{font-size:14.5px;font-weight:600;color:var(--text);margin:0;line-height:1.3;letter-spacing:-.005em}
.vd-sub{font-size:12.5px;color:var(--text3);margin-top:3px;line-height:1.4}
.vd-lien{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;font-weight:500;color:var(--accent);background:none;border:0;padding:4px 0;cursor:pointer;font-family:inherit;white-space:nowrap}
.vd-lien:hover{text-decoration:underline;text-underline-offset:3px}
.vd-lien svg{width:13px;height:13px}

/* Bandeau de chiffres : une carte, cinq cellules, des filets entre elles. #kpi-reste passe en
   display:contents pour que ses quatre cellules deviennent des cellules du bandeau lui-même. */
.vd-band{display:grid;grid-template-columns:minmax(0,1.35fr) repeat(4,minmax(0,1fr));background:var(--bg2);border:1px solid var(--border);border-radius:12px;overflow:hidden}
.vd-band > #kpi-reste{display:contents}
.vd-fig{padding:18px 20px;min-width:0;border-left:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.vd-fig:first-child{border-left:0}
.vd-fig-l{font-size:12.5px;color:var(--text3);font-weight:500;line-height:1.3}
.vd-fig-v{font-family:var(--font);font-size:24px;font-weight:600;letter-spacing:-.02em;line-height:1.15;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}
.vd-fig.vd-principal .vd-fig-v{font-size:30px}
.vd-fig-s{font-size:12px;color:var(--text3);line-height:1.45}
.vd-fig-s b{font-weight:500;color:var(--text2)}
.vd-spark{height:34px;margin-top:6px;position:relative}
.vd-delta{display:inline-flex;align-items:center;font-size:11.5px;font-weight:600;padding:1px 6px;border-radius:5px;font-variant-numeric:tabular-nums;margin-right:4px}
.vd-delta.up{color:var(--green);background:var(--green-bg)}
.vd-delta.down{color:var(--red);background:var(--red-bg)}
.vd-delta.flat{color:var(--text3);background:var(--bg3)}

/* Deux tiers / un tiers */
.vd-cols{display:grid;grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:16px;align-items:start}
.vd-main,.vd-side{display:grid;gap:16px;min-width:0}
/* Un élément de grille garde par défaut la largeur de son contenu le plus long : sans cette
   règle, une ligne de « Et maintenant ? » faisait déborder toute la colonne hors de l'écran. */
.vd-main > *,.vd-side > *{min-width:0}

/* Sélecteur de période du graphique : un groupe segmenté, pas quatre boutons épars */
.vd-seg{display:inline-flex;background:var(--bg3);border-radius:8px;padding:3px;gap:2px}
.vd-seg .pf-btn-sm{border:0;background:transparent;color:var(--text3);font-size:12px;font-weight:500;padding:5px 10px;border-radius:6px}
.vd-seg .pf-btn-sm.active{background:var(--bg2);color:var(--text);box-shadow:0 1px 2px rgba(0,0,0,.08)}

/* Lignes de liste */
.vd-rows{display:flex;flex-direction:column}
.vd-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--border);min-width:0}
.vd-row:first-child{border-top:0;padding-top:2px}
.vd-row.vd-clic{cursor:pointer}
.vd-row.vd-clic:hover .vd-row-n{color:var(--accent)}
.vd-row-c{flex:1;min-width:0}
.vd-row-n{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .12s}
.vd-row-s{font-size:12px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.vd-num{font-family:var(--font);font-size:13px;font-weight:500;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--text);text-align:right}
.vd-ico{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--bg3);color:var(--text2)}
.vd-ico svg{width:14px;height:14px}
.vd-ini{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--bg3);color:var(--text2);font-size:11px;font-weight:600}
.vd-pill{display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:500;padding:2px 8px;border-radius:6px;white-space:nowrap;line-height:1.5}
.vd-pill.rouge{color:var(--red);background:var(--red-bg)}
.vd-pill.ambre{color:var(--amber);background:var(--amber-bg)}
.vd-pill.vert{color:var(--green);background:var(--green-bg)}
.vd-pill.neutre{color:var(--text2);background:var(--bg3)}
.vd-plus{font-size:12px;color:var(--text3);padding-top:10px}
.vd-plus button{background:none;border:0;padding:0;color:var(--accent);font:inherit;font-weight:500;cursor:pointer}

/* Barres fines : avancement des projets, entonnoir, charge */
.vd-bar{position:relative;height:6px;border-radius:3px;background:var(--bg4);margin-top:8px}
.vd-bar-f{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--accent);min-width:2px}
.vd-bar-f.late{background:var(--red)}
.vd-bar-m{position:absolute;top:-4px;bottom:-4px;width:2px;border-radius:1px;background:var(--text3)}
.vd-bar-m.over{background:var(--red)}
.vd-lh{display:flex;align-items:baseline;justify-content:space-between;gap:10px}

/* « Et maintenant ? » dans la colonne de droite */
.vd-act{display:flex;align-items:center;gap:6px;flex-shrink:0}
.vd-act .btn{padding:5px 10px;font-size:12px}
.vd-sev{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:1px}

/* Tableau « Derniers clients » */
#sec-dashboard .vd-table table{width:100%}
#sec-dashboard .vd-table thead th{font-size:12px;text-transform:none;letter-spacing:0;font-weight:500;color:var(--text3);padding:10px 20px;border-bottom:1px solid var(--border)}
#sec-dashboard .vd-table tbody td{padding:11px 20px;font-size:13px}
#sec-dashboard .vd-table tbody tr:last-child td{border-bottom:0}

.vd-graph{position:relative;height:230px}
.vd-graph.bas{height:210px}

@media (max-width:1180px){
  .vd-cols{grid-template-columns:minmax(0,1fr)}
  .vd-band{grid-template-columns:repeat(3,minmax(0,1fr))}
  .vd-fig{border-top:1px solid var(--border)}
  .vd-fig.vd-principal{grid-column:1/-1;border-top:0}
  .vd-fig:nth-child(2){border-left:0}
}
@media (max-width:640px){
  .vd-band{grid-template-columns:repeat(2,minmax(0,1fr))}
  .vd-fig{border-left:0}
  .vd-fig:nth-child(even){border-left:1px solid var(--border)}
  .vd-card{padding:16px}
  #sec-dashboard .vd-table thead th,#sec-dashboard .vd-table tbody td{padding-left:14px;padding-right:14px}
}
body.density-compact .vd-card{padding:14px 16px}
body.density-compact .vd-fig{padding:14px 16px}
body.density-compact .vd-row{padding:8px 0}

/* Barre du haut entre 769 et 1439 px — portable de 13 pouces, tablette en paysage (18/09/2026).
   Filtre de période, recherche de 260 px, bascule de thème, cloche et « Nouveau client » ne
   tenaient pas à côté de la barre latérale : la barre du haut poussait toute la page à 1 375 px
   de large pour un écran de 1 024, et chaque écran défilait de côté. La recherche cède sa place
   la première ; .main ne peut plus s'élargir au-delà de l'écran. */
.main{min-width:0}
@media (min-width:769px) and (max-width:1439px){
  .topbar{gap:8px;padding:0 1rem}
  .tb-search{width:auto;flex:1 1 150px;min-width:120px}
  .period-filter .pf-btn{padding-left:8px;padding-right:8px}
}
/* En dessous de 1 100 px, même rétrécie, la barre ne tient plus sur une ligne : elle passe sur
   deux plutôt que de couper le bouton « Nouveau client » hors de l'écran. */
@media (min-width:769px) and (max-width:1100px){
  .topbar{flex-wrap:wrap;height:auto;min-height:66px;padding-top:10px;padding-bottom:10px;row-gap:10px}
}

/* ── Focus visible là où la règle globale perdait (audit du 18/09/2026) ─────────────────────
   Les champs de recherche et le curseur ont un `outline:none` plus spécifique que la règle
   globale ; l'interrupteur cache sa case (0×0 px) ; le bouton de suppression d'un dossier et les
   cases de sélection sont transparents. Chacun reçoit un indicateur qui se voit. */
.tb-search:focus-within,.compta-search:focus-within,.qk-search:focus-within,.qk-pop-search:focus-within{box-shadow:0 0 0 2px var(--accent)}
input[type=range].pct-range:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.ts input:focus-visible+.tsl{outline:2px solid var(--accent);outline-offset:2px}
.theme-toggle input:focus-visible+.theme-track,.theme-toggle:focus-within .theme-track{outline:2px solid var(--accent);outline-offset:2px}
.doc-folder:focus-within .drem{opacity:1}
.qk-cb:focus-visible{opacity:1}
.nav-i.active .nav-b{background:transparent}
.aspect-chip:has(input:focus-visible),.qk-drop-zone:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
/* Toasts au-dessus des fenêtres (.send-ov 10100, modales 99999) : une erreur levée dans une
   fenêtre s'affichait SOUS son voile, invisible. */
.toasts{z-index:100001}
.toast-err{border-color:var(--red)}
/* Lien d'évitement : invisible jusqu'au premier Tab, puis en haut à gauche au-dessus de tout. */
.lien-evitement{position:fixed;top:8px;left:8px;z-index:100002;padding:10px 16px;border-radius:var(--r);background:var(--accent-fill);color:#fff;font-weight:600;text-decoration:none;transform:translateY(-200%);transition:transform .15s}
.lien-evitement:focus{transform:none}
@media (prefers-reduced-motion:reduce){.lien-evitement{transition:none}}
#contenu-principal:focus{outline:none}

/* ════════════════════════════════════════════════════════════════════════════════════════
   ACCESSIBILITÉ — socle commun (audit WCAG 2.2 AA du 18/09/2026)
   Compagnon de js/00a-dialogues.js, js/00b-clavier.js et js/00c-etiquettes.js.
   ════════════════════════════════════════════════════════════════════════════════════════ */
/* Défilement : la barre du haut collante (66 px) et les bandeaux du bas ne recouvrent plus
   l'élément qui reçoit le focus (2.4.11). */
html{scroll-padding-top:80px;scroll-padding-bottom:96px}
@media (min-width:769px) and (max-width:1100px){html{scroll-padding-top:140px}}
/* Groupes de menu repliés : invisibles aussi pour le clavier et le lecteur d'écran. */
.nav-group-body.collapsed{visibility:hidden;transition:max-height .25s ease,opacity .2s,margin .2s,visibility 0s .25s}
/* overflow:hidden rognerait l'anneau posé à l'extérieur : il passe à l'intérieur. */
.nav-i:focus-visible,.nav-group-header:focus-visible,.mf-item:focus-visible,.compta-subnav-tab:focus-visible,tr[tabindex]:focus-visible,[data-a11y-clic]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.nav-i:focus-visible,.nav-group-header:focus-visible{background:var(--bg3);color:var(--text)}
/* Contenus révélés au survol : visibles aussi au focus (1.4.13, 2.4.7). */
#notifs-list [data-notif-id] > button{opacity:.7!important}
#notifs-list [data-notif-id]:hover > button,#notifs-list [data-notif-id]:focus-within > button,#notifs-list button:focus-visible{opacity:1!important}
.qk-table tbody tr:focus-within .qk-cb{opacity:1}
/* Bascule de thème : la case était en display:none, donc ni focusable ni lue. */
.theme-toggle{position:relative}
.theme-toggle input{display:block!important;position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
.theme-toggle input:focus-visible~.theme-track{outline:2px solid var(--accent);outline-offset:2px}
/* Taille des cibles (2.5.8) : 24 px au minimum. */
.notif-toast .nt-snooze,.notif-toast .nt-close,.proj-tab-close,.li-del,.drem,#cl-table td>button{min-width:24px;min-height:24px}
.notif-toast .nt-actions{gap:8px}
#notifs-list [data-notif-id] > button{width:28px!important;height:28px!important}
.gcal-rz{height:12px}
.pf-btn-sm{min-height:24px}
/* Reflow (1.4.10) : un tableau trop large défile dans son cadre au lieu d'être coupé. */
.tc:has(> table),.tc > :has(> table),.vd-card.vd-flush > :has(> table){overflow-x:auto}
@media (max-width:768px){
  .topbar{flex-wrap:wrap;height:auto;row-gap:8px;padding:8px 12px;position:static}
  .tb-title{flex:1 1 0;min-width:0;white-space:normal}
  .period-filter{flex:1 1 100%;overflow-x:auto;height:auto}
  .tb-search{flex:1 1 100%;width:auto}
  #notif-panel{position:fixed!important;left:8px!important;right:8px!important;top:8px!important;width:auto!important}
  #notif-toasts{left:12px;right:12px;max-width:none}
  .qk-pop-cat{min-width:0}
}
/* Mouvement réduit (2.3.3) : toutes les animations et transitions, y compris celles écrites
   en ligne ou injectées par le JS. Le spinner reste, ralenti : il dit qu'un chargement est en cours. */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;transition-delay:0s!important;scroll-behavior:auto!important}
  .btn:hover,.pb-card:hover,.notif-toast:hover,.add-line-btn:hover,.add-section-btn:hover,.proj-tab-add:hover svg{transform:none!important}
  .sp{animation:spin 1.6s linear infinite!important;animation-duration:1.6s!important;animation-iteration-count:infinite!important}
}
/* Erreurs de champ affichées en texte, pas seulement en couleur (3.3.1). */
.champ-err{color:var(--red);font-size:11.5px;margin-top:4px;line-height:1.4}

/* ── BLOC A — coquille de l'application et clients (accessibilité 18/09/2026) ────────────
   Compagnon des corrections de fond d'index.html, js/03, js/04, js/05, js/06, js/07, js/08.
   Aucune règle ici ne cherche à changer le rendu : elle rétablit l'apparence d'origine sur des
   éléments qui ont changé de balise (div → button, div → a, div → fieldset) pour devenir
   opérables au clavier. */

/* Navigation latérale : en-têtes de groupe en <button>, entrées en <a>. */
.nav-group-header{width:100%;background:none;border:0;font:inherit;font-size:10px;text-align:left;color:var(--text3);min-height:24px}
a.nav-i{text-decoration:none}

/* Profil en haut de la barre latérale : <button> stylé à l'identique. */
#sb-user{font:inherit;color:inherit;text-align:left}

/* Titre de page : <h1> à l'apparence de l'ancienne div (taille et graisse dans .tb-title). */
h1.tb-title{margin:0}

/* Filtre de période : go() écrivait style.display='flex' en ligne, ce qui annulait le
   display:none prévu sous 768 px et ajoutait 345 px de débordement horizontal (1.4.10).
   L'affichage passe par un attribut sur <body>, donc la règle mobile reprend la main. */
#period-filter{display:none}
body[data-section="dashboard"] #period-filter,
body[data-section="clients"] #period-filter,
body[data-section="pipeline"] #period-filter{display:flex}
@media (max-width:768px){
  body[data-section="dashboard"] #period-filter,
  body[data-section="clients"] #period-filter,
  body[data-section="pipeline"] #period-filter{display:none}
}

/* Compteurs des filtres de notification : l'opacité les faisait tomber à 2,6-3,2:1. */
.nf-count{color:inherit;font-weight:600}

/* Filtres multi-sélection : bouton, cases natives masquées visuellement, « Tout effacer » en
   bouton — tous stylés comme les anciennes div. */
button.mf-btn{font:inherit;font-size:12px}
label.mf-item{margin:0}
.mf-item:has(input:focus-visible) .mf-cb{outline:2px solid var(--accent);outline-offset:2px}
button.mf-clear{width:100%;background:none;border:0;border-top:1px solid var(--border);border-radius:0;font:inherit;font-size:11px;color:var(--text3)}
button.mf-clear:hover{color:var(--text)}

/* Tags du formulaire client : boutons à deux états. L'estompage seul ne disait rien (1.4.1) et
   tombait à 1,4:1 ; l'opacité écrite par toggleTag() est neutralisée, et l'état non sélectionné
   se lit à un fond transparent et un contour. */
#tag-sel .tag{font:inherit;font-size:11px;font-weight:500;opacity:1!important;border:1px solid transparent}
#tag-sel .tag[aria-pressed="false"]{background:transparent;color:var(--text2);border-color:var(--border2)}

/* Rubriques de formulaire passées en <fieldset>/<legend> : bordure et marges du navigateur
   remises à zéro, la <legend> reprend exactement la place de l'ancien titre. */
fieldset.form-rubrique,fieldset.gen-section{min-width:0}
fieldset.form-rubrique{border:0;padding:0;margin:0}
fieldset.gen-section{margin:0}
fieldset.form-rubrique>legend,fieldset.gen-section>legend{padding:0;float:left;width:100%}
fieldset.form-rubrique>legend+*,fieldset.gen-section>legend+*{clear:both}
/* Consigne « Les champs marqués * sont obligatoires », placée AVANT les champs. */
.form-consigne{font-size:11px;color:var(--text3);margin:0 0 .75rem}
/* Le fil d'étapes est une liste ordonnée : ni puce ni numéro ajouté. */
ol.stepper{list-style:none}

/* Première cellule des lignes de tableau : un vrai lien, pour que la fiche client s'ouvre au
   clavier. La ligne reste cliquable à la souris (data-a11y-ignorer évite le double arrêt). */
.cl-nom{color:inherit;text-decoration:none;font:inherit}
.cl-nom:hover,.cl-nom:focus-visible{text-decoration:underline;text-underline-offset:2px}

/* En-tête de tri : le <button> dans le <th> ne change rien à l'aspect de l'en-tête. */
th>button.th-tri{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:4px;text-transform:inherit;letter-spacing:inherit;min-height:24px}
th>button.th-tri:hover{color:var(--text)}

/* Onglets de la fiche client et de projet : boutons stylés comme les anciennes div. */
button.ptab,button.proj-tab{background:none;border:1px solid transparent;font:inherit;font-size:13.5px;font-weight:500;color:var(--text2)}
/* La barre des 9 onglets est en `width:fit-content` : combinée au `flex-wrap:nowrap` des petits
   écrans, sa largeur devenait celle de son contenu (961 px mesurés à 320 px de large) et c'est la
   PAGE qui défilait, pas la barre (1.4.10). Plafonnée à son conteneur, elle défile toute seule.
   Sur grand écran la barre est plus étroite que la fiche : `fit-content` gagne, rien ne change. */
.ptabs{max-width:100%}
button.proj-tab{font-size:13px}
.ptab-content:focus-visible,[role="tabpanel"]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

/* Menus contextuels (clients, projets, calendrier) : éléments en <button role="menuitem">. */
.ctx-item,.cal-ctx-item{display:block;width:100%;text-align:left;background:none;border:0;font:inherit;font-size:13.5px;color:var(--text2);padding:10px 14px;border-radius:8px;cursor:pointer}
.cal-ctx-item{font-size:13px;padding:7px 12px}
.ctx-item:hover,.ctx-item:focus-visible{background:var(--glow);color:var(--text)}
.cal-ctx-item:hover,.cal-ctx-item:focus-visible{background:var(--bg3);color:var(--text)}
.ctx-item.danger{color:var(--red)}

/* Étapes du projet et chips de l'historique : boutons à deux états, stylés comme avant. */
button.stage-btn,button.hist-chip{background:none;border:0;font:inherit;color:inherit;cursor:pointer;text-align:left}

/* Sous-lignes de projet du tableau clients : l'opacité .62 faisait passer un texte réel pour
   désactivé (1,9:1). La distinction visuelle passe par la couleur de texte, déjà atténuée. */
tr.cl-subrow{opacity:1!important}

/* Zones défilantes atteignables au clavier (2.1.1) : elles reçoivent tabindex="0" en JS. */
[role="region"][tabindex="0"]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

/* Un texte .sr-only écrit dans un tableau qui défile s'échappait de son cadre : posé en absolu
   sans ancêtre positionné, il n'était plus rogné par l'overflow du cadre et ajoutait son
   décalage au défilement horizontal de la PAGE entière — 434 px de large mesurés sur la vue
   d'ensemble à 320 px, pour un texte invisible (1.4.10). Le cadre devient son bloc conteneur.
   Rien d'autre ne change : ces cadres ne contiennent aucun élément positionné volontairement
   par rapport à la page. Mesuré le 20/09/2026 : la vue d'ensemble retombe à 320 px. */
.tc:has(> table),.tc > :has(> table),.vd-card.vd-flush > :has(> table){position:relative}
/* fin du bloc A */

/* ── BLOC B — documents, notifications, signature, rapports (accessibilité 18/09/2026) ── */
/* Tableau de données d'un graphique (graphiqueAccessible(), js/10) : replié, il ne prend que la
   hauteur d'une ligne. C'est l'équivalent en texte d'un <canvas>, donc la seule façon de lire un
   graphique au lecteur d'écran — et de relever une valeur quand deux séries ont la même teinte. */
.graph-donnees{margin-top:8px;font-size:12px}
.graph-donnees>summary{cursor:pointer;color:var(--text3);padding:4px 2px;min-height:24px;display:flex;align-items:center}
.graph-donnees>summary:hover{color:var(--text2)}
.graph-donnees table{width:100%;border-collapse:collapse;margin-top:6px}
.graph-donnees th,.graph-donnees td{padding:5px 8px;text-align:right;border-bottom:1px solid var(--border);white-space:nowrap}
.graph-donnees thead th,.graph-donnees tbody th{text-align:left;color:var(--text3);font-weight:600}
.graph-donnees tbody td{color:var(--text2);font-variant-numeric:tabular-nums}

/* Bandeaux de notification : les boutons « Reporter » et « Fermer » mesuraient environ 19 px et se
   chevauchaient (2.5.8), et ils n'apparaissaient qu'au survol de la souris (1.4.13). */
.notif-toast .nt-snooze,.notif-toast .nt-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center}
.notif-toast .nt-actions{gap:8px}

/* Séparateur redimensionnable des ateliers (devis, contrat, rapport) : au clavier, il faut le voir
   quand il a le focus, sinon les flèches déplacent une poignée invisible. */
.gen-split:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

/* Mode présentation : les commandes s'effacent au bout de 2,5 s. Elles restent tabulables, donc
   elles doivent redevenir visibles quand le focus arrive dessus (2.4.7). */
#present-ov:focus-within .pv-ctl,#present-ov .pv-ctl:focus-visible{opacity:1!important}

/* Zone de dépôt d'un document déjà réalisé (js/09) : c'était une <div onclick>, seule voie pour
   importer au clavier. C'est devenu un <button>, qui doit rendre exactement le même dessin — un
   bouton apporte sa propre police, son fond et son alignement, que .dz-import ne remplaçait pas. */
button.dz-import{width:100%;font-family:inherit;font-size:12.5px;background:none;text-align:left;line-height:1.45}
.dz-import-wrap{display:contents}

/* Pipeline : « Déplacer vers » est la seule voie sans glisser-déposer (2.5.7). Elle reste
   invisible tant qu'elle n'a pas le focus — la planche garde exactement le même dessin — et
   s'affiche sous la carte dès qu'on l'atteint au clavier, sinon on piloterait un contrôle
   qu'on ne voit pas (2.4.7). */
.pb-move{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.pb-move:focus{position:static;width:100%;height:auto;margin:-4px 0 10px;padding:5px 8px;overflow:visible;clip:auto;clip-path:none;border:1px solid var(--border-input);border-radius:var(--rs);background:var(--bg2);color:var(--text);font-family:inherit;font-size:12px}
/* fin du bloc B */

/* ── BLOC C — comptabilité, calendrier, équipe, tâches, santé (accessibilité 18/09/2026) ── */

/* Zones de dépôt d'un justificatif (js/22, js/28). Elles étaient des <div> cliquables à la
   souris seule (audit clavier, constat 15) et sont devenues des <label for> qui portent un
   <input type="file"> masqué. Deux conséquences à rattraper ici :
   1. un <label> est un élément EN LIGNE : ses 16 px de marge intérieure débordaient sur ses
      voisins au lieu de les pousser. Il lui faut une boîte.
   2. le champ fichier est masqué À CÔTÉ de l'étiquette, pas dedans : la règle
      `.qk-drop-zone:has(input:focus-visible)` de js/20 ne peut pas le voir. Au clavier, le
      focus était donc invisible (2.4.7). La règle ci-dessous suit le champ frère. */
label.qk-drop-zone{display:block}
.qk-drop-zone:has(~ input[type="file"]:focus-visible){outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent);color:var(--accent)}
/* Même montage pour la zone d'images d'une idée (js/34) : le champ est un frère, posé hors écran. */
#aj-img-drop:has(~ #aj-img-file:focus-visible){outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent)}

/* Panneau de notifications (js/31) : « Supprimer », « Masquer » et « Reporter » sont posés en
   opacité 0 et ne se révèlent qu'au survol de la souris. Les gestionnaires onfocus en ligne les
   rallument déjà, mais une règle CSS ne dépend pas d'eux — au clavier, le focus doit se voir
   (audit clavier, constat 17 ; WCAG 2.4.7). */
#notif-panel button:focus-visible,#all-notifs-ov button:focus-visible{opacity:1 !important;background:var(--bg4) !important}

/* Champs à suggestions d'une tâche (js/35) : la suggestion courante était marquée par la seule
   classe .sel, que le motif combobox double désormais par aria-selected (audit ARIA, constat
   37). Les deux sources disent la même chose à l'écran. */
.adr-suggest-item[aria-selected="true"]{background:var(--bg3)}

/* Reflow à 320 px (WCAG 1.4.10, audit structure). Deux lignes de liste débordaient la fenêtre
   et forçaient un défilement horizontal de la page entière : une ligne d'historique des points
   d'équipe (élément de grille) et une carte de déclaration (conteneur flex). Dans les deux cas
   la cause est la même — `min-width:auto` empêche l'élément de descendre sous la largeur de son
   contenu. Le contenu se replie de lui-même une fois la contrainte levée. */
.pt-hist>.pt-hrow{min-width:0}
.decl-card{min-width:0;flex-wrap:wrap}

/* fin du bloc C */

/* ═══════════════════════════════════════════════════════════════════════════════════════
   AGENDA — V2 (21/09/2026) · sur le modèle de Google Agenda (js/30-calendrier.js)
   Les couleurs viennent des jetons du CRM : l'agenda suit le thème clair et le thème sombre.
   La couleur d'un événement est celle de son agenda Google (--ag-c), comme dans Google.
   ═══════════════════════════════════════════════════════════════════════════════════════ */
#sec-calendrier.active{padding:0}
/* Un élément marqué « hidden » reste caché même quand sa classe lui donne display:flex ou grid
   (constaté au harnais : le champ « Jusqu'au » s'affichait hors journée entière). */
.ag [hidden],.ag-ov [hidden]{display:none!important}
.ag{display:grid;grid-template-columns:256px minmax(0,1fr);min-height:calc(100vh - 140px);background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);overflow:hidden}
.ag-rail{padding:10px 12px 24px;border-right:1px solid var(--border);overflow-y:auto;max-height:calc(100vh - 140px);display:flex;flex-direction:column;gap:6px}
.ag-main{display:flex;flex-direction:column;min-width:0}

/* ── Bouton « Créer » et menus ── */
.ag-creer-wrap{position:relative;margin:2px 0 12px}
.ag-creer{display:inline-flex;align-items:center;gap:10px;padding:14px 18px 14px 14px;border-radius:16px;border:1px solid var(--border2);background:var(--bg3);color:var(--text);font:600 14px var(--font);cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.25),0 4px 10px rgba(0,0,0,.12);transition:box-shadow .15s,background .15s}
.ag-creer:hover{box-shadow:0 2px 6px rgba(0,0,0,.3),0 8px 18px rgba(0,0,0,.16);background:var(--bg4)}
.ag-menu{position:absolute;z-index:60;min-width:220px;background:var(--bg2);border:1px solid var(--border2);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.35);padding:6px 0}
.ag-menu[hidden]{display:none}
.ag-menu button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 16px;border:0;background:transparent;color:var(--text);font:500 13.5px var(--font);cursor:pointer}
.ag-menu button:hover,.ag-menu button:focus-visible{background:var(--glow);outline:none}
/* Audit contraste du 22/09/2026 : la teinte seule ne suffisait pas à montrer le focus (1,2:1). */
.ag-menu button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ag-menu button kbd{margin-left:auto;font:500 11px var(--mono);color:var(--text3);background:none;border:0}
.ag-menu hr{border:0;border-top:1px solid var(--border);margin:6px 0}
.ag-menu .ag-coche{width:16px;color:var(--accent);font-weight:700}
.ag-menu-droite{right:0;top:calc(100% + 6px)}
.ag-creer-wrap .ag-menu{left:0;top:calc(100% + 6px)}
.ag-menu-flottant{position:fixed}

/* ── Mini-calendrier ── */
.ag-mini{padding:0 2px 6px}
.ag-mini-tete{display:flex;align-items:center;gap:2px;padding:4px 2px 6px}
.ag-mini-titre{flex:1;font:600 13.5px var(--font);color:var(--text);padding-left:6px}
.ag-mini-grille{display:flex;flex-direction:column;gap:1px}
.ag-mini-l{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:10.5px;color:var(--text3)}
.ag-mini-sem{grid-template-columns:22px repeat(7,1fr)}
.ag-mini-ns{font:500 10px var(--mono);color:var(--text3);background:var(--bg3);border-radius:4px;display:flex;align-items:center;justify-content:center;margin:1px 2px}
.ag-mini-j{width:26px;height:26px;margin:1px auto;border:0;border-radius:50%;background:transparent;color:var(--text2);font:500 11.5px var(--font);cursor:pointer;display:flex;align-items:center;justify-content:center}
.ag-mini-j:hover{background:var(--bg4)}
.ag-mini-j.ag-hors{color:var(--text3);opacity:.7}
.ag-mini-j.ag-sel{background:var(--glow);color:var(--accent);font-weight:700}
.ag-mini-j.ag-auj{background:var(--accent-fill);color:#fff;font-weight:700}
.ag-mini-j.ag-a-evt::after{content:'';position:absolute}
.ag-mini-vide{width:26px;height:26px}

/* ── Blocs du rail ── */
.ag-rail-bloc{padding:6px 2px}
.ag-rail-bloc>summary{display:flex;align-items:center;gap:6px;list-style:none;cursor:pointer;font:600 13.5px var(--font);color:var(--text);padding:6px 4px;border-radius:8px}
.ag-rail-bloc>summary::-webkit-details-marker{display:none}
.ag-rail-bloc>summary::after{content:'';margin-left:auto;width:8px;height:8px;border-right:2px solid var(--text3);border-bottom:2px solid var(--text3);transform:rotate(45deg);transition:transform .15s}
.ag-rail-bloc[open]>summary::after{transform:rotate(-135deg)}
.ag-rail-bloc>summary:hover{background:var(--bg3)}
.ag-rail-titre{display:block;font:600 13.5px var(--font);color:var(--text);padding:4px 4px 6px}
.ag-rail-note{font-size:12px;color:var(--text3);line-height:1.5;padding:2px 4px;margin:0}
.ag-recherche{display:flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:0 10px;color:var(--text3)}
.ag-recherche input{flex:1;min-width:0;border:0;background:transparent;color:var(--text);font:500 13px var(--font);padding:9px 0;outline:none}
.ag-recherche:focus-within{border-color:var(--accent)}
.ag-liste{display:flex;flex-direction:column;gap:1px;padding:2px 0}
.ag-agenda{display:flex;align-items:center;gap:10px;padding:6px 6px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text2);position:relative}
.ag-agenda:hover{background:var(--bg3)}
.ag-agenda input{position:absolute;opacity:0;width:18px;height:18px;margin:0;cursor:pointer}
.ag-case{flex:0 0 18px;height:18px;border-radius:3px;border:2px solid var(--ag-c);display:flex;align-items:center;justify-content:center}
.ag-agenda input:checked+.ag-case{background:var(--ag-c)}
.ag-agenda input:checked+.ag-case::after{content:'';width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px)}
.ag-agenda input:focus-visible+.ag-case{outline:2px solid var(--accent);outline-offset:2px}
.ag-agenda-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-page{display:flex;align-items:center;gap:4px;border-radius:6px}
.ag-page:hover{background:var(--bg3)}
.ag-page-n{flex:1;display:flex;align-items:center;gap:10px;padding:7px 6px;color:var(--text2);text-decoration:none;font-size:13px;min-width:0}
.ag-util-p{font-size:11.5px;color:var(--text3);padding:2px 4px}
.ag-util-v{font-size:13px;color:var(--text);padding:2px 4px 6px}
.ag-util-barre{height:8px;border-radius:4px;background:var(--bg4);margin:0 4px;overflow:hidden}
.ag-util-barre span{display:block;height:100%;background:var(--accent-fill);border-radius:4px}
.ag-comptes{font-size:12.5px;color:var(--text2);display:flex;flex-direction:column;gap:6px;padding:4px}
.ag-compte-moi{margin:0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ag-comptes-l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.ag-comptes-l li{display:flex;align-items:center;gap:6px;overflow-wrap:anywhere}
.ag-pastille-ok{width:8px;height:8px;border-radius:50%;background:var(--green);flex:0 0 8px}
.ag-lien{border:0;background:none;padding:0;color:var(--accent);font:600 12.5px var(--font);cursor:pointer;text-decoration:underline;text-underline-offset:2px}

/* ── Barre du haut ── */
.ag-barre{display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.ag-auj-btn{padding:8px 18px;border-radius:999px;border:1px solid var(--border2);background:transparent;color:var(--text);font:600 13.5px var(--font);cursor:pointer;margin-right:6px}
.ag-auj-btn:hover{background:var(--bg3)}
.ag-ico{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:0;background:transparent;color:var(--text2);font:500 20px var(--font);cursor:pointer;text-decoration:none;flex:0 0 36px}
.ag-ico:hover{background:var(--bg3);color:var(--text)}
.ag-ico-petit{width:26px;height:26px;flex-basis:26px;font-size:17px;margin-left:auto}
.ag-titre{font:500 21px var(--font-display);color:var(--text);margin:0 6px;white-space:nowrap}
.ag-semaine{font:600 11px var(--font);color:var(--text2);background:var(--bg3);border-radius:6px;padding:3px 7px}
.ag-espace{flex:1}
.ag-recherche-barre{width:200px}
/* Barre trop étroite entre la barre latérale du CRM et le rail : la recherche de la barre se
   retire (« Réunion avec… » et la recherche du haut de page la remplacent). */
@media (max-width: 1280px){.ag-recherche-barre{display:none}}
.ag-vue-wrap{position:relative}
.ag-vue-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 12px 8px 16px;border-radius:999px;border:1px solid var(--border2);background:transparent;color:var(--text);font:600 13.5px var(--font);cursor:pointer}
.ag-vue-btn:hover{background:var(--bg3)}
.ag-rail-btn{display:none}
.ag-bandeau{margin:12px 14px 0;padding:10px 14px;border-radius:8px;background:var(--amber-bg);color:var(--text);font-size:13px;line-height:1.5}

/* ── Vue Mois ── */
.ag-vue{flex:1;min-height:0;display:flex;flex-direction:column;overflow:auto}
.ag-mois{flex:1;display:grid;grid-template-rows:repeat(var(--ag-lignes),minmax(118px,1fr));min-height:0}
.ag-mois-sem{display:grid;grid-template-columns:28px repeat(var(--ag-cols),minmax(0,1fr));border-bottom:1px solid var(--border)}
.ag-num-sem{font:500 10.5px var(--mono);color:var(--text3);background:var(--bg3);display:flex;align-items:flex-start;justify-content:center;padding-top:8px}
.ag-mois-case{border-left:1px solid var(--border);padding:4px 4px 6px;display:flex;flex-direction:column;gap:1px;min-width:0;cursor:default;position:relative}
.ag-mois-case.ag-hors{background:color-mix(in srgb,var(--bg) 35%,transparent)}
.ag-mois-case.ag-survol{background:var(--glow)}
.ag-mois-jn{text-align:center;font:600 10.5px var(--font);color:var(--text3);letter-spacing:.04em;padding-top:2px}
.ag-mois-num{align-self:center;min-width:26px;height:26px;padding:0 6px;border:0;border-radius:13px;background:transparent;color:var(--text2);font:600 12.5px var(--font);cursor:pointer;margin-bottom:2px}
.ag-mois-num:hover{background:var(--bg4)}
.ag-hors .ag-mois-num{color:var(--text3)}
.ag-auj .ag-mois-num{background:var(--accent-fill);color:#fff}
.ag-puce{display:flex;align-items:center;gap:6px;width:100%;min-width:0;padding:2px 6px;border:0;border-radius:4px;background:transparent;color:var(--text);font:500 12px var(--font);text-align:left;cursor:pointer;line-height:1.35;touch-action:none}
.ag-puce:hover{background:var(--bg3)}
.ag-puce .ag-point,.ag-plan-evt .ag-point{flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:var(--ag-c)}
.ag-puce-h{color:var(--text2);font-weight:500;white-space:nowrap}
.ag-puce-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ag-puce-jour{background:var(--ag-c);color:#fff;font-weight:600}
.ag-puce-jour:hover{background:var(--ag-c);filter:brightness(1.08)}
.ag-puce.ag-passe{opacity:.55}
.ag-puce.ag-fait .ag-puce-t{text-decoration:line-through}
.ag-rond{flex:0 0 10px;width:10px;height:10px;border-radius:50%;border:2px solid currentColor}
.ag-autres{align-self:flex-start;border:0;background:transparent;color:var(--text);font:600 11.5px var(--font);padding:2px 6px;border-radius:4px;cursor:pointer}
.ag-autres:hover{background:var(--bg3)}
.ag-puce.ag-geste,.ag-bloc.ag-geste{z-index:30;opacity:.85;box-shadow:0 6px 18px rgba(0,0,0,.35);cursor:grabbing}

/* ── Grille horaire ── */
.ag-grille{display:flex;flex-direction:column;flex:1;min-height:0}
.ag-grille-tete,.ag-grille-jour,.ag-grille-corps{display:grid;grid-template-columns:56px repeat(var(--ag-n),minmax(0,1fr))}
.ag-grille-tete{border-bottom:1px solid var(--border)}
.ag-fuseau{font:500 10px var(--font);color:var(--text3);display:flex;align-items:flex-end;justify-content:center;padding-bottom:4px}
.ag-tete-jour{text-align:center;padding:8px 2px 6px}
.ag-tete-jn{font:600 11px var(--font);color:var(--text3);letter-spacing:.05em}
.ag-auj .ag-tete-jn{color:var(--accent)}
.ag-tete-num{width:44px;height:44px;border:0;border-radius:50%;background:transparent;color:var(--text);font:500 24px var(--font-display);cursor:pointer;margin-top:2px}
.ag-tete-num:hover{background:var(--bg3)}
.ag-auj .ag-tete-num{background:var(--accent-fill);color:#fff}
.ag-grille-jour{border-bottom:1px solid var(--border)}
.ag-journee-l{font-size:10px;color:var(--text3);text-align:right;padding:6px 8px 0 0}
.ag-journee-col{border-left:1px solid var(--border);padding:2px;min-height:26px;display:flex;flex-direction:column;gap:2px}
.ag-defil{flex:1;overflow-y:auto;max-height:calc(100vh - 290px);min-height:360px}
.ag-grille-corps{position:relative}
.ag-heures{position:relative;height:calc(24 * var(--ag-h))}
.ag-heure{position:absolute;right:8px;transform:translateY(-50%);font:500 10.5px var(--mono);color:var(--text3)}
.ag-col{position:relative;height:calc(24 * var(--ag-h));border-left:1px solid var(--border);background:repeating-linear-gradient(to bottom,transparent 0,transparent calc(var(--ag-h) - 1px),var(--border) calc(var(--ag-h) - 1px),var(--border) var(--ag-h));cursor:pointer}
.ag-col.ag-auj{background-color:color-mix(in srgb,var(--glow) 60%,transparent)}
.ag-bloc{position:absolute;box-sizing:border-box;border-radius:6px;background:var(--ag-c);color:#fff;padding:3px 7px;overflow:hidden;cursor:pointer;z-index:2;border:1px solid var(--bg2);touch-action:none;display:flex;flex-direction:column}
.ag-bloc:hover{filter:brightness(1.07)}
.ag-bloc:focus-visible{outline:2px solid var(--text);outline-offset:1px}
.ag-bloc.ag-passe{opacity:.62}
.ag-bloc-t{font:600 12px var(--font);line-height:1.25;overflow:hidden;text-overflow:ellipsis}
.ag-bloc-h{font:500 11px var(--font);opacity:.92;white-space:nowrap}
.ag-bloc.ag-court{flex-direction:row;gap:6px;align-items:center}
.ag-bloc.ag-court .ag-bloc-t{white-space:nowrap}
.ag-poignee{position:absolute;left:0;right:0;bottom:0;height:9px;cursor:ns-resize}
.ag-poignee:hover{background:rgba(255,255,255,.25)}
.ag-maintenant{position:absolute;left:0;right:0;border-top:2px solid #ea4335;z-index:3;pointer-events:none}
.ag-maintenant::before{content:'';position:absolute;left:-6px;top:-7px;width:12px;height:12px;border-radius:50%;background:#ea4335}
.ag-aide{font-size:11px;color:var(--text3);padding:8px 14px;margin:0;border-top:1px solid var(--border)}

/* ── Vue Année ── */
.ag-annee{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px 26px;padding:18px 20px}
.ag-annee-t{border:0;background:none;color:var(--text);font:600 14px var(--font);padding:4px 6px;border-radius:6px;cursor:pointer;margin-bottom:4px}
.ag-annee-t:hover{background:var(--bg3)}
.ag-annee .ag-mini-j.ag-a-evt{box-shadow:inset 0 -2px 0 var(--accent)}

/* ── Vue Planning ── */
.ag-planning{padding:6px 0}
.ag-plan-jour{display:grid;grid-template-columns:120px 1fr;border-bottom:1px solid var(--border);padding:8px 14px}
.ag-plan-date{display:flex;align-items:center;gap:10px;border:0;background:none;color:var(--text2);cursor:pointer;text-align:left;padding:4px;border-radius:8px;align-self:start}
.ag-plan-num{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font:500 18px var(--font-display);color:var(--text)}
.ag-plan-date.ag-auj .ag-plan-num{background:var(--accent-fill);color:#fff}
.ag-plan-md{font:600 11px var(--font);text-transform:uppercase;letter-spacing:.04em}
.ag-plan-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ag-plan-evt{display:grid;grid-template-columns:14px 150px 1fr;align-items:center;gap:10px;width:100%;border:0;background:none;color:var(--text);font:500 13px var(--font);padding:8px 6px;border-radius:6px;cursor:pointer;text-align:left}
.ag-plan-evt:hover{background:var(--bg3)}
.ag-plan-h{color:var(--text2);font-size:12.5px}
.ag-plan-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-vide{padding:40px 20px;text-align:center;color:var(--text3);font-size:13.5px}

/* ── Fiche d'un événement et fenêtres ── */
.ag-ov{position:fixed;inset:0;z-index:10000;background:rgba(10,8,18,.55);display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto}
.ag-ov-leger{background:rgba(10,8,18,.28)}
.ag-carte{width:min(440px,100%);background:var(--bg2);border:1px solid var(--border2);border-radius:16px;box-shadow:0 24px 60px rgba(0,0,0,.45);padding:8px 8px 18px;font-family:var(--font)}
.ag-carte-barre{display:flex;justify-content:flex-end;gap:2px}
.ag-carte-titre{display:flex;gap:16px;padding:4px 18px 10px}
.ag-carre{flex:0 0 14px;height:14px;border-radius:4px;background:var(--ag-c);margin-top:7px}
.ag-carte-titre h2{font:500 20px var(--font-display);color:var(--text);margin:0;line-height:1.3;overflow-wrap:anywhere}
.ag-carte-titre p{margin:4px 0 0;font-size:13px;color:var(--text2)}
.ag-meet{display:inline-flex;align-items:center;gap:8px;margin:4px 18px 10px 48px;padding:9px 16px;border-radius:999px;background:var(--accent-fill);color:#fff;font:600 13px var(--font);text-decoration:none}
.ag-carte-l{display:flex;gap:16px;padding:7px 18px;font-size:13px;color:var(--text2);line-height:1.5}
.ag-carte-i{flex:0 0 18px;color:var(--text3);padding-top:1px}
.ag-invites{list-style:none;margin:4px 0 0;padding:0}
.ag-rep{color:var(--text3);font-size:12px}
.ag-desc{white-space:pre-wrap;overflow-wrap:anywhere;max-height:180px;overflow:auto}
.ag-carte-actions{display:flex;flex-wrap:wrap;gap:6px;padding:10px 18px 0}
.ag-carte-jour{width:min(300px,100%)}
.ag-jour-tete{text-align:center;padding:0 0 8px}
.ag-jour-num{font:500 26px var(--font-display);color:var(--text);margin:2px 0 0}
.ag-jour-liste{display:flex;flex-direction:column;gap:2px;padding:0 10px}
.ag-fenetre{width:min(520px,100%);background:var(--bg2);border:1px solid var(--border2);border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.5);font-family:var(--font);display:flex;flex-direction:column;max-height:calc(100vh - 32px)}
.ag-fenetre-large{width:min(640px,100%)}
.ag-fen-tete{padding:20px 24px 6px}
.ag-fen-tete h2{font:500 21px var(--font-display);color:var(--text);margin:0 0 4px;overflow-wrap:anywhere}
.ag-fen-tete p{font-size:12.5px;color:var(--text3);margin:0}
.ag-titre-auto{border-bottom:2px solid var(--accent);padding-bottom:6px}
.ag-titre-auto.ag-titre-vide{color:var(--text3);border-bottom-color:var(--border2)}
.ag-onglets{display:flex;gap:4px;flex-wrap:wrap;margin-top:12px}
.ag-onglets [role="tab"]{padding:7px 12px;border-radius:6px;border:0;background:transparent;color:var(--text2);font:600 13px var(--font);cursor:pointer}
.ag-onglets [role="tab"]:hover{background:var(--bg3)}
.ag-onglets [role="tab"][aria-selected="true"]{background:var(--glow);color:var(--accent)}
.ag-fen-corps{padding:10px 24px;overflow-y:auto;display:flex;flex-direction:column;gap:12px}
.ag-fen-pied{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border);background:var(--bg3);border-radius:0 0 16px 16px}
.ag-champ{display:flex;flex-direction:column;gap:5px;min-width:0}
.ag-champ>label,.ag-radios legend{font:600 12px var(--font);color:var(--text2)}
.ag-champ-coche{justify-content:flex-end}
.ag-champ-coche label{display:flex;align-items:center;gap:8px;font:500 13px var(--font);color:var(--text);cursor:pointer}
.ag-champ-coche input{width:17px;height:17px;accent-color:var(--accent)}
.ag-deux{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ag-trois{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:10px}
.ag-aide-champ{font-size:11.5px;color:var(--text3);margin:2px 0 0;line-height:1.45}
.ag-leger{font-weight:400;color:var(--text3)}
.ag-err{color:var(--red);font-size:12.5px;padding:0 24px;min-height:0}
.ag-err:empty{display:none}
.ag-radios{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}
.ag-radios label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);cursor:pointer}
.ag-radios-ligne{flex-direction:row;flex-wrap:wrap;gap:8px}
.ag-radios-ligne legend{width:100%;margin-bottom:6px}
.ag-pastille{padding:8px 14px;border-radius:999px;border:1px solid var(--border2)}
.ag-pastille:has(input:checked){border-color:var(--accent);background:var(--glow)}

/* ═══════════════════════════════════════════════════════════════════════════════════════
   PROSPECTION — V2 (21/09/2026) · js/39-prospection.js
   Le tableau reprend les classes du Pipeline client (.pb-col, .pb-card) : même produit, même
   geste. Ce bloc n'ajoute que ce qui est propre aux prospects.
   ═══════════════════════════════════════════════════════════════════════════════════════ */
.pr-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.pr-chiffres{display:flex;gap:10px;flex-wrap:wrap}
.pr-chiffre{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:10px 16px;display:flex;flex-direction:column;min-width:120px}
.pr-v{font:600 22px var(--font-display);color:var(--text)}
.pr-l{font-size:11.5px;color:var(--text3)}
.pr-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pr-periodes{display:flex;gap:2px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:3px}
.pr-board{grid-template-columns:repeat(6,minmax(170px,1fr))}
.pr-col-t{font:600 12.5px var(--font);color:var(--text)}
.pr-vide{font-size:11px;color:var(--text3);text-align:center;padding:1rem 0}
.pr-carte .pb-cn{font-weight:600}
.pr-meta{display:flex;flex-wrap:wrap;gap:4px 8px;font-size:11px;color:var(--text3);margin-top:4px}
.pr-pascal{background:var(--amber-bg);color:var(--amber);border-radius:4px;padding:0 5px;font-weight:600}
/* Agents commerciaux (23/09/2026, js/45) : l'agent qui a apporté la carte — mêmes couleurs que
   l'ancienne pastille Pascal, déjà vérifiées à 4,5:1 dans les deux thèmes ; le texte dit le nom. */
.pr-agent{background:var(--amber-bg);color:var(--amber);border-radius:4px;padding:0 5px;font-weight:600}
.agt-groupe{border:0;padding:0;margin:0 0 16px;min-width:0}
.agt-groupe>legend{font:600 12.5px var(--font);color:var(--text);padding:0;margin:0 0 8px}
.agt-aide{font-size:11.5px;color:var(--text3);line-height:1.45}
.agt-actions{white-space:nowrap}
.agt-actions .btn+.btn{margin-left:6px}
.agt-suivi{margin-top:26px}
.pr-motif{font-size:11px;color:var(--text2);margin-top:4px}
.pr-relance{font-size:11px;color:var(--amber);font-weight:600;margin-top:4px}
.pr-lien{border:0;background:none;padding:0;margin-top:6px;color:var(--accent);font:600 11.5px var(--font);cursor:pointer;text-decoration:underline;min-height:24px;display:inline-flex;align-items:center}
.pr-note{font-size:12.5px;color:var(--text3);line-height:1.5;margin:0 0 10px}
.pr-etat{font-size:12.5px;color:var(--accent);font-weight:600;margin:0 0 12px}
.pr-leger{color:var(--text3);font-weight:400}
.pr-case{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:var(--text);cursor:pointer}
.pr-case input{width:17px;height:17px;accent-color:var(--accent)}
.pr-fiche-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px;padding-top:12px;border-top:1px solid var(--border)}
.pr-alerte{background:var(--amber-bg);border-radius:var(--r);padding:14px 16px;font-size:13px;color:var(--text)}
.pr-archives .tc{margin-top:6px}
/* Téléphone : le tableau s'empile comme le Pipeline (mobile.css) ; les chiffres vont par deux. */
@media (max-width: 560px){ .pr-chiffres{display:grid;grid-template-columns:1fr 1fr;width:100%} .pr-chiffre{min-width:0} .pr-chiffre:last-child:nth-child(odd){grid-column:1 / -1} }

/* ═══════════════════════════════════════════════════════════════════════════════════════
   CHAÎNE IA — V2 (21/09/2026) · js/40-chaine-ia.js, js/42-administration-v2.js, js/41-guide.js
   ═══════════════════════════════════════════════════════════════════════════════════════ */
/* Échanges */
.ech-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.ech-h{font:600 15px var(--font);color:var(--text);margin:0 0 4px}
.ech-boutons{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ech-vide{padding:20px;border:1px dashed var(--border2);border-radius:var(--r);color:var(--text3);font-size:13px;text-align:center}
.ech-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.ech-item{display:grid;grid-template-columns:32px 1fr auto;gap:12px;align-items:flex-start;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:12px 14px}
.ech-ic{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--glow);color:var(--accent)}
.ech-ic-mail{background:var(--amber-bg);color:var(--amber)}
.ech-ic-appel{background:var(--green-bg);color:var(--green)}
.ech-meta{font-size:12px;color:var(--text2);margin-bottom:4px}
.ech-texte{font-size:13px;color:var(--text);line-height:1.55;white-space:pre-wrap;word-break:break-word;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.ech-texte.ech-ouvert{display:block;-webkit-line-clamp:unset}
.ech-plus{border:0;background:none;padding:0;margin-top:4px;color:var(--accent);font:600 12px var(--font);cursor:pointer;text-decoration:underline;min-height:24px}
.ech-actions{display:flex;gap:6px;flex-wrap:wrap}
.ech-form{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.ech-form .ech-large,.ech-form .ech-erreur{grid-column:1 / -1}
.ech-erreur{color:var(--red);font-size:12.5px;min-height:1em}
.prop-resume-ligne{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.prop-resume-ligne .gen-l{margin:0}

/* Analyse et cahier des charges */
.cdc-info{background:var(--glow);border-radius:var(--r);padding:10px 14px;font-size:12.5px;color:var(--text);margin:0 0 14px;line-height:1.5}
.cdc-bloc{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rl);padding:18px 20px;margin-bottom:16px}
.cdc-t{font:600 14px var(--font);color:var(--text);margin:0 0 12px}
.cdc-st{font:600 12.5px var(--font);color:var(--text);margin:18px 0 8px}
.cdc-jauge-ligne{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.cdc-jauge{position:relative;width:112px;height:112px;flex-shrink:0}
.cdc-jauge svg{width:100%;height:100%;transform:rotate(-90deg)}
.cdc-jauge circle{fill:none;stroke-width:10}
.cdc-jauge-fond{stroke:var(--bg4)}
.cdc-jauge-val{stroke-linecap:round;transition:stroke-dasharray .4s}
.cdc-rouge .cdc-jauge-val{stroke:var(--red)}
.cdc-orange .cdc-jauge-val{stroke:var(--amber)}
.cdc-vert .cdc-jauge-val{stroke:var(--green)}
.cdc-jauge-v{position:absolute;inset:0;display:flex;align-items:baseline;justify-content:center;padding-top:38px;color:var(--text)}
.cdc-jauge-v b{font:700 28px var(--font-display)}
.cdc-jauge-v span{font-size:12px;color:var(--text3)}
.cdc-jauge-txt{font-size:13px;color:var(--text2);line-height:1.7}
.cdc-progression span{font-weight:600;color:var(--text)}
.cdc-couv{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.cdc-couv li{display:grid;grid-template-columns:minmax(150px,1.3fr) 2fr 52px 86px;gap:10px;align-items:center;font-size:12.5px}
.cdc-couv-n{color:var(--text)}
.cdc-couv-p{color:var(--text2);font-family:var(--mono);text-align:right}
.cdc-barre{height:8px;background:var(--bg4);border-radius:4px;overflow:hidden}
.cdc-barre span{display:block;height:100%}
.cdc-barre .cdc-complet{background:var(--green)}
.cdc-barre .cdc-partiel{background:var(--amber)}
.cdc-barre .cdc-manquant{background:var(--red)}
.cdc-badge{display:inline-block;font-size:11px;font-weight:600;padding:1px 7px;border-radius:10px;white-space:nowrap}
.cdc-b-complet{background:var(--green-bg);color:var(--green)}
.cdc-b-partiel{background:var(--amber-bg);color:var(--amber)}
.cdc-b-manquant{background:var(--red-bg);color:var(--red)}
.cdc-c-bloquant{background:var(--red-bg);color:var(--red)}
.cdc-c-important{background:var(--amber-bg);color:var(--amber)}
.cdc-c-confort{background:var(--bg4);color:var(--text2)}
.cdc-manques{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cdc-manques li{display:grid;grid-template-columns:62px 1fr;gap:10px;font-size:13px;color:var(--text)}
.cdc-id{font-family:var(--mono);font-size:12px;color:var(--text2);padding-top:1px}
.cdc-constat{font-size:12px;color:var(--text2);margin-top:2px;line-height:1.5}
.cdc-acquis{margin-top:14px}
.cdc-acquis summary{cursor:pointer;font:600 12.5px var(--font);color:var(--text);min-height:24px}
.cdc-acquis ul{margin-top:10px}
.cdc-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.cdc-versions{display:grid;gap:12px}
.cdc-version{border:1px solid var(--border);border-radius:var(--r);padding:12px 14px;display:grid;grid-template-columns:1fr auto;gap:8px 14px;align-items:center}
.cdc-version .cdc-actions{margin:0}
.cdc-version .cdc-suivi,.cdc-version > div[id^="cdc-editeur"]{grid-column:1 / -1}
.cdc-suivi{font-size:12.5px;color:var(--text2)}
.cdc-suivi:empty{display:none}
.cdc-editeur{margin-top:6px}
.cdc-onglets{display:flex;gap:2px;margin-bottom:6px}
.cdc-ong{border:1px solid var(--border);background:transparent;color:var(--text2);font:600 12px var(--font);padding:5px 12px;border-radius:6px;cursor:pointer;min-height:28px}
.cdc-ong.actif{background:var(--glow);color:var(--accent);border-color:var(--accent)}
.cdc-md{width:100%;font-family:var(--mono);font-size:12.5px;line-height:1.55}
.cdc-apercu{background:var(--bg);border:1px solid var(--border);border-radius:var(--r);padding:18px 22px;font-size:13.5px;line-height:1.65;color:var(--text);max-height:70vh;overflow:auto}
.cdc-apercu h1{font-size:20px;margin:0 0 10px}
.cdc-apercu h2{font-size:16px;margin:18px 0 8px}
.cdc-apercu h3{font-size:14px;margin:14px 0 6px}
.cdc-apercu h4{font-size:13.5px;margin:12px 0 4px}
.cdc-apercu .md-h1{font-size:20px;margin:0 0 10px}
.cdc-apercu .md-h2{font-size:16px;margin:18px 0 8px}
.cdc-apercu .md-h3{font-size:14px;margin:14px 0 6px}
.cdc-apercu .md-h4{font-size:13.5px;margin:12px 0 4px}
.cdc-dif-fs{border:0;padding:0;margin:0;min-width:0}
/* Mémoire du dossier client — 23/09/2026 · js/51-memoire-client.js */
.mem-zone:empty{display:none}
.mem-bloc{border:1px solid var(--border);border-radius:var(--r);background:var(--bg2);padding:12px 14px;margin:10px 0 14px}
.mem-tete .cdc-t{margin:0 0 4px}
.mem-etat{margin:0 0 8px}
.mem-fichiers{margin:6px 0 0;padding-left:18px;font-size:12.5px;line-height:1.55}
.mem-fichiers li{margin:3px 0}
/* Écarts au modèle du contrat — 23/09/2026 · js/52-contrat-articles.js */
.ct-ecarts{padding:10px 16px;border-bottom:1px solid var(--border);font-size:12.5px;color:var(--text2)}
.ct-ecarts:empty{display:none}
.ct-ecarts-tete{color:var(--text);margin-bottom:4px}
.ct-ecarts-resume{margin:4px 0 8px;line-height:1.5;max-height:9em;overflow:auto}
.ct-ecarts-note{margin:4px 0;color:var(--amber)}
.ct-ecarts-liste{padding-left:20px;margin:8px 0}
.ct-ecart{margin:0 0 12px}
.ct-ecart details{margin-top:4px}
.ct-ecart-av,.ct-ecart-ap{margin-top:6px}
.cdc-apercu table,.cdc-table{border-collapse:collapse;width:100%;font-size:12.5px}
.cdc-apercu td,.cdc-apercu th,.cdc-table td,.cdc-table th{border:1px solid var(--border);padding:6px 8px;text-align:left;vertical-align:top}
.cdc-apercu blockquote{border-left:4px solid var(--red);background:var(--red-bg);margin:8px 0;padding:8px 12px}
.cdc-apercu code{font-family:var(--mono);font-size:12px;background:var(--bg4);padding:0 4px;border-radius:4px}
.cdc-corriger{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap;align-items:center}
.cdc-corr-l{flex-basis:100%;font-size:12px;font-weight:600;color:var(--text2)}
.cdc-corr-err{flex-basis:100%}
.cdc-corriger .fi{flex:1}
.cdc-archives{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--text2)}
.cdc-archives b{color:var(--text)}
.cdc-dif-liste{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}
.cdc-dif-liste li{border:1px solid var(--border);border-radius:var(--r);padding:8px 10px}
.cdc-dif-liste .pr-case{margin:0}
.cdc-dif-date{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}
.cdc-dif-date .fi{max-width:170px}

/* Administration : Constitution, Réglages IA */
.adm-zone{max-width:1100px}
.adm-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.adm-h{font:600 18px var(--font-display);color:var(--text);margin:0 0 6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.adm-version{font:500 13px var(--font);color:var(--text2)}
.adm-dates{font-size:12px;color:var(--text3)}
.adm-doc{max-height:none}
.adm-histo{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:10px;font-size:13px;color:var(--text)}
.adm-table-wrap{overflow-x:auto}
.adm-ia th[scope="row"]{font-weight:600;min-width:180px}
.adm-ligne{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px}
.ck-cat{border:1px solid var(--border);border-radius:var(--r);padding:10px 12px;margin:0 0 10px}
.ck-cat legend{font:600 12.5px var(--font);color:var(--text);padding:0 4px}
.ck-ligne{display:grid;grid-template-columns:78px 1fr 72px 120px auto;gap:6px;align-items:center;margin-bottom:10px}
.ck-cs{grid-column:1 / -1;width:100%;font-size:12.5px}
.ck-total{font:600 13px var(--font);padding:8px 12px;border-radius:var(--r);margin-top:6px}
.ck-ok{background:var(--green-bg);color:var(--green)}
.ck-ko{background:var(--red-bg);color:var(--red)}

/* Guide pas à pas (F8) */
.guide-voile{position:fixed;inset:0;background:rgba(10,8,18,.62);z-index:100000}
.guide-trou{position:fixed;z-index:100000;border-radius:10px;box-shadow:0 0 0 9999px rgba(10,8,18,.62);outline:2px solid var(--accent);pointer-events:none;transition:all .2s}
.guide-bulle{position:fixed;z-index:100001;background:var(--bg2);border:1px solid var(--border2);border-radius:12px;padding:14px 16px 10px;box-shadow:0 18px 60px rgba(0,0,0,.45);font-family:var(--font)}
.guide-fleche{position:absolute;width:14px;height:14px;background:var(--bg2);border:1px solid var(--border2);transform:translateX(-50%) rotate(45deg)}
.guide-dessous .guide-fleche{top:-8px;border-right:0;border-bottom:0}
.guide-dessus .guide-fleche{bottom:-8px;border-left:0;border-top:0}
.guide-centre .guide-fleche{display:none}
.guide-progression{font-size:11px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.06em}
.guide-titre{font:600 14px var(--font);color:var(--text);margin:4px 0 6px}
.guide-texte{font-size:13px;line-height:1.55;color:var(--text);margin:0 0 12px}
.guide-boutons{display:flex;justify-content:flex-end;gap:8px}
.guide-arreter{display:block;margin:10px auto 0;border:0;background:none;color:var(--text2);font:500 12px var(--font);text-decoration:underline;cursor:pointer;min-height:24px}
@media (max-width: 700px){
  .ech-item{grid-template-columns:32px 1fr}
  .ech-actions{grid-column:1 / -1}
  .ech-form{grid-template-columns:1fr}
  .cdc-couv li{grid-template-columns:1fr 52px}
  .cdc-couv .cdc-barre{grid-column:1 / -1;grid-row:2}
  .cdc-couv .cdc-badge{justify-self:start}
  .cdc-version{grid-template-columns:1fr}
  .ck-ligne{grid-template-columns:70px 1fr 64px}
  .ck-crit{grid-column:1 / 3}
}

/* ═══════════════════════════════════════════════════════════════════════════════════════
   CRÉATION PAR EXTRACTION — V2 (22/09/2026, §13.4) · js/43-extraction-client.js
   Tant que l'étape « Collez ce que vous avez » est affichée, le reste de l'étape 1 s'efface.
   ═══════════════════════════════════════════════════════════════════════════════════════ */
#sc-1.sc-extraction > :not(#extraction-zone):not(h3){display:none!important}
.ext-zone{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.ext-l{font:600 14px var(--font);color:var(--text)}
.ext-zone .fta{width:100%;min-height:180px}
.champ-extrait{background:var(--amber-bg)!important;box-shadow:inset 0 0 0 2px var(--amber)!important}
.champ-extrait-tag{display:inline-block;margin-left:6px;color:var(--amber);font-weight:600;text-transform:none;letter-spacing:0}
.ext-legende{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text);margin:0 0 12px}
.ext-pastille{width:12px;height:12px;border-radius:3px;background:var(--amber-bg);box-shadow:inset 0 0 0 1px var(--amber);flex-shrink:0}
.ext-echanges-bloc{margin-bottom:1rem}
.ext-leg{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:6px}
.ext-ech{border:1px solid var(--border);border-radius:var(--r);padding:8px 10px;margin-top:8px;display:grid;grid-template-columns:auto 160px;gap:6px 10px;align-items:center}
.ext-ech .pr-case{margin:0}
.ext-ech-t{grid-column:1 / -1;font-size:12.5px;color:var(--text2);white-space:pre-wrap;word-break:break-word}

/* Pièces jointes des tâches et des ajouts CRM — V2 (22/09/2026, §13.2) · js/44-pieces-jointes.js */
.pj-zone{display:flex;flex-direction:column;gap:6px}
.pj-depot{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:14px;border:1.5px dashed var(--border2);border-radius:10px;cursor:pointer;text-align:center;color:var(--text2);font-size:12.5px;background:var(--bg3)}
.pj-depot strong{color:var(--text)}
.pj-depot.pj-survol,.pj-depot:focus-within{border-color:var(--accent)}
.pj-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.pj-input:focus-visible + .pj-liste,.pj-zone:focus-within .pj-depot{outline:2px solid var(--accent);outline-offset:2px}
.pj-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.pj-liste:empty{display:none}
.pj-item{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;border:1px solid var(--border);border-radius:8px;padding:6px 8px}
.pj-nom{flex:1;min-width:120px;color:var(--text);word-break:break-all}

/* Catalogue de modules — V2 (22/09/2026, §13.7) · js/46-modules.js */
.mod-desc{font-size:12px;color:var(--text2);font-weight:400;margin-top:4px;max-width:420px}
.mod-deps{border:1px solid var(--border);border-radius:var(--r);padding:8px 10px;display:flex;flex-wrap:wrap;gap:4px 14px}
.mod-deps legend{font-size:12px;color:var(--text2);padding:0 4px}
.mod-deps .pr-case{margin:0}
.mod-table th[scope="row"]{min-width:220px}

/* Autres documents — V2 (22/09/2026, §13.8) · js/48-documents-v2.js */
.dv2-choix{border:0;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.dv2-carte{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--border);border-radius:var(--r);padding:12px;cursor:pointer}
.dv2-carte:has(input:checked){border-color:var(--accent);background:var(--glow)}
.dv2-carte input{margin-top:3px;accent-color:var(--accent)}
.dv2-carte span{display:flex;flex-direction:column;gap:2px}
.dv2-carte .pr-note{margin:0}
.dv2-page{background:#fff;color:#1a1a2e;border:1px solid var(--border);border-radius:var(--r);padding:26px 30px;font:13.5px/1.6 Helvetica,Arial,sans-serif;max-height:62vh;overflow:auto}
.dv2-page:focus{outline:2px solid var(--accent);outline-offset:2px}
.dv2-page h1{font-size:19px;color:#1B4F8A;margin:0 0 10px}
.dv2-page h2{font-size:14.5px;margin:16px 0 6px;color:#1a1a2e}
.dv2-page table{width:100%;border-collapse:collapse;margin:8px 0}
.dv2-page th,.dv2-page td{border-bottom:1px solid #dcdce6;padding:6px;text-align:left;vertical-align:top}
.dv2-page .n{text-align:right}
/* L'aperçu reste une page blanche dans le thème sombre : il neutralise les règles générales des tableaux. */
.dv2-page th{color:#474760}
.dv2-page tbody tr:hover td{background:transparent}
.dv2-page .dv2-tete{display:flex;justify-content:space-between;gap:16px;border-bottom:2px solid #1B4F8A;padding-bottom:10px;margin-bottom:16px;font-size:12.5px}
.dv2-page .dv2-sign{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:30px}
.dv2-page .dv2-sign div{border-top:1px solid #1a1a2e;padding-top:6px;min-height:60px}

/* Carte de la répartition des clients — V2 (22/09/2026, §13.5) · js/49-carte.js */
.carte-bloc{margin-top:16px}
.carte-tete{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.carte-onglets{display:flex;gap:4px;flex-wrap:wrap}
.carte-fil ol{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-wrap:wrap;gap:4px;font-size:12.5px;color:var(--text2)}
.carte-fil li+li::before{content:'›';content:'›' / '';margin-right:4px;color:var(--text3)}
.carte-fil [aria-current="location"]{font-weight:600;color:var(--text)}
.carte-corps{display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:14px}
.carte-map{height:420px;border-radius:var(--r);overflow:hidden;background:var(--bg3);border:1px solid var(--border)}
/* Au dézoom maximal, le monde est plus étroit que le cadre : les marges prennent la couleur des océans du fond de carte. */
.carte-map.leaflet-container{background:#d4dadc}
.carte-cote{display:flex;flex-direction:column;gap:12px;font-size:12.5px}
.carte-leg-l{display:flex;align-items:center;gap:6px;color:var(--text2);margin-top:4px}
.carte-leg-l span{width:16px;height:12px;border-radius:3px;flex-shrink:0;box-shadow:inset 0 0 0 1px var(--text2)}
.carte-clients{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:260px;overflow:auto}
.carte-table-bloc{margin-top:10px}
.carte-table-bloc summary{cursor:pointer;font:600 12.5px var(--font);color:var(--text);min-height:24px}
.carte-rapport svg{max-width:420px;display:block;margin:0 auto}
.carte-rapport figcaption{font-size:12px;color:#6b6b85;text-align:center;margin:6px 0}
.carte-rapport table{width:100%;border-collapse:collapse;font-size:12px}
.carte-rapport td,.carte-rapport th{border-bottom:1px solid #dcdce6;padding:4px 6px;text-align:left}
@media (max-width: 900px){ .carte-corps{grid-template-columns:1fr} .carte-map{height:320px} }

/* Double authentification — V2 (22/09/2026, §13.12) · js/50-securite.js */
.login-code-aide{font-size:13px;color:var(--text2);line-height:1.5;margin:0}
.login-l{font-size:11px;color:var(--text3);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.login-code{background:var(--bg3);border:1px solid var(--border-input);border-radius:10px;color:var(--text);font:600 22px var(--mono);letter-spacing:.4em;text-align:center;padding:11px 14px;width:100%}
.login-mem{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text2);cursor:pointer;min-height:24px}
.login-mem input{width:16px;height:16px;accent-color:var(--accent)}
.login-btn{background:var(--accent-fill);color:#fff;border:none;border-radius:10px;padding:13px;font:600 14px var(--font);cursor:pointer}
.login-liens{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.secu-bloc{border:1px solid var(--border);border-radius:var(--r);padding:10px 14px;margin:0 0 12px;display:flex;flex-direction:column;gap:6px}
.secu-bloc legend{font:600 12.5px var(--font);color:var(--text);padding:0 4px}
.secu-bloc .pr-case{margin:0}
