/* Fonts loaded via <link> in header.php for speed */
:root{--sn-vert:#00853F;--sn-vert-light:#00a84e;--sn-vert-pale:#e8f5ee;--sn-jaune:#FDEF42;--sn-jaune-soft:#fef3c7;--sn-rouge:#E31B23;--sn-rouge-pale:#fde8e8;--bg-body:#f4f6f9;--bg-sidebar:#fff;--bg-card:#fff;--bg-card-hover:#f8fafc;--bg-input:#f1f5f9;--bg-hover:#f0f4f8;--text-primary:#1e293b;--text-secondary:#475569;--text-muted:#94a3b8;--border:#e2e8f0;--border-light:#cbd5e1;--sidebar-w:260px;--topbar-h:58px;--radius:12px;--radius-sm:8px;--speed:.22s;--ease:cubic-bezier(.4,0,.2,1);--bounce:cubic-bezier(.34,1.56,.64,1);--smooth:cubic-bezier(.22,1,.36,1);--shadow-sm:0 1px 3px rgba(0,0,0,.06);--shadow:0 2px 8px rgba(0,0,0,.08);--shadow-lg:0 8px 30px rgba(0,0,0,.12)}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}body{font-family:'Plus Jakarta Sans',system-ui,sans-serif;background:var(--bg-body);color:var(--text-primary);font-size:13.5px;line-height:1.6;overflow-x:hidden}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:10px}

/* PAGE LOADER */
.page-loader{position:fixed;inset:0;background:var(--bg-body);z-index:99998;display:flex;align-items:center;justify-content:center;transition:opacity .5s var(--smooth),visibility .5s}
.page-loader.done{opacity:0;visibility:hidden;pointer-events:none}
.nav-divider{padding:8px 14px;margin-top:6px;font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);font-weight:700}
.page-loader-inner{text-align:center}
.loader-logo{width:56px;height:56px;background:linear-gradient(135deg,var(--sn-vert),#10b981);border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;margin:0 auto 16px;animation:logoPulse 1.5s ease-in-out infinite}
@keyframes logoPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(0,133,63,.2)}50%{transform:scale(1.05);box-shadow:0 0 0 16px rgba(0,133,63,0)}}
.loader-bar{width:160px;height:4px;background:var(--border);border-radius:2px;overflow:hidden;margin:0 auto}
.loader-bar-fill{height:100%;width:0;background:linear-gradient(90deg,var(--sn-vert),var(--sn-vert-light));border-radius:2px;animation:barFill 1.2s ease forwards}
@keyframes barFill{0%{width:0}100%{width:100%}}
.loader-text-sm{font-size:12px;color:var(--text-muted);margin-top:10px;font-weight:600;animation:fadeIn .5s ease .3s both}

