@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=JetBrains+Mono:wght@300;400;500;600&display=swap";.toast-enter-active[data-v-547c12c7],.toast-leave-active[data-v-547c12c7]{transition:all .3s}.toast-enter-from[data-v-547c12c7],.toast-leave-to[data-v-547c12c7]{opacity:0;transform:translate(100%)}.toast-icon[data-v-547c12c7]{font-size:1.25rem;font-weight:700}.toast-message[data-v-547c12c7]{flex:1;font-size:.875rem}.toast-close[data-v-547c12c7]{cursor:pointer;width:20px;height:20px;color:var(--color-gray-500);transition:color var(--duration-fast);background:0 0;border:none;justify-content:center;align-items:center;font-size:1.25rem;display:flex}.toast-close[data-v-547c12c7]:hover{color:var(--color-gray-700)}.session-warning[data-v-73127bdb]{gap:var(--space-4);margin-bottom:var(--space-4);display:flex}.warning-icon[data-v-73127bdb]{flex-shrink:0;font-size:3rem}.warning-content p[data-v-73127bdb]{margin-bottom:var(--space-1)}.warning-content p[data-v-73127bdb]:last-child{color:var(--color-gray-500);margin-bottom:0}.progress-bar[data-v-73127bdb]{background:var(--color-gray-200);border-radius:var(--radius-full);width:100%;height:8px;overflow:hidden}.progress-fill[data-v-73127bdb]{background:linear-gradient(90deg, var(--warning-500), var(--danger-500));border-radius:var(--radius-full);height:100%;transition:width 1s linear}.modal-enter-active[data-v-73127bdb],.modal-leave-active[data-v-73127bdb]{transition:all .3s}.modal-enter-from[data-v-73127bdb],.modal-leave-to[data-v-73127bdb]{opacity:0}.modal-enter-from .modal[data-v-73127bdb],.modal-leave-to .modal[data-v-73127bdb]{transform:scale(.9)translateY(-20px)}.dark .progress-bar[data-v-73127bdb]{background:var(--color-gray-700)}:root{--color-primary:var(--primary-500);--color-primary-dark:var(--primary-700);--color-primary-light:var(--primary-300);--color-success:var(--success-500);--color-warning:var(--warning-500);--color-danger:var(--danger-500);--color-info:var(--info-500);--color-white:#fff;--color-black:#0a0f1a;--surface-ground:var(--gray-50);--surface-card:var(--color-white);--surface-section:var(--gray-100);--surface-overlay:var(--color-white);--surface-sidebar:var(--gray-900);--text-primary:var(--gray-900);--text-secondary:var(--gray-600);--text-tertiary:var(--gray-400);--text-inverse:var(--color-white);--text-link:var(--primary-500);--border-subtle:var(--gray-200);--border-default:var(--gray-300);--border-strong:var(--gray-400);--color-gray-50:var(--gray-50);--color-gray-100:var(--gray-100);--color-gray-200:var(--gray-200);--color-gray-300:var(--gray-300);--color-gray-400:var(--gray-400);--color-gray-500:var(--gray-500);--color-gray-600:var(--gray-600);--color-gray-700:var(--gray-700);--color-gray-800:var(--gray-800);--color-gray-900:var(--gray-900)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;font-family:var(--font-body);font-size:var(--font-base);line-height:var(--leading-normal);color:var(--text-primary);background-color:var(--surface-ground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}#app{flex-direction:column;height:100%;display:flex}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:var(--font-weight-semibold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--text-primary)}h1{font-size:var(--font-3xl)}h2{font-size:var(--font-2xl)}h3{font-size:var(--font-xl)}h4{font-size:var(--font-lg)}h5{font-size:var(--font-base)}h6{font-size:var(--font-sm)}p{margin-bottom:var(--space-2);color:var(--text-secondary)}a{color:var(--text-link);transition:color var(--duration-fast) var(--ease-out);text-decoration:none}a:hover{color:var(--primary-400)}code,pre,.mono{font-family:var(--font-mono);font-size:.9em}.btn{justify-content:center;align-items:center;gap:var(--space-2);padding:var(--space-2\.5) var(--space-4);font-family:var(--font-body);font-size:var(--font-sm);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-normal) var(--ease-out);white-space:nowrap;letter-spacing:var(--tracking-wide);text-transform:none;border:1px solid #0000;line-height:1;display:inline-flex}.btn:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-primary{background:linear-gradient(135deg, var(--primary-500), var(--primary-600));color:var(--color-white);border-color:var(--primary-600)}.btn-primary:hover:not(:disabled){background:linear-gradient(135deg, var(--primary-400), var(--primary-500));box-shadow:0 4px 12px hsla(var(--accent-hue), 76%, 46%, .25);transform:translateY(-1px)}.btn-primary:active:not(:disabled){transform:translateY(0)}.btn-success{background:linear-gradient(135deg, var(--success-500), var(--success-600));color:var(--color-white)}.btn-success:hover:not(:disabled){background:linear-gradient(135deg, #34d399, var(--success-500));transform:translateY(-1px);box-shadow:0 4px 12px #10b98140}.btn-warning{background:linear-gradient(135deg, var(--warning-500), var(--warning-600));color:var(--color-white)}.btn-warning:hover:not(:disabled){background:linear-gradient(135deg, #fbbf24, var(--warning-500));transform:translateY(-1px)}.btn-danger{background:linear-gradient(135deg, var(--danger-500), var(--danger-600));color:var(--color-white)}.btn-danger:hover:not(:disabled){background:linear-gradient(135deg, #f87171, var(--danger-500));transform:translateY(-1px);box-shadow:0 4px 12px #ef444440}.btn-ghost{color:var(--text-secondary);border-color:var(--border-subtle);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-section);color:var(--text-primary);border-color:var(--border-default)}.btn-sm{padding:var(--space-1\.5) var(--space-3);font-size:var(--font-xs)}.btn-lg{padding:var(--space-3\.5) var(--space-6);font-size:var(--font-base)}.btn-icon{padding:var(--space-2);aspect-ratio:1}.btn-block{width:100%}.input,.form-input,.form-select,.form-textarea{width:100%;padding:var(--space-2\.5) var(--space-3);font-family:var(--font-body);font-size:var(--font-sm);color:var(--text-primary);background-color:var(--surface-card);border:1px solid var(--border-default);border-radius:var(--radius-md);transition:border-color var(--duration-fast), box-shadow var(--duration-fast)}.input:focus,.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);outline:none}.input:disabled,.form-input:disabled,.form-select:disabled,.form-textarea:disabled{background-color:var(--surface-section);cursor:not-allowed;opacity:.6}.form-textarea{resize:vertical;min-height:80px}.card{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--space-5);transition:box-shadow var(--duration-normal) var(--ease-out)}.card:hover{box-shadow:var(--shadow-md)}.card-header{margin-bottom:var(--space-4);padding-bottom:var(--space-3);border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;display:flex}.card-title{font-family:var(--font-display);font-size:var(--font-lg);font-weight:var(--font-weight-semibold);color:var(--text-primary);letter-spacing:var(--tracking-tight)}.card-body{padding:0}.card-footer{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--border-subtle);justify-content:space-between;align-items:center;display:flex}.badge{align-items:center;gap:var(--space-1);padding:2px var(--space-2\.5);font-family:var(--font-mono);font-size:var(--font-xs);font-weight:var(--font-weight-medium);border-radius:var(--radius-full);letter-spacing:var(--tracking-wide);line-height:var(--leading-relaxed);display:inline-flex}.badge-primary{background:hsla(var(--accent-hue), 76%, 46%, .12);color:var(--accent)}.badge-success{background:var(--success-50);color:var(--success-700)}.badge-warning{background:var(--warning-50);color:var(--warning-700)}.badge-danger{background:var(--danger-50);color:var(--danger-700)}.badge-info{background:var(--info-50);color:var(--info-700)}.loading{padding:var(--space-8);justify-content:center;align-items:center;display:flex}.spinner{border:2px solid var(--border-subtle);border-top-color:var(--accent);border-radius:50%;width:1.5rem;height:1.5rem;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toast-container{top:var(--space-4);right:var(--space-4);z-index:var(--z-toast);gap:var(--space-2);flex-direction:column;max-width:380px;display:flex;position:fixed}.toast{align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:toastSlideIn var(--duration-slow) var(--ease-spring);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex}.toast-success{border-left:3px solid var(--success-500)}.toast-error{border-left:3px solid var(--danger-500)}.toast-warning{border-left:3px solid var(--warning-500)}.toast-info{border-left:3px solid var(--info-500)}@keyframes toastSlideIn{0%{opacity:0;transform:translate(100%)scale(.95)}to{opacity:1;transform:translate(0)scale(1)}}.map-container{width:100%;height:100%;position:relative}.map-controls{top:var(--space-3);right:var(--space-3);gap:var(--space-2);z-index:var(--z-dropdown);flex-direction:column;display:flex;position:absolute}.map-control-btn{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-md);width:36px;height:36px;box-shadow:var(--shadow-md);cursor:pointer;color:var(--text-secondary);transition:all var(--duration-fast) var(--ease-out);justify-content:center;align-items:center;padding:0;display:flex}.map-control-btn:hover{background:var(--surface-section);color:var(--text-primary);box-shadow:var(--shadow-lg);transform:translateY(-1px)}.leaflet-popup-content{min-width:220px;font-family:var(--font-body);margin:0}.leaflet-popup-content-wrapper{border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-xl)!important}.tracker-popup,.client-popup,.iot-popup{padding:var(--space-3)}.tracker-popup h3,.client-popup h3,.iot-popup h3{margin-bottom:var(--space-2);font-family:var(--font-display);font-size:var(--font-base);color:var(--text-primary)}.tracker-popup p,.client-popup p,.iot-popup p{margin-bottom:var(--space-1);font-size:var(--font-sm);color:var(--text-secondary)}.marker-icon{width:32px;height:32px;position:relative}.marker-inner{width:100%;height:100%;box-shadow:var(--shadow-md);border:3px solid #fff;border-radius:50%}.marker-icon.online .marker-pulse{background:#22c55e59;border-radius:50%;width:100%;height:100%;animation:2s infinite markerPulse;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes markerPulse{0%{opacity:.8;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-50%)scale(2.2)}}.client-icon{filter:drop-shadow(0 2px 4px #00000026)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--gray-300);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--gray-400)}::selection{background:var(--accent-glow-strong);color:var(--text-primary)}@media (width<=768px){html,body{font-size:13px}.toast-container{left:var(--space-3);right:var(--space-3);max-width:none}}.dark{--surface-ground:#0c1220;--surface-card:#141c2e;--surface-section:#1a2438;--surface-overlay:#1e2a40;--surface-sidebar:#0a0f1a;--text-primary:#e8ecf4;--text-secondary:#8b95a8;--text-tertiary:#5a6478;--text-inverse:#0c1220;--text-link:var(--primary-400);--border-subtle:#1e2a40;--border-default:#2a3650;--border-strong:#3a4a65;--color-gray-50:#0c1220;--color-gray-100:#141c2e;--color-gray-200:#1e2a40;--color-gray-300:#2a3650;--color-gray-400:#5a6478;--color-gray-500:#8b95a8;--color-gray-600:#a8b2c4;--color-gray-700:#c4cdd8;--color-gray-800:#dce2ea;--color-gray-900:#e8ecf4;--color-white:#e8ecf4;--color-black:#0a0f1a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.dark .card{background:var(--surface-card);border-color:var(--border-subtle)}.dark .btn-ghost:hover:not(:disabled){background:var(--surface-section)}.dark .input,.dark .form-input,.dark .form-select,.dark .form-textarea{background:var(--surface-section);border-color:var(--border-default);color:var(--text-primary)}.dark .toast{background:var(--surface-overlay);border-color:var(--border-default);color:var(--text-primary)}.dark .map-control-btn{background:var(--surface-card);border-color:var(--border-default);color:var(--text-secondary)}.dark .marker-inner{border-color:var(--surface-card)}.dark ::-webkit-scrollbar-thumb{background:var(--border-default)}.dark ::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}svg:not([width]){flex-shrink:0;width:1em;height:1em}:root{--accent-hue:152;--accent:hsl(var(--accent-hue), 76%, 46%);--accent-light:hsl(var(--accent-hue), 76%, 56%);--accent-dim:hsl(var(--accent-hue), 50%, 20%);--accent-glow:hsla(var(--accent-hue), 76%, 46%, .15);--accent-glow-strong:hsla(var(--accent-hue), 76%, 46%, .3);--primary-50:#e6f7f9;--primary-100:#b3e8ef;--primary-200:#80d9e5;--primary-300:#4dcadb;--primary-400:#26bfd4;--primary-500:#0891b2;--primary-600:#0e7490;--primary-700:#155e75;--primary-800:#164e63;--primary-900:#0c3547;--success-50:#ecfdf5;--success-100:#d1fae5;--success-500:#10b981;--success-600:#059669;--success-700:#047857;--warning-50:#fffbeb;--warning-100:#fef3c7;--warning-500:#f59e0b;--warning-600:#d97706;--warning-700:#b45309;--danger-50:#fef2f2;--danger-100:#fee2e2;--danger-200:#fecaca;--danger-500:#ef4444;--danger-600:#dc2626;--danger-700:#b91c1c;--info-50:#eff6ff;--info-100:#dbeafe;--info-500:#3b82f6;--info-600:#2563eb;--info-700:#1d4ed8;--gray-50:#f8fafc;--gray-100:#f1f5f9;--gray-200:#e2e8f0;--gray-300:#cbd5e1;--gray-400:#94a3b8;--gray-500:#64748b;--gray-600:#475569;--gray-700:#334155;--gray-800:#1e293b;--gray-900:#0f172a;--space-0:0;--space-px:1px;--space-0\.5:.125rem;--space-1:.25rem;--space-1\.5:.375rem;--space-2:.5rem;--space-2\.5:.625rem;--space-3:.75rem;--space-3\.5:.875rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-7:1.75rem;--space-8:2rem;--space-9:2.25rem;--space-10:2.5rem;--space-12:3rem;--space-14:3.5rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--font-display:"DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-body:"DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--font-xs:.6875rem;--font-sm:.8125rem;--font-base:.875rem;--font-lg:1rem;--font-xl:1.125rem;--font-2xl:1.375rem;--font-3xl:1.75rem;--font-4xl:2.25rem;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-none:1;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--tracking-tight:-.02em;--tracking-normal:0;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--radius-none:0;--radius-sm:3px;--radius-base:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-2xl:16px;--radius-3xl:24px;--radius-full:9999px;--shadow-xs:0 1px 2px #0000000a;--shadow-sm:0 1px 3px #0000000f, 0 1px 2px #0000000a;--shadow-md:0 4px 6px -1px #00000012, 0 2px 4px -2px #0000000d;--shadow-lg:0 10px 15px -3px #00000014, 0 4px 6px -4px #0000000a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000000a;--shadow-2xl:0 25px 50px -12px #0003;--shadow-inner:inset 0 2px 4px #0000000a;--shadow-glow:0 0 20px var(--accent-glow);--z-base:0;--z-dropdown:1000;--z-sticky:1020;--z-fixed:1030;--z-modal-backdrop:1040;--z-modal:1050;--z-popover:1060;--z-tooltip:1070;--z-toast:1080;--duration-instant:50ms;--duration-fast:.1s;--duration-normal:.2s;--duration-slow:.3s;--duration-slower:.5s;--ease-linear:linear;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--header-height:56px;--sidebar-width:240px;--sidebar-collapsed-width:60px;--footer-height:36px;--content-max-width:1400px;--border-width:1px;--border-color:var(--gray-200)}@media (width<=768px){:root{--sidebar-width:100%;--header-height:52px}}.app-layout{height:100vh;display:flex;overflow:hidden}.app-sidebar{width:var(--sidebar-width);background:var(--surface-sidebar);height:100%;color:var(--text-inverse);transition:width var(--duration-slow) var(--ease-in-out);z-index:var(--z-sticky);border-right:1px solid #ffffff0f;flex-direction:column;display:flex;position:relative;overflow:hidden}.app-sidebar:before{content:"";pointer-events:none;background:linear-gradient(#0891b20f 0%,#0000 40%);position:absolute;inset:0}.app-sidebar.collapsed{width:var(--sidebar-collapsed-width)}.app-main{background:var(--surface-ground);flex-direction:column;flex:1;display:flex;overflow:hidden}.app-header{height:var(--header-height);background:var(--surface-card);border-bottom:1px solid var(--border-subtle);padding:0 var(--space-4);z-index:var(--z-sticky);align-items:center;gap:var(--space-3);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex}.app-content{padding:var(--space-5);flex:1;overflow:auto}.sidebar-brand{padding:var(--space-4) var(--space-4);font-family:var(--font-display);font-size:var(--font-lg);font-weight:var(--font-weight-bold);letter-spacing:var(--tracking-tight);color:var(--color-white);z-index:1;border-bottom:1px solid #ffffff14;position:relative}.sidebar-nav{padding:var(--space-2);z-index:1;flex:1;position:relative;overflow-y:auto}.sidebar-nav-item{align-items:center;gap:var(--space-3);padding:var(--space-2\.5) var(--space-3);color:#ffffff8c;border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);font-size:var(--font-sm);font-weight:var(--font-weight-medium);margin-bottom:2px;text-decoration:none;display:flex;position:relative}.sidebar-nav-item:hover{color:#ffffffe6;background:#ffffff14}.sidebar-nav-item.active{background:linear-gradient(135deg, var(--primary-600), var(--primary-700));color:var(--color-white);box-shadow:0 2px 8px #0891b24d}.sidebar-nav-item.active:hover{background:linear-gradient(135deg, var(--primary-500), var(--primary-600))}.sidebar-user{padding:var(--space-4);z-index:1;border-top:1px solid #ffffff14;position:relative}.header-toggle{border-radius:var(--radius-md);cursor:pointer;width:36px;height:36px;color:var(--text-secondary);transition:all var(--duration-fast) var(--ease-out);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.header-toggle:hover{background:var(--surface-section);color:var(--text-primary)}.header-title{font-family:var(--font-display);font-size:var(--font-lg);font-weight:var(--font-weight-semibold);color:var(--text-primary);letter-spacing:var(--tracking-tight);flex:1}.header-actions{align-items:center;gap:var(--space-1);display:flex}.header-avatar{border-radius:var(--radius-full);background:linear-gradient(135deg, var(--primary-500), var(--primary-600));width:34px;height:34px;color:var(--color-white);font-size:var(--font-xs);font-weight:var(--font-weight-semibold);cursor:pointer;transition:box-shadow var(--duration-fast);justify-content:center;align-items:center;display:flex}.header-avatar:hover{box-shadow:0 0 0 3px var(--accent-glow)}.form-group{margin-bottom:var(--space-4)}.form-label{margin-bottom:var(--space-1\.5);font-size:var(--font-sm);font-weight:var(--font-weight-medium);color:var(--text-secondary);letter-spacing:var(--tracking-wide);display:block}.form-error{margin-top:var(--space-1);font-size:var(--font-xs);color:var(--danger-500)}.form-hint{margin-top:var(--space-1);font-size:var(--font-xs);color:var(--text-tertiary)}.table-container{border:1px solid var(--border-subtle);border-radius:var(--radius-lg);overflow-x:auto}.table{border-collapse:collapse;width:100%}.table th,.table td{padding:var(--space-3) var(--space-4);text-align:left;border-bottom:1px solid var(--border-subtle)}.table th{font-family:var(--font-mono);font-size:var(--font-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:var(--tracking-widest);color:var(--text-tertiary);background:var(--surface-section)}.table td{font-size:var(--font-sm);color:var(--text-primary)}.table tbody tr{transition:background-color var(--duration-fast)}.table tbody tr:hover{background:var(--surface-section)}.table tbody tr:last-child td{border-bottom:none}.modal-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:var(--z-modal-backdrop);animation:modalFadeIn var(--duration-normal) var(--ease-out);background:#0a0f1a99;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xl);box-shadow:var(--shadow-2xl);max-width:90vw;max-height:90vh;animation:modalSlideUp var(--duration-slow) var(--ease-spring);flex-direction:column;display:flex}.modal-header{padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;display:flex}.modal-title{font-family:var(--font-display);font-size:var(--font-lg);font-weight:var(--font-weight-semibold);color:var(--text-primary)}.modal-close{border-radius:var(--radius-md);cursor:pointer;width:32px;height:32px;color:var(--text-tertiary);font-size:var(--font-xl);transition:all var(--duration-fast);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.modal-close:hover{background:var(--surface-section);color:var(--text-primary)}.modal-body{padding:var(--space-6);overflow-y:auto}.modal-footer{justify-content:flex-end;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-6);border-top:1px solid var(--border-subtle);display:flex}.modal-sm{max-width:400px}.modal-md{max-width:600px}.modal-lg{max-width:800px}.modal-xl{max-width:1140px}@keyframes modalFadeIn{0%{opacity:0}to{opacity:1}}@keyframes modalSlideUp{0%{opacity:0;transform:translateY(16px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.dropdown{display:inline-block;position:relative}.dropdown-menu{margin-top:var(--space-1);background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);min-width:180px;box-shadow:var(--shadow-xl);z-index:var(--z-dropdown);opacity:0;visibility:hidden;transition:all var(--duration-fast) var(--ease-out);position:absolute;top:100%;left:0;transform:translateY(-4px)}.dropdown.open .dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}.dropdown-item{padding:var(--space-2\.5) var(--space-4);font-size:var(--font-sm);color:var(--text-secondary);transition:all var(--duration-fast);text-decoration:none;display:block}.dropdown-item:hover{background:var(--surface-section);color:var(--text-primary)}.dropdown-item.danger{color:var(--danger-500)}.dropdown-item.danger:hover{background:var(--danger-50)}.dropdown-divider{height:1px;margin:var(--space-1) 0;background:var(--border-subtle)}.tabs{border-bottom:1px solid var(--border-subtle);gap:var(--space-1);display:flex}.tab{padding:var(--space-2\.5) var(--space-4);font-family:var(--font-body);font-size:var(--font-sm);font-weight:var(--font-weight-medium);color:var(--text-tertiary);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);background:0 0;border:none;border-bottom:2px solid #0000}.tab:hover{color:var(--text-primary)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-content{padding:var(--space-4)}.empty-state{padding:var(--space-16) var(--space-6);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.empty-state-icon{width:56px;height:56px;margin-bottom:var(--space-4);color:var(--text-tertiary);opacity:.5}.empty-state-title{font-family:var(--font-display);font-size:var(--font-lg);font-weight:var(--font-weight-semibold);color:var(--text-primary);margin-bottom:var(--space-2)}.empty-state-description{font-size:var(--font-sm);color:var(--text-secondary);max-width:400px}.playback-controls{justify-content:center;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);display:flex}.playback-controls button{width:36px;height:36px;font-size:var(--font-lg);padding:0}.playback-controls .play-pause{width:44px;height:44px;font-size:var(--font-xl)}.speed-control{align-items:center;gap:var(--space-1);padding:var(--space-1\.5) var(--space-2);background:var(--surface-section);border-radius:var(--radius-md);display:flex}.speed-btn{width:32px;height:28px;font-family:var(--font-mono);font-size:var(--font-xs);font-weight:var(--font-weight-medium);border-radius:var(--radius-sm);padding:0}.speed-btn.active{background:var(--accent);color:var(--color-white)}.timeline-slider{margin:0 var(--space-4);flex:1}.timeline-slider input[type=range]{cursor:pointer;width:100%;accent-color:var(--accent)}.tracker-list-item{align-items:center;gap:var(--space-3);padding:var(--space-2\.5) var(--space-3);border-radius:var(--radius-md);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);border:1px solid #0000;display:flex}.tracker-list-item:hover{background:var(--surface-section)}.tracker-list-item.selected{background:hsla(var(--accent-hue), 76%, 46%, .08);border-color:hsla(var(--accent-hue), 76%, 46%, .2)}.tracker-status{border-radius:var(--radius-full);flex-shrink:0;width:8px;height:8px}.tracker-status.online{background:var(--success-500);box-shadow:0 0 6px #10b98180}.tracker-status.offline{background:var(--danger-500)}.tracker-info{flex:1;min-width:0}.tracker-name{font-size:var(--font-sm);font-weight:var(--font-weight-medium);color:var(--text-primary)}.tracker-details{font-family:var(--font-mono);font-size:var(--font-xs);color:var(--text-tertiary)}.marker-icon{justify-content:center;align-items:center;display:flex;position:relative}.marker-icon .marker-inner{border:3px solid #fff;border-radius:50%;width:24px;height:24px;box-shadow:0 2px 6px #00000040}.marker-icon.online .marker-inner{background:linear-gradient(135deg,#22c55e 0%,#16a34a 100%)}.marker-icon.offline .marker-inner{background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%)}.marker-icon .marker-pulse{border:2px solid;border-radius:50%;width:32px;height:32px;animation:2s infinite markerPulse;position:absolute}.marker-icon.online .marker-pulse{border-color:#22c55e}.marker-icon.offline .marker-pulse{display:none}.client-icon{position:relative}.client-icon:after{content:"";background:var(--info-500);border:2px solid #fff;border-radius:50%;width:8px;height:8px;position:absolute;bottom:-6px;left:50%;transform:translate(-50%)}.iot-icon{justify-content:center;align-items:center;font-size:20px;display:flex}.iot-marker.tank:before{content:"🛢"}.iot-marker.temperature:before{content:"🌡"}.iot-marker.flow:before{content:"💧"}.iot-marker.temp_alarm:before{content:"🔔"}.client-proximity-circle{pointer-events:none}.client-tooltip{color:#fff;border-radius:var(--radius-base);padding:var(--space-1) var(--space-2);font-family:var(--font-mono);font-size:var(--font-xs);font-weight:var(--font-weight-medium);background:#3b82f6e6;border:none}.tracker-popup-content,.client-popup-content,.iot-popup-content,.geofence-popup-content{min-width:220px}.popup-header{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--surface-section);border-bottom:1px solid var(--border-subtle);border-radius:var(--radius-lg) var(--radius-lg) 0 0;display:flex}.popup-icon{font-size:18px}.popup-name{font-family:var(--font-display);font-size:var(--font-base);font-weight:var(--font-weight-semibold);color:var(--text-primary);flex:1}.popup-status{font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-semibold);border-radius:var(--radius-full);white-space:nowrap;text-transform:uppercase;letter-spacing:var(--tracking-wider);padding:2px 8px}.popup-status.online{background:var(--success-100);color:var(--success-700)}.popup-status.offline{background:var(--danger-100);color:var(--danger-700)}.popup-details{padding:var(--space-3) var(--space-4)}.popup-row{border-bottom:1px solid var(--border-subtle);justify-content:space-between;padding:3px 0;display:flex}.popup-row:last-child{border-bottom:none}.popup-label{font-size:var(--font-xs);color:var(--text-tertiary);font-weight:var(--font-weight-medium)}.popup-value{font-family:var(--font-mono);font-size:var(--font-xs);color:var(--text-primary);font-weight:var(--font-weight-medium)}.dark .marker-icon .marker-inner,.dark .client-icon:after{border-color:var(--surface-card)}.dark .popup-header{background:var(--surface-section);border-bottom-color:var(--border-default)}.dark .popup-name{color:var(--text-primary)}.dark .popup-row{border-bottom-color:var(--border-subtle)}.dark .popup-label{color:var(--text-tertiary)}.dark .popup-value{color:var(--text-primary)}.dark .app-header{background:var(--surface-card);border-bottom-color:var(--border-subtle)}.dark .header-toggle:hover{background:var(--surface-section)}.dark .modal{background:var(--surface-card);border-color:var(--border-default)}.dark .modal-header{border-bottom-color:var(--border-subtle)}.dark .modal-footer{border-top-color:var(--border-subtle)}.dark .table th{background:var(--surface-section);color:var(--text-tertiary)}.dark .table td{color:var(--text-primary)}.dark .table th,.dark .table td{border-bottom-color:var(--border-subtle)}.dark .table tbody tr:hover{background:var(--surface-section)}.dark .table-container{border-color:var(--border-subtle)}.dark .dropdown-menu{background:var(--surface-overlay);border-color:var(--border-default)}.dark .dropdown-item:hover{background:var(--surface-section)}.dark .tabs{border-bottom-color:var(--border-subtle)}.dark .speed-control{background:var(--surface-section)}
