@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');:root {--j-navy: #0d1b2a;--j-navy-2: #122233;--j-navy-3: #1a3a4a;--j-teal: #00d4aa;--j-teal-dim: #00a889;--j-neon: #06ffa5;--j-neon-dim: rgba(6, 255, 165, 0.12);--j-text: #e2eaf2;--j-text-muted: #8a9bb0;--j-border: rgba(0, 212, 170, 0.18);--j-surface:rgba(18, 34, 51, 0.85);--j-surface-2:rgba(26, 58, 74, 0.6);--j-shadow: 0 4px 24px rgba(0, 0, 0, 0.45);--j-shadow-teal:0 0 18px rgba(0, 212, 170, 0.25);--j-radius: 12px;--j-radius-sm:8px;--gps-sidebar-width:300px;--gps-navbar-height:58px;}*, *::before, *::after { box-sizing:border-box; }html, body {font-family:'Inter', system-ui, -apple-system, sans-serif;font-size:15px;-webkit-font-smoothing:antialiased;}[data-bs-theme="dark"] body,body.dark-mode {background-color:var(--j-navy);color:var(--j-text);}[data-bs-theme="dark"] .card,body.dark-mode .card {background-color:var(--j-navy-2);border-color:var(--j-border);}[data-bs-theme="dark"] .table,body.dark-mode .table {--bs-table-bg:var(--j-navy-2);--bs-table-striped-bg:var(--j-navy-3);--bs-table-hover-bg:rgba(0, 212, 170, 0.06);color:var(--j-text);border-color:var(--j-border);}[data-bs-theme="dark"] .table thead th,body.dark-mode .table thead th {background:linear-gradient(90deg, var(--j-navy-3), var(--j-navy-2));color:var(--j-teal);font-weight:600;font-size:.8rem;letter-spacing:.04em;text-transform:uppercase;border-color:var(--j-border);}[data-bs-theme="dark"] .form-control,[data-bs-theme="dark"] .form-select,body.dark-mode .form-control,body.dark-mode .form-select {background-color:rgba(13, 27, 42, 0.8);color:var(--j-text);border-color:var(--j-border);}[data-bs-theme="dark"] .form-control:focus,[data-bs-theme="dark"] .form-select:focus,body.dark-mode .form-control:focus,body.dark-mode .form-select:focus {background-color:rgba(13, 27, 42, 0.9);border-color:var(--j-teal);box-shadow:0 0 0 3px rgba(0, 212, 170, 0.18);color:var(--j-text);}[data-bs-theme="dark"] .list-group-item,body.dark-mode .list-group-item {background-color:var(--j-navy-2);border-color:var(--j-border);color:var(--j-text);}[data-bs-theme="dark"] .modal-content,body.dark-mode .modal-content {background-color:var(--j-navy-2);border-color:var(--j-border);}[data-bs-theme="dark"] .dropdown-menu,body.dark-mode .dropdown-menu {background-color:var(--j-navy-2);border-color:var(--j-border);}[data-bs-theme="dark"] .dropdown-item,body.dark-mode .dropdown-item {color:var(--j-text);}[data-bs-theme="dark"] .dropdown-item:hover,body.dark-mode .dropdown-item:hover {background-color:var(--j-neon-dim);color:var(--j-teal);}[data-bs-theme="dark"] .dropdown-divider,body.dark-mode .dropdown-divider {border-color:var(--j-border);}.navbar-gps {background:linear-gradient(135deg, var(--j-navy) 0%, var(--j-navy-3) 100%);border-bottom:1px solid var(--j-border);min-height:var(--gps-navbar-height);height:auto;backdrop-filter:blur(12px);box-shadow:0 2px 20px rgba(0,0,0,.4);padding:0 1rem;z-index:1050; position:sticky;top:0;}.navbar-gps .navbar-brand {font-weight:700;font-size:1.1rem;color:var(--j-teal) !important;letter-spacing:-.01em;display:flex;align-items:center;gap:.45rem;text-decoration:none;}.navbar-brand-icon {width:30px;height:30px;background:linear-gradient(135deg, var(--j-teal), var(--j-neon));border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:.95rem;color:var(--j-navy);flex-shrink:0;box-shadow:0 0 12px rgba(0, 212, 170, 0.4);}.navbar-gps .nav-link {color:var(--j-text-muted) !important;font-weight:500;font-size:.88rem;padding:.35rem .75rem !important;border-radius:6px;transition:color .2s, background .2s;position:relative;}.navbar-gps .nav-link:hover,.navbar-gps .nav-link.active {color:var(--j-teal) !important;background:var(--j-neon-dim);}.navbar-gps .nav-link.active::after {content:'';position:absolute;bottom:-1px;left:50%;transform:translateX(-50%);width:20px;height:2px;background:var(--j-teal);border-radius:2px;}.btn-dark-toggle {width:34px;height:34px;border-radius:50%;border:1px solid var(--j-border);background:transparent;color:var(--j-text-muted);display:flex;align-items:center;justify-content:center;transition:all .2s;cursor:pointer;font-size:.9rem;}.navbar-toggler {padding:.35rem;border-color:var(--j-border) !important;}.navbar-toggler-icon {background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 212, 170, 0.9)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") !important;}.btn-dark-toggle:hover {border-color:var(--j-teal);color:var(--j-teal);background:var(--j-neon-dim);}.glass {background:var(--j-surface) !important;backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);border:1px solid var(--j-border) !important;box-shadow:var(--j-shadow);}body.map-page { overflow:hidden; }#map-wrap {position:fixed;top:var(--gps-navbar-height);left:0;right:0;bottom:0;z-index:1;}#map { width:100%; height:100%; }.map-dark-filter .leaflet-tile-pane {filter:invert(100%) hue-rotate(180deg) brightness(95%) contrast(90%);}#sidebar {position:fixed;top:var(--gps-navbar-height);right:0;bottom:0;width:var(--gps-sidebar-width);z-index:200;display:flex;flex-direction:column;overflow:hidden;background:var(--j-surface);backdrop-filter:blur(16px);border-left:1px solid var(--j-border);transition:transform .3s cubic-bezier(.4,0,.2,1);}.sidebar-header {padding:14px 16px;background:linear-gradient(90deg, var(--j-navy-3), var(--j-navy-2));border-bottom:1px solid var(--j-border);flex-shrink:0;}.sidebar-header .sidebar-title {font-weight:600;font-size:.9rem;color:var(--j-teal);display:flex;align-items:center;gap:.4rem;}.device-list { flex:1; overflow-y:auto; }.device-item {padding:10px 14px;border-bottom:1px solid var(--j-border);cursor:pointer;transition:background .15s;display:flex;align-items:center;gap:10px;}.device-item:hover{ background:rgba(0, 212, 170, 0.06); }.device-item.active { background:var(--j-neon-dim); }.device-item.active .device-item-name { color:var(--j-teal); }.device-item-name {font-weight:500;font-size:.85rem;color:var(--j-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.device-item-sub {font-size:.72rem;color:var(--j-text-muted);margin-top:2px;}.status-dot,.device-status-dot {width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0;position:relative;}.status-dot.online,.device-status-dot.online {background-color:var(--j-teal);box-shadow:0 0 6px var(--j-teal);}.status-dot.online::after,.device-status-dot.online::after {content:'';position:absolute;inset:-4px;border-radius:50%;border:1px solid var(--j-teal);opacity:.5;animation:ping 1.8s ease-out infinite;}.status-dot.offline,.device-status-dot.offline { background-color:#4a5568; }@keyframes ping {0% { transform:scale(.6); opacity:.7; }100% { transform:scale(1.7); opacity:0; }}#map-controls {position:absolute;top:12px;left:12px;z-index:900;display:flex;gap:6px;}.btn-map-ctrl {padding:.32rem .75rem;font-size:.78rem;font-weight:600;border-radius:20px;border:1px solid var(--j-border);background:var(--j-surface);color:var(--j-text-muted);backdrop-filter:blur(10px);cursor:pointer;transition:all .2s;letter-spacing:.02em;line-height:1.4;}.btn-map-ctrl:hover,.btn-map-ctrl.active {border-color:var(--j-teal);color:var(--j-teal);background:var(--j-neon-dim);box-shadow:var(--j-shadow-teal);}#google-layer-controls {position:absolute;top:50px; left:12px;z-index:900;display:flex;gap:4px;}.btn-layer-ctrl {padding:.25rem .6rem;font-size:.7rem;font-weight:500;border-radius:6px;border:1px solid var(--j-border);background:var(--j-surface);color:var(--j-text-muted);backdrop-filter:blur(8px);cursor:pointer;transition:all .2s;}.btn-layer-ctrl:hover,.btn-layer-ctrl.active {border-color:var(--j-teal);color:var(--j-teal);background:var(--j-neon-dim);}.leaflet-control-zoom {border:none !important;box-shadow:var(--j-shadow) !important;margin-bottom:20px !important;margin-right:20px !important;}.leaflet-control-zoom a {background:var(--j-surface) !important;backdrop-filter:blur(10px) !important;border:1px solid var(--j-border) !important;color:var(--j-teal) !important;width:36px !important;height:36px !important;line-height:36px !important;font-size:1.2rem !important;transition:all .2s !important;}.leaflet-control-zoom-in { border-radius:10px 10px 0 0 !important; }.leaflet-control-zoom-out { border-radius:0 0 10px 10px !important; }.leaflet-control-zoom a:hover {background:var(--j-neon-dim) !important;color:var(--j-neon) !important;border-color:var(--j-teal) !important;}#sidebar-toggle {position:absolute;top:12px;right:12px;z-index:900;width:38px;height:38px;border-radius:50%;border:1px solid var(--j-border);background:var(--j-surface);backdrop-filter:blur(10px);color:var(--j-teal);font-size:1rem;display:none;align-items:center;justify-content:center;cursor:pointer;box-shadow:var(--j-shadow);}#sidebar-overlay {display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:199;}#info-panel {position:absolute;bottom:20px;left:20px;z-index:900;min-width:230px;max-width:290px;border-radius:var(--j-radius);display:none;animation:fadeSlideUp .25s ease;}@keyframes fadeSlideUp {from { opacity:0; transform:translateY(10px); }to { opacity:1; transform:translateY(0); }}.info-panel-inner {background:var(--j-surface);backdrop-filter:blur(18px);border:1px solid var(--j-border);border-radius:var(--j-radius);padding:14px 16px;box-shadow:var(--j-shadow), var(--j-shadow-teal);}.info-panel-name {font-weight:600;font-size:.95rem;color:var(--j-text);margin-bottom:2px;}.info-panel-divider {border-color:var(--j-border);margin:8px 0;}.info-panel-row {display:flex;justify-content:space-between;font-size:.8rem;padding:2px 0;}.info-panel-label { color:var(--j-text-muted); }.info-panel-value { color:var(--j-text); font-weight:500; }.auth-wrapper {min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem 1rem;background:linear-gradient(135deg, var(--j-navy) 0%, #0a2a3a 50%, var(--j-navy) 100%);position:relative;overflow:hidden;}.auth-wrapper::before {content:'';position:absolute;width:600px;height:600px;border-radius:50%;background:radial-gradient(circle, rgba(0,212,170,.12) 0%, transparent 70%);top:-150px;right:-100px;pointer-events:none;}.auth-wrapper::after {content:'';position:absolute;width:400px;height:400px;border-radius:50%;background:radial-gradient(circle, rgba(6,255,165,.08) 0%, transparent 70%);bottom:-100px;left:-80px;pointer-events:none;}.auth-card {background:var(--j-surface) !important;backdrop-filter:blur(20px);border:1px solid var(--j-border) !important;border-radius:var(--j-radius) !important;box-shadow:var(--j-shadow), var(--j-shadow-teal) !important;}.auth-brand-icon {width:56px;height:56px;background:linear-gradient(135deg, var(--j-teal), var(--j-neon));border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:1.6rem;color:var(--j-navy);margin:0 auto 12px;box-shadow:0 0 24px rgba(0,212,170,.4);}.auth-brand-name {font-weight:700;font-size:1.3rem;background:linear-gradient(90deg, var(--j-teal), var(--j-neon));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:-.02em;}.stat-card {border:1px solid var(--j-border) !important;border-radius:var(--j-radius) !important;background:var(--j-navy-2) !important;transition:transform .2s, box-shadow .2s;overflow:hidden;position:relative;}.stat-card::before {content:'';position:absolute;left:0; top:0; bottom:0;width:3px;}.stat-card.accent-teal::before { background:var(--j-teal); }.stat-card.accent-green::before{ background:#22c55e; }.stat-card.accent-amber::before{ background:#f59e0b; }.stat-card.accent-blue::before { background:#3b82f6; }.stat-card:hover {transform:translateY(-2px);box-shadow:var(--j-shadow-teal);}.stat-icon-wrap {width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.25rem;}.stat-icon-wrap.teal{ background:rgba(0,212,170,.15); color:var(--j-teal); }.stat-icon-wrap.green { background:rgba(34,197,94,.15);color:#22c55e; }.stat-icon-wrap.amber { background:rgba(245,158,11,.15); color:#f59e0b; }.stat-icon-wrap.blue{ background:rgba(59,130,246,.15); color:#3b82f6; }.stat-number {font-size:1.8rem;font-weight:700;color:var(--j-text);line-height:1.1;letter-spacing:-.03em;}.stat-label {font-size:.78rem;color:var(--j-text-muted);font-weight:500;text-transform:uppercase;letter-spacing:.05em;}.table-gps {--bs-table-bg:transparent;border-collapse:separate;border-spacing:0;width:100%;}.table-gps thead th {background:rgba(0, 212, 170, 0.03);color:var(--j-teal);font-size:0.72rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;padding:1.1rem 1rem;border-bottom:1px solid var(--j-border) !important;white-space:nowrap;}.table-gps tbody td {padding:1.1rem 1rem;vertical-align:middle;border-bottom:1px solid rgba(255,255,255,.03);color:var(--j-text);}.table-gps tbody tr:hover {background:rgba(255,255,255,.01);}.table-gps tbody tr:last-child td {border-bottom:none;}.btn-icon {width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid var(--j-border);background:rgba(255,255,255,.03);color:var(--j-text-muted);transition:all .2s;padding:0;}.btn-icon:hover {background:var(--j-neon-dim);color:var(--j-teal);border-color:var(--j-teal);transform:translateY(-1px);}.btn-icon.text-danger:hover {background:rgba(220,53,69,.15);color:#ff4d4d;border-color:rgba(220,53,69,.3);}.quicklink-item {display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--j-border);color:var(--j-text);text-decoration:none;font-size:.88rem;transition:color .15s, padding-left .15s;}.quicklink-item:last-child { border-bottom:none; }.quicklink-item:hover {color:var(--j-teal);padding-left:4px;}.quicklink-icon {width:30px;height:30px;border-radius:8px;background:var(--j-neon-dim);color:var(--j-teal);display:flex;align-items:center;justify-content:center;font-size:.85rem;flex-shrink:0;}.table td, .table th { vertical-align:middle; }.badge-online {display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;padding:.28rem .65rem;border-radius:20px;background:rgba(0,212,170,.15);color:var(--j-teal);border:1px solid rgba(0,212,170,.3);}.badge-offline {display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;padding:.28rem .65rem;border-radius:20px;background:rgba(74,85,104,.2);color:#718096;border:1px solid rgba(74,85,104,.3);}.badge-nodata {display:inline-flex;align-items:center;font-size:.75rem;font-weight:600;padding:.28rem .65rem;border-radius:20px;background:rgba(100,100,120,.15);color:#8a9bb0;border:1px solid rgba(100,100,120,.25);}.battery-bar {width:48px;height:7px;background:rgba(255,255,255,.1);border-radius:4px;overflow:hidden;display:inline-block;vertical-align:middle;margin-right:5px;}.battery-fill {height:100%;border-radius:4px;background:linear-gradient(90deg, var(--j-teal), var(--j-neon));transition:width .5s;}.icon-option {transition:border-color .15s, background-color .15s;user-select:none;border-radius:8px;}.icon-option:hover { border-color:var(--j-teal) !important; }.icon-option.selected,.icon-option.border-primary {background-color:var(--j-neon-dim);border-color:var(--j-teal) !important;}pre.log-box {background:#050e17;color:var(--j-neon);padding:1rem;border-radius:var(--j-radius-sm);max-height:300px;overflow-y:auto;font-size:.78rem;border:1px solid var(--j-border);}.empty-state {padding:3rem 1rem;text-align:center;}.empty-state-icon {font-size:3rem;color:var(--j-teal);opacity:.4;margin-bottom:1rem;}.section-title {font-weight:700;font-size:1.1rem;color:var(--j-text);display:flex;align-items:center;gap:.5rem;}.section-title .title-accent {width:4px;height:20px;background:linear-gradient(180deg, var(--j-teal), var(--j-neon));border-radius:2px;display:inline-block;}@media (max-width:768px) {#sidebar {transform:translateX(100%);width:min(var(--gps-sidebar-width), 88vw);}#sidebar.open { transform:translateX(0); }#sidebar-toggle{ display:flex; }#sidebar-overlay { display:none; }#sidebar-overlay.open { display:block; }#map-wrap { right:0; }}@media (min-width:769px) {#map-wrap { right:var(--gps-sidebar-width); }#sidebar-toggle { display:none; }}