/* =========================================================
   2V Event - feuille de style
   Direction : table de regie. Rail encre, accent or, pastilles
   de signal pour les etats de disponibilite. Polices systeme
   (fonctionne hors ligne). Labels en capitales espacees facon
   etiquette de patch.
   ========================================================= */
:root{
  --encre:#15171C;
  --encre-2:#21242C;
  --ardoise:#1E293B;
  --fond:#EEF1F6;
  --surface:#FFFFFF;
  --bordure:#E2E8F0;
  --texte:#15171C;
  --texte-doux:#5A6B82;
  --or:#DC1742;
  --or-fonce:#B01235;
  --vert:#1F9D6B;
  --ambre:#D98A0B;
  --rouge:#DC2626;
  --rayon:10px;
  --ombre:0 1px 2px rgba(15,23,36,.06),0 8px 24px rgba(15,23,36,.06);
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
}
[data-theme="sombre"]{
  --encre:#0B0C0F;
  --encre-2:#15171C;
  --fond:#0E0F13;
  --surface:#191B21;
  --bordure:#2A2E37;
  --texte:#E7EAF0;
  --texte-doux:#9AA6B8;
  --ombre:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.45);
}
[data-theme="sombre"] .p-vert{background:#0f2a20}
[data-theme="sombre"] .p-ambre{background:#2e2410}
[data-theme="sombre"] .p-rouge{background:#2e1414}
[data-theme="sombre"] .p-gris{background:#22252e}
[data-theme="sombre"] .p-bleu{background:#16233f}
[data-theme="sombre"] tr.cliquable:hover td{background:#20242d}
[data-theme="sombre"] td{border-bottom-color:#22252e}
[data-theme="sombre"] input,[data-theme="sombre"] select,[data-theme="sombre"] textarea{background:#0E0F13;color:var(--texte)}
[data-theme="sombre"] pre{background:#0E0F13 !important}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:var(--sans);color:var(--texte);background:var(--fond);font-size:15px;line-height:1.5}
a{color:inherit}
button{font-family:inherit}

/* ---------- Logo ---------- */
.logo-img{display:block;object-fit:contain;height:auto;max-width:100%}
.rail .logo-img{height:64px;width:64px;max-width:64px;margin:2px auto 12px;display:block;
  object-fit:cover;object-position:center;border-radius:20px;box-shadow:0 6px 18px rgba(0,0,0,.35);cursor:pointer}
.login-card .logo-img{height:104px;width:104px;max-width:104px;margin:0 auto 24px;
  object-fit:cover;border-radius:24px;box-shadow:0 8px 24px rgba(0,0,0,.18)}
.portail-tete .logo-img{border-radius:9px}

/* ---------- Etiquettes facon patch ---------- */
.label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--texte-doux);font-weight:700}

/* ---------- Connexion ---------- */
.login-wrap{display:flex;min-height:100vh;align-items:center;justify-content:center;
  background:radial-gradient(120% 80% at 50% -10%,#1b2942 0%,var(--encre) 60%)}
.login-card{background:var(--surface);width:360px;max-width:92vw;border-radius:14px;
  padding:34px 30px;box-shadow:0 24px 60px rgba(0,0,0,.35)}
.brand{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.brand .v{font-weight:800;letter-spacing:.04em;font-size:26px}
.brand .or{color:var(--or-fonce)}
.brand-sub{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--texte-doux);margin-bottom:26px}

/* ---------- Cadre application ---------- */
.shell{display:grid;grid-template-columns:230px 1fr;min-height:100vh}
.rail{background:var(--sidebar,var(--encre));color:var(--sidebar-texte,#cdd6e4);padding:16px 14px;
  position:sticky;top:0;height:100vh;display:flex;flex-direction:column;overflow:hidden}
.rail .brand{margin:6px 8px 22px}
.rail .brand .v{color:#fff;font-size:20px}
.rail .brand-sub{margin:0 8px 0}
/* Le menu defile a l'interieur du rail : le fond ne s'arrete plus en cours de route. */
.rail nav{display:flex;flex-direction:column;gap:1px;margin-top:4px;
  flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.22) transparent}
.rail nav::-webkit-scrollbar{width:6px}
.rail nav::-webkit-scrollbar-track{background:transparent}
.rail nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18);border-radius:3px}
.rail nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}
.rail nav button{display:flex;align-items:center;gap:11px;background:none;border:0;color:var(--sidebar-texte-doux,#aeb9cc);
  padding:8px 12px;border-radius:8px;cursor:pointer;font-size:14px;text-align:left;width:100%;flex:0 0 auto}
.rail nav button .ic{width:18px;text-align:center;opacity:.8}
.rail nav button:hover{background:rgba(255,255,255,.08);color:var(--sidebar-texte,#fff)}
.rail nav button.actif{background:rgba(255,255,255,.12);color:var(--sidebar-texte,#fff);box-shadow:inset 3px 0 0 var(--or)}
.rail .pied{flex:0 0 auto;margin-top:8px;font-size:12px;color:var(--sidebar-texte-doux,#7e8aa0);
  padding:10px 12px 2px;border-top:1px solid rgba(255,255,255,.12)}
.rail .pied b{color:#cdd6e4;display:block;font-size:13px}
.rail .deco{background:none;border:0;color:#7e8aa0;cursor:pointer;padding:0;margin-top:8px;font-size:12px}
.rail .deco:hover{color:var(--or)}

.main{padding:0 0 60px;max-width:1180px}
#vue{padding:8px 30px 0}
.topbar-globale{position:sticky;top:0;z-index:30;display:flex;justify-content:flex-end;
  padding:14px 30px;background:var(--fond);border-bottom:1px solid var(--bordure)}
.dispo-trigger{display:inline-flex;align-items:center;gap:8px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:999px;padding:9px 18px;font-size:13px;font-weight:600;
  color:var(--texte-doux);cursor:pointer;transition:box-shadow .15s,border-color .15s}
.dispo-trigger:hover{box-shadow:var(--ombre);border-color:var(--or);color:var(--texte)}
.dispo-loupe{color:var(--or);font-size:15px}

/* Panneau lateral coulissant */
.panneau-lateral-fond{position:fixed;inset:0;background:rgba(15,23,36,.35);opacity:0;visibility:hidden;
  transition:opacity .2s;z-index:90}
.panneau-lateral-fond.ouvert{opacity:1;visibility:visible}
.panneau-lateral{position:fixed;top:0;right:0;height:100vh;width:440px;max-width:92vw;background:var(--surface);
  box-shadow:-8px 0 32px rgba(15,23,36,.18);transform:translateX(100%);transition:transform .25s ease;
  z-index:100;display:flex;flex-direction:column}
.panneau-lateral.ouvert{transform:translateX(0)}
.pl-tete{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--bordure)}
.pl-tete h3{margin:0;font-size:16px}
.pl-fermer{background:none;border:0;font-size:26px;line-height:1;color:var(--texte-doux);cursor:pointer}
.pl-fermer:hover{color:var(--texte)}
.pl-corps{padding:18px 22px;overflow-y:auto;flex:1}

.dispo-rond{display:inline-block;width:11px;height:11px;border-radius:50%;vertical-align:middle;margin-right:7px}
.dispo-rond.vert{background:var(--vert)}
.dispo-rond.ambre{background:var(--ambre)}
.dispo-rond.rouge{background:var(--rouge)}
.dispo-carte{border:1px solid var(--bordure);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--surface)}
.dispo-carte:hover{box-shadow:var(--ombre)}
.dispo-carte-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.dispo-ligne{font-size:14px;margin-bottom:4px}
.dispo-conflits{margin-top:10px;padding-top:10px;border-top:1px solid var(--bordure)}
.dispo-conflit{display:inline-block;margin:3px 4px 0 0;background:rgba(220,23,66,.08);color:var(--or);
  border:0;border-radius:8px;padding:4px 9px;font-size:12px;cursor:pointer;text-align:left}
.dispo-conflit:hover{background:rgba(220,23,66,.16)}
.dispo-alt{margin-top:10px}
.prep-tag-vert{display:inline-block;background:rgba(31,157,107,.12);color:var(--vert);
  font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600;margin:2px 3px 0 0}

/* Tables : zebra leger + survol */
tbody tr:nth-child(even) td{background:rgba(120,140,170,.035)}
tr.cliquable:hover td,table tbody tr:hover td{background:rgba(220,23,66,.04)}
[data-theme="sombre"] tbody tr:nth-child(even) td{background:rgba(255,255,255,.02)}

/* Cartes : ombre au survol */
.carte{transition:box-shadow .15s,transform .08s}
.carte.lien:hover,.carte[role="button"]:hover{box-shadow:0 4px 18px rgba(15,23,36,.1);transform:translateY(-1px);cursor:pointer}

@media (max-width:900px){
  #vue{padding:8px 16px 0}
  .topbar-globale{padding:12px 16px}
}
.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}
.topbar h1{font-size:22px;margin:0;letter-spacing:-.01em}

/* ---------- Cartes / grilles ---------- */
.cartes{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:24px}
.carte{background:var(--surface);border:1px solid var(--bordure);border-radius:var(--rayon);padding:16px 18px;box-shadow:var(--ombre)}
.carte .val{font-size:28px;font-weight:800;letter-spacing:-.02em;margin-top:6px;font-variant-numeric:tabular-nums}
.carte.accent{border-top:3px solid var(--or)}

.panneau{background:var(--surface);border:1px solid var(--bordure);border-radius:var(--rayon);box-shadow:var(--ombre);margin-bottom:20px}
.panneau .tete{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--bordure)}
.panneau .tete h2{font-size:15px;margin:0}
.panneau .corps{padding:6px 18px 14px}

/* ---------- Tableaux ---------- */
table{width:100%;border-collapse:collapse;font-size:14px}
th{ text-align:left;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--texte-doux);
  padding:11px 10px;border-bottom:1px solid var(--bordure);font-weight:700}
td{padding:11px 10px;border-bottom:1px solid #f0f3f8;vertical-align:middle}
tr.cliquable{cursor:pointer}
tr.cliquable:hover td{background:#f7f9fc}
.num{text-align:right;font-variant-numeric:tabular-nums}

/* ---------- Pastilles de statut ---------- */
.pastille{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  padding:3px 9px;border-radius:999px;white-space:nowrap}
.pastille::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.p-vert{color:var(--vert);background:#e7f6ef}
.p-ambre{color:var(--ambre);background:#fbf0dd}
.p-rouge{color:var(--rouge);background:#fce9e9}
.p-gris{color:var(--texte-doux);background:#eef1f6}
.p-bleu{color:#1d4ed8;background:#e6edfd}

/* ---------- Formulaires ---------- */
label.champ{display:block;margin-bottom:12px}
.champ-inline{display:flex;align-items:center;gap:8px;margin:4px 0 12px;font-size:14px;cursor:pointer}
.champ-inline input{margin:0}
/* Formulaires de creation rapide d'article (interne, fournisseur, prestation,
   transport) : plus d'air que le reste de l'appli, juges trop serres. */
.form-aere label.champ{margin-bottom:20px}
.form-aere .grille2{gap:8px 20px}
.form-aere .todo-detail-grille{gap:16px}
.form-aere input,.form-aere select,.form-aere textarea{padding:10px 12px}
label.champ span{display:block;font-size:12px;color:var(--texte-doux);margin-bottom:4px;font-weight:600}
input,select,textarea{width:100%;padding:9px 11px;border:1px solid var(--bordure);border-radius:8px;
  font-size:14px;font-family:inherit;background:#fff;color:var(--texte)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--or);outline-offset:0;border-color:var(--or)}
.grille2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.grille3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0 14px}

/* ---------- Boutons ---------- */
.btn{display:inline-flex;align-items:center;gap:7px;border:0;border-radius:10px;padding:9px 16px;
  font-size:14px;font-weight:600;cursor:pointer;background:var(--encre);color:#fff;
  transition:background .12s,box-shadow .12s,transform .05s}
.btn:hover{background:var(--encre-2);color:#fff}
.btn:active{transform:translateY(1px)}
.btn.or{background:var(--or);color:#fff}
.btn.or:hover{background:var(--or-fonce);color:#fff}
.btn.vert{background:var(--vert);color:#fff}
.btn.vert:hover{filter:brightness(.92);color:#fff}
.btn.danger{background:var(--rouge);color:#fff}
.btn.danger:hover{filter:brightness(.92);color:#fff}
.btn.fant{background:transparent;color:var(--texte);border:1px solid var(--bordure)}
.btn.fant:hover{background:var(--bordure);color:var(--texte);border-color:var(--or)}
.btn.pet{padding:6px 12px;font-size:13px}
.btn:disabled{background:#e8ecf2;color:#7a8699;cursor:not-allowed;opacity:1}
.btn.fant:disabled{background:transparent;color:#9aa6b8;border-color:var(--bordure)}
.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{
  outline:2px solid var(--or);outline-offset:1px}

.barre-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.recherche{flex:1;min-width:180px;max-width:340px}

/* ---------- Bandeau marge facon afficheur ---------- */
.afficheur{background:var(--encre);color:#fff;border-radius:var(--rayon);padding:16px 20px;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:14px}
.afficheur .bloc .label{color:#8fa0bc}
.afficheur .bloc .v{font-family:var(--mono);font-size:22px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.afficheur .v.or{color:var(--or)}
.afficheur .v.vert{color:#4ade80}
.afficheur .v.rouge{color:#f87171}

/* ---------- Encart d'information sur fond sombre ----------
   Fond et texte fixes (pas de var(--texte) qui suit le theme) : ce bloc est
   toujours sombre, dans les deux themes, donc son texte doit toujours etre
   clair. Corrige les encarts qui affichaient du gris fonce sur fond noir. */
.encart-sombre{background:var(--encre);border-radius:8px;padding:12px 14px;color:#E7EAF0}
.encart-sombre .label{color:#8fa0bc}
.encart-sombre b{color:#fff}

/* ---------- Divers ---------- */
.vide{text-align:center;color:var(--texte-doux);padding:30px 10px}
.erreur{color:var(--rouge);font-size:13px;margin-top:6px;min-height:18px}
.fil{color:var(--texte-doux);font-size:13px;margin-bottom:14px}
.fil a{color:var(--or-fonce);cursor:pointer;text-decoration:none}
.fil a:hover{text-decoration:underline}
.alerte{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:8px;background:#fbf0dd;
  color:#7a5300;font-size:13px;margin-bottom:8px}
.alerte.rouge{background:#fce9e9;color:#8c1d1d}

/* ---------- Toast ---------- */
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--encre);color:#fff;
  padding:12px 18px;border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.3);font-size:14px;z-index:50}
.toast.err{background:var(--rouge)}

/* ---------- Modale ---------- */
.voile{position:fixed;inset:0;background:rgba(15,23,36,.5);display:flex;align-items:flex-start;
  justify-content:center;padding:40px 16px;z-index:40;overflow:auto}
.modale{background:var(--surface);border-radius:14px;width:560px;max-width:96vw;box-shadow:0 30px 70px rgba(0,0,0,.4)}
.modale .tete{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--bordure)}
.modale .tete h2{margin:0;font-size:17px}
.modale .corps{padding:20px 22px}
.modale .pied{padding:14px 22px;border-top:1px solid var(--bordure);display:flex;justify-content:flex-end;gap:10px}
.croix{background:none;border:0;font-size:22px;cursor:pointer;color:var(--texte-doux);line-height:1}

/* ---------- Agenda ---------- */
.ag-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:10px}
.ag-nav{display:flex;align-items:center;gap:8px}
.ag-titre{font-size:18px;font-weight:600;text-transform:capitalize;min-width:160px;text-align:center}
.ag-head{display:grid;grid-template-columns:repeat(7,1fr);gap:0;border-top:1px solid var(--bordure);border-left:1px solid var(--bordure);background:var(--fond)}
.ag-head>div{padding:8px 10px;font-size:12px;font-weight:600;color:var(--texte-doux);text-transform:uppercase;border-right:1px solid var(--bordure);border-bottom:1px solid var(--bordure)}
.ag-grid{border-left:1px solid var(--bordure)}
.ag-week{position:relative;display:grid}
.ag-row{display:grid;grid-template-columns:repeat(7,1fr);min-height:100px}
.ag-cell{border-right:1px solid var(--bordure);border-bottom:1px solid var(--bordure);padding:4px 6px;background:var(--surface);position:relative}
.ag-cell.hors{background:var(--fond);color:var(--texte-doux)}
.ag-cell.today{background:rgba(220,23,66,.06)}
.ag-cell.today .ag-num{color:var(--or);font-weight:700}
.ag-num{font-size:12px;color:var(--texte-doux);font-weight:600}
.ag-bars{position:absolute;left:0;right:0;top:0;pointer-events:none}
.ag-bar{position:absolute;height:20px;line-height:20px;padding:0 8px;font-size:12px;font-weight:500;
  color:#15171C;border-radius:4px;cursor:pointer;border:0;text-align:left;overflow:hidden;
  white-space:nowrap;text-overflow:ellipsis;pointer-events:auto;box-shadow:0 1px 0 rgba(0,0,0,.05)}
.ag-bar:hover{filter:brightness(1.05);transform:translateY(-1px);transition:transform .1s}

[data-theme="sombre"] .ag-cell{background:var(--surface)}
[data-theme="sombre"] .ag-cell.hors{background:#0E0F13;color:#5a6678}
[data-theme="sombre"] .ag-cell.today{background:rgba(220,23,66,.12)}
[data-theme="sombre"] .ag-bar{color:#0B0C0F}

/* ---------- Cartes fichier (style Drive) ---------- */
.docs-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.docs-toolbar .recherche{flex:1;min-width:200px}
.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}
.doc-card{position:relative;border:1px solid var(--bordure);border-radius:10px;background:var(--surface);
  overflow:hidden;cursor:pointer;transition:box-shadow .15s,transform .1s}
.doc-card:hover{box-shadow:0 4px 16px rgba(0,0,0,.08);transform:translateY(-1px)}
.doc-card.drag-over{outline:2px dashed var(--or);outline-offset:-2px}
.doc-preview{height:120px;background:var(--fond) center/contain no-repeat;display:flex;
  align-items:center;justify-content:center;font-weight:700;font-size:18px;color:var(--texte-doux);
  border-bottom:1px solid var(--bordure)}
.doc-preview.pdf{color:var(--or)}
.doc-meta{padding:8px 10px;font-size:12px}
.doc-meta b{display:block;font-size:13px;font-weight:600;color:var(--texte);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}
.doc-meta .label{font-size:11px}
.doc-menu{position:absolute;top:6px;right:6px;background:rgba(255,255,255,.92);border:1px solid var(--bordure);
  border-radius:6px;width:26px;height:26px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;font-weight:700;color:var(--texte)}
[data-theme="sombre"] .doc-menu{background:rgba(20,21,27,.92)}

/* Modale large pour viewer fichiers */
.modale.viewer{width:90vw;max-width:1100px}
.modale.viewer .corps{padding:10px}

.doc-folder{margin-bottom:18px}
.doc-folder>.tete{display:flex;align-items:center;justify-content:space-between;
  padding:10px 0;border-bottom:1px solid var(--bordure);margin-bottom:10px}
.doc-folder>.tete b{font-size:14px}

/* ---------- Portail technicien (terrain) ---------- */
.portail{max-width:680px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}
.portail-tete{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 16px;border-bottom:1px solid var(--bordure);position:sticky;top:0;background:var(--surface);z-index:10}
.portail-tete .logo-img{height:34px;width:auto}
.portail-titre{font-weight:700;font-size:16px;flex:1;text-align:center}
.portail-corps{padding:16px;flex:1}
.po-projet{background:var(--surface);border:1px solid var(--bordure);border-radius:14px;
  padding:16px;margin-bottom:14px;box-shadow:var(--ombre)}
.po-projet-tete{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:16px}
.po-ligne{font-size:14px;color:var(--texte);margin:4px 0}
.po-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}

/* Accueil technicien enrichi */
.po-alerte{background:rgba(220,23,66,.08);border:1px solid var(--rouge);color:var(--rouge);
  border-radius:12px;padding:11px 14px;font-weight:600;font-size:14px;margin-bottom:14px}
.po-bloc-titre{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  color:var(--texte-doux);margin:18px 0 10px}
.po-planning{display:flex;flex-direction:column;gap:8px}
.po-pl-row{display:flex;align-items:center;gap:12px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:12px;padding:10px 14px;cursor:pointer}
.po-pl-row:active{background:var(--fond)}
.po-pl-date{font-weight:700;font-size:13px;min-width:46px;color:var(--rouge)}
.po-pl-main{flex:1;display:flex;flex-direction:column;line-height:1.3;font-size:14px}
.po-pl-main .label{font-size:12px}

/* Onglets fiche projet technicien */
.po-onglets{display:flex;gap:6px;overflow-x:auto;padding:10px 16px 0;
  -webkit-overflow-scrolling:touch;scrollbar-width:none}
.po-onglets::-webkit-scrollbar{display:none}
.po-tab{white-space:nowrap;border:1px solid var(--bordure);background:var(--surface);
  color:var(--texte-doux);border-radius:999px;padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer}
.po-tab.actif{background:var(--rouge);border-color:var(--rouge);color:#fff}
.po-card{background:var(--surface);border:1px solid var(--bordure);border-radius:12px;
  padding:14px;margin-bottom:10px}
.po-card .po-ligne .label{display:inline-block;min-width:120px}
.po-photo{width:96px;height:96px;border-radius:50%;object-fit:cover;border:3px solid var(--rouge);display:block;margin:0 auto}
.po-photo-vide{display:flex;align-items:center;justify-content:center;background:var(--rouge);
  color:#fff;font-size:34px;font-weight:700}
.po-stat{background:var(--fond);border:1px solid var(--bordure);border-radius:10px;padding:8px 16px;
  display:flex;flex-direction:column;align-items:center;min-width:84px}
.po-stat b{font-size:22px}
.po-stat .label{font-size:11px;text-transform:uppercase;letter-spacing:.03em}

/* Agenda mensuel technicien */
.ag-tete{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.ag-titre{font-size:18px;font-weight:700;min-width:130px;text-align:center}
.ag-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ag-grille{display:grid;grid-template-columns:repeat(7,minmax(94px,1fr));gap:1px;
  background:var(--bordure);border:1px solid var(--bordure);border-radius:10px;overflow:hidden}
.ag-jour{background:var(--fond);padding:8px 10px;font-size:12px;font-weight:700;color:var(--texte-doux)}
.ag-cell{background:var(--surface);min-height:90px;padding:6px;display:flex;flex-direction:column;gap:3px}
.ag-cell.hors{background:var(--fond);opacity:.55}
.ag-cell.auj{background:rgba(220,23,66,.06)}
.ag-cell.auj .ag-num{color:var(--rouge);font-weight:700}
.ag-num{font-size:12px;color:var(--texte-doux)}
.ag-chip{font-size:11px;line-height:1.3;padding:2px 6px;border-radius:6px;color:#fff;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--rouge)}
.ag-chip.c-vert{background:#1c8a4a}.ag-chip.c-ambre{background:#b5840f}
.ag-chip.c-rouge{background:var(--rouge)}.ag-chip.c-gris{background:#6b7280}.ag-chip.c-bleu{background:#2563a8}

/* Planning equipe jour par jour (bureau) */
.pl-bloc{border:1px solid var(--bordure);border-radius:12px;padding:12px;margin-bottom:14px;background:var(--surface)}
.pl-bloc-tete{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:10px}
.pl-bloc-tete h3{margin:0;font-size:15px}
.pl-table{width:100%;border-collapse:collapse;min-width:680px}
.pl-table th,.pl-table td{padding:5px 7px;font-size:13px;border-bottom:1px solid var(--bordure);text-align:left}
.pl-table thead th{font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--texte-doux)}
.pl-table input[type=time],.pl-table input:not([type=checkbox]):not([type=number]){border:1px solid var(--bordure);border-radius:6px;padding:4px 6px;background:var(--fond);color:var(--texte)}
.pl-table input[type=number]{border:1px solid var(--bordure);border-radius:6px;padding:4px 6px;background:var(--fond);color:var(--texte)}
.pl-table tfoot th{border-top:2px solid var(--bordure);border-bottom:none;font-size:13px}
.pl-cout{color:var(--rouge);font-weight:700}


/* Lien d'invitation a copier */
.lien-copie{display:flex;gap:8px}
.lien-copie input{flex:1;border:1px solid var(--bordure);border-radius:8px;padding:9px 12px;
  font-size:13px;background:var(--fond);color:var(--texte)}

/* Pieces jointes dans le chat */
.comm-joindre{cursor:pointer;font-size:20px;padding:6px 4px;color:var(--texte-doux);user-select:none}
.comm-joindre:hover{color:var(--or)}
.comm-pj{background:var(--surface);border:1px solid var(--bordure);border-radius:8px;
  padding:8px 12px;cursor:pointer;font-size:13px;color:var(--texte);text-align:left;margin-top:2px}
.comm-pj:hover{border-color:var(--or)}
.comm-pj-img img{max-width:200px;max-height:160px;border-radius:8px;display:block;margin-top:2px;cursor:pointer}

/* ---------- Communication (canaux + messages) ---------- */
.comm-layout{display:grid;grid-template-columns:200px 1fr;gap:14px;min-height:380px}
.comm-canaux{display:flex;flex-direction:column;gap:2px;border-right:1px solid var(--bordure);padding-right:10px}
.comm-canal{display:flex;align-items:center;justify-content:space-between;gap:8px;
  background:none;border:0;padding:9px 11px;border-radius:8px;cursor:pointer;
  font-size:14px;color:var(--texte-doux);text-align:left;width:100%}
.comm-canal:hover{background:var(--fond)}
.comm-canal.actif{background:rgba(220,23,66,.10);color:var(--or);font-weight:600}
.comm-badge{background:var(--or);color:#fff;font-size:11px;font-weight:700;
  min-width:18px;height:18px;border-radius:9px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px}
.comm-discussion{display:flex;flex-direction:column;min-height:380px}
.comm-fil-tete{font-size:15px;font-weight:700;padding:0 0 10px;border-bottom:1px solid var(--bordure);margin-bottom:10px}
.comm-messages{flex:1;overflow-y:auto;max-height:440px;display:flex;flex-direction:column;gap:10px;padding-right:6px}
.comm-msg{max-width:78%;align-self:flex-start;background:var(--fond);border-radius:12px;padding:8px 12px}
.comm-msg.moi{align-self:flex-end;background:rgba(220,23,66,.08)}
.comm-msg-tete{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--texte-doux);margin-bottom:2px}
.comm-msg-tete b{color:var(--texte);font-size:13px}
.comm-heure{font-size:11px}
.comm-act{background:none;border:0;cursor:pointer;opacity:0;font-size:11px;transition:opacity .1s}
.comm-msg:hover .comm-act{opacity:.6}
.comm-act:hover{opacity:1}
.comm-pin{font-size:11px}
.comm-msg-corps{font-size:14px;white-space:pre-wrap;word-break:break-word}
.comm-saisie{display:flex;gap:8px;align-items:flex-end;margin-top:10px;border-top:1px solid var(--bordure);padding-top:10px}
.comm-saisie textarea{flex:1;resize:none;border:1px solid var(--bordure);border-radius:10px;
  padding:9px 12px;font:inherit;font-size:14px;background:var(--surface);color:var(--texte)}
@media (max-width:760px){
  .comm-layout{grid-template-columns:1fr}
  .comm-canaux{flex-direction:row;overflow-x:auto;border-right:0;border-bottom:1px solid var(--bordure);padding:0 0 8px}
  .comm-canal{white-space:nowrap}
  .comm-msg{max-width:88%}
}

/* ---------- Tableau materiel : compact, sans debordement ---------- */
.tbl-materiel{table-layout:auto}
.tbl-materiel th,.tbl-materiel td{padding:10px 8px}
.tbl-materiel th.num,.tbl-materiel td.num{text-align:right;white-space:nowrap}
.tbl-materiel td:last-child,.tbl-materiel th:last-child{width:1%;white-space:nowrap;text-align:right}

/* Menu d'actions deroulant */
.menu-actions{position:relative;display:inline-block}
.menu-bouton{white-space:nowrap}
.menu-liste{position:absolute;right:0;top:calc(100% + 4px);z-index:40;min-width:160px;
  background:var(--surface);border:1px solid var(--bordure);border-radius:10px;
  box-shadow:0 8px 28px rgba(15,23,36,.16);padding:6px;display:none}
.menu-liste.ouvert{display:block}
.menu-liste button{display:block;width:100%;text-align:left;background:none;border:0;
  padding:8px 12px;border-radius:7px;cursor:pointer;font-size:13px;color:var(--texte)}
.menu-liste button:hover{background:var(--fond)}
.menu-liste button.danger{color:var(--rouge)}
.menu-liste button.danger:hover{background:rgba(220,23,66,.08)}

/* ---------- Lieu de prestation + trajet ---------- */
.lieu-grille{display:grid;grid-template-columns:1fr 280px;gap:20px}
.lieu-nom{font-size:15px;margin-bottom:4px}
.lieu-carte{width:100%;height:180px;border-radius:10px;overflow:hidden;border:1px solid var(--bordure);background:var(--fond)}
.carte-absente{display:flex;flex-direction:column;align-items:center;justify-content:center;
  height:100%;text-align:center;color:var(--texte-doux);font-size:13px;padding:14px;gap:6px}
.trajet-carte{display:flex;gap:18px;background:var(--fond);border-radius:10px;padding:14px}
.trajet-carte>div{flex:1}
.trajet-val{font-size:20px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
@media (max-width:760px){ .lieu-grille{grid-template-columns:1fr} }

/* ---------- Hebergement ---------- */
.heb-carte{border:1px solid var(--bordure);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--surface)}
.heb-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.heb-meta{display:flex;flex-wrap:wrap;gap:14px;font-size:13px;color:var(--texte-doux);margin-bottom:4px}
.heb-total{text-align:right;font-size:15px;padding-top:8px;border-top:1px solid var(--bordure)}
.heb-techs{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.heb-tech-c{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:400;
  background:var(--fond);padding:5px 10px;border-radius:8px;cursor:pointer}

/* ---------- Onglet Projets : barre, modes, cartes, dossiers ---------- */
.proj-barre{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0 14px}
.proj-barre .recherche{flex:1;min-width:220px}
.proj-barre .filtre{max-width:170px}
.proj-modes{margin-left:auto;display:flex;gap:2px;background:var(--fond);border-radius:9px;padding:3px}
.mode-btn{background:none;border:0;padding:6px 11px;border-radius:7px;cursor:pointer;font-size:16px;color:var(--texte-doux)}
.mode-btn.actif{background:var(--surface);color:var(--or);box-shadow:var(--ombre)}
.proj-groupe-barre{display:flex;gap:6px;align-items:center;margin:0 0 14px;flex-wrap:wrap}
.grp-btn{background:var(--fond);border:1px solid var(--bordure);border-radius:999px;padding:4px 12px;
  font-size:12px;cursor:pointer;color:var(--texte-doux);text-transform:capitalize}
.grp-btn.actif{background:var(--or);color:#fff;border-color:var(--or)}

.pin-btn{background:none;border:0;cursor:pointer;font-size:14px;filter:grayscale(1);opacity:.4;padding:2px}
.pin-btn.actif{filter:none;opacity:1}
.pin-btn:hover{opacity:.8}
tr.epingle td{background:rgba(220,23,66,.04)}

.proj-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.proj-carte{background:var(--surface);border:1px solid var(--bordure);border-radius:12px;padding:14px;
  cursor:pointer;transition:box-shadow .15s,transform .08s}
.proj-carte:hover{box-shadow:0 4px 18px rgba(15,23,36,.1);transform:translateY(-1px)}
.proj-carte.epingle{border-color:var(--or);border-width:1.5px}
.proj-carte-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.proj-carte-nom{font-size:15px;margin-bottom:2px}
.proj-carte-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--texte-doux);margin-top:10px}
.proj-dossier{margin-bottom:22px}
.proj-dossier-tete{display:flex;align-items:center;gap:8px;font-size:15px;margin-bottom:10px;
  padding-bottom:6px;border-bottom:1px solid var(--bordure)}

/* Onglets du panneau dispo */
.dispo-onglets{display:flex;gap:4px;background:var(--fond);border-radius:9px;padding:3px;margin-bottom:14px}
.dispo-tab{flex:1;background:none;border:0;padding:8px;border-radius:7px;cursor:pointer;font-weight:600;
  font-size:13px;color:var(--texte-doux)}
.dispo-tab.actif{background:var(--surface);color:var(--or);box-shadow:var(--ombre)}

@media (max-width:760px){
  .proj-barre .filtre{max-width:none;flex:1}
  .proj-modes{margin-left:0}
}

/* ---------- Etiquette QR ---------- */
.qr-etiquette{border:1px solid var(--bordure);border-radius:12px;padding:18px;max-width:260px;
  margin:0 auto;text-align:center;background:#fff}
.qr-etiquette .qr-logo{height:32px;object-fit:contain;margin-bottom:8px}
.qr-etiquette .qr-nom{font-weight:700;font-size:16px;color:#15171C}
.qr-etiquette .qr-ref{font-size:12px;color:#667085;margin-bottom:10px}
.qr-etiquette .qr-img{width:180px;height:180px}
.qr-etiquette .qr-empl{font-size:13px;margin-top:10px;font-weight:600;color:#15171C}
.qr-etiquette .qr-mention{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#98a2b3;margin-top:6px}

/* ---------- Scanner QR ---------- */
.scan-zone{position:relative;background:#000;border-radius:12px;overflow:hidden;
  aspect-ratio:4/3;max-height:320px;margin-bottom:14px;display:flex;align-items:center;justify-content:center}
#scan-video{width:100%;height:100%;object-fit:cover}
.scan-cadre{position:absolute;width:60%;aspect-ratio:1;border:3px solid rgba(255,255,255,.85);
  border-radius:14px;box-shadow:0 0 0 9999px rgba(0,0,0,.28)}
.scan-etat{position:absolute;bottom:10px;left:0;right:0;text-align:center;color:#fff;
  font-size:13px;padding:0 12px;text-shadow:0 1px 3px rgba(0,0,0,.7)}
.scan-manuel{display:flex;gap:8px;align-items:flex-end;margin-bottom:12px}
.scan-manuel .champ{flex:1;margin:0}
.scan-res{border-radius:10px;padding:12px 14px;margin-top:6px}
.scan-res.ok{background:rgba(31,157,107,.10);border-left:3px solid var(--vert)}
.scan-res.avert{background:rgba(220,160,30,.12);border-left:3px solid #d8a51e}
.scan-res.erreur{background:rgba(220,23,66,.10);border-left:3px solid var(--rouge)}
.scan-res-tete{display:flex;align-items:center;gap:8px;font-size:15px;margin-bottom:8px}
.scan-res-grille{display:grid;grid-template-columns:1fr 1fr;gap:8px 18px}
.scan-res-grille>div{display:flex;flex-direction:column;gap:2px}
.scan-compteur{margin-top:10px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:10px}
.scan-histo{margin-top:8px;border-top:1px solid var(--bordure);padding-top:8px}
.scan-histo-l{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;border-bottom:1px solid var(--bordure)}
.scan-histo-l.ko{color:var(--rouge)}
.diag-table td{padding:6px 10px;border-bottom:1px solid var(--bordure);font-size:13px}
.diag-table td:first-child{width:140px}

/* ---------- Sections retractables ---------- */
.sec-chevron{background:none;border:0;color:var(--texte-doux);font-size:14px;cursor:pointer;
  padding:0 8px 0 0;line-height:1}
.sec-chevron:hover{color:var(--or)}
.panneau .tete h2{display:inline-block}
.sec-resume{display:none;margin-left:12px;font-size:13px;color:var(--texte-doux);font-weight:400}
.panneau.plie .corps{display:none}
.panneau.plie .tete{border-bottom:0}
.panneau.plie .tete .barre-actions,.panneau.plie .tete>button:not(.sec-chevron){display:none}

/* ---------- Preparation et retour ---------- */
.prep-sous{margin-bottom:18px}
.prep-sous>h3{font-size:14px;margin:0 0 10px;padding-bottom:6px;border-bottom:1px solid var(--bordure)}
.prep-resume{display:flex;flex-wrap:wrap;gap:22px;margin-bottom:10px}
.prep-resume>div{display:flex;flex-direction:column;gap:3px}
.prep-resume .label{font-size:11px}
.prep-resume b{font-size:16px}
.prep-progress{height:8px;background:var(--fond);border-radius:5px;overflow:hidden}
.prep-progress span{display:block;height:100%;background:var(--vert);border-radius:5px;transition:width .3s}
.prep-dev-acc{background:rgba(34,160,90,.06)}
.prep-alerte{padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:12px}
.prep-alerte.avert{background:rgba(220,160,30,.12);border-left:3px solid #d8a51e}
.prep-alerte.danger{background:rgba(220,23,66,.10);border-left:3px solid var(--rouge)}
.prep-tag-rouge{display:inline-block;background:rgba(220,23,66,.12);color:var(--rouge);
  font-size:11px;padding:1px 7px;border-radius:10px;font-weight:600}
.prep-rouge{color:var(--rouge);font-weight:700}

/* ---------- Pilotage commercial ---------- */
.pil-cartes{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px}
.pil-carte{background:var(--surface);border:1px solid var(--bordure);border-radius:10px;padding:12px 14px}
.pil-carte .label{font-size:11px;margin-bottom:6px}
.pil-val{font-size:20px;font-weight:700;color:var(--texte);line-height:1.1}
.pil-val.vert{color:var(--vert)}
.pil-val.rouge{color:var(--rouge)}
.pil-val.or{color:var(--or)}

.pil-2col{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}

.pil-legende{display:flex;gap:18px;justify-content:center;margin-top:8px;font-size:12px;color:var(--texte-doux)}
.pil-legende i{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:middle;margin-right:5px}

.pil-bar-mini{background:var(--fond);border-radius:4px;height:8px;overflow:hidden}
.pil-bar-mini span{display:block;height:100%;background:var(--or);border-radius:4px}

.pil-repart-ligne{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.pil-repart-lib{width:90px;font-size:13px;color:var(--texte-doux)}
.pil-repart-barre{flex:1;background:var(--fond);border-radius:5px;height:18px;overflow:hidden}
.pil-repart-barre span{display:block;height:100%;border-radius:5px;transition:width .3s}
.pil-repart-val{width:70px;text-align:right;font-size:13px;font-weight:600}

.btn.fant.pet.actif{background:var(--or);color:#fff;border-color:var(--or)}

.ca-controles{display:flex;flex-wrap:wrap;gap:14px;align-items:center}
.ca-groupe{display:flex;gap:4px;background:var(--fond);border-radius:8px;padding:3px}
.ca-groupe .btn{border:0}
.ca-date{padding:8px 10px;border:1px solid var(--bordure);border-radius:8px;background:var(--surface);color:var(--texte);font-family:inherit;font-size:13px}
.ca-totaux{display:flex;flex-wrap:wrap;gap:20px}
.ca-totaux .bloc{display:flex;flex-direction:column;gap:2px}
.ca-totaux .bloc .label{font-size:11px;color:var(--texte-doux);text-transform:uppercase;letter-spacing:.03em}
.ca-totaux .bloc .v{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.ca-totaux .bloc .ecart{font-size:12px;font-weight:600}
.ca-totaux .bloc .ecart.pos{color:var(--vert)}
.ca-totaux .bloc .ecart.neg{color:var(--rouge)}

@media (max-width:1100px){
  .pil-cartes{grid-template-columns:repeat(3,1fr)}
  .pil-2col{grid-template-columns:1fr}
}

/* ---------- Editeur de devis ---------- */
.devis-layout{display:grid;grid-template-columns:1fr 300px;gap:20px;align-items:start}
.devis-main{min-width:0}
.devis-side{position:sticky;top:16px}

.devis-addbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.btn-add{border:1px solid var(--bordure);background:var(--surface);color:var(--or);
  border-radius:8px;padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:all .12s}
.btn-add:hover{background:var(--or);color:#fff;border-color:var(--or)}

.devis-lignes{display:flex;flex-direction:column;gap:8px}
.d-ligne{display:flex;align-items:flex-start;gap:8px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:10px;padding:10px 12px;position:relative}
.d-ligne.d-drop{outline:2px dashed var(--or);outline-offset:-2px}
.d-poignee{cursor:grab;color:var(--texte-doux);font-size:18px;line-height:1.4;user-select:none;padding-top:2px}
.d-poignee:active{cursor:grabbing}

.d-rubrique{background:var(--fond)}
.d-rubrique .l-des{font-weight:700;text-transform:uppercase;font-size:14px;border:0;background:transparent;flex:1;letter-spacing:.3px}
.d-rubrique .l-des:focus{outline:none;border-bottom:2px solid var(--or)}

.d-soustotal{background:var(--fond);font-weight:600}
.d-st-lib{flex:1;font-weight:600}
.d-st-val{font-weight:700;color:var(--or)}

.d-comment .l-des{flex:1;border:1px dashed var(--bordure);border-radius:6px;background:var(--fond);
  padding:8px;font-style:italic;resize:vertical;font-family:inherit}

.d-sep{padding:4px 12px}
.d-sep hr{flex:1;border:0;border-top:2px dotted var(--bordure);margin:8px 0}

.d-article{flex-direction:row}
.d-art-grid{flex:1;display:grid;grid-template-columns:1fr repeat(5,72px) 90px;gap:8px;align-items:end}
.d-art-des{min-width:0}
.d-art-des select,.d-art-des input{width:100%}
.d-art-des .label{display:block;margin-top:2px}
.d-art-f{display:flex;flex-direction:column;gap:2px}
.d-art-f span{font-size:10px;color:var(--texte-doux);text-transform:uppercase}
.d-art-f input{width:100%;text-align:right;padding:6px}
.d-art-tot{display:flex;flex-direction:column;gap:2px;text-align:right}
.d-art-tot .label{font-size:10px}
.d-art-tot b{font-size:14px;color:var(--or)}

/* Colonne laterale */
.d-side-card{background:var(--surface);border:1px solid var(--bordure);border-radius:12px;padding:16px}
.d-side-head{margin-bottom:12px}
.d-side-actions{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--bordure)}
.d-side-sec{margin-bottom:16px}
.d-side-sec h4{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--texte-doux);
  margin:0 0 8px;font-weight:700}
.d-kv{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:3px 0;align-items:baseline}
.d-kv span:first-child{color:var(--texte-doux)}
.d-kv b{font-weight:700}
.d-kv-fort{border-top:1px solid var(--bordure);margin-top:4px;padding-top:8px;font-size:15px}
.d-kv .rouge{color:var(--rouge)}
.d-kv .vert{color:var(--vert)}

.grille3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}

@media (max-width:1000px){
  .devis-layout{grid-template-columns:1fr}
  .devis-side{position:static}
  .d-art-grid{grid-template-columns:1fr 1fr 1fr;gap:6px}
  .grille3{grid-template-columns:1fr 1fr}
}

/* ---------- Responsive ---------- */
/* Mobile : le rail devient un tiroir plein ecran (memes libelles qu'au
   bureau, rien a deviner sur les icones seules), ouvert via le bouton
   hamburger de la barre mobile. Seuil volontairement bas (640px) : au-dela,
   meme une fenetre d'ordinateur modeste garde la sidebar classique plutot
   que de basculer sur un mode tiroir qui ne concerne que le telephone. */
.mobile-entete{display:none}
@media (max-width:640px){
  .shell{grid-template-columns:1fr;display:block}
  .mobile-entete{display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:60;
    background:var(--sidebar,var(--encre));color:#fff;padding:12px 16px;box-shadow:0 2px 10px rgba(0,0,0,.15)}
  .mobile-entete .burger{background:none;border:0;color:#fff;font-size:22px;line-height:1;
    padding:4px 6px;cursor:pointer}
  .mobile-entete .logo-img{height:34px;width:34px;max-width:34px;margin:0;border-radius:9px;cursor:pointer}
  .mobile-entete .titre-app{font-size:14px;font-weight:700;letter-spacing:.02em}
  .rail{position:fixed;top:0;left:0;height:100vh;width:280px;max-width:82vw;z-index:110;
    flex-direction:column;transform:translateX(-100%);transition:transform .22s ease;
    box-shadow:4px 0 24px rgba(0,0,0,.25)}
  .rail.tiroir-ouvert{transform:translateX(0)}
  .rail-fond{position:fixed;inset:0;background:rgba(15,23,36,.4);opacity:0;visibility:hidden;
    transition:opacity .2s;z-index:105}
  .rail-fond.ouvert{opacity:1;visibility:visible}
  /* La barre de disponibilite n'a plus besoin d'etre collante : une seule
     barre sticky (l'entete mobile) suffit et evite le chevauchement. */
  .topbar-globale{position:static;top:auto;z-index:1}
  .main{padding:18px 16px 50px}
  .grille2,.grille3{grid-template-columns:1fr}
  /* Tableaux : plutot que de reduire chaque colonne au cas par cas (risque
     d'en oublier certains) ou de forcer display:block sur les tableaux
     (casserait l'alignement des colonnes qui utilisent colspan), on rend
     le conteneur de contenu defilant horizontalement. Le tableau garde sa
     mise en page normale, rien ne se coupe ni ne se chevauche. */
  #vue{overflow-x:auto}
}

/* ===== Agenda : vues multiples (lot Planning) ===== */
.ag-vues{display:inline-flex;background:var(--fond);border:1px solid var(--bordure);border-radius:9px;padding:3px;gap:2px;flex-wrap:wrap}
.ag-vue-btn{border:0;background:transparent;color:var(--texte-doux);font-weight:600;font-size:13px;
  padding:6px 12px;border-radius:7px;cursor:pointer;font-family:inherit}
.ag-vue-btn:hover{color:var(--texte)}
.ag-vue-btn.actif{background:var(--surface);color:var(--texte);box-shadow:0 1px 2px rgba(0,0,0,.08)}
.ag-bar.conflit{outline:2px solid var(--rouge);outline-offset:-2px}
.ag-flag{display:inline-block;background:var(--rouge);color:#fff;font-weight:700;border-radius:3px;
  padding:0 4px;margin-right:4px;font-size:11px;line-height:16px}
.ag-cell.sem{min-height:120px}
/* Liste / jour / materiel */
.ag-list{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.ag-item{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:var(--surface);
  border:1px solid var(--bordure);border-radius:10px;padding:12px 14px;cursor:pointer;font-family:inherit;color:var(--texte)}
.ag-item:hover{border-color:var(--texte-doux)}
.ag-item.conflit{border-left:4px solid var(--rouge)}
.ag-item-main{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}
.ag-item-main b{font-size:15px}
.ag-item-main .label{text-transform:none;letter-spacing:0;font-weight:500;font-size:13px;color:var(--texte-doux)}
.ag-tags{display:flex;align-items:center;gap:6px;flex-shrink:0}
.ag-pt{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}
.ag-pt.conflit{background:transparent;outline:2px solid var(--rouge);outline-offset:-2px}
/* Vue equipe : timeline ressources */
.ag-res-head{display:flex;border:1px solid var(--bordure);border-bottom:0;background:var(--fond)}
.ag-res-head .ag-res-nom{padding:8px 10px}
.ag-res-days{display:grid;grid-template-columns:repeat(7,1fr);flex:1;position:relative}
.ag-res-head .ag-res-days>div{padding:8px 6px;font-size:12px;font-weight:600;color:var(--texte-doux);
  text-transform:uppercase;border-left:1px solid var(--bordure);text-align:center}
.ag-res{border:1px solid var(--bordure);border-top:0}
.ag-res-row{display:flex;border-top:1px solid var(--bordure);align-items:stretch}
.ag-res-nom{width:170px;flex-shrink:0;padding:10px;font-weight:600;font-size:13px;
  border-right:1px solid var(--bordure);display:flex;align-items:center}
.ag-res-row .ag-res-days{display:block;position:relative;padding:6px 0}
.ag-res-row .ag-bar{height:20px;line-height:20px}
.ag-res-head .ag-res-days>div.ag-d-lun{border-left:2px solid var(--texte-doux)}
.ag-res-head .ag-res-days>div{font-size:11px;padding:6px 2px}

/* ==================== To-Do (Trello-like) ==================== */
.topbar-actions{display:flex;gap:8px}
.todo-onglets{display:flex;gap:4px;overflow-x:auto;padding:0 0 14px}
.todo-tab{background:none;border:0;padding:9px 14px;border-radius:8px;cursor:pointer;
  font-weight:600;font-size:13px;color:var(--texte-doux);white-space:nowrap}
.todo-tab.actif{background:var(--surface);color:var(--or);box-shadow:var(--ombre)}
.todo-boardbar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.todo-boardchip{display:inline-flex;align-items:center;gap:6px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:999px;padding:7px 14px;cursor:pointer;
  font-weight:600;font-size:13px;color:var(--texte-doux)}
.todo-boardchip.actif{border-color:var(--or);color:var(--texte);box-shadow:var(--ombre)}
.todo-count{background:var(--or);color:#fff;border-radius:999px;font-size:11px;padding:1px 7px;font-weight:700}
.todo-board-tete{display:flex;gap:8px;margin-bottom:10px}
.todo-board{display:flex;gap:14px;overflow-x:auto;padding-bottom:12px;align-items:flex-start}
.todo-col{flex:0 0 268px;background:var(--fond);border-radius:12px;padding:10px;
  border:1px solid var(--bordure)}
.todo-col-tete{display:flex;align-items:center;justify-content:space-between;font-weight:700;
  font-size:13px;padding:2px 6px 10px;border-bottom:2px solid var(--cc,#94a3b8);margin-bottom:10px}
.todo-col-nb{background:var(--surface);border-radius:999px;padding:1px 8px;font-size:11px;color:var(--texte-doux)}
.todo-col-cartes{display:flex;flex-direction:column;gap:8px;min-height:8px}
.todo-carte{background:var(--surface);border:1px solid var(--bordure);border-radius:10px;
  padding:10px;cursor:pointer;transition:box-shadow .12s,transform .12s}
.todo-carte:hover{box-shadow:var(--ombre);transform:translateY(-1px)}
.todo-carte-haut{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.todo-prio{font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  color:#fff;background:var(--pc,#3b82f6);border-radius:6px;padding:2px 8px}
.todo-moves button{background:none;border:0;cursor:pointer;color:var(--texte-doux);font-size:14px;padding:0 3px}
.todo-moves button:hover{color:var(--or)}
.todo-carte-titre{font-weight:600;font-size:14px;line-height:1.35}
.todo-carte-badges{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.todo-tag{font-size:11px;background:var(--fond);border:1px solid var(--bordure);border-radius:6px;
  padding:2px 7px;color:var(--texte-doux);font-weight:600}
.todo-tag.retard{background:#fee2e2;color:#b91c1c;border-color:#fca5a5}
.todo-carte-pers{display:flex;gap:4px;margin-top:8px}
.todo-ava{width:24px;height:24px;border-radius:50%;background:var(--or);color:#fff;font-size:10px;
  font-weight:700;display:inline-flex;align-items:center;justify-content:center}
.todo-add-carte{width:100%;margin-top:10px;background:none;border:1px dashed var(--bordure);
  border-radius:8px;padding:8px;cursor:pointer;color:var(--texte-doux);font-weight:600;font-size:13px}
.todo-add-carte:hover{border-color:var(--or);color:var(--or)}
/* Detail carte */
.todo-detail{display:flex;flex-direction:column;gap:9px;width:100%}
.todo-detail>.label{margin-top:4px}
.todo-input-titre{font-size:16px;font-weight:700;padding:9px 12px;width:100%;box-sizing:border-box}
.todo-detail-grille{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.todo-detail-grille label{display:flex;flex-direction:column;gap:4px;min-width:0}
.todo-detail-grille select,.todo-detail-grille input{width:100%;box-sizing:border-box}
.todo-liens{display:flex;flex-wrap:wrap;gap:6px}
.todo-detail textarea,.todo-detail select,.todo-detail>input{width:100%;box-sizing:border-box}
.todo-assignes,.todo-coms{display:flex;flex-wrap:wrap;gap:6px}
.todo-coms{flex-direction:column}
.todo-chip{display:inline-flex;align-items:center;gap:6px;background:var(--fond);border-radius:999px;
  padding:4px 10px;font-size:13px;font-weight:600}
.todo-chip button{background:none;border:0;cursor:pointer;color:var(--texte-doux);font-size:15px}
.todo-row{display:flex;gap:6px}
.todo-row input,.todo-row select{flex:1}
.todo-check{display:flex;align-items:center;gap:8px;padding:3px 0}
.todo-x{background:none;border:0;cursor:pointer;color:var(--texte-doux);margin-left:auto;font-size:15px}
.todo-com{background:var(--fond);border-radius:8px;padding:7px 10px;font-size:13px}
.todo-act{font-size:12px;color:var(--texte-doux);padding:2px 0}
.todo-activite{margin-top:6px}
/* Listes de taches */
.todo-liste{display:flex;flex-direction:column;gap:8px}
.todo-ligne{display:flex;align-items:center;gap:12px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:10px;padding:10px 14px;cursor:pointer}
.todo-ligne:hover{box-shadow:var(--ombre)}
.todo-ligne.retard{border-left:3px solid var(--rouge)}
.todo-ligne-corps{flex:1}
.todo-ligne-titre{font-weight:600}
.todo-ligne-meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--texte-doux);margin-top:3px}
.todo-alerte{display:flex;align-items:center;justify-content:space-between;gap:12px}

/* ==================== Disponibilite equipes ==================== */
.dispo-filtres{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:16px}
.dispo-filtres label{display:flex;flex-direction:column;gap:4px}
.dispo-filtres input,.dispo-filtres select{min-width:120px}
.dispo-resume{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.dispo-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.dispo-carte{background:var(--surface);border:1px solid var(--bordure);border-radius:12px;padding:14px}
.dispo-carte-tete{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.dispo-carte-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:6px}
.dispo-conflit{font-size:12px;color:var(--texte-doux);padding:3px 0}

/* Encart disponibilite dans l'affectation projet */
.dispo-inline{border-radius:8px;padding:8px 12px;margin-top:8px;font-size:13px}
.dispo-inline.ok{background:#dcfce7;color:#166534}
.dispo-inline.partiel{background:#fef3c7;color:#92400e}
.dispo-inline.conflit{background:#fee2e2;color:#991b1b}

@media (max-width:640px){
  .todo-detail-grille{grid-template-columns:1fr 1fr}
  .todo-col{flex:0 0 82vw}
}

/* ==================== Raccourcis tableau de bord ==================== */
.db-raccourcis{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:18px}
.db-rac{display:inline-flex;align-items:center;gap:8px;background:var(--surface);
  border:1px solid var(--bordure);border-radius:10px;padding:10px 16px;cursor:pointer;
  font-weight:600;font-size:14px;color:var(--texte);transition:box-shadow .12s,border-color .12s}
.db-rac:hover{box-shadow:var(--ombre);border-color:var(--or)}
.db-rac-nb{min-width:24px;text-align:center;background:var(--fond);border-radius:999px;
  padding:2px 9px;font-size:13px;font-weight:800;color:var(--texte-doux)}
.db-rac-nb.chaud{background:var(--or);color:#fff}
.db-rac-ic{color:var(--or);font-size:15px}

/* Pieces jointes cartes To-Do */
.todo-pj{display:flex;align-items:center;gap:6px;background:var(--fond);border-radius:8px;
  padding:5px 10px;margin-bottom:5px}
.todo-pj-nom{background:none;border:0;cursor:pointer;color:var(--texte);font-weight:600;
  font-size:13px;text-align:left;flex:1}
.todo-pj-nom:hover{color:var(--or)}

/* Modale carte : plus large, corps scrollable, liens en 2x2 */
.modale .corps{max-height:calc(100vh - 220px);overflow:auto}
.modale.large{width:680px}
.todo-liens-grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.todo-liens-grille label{display:flex;flex-direction:column;gap:4px;min-width:0}
.todo-liens-grille select{width:100%;box-sizing:border-box}
@media (max-width:560px){
  .modale.large{width:100%}
  .todo-liens-grille{grid-template-columns:1fr}
}

/* ==================== v3.23 : pilotage cliquable, agenda taches, colonnes ==================== */
.pil-carte.cliquable{cursor:pointer;transition:box-shadow .12s,border-color .12s;position:relative}
.pil-carte.cliquable:hover{box-shadow:var(--ombre);border-color:var(--or)}
.pil-voir{font-size:11px;color:var(--or);font-weight:700;margin-top:4px;opacity:0;transition:opacity .12s}
.pil-carte.cliquable:hover .pil-voir{opacity:1}
.qual-moyennes{display:flex;flex-wrap:wrap;gap:6px}
/* Taches dans l'agenda */
.ag-taches{margin-top:16px;border-top:1px solid var(--bordure);padding-top:12px}
.ag-taches-titre{font-weight:700;font-size:14px;margin-bottom:8px}
.ag-tache-jour{margin-bottom:8px}
.ag-tache-date{font-size:12px;font-weight:700;color:var(--texte-doux);margin-bottom:4px}
.ag-tache{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--surface);
  border:1px solid var(--bordure);border-radius:8px;padding:8px 12px;cursor:pointer;margin-bottom:4px;font-size:13px}
.ag-tache:hover{box-shadow:var(--ombre);border-color:var(--or)}
.ag-tache-h{font-weight:700;color:var(--or);white-space:nowrap}
.ag-tache-t{flex:1;font-weight:600}
/* Gestion des colonnes To-Do */
.todo-colrow{display:flex;gap:6px;align-items:center;margin-bottom:6px}
.todo-colrow input[type=color]{width:42px;height:36px;padding:2px;border:1px solid var(--bordure);border-radius:8px}

/* ==================== Contacts+ (v3.25) ==================== */
.ct-filtres{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.ct-chip{background:var(--surface);border:1px solid var(--bordure);border-radius:999px;
  padding:7px 13px;cursor:pointer;font-weight:600;font-size:13px;color:var(--texte-doux)}
.ct-chip.actif{border-color:var(--or);color:var(--or)}
.ct-type{font-size:11px;font-weight:700;border:1px solid var(--tc,#94a3b8);color:var(--tc,#94a3b8);
  border-radius:6px;padding:2px 8px;white-space:nowrap}
.ct-layout{display:grid;grid-template-columns:1fr 340px;gap:14px;align-items:start}
.ct-liste table td{vertical-align:middle}
.ct-sel{background:var(--fond)}
.ct-panneau{position:sticky;top:14px;max-height:calc(100vh - 40px);overflow:auto}
.ct-ap-tete{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:16px}
.ct-lien{display:inline-block;color:var(--or);font-weight:700;font-size:13px;text-decoration:none;margin:4px 0}
.ct-dist{background:var(--fond);border-radius:8px;padding:7px 10px;font-size:13px;margin:6px 0}
.ct-sec{border-top:1px solid var(--bordure);margin-top:10px;padding-top:8px;font-size:13px}
.ct-sec h4{margin:0 0 5px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--texte-doux)}
.ct-mini{display:block;width:100%;text-align:left;background:var(--fond);border:0;border-radius:7px;
  padding:6px 9px;margin-bottom:4px;cursor:pointer;font-size:13px;font-weight:600}
.ct-mini:hover{background:var(--bordure)}
.ct-gres{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.ct-gres-item{text-align:left;background:var(--fond);border:1px solid var(--bordure);border-radius:9px;
  padding:9px 12px;cursor:pointer}
.ct-gres-item:hover{border-color:var(--or)}
@media (max-width:1000px){.ct-layout{grid-template-columns:1fr}.ct-panneau{position:static}}

/* ==================== Conges (v3.25) ==================== */
.cg-cal-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.cg-cal-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.cg-cal-grille{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cg-jsem{text-align:center;font-size:11px;font-weight:700;color:var(--texte-doux);padding:2px 0}
.cg-jour{aspect-ratio:1;border:1px solid var(--bordure);background:var(--surface);border-radius:8px;
  cursor:pointer;font-weight:600;font-size:13px}
.cg-jour:hover{border-color:var(--or)}
.cg-jour.sel{background:var(--or);border-color:var(--or);color:#fff}
.cg-liste{max-height:200px;overflow:auto}
.cg-ligne{display:flex;justify-content:space-between;gap:8px;padding:4px 0;font-size:13px;
  border-bottom:1px solid var(--bordure)}
.cg-solde{margin-top:8px;background:var(--fond);border-radius:9px;padding:8px 12px}
@media (max-width:640px){.cg-cal-wrap{grid-template-columns:1fr}}

/* ==================== Finance projet + planning terrain (v3.26) ==================== */
.fin-cartes{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:8px}
.fin-carte{background:var(--surface);border:1px solid var(--bordure);border-radius:10px;padding:10px 12px}
.fin-carte .label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--texte-doux)}
.fin-val{font-size:19px;font-weight:800;margin-top:2px}
.fin-carte.fin-ok{border-color:#16a34a}.fin-carte.fin-ok .fin-val{color:#16a34a}
.fin-carte.fin-ko{border-color:var(--or)}.fin-carte.fin-ko .fin-val{color:var(--or)}
.fin-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:10px}
.fin-h{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--texte-doux);margin:0 0 8px}
.fin-barre-l{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:13px}
.fin-barre-nom{flex:0 0 38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-barre-track{flex:1;background:var(--fond);border-radius:5px;height:14px;overflow:hidden}
.fin-barre-fill{display:block;height:100%;border-radius:5px}
.fin-barre-val{flex:0 0 auto;font-weight:700;font-variant-numeric:tabular-nums}
.fin-manuelles-liste{margin-top:10px;padding-top:8px;border-top:1px solid var(--bordure)}
@media (max-width:720px){.fin-cols{grid-template-columns:1fr}}
/* Planning terrain */
.pl-terrain select,.pl-terrain input[type=number]{padding:4px 6px}
.pl-recap{display:flex;flex-direction:column;gap:6px}
.pl-types{display:flex;flex-wrap:wrap;gap:6px}
.pl-frais{white-space:nowrap}

/* Menu "Plus d'actions" du devis (v3.26.2) */
.d-side-actions{display:flex;flex-direction:column;gap:6px}
.d-side-plus{position:relative;margin-top:6px}
.d-side-plus > button{width:100%}
.d-side-menu{margin-top:4px;background:var(--surface);border:1px solid var(--bordure);border-radius:9px;overflow:hidden;box-shadow:var(--ombre)}
.d-menu-item{display:block;width:100%;text-align:left;background:none;border:0;padding:9px 12px;cursor:pointer;font-size:14px;font-weight:600;color:var(--texte)}
.d-menu-item:hover{background:var(--fond)}

/* Colonnes de journees complementaires integrees au planning (v3.27.1) */
.pl-hors{background:#FFF7ED}
.pl-badge{display:inline-block;font-size:9px;font-weight:700;color:#b45309;
  background:#FEF3C7;border-radius:5px;padding:1px 5px}

/* Indice de defilement des onglets du portail technicien */
.po-onglets{-webkit-mask-image:linear-gradient(90deg,#000 92%,transparent);
  mask-image:linear-gradient(90deg,#000 92%,transparent)}

/* Selection d'articles + ordre des sections (v3.28) */
.art-liste{max-height:340px;overflow:auto;border:1px solid var(--bordure);border-radius:9px}
.art-liste table{margin:0}
.os-liste{display:flex;flex-direction:column;gap:4px}
.os-ligne{display:flex;justify-content:space-between;align-items:center;gap:8px;
  background:var(--fond);border-radius:8px;padding:7px 10px;font-weight:600;font-size:14px}

/* ---------- Parametres (v3.29) : recherche et sous-titres de categorie ---------- */
.param-recherche{margin:0 0 16px}
.param-recherche input{width:100%;max-width:420px;padding:10px 14px;border:1px solid var(--bordure);
  border-radius:var(--rayon);background:var(--surface);color:var(--texte);font-size:14px}
.param-recherche input:focus{outline:2px solid var(--or);outline-offset:1px;border-color:var(--or)}
.param-sous-titre{font-size:13px;margin:20px 0 2px;padding-top:14px;border-top:1px solid var(--bordure);
  color:var(--texte)}

/* ---------- Menu regroupe par familles (v3.30) ---------- */
.rail-famille{margin-bottom:6px;flex:0 0 auto}
.rail-famille-titre{font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--sidebar-texte-doux,#6b7688);font-weight:700;padding:4px 12px 3px;opacity:.7}

/* ---------- Modele d'edition des documents (vignettes facon MEG) ---------- */
.doc-themes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.doc-theme{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;
  background:var(--surface);border:1.5px solid var(--bordure);border-radius:var(--rayon);
  padding:10px;cursor:pointer;font-family:inherit;color:var(--texte);transition:border-color .12s}
.doc-theme:hover{border-color:var(--texte-doux)}
.doc-theme.actif{border-color:var(--or);box-shadow:0 0 0 2px rgba(220,23,66,.12)}
.doc-theme b{font-size:13px}
.doc-theme .label{letter-spacing:.02em;text-transform:none;font-weight:500;font-size:11px;line-height:1.35}
/* Vignettes : miniature de la mise en page, dessinee en CSS (aucune image a charger) */
.doc-theme-vignette{width:100%;height:64px;border:1px solid var(--bordure);border-radius:4px;
  background:#fff;position:relative;overflow:hidden;margin-bottom:2px}
.doc-theme-vignette::before,.doc-theme-vignette::after{content:"";position:absolute;left:8px;right:8px}
/* Classique : filet de couleur sous l'en-tete, tableau anthracite */
.doc-v-classique::before{top:18px;height:2px;background:var(--or)}
.doc-v-classique::after{top:30px;height:9px;background:#15171C}
/* Moderne : tableau en couleur d'accent */
.doc-v-moderne::before{top:18px;height:2px;background:var(--or)}
.doc-v-moderne::after{top:30px;height:9px;background:var(--or)}
/* Bandeau : bande pleine largeur en haut */
.doc-v-bandeau::before{top:0;left:0;right:0;height:10px;background:var(--or)}
.doc-v-bandeau::after{top:32px;height:9px;background:var(--or)}
/* Sobre : noir et blanc, filets fins */
.doc-v-sobre::before{top:22px;height:1px;background:#15171C}
.doc-v-sobre::after{top:32px;height:9px;background:#fff;border-top:1px solid #15171C;
  border-bottom:1px solid #15171C}
[data-theme="sombre"] .doc-theme-vignette{background:#fff}

/* ---------- Modeles de devis reutilisables (v3.30) ---------- */
.devis-modeles-bar{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.mdl-liste{display:flex;flex-direction:column;gap:8px;max-height:380px;overflow-y:auto}
.mdl-item{display:flex;flex-direction:column;gap:3px;text-align:left;background:var(--surface);
  border:1px solid var(--bordure);border-radius:var(--rayon);padding:10px 12px;cursor:pointer;
  font-family:inherit;color:var(--texte);transition:border-color .12s,background .12s}
.mdl-item:hover{border-color:var(--or);background:var(--fond)}
.mdl-item-tete{display:flex;align-items:center;gap:8px}
.mdl-item-tete b{font-size:14px}
.mdl-item-desc{font-size:12px;color:var(--texte-doux);line-height:1.4}
.mdl-item .label{text-transform:none;letter-spacing:.02em;font-weight:500}

/* ---------- Sous-location integree (v3.32) ---------- */
.art-onglets{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.art-onglet{background:var(--surface);border:1px solid var(--bordure);border-radius:999px;
  padding:6px 14px;cursor:pointer;font-family:inherit;font-size:13px;color:var(--texte-doux);
  transition:all .12s}
.art-onglet:hover{border-color:var(--texte-doux)}
.art-onglet.actif{background:var(--or);border-color:var(--or);color:#fff;font-weight:600}
/* Une ligne de devis sous-louee se distingue au premier coup d'oeil */
.d-ligne.d-sousloc{border-left:3px solid #E8A33D;background:rgba(232,163,61,.04)}
.d-ligne.d-sourcecat{border-left:3px solid #1d4ed8;background:rgba(29,78,216,.04)}
.sl-resume{display:flex;gap:22px;flex-wrap:wrap;margin-bottom:12px}
.sl-resume > div{display:flex;flex-direction:column;gap:2px}
.sl-auto{font-size:11px;color:var(--texte-doux)}
.lb-reco{font-weight:700;white-space:nowrap}
.lb-acheter{color:#1D9E75}
.lb-etudier{color:#E8A33D}
.lb-louer{color:var(--texte-doux)}
.lb-insuffisant{color:var(--texte-doux);opacity:.7}
.sl-barre{height:4px;background:var(--bordure);border-radius:2px;margin-top:4px;overflow:hidden}
.sl-barre span{display:block;height:100%;background:var(--or);border-radius:2px}

/* Regroupements repliables du pilotage : vue de surface, detail au clic */
.pil-h3{font-size:14px;margin:18px 0 8px}
.pil-groupes{display:flex;flex-direction:column;gap:2px}
.pil-gtete{display:grid;grid-template-columns:16px minmax(110px,1.1fr) minmax(60px,1fr) auto 90px 90px;
  align-items:center;gap:12px;width:100%;background:none;border:none;border-radius:8px;
  padding:9px 10px;cursor:pointer;font-family:inherit;font-size:14px;color:var(--texte);
  text-align:left;transition:background .12s}
.pil-gtete:hover{background:var(--surface)}
.pil-gtete.ouvert{background:var(--surface)}
.pil-gchev{color:var(--texte-doux);font-size:11px}
.pil-gnom{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pil-gbarre{height:5px;background:var(--bordure);border-radius:3px;overflow:hidden}
.pil-gbarre span{display:block;height:100%;background:var(--or);border-radius:3px}
.pil-gcout{text-align:right;font-variant-numeric:tabular-nums}
.pil-gmarge{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}
.pil-gcorps{padding:2px 10px 12px 38px}
.pil-gcorps table{font-size:13px}
@media (max-width:900px){
  .pil-gtete{grid-template-columns:16px 1fr auto;row-gap:4px}
  .pil-gbarre{display:none}
}

/* Onglets du parc + catalogue fournisseur groupe */
.onglet-cpt{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;
  background:var(--bordure);color:var(--texte-doux);font-size:11px;font-weight:700}
.art-onglet.actif .onglet-cpt{background:rgba(255,255,255,.25);color:#fff}
.af-groupe{margin-bottom:22px}
.af-gtete{font-size:14px;margin:0 0 8px;display:flex;align-items:center;gap:10px;
  padding-bottom:6px;border-bottom:1px solid var(--bordure)}
