:root{
  /* Couleurs de marque SMART TP (charte graphique) — les 4 couleurs du logo */
  --brand-yellow:#F2F013;
  --brand-orange:#EC5D2B;
  --brand-blue:#2F86A6;
  --brand-green:#34BE82;
  --brand-gradient:linear-gradient(120deg,var(--brand-yellow) 0%,var(--brand-orange) 38%,var(--brand-blue) 68%,var(--brand-green) 100%);

  /* Couleurs de repérage par département de la nav (puces, bordures de lien actif) —
     usage décoratif/wayfinding uniquement, à ne jamais confondre avec les couleurs de
     statut (--ok/--danger) qui restent universelles. */
  --dept-commercial:var(--brand-blue);
  --dept-rh:var(--brand-green);
  --dept-qse:var(--brand-yellow);
  --dept-chantier:var(--brand-orange);

  /* Couleur d'accent du SITE (back-office) : identité SMART TP fixe, non personnalisable
     par société. La couleur de la carte ouvrier imprimée est séparée (--card-accent,
     choisie par chaque société dans Société) — voir includes/card_render.php. */
  --accent:var(--brand-blue);
  --accent-soft:color-mix(in srgb, var(--accent) 16%, transparent);

  /* Thème sombre (par défaut). Mode clair : voir :root[data-theme="light"] plus bas. */
  --bg:#0d0f13;
  --panel:#171a21;
  --panel2:#1f232c;
  --line:#2b303b;
  --muted:#9aa4b2;
  --text:#e8ecf1;
  --ok:#39d98a;
  --danger:#ff6b6b;
}
:root[data-theme="light"]{
  --bg:#f6f8fa;
  --panel:#ffffff;
  --panel2:#eef1f4;
  --line:#dde3e8;
  --muted:#5b6672;
  --text:#1a1f27;
  --ok:#1f9d5c;
  --danger:#d7373f;
}
/* Thème "Système" (pas de choix explicite enregistré) : suit la préférence du système
   d'exploitation. Un choix explicite (data-theme="light"/"dark") prend toujours le dessus. */
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]):not([data-theme="light"]){
    --bg:#f6f8fa;
    --panel:#ffffff;
    --panel2:#eef1f4;
    --line:#dde3e8;
    --muted:#5b6672;
    --text:#1a1f27;
    --ok:#1f9d5c;
    --danger:#d7373f;
  }
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;max-width:100%}
/* overflow-x:hidden uniquement sur html (racine) : le mettre aussi sur body crée un second
   conteneur de défilement (effet de bord CSS : overflow-x non-visible force overflow-y à
   "auto" sur l'axe croisé), ce qui casse le position:sticky de la sidebar (.sidebar plus
   bas), qui se met alors à défiler avec la page au lieu de rester fixée à l'écran. */
html{overflow-x:hidden}
canvas{max-width:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.45}
a{color:var(--accent)}
.app-shell{display:flex;min-height:100vh;align-items:flex-start}
.sidebar{width:230px;flex:none;display:flex;flex-direction:column;background:var(--panel);border-right:1px solid var(--line);position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden;transition:width .18s ease}
.sidebar::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--accent)}
.sidebar-brand{display:flex;align-items:center;gap:11px;padding:20px 16px 16px}
.brand-logo-link{display:flex;line-height:0}
.brand-logo{height:30px;width:auto;flex:none}
.brand-logo-light{display:none}
:root[data-theme="light"] .brand-logo-dark{display:none}
:root[data-theme="light"] .brand-logo-light{display:block}
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]):not([data-theme="light"]) .brand-logo-dark{display:none}
  :root:not([data-theme="dark"]):not([data-theme="light"]) .brand-logo-light{display:block}
}
.sidebar-toggle{margin-left:auto;flex:none;width:26px;height:26px;border-radius:7px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;font-family:inherit}
.sidebar-toggle:hover{color:var(--text);border-color:var(--accent)}
.sidebar-nav{display:flex;flex-direction:column;gap:2px;padding:6px 12px;flex:1}
.navlink{display:flex;align-items:center;gap:11px;padding:10px 11px;border-radius:9px;color:var(--muted);font-weight:700;font-size:13.5px;text-decoration:none;border-left:3px solid transparent;white-space:nowrap;overflow:hidden}
.navlink .ic{font-size:15px;flex:none;width:18px;text-align:center}
.navlink:hover{background:var(--panel2);color:var(--text)}
.navlink.active{background:var(--accent-soft);color:var(--accent);border-left-color:var(--accent)}
.nav-group{display:flex;flex-direction:column}
.nav-group[data-section="commercial"]{--dept:var(--dept-commercial)}
.nav-group[data-section="rh"]{--dept:var(--dept-rh)}
.nav-group[data-section="qse"]{--dept:var(--dept-qse)}
.nav-group[data-section="chantier"]{--dept:var(--dept-chantier)}
/* Sections sans couleur de marque dédiée : réutilisent une des 4 couleurs, en alternance
   avec leurs voisines dans la nav (jamais la même couleur que la section juste au-dessus
   ou en-dessous) — garder ce principe et $bannerDeptVar (includes/layout_top.php) en phase
   à chaque nouvelle section. */
