:root{--bg:#f3f4f6;--panel:#fff;--text:#1f2937;--muted:#6b7280;--line:#e5e7eb;--accent:#111827;--danger:#b91c1c;--warning:#92400e;--success:#166534}
*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text)}.topbar{height:64px;background:#111827;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 28px}.brand{font-weight:800;font-size:21px}.brand span{font-weight:400;color:#cbd5e1}.topbar nav a{color:#e5e7eb;text-decoration:none;margin-left:20px}.container{max-width:1500px;margin:0 auto;padding:28px}.page-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.page-title h1{margin:0}.page-title p{margin:6px 0 0;color:var(--muted)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;margin:18px 0 28px}.cards.compact{grid-template-columns:repeat(3,minmax(180px,260px))}.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:0 1px 2px rgba(0,0,0,.04)}.card span{display:block;color:var(--muted);font-size:13px;margin-bottom:6px}.card strong{font-size:29px}.danger-card strong{color:var(--danger)}.warning-card strong{color:var(--warning)}.link-card{text-decoration:none;color:inherit}.panel{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-bottom:24px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;min-width:900px}th,td{padding:11px 12px;border-bottom:1px solid var(--line);text-align:left;font-size:13px;white-space:nowrap}th{background:#f9fafb;color:#4b5563;position:sticky;top:0}tr:hover td{background:#fafafa}.filters,.bulk-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}input,select,button{font:inherit}input,select{padding:9px 10px;border:1px solid #d1d5db;border-radius:9px;background:#fff}.primary,.secondary,.button{border:0;border-radius:9px;padding:10px 14px;text-decoration:none;cursor:pointer}.primary{background:#111827;color:#fff}.secondary{background:#e5e7eb;color:#111827}.badge{display:inline-block;padding:4px 8px;border-radius:999px;background:#eef2f7;font-size:11px}.flash{padding:12px 14px;border-radius:10px;margin-bottom:14px}.flash.success{background:#dcfce7;color:#166534}.flash.warning{background:#fef3c7;color:#92400e}.flash.danger{background:#fee2e2;color:#991b1b}.login-card{max-width:420px;margin:90px auto;background:#fff;padding:30px;border-radius:16px;border:1px solid var(--line);box-shadow:0 6px 24px rgba(0,0,0,.07)}.login-card form{display:grid;gap:10px}.login-card button{margin-top:8px}.link-button{border:0;background:none;color:#b91c1c;cursor:pointer;padding:0}@media(max-width:700px){.topbar{padding:0 14px}.topbar nav a{margin-left:10px;font-size:13px}.container{padding:16px}.cards.compact{grid-template-columns:1fr}.page-title{align-items:flex-start;gap:12px;flex-direction:column}}

.link-card{transition:transform .12s ease,box-shadow .12s ease}.link-card:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.08)}.table-link{display:block;color:inherit;text-decoration:none;font-weight:500}.table-link:hover{text-decoration:underline}.empty-state{padding:24px;color:var(--muted)}

/* V1.3 - séparation claire entre interventions et référentiel Matrice */
.muted-note {
  margin: -4px 0 24px;
  color: #667085;
  font-size: 0.92rem;
}
.card small {
  display: block;
  margin-top: 6px;
  color: #667085;
  font-size: 0.78rem;
  font-weight: 500;
}
.filter-panel { margin-bottom: 18px; }
.filter-form {
  display: flex;
  align-items: end;
  gap: 12px;
  flex-wrap: wrap;
}
.filter-form label { min-width: 320px; }
.filter-form input { width: 100%; }

