:root{
  --primary:#1B4F8A;--primary-dark:#0F2F52;--primary-light:#EBF2FA;--primary-mid:#2E75B6;
  --accent:#E8A838;--accent-light:#FFF3D6;
  --success:#1E6B3A;--success-light:#D5F0E0;
  --danger:#C00000;--danger-light:#FFE0E0;
  --warning:#B45309;--warning-light:#FEF3C7;
  --purple:#6B2D8B;--purple-light:#EAD1FF;
  --gray-900:#1A1A2E;--gray-700:#404040;--gray-500:#666;--gray-300:#CCC;
  --gray-100:#F4F6F9;--gray-50:#FAFBFC;--white:#FFF;
  --sidebar-w:250px;--topbar-h:58px;
  --radius:10px;--radius-sm:6px;--radius-lg:16px;
  --shadow:0 2px 12px rgba(27,79,138,.10);--shadow-lg:0 8px 32px rgba(27,79,138,.15);
  --font:"DM Sans","Segoe UI",-apple-system,BlinkMacSystemFont,sans-serif;
  --t:.18s ease;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:var(--font);color:var(--gray-900);background:var(--gray-100);font-size:14px;-webkit-font-smoothing:antialiased;}
a{color:inherit;text-decoration:none;}
button{font-family:inherit;cursor:pointer;}
select,input,textarea{font-family:inherit;}
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:var(--gray-300);border-radius:10px;}

