:root{
    --bg:#f3f6fb;
    --card:#ffffff;
    --line:#e5e7eb;
    --text:#0f172a;
    --muted:#64748b;
    --primary:#0f172a;
    --secondary:#1d4ed8;
    --accent:#22c55e;
    --soft:#eefbf3;
    --danger:#dc2626;
    --warning:#f59e0b;
    --info:#0ea5e9;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}
a{text-decoration:none}.layout-shell{display:flex;min-height:100vh}.sidebar{width:305px;background:#fff;border-right:1px solid var(--line);padding:24px;display:flex;flex-direction:column;gap:22px;position:sticky;top:0;height:100vh}.content-wrap{flex:1;padding:24px}.topbar{background:#fff;border:1px solid var(--line);border-radius:24px;padding:20px 24px}.page-body{padding-top:24px}.brand-block{display:flex;align-items:center;gap:14px}.brand-title{font-size:1.25rem;font-weight:800}.brand-subtitle{font-size:.88rem;color:var(--muted)}.app-nav .nav-link{display:flex;align-items:center;gap:12px;color:#1f2937;border-radius:14px;padding:12px 14px;font-weight:600;transition:.2s ease}.app-nav .nav-link:hover{background:#f8fafc;color:#0f172a;transform:translateX(2px)}.sidebar-footer{margin-top:auto;padding-top:16px;border-top:1px solid var(--line)}.sidebar-alert-box{background:#f8fafc;border:1px solid var(--line);border-radius:18px;padding:16px}.card-pro{background:var(--card);border:1px solid var(--line);border-radius:22px;box-shadow:0 10px 30px rgba(15,23,42,.04)}.kpi-card{padding:22px;height:100%}.kpi-label{color:var(--muted);font-size:.92rem}.kpi-value{font-size:1.9rem;font-weight:800;line-height:1.1}.kpi-sub{font-size:.82rem;color:var(--muted)}.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;flex-wrap:wrap}.table-card{padding:18px}.table thead th{font-size:.78rem;color:#6b7280;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.chip{display:inline-flex;align-items:center;gap:8px;background:var(--soft);color:var(--accent);padding:6px 12px;border-radius:999px;font-size:.84rem;font-weight:700}.thumb-logo,.thumb-logo-square{width:54px;height:54px;border-radius:16px;background:linear-gradient(135deg,#0f172a,#1d4ed8);display:flex;align-items:center;justify-content:center;color:#fff;font-size:1.05rem;font-weight:800;overflow:hidden}.hero-banner{background:linear-gradient(135deg,#0f172a 0%,#1d4ed8 55%,#22c55e 100%);border-radius:26px;color:#fff;padding:28px}.muted{color:var(--muted)}.info-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.info-item{background:#f8fafc;border:1px solid var(--line);border-radius:16px;padding:14px}.invoice-sheet,.contract-sheet{max-width:1080px;margin:0 auto;padding:24px}.no-print{display:block}.mobile-topbar{display:none;align-items:center;justify-content:space-between;padding:12px 16px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1040}.alerts-dropdown{width:460px;max-width:92vw;border-radius:18px;border:1px solid var(--line)}.alert-item{padding:12px 14px;border-bottom:1px solid #f1f5f9;white-space:normal}.alert-item:last-child{border-bottom:0}.alert-dot{width:10px;height:10px;border-radius:999px;display:inline-block;margin-top:6px;flex:0 0 10px}.alert-card{border-radius:18px;border:1px solid var(--line);background:#fff;padding:16px;height:auto}.alert-card.danger{border-left:6px solid var(--danger);background:#fff6f6}.alert-card.warning{border-left:6px solid var(--warning);background:#fffbeb}.alert-card.info{border-left:6px solid var(--info);background:#f0f9ff}.alert-card.secondary{border-left:6px solid #94a3b8;background:#f8fafc}.selected-mission-card{display:block!important;height:auto!important;min-height:0!important;align-self:auto!important}.selected-mission-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;row-gap:6px;flex-wrap:wrap}.selected-mission-title{min-width:0;flex:1 1 220px;line-height:1.3;overflow-wrap:anywhere;word-break:break-word}.selected-mission-badge{flex:0 0 auto;white-space:nowrap}.selected-mission-meta{line-height:1.35;overflow-wrap:anywhere;word-break:break-word}.selected-mission-box{display:block;width:100%;margin:0 0 1rem;padding:14px 16px;border:1px solid #fecaca;border-left:6px solid var(--danger);border-radius:18px;background:#fff7f7;overflow:hidden}.selected-mission-box.warning{border-color:#fed7aa;border-left-color:var(--warning);background:#fffaf0}.selected-mission-box.info{border-color:#bfdbfe;border-left-color:var(--info);background:#f4faff}.selected-mission-box-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}.selected-mission-kicker{font-size:.76rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#64748b}.selected-mission-contract{font-size:.98rem;font-weight:800;line-height:1.3;color:#0f172a;overflow-wrap:anywhere;word-break:break-word}.selected-mission-line{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding-top:8px;margin-top:8px;border-top:1px dashed rgba(148,163,184,.35)}.selected-mission-line span{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#64748b;flex:0 0 auto}.selected-mission-line strong{min-width:0;flex:1 1 auto;text-align:right;line-height:1.35;overflow-wrap:anywhere;word-break:break-word}page-title{font-size:1.6rem;font-weight:800}.pro-logo{border-radius:18px;box-shadow:0 12px 28px rgba(29,78,216,.2)}.priority-banner{border-radius:20px;padding:16px 18px;color:#fff;display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:92px}.banner-title{font-weight:700;font-size:.92rem}.banner-value{font-size:2rem;font-weight:800;line-height:1}.banner-danger{background:linear-gradient(135deg,#b91c1c,#ef4444)}.banner-warning{background:linear-gradient(135deg,#b45309,#f59e0b)}.banner-info{background:linear-gradient(135deg,#0369a1,#0ea5e9)}.banner-dark{background:linear-gradient(135deg,#0f172a,#334155)}.banner-action{justify-content:space-between}.top-alert-banner-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.alert-counter-group{display:flex;gap:10px}.alert-counter{min-width:84px;border-radius:16px;padding:10px 12px;color:#fff;text-align:center}.alert-counter .counter-value{font-size:1.2rem;font-weight:800;line-height:1}.alert-counter .counter-label{font-size:.72rem;opacity:.9;margin-top:4px}.alert-counter.danger{background:linear-gradient(135deg,#b91c1c,#ef4444)}.alert-counter.warning{background:linear-gradient(135deg,#b45309,#f59e0b)}.alert-counter.info{background:linear-gradient(135deg,#0369a1,#0ea5e9)}.alert-counter.success{background:linear-gradient(135deg,#15803d,#22c55e)}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.stats-mini{border:1px solid var(--line);border-radius:18px;background:#fff;padding:16px}.stats-mini h4{font-size:.85rem;color:var(--muted);margin:0 0 8px}.stats-mini .value{font-size:1.6rem;font-weight:800}.timeline-table td,.timeline-table th{vertical-align:middle}.schedule-card{border-radius:18px;border:1px solid var(--line);padding:16px;background:#fff}.client-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.metric-stack{display:flex;flex-direction:column;gap:12px}.metric-chip{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;background:#f8fafc;border:1px solid var(--line);border-radius:16px}.table-compact td,.table-compact th{padding:.55rem .6rem}.logo-mark{width:42px;height:42px;border-radius:14px;background:linear-gradient(135deg,#0f172a,#1d4ed8);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800}.empty-state{padding:32px;text-align:center;color:var(--muted)}.form-help{font-size:.78rem;color:var(--muted)}.maintenance-pill{padding:6px 10px;border-radius:999px;font-size:.78rem;font-weight:700;display:inline-block}.maintenance-pill.good{background:#dcfce7;color:#166534}.maintenance-pill.medium{background:#fef3c7;color:#92400e}.maintenance-pill.bad{background:#fee2e2;color:#991b1b}.quick-actions{display:flex;gap:10px;flex-wrap:wrap}.print-toolbar{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}.small-chart{min-height:320px}.map-shell{display:grid;grid-template-columns:360px 1fr;gap:18px}.map-sidebar{background:#fff;border:1px solid var(--line);border-radius:22px;padding:18px;max-height:calc(100vh - 210px);overflow:auto}.map-canvas{height:70vh;min-height:560px;border-radius:22px;border:1px solid var(--line);overflow:hidden}.mini-map{height:320px;border-radius:18px;border:1px solid var(--line);overflow:hidden}.vehicle-map-item{padding:12px;border:1px solid var(--line);border-radius:16px;background:#fff;margin-bottom:12px}.vehicle-map-item:last-child{margin-bottom:0}.gps-badge{font-size:.72rem;padding:5px 8px;border-radius:999px;display:inline-block;font-weight:700}.gps-online{background:#dcfce7;color:#166534}.gps-stale{background:#fef3c7;color:#92400e}.gps-offline{background:#e2e8f0;color:#334155}.gps-popup h6{margin:0 0 6px}.gps-popup .small{margin-bottom:4px;display:block}.map-legend{display:flex;flex-wrap:wrap;gap:8px}.map-dot{width:10px;height:10px;border-radius:999px;display:inline-block;margin-right:6px}.map-dot.green{background:#22c55e}.map-dot.orange{background:#f59e0b}.map-dot.gray{background:#94a3b8}.map-dot.red{background:#dc2626}.gps-endpoint-box{background:#0f172a;color:#fff;border-radius:18px;padding:16px}.gps-endpoint-box code{color:#bfdbfe}.leaflet-popup-content{margin:10px 12px}.leaflet-container{font:inherit}
@media print{.no-print,.sidebar,.mobile-topbar,.topbar,.top-alert-banner-grid{display:none!important}.content-wrap,.invoice-sheet,.contract-sheet{padding:0!important;margin:0!important;max-width:none}body{background:#fff}.card-pro,.info-item,.alert-card{box-shadow:none!important}}
@media(max-width:1200px){.top-alert-banner-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.map-shell{grid-template-columns:1fr}.map-sidebar{max-height:none}.map-canvas{height:55vh}}
@media(max-width:1100px){.sidebar{display:none}.mobile-topbar{display:flex}.layout-shell{display:block}.content-wrap{padding:12px}.topbar{border-radius:16px;padding:16px}.page-title{font-size:1.2rem}.no-mobile-hide{display:none!important}.alerts-dropdown{width:100%}}
@media(max-width:768px){.hero-banner{padding:20px}.stats-grid,.top-alert-banner-grid,.client-grid,.info-list{grid-template-columns:1fr}.kpi-value{font-size:1.5rem}.table-card{padding:14px}.priority-banner{min-height:auto}.map-canvas{height:50vh;min-height:380px}}

.document-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:18px}.document-stat{padding:18px}.document-stat .value{font-size:1.6rem;font-weight:800;line-height:1.1}.calendar-shell{display:grid;grid-template-columns:340px minmax(0,1fr);gap:18px}.calendar-panel{padding:18px}.calendar-legend{display:flex;flex-wrap:wrap;gap:10px}.calendar-legend .legend-item{display:inline-flex;align-items:center;gap:8px;background:#f8fafc;border:1px solid var(--line);border-radius:999px;padding:7px 12px;font-size:.84rem;font-weight:700}.calendar-dot{width:10px;height:10px;border-radius:999px;display:inline-block}.calendar-mini-list{display:flex;flex-direction:column;gap:12px}.calendar-mini-item{padding:14px;border:1px solid var(--line);border-radius:16px;background:#fff}.fc .fc-toolbar-title{font-size:1.15rem;font-weight:800}.fc .fc-button{background:#0f172a;border-color:#0f172a}.fc .fc-button:hover,.fc .fc-button:focus{background:#1d4ed8;border-color:#1d4ed8}.fc-theme-standard .fc-scrollgrid,.fc-theme-standard td,.fc-theme-standard th{border-color:#e5e7eb}.fc .fc-daygrid-event{border:none;padding:2px 4px;border-radius:8px}.upload-dropzone{border:1.5px dashed #cbd5e1;border-radius:18px;padding:18px;background:#f8fafc}.doc-type-badge{display:inline-flex;align-items:center;gap:6px;background:#eef2ff;color:#3730a3;border-radius:999px;padding:5px 10px;font-size:.76rem;font-weight:700}.doc-primary-badge{display:inline-flex;align-items:center;gap:6px;background:#ecfdf5;color:#166534;border-radius:999px;padding:5px 10px;font-size:.76rem;font-weight:700}@media(max-width:1200px){.calendar-shell{grid-template-columns:1fr}}

.calendar-pro-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:18px}.calendar-stat-card{padding:18px 20px;border-radius:22px;position:relative;overflow:hidden}.calendar-stat-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:#0f172a}.calendar-stat-card.accent-purple:before{background:#7c3aed}.calendar-stat-card.accent-blue:before{background:#2563eb}.calendar-stat-card.accent-red:before{background:#dc2626}.calendar-stat-label{font-size:.82rem;color:#64748b;text-transform:uppercase;letter-spacing:.04em;font-weight:700}.calendar-stat-value{font-size:2rem;font-weight:800;line-height:1.05;margin-top:6px}.calendar-stat-sub{font-size:.82rem;color:#64748b;margin-top:4px}.calendar-pro-layout{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(340px,.9fr);gap:18px;align-items:start}.calendar-main-card{padding:0;overflow:hidden}.calendar-detail-card{padding:20px;position:sticky;top:20px}.calendar-filter-bar{display:grid;grid-template-columns:minmax(220px,1fr) 220px minmax(0,1fr);gap:16px;padding:18px 18px 12px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fff 0%,#fbfdff 100%)}.calendar-filter-group .form-label{font-size:.8rem;color:#64748b;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.calendar-filter-input{border-radius:14px;border-color:#dbe2ea;min-height:46px}.calendar-filter-input:focus{border-color:#7c3aed;box-shadow:0 0 0 .2rem rgba(124,58,237,.12)}.calendar-legend.compact{gap:8px}.calendar-legend.compact .legend-item{padding:6px 10px;font-size:.78rem}.calendar-main-card #contractsCalendar{padding:14px 14px 18px}.calendar-main-card .fc{--fc-border-color:#e7edf5;--fc-page-bg-color:#fff;--fc-neutral-bg-color:#fbfcfe;--fc-today-bg-color:#fff8db}.calendar-main-card .fc .fc-toolbar{padding:4px 4px 16px;margin-bottom:0}.calendar-main-card .fc .fc-toolbar-title{font-size:1.95rem;font-weight:700;text-transform:lowercase;letter-spacing:.01em}.calendar-main-card .fc .fc-button{padding:.42rem .72rem;border-radius:10px;border:none;background:#3f4854;color:#fff;font-weight:700;box-shadow:none}.calendar-main-card .fc .fc-button:hover,.calendar-main-card .fc .fc-button:focus{background:#1f2937;box-shadow:none}.calendar-main-card .fc .fc-button-primary:not(:disabled).fc-button-active{background:#111827}.calendar-main-card .fc .fc-col-header-cell-cushion{padding:10px 4px;font-size:.84rem;font-weight:700;color:#111827;text-transform:lowercase}.calendar-main-card .fc .fc-daygrid-day-number{font-size:.84rem;color:#1f2937;padding:8px 10px}.calendar-main-card .fc .fc-day-other .fc-daygrid-day-number{color:#b6beca}.calendar-main-card .fc-theme-standard td,.calendar-main-card .fc-theme-standard th,.calendar-main-card .fc-theme-standard .fc-scrollgrid{border-color:#e6ebf2}.calendar-main-card .fc .fc-daygrid-day-frame{min-height:112px;background:#fff}.calendar-main-card .fc .fc-day-today .fc-daygrid-day-frame{background:#fff8db}.calendar-main-card .fc .fc-daygrid-day-top{justify-content:flex-start}.calendar-main-card .fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em}.calendar-main-card .fc .fc-daygrid-event{margin:2px 4px 0;border:none;border-radius:10px;padding:4px 7px;box-shadow:0 6px 18px rgba(15,23,42,.12)}.calendar-main-card .fc .fc-daygrid-event.is-selected{outline:2px solid #111827;outline-offset:1px}.calendar-main-card .fc-contract-chip{line-height:1.15}.calendar-main-card .fc-contract-chip-title{font-size:.72rem;font-weight:800;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-main-card .fc-contract-chip-sub{font-size:.67rem;color:rgba(255,255,255,.92);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-main-card .fc .fc-more-link{font-size:.72rem;font-weight:700;color:#475569}.calendar-detail-header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding-bottom:16px;border-bottom:1px solid var(--line);margin-bottom:16px}.calendar-detail-kicker{font-size:.78rem;color:#7c3aed;font-weight:800;text-transform:uppercase;letter-spacing:.06em}.calendar-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.calendar-detail-item{padding:14px;border:1px solid var(--line);border-radius:18px;background:#fbfdff}.calendar-detail-item.full{grid-column:1/-1}.calendar-detail-item .label{font-size:.76rem;color:#64748b;text-transform:uppercase;font-weight:800;letter-spacing:.05em;margin-bottom:6px}.calendar-detail-item .value{font-size:1rem;font-weight:700;color:#0f172a}.calendar-detail-item .value.small-value{font-size:.92rem;font-weight:600;line-height:1.5}.calendar-detail-item .sub{font-size:.82rem;color:#64748b;margin-top:4px}.calendar-detail-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.calendar-day-focus{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.calendar-day-list{display:flex;flex-direction:column;gap:10px}.calendar-day-contract{display:flex;gap:10px;align-items:stretch;padding:0;border:1px solid var(--line);background:#fff;border-radius:16px;overflow:hidden;text-align:left;transition:.18s ease;cursor:pointer}.calendar-day-contract:hover{transform:translateY(-1px);box-shadow:0 8px 20px rgba(15,23,42,.07)}.calendar-day-contract.active{border-color:#0f172a;box-shadow:0 10px 22px rgba(15,23,42,.1)}.calendar-day-contract-bar{width:6px;flex:0 0 6px}.calendar-day-contract-body{display:flex;flex-direction:column;padding:12px 14px;min-width:0}.calendar-day-contract .title{font-size:.88rem;font-weight:800;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-day-contract .sub{font-size:.78rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-empty-state{padding:16px;border:1px dashed #cbd5e1;border-radius:16px;background:#f8fafc;color:#64748b;font-size:.9rem}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.45em}@media(max-width:1400px){.calendar-pro-layout{grid-template-columns:1fr}.calendar-detail-card{position:static}}@media(max-width:992px){.calendar-pro-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-filter-bar{grid-template-columns:1fr}.calendar-main-card .fc .fc-toolbar{flex-direction:column;align-items:center;gap:10px}.calendar-main-card .fc .fc-toolbar-title{font-size:1.5rem}.calendar-detail-grid{grid-template-columns:1fr}}@media(max-width:640px){.calendar-pro-stats{grid-template-columns:1fr}.calendar-main-card #contractsCalendar{padding:8px}.calendar-main-card .fc .fc-daygrid-day-frame{min-height:90px}.calendar-main-card .fc .fc-daygrid-event{margin:1px 2px 0;padding:3px 5px}.calendar-main-card .fc-contract-chip-sub{display:none}}

/* ===== V8 Admin & Branding ===== */
.hero-banner{background:linear-gradient(135deg,var(--brand-primary,#0f172a) 0%,var(--brand-secondary,#1d4ed8) 55%,#22c55e 100%)}
.brand-image,.brand-image-lg,.brand-image-xl{display:block;object-fit:contain;background:#fff;border-radius:18px;border:1px solid rgba(148,163,184,.25)}
.brand-image{width:52px;height:52px;padding:6px}
.brand-image-lg{width:72px;height:72px;padding:8px}
.brand-image-xl{width:110px;height:110px;padding:10px;margin:0 auto}
.menu-section-label{font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:800;margin:4px 12px}
.login-card-pro{border-top:4px solid var(--brand-secondary,#1d4ed8)}
.admin-kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.admin-stat-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.admin-stat-item,.admin-role-row{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border:1px solid var(--line);border-radius:16px;background:#fbfdff}
.admin-role-row + .admin-role-row{margin-top:10px}
.admin-company-preview{padding:10px}
.permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.permission-item{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:#fbfdff;font-size:.92rem;font-weight:600}
.permission-item input{margin-top:0}
@media(max-width:1200px){.admin-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.admin-kpi-grid,.admin-stat-list,.permission-grid{grid-template-columns:1fr}.brand-image-xl{width:90px;height:90px}}

/* ===== Traccar analytics & map enhancements ===== */
.telemetry-map{height:380px;border-radius:18px;border:1px solid var(--line);overflow:hidden;background:#f8fafc}
.telemetry-map-lg{height:620px}
.telemetry-map-card{overflow:hidden}
.telemetry-summary-grid{grid-template-columns:1fr}
.telemetry-table td,.telemetry-table th{vertical-align:middle}
.telemetry-zone-list{display:flex;flex-direction:column;gap:12px}
.telemetry-zone-item{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--line);border-radius:16px;background:#fbfdff}
.zone-rank{font-size:1.2rem;font-weight:800;color:var(--secondary)}
.heat-legend{display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:.84rem}
.heat-pill{width:22px;height:10px;border-radius:999px;display:inline-block;vertical-align:middle}
.heat-pill.cool{background:#60a5fa}
.heat-pill.warm{background:#f59e0b}
.heat-pill.hot{background:#dc2626}
.telemetry-mini-kpis{display:flex;flex-wrap:wrap;gap:8px}
.telemetry-mini-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:999px;background:#eff6ff;border:1px solid #bfdbfe;color:#1d4ed8;font-size:.82rem;font-weight:700}
.telemetry-vehicle-marker-shell{background:transparent;border:0}
.telemetry-vehicle-pin{--vehicle-marker-color:#1d4ed8;--vehicle-marker-size:34px;--vehicle-marker-rotation:0deg;width:var(--vehicle-marker-size);height:var(--vehicle-marker-size);display:flex;align-items:center;justify-content:center;border-radius:999px;background:var(--vehicle-marker-color);border:2px solid #fff;box-shadow:0 10px 24px rgba(15,23,42,.22);transition:transform .18s ease,box-shadow .18s ease,filter .18s ease}
.telemetry-vehicle-pin svg{width:60%;height:60%;fill:#fff;transform:rotate(var(--vehicle-marker-rotation));transform-origin:50% 50%}
.telemetry-vehicle-pin.is-selected{transform:scale(1.08);box-shadow:0 12px 28px rgba(15,23,42,.28)}
.telemetry-vehicle-pin.is-compact{--vehicle-marker-size:28px}
.telemetry-vehicle-pin.is-muted{filter:saturate(.88);opacity:.95}

@media(max-width:1200px){.telemetry-map-lg{height:540px}}
@media(max-width:768px){.telemetry-map-lg{height:420px}.telemetry-zone-item{align-items:flex-start;flex-direction:column}.telemetry-mini-kpis{width:100%}}



/* ===== Fix complet sidebar desktop ===== */

.layout-shell {
    display: flex;
    min-height: 100vh;
    align-items: stretch;
}

.sidebar {
    width: 305px;
    min-width: 305px;
    height: 100vh;
    position: sticky;
    top: 0;
    display: flex;
    flex-direction: column;
    padding: 0;
    gap: 0;
    overflow: hidden;
    background: #fff;
    border-right: 1px solid var(--line);
}

.sidebar-top {
    flex: 0 0 auto;
    padding: 24px 24px 18px;
    display: flex;
    flex-direction: column;
    gap: 18px;
    border-bottom: 1px solid var(--line);
    background: #fff;
}

.sidebar-main {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 18px 18px 10px;
    scrollbar-width: thin;
    scrollbar-color: #cbd5e1 transparent;
}

.sidebar-main::-webkit-scrollbar {
    width: 8px;
}

.sidebar-main::-webkit-scrollbar-thumb {
    background: #cbd5e1;
    border-radius: 999px;
}

.sidebar-main::-webkit-scrollbar-track {
    background: transparent;
}

.sidebar .app-nav {
    gap: 6px;
}

.app-nav .nav-link {
    display: flex;
    align-items: center;
    gap: 12px;
    color: #1f2937;
    border-radius: 14px;
    padding: 12px 14px;
    font-weight: 600;
    transition: background .2s ease, color .2s ease, transform .2s ease, box-shadow .2s ease;
}

.app-nav .nav-link i {
    width: 18px;
    min-width: 18px;
    text-align: center;
}

.app-nav .nav-link:hover {
    background: #f8fafc;
    color: #0f172a;
    transform: translateX(2px);
}

.app-nav .nav-link.active,
.app-nav .nav-link[aria-current="page"] {
    background: linear-gradient(135deg, rgba(29, 78, 216, 0.10), rgba(34, 197, 94, 0.08));
    color: var(--brand-primary);
    box-shadow: inset 0 0 0 1px rgba(29, 78, 216, 0.14);
}

.menu-section-label {
    font-size: .72rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: #94a3b8;
    margin: 16px 8px 8px;
}

.sidebar-footer {
    flex: 0 0 auto;
    margin-top: 0;
    padding: 16px 24px 24px;
    border-top: 1px solid var(--line);
    background: #fff;
}

.sidebar-user-card {
    background: #f8fafc;
    border: 1px solid var(--line);
    border-radius: 16px;
    padding: 14px 16px;
}

.content-wrap {
    flex: 1 1 auto;
    min-width: 0;
    padding: 24px;
}

.brand-image {
    max-width: 46px;
    max-height: 46px;
    width: auto;
    height: auto;
    display: block;
}

@media (max-width: 1100px) {
    .sidebar {
        display: none;
    }

    .layout-shell {
        display: block;
    }

    .content-wrap {
        padding: 12px;
    }
}


/* ===== Presence & login audit admin ===== */
.presence-kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.presence-kpi-card{padding:20px;border-radius:22px;background:#fff;border:1px solid var(--line);box-shadow:0 10px 30px rgba(15,23,42,.04)}
.presence-kpi-card .label{font-size:.82rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:800}
.presence-kpi-card .value{font-size:2rem;font-weight:800;line-height:1.05;margin-top:8px}
.presence-kpi-card .sub{font-size:.84rem;color:var(--muted);margin-top:6px}
.presence-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.presence-user-cell{display:flex;align-items:flex-start;gap:12px}
.presence-avatar{width:42px;height:42px;border-radius:14px;background:linear-gradient(135deg,var(--brand-primary,#0f172a),var(--brand-secondary,#1d4ed8));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;flex:0 0 auto}
.presence-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.presence-meta .badge{font-weight:700}
.audit-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;background:#f8fafc;border:1px solid var(--line);font-size:.78rem;font-weight:700;color:#334155}
.audit-status-success{background:#ecfdf5;border-color:#bbf7d0;color:#166534}
.audit-status-failed{background:#fef2f2;border-color:#fecaca;color:#991b1b}
.audit-status-active{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}
.audit-status-logout{background:#f8fafc;border-color:#cbd5e1;color:#475569}
.audit-table td,.audit-table th{vertical-align:middle}
.ua-text{max-width:320px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.admin-inline-stats{display:flex;flex-wrap:wrap;gap:10px}
.admin-inline-stats .stat{padding:8px 12px;border-radius:999px;background:#f8fafc;border:1px solid var(--line);font-size:.82rem;font-weight:700;color:#475569}
@media(max-width:1200px){.presence-kpi-grid,.presence-filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.presence-kpi-grid,.presence-filters{grid-template-columns:1fr}.ua-text{max-width:180px}}


/* ===== Phase 2 admin pro ===== */
.presence-filters-wide{grid-template-columns:repeat(7,minmax(0,1fr))}
.admin-notification-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.admin-notify-card{padding:18px;border-radius:20px;border:1px solid var(--line);background:#fff}
.admin-notify-card .label{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;font-weight:800;color:var(--muted)}
.admin-notify-card .value{font-size:1.8rem;font-weight:800;line-height:1.05;margin-top:8px}
.admin-notify-card .sub{font-size:.84rem;color:var(--muted);margin-top:6px}
.admin-notify-card.success{background:#ecfdf5;border-color:#bbf7d0}
.admin-notify-card.warning{background:#fff7ed;border-color:#fed7aa}
.admin-notify-card.info{background:#eff6ff;border-color:#bfdbfe}
.admin-notify-card.secondary{background:#f8fafc;border-color:#cbd5e1}
.admin-notification-list{display:flex;flex-direction:column;gap:12px}
.admin-notification-item{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border-radius:18px;border:1px solid var(--line);background:#fff}
.admin-notification-item.success{background:#ecfdf5;border-color:#bbf7d0}
.admin-notification-item.warning{background:#fff7ed;border-color:#fed7aa}
.admin-notification-item.info{background:#eff6ff;border-color:#bfdbfe}
.admin-notification-item.secondary{background:#f8fafc;border-color:#cbd5e1}
.admin-notification-item.danger{background:#fef2f2;border-color:#fecaca}
.admin-export-list{display:flex;flex-direction:column;gap:12px}
.admin-export-item{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border:1px solid var(--line);border-radius:18px;background:#fbfdff;color:#0f172a}
.admin-export-item i{font-size:1.2rem;color:var(--brand-secondary,#1d4ed8)}
.admin-export-item:hover{background:#f8fafc}
@media(max-width:1200px){.presence-filters-wide,.admin-notification-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.presence-filters-wide,.admin-notification-grid{grid-template-columns:1fr}.admin-notification-item{flex-direction:column;align-items:flex-start}}

/* ===== Desktop optical scale ===== */
/* À 100% dans Chrome, la zone de travail garde un rendu visuel proche de 80%, */
/* avec un sidebar affiné pour retrouver la densité de la version de référence. */
@media screen and (min-width:1101px){
    .content-wrap{
        zoom:.8;
    }

    .sidebar{
        width:260px;
        min-width:260px;
    }

    .sidebar-top{
        padding:14px 12px 9px;
        gap:9px;
    }

    .brand-block{
        gap:8px;
        align-items:center;
    }

    .brand-image{
        max-width:34px;
        max-height:34px;
    }

    .brand-title{
        font-size:.92rem;
        line-height:1.05;
    }

    .brand-subtitle{
        font-size:.68rem;
        line-height:1.1;
    }

    .sidebar-alert-box{
        padding:9px 9px;
        border-radius:13px;
    }

    .sidebar-alert-box .small{
        font-size:.68rem;
        line-height:1.12;
    }

    .sidebar-alert-box .badge{
        font-size:.62rem;
        padding:.34em .45em;
    }

    .sidebar-main{
        padding:9px 8px 7px;
    }

    .sidebar .app-nav{
        gap:3px;
    }

    .app-nav .nav-link{
        gap:8px;
        padding:7px 8px;
        border-radius:10px;
        font-size:.82rem;
        line-height:1.08;
        min-width:0;
    }

    .app-nav .nav-link i{
        width:14px;
        min-width:14px;
        font-size:.88rem;
    }

    .app-nav .nav-link .badge{
        font-size:.6rem;
        padding:.32em .44em;
    }

    .app-nav .nav-link span:not(.badge){
        min-width:0;
        overflow:hidden;
        text-overflow:ellipsis;
        white-space:nowrap;
    }

    .menu-section-label{
        margin:9px 6px 3px;
        font-size:.6rem;
        letter-spacing:.08em;
    }

    .sidebar-footer{
        padding:8px 12px 12px;
    }

    .sidebar-user-card{
        padding:8px 10px;
        border-radius:12px;
        font-size:.76rem;
        line-height:1.1;
    }

    .sidebar-user-card .fw-semibold,
    .sidebar-user-card .small,
    .sidebar-user-card .text-muted{
        line-height:1.2;
    }

    .sidebar-footer .btn{
        padding:.42rem .6rem;
        font-size:.76rem;
        border-radius:10px;
    }
}