/* V1.4 - séparation Affectation / Qualité Planning */
.success-card strong{color:var(--success)}
.matrix-source-card strong{color:#1d4ed8}
.planning-quality{grid-template-columns:repeat(4,minmax(180px,1fr))}
.coverage-card strong{color:#1f2937}
.progress{height:8px;background:#e5e7eb;border-radius:999px;margin-top:12px;overflow:hidden}
.progress-bar{height:100%;background:#166534;border-radius:999px;min-width:0}
.important-note{background:#fff;border:1px solid var(--line);border-left:4px solid #1d4ed8;border-radius:10px;padding:12px 14px;margin-top:-10px}
.badge-ok{background:#dcfce7;color:#166534;font-weight:700}
.badge-ko{background:#fee2e2;color:#991b1b;font-weight:700}
@media(max-width:900px){.planning-quality{grid-template-columns:repeat(2,minmax(160px,1fr))}}
@media(max-width:600px){.planning-quality{grid-template-columns:1fr}}

/* V1.5 - traitement rapide des affectations */
.flash.info{background:#dbeafe;color:#1e40af}
.section-heading{display:flex;align-items:flex-end;justify-content:space-between;margin:8px 0 10px}
.section-heading h2{margin:0}.section-heading p{margin:5px 0 0;color:var(--muted);font-size:13px}
.grid-summary-panel{max-height:360px}.grid-summary-table{min-width:760px}.actions-cell{display:flex;align-items:center;gap:12px}.mini-button{padding:6px 9px;font-size:12px}.inline-link{display:inline;font-size:12px;color:#1d4ed8}.sticky-bulk{position:sticky;top:8px;z-index:20;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px;box-shadow:0 4px 16px rgba(0,0,0,.08)}.selection-counter{min-width:175px;color:#4b5563}.selection-counter strong{color:#111827;font-size:18px;margin-right:4px}.sticky-bulk select{min-width:360px;max-width:560px}
@media(max-width:700px){.sticky-bulk{position:static}.sticky-bulk select{min-width:100%;width:100%}.actions-cell{align-items:flex-start;flex-direction:column}}

/* V1.6 - informations métier utiles à l'affectation */
.search-wide{min-width:430px}
.assignment-table{min-width:1450px}
.cell-wrap{white-space:normal;min-width:180px;max-width:320px;line-height:1.35}
.technician-picker{display:flex;flex-direction:column;gap:4px;min-width:430px;max-width:650px;flex:1}
.technician-picker select{width:100%;min-width:0;max-width:none}
.technicien-info{font-size:12px;color:var(--muted);padding-left:3px}
.grid-summary-table td:nth-child(4){white-space:normal;min-width:220px}
@media(max-width:800px){.search-wide{min-width:100%;width:100%}.technician-picker{min-width:100%;width:100%}}

/* V1.7 - confirmation entièrement en français */
.modal-fr[hidden]{display:none}
.modal-fr{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}
.modal-fr-backdrop{position:absolute;inset:0;background:rgba(17,24,39,.55)}
.modal-fr-dialog{position:relative;width:min(560px,100%);max-height:85vh;overflow:auto;background:#fff;border-radius:16px;border:1px solid var(--line);box-shadow:0 24px 70px rgba(0,0,0,.25);padding:24px}
.modal-fr-dialog h2{margin:0 0 16px}
.modal-fr-content{line-height:1.5;color:#374151}
.modal-fr-content ul{margin:8px 0 16px;padding-left:22px}
.modal-fr-technicien{background:#f3f4f6;border-radius:10px;padding:10px 12px;font-weight:700;color:#111827}
.modal-fr-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
.modal-fr-actions button:disabled{opacity:.65;cursor:wait}
.error-page-fr{max-width:650px;margin:80px auto;background:#fff;border:1px solid var(--line);border-radius:16px;padding:30px;box-shadow:0 8px 28px rgba(0,0,0,.06)}
.error-page-fr h1{margin-top:0}

/* V1.10 - sélection de la journée depuis l'accueil */
.dashboard-title{align-items:flex-start}
.dashboard-date-form{margin-top:8px}
.dashboard-date-form label{display:block;color:var(--muted);font-size:12px;font-weight:600;margin-bottom:5px}
.dashboard-date-controls{display:flex;align-items:center;gap:7px}
.dashboard-date-controls select{min-width:155px;font-weight:700;color:#111827;background:#fff}
.date-nav-button{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;padding:0;font-size:18px;font-weight:700}
.date-nav-button.disabled{opacity:.35;cursor:default;pointer-events:none}
@media(max-width:700px){.dashboard-title{align-items:stretch}.dashboard-date-controls select{flex:1}}

/* V1.11 - gestion des utilisateurs et droits */
.main-nav{display:flex;align-items:center;gap:18px}.main-nav a{margin-left:0!important}.nav-user{padding-left:14px;border-left:1px solid rgba(255,255,255,.25);color:#cbd5e1;font-size:13px;white-space:nowrap}
.users-stats{grid-template-columns:repeat(5,minmax(150px,1fr));margin-top:0}.user-create-panel{padding:20px;overflow:visible}.panel-heading h2{margin:0}.panel-heading p{margin:5px 0 18px;color:var(--muted);font-size:13px}.user-create-form{display:grid;grid-template-columns:1.1fr 1.5fr 1.2fr 1.3fr auto;gap:12px;align-items:end}.user-create-form label{display:flex;flex-direction:column;gap:6px}.user-create-form label>span{font-size:12px;font-weight:700;color:#4b5563}.user-create-form input,.user-create-form select{width:100%}.rights-help{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 18px}.rights-help>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 15px}.rights-help strong{display:block;margin-bottom:4px}.rights-help span{font-size:12px;color:var(--muted);line-height:1.45}.users-table{min-width:1250px}.users-table-wrap{overflow:auto}.user-edit-cell{padding:7px 10px!important}.user-edit-form{display:grid;grid-template-columns:1.4fr 1.25fr 110px 145px 1.45fr 105px;gap:9px;align-items:center}.user-edit-form input,.user-edit-form select{width:100%;min-width:0}.active-toggle{display:flex;align-items:center;gap:7px;white-space:nowrap}.active-toggle input{width:auto}.user-date{font-size:12px;color:var(--muted);white-space:nowrap}.user-disabled{opacity:.62}.current-user-badge{margin-left:6px;background:#dbeafe;color:#1d4ed8}.users-table th:nth-child(1){min-width:160px}
@media(max-width:1050px){.users-stats{grid-template-columns:repeat(2,minmax(150px,1fr))}.user-create-form{grid-template-columns:1fr 1fr}.rights-help{grid-template-columns:1fr}.main-nav{gap:10px}.nav-user{display:none}}
@media(max-width:650px){.users-stats{grid-template-columns:1fr}.user-create-form{grid-template-columns:1fr}.main-nav a{font-size:12px}}

/* V1.12 - calendrier de sélection de la journée */
.dashboard-date-controls input[type="date"]{
  min-width:170px;
  height:38px;
  font-weight:700;
  color:#111827;
  background:#fff;
  cursor:pointer;
}
.dashboard-date-controls input[type="date"]::-webkit-calendar-picker-indicator{
  cursor:pointer;
}
.calendar-empty-note{margin-top:0;margin-bottom:22px}
@media(max-width:700px){
  .dashboard-date-controls input[type="date"]{flex:1;min-width:0;width:100%}
}

/* V1.13 - performance, pagination et confirmation détaillée */
.compact-flash{margin-top:-4px;margin-bottom:14px}
.pagination{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin:14px 0 22px;color:#4b5563}
.pagination span{font-size:13px}
.modal-selection-table-wrap{max-height:310px;overflow:auto;border:1px solid var(--line);border-radius:10px;margin:10px 0 16px}
.modal-selection-table{min-width:0;width:100%;border-collapse:collapse}
.modal-selection-table th,.modal-selection-table td{padding:8px 10px;font-size:12px;white-space:nowrap;border-bottom:1px solid var(--line)}
.modal-selection-table th{position:sticky;top:0;background:#f9fafb;z-index:1}
.modal-selection-table tr:last-child td{border-bottom:0}
@media(max-width:700px){.pagination{justify-content:stretch}.pagination .button{flex:1;text-align:center}.pagination span{width:100%;text-align:center}}


/* ===== V1.16 : écran bloquant pendant les traitements ===== */
.traitement-overlay[hidden] { display: none !important; }
.traitement-overlay {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(15, 23, 42, 0.58);
  backdrop-filter: blur(2px);
  cursor: wait;
}
.traitement-overlay-card {
  width: min(520px, calc(100vw - 48px));
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 22px 24px;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 20px 60px rgba(15, 23, 42, 0.28);
  color: #0f172a;
}
.traitement-overlay-card strong {
  display: block;
  margin-bottom: 6px;
  font-size: 1.18rem;
}
.traitement-overlay-card p {
  margin: 0;
  color: #475569;
  line-height: 1.45;
}
.traitement-spinner {
  width: 34px;
  height: 34px;
  flex: 0 0 34px;
  border: 4px solid #dbeafe;
  border-top-color: #2563eb;
  border-radius: 50%;
  animation: traitement-spin .75s linear infinite;
}
body.traitement-bloque { overflow: hidden; }
@keyframes traitement-spin { to { transform: rotate(360deg); } }

/* V1.17 - Pilotage des oublis Planning */
.planning-oubli-title { align-items: flex-end; gap: 18px; }
.planning-oubli-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.planning-note {
  margin: 12px 0 22px;
  padding: 12px 14px;
  background: #eef5ff;
  border-left: 4px solid #2563eb;
  border-radius: 8px;
  color: #334155;
}
.planning-summary-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  margin-bottom: 24px;
}
.planning-summary-panel h2 { margin-top: 0; }
.planning-small-table { max-height: 330px; overflow: auto; }
.planning-grid-table { max-height: 440px; overflow: auto; }
.planning-detail-table { max-height: 520px; overflow: auto; }
.planning-grid-table thead th,
.planning-detail-table thead th,
.planning-small-table thead th { position: sticky; top: 0; z-index: 2; background: #f8fafc; }
@media (max-width: 900px) {
  .planning-summary-grid { grid-template-columns: 1fr; }
  .planning-oubli-title { align-items: flex-start; }
}

/* V1.18 - gestion des e-mails d'accès utilisateurs */
.email-send-option {
  display: flex !important;
  align-items: center;
  gap: .55rem;
  min-width: 210px;
}
.email-send-option input[type="checkbox"] {
  width: auto;
  margin: 0;
}
.email-send-option.compact {
  font-size: .82rem;
  min-width: 190px;
}
.user-create-form {
  align-items: end;
}
.user-edit-form {
  grid-template-columns: minmax(150px,1fr) minmax(210px,1.25fr) minmax(180px,1fr) auto auto auto minmax(180px,1fr) minmax(180px,1fr) auto;
}


/* V1.19 - renvoi des accès utilisateur */
.user-actions {
  display: flex;
  gap: .45rem;
  align-items: center;
  flex-wrap: wrap;
}
.user-actions .resend-access {
  white-space: nowrap;
}
.user-actions .resend-access:disabled {
  opacity: .5;
  cursor: not-allowed;
}