.nav-group[data-section="bibliotheque"]{--dept:var(--dept-commercial)}
.nav-group[data-section="contact"]{--dept:var(--dept-rh)}
.nav-group[data-section="comptabilite"]{--dept:var(--dept-chantier)}
.nav-group[data-section="planification"]{--dept:var(--dept-rh)}
.nav-group[data-section="achats"]{--dept:var(--dept-qse)}
.nav-group[data-section="location"]{--dept:var(--dept-qse)}   /* jamais la couleur de la section voisine : Gestion chantier (orange) au-dessus, Planification (vert) en dessous */
.nav-section-label{display:flex;align-items:center;gap:8px;width:100%;font-size:10.5px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:14px 11px 4px;opacity:.75;white-space:nowrap;background:none;border:none;cursor:pointer;font-family:inherit;text-align:left}
.nav-section-label:hover{opacity:1;color:var(--text)}
.nav-section-label .lbl-text{flex:1}
.dept-ic{display:flex;flex:none;color:var(--dept)}
.dept-ic svg,.tdb-ic svg,.sub-ic svg{width:16px;height:16px;display:block}
.tdb-ic{display:flex;flex:none;color:var(--accent)}
.sub-ic{display:flex;flex:none;color:var(--dept)}
.nav-group:first-child .nav-section-label{padding-top:4px}
.nav-caret{font-size:9px;flex:none;transition:transform .15s ease}
.nav-section-links{display:flex;flex-direction:column;gap:2px}
.nav-group:not(.open) .nav-section-links{display:none}
.nav-group:not(.open) .nav-caret{transform:rotate(-90deg)}
.nav-group .navlink.active{background:color-mix(in srgb, var(--dept) 14%, transparent);color:var(--text);border-left-color:var(--dept)}
.section-banner{display:flex;align-items:center;gap:12px;padding:16px 22px;background:var(--dept, var(--accent));color:#181b20}
.section-banner-icon{display:flex;flex:none;width:26px;height:26px}
.section-banner-icon svg{width:100%;height:100%;display:block}
.section-banner-title{margin:0;font-size:20px;font-weight:800;flex:none}
.section-banner-page{display:flex;align-items:center;gap:7px;padding:6px 14px;border-radius:999px;background:rgba(255,255,255,.35);font-size:13px;font-weight:700;margin-left:6px}
.section-banner a.section-banner-page{color:#181b20;text-decoration:none;transition:background .15s}
.section-banner a.section-banner-page:hover{background:rgba(255,255,255,.6)}
.section-banner-page-icon{display:flex;flex:none;width:16px;height:16px}
.section-banner-page-icon svg{width:100%;height:100%;display:block}
.section-banner-back{margin-left:4px;font-size:13px;font-weight:700;color:#181b20;text-decoration:none;padding:6px 12px;border-radius:999px;border:1px solid rgba(24,27,32,.35)}
.section-banner-back:hover{background:rgba(255,255,255,.35)}
.licences-card{margin-bottom:16px}
.licence-row{margin-top:14px}
.licence-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.licence-label{font-size:15px;font-weight:700}
.licence-label small{margin-left:6px;font-size:12.5px;font-weight:600;color:var(--muted)}
.licence-count{font-size:15px;font-weight:800}
.licence-bar{height:10px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);overflow:hidden}
.licence-bar span{display:block;height:100%;border-radius:999px;background:var(--ok)}
.licence-attention .licence-bar span{background:#f2a93b}
.licence-complet .licence-bar span,.licence-depasse .licence-bar span{background:var(--danger)}
.licence-msg{margin:6px 0 0;color:var(--danger)}
.profil-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(260px,1fr);gap:16px;align-items:start}
@media (max-width:900px){.profil-grid{grid-template-columns:1fr}}
.profil-actif{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-bottom:14px;font-size:14px;font-weight:700}
.profil-actif small{flex:1 0 100%;font-weight:400;color:var(--muted);padding-left:24px}
.profil-licences{display:flex;gap:22px;flex-wrap:wrap}
.profil-licence,.profil-sous-traitant{display:inline-flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.profil-sous-traitant{margin-top:6px}
.profil-module-list{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.profil-module{display:flex;align-items:center;gap:8px;font-size:14px;opacity:.7}
.nav-badge{display:inline-block;min-width:18px;margin-left:6px;padding:0 6px;border-radius:999px;background:var(--accent);color:#fff;font-size:11px;font-weight:800;text-align:center;line-height:18px}
.commander-filtres{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.commander-filtres input[type=search]{flex:2;min-width:220px}
.commander-filtres select{flex:1;min-width:170px;width:auto}
.commander-ajout{display:flex;align-items:center;gap:6px}
.commander-ajout input{width:80px;padding:6px 8px}
.commander-ajout-msg{font-size:12px;font-weight:700}
.commander-ajout-msg.ok{color:var(--ok)}.commander-ajout-msg.err{color:var(--danger)}
/* E-catalogues (T58) : grille de cartes à logo, filtres à gauche, fiche produit. Les logos sont posés sur une tuile blanche pour rester lisibles en thème sombre. */
.commander-onglets{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px}
.commander-onglets a{padding:8px 16px;font-weight:700;font-size:14px;text-decoration:none;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.commander-onglets a.active{color:var(--accent);border-bottom-color:var(--accent)}
.cat-layout{display:grid;grid-template-columns:240px 1fr;gap:18px;align-items:start}
.cat-filtres{display:flex;flex-direction:column;gap:8px}
.cat-filtres h3{margin:10px 0 0;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.cat-filtres h3:first-child{margin-top:0}
.cat-filtre-liste{display:flex;flex-direction:column;gap:6px;max-height:240px;overflow:auto}
.cat-filtre-liste label{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.cat-prix{display:flex;align-items:center;gap:6px}
.cat-prix input{min-width:0;width:100%}
.cat-barre{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cat-vue{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.cat-vue a{padding:5px 12px;font-size:13px;font-weight:700;text-decoration:none;color:var(--muted)}
.cat-vue a.active{background:var(--accent-soft);color:var(--accent)}
.cat-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.cat-carte{display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel);text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s}
.cat-carte:hover{border-color:var(--accent);box-shadow:0 4px 14px rgba(0,0,0,.18)}
.cat-carte-logo{display:flex;align-items:center;justify-content:center;height:120px;background:#fff;border-radius:8px;padding:10px}
.cat-carte-nom{font-weight:800;font-size:14px;text-align:center}
.cat-carte-sous{font-size:12px;color:var(--muted);text-align:center}
.cat-logo{max-width:100%;max-height:100%;object-fit:contain}
.cat-logo-petit{height:40px;width:80px;background:#fff;border-radius:6px;padding:3px}
.cat-logo-entete{height:64px;width:140px;background:#fff;border-radius:8px;padding:6px}
.cat-logo-initiales{display:inline-flex;align-items:center;justify-content:center;font-weight:900;font-size:34px;color:#556;letter-spacing:.02em}
.cat-logo-petit.cat-logo-initiales{font-size:16px}.cat-logo-entete.cat-logo-initiales{font-size:24px}
.cat-fil{font-size:13px;color:var(--muted);margin-bottom:12px}
.cat-fil a{text-decoration:none}
.cat-entete{display:flex;align-items:center;gap:16px;margin-bottom:16px;flex-wrap:wrap}
.cat-produit{display:grid;grid-template-columns:160px 1fr 280px;gap:22px;align-items:start}
.cat-fiche{display:grid;grid-template-columns:max-content 1fr;gap:6px 18px;margin:0;font-size:14px}
.cat-fiche dt{color:var(--muted);font-weight:700}.cat-fiche dd{margin:0}
.cat-produit-achat{display:flex;flex-direction:column;gap:8px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}
.cat-prix-grand{font-size:28px;font-weight:900}.cat-prix-grand small{font-size:13px;font-weight:600;color:var(--muted)}
.cat-ajout{flex-direction:column;align-items:stretch}
.cat-ajout input{width:100%}
@media (max-width:900px){.cat-layout,.cat-produit{grid-template-columns:1fr}}
.panier-groupe{margin-bottom:16px}
.panier-groupe tfoot td{font-weight:600;background:var(--panel2)}
.panier-groupe table input[type=number]{width:96px;padding:6px 8px}
.panier-commande{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.panier-commande .field{margin:0;min-width:200px}
.reglages-search{max-width:640px;margin:0 auto 22px}
.reglages-group{margin-bottom:24px}
.reglages-group>h2{margin:0 0 12px;font-size:13px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.reglages-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px}
.reglage-card{display:flex;align-items:flex-start;gap:14px;padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:12px;text-decoration:none;color:var(--text);transition:border-color .12s,box-shadow .12s}
.reglage-card{--dept:var(--dept-commercial);border-left:4px solid var(--dept)}   /* couleur de la carte = celle de sa section dans le menu de gauche (T198) */
.reglage-card[data-section="rh"],.reglage-card[data-section="contact"],.reglage-card[data-section="planification"]{--dept:var(--dept-rh)}
.reglage-card[data-section="qse"],.reglage-card[data-section="achats"],.reglage-card[data-section="location"]{--dept:var(--dept-qse)}
.reglage-card[data-section="chantier"],.reglage-card[data-section="comptabilite"]{--dept:var(--dept-chantier)}
.reglage-card-section{font-style:normal;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--dept)}
.reglage-card:hover,.reglage-card:focus-visible{border-color:var(--dept);box-shadow:0 2px 10px rgba(0,0,0,.12)}
.reglage-card-icon{flex:none;width:38px;height:38px;padding:7px;border-radius:10px;color:var(--dept);background:color-mix(in srgb,var(--dept) 16%,transparent)}
.reglage-card-icon svg{width:100%;height:100%;display:block}
.reglage-card-text{display:flex;flex-direction:column;gap:4px;min-width:0}
.reglage-card-text strong{font-size:15px}
.reglage-card-text small{color:var(--muted);font-size:12.5px;line-height:1.4}
.section-banner-actions{display:flex;align-items:center;gap:12px;margin-left:auto;flex:none}

.theme-wrap{position:relative;flex:none}
.theme-toggle{width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--panel2);color:var(--text);cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center;font-family:inherit;flex:none}
.theme-toggle:hover{border-color:var(--accent)}
.theme-toggle svg{width:17px;height:17px;display:block}
.theme-dropdown{display:none;position:absolute;top:42px;left:0;width:160px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.4);z-index:200;overflow:hidden}
.theme-dropdown.open{display:block}
.theme-item{display:flex;align-items:center;gap:9px;width:100%;padding:9px 14px;font-size:13px;font-weight:600;color:var(--text);background:none;border:none;cursor:pointer;text-align:left;font-family:inherit}
.theme-item:hover{background:var(--panel2)}
.theme-item.active{color:var(--accent);background:var(--accent-soft)}
.theme-item svg{width:15px;height:15px;display:block;flex:none}

.notif-bell-wrap{position:relative;flex:none}
.notif-bell{position:relative;width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--panel2);color:var(--text);cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center;font-family:inherit}
.notif-bell:hover{border-color:var(--accent)}
.notif-bell svg{width:17px;height:17px;display:block}
.notif-badge{position:absolute;top:-4px;right:-4px;background:var(--danger);color:#fff;font-size:9px;font-weight:800;min-width:14px;height:14px;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 3px;line-height:1}
.notif-dropdown{display:none;position:absolute;top:42px;right:0;width:300px;max-width:calc(100vw - 24px);max-height:360px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.4);z-index:200}
.notif-dropdown.open{display:block}
.notif-dropdown-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--line);font-size:12px}
.notif-dropdown-head a{font-size:11px;color:var(--accent);text-decoration:none}
.notif-empty{padding:16px 12px;color:var(--muted);font-size:12.5px;text-align:center}
.notif-item{display:block;padding:10px 12px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--text)}
.notif-item:last-child{border-bottom:none}
.notif-item:hover{background:var(--panel2)}

.entreprise-search-wrap{position:relative}
.entreprise-search-results{display:none;position:absolute;top:100%;left:0;right:0;margin-top:4px;max-height:240px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.4);z-index:50}
.entreprise-search-results.open{display:block}
.entreprise-search-item{padding:9px 12px;border-bottom:1px solid var(--line);cursor:pointer}
.entreprise-search-item:last-child{border-bottom:none}
.entreprise-search-item:hover{background:var(--panel2)}
.entreprise-search-item strong{display:block;font-size:12.5px}
.entreprise-search-item small{display:block;color:var(--muted);font-size:11px;margin-top:2px}
.notif-item.unread{background:var(--accent-soft)}
.notif-msg{font-size:12.5px;font-weight:600;line-height:1.4}
.notif-date{font-size:10.5px;color:var(--muted);margin-top:3px}

.profile-wrap{position:relative;flex:none}
.profile-btn{display:flex;align-items:center;gap:9px;padding:5px 10px 5px 5px;border-radius:24px;border:1px solid var(--line);background:var(--panel2);color:var(--text);cursor:pointer;font-family:inherit}
.profile-btn:hover{border-color:var(--accent)}
.profile-avatar{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;flex:none}
.profile-avatar-logo{background:#fff;padding:2px;overflow:hidden}
.profile-avatar-logo img{width:100%;height:100%;object-fit:contain}
.profile-name{font-size:12.5px;font-weight:700;text-align:left;line-height:1.25;white-space:nowrap}
.profile-name small{display:block;color:var(--muted);font-weight:400;text-transform:capitalize;font-size:10.5px}
.profile-caret{display:flex;flex:none;color:var(--muted)}
.profile-caret svg{width:13px;height:13px;display:block}
.profile-dropdown{display:none;position:absolute;top:46px;right:0;width:190px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.4);z-index:200;overflow:hidden}
.profile-dropdown.open{display:block}
.profile-item{display:flex;align-items:center;gap:9px;padding:10px 14px;font-size:13px;font-weight:600;color:var(--text);text-decoration:none}
.profile-item:hover{background:var(--panel2)}

.engin-qr-block{display:flex;gap:14px;align-items:center}
.engin-qr{width:80px;height:80px;flex:none;background:#fff;border-radius:8px;padding:5px;box-sizing:border-box}
.engin-qr img,.engin-qr canvas{width:100%;height:100%;display:block}

@media (min-width:901px){
  .sidebar.collapsed{width:68px}
  .sidebar.collapsed .navlink span:not(.ic){display:none}
  .sidebar.collapsed .sidebar-brand{padding:16px 0;flex-direction:column;gap:8px}
  .sidebar.collapsed .sidebar-toggle{margin-left:0}
  .sidebar.collapsed .navlink{justify-content:center;padding:10px 0}
  .sidebar.collapsed .nav-section-label{justify-content:center;padding:10px 0;gap:0}
  .sidebar.collapsed .lbl-text,
  .sidebar.collapsed .nav-caret{display:none}
  .sidebar.collapsed .nav-group:not(.open) .nav-section-links{display:none}
}

.app-main{flex:1;min-width:0}

.wrap{max-width:1400px;margin:0 auto;padding:22px}
.grid2{display:grid;grid-template-columns:minmax(360px,1fr) minmax(420px,560px);gap:22px}
@media (max-width:980px){.grid2{grid-template-columns:1fr}}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:18px;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.card h2{font-size:13px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin:0 0 14px}
.card-toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px}
.card-toolbar h2{margin:0}
.row-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
/* Actions de ligne en icônes (assets/row-actions.js) : bouton « ⋮ » qui ouvre une pastille d'icônes. */
.row-actions.ra-ready{flex-wrap:nowrap;align-items:center;gap:4px}
/* Une cellule de tableau ne doit jamais être en flex : elle perdrait la hauteur de sa ligne (bouton décalé, trait de séparation qui ne suit pas les autres colonnes) */
td.row-actions{display:table-cell;text-align:right;white-space:nowrap;vertical-align:middle}
td.row-actions>*{vertical-align:middle}
td.row-actions>*+*{margin-left:6px}
.ra-toggle{width:34px;height:34px;padding:0;border-radius:50%;border:1px solid var(--line);background:var(--panel2);color:var(--text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.ra-toggle svg{width:18px;height:18px}
.ra-toggle:hover,.ra-toggle[aria-expanded=true]{border-color:var(--accent);background:var(--accent-soft)}
.ra-menu{display:none;position:fixed;z-index:70;align-items:center;gap:2px;padding:4px 8px;background:var(--panel);border:1px solid var(--line);border-radius:999px;box-shadow:0 8px 24px rgba(0,0,0,.28)}
.ra-menu.open{display:flex}
.ra-menu form{display:inline-flex;margin:0}
.ra-sep{flex:none;width:1px;height:22px;margin:0 4px;background:var(--accent);opacity:.6}
.ra-item,.btn.ra-item{width:34px;height:34px;padding:0;border-radius:50%;border:0;background:none;box-shadow:none;color:var(--muted);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;text-decoration:none}
.ra-item svg{width:19px;height:19px}
.ra-item:hover,.btn.ra-item:hover{background:var(--accent-soft);color:var(--accent)}
.ra-danger,.btn.ra-danger{color:var(--danger)}
.ra-danger:hover,.btn.ra-danger:hover{background:color-mix(in srgb,var(--danger) 16%,transparent);color:var(--danger)}
.row-actions.ra-ready>.ra-item,.row-actions.ra-ready>form{flex:none}
/* Info-bulle immédiate (assets/row-actions.js) : boutons à icône, actions de ligne et menu de gauche. Aux couleurs du thème, avec une petite flèche vers l'élément */
.ra-tip{position:fixed;z-index:200;display:none;max-width:280px;padding:7px 12px;border-radius:9px;background:var(--panel2);color:var(--text);border:1px solid color-mix(in srgb, var(--accent) 45%, var(--line));font-size:13px;font-weight:600;line-height:1.35;pointer-events:none;box-shadow:0 8px 22px rgba(0,0,0,.35);animation:ra-tip-in .09s ease-out}
.ra-tip.show{display:block}
.ra-tip::before{content:"";position:absolute;width:9px;height:9px;background:inherit;border:inherit;transform:rotate(45deg)}
.ra-tip.droite::before{left:-5px;top:calc(50% - 4.5px);border-width:0 0 1px 1px}
.ra-tip.haut::before{bottom:-5px;left:calc(var(--fleche, 50%) - 4.5px);border-width:0 1px 1px 0}
.ra-tip.bas::before{top:-5px;left:calc(var(--fleche, 50%) - 4.5px);border-width:1px 0 0 1px}
@keyframes ra-tip-in{from{opacity:0}to{opacity:1}}
@media print{.ra-toggle,.ra-menu,.ra-tip{display:none !important}}
label{display:block;font-size:12.5px;color:var(--muted);margin:0 0 5px;font-weight:600}
input[type=text],input[type=search],input[type=tel],input[type=email],input[type=password],input[type=url],input[type=number],input[type=date],textarea,select{
  width:100%;padding:10px 12px;background:var(--panel2);border:1px solid var(--line);border-radius:9px;color:var(--text);font-size:14px;font-family:inherit;
}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent)}
.row{display:flex;gap:10px;flex-wrap:wrap}
.row>*{flex:1;min-width:0}
.field{margin-bottom:12px}
.hint{font-size:11.5px;color:var(--muted);margin-top:5px}
.dropzone{border:2px dashed var(--line);border-radius:10px;padding:12px;transition:border-color .15s,background .15s}
.dropzone.dropzone-active{border-color:var(--accent);background:var(--accent-soft)}
.dropzone-hint{font-size:11.5px;color:var(--muted);margin-top:6px}
.btn{display:inline-flex;align-items:center;gap:7px;justify-content:center;padding:10px 15px;border-radius:9px;border:1px solid var(--line);background:var(--panel2);color:var(--text);font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit;text-decoration:none}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent);color:#fff;border-color:transparent}
.btn.primary:hover{filter:brightness(1.08);border-color:transparent}
.btn.ghost{background:transparent}
.btn.danger{color:var(--danger);border-color:#40252a}
.btn.small{padding:6px 10px;font-size:12px}
.btnbar{display:flex;flex-wrap:wrap;gap:9px;margin-top:6px}
.subblock{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:13px 14px;margin-bottom:14px}
.subblock-title{font-size:12px;font-weight:700;margin-bottom:10px}

.worker-list{display:flex;flex-direction:column;gap:8px}
.worker-item{display:flex;align-items:center;gap:10px;padding:9px 11px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;text-decoration:none;color:var(--text)}
.worker-item.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}
.worker-item .nm{flex:1;font-size:13.5px;font-weight:600}
.worker-item .nm small{display:block;color:var(--muted);font-weight:400;font-size:11.5px}
.worker-item .badge{font-size:11px;color:var(--muted);background:var(--panel);padding:2px 7px;border-radius:20px;border:1px solid var(--line)}
.empty{color:var(--muted);font-size:13px;text-align:center;padding:18px}

.kpis{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.kpi{flex:1;min-width:140px;background:var(--panel2);border:1px solid var(--line);border-top:3px solid var(--accent);border-radius:10px;padding:10px 12px}
.kpi .n{font-size:20px;font-weight:800}
.kpi .l{font-size:11px;color:var(--muted)}
.kpi .pill{margin-top:4px}

.flash{padding:11px 16px;border-radius:10px;margin-bottom:16px;font-size:13.5px;font-weight:600}
.flash.ok{background:rgba(57,217,138,.14);color:#39d98a;border:1px solid rgba(57,217,138,.3)}
.flash.err{background:rgba(255,107,107,.14);color:#ff6b6b;border:1px solid rgba(255,107,107,.3)}
.flash.info{background:rgba(94,163,255,.14);color:#5ea3ff;border:1px solid rgba(94,163,255,.3)}

.journal-dictee{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.journal-dictee-hint{font-size:12px;color:var(--muted);flex:1 1 220px}
.journal-dictee-status{margin:0;flex-basis:100%;padding:9px 13px;font-size:12.5px}
#dicteeBtn.recording{background:rgba(255,107,107,.16);border-color:rgba(255,107,107,.4);color:#ff6b6b}

/* ---------- carte casque ---------- */
.helmet-card{width:346px;background:#fff;color:#15181e;border-radius:20px;overflow:hidden;box-shadow:0 18px 40px rgba(15,17,21,.18),0 2px 8px rgba(15,17,21,.08);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;border:1px solid #edeef1;position:relative}
.hc-accentbar{height:6px;background:var(--card-accent,var(--accent))}
.hc-head{display:flex;align-items:center;gap:10px;padding:13px 16px 10px}
.hc-head .clogo{height:30px;max-width:104px;border-radius:6px;object-fit:contain}
.hc-head .clogo.text{height:30px;display:flex;align-items:center;font-weight:800;font-size:14px;letter-spacing:.4px;padding:0 9px;border-radius:6px;background:#15181e;color:var(--card-accent,var(--accent))}
.hc-head .cname{flex:1;font-weight:800;font-size:12.5px;letter-spacing:.6px;text-transform:uppercase;color:#4a4f59;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hc-head .contrat{flex:none;font-size:10px;font-weight:800;letter-spacing:.3px;color:#111;background:var(--card-accent,var(--accent));padding:4px 10px;border-radius:20px}
.hc-divider{height:1px;background:linear-gradient(90deg,transparent,#e7e8ec 12%,#e7e8ec 88%,transparent)}
.hc-body{display:flex;padding:15px 16px 4px;gap:12px;align-items:flex-start}
.hc-info{flex:1;min-width:0}
.hc-info .role-label{font-size:9.5px;letter-spacing:1.6px;color:#9aa0ab;text-transform:uppercase;font-weight:800}
.hc-info .lbl{display:block;font-size:8.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:#9aa0ab}
.hc-info .name{font-size:22px;font-weight:800;line-height:1.15;margin:3px 0 1px;word-break:break-word;letter-spacing:.2px}
.hc-info .prenom{font-size:14.5px;font-weight:500;color:#5a5f6a}
.hc-info .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.hc-info .poste{display:inline-block;font-size:10.5px;font-weight:700;color:#3a3f49;background:#f1f2f4;padding:4px 10px;border-radius:20px}
.hc-qr-block{flex:none;display:flex;flex-direction:column;align-items:center;gap:4px}
.hc-qr{width:92px;height:92px;background:#fff;border:1.5px solid var(--card-accent,var(--accent));border-radius:12px;padding:6px;display:flex;align-items:center;justify-content:center}
.hc-qr img,.hc-qr canvas{width:100%;height:100%}
.hc-qr-cap{font-size:8.5px;letter-spacing:.8px;text-transform:uppercase;color:#a7abb4;font-weight:700}
.hc-meta{display:flex;flex-wrap:wrap;gap:5px 14px;margin:11px 16px 0;padding-top:10px;border-top:1px dashed #e7e8ec}
.hc-meta .item{font-size:10px;color:#8a8f99;font-weight:600}
.hc-meta .item b{color:#20232a;font-weight:800}
.hc-meta .item .warn{color:#b5720a}
.hc-meta .item .bad{color:#c73434}
.hc-meta .item .good{color:#1c8a53}
.hc-foot{margin-top:12px;padding:9px 16px;background:#15181e;color:#c9cdd6;font-size:9px;letter-spacing:.4px;display:flex;justify-content:space-between;align-items:center}
.hc-foot .scan{color:var(--card-accent,var(--accent));font-weight:800;letter-spacing:.6px}
.preview-stage{background:#c9ced6;border-radius:14px;padding:26px;display:flex;justify-content:center;align-items:center;min-height:260px}

/* ---------- suivi ---------- */
.suivi-section-title{font-size:13px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin:26px 0 10px}
.suivi-section-title:first-of-type{margin-top:0}
.suivi-table-wrap{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow-x:auto}
table.suivi{width:100%;border-collapse:collapse;font-size:13px}
table.suivi thead th{position:relative;text-align:left;padding:11px 14px;background:var(--panel2);color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;font-weight:800;border-bottom:1px solid var(--line);white-space:nowrap}
table.suivi td{padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
table.suivi tbody tr:hover{background:var(--panel2)}
/* Largeur des colonnes réglable (assets/col-resize.js) */
.cr-handle{position:absolute;top:0;right:0;width:9px;height:100%;cursor:col-resize;touch-action:none;user-select:none;z-index:3}
.cr-handle::after{content:'';position:absolute;right:4px;top:24%;height:52%;width:1px;background:var(--line)}
.cr-handle:hover::after,.cr-handle.cr-active::after{right:3px;width:3px;border-radius:2px;background:var(--accent)}
table.suivi.cr-fixed{table-layout:fixed}
table.suivi.cr-fixed thead th{overflow:hidden;text-overflow:ellipsis}
table.suivi.cr-fixed td{overflow-wrap:anywhere}
body.cr-resizing{cursor:col-resize;user-select:none}
@media (max-width:900px){.cr-handle{width:16px}.cr-handle::after{right:7px}}
@media print{.cr-handle{display:none}}

table.suivi tbody tr:last-child td{border-bottom:0}
table.suivi .who{font-weight:700}
.pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:800;padding:4px 10px;border-radius:20px;white-space:nowrap}
.pill.good{background:rgba(57,217,138,.14);color:#39d98a}
.pill.warn{background:rgba(255,177,64,.16);color:#ffb140}
.pill.bad{background:rgba(255,107,107,.16);color:#ff6b6b}
.pill.neutral{background:var(--panel2);color:var(--muted);border:1px solid var(--line)}
.pill.accent{background:var(--accent-soft);color:var(--accent)}
.pill.violet{background:rgba(139,92,246,.16);color:#8b5cf6}

/* ---------- data-table (recherche/filtres/tri/colonnes) — assets/data-table.js ---------- */
.dt-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px}
.dt-actions-inline{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}
/* Barre d'actions d'une liste restée seule (tableau vide : le script n'a pas construit la barre de filtres) : mêmes boutons, toujours alignés à droite, bouton principal en dernier */
[data-dt-actions]:not(.dt-actions-inline){display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-bottom:14px}
.dt-filterbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.dt-filterwrap{position:relative}
.dt-filterbtn{display:inline-flex;align-items:center;padding:8px 13px;border-radius:20px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit}
.dt-filterbtn:hover{border-color:var(--accent);color:var(--text)}
.dt-filterbtn.active{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.dt-allfiltersbtn{gap:6px}
.dt-allfiltersbtn svg{width:14px;height:14px;flex:none;display:block}
.dt-filterdropdown{position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:200px;max-height:260px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.25);padding:8px}
.dt-filteroption{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;font-size:13px;font-weight:500;cursor:pointer;color:var(--text)}
.dt-filteroption:hover{background:var(--panel2)}
.dt-filteroption input{width:auto;padding:0;flex:none}
.dt-colpanel-selectall{font-weight:700;border-bottom:1px solid var(--line);border-radius:0;padding-bottom:9px;margin-bottom:4px}
.dt-searchwrap{display:flex;align-items:center;flex:none}
.dt-searchicon{width:38px;height:38px;border-radius:9px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);cursor:pointer;font-family:inherit;flex:none;display:flex;align-items:center;justify-content:center}
.dt-searchicon svg{width:16px;height:16px;display:block}
.dt-searchicon:hover{border-color:var(--accent);color:var(--text)}
.dt-searchicon.active{border-color:var(--accent);color:var(--accent)}
.dt-searchwrap .dt-search{width:0;min-width:0;padding:0;margin-left:0;border:none;opacity:0;overflow:hidden;transition:width .18s ease,opacity .15s ease,padding .18s ease,margin-left .18s ease}
.dt-searchwrap.open .dt-search{width:220px;opacity:1;padding:10px 12px;margin-left:8px;border:1px solid var(--line);border-radius:9px}
.dt-resetbtn{width:38px;height:38px;border-radius:9px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);cursor:pointer;font-family:inherit;flex:none;opacity:.55;display:flex;align-items:center;justify-content:center}
.dt-resetbtn svg{width:16px;height:16px;display:block}
.dt-resetbtn:hover{border-color:var(--accent);color:var(--text);opacity:1}
.dt-resetbtn.active{color:var(--accent);border-color:var(--accent);opacity:1}
.dt-colwrap{flex:none}
.dt-colbtn{width:38px;height:38px;border-radius:9px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center}
.dt-colbtn svg{width:16px;height:16px;display:block}
.dt-colbtn:hover{border-color:var(--accent);color:var(--text)}
.dt-colpanel{position:absolute;z-index:60;width:220px;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.25);padding:8px 0 0}
.dt-colpanel-list{max-height:260px;overflow-y:auto;padding:0 8px}
.dt-colpanel-actions{display:flex;justify-content:flex-end;gap:8px;padding:9px;border-top:1px solid var(--line);margin-top:6px}
table.suivi.dt-table thead th.dt-sortable{cursor:pointer;user-select:none}
table.suivi.dt-table thead th.dt-sortable:hover{color:var(--text)}
table.suivi.dt-table thead th.dt-sortable::after{content:'⇅';margin-left:6px;opacity:.4;font-size:10px}
table.suivi.dt-table thead th.dt-sort-asc::after{content:'↑';opacity:1;color:var(--accent)}
table.suivi.dt-table thead th.dt-sort-desc::after{content:'↓';opacity:1;color:var(--accent)}
table.suivi.dt-table .dt-col-hidden{display:none}
@media (max-width:640px){
  .dt-toolbar{flex-direction:row;flex-wrap:wrap}
  .dt-searchwrap.open .dt-search{width:100%}
  .dt-searchwrap.open{flex:1 1 100%}
}

.dash-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-bottom:14px}
.dash-settings-wrap{position:relative}
.dash-settings-panel{display:none;position:absolute;top:38px;right:0;width:200px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.25);z-index:200;padding:10px 0}
.dash-settings-panel.open{display:block}
.dash-settings-title{padding:4px 14px 8px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.dash-settings-item{display:flex;align-items:center;gap:9px;padding:7px 14px;font-size:13px;font-weight:600;color:var(--text);cursor:pointer}
.dash-settings-item:hover{background:var(--panel2)}

.dash-kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}
.dash-kpi-wrap{position:relative}
.dash-kpi-wrap--wide{grid-column:span 2}
@media (max-width:700px){.dash-kpi-wrap--wide{grid-column:span 1}}
.dash-kpi-wrap.dash-kpi-hidden{display:none}
.dash-kpi-wrap.dragging{opacity:.4}
.dash-kpi-handle{position:absolute;top:19px;left:18px;z-index:2;width:18px;height:18px;padding:0;border:none;background:none;color:var(--muted);cursor:grab;font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center}
.dash-kpi-handle:hover{color:var(--text)}
.dash-kpi-handle:active{cursor:grabbing}
.dash-kpi-card{display:block;height:100%;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;transition:border-color .15s}
.dash-kpi-card:hover{border-color:var(--accent)}
.dash-kpi-main{display:block;text-decoration:none;color:inherit}
.dash-kpi-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;padding-left:20px}
.dash-kpi-title{font-size:14px;font-weight:800;display:inline-flex;align-items:center;gap:6px}
.dash-kpi-sub{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.dash-kpi-numbers{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.dash-kpi-count{font-size:28px;font-weight:800}
.dash-kpi-total{font-size:16px;font-weight:700;color:var(--muted)}
.dash-kpi-pills{display:flex;flex-wrap:wrap;gap:6px}
a.pill.pill-link{text-decoration:none;cursor:pointer;transition:filter .15s,box-shadow .15s}
a.pill.pill-link:hover{filter:brightness(1.15);box-shadow:0 0 0 1px currentColor inset}
.days-left{font-size:11.5px;color:var(--muted)}
.days-left.bad{color:#ff6b6b;font-weight:700}
.days-left.warn{color:#ffb140;font-weight:700}

/* ---------- modale ---------- */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(5,6,8,.65);z-index:300;padding:24px;overflow-y:auto;align-items:flex-start;justify-content:center}
.modal-overlay.open{display:flex}
.modal-box{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:28px 32px;max-width:760px;width:100%;margin:auto;box-shadow:0 20px 60px rgba(0,0,0,.5)}   /* margin:auto : fenêtre centrée dans la page (en hauteur aussi), et défilement normal si elle est plus haute que l'écran */
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:24px}
.modal-head h2{margin:0;font-size:15px}
.modal-close{flex:none;width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--panel2);border:1px solid var(--line);color:var(--muted);text-decoration:none}
.modal-close:hover{color:var(--text);border-color:var(--accent)}
/* Fiche d'un enregistrement (ouverte par ?new / ?edit) : s'affiche en pleine page à la place de la liste, et non plus en fenêtre (« bulle »). */
.modal-overlay.modal-page.open{display:block;position:static;background:none;padding:0;overflow:visible;z-index:auto}
.modal-overlay.modal-page.open .modal-box{max-width:none;margin:0 0 20px;box-shadow:none}
body:has(.modal-overlay.modal-page.open) .app-main>.wrap{display:none}
.modal-page.open .modal-close{width:auto;height:auto;padding:7px 14px;font-size:0}
.modal-page.open .modal-close::before{content:"← Retour à la liste";font-size:13px;font-weight:700}

/* Fiche d'un ouvrier (ouvrier.php) : en-tête, onglets, formulaire en deux colonnes, absences. */
.fiche-entete{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding-bottom:0;margin-bottom:16px}
.fiche-titre{display:flex;align-items:center;gap:14px}
.fiche-titre h2{margin:0;font-size:20px}
.fiche-titre h2 small{margin-left:8px;font-size:13px;font-weight:600;color:var(--muted)}
.fiche-tabs{display:flex;gap:2px;flex:1;flex-wrap:nowrap;overflow-x:auto;min-width:0;margin:0 8px;scrollbar-width:thin}   /* jamais sur deux lignes : l'en-tête d'onglets est une barre à part, au-dessus de l'identité */
.fiche-tabs>a,.fiche-tabs>span{white-space:nowrap;padding:16px 18px;font-weight:700;font-size:14px;color:var(--muted);text-decoration:none;border-bottom:3px solid transparent}
.fiche-tabs a:hover{color:var(--text)}
.fiche-tabs>a.active,.fiche-tabs>span.active{color:var(--text);border-bottom-color:var(--accent)}
.fiche-tabs>span.disabled{opacity:.45;cursor:not-allowed}
.fiche-entete>.btn{margin-bottom:12px}
.fiche-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px}
.fiche-form>.row,.fiche-form>.subblock,.fiche-form>.btnbar,.fiche-form>.field:has(#formList){grid-column:1/-1}
.fiche-form>.fiche-bloc{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px;align-content:start}   /* blocs titrés (T182) : pleine largeur, champs sur deux colonnes */
.fiche-form>.fiche-bloc>.fiche-bloc-titre,.fiche-form>.fiche-bloc>.row,.fiche-form>.fiche-bloc>.hint,.fiche-form>.fiche-bloc>.subblock,.fiche-form>.fiche-bloc>.btnbar,.fiche-form>.fiche-bloc>script{grid-column:1/-1}
@media (max-width:900px){.fiche-form>.fiche-bloc{grid-template-columns:1fr}}
@media (max-width:900px){.fiche-form{grid-template-columns:1fr}}
.horaires-grille td{vertical-align:middle}
.horaires-grille input[type=time]{width:120px;padding:6px 8px}
.horaires-grille input[type=number]{width:90px;padding:6px 8px}
.horaires-grille input[type=checkbox]{width:18px;height:18px}
.horaires-grille tr.horaires-off td:not(.who):not(:nth-child(2)){opacity:.45}
.horaires-grille tfoot td{font-weight:600;background:var(--panel2)}
.horaires-choix{display:flex;gap:24px;flex-wrap:wrap;margin:0 0 14px}
.horaires-choix label{display:inline-flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.absence-form{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:14px}
.absence-filtres{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px}
.absence-filtres select{width:auto;min-width:220px}
.absence-filtres label{display:flex;align-items:center;gap:6px;font-size:13px}
.absence-filtres input[type=date]{width:auto}

/* ---------- auth pages ---------- */
.authwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;
  background:radial-gradient(900px 520px at 12% -8%,color-mix(in srgb,var(--brand-blue) 30%,transparent),transparent 62%),radial-gradient(760px 460px at 92% 108%,color-mix(in srgb,var(--brand-orange) 20%,transparent),transparent 62%),radial-gradient(520px 360px at 100% 0%,color-mix(in srgb,var(--brand-green) 14%,transparent),transparent 60%),var(--bg)}
.authbox{position:relative;overflow:hidden;width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:34px 30px 28px;box-shadow:0 18px 50px rgba(0,0,0,.28)}
.authbox::before{content:"";position:absolute;left:0;right:0;top:0;height:5px;background:var(--brand-gradient)}
.auth-logo{display:flex;justify-content:center;margin:2px 0 20px}
.auth-logo .brand-logo{height:78px}
.authbox h1{font-size:20px;margin:0 0 4px;text-align:center}
.authbox .sub{font-size:13px;color:var(--muted);margin-bottom:22px;text-align:center}

/* ---------- responsive sidebar ---------- */
@media (max-width:900px){
  .app-shell{flex-direction:column;align-items:stretch}
  .sidebar{position:relative;width:100%;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 16px}
  .sidebar-brand{padding:0}
  .sidebar-toggle{display:none}
  .sidebar-nav{flex-direction:row;flex:1 1 auto;min-width:0;overflow-x:auto;padding:0;gap:4px}
  .nav-group{flex-direction:row}
  .nav-section-label{display:none}
  .nav-group .nav-section-links{display:flex !important;flex-direction:row}
  .navlink{white-space:nowrap;border-left:0;flex:none}
  .section-banner{padding:10px 14px;flex-wrap:wrap;row-gap:8px}
  .profile-name small{display:none}
  .notif-dropdown{position:fixed;top:60px;left:12px;right:12px;width:auto;max-width:none}
}

/* ---------- responsive général ---------- */
@media (max-width:640px){
  .wrap{padding:14px}
  .row{flex-direction:column;gap:0}
  .modal-overlay{padding:0}
  .modal-box{border-radius:0;min-height:100vh;margin:0;max-width:none}
  .card-toolbar{align-items:stretch}
  .card-toolbar .btnbar{justify-content:flex-start}
  .row-actions{justify-content:flex-start}
  .kpis{gap:8px}
  .kpi{min-width:calc(50% - 8px)}
}

/* ---------- print ---------- */
/* ---------- planning ---------- */
.planning-wrap{display:flex;gap:16px;align-items:flex-start}
.planning-grid-wrap{flex:1;min-width:0;overflow:auto;border:1px solid var(--line);border-radius:10px;background:var(--panel);max-height:75vh}
.planning-grid{display:grid;position:relative}
.planning-header-cell{position:sticky;top:0;z-index:2;background:var(--panel2);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:10.5px;font-weight:800;color:var(--muted);border-bottom:1px solid var(--line);border-left:1px solid var(--line);text-transform:uppercase;gap:1px}
.planning-corner{position:sticky;left:0;top:0;z-index:3;border-left:none}
.planning-worker-cell{position:sticky;left:0;z-index:1;background:var(--panel);display:flex;flex-direction:column;justify-content:center;padding:0 10px;border-bottom:1px solid var(--line);font-size:12.5px;font-weight:700}
.planning-worker-cell small{color:var(--muted);font-weight:400;font-size:11px}
.planning-section-label{position:sticky;left:0;z-index:1;background:var(--panel2);display:flex;align-items:center;padding:0 10px;border-bottom:1px solid var(--line);font-size:10.5px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.pcell{border-bottom:1px solid var(--line);border-left:1px solid var(--line)}
.pcell.drag-over{background:var(--accent-soft)}
.pcell-warn{justify-self:end;align-self:start;margin:2px 3px 0 0;font-size:12px;line-height:1;pointer-events:none;filter:drop-shadow(0 0 1.5px rgba(0,0,0,.9))}
.pcell-warn svg{display:block;width:13px;height:13px;color:#ffb140}
.pbar{margin:4px 2px;border-radius:6px;display:flex;align-items:center;color:#fff;overflow:hidden;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.3);user-select:none}
.pbar-label{flex:1;min-width:0;padding:0 8px;font-size:11px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pbar-interactive{cursor:grab}
.pbar-interactive:active{cursor:grabbing}
.pbar-interactive.dragging{opacity:.85;box-shadow:0 4px 10px rgba(0,0,0,.5)}
.pbar-handle{flex:none;width:9px;align-self:stretch;cursor:ew-resize}
.pbar-handle-left{border-right:2px dashed rgba(255,255,255,.65)}
.pbar-handle-right{border-left:2px dashed rgba(255,255,255,.65)}
.pbar-handle:hover{background:rgba(255,255,255,.15)}
.pabs{margin:3px 2px;padding:0 8px;border-radius:5px;border:1px solid var(--abs-color);display:flex;align-items:center;font-size:10.5px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--abs-color) 40%,transparent) 0 6px,color-mix(in srgb,var(--abs-color) 18%,transparent) 6px 12px)}
.pstrip{margin:2px 2px;padding:0 6px;border-radius:4px;display:flex;align-items:center;font-size:10px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;opacity:.92}
.pcell-plus{justify-self:center;align-self:center;width:22px;height:22px;padding:0;border-radius:50%;border:1px dashed var(--line);background:none;color:var(--muted);font-size:14px;line-height:1;cursor:pointer;opacity:.55;display:flex;align-items:center;justify-content:center;font-family:inherit}
.pcell-plus:hover,.pcell-plus:focus-visible{opacity:1;border-style:solid;border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.planning-chantiers{width:250px;flex:none}
.chantier-chip{padding:8px 12px;border-radius:8px;color:#fff;font-size:12.5px;font-weight:700;margin-bottom:6px;cursor:grab;user-select:none}
.chantier-chip:active{cursor:grabbing}
@media (max-width:900px){
  .planning-wrap{flex-direction:column}
  .planning-chantiers{width:100%}
}

/* ---------- carte fournisseurs ---------- */
.fournisseur-map-wrap{display:flex;gap:16px;align-items:flex-start}
.fournisseur-map{flex:1;min-width:0;height:520px;border-radius:12px;border:1px solid var(--line)}
.fournisseur-list{width:300px;flex:none;max-height:520px;overflow-y:auto;display:flex;flex-direction:column;gap:8px}
.fournisseur-item .nm small{display:block}
.company-marker{font-size:20px;line-height:28px;text-align:center;filter:drop-shadow(0 1px 3px rgba(0,0,0,.6))}
.radius-legend{display:flex;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px;box-shadow:0 2px 8px rgba(0,0,0,.25)}
.radius-legend-item{--radius-color:var(--accent);border:1px solid var(--radius-color);color:var(--radius-color);background:transparent;border-radius:6px;padding:4px 9px;font-size:11px;font-weight:800;cursor:pointer;font-family:inherit}
.radius-legend-item:hover{background:var(--radius-color);color:#fff}
@media (max-width:900px){
  .fournisseur-map-wrap{flex-direction:column}
  .fournisseur-map{flex:none;width:100%;height:340px}
  .fournisseur-list{width:100%;max-height:none}
}

/* ---------- carte des chantiers ---------- */
:root{--map-pin-text:#fff;--map-ramp-base:#1d3442}
.cmap-legend{display:flex;flex-wrap:wrap;gap:8px}
.cmap-chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;background:var(--panel2);border:1px solid var(--line);border-radius:999px;color:var(--text);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer}
.cmap-chip[aria-pressed="false"]{opacity:.45;text-decoration:line-through}
.cmap-count{color:var(--muted);font-weight:700}
.cmap-dot{width:12px;height:12px;border-radius:50%;flex:none;display:inline-block}
.cmap-pin{width:36px;height:36px;border-radius:50%;border:3px solid var(--panel);box-shadow:0 2px 6px rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;color:var(--map-pin-text);font-size:11px;font-weight:800;font-family:inherit}
.cmap-pin-wrap{background:none;border:none}
.cmap-prep{background:var(--panel2);border-style:dashed;color:var(--muted)}
.cmap-p1{background:color-mix(in srgb,var(--brand-blue) 30%,var(--map-ramp-base))}
.cmap-p2{background:color-mix(in srgb,var(--brand-blue) 55%,var(--map-ramp-base))}
.cmap-p3{background:color-mix(in srgb,var(--brand-blue) 80%,var(--map-ramp-base))}
.cmap-p4{background:var(--brand-blue)}
.cmap-retard{background:var(--danger)}
.cmap-suspendu{background:var(--brand-orange)}
.cmap-termine{background:var(--brand-green)}
.cmap-dot.cmap-prep{border:2px dashed var(--muted);background:transparent}
.cmap-item{display:flex;align-items:center;gap:10px;cursor:pointer}
.cmap-bar{height:5px;border-radius:3px;background:var(--panel2);margin-top:5px;overflow:hidden}
.cmap-bar span{display:block;height:100%;background:var(--brand-blue)}
.cmap-nopos{color:var(--muted)}
.cmap-depot-logo img{display:block;width:46px;height:46px;object-fit:contain;background:#fff;border:2px solid var(--brand-blue);border-radius:12px;padding:3px;box-shadow:0 2px 6px rgba(0,0,0,.4)}
.cmap-etat{color:#fff}
.cmap-depot span{display:block;text-align:center;font-size:10px;font-weight:800;padding:2px 6px;background:var(--panel);border:1px solid var(--line);border-radius:6px;color:var(--text)}
.cmap-placing{cursor:crosshair}

/* ---------- plan de balisage ---------- */
.plan-balisage-editor{display:flex;gap:14px;align-items:flex-start}
.plan-balisage-palette{width:230px;flex:none;display:flex;flex-direction:column;gap:6px;max-height:520px;overflow-y:auto}
.plan-balisage-tool{display:flex;align-items:center;gap:9px;padding:7px 9px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;font-size:12px;text-align:left;cursor:pointer;color:var(--text);font-family:inherit}
.plan-balisage-tool:hover{border-color:var(--accent)}
.plan-balisage-tool.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.plan-balisage-map{flex:1;min-width:0;height:520px;border-radius:12px;border:1px solid var(--line)}
.plan-balisage-icon{flex:none;display:inline-flex;align-items:center;justify-content:center}
.plan-balisage-icon svg{width:100%;height:100%;display:block}
.plan-balisage-marker{background:none;border:none}
.plan-balisage-marker svg{width:100%;height:100%;display:block}
.plan-balisage-popup{font-size:12px}
@media (max-width:900px){
  .plan-balisage-editor{flex-direction:column}
  .plan-balisage-palette{width:100%;flex-direction:row;flex-wrap:wrap;max-height:none}
  .plan-balisage-map{flex:none;width:100%;height:340px}
}

/* ---------- pointage ---------- */
.pointage-wrap{display:flex;gap:16px;align-items:flex-start}
.pointage-workers{width:260px;flex:none}
.pointage-editor{flex:1;min-width:0}
.pointage-worker-link{cursor:pointer}
.pointage-table th, .pointage-table td{text-align:center}
.pointage-table th:first-child, .pointage-table td:first-child{text-align:left}
.pointage-table .pointage-hour{width:56px;text-align:center;padding:6px 4px}
.pointage-table .pointage-chantier-select{min-width:160px}
.pointage-table tfoot td{font-weight:700;background:var(--panel2)}
.pointage-absence-row td{background:var(--panel2)}
.pointage-absence-cell{padding:6px 4px}
.pointage-absence-cell select,.pointage-absence-cell input{width:100%;padding:4px 5px;font-size:11.5px;margin-bottom:3px}
.pointage-absence-cell > :last-child{margin-bottom:0}
.pointage-col-total.over-day{background:rgba(255,107,107,.18);color:var(--danger);cursor:help}
.pointage-col-total.validated{background:rgba(57,217,138,.16);color:var(--ok)}
.pointage-week-summaries{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}
.pointage-week-summaries:empty{display:none}
.pointage-week-item{display:inline-flex;align-items:center;gap:6px}
.pointage-filters{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.pointage-worker-link.week-ok{background:color-mix(in srgb,var(--ok) 16%,var(--panel2));border-color:var(--ok)}
.pointage-worker-link.week-ok .pointage-week-state{color:var(--ok);font-weight:700}
.pointage-worker-link .pointage-week-state:empty{display:none}
.worker-avatar{flex:none;width:36px;height:36px;border-radius:50%;object-fit:cover;background:var(--panel)}
.worker-avatar-large{width:44px;height:44px}
.worker-avatar-ph{display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:800;color:var(--muted);border:1px solid var(--line)}
.worker-avatar-large.worker-avatar-ph{font-size:15px}
.pointage-editor-title{display:flex;align-items:center;gap:12px}
.pointage-week-picker{position:relative;display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border:1px solid var(--line);border-radius:20px;background:var(--panel2);font-size:12.5px;font-weight:700;cursor:pointer}
.pointage-week-picker:hover{border-color:var(--accent)}
.pointage-week-picker input[type=date]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
@media (max-width:900px){
  .pointage-wrap{flex-direction:column}
  .pointage-workers{width:100%}
  .pointage-editor{width:100%}
}

@media print{
  .no-print{display:none !important}
  body{background:#fff}
  .wrap{padding:0;max-width:none}
  .sheet{display:flex;flex-wrap:wrap;gap:8mm;padding:10mm}
  .helmet-card{box-shadow:none;border:1px solid #bbb;page-break-inside:avoid}
  table.suivi-print{width:100%;border-collapse:collapse;font-size:11px}
  table.suivi-print th,table.suivi-print td{border:1px solid #ccc;padding:6px 9px;text-align:left}
  table.suivi-print th{background:#f0f0f0}
  /* Planning : grille seule, en paysage, sans défilement ni panneau de glisser-déposer */
  .planning-wrap{page:planning}
  .planning-chantiers,.pcell-plus{display:none !important}
  .planning-grid-wrap{max-height:none;overflow:visible;border:none}
  .planning-wrap + .hint{display:none}
  .planning-grid{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .app-shell{display:block}
}
@page planning{size:A4 landscape;margin:10mm}
#lignesTable input[name="lignes_designation[]"]{min-width:220px}
#lignesTable input[name="lignes_famille[]"],#lignesTable input[name="lignes_fabricant[]"],#lignesTable input[name="lignes_infos_diverses[]"]{min-width:130px}
.taux-actuel{display:flex;gap:24px;flex-wrap:wrap;margin-bottom:6px}
.taux-valeur{font-size:26px;font-weight:900}
.taux-form .row{align-items:flex-end}
.chantier-pastille{display:inline-block;width:14px;height:14px;border-radius:50%;flex:none}
.fiche-titre .chantier-pastille{margin-right:4px}
.chantier-fiche{max-width:760px}
.chantier-total td{font-weight:800;background:var(--panel2)}
.kpi .n.neg{color:var(--danger)}
.chantier-date{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.chantier-date input{width:130px}
.chantier-graphe{max-width:900px;margin:0 0 14px}
.chantier-ajout{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:16px}
.chantier-ajout .field{flex:1;min-width:220px;margin:0}
.chantier-note{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:10px;background:var(--panel2)}
.chantier-note-entete{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.chantier-note-texte{font-size:14px;line-height:1.5}
.chantier-note-pj{margin-top:8px}
.import-etapes{margin:10px 0 0;padding-left:20px;line-height:1.6}
.import-etapes li{margin-bottom:14px}
.import-etapes .btn{margin-top:8px}
.import-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px}
.import-erreurs{margin-top:16px;padding:12px 16px;border:1px solid var(--danger);border-radius:10px;background:color-mix(in srgb, var(--danger) 10%, transparent)}
.import-erreurs ul{margin:8px 0 0;padding-left:20px;font-size:14px}
.geo-fond{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);font-size:14px}
.geo-fond progress{flex:1;min-width:140px;max-width:320px}
.geo-fond-fini{border-color:var(--ok)}
.liste-sel-col{width:36px;text-align:center}
.liste-sel-col input{width:16px;height:16px;cursor:pointer}
.liste-compteur{font-size:13px;font-weight:700;color:var(--accent);align-self:center;margin-right:4px}
.liste-act{display:inline-flex;align-items:center;gap:6px}
.liste-act svg{width:16px;height:16px}
.liste-modal{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow:auto}
.liste-modal-box{width:100%;max-width:720px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.liste-modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.liste-modal-head h3{margin:0;font-size:17px}
.liste-modal-x{background:none;border:0;color:var(--muted);font-size:18px;cursor:pointer}
.liste-err{color:var(--danger);font-weight:700}.liste-ok{color:var(--ok);font-weight:700}
.liste-mail .field{margin-bottom:12px}
.liste-mail-dest input{width:100%;min-width:200px}
.liste-mail-bilan{margin-top:12px}
.liste-act[hidden],.liste-compteur[hidden]{display:none}
/* Filtre de période des tableaux (T67) : liste déroulante de périodes + calendrier */
.dt-period{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:20px;background:var(--panel2);height:36px}
.dt-period.active{border-color:var(--accent);background:var(--accent-soft)}
.dt-period-label{display:inline-flex;align-items:center;gap:8px;padding:0 6px 0 14px;height:100%;background:none;border:0;color:var(--text);font-size:13px;font-weight:700;cursor:pointer;font-family:inherit}
.dt-period-label svg{width:15px;height:15px;flex:none}
.dt-period-clear{background:none;border:0;color:var(--muted);cursor:pointer;padding:0 6px;font-size:12px}
.dt-period-clear:hover{color:var(--danger)}
.dt-period-calbtn{display:inline-flex;align-items:center;justify-content:center;height:100%;padding:0 12px;background:none;border:0;border-left:1px solid var(--line);color:var(--accent);cursor:pointer;border-radius:0 20px 20px 0}
.dt-period-calbtn svg{width:18px;height:18px}
.dt-period-menu{min-width:340px;padding:6px;max-height:420px}
.dt-period-col{width:100%;margin-bottom:6px}
.dt-period-item{display:flex;width:100%;align-items:baseline;justify-content:space-between;gap:12px;padding:9px 10px;background:none;border:0;border-radius:7px;color:var(--text);font-size:14px;text-align:left;cursor:pointer;font-family:inherit}
.dt-period-item span{white-space:nowrap}
.dt-period-item small{color:var(--muted);font-size:11.5px;white-space:nowrap}
.dt-period-item:hover{background:var(--panel2)}
.dt-period-item.selected{background:var(--accent-soft);color:var(--accent);font-weight:700}
.dt-period-cal{padding:0;max-height:none;overflow:visible;width:640px;max-width:calc(100vw - 32px)}
.dt-cal-mois{display:flex;flex-wrap:wrap}
.dt-cal-panneau{padding:14px 16px;min-width:290px;flex:1 1 290px}
.dt-cal-panneau+.dt-cal-panneau{border-left:1px solid var(--line)}
.dt-cal-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-weight:700}
.dt-cal-nav{background:none;border:0;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;padding:2px 8px;border-radius:6px}
.dt-cal-nav:hover{background:var(--panel2);color:var(--text)}
.dt-cal-grille{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}
.dt-cal-jour{font-size:12px;color:var(--muted);padding:4px 0}
.dt-cal-date{height:34px;border:0;border-radius:50%;background:none;color:var(--text);font-size:13.5px;cursor:pointer;font-family:inherit}
.dt-cal-date:hover{background:var(--panel2)}
.dt-cal-date.auj{outline:1.5px solid var(--accent);outline-offset:-2px}
.dt-cal-date.dans{background:var(--accent-soft);border-radius:0}
.dt-cal-date.debut,.dt-cal-date.fin{background:var(--accent);color:#fff}
.dt-cal-pied{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:10px 16px;border-top:1px solid var(--line)}
.dt-cal-resume{margin-right:auto;font-size:12.5px;color:var(--muted)}
/* Discussion de chantier (T63) */
.discussion .disc-fil{height:min(58vh,560px);overflow-y:auto;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);display:flex;flex-direction:column;gap:6px}
.disc-jour{text-align:center;margin:10px 0 4px}
.disc-jour span{display:inline-block;padding:3px 12px;border-radius:12px;background:var(--panel);border:1px solid var(--line);font-size:12px;color:var(--muted);font-weight:700}
.disc-msg{display:flex}.disc-msg.moi{justify-content:flex-end}
.disc-bulle{max-width:min(78%,560px);padding:8px 12px;border-radius:14px;background:var(--panel);border:1px solid var(--line);font-size:14px;line-height:1.45;word-wrap:break-word;overflow-wrap:anywhere}
.disc-msg.moi .disc-bulle{background:var(--accent-soft);border-color:transparent}
.disc-auteur{font-size:12px;font-weight:800;color:var(--accent);margin-bottom:2px}
.disc-texte{white-space:pre-wrap}
.disc-texte a{color:var(--accent)}
.disc-photo img{display:block;max-width:100%;max-height:300px;border-radius:10px;margin-bottom:4px}
.disc-fichier{display:flex;flex-direction:column;gap:1px;padding:8px 10px;margin-bottom:4px;border-radius:10px;background:var(--panel2);border:1px solid var(--line);text-decoration:none;color:var(--text)}
.disc-fichier-nom{font-weight:700;word-break:break-all}.disc-fichier-taille{font-size:12px;color:var(--muted)}
.disc-pied{display:flex;justify-content:flex-end;align-items:center;gap:8px;font-size:11px;color:var(--muted);margin-top:2px}
.disc-suppr{background:none;border:0;color:var(--muted);cursor:pointer;font-size:11px;padding:0 2px}
.disc-suppr:hover{color:var(--danger)}
.disc-plus{align-self:center;margin-bottom:6px}
.disc-saisie{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin-top:12px}
.disc-saisie textarea{flex:1;min-width:200px;resize:none;max-height:160px}
.disc-joindre{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);color:var(--muted);cursor:pointer;flex:none}
.disc-joindre:hover{color:var(--accent);border-color:var(--accent)}
.disc-joindre svg{width:20px;height:20px}
.disc-joindre input{display:none}
.disc-joint{flex:1 0 100%;display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
#discSourdine.active{border-color:var(--accent);color:var(--accent)}
@media (max-width:700px){.disc-bulle{max-width:88%}.discussion .disc-fil{height:60vh}}
.chantier-bandeau{display:flex;align-items:center;gap:12px;padding:0 14px 0 6px;margin-bottom:12px}
.chantier-bandeau .fiche-tabs{flex:1;flex-wrap:nowrap;overflow-x:auto;margin:0;scrollbar-width:thin}
.chantier-bandeau .fiche-tabs a{white-space:nowrap;padding:16px 16px}
.chantier-bandeau>.btn{flex:none}
.fiche-identite{display:flex;align-items:center;gap:10px;flex:none;max-width:300px;padding:6px 14px 6px 10px;border-right:1px solid var(--line);margin-right:4px}
.fiche-identite-txt{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.fiche-identite strong{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fiche-identite small{font-size:12px;font-weight:600;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fiche-identite small .pill{font-size:11px;padding:1px 8px;margin-left:4px;vertical-align:1px}
.fiche-identite .worker-avatar{width:38px;height:38px}
.fiche-identite-logo{flex:none;width:38px;height:38px;border-radius:10px;object-fit:contain;background:#fff;border:1px solid var(--line)}
.fiche-identite-ph{display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:var(--muted);background:var(--panel2)}
@media (max-width:700px){.fiche-identite-txt{display:none}.fiche-identite{padding-right:8px}}
/* Aperçu d'un chantier (T252) : chiffres clés avec jauge, blocs en deux colonnes */
/* Bandeau d'un chantier (T252) : étage du haut (retour, identité, Modifier, Actions) puis la ligne des onglets, dans une même carte */
.chantier-entete{padding:0;margin-bottom:12px;overflow:visible}
.chantier-entete-haut{display:flex;align-items:center;gap:12px;padding:12px 16px;flex-wrap:wrap}
.retour-icone{flex:none;width:38px;height:38px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:10px}
.retour-icone svg{width:20px;height:20px}
.chantier-entete-id{min-width:0;flex:1}
.chantier-entete-nom{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.chantier-entete-nom h1{margin:0;font-size:20px;line-height:1.2;overflow-wrap:anywhere}
.chantier-entete-ref{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.chantier-entete-actions{display:flex;align-items:center;gap:8px;flex:none}
.chantier-entete-onglets{display:flex;align-items:center;gap:8px;border-top:1px solid var(--line);padding-right:12px}
.chantier-entete .fiche-tabs{margin:0;padding:0 8px;flex:1;min-width:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
.chantier-entete-dispo{flex:none}
.chantier-entete .fiche-tabs a{white-space:nowrap;padding:12px 16px}
.menu-actions{position:relative}
.menu-actions summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.menu-actions summary::-webkit-details-marker{display:none}
.menu-actions summary svg{width:16px;height:16px}
.menu-actions-liste{position:absolute;right:0;top:calc(100% + 6px);z-index:40;min-width:250px;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:6px;box-shadow:0 8px 24px rgba(0,0,0,.25)}
.menu-actions-liste a{padding:9px 12px;border-radius:8px;color:var(--text);text-decoration:none;font-size:14px}
.menu-actions-liste a:hover{background:var(--panel2)}
.menu-actions-groupe{padding:8px 12px 4px;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
@media (max-width:640px){.chantier-entete-actions{width:100%;justify-content:flex-end}}
/* Tons de couleur de l'Aperçu : chaque carte et chaque chiffre clé a sa teinte (variable --ton) */
.ton-bleu{--ton:var(--brand-blue)}
.ton-orange{--ton:var(--brand-orange)}
.ton-vert{--ton:var(--brand-green)}
.ton-jaune{--ton:var(--brand-yellow);--ton-icone:#1a1f27}
.ton-rouge{--ton:var(--danger)}
.apercu-puce{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:color-mix(in srgb, var(--ton) 20%, transparent);color:var(--ton-icone, var(--ton))}
.apercu-puce svg{width:18px;height:18px}
.apercu-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:14px}
.apercu-kpi{display:flex;flex-direction:column;gap:6px;background:color-mix(in srgb, var(--ton) 7%, var(--panel));border:1px solid var(--line);border-top:4px solid var(--ton);border-radius:14px;padding:14px 18px 16px;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.apercu-kpi-tete{display:flex;align-items:center;justify-content:space-between;gap:8px}
.apercu-kpi-titre{font-size:13px;font-weight:700;color:var(--muted)}
.apercu-kpi-valeur{font-size:24px;line-height:1.15}
.apercu-kpi small{font-size:12px;color:var(--muted)}
.apercu-jauge{display:block;height:8px;border-radius:99px;background:color-mix(in srgb, var(--ton) 16%, var(--panel2));overflow:hidden}
.apercu-jauge>span{display:block;height:100%;border-radius:99px;background:var(--ton)}
.apercu-carte{border-top:3px solid var(--ton)}
.apercu-titre{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-left:20px}
.apercu-titre h2{margin:0;font-size:16px;flex:1;min-width:0}
.apercu-actions{display:flex;align-items:center;gap:8px;flex:none}
.apercu-edit{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);cursor:pointer}
.apercu-edit:hover{background:color-mix(in srgb, var(--ton) 18%, var(--panel2));color:var(--ton-icone, var(--text));border-color:var(--ton)}
.apercu-edit svg{width:16px;height:16px}
.apercu-grille{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:stretch}
.apercu-wrap{position:relative;min-width:0}
.apercu-wrap>.card{margin:0;height:100%}
.apercu-wrap.apercu-masquee{display:none}
.apercu-wrap.glisse{opacity:.4}
.apercu-poignee{position:absolute;top:26px;left:18px;z-index:2;width:18px;height:18px;padding:0;border:none;background:none;color:var(--muted);cursor:grab;font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center}
.apercu-poignee:hover{color:var(--text)}
.apercu-poignee:active{cursor:grabbing}
.apercu-client{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.apercu-client>div{display:flex;flex-direction:column;min-width:0}
.apercu-client small{color:var(--muted);font-size:12px}
.apercu-client a{color:inherit}
.apercu-coord{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14px}
.apercu-coord li,.apercu-adresse>div{display:flex;align-items:center;gap:8px;min-width:0;overflow-wrap:anywhere}
.apercu-coord svg,.apercu-adresse svg,.apercu-carte .btn svg{flex:none;width:16px;height:16px;color:var(--muted)}
.apercu-carte .btn svg{color:inherit;margin-right:4px;vertical-align:-3px}
.apercu-adresse{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.apercu-etiquette{font-size:12px;font-weight:700;color:var(--muted)}
.apercu-details{margin:0;display:flex;flex-direction:column}
.apercu-details>div{display:flex;justify-content:space-between;gap:16px;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.apercu-details>div:last-child{border-bottom:0}
.apercu-details dt{color:var(--muted)}
.apercu-details dd{margin:0;font-weight:600;text-align:right;overflow-wrap:anywhere}
.apercu-etiquettes{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.apercu-semaine{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.apercu-jour{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px;border-radius:10px;background:var(--panel2);color:var(--muted)}
.apercu-jour strong{font-size:18px;color:var(--muted)}
.apercu-jour small{font-size:11px}
.apercu-jour.occupe{background:var(--accent-soft);color:var(--text)}
.apercu-jour.occupe strong{color:var(--accent)}
.apercu-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.apercu-liste li{padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.apercu-liste li:last-child{border-bottom:0}
.apercu-liste small{color:var(--muted)}
.apercu-liste li>div{color:var(--muted);margin-top:2px}
.apercu-chiffres{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.apercu-chiffres>div{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-radius:10px;background:var(--panel2)}
.apercu-chiffres strong{font-size:22px}
.apercu-chiffres small{font-size:12px;color:var(--muted);text-align:center}
.apercu-chiffres .alerte{background:color-mix(in srgb, var(--danger) 14%, transparent)}
.apercu-chiffres .alerte strong{color:var(--danger)}
@media (max-width:1100px){.apercu-grille{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:760px){.apercu-grille{grid-template-columns:1fr}}
@media (max-width:640px){.apercu-kpi-valeur{font-size:22px}}
.chantier-rappel{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 18px;margin-bottom:14px}
.chantier-rappel h2{margin:0;font-size:19px}
.chantier-ref{font-size:13px;font-weight:700;color:var(--muted)}
.chantier-client{font-size:13px;color:var(--muted);margin-left:auto}
.onglet-nb{display:inline-block;margin-left:4px;font-size:11px;font-weight:800;color:var(--muted)}
.photos-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}
.photo-carte{display:flex;flex-direction:column;gap:4px;padding:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel2);cursor:pointer;text-align:left;font-family:inherit;color:var(--text)}
.photo-carte img{width:100%;height:150px;object-fit:cover;display:block}
.photo-carte span{padding:0 10px;font-size:12px;color:var(--muted)}
.photo-carte span:first-of-type{font-weight:700;color:var(--text);padding-top:6px}
.photo-carte span:last-child{padding-bottom:8px}
.photo-visionneuse{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.88);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:20px}
.photo-visionneuse img{max-width:min(92vw,1100px);max-height:78vh;border-radius:8px}
.photo-visionneuse .photo-legende{color:#fff;text-align:center;font-size:14px}
.photo-visionneuse button,.photo-visionneuse a{color:#fff}
.photo-visionneuse .photo-actions{display:flex;gap:16px;align-items:center}
/* Fil d'Ariane de l'en-tête (T68) */
.section-banner-fil{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;margin-left:10px;font-size:15px}
.section-banner-page + .section-banner-fil{margin-left:2px}
.section-banner-fil .fil-item{color:#181b20;text-decoration:none;max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.section-banner-fil a.fil-item:hover{text-decoration:underline}
.section-banner-fil .fil-courant{font-weight:800}
.section-banner-fil .fil-sep{opacity:.55}
@media (max-width:700px){.section-banner-fil{flex-basis:100%;margin-left:0}.section-banner-fil .fil-item{max-width:22ch}}
.rubriques .rub-barre{display:flex;gap:12px;align-items:center;margin-bottom:14px}
.rubriques .rub-barre input{flex:1}
.rubriques td{vertical-align:middle}
.rubriques td.row-actions{display:table-cell;text-align:right;white-space:nowrap}   /* une cellule du tableau ne doit jamais être en flex : les lignes se décalent */
.rubriques td.row-actions>*{vertical-align:middle;margin-left:4px}
.rub-ic{width:20px;height:20px;flex:none;color:var(--muted);display:inline-block;vertical-align:middle;margin-right:8px}
.rub-auto{color:var(--accent)}
.rubriques [hidden]{display:none !important}
.dt-period[hidden]{display:none}

/* ---------- Tableau de bord : onglets d'analyse (T59) ---------- */
.tdb-bandeau{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:0 14px;margin-bottom:14px}
.tdb-bandeau .fiche-tabs{margin:0}
.tdb-annee{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;color:var(--muted)}
.tdb-annee select{height:34px}
.an-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.an-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;min-width:0}
.an-span-2{grid-column:span 2}.an-span-3{grid-column:span 3}.an-span-4{grid-column:span 4}
@media (max-width:1100px){.an-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.an-span-3,.an-span-4{grid-column:span 2}}
@media (max-width:700px){.an-grid{grid-template-columns:minmax(0,1fr)}.an-span-2,.an-span-3,.an-span-4{grid-column:span 1}}
.an-card-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.an-card-head h3{margin:0;font-size:14px;font-weight:800}
.an-aide{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:1px solid var(--muted);border-radius:50%;font-size:10px;font-weight:800;color:var(--muted);cursor:help;flex:none}
.an-kpi{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.an-kpi-valeur{font-size:30px;font-weight:800;color:var(--accent)}
.an-kpi-unite{font-size:15px;font-weight:800;color:var(--accent)}
.an-kpi-total{font-size:16px;font-weight:800;color:var(--accent)}
.an-total{font-size:20px;font-weight:800;color:var(--accent);text-align:right;margin-bottom:6px}
.an-detail{margin-top:8px;font-size:12.5px;color:var(--muted)}
.an-chart-wrap{position:relative;width:100%}
.an-ring-wrap{position:relative}
.an-ring-centre{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;pointer-events:none;padding:0 22%}
.an-ring-centre strong{font-size:14px}
.an-ring-centre span{font-size:12.5px;color:var(--muted)}
.an-legende{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:5px;font-size:12.5px}
.an-legende li{display:flex;align-items:center;gap:8px}
.an-legende b{margin-left:auto;font-weight:700;color:var(--muted)}
.an-legende i{font-style:normal;font-weight:800;min-width:84px;text-align:right}
.an-pastille{width:10px;height:10px;border-radius:50%;flex:none;background:var(--muted)}
.an-c0{background:var(--accent)}.an-c1{background:var(--brand-green)}.an-c2{background:var(--brand-orange)}.an-c3{background:var(--brand-yellow)}.an-c4{background:var(--danger)}.an-c5{background:var(--muted)}.an-c6{background:var(--brand-blue)}.an-c7{background:var(--text)}
.an-couronnes{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;text-align:center}
.an-couronne .an-ring-centre{padding:0 24%}
.an-statuts{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px;font-size:12.5px}
.an-statuts div{display:flex;flex-direction:column;gap:3px}
.an-statuts b{font-size:13px}
.an-statuts-ligne{display:flex;flex-wrap:wrap;gap:6px 14px}
.an-statuts .warn{color:var(--brand-orange)}.an-statuts .accent{color:var(--accent)}.an-statuts .good{color:var(--ok)}.an-statuts .bad{color:var(--danger)}
.tdb-bandeau .fiche-tabs{flex-wrap:nowrap;overflow-x:auto;min-width:0}
.tdb-bandeau .fiche-tabs a{white-space:nowrap;padding:16px 14px}
.tdb-annee select{min-width:92px}

/* ---------- Champ de date commun : masque JJ/MM/AAAA, contrôle et calendrier (T72, assets/date-fr.js) ---------- */
.date-wrap{position:relative;display:block}
.date-wrap>input{padding-right:42px}
.date-cal-btn{position:absolute;top:0;right:0;height:100%;width:40px;display:flex;align-items:center;justify-content:center;background:none;border:0;border-left:1px solid var(--line);border-radius:0 10px 10px 0;color:var(--accent);cursor:pointer;padding:0}
.date-cal-btn:hover{background:var(--accent-soft)}
.date-cal-btn:disabled{opacity:.4;cursor:not-allowed}
.date-cal-btn svg{width:18px;height:18px}
.date-wrap>input.date-invalide{border-color:var(--danger);box-shadow:0 0 0 1px var(--danger) inset}
.date-erreur{margin-top:4px;font-size:12px;font-weight:600;color:var(--danger)}
.date-pop{position:fixed;z-index:1000;width:292px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:0 14px 40px rgba(0,0,0,.28);padding:12px}
.date-pop[hidden]{display:none}
.date-pop-tete{display:flex;align-items:center;gap:6px;margin-bottom:8px}
.date-pop-tete select{height:32px;padding:0 6px;font-size:13px;font-weight:700;width:auto}
.date-pop-mois{flex:1}
.date-pop-nav{flex:none;width:30px;height:30px;border:1px solid var(--line);border-radius:8px;background:var(--panel2);color:var(--text);font-size:16px;line-height:1;cursor:pointer}
.date-pop-nav:hover{border-color:var(--accent)}
.date-pop-grille{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}
.date-pop-jour{font-size:11px;font-weight:800;color:var(--muted);padding:4px 0}
.date-pop-date{height:32px;border:0;border-radius:8px;background:none;color:var(--text);font-size:13px;cursor:pointer;padding:0}
.date-pop-date:hover{background:var(--accent-soft)}
.date-pop-date.aujourdhui{box-shadow:0 0 0 1px var(--accent) inset}
.date-pop-date.choisie{background:var(--accent);color:#fff;font-weight:800}
.date-pop-pied{display:flex;justify-content:space-between;margin-top:8px}

/* Icône d'action directe dans un tableau (certificat joint à une formation, T73) */
.icon-link{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:1px solid var(--line);background:var(--panel2);color:var(--accent);text-decoration:none}
.icon-link:hover{border-color:var(--accent);background:var(--accent-soft)}
.icon-link svg{width:17px;height:17px}
.cert-cell{text-align:center;white-space:nowrap}
.cert-apercu-bloc{margin:4px 0 16px}
.cert-apercu-titre{display:flex;align-items:center;justify-content:space-between;gap:10px;font-weight:600;margin-bottom:8px}
.cert-apercu{display:block;width:100%;height:620px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
img.cert-apercu{height:auto;max-height:620px;object-fit:contain}

/* Copie interne d'un bon de commande (T74) */
.liste-copie-contacts,.copie-contacts{display:grid;gap:4px;max-height:150px;overflow:auto;margin-bottom:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
.liste-copie-contact,.copie-contact{display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}

/* Dépôt de fichier commun : glisser-déposer ou clic (assets/dropzone.js, T76) */
.dz{position:relative;display:block;border:2px dashed var(--line);border-radius:12px;padding:14px 16px;background:var(--panel2);cursor:pointer;transition:border-color .15s,background .15s}
.dz:hover,.dz:focus-visible{border-color:var(--accent);outline:none}
.dz.dz-actif{border-color:var(--accent);background:var(--accent-soft)}
.dz-invite{display:flex;align-items:center;gap:12px}
.dz-ico{display:flex;flex:none;width:34px;height:34px;align-items:center;justify-content:center;border-radius:50%;background:var(--accent-soft);color:var(--accent)}
.dz-ico svg{width:19px;height:19px}
.dz-txt{display:flex;flex-direction:column;gap:2px;font-size:14px;min-width:0}
.dz-sous{font-size:12px;color:var(--muted)}
.dz-input{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;pointer-events:none}
.dz-liste{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.dz-liste:not(:empty){margin-top:10px}
.dz-liste li{display:flex;align-items:center;gap:10px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel);font-size:13px}
.dz-nom{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.dz-taille{flex:none;color:var(--muted);font-size:12px}
.dz-retirer{flex:none;border:0;background:none;color:var(--muted);cursor:pointer;font-size:13px;padding:2px 6px;border-radius:6px}
.dz-retirer:hover{color:var(--danger);background:var(--panel2)}
.dz-erreur{margin-top:8px;font-size:12.5px;font-weight:600;color:var(--danger)}
.dz.dz-plein{border-style:solid;border-color:var(--accent)}
.dz-compact{padding:8px 10px;border-radius:10px}
.dz-compact .dz-ico{width:26px;height:26px}.dz-compact .dz-ico svg{width:15px;height:15px}
.dz-compact .dz-txt{font-size:12.5px}.dz-compact .dz-sous{display:none}
[data-dropzone-cible].dropzone-active{outline:2px dashed var(--accent);outline-offset:-4px;background:var(--accent-soft)}

/* Bouton Panier de l'en-tête, à gauche du bouton de thème, avec la pastille des articles et brouillons de commande (T77) */
.panier-btn{position:relative;flex:none;width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--panel2);color:var(--text);display:flex;align-items:center;justify-content:center;text-decoration:none}
.panier-btn:hover{border-color:var(--accent)}
.panier-btn svg{width:17px;height:17px;display:block}
.panier-badge{position:absolute;top:-7px;right:-7px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--danger);color:#fff;font-size:10.5px;font-weight:800;display:flex;align-items:center;justify-content:center;line-height:1;border:2px solid var(--panel)}
.panier-btn.vide .panier-badge{display:none}
.carte-chantier-barre{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
.carte-chantier-barre .field{flex:1;min-width:220px;margin-bottom:0}
.carte-chantier-barre .field[hidden]{display:none}

/* Page Commander (T80) : choix du chantier, onglets Saisie libre / Catalogues / Articles, saisie libre et articles à commander */
.commander-haut{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:14px 18px;margin-bottom:14px}
.commander-projet{display:flex;flex-direction:column;gap:6px;min-width:260px}
.commander-bienvenue{font-size:15px;font-weight:800}
.commander-projet select{max-width:340px}
.commander-onglets-haut{display:flex;gap:2px;flex-wrap:wrap;align-items:center}
.commander-onglets-haut a{padding:12px 18px;font-weight:700;font-size:14px;color:var(--muted);text-decoration:none;border-bottom:3px solid transparent}
.commander-onglets-haut a:hover{color:var(--text)}
.commander-onglets-haut a.active{color:var(--text);border-bottom-color:var(--accent)}
.commander-onglets-haut a.commander-panier-lien{margin-left:12px;color:var(--accent)}
.libre-grille{display:grid;grid-template-columns:minmax(200px,1fr) minmax(260px,1.6fr) minmax(170px,210px);gap:20px;align-items:start}
@media (max-width:1200px){.libre-grille{grid-template-columns:1fr}}
.libre-natures{display:flex;gap:4px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.libre-nature{cursor:pointer}
.libre-nature input{position:absolute;opacity:0;pointer-events:none}
.libre-nature span{display:block;padding:10px 16px;font-weight:700;font-size:14px;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-1px}
.libre-nature input:checked + span{color:var(--text);border-bottom-color:var(--accent)}
.libre-nature input:focus-visible + span{outline:2px solid var(--accent);outline-offset:2px}
.libre-ligne{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media (max-width:700px){.libre-ligne{grid-template-columns:1fr}}
.libre-droite{display:flex;flex-direction:column;gap:10px;padding-top:6px}
/* Location (T133) : du … au …, durée, prestations complémentaires cochables */
.libre-dates{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}
.libre-duree{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:12px;align-items:end}
.libre-presta{margin-top:14px}
.libre-presta-titre{font-size:15px;font-weight:700;margin-bottom:8px}
.libre-presta-ligne{display:grid;grid-template-columns:minmax(0,1fr) 28px minmax(0,150px);gap:12px;align-items:center;padding:6px 0;cursor:pointer}
.libre-presta-ligne input[type=checkbox]{width:22px;height:22px}
.libre-presta-montant{display:flex;align-items:stretch}
.libre-presta-libre{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,130px) 40px;gap:12px;align-items:center;padding:6px 0}
#libreAjouterPresta{margin-top:6px}
.libre-presta-montant input{border-radius:9px 0 0 9px;min-width:0}
.libre-presta-eur{display:inline-flex;align-items:center;padding:0 10px;background:var(--panel2);border:1px solid var(--line);border-left:0;border-radius:0 9px 9px 0;font-size:13px;color:var(--muted)}
.commander-articles .panier-groupe{margin-bottom:14px}

/* Fiche en lecture seule (assets/mode-lecture.js, T71) : les champs désactivés ressemblent à du texte, les boutons d'édition sont masqués */
.fiche-modifier{display:inline-flex;align-items:center;gap:6px}
.fiche-modifier svg{width:15px;height:15px}
.fiche-lecture input:disabled,.fiche-lecture textarea:disabled,.fiche-lecture select:disabled{opacity:1;background:transparent;border-color:transparent;box-shadow:none;color:var(--text);-webkit-text-fill-color:var(--text);cursor:default;padding-left:0}
.fiche-lecture select:disabled{appearance:none;-webkit-appearance:none;background-image:none}
.fiche-lecture input[type=checkbox]:disabled,.fiche-lecture input[type=radio]:disabled{opacity:.8}
.fiche-lecture input:disabled::placeholder,.fiche-lecture textarea:disabled::placeholder{color:transparent;-webkit-text-fill-color:transparent;opacity:0}
.fiche-lecture button:disabled,.fiche-lecture .date-cal-btn,.fiche-lecture .dz,.fiche-lecture [data-lecture-masque]{display:none !important}
.fiche-lecture .date-wrap>input{padding-right:0}

/* Modules d'un profil (T56) */
.modules-panneau{display:grid;gap:10px}
.module-section{border:1px solid var(--line);border-radius:10px;padding:8px 12px 10px;margin:0;min-width:0}
.module-section legend{padding:0 6px}
.module-titre{display:flex;align-items:center;gap:8px;font-weight:800;font-size:13px;cursor:pointer}
.module-sous{display:flex;align-items:center;gap:8px;font-size:13px;padding:3px 0 3px 4px;cursor:pointer}
.cat-autour{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}

.signature-detail{margin-top:6px;font-size:12px}
.signature-detail summary{cursor:pointer;color:var(--accent)}
.signature-svg{display:block;width:220px;max-width:100%;height:auto;margin-top:6px;border:1px solid var(--line);border-radius:8px;background:var(--panel2);color:var(--text)}

/* Fiche de document à onglets (T82) : contenu à gauche, colonne « Actions » repliable à droite, documents associés en dessous */
.fiche-doc-grid{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:start}
.fiche-doc-grid:not(:has(.fiche-doc-actions)){grid-template-columns:minmax(0,1fr)}
.fiche-doc-main{min-width:0;display:flex;flex-direction:column;gap:16px}
.fiche-doc-main>.card{margin:0}
.fiche-doc-rappel .fiche-doc-montant{margin-left:auto;font-weight:800;font-size:18px}
.fiche-doc-actions{width:272px;position:sticky;top:12px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:6px 0 10px;transition:width .15s ease}
.fda-head{display:flex;align-items:center;justify-content:space-between;padding:10px 16px 8px;border-bottom:1px solid var(--line)}
.fda-head h3{margin:0;font-size:18px}
.fda-toggle{width:32px;height:32px;border-radius:50%;border:0;background:none;color:var(--text);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.fda-toggle:hover{background:var(--accent-soft);color:var(--accent)}
.fda-toggle svg{width:18px;height:18px;transition:transform .15s ease}
.fiche-doc-actions.reduit .fda-toggle svg{transform:rotate(180deg)}
.fda-list{list-style:none;margin:0;padding:6px 8px;display:flex;flex-direction:column;gap:2px}
.fda-list form{margin:0}
.fda-item{width:100%;display:flex;align-items:center;gap:12px;padding:8px 10px;border:0;border-radius:10px;background:none;color:var(--text);font:inherit;font-size:14px;text-align:left;text-decoration:none;cursor:pointer}
.fda-item:hover{background:var(--accent-soft)}
.fda-ic{flex:none;width:36px;height:36px;border-radius:50%;border:1.5px solid var(--accent);color:var(--accent);display:inline-flex;align-items:center;justify-content:center}
.fda-ic svg{width:18px;height:18px}
.fda-danger .fda-ic{border-color:var(--danger);color:var(--danger)}
.fiche-doc-actions.reduit{width:64px}
.fiche-doc-actions.reduit .fda-head{justify-content:center;padding:8px 0}
.fiche-doc-actions.reduit .fda-head h3,.fiche-doc-actions.reduit .fda-lbl{display:none}
.fiche-doc-actions.reduit .fda-item{justify-content:center;padding:6px 0}
.fiche-doc-assoc h3{margin:0 0 10px}
tr.fda-ligne{cursor:pointer}
tr.fda-ligne:hover td{background:var(--accent-soft)}
@media (max-width:900px){.fiche-doc-grid{grid-template-columns:minmax(0,1fr)}.fiche-doc-actions,.fiche-doc-actions.reduit{position:static;width:auto;justify-self:stretch}.fiche-doc-actions.reduit .fda-list{flex-direction:row;flex-wrap:wrap}}
@media print{.fiche-doc-actions{display:none}}

/* Saisie assistée (assets/saisie-assistee.js) : liste déroulante de suggestions sous un champ (société, commune, adresse) */
.sa-liste{position:absolute;left:0;right:0;top:100%;z-index:90;margin-top:4px;max-height:300px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.25)}
.sa-liste[hidden]{display:none}
.sa-item{display:flex;flex-direction:column;gap:2px;padding:9px 12px;cursor:pointer;border-bottom:1px solid var(--line)}
.sa-item:last-child{border-bottom:0}
.sa-item small{color:var(--muted);font-size:12px}
.sa-item:hover,.sa-item.actif{background:var(--accent-soft)}
/* Fiche d'un engin (T138) : bandeau d'identité et d'onglets dans la fenêtre, panneaux d'un même formulaire */
.engin-panel[hidden]{display:none}
/* Rapport d'un engin (T141) */
.engin-rapport{max-width:1000px;margin:0 auto;padding:0 18px 30px}
.engin-rapport-tete{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:2px solid var(--line);padding-bottom:12px;margin-bottom:6px}
.engin-rapport h1{margin:0 0 4px;font-size:24px}
.engin-rapport h2{margin:22px 0 8px;font-size:16px;border-bottom:1px solid var(--line);padding-bottom:4px}
.engin-rapport-sous{color:var(--muted);font-size:13px}
.engin-rapport-logo{max-height:56px;max-width:180px;object-fit:contain;background:#fff;padding:4px;border-radius:6px}
.engin-rapport-photos{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.engin-rapport-photos img{height:130px;max-width:200px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.engin-rapport table.suivi-print{width:100%;border-collapse:collapse;font-size:13px}
.engin-rapport table.suivi-print th,.engin-rapport table.suivi-print td{border:1px solid var(--line);padding:6px 9px;text-align:left;vertical-align:top}
.engin-rapport-id th{width:18%;background:var(--panel2)}
@media print{.engin-rapport{max-width:none;padding:0}.engin-rapport h2{page-break-after:avoid}.engin-rapport table{page-break-inside:auto}.engin-rapport tr{page-break-inside:avoid}}
/* Adresse de facturation d'un client (T148) : icône bureau */
.ico-facturation{display:inline-flex;vertical-align:-3px;color:var(--accent)}
[data-pour-type][hidden]{display:none !important}
/* Pied de tableau (T153) : nombre d'éléments affichés, éléments par page, exports, pagination — assets/data-table.js */
.dt-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;margin-top:12px;padding:10px 2px 0;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}
.dt-footer-left{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}
.dt-count{font-weight:600;color:var(--text)}
.dt-size{width:auto;min-width:0;height:32px;padding:0 28px 0 12px;border-radius:999px;border:1px solid var(--line);background-color:var(--panel2);color:var(--text);font-size:12.5px;font-weight:700;font-family:inherit;cursor:pointer}
.dt-size:hover,.dt-size:focus{border-color:var(--accent);outline:none}
.dt-exportbtn{display:inline-flex;align-items:center;gap:6px}
.dt-filterdropdown.dt-up{top:auto;bottom:calc(100% + 6px);min-width:260px}
.dt-exportitem{width:100%;background:none;border:0;text-align:left;font-family:inherit}
.dt-exportsep{margin:6px 8px 2px;padding-top:8px;border-top:1px solid var(--line);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.dt-pager{display:flex;align-items:center;gap:6px}
.dt-pagebtn{min-width:32px;height:32px;padding:0 8px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);font-size:13px;font-weight:700;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.dt-pagebtn:hover:not(:disabled){border-color:var(--accent);color:var(--text)}
.dt-pagebtn.current{background:var(--accent);border-color:var(--accent);color:#fff}
.dt-pagebtn:disabled{opacity:.4;cursor:default}
@media print{.dt-footer{display:none !important}}
/* Étiquettes d'un client (T155) : puces dans le champ de saisie */
.etiquettes{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:46px;padding:5px 10px;border:1px solid var(--line);border-radius:11px;background:var(--panel2)}
.etiquettes input{flex:1;min-width:180px;border:0;background:transparent;box-shadow:none;padding:6px 0}
.etiquettes-liste{display:contents}
.etiquette-puce{display:inline-flex;align-items:center;gap:4px}
.etiquette-retirer{border:0;background:none;color:inherit;cursor:pointer;font-size:15px;line-height:1;padding:0 2px}
.fiche-lecture .etiquettes input,.fiche-lecture .etiquette-retirer{display:none}
/* Fiche en lecture : les aides à la saisie (texte sous un champ) n'apparaissent que dans la page de modification */
.fiche-lecture .field .hint,.fiche-lecture .hint-edition{display:none}
.fiche-lien{margin-top:4px;font-size:13px}.fiche-lien a{color:var(--accent);font-weight:600;text-decoration:none}.fiche-lien a:hover{text-decoration:underline}   /* lien vers la fiche liée (client d'un chantier, chantier d'un engin) : visible aussi en lecture */
/* Fiche client (T157) : blocs Identité / Coordonnées / Adresse / Informations légales ; en lecture, présentation compacte et champs vides masqués */
.fiche-bloc{margin:0 0 20px}
.fiche-bloc-titre{margin:0 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.fiche-lecture .champ-vide{display:none !important}
.fiche-compacte.fiche-lecture .fiche-bloc{margin-bottom:16px}
.fiche-compacte.fiche-lecture .field{margin-bottom:8px}
.fiche-compacte.fiche-lecture .field>label{margin-bottom:1px;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.fiche-compacte.fiche-lecture input:disabled,.fiche-compacte.fiche-lecture select:disabled{min-height:0;height:auto;padding-top:2px;padding-bottom:2px;font-size:15px;font-weight:600}
.fiche-lecture .etiquettes{border:0;background:none;padding:0;min-height:0}
.fiche-compacte.fiche-lecture .row{gap:4px 36px}
.fiche-compacte.fiche-lecture .row>.field{flex-grow:0 !important;min-width:190px}
/* Fenêtres et formulaires (T158) : champs aérés et de même apparence (hauteur, bordure, flèche des listes), lignes qui passent à la ligne plutôt que de se serrer */
.modal-box .row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 20px}   /* colonnes de même largeur, retour à la ligne si la fenêtre se rétrécit */
.modal-box .row>*{min-width:0}
.modal-box .fiche-compacte .row{display:flex;gap:10px;flex-wrap:wrap}   /* fiches en blocs (T182) : mêmes lignes que sur les fiches client et fournisseur */
.modal-box .fiche-compacte .row>*{flex:1;min-width:0}
.modal-overlay.modal-page.open .modal-box.fiche-page{max-width:1400px;margin:0 auto;padding:22px;background:none;border:0;box-shadow:none}   /* fiche d'un enregistrement ouverte en page : pas de bandeau de fenêtre, un cadre carte sous l'onglet */
.modal-box.fiche-page>form:has(.engin-panel):not(:has(.engin-panel:not([hidden]))){display:none}   /* onglet hors formulaire (Documents) : pas de cadre vide */
.modal-box.fiche-page>form{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:18px;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.modal-box .field{margin-bottom:16px}
.modal-box .btnbar{margin-top:8px}
.field select,.field input[type=text],.field input[type=email],.field input[type=tel],.field input[type=url],.field input[type=number],.field input[type=password],.field input[type=date],.field input[type=search]{height:42px}
.field select{appearance:none;-webkit-appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b95a5' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;background-size:14px}
.field .etiquettes input{height:auto}
.fiche-lecture .field select{background-image:none}

/* Situation d'un client (T159) : mêmes cartes que le tableau de bord, sans poignée de déplacement */
.dash-kpi-card--fixe .dash-kpi-head{padding-left:0}
.situation-grille{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}

/* Icônes sobres des boutons (cartes) et marqueurs de carte : remplacent les emoji (T162) */
.btn .btn-ico{display:inline-flex;vertical-align:-3px;margin-right:6px}
.btn .btn-ico svg{width:16px;height:16px}
.marker-pastille{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--panel);color:var(--accent);border:2px solid var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.5)}
.marker-pastille svg{width:15px;height:15px}
.ico-pj svg{width:15px;height:15px;vertical-align:-3px;color:var(--muted)}

/* Interrupteur activé / désactivé et listes d'interlocuteurs d'un établissement fournisseur (T171) */
.interrupteur{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-weight:700;position:relative}
.interrupteur input{position:absolute;opacity:0;width:0;height:0}
.interrupteur-piste{width:46px;height:26px;border-radius:13px;background:var(--line);position:relative;transition:background .15s;flex:none}
.interrupteur-piste::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--text);transition:left .15s}
.interrupteur input:checked+.interrupteur-piste{background:var(--accent)}
.interrupteur input:checked+.interrupteur-piste::after{left:23px}
.interrupteur input:focus-visible+.interrupteur-piste{outline:2px solid var(--accent);outline-offset:2px}
.interrupteur input:disabled+.interrupteur-piste{opacity:.5}
.interlocuteur-ligne{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.interlocuteur-ligne select{flex:1;min-width:0}
.zone-inactive{opacity:.45}
.agence-desactivee{margin:4px 0 10px}
.fiche-compacte.fiche-lecture input:disabled::placeholder,.fiche-compacte.fiche-lecture textarea:disabled::placeholder{color:var(--muted);-webkit-text-fill-color:var(--muted);opacity:1}   /* le tiret des champs vides, malgré la règle qui masque les exemples en lecture */
.fiche-lecture .etiquettes-liste:empty::before{content:'—';color:var(--muted)}   /* aucune étiquette : un tiret, comme les autres champs vides */

/* Téléphone : fiches en blocs (T187) — champs pleine largeur (les largeurs en ligne deviendraient des hauteurs dans une colonne) ; bandeau d'onglets sur deux lignes (identité et boutons, puis onglets défilants) */
@media (max-width:640px){
  .fiche-compacte .row>*{flex:none !important;min-width:0 !important;width:100%}
  .chantier-bandeau{flex-wrap:wrap;padding:8px 10px;row-gap:4px}
  .chantier-bandeau .fiche-tabs{order:3;flex:1 0 100%}
}

/* Profil en lecture seule (T191) : pas de bouton « + Créer … » (la page de création est de toute façon refusée) */
.lecture-seule a.btn[href*="?new=1"]{display:none}

/* Réglages > Analytique (T195) : le bouton « Retirer » garde sa taille à côté des champs d'une imputation */
.analytique-ligne>.btn{flex:none;align-self:flex-start;min-height:40px}
.analytique-ligne>.analytique-utilisee{flex:none;align-self:center;min-width:92px;text-align:center}
.analytique-ligne input[readonly]{opacity:.75;cursor:not-allowed}

/* Fiche d'un chantier (T201) : sélecteurs ouvrant une fenêtre (client, adresse, responsable) */
.selecteur{display:flex;align-items:center;gap:6px}
.selecteur>input[type=text]{flex:1;min-width:0}
.selecteur>input[readonly]:not(:disabled){cursor:pointer;background:var(--panel2)}
.selecteur .selecteur-bouton{flex:none;min-height:40px;padding:0 12px}
.selecteur .selecteur-plus{width:40px;padding:0;font-size:20px;line-height:1}
.selecteur .selecteur-effacer{width:40px;padding:0;font-size:18px;line-height:1}
.fiche-lecture .selecteur-bouton{display:none}
.selection-liste{display:flex;flex-direction:column;gap:6px;max-height:min(52vh,420px);overflow-y:auto}
.selection-ligne{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);color:var(--text);cursor:pointer;font:inherit}
.selection-ligne:hover,.selection-ligne:focus-visible{border-color:var(--accent);background:var(--accent-soft)}
.selection-texte{display:flex;flex-direction:column;gap:2px;min-width:0}
.selection-texte small{color:var(--muted);font-size:12.5px}
.selection-vide{padding:14px 4px}
/* Page ouverte dans une fenêtre (cadre d'un autre formulaire, ?fenetre=1) : ni menu ni bandeau */
body.fenetre .sidebar,body.fenetre .section-banner,body.fenetre .chantier-bandeau{display:none}   /* le bandeau d'onglets (lien vers la page complète) n'a pas lieu d'être dans une fenêtre de création */
body.fenetre .wrap{max-width:none;padding:14px 18px}

/* Champs qui ouvrent une liste au clic : flèche comme une liste déroulante ; pastilles de couleur à la place du sélecteur système (T201) */
.selecteur>input[readonly]:not(:disabled){padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238a93a3' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
.pastilles{display:flex;flex-wrap:wrap;gap:10px;align-items:center;min-height:40px}
.pastille{position:relative;display:inline-flex;cursor:pointer;margin:0}
.pastille input,.pastille input:disabled{position:absolute;opacity:0 !important;width:100%;height:100%;margin:0;cursor:pointer}   /* le bouton radio natif reste invisible, aussi en lecture (champ désactivé) */
.pastille span{display:block;width:28px;height:28px;border-radius:50%;background:var(--c);box-shadow:inset 0 0 0 1px rgba(0,0,0,.18);transition:transform .12s,box-shadow .12s}
.pastille:hover span{transform:scale(1.12)}
.pastille input:checked+span{box-shadow:inset 0 0 0 1px rgba(0,0,0,.18),0 0 0 3px var(--panel),0 0 0 5px var(--c)}
.pastille input:focus-visible+span{outline:2px solid var(--accent);outline-offset:3px}
.fiche-lecture .pastille:has(input[type=radio]:not(:checked)){display:none}
.pastille-perso span.arc-en-ciel{background:conic-gradient(#e74c3c,#f2a61c,#f2f013,#34be82,#3498db,#8e44ad,#e74c3c)}
.pastille-perso .pastille-couleur{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;opacity:0;cursor:pointer;z-index:2}
.pastille-perso>input[type=radio]{pointer-events:none}
.fiche-lecture .pastille{cursor:default}

/* Taux de facturation d'un chantier (liste des chantiers, T203) : barre d'avancement et valeur */
.barre-taux{display:flex;align-items:center;gap:8px;min-width:130px}
.barre-taux-piste{flex:1;height:8px;border-radius:999px;background:var(--line);overflow:hidden}
.barre-taux-rempli{display:block;height:100%;border-radius:999px;background:var(--accent)}
.barre-taux-rempli.depasse{background:var(--dept-chantier)}
.barre-taux-texte{flex:none;min-width:44px;text-align:right;font-weight:700;font-size:13px}

/* Fiche d'un chantier : quatre lignes aérées (identité, adresse et responsable, travaux et notes, classement), la hauteur laisse la place aux gros boutons d'action dessous */
.chantier-lignes{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:20px 28px;align-items:start}
.fiche-compacte .chantier-lignes>.field{margin:0;min-width:0}
.chantier-lignes>.c-2{grid-column:span 2}.chantier-lignes>.c-3{grid-column:span 3}.chantier-lignes>.c-4{grid-column:span 4}
.chantier-lignes>.c-5{grid-column:span 5}.chantier-lignes>.c-6{grid-column:span 6}.chantier-lignes>.c-7{grid-column:span 7}
.fiche-lecture .edition-seule{display:none}   /* couleur et état carte : le point du bandeau suffit en lecture */
@media (max-width:1180px){.chantier-lignes{grid-template-columns:repeat(6,minmax(0,1fr))}.chantier-lignes>.field{grid-column:span 3 !important}}
@media (max-width:700px){.chantier-lignes{grid-template-columns:minmax(0,1fr)}.chantier-lignes>.field{grid-column:auto !important}}
.chantier-lignes textarea{min-height:0;resize:vertical}
.fiche-compacte.chantier-grille.fiche-lecture textarea{min-height:0 !important;height:auto;resize:none;field-sizing:content}


/* Nom d'une fiche liée, cliquable en lecture à la place de la valeur (client d'un chantier, chantier d'un engin) : en modification on retrouve le sélecteur */
.nom-lien{display:none;font-size:15px;font-weight:600;color:var(--accent);text-decoration:none}
.nom-lien:hover,.nom-lien:focus-visible{text-decoration:underline}
.fiche-lecture .field:has(>.nom-lien) .selecteur,.fiche-lecture .field:has(>.nom-lien)>select{display:none}
.fiche-lecture .nom-lien{display:inline-block}

/* Point de couleur devant le statut d'un chantier (mêmes couleurs que les pastilles de statut) */
.statut-champ{display:flex;align-items:center;gap:10px}
.statut-champ select{flex:1;min-width:0}
.point-etat{flex:none;width:11px;height:11px;border-radius:50%;background:var(--muted)}
.point-etat.good{background:#39d98a}
.point-etat.warn{background:#ffb140}
.point-etat.bad{background:#ff6b6b}

/* Date, heure et position de prise d'une photo faite avec l'application (T210) */
.photo-prise{display:block;font-size:11.5px;color:var(--muted)}
.photo-prise-ligne{margin-top:4px;font-size:13px;color:#fff;text-align:center}
.photo-lieu,.disc-prise-lieu{color:var(--accent);text-decoration:none}
.photo-lieu:hover,.disc-prise-lieu:hover{text-decoration:underline}
.disc-prise{margin-top:4px;font-size:11.5px;color:var(--muted)}

/* Liste de références pour les appels d'offres (chantiers_references.php, T213) */
.references-bloc{margin-top:18px}
.references-titre{margin:0 0 8px;padding-bottom:6px;border-bottom:1px solid var(--line);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.references-nb{font-weight:600;text-transform:none;letter-spacing:0}
.references-rapide{margin-bottom:10px;align-items:center}
.references-colonnes{display:flex;flex-wrap:wrap;gap:8px 22px}
.references-colonnes label{display:flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer}
.btn.disabled{opacity:.45;pointer-events:none}
.photo-cellule{min-width:190px}
.photo-cellule .photo-actuelle{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.photo-cellule .photo-actuelle img{width:56px;height:56px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}

/* Mode support de la plateforme (T237) : bandeau fixe en haut de toutes les pages de l'application, impossible à manquer */
.bandeau-support{position:sticky;top:0;z-index:3000;padding:9px 16px;background:var(--brand-orange);color:#1a1f27;font-size:13.5px;font-weight:600;text-align:center}
.bandeau-support a{color:#1a1f27;text-decoration:underline;margin-left:10px;font-weight:700}
/* Pages d'authentification : champ mot de passe avec bouton « afficher », aide sous le champ, liens secondaires */
.champ-mdp{position:relative}
.champ-mdp input{padding-right:84px}
.champ-mdp .afficher-mdp{position:absolute;right:6px;top:50%;transform:translateY(-50%);padding:5px 10px;font-size:12px;border:1px solid var(--line);border-radius:7px;background:var(--panel2);color:var(--text);cursor:pointer}
.authbox .lien-secondaire{display:block;margin-top:14px;text-align:center;font-size:13px;color:var(--muted)}
.authbox .lien-secondaire a{color:var(--accent);text-decoration:none;font-weight:600}
.authbox .lien-secondaire a:hover{text-decoration:underline}
.authbox .aide-mdp{font-size:12px;color:var(--muted);margin:-6px 0 14px}
.authbox .code-secret{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;letter-spacing:.06em;padding:10px 12px;border:1px dashed var(--line);border-radius:9px;background:var(--panel2);word-break:break-all;text-align:center}
.authbox .qr-code{display:flex;justify-content:center;margin:14px 0}
.authbox .qr-code img{background:#fff;padding:8px;border-radius:10px}
.authbox .champ-code input{text-align:center;font-size:22px;letter-spacing:.35em}

/* Administration de la plateforme SMART TP (T237) */
body.pf .brand-logo{height:26px;width:auto}
body.pf .brand-logo-light{display:none}
:root[data-theme="light"] body.pf .brand-logo-dark{display:none}
:root[data-theme="light"] body.pf .brand-logo-light{display:inline-block}
.pf-bar{display:flex;align-items:center;gap:22px;padding:10px 22px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50;flex-wrap:wrap}
.pf-marque{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);font-weight:700}
.pf-marque span{font-size:12px;letter-spacing:.08em;text-transform:uppercase;padding:3px 8px;border-radius:6px;background:var(--brand-gradient);color:#1a1f27}
.pf-nav{display:flex;gap:4px;flex:1;flex-wrap:wrap}
.pf-nav a{padding:7px 13px;border-radius:8px;color:var(--muted);text-decoration:none;font-weight:600;font-size:14px}
.pf-nav a:hover{background:var(--panel2);color:var(--text)}
.pf-nav a.actif{background:var(--accent-soft);color:var(--accent)}
.pf-compte{display:flex;gap:14px;font-size:13px}
.pf-compte a{color:var(--muted);text-decoration:none}
.pf-compte a:hover{color:var(--text)}
.pf-contenu{max-width:1200px;margin:0 auto;padding:22px}
.pf-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:18px}
.pf-kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.pf-kpi .valeur{font-size:28px;font-weight:800;line-height:1.1}
.pf-kpi .libelle{font-size:12.5px;color:var(--muted);margin-top:4px}
.pf-alertes ul{margin:0;padding-left:18px;line-height:1.8}
.pf-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px;align-items:start}
.pf-barre{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.pf-barre input[type=search],.pf-barre select{max-width:260px}
.pf-actions-ligne{display:flex;gap:6px;flex-wrap:wrap}
.pf-zone-danger{border-color:rgba(255,107,107,.45)}
.deux-colonnes{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 14px}


/* Audits QSE (T242) */
.audit-rubrique h2 { display: flex; align-items: center; gap: 10px; }
.audit-point { border-top: 1px solid var(--line); padding: 12px 0; display: grid; gap: 8px; }
.audit-point:first-of-type { border-top: 0; }
.audit-libelle { font-weight: 600; }
.audit-choix { display: flex; flex-wrap: wrap; gap: 8px; }
.audit-option { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border: 1px solid var(--line); border-radius: 999px; cursor: pointer; background: var(--panel); }
.audit-option input { margin: 0; }
.audit-option:has(input:checked) { font-weight: 700; border-color: var(--accent); background: var(--accent-soft); }
.audit-option-conforme:has(input:checked) { border-color: var(--ok); }
.audit-option-non_conforme:has(input:checked) { border-color: var(--danger); }
.audit-photo { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.audit-vignette { height: 64px; width: auto; max-width: 120px; object-fit: cover; border-radius: 6px; border: 1px solid var(--line); }
.audit-retirer { font-size: 13px; color: var(--muted); }
.audit-resultat { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.audit-commentaire { color: var(--muted); }
.audit-action-form { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line); }

/* Fiche info riverains (T243) */
.riverains-lien { display: flex; gap: 14px; align-items: flex-end; flex-wrap: wrap; }
.riverains-lien .engin-qr { width: 110px; height: 110px; }
.riverains-suite { display: flex; gap: 8px; align-items: center; margin-top: 8px; flex-wrap: wrap; }
.riverains-suite input { flex: 1; min-width: 180px; }

/* Écrans de connexion en deux volets : visuel SMART TP à gauche, formulaire à droite */
.auth-split{--visuel-fond:#0b1722;--visuel-texte:#eef3f7;--visuel-doux:rgba(238,243,247,.72);position:relative;min-height:100vh;display:grid;grid-template-columns:minmax(380px,1.08fr) minmax(430px,1fr);background:var(--bg)}
.auth-visuel{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:center;padding:96px 64px 72px;color:var(--visuel-texte);
  background:radial-gradient(760px 520px at 0% 0%,color-mix(in srgb,var(--brand-blue) 55%,transparent),transparent 62%),radial-gradient(640px 460px at 100% 100%,color-mix(in srgb,var(--brand-orange) 30%,transparent),transparent 64%),radial-gradient(420px 320px at 85% 8%,color-mix(in srgb,var(--brand-green) 24%,transparent),transparent 62%),var(--visuel-fond)}
.auth-visuel::before,.auth-visuel::after{content:"";position:absolute;width:520px;height:46px;border-radius:6px;transform:rotate(-34deg);opacity:.16}
.auth-visuel::before{right:-150px;bottom:150px;background:var(--brand-yellow);box-shadow:0 70px 0 var(--brand-orange),-40px 140px 0 var(--brand-blue),-80px 210px 0 var(--brand-green)}
.auth-visuel::after{display:none}
.auth-visuel-contenu{position:relative;z-index:1;max-width:520px}
.auth-visuel-logo{height:92px;width:auto;margin:0 0 34px -6px}
.auth-visuel h2{font-size:34px;line-height:1.15;margin:0 0 14px;letter-spacing:-.01em}
.auth-visuel-intro{font-size:16px;line-height:1.55;color:var(--visuel-doux);margin:0 0 32px}
.auth-visuel-intro{margin-bottom:26px}
/* Présentation animée du panneau gauche : une diapositive à la fois (maquette animée + titre + phrase), défilement automatique, pause au survol */
.auth-diapos{--duree:6500ms}
.auth-diapos-scene{display:grid}
.auth-diapo{grid-area:1/1;opacity:0;visibility:hidden;transform:translateY(14px);transition:opacity .5s ease,transform .5s ease,visibility 0s .5s}
.auth-diapo.is-actif{opacity:1;visibility:visible;transform:none;transition:opacity .5s ease,transform .5s ease}
.auth-diapo h3{font-size:19px;margin:20px 0 4px}
.auth-diapo p{margin:0;font-size:14px;line-height:1.5;color:var(--visuel-doux);max-width:460px}
.auth-diapos-nav{display:flex;gap:10px;margin-top:22px}
.auth-diapos-point{flex:1;max-width:64px;height:18px;padding:0;border:0;background:none;cursor:pointer;display:flex;align-items:center}
.auth-diapos-point i{display:block;width:100%;height:4px;border-radius:2px;background:rgba(255,255,255,.2);position:relative;overflow:hidden}
.auth-diapos-point i::after{content:"";position:absolute;inset:0;transform:scaleX(0);transform-origin:left;background:var(--brand-yellow)}
.auth-diapos-point.is-actif i::after{animation:auth-progres var(--duree) linear forwards}
.auth-diapos.est-pause .auth-diapos-point.is-actif i::after{animation-play-state:paused}
.auth-diapos-point:focus-visible{outline:2px solid var(--brand-yellow);outline-offset:2px;border-radius:4px}
@keyframes auth-progres{to{transform:scaleX(1)}}
.av-carte{max-width:460px;min-height:188px;padding:18px 20px;border-radius:16px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);box-shadow:0 18px 40px rgba(0,0,0,.28);backdrop-filter:blur(6px)}
.av-tete{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;font-size:14px}
.av-chip{padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:600;background:rgba(242,240,19,.16);color:var(--brand-yellow)}
.av-chip-bleu{background:rgba(47,134,166,.3);color:#bfe6f5}.av-chip-vert{background:rgba(52,190,130,.25);color:#a8f0cf}.av-chip-orange{background:rgba(236,93,43,.28);color:#ffc7b3}
.av-barres{display:flex;align-items:flex-end;gap:12px;height:112px}
.av-barres>div{flex:1;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:6px}
.av-barres i{display:block;width:100%;height:var(--h);border-radius:6px 6px 2px 2px;background:linear-gradient(var(--brand-yellow),var(--brand-orange));transform:scaleY(0);transform-origin:bottom}
.av-barres small{font-size:11px;color:var(--visuel-doux)}
.auth-diapo.is-actif .av-barres i{animation:av-croit .8s cubic-bezier(.2,.8,.2,1) forwards}
.auth-diapo.is-actif .av-barres>div:nth-child(2) i{animation-delay:.1s}.auth-diapo.is-actif .av-barres>div:nth-child(3) i{animation-delay:.2s}.auth-diapo.is-actif .av-barres>div:nth-child(4) i{animation-delay:.3s}.auth-diapo.is-actif .av-barres>div:nth-child(5) i{animation-delay:.4s}
@keyframes av-croit{to{transform:scaleY(1)}}
.av-courbe{display:block;width:100%;height:auto;margin-bottom:14px;overflow:visible}
.av-trait-fond{fill:none;stroke:rgba(255,255,255,.12);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.av-trait{fill:none;stroke:var(--brand-green);stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1}
.auth-diapo.is-actif .av-trait{animation:av-trace 1.6s ease-out .1s forwards}
@keyframes av-trace{to{stroke-dashoffset:0}}
.av-jauge{height:8px;border-radius:4px;background:rgba(255,255,255,.12);overflow:hidden}
.av-jauge i{display:block;height:100%;width:68%;border-radius:4px;background:var(--brand-blue);transform:scaleX(0);transform-origin:left}
.auth-diapo.is-actif .av-jauge i{animation:av-jauge 1.4s ease-out .2s forwards}
@keyframes av-jauge{to{transform:scaleX(1)}}
.av-rang{display:flex;align-items:center;gap:12px;padding:9px 0;font-size:14px;border-top:1px solid rgba(255,255,255,.08);opacity:0;transform:translateX(-10px)}
.av-rang:first-of-type,.av-tete+.av-rang{border-top:0}
.av-coche{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--brand-green);color:#0b1722;transform:scale(0)}
.auth-diapo.is-actif .av-rang{animation:av-entre .5s ease forwards;animation-delay:var(--d)}
.auth-diapo.is-actif .av-coche{animation:av-pop .35s ease forwards;animation-delay:calc(var(--d) + .25s)}
@keyframes av-entre{to{opacity:1;transform:none}}
@keyframes av-pop{60%{transform:scale(1.25)}to{transform:scale(1)}}
.av-fl{height:10px;border-radius:5px;background:rgba(255,255,255,.14);margin:10px 0;width:100%}.av-fl-court{width:62%}
.av-sceau{display:inline-flex;align-items:center;gap:8px;margin-top:8px;padding:7px 12px;border-radius:10px;font-size:13px;font-weight:600;background:rgba(236,93,43,.2);color:#ffd5c6;opacity:0;transform:scale(.85)}
.auth-diapo.is-actif .av-sceau{animation:av-sceau .5s cubic-bezier(.2,1.4,.4,1) .9s forwards}
@keyframes av-sceau{to{opacity:1;transform:none}}
.av-mobile{display:flex;align-items:center;gap:18px}
.av-tel{flex:none;width:92px;height:150px;padding:20px 10px 10px;border-radius:18px;border:2px solid rgba(255,255,255,.35);display:flex;flex-direction:column;gap:9px;overflow:hidden}
.av-tel i{display:block;height:26px;border-radius:7px;background:rgba(255,255,255,.16);transform:translateY(40px);opacity:0}
.av-tel i.av-court{width:70%}
.auth-diapo.is-actif .av-tel i{animation:av-monte .6s ease forwards}
.auth-diapo.is-actif .av-tel i:nth-child(2){animation-delay:.2s}.auth-diapo.is-actif .av-tel i:nth-child(3){animation-delay:.4s}
@keyframes av-monte{to{transform:none;opacity:1}}
.av-sync{display:flex;align-items:center;gap:10px;font-size:13.5px;line-height:1.4}
.av-point{flex:none;width:10px;height:10px;border-radius:50%;background:var(--brand-green);box-shadow:0 0 0 0 rgba(52,190,130,.6)}
.auth-diapo.is-actif .av-point{animation:av-pulse 1.6s ease-out infinite}
@keyframes av-pulse{to{box-shadow:0 0 0 14px rgba(52,190,130,0)}}
@media (prefers-reduced-motion:reduce){
  .auth-diapo,.auth-diapo.is-actif{transition:none;transform:none}
  .av-barres i,.av-jauge i,.av-coche,.av-tel i{transform:none;opacity:1;animation:none!important}
  .av-rang,.av-sceau{opacity:1;transform:none;animation:none!important}
  .av-trait{stroke-dashoffset:0;animation:none!important}
  .auth-diapos-point.is-actif i::after{animation:none;transform:scaleX(1)}
}
.auth-bande{position:absolute;left:0;right:0;bottom:0;height:6px;display:flex}
.auth-bande i{flex:1}
.auth-bande i:nth-child(1){background:var(--brand-yellow)}.auth-bande i:nth-child(2){background:var(--brand-orange)}.auth-bande i:nth-child(3){background:var(--brand-blue)}.auth-bande i:nth-child(4){background:var(--brand-green)}
.auth-retour{position:absolute;z-index:3;top:22px;left:26px;display:inline-flex;align-items:center;gap:6px;padding:8px 16px 8px 10px;border-radius:999px;font-size:14px;font-weight:600;text-decoration:none;color:#fff;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);backdrop-filter:blur(6px)}
.auth-retour:hover{background:rgba(255,255,255,.2)}
.auth-formulaire{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 32px 28px;gap:22px}
.auth-split .authbox{max-width:460px;padding:44px 40px 34px;border-radius:20px;box-shadow:0 24px 70px rgba(0,0,0,.22)}
.auth-split .auth-logo{display:none}
.auth-split .authbox h1{font-size:26px;text-align:left;margin-bottom:6px}
.auth-split .authbox .sub{text-align:left;font-size:14px;margin-bottom:26px}
.auth-legal{display:flex;flex-wrap:wrap;gap:6px 18px;justify-content:center;font-size:12.5px;color:var(--muted)}
.auth-legal a{color:var(--muted);text-decoration:none}
.auth-legal a:hover{color:var(--text);text-decoration:underline}
@media (max-width:920px){
  .auth-split{grid-template-columns:1fr}
  .auth-visuel{display:none}
  .auth-split .auth-logo{display:flex}
  .auth-retour{color:var(--text);background:var(--panel);border-color:var(--line);backdrop-filter:none}
  .auth-formulaire{padding:76px 18px 24px;justify-content:flex-start}
  .auth-split .authbox{padding:32px 24px 26px}
  .auth-split .authbox h1,.auth-split .authbox .sub{text-align:center}
}
.mentions{display:grid;grid-template-columns:220px 1fr;gap:6px 16px;margin:0 0 8px}
.mentions dt{font-weight:700;color:var(--muted)}
.mentions dd{margin:0}
@media (max-width:600px){.mentions{grid-template-columns:1fr}}

/* Document émis (T247) : champs figés */
fieldset.sans-cadre{border:0;margin:0;padding:0;min-width:0}
form.verrouille input:disabled,form.verrouille select:disabled,form.verrouille textarea:disabled{opacity:.85}