/* ---------- Topbar ---------- */
.topbar{height:var(--topbar-h);background:var(--primary-dark);color:#fff;display:flex;align-items:center;padding:0 20px;gap:14px;position:sticky;top:0;z-index:100;box-shadow:var(--shadow);}
.topbar .brand{font-weight:700;font-size:16px;display:flex;align-items:center;gap:8px;}
.topbar .brand small{font-weight:400;opacity:.65;font-size:11px;}
.topbar .spacer{flex:1;}
.topbar .authzone{display:flex;align-items:center;gap:8px;font-size:13px;}
.hamburger{display:none;background:transparent;border:none;color:#fff;font-size:18px;}

/* ---------- Layout ---------- */
.layout{display:flex;align-items:stretch;min-height:calc(100vh - var(--topbar-h));}
.sidebar{width:var(--sidebar-w);flex-shrink:0;background:#fff;border-right:1px solid var(--gray-100);padding:12px 10px;position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));overflow-y:auto;}
.grp-label{font-size:11px;letter-spacing:.06em;color:var(--gray-500);font-weight:700;padding:14px 20px 6px;text-transform:uppercase;}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 12px;margin:1px 0;color:var(--gray-700);font-size:13.5px;font-weight:500;cursor:pointer;border-radius:8px;transition:var(--t);}
.nav-group{margin-bottom:2px;}
.nav-group-head{display:flex;align-items:center;gap:9px;width:100%;padding:11px 12px 7px;background:none;border:none;color:var(--gray-500);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;font-family:inherit;transition:var(--t);}
.nav-group-head:hover{color:var(--primary);}
.nav-group-chevron{margin-left:auto;font-size:9px;opacity:.6;transition:var(--t);}
.nav-group-body{display:block;}
.nav-item.nav-sub{padding-left:30px;font-size:13px;}
.nav-item:hover{background:var(--gray-50);}
.nav-item.active{background:var(--primary);color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(27,79,138,.25);}
.nav-item .ic{width:18px;text-align:center;}
.main{flex:1;padding:22px;min-width:0;}

/* ---------- Composants génériques ---------- */
.card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:16px;}
.page-head{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:16px;}
.page-head h1{font-size:19px;color:var(--primary-dark);}
.page-head .sub{color:var(--gray-500);font-size:12px;}
.btn{border:none;border-radius:var(--radius-sm);padding:8px 15px;font-size:13px;font-weight:600;transition:var(--t);}
.btn-primary{background:var(--primary);color:#fff;}
.btn-primary:hover{background:var(--primary-mid);}
.btn-ghost{background:var(--gray-100);color:var(--gray-700);}
.btn-ghost:hover{background:var(--gray-300);}
.btn-sm{padding:5px 10px;font-size:12px;}
.btn[disabled]{opacity:.4;cursor:not-allowed;}
.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:10.5px;font-weight:700;}
.badge-primary{background:var(--primary-light);color:var(--primary-dark);}
.badge-accent{background:var(--accent-light);color:#7a5200;}
.badge-danger{background:var(--danger-light);color:var(--danger);}
.badge-success{background:var(--success-light);color:var(--success);}
.badge-warning{background:var(--warning-light);color:var(--warning);}
.hint{font-size:11.5px;color:var(--gray-500);background:var(--gray-50);border-radius:8px;padding:8px 12px;margin-top:10px;}
.info-line{background:var(--primary-light);border-left:4px solid var(--primary);padding:8px 12px;border-radius:6px;font-size:12.5px;color:var(--primary-dark);margin-bottom:12px;}
.warn-line{background:var(--warning-light);border-left:4px solid var(--warning);padding:8px 12px;border-radius:6px;font-size:12px;color:#6b4a00;margin-bottom:12px;}
.empty-state{text-align:center;color:var(--gray-500);padding:50px 20px;font-size:13px;}
.empty-state .em{font-size:34px;display:block;margin-bottom:8px;}

/* ---------- Tableaux ---------- */
table.simple{width:100%;border-collapse:collapse;font-size:13px;}
table.simple thead th{background:var(--gray-50);text-align:left;padding:9px 11px;border-bottom:2px solid var(--gray-100);font-size:11.5px;color:var(--gray-700);cursor:pointer;user-select:none;}
table.simple tbody td{padding:8px 11px;border-bottom:1px solid var(--gray-100);}
table.simple tbody tr:hover td{background:var(--primary-light);}
.filter-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center;}
.filter-select,.filter-input{border:1px solid var(--gray-300);border-radius:var(--radius-sm);padding:7px 9px;font-size:12.5px;}
.filter-input{flex:1;min-width:160px;}
.total-line{margin-top:10px;font-size:12px;color:var(--gray-500);}

.res-row{display:flex;align-items:center;gap:10px;padding:10px 6px;border-bottom:1px solid var(--gray-100);font-size:12.5px;flex-wrap:wrap;}
.res-row:last-child{border-bottom:none;}
.res-row .rr-main{flex:1;min-width:200px;}
.res-row .rr-nom{font-weight:700;}
.res-row .rr-meta{color:var(--gray-500);font-size:11.5px;}

/* ---------- Kanban ---------- */
.kanban{display:flex;gap:12px;overflow-x:auto;padding-bottom:10px;}
.kanban-col{flex:0 0 220px;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:75vh;}
.kanban-col-head{padding:10px 12px;font-size:12px;font-weight:700;border-bottom:2px solid var(--gray-100);display:flex;justify-content:space-between;}
.kanban-col-body{flex:1;overflow-y:auto;padding:8px;min-height:60px;}
.kanban-col-body.drop-hover{background:var(--primary-light);}
.kanban-card{background:var(--gray-50);border:1px solid var(--gray-100);border-radius:8px;padding:8px 9px;margin-bottom:8px;font-size:11.5px;cursor:grab;}
.kanban-card .kc-cat{font-size:9.5px;color:var(--primary);font-weight:700;}
.kanban-card .kc-nom{font-weight:700;margin:2px 0;}
.kanban-card .kc-loc{color:var(--gray-500);font-size:10.5px;}

/* ---------- Modal ---------- */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;align-items:center;justify-content:center;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:var(--radius-lg);width:480px;max-width:92vw;max-height:88vh;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;overflow:hidden;}
.modal.wide{width:680px;}
.modal.xwide{width:min(1080px, 72vw);max-width:97vw;}
.modal.plein-ecran-mobile{width:min(700px, 80vw);max-width:97vw;}
@media (max-width:640px){
  .modal.plein-ecran-mobile{width:100vw;height:100vh;max-width:100vw;max-height:100vh;border-radius:0;}
  .modal.plein-ecran-mobile .modal-body{flex:1;padding:0;touch-action:pinch-zoom pan-x pan-y;overflow:auto;}
}

/* ---------- Formulaire de mission modernisé ---------- */
.mform-section{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--gray-400);font-weight:700;margin:0 0 16px;display:flex;align-items:center;gap:8px;}
.mform-section::after{content:'';flex:1;height:1px;background:var(--gray-100);}
.mform-field{margin-bottom:16px;}
.mform-field label{display:block;font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:5px;}
.mform-hint{font-size:11.5px;color:var(--gray-400);margin-top:4px;}
.mform-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.mform-tag{display:inline-flex;align-items:center;gap:6px;background:var(--primary-light,#EEF4FF);color:var(--primary-dark);font-size:12px;font-weight:600;padding:5px 6px 5px 12px;border-radius:999px;}
.mform-tag button{background:none;border:none;color:var(--primary-dark);opacity:.6;cursor:pointer;font-size:14px;line-height:1;padding:2px;border-radius:50%;display:flex;}
.mform-tag button:hover{opacity:1;background:rgba(0,0,0,.06);}
.mform-dropzone{border:2px dashed var(--gray-200);border-radius:14px;padding:22px 16px;text-align:center;cursor:pointer;transition:border-color .15s, background .15s;}
.mform-dropzone:hover, .mform-dropzone:focus-visible{border-color:var(--primary);background:var(--primary-light,#EEF4FF);outline:none;}
.mform-dropzone .icon{font-size:26px;display:block;margin-bottom:6px;opacity:.5;}
.mform-dropzone .txt{font-size:12.5px;color:var(--gray-400);}
.mform-filerow{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--gray-50);border-radius:10px;margin-top:8px;font-size:12.5px;}
.mform-filerow a{color:var(--text);text-decoration:none;font-weight:500;}
.mform-filerow button{background:none;border:none;color:var(--gray-400);cursor:pointer;font-size:15px;}
.mform-filerow button:hover{color:var(--danger, #DC2626);}
.mform-actionbar{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;}
.mform-actionbar .btn{border-radius:10px;}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:15px 20px;border-bottom:1px solid var(--gray-100);flex-shrink:0;}
.modal-title{font-weight:700;font-size:14.5px;color:var(--primary-dark);}
.modal-close{background:transparent;border:none;font-size:18px;color:var(--gray-500);}
.modal-body{padding:16px 20px;overflow-y:auto;flex:1;}
.modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:13px 20px;border-top:1px solid var(--gray-100);flex-shrink:0;}
.form-group{margin-bottom:13px;}
.form-label{display:block;font-size:12px;font-weight:600;color:var(--gray-700);margin-bottom:5px;}
.form-input,.form-select,.form-textarea{width:100%;border:1px solid var(--gray-300);border-radius:var(--radius-sm);padding:8px 10px;font-size:13px;font-family:inherit;}
.form-row{display:flex;gap:10px;}
.form-row>div{flex:1;}
.file-row{display:flex;align-items:center;gap:8px;background:var(--gray-50);border-radius:var(--radius-sm);padding:7px 9px;font-size:12px;margin-top:5px;}
.file-row .fname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.section-divider{border-top:1px dashed var(--gray-300);margin:14px 0;padding-top:12px;}
.section-divider h4{font-size:12px;color:var(--primary-dark);margin-bottom:8px;text-transform:uppercase;letter-spacing:.03em;}

/* ---------- Toast ---------- */
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--gray-900);color:#fff;padding:11px 20px;border-radius:999px;font-size:13px;opacity:0;pointer-events:none;transition:all .25s ease;z-index:2000;box-shadow:var(--shadow-lg);}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ---------- Dashboard tiles ---------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;}
.tile{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;cursor:pointer;transition:var(--t);}
.tile:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px);}
.tile .ti-ic{font-size:26px;margin-bottom:8px;}
.tile .ti-nb{font-size:24px;font-weight:700;color:var(--primary-dark);}
.tile .ti-lbl{font-size:12px;color:var(--gray-500);}

@media (max-width:900px){
  .hamburger{display:inline-block;}
  .sidebar{position:fixed;left:0;z-index:200;transform:translateX(-100%);transition:var(--t);box-shadow:var(--shadow-lg);}
  .sidebar.open{transform:translateX(0);}
}
