﻿/* ============================================================
   Variables racine â€” chaque variable pointe vers --theme-* dÃ©fini
   dans le fichier de thÃ¨me actif (/assets/themes/theme-*.css)
   Les valeurs aprÃ¨s la virgule sont des fallbacks de sÃ©curitÃ©
   si le fichier de thÃ¨me ne charge pas (= aspect d'origine).
   ============================================================ */
:root {
  --bg:           var(--theme-bg,         #0c1117);
  --bg2:          var(--theme-bg2,        #131a24);
  --bg3:          var(--theme-bg3,        #1a2332);
  --card:         var(--theme-card,       #161e2a);
  --card-hover:   var(--theme-card-hover, #1c2638);
  --border:       var(--theme-border,        #1e2d3d);
  --border-light: var(--theme-border-light,  #2a3a4d);
  --text:        var(--theme-text,       #e8ecf1);
  --text-dim:    var(--theme-text-dim,   #8899aa);
  --text-muted:  var(--theme-text-muted, #5a6d80);
  --accent:       var(--theme-accent,        #00d4aa);
  --accent-glow:  var(--theme-accent-glow,   rgba(0, 212, 170, 0.15));
  --accent2:      var(--theme-accent2,       #0099ff);
  --accent2-glow: var(--theme-accent2-glow,  rgba(0, 153, 255, 0.12));
  --warn:         var(--theme-warn,          #ff6b4a);
  --warn-glow:    var(--theme-warn-glow,     rgba(255, 107, 74, 0.12));
  --gold:         var(--theme-gold,          #f0c040);
  --gold-glow:    var(--theme-gold-glow,     rgba(240, 192, 64, 0.12));
  --success:      var(--theme-success,       #34d399);
  --purple:       var(--theme-purple,        #a78bfa);
  --purple-glow:  var(--theme-purple-glow,   rgba(167, 139, 250, 0.12));
  --danger:      #ef4444;
  --danger-glow: rgba(239,68,68,0.15);
  --overlay:     rgba(0,0,0,0.6);
  --shadow:       var(--theme-shadow,        0 4px 24px rgba(0,0,0,0.3));
  /* Constantes (ne dÃ©pendent pas du thÃ¨me) */
  --radius:    14px;
  --radius-sm: 8px;
  --transition: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  /* Design Engineering -- courbes custom Emil Kowalski */
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);     /* UI entrees : fort, punchy */
  --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);  /* Mouvements on-screen */
  --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);   /* Tiroirs, slide */
  color-scheme: var(--theme-color-scheme, dark);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{width:100%;max-width:100%;overflow-x:hidden}
body{font-family:'DM Sans',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;overflow-x:hidden}
#appContainer{width:100%;max-width:100%;overflow-x:hidden}
.header{background:linear-gradient(135deg,var(--bg2) 0%,var(--bg3) 100%);border-bottom:1px solid var(--border);padding:0 32px;height:64px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;backdrop-filter:blur(16px)}
.logo{font-family:'Playfair Display',serif;font-size:22px;font-weight:800;color:var(--accent);letter-spacing:-0.5px;white-space:nowrap}
.header-right{display:flex;align-items:center;gap:16px}
.header-date{color:var(--text-dim);font-size:13px}
.header-badge{background:var(--accent-glow);color:var(--accent);border:1px solid rgba(0,212,170,0.2);padding:4px 12px;border-radius:20px;font-size:12px;font-weight:600}
.nav-tabs{display:flex;gap:4px;padding:12px 32px;background:var(--bg);border-bottom:1px solid var(--border);overflow-x:auto;-webkit-overflow-scrolling:touch}
.nav-tab{padding:10px 18px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-dim);font-family:'DM Sans',sans-serif;font-size:13px;font-weight:500;cursor:pointer;transition:var(--transition);white-space:nowrap;display:flex;align-items:center;gap:7px}
.nav-tab:hover{background:var(--bg3);color:var(--text)}
.nav-tab.active{background:var(--accent-glow);color:var(--accent);font-weight:600;border:1px solid var(--accent-glow)}
/* Layout vertical (sidebar) */
.nav-tabs.vertical{flex-direction:column;width:188px;min-width:188px;padding:8px;overflow-y:auto;overflow-x:hidden;border-right:1px solid var(--border);flex-shrink:0;background:var(--bg)}
.nav-tabs.vertical .nav-tab{width:100%}
.main.flex-layout{flex:1;min-width:0;max-width:100%;margin:0;padding:20px 28px;overflow-y:auto;overflow-x:auto;height:calc(100vh - 64px)}
/* Wrapper créé par applyTabLayout() pour le mode vertical */
#tabLayoutWrapper{display:flex;width:100%;max-width:100%;overflow-x:hidden;height:calc(100vh - 64px)}
/* Sur écran moyen, sidebar compacte (icônes seules) */
@media (max-width: 1024px) {
  .nav-tabs.vertical{width:56px;min-width:56px;padding:4px}
  .nav-tabs.vertical .nav-tab{padding:10px 4px;justify-content:center;overflow:hidden;white-space:nowrap}
  .main.flex-layout{padding:16px 20px}
}
/* Sur mobile/tablette, la sidebar repasse en horizontal */
@media (max-width: 768px) {
  #tabLayoutWrapper{flex-direction:column;height:auto;min-height:auto}
  .nav-tabs.vertical{flex-direction:row;flex-wrap:wrap;width:100%;min-width:0;height:auto;max-height:140px;border-right:none;border-bottom:1px solid var(--border)}
  .nav-tabs.vertical .nav-tab{width:auto;flex-shrink:0;justify-content:flex-start;font-size:13px;padding:10px 18px}
    .main.flex-layout{flex:auto;height:auto;overflow-y:visible;padding:16px;min-width:0;max-width:100%}
}
.main{padding:24px 32px;max-width:1440px;margin:0 auto}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes spin{to{transform:rotate(360deg)}}
/* ===== GANTT PLANNING ===== */
.gantt-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--card)}
.gantt-row{display:flex;border-bottom:1px solid var(--border);position:relative;min-height:60px}
.gantt-row:last-child{border-bottom:none}
.gantt-label{flex-shrink:0;padding:10px 12px;border-right:1px solid var(--border);display:flex;flex-direction:column;justify-content:center;background:var(--bg3)}
.gantt-label strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gantt-label span{font-size:10px;color:var(--text-muted)}
.gantt-cells{flex:1;display:flex;position:relative}
.gantt-cell{flex:1;border-right:1px solid var(--border);min-height:60px;cursor:pointer;transition:background .15s}
.gantt-cell:last-child{border-right:none}
.gantt-cell:hover{background:rgba(255,255,255,0.03)}
.gantt-cell.today-col{background:rgba(0,212,170,0.07)}
.gantt-cell.weekend{background:rgba(255,255,255,0.015)}
.gantt-block{position:absolute;top:7px;bottom:7px;border-radius:6px;cursor:pointer;display:flex;align-items:center;padding:0 7px;z-index:2;overflow:hidden;transition:opacity .15s;box-sizing:border-box}
.gantt-block:hover{opacity:.82;z-index:3}
.gantt-block span{font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gantt-head-cell{flex:1;padding:5px 2px;text-align:center;border-right:1px solid var(--border);font-size:10px}
.gantt-head-cell:last-child{border-right:none}
.gantt-today-line{position:absolute;top:0;bottom:0;width:2px;background:rgba(0,212,170,0.7);z-index:5;pointer-events:none}
.gantt-today-line::before{content:'â–¼';position:absolute;top:-2px;left:-5px;color:var(--accent);font-size:9px}
.grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}
.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin-bottom:24px}
.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px;margin-bottom:24px}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;transition:var(--transition);position:relative;overflow:hidden}
.stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;border-radius:var(--radius) var(--radius) 0 0}
.stat-card.green::before{background:linear-gradient(90deg,var(--accent),var(--accent))}
.stat-card.blue::before{background:linear-gradient(90deg,var(--accent2),var(--accent2))}
.stat-card.orange::before{background:linear-gradient(90deg,var(--warn),var(--warn))}
.stat-card.gold::before{background:linear-gradient(90deg,var(--gold),var(--gold))}
.stat-card.purple::before{background:linear-gradient(90deg,var(--purple),var(--purple))}
.stat-card:hover{border-color:var(--border-light);transform:translateY(-2px);box-shadow:var(--shadow)}
.stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.stat-value{font-family:'Playfair Display',serif;font-size:30px;font-weight:700}
.stat-value.green{color:var(--accent)}.stat-value.blue{color:var(--accent2)}.stat-value.orange{color:var(--warn)}.stat-value.gold{color:var(--gold)}.stat-value.purple{color:var(--purple)}
.stat-sub{font-size:12px;color:var(--text-dim);margin-top:4px}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:24px;transition:var(--transition)}
.card:hover{border-color:var(--border-light)}
.card-title{font-family:'Playfair Display',serif;font-size:18px;font-weight:700;margin-bottom:16px;display:flex;align-items:center;gap:10px}
.section-title{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;margin-bottom:20px;display:flex;align-items:center;gap:10px}
.badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.badge-green{background:var(--accent-glow);color:var(--accent);border:1px solid rgba(0,212,170,0.15)}
.badge-orange{background:var(--warn-glow);color:var(--warn);border:1px solid var(--warn-glow)}
.badge-blue{background:var(--accent2-glow);color:var(--accent2);border:1px solid var(--accent2-glow)}
.badge-gold{background:var(--gold-glow);color:var(--gold);border:1px solid var(--gold-glow)}
.badge-purple{background:var(--purple-glow);color:var(--purple);border:1px solid var(--purple-glow)}
.table-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--border)}
table{width:100%;border-collapse:collapse;font-size:13px}
thead{background:var(--bg3)}
th{padding:12px 16px;text-align:left;font-weight:600;color:var(--text-dim);text-transform:uppercase;font-size:11px;letter-spacing:1px;border-bottom:1px solid var(--border)}
td{padding:12px 16px;border-bottom:1px solid var(--border);color:var(--text)}
tbody tr{transition:var(--transition)}
tbody tr:hover{background:var(--card-hover)}
tbody tr:last-child td{border-bottom:none}
.form-group{margin-bottom:14px}
label{display:block;font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
input,select,textarea{width:100%;padding:10px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif;font-size:14px;transition:var(--transition)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}
select option{background:var(--bg2)}
textarea{resize:vertical;min-height:60px}
.btn{padding:10px 20px;border-radius:var(--radius-sm);border:none;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;cursor:pointer;transition:var(--transition);display:inline-flex;align-items:center;gap:8px}
.btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent));color:#000;box-shadow:0 2px 12px var(--accent-glow)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 20px var(--accent-glow)}
.btn-secondary{background:var(--bg3);color:var(--text);border:1px solid var(--border)}
.btn-secondary:hover{background:var(--card-hover);border-color:var(--border-light)}
.btn-danger{background:var(--warn-glow);color:var(--warn);border:1px solid var(--warn-glow)}
.btn-danger:hover{background:var(--warn-glow)}
.btn-sm{padding:6px 14px;font-size:12px}
.btn-group{display:flex;gap:8px;flex-wrap:wrap}
.vehicle-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;transition:var(--transition);overflow:hidden}
.vehicle-photo-bleed{height:140px;overflow:hidden;margin:-20px -20px 14px -20px}
.vehicle-card:hover{border-color:var(--border-light);transform:translateY(-2px);box-shadow:var(--shadow)}
.km-bar{width:100%;height:6px;background:var(--bg);border-radius:3px;overflow:hidden;margin-top:6px}
.km-bar-fill{height:100%;border-radius:3px;transition:width .6s ease}
.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-header{text-align:center;padding:8px;font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase}
.cal-day{text-align:center;padding:10px 4px;border-radius:var(--radius-sm);font-size:13px;cursor:pointer;transition:var(--transition)}
.cal-day:hover{background:var(--bg3)}
.cal-day.today{background:var(--accent-glow);color:var(--accent);font-weight:700}
.cal-day.booked{background:var(--accent2-glow);color:var(--accent2)}
.cal-day.empty{cursor:default}.cal-day.empty:hover{background:transparent}
.cal-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.cal-nav button{background:var(--bg3);border:1px solid var(--border);color:var(--text);padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;font-family:'DM Sans',sans-serif;transition:var(--transition)}
.cal-nav button:hover{background:var(--card-hover)}
.cal-month{font-family:'Playfair Display',serif;font-size:18px;font-weight:700}
.modal-overlay{position:fixed;inset:0;background:var(--overlay);backdrop-filter:blur(8px);z-index:200;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease}
.modal{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:32px;width:90%;max-width:580px;max-height:85vh;overflow-y:auto;box-shadow:0 24px 80px rgba(0,0,0,0.5)}
.modal-title{font-family:'Playfair Display',serif;font-size:20px;font-weight:700;margin-bottom:20px}
.modal-close{float:right;background:none;border:none;color:var(--text-dim);font-size:20px;cursor:pointer}
.filter-bar{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap;align-items:center}
.filter-bar input,.filter-bar select{width:auto;min-width:180px}
#toastRoot{position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column-reverse;gap:8px;z-index:300;pointer-events:none}
.toast{pointer-events:auto;background:var(--card);border:1px solid var(--accent);border-radius:var(--radius);padding:14px 24px;color:var(--accent);font-weight:600;box-shadow:0 8px 32px rgba(0,212,170,0.2);animation:slideUp .3s ease,fadeOut .3s ease 2.5s forwards}
@keyframes slideUp{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes fadeOut{to{opacity:0;transform:translateY(-6px)}}
.crm-row{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--border);transition:var(--transition)}
.crm-row:hover{background:var(--card-hover);margin:0 -12px;padding:14px 12px;border-radius:var(--radius-sm)}
.crm-row:last-child{border-bottom:none}
.crm-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;color:#fff;flex-shrink:0}
.tag{display:inline-block;padding:2px 8px;border-radius:12px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}
/* ===== HAMBURGER MOBILE NAV ===== */
.nav-hamburger{display:none;width:100%;padding:10px 16px;background:var(--bg);border:none;border-bottom:1px solid var(--border);cursor:pointer;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;color:var(--text-dim);align-items:center;justify-content:space-between;transition:var(--transition)}
.nav-hamburger:hover{color:var(--text);background:var(--bg3)}
.nav-ham-icon{display:flex;flex-direction:column;gap:4px;width:18px;flex-shrink:0}
.nav-ham-icon span{display:block;height:2px;background:currentColor;border-radius:2px;transition:var(--transition)}
.nav-hamburger.open .nav-ham-icon span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.nav-hamburger.open .nav-ham-icon span:nth-child(2){opacity:0;transform:scaleX(0)}
.nav-hamburger.open .nav-ham-icon span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.mob-tab-label{flex:1;text-align:left;padding-left:8px}

/* ===== RESPONSIVE 768px â€” TABLET ===== */
@media(max-width:768px){
  /* Header */
  .header{padding:8px 12px;height:auto;min-height:52px;flex-wrap:wrap;gap:6px}
  .logo{font-size:18px}
  .header-date{display:none}
  .header-badge{display:none}
  .header-right{gap:6px}
  /* Main */
  .main{padding:16px}
  /* Hamburger nav */
  .nav-hamburger{display:flex}
  .nav-tabs{flex-direction:column;max-height:0;overflow:hidden;transition:max-height .35s cubic-bezier(.4,0,.2,1);border-bottom:none;padding:0;gap:0}
  .nav-tabs.mob-open{max-height:800px;border-bottom:1px solid var(--border)}
  .nav-tab{border-radius:0;border-bottom:1px solid var(--border);padding:12px 20px;font-size:14px;width:100%;justify-content:flex-start}
  .nav-tab:hover{background:var(--bg3)}
  .nav-tab.active{background:var(--accent-glow);color:var(--accent);font-weight:700}
  /* Grids */
  .grid-2{grid-template-columns:1fr}
  .grid-4{grid-template-columns:repeat(2,1fr)}
  .stat-value{font-size:24px}
  /* Filter bar */
  .filter-bar{flex-direction:column;align-items:stretch}
  .filter-bar input,.filter-bar select{width:100%;min-width:0}
  /* Modal */
  .modal{padding:20px;width:95%;max-height:90vh}
  /* Section title */
  .section-title{font-size:18px}
  /* Btn group */
  .btn-group{flex-wrap:wrap}
  /* Table */
  .table-wrap{border-radius:var(--radius-sm)}
}

/* ===== RESPONSIVE 480px â€” MOBILE ===== */
@media(max-width:480px){
  /* Header: compact */
  .header{padding:6px 10px}
  .logo{font-size:15px}
  #headerClock{font-size:13px;min-width:44px}
  /* Hide less-essential header buttons */
  .header-right button:not(:last-child){font-size:10px;padding:3px 7px}
  /* Grids: single column */
  .grid-4{grid-template-columns:1fr}
  .grid-3{grid-template-columns:1fr}
  .stat-value{font-size:22px}
  .stat-card{padding:14px}
  /* Modal: bottom sheet */
  .modal-overlay{align-items:flex-end}
  .modal{width:100%;max-width:100%;border-radius:var(--radius) var(--radius) 0 0;max-height:94vh;margin:0}
  /* Tables: smaller */
  th,td{padding:8px 10px;font-size:12px}
  /* Buttons */
  .btn{padding:8px 14px;font-size:13px}
  .btn-sm{padding:5px 10px;font-size:11px}
  /* Vehicle cards */
  .vehicle-card{padding:14px}
  .vehicle-photo-bleed{margin:-14px -14px 12px -14px}
  /* Calendar */
  .cal-day{padding:6px 2px;font-size:11px}
  /* CRM rows */
  .crm-row{flex-wrap:wrap;gap:8px}
  /* Login page */
  .main{padding:12px}
}

/* ====================================================
   DESIGN MODERNISÃ‰ â€” V3 (avril 2026)
   AmÃ©liorations visuelles : profondeur, glow, transitions
   ==================================================== */

/* Stat cards : effet de glow subtil au hover */
.stat-card{
  backdrop-filter: blur(8px);
  background:linear-gradient(145deg,var(--card) 0%,var(--bg2) 100%);
}
.stat-card:hover{
  transform:translateY(-3px) scale(1.01);
  box-shadow:0 12px 36px rgba(0,212,170,0.12), 0 4px 12px rgba(0,0,0,0.25);
}
.stat-card::after{
  content:'';position:absolute;inset:0;border-radius:var(--radius);
  background:radial-gradient(circle at top right,rgba(255,255,255,0.04),transparent 60%);
  pointer-events:none;
}

/* Cards principales : ombre douce et gradient subtil */
.card{
  background:linear-gradient(180deg,var(--card) 0%,var(--bg3) 100%);
  box-shadow:0 1px 0 rgba(255,255,255,0.03) inset, 0 4px 16px rgba(0,0,0,0.18);
}

/* Badges : ombre + petit lift au hover */
.badge{
  box-shadow:0 1px 3px rgba(0,0,0,0.2);
  transition:transform .15s ease, box-shadow .15s ease;
}
.badge:hover{ transform:translateY(-1px); box-shadow:0 3px 8px rgba(0,0,0,0.3); }

/* CRM rows : design carte moderne avec ligne accent */
.crm-row{
  position:relative;
  background:linear-gradient(180deg,var(--bg3) 0%,var(--bg2) 100%);
  border:1px solid var(--border);
  border-radius:12px;
  margin-bottom:10px;
  padding:14px 16px !important;
  border-bottom:1px solid var(--border) !important;
  transition:all .25s cubic-bezier(.4,0,.2,1);
}
.crm-row:hover{
  border-color:var(--accent);
  box-shadow:0 6px 20px rgba(0,212,170,0.08), 0 2px 6px rgba(0,0,0,0.2);
  transform:translateX(2px);
  background:linear-gradient(180deg,var(--accent-glow) 0%,var(--bg3) 100%);
}
.crm-row:last-child{ border-bottom:1px solid var(--border) !important; }

/* Avatar CRM : ring glow */
.crm-avatar{
  width:44px !important;height:44px !important;
  font-size:18px !important;
  box-shadow:0 0 0 2px var(--card), 0 0 0 3px rgba(0,212,170,0.25), 0 4px 12px rgba(0,0,0,0.3);
  background-image:linear-gradient(135deg,rgba(255,255,255,0.15) 0%,transparent 50%);
}

/* Boutons : feedback tactile amÃ©liorÃ© */
.btn{
  position:relative;
  overflow:hidden;
}
.btn::before{
  content:'';position:absolute;inset:0;
  background:radial-gradient(circle at center,rgba(255,255,255,0.15),transparent 70%);
  opacity:0;transition:opacity .2s;
}
.btn:hover::before{ opacity:1; }
.btn:active{ transform:translateY(0) scale(0.97); }

/* === DESIGN ENGINEERING -- Emil Kowalski === */
/* Button press feedback: every pressable element responds instantly */
.btn{transition:transform 160ms var(--ease-out), box-shadow 160ms var(--ease-out), background 160ms var(--ease-out)}
.btn:active{transform:scale(0.97)}
.stat-card,.vehicle-card,.crm-row{transition:transform 200ms var(--ease-out), box-shadow 200ms var(--ease-out), border-color 200ms var(--ease-out)}
.stat-card:active,.vehicle-card:active{transform:scale(0.98)}
.nav-tab{transition:background 180ms var(--ease-out), color 180ms var(--ease-out), border-color 180ms var(--ease-out)}
.nav-tab:active{transform:scale(0.97)}

/* Modal entry: scale(0.95) + opacity -- never from scale(0) */
.modal-overlay{animation:fadeIn .25s var(--ease-out)}
.modal{animation:modalIn .3s var(--ease-out)}
@keyframes modalIn{from{opacity:0;transform:translateY(4px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}

/* Toast: interruptible transitions (pas de keyframes) */
.toast{transition:transform 400ms var(--ease-out), opacity 400ms var(--ease-out);transform:translateY(0);opacity:1}
@keyframes slideUp{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}

/* Stagger: cartes dashboard, CRM, vehicules */
.grid-4>.stat-card:nth-child(1),.grid-3>.vehicle-card:nth-child(1){animation:fadeIn .35s var(--ease-out) 0ms backwards}
.grid-4>.stat-card:nth-child(2),.grid-3>.vehicle-card:nth-child(2){animation:fadeIn .35s var(--ease-out) 40ms backwards}
.grid-4>.stat-card:nth-child(3),.grid-3>.vehicle-card:nth-child(3){animation:fadeIn .35s var(--ease-out) 80ms backwards}
.grid-4>.stat-card:nth-child(4),.grid-3>.vehicle-card:nth-child(4){animation:fadeIn .35s var(--ease-out) 120ms backwards}
.grid-4>.stat-card:nth-child(5),.grid-3>.vehicle-card:nth-child(5){animation:fadeIn .35s var(--ease-out) 160ms backwards}
.grid-4>.stat-card:nth-child(6),.grid-3>.vehicle-card:nth-child(6){animation:fadeIn .35s var(--ease-out) 200ms backwards}

/* Accessibility: prefers-reduced-motion */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}
  .toast{transition:none}
  .stat-card:hover,.vehicle-card:hover{transform:none}
}

/* Touch devices: no hover animation */
@media (hover: hover) and (pointer: fine){
  .stat-card:hover,.vehicle-card:hover,.crm-row:hover,.btn:hover{transition:transform 200ms var(--ease-out), box-shadow 200ms var(--ease-out), border-color 200ms var(--ease-out)}
}

/* Boutons danger : Ã©tat blacklist plus impactant */
.btn-danger{
  background:linear-gradient(135deg,var(--danger-glow) 0%,var(--danger-glow) 100%);
  border-color:var(--danger-glow);
  color:var(--warn);
}
.btn-danger:hover{
  background:linear-gradient(135deg,var(--danger-glow) 0%,var(--danger-glow) 100%);
  border-color:var(--danger-glow);
  box-shadow:0 4px 16px var(--danger-glow);
}

/* Inputs : focus plus fluide */
input,select,textarea{
  background:var(--bg);
}
input:focus,select:focus,textarea:focus{
  background:var(--bg);
  box-shadow:0 0 0 4px var(--accent-glow), 0 2px 8px var(--accent-glow);
}

/* Modal : entrÃ©e plus fluide + glow accent */
.modal{
  animation:modalIn .3s cubic-bezier(.4,0,.2,1);
  background:var(--card);
  border-color:var(--border);
  box-shadow:var(--shadow);
}

/* Filter bar : look plus pro */
.filter-bar{
  background:var(--bg3);
  padding:14px 16px;
  border-radius:12px;
  border:1px solid var(--border);
}

/* Toast : glow accent renforcÃ© */
.toast{
  background:var(--card);
  box-shadow:var(--shadow);
}

/* Tabs nav : indicateur actif animÃ© */
.nav-tab{ position:relative; transition:all .2s; }
.nav-tab.active::after{
  content:'';position:absolute;bottom:0;left:10%;right:10%;height:2px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);
  border-radius:2px;
  animation:tabIn .3s ease;
}
@keyframes tabIn{ from{transform:scaleX(0)} to{transform:scaleX(1)} }

/* Scrollbar : look moderne */
*::-webkit-scrollbar{ width:10px; height:10px; }
*::-webkit-scrollbar-track{ background:var(--bg3); }
*::-webkit-scrollbar-thumb{
  background:var(--accent-glow);
  border-radius:8px; border:2px solid var(--bg);
}
*::-webkit-scrollbar-thumb:hover{ background:var(--accent); }

/* Tag styles enrichis */
.tag{
  box-shadow:0 1px 2px rgba(0,0,0,0.15);
  font-weight:700 !important;
}

/* Anim subtle pulse pour badges critiques */
.bl-pulse{ animation:blPulse 2s ease-in-out infinite; }
@keyframes blPulse{
  0%,100%{ box-shadow:0 0 0 0 var(--danger-glow); }
  50%{    box-shadow:0 0 0 6px rgba(239,68,68,0); }
}

/* Section title : underline gradient */
.section-title{
  position:relative;
  padding-bottom:14px;
  border-bottom:1px solid var(--border);
}
.section-title::after{
  content:'';position:absolute;bottom:-1px;left:0;width:60px;height:2px;
  background:var(--accent);
  border-radius:2px;
}

/* Spinner amÃ©liorÃ© (rÃ©utilisÃ© partout) */
@keyframes spin{ to{ transform:rotate(360deg); } }

/* ===== Dashboard avancÃ© â€” KPI cards ===== */
.adv-kpi{ padding:14px;overflow:hidden; }
.kpi-label{ font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px;text-shadow:0 1px 4px rgba(0,0,0,0.7); }
.kpi-value{ font-size:22px;font-weight:800;letter-spacing:-1px;line-height:1;margin-bottom:4px;text-shadow:0 2px 8px rgba(0,0,0,0.55); }
.kpi-delta{ font-size:11px;color:var(--text-muted); }
/* SVG chart bar hover */
.adv-chart-bar{ transition:opacity .15s; }
.adv-chart-bar:hover{ opacity:.85; }
/* Ã‰volution 12 mois â€” animation d'entrÃ©e */
@keyframes barRise{ from{ transform:scaleY(0); opacity:.5; } to{ transform:scaleY(1); opacity:1; } }
.adv-bar{ animation:barRise .55s cubic-bezier(0.4,0,0.2,1) backwards; transition:opacity .15s, filter .15s; transform-box:fill-box; }
.adv-bar:hover{ opacity:.82; }
.adv-trend{ animation:barRise .8s cubic-bezier(0.4,0,0.2,1) .3s backwards; transform-origin:left; }
/* Donut / gauge transitions */
circle[stroke-dasharray]{ transition:stroke-dasharray .6s ease; }

/* ===== Ã‰TAT DES LIEUX (EDL) â€” schÃ©ma vÃ©hicule + signatures ===== */
.edl-svg-wrap{ position:relative; max-width:760px; margin:0 auto; padding:12px; background:linear-gradient(180deg,rgba(0,212,170,0.04) 0%,var(--bg) 100%); border-radius:var(--radius); border:1px solid var(--border); }
.edl-svg{ width:100%; height:auto; display:block; user-select:none; -webkit-user-select:none; touch-action:manipulation; }
.edl-zone{ fill:transparent; stroke:transparent; stroke-width:1.5; cursor:pointer; transition:fill .15s, stroke .15s; }
.edl-zone:hover{ fill:rgba(0,212,170,0.18); stroke:var(--accent); }
.edl-zone.has-damage{ fill:var(--danger-glow); stroke:var(--danger-glow); stroke-dasharray:3 3; }
.edl-marker{ pointer-events:none; }
.edl-marker text{ font-family:'DM Sans',sans-serif; font-weight:800; font-size:12px; }
.edl-legend{ display:flex; gap:14px; flex-wrap:wrap; margin-top:10px; padding:8px 12px; background:var(--bg); border-radius:var(--radius-sm); font-size:11px; color:var(--text-dim); }
.edl-legend-item{ display:inline-flex; align-items:center; gap:5px; }
.edl-legend-dot{ width:8px; height:8px; border-radius:50%; display:inline-block; }
.edl-damage-list{ margin-top:14px; max-height:200px; overflow-y:auto; padding:8px; background:var(--bg); border-radius:var(--radius-sm); border:1px solid var(--border); }
.edl-damage-row{ display:flex; align-items:center; gap:10px; padding:6px 8px; border-radius:6px; margin-bottom:4px; background:var(--card); transition:background .15s; }
.edl-damage-row:hover{ background:var(--card-hover); }
.edl-sig-pad{ width:100%; height:140px; background:#fff; border:2px dashed var(--border); border-radius:var(--radius-sm); cursor:crosshair; touch-action:none; display:block; }
.edl-sig-pad.signed{ border-style:solid; border-color:var(--accent); background:#f9fafb; }
.edl-sig-wrap{ position:relative; }
.edl-sig-clear{ position:absolute; top:6px; right:6px; background:rgba(255,255,255,0.9); border:1px solid var(--border); border-radius:4px; padding:2px 8px; font-size:11px; cursor:pointer; color:#374151; }
.edl-sig-clear:hover{ background:#fff; color:var(--warn); }
.edl-photo-thumb{ position:relative; display:inline-block; margin:4px; }
.edl-photo-thumb img{ width:80px; height:80px; object-fit:cover; border-radius:6px; border:1px solid var(--border); }
.edl-photo-thumb .rm{ position:absolute; top:-6px; right:-6px; background:var(--warn); color:#fff; border:none; border-radius:50%; width:20px; height:20px; cursor:pointer; font-size:11px; font-weight:700; }

/* ============================================================
   AMÃ‰LIORATIONS VISUELLES (lisibilitÃ©, espacements, anti-overflow)
   ============================================================ */
.section-title { line-height: 1.25; word-break: break-word; }
.modal-title   { line-height: 1.3;  word-break: break-word; }
.card-title    { line-height: 1.3; }
.btn           { letter-spacing: 0.2px; white-space: nowrap; }
.badge         { white-space: nowrap; }
.stat-label    { line-height: 1.3; }
.stat-value    { line-height: 1.1; word-break: break-word; }
.stat-sub      { line-height: 1.4; }
.form-group    { margin-bottom: 16px; }
input, select, textarea { line-height: 1.4; }
tbody td       { vertical-align: middle; }
.table-wrap    { -webkit-overflow-scrolling: touch; }
/* Effet hover plus doux sur les cartes (compatible tous thÃ¨mes) */
.stat-card:hover, .vehicle-card:hover {
  border-color: var(--accent);
}

/* Mobile : ajustements design */
@media(max-width:768px){
  .crm-row{ padding:12px 14px !important; border-radius:10px; }
  .crm-row:hover{ transform:none; }
  .crm-avatar{ width:40px !important; height:40px !important; font-size:16px !important; }
  .stat-card:hover{ transform:translateY(-2px); }
  .adv-kpi .kpi-value{ font-size:18px; }
  /* EmpÃªche tout dÃ©bordement horizontal global */
  body { overflow-x:hidden; }
  .modal { max-width:96vw; max-height:92vh; overflow-y:auto; }
  .filter-bar { flex-wrap:wrap; gap:8px; }
  .filter-bar select, .filter-bar input { flex:1 1 130px; min-width:0; }
  /* Modale entreprise + vÃ©hicule : grille 2 colonnes â†’ 1 colonne sur mobile */
  .modal [style*="grid-template-columns:1fr 1fr"], .modal [style*="grid-template-columns: 1fr 1fr"] {
    grid-template-columns: 1fr !important;
  }
  .modal [style*="grid-template-columns:1fr 1fr 1fr"], .modal [style*="grid-template-columns: 1fr 1fr 1fr"] {
    grid-template-columns: 1fr 1fr !important;
  }
}
@media(max-width:480px){
  .gantt-label { gap:6px !important; padding:4px 6px !important; }
  .gantt-label img, .gantt-label > div:first-child { width:32px !important; height:32px !important; }
  .gantt-label strong { font-size:11px !important; }
  .gantt-label span { font-size:9px !important; }
}

/* === U7 â€” Corrections responsive ciblÃ©es (Round 4) ============ */
@media(max-width:768px){
  /* Toasts : ne plus chevaucher le bouton FAB ou la nav mobile fixe */
  #toastRoot { right:12px !important; bottom:80px !important; left:12px !important; align-items:stretch; }
  .toast { font-size:13px; padding:10px 14px; }
  /* Modal : padding interne rÃ©duit, scroll interne */
  .modal { padding:18px !important; }
  .modal-title { font-size:16px !important; }
  /* Cartes CRM : avatar + actions wrappent proprement */
  .crm-row { flex-wrap:wrap !important; gap:10px !important; }
  .crm-row > div[style*="text-align:right"] { text-align:left !important; min-width:100%; }
  /* Boutons en groupe : pas de dÃ©bordement horizontal */
  .btn-group { flex-wrap:wrap; gap:6px; }
  .btn-group .btn { flex:0 1 auto; }
  /* Stats grid : 2 colonnes au lieu de 4 sur mobile */
  .grid-4 { grid-template-columns:repeat(2,1fr) !important; }
  /* Section title : taille rÃ©duite */
  .section-title { font-size:18px !important; }
  /* Tables : taille de police rÃ©duite pour limiter le scroll horizontal */
  .table-wrap table { font-size:12px; }
  .table-wrap th, .table-wrap td { padding:8px 6px; }
  /* Banner update : plus compact */
  #mlUpdateBanner { flex-wrap:wrap; gap:8px; padding:8px 12px; font-size:12px; }
  #mlUpdateBanner button { padding:5px 10px !important; font-size:12px !important; }
  /* Stat-card : Ã©viter chiffres Ã©normes qui dÃ©bordent */
  .stat-value { font-size:22px !important; word-break:break-word; }
  /* Filter bar : empÃªche les selects de devenir microscopiques */
  .filter-bar select, .filter-bar input { font-size:14px; }
}
@media(max-width:480px){
  /* Stats : 1 colonne pleine sur trÃ¨s petit Ã©cran */
  .grid-4 { grid-template-columns:1fr !important; }
  /* Avatar CRM plus petit */
  .crm-avatar { width:36px !important; height:36px !important; font-size:14px !important; }
  /* Toasts plus discrets */
  #toastRoot { bottom:70px !important; }
}

/* =====================================================
   REDESIGN V2 â€” Lagon Premium (mai 2026)
   AmÃ©liorations issues de moana-loc-redesign-v2.html
   ===================================================== */

/* Corps : radial glows subtils de profondeur */
body {
  background:
    radial-gradient(1100px 600px at 85% -10%, rgba(0,212,196,0.07), transparent 60%),
    radial-gradient(900px 500px at -5% 105%, rgba(0,212,196,0.04), transparent 60%),
    var(--bg);
}

/* Variables alias redesign V2 */
:root {
  --teal:        var(--accent);
  --teal-soft:   var(--accent-glow);
  --coral:       var(--warn);
  --coral-soft:  var(--warn-glow);
  --violet:      var(--purple);
  --violet-soft: var(--purple-glow);
  --ink:         var(--text);
  --ink-2:       var(--text-dim);
  --ink-3:       var(--text-muted);
  --line:        var(--border);
  --line-strong: var(--border-light);
  --radius-lg:   18px;
  --shadow-card: 0 1px 0 rgba(255,255,255,0.04) inset, 0 12px 40px -20px rgba(0,0,0,0.6);
}.section-swatch {
  display: inline-block; width: 5px; height: 20px; border-radius: 3px;
  background: linear-gradient(180deg, var(--accent), rgba(0,212,196,0.2));
  box-shadow: 0 0 12px rgba(0,212,196,0.35);
  vertical-align: middle; margin-right: 10px;
}

/* ============================================================
   KPI CARDS — Dashboard avancé
   ============================================================ */
.adv-kpi { position: relative; overflow: hidden; padding: 14px; }
.kpi-label { font-size: 10px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .8px; margin-bottom: 6px; }
.kpi-value { font-size: 22px; font-weight: 800; letter-spacing: -1px; line-height: 1; margin-bottom: 4px; }
.kpi-unit { font-size: 13px; font-weight: 500; color: var(--text-dim); margin-left: 2px; letter-spacing: 0; }
.kpi-trend { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; font-size: 11.5px; color: var(--text-muted); }
.trend-chip { display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 11px; }
.trend-chip.up { color: var(--success); }
.trend-chip.down { color: var(--warn); }
.spark { display: block; width: 100%; height: 32px; margin-top: 10px; }
.kpi-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.kpi-head .kpi-icon { width: 28px; height: 28px; border-radius: 8px; background: var(--accent-glow); color: var(--accent); display: grid; place-items: center; flex-shrink: 0; }
.kpi-head .kpi-icon svg { width: 14px; height: 14px; }
.adv-kpi.accent-teal .kpi-icon { background: var(--accent-glow); color: var(--accent); }
.adv-kpi.accent-violet .kpi-icon { background: var(--purple-glow); color: var(--purple); }
.adv-kpi.accent-coral .kpi-icon { background: var(--warn-glow); color: var(--warn); }
.adv-kpi.accent-gold .kpi-icon { background: var(--gold-glow); color: var(--gold); }
.adv-chart-bar { transition: opacity .15s; }
.adv-chart-bar:hover { opacity: .85; }
@keyframes barRise { from { transform: scaleY(0); opacity: .5; } to { transform: scaleY(1); opacity: 1; } }
.adv-bar { animation: barRise .55s cubic-bezier(0.4,0,0.2,1) backwards; transition: opacity .15s, filter .15s; transform-box: fill-box; }
.adv-bar:hover { opacity: .82; }
.adv-trend { animation: barRise .8s cubic-bezier(0.4,0,0.2,1) .3s backwards; transform-origin: left; }
circle[stroke-dasharray] { transition: stroke-dasharray .6s ease; }

@media(max-width:768px){
  .adv-kpi .kpi-value { font-size: 18px; }
}

/* ============================================================
   LOGIN — Split-screen "Liquid Glass" (refonte mai 2026)
   Panneau de marque animé (gauche) + carte verre dépoli (droite).
   Tout est scopé sous .login-* pour ne pas impacter l'app.
   ============================================================ */
.login-screen{
  display:flex;
  min-height:100vh; min-height:100dvh;
  width:100%;
  background:var(--bg);
  overflow:hidden;
}

/* ── Panneau de marque (gauche) ── */
.login-brand{
  position:relative;
  flex:1.05 1 0;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:48px;
  overflow:hidden;
  color:#fff;
  background:
    radial-gradient(120% 140% at 0% 0%, #0a3a40 0%, transparent 55%),
    linear-gradient(150deg, #062a2c 0%, #08313a 45%, #05172a 100%);
  isolation:isolate;
}
.login-brand__bg{ position:absolute; inset:0; z-index:0; }
.login-blob{
  position:absolute; border-radius:50%;
  filter:blur(70px); opacity:.55;
  will-change:transform;
}
.login-blob--1{ width:420px; height:420px; top:-60px; left:-40px;
  background:radial-gradient(circle, rgba(0,212,170,.85), transparent 70%);
  animation:loginFloat1 24s ease-in-out infinite; }
.login-blob--2{ width:360px; height:360px; bottom:-80px; right:-30px;
  background:radial-gradient(circle, rgba(0,153,255,.65), transparent 70%);
  animation:loginFloat2 30s ease-in-out infinite; }
.login-blob--3{ width:300px; height:300px; top:45%; left:35%;
  background:radial-gradient(circle, rgba(240,192,64,.45), transparent 70%);
  animation:loginFloat3 27s ease-in-out infinite; }
/* voile de grain/contraste pour lisibilité du texte */
.login-brand::after{
  content:''; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg, rgba(3,12,20,.10), rgba(3,12,20,.45));
}
.login-brand__inner{ position:relative; z-index:2; max-width:420px; width:100%; }
.login-brand__logo img{
  display:block; width:60px; height:60px;
  filter:drop-shadow(0 0 16px rgba(0,212,170,.55));
  animation:loginRise .7s var(--ease-out) both;
}
.login-brand__title{
  font-family:'Playfair Display',serif;
  font-size:clamp(34px,4vw,46px); font-weight:800; line-height:1.05;
  letter-spacing:-.5px; margin:22px 0 8px;
  background:linear-gradient(120deg,#fff 0%,#8ff0e0 45%,#f0c040 110%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
  animation:loginRise .7s var(--ease-out) .06s both;
}
.login-brand__tagline{
  font-size:15px; color:rgba(255,255,255,.78); margin-bottom:34px;
  animation:loginRise .7s var(--ease-out) .12s both;
}
.login-brand__features{ list-style:none; display:flex; flex-direction:column; gap:16px; margin:0; padding:0; }
.login-brand__features li{
  display:flex; align-items:center; gap:13px;
  font-size:14.5px; color:rgba(255,255,255,.9);
  animation:loginRise .6s var(--ease-out) both;
}
.login-brand__features li:nth-child(1){ animation-delay:.20s; }
.login-brand__features li:nth-child(2){ animation-delay:.28s; }
.login-brand__features li:nth-child(3){ animation-delay:.36s; }
.login-brand__features svg{
  width:20px; height:20px; flex-shrink:0; color:#3ee0c8;
  padding:7px; box-sizing:content-box;
  background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.14);
  border-radius:10px;
}
.login-brand__foot{
  margin-top:40px; font-size:12px; letter-spacing:.5px;
  color:rgba(255,255,255,.5);
  animation:loginRise .6s var(--ease-out) .44s both;
}

/* ── Panneau formulaire (droite) ── */
.login-panel{
  position:relative;
  flex:1 1 0;
  display:flex; align-items:center; justify-content:center;
  padding:clamp(20px,4vw,48px);
  overflow:hidden;
}
.login-aura{
  position:absolute; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(60% 50% at 100% 0%, var(--accent-glow), transparent 70%),
    radial-gradient(50% 45% at 0% 100%, var(--accent2-glow), transparent 70%);
  opacity:.9;
}

/* ── Carte verre dépoli ── */
.login-card{
  position:relative; z-index:1;
  width:100%; max-width:420px;
  padding:clamp(26px,3vw,38px);
  border-radius:22px;
  background:var(--card);
  border:1px solid var(--border-light);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.10),
    0 24px 60px -28px rgba(0,0,0,.55);
  -webkit-backdrop-filter:blur(10px) saturate(130%);
  backdrop-filter:blur(10px) saturate(130%);
  animation:loginRise .6s var(--ease-out) .1s both;
}
/* Marque compacte (surtout utile en mobile quand le panneau est masqué) */
.login-card__brand{ display:flex; align-items:center; gap:11px; margin-bottom:22px; }
.login-card__brand img{ width:40px; height:40px; filter:drop-shadow(0 0 10px rgba(0,212,170,.4)); }
.login-card__brandname{ font-family:'Playfair Display',serif; font-weight:800; font-size:21px; letter-spacing:-.3px;
  background:linear-gradient(120deg,var(--accent),var(--gold)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.login-card__heading{ font-family:'Playfair Display',serif; font-size:25px; font-weight:700; line-height:1.15; margin:0 0 4px; color:var(--text); }
.login-card__sub{ font-size:13.5px; color:var(--text-dim); margin:0 0 22px; }

/* Champs */
.login-field{ margin-bottom:15px; }
.login-field label{ display:block; font-size:12.5px; font-weight:600; color:var(--text-dim); margin-bottom:6px; }
.login-field input{ width:100%; padding:12px 14px; font-size:14.5px; border-radius:12px; }
.login-field input:focus{ box-shadow:0 0 0 3px var(--accent-glow); }
.login-field--accent input{ border-color:var(--accent); }

/* Champ mot de passe + toggle œil */
.login-pw{ position:relative; }
.login-pw input{ padding-right:46px; }
.login-pw__toggle{
  position:absolute; top:50%; right:6px; transform:translateY(-50%);
  width:34px; height:34px; display:grid; place-items:center;
  background:none; border:none; border-radius:9px; cursor:pointer;
  color:var(--text-muted); transition:color .2s, background .2s;
}
.login-pw__toggle:hover{ color:var(--text); background:var(--bg3); }
.login-pw__toggle:focus-visible{ outline:2px solid var(--accent); outline-offset:1px; }
.login-pw__toggle svg{ width:19px; height:19px; }
.login-pw__ic--hide{ display:none; }
.login-pw__toggle.is-on .login-pw__ic--show{ display:none; }
.login-pw__toggle.is-on .login-pw__ic--hide{ display:block; }

/* Erreurs */
.login-error{
  display:none; margin:2px 0 14px; padding:10px 12px;
  font-size:12.5px; color:var(--warn);
  background:var(--warn-glow); border:1px solid var(--warn-glow);
  border-radius:10px;
}

/* Bouton principal */
.login-submit{
  width:100%; justify-content:center; padding:13px; font-size:15px; margin-top:6px;
  border-radius:12px; position:relative; overflow:hidden;
}
.login-submit::after{
  content:''; position:absolute; top:0; left:-120%; width:60%; height:100%;
  background:linear-gradient(110deg, transparent, rgba(255,255,255,.35), transparent);
  transform:skewX(-18deg); transition:left .6s var(--ease-out);
}
.login-submit:hover::after{ left:140%; }

/* Lien bascule connexion / inscription */
.login-switch{ text-align:center; margin-top:18px; font-size:13px; color:var(--text-dim); }
.login-switch span{ margin-right:4px; }
.login-switch button{
  background:none; border:none; cursor:pointer; font-family:'DM Sans',sans-serif;
  font-size:13px; font-weight:600; color:var(--accent); padding:4px 6px; border-radius:6px;
  transition:color .2s, background .2s;
}
.login-switch button:hover{ color:var(--accent2); text-decoration:underline; }
.login-switch button:focus-visible{ outline:2px solid var(--accent); outline-offset:1px; }

/* Liste des entreprises enregistrées */
.login-companies{ margin-top:18px; }
.login-companies:empty{ display:none; }

/* Keyframes */
@keyframes loginRise{ from{ opacity:0; transform:translateY(16px); } to{ opacity:1; transform:translateY(0); } }
@keyframes loginFloat1{ 0%,100%{ transform:translate(0,0) scale(1); } 50%{ transform:translate(46px,34px) scale(1.12); } }
@keyframes loginFloat2{ 0%,100%{ transform:translate(0,0) scale(1); } 50%{ transform:translate(-40px,-30px) scale(1.18); } }
@keyframes loginFloat3{ 0%,100%{ transform:translate(0,0) scale(1); } 50%{ transform:translate(30px,-40px) scale(1.1); } }

/* ── Responsive : sous 900px, on masque le panneau de marque ── */
@media(max-width:900px){
  .login-brand{ display:none; }
  .login-panel{ flex:1; }
}
@media(min-width:901px){
  /* En desktop, la marque compacte de la carte est redondante avec le panneau */
  .login-card__brand{ display:none; }
}
@media(max-width:480px){
  .login-panel{ padding:16px; }
  .login-card{ padding:24px 20px; border-radius:18px; }
  .login-card__heading{ font-size:22px; }
}

/* ── Accessibilité : mouvement réduit ── */
@media (prefers-reduced-motion: reduce){
  .login-blob{ animation:none; }
  .login-brand__logo img,
  .login-brand__title,
  .login-brand__tagline,
  .login-brand__features li,
  .login-brand__foot,
  .login-card{ animation:none; }
  .login-submit::after{ transition:none; }
}

/* ============================================================
   SIDEBAR verticale — refonte navigation (mai 2026)
   Sections (Pilotage / Gestion / Finances / Outils) + icônes SVG.
   Règles en fin de fichier → prioritaires sur l'ancien nav mobile.
   ============================================================ */
.nav-tabs.vertical{
  width:214px; min-width:214px; padding:14px 12px 20px; gap:2px;
  background:linear-gradient(180deg,var(--bg2),var(--bg));
  border-right:1px solid var(--border);
}
.nav-tabs.vertical .nav-section{
  font-size:10.5px; font-weight:700; letter-spacing:1.4px; text-transform:uppercase;
  color:var(--text-muted); padding:16px 12px 6px; user-select:none;
}
.nav-tabs.vertical .nav-section:first-child{ padding-top:2px; }
.nav-tabs.vertical .nav-tab{
  position:relative; width:100%; justify-content:flex-start; gap:11px;
  padding:9px 12px; border-radius:11px; font-size:13.5px; font-weight:500;
  border:1px solid transparent; white-space:nowrap;
}
.nav-tabs.vertical .nav-tab .nav-ic{ width:18px; height:18px; flex-shrink:0; }
.nav-tabs.vertical .nav-tab:hover{ background:var(--bg3); color:var(--text); }
.nav-tabs.vertical .nav-tab.active{
  background:var(--accent-glow); color:var(--accent); font-weight:600; border-color:transparent;
}
/* Onglet actif : barre d'accent verticale (remplace l'ancien soulignement) */
.nav-tabs.vertical .nav-tab.active::after{
  content:''; position:absolute; left:-12px; top:50%; right:auto; bottom:auto;
  transform:translateY(-50%); width:3px; height:22px; border-radius:0 3px 3px 0;
  background:var(--accent); animation:none;
}

/* Écran moyen : sidebar compacte (icônes seules) */
@media(max-width:1024px) and (min-width:769px){
  .nav-tabs.vertical{ width:64px; min-width:64px; padding:12px 8px; align-items:center; }
  .nav-tabs.vertical .nav-txt{ display:none; }
  .nav-tabs.vertical .nav-section{ font-size:0; padding:10px 0 4px; text-align:center; }
  .nav-tabs.vertical .nav-section::before{ content:'•'; font-size:13px; color:var(--border-light); }
  .nav-tabs.vertical .nav-tab{ justify-content:center; padding:11px 0; width:46px; }
  .nav-tabs.vertical .nav-tab.active::after{ left:-8px; }
}

/* Mobile : tiroir vertical déroulé par le hamburger */
@media(max-width:768px){
  #tabLayoutWrapper{ flex-direction:column; }
  .nav-tabs.vertical{
    width:100%; min-width:0; flex-direction:column; gap:0;
    max-height:0; overflow:hidden; padding:0 12px; border-right:none;
    transition:max-height .35s cubic-bezier(.4,0,.2,1);
  }
  .nav-tabs.vertical.mob-open{ max-height:82vh; overflow:auto; padding:8px 12px 16px; border-bottom:1px solid var(--border); }
  .nav-tabs.vertical .nav-tab{ width:100%; border-radius:10px; font-size:14.5px; padding:12px 14px; border-bottom:none; }
  .nav-tabs.vertical .nav-tab.active::after{ display:none; }
  .nav-tabs.vertical .nav-section{ padding:12px 12px 4px; }
}

/* ============================================================
   GRAPHIQUE "Évolution 12 mois" — mouvement (mai 2026, skill emil-design-eng)
   La courbe se DESSINE (stroke-dashoffset) au lieu d'être étirée,
   la zone monte en fondu, les points éclosent en cascade après le tracé.
   Bloc en fin de fichier → prioritaire sur les anciennes règles .adv-*.
   ============================================================ */
/* Barres : easing custom plus punchy (le delay par barre reste inline) */
.adv-bar{ animation:barRise .5s var(--ease-out) backwards; }

/* Tracé de la courbe : on révèle le trait via le dash-offset */
@keyframes advDraw{ from{ stroke-dashoffset:var(--dlen,1200); } to{ stroke-dashoffset:0; } }
.adv-trend{
  stroke-dasharray:var(--dlen,1200);
  stroke-dashoffset:0;
  transform-origin:center;              /* annule l'ancien scaleX (gauche) */
  animation:advDraw .9s var(--ease-out) .2s both;
}

/* Zone sous la courbe : fondu doux, synchronisé avec le tracé */
@keyframes advAreaIn{ from{ opacity:0; } to{ opacity:1; } }
.adv-area{ animation:advAreaIn .7s var(--ease-out) .25s backwards; }

/* Points : éclosion (jamais depuis scale(0)) après que la ligne soit tracée */
@keyframes advPop{ from{ opacity:0; transform:scale(.35); } to{ opacity:1; transform:scale(1); } }
.adv-pt{ transform-box:fill-box; transform-origin:center; animation:advPop .3s var(--ease-out) backwards; }

/* Valeur du mois courant : apparaît en dernier */
@keyframes advValIn{ from{ opacity:0; transform:translateY(3px); } to{ opacity:1; transform:translateY(0); } }
.adv-val{ transform-box:fill-box; animation:advValIn .4s var(--ease-out) 1.05s backwards; }

/* Sidebar : la barre d'accent de l'onglet actif éclot au changement d'onglet */
@keyframes navBarPop{ from{ transform:translateY(-50%) scaleY(.3); opacity:.3; } to{ transform:translateY(-50%) scaleY(1); opacity:1; } }
.nav-tabs.vertical .nav-tab.active::after{ animation:navBarPop .25s var(--ease-out); }

/* Respect de prefers-reduced-motion : on garde l'état final, sans mouvement */
@media (prefers-reduced-motion: reduce){
  .adv-bar, .adv-area, .adv-pt, .adv-val,
  .nav-tabs.vertical .nav-tab.active::after{ animation:none; }
  .adv-trend{ animation:none; stroke-dasharray:none; stroke-dashoffset:0; }
}

/* ============================================================
   TABLEAU DE BORD — cases déplaçables (grille triable)
   En-tête + bouton Réorganiser, grille 12 colonnes responsive,
   mode édition sur 1 colonne pour un tri vertical fiable.
   ============================================================ */
.dash-head{ display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px; }
.dash-edit-hint{
  font-size:12.5px; color:var(--accent); background:var(--accent-glow);
  border:1px solid var(--accent-glow); border-radius:var(--radius-sm);
  padding:9px 14px; margin-bottom:14px;
}

.dash-grid{ display:grid; grid-template-columns:repeat(12,1fr); gap:16px; align-items:start; }
.dash-widget{ min-width:0; grid-column:span 12; }
/* Largeur par pas de grille (data-span = 3 ¼ · 4 ⅓ · 6 ½ · 12 pleine) */
.dash-widget[data-span="3"]{ grid-column:span 3; }
.dash-widget[data-span="4"]{ grid-column:span 4; }
.dash-widget[data-span="6"]{ grid-column:span 6; }
.dash-widget[data-span="12"]{ grid-column:span 12; }
/* Les cartes internes gèrent déjà leur style ; on neutralise leur marge basse,
   l'espacement est désormais assuré par le gap de la grille. */
.dash-widget > .card, .dash-widget > .stat-card{ margin-bottom:0 !important; height:100%; box-sizing:border-box; }

/* Tablette : on regroupe les petites largeurs pour éviter l'écrasement */
@media(max-width:1100px){
  .dash-widget[data-span="3"]{ grid-column:span 4; }
  .dash-widget[data-span="4"]{ grid-column:span 6; }
  .dash-widget[data-span="6"]{ grid-column:span 12; }
}
@media(max-width:700px){
  .dash-grid{ grid-template-columns:repeat(2,1fr); gap:12px; }
  .dash-widget[data-span]{ grid-column:span 1; }
  .dash-widget[data-span="6"], .dash-widget[data-span="12"]{ grid-column:span 2; }
}

/* --- Mode réorganisation : 1 colonne, cases manipulables --- */
.dash-grid.editing{ grid-template-columns:1fr !important; gap:10px; }
.dash-grid.editing .dash-widget{
  grid-column:span 1 !important;
  cursor:grab; touch-action:none;
  border:1.5px dashed var(--accent); border-radius:var(--radius);
  background:var(--accent-glow); padding:6px;
  transition:box-shadow 160ms var(--ease-out), transform 160ms var(--ease-out), opacity 160ms var(--ease-out);
}
.dash-grid.editing .dash-widget:active{ cursor:grabbing; }
.dash-grid.editing .dash-widget.dragging{
  opacity:.92; transform:scale(1.015); box-shadow:0 14px 34px rgba(0,0,0,.35); z-index:5;
}
/* Pendant l'édition, on neutralise les clics internes (sauf la poignée) */
.dash-grid.editing .dash-widget > :not(.dash-handle){ pointer-events:none; }
.dash-handle{
  display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap;
  font-size:12px; font-weight:700; color:var(--accent);
  padding:2px 6px 8px; user-select:none; -webkit-user-select:none;
}
.dash-grip{ cursor:grab; }
/* Boutons de largeur : cliquables même si le reste de la case est neutralisé */
.dash-sizer{ display:inline-flex; gap:4px; pointer-events:auto; }
.dash-size-btn{
  pointer-events:auto; cursor:pointer;
  min-width:30px; padding:3px 7px; border-radius:7px;
  border:1px solid var(--border); background:var(--bg); color:var(--text-dim);
  font-family:'DM Sans',sans-serif; font-size:11px; font-weight:700; line-height:1.1;
  transition:background 140ms var(--ease-out), color 140ms var(--ease-out), border-color 140ms var(--ease-out), transform 140ms var(--ease-out);
}
.dash-size-btn:hover{ color:var(--text); border-color:var(--accent); }
.dash-size-btn:active{ transform:scale(0.94); }
.dash-size-btn.active{ background:var(--accent); color:#04201b; border-color:var(--accent); }

@media (prefers-reduced-motion: reduce){
  .dash-grid.editing .dash-widget{ transition:none; }
  .dash-grid.editing .dash-widget.dragging{ transform:none; }
  .dash-size-btn{ transition:none; }
}
