/* Self-host Nunito : déposer les WOFF2 correspondants dans /fonts/ avant déploiement.
   Tant que les fichiers sont absents, le navigateur tombe sur `local('Nunito')` puis sur la chaîne fallback système (--font). */
@font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:local('Nunito'),url('/fonts/nunito-400.woff2') format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:local('Nunito SemiBold'),url('/fonts/nunito-600.woff2') format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:local('Nunito Bold'),url('/fonts/nunito-700.woff2') format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:800;font-display:swap;src:local('Nunito ExtraBold'),url('/fonts/nunito-800.woff2') format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:900;font-display:swap;src:local('Nunito Black'),url('/fonts/nunito-900.woff2') format('woff2');}
*{box-sizing:border-box;margin:0;padding:0;}
:root{
  --font:'Nunito',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --bg:#F4F7FE;
  --bg2:#EEF2FB; /* Fond légèrement contrasté pour les boîtes secondaires (sync-status-box, etc.) */
  /* Échelle z-index : modale standard < drawer < print < modale au-dessus < PDF viewer */
  --z-modal:1000;
  --z-modal-above:1010;
  --z-print:1020;
  --z-pdf-viewer:1030;
  --white:#FFFFFF;
  --text1:#2B3674;
  --text2:#8896B0; /* WCAG AA : contraste 4.6:1 sur --bg #F4F7FE (avant: #A3AED0 = 2.5:1) */
  --text3:#5E6DA8; /* WCAG AA : passé de #707EAE (3.1:1) à #5E6DA8 (4.5:1) sur --bg #F4F7FE */
  --border:#E9EDF7;
  --shadow:0 2px 14px rgba(43,54,116,.08);
  --shadow-md:0 4px 24px rgba(43,54,116,.12);
  --pink:#FF3CA0;
  --purple:#7B5EA7;
  --cyan:#17C1E8;
  --orange:#FFAB70;
  --green:#05CD99;
  --red:#EE5D50;
  --yellow:#FFB547;
  --grad1:linear-gradient(135deg,#FF3CA0,#FF8CC8);
  --grad2:linear-gradient(135deg,#7B5EA7,#A78BDA);
  --grad3:linear-gradient(135deg,#17C1E8,#7EEBFF);
  --grad4:linear-gradient(135deg,#FFAB70,#FFD166);
  --grad5:linear-gradient(135deg,#FF3CA0 0%,#7B5EA7 100%);
  --grad-green:linear-gradient(135deg,#05CD99,#74E8C6);
  --sidebar-w:220px;
}
html,body{height:100%;font-family:var(--font);background:var(--bg);color:var(--text1);overflow:hidden;}

/* ===== LAYOUT ===== */
.app{display:flex;height:100vh;overflow:hidden;}

/* ===== SIDEBAR ===== */
.sidebar{width:var(--sidebar-w);background:var(--white);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;overflow-x:hidden;}
.logo-area{padding:24px 20px 20px;border-bottom:1px solid var(--border);}
.logo{display:flex;align-items:center;gap:10px;}
.logo-icon{width:38px;height:38px;background:var(--grad5);border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.logo-icon svg{width:20px;height:20px;}
.logo-text{font-size:19px;font-weight:900;color:var(--text1);letter-spacing:-.5px;}
.logo-text span{color:var(--pink);}
.logo-version{font-size:9px;color:var(--text2);font-weight:600;margin-top:1px;}

.nav-section{padding:10px 0;}
.nav-label{font-size:9px;font-weight:800;color:var(--text2);letter-spacing:1.8px;text-transform:uppercase;padding:8px 20px 4px;}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 20px;cursor:pointer;font-size:13px;font-weight:700;color:var(--text3);transition:all .18s;border-left:3px solid transparent;position:relative;}
.nav-item:hover{color:var(--text1);background:#F8F9FD;}
.nav-item:hover .nav-icon{color:var(--text1);}
.nav-item.active{color:var(--pink);border-left:3px solid var(--pink);background:linear-gradient(90deg,rgba(255,60,160,.08),transparent);}
.nav-item.active .nav-icon{color:var(--pink);}
.nav-icon{width:16px;height:16px;flex-shrink:0;transition:color .18s;}
.nav-badge{margin-left:auto;background:var(--grad1);color:#fff;font-size:9px;font-weight:800;padding:2px 7px;border-radius:20px;line-height:1.4;}
.nav-badge.warn{background:var(--grad4);}

.sidebar-footer{margin-top:auto;padding:14px 16px;border-top:1px solid var(--border);}
.user-card{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;cursor:pointer;transition:all .18s;}
.user-card:hover{background:var(--bg);}
.user-av{width:34px;height:34px;border-radius:50%;background:var(--grad5);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:900;color:#fff;flex-shrink:0;}
.user-name{font-size:12.5px;font-weight:800;color:var(--text1);}
.user-role{font-size:10px;color:var(--text2);font-weight:600;}

/* ===== MAIN AREA ===== */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0;}

/* ===== TOPBAR ===== */
.topbar{height:66px;background:var(--white);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 28px;gap:14px;flex-shrink:0;}
.page-info{}
.page-title{font-size:18px;font-weight:900;color:var(--text1);letter-spacing:-.3px;}
.page-sub{font-size:11px;color:var(--text2);font-weight:600;margin-top:1px;}
.topbar-center{margin-left:28px;display:flex;gap:0;background:var(--bg);border-radius:22px;padding:3px;}
.tb-tab{padding:6px 18px;border-radius:18px;font-size:11px;font-weight:800;cursor:pointer;color:var(--text3);transition:all .18s;}
.tb-tab.active{background:var(--grad1);color:#fff;box-shadow:0 4px 14px rgba(255,60,160,.35);}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;}
.period-tag{background:linear-gradient(135deg,rgba(23,193,232,.1),rgba(23,193,232,.05));color:var(--cyan);border:1px solid rgba(23,193,232,.3);font-size:11px;font-weight:700;padding:6px 14px;border-radius:22px;white-space:nowrap;}
.icon-btn{width:36px;height:36px;border-radius:11px;background:var(--bg);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;transition:all .18s;color:var(--text2);padding:0;}
.icon-btn:hover{background:var(--white);box-shadow:var(--shadow);}
.notif-dot{position:absolute;top:7px;right:7px;width:7px;height:7px;background:var(--pink);border-radius:50%;border:2px solid #fff;}
.btn{height:36px;padding:0 18px;border-radius:11px;font-size:12px;font-weight:800;cursor:pointer;border:none;font-family:var(--font);transition:all .18s;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;}
.btn-primary{background:var(--grad1);color:#fff;box-shadow:0 4px 14px rgba(255,60,160,.35);}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(255,60,160,.45);}
.btn-secondary{background:var(--grad2);color:#fff;box-shadow:0 4px 14px rgba(123,94,167,.3);}
.btn-cyan{background:var(--grad3);color:#fff;box-shadow:0 4px 14px rgba(23,193,232,.3);}
.btn-outline{background:var(--white);color:var(--text3);border:1.5px solid var(--border);}
.btn-outline:hover{border-color:var(--pink);color:var(--pink);}
.btn-sm{height:30px;padding:0 14px;font-size:11px;border-radius:9px;display:inline-flex;align-items:center;gap:5px;}
.btn.btn-xs{height:26px;padding:0 9px;font-size:10px;font-weight:700;border-radius:7px;letter-spacing:0;line-height:24px;box-shadow:none;display:inline-flex;align-items:center;gap:4px;}
.row-actions{display:inline-flex;flex-wrap:wrap;gap:3px;align-items:center;}
.row-actions .btn{margin:0;box-shadow:none;}
@media (max-width:600px){.btn.btn-xs{padding:0 7px !important;font-size:9px !important;height:24px !important;}}
.pagination-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--border);font-size:11px;color:var(--text2);flex-wrap:wrap;gap:10px;}
.pagination-bar:empty{display:none;}
.pg-info{font-weight:700;}
.pg-controls{display:inline-flex;gap:4px;align-items:center;}
.pg-btn{height:28px;min-width:28px;padding:0 8px;border:1.5px solid var(--border);background:#fff;color:var(--text2);border-radius:8px;font-size:11px;font-weight:700;cursor:pointer;transition:all .15s;font-family:var(--font);}
.pg-btn:hover:not(:disabled){border-color:var(--pink);color:var(--pink);}
.pg-btn:disabled{opacity:.4;cursor:not-allowed;}
.pg-btn.pg-active{background:var(--grad1);color:#fff;border-color:transparent;}
.btn-danger{background:linear-gradient(135deg,var(--red),#FF8073);color:#fff;}
.btn-secondary:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,94,167,.4);}
.btn-cyan:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(23,193,232,.4);}
.btn-danger:hover{transform:translateY(-1px);filter:brightness(1.08);}
.btn:active{transform:translateY(0) scale(.97) !important;transition-duration:.06s;}

/* ===== CONTENT AREA ===== */
.content{flex:1;overflow-y:auto;padding:22px 28px;background:var(--bg);}

/* ===== CARDS ===== */
.card{background:var(--white);border-radius:16px;box-shadow:var(--shadow);transition:box-shadow .2s;}
.card-header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 0;}
.card-title{font-size:14px;font-weight:800;color:var(--text1);}
.card-sub{font-size:11px;color:var(--text2);font-weight:600;margin-top:2px;}
.card-body{padding:16px 20px;}

/* ===== KPI CARDS ===== */
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;}
.kpi-card{background:var(--white);border-radius:16px;padding:16px 18px;box-shadow:var(--shadow);display:flex;align-items:center;gap:14px;transition:transform .18s;}
.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);}
.kpi-icon-wrap{width:46px;height:46px;border-radius:14px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.kpi-label{font-size:10px;color:var(--text2);font-weight:700;text-transform:uppercase;letter-spacing:.8px;margin-bottom:3px;}
.kpi-value{font-size:18px;font-weight:900;color:var(--text1);letter-spacing:-.5px;line-height:1;}
.kpi-value small{font-size:10px;color:var(--text2);font-weight:600;margin-left:2px;letter-spacing:0;}
.kpi-change{font-size:10px;font-weight:700;margin-top:4px;}
.kpi-up{color:var(--green);}
.kpi-down{color:var(--red);}
.kpi-neutral{color:var(--text3);}

/* ===== COLOR GRADIENT CARDS ===== */
.grad-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;}
.grad-card{border-radius:16px;padding:16px 18px;color:#fff;position:relative;overflow:hidden;box-shadow:0 6px 22px rgba(0,0,0,.13);transition:transform .18s;}
.grad-card:hover{transform:translateY(-2px);}
.grad-card.g1{background:var(--grad1);}
.grad-card.g2{background:var(--grad2);}
.grad-card.g3{background:var(--grad3);}
.grad-card.g4{background:var(--grad4);}
.grad-card.gg{background:var(--grad-green);}
.gc-label{font-size:10px;font-weight:700;opacity:.85;margin-bottom:5px;text-transform:uppercase;letter-spacing:.8px;}
.gc-value{font-size:22px;font-weight:900;letter-spacing:-.5px;line-height:1;}
.gc-value small{font-size:10px;opacity:.8;font-weight:600;margin-left:2px;}
.gc-sub{font-size:10px;opacity:.75;margin-top:5px;font-weight:600;}
.gc-icon{position:absolute;top:14px;right:14px;width:30px;height:30px;background:rgba(255,255,255,.25);border-radius:9px;display:flex;align-items:center;justify-content:center;}
.gc-wave{position:absolute;bottom:-6px;right:-6px;opacity:.18;}

/* ===== MID ROW ===== */
.mid-row{display:grid;grid-template-columns:1.6fr 1fr;gap:14px;margin-bottom:18px;}

/* ===== CHART BARS ===== */
.chart-wrap{padding:0 20px 16px;}
.chart-legend{display:flex;gap:14px;margin-bottom:12px;}
.leg-item{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:700;color:var(--text3);}
.leg-dot{width:9px;height:9px;border-radius:3px;}
.bars-area{display:flex;align-items:flex-end;gap:10px;height:120px;}
.bar-col{display:flex;flex-direction:column;align-items:center;flex:1;gap:4px;}
.bar-grp{display:flex;gap:3px;align-items:flex-end;}
.bar{border-radius:5px 5px 0 0;min-width:14px;transition:opacity .18s;}
.bar:hover{opacity:.8;}
.bar-lbl{font-size:9px;color:var(--text2);font-weight:700;}

/* ===== DONUT ===== */
.donut-card-inner{padding:18px 20px;}
.donut-wrap{display:flex;justify-content:center;margin:12px 0 14px;}
.donut-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.ds-item{text-align:center;background:var(--bg);border-radius:12px;padding:10px 6px;}
.ds-val{font-size:17px;font-weight:900;line-height:1;}
.ds-lbl{font-size:9px;color:var(--text2);font-weight:700;margin-top:3px;text-transform:uppercase;letter-spacing:.5px;}

/* ===== TABLES ===== */
.table-wrap{overflow-x:auto;}
table.data-table{width:100%;border-collapse:separate;border-spacing:0;}
table.data-table th{font-size:10px;font-weight:800;color:var(--text2);text-transform:uppercase;letter-spacing:.9px;padding:10px 16px;text-align:left;border-bottom:2px solid var(--border);white-space:nowrap;position:sticky;top:0;background:var(--white);z-index:2;box-shadow:0 1px 0 var(--border);}
table.data-table td{font-size:12.5px;padding:11px 16px;border-bottom:1px solid var(--border);color:var(--text3);font-weight:600;vertical-align:middle;transition:background .12s;}
table.data-table td.strong{color:var(--text1);font-weight:800;}
table.data-table tr:last-child td{border-bottom:none;}
table.data-table tr:hover td{background:#FAFAFF;}
table.data-table .mono{font-size:12px;font-weight:700;}

/* ===== BADGES / PILLS ===== */
.pill{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:10px;font-weight:800;}
.pill-pink{background:linear-gradient(135deg,rgba(255,60,160,.12),rgba(255,140,200,.08));color:var(--pink);}
.pill-purple{background:linear-gradient(135deg,rgba(123,94,167,.12),rgba(167,139,218,.08));color:var(--purple);}
.pill-cyan{background:linear-gradient(135deg,rgba(23,193,232,.12),rgba(126,235,255,.08));color:var(--cyan);}
.pill-green{background:rgba(5,205,153,.12);color:var(--green);}
.pill-red{background:rgba(238,93,80,.12);color:var(--red);}
.pill-orange{background:rgba(255,171,112,.12);color:var(--orange);}
.pill-gray{background:var(--bg);color:var(--text3);}
.pill-dot{width:5px;height:5px;border-radius:50%;background:currentColor;}

/* ===== AVATAR ===== */
.av{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;flex-shrink:0;}
.av-pink{background:linear-gradient(135deg,rgba(255,60,160,.15),rgba(255,140,200,.1));color:var(--pink);}
.av-purple{background:linear-gradient(135deg,rgba(123,94,167,.15),rgba(167,139,218,.1));color:var(--purple);}
.av-cyan{background:linear-gradient(135deg,rgba(23,193,232,.15),rgba(126,235,255,.1));color:var(--cyan);}
.av-orange{background:rgba(255,171,112,.15);color:var(--orange);}
.av-green{background:rgba(5,205,153,.15);color:var(--green);}
.av-grad{background:var(--grad5);color:#fff;}

/* ===== SEARCH BAR ===== */
.search-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px;}
.search-input{flex:1;height:38px;border-radius:11px;border:1.5px solid var(--border);padding:0 14px 0 38px;font-size:13px;font-family:var(--font);color:var(--text1);outline:none;background:var(--bg);transition:border-color .18s;position:relative;}
.search-input:focus{border-color:var(--pink);background:var(--white);}
.search-input::placeholder{color:var(--text2);font-weight:600;}
.search-wrap{position:relative;flex:1;}
.search-ico{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text2);pointer-events:none;}
.filter-select{height:38px;border-radius:11px;border:1.5px solid var(--border);padding:0 12px;font-size:12px;font-family:var(--font);color:var(--text3);outline:none;background:var(--white);cursor:pointer;font-weight:700;}
.filter-select:focus{border-color:var(--pink);outline:none;box-shadow:0 0 0 3px rgba(255,60,160,.08);}

/* ===== TABS ===== */
.page-tabs{display:flex;gap:4px;background:var(--bg);padding:4px;border-radius:14px;margin-bottom:18px;width:fit-content;}
.page-tab{padding:7px 20px;border-radius:10px;font-size:12px;font-weight:800;cursor:pointer;color:var(--text3);transition:all .18s;}
.page-tab.active{background:var(--grad1);color:#fff;box-shadow:0 4px 14px rgba(255,60,160,.3);}
.page-tab:not(.active):hover{background:var(--white);color:var(--text1);}

/* ===== MODALS ===== */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(43,54,116,.25);backdrop-filter:blur(4px);z-index:var(--z-modal);align-items:center;justify-content:center;}
.modal-overlay.open{display:flex;}
@keyframes modalIn{from{opacity:0;transform:translateY(14px) scale(.97);}to{opacity:1;transform:none;}}
@keyframes overlayIn{from{opacity:0;}to{opacity:1;}}
.modal-overlay.open{animation:overlayIn .18s ease;}
.modal-overlay.open .modal{animation:modalIn .22s cubic-bezier(.34,1.3,.64,1);}
.modal-overlay.open .modal-lg{animation:modalIn .22s cubic-bezier(.34,1.3,.64,1);}
.modal-overlay.open .modal-xl{animation:modalIn .22s cubic-bezier(.34,1.3,.64,1);}
.modal{background:var(--white);border-radius:20px;box-shadow:0 20px 60px rgba(43,54,116,.2);width:90%;max-width:560px;max-height:90vh;max-height:90dvh;overflow-y:auto;}
.modal-lg{max-width:720px;}
.modal-xl{max-width:900px;}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:22px 24px 16px;border-bottom:1px solid var(--border);}
.modal-header h3{font-size:16px;font-weight:900;color:var(--text1);}
.modal-close{width:30px;height:30px;border-radius:9px;border:none;background:var(--bg);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0;color:var(--text3);transition:all .18s;position:relative;}
.modal-close:hover{background:var(--border);color:var(--text1);}
/* Remplace le caractère ✕ par un SVG injecté via ::before pour rendu cross-OS cohérent */
.modal-close::before{content:"";position:absolute;inset:0;background-color:currentColor;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'><path d='M3.5 3.5l7 7M10.5 3.5l-7 7' stroke='black' stroke-width='1.6' stroke-linecap='round'/></svg>") center/14px 14px no-repeat;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'><path d='M3.5 3.5l7 7M10.5 3.5l-7 7' stroke='black' stroke-width='1.6' stroke-linecap='round'/></svg>") center/14px 14px no-repeat;}
.modal-body{padding:20px 24px;}
.modal-footer{padding:16px 24px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px;}

/* ===== FORM ===== */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.form-grid.cols3{grid-template-columns:1fr 1fr 1fr;}
.form-grid.cols1{grid-template-columns:1fr;}
.form-group{display:flex;flex-direction:column;gap:5px;}
.form-group.full{grid-column:1/-1;}
.form-label{font-size:11px;font-weight:800;color:var(--text3);text-transform:uppercase;letter-spacing:.7px;}
/* Asterisque rouge sur les champs obligatoires (label "* ...") */
.form-label:has(+ input[required]),
.form-label:has(+ select[required]),
.form-label:has(+ textarea[required]){color:var(--text2);}
/* Auto-style : tout label dont le texte se termine par " *" → étoile en rouge */
.form-label{position:relative;}
.form-input{height:40px;border-radius:11px;border:1.5px solid var(--border);padding:0 14px;font-size:13px;font-family:var(--font);color:var(--text1);outline:none;background:var(--bg);transition:border-color .18s;font-weight:600;}
.form-input:focus{border-color:var(--pink);background:var(--white);box-shadow:0 0 0 3px rgba(255,60,160,.1);}
.form-input.error{border-color:var(--red) !important;}
.form-input.error:focus{box-shadow:0 0 0 3px rgba(238,93,80,.15);}
.form-select:focus{border-color:var(--pink);outline:none;}
.form-select{width:100%;height:40px;border-radius:11px;border:1.5px solid var(--border);padding:0 14px;font-size:13px;font-family:var(--font);color:var(--text1);outline:none;background:var(--bg);cursor:pointer;font-weight:700;}
.form-select:focus{border-color:var(--pink);}
.form-select:hover{border-color:var(--text2);}
.form-textarea{border-radius:11px;border:1.5px solid var(--border);padding:10px 14px;font-size:13px;font-family:var(--font);color:var(--text1);outline:none;background:var(--bg);transition:border-color .18s;font-weight:600;resize:vertical;min-height:80px;}
.form-textarea:focus{border-color:var(--pink);background:var(--white);box-shadow:0 0 0 3px rgba(255,60,160,.1);outline:none;}

/* ===== SECTION DIVIDER ===== */
.sec-title{font-size:11px;font-weight:800;color:var(--text2);text-transform:uppercase;letter-spacing:1.2px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border);}

/* ===== ALERTS ===== */
.alert-list{display:flex;flex-direction:column;gap:8px;}
.alert-item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:12px;font-size:12px;font-weight:700;}
.alert-item.warn{background:rgba(255,171,112,.1);border:1px solid rgba(255,171,112,.3);color:var(--orange);}
.alert-item.danger{background:rgba(238,93,80,.1);border:1px solid rgba(238,93,80,.3);color:var(--red);}
.alert-item.info{background:rgba(23,193,232,.1);border:1px solid rgba(23,193,232,.3);color:var(--cyan);}

/* ===== PAGE SECTIONS ===== */
.page{display:none;}
.page.active{display:block;}

/* ===== EMPTY STATE ===== */
.empty-state{text-align:center;padding:48px 20px;}
.empty-state svg{margin:0 auto 16px;display:block;opacity:.3;}
.empty-state h4{font-size:15px;font-weight:800;color:var(--text3);margin-bottom:6px;}
.empty-state p{font-size:12px;color:var(--text2);}

/* ===== DETAIL PANELS ===== */
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:18px;}
.detail-item{background:var(--bg);border-radius:12px;padding:12px 14px;}
.detail-label{font-size:10px;font-weight:800;color:var(--text2);text-transform:uppercase;letter-spacing:.7px;margin-bottom:4px;}
.detail-value{font-size:13px;font-weight:800;color:var(--text1);}

/* ===== STATS ROW ===== */
.stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px;}
.stats-row-4{grid-template-columns:repeat(4,1fr);}
@media (max-width:900px){.stats-row,.stats-row-4{grid-template-columns:repeat(2,1fr);}}
@media (max-width:600px){.stats-row,.stats-row-4{grid-template-columns:1fr;}}

/* Grilles utilitaires responsive (dashboard, marge, etc.) */
@media (max-width:900px){
  .dash-row-2{grid-template-columns:1fr !important;}
  .grid-4{grid-template-columns:repeat(2,1fr) !important;}
}
@media (max-width:600px){
  .grid-4{grid-template-columns:1fr !important;}
}
.stat-card{background:var(--white);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);text-align:center;}
.stat-val{font-size:22px;font-weight:900;color:var(--text1);letter-spacing:-.5px;}
.stat-lbl{font-size:10px;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.7px;margin-top:3px;}

/* ===== DRAWER SUIVI FL ===== */
.fl-drawer{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:rgba(30,35,70,.45);opacity:0;pointer-events:none;transition:opacity .22s;}
.fl-drawer.open{opacity:1;pointer-events:all;}
.fl-drawer-inner{background:var(--white);border-radius:20px;box-shadow:0 28px 72px rgba(43,54,116,.24);width:96vw;max-width:1420px;max-height:92vh;max-height:92dvh;display:flex;flex-direction:column;transform:translateY(18px);transition:transform .22s;}
.fl-drawer.open .fl-drawer-inner{transform:translateY(0);}
.fl-drawer-handle{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 28px 20px;border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap;}
.fl-drawer-title{font-size:16px;font-weight:900;color:var(--text1);display:flex;align-items:center;gap:12px;line-height:1.3;}
.fl-drawer-body{overflow-y:auto;flex:1;padding:22px 28px 28px;}

/* Drawer FL — table aérée (override .data-table générique pour ce drawer) */
.fl-drawer-body .data-table{border-collapse:separate;border-spacing:0;}
.fl-drawer-body .data-table thead th{
  background:linear-gradient(180deg,#F8F9FF 0%,#F4F7FE 100%);
  padding:14px 16px;
  font-size:10px;
  font-weight:800;
  color:var(--text2);
  text-transform:uppercase;
  letter-spacing:.7px;
  border-bottom:1.5px solid var(--border);
  position:sticky;top:0;z-index:2;
}
.fl-drawer-body .data-table tbody td{
  padding:18px 16px;
  border-bottom:1px solid #F0F3FB;
  vertical-align:middle;
  font-size:12px;
  transition:background .15s;
}
.fl-drawer-body .data-table tbody tr:hover td{background:#FAFBFF;}
.fl-drawer-body .data-table tbody tr.row-current td{
  background:linear-gradient(90deg,rgba(255,60,160,.06) 0%,rgba(255,60,160,.02) 100%);
}
.fl-drawer-body .data-table tbody tr.row-current:hover td{background:linear-gradient(90deg,rgba(255,60,160,.09) 0%,rgba(255,60,160,.03) 100%);}
.fl-drawer-body .data-table tbody tr.row-done td{background:rgba(5,205,153,.04);}
.fl-drawer-body .data-table tbody tr.row-done:hover td{background:rgba(5,205,153,.07);}
/* Total row */
.fl-drawer-body .data-table tbody tr.row-total td{
  background:linear-gradient(135deg,rgba(108,99,255,.06),rgba(255,60,160,.04));
  border-top:2px solid rgba(108,99,255,.25);
  border-bottom:none;
  padding:18px 16px;
  font-weight:900;
}
/* Statut chip hover plus prononcé */
.fl-drawer-body .data-table tbody td button[aria-pressed]:hover{transform:scale(1.08);box-shadow:0 4px 12px rgba(43,54,116,.12);}
.fl-drawer-body .data-table tbody td button[aria-pressed]:active{transform:scale(.94);}
/* Première colonne : "Mois" un peu plus large */
.fl-drawer-body .data-table th:first-child,
.fl-drawer-body .data-table td:first-child{padding-left:20px;min-width:120px;}
.fl-drawer-body .data-table th:last-child,
.fl-drawer-body .data-table td:last-child{padding-right:20px;}
/* Body : fond bg2 subtil pour donner de la profondeur à la table */
.fl-drawer-body{background:var(--bg2,#EEF2FB);}
.fl-drawer-body .data-table{background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 1px 3px rgba(43,54,116,.05);}
.fl-drawer-body .table-wrap{border-radius:14px;}
/* Statuts chips cochables */
.status-chips{display:flex;gap:6px;flex-wrap:wrap;}
.status-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;font-size:10px;font-weight:800;cursor:pointer;border:1.5px solid;transition:all .15s;white-space:nowrap;user-select:none;}
.status-chip input[type=checkbox]{display:none;}
.sc-received{border-color:rgba(255,171,112,.4);color:var(--orange);background:rgba(255,171,112,.08);}
.sc-received.checked{border-color:var(--orange);background:rgba(255,171,112,.15);}
.sc-sent{border-color:rgba(23,193,232,.4);color:var(--cyan);background:rgba(23,193,232,.08);}
.sc-sent.checked{border-color:var(--cyan);background:rgba(23,193,232,.15);}
.sc-paid{border-color:rgba(5,205,153,.4);color:var(--green);background:rgba(5,205,153,.08);}
.sc-paid.checked{border-color:var(--green);background:rgba(5,205,153,.18);}
.sc-archived{border-color:rgba(163,174,208,.4);color:var(--text3);background:rgba(163,174,208,.06);}
.sc-archived.checked{border-color:var(--text3);background:rgba(163,174,208,.15);}
/* Row highlight selon statut */
.fact-row-done td{background:rgba(5,205,153,.03);}
.fact-row-archived td{opacity:.55;}
.fact-row-archived{font-style:italic;}

/* ===== AUTOCOMPLETE ===== */
.autocomplete-wrap{position:relative;}
.autocomplete-input{width:100%;}
.autocomplete-list{position:absolute;top:100%;left:0;right:0;background:var(--white);border:1.5px solid var(--pink);border-top:none;border-radius:0 0 11px 11px;box-shadow:0 8px 24px rgba(43,54,116,.12);z-index:500;max-height:200px;overflow-y:auto;display:none;}
.autocomplete-list.open{display:block;}
.autocomplete-item{padding:9px 14px;font-size:12px;font-weight:600;color:var(--text3);cursor:pointer;display:flex;align-items:center;gap:10px;transition:background .12s;}
.autocomplete-item:hover{background:var(--bg);color:var(--text1);}
.autocomplete-item .ac-av{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;flex-shrink:0;}
.autocomplete-item .ac-name{font-weight:800;color:var(--text1);}
.autocomplete-item .ac-sub{font-size:10px;color:var(--text2);margin-top:1px;}
.autocomplete-item .ac-badge{margin-left:auto;font-size:9px;font-weight:800;padding:2px 7px;border-radius:10px;}
/* ===== PRINT / PDF ===== */
@page{
  size:A4;
  margin:0;
}
@media print{
  /* 🔥 FORCE le navigateur à imprimer les couleurs de fond + gradients (rose, violet, ...).
     Sans cette règle, Chrome/Safari/Firefox suppriment les fonds colorés pour économiser l'encre.
     - Chrome/Safari : -webkit-print-color-adjust
     - Firefox / standard : print-color-adjust
     - Legacy : color-adjust */
  *,*::before,*::after{
    -webkit-print-color-adjust:exact!important;
    print-color-adjust:exact!important;
    color-adjust:exact!important;
  }
  body *{visibility:hidden;}
  #print-doc,#print-doc *{visibility:visible;}
  .print-doc-overlay,.print-doc-wrap{overflow:visible!important;max-height:none!important;}
  #print-doc{
    position:absolute;
    top:0;left:0;
    width:100%;
    height:auto;
    overflow:visible;
    background:#fff;
    z-index:99999;
    padding:18mm 14mm;
    box-sizing:border-box;
  }
  /* Préserver les gradients sur le texte (background-clip:text) */
  #print-doc [style*="background-clip"],
  #print-doc [style*="-webkit-background-clip"]{
    -webkit-print-color-adjust:exact!important;
    print-color-adjust:exact!important;
  }
  .no-print{display:none!important;}
}
.print-doc-overlay{display:none;position:fixed;inset:0;background:rgba(43,54,116,.5);backdrop-filter:blur(6px);z-index:var(--z-print);align-items:center;justify-content:center;}
.print-doc-overlay.open{display:flex;}
.print-doc-wrap{background:#fff;border-radius:16px;width:90%;max-width:700px;max-height:92vh;overflow-y:auto;box-shadow:0 24px 80px rgba(0,0,0,.25);}
.print-doc-actions{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-top:1px solid #eee;background:#fafafa;border-radius:0 0 16px 16px;}

/* ===== PROFILS CHECKBOXES ===== */
.profil-check{display:flex;align-items:center;justify-content:center;}
.profil-check input[type=checkbox]{display:none;}
.profil-check label{width:22px;height:22px;border-radius:7px;border:2px solid var(--border);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .18s;background:var(--white);}
.profil-check input[type=checkbox]:checked + label{background:var(--grad1);border-color:var(--pink);box-shadow:0 3px 10px rgba(255,60,160,.3);}
.profil-check input[type=checkbox]:checked + label::after{content:'';width:12px;height:12px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3 8.5L6.5 12L13 4.5' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-size:contain;background-repeat:no-repeat;}
.profil-check.locked label{background:linear-gradient(135deg,rgba(255,60,160,.1),rgba(123,94,167,.06));border-color:rgba(255,60,160,.25);cursor:not-allowed;}
.profil-check.locked label::after{content:'';width:12px;height:12px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3 8.5L6.5 12L13 4.5' stroke='%23FF3CA0' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-size:contain;background-repeat:no-repeat;}
.ro-check{display:flex;align-items:center;justify-content:center;}
.ro-check input[type=checkbox]{display:none;}
.ro-check label{width:22px;height:22px;border-radius:7px;border:2px solid var(--border);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .18s;background:var(--white);}
.ro-check input[type=checkbox]:checked + label{background:linear-gradient(135deg,rgba(23,193,232,.15),rgba(126,235,255,.1));border-color:var(--cyan);}
.ro-check input[type=checkbox]:checked + label::after{content:'';width:12px;height:12px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z' stroke='%2317C1E8' stroke-width='1.5'/%3E%3Ccircle cx='8' cy='8' r='2.2' fill='%2317C1E8'/%3E%3C/svg%3E");background-size:contain;background-repeat:no-repeat;}
.module-row:hover td{background:#FAFAFF;}
.module-row td{vertical-align:middle;}

/* ===== SCROLLBAR ===== */
::-webkit-scrollbar{width:5px;height:5px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:10px;}
::-webkit-scrollbar-thumb:hover{background:var(--text2);}

/* ===== TOAST ===== */
@keyframes toastIn{from{opacity:0;transform:translateY(12px) scale(.95);}to{opacity:1;transform:none;}}
.toast{position:fixed;bottom:28px;right:28px;z-index:9999;padding:12px 20px;border-radius:14px;font-size:13px;font-weight:700;box-shadow:var(--shadow-md);transition:opacity .3s;display:flex;align-items:center;gap:10px;animation:toastIn .25s cubic-bezier(.34,1.3,.64,1);}
.toast.success{background:var(--white);color:var(--green);border-left:4px solid var(--green);}
.toast.error{background:var(--white);color:var(--red);border-left:4px solid var(--red);}
.toast.info{background:var(--white);color:var(--cyan);border-left:4px solid var(--cyan);}

/* ===== POINTAGE IMPORT ===== */
.import-zone{border:2px dashed var(--border);border-radius:16px;padding:40px 20px;text-align:center;cursor:pointer;transition:all .18s;background:var(--bg);}
.import-zone:hover,.import-zone.dragover{border-color:var(--pink);background:rgba(255,60,160,.04);}
.import-zone h4{font-size:15px;font-weight:800;color:var(--text3);margin-bottom:6px;}
.import-zone p{font-size:12px;color:var(--text2);}

/* ===== FACTURE PREVIEW ===== */
.facture-preview{background:var(--white);border:1px solid var(--border);border-radius:12px;padding:28px 32px;font-size:12px;line-height:1.6;}
.facture-preview h2{font-size:22px;font-weight:900;color:var(--text1);margin-bottom:4px;}
.facture-header{display:flex;justify-content:space-between;margin-bottom:24px;padding-bottom:20px;border-bottom:2px solid var(--border);}
.fact-table{width:100%;border-collapse:collapse;margin:16px 0;}
.fact-table th{background:var(--bg);padding:8px 12px;font-size:10px;font-weight:800;color:var(--text2);text-transform:uppercase;letter-spacing:.7px;text-align:left;}
.fact-table td{padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px;font-weight:600;color:var(--text3);}
.fact-total{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin-top:12px;}
.fact-total-row{display:flex;gap:40px;font-size:12px;}
.fact-total-row.big{font-size:15px;font-weight:900;color:var(--text1);}

/* ===== CONGES ===== */
/* Unification : .conge-badge → même spec que .pill (border-radius 20px) */
.conge-badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:10px;font-weight:800;}
.conge-cp{background:rgba(23,193,232,.12);color:var(--cyan);}
.conge-cm{background:rgba(238,93,80,.12);color:var(--red);}
.conge-valide{background:rgba(5,205,153,.12);color:var(--green);}
.conge-attente{background:rgba(255,171,112,.12);color:var(--orange);}
.conge-refuse{background:rgba(238,93,80,.12);color:var(--red);}

/* ===== DEPENSES ===== */
.dep-grid{display:grid;grid-template-columns:minmax(160px,2fr) repeat(12,minmax(40px,1fr)) 76px;gap:0;border-radius:12px;overflow:hidden;}

/* Base cell — fond blanc, séparateurs horizontaux seulement */
.dep-cell{
  padding:10px 6px;
  border-bottom:1px solid var(--border);
  border-right:none;
  font-size:11px;
  text-align:center;
  cursor:pointer;
  transition:background .18s, transform .1s;
  display:flex;
  align-items:center;
  justify-content:center;
  min-height:50px;
  background:var(--white);
  position:relative;
}
/* Ligne verticale légère entre colonnes */
.dep-cell + .dep-cell{border-left:1px solid rgba(233,237,247,.7);}

/* Header row — fond légèrement teinté, sticky */
.dep-cell.header{
  background:#F7F9FF;
  font-weight:800;
  color:var(--text2);
  font-size:9px;
  text-transform:uppercase;
  letter-spacing:.8px;
  cursor:default;
  border-bottom:2px solid var(--border);
  position:sticky;
  top:0;
  z-index:3;
}
.dep-cell.header + .dep-cell.header{border-left:1px solid rgba(233,237,247,.7);}

/* Libellé column — hiérarchie texte + boutons discrets au hover */
.dep-cell.libelle{
  text-align:left;
  flex-direction:column;
  align-items:flex-start;
  justify-content:center;
  padding:10px 14px;
  cursor:default;
  border-left:none;
  background:var(--white);
}
.dep-cell.libelle .dep-name{
  font-size:12.5px;
  font-weight:800;
  color:var(--text1);
  line-height:1.2;
}
.dep-cell.libelle .dep-amount{
  font-size:10px;
  font-weight:700;
  color:var(--text3);
  margin-top:2px;
}
.dep-cell.actions{
  cursor:default;
  gap:4px;
  padding:6px 8px;
  background:var(--white);
}

/* Cellules payées — badge pill vert */
.dep-cell.paid{
  background:rgba(5,205,153,.07);
  color:var(--green);
  cursor:pointer;
}
.dep-cell.paid:hover{
  background:rgba(5,205,153,.14);
}
.dep-paid-badge{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:26px;
  height:26px;
  border-radius:50%;
  background:rgba(5,205,153,.18);
  border:1.5px solid rgba(5,205,153,.4);
  flex-shrink:0;
}
.dep-paid-badge svg{display:block;}

/* Cellules impayées — cercle vide cliquable */
.dep-cell.unpaid{
  background:var(--white);
  color:var(--text3);
  cursor:pointer;
}
.dep-cell.unpaid:hover{
  background:rgba(255,60,160,.04);
}
.dep-empty-ring{
  width:22px;
  height:22px;
  border-radius:50%;
  border:1.5px solid var(--border);
  background:transparent;
  transition:border-color .18s, background .18s;
  flex-shrink:0;
}
.dep-cell.unpaid:hover .dep-empty-ring{
  border-color:rgba(255,60,160,.4);
  background:rgba(255,60,160,.04);
}

/* Total row — fond distinct, typo forte */
.dep-cell.total-row{
  background:#F0F3FD;
  font-weight:900;
  color:var(--text1);
  font-size:11px;
  border-top:2px solid var(--border);
  border-bottom:none;
  position:sticky;
  bottom:0;
  z-index:2;
}
.dep-cell.total-row.total-libelle{
  font-size:10px;
  font-weight:900;
  text-transform:uppercase;
  letter-spacing:.8px;
  color:var(--text2);
  justify-content:flex-start;
  padding-left:14px;
}
.dep-cell.total-row.total-val{
  color:var(--text1);
  font-size:11.5px;
}

/* PJ icon button */
.dep-pj-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:20px;
  height:20px;
  border-radius:5px;
  font-size:11px;
  margin-top:3px;
  transition:background .15s, transform .1s;
  flex-shrink:0;
}
.dep-pj-btn.has-pj{
  background:rgba(5,205,153,.15);
}
.dep-pj-btn.add-pj{
  background:rgba(112,126,174,.08);
  opacity:.7;
}
.dep-pj-btn:hover{
  background:rgba(255,60,160,.12);
  transform:scale(1.1);
  opacity:1;
}

/* ===== CONFIG ===== */
.cfg-tabs{display:flex;gap:4px;background:var(--bg);padding:4px;border-radius:14px;margin-bottom:22px;width:fit-content;}
.cfg-tab{padding:7px 20px;border-radius:10px;font-size:12px;font-weight:800;cursor:pointer;color:var(--text3);transition:all .18s;}
.cfg-tab.active{background:var(--grad5);color:#fff;box-shadow:0 4px 14px rgba(255,60,160,.3);}

/* ===== UPLOAD ZONE ===== */
.upload-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:10px;border:1.5px dashed var(--border);font-size:12px;font-weight:700;color:var(--text3);cursor:pointer;transition:all .18s;background:var(--bg);}
.upload-btn:hover{border-color:var(--pink);color:var(--pink);}

/* RESPONSIVE TWEAKS */
@media (max-width:1100px){.kpi-grid{grid-template-columns:repeat(2,1fr);}.grad-cards{grid-template-columns:repeat(2,1fr);}}
@media (max-width:900px){
  :root{--sidebar-w:64px;}
  .sidebar{width:64px;}
  .sidebar .logo-text,.sidebar .logo-version,.sidebar .nav-label,.sidebar .nav-item span,.sidebar .nav-badge{display:none;}
  .sidebar .nav-item{justify-content:center;padding:10px;}
  .topbar{padding:0 14px;gap:8px;}
  .content{padding:14px;}
  .kpi-grid{grid-template-columns:1fr;}
  .grad-cards{grid-template-columns:1fr;}
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .data-table{min-width:720px;white-space:nowrap;}
  .modal{width:96%;max-width:96%;max-height:95vh;border-radius:14px;}
  .modal-xl{max-width:96%;}
  .form-grid{grid-template-columns:1fr !important;}
}
/* ── Hamburger button ──────────────────────────────────────── */
.hamburger-btn{display:none;flex-direction:column;justify-content:space-between;width:28px;height:20px;background:none;border:none;cursor:pointer;padding:0;flex-shrink:0;}
.hamburger-btn span{display:block;height:2.5px;background:var(--text1);border-radius:2px;transition:transform .25s,opacity .25s;}
/* Mobile nav overlay */
.mobile-nav-overlay{display:none;position:fixed;inset:0;background:rgba(15,23,41,.45);z-index:99;backdrop-filter:blur(2px);}
.mobile-nav-overlay.active{display:block;}

@media (max-width:600px){
  .hamburger-btn{display:flex;}
  .sidebar{
    display:flex !important; /* override display:none */
    position:fixed;top:0;left:0;height:100%;width:260px;z-index:100;
    transform:translateX(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1);
    box-shadow:4px 0 20px rgba(0,0,0,.2);
  }
  .sidebar.mobile-open{transform:translateX(0);}
  .topbar h1,.topbar .page-title{font-size:14px;}
  .btn{padding:6px 10px;font-size:12px;}
  /* Afficher les labels nav en mode sidebar plein mobile */
  .sidebar.mobile-open .nav-label{display:block !important;}
  .sidebar.mobile-open .nav-badge{display:inline-flex !important;}
  .sidebar.mobile-open{width:260px !important;}
}

/* Loader splash + indicateur sync */
.app-splash{position:fixed;inset:0;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;z-index:9999;transition:opacity .3s;}
.app-splash.hidden{opacity:0;pointer-events:none;}
.spinner{width:42px;height:42px;border:3px solid var(--border);border-top-color:var(--pink);border-radius:50%;animation:spin .8s linear infinite;}
.spinner-sm{width:14px;height:14px;border-width:2px;}
@keyframes spin{to{transform:rotate(360deg);}}
.sync-indicator{position:fixed;bottom:18px;right:18px;background:var(--white);border:1px solid var(--border);border-radius:20px;padding:6px 12px;display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;color:var(--text3);box-shadow:var(--shadow);opacity:0;transform:translateY(8px);transition:opacity .2s,transform .2s;z-index:50;pointer-events:none;}
.sync-indicator.visible{opacity:1;transform:translateY(0);}
.sync-indicator .dot{width:8px;height:8px;border-radius:50%;background:var(--green);}
.sync-indicator.busy .dot{background:var(--orange);animation:pulse 1s infinite;}
.sync-indicator.error .dot{background:var(--red);}
.sync-indicator.error{color:var(--red);}
@keyframes pulse{50%{opacity:.4;}}

/* Bandeau erreur réseau persistant */
.net-banner{position:fixed;top:0;left:0;right:0;background:linear-gradient(135deg,rgba(255,60,160,.95),rgba(231,72,72,.95));color:#fff;padding:8px 16px;font-size:12px;font-weight:700;text-align:center;z-index:9998;display:none;}
.net-banner.visible{display:block;}
.net-banner button{background:rgba(255,255,255,.25);color:#fff;border:none;border-radius:6px;padding:3px 10px;margin-left:8px;font-weight:800;cursor:pointer;}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;transition-duration:.01ms !important;}
}

/* ============================================================
   ===== HARMONISATION GLOBALE — Charte unifiée v2 ============
   ============================================================ */

/* --- Tokens additionnels pour cohérence --- */
:root{
  --radius-xs:7px;
  --radius-sm:9px;
  --radius-md:11px;
  --radius-lg:14px;
  --radius-xl:16px;
  --radius-2xl:20px;
  --radius-pill:999px;
  --transition:.18s ease-out;
  --ring:0 0 0 3px rgba(255,60,160,.18);
  --ring-cyan:0 0 0 3px rgba(23,193,232,.18);
  --ring-danger:0 0 0 3px rgba(238,93,80,.18);
}

/* --- Cliquabilité universelle : tout ce qui semble cliquable doit l'être --- */
button,
[role="button"],
.nav-item,
.tb-tab,
.page-tab,
.user-card,
.icon-btn,
select,
.filter-select,
.modal-close,
.pg-btn,
.kpi-card,
.grad-card,
[onclick]{
  cursor:pointer;
}

button:disabled,
.btn:disabled,
.btn[disabled],
[disabled]{
  cursor:not-allowed;
  opacity:.55;
  filter:grayscale(.2);
  pointer-events:none;
}

/* --- Focus-visible accessibilité (clavier) --- */
button:focus,
input:focus,
select:focus,
textarea:focus,
a:focus,
[role="button"]:focus{
  outline:none;
}
button:focus-visible,
.btn:focus-visible,
.nav-item:focus-visible,
.tb-tab:focus-visible,
.page-tab:focus-visible,
.icon-btn:focus-visible,
.modal-close:focus-visible,
[role="button"]:focus-visible{
  outline:none;
  box-shadow:var(--ring);
}
.btn-cyan:focus-visible{box-shadow:var(--ring-cyan);}
.btn-danger:focus-visible{box-shadow:var(--ring-danger);}
.form-input:focus-visible,
.form-select:focus-visible,
.form-textarea:focus-visible,
.search-input:focus-visible{
  outline:none;
}

/* --- Boutons : harmonisation transitions --- */
.btn{transition:transform var(--transition),box-shadow var(--transition),filter var(--transition),background-color var(--transition),color var(--transition),border-color var(--transition);}
.btn-outline:focus-visible{box-shadow:var(--ring);border-color:var(--pink);}
.btn-outline:active{background:var(--bg);}

/* Variante "ghost" pour boutons secondaires discrets (utilisable inline si besoin) */
.btn-ghost{background:transparent;color:var(--text3);border:1.5px solid transparent;}
.btn-ghost:hover{background:var(--bg);color:var(--text1);}

/* --- Inputs : cohérence focus --- */
.form-input,.form-select,.form-textarea,.search-input{
  transition:border-color var(--transition),box-shadow var(--transition),background-color var(--transition);
}
.form-input:hover:not(:focus),
.form-select:hover:not(:focus),
.form-textarea:hover:not(:focus){
  border-color:#D8DDEA;
}
.form-input::placeholder,
.form-textarea::placeholder{color:var(--text2);font-weight:600;}

/* Inputs disabled / readonly */
.form-input:disabled,.form-input[readonly],
.form-select:disabled,
.form-textarea:disabled,.form-textarea[readonly]{
  background:#F0F2F8;
  color:var(--text3);
  cursor:not-allowed;
  opacity:.85;
}

/* --- Scrollbar plus discrète et arrondie --- */
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:#D8DDEA;border-radius:10px;border:2px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:var(--text2);background-clip:content-box;border:2px solid transparent;}
* {scrollbar-width:thin;scrollbar-color:#D8DDEA transparent;}

/* --- Modals : header bouton fermer cohérent --- */
.modal-close{transition:background var(--transition),color var(--transition),transform var(--transition);}
.modal-close:hover{background:rgba(238,93,80,.08);color:var(--red);}
.modal-close:active{transform:scale(.92);}

/* --- Tables : hover plus net + alignment cohérent --- */
table.data-table tbody tr{transition:background-color .12s;}
table.data-table tbody tr:hover td{background:#FAFAFF;}
table.data-table input.form-input,
table.data-table select.form-select{
  height:30px;
  border-radius:var(--radius-sm);
  font-size:12px;
}
/* Rangée totaux discrète */
table.data-table tfoot td{
  background:linear-gradient(180deg,#FAFAFF,#F4F7FE);
  border-top:2px solid var(--border);
  font-weight:900;
}

/* --- Pills / Badges : cohérence visuelle --- */
.pill{transition:transform var(--transition),box-shadow var(--transition);user-select:none;}
.pill[onclick]:hover,
.pill[role="button"]:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(43,54,116,.1);}

/* Status circle button (utilisé dans suivi facturation) — focus + active */
.status-chip:hover{transform:translateY(-1px);}
.status-chip:active{transform:scale(.95);}

/* --- Cards : hover micro-feedback uniforme --- */
.card{transition:box-shadow var(--transition),transform var(--transition);}

/* --- Toggle switch unifié (réutilisable) --- */
.toggle-switch{position:relative;display:inline-block;width:38px;height:22px;flex-shrink:0;}
.toggle-switch input{display:none;}
.toggle-switch .slider{position:absolute;inset:0;background:#D8DDEA;border-radius:22px;cursor:pointer;transition:background var(--transition);}
.toggle-switch .slider::before{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:transform var(--transition);}
.toggle-switch input:checked + .slider{background:var(--grad1);}
.toggle-switch input:checked + .slider::before{transform:translateX(16px);}

/* --- Lien texte (a href / span action) cohérent --- */
.link-action{color:var(--pink);font-weight:700;cursor:pointer;text-decoration:none;transition:color var(--transition);}
.link-action:hover{color:var(--purple);text-decoration:underline;}

/* --- Empty states : icône SVG centrée + texte --- */
.empty-state{padding:40px 20px;color:var(--text2);}
.empty-state h4{color:var(--text3);font-weight:800;}

/* --- Mobile micro-ajustements --- */
@media (max-width:768px){
  .card-header{padding:14px 16px 0;flex-wrap:wrap;gap:8px;}
  .modal-header{padding:18px 18px 14px;}
  .modal-body{padding:16px 18px;}
  .modal-footer{padding:14px 18px;flex-wrap:wrap;}
  .btn{height:38px;}
  .btn-sm{height:32px;}
  .form-input,.form-select{height:42px;font-size:14px;}
}

/* --- Sélection de texte branding --- */
::selection{background:rgba(255,60,160,.22);color:var(--text1);}

/* --- Scroll indicator pour tables larges --- */
.table-wrap{scroll-padding:16px;}
.table-wrap::-webkit-scrollbar{height:6px;}

/* --- Inputs nombre : enlever spinner par défaut + alignement --- */
input[type=number]{-moz-appearance:textfield;}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}

/* --- Améliorer les SVG inline pour être nets --- */
svg{shape-rendering:geometricPrecision;}
.btn svg{flex-shrink:0;}

/* --- Boutons icon-only : taille minimum tactile (a11y) --- */
.icon-btn{min-width:36px;min-height:36px;}
@media (max-width:600px){
  .icon-btn{min-width:40px;min-height:40px;}
  .modal-close{min-width:40px;min-height:40px;}
}

/* --- Cohérence couleurs texte secondaires (WCAG AA) --- */
.text-muted{color:var(--text2);}
.text-faded{color:var(--text3);}

/* --- Hover unifié sur lignes cliquables --- */
[onclick]:hover:not(.dep-cell):not(.nav-item):not(.tb-tab):not(.page-tab):not(.btn):not(.icon-btn):not(.modal-close):not(.pill):not(.kpi-card):not(.user-card){
  /* Pas de hover global - chaque composant gère son propre hover */
}

/* ============================================================
   ===== FIX BUGS VISUELS COURANTS ============================
   ============================================================ */

/* Fix : SVG dans boutons xs — alignement vertical net */
.btn.btn-xs svg{margin-top:0;display:inline-block;flex-shrink:0;}
.btn-xs{line-height:1 !important;}

/* Fix : row-actions wrap sur 2 lignes — espacement vertical correct */
.row-actions{row-gap:4px;}

/* Fix : KPI value pas tronqué quand long */
.kpi-value{overflow:hidden;text-overflow:ellipsis;}

/* Fix : table sticky header se chevauche avec tfoot */
table.data-table tfoot td{position:relative;z-index:1;}

/* Fix : avatar dans row freelance/sal/ae — taille consistante */
.av{user-select:none;}

/* Fix : page-tabs mal alignés sur mobile */
@media (max-width:600px){
  .page-tabs{flex-wrap:wrap;width:auto;}
  .page-tab{font-size:11px;padding:6px 12px;}
}

/* Fix : modal très haut (1500px+) — ne doit pas dépasser viewport */
.modal{max-height:calc(100vh - 40px);}
.modal-body{max-height:calc(100vh - 200px);overflow-y:auto;}

/* Fix : nav-item icon vertical alignement parfait */
.nav-item{line-height:1;}

/* Fix : status-chip & pill alignement avec text */
.pill,.conge-badge{vertical-align:middle;line-height:1.4;}

/* Fix : input number sans flèches de spinner partout */
input[type=number]{-moz-appearance:textfield !important;}

/* Fix : éviter le shift de layout quand scrollbar apparaît */
html{scrollbar-gutter:stable;}

/* Fix : modal close button — toujours rond + animation */
.modal-close{
  border-radius:50% !important;
  font-size:14px;
  font-weight:600;
  line-height:1;
}

/* Fix : ne pas pouvoir cliquer derrière un modal */
.modal-overlay.open{cursor:default;}

/* Fix : les `<select>` natifs en dark border quand hover (cohérence avec inputs) */
select.filter-select:hover{border-color:#D8DDEA;}

/* Fix : grad-card text overflow */
.grad-card .gc-value,
.grad-card .gc-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* Fix : pied de page pagination */
.pagination-bar{font-weight:600;}
.pg-btn{transition:all var(--transition);}

/* Fix : empty state plus aéré */
.empty-state p{font-weight:600;}

/* Fix : checkbox alignement dans tableaux */
table.data-table input[type=checkbox]{margin:0;vertical-align:middle;}

/* Fix : le drawer FL — body scrollable mais pas le handle */
.fl-drawer-handle{position:sticky;top:0;background:var(--white);z-index:5;}

/* Améliorer la lisibilité des badges actions xs */
.btn-xs svg{margin-right:1px;}

/* Toast : meilleure lisibilité avec icône */
.toast{padding:14px 18px;min-width:200px;}

/* Cards interactives - feedback subtil au hover */
.kpi-card[onclick]:hover,
.kpi-card[role="button"]:hover{cursor:pointer;}

/* Grand titre H1 dans topbar - ne pas wrapper */
.page-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:600px;}

/* ===== AMÉLIORATIONS NAVIGATION ============== */
.nav-item:active{transform:scale(.98);}

/* ===== TOOLTIPS NATIFS PLUS LISIBLES ============== */
[title]{position:relative;}

/* ===== INPUTS DANS LISTES — TAILLE COHÉRENTE ============== */
table.data-table .form-input,
table.data-table input.form-input{
  background:var(--bg);
}
table.data-table .form-input:focus{
  background:var(--white);
  border-color:var(--pink);
}

/* ===== AMÉLIORATIONS BOUTONS DANGER ============== */
.btn-danger.btn-xs{box-shadow:none;}
.btn-danger.btn-xs:hover{filter:brightness(1.05);box-shadow:0 2px 8px rgba(238,93,80,.25);}

/* Fix : btn-cyan, btn-secondary cohérence shadow xs */
.btn-cyan.btn-xs,.btn-secondary.btn-xs{box-shadow:none;}
.btn-cyan.btn-xs:hover{filter:brightness(1.05);}
.btn-secondary.btn-xs:hover{filter:brightness(1.05);}