/* ANIMATIONS */
@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes scaleIn{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
@keyframes slideInLeft{from{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:none}}
@keyframes slideInRight{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:none}}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes dotPulse{0%,100%{box-shadow:0 0 0 0 rgba(0,133,63,.4)}70%{box-shadow:0 0 0 8px rgba(0,133,63,0)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.anim-up{animation:fadeUp .5s var(--smooth) both}
.anim-scale{animation:scaleIn .4s var(--bounce) both}
.stagger>*{animation:fadeUp .5s var(--smooth) both}.stagger>*:nth-child(1){animation-delay:.05s}.stagger>*:nth-child(2){animation-delay:.1s}.stagger>*:nth-child(3){animation-delay:.15s}.stagger>*:nth-child(4){animation-delay:.2s}

/* SENEGAL BAR */
.senegal-bar{display:flex;height:3px;position:fixed;top:0;left:0;right:0;z-index:2000}.senegal-bar .sn-v{flex:1;background:var(--sn-vert)}.senegal-bar .sn-j{flex:1;background:var(--sn-jaune)}.senegal-bar .sn-r{flex:1;background:var(--sn-rouge)}

/* GLOBAL LOADER */
.global-loader{position:fixed;inset:0;background:rgba(255,255,255,.85);z-index:9999;display:none;flex-direction:column;align-items:center;justify-content:center;backdrop-filter:blur(2px)}.global-loader.active{display:flex}
.loader-spinner{width:40px;height:40px;border:4px solid var(--border);border-top-color:var(--sn-vert);border-radius:50%;animation:spin .7s linear infinite}
.loader-text{margin-top:14px;font-weight:600;color:var(--text-secondary);font-size:14px}

/* SIDEBAR */
.app-wrapper{display:flex;min-height:100vh;padding-top:3px}
.sidebar{position:fixed;left:0;top:3px;bottom:0;width:var(--sidebar-w);background:var(--bg-sidebar);border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:1050;transition:transform .35s var(--smooth);box-shadow:var(--shadow-sm)}
.sidebar-header{padding:20px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--border)}
.logo-mark{width:40px;height:40px;background:linear-gradient(135deg,var(--sn-vert),#10b981);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff;flex-shrink:0;transition:transform .4s var(--bounce)}
.sidebar-header:hover .logo-mark{transform:rotate(8deg) scale(1.08)}
.logo-text{font-family:'Instrument Serif',serif;font-size:20px;margin:0;color:var(--text-primary)}
.sidebar-nav{flex:1;padding:14px 10px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}
.sidebar-nav .nav-link{display:flex;align-items:center;gap:11px;padding:10px 14px;color:var(--text-secondary);text-decoration:none;border-radius:var(--radius-sm);font-weight:500;font-size:13.5px;transition:all .3s var(--smooth);position:relative}
.sidebar-nav .nav-link:hover{background:var(--bg-hover);color:var(--text-primary);transform:translateX(3px)}
.sidebar-nav .nav-link.active{background:var(--sn-vert-pale);color:var(--sn-vert)}
.sidebar-nav .nav-link.active::before{content:'';position:absolute;left:0;top:8px;bottom:8px;width:3px;background:var(--sn-vert);border-radius:0 3px 3px 0}
.sidebar-nav .nav-link i{font-size:17px;width:22px;text-align:center}
.alert-dot{margin-left:auto;background:var(--sn-rouge);color:#fff;font-size:10px;padding:1px 7px;border-radius:10px;font-weight:700;animation:pulse 2.5s infinite}
.sidebar-footer{padding:14px 16px;border-top:1px solid var(--border);display:flex;align-items:center;gap:10px}
.user-card{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.user-avatar{width:36px;height:36px;background:linear-gradient(135deg,var(--sn-vert),var(--sn-vert-light));border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:800;color:#fff;flex-shrink:0;transition:transform .3s var(--bounce)}
.user-avatar:hover{transform:scale(1.1)}
.avatar-admin{background:linear-gradient(135deg,#ef4444,#f97316)!important}
.user-info{min-width:0}.user-name{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role{font-size:11px;color:var(--text-muted)}
.interim-badge{background:var(--sn-jaune-soft);color:#92400e;font-size:9px;padding:1px 6px;border-radius:4px;font-weight:700;letter-spacing:.5px;animation:pulse 3s infinite}
.interim-topbar{font-size:11px;color:#92400e;background:var(--sn-jaune-soft);padding:4px 10px;border-radius:20px;font-weight:600;display:flex;align-items:center;gap:4px;white-space:nowrap}
.btn-logout{color:var(--text-muted);padding:8px;border-radius:var(--radius-sm);transition:all .3s var(--smooth);text-decoration:none}
.btn-logout:hover{color:var(--sn-rouge);background:var(--sn-rouge-pale)}

/* OVERLAY + TOGGLE */
.sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:1040;opacity:0;visibility:hidden;transition:opacity .35s var(--smooth),visibility .35s;-webkit-tap-highlight-color:transparent}
.sidebar-overlay.active{opacity:1;visibility:visible}
.btn-toggle-sidebar{display:none;background:none;border:none;color:var(--text-primary);font-size:24px;cursor:pointer;padding:6px 8px;margin-right:auto;border-radius:var(--radius-sm);transition:all .3s var(--smooth);-webkit-tap-highlight-color:transparent;line-height:1}
.btn-toggle-sidebar:hover,.btn-toggle-sidebar:active{background:var(--bg-hover)}

/* MAIN */
.main-content{flex:1;margin-left:var(--sidebar-w);min-height:100vh;display:flex;flex-direction:column;transition:margin .35s var(--smooth)}
.top-bar{height:var(--topbar-h);padding:0 24px;display:flex;align-items:center;justify-content:flex-end;border-bottom:1px solid var(--border);background:var(--bg-card);gap:14px;box-shadow:var(--shadow-sm);position:sticky;top:3px;z-index:100;overflow:visible}
.top-bar-right{display:flex;align-items:center;gap:12px;flex-wrap:nowrap}
.alert-bell{position:relative;color:var(--text-secondary);font-size:18px;text-decoration:none;transition:transform .3s var(--bounce)}.alert-bell:hover{transform:scale(1.15)}
.notif-count{position:absolute;top:-6px;right:-8px;background:var(--sn-rouge);color:#fff;font-size:10px;padding:1px 5px;border-radius:8px;font-weight:700}
.today-date{font-size:12.5px;color:var(--text-muted);display:flex;align-items:center;gap:6px;white-space:nowrap}
.retard-link{color:var(--sn-rouge);font-size:12px;text-decoration:none;font-weight:600;display:flex;align-items:center;gap:4px;white-space:nowrap;transition:all .3s}.retard-link:hover{transform:scale(1.05)}
.content-area{padding:26px;flex:1;animation:fadeIn .4s var(--smooth)}

/* CARDS */
.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:all .35s var(--smooth);animation:fadeUp .5s var(--smooth) both}
.card:hover{box-shadow:var(--shadow)}
.card-header{background:transparent;border-bottom:1px solid var(--border);padding:16px 20px;font-weight:600;font-size:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.card-body{padding:20px}

/* STAT CARDS */
.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:22px 20px;transition:all .4s var(--smooth);position:relative;overflow:hidden;box-shadow:var(--shadow-sm)}
.stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;transition:height .4s var(--smooth)}
.stat-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.stat-card:hover::before{height:6px}
.stat-card .stat-icon{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:14px;transition:transform .4s var(--bounce)}
.stat-card:hover .stat-icon{transform:rotate(-8deg) scale(1.1)}
.stat-card .stat-value{font-size:32px;font-weight:800;line-height:1;margin-bottom:6px;letter-spacing:-1px;color:var(--text-primary)}
.stat-card .stat-label{font-size:12px;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.stat-vert .stat-icon{background:#e8f5ee;color:#00853F}.stat-vert::before{background:#00853F}.stat-vert{border-bottom:2px solid #e8f5ee}
.stat-jaune .stat-icon{background:#fef3c7;color:#d97706}.stat-jaune::before{background:#f59e0b}.stat-jaune{border-bottom:2px solid #fef3c7}
.stat-rouge .stat-icon{background:#fde8e8;color:#E31B23}.stat-rouge::before{background:#E31B23}.stat-rouge{border-bottom:2px solid #fde8e8}
.stat-neutre .stat-icon{background:#f1f5f9;color:#475569}.stat-neutre::before{background:#94a3b8}.stat-neutre{border-bottom:2px solid #f1f5f9}

/* TABLES */
.table{color:var(--text-primary);margin-bottom:0}
.table thead th{background:var(--bg-input);border-color:var(--border);color:var(--text-muted);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.6px;padding:11px 14px;white-space:nowrap}
.table tbody td{border-color:var(--border);padding:11px 14px;vertical-align:middle;font-size:13px}
.table tbody tr{transition:all .3s var(--smooth)}.table tbody tr:hover{background:var(--bg-hover);transform:scale(1.002)}
.table-responsive{border-radius:var(--radius);overflow:auto;-webkit-overflow-scrolling:touch}

/* BADGES */
.badge-status{display:inline-block;font-weight:700;font-size:11px;padding:4px 10px;border-radius:6px;letter-spacing:.2px;white-space:nowrap;transition:all .3s var(--smooth)}
.badge-status:hover{transform:scale(1.05)}
.badge-status[style*="--badge-color:#3b82f6"]{background:#eff6ff;color:#3b82f6;border:1px solid #dbeafe}
.badge-status[style*="--badge-color:#f59e0b"]{background:#fef3c7;color:#d97706;border:1px solid #fde68a}
.badge-status[style*="--badge-color:#8b5cf6"]{background:#f5f3ff;color:#7c3aed;border:1px solid #ede9fe}
.badge-status[style*="--badge-color:#f97316"]{background:#fff7ed;color:#ea580c;border:1px solid #fed7aa}
.badge-status[style*="--badge-color:#10b981"]{background:#e8f5ee;color:#059669;border:1px solid #a7f3d0}
.badge-status[style*="--badge-color:#06b6d4"]{background:#ecfeff;color:#0891b2;border:1px solid #a5f3fc}
.badge-status[style*="--badge-color:#6b7280"]{background:#f3f4f6;color:#4b5563;border:1px solid #e5e7eb}
.badge-status[style*="--badge-color:#ef4444"]{background:#fde8e8;color:#dc2626;border:1px solid #fca5a5}
.badge-priority{display:inline-block;font-weight:600;font-size:10.5px;padding:3px 9px;border-radius:5px}
.badge-priority[style*="--pri-color:#6b7280"]{background:#f3f4f6;color:#4b5563;border:1px solid #e5e7eb}
.badge-priority[style*="--pri-color:#f59e0b"]{background:#fef3c7;color:#d97706;border:1px solid #fde68a}
.badge-priority[style*="--pri-color:#ef4444"]{background:#fde8e8;color:#dc2626;border:1px solid #fca5a5}
.retard-row{border-left:3px solid var(--sn-rouge)!important;background:var(--sn-rouge-pale)!important}

/* FORMS */
.form-control,.form-select{background:var(--bg-input);border:1px solid var(--border);color:var(--text-primary);border-radius:var(--radius-sm);padding:10px 14px;font-size:13.5px;transition:all .3s var(--smooth)}
.form-control:focus,.form-select:focus{background:#fff;border-color:var(--sn-vert);box-shadow:0 0 0 4px rgba(0,133,63,.08)}
.form-control::placeholder{color:var(--text-muted)}
.form-label{font-weight:700;font-size:11.5px;color:var(--text-secondary);margin-bottom:6px;text-transform:uppercase;letter-spacing:.4px}

/* BUTTONS */
.btn-accent{background:var(--sn-vert);color:#fff;border:none;font-weight:700;padding:10px 22px;border-radius:var(--radius-sm);transition:all .35s var(--smooth);position:relative;overflow:hidden}
.btn-accent::after{content:'';position:absolute;top:50%;left:50%;width:0;height:0;background:rgba(255,255,255,.1);border-radius:50%;transform:translate(-50%,-50%);transition:all .5s}.btn-accent:hover::after{width:300px;height:300px}
.btn-accent:hover{background:var(--sn-vert-light);color:#fff;transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,133,63,.25)}
.btn-accent:disabled,.btn-accent.loading{opacity:.6;pointer-events:none;transform:none!important}
.btn-signer{background:linear-gradient(135deg,#7c3aed,#a855f7);color:#fff;border:none;font-weight:700;padding:10px 22px;border-radius:var(--radius-sm);transition:all .35s var(--smooth)}.btn-signer:hover{transform:translateY(-2px);color:#fff}
.btn-danger-custom{background:var(--sn-rouge);color:#fff;border:none;font-weight:700;padding:10px 22px;border-radius:var(--radius-sm);transition:all .35s var(--smooth)}.btn-danger-custom:hover{transform:translateY(-2px);color:#fff}
.btn-outline-subtle{border:1px solid var(--border);color:var(--text-secondary);background:transparent;font-weight:600;border-radius:var(--radius-sm);transition:all .3s var(--smooth)}.btn-outline-subtle:hover{background:var(--bg-hover);color:var(--text-primary);transform:translateY(-1px)}
.btn-sm{padding:7px 14px;font-size:12px}

/* PAGE */
.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;flex-wrap:wrap;gap:12px;animation:fadeUp .4s var(--smooth) both}
.page-header h4{font-family:'Instrument Serif',serif;font-size:26px;font-weight:400;margin:0}
.filter-bar{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;align-items:center}
.filter-bar .form-control,.filter-bar .form-select{max-width:190px;padding:8px 12px;font-size:12.5px}
.alert-msg{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 18px;display:flex;align-items:center;gap:10px;margin-bottom:16px;animation:scaleIn .4s var(--bounce) both;box-shadow:var(--shadow-sm)}
.alert-msg.success{border-left:4px solid var(--sn-vert)}.alert-msg.success i{color:var(--sn-vert)}
.alert-msg.error{border-left:4px solid var(--sn-rouge)}.alert-msg.error i{color:var(--sn-rouge)}
.alert-msg.info{border-left:4px solid #3b82f6}.alert-msg.info i{color:#3b82f6}

/* TIMELINE */
.timeline{position:relative;padding-left:28px}.timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--sn-vert),#f59e0b,var(--sn-rouge))}
.timeline-item{position:relative;padding-bottom:18px;animation:slideInLeft .4s var(--smooth) both}
.timeline-item::before{content:'';position:absolute;left:-24px;top:4px;width:12px;height:12px;border-radius:50%;background:var(--sn-vert);border:2px solid var(--bg-card);transition:all .3s var(--bounce)}
.timeline-item:hover::before{transform:scale(1.3)}
.timeline-item .time{font-size:11px;color:var(--text-muted)}.timeline-item .action{font-size:13px}.timeline-item .actor{font-weight:700;color:var(--sn-vert)}

/* DETAIL */
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.detail-item label{font-size:10.5px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;display:block;margin-bottom:2px;font-weight:700}
.detail-item .value{font-size:14px;font-weight:500;word-break:break-word}
.workflow-step{display:flex;align-items:center;gap:10px;padding:8px 0}
.workflow-dot{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;transition:all .4s var(--bounce)}
.workflow-dot.done{background:#e8f5ee;color:#00853F}.workflow-dot.current{background:#00853F;color:#fff;animation:dotPulse 2s infinite}.workflow-dot.pending{background:#f1f5f9;color:#94a3b8}
.doc-card{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:8px;display:flex;align-items:center;gap:12px;transition:all .35s var(--smooth)}
.doc-card:hover{background:var(--sn-vert-pale);transform:translateX(4px)}
.doc-icon{width:36px;height:36px;border-radius:8px;background:#e8f5ee;display:flex;align-items:center;justify-content:center;color:#00853F;font-size:16px;flex-shrink:0;transition:transform .3s var(--bounce)}
.doc-card:hover .doc-icon{transform:rotate(-5deg) scale(1.1)}
.signature-box{border:2px dashed var(--border);border-radius:var(--radius);padding:24px;text-align:center;transition:all .3s}
.signature-box.signed{border-color:var(--sn-vert);border-style:solid;background:#e8f5ee}
.linked-box{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-sm);padding:16px;margin-top:16px}
.linked-box .linked-title{font-size:11px;text-transform:uppercase;letter-spacing:.5px;font-weight:700;color:var(--text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.duration-badge{display:inline-flex;align-items:center;gap:4px;background:var(--bg-input);border:1px solid var(--border);border-radius:20px;padding:3px 10px;font-size:11px;font-weight:600;color:var(--text-secondary)}

/* NOTIF */
.notif-panel{position:absolute;top:calc(100% + 8px);right:0;width:340px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:1200;max-height:400px;overflow-y:auto;animation:scaleIn .25s var(--bounce) both}
.notif-item{display:block;padding:12px 16px;border-bottom:1px solid var(--border);font-size:12.5px;transition:all .25s var(--smooth);text-decoration:none;color:inherit;border-left:3px solid transparent}.notif-item:hover{background:var(--bg-hover)}.notif-item.unread{background:#e8f5ee;border-left:3px solid var(--sn-vert)}

/* TABS */
.nav-tabs{border-color:var(--border)}.nav-tabs .nav-link{color:var(--text-secondary);background:transparent;border-color:transparent;transition:all .3s var(--smooth)}
.nav-tabs .nav-link.active{color:var(--sn-vert)!important;border-color:var(--border) var(--border) var(--bg-body)!important;background:var(--bg-card)!important;font-weight:700}

/* LOGIN */
.login-wrapper{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg-body);padding:20px}
.login-card{background:var(--bg-card);border:1px solid var(--border);border-radius:20px;padding:44px;width:100%;max-width:420px;box-shadow:var(--shadow-lg);animation:scaleIn .6s var(--bounce) both}
.login-card h3{font-family:'Instrument Serif',serif;text-align:center;margin-bottom:6px;font-size:28px}
.login-card .subtitle{text-align:center;color:var(--text-muted);font-size:13.5px;margin-bottom:28px}

/* EXPORT / AUDIT */
.export-card{text-align:center;padding:28px 20px;transition:all .35s var(--smooth)}.export-card:hover{transform:translateY(-4px)}
.export-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;font-size:24px;transition:transform .4s var(--bounce)}
.export-card:hover .export-icon{transform:rotate(-8deg) scale(1.1)}
.audit-row{font-size:12.5px}.audit-ip{font-family:monospace;font-size:11.5px;color:var(--text-muted)}

/* SWAL */
.swal2-popup{border-radius:16px!important;font-family:'Plus Jakarta Sans',sans-serif!important}
.swal2-title{font-size:18px!important}.swal2-html-container{font-size:14px!important}

/* RESPONSIVE TABLET */
@media(max-width:991.98px){
.sidebar{transform:translateX(-100%)}.sidebar.open{transform:translateX(0);box-shadow:var(--shadow-lg)}
.btn-toggle-sidebar{display:block}.main-content{margin-left:0}
.top-bar{padding:0 14px;gap:8px}.content-area{padding:16px}
.detail-grid{grid-template-columns:1fr}.page-header{flex-direction:column;align-items:flex-start;gap:8px}
.page-header h4{font-size:22px}.notif-panel{width:280px;right:-20px}
.filter-bar{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
.filter-bar .form-control,.filter-bar .form-select{min-width:130px;max-width:none;flex-shrink:0}
}
/* MOBILE */
@media(max-width:575.98px){
.content-area{padding:12px}.stat-card{padding:16px 14px}.stat-card .stat-value{font-size:24px}.stat-card .stat-icon{width:38px;height:38px;font-size:16px;margin-bottom:10px}
.top-bar{height:50px;padding:0 10px;gap:6px}.today-date{display:none}
.table thead th{padding:8px 8px;font-size:10px}.table tbody td{padding:8px 8px;font-size:12px}
.card-body{padding:14px}.card-header{padding:12px 14px;font-size:13px}
.filter-bar{flex-direction:column}.filter-bar .form-control,.filter-bar .form-select{max-width:100%;min-width:auto;width:100%}
.btn-accent,.btn-danger-custom,.btn-signer{width:100%;text-align:center;padding:12px 16px}
.login-card{padding:24px 18px;border-radius:14px}.login-card h3{font-size:22px}
.form-control,.form-select{padding:9px 12px;font-size:13px}.form-label{font-size:10.5px}
.page-header h4{font-size:20px}.doc-card{padding:10px;gap:8px;flex-wrap:wrap}
.row.g-3>.col-lg-4,.row.g-3>.col-lg-8{flex:0 0 100%;max-width:100%}
.notif-panel{width:calc(100vw - 20px);right:-40px}.signature-box{padding:16px}
.interim-topbar{font-size:10px;padding:3px 8px}
}
@media(max-width:374px){.content-area{padding:8px}.sidebar{width:100%}.stat-card .stat-value{font-size:20px}.page-header h4{font-size:18px}.card-body{padding:10px}}
@media print{.sidebar,.top-bar,.btn,.filter-bar,.global-loader,.sidebar-overlay,.btn-toggle-sidebar,.page-loader{display:none!important}.main-content{margin-left:0!important}body{background:#fff}}

/* ===== FUTURISTIC ENHANCEMENTS ===== */
@keyframes glow-pulse{0%,100%{box-shadow:0 0 8px rgba(0,133,63,.08)}50%{box-shadow:0 0 20px rgba(0,133,63,.15)}}
@keyframes track-flow{0%{background-position:0 0}100%{background-position:40px 0}}
@keyframes neon-border{0%,100%{border-color:rgba(0,133,63,.2)}50%{border-color:rgba(0,133,63,.5)}}
.stat-card:hover{animation:glow-pulse 2s infinite}
.stat-card[data-href]{cursor:pointer}.stat-card[data-href]:active{transform:scale(.98)}

/* TRACKING PIPELINE */
.track-pipeline{display:flex;gap:0;position:relative;margin:20px 0;overflow-x:auto;padding-bottom:8px}
.track-stage{flex:1;min-width:120px;text-align:center;position:relative;padding:14px 6px}
.track-stage::after{content:'';position:absolute;top:30px;left:50%;right:-50%;height:3px;background:repeating-linear-gradient(90deg,var(--border) 0,var(--border) 8px,transparent 8px,transparent 12px);animation:track-flow 1s linear infinite}
.track-stage:last-child::after{display:none}
.track-dot{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;margin:0 auto 6px;border:2px solid;transition:all .4s var(--bounce);position:relative;z-index:1}
.track-dot.done{background:var(--sn-vert-pale);color:var(--sn-vert);border-color:var(--sn-vert)}
.track-dot.current{background:var(--sn-vert);color:#fff;border-color:var(--sn-vert);animation:glow-pulse 2s infinite}
.track-dot.pending{background:var(--bg-input);color:var(--text-muted);border-color:var(--border)}
.track-dot.blocked{background:var(--sn-rouge-pale);color:var(--sn-rouge);border-color:var(--sn-rouge);animation:pulse 1.5s infinite}
.track-label{font-size:10.5px;font-weight:600;color:var(--text-secondary)}.track-role{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}
.track-time{font-size:9px;color:#f59e0b;font-weight:600;margin-top:2px}
.track-stage:hover .track-dot{transform:scale(1.15)}

/* KANBAN */
.kanban{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:14px}
.kanban-col{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius);padding:10px;min-height:180px}
.kanban-col-header{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding-bottom:8px;border-bottom:2px solid;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between}
.kanban-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 10px;margin-bottom:6px;transition:all .3s var(--smooth);cursor:pointer}
.kanban-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.kanban-card.blocked{border-left:3px solid var(--sn-rouge);animation:pulse 3s infinite}
.kanban-num{font-size:11px;font-weight:700;color:var(--sn-vert)}.kanban-obj{font-size:12px;margin:2px 0;font-weight:500;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.kanban-meta{font-size:10px;color:var(--text-muted);display:flex;justify-content:space-between;align-items:center;margin-top:4px}
.kanban-count{font-size:16px;font-weight:700}

/* BADGES */
.badge-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;text-align:center;transition:all .35s var(--smooth)}
.badge-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.badge-card.earned{border-color:var(--sn-vert);box-shadow:0 0 12px rgba(0,133,63,.08)}
.badge-card .badge-icon{font-size:32px;line-height:1;margin-bottom:6px;transition:transform .4s var(--bounce)}
.badge-card:hover .badge-icon{transform:scale(1.15) rotate(-5deg)}
.badge-card .badge-name{font-weight:700;font-size:13px;margin-bottom:2px}
.badge-card .badge-desc{font-size:11px;color:var(--text-muted);line-height:1.4}
.badge-rarity{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:2px 8px;border-radius:4px;display:inline-block;margin-top:5px}
.rarity-commun{background:#f3f4f6;color:#6b7280}.rarity-rare{background:#eff6ff;color:#3b82f6}.rarity-epique{background:#f5f3ff;color:#7c3aed}.rarity-legendaire{background:#fef3c7;color:#d97706}

/* KNOWLEDGE */
.kb-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px;margin-bottom:6px;transition:all .3s var(--smooth)}
.kb-card:hover{transform:translateX(3px);border-color:var(--sn-vert)}

/* DOC CENTER */
.doc-folder{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:all .3s var(--smooth)}
.doc-folder:hover{box-shadow:var(--shadow)}
.doc-folder-header{padding:12px 14px;background:var(--bg-input);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;cursor:pointer;transition:all .25s}
.doc-folder-header:hover{background:var(--sn-vert-pale)}
.doc-folder-body{padding:10px}

/* INTERACTIVE CARDS */
.stat-card[data-href]::after{content:'→';position:absolute;top:12px;right:14px;font-size:14px;color:var(--text-muted);transition:all .3s}
.stat-card[data-href]:hover::after{color:var(--sn-vert);transform:translateX(4px)}

/* ── FLASH MESSAGES AMÉLIORÉS ── */
.alert-msg {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    border-radius: 10px;
    font-size: 13px;
    font-weight: 500;
    margin-bottom: 12px;
    animation: slideInAlert .3s ease;
}
@keyframes slideInAlert {
    from { opacity:0; transform:translateY(-10px); }
    to   { opacity:1; transform:translateY(0); }
}
.alert-msg.success { background:#e8f5ee; color:#005a2b; border-left:4px solid #00853F; }
.alert-msg.error   { background:#fde8e8; color:#991b1b; border-left:4px solid #E31B23; }
.alert-msg.warning { background:#fef3c7; color:#92400e; border-left:4px solid #f59e0b; }
.alert-msg.info    { background:#eff6ff; color:#1e40af; border-left:4px solid #3b82f6; }
.alert-msg i { font-size:16px; flex-shrink:0; }

/* Tilt cards: désactivé sur touch pour éviter glitch mobile */
@media (hover: none) {
    .stat-card, .export-card {
        transform: none !important;
    }
}

/* Accessibilité: focus visible sur éléments interactifs */
:focus-visible {
    outline: 2px solid var(--sn-vert) !important;
    outline-offset: 2px;
}
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible {
    box-shadow: 0 0 0 3px rgba(0,133,63,.25);
}

/* Table: éviter le débordement horizontal sur mobile */
.table-responsive {
    -webkit-overflow-scrolling: touch;
    border-radius: 0 0 var(--radius-sm) var(--radius-sm);
}

/* ── TOOLTIP SURVOL COURRIERS ── */
#hoverTooltip {
    font-family: var(--font, 'Plus Jakarta Sans', sans-serif);
    transition: opacity .15s ease;
}

/* ── RACCOURCIS CLAVIER — tooltip flash ── */
@keyframes shortcutFade {
    0%   { opacity:0; transform:translateX(-50%) translateY(6px); }
    20%  { opacity:1; transform:translateX(-50%) translateY(0); }
    80%  { opacity:1; }
    100% { opacity:0; }
}

/* ── TUTORIEL — overlay highlight ── */
.tuto-highlight-el {
    position: relative !important;
    z-index: 1000001 !important;
    border-radius: 8px !important;
    box-shadow: 0 0 0 4px #00853F, 0 0 0 8px rgba(0,133,63,.25) !important;
    transition: box-shadow .3s ease !important;
}

/* ── MODALE PDF INLINE ── */
#pdfModal {
    animation: fadeIn .2s ease;
}
#pdfModal iframe {
    border-radius: 0 0 16px 16px;
}

/* ── PERMISSIONS ROLES ── */
.perm-check:checked + span { color: var(--sn-vert); font-weight: 600; }

/* ── BARRE PAGINATION ── */
.pag-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-card)}
.pag-info{font-size:13px;color:var(--text-muted)}
.pag-nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.pag-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 11px;border-radius:8px;font-size:13px;font-weight:500;color:var(--text-primary);border:1px solid var(--border);background:#fff;text-decoration:none;transition:all .15s}
.pag-btn:hover{background:var(--bg-input);border-color:var(--sn-vert);color:var(--sn-vert)}
.pag-cur{background:var(--sn-vert)!important;color:#fff!important;border-color:var(--sn-vert)!important;font-weight:700}
.pag-dis{opacity:.35;pointer-events:none}
.pag-sep{padding:0 6px;color:var(--text-muted);font-size:14px;font-weight:600}
.pag-pp select{border:1px solid var(--border);border-radius:8px;padding:5px 10px;font-size:13px;background:#fff;cursor:pointer;color:var(--text-primary)}
@media(max-width:640px){.pag-bar{flex-direction:column;align-items:flex-start}}
/* ══════════════════════════════════════════════════════════
   RESPONSIVE MOBILE COMPLET — Table-to-Cards
   Transforme les tables en cartes sur mobile sans toucher au PHP
   ══════════════════════════════════════════════════════════ */

@media (max-width: 767.98px) {

  /* ── 1. Content area ── */
  .content-area { padding: 8px !important; }
  .page-header  { margin-bottom: 10px !important; flex-wrap: wrap !important; gap: 6px !important; }
  .page-header h4 { font-size: 15px !important; }

  /* ── 2. TABLE → CARDS sur mobile ────────────────────────
     Chaque tr devient une card, chaque td affiche son label
     grâce aux data-label="..." qu'on ajoute via JS ci-dessous
  ── */
  .table-mobile-cards thead { display: none !important; }
  .table-mobile-cards,
  .table-mobile-cards tbody,
  .table-mobile-cards tr,
  .table-mobile-cards td { display: block !important; width: 100% !important; }

  .table-mobile-cards tr {
    background: var(--bg-card) !important;
    border: 1px solid var(--border) !important;
    border-radius: 12px !important;
    margin-bottom: 8px !important;
    padding: 10px 12px !important;
    cursor: pointer !important;
    position: relative !important;
    box-shadow: 0 1px 4px rgba(0,0,0,.05) !important;
  }
  .table-mobile-cards tr.retard-row {
    border-left: 3px solid var(--sn-rouge) !important;
  }

  .table-mobile-cards td {
    padding: 3px 0 !important;
    border: none !important;
    font-size: 13px !important;
    white-space: normal !important;
    display: flex !important;
    align-items: flex-start !important;
    gap: 6px !important;
    min-height: 0 !important;
  }
  .table-mobile-cards td:empty { display: none !important; }

  /* Label avant chaque valeur */
  .table-mobile-cards td::before {
    content: attr(data-label);
    font-size: 10px !important;
    font-weight: 700 !important;
    text-transform: uppercase !important;
    letter-spacing: .5px !important;
    color: var(--text-muted) !important;
    min-width: 68px !important;
    flex-shrink: 0 !important;
    padding-top: 2px !important;
  }
  /* Première td (numéro) = header de la card */
  .table-mobile-cards td:first-child {
    font-size: 14px !important;
    font-weight: 700 !important;
    padding-bottom: 8px !important;
    border-bottom: 1px solid var(--border) !important;
    margin-bottom: 4px !important;
  }
  .table-mobile-cards td:first-child::before { display: none !important; }

  /* Cacher les colonnes marquées d-none */
  .table-mobile-cards td.d-none,
  .table-mobile-cards td.d-none-mobile,
  .table-mobile-cards td.d-none.d-sm-table-cell,
  .table-mobile-cards td.d-none.d-md-table-cell,
  .table-mobile-cards td.d-none.d-lg-table-cell { display: none !important; }

  /* Colonne actions: en bas à droite */
  .table-mobile-cards td:last-child {
    position: absolute !important;
    top: 8px !important;
    right: 8px !important;
    width: auto !important;
    padding: 0 !important;
    border: none !important;
  }
  .table-mobile-cards td:last-child::before { display: none !important; }

  /* ── 3. Filter bar: scroll horizontal ── */
  .filter-bar {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    gap: 6px !important;
    padding-bottom: 4px !important;
    scrollbar-width: none !important;
  }
  .filter-bar::-webkit-scrollbar { display: none !important; }
  .filter-bar .form-control,
  .filter-bar .form-select {
    min-width: 120px !important;
    max-width: 150px !important;
    font-size: 12px !important;
    padding: 6px 8px !important;
    flex-shrink: 0 !important;
  }

  /* ── 4. Stat cards: 2 colonnes propres ── */
  .stat-card { padding: 12px 10px !important; border-radius: 12px !important; }
  .stat-card .stat-value { font-size: 22px !important; }
  .stat-card .stat-label { font-size: 10px !important; }
  .stat-card .stat-icon { font-size: 18px !important; width: 34px !important; height: 34px !important; }

  /* ── 5. Cards: padding compact ── */
  .card { border-radius: 12px !important; }
  .card-header { padding: 10px 12px !important; font-size: 13px !important; flex-wrap: wrap !important; gap: 6px !important; }
  .card-body   { padding: 10px 12px !important; }

  /* ── 6. Grille: tout en colonne ── */
  .row.g-3 > [class*="col-md"],
  .row.g-3 > [class*="col-lg"],
  .row.g-3 > .col-md-4,
  .row.g-3 > .col-md-8,
  .row.g-3 > .col-lg-4,
  .row.g-3 > .col-lg-8 { flex: 0 0 100% !important; max-width: 100% !important; }

  /* ── 7. Pagination ── */
  .pag-bar { font-size: 12px !important; gap: 4px !important; flex-wrap: wrap !important; }
  .pag-btn { padding: 5px 9px !important; font-size: 12px !important; }

  /* ── 8. Top bar ── */
  .top-bar { padding: 0 10px !important; height: 54px !important; }
  .top-bar-title { font-size: 13px !important; max-width: 130px !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  /* ── 9. Tracking pipeline ── */
  .track-pipeline {
    overflow-x: auto !important;
    flex-wrap: nowrap !important;
    -webkit-overflow-scrolling: touch !important;
    padding-bottom: 8px !important;
  }
  .track-stage { min-width: 90px !important; padding: 8px 4px !important; }
  .track-stage-label { font-size: 9.5px !important; }
  .track-count { font-size: 18px !important; }

  /* ── 10. Statut système ── */
  .row.g-3 .col-6.col-md-3 { flex: 0 0 50% !important; max-width: 50% !important; }

  /* ── 11. Heatmap ── */
  .heatmap-wrap { overflow-x: auto !important; -webkit-overflow-scrolling: touch !important; }

  /* ── 12. Modale bottom-sheet ── */
  #dcmpConfirmOverlay { align-items: flex-end !important; }
  #dcmpConfirmBox {
    border-radius: 20px 20px 0 0 !important;
    margin: 0 !important;
    max-width: 100% !important;
  }

  /* ── 13. Boutons header page ── */
  .page-header .btn { font-size: 12px !important; padding: 5px 10px !important; }

  /* ── 14. Badges ── */
  .badge-status { font-size: 10px !important; padding: 3px 7px !important; }

  /* ── 15. Sauvegarde / boutons empilés ── */
  .d-flex.gap-2.flex-wrap { flex-direction: column !important; }
}

/* ── Tablette (768–991px) ── */
@media (min-width: 768px) and (max-width: 991.98px) {
  .content-area { padding: 12px !important; }
  .table { font-size: 12.5px !important; }
  .table th, .table td { padding: 8px 8px !important; }
}

/* ── Très petit (< 375px) ── */
@media (max-width: 375px) {
  .content-area { padding: 5px !important; }
  .stat-card .stat-value { font-size: 18px !important; }
  .table-mobile-cards td { font-size: 12px !important; }
}
