:root{
    --brand:#0d6efd;
    --brand2:#6c757d;
    --sidebar-w:264px;
}
body.app-theme{ background:#f4f6fb; }

/* ── Navbar ───────────────────────────────────────────────── */
.app-navbar{
    background:linear-gradient(135deg, var(--brand), #1a1a2e);
    padding:.55rem 1rem;
}
.app-navbar .navbar-brand{ color:#fff !important; }
.avatar-circle{
    width:28px;height:28px;border-radius:50%;background:var(--brand);
    color:#fff;display:inline-flex;align-items:center;justify-content:center;
    font-weight:700;font-size:.8rem;
}

/* ── Layout sidebar + contenu ─────────────────────────────── */
.app-body{ display:flex; align-items:flex-start; min-height:calc(100vh - 56px); }
.app-content{ flex:1; min-width:0; }

/* ── Cartes statistiques dashboard ────────────────────────── */
.stat-card{
    border-radius:14px; padding:1.1rem 1.2rem; height:100%;
    display:flex; flex-direction:column; gap:.15rem;
}
.stat-card .stat-num{ font-size:1.7rem; font-weight:800; }
.stat-card .stat-label{ font-size:.78rem; color:#555; font-weight:600; text-transform:uppercase; letter-spacing:.02em; }

/* ── Login / page publique ────────────────────────────────── */
.login-bg{ background:linear-gradient(135deg,#eef2ff,#f8f9fa); }
.hero{ box-shadow:inset 0 -10px 30px rgba(0,0,0,.15); }

/* ── Mode sombre (activable via bouton lune, persistant) ──── */
body.dark-mode{ background:#12141c; color:#e4e6eb; }
body.dark-mode .card{ background:#1a1d29; color:#e4e6eb; border-color:#2a2d3a; }
body.dark-mode .card-header{ background:#20232f; border-color:#2a2d3a; }
body.dark-mode .table{ color:#e4e6eb; }
body.dark-mode .form-control, body.dark-mode .form-select{ background:#20232f; color:#e4e6eb; border-color:#2a2d3a; }
body.dark-mode .list-group-item{ background:#1a1d29; color:#e4e6eb; border-color:#2a2d3a; }


/* ═══════════════════════════════════════════════════════════════
   VERSION 2.0 — composants ajoutés (même identité visuelle, mode sobre)
   ═══════════════════════════════════════════════════════════════ */
:root{
    --surface:#ffffff; --border:#e9ecef; --muted:#6c757d; --ink:#212529;
    --good:#198754; --warn:#c77700; --bad:#dc3545;
}
.card{ border-color:var(--border); border-radius:12px; }
.card-header{ background:#fbfcfe; }
.table > :not(caption) > * > *{ padding-top:.55rem; padding-bottom:.55rem; }
.page-head h4{ letter-spacing:-.01em; }


/* Indicateurs */
.kpi-card{ background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:.9rem 1rem; height:100%; box-shadow:0 1px 2px rgba(16,24,40,.04); transition:border-color .15s, box-shadow .15s; }
a.kpi-card:hover, .kpi-link:hover{ border-color:var(--brand); box-shadow:0 4px 14px rgba(13,110,253,.08); }
.kpi-label{ font-size:.74rem; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.03em; margin-bottom:.25rem; }
.kpi-value{ font-size:1.6rem; font-weight:800; line-height:1.15; color:var(--ink); }
.kpi-sub{ font-size:.78rem; color:var(--muted); margin-top:.3rem; }
.kpi-accent-good{ border-left:4px solid var(--good); }
.kpi-accent-warn{ border-left:4px solid var(--warn); }
.mini-stat{ background:#f6f8fb; border-radius:8px; padding:.4rem .2rem; }
.mini-stat .v{ font-weight:800; font-size:1.05rem; }
.mini-stat .l{ font-size:.66rem; color:var(--muted); text-transform:uppercase; }
.hbar{ height:8px; background:#eef1f6; border-radius:4px; overflow:hidden; }
.hbar > span{ display:block; height:100%; background:var(--series-1, #2a78d6); border-radius:4px; }
.filter-bar{ display:flex; gap:.5rem; align-items:center; flex-wrap:wrap; }
.filter-bar .form-control{ max-width:170px; }

/* Alertes actionnables */
.alert-strip{ display:flex; flex-wrap:wrap; gap:.5rem; }
.alert-pill{ display:inline-flex; align-items:center; gap:.45rem; padding:.45rem .8rem; border-radius:999px; background:#fff8e6; border:1px solid #f3dca2; color:#7a5200; font-size:.85rem; text-decoration:none; }
.alert-pill:hover{ background:#fff1cc; color:#5c3d00; }

/* États vides */
.empty-state{ text-align:center; color:var(--muted); padding:2.2rem 1rem; }
.empty-state .bi{ font-size:2rem; display:block; margin-bottom:.4rem; opacity:.5; }
.empty-state p{ margin:0; }
.badge-teal{ background:#0f9d8a; color:#fff; }

/* Pipeline des candidatures */
.pipeline{ display:flex; gap:.4rem; overflow-x:auto; padding-bottom:.25rem; }
.pipe{ flex:0 0 auto; min-width:104px; background:#fff; border:1px solid var(--border); border-radius:10px; padding:.45rem .65rem; text-decoration:none; color:var(--ink); }
.pipe .n{ display:block; font-weight:800; font-size:1.15rem; }
.pipe .l{ display:block; font-size:.7rem; color:var(--muted); white-space:nowrap; }
.pipe.active{ border-color:var(--brand); box-shadow:inset 0 -3px 0 var(--brand); }
.pipe-pending_decision .n{ color:#0d6efd; } .pipe-incomplete .n{ color:var(--warn); } .pipe-rejected .n{ color:var(--bad); } .pipe-enrolled .n{ color:var(--good); }

/* Étapes du dossier */
.app-steps{ display:flex; justify-content:space-between; position:relative; gap:.25rem; }
.app-steps::before{ content:''; position:absolute; top:7px; left:4%; right:4%; height:2px; background:var(--border); }
.app-step{ position:relative; flex:1; text-align:center; font-size:.7rem; color:var(--muted); }
.app-step .dot{ display:block; width:16px; height:16px; margin:0 auto .25rem; border-radius:50%; background:#fff; border:2px solid #cfd5dd; position:relative; z-index:1; }
.app-step.done .dot{ background:var(--good); border-color:var(--good); }
.app-step.current .dot{ background:var(--brand); border-color:var(--brand); box-shadow:0 0 0 4px rgba(13,110,253,.15); }
.app-step.current .lbl{ color:var(--ink); font-weight:700; }

/* Formulaire en étapes */
.stepper-card .list-group-item{ border:0; font-size:.9rem; }
.stepper-card .list-group-item.active{ background:#eaf1ff; color:var(--brand); font-weight:600; }
.step-dot{ width:24px; height:24px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:#eef1f6; font-size:.75rem; font-weight:700; }
.list-group-item.active .step-dot{ background:var(--brand); color:#fff; }
.list-group-item.done .step-dot{ background:var(--good); color:#fff; }

/* Chronologie */
.timeline{ list-style:none; margin:0; padding:0 0 0 1rem; border-left:2px solid var(--border); }
.timeline li{ position:relative; padding:0 0 .9rem .9rem; }
.timeline li::before{ content:''; position:absolute; left:-1.42rem; top:.35rem; width:10px; height:10px; border-radius:50%; background:var(--brand); border:2px solid #fff; }

/* Palette graphique validée (catégories 1-3) */
.viz-root{ --series-1:#2a78d6; --series-2:#eb6834; --series-3:#1baf7a; --viz-text:#52514e; --viz-grid:#ececea; --viz-surface:#ffffff; }

/* ── Documents officiels (lettre A4, reçu, carte) ── */
.doc-toolbar{ position:sticky; top:0; z-index:5; background:#f4f6fb; border-bottom:1px solid var(--border); padding:.6rem 1rem; }
.a4-wrap{ background:#e9ecef; padding:24px 0 60px; }
.a4{ width:210mm; min-height:297mm; margin:0 auto; background:#fff; padding:18mm 18mm 14mm; box-shadow:0 10px 30px rgba(0,0,0,.12); font-family:Georgia,"Times New Roman",serif; font-size:11.5pt; color:#1d1d1d; position:relative; }
.letter-head{ display:flex; gap:14px; align-items:center; border-bottom:3px solid var(--doc-accent,#7a1f1f); padding-bottom:10px; margin-bottom:14px; }
.lh-logo img{ height:70px; }
.lh-name{ font-size:17pt; font-weight:700; text-transform:uppercase; letter-spacing:.02em; color:var(--doc-accent,#7a1f1f); }
.lh-campus{ font-weight:600; }
.lh-contacts{ font-size:9pt; color:#555; font-family:Arial,sans-serif; }
.letter-meta{ display:flex; justify-content:space-between; font-size:10pt; margin-bottom:14px; font-family:Arial,sans-serif; }
.letter-to{ margin:0 0 14px auto; width:60%; }
.letter-title{ text-align:center; font-size:15pt; font-weight:700; text-transform:uppercase; letter-spacing:.06em; margin:16px 0 18px; text-decoration:underline; text-underline-offset:5px; }
.letter-table{ width:100%; border-collapse:collapse; margin:10px 0; font-family:Arial,sans-serif; font-size:10pt; }
.letter-table th, .letter-table td{ border:1px solid #d6d6d6; padding:5px 8px; text-align:left; }
.letter-table th{ background:#f6f6f6; width:38%; }
.letter-box{ border:1px solid var(--doc-accent,#7a1f1f); border-radius:6px; padding:8px 10px; background:#fdf7f7; font-size:10.5pt; }
.letter-sign{ display:flex; justify-content:space-between; align-items:flex-end; margin-top:26px; }
.qr-block{ text-align:center; font-family:Arial,sans-serif; }
.sign-block{ text-align:center; min-width:220px; }
.sign-space{ min-height:60px; }
.letter-foot{ position:absolute; bottom:10mm; left:18mm; right:18mm; border-top:1px solid #ddd; padding-top:5px; font-size:8pt; color:#777; text-align:center; font-family:Arial,sans-serif; }
.tiny{ font-size:.66rem; line-height:1.25; }

.receipt-wrap{ background:#e9ecef; padding:24px 12px 60px; }
.receipt{ max-width:148mm; margin:0 auto; background:#fff; padding:14px 18px; border-radius:6px; box-shadow:0 10px 30px rgba(0,0,0,.12); position:relative; overflow:hidden; }
.receipt-stamp{ position:absolute; top:42%; left:50%; transform:translate(-50%,-50%) rotate(-18deg); font-size:2.4rem; font-weight:900; letter-spacing:.1em; opacity:.14; text-transform:uppercase; pointer-events:none; white-space:nowrap; }
.stamp-pending{ color:#c77700; } .stamp-reversed, .stamp-rejected{ color:#dc3545; }
.sign-space-sm{ min-height:38px; }

/* Carte étudiante CR80 (85,6 × 54 mm) — recto/verso */
.cards-wrap{ display:flex; gap:28px; justify-content:center; flex-wrap:wrap; padding:10px 0 20px; }
.idc{ width:85.6mm; height:54mm; border-radius:3.2mm; overflow:hidden; position:relative; background:#fff; box-shadow:0 10px 26px rgba(0,0,0,.18); font-family:Arial,Helvetica,sans-serif; color:#1d1d1d;
      zoom:1.45; }
.idc-head{ height:13mm; background:linear-gradient(135deg, var(--c1), color-mix(in srgb, var(--c1) 80%, #000)); display:flex; align-items:center; gap:2mm; padding:0 3mm; }
.idc-logo{ width:9.5mm; height:9.5mm; border-radius:50%; background:#fff; border:.45mm solid var(--c2); overflow:hidden; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.idc-logo img{ width:100%; height:100%; object-fit:cover; }
.idc-logo span{ font-size:2.2mm; font-weight:800; color:var(--c2); }
.idc-uni .n{ color:#fff; font-weight:800; font-size:2.9mm; line-height:1.1; text-transform:uppercase; }
.idc-uni .c{ color:rgba(255,255,255,.9); font-size:2.1mm; }
.idc-title{ text-align:center; font-size:2.25mm; font-weight:800; letter-spacing:.25mm; margin:1.2mm 0 .8mm; color:var(--c2); text-transform:uppercase; }
.idc-prov{ background:#c77700; color:#fff; border-radius:1mm; padding:0 1mm; font-size:1.8mm; }
.idc-body{ display:flex; gap:2.5mm; padding:0 3mm; position:relative; z-index:2; }
.idc-photo{ width:17mm; height:21mm; border:.45mm solid var(--c2); border-radius:1mm; overflow:hidden; background:#f1f1f1; flex-shrink:0; display:flex; align-items:center; justify-content:center; }
.idc-photo img{ width:100%; height:100%; object-fit:cover; }
.idc-photo span{ font-size:2mm; color:#999; }
.idc-fields{ flex:1; min-width:0; font-size:2.05mm; }
.idc-name{ font-weight:800; font-size:2.6mm; margin-bottom:.6mm; line-height:1.1; }
.idc-fields .row-f{ display:flex; gap:1mm; line-height:1.3; }
.idc-fields .l{ color:#666; width:13mm; flex-shrink:0; }
.idc-fields .v{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.idc-wave{ position:absolute; left:0; right:0; bottom:0; width:100%; height:9mm; z-index:1; }
.idc-foot{ position:absolute; left:0; right:0; bottom:.8mm; z-index:3; display:flex; justify-content:space-between; padding:0 3mm; color:#fff; font-size:1.8mm; font-weight:700; }
.idc-back-band{ height:6mm; background:var(--c2); }
.idc-back-body{ display:flex; gap:3mm; padding:2.5mm 3mm; }
.idc-qr{ text-align:center; flex-shrink:0; }
.idc-qr #qrHolder{ width:20mm; height:20mm; }
.idc-qr #qrHolder img, .idc-qr #qrHolder canvas{ width:20mm !important; height:20mm !important; }
.idc-back-text{ font-size:2mm; flex:1; min-width:0; }
.idc-back-text .tiny{ font-size:1.7mm; }
.idc-sign{ margin-top:1.5mm; text-align:center; }
.idc-sign .line{ border-bottom:.3mm solid #333; height:5mm; margin:0 4mm .5mm; }
.idc-back-foot{ position:absolute; bottom:0; left:0; right:0; background:var(--c1); color:#fff; text-align:center; padding:.6mm 2mm; }
.pdf-mode .idc{ zoom:1; margin:0; box-shadow:none; border-radius:0; }
.pdf-mode{ gap:0; padding:0; display:block; }

@media (max-width: 767.98px){
    .idc{ zoom:1.05; }
    .a4{ width:100%; min-height:auto; padding:16px; }
    .letter-to{ width:100%; }
}
@media print{
    .no-print, .doc-toolbar, .app-navbar, .app-sidebar, .page-head .d-flex, .btn, .nav-tabs, .pagination, form .btn{ display:none !important; }
    body, .a4-wrap, .receipt-wrap{ background:#fff !important; }
    .a4{ box-shadow:none; margin:0; width:auto; min-height:auto; }
    .receipt{ box-shadow:none; }
    .app-content{ width:100%; }
    .idc{ zoom:1; margin:0 0 6mm; box-shadow:none; border:.2mm solid #ccc; break-inside:avoid; }
    .cards-wrap{ display:block; }
    @page{ size:auto; margin:10mm; }
}

/* ── Mode sombre (composants v2) ── */
body.dark-mode{ --surface:#1a1d29; --border:#2a2d3a; --muted:#9aa0ad; --ink:#e4e6eb; }
body.dark-mode .kpi-card, body.dark-mode .pipe{ background:#1a1d29; }
body.dark-mode .mini-stat, body.dark-mode .hbar{ background:#232739; }
body.dark-mode .card-header{ background:#20232f; }
body.dark-mode .alert-pill{ background:#2b2518; border-color:#5a4a20; color:#f3d48a; }
body.dark-mode .viz-root{ --series-1:#3987e5; --series-2:#d95926; --series-3:#199e70; --viz-text:#c3c2b7; --viz-grid:#2e2d2a; --viz-surface:#1a1d29; }
body.dark-mode .table-light, body.dark-mode .table-light th{ --bs-table-bg:#20232f; color:#e4e6eb; }
body.dark-mode .doc-toolbar{ background:#12141c; }
body.dark-mode .stepper-card .list-group-item.active{ background:#232739; }
.idc .tiny{ font-size:1.7mm; line-height:1.25; }
.idc-qr .tiny{ margin-top:.5mm; }
@media (max-width: 991.98px){
    .app-body{ align-items:stretch; }
    .app-content{ width:100%; max-width:100vw; }
    .page-head > div:first-child{ min-width:0; }
}
.page-head .text-muted{ overflow-wrap:anywhere; }

/* ── v2.1 : signature & cachet scannés sur les documents officiels ── */
.sign-space,.sign-space-sm{ position:relative; }
.doc-sign-images{ position:relative; height:70px; display:flex; align-items:center; justify-content:center; }
.doc-sign-images .doc-signature{ max-height:62px; max-width:180px; position:relative; z-index:2; }
.doc-sign-images .doc-stamp{ max-height:78px; max-width:110px; position:absolute; left:50%; top:50%; transform:translate(-75%,-50%) rotate(-8deg); opacity:.82; z-index:1; }
.doc-sign-images.sm{ height:44px; }
.doc-sign-images.sm .doc-signature{ max-height:38px; max-width:120px; }
.doc-sign-images.sm .doc-stamp{ max-height:48px; max-width:70px; }
.idc .doc-sign-images.sm{ height:7mm; }
.idc .doc-sign-images.sm .doc-signature{ max-height:6.5mm; max-width:22mm; }
.idc .doc-sign-images.sm .doc-stamp{ max-height:8mm; max-width:12mm; }
.lh-slogan{ font-size:.8rem; font-style:italic; opacity:.8; }
.brand-preview{ background:repeating-conic-gradient(#eee 0 25%,#fff 0 50%) 0 0/14px 14px; border:1px solid var(--bs-border-color); border-radius:.5rem; padding:.5rem; display:flex; align-items:center; justify-content:center; min-height:72px; }
.brand-preview img{ max-height:64px; max-width:100%; }
.social-links a{ display:inline-flex; width:34px; height:34px; align-items:center; justify-content:center; border-radius:50%; background:rgba(0,0,0,.06); color:inherit; text-decoration:none; }
.social-links a:hover{ background:var(--brand); color:#fff; }
@media (max-width: 991.98px){ .settings-tabs{ flex-wrap:nowrap; overflow-x:auto; white-space:nowrap; } }

/* ═══════════════════════════════════════════════════════════════
   MENU LATÉRAL v2.1 — groupes repliables, recherche, mode réduit
   ═══════════════════════════════════════════════════════════════ */
:root{ --sb-bg:#ffffff; --sb-ink:#344054; --sb-muted:#8b95a5; --sb-line:#eceff4; --sb-hover:#f3f6fb;
       --sb-active-bg:color-mix(in srgb, var(--brand) 10%, #fff); --sb-active-ink:var(--brand); --navbar-h:56px; }
.app-navbar{ min-height:var(--navbar-h); }
.app-body{ display:flex; align-items:stretch; min-height:calc(100vh - var(--navbar-h)); }
.app-content{ flex:1; min-width:0; }

.app-sidebar{ width:var(--sidebar-w); flex-shrink:0; background:var(--sb-bg); border-right:1px solid var(--sb-line);
    position:sticky; top:var(--navbar-h); height:calc(100vh - var(--navbar-h)); align-self:flex-start;
    transition:width .2s ease; z-index:1020; }
.app-sidebar .sidebar-inner{ height:100%; display:flex; flex-direction:column; }
.app-sidebar ul{ list-style:none; margin:0; padding:0; }
.app-sidebar a{ text-decoration:none; }

/* Recherche */
.sb-search{ position:relative; margin:.85rem .85rem .35rem; }
.sb-search .bi{ position:absolute; left:.7rem; top:50%; transform:translateY(-50%); color:var(--sb-muted); font-size:.85rem; pointer-events:none; }
.sb-search-input{ width:100%; border:1px solid var(--sb-line); background:#f7f8fb; border-radius:10px; padding:.45rem .7rem .45rem 2rem;
    font-size:.84rem; color:var(--sb-ink); outline:none; transition:border-color .15s, box-shadow .15s, background .15s; }
.sb-search-input:focus{ background:#fff; border-color:var(--brand); box-shadow:0 0 0 3px color-mix(in srgb, var(--brand) 15%, transparent); }

/* Campus actif */
.sb-campus{ display:flex; align-items:center; gap:.6rem; margin:.4rem .85rem .2rem; padding:.5rem .65rem; border-radius:10px;
    background:linear-gradient(135deg, color-mix(in srgb, var(--brand) 9%, #fff), #fff); border:1px solid color-mix(in srgb, var(--brand) 18%, #fff);
    color:var(--sb-ink); font-size:.84rem; font-weight:600; line-height:1.2; }
.sb-campus-ico{ width:28px; height:28px; border-radius:8px; background:var(--brand); color:#fff; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; font-size:.8rem; }
.sb-campus-cap{ display:block; font-size:.66rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--sb-muted); }

/* Navigation */
.sb-nav{ flex:1; overflow-y:auto; padding:.35rem .6rem 1rem; scrollbar-width:thin; }
.sb-group + .sb-group{ margin-top:.15rem; }
.sb-group-btn{ all:unset; box-sizing:border-box; width:100%; display:flex; align-items:center; gap:.6rem; cursor:pointer;
    padding:.5rem .55rem; border-radius:10px; color:var(--sb-ink); font-size:.875rem; font-weight:600; line-height:1.2; transition:background .15s, color .15s; }
.sb-group-btn:hover{ background:var(--sb-hover); }
.sb-group-btn:focus-visible{ outline:2px solid var(--brand); outline-offset:1px; }
.sb-ico{ width:30px; height:30px; border-radius:9px; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    background:#f1f3f8; color:#5b6577; font-size:.95rem; transition:background .15s, color .15s; }
.sb-group.is-active .sb-ico, .sb-group-btn:not(.collapsed) .sb-ico{ background:var(--brand); color:#fff; }
.sb-group-btn .sb-label{ flex:1; min-width:0; }
.sb-count{ font-size:.68rem; font-weight:700; color:var(--sb-muted); background:#f1f3f8; border-radius:20px; padding:.1rem .45rem; }
.sb-chev{ font-size:.75rem; color:var(--sb-muted); transition:transform .2s ease; }
.sb-group-btn:not(.collapsed) .sb-chev{ transform:rotate(90deg); }

.sb-items{ position:relative; padding:.15rem 0 .35rem 1.55rem !important; }
.sb-items::before{ content:""; position:absolute; left:1.45rem; top:.2rem; bottom:.5rem; width:1px; background:var(--sb-line); }
.sb-items-root{ padding:0 0 .35rem !important; }
.sb-items-root::before{ display:none; }
.sb-link{ position:relative; display:flex; align-items:center; gap:.6rem; padding:.42rem .65rem; margin:1px 0; border-radius:9px;
    color:#556070; font-size:.86rem; font-weight:500; line-height:1.25; transition:background .15s, color .15s; }
.sb-link i{ font-size:1rem; width:18px; text-align:center; opacity:.85; flex-shrink:0; }
.sb-link:hover{ background:var(--sb-hover); color:var(--sb-ink); }
.sb-link.active{ background:var(--sb-active-bg); color:var(--sb-active-ink); font-weight:600; }
.sb-link.active i{ opacity:1; }
.sb-items:not(.sb-items-root) .sb-link.active::before{ content:""; position:absolute; left:-.15rem; top:22%; bottom:22%; width:3px; border-radius:3px; background:var(--brand); margin-left:-.05rem; }
.sb-items-root .sb-link{ padding:.5rem .55rem; color:var(--sb-ink); font-weight:600; }
.sb-items-root .sb-link i{ width:30px; height:30px; border-radius:9px; background:#f1f3f8; display:inline-flex; align-items:center; justify-content:center; font-size:.95rem; }
.sb-items-root .sb-link.active i{ background:var(--brand); color:#fff; }
.sb-empty{ padding:1rem; text-align:center; color:var(--sb-muted); font-size:.85rem; }
.sb-hit{ background:color-mix(in srgb, var(--brand) 18%, transparent); border-radius:3px; }

/* Pied */
.sb-footer{ display:flex; align-items:center; justify-content:space-between; gap:.5rem; padding:.6rem .9rem; border-top:1px solid var(--sb-line); font-size:.75rem; color:var(--sb-muted); }
.sb-mini-btn{ all:unset; cursor:pointer; width:30px; height:30px; border-radius:8px; display:inline-flex; align-items:center; justify-content:center; color:var(--sb-muted); }
.sb-mini-btn:hover{ background:var(--sb-hover); color:var(--brand); }

/* Mode réduit (icônes seules) — bureau */
@media (min-width: 992px){
  body.sb-mini{ --sidebar-w:76px; }
  body.sb-mini .sb-label, body.sb-mini .sb-count, body.sb-mini .sb-chev, body.sb-mini .sb-search, body.sb-mini .sb-group-btn{ display:none !important; }
  body.sb-mini .sb-campus{ justify-content:center; padding:.4rem; margin:.7rem .6rem .3rem; }
  body.sb-mini .sb-nav .collapse{ display:block !important; height:auto !important; }
  body.sb-mini .sb-items{ padding:0 !important; }
  body.sb-mini .sb-items::before{ display:none; }
  body.sb-mini .sb-group + .sb-group{ border-top:1px solid var(--sb-line); margin-top:.35rem; padding-top:.35rem; }
  body.sb-mini .sb-link{ justify-content:center; padding:.55rem 0; }
  body.sb-mini .sb-link i{ font-size:1.1rem; width:auto; }
  body.sb-mini .sb-link.active::before{ display:none; }
  body.sb-mini .sb-footer{ justify-content:center; padding:.6rem 0; }
  body.sb-mini .sb-mini-btn i{ transform:scaleX(-1); }
}

/* Mobile : panneau coulissant */
@media (max-width: 991.98px){
  .app-body{ flex-direction:column; }
  .app-sidebar{ position:fixed; left:calc(-1 * var(--sidebar-w) - 20px); top:var(--navbar-h); height:calc(100vh - var(--navbar-h));
      z-index:1045; transition:left .25s ease; box-shadow:8px 0 30px rgba(16,24,40,.18); }
  .app-sidebar.show{ left:0; }
  body.sb-open::after{ content:""; position:fixed; inset:var(--navbar-h) 0 0 0; background:rgba(16,24,40,.35); z-index:1040; }
}

/* Mode sombre */
body.dark-mode{ --sb-bg:#161924; --sb-ink:#d7dbe4; --sb-muted:#7f889a; --sb-line:#262a38; --sb-hover:#1f2331; --sb-active-bg:color-mix(in srgb, var(--brand) 22%, #161924); --sb-active-ink:#fff; }
body.dark-mode .sb-search-input{ background:#1c2030; color:var(--sb-ink); }
body.dark-mode .sb-ico, body.dark-mode .sb-count, body.dark-mode .sb-items-root .sb-link i{ background:#22273a; color:#aab2c3; }
body.dark-mode .sb-link{ color:#b4bccb; }
body.dark-mode .sb-campus{ background:#1c2030; border-color:#2a3046; }
@media print{ .app-sidebar{ display:none !important; } }
body.dark-mode .table{ --bs-table-bg:transparent; --bs-table-color:#e4e6eb; --bs-table-hover-bg:#20243a; --bs-table-hover-color:#fff; --bs-table-striped-bg:#1c2030; border-color:#2a2d3a; }
body.dark-mode .table-light, body.dark-mode .table > thead.table-light > tr > *{ --bs-table-bg:#20232f; --bs-table-color:#e4e6eb; border-color:#2a2d3a; }
