@import"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=Noto+Sans+TC:wght@400;500;600;700&display=swap";.leaflet-draw-section{position:relative}.leaflet-draw-toolbar{margin-top:12px}.leaflet-draw-toolbar-top{margin-top:0}.leaflet-draw-toolbar-notop a:first-child{border-top-right-radius:0}.leaflet-draw-toolbar-nobottom a:last-child{border-bottom-right-radius:0}.leaflet-draw-toolbar a{background-image:url(data:image/png;base64,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);background-image:linear-gradient(transparent,transparent),url(/assets/spritesheet-DpIxuf5L.svg);background-repeat:no-repeat;background-size:300px 30px;background-clip:padding-box}.leaflet-retina .leaflet-draw-toolbar a{background-image:url(data:image/png;base64,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);background-image:linear-gradient(transparent,transparent),url(/assets/spritesheet-DpIxuf5L.svg)}.leaflet-draw a{display:block;text-align:center;text-decoration:none}.leaflet-draw a .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.leaflet-draw-actions{display:none;list-style:none;margin:0;padding:0;position:absolute;left:26px;top:0;white-space:nowrap}.leaflet-touch .leaflet-draw-actions{left:32px}.leaflet-right .leaflet-draw-actions{right:26px;left:auto}.leaflet-touch .leaflet-right .leaflet-draw-actions{right:32px;left:auto}.leaflet-draw-actions li{display:inline-block}.leaflet-draw-actions li:first-child a{border-left:0}.leaflet-draw-actions li:last-child a{-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.leaflet-right .leaflet-draw-actions li:last-child a{-webkit-border-radius:0;border-radius:0}.leaflet-right .leaflet-draw-actions li:first-child a{-webkit-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.leaflet-draw-actions a{background-color:#919187;border-left:1px solid #AAA;color:#fff;font:11px/19px Helvetica Neue,Arial,Helvetica,sans-serif;line-height:28px;text-decoration:none;padding-left:10px;padding-right:10px;height:28px}.leaflet-touch .leaflet-draw-actions a{font-size:12px;line-height:30px;height:30px}.leaflet-draw-actions-bottom{margin-top:0}.leaflet-draw-actions-top{margin-top:1px}.leaflet-draw-actions-top a,.leaflet-draw-actions-bottom a{height:27px;line-height:27px}.leaflet-draw-actions a:hover{background-color:#a0a098}.leaflet-draw-actions-top.leaflet-draw-actions-bottom a{height:26px;line-height:26px}.leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:-2px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:0 -1px}.leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-31px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-29px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-62px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-60px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-92px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-90px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-122px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-120px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circlemarker{background-position:-273px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circlemarker{background-position:-271px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-152px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-150px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-182px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-180px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-212px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-210px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-242px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-240px -2px}.leaflet-mouse-marker{background-color:#fff;cursor:crosshair}.leaflet-draw-tooltip{background:#363636;background:#00000080;border:1px solid transparent;-webkit-border-radius:4px;border-radius:4px;color:#fff;font:12px/18px Helvetica Neue,Arial,Helvetica,sans-serif;margin-left:20px;margin-top:-21px;padding:4px 8px;position:absolute;visibility:hidden;white-space:nowrap;z-index:6}.leaflet-draw-tooltip:before{border-right:6px solid black;border-right-color:#00000080;border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:7px;left:-7px}.leaflet-error-draw-tooltip{background-color:#f2dede;border:1px solid #e6b6bd;color:#b94a48}.leaflet-error-draw-tooltip:before{border-right-color:#e6b6bd}.leaflet-draw-tooltip-single{margin-top:-12px}.leaflet-draw-tooltip-subtext{color:#f8d5e4}.leaflet-draw-guide-dash{font-size:1%;opacity:.6;position:absolute;width:5px;height:5px}.leaflet-edit-marker-selected{background-color:#fe57a11a;border:4px dashed rgba(254,87,161,.6);-webkit-border-radius:4px;border-radius:4px;box-sizing:content-box}.leaflet-edit-move{cursor:move}.leaflet-edit-resize{cursor:pointer}.leaflet-oldie .leaflet-draw-toolbar{border:1px solid #999}.react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top,width,height}.react-grid-item img{pointer-events:none;-webkit-user-select:none;user-select:none}.react-grid-item.cssTransforms{transition-property:transform,width,height}.react-grid-item.resizing{transition:none;z-index:1;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:transform}.react-grid-item.dropping{visibility:hidden}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;z-index:2;-webkit-user-select:none;user-select:none}.react-grid-item.react-grid-placeholder.placeholder-resizing{transition:none}.react-grid-item>.react-resizable-handle{position:absolute;width:20px;height:20px;opacity:0}.react-grid-item:hover>.react-resizable-handle{opacity:1}.react-grid-item>.react-resizable-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-right:2px solid rgba(0,0,0,.4);border-bottom:2px solid rgba(0,0,0,.4)}.react-resizable-hide>.react-resizable-handle{display:none}.react-grid-item>.react-resizable-handle.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-w,.react-grid-item>.react-resizable-handle.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-n,.react-grid-item>.react-resizable-handle.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}.react-resizable{position:relative}.react-resizable-handle{position:absolute;width:20px;height:20px;background-repeat:no-repeat;background-origin:content-box;box-sizing:border-box;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+);background-position:bottom right;padding:0 3px 3px 0}.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-resizable-handle-w,.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-resizable-handle-n,.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}:root{--primary: #3388ff;--primary-light: rgba(51, 136, 255, .12);--primary-dark: #1a6fd4;--border: #e5e7eb}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans TC,sans-serif;font-size:14px;color:#1a1a2e;background:#f0f2f5}.app-layout{display:flex;height:100vh}.sidebar{width:260px;background:#1a1a2e;color:#e0e0e0;display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.sidebar.sidebar-collapsed{width:56px}.sidebar-header{padding:20px 16px;font-size:18px;font-weight:700;color:#fff;border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;justify-content:space-between;min-height:62px}.sidebar-collapsed .sidebar-header{padding:20px 8px;justify-content:center}.sidebar-logo-full{height:28px;width:auto;object-fit:contain;flex:1}.sidebar-logo-icon{width:28px;height:28px;object-fit:contain;border-radius:4px}.sidebar-logo-fallback{color:#fff;font-size:22px;font-weight:800;line-height:1;flex:1}.sidebar-logo-fallback-icon{color:#fff;font-size:11px;font-weight:800;line-height:1;writing-mode:vertical-rl}.sidebar-toggle{background:none;border:none;color:#ffffff80;cursor:pointer;font-size:16px;padding:4px 8px;border-radius:4px;transition:background .15s,color .15s;flex-shrink:0}.sidebar-toggle:hover{background:#ffffff1a;color:#fff}.sidebar-collapsed .sidebar-nav a,.sidebar-collapsed .sidebar-nav-btn{justify-content:center;padding:12px 0;gap:0}.sidebar-collapsed .sidebar-nav a span,.sidebar-collapsed .sidebar-nav-btn span{font-size:18px}.sidebar-nav{flex:1;padding:8px 0;overflow-y:auto;overflow-x:hidden;min-height:0}.sidebar-nav a{display:flex;align-items:center;gap:10px;padding:11px 20px;color:#b0b0c0;text-decoration:none;font-size:13px;transition:background .15s}.sidebar-nav a span{width:22px;min-width:22px;text-align:center;font-size:15px;flex-shrink:0;line-height:1;display:flex;align-items:center;justify-content:center}.sidebar-nav a:hover{background:#ffffff0f}.sidebar-nav a.active{background:#ffffff1a;color:#4fc3f7}.sidebar-nav-btn{display:flex;align-items:center;gap:10px;padding:11px 20px;width:100%;color:#b0b0c0;background:none;border:none;cursor:pointer;font-size:13px;text-align:left;transition:background .15s}.sidebar-nav-btn span{width:22px;min-width:22px;text-align:center;font-size:15px;flex-shrink:0;line-height:1;display:flex;align-items:center;justify-content:center}.sidebar-nav-btn:hover:not(:disabled){background:#ffffff0f}.sidebar-nav-btn:disabled{opacity:.5;cursor:default}.sidebar-group-btn{display:flex;align-items:center;width:100%;gap:10px;padding:11px 20px;background:none;border:none;color:#ffffffbf;font-size:14px;cursor:pointer;text-align:left;transition:background .15s}.sidebar-group-btn span:first-child{width:22px;min-width:22px;text-align:center;font-size:15px}.sidebar-group-btn:hover{background:#ffffff0f}.sidebar-group-btn-active{color:#4fc3f7}.sidebar-group-label{flex:1}.sidebar-group-arrow{font-size:11px;opacity:.6}.sidebar-group-items a{padding:6px 20px 6px 40px!important;font-size:13px!important;color:#ffffffa6!important}.sidebar-group-items a.active{color:#4fc3f7!important;background:#ffffff14!important}.sidebar-collapsed .sidebar-group-btn{justify-content:center;padding:12px 0}.sidebar-collapsed .sidebar-group-btn span:first-child{font-size:18px}.sidebar-footer{padding:16px;border-top:1px solid rgba(255,255,255,.08);font-size:12px}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden}.top-bar{display:flex;align-items:center;justify-content:space-between;height:52px;padding:0 16px;background:#fff;border-bottom:1px solid #e0e0e0;gap:12px}.top-bar-left{display:flex;align-items:center;gap:10px;min-width:0}.top-bar-page{font-size:15px;font-weight:600;color:#1a1a2e;white-space:nowrap}.top-bar-stats{display:flex;align-items:center;gap:8px;flex:1;justify-content:center}.stat-chip{display:inline-flex;align-items:baseline;gap:4px;padding:5px 13px;border-radius:8px;cursor:default;white-space:nowrap}.stat-chip-total{background:#fef9c3}.stat-chip-drive{background:#eff6ff}.stat-chip-off{background:#f0f0f0}.stat-num{font-size:17px;font-weight:700;line-height:1}.stat-chip-total .stat-num{color:#a16207}.stat-chip-drive .stat-num{color:#3b82f6}.stat-chip-off .stat-num{color:#616161}.stat-label{font-size:11px;font-weight:500;color:#888;line-height:1;align-self:flex-end;margin-bottom:1px}.top-bar-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.fullscreen-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:8px;cursor:pointer;color:#555}.fullscreen-btn:hover{background:#f0f0f0;color:#333}.notif-btn{position:relative;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:8px;cursor:pointer;color:#555}.notif-btn:hover{background:#f0f0f0;color:#1976d2}.notif-badge{position:absolute;top:4px;right:4px;background:#f44336;color:#fff;font-size:10px;font-weight:700;padding:1px 4px;border-radius:10px;min-width:16px;text-align:center;line-height:14px}.user-menu-wrap{position:relative}.user-btn{display:flex;align-items:center;gap:7px;padding:4px 10px 4px 4px;background:none;border:1px solid transparent;border-radius:20px;cursor:pointer;color:#1a1a2e}.user-btn:hover{background:#f5f7fa;border-color:#e0e6ef}.user-avatar{width:28px;height:28px;border-radius:50%;background:#1976d2;color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.user-name{font-size:13px;font-weight:500;max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-dropdown{position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid #e0e6ef;border-radius:10px;box-shadow:0 4px 16px #0000001f;min-width:180px;z-index:2000;overflow:hidden}.user-dropdown-info{padding:12px 14px 10px}.user-dropdown-name{font-size:14px;font-weight:600;color:#1a1a2e}.user-dropdown-role{font-size:12px;color:#888;margin-top:2px}.user-dropdown-divider{height:1px;background:#f0f0f0}.user-dropdown-logout{display:flex;align-items:center;gap:8px;width:100%;padding:10px 14px;background:none;border:none;font-size:13px;color:#e53935;cursor:pointer;text-align:left}.user-dropdown-logout:hover{background:#fff5f5}.page-content{flex:1;overflow:auto;padding:0;display:flex;flex-direction:column;min-height:0}.login-page{display:flex;justify-content:center;align-items:center;height:100vh;background:linear-gradient(135deg,#1a1a2e,#16213e)}.login-card{background:#fff;padding:40px;border-radius:12px;width:380px;box-shadow:0 20px 60px #0000004d}.login-card h1{font-size:24px;margin-bottom:8px;color:#1a1a2e}.login-card p{font-size:14px;color:#888;margin-bottom:24px}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:13px;color:#555;margin-bottom:4px}.form-group input,.form-group select{width:100%;padding:10px 12px;border:1px solid #ddd;border-radius:6px;font-size:14px}.form-group input:focus{outline:none;border-color:#4fc3f7;box-shadow:0 0 0 3px #4fc3f726}.btn{padding:10px 20px;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.btn-primary{background:#4fc3f7;color:#fff}.login-card .btn-primary{width:100%}.btn-primary:hover{background:#29b6f6}.btn-primary:disabled,.btn-secondary:disabled{opacity:.45;cursor:not-allowed}.btn-danger{background:#ef5350;color:#fff}.btn-warning{background:#f39c12;color:#fff}.btn-success{background:#27ae60;color:#fff}.btn-secondary{background:#f3f4f6;color:#374151;border:1px solid #d1d5db}.btn-secondary:hover{background:#e5e7eb}.btn-sm{padding:6px 12px;font-size:12px}.error-msg{color:#ef5350;font-size:13px;margin-top:8px}.map-container{flex:1;display:flex;min-height:0;height:100%}.map-wrapper{flex:1;min-height:0;position:relative}.fleet-marker{background:none!important;border:none!important}.map-wrapper .leaflet-container{position:absolute;top:0;left:0;right:0;bottom:0;height:100%!important;width:100%!important}.device-panel{width:300px;min-width:200px;background:#fff;border-left:1px solid #e0e0e0;overflow-y:auto;overflow-x:hidden;padding:12px;flex-shrink:0;position:relative;transition:width .22s ease,padding .22s ease,border .22s ease,min-width .22s ease}.panel-resize-handle{position:absolute;left:0;top:0;bottom:0;width:5px;cursor:ew-resize;z-index:10}.panel-resize-handle:hover,.panel-resize-handle:active{background:#3b82f640}.device-panel--collapsed{width:0!important;min-width:0;padding:0;border-left:none;overflow:hidden}.panel-collapse-btn{background:none;border:none;cursor:pointer;color:#888;font-size:18px;line-height:1;padding:0 4px;margin-right:4px;border-radius:4px;transition:color .15s,background .15s}.panel-collapse-btn:hover{color:#333;background:#f0f0f0}.panel-expand-btn{flex-shrink:0;width:22px;background:#fff;border:none;border-left:1px solid #e0e0e0;cursor:pointer;font-size:16px;color:#555;display:flex;align-items:center;justify-content:center;box-shadow:-2px 0 6px #00000014;transition:color .15s,background .15s}.panel-expand-btn:hover{background:#f5f5f5;color:#111}.device-card{padding:12px;border:1px solid #eee;border-radius:8px;margin-bottom:8px;cursor:pointer;transition:background .1s}.device-card:hover{background:#f5f5f5}.device-card.selected{background:#e3f0ff;border-color:#1976d2;border-left:3px solid #1976d2}.device-card.selected:hover{background:#d6e9ff}.dc-key-badge{position:absolute;bottom:-2px;right:-2px;width:14px;height:14px;background:#16a34a;border-radius:50%;border:1.5px solid #fff;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px #0000004d;pointer-events:none}.dc-gps-status{display:flex;align-items:center;gap:4px;margin-top:2px}.dc-gps-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.dc-gps-label{font-size:11px;color:#666;white-space:nowrap}.vs-badge{display:inline-block;padding:1px 7px;border-radius:10px;font-size:10px;font-weight:600;color:#fff;margin-left:6px;vertical-align:middle;line-height:16px;white-space:nowrap}.device-search{width:100%;padding:8px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px;margin-bottom:10px;outline:none}.device-search:focus{border-color:#4fc3f7;box-shadow:0 0 0 3px #4fc3f726}.customer-filter-select{width:100%;padding:6px 8px;margin-bottom:8px;border:1px solid #ddd;border-radius:6px;font-size:13px;background:#fff;cursor:pointer;outline:none}.customer-filter-select:focus{border-color:#4fc3f7;box-shadow:0 0 0 3px #4fc3f726}.customer-filter-wrap{position:relative;margin-bottom:8px}.customer-filter-btn{width:100%;display:flex;justify-content:space-between;align-items:center;padding:6px 10px;background:#fff;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#374151;cursor:pointer;text-align:left;transition:border-color .15s}.customer-filter-btn:hover{border-color:var(--primary)}.customer-filter-chevron{font-size:10px;color:#9ca3af;flex-shrink:0}.customer-filter-dd{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 16px #0000001f;z-index:1500;padding:4px 0;max-height:220px;overflow-y:auto}.customer-filter-item{display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:13px;color:#374151;cursor:pointer;transition:background .1s;-webkit-user-select:none;user-select:none}.customer-filter-item:hover{background:#f3f4f6}.customer-filter-item input[type=checkbox]{accent-color:var(--primary);width:14px;height:14px;flex-shrink:0;cursor:pointer}.customer-filter-all{font-weight:600;border-bottom:1px solid #f3f4f6;margin-bottom:2px}.device-card-header{display:flex;align-items:center;gap:0;cursor:pointer}.device-card-chevron{margin-left:auto;padding:4px 4px 4px 8px;font-size:14px;color:#64748b;flex-shrink:0;line-height:1;border-radius:4px;cursor:pointer;transition:color .15s,background .15s;-webkit-user-select:none;user-select:none}.device-card-chevron:hover{color:#1e293b;background:#00000014}.device-card-info{flex:1;min-width:0}.device-card .name{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-card .meta{font-size:12px;color:#888;margin-top:2px}.device-card .meta-time{font-size:11px;color:#999;margin-top:4px;padding-left:36px}.device-card .meta-time .time-ago{margin-left:4px;color:#bbb}.device-card .meta-addr{font-size:11px;color:#666;margin-top:3px;padding-left:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-panel-hdr{display:flex;align-items:center;margin-bottom:8px}.device-panel-title{flex:1;font-size:15px;font-weight:600;color:#333}.dc-picker-wrap{position:relative}.dc-settings-btn{background:none;border:1px solid #ddd;border-radius:5px;padding:3px 7px;font-size:14px;cursor:pointer;color:#666;line-height:1}.dc-settings-btn:hover{background:#f5f5f5;border-color:#bbb}.dc-picker-dropdown{position:absolute;right:0;top:calc(100% + 4px);background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 4px 12px #0000001f;z-index:2000;padding:6px 4px;min-width:130px}.dc-picker-item{display:flex;align-items:center;gap:7px;padding:5px 10px;font-size:13px;cursor:pointer;border-radius:4px;white-space:nowrap}.dc-picker-item:hover{background:#f5f9ff}.dc-picker-item input[type=checkbox]{cursor:pointer;accent-color:#1976d2}.device-card-fields{margin-top:5px;padding-left:36px}.dc-row{display:flex;align-items:baseline;gap:4px;font-size:12px;line-height:1.6}.dc-lbl{color:#999;min-width:52px;flex-shrink:0;font-size:11px}.dc-val{color:#444;font-weight:500}.dc-row-addr{align-items:flex-start}.dc-row-addr .dc-val-addr{white-space:nowrap;overflow-x:auto;display:block;min-width:0;flex:1;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.dc-row-addr .dc-val-addr::-webkit-scrollbar{height:4px}.dc-row-addr .dc-val-addr::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.status-dot{display:inline-block;width:10px;height:10px;min-width:10px;min-height:10px;border-radius:50%;margin-right:6px;flex-shrink:0}.status-dot.online{background:#4caf50}.status-dot.offline{background:#bdbdbd}.locator-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:3000;display:flex;align-items:center;justify-content:center}.locator-dialog{background:#fff;border-radius:10px;box-shadow:0 8px 32px #00000038;width:420px;max-width:calc(100vw - 24px);max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.locator-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 0;border-bottom:1px solid #e5e7eb}.locator-dialog-tabs{display:flex;gap:2px}.locator-tab-btn{background:none;border:none;border-bottom:2px solid transparent;padding:8px 12px;font-size:13px;font-weight:500;cursor:pointer;color:#6b7280;transition:color .15s,border-color .15s}.locator-tab-btn.active{color:#2563eb;border-bottom-color:#2563eb}.locator-tab-btn:hover:not(.active){color:#374151}.locator-dialog-close{background:none;border:none;cursor:pointer;color:#9ca3af;font-size:16px;padding:4px 8px;border-radius:4px;line-height:1}.locator-dialog-close:hover{color:#374151;background:#f3f4f6}.locator-dialog-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:8px}.locator-section-label{font-size:12px;font-weight:600;color:#374151;text-transform:uppercase;letter-spacing:.04em;margin-top:4px}.locator-device-list{border:1px solid #e5e7eb;border-radius:6px;max-height:240px;overflow-y:auto;background:#f9fafb}.locator-device-item{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;cursor:pointer;font-size:13px;border-bottom:1px solid #f3f4f6}.locator-device-item input[type=checkbox]{margin-top:2px;flex-shrink:0}.locator-device-item:last-child{border-bottom:none}.locator-device-item:hover{background:#f3f4f6}.locator-device-all{font-weight:600;background:#fff;border-bottom:1px solid #e5e7eb!important;align-items:center}.locator-device-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.locator-device-name-row{display:flex;align-items:baseline;gap:6px;min-width:0}.locator-device-name{color:#1f2937;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.locator-device-uid{font-size:11px;color:#9ca3af;white-space:nowrap;flex-shrink:0}.locator-device-status-row{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.locator-vs-badge{display:inline-block;font-size:10px;font-weight:600;color:#fff;padding:1px 5px;border-radius:3px;white-space:nowrap;flex-shrink:0}.locator-gps-badge{display:inline-block;font-size:10px;font-weight:700;color:#fff;padding:1px 5px;border-radius:3px;white-space:nowrap;flex-shrink:0}.locator-device-addr{font-size:10px;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.locator-text-input{border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:13px;width:100%;box-sizing:border-box;color:#1f2937;outline:none;transition:border-color .15s}.locator-text-input:focus{border-color:#2563eb}.locator-hint{font-size:11px;color:#9ca3af;margin-top:-4px}.locator-error{font-size:12px;color:#dc2626;background:#fef2f2;border:1px solid #fecaca;border-radius:5px;padding:6px 10px}.locator-create-btn{background:#2563eb;color:#fff;border:none;border-radius:6px;padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer;margin-top:4px;transition:background .15s}.locator-create-btn:hover:not(:disabled){background:#1d4ed8}.locator-create-btn:disabled{opacity:.5;cursor:not-allowed}.locator-success{display:flex;flex-direction:column;align-items:center;gap:10px;padding:8px 0;text-align:center}.locator-success-icon{width:44px;height:44px;border-radius:50%;background:#dcfce7;color:#16a34a;font-size:22px;display:flex;align-items:center;justify-content:center}.locator-success-title{font-weight:700;font-size:15px;color:#1f2937}.locator-url-row{display:flex;gap:6px;width:100%}.locator-url-input{flex:1;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:12px;color:#374151;min-width:0;background:#f9fafb}.locator-copy-btn{background:#f3f4f6;border:1px solid #d1d5db;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:600;cursor:pointer;color:#374151;white-space:nowrap;transition:background .15s}.locator-copy-btn:hover{background:#e5e7eb}.locator-copy-btn.small{padding:4px 8px;font-size:11px}.locator-create-another{background:none;border:1px solid #d1d5db;border-radius:6px;padding:6px 14px;font-size:12px;cursor:pointer;color:#6b7280}.locator-create-another:hover{background:#f3f4f6}.locator-loading,.locator-empty{text-align:center;color:#9ca3af;font-size:13px;padding:24px 0}.locator-links-list{display:flex;flex-direction:column;gap:8px}.locator-link-row{display:flex;align-items:center;gap:10px;border:1px solid #e5e7eb;border-radius:7px;padding:10px 12px;background:#f9fafb}.locator-link-info{flex:1;min-width:0}.locator-link-label{font-weight:600;font-size:13px;color:#1f2937}.locator-link-meta{font-size:11px;color:#9ca3af;margin-top:2px}.locator-link-actions{display:flex;gap:6px;flex-shrink:0}.locator-revoke-btn{background:none;border:1px solid #fca5a5;border-radius:5px;padding:4px 8px;font-size:11px;color:#dc2626;cursor:pointer;transition:background .15s}.locator-revoke-btn:hover:not(:disabled){background:#fef2f2}.locator-revoke-btn:disabled{opacity:.5;cursor:not-allowed}.locator-share-pill-btn{display:inline-flex;align-items:center;gap:5px;background:#2563eb;color:#fff;border:none;border-radius:20px;padding:4px 10px 4px 8px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s;line-height:1.4}.locator-share-pill-btn:hover{background:#1d4ed8}.locator-qr-section{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:4px;width:100%}.locator-qr-img{width:160px;height:160px;border:1px solid #e5e7eb;border-radius:8px;padding:6px;background:#fff}.locator-qr-download{background:none;border:1px solid #d1d5db;border-radius:6px;padding:4px 12px;font-size:12px;color:#6b7280;cursor:pointer}.locator-qr-download:hover{background:#f3f4f6}.locator-quick-btns{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:2px}.locator-quick-btn{background:#f3f4f6;border:1px solid #d1d5db;border-radius:5px;padding:3px 10px;font-size:12px;color:#374151;cursor:pointer;transition:background .12s,border-color .12s}.locator-quick-btn:hover{background:#e0e7ff;border-color:#6366f1;color:#3730a3}.locator-expiry-row{display:flex;gap:6px;align-items:center}.locator-expiry-select,.locator-expiry-hour{border:1px solid #d1d5db;border-radius:6px;padding:7px 6px;font-size:13px;color:#1f2937;background:#fff;outline:none;transition:border-color .15s;cursor:pointer}.locator-expiry-select{flex:1}.locator-expiry-hour{width:76px}.locator-expiry-select:focus,.locator-expiry-hour:focus{border-color:#2563eb}.locator-expiry-select:disabled,.locator-expiry-hour:disabled{opacity:.45;cursor:not-allowed}.locator-qr-toggle-btn{background:none;border:1px solid #d1d5db;border-radius:5px;padding:3px 8px;font-size:11px;font-weight:700;color:#374151;cursor:pointer;transition:background .12s,border-color .12s}.locator-qr-toggle-btn:hover{background:#f3f4f6}.locator-qr-toggle-btn.active{background:#eff6ff;border-color:#3b82f6;color:#2563eb}.locator-qr-panel{background:#f9fafb;border-top:1px solid #e5e7eb;padding:12px;display:flex;flex-direction:column;align-items:center;gap:8px}.locator-qr-panel-actions{display:flex;gap:8px}.locator-edit-btn{background:none;border:1px solid #d1d5db;border-radius:5px;padding:3px 9px;font-size:12px;color:#374151;cursor:pointer;transition:background .12s}.locator-edit-btn:hover{background:#f3f4f6}.locator-link-card{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.locator-link-card .locator-link-row{border:none;border-radius:0;background:#fff}.locator-edit-form{background:#f9fafb;border-top:1px solid #e5e7eb;padding:12px;display:flex;flex-direction:column;gap:8px}.locator-edit-actions{display:flex;gap:8px;margin-top:2px}.locator-save-btn{flex:1;background:#2563eb;color:#fff;border:none;border-radius:6px;padding:7px 0;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s}.locator-save-btn:hover:not(:disabled){background:#1d4ed8}.locator-save-btn:disabled{opacity:.5;cursor:not-allowed}.locator-cancel-btn{flex:1;background:none;border:1px solid #d1d5db;border-radius:6px;padding:7px 0;font-size:13px;color:#6b7280;cursor:pointer}.locator-cancel-btn:hover{background:#f3f4f6}.locator-clear-expiry-btn{background:none;border:none;font-size:11px;color:#9ca3af;cursor:pointer;padding:0;text-align:left;text-decoration:underline}.locator-clear-expiry-btn:hover{color:#6b7280}.locator-manage-header{display:flex;justify-content:flex-end;margin-bottom:4px}.locator-refresh-btn{background:none;border:1px solid #d1d5db;border-radius:5px;padding:3px 9px;font-size:14px;color:#6b7280;cursor:pointer;line-height:1.4}.locator-refresh-btn:hover:not(:disabled){background:#f3f4f6}.locator-refresh-btn:disabled{opacity:.4;cursor:not-allowed}.history-toolbar{display:flex;gap:12px;align-items:center;padding:10px 16px;background:#fff;border-bottom:1px solid #e0e0e0;flex-wrap:wrap;flex-shrink:0;position:relative}.history-toolbar select,.history-toolbar input:not(.drp-trigger-input){padding:8px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px}.date-range-picker{position:relative;display:inline-flex;z-index:5000}.drp-trigger{height:36px;min-width:330px;max-width:100%;border:1px solid #d6e0eb;border-radius:7px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;color:#22334a;font-size:13px;cursor:pointer;box-shadow:0 1px #182b4508}.drp-trigger[data-disabled=true]{background:#f3f4f6;color:#9ca3af;cursor:not-allowed}.drp-trigger-input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drp-trigger-input:disabled{cursor:not-allowed}.drp-cal-icon{width:16px;height:16px;border:1.6px solid #8ea2b7;border-radius:4px;position:relative;flex:0 0 auto}.drp-cal-icon:before{content:"";position:absolute;left:-1.6px;right:-1.6px;top:4px;border-top:1.4px solid #8ea2b7}.drp-cal-icon:after{content:"";position:absolute;width:3px;height:3px;left:4px;top:8px;background:#2372d4;box-shadow:5px 0 #2372d4;border-radius:50%}.drp-panel{position:fixed;border:1px solid #d8e3ee;border-radius:8px;background:#fff;box-shadow:0 20px 52px #1c2f4b2e;overflow:auto;z-index:7000}.drp-panel-top{padding:8px 10px;border-bottom:1px solid #e8eef5;display:flex;justify-content:space-between;gap:14px;align-items:center;background:#fbfdff}.drp-summary-title{font-size:10px;color:#718196;font-weight:700;margin-bottom:3px}.drp-summary-value{font-size:12px;font-weight:850;color:#1a2535}.drp-summary-hint{color:#718196;font-size:10px;white-space:nowrap}.drp-body{display:grid;grid-template-columns:78px minmax(300px,1fr) 154px;min-height:254px}.drp-presets{background:#f7faff;border-right:1px solid #e2ebf5;padding:6px;display:flex;flex-direction:column;gap:4px}.drp-preset{border:0;background:transparent;border-radius:6px;padding:6px;text-align:left;color:#5e7187;font-size:11px;font-weight:700;cursor:pointer}.drp-preset:hover{background:#eaf2fb;color:#23405f}.drp-calendar-zone{padding:9px 10px 8px}.drp-month-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.drp-month-btn{width:24px;height:24px;border:1px solid #dbe4ef;background:#fff;border-radius:6px;color:#7590ad;font-size:16px;line-height:1;cursor:pointer}.drp-month-title{font-size:12px;font-weight:850}.drp-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px 0;text-align:center}.drp-dow{height:20px;color:#9aaabc;font-size:10px;font-weight:800}.drp-day{height:24px;border:0;background:transparent;display:grid;place-items:center;border-radius:6px;font-size:12px;color:#25364b;cursor:pointer}.drp-day.muted{color:#c6d1de}.drp-day.range{background:#2372d41c;color:#1d4f91;border-radius:0}.drp-day.selected{background:#2372d4;color:#fff;font-weight:900;box-shadow:0 7px 15px #2372d438}.drp-day.today{color:#2372d4;outline:1px solid rgba(35,114,212,.35);outline-offset:-1px;font-weight:850}.drp-day.out-of-range{color:#d0d8e4;cursor:not-allowed;pointer-events:none}.drp-limit-hint{font-size:11px;color:#7a8fa6;font-weight:500}.drp-time-zone{border-left:1px solid #e2ebf5;background:#fbfdff;padding:8px;display:flex;flex-direction:column;gap:6px}.drp-time-select{display:block}.drp-time-card{background:#fff;border:1px solid #dce6f1;border-radius:7px;padding:7px}.drp-time-card.active{border-color:#2372d4;box-shadow:0 0 0 3px #2372d417}.drp-time-label{display:flex;justify-content:space-between;align-items:center;color:#687a90;font-size:11px;font-weight:800;margin-bottom:4px}.drp-time-label strong{color:#1a2535;font-size:14px;font-weight:900}.drp-spinner-row{display:flex;align-items:center;justify-content:center;gap:6px}.drp-spin-unit{display:flex;flex-direction:column;align-items:center;gap:2px}.drp-spin-btn{width:26px;height:13px;border:0;border-radius:4px;background:transparent;color:#a5b4c5;font-size:13px;line-height:1;font-weight:900;cursor:pointer}.drp-spin-btn:hover{color:#657a92;background:#f3f7fc}.drp-spin-input{width:30px;height:25px;border:1px solid #dbe4ef;border-radius:6px;display:grid;place-items:center;text-align:center;font-size:13px;font-weight:850;background:#fff;color:#1a2535;outline:none}.drp-spin-input:focus{border-color:#2372d4;box-shadow:0 0 0 3px #2372d417}.drp-time-separator{color:#c2cfdd;font-size:16px;font-weight:900;padding-top:12px}.drp-spin-caption{margin-top:3px;text-align:center;color:#9aaabc;font-size:10px;font-weight:700}.drp-panel-bottom{border-top:1px solid #e8eef5;background:#fbfdff;padding:8px 10px;display:flex;justify-content:space-between;align-items:center;gap:12px}.drp-actions{display:flex;gap:8px}.drp-cancel,.drp-apply{height:30px;border-radius:6px;padding:0 12px;font-weight:800;cursor:pointer}.drp-cancel{background:#fff;border:1px solid #d8e2ee;color:#62748a}.drp-apply{background:#2372d4;border:1px solid #2372d4;color:#fff}@media (max-width: 900px){.drp-panel{left:12px!important;right:12px!important;top:76px!important;width:auto!important;max-height:calc(100vh - 96px)!important;overflow:auto}.drp-panel-top,.drp-panel-bottom{align-items:flex-start;flex-direction:column}.drp-summary-hint{white-space:normal}.drp-body{grid-template-columns:1fr;min-height:auto}.drp-presets{border-right:0;border-bottom:1px solid #e2ebf5;flex-direction:row;overflow-x:auto}.drp-preset{white-space:nowrap}.drp-time-zone{border-left:0;border-top:1px solid #e2ebf5}.drp-actions,.drp-cancel,.drp-apply{width:100%}}.device-select{position:relative;display:inline-block;min-width:200px}.device-select-trigger{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px;background:#fff;cursor:pointer;gap:8px}.device-select-trigger:hover{border-color:#bbb}.device-select-arrow{font-size:10px;color:#888}.device-select-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:2px;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 12px #0000001f;z-index:1000;overflow:hidden}.device-select-search{width:100%;padding:8px 10px;border:none;border-bottom:1px solid #eee;font-size:13px;outline:none}.device-select-options{max-height:240px;overflow-y:auto}.device-select-option{padding:8px 10px;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:8px}.device-select-option:hover{background:#f5f9ff}.device-select-option.active{background:#e3f2fd}.device-select-option.disabled{color:#999;cursor:default}.device-select-sub{font-size:11px;color:#999}.device-select-trigger-sub{font-size:11px;color:#aaa;font-weight:400}.export-btns{display:inline-flex;gap:4px;margin-left:4px}.btn-export{background:#e8f5e9;border:1px solid #a5d6a7;color:#2e7d32;cursor:pointer;font-size:12px;padding:5px 10px;border-radius:4px}.btn-export:hover{background:#c8e6c9}.playback-bar{display:flex;gap:8px;align-items:center;padding:6px 16px;background:#fafafa;border-bottom:1px solid #e0e0e0;flex-shrink:0}.playback-bar input[type=range]{flex:1}.playback-bar .time-label{font-size:12px;color:#666;min-width:120px}.history-split{display:flex;flex:1;min-height:0;overflow:hidden}.history-map-panel{position:relative;min-width:0;overflow:hidden}.history-table-panel{display:flex;flex-direction:column;min-width:0;overflow:hidden;background:#fff}.history-empty{display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:14px}.history-divider{width:7px;flex-shrink:0;cursor:col-resize;background:#e0e0e0;display:flex;align-items:center;justify-content:center;transition:background .15s;z-index:10}.history-divider:hover,.history-divider:active{background:#bdbdbd}.history-divider-grip{width:3px;height:32px;border-left:1px solid #aaa;border-right:1px solid #aaa}.history-table-wrap{flex:1;overflow:auto;padding:0}.history-table-wrap table{font-size:12px;table-layout:fixed;min-width:900px;width:100%}.history-table-wrap td{font-size:12px;padding:5px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-table-wrap th{font-size:12px;padding:7px 6px;white-space:nowrap;position:sticky;top:0;z-index:2;background:#fafafa;overflow:hidden;resize:horizontal}.history-table-wrap th.col-draggable{cursor:grab;-webkit-user-select:none;user-select:none}.history-table-wrap th.col-draggable:active{cursor:grabbing}.history-table-wrap th.col-draggable:hover{background:#eef2f8}.history-table-wrap th.col-drag-over{background:#def;border-left:2px solid #3388ff}.col-picker-wrap{position:relative;margin-left:auto}.col-picker-btn{white-space:nowrap}.col-picker-dropdown{position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid #d0d8e4;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:8px 4px;z-index:200;min-width:150px}.col-picker-item{display:flex;align-items:center;gap:8px;padding:5px 14px;font-size:13px;color:#333;cursor:pointer;border-radius:4px;white-space:nowrap}.col-picker-item:hover{background:#f5f7fa}.col-picker-item input[type=checkbox]{accent-color:#3388ff;width:14px;height:14px;cursor:pointer}.history-table-wrap tr.row-active td{background:#e3f2fd}.history-table-wrap tbody tr:hover td{background:#f5f9ff}.cell-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.table-pagination{display:flex;align-items:center;justify-content:center;gap:12px;padding:6px;border-top:1px solid #e0e0e0;font-size:13px;color:#666;flex-shrink:0}.pagination-info{font-size:13px;color:#555;min-width:140px;text-align:center}.page-jump-input{width:52px;text-align:center;padding:2px 4px;border:1px solid #ccc;border-radius:4px;font-size:13px;-moz-appearance:textfield}.page-jump-input::-webkit-inner-spin-button,.page-jump-input::-webkit-outer-spin-button{opacity:1}.tile-switcher{position:absolute;bottom:80px;left:10px;z-index:1000;pointer-events:auto}.tile-toggle-btn{display:flex;align-items:center;justify-content:center;width:34px;height:34px;background:#fffffff2;border:1px solid #ccc;border-radius:6px;cursor:pointer;box-shadow:0 1px 4px #0003;color:#444}.tile-toggle-btn:hover,.tile-toggle-btn.open{background:#f0f0f0;color:#1976d2}.tile-dropdown{position:absolute;bottom:0;left:calc(100% + 6px);background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 12px #00000026;overflow:hidden;min-width:140px}.tile-option{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:none;background:none;cursor:pointer;font-size:13px;color:#444;text-align:left;white-space:nowrap}.tile-option:hover{background:#f5f5f5;color:#1976d2}.tile-option.active{background:#1976d2;color:#fff}.raw-page{display:flex;flex-direction:column;height:100%}.raw-toolbar{display:flex;gap:12px;align-items:center;padding:12px 16px;background:#fff;border-bottom:1px solid #e0e0e0}.message-table{flex:1;overflow:auto;padding:0 16px}table{width:100%;border-collapse:collapse;font-size:13px}table th{text-align:left;padding:10px 8px;background:#fafafa;border-bottom:2px solid #e0e0e0;font-weight:600;position:sticky;top:0}table td{padding:8px;border-bottom:1px solid #f0f0f0;font-family:Consolas,Courier New,monospace;word-break:break-all}table:not(.gfev-table) tr:hover td{background:#f5f9ff}.direction-in{color:#2196f3}.direction-out{color:#ff9800}.btn-live-off{background:#fff3e0;border:1px solid #ffcc80;color:#e65100}.btn-live-off:hover{background:#ffe0b2}.btn-live-on{background:#e74c3c;border:1px solid #c0392b;color:#fff;animation:live-pulse 1.5s ease-in-out infinite}.btn-live-on:hover{background:#c0392b}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.75}}.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#e74c3c;margin-right:5px;animation:live-pulse 1s ease-in-out infinite}.command-sender{padding:16px;background:#fff;border-top:1px solid #e0e0e0}.command-sender h3{font-size:14px;margin-bottom:12px}.command-form{display:flex;gap:8px;flex-wrap:wrap}.command-form select,.command-form input{padding:8px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px}.admin-page{padding:24px}.admin-tabs{display:flex;gap:0;margin-bottom:24px;border-bottom:2px solid #e8edf4;width:100%;flex-wrap:wrap}.admin-tabs button{padding:10px 20px;background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;border-radius:0;font-size:13.5px;font-weight:500;color:#94a3b8;cursor:pointer;white-space:nowrap;transition:color .15s,border-color .15s}.admin-tabs button:hover:not(.active){color:#475569}.admin-tabs button.active{color:#2563eb;font-weight:650;border-bottom-color:#2563eb}.admin-sub-tabs{display:flex;gap:6px;margin-bottom:20px;flex-wrap:wrap}.admin-sub-tabs button{padding:7px 18px;background:transparent;border:none;border-radius:20px;font-size:13px;font-weight:500;color:#94a3b8;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}.admin-sub-tabs button:hover:not(.active){background:#f1f5f9;color:#475569}.admin-sub-tabs button.active{background:#2563eb;color:#fff;font-weight:600}.admin-card{background:#fff;border-radius:8px;padding:20px;box-shadow:0 1px 3px #0000000f}.admin-card .header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.table-scroll-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-box{background:#fff;border-radius:10px;padding:24px;width:540px;max-width:96vw;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000002e}.modal-box.log-modal{width:820px}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.modal-header h3{font-size:16px;font-weight:600;color:#1a1a2e}.modal-close{background:none;border:none;font-size:20px;line-height:1;color:#888;cursor:pointer;padding:2px 6px;border-radius:4px}.modal-close:hover{background:#f0f0f0;color:#333}.log-table-wrap{overflow-y:auto;flex:1}.log-table{width:100%;border-collapse:collapse;font-size:13px}.log-table th,.log-table td{text-align:left;padding:7px 10px;border-bottom:1px solid #f0f0f0;vertical-align:top}.log-table th{background:#f8f9fa;font-weight:600;color:#555;position:sticky;top:0}.log-table tr:last-child td{border-bottom:none}.log-table td:first-child{white-space:nowrap;color:#666;font-family:monospace;font-size:12px}.log-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;white-space:nowrap;background:#e0e0e0;color:#555}.log-joined{background:#e8f5e9;color:#2e7d32}.log-name_changed{background:#e3f2fd;color:#1565c0}.log-customer_assigned{background:#f3e5f5;color:#6a1b9a}.log-user_assigned{background:#e8eaf6;color:#283593}.log-user_unassigned{background:#fce4ec;color:#880e4f}.log-deleted{background:#ffebee;color:#c62828}.log-restored{background:#f1f8e9;color:#558b2f}.log-created{background:#e8f5e9;color:#2e7d32}.log-updated{background:#e3f2fd;color:#1565c0}.log-login_ok{background:#e8f5e9;color:#2e7d32}.log-login_fail{background:#ffebee;color:#c62828}.trash-section{margin-bottom:24px}.trash-section h4{font-size:14px;font-weight:600;color:#555;margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid #eee}.trash-table{width:100%;border-collapse:collapse;font-size:13px}.trash-table th,.trash-table td{text-align:left;padding:8px 10px;border-bottom:1px solid #f0f0f0}.trash-table th{background:#f8f9fa;font-weight:600;color:#555}.trash-table tr{color:#999}.trash-table tr:hover{background:#fafafa}.purge-soon{color:#e53935;font-weight:600}.gf-sidebar{width:260px;min-width:260px;background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;overflow:hidden}.gf-sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 10px;border-bottom:1px solid #eee;gap:8px;flex-shrink:0}.gf-sidebar-title{font-size:14px;font-weight:700;color:#222;display:flex;align-items:center;gap:6px}.gf-count{background:#38f;color:#fff;border-radius:10px;padding:1px 7px;font-size:11px;font-weight:600}.gf-add-btn{padding:4px 10px;font-size:12px;font-weight:600;background:#38f;color:#fff;border:none;border-radius:5px;cursor:pointer;white-space:nowrap;transition:background .15s}.gf-add-btn:hover{background:#1a6fd8}.gf-draw-wrap{position:relative}.gf-draw-menu{position:absolute;top:calc(100% + 4px);right:0;z-index:2000;background:#fff;border:1px solid #ddd;border-radius:7px;box-shadow:0 4px 16px #0000001f;overflow:hidden;min-width:160px}.gf-draw-menu button{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;font-size:13px;background:none;border:none;cursor:pointer;text-align:left;color:#333;transition:background .1s}.gf-draw-menu button:hover{background:#f0f7ff}.gf-draw-menu button+button{border-top:1px solid #f0f0f0}.gf-shape-icon{font-size:15px;color:#38f}.gf-sidebar-body{flex:1;overflow-y:auto;padding:8px}.gf-empty{color:#aaa;font-size:12px;text-align:center;padding:24px 12px;line-height:1.6}.gf-sidebar-item{display:flex;align-items:center;gap:8px;padding:8px 6px;border-radius:6px;transition:background .1s;margin-bottom:2px}.gf-sidebar-item:hover{background:#f5f8ff}.gf-sidebar-item.gf-inactive{opacity:.5}.gf-color-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0;border:1.5px solid rgba(0,0,0,.12)}.gf-item-info{flex:1;min-width:0}.gf-item-name{font-size:13px;font-weight:500;color:#222;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gf-item-meta{font-size:11px;color:#999;margin-top:1px;display:flex;align-items:center;gap:5px}.gf-inactive-badge{background:#f5f5f5;color:#bbb;border:1px solid #e0e0e0;border-radius:4px;padding:0 4px;font-size:10px}.gf-item-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s}.gf-sidebar-item:hover .gf-item-actions{opacity:1}.gf-action-btn{background:none;border:none;cursor:pointer;padding:3px 5px;border-radius:4px;font-size:13px;color:#bbb;line-height:1;transition:background .1s,color .1s}.gf-action-btn:hover{background:#eee}.gf-edit-btn:hover{color:#38f!important}.gf-del-btn:hover{color:#e53935!important}.gf-edit-card{background:#f8f9ff;border:1px solid #d0e4ff;border-radius:8px;padding:10px;margin-bottom:6px;display:flex;flex-direction:column;gap:8px}.gf-edit-name-row{display:flex;align-items:center;gap:8px}.gf-edit-input{flex:1;padding:5px 8px;border:1px solid #c5d8f7;border-radius:5px;font-size:13px;outline:none;background:#fff}.gf-edit-input:focus{border-color:#38f;box-shadow:0 0 0 2px #3388ff26}.gf-edit-row{display:flex;align-items:center;gap:8px;font-size:12px;color:#555}.gf-color-picker{width:36px;height:26px;padding:1px;border:1px solid #ccc;border-radius:4px;cursor:pointer}.gf-active-label{display:flex;align-items:center;gap:4px;font-size:12px;color:#555;cursor:pointer;margin-left:auto}.gf-edit-actions{display:flex;gap:6px;justify-content:flex-end}.gf-tooltip{background:#000000b8;color:#fff;border:none;border-radius:4px;font-size:12px;padding:3px 8px;white-space:nowrap;box-shadow:0 2px 6px #0003}.leaflet-tooltip.gf-label{background:#000000a6;color:#fff;border:none;border-radius:3px;font-size:11px;font-weight:600;padding:2px 7px;white-space:nowrap;box-shadow:0 1px 4px #00000059;pointer-events:none}.leaflet-tooltip.gf-label:before{display:none}.gfp-layout{display:flex;height:100%;min-height:0}.gfp-left{width:320px;min-width:320px;display:flex;flex-direction:column;background:#fff;border-right:1px solid #e0e0e0;overflow:hidden}.gfp-header{display:flex;align-items:center;justify-content:space-between;padding:14px 14px 10px;border-bottom:1px solid #eee;flex-shrink:0}.gfp-title{font-size:15px;font-weight:700;color:#1a1a1a;display:flex;align-items:center;gap:6px}.gfp-count-badge{background:#38f;color:#fff;border-radius:10px;padding:1px 7px;font-size:11px;font-weight:600}.gfp-new-btn{padding:5px 12px;font-size:12px;font-weight:600;background:#38f;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:background .15s}.gfp-new-btn:hover{background:#1a6fd8}.gfp-search-wrap{padding:10px 12px 0;flex-shrink:0}.gfp-search{width:100%;padding:7px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px;outline:none;box-sizing:border-box}.gfp-search:focus{border-color:#38f;box-shadow:0 0 0 3px #3388ff1f}.gfp-list{flex:1;overflow-y:auto;padding:8px}.gfp-empty{color:#aaa;font-size:12px;text-align:center;padding:32px 16px;line-height:1.7}.gfp-item{display:flex;align-items:center;gap:9px;padding:9px 8px;border-radius:7px;cursor:pointer;transition:background .1s;margin-bottom:2px;position:relative}.gfp-item:hover{background:#f4f8ff}.gfp-item.gfp-item-selected{background:#e8f2ff}.gfp-item.gfp-item-inactive{opacity:.55}.gfp-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0;border:1.5px solid rgba(0,0,0,.1)}.gfp-item-info{flex:1;min-width:0}.gfp-item-name{font-size:13px;font-weight:500;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gfp-item-meta{display:flex;align-items:center;flex-wrap:wrap;gap:4px;font-size:11px;color:#999;margin-top:2px}.gfp-badge-off{background:#f5f5f5;color:#bbb;border:1px solid #e0e0e0;border-radius:4px;padding:0 4px;font-size:10px}.gfp-badge-cust{background:#f0f7ff;color:#38f;border:1px solid #cce0ff;border-radius:4px;padding:0 5px;font-size:10px}.gfp-group{border-bottom:1px solid #eef1f5}.gfp-group-header{display:flex;align-items:center;gap:6px;width:100%;padding:8px 12px;background:#f5f7fa;border:none;cursor:pointer;text-align:left;font-size:12px;font-weight:600;color:#444;letter-spacing:.02em;transition:background .15s}.gfp-group-header:hover{background:#eef1f5}.gfp-group-arrow{font-size:9px;color:#888;flex-shrink:0}.gfp-group-name{flex:1}.gfp-group-count{background:#dde3ec;color:#555;border-radius:10px;padding:0 7px;font-size:11px;font-weight:600}.gfp-group .gfp-item{padding-left:20px}.gfp-item-actions{display:flex;gap:1px;opacity:0;transition:opacity .15s;flex-shrink:0}.gfp-item:hover .gfp-item-actions{opacity:1}.gfp-act-btn{background:none;border:none;cursor:pointer;padding:4px 5px;border-radius:4px;font-size:13px;color:#bbb;line-height:1;transition:background .1s,color .1s}.gfp-act-btn:hover{background:#eee;color:#555}.gfp-act-del:hover{color:#e53935!important}.gfp-form{border-bottom:1px solid #e8f0ff;background:#f8faff;flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0}.gfp-form-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px 8px;font-weight:600;font-size:13px;color:#1a1a1a}.gfp-form-cancel{background:none;border:none;cursor:pointer;color:#aaa;font-size:15px;padding:0 2px;line-height:1}.gfp-form-cancel:hover{color:#555}.gfp-shape-hint{font-size:12px;color:#666;margin-bottom:8px;padding:4px 14px 0}.gfp-shape-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 14px 12px;overflow-y:auto}.gfp-shape-btn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 6px;background:#fff;border:2px solid #d0e4ff;border-radius:8px;cursor:pointer;transition:border-color .15s,background .15s}.gfp-shape-btn:hover{border-color:#38f;background:#f0f7ff}.gfp-shape-icon{font-size:18px;color:#38f}.gfp-shape-label{font-size:12px;font-weight:700;color:#222}.gfp-shape-sub{font-size:10px;color:#888}.gfp-draw-waiting{display:flex;flex-direction:column;align-items:center;padding:20px 14px;text-align:center;border-bottom:1px solid #eee;background:#f8f9ff}.gfp-draw-icon{font-size:32px;margin-bottom:8px}.gfp-draw-msg{font-size:13px;color:#555;line-height:1.5}.gfp-form-fields{padding:4px 14px 0;display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0}.gfp-shape-select{overflow-y:auto;flex:1;min-height:0}.gfp-geo-group{background:#f4f8ff;border:1px solid #d0e4ff;border-radius:7px;padding:10px;display:flex;flex-direction:column;gap:8px;margin-bottom:2px;min-width:0;box-sizing:border-box}.gfp-geo-row{display:flex;gap:8px;min-width:0}.gfp-geo-field{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.gfp-input-coord{font-size:12px!important;padding:5px 7px!important;width:100%;box-sizing:border-box;min-width:0}.gfp-radius-row{display:flex;align-items:center;gap:8px}.gfp-radius-unit{font-size:12px;color:#666;white-space:nowrap}.gfp-drawn-info{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:#2e7d32;background:#e8f5e9;border:1px solid #c8e6c9;border-radius:5px;padding:6px 10px}.gfp-redraw-btn{background:none;border:1px solid #81c784;border-radius:4px;color:#2e7d32;font-size:11px;padding:2px 8px;cursor:pointer}.gfp-redraw-btn:hover{background:#c8e6c9}.gfp-label{font-size:12px;color:#555;font-weight:500;margin-top:2px}.gfp-input{padding:7px 9px;border:1px solid #d0d8e4;border-radius:6px;font-size:13px;outline:none;background:#fff;width:100%;box-sizing:border-box;min-width:0}.gfp-input:focus{border-color:#38f;box-shadow:0 0 0 3px #3388ff1f}.gfp-textarea{padding:7px 9px;border:1px solid #d0d8e4;border-radius:6px;font-size:13px;outline:none;resize:vertical;min-height:52px;font-family:inherit;background:#fff}.gfp-textarea:focus{border-color:#38f;box-shadow:0 0 0 3px #3388ff1f}.gfp-color-swatches{display:flex;flex-wrap:wrap;gap:6px;padding:4px 0}.gfp-swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;transition:transform .1s,box-shadow .1s;outline:none}.gfp-swatch:hover{transform:scale(1.18);box-shadow:0 2px 6px #00000040}.gfp-swatch.selected{outline:3px solid rgba(255,255,255,.9);outline-offset:2px;transform:scale(1.18)}.gfp-check-label{display:flex;align-items:center;gap:6px;font-size:13px;color:#333;cursor:pointer}.gfp-select{padding:7px 9px;border:1px solid #d0d8e4;border-radius:6px;font-size:13px;outline:none;background:#fff}.gfp-select:focus{border-color:#38f}.gfp-form-btns{display:flex;gap:8px;justify-content:flex-end;padding:10px 14px;border-top:1px solid #e8f0ff;background:#f8faff;flex-shrink:0}.gfp-map{flex:1;min-width:0;position:relative}.gfp-map .leaflet-container{height:100%;width:100%}.map-layer-toggles{position:absolute;bottom:124px;left:10px;z-index:1000;display:flex;flex-direction:column;gap:4px;pointer-events:auto}.map-gf-toggle{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #ccc;border-radius:6px;cursor:pointer;box-shadow:0 1px 4px #0003;color:#555;font-size:16px;position:relative;transition:background .15s,color .15s,border-color .15s}.map-gf-toggle:hover{background:#f0f0f0;color:#1976d2}.map-gf-toggle.active{background:#1976d2;color:#fff;border-color:#1565c0}.map-gf-toggle:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#000000bf;color:#fff;font-size:11px;font-weight:500;padding:3px 7px;border-radius:4px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s}.map-gf-toggle:hover:after{opacity:1}.gfp-event-triggers{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.gfp-trigger-label{display:flex;align-items:center;gap:8px;cursor:pointer;padding:6px 8px;border-radius:6px;background:#f8fafc;border:1px solid #e2e8f0;transition:border-color .15s}.gfp-trigger-label:hover{border-color:#94a3b8}.gfp-trigger-badge{font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px;letter-spacing:.5px;flex-shrink:0}.gfp-trigger-enter{background:#dcfce7;color:#15803d}.gfp-trigger-exit{background:#fee2e2;color:#b91c1c}.gfp-trigger-desc{flex:1;font-size:12px;color:#64748b}.gfp-trigger-chk{display:none}.gfp-trigger-toggle{width:36px;height:20px;border-radius:10px;background:#cbd5e1;position:relative;flex-shrink:0;transition:background .2s}.gfp-trigger-toggle:after{content:"";position:absolute;width:14px;height:14px;border-radius:50%;background:#fff;top:3px;left:3px;transition:transform .2s;box-shadow:0 1px 3px #0003}.gfp-trigger-toggle.on{background:#3b82f6}.gfp-trigger-toggle.on:after{transform:translate(16px)}.gfp-event-dots{display:flex;gap:3px;align-items:center}.gfp-event-dot{width:7px;height:7px;border-radius:50%}.gfev-page{display:flex;flex-direction:column;height:100%;overflow:hidden;background:#f8fafc;--rpt-group-bg: oklch(43% .13 265);--rpt-group-bar: oklch(74% .22 268);--rpt-group-icon-bg: oklch(56% .16 268);--rpt-col-hdr-bg: oklch(96% .015 265);--rpt-col-hdr-txt: oklch(36% .07 265);--rpt-col-hdr-brd: oklch(89% .025 265);--rpt-row-border: oklch(93% .012 265);--rpt-row-even: oklch(99% .007 265);--rpt-row-hover: oklch(97% .03 265);--rpt-subtotal-bg: oklch(95% .042 265);--rpt-subtotal-txt: oklch(30% .1 265);--rpt-subtotal-stripe: oklch(78% .14 265);--rpt-text: oklch(20% .05 265);--rpt-text-muted: oklch(62% .03 265)}.gfev-toolbar{display:flex;align-items:center;gap:8px;padding:10px 16px;background:#fff;border-bottom:1px solid #e2e8f0;flex-wrap:wrap}.gfev-select{height:32px;padding:0 8px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;background:#fff;color:#374151;cursor:pointer}.gfev-select-sm{max-width:130px}.gfev-dt{height:32px;padding:0 8px;border:1px solid #d1d5db;border-radius:6px;font-size:12px;background:#fff;color:#374151}.gfev-dt:disabled{background:#f3f4f6;color:#9ca3af}.gfev-count{font-size:12px;color:#64748b;display:flex;align-items:center;gap:4px;white-space:nowrap}.gfev-status{padding:6px 14px;font-size:12px;border-bottom:1px solid #e5e7eb;flex-shrink:0}.gfev-status-error{background:#fff5f5;color:#c0392b}.gfev-status-empty{background:#fffbea;color:#92400e}.gfev-table-wrap{flex:1;overflow:auto;padding:0;background:#fff;border:1px solid var(--rpt-row-border);border-radius:10px;box-shadow:0 1px 4px #0000000a;margin:8px 12px 12px}.gfev-table{width:max-content;min-width:100%;border-collapse:collapse;font-size:13px}.gfev-table thead th{position:sticky;top:0;background:var(--rpt-col-hdr-bg);padding:9px 14px;text-align:left;font-weight:600;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--rpt-col-hdr-txt);border-bottom:1.5px solid var(--rpt-col-hdr-brd);z-index:1;white-space:nowrap}.gfev-table tbody tr{border-bottom:1px solid var(--rpt-row-border);transition:background .1s}.gfev-table tbody tr.data-row:nth-child(2n){background:var(--rpt-row-even)}.gfev-table tbody tr:hover{background:var(--rpt-row-hover)}.gfev-table thead th{background:#dde6f7}.gfev-table thead tr:hover th{background:#dde6f7!important}.gfev-table tbody tr.gfev-group-header,.gfev-table tbody tr.gfev-group-header:hover{background:var(--rpt-group-bg);cursor:default}.gfev-table tbody tr.gfev-group-header td{color:#fff;font-size:12px;font-weight:600;letter-spacing:.03em;padding:8px 14px;border-bottom:none;box-shadow:inset 4px 0 0 var(--rpt-group-bar)}.gfev-group-label{display:flex;align-items:center;gap:10px}.gfev-group-icon{width:20px;height:20px;background:var(--rpt-group-icon-bg);border-radius:4px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.gfev-group-icon svg{width:12px;height:12px;opacity:.9}.gfev-group-name{font-size:12.5px;font-weight:600;letter-spacing:.04em;white-space:nowrap}.gfev-table tbody tr.gfev-subtotal td{background:var(--rpt-subtotal-bg);color:var(--rpt-subtotal-txt);font-weight:600;font-size:12.5px;border-top:1.5px solid var(--rpt-subtotal-stripe)}.gfev-table tbody td{padding:8px 14px;color:var(--rpt-text);white-space:nowrap}.gfev-table th,.gfev-table td,.gfev-table th *,.gfev-table td *{white-space:nowrap!important;word-break:keep-all;overflow-wrap:normal}.gfev-table .gfev-col-device{min-width:120px}.gfev-table .gfev-col-duration{min-width:92px}.gfev-table .gfev-col-maxSpeed,.gfev-table .gfev-col-avgSpeed{min-width:108px}.gfev-table .gfev-col-startTime,.gfev-table .gfev-col-endTime{min-width:164px}.gfev-time{font-family:monospace;font-size:12px;white-space:nowrap}.gfev-coord{font-family:monospace;font-size:11px;color:#64748b}.gfev-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#fff}.gfev-zone-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle;flex-shrink:0}.gfev-empty{text-align:center;color:#94a3b8;padding:40px 0;font-size:13px}.gfev-row-live{animation:gfev-flash .6s ease-out}@keyframes gfev-flash{0%{background:#fef9c3}to{background:transparent}}.map-addr-search{position:absolute;bottom:106px;right:10px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end}.map-addr-toggle{width:30px;height:30px;background:#fff;border:2px solid rgba(0,0,0,.2);border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#333;box-shadow:none;transition:background .15s,color .15s}.map-addr-toggle:hover{background:#f4f4f4}.map-addr-toggle.active{background:#38f;border-color:#38f;color:#fff}.map-addr-panel{margin-top:6px;width:300px;max-width:calc(100vw - 120px)}.map-addr-input-wrap{display:flex;align-items:center;background:#fff;border-radius:6px;border:2px solid rgba(0,0,0,.2);padding:0 8px;height:32px;gap:6px;box-shadow:0 2px 8px #00000026}.map-addr-input{flex:1;border:none;outline:none;font-size:13px;background:transparent;color:#1e293b;min-width:0}.map-addr-input::placeholder{color:#94a3b8}.map-addr-clear{border:none;background:none;cursor:pointer;color:#94a3b8;font-size:12px;padding:0 2px;flex-shrink:0;line-height:1}.map-addr-clear:hover{color:#ef4444}.map-addr-spin{font-size:14px;color:#94a3b8;flex-shrink:0;animation:spin .8s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.map-addr-dropdown{list-style:none;margin:4px 0 0;padding:4px 0;background:#fff;border-radius:6px;border:1px solid #e2e8f0;box-shadow:0 4px 16px #00000026;max-height:260px;overflow-y:auto}.map-addr-item{padding:7px 12px;cursor:pointer;display:flex;flex-direction:column;gap:2px;transition:background .1s}.map-addr-item:hover{background:#f1f5f9}.map-addr-item-name{font-size:13px;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-addr-item-sub{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mm-page{display:flex;flex-direction:column;height:100%;background:#1a1a2e;overflow:hidden}.mm-tabbar{display:flex;align-items:center;justify-content:space-between;background:#edf0f5;border-bottom:2px solid #d0d5de;padding:4px 8px 0;min-height:40px;flex-shrink:0;gap:8px}.mm-tabs{display:flex;align-items:flex-end;gap:2px;flex:1;overflow-x:auto;scrollbar-width:none;padding-bottom:0}.mm-tabs::-webkit-scrollbar{display:none}.mm-tab{display:flex;align-items:center;gap:4px;padding:6px 10px;border-radius:6px 6px 0 0;cursor:pointer;font-size:12px;font-weight:500;white-space:nowrap;background:#d8dce6;color:#666;border:1px solid #c8cdd8;border-bottom:none;transition:background .12s;min-width:90px;max-width:180px;-webkit-user-select:none;user-select:none}.mm-tab:hover:not(.active){background:#e2e6f0}.mm-tab.active{background:#fff;color:#1a1a2e;border-color:#c0c6d4;font-weight:600;position:relative;margin-bottom:-2px;padding-bottom:8px}.mm-tab-name{flex:1;overflow:hidden;text-overflow:ellipsis}.mm-tab-count{font-size:10px;color:#888;background:#e0e4ef;border-radius:8px;padding:0 5px;min-width:16px;text-align:center;flex-shrink:0}.mm-tab.active .mm-tab-count{background:#dbe6ff;color:#36c}.mm-tab-input{flex:1;border:none;outline:1px solid #5b8dee;background:#fff;border-radius:2px;font-size:12px;font-weight:600;color:#1a1a2e;padding:0 3px;min-width:60px;max-width:120px}.mm-tab-close{background:none;border:none;cursor:pointer;color:#aaa;font-size:14px;line-height:1;padding:1px 3px;border-radius:3px;flex-shrink:0;transition:all .12s}.mm-tab-close:hover{color:#e53935;background:#fff0f0}.mm-tab-add{background:none;border:1px dashed #bbb;border-bottom:none;border-radius:6px 6px 0 0;cursor:pointer;color:#888;font-size:20px;line-height:1;padding:3px 12px 5px;transition:all .15s;align-self:flex-end}.mm-tab-add:hover{border-color:#5b8dee;color:#5b8dee;background:#f0f4ff}.mm-tabbar-right{display:flex;align-items:center;gap:6px;flex-shrink:0;padding-bottom:4px}.mm-select-btn{display:flex;align-items:center;background:#1a1a2e;color:#fff;border:none;border-radius:6px;padding:5px 13px;font-size:12px;cursor:pointer;transition:background .15s;font-weight:500}.mm-select-btn:hover,.mm-select-btn.active{background:#2e3a6e}.mm-clear-btn{background:none;border:1px solid #ccc;border-radius:6px;padding:4px 10px;font-size:12px;color:#888;cursor:pointer;transition:all .12s}.mm-clear-btn:hover{border-color:#e53935;color:#e53935;background:#fff5f5}.mm-main{display:flex;flex:1;overflow:hidden;min-height:0}.mm-selector{width:250px;min-width:200px;background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;flex-shrink:0;box-shadow:3px 0 12px #0000001f;z-index:10}.mm-selector-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:#1a1a2e;color:#fff;font-size:13px;font-weight:600;flex-shrink:0}.mm-selector-close{background:none;border:none;color:#aaa;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;border-radius:3px;transition:color .12s}.mm-selector-close:hover{color:#fff}.mm-selector-search{margin:8px;padding:7px 10px;border:1px solid #ddd;border-radius:6px;font-size:12px;outline:none;flex-shrink:0}.mm-selector-search:focus{border-color:#5b8dee}.mm-selector-list{flex:1;overflow-y:auto;padding:0 6px 8px}.mm-sel-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:6px;cursor:pointer;font-size:12px;transition:background .1s;-webkit-user-select:none;user-select:none}.mm-sel-item:hover:not(.disabled){background:#f0f4ff}.mm-sel-item.selected{background:#e8f0ff}.mm-sel-item.disabled{opacity:.4;cursor:not-allowed}.mm-sel-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.mm-sel-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.mm-sel-check{color:#3a7bd5;font-weight:700;font-size:13px;flex-shrink:0}.mm-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}.mm-empty-icon{font-size:52px;opacity:.7}.mm-empty-title{font-size:16px;color:#ccc;font-weight:600}.mm-empty-sub{font-size:13px;color:#888}.mm-grid{flex:1;display:grid;grid-template-columns:repeat(var(--mm-cols, 2),1fr);grid-template-rows:repeat(var(--mm-rows, 1),1fr);gap:3px;padding:3px;background:#1a1a2e;min-height:0;overflow:hidden}.mm-cell{display:flex;flex-direction:column;background:#fff;border-radius:3px;overflow:hidden;min-height:0;position:relative}.mm-cell.mm-cell-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;border-radius:0}.mm-cell-header{display:flex;align-items:center;gap:6px;padding:4px 8px;background:#0a0a1ed1;color:#fff;font-size:12px;font-weight:600;flex-shrink:0;min-height:26px}.mm-cell-status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;box-shadow:0 0 4px currentColor}.mm-cell-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mm-cell-close{background:#ffffff1f;border:none;border-radius:3px;color:#ccc;cursor:pointer;font-size:15px;line-height:1;padding:1px 5px;flex-shrink:0;transition:all .12s}.mm-cell-close:hover{background:#e53935;color:#fff}.mm-cell-map-wrap{flex:1;position:relative;min-height:0}.mm-cell-fs-btn{position:absolute;bottom:8px;right:8px;background:#ffffffe0;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:14px;padding:3px 7px;z-index:500;line-height:1;transition:all .15s}.mm-cell-fs-btn:hover,.mm-cell-fs-btn.active{background:#1a1a2e;color:#fff;border-color:#1a1a2e}.mm-cell-footer{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 10px;flex-shrink:0;min-height:28px;font-size:13px;color:#333}.mm-cell-addr{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.mm-cell-stat-text{white-space:nowrap;font-weight:700;flex-shrink:0;font-size:13px}.multi-monitor-panel{position:absolute;bottom:44px;left:50%;transform:translate(-50%);z-index:900;background:#fffffff7;border-radius:12px;box-shadow:0 6px 28px #0000002e;min-width:300px;max-width:min(900px,calc(100% - 32px));border:1px solid #e0e0e0;overflow:hidden;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.multi-monitor-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#1a1a2e;color:#fff;cursor:default;-webkit-user-select:none;user-select:none}.multi-monitor-title{font-size:13px;font-weight:600;display:flex;align-items:center;gap:5px}.multi-monitor-actions{display:flex;gap:5px;align-items:center}.mm-btn{background:#ffffff1a;border:1px solid rgba(255,255,255,.22);border-radius:4px;color:#eee;cursor:pointer;font-size:11px;padding:3px 9px;line-height:1.5;transition:background .15s}.mm-btn:hover{background:#ffffff38}.mm-btn-clear{color:#ff8a8a;border-color:#ff646473}.mm-btn-clear:hover{background:#ff505033}.monitor-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;padding:10px;max-height:240px;overflow-y:auto}.monitor-card{position:relative;background:#f8faff;border:1.5px solid #e0e8f5;border-radius:8px;padding:10px 10px 8px;cursor:pointer;transition:all .15s ease}.monitor-card:hover{background:#eef4ff;border-color:#5b8dee;box-shadow:0 2px 10px #5b8dee2e;transform:translateY(-1px)}.monitor-card-remove{position:absolute;top:5px;right:5px;background:none;border:none;color:#bbb;cursor:pointer;font-size:11px;padding:2px 5px;line-height:1;border-radius:3px}.monitor-card-remove:hover{color:#e53935;background:#fff0f0}.monitor-card-top{display:flex;align-items:center;margin-bottom:7px;padding-right:18px}.monitor-card-name-wrap{display:flex;flex-direction:column;gap:2px;overflow:hidden}.monitor-card-name{font-size:13px;font-weight:600;color:#1a1a2e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.monitor-card-stats{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:#555;margin-bottom:4px}.monitor-card-stats span{background:#f0f4ff;border-radius:4px;padding:1px 5px}.monitor-card-time{font-size:10px;color:#999;margin-bottom:2px}.monitor-card-addr{font-size:10px;color:#777;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.monitor-toggle-btn{background:none;border:1px solid #ddd;border-radius:4px;padding:3px 6px;cursor:pointer;color:#bbb;display:flex;align-items:center;justify-content:center;transition:all .15s;margin-left:auto;flex-shrink:0}.monitor-toggle-btn:hover{border-color:#5b8dee;color:#5b8dee}.monitor-toggle-btn.active{background:#5b8dee;border-color:#5b8dee;color:#fff}.hamburger-btn{display:none}@media (max-width: 768px){.sidebar{position:fixed;top:0;left:0;height:100%;z-index:1100;width:220px!important;transform:translate(-100%);transition:transform .25s ease}.sidebar.sidebar-mobile-open{transform:translate(0);box-shadow:4px 0 24px #00000073}.sidebar-overlay{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background:#00000080;z-index:1050}.sidebar-collapsed .sidebar-nav a{justify-content:flex-start;padding:11px 20px;gap:10px}.sidebar-collapsed .sidebar-nav a span{font-size:15px}.sidebar-collapsed .sidebar-logo-icon{display:none}.sidebar .sidebar-logo-full,.sidebar-footer{display:block!important}.sidebar-toggle{display:none}.main-content{width:100%}.top-bar{padding:0 10px;gap:6px}.top-bar-stats,.user-name{display:none}.top-bar-page{font-size:13px}.hamburger-btn{display:flex;align-items:center;justify-content:center;background:none;border:none;font-size:22px;line-height:1;cursor:pointer;color:#1a1a2e;padding:4px 6px;flex-shrink:0}.map-container{flex-direction:column}.map-wrapper{flex:none;height:55vh;min-height:200px;width:100%}.device-panel{width:100%!important;height:45vh;border-left:none;border-top:1px solid #e0e0e0;overflow-y:auto;padding:8px 12px;flex-shrink:0}.device-panel h3{font-size:13px;margin-bottom:6px}.device-card{padding:8px 10px}.map-gf-toggle{bottom:12px;left:8px;font-size:11px;padding:4px 8px}.map-addr-panel{width:calc(100vw - 60px);max-width:300px}.multi-monitor-panel{bottom:6px;left:4px;right:4px;transform:none;max-width:100%;min-width:0}.monitor-grid{grid-template-columns:1fr;max-height:200px}.history-toolbar{padding:8px 10px;gap:6px}.history-toolbar input[type=datetime-local]{font-size:11px;padding:5px 4px;max-width:152px}.drp-trigger{min-width:260px;font-size:12px}.drp-panel{position:fixed;left:12px;right:12px;top:76px;width:auto;max-height:calc(100vh - 96px);overflow:auto}.drp-panel-top,.drp-panel-bottom{align-items:flex-start;flex-direction:column}.drp-summary-hint{white-space:normal}.drp-body{grid-template-columns:1fr;min-height:auto}.drp-presets{border-right:0;border-bottom:1px solid #e2ebf5;flex-direction:row;overflow-x:auto}.drp-preset{white-space:nowrap}.drp-time-zone{border-left:0;border-top:1px solid #e2ebf5}.drp-actions,.drp-cancel,.drp-apply{width:100%}.history-split{flex-direction:column}.history-map-panel{width:100%!important;height:40vh;flex-shrink:0;min-width:0!important}.history-divider{display:none}.history-table-panel{width:100%!important;flex:1;min-height:0}.history-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.playback-bar{flex-wrap:wrap;padding:6px 10px;gap:6px}.playback-bar .time-label{font-size:11px;min-width:auto}.raw-toolbar{flex-wrap:wrap;padding:8px 10px;gap:6px}.raw-toolbar input[type=datetime-local]{font-size:11px;padding:5px 4px;max-width:152px}.message-table{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:0 8px 8px}.gfev-toolbar{padding:8px 10px;gap:6px}.gfev-dt{font-size:11px;max-width:152px}.gfev-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.gfev-table{min-width:560px}.gfp-layout{flex-direction:column}.gfp-left{width:100%!important;min-width:0!important;max-height:50vh;border-right:none;border-bottom:1px solid #e0e0e0;overflow-y:auto}.gfp-map{flex:none;height:50vh;min-height:200px;width:100%}.admin-page{padding:8px}.admin-tabs{width:100%}.admin-tabs button{padding:8px 12px;font-size:12.5px}.admin-sub-tabs button{padding:6px 14px;font-size:12.5px}.dc-tabs{gap:3px;padding:4px}.dc-tabs button{padding:6px 10px;font-size:12px}.dc-tabs button .dc-tab-desc{display:none}.admin-card{padding:12px 8px}.admin-card .table-scroll-wrap{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%}.admin-card .table-scroll-wrap table{min-width:640px;width:100%}.admin-card td,.admin-card th{white-space:nowrap}.login-card{width:calc(100% - 32px);padding:28px 20px}.device-select{min-width:130px}.modal-box{width:96vw!important}.modal-box.log-modal{max-height:85vh}}@media (max-width: 768px){.base-station-page{flex-direction:column}.bs-list-panel{width:100%;min-width:0;height:220px;border-right:none;border-bottom:1px solid var(--border)}.bs-map-wrap{flex:1;height:calc(100vh - 276px)}.bs-drawer{width:100%;border-left:none;border-top:1px solid var(--border)}}:root{--bs-panel-w: 300px;--bs-drawer-w: 360px}.multi-select-wrap{position:relative;flex-shrink:0}.multi-select-btn{display:flex;align-items:center;gap:6px;min-width:160px;max-width:260px;justify-content:space-between;text-align:left;background:#fff;border:1px solid var(--border);border-radius:6px;padding:5px 10px;font-size:13px;cursor:pointer;color:#333;height:32px}.multi-select-btn:hover{border-color:#bbb}.multi-select-btn.multi-select-open{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light);outline:none}.multi-select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.multi-select-arrow{flex-shrink:0;opacity:.45;font-size:10px}.multi-select-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:200;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px #0000001f;min-width:200px;max-width:300px}.multi-select-search{padding:8px 10px 6px;border-bottom:1px solid var(--border)}.multi-select-search-input{width:100%;padding:5px 8px;border:1px solid var(--border);border-radius:5px;font-size:13px;outline:none;color:#333;background:#fafafa}.multi-select-search-input:focus{border-color:var(--primary);background:#fff}.multi-select-empty{padding:10px 12px;font-size:13px;color:#aaa;text-align:center}.multi-select-actions{display:flex;gap:8px;padding:6px 12px;border-bottom:1px solid var(--border)}.multi-select-actions button{background:none;border:1px solid var(--border);border-radius:4px;padding:2px 10px;font-size:12px;cursor:pointer;color:#555}.multi-select-actions button:hover{background:#f0f2f5}.multi-select-list{max-height:240px;overflow-y:auto;padding:4px 0}.multi-select-item{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;font-size:13px;color:#333;transition:background .1s;-webkit-user-select:none;user-select:none}.multi-select-item:hover{background:#f0f2f5}.multi-select-item.selected{background:var(--primary-light);color:var(--primary-dark)}.multi-select-item input{flex-shrink:0;cursor:pointer}.addr-loading{color:#bbb;font-style:italic;font-size:12px}.gfev-muted{color:#64748b;font-style:italic}.bs-list-only-page{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.bs-page-header{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.bs-page-header .bs-search{flex:1}.bs-cards-grid{flex:1;overflow-y:auto;padding:12px 16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}.bs-empty{grid-column:1 / -1;text-align:center;color:var(--text-muted, #9ca3af);padding:48px 0;font-size:14px}.bs-conn-badge{font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px;background:var(--bg-card, #f3f4f6);color:var(--text-muted, #6b7280);margin-left:auto}.bs-card-config{font-size:11px;margin-top:2px}.bs-card-coord{font-size:11px;font-family:monospace;color:var(--text-muted, #9ca3af)}.base-station-page{display:flex;height:100%;overflow:hidden;position:relative}.bs-list-panel{width:var(--bs-panel-w);flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid var(--border);background:#fff;overflow:hidden}.bs-list-header{padding:10px 12px;display:flex;gap:8px;align-items:center;border-bottom:1px solid var(--border);flex-shrink:0}.bs-search{flex:1;padding:6px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;outline:none}.bs-search:focus{border-color:var(--primary)}.bs-list{flex:1;overflow-y:auto;padding:6px 0}.bs-empty{padding:24px 16px;color:#9ca3af;text-align:center;font-size:13px}.bs-card{padding:10px 14px;cursor:pointer;border-bottom:1px solid #f3f4f6;transition:background .15s}.bs-card:hover{background:#f9fafb}.bs-card-selected{background:#eff6ff;border-left:3px solid var(--primary)}.bs-card-row{display:flex;align-items:center;gap:6px;margin-bottom:3px}.bs-name{font-weight:600;font-size:13px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bs-conn-type{font-size:10px;padding:1px 5px;border-radius:4px;background:#e0e7ff;color:#3730a3;font-weight:600;flex-shrink:0}.bs-card-meta{font-size:12px;color:#6b7280;margin-left:18px;line-height:1.5}.bs-card-actions{display:flex;gap:8px;margin-top:4px;margin-left:18px}.bs-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}.dot-online{background:#22c55e;box-shadow:0 0 0 2px #bbf7d0}.dot-offline{background:#9ca3af}.bs-map-wrap{flex:1;min-width:0;position:relative}.bs-map-wrap .leaflet-container{width:100%;height:100%}.bs-drawer{width:var(--bs-drawer-w);flex-shrink:0;border-left:1px solid var(--border);background:#fff;display:flex;flex-direction:column;overflow:hidden}.bs-drawer-header{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.bs-drawer-tabs{display:flex;border-bottom:1px solid var(--border);overflow-x:auto;flex-shrink:0}.bs-tab{padding:8px 12px;border:none;background:none;cursor:pointer;font-size:12px;color:#6b7280;white-space:nowrap;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.bs-tab:hover{color:var(--primary)}.bs-tab-active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.bs-drawer-body{flex:1;overflow-y:auto;padding:14px 16px}.bs-tab-hint{font-size:12px;color:#6b7280;margin-bottom:12px;line-height:1.5}.bs-stat-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid #f3f4f6;font-size:13px}.bs-stat-label{color:#6b7280}.bs-msg-grid{display:flex;flex-direction:column;gap:6px;margin-top:4px}.bs-msg-item{display:flex;align-items:center;gap:8px;font-size:12px;cursor:pointer}.bs-msg-item input{accent-color:var(--primary)}.bs-log-item{padding:8px 0;border-bottom:1px solid #f3f4f6}.bs-log-row{display:flex;justify-content:space-between;align-items:center;gap:8px}.bs-log-cmd{font-size:12px;font-family:monospace;color:#374151;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bs-log-status{font-size:11px;padding:1px 6px;border-radius:4px;font-weight:600;flex-shrink:0}.status-pending{background:#fffbeb;color:#92400e;border-left-color:#f59e0b}.status-sent{background:#eff6ff;color:#1e40af;border-left-color:#3b82f6}.status-acked{background:#f0fdf4;color:#166534;border-left-color:#22c55e}.status-failed{background:#fef2f2;color:#991b1b;border-left-color:#ef4444}.bs-log-meta{font-size:11px;color:#9ca3af;margin-top:3px}.bs-table{width:100%;border-collapse:collapse;font-size:12px}.bs-table th{text-align:left;padding:5px 8px;border-bottom:2px solid var(--border);color:#6b7280;font-weight:600}.bs-table td{padding:5px 8px;border-bottom:1px solid #f3f4f6}.bs-radio-group{display:flex;flex-direction:column;gap:8px}.bs-radio{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}.bs-radio input{accent-color:var(--primary)}.dc-form .bs-radio-group{display:flex;flex-direction:column;gap:8px}.dc-form .bs-radio{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1.5px solid var(--border);border-radius:8px;cursor:pointer;font-size:13px;color:#374151;background:#fff;transition:border-color .15s,background .15s}.dc-form .bs-radio:hover{border-color:#93c5fd;background:#f0f7ff}.dc-form .bs-radio:has(input:checked){border-color:var(--primary);background:var(--primary-light);color:#1e3a8a;font-weight:500}.dc-form .bs-radio input[type=radio]{accent-color:var(--primary);flex-shrink:0}.cmd-status-bar{padding:10px 14px;border-radius:8px;font-size:13px;font-weight:500;border-left:4px solid transparent}.text-success{color:#22c55e}.text-muted{color:#9ca3af}.form-success{padding:8px 12px;background:#dcfce7;color:#166534;border-radius:6px;font-size:13px;margin-bottom:8px}.form-label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#6b7280;margin-bottom:6px;margin-top:18px}.form-label:first-child{margin-top:0}.form-select,.form-input{width:100%;padding:9px 12px;border:1.5px solid var(--border);border-radius:8px;font-size:14px;color:#1a1a2e;background:#fff;transition:border-color .15s,box-shadow .15s}.form-select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;-moz-appearance:none;appearance:none;-webkit-appearance:none;cursor:pointer}.form-select:focus,.form-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.form-error{padding:8px 12px;background:#fee2e2;color:#991b1b;border-radius:6px;font-size:13px;margin-bottom:12px;border-left:4px solid #ef4444}.dc-tabs{display:flex;gap:4px;padding:5px;background:#e9ecf0;border-radius:12px;flex-wrap:wrap}.dc-tabs button{display:flex;flex-direction:column;align-items:center;padding:8px 16px;background:transparent;border:none;border-radius:8px;font-size:13px;font-weight:600;color:#6b7280;cursor:pointer;transition:background .15s,color .15s,box-shadow .15s;line-height:1.3;white-space:nowrap}.dc-tabs button .dc-tab-label{display:none}.dc-tabs button .dc-tab-desc{font-size:13px;font-weight:600;color:inherit}.dc-tabs button:hover{background:#fff9;color:#374151}.dc-tabs button.active{background:#fff;color:#1a1a2e;box-shadow:0 1px 4px #0000001f}.dc-tabs button.active .dc-tab-desc{color:var(--primary)}.dc-page{padding:20px 24px;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.dc-toolbar{display:flex;align-items:flex-end;gap:24px;flex-wrap:wrap;padding:16px 20px;box-shadow:0 2px 8px #00000014!important;border-radius:10px!important}.dc-toolbar-group{display:flex;flex-direction:column;gap:4px}.dc-password-input{width:120px}.dc-readonly-badge{margin-left:auto;padding:4px 12px;background:#fef3c7;color:#92400e;border-radius:20px;font-size:12px;font-weight:600;align-self:center}.dc-no-device{color:#9ca3af;font-size:14px;text-align:center;padding:48px 20px}.dc-tab-body{flex:1;border-radius:12px!important;box-shadow:0 2px 12px #00000014!important}.dc-tab-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;padding-bottom:12px;border-bottom:1px solid var(--border)}.dc-tab-header h3{font-size:15px;font-weight:600;color:#1a1a2e}.dc-form{display:flex;flex-direction:column;max-width:580px}.dc-form-actions{margin-top:18px;display:flex;justify-content:flex-end}.dc-form .btn-primary{background:linear-gradient(135deg,#38f,#1a6fd4);box-shadow:0 2px 6px #3388ff59;border-radius:8px;transition:box-shadow .15s,transform .1s}.dc-form .btn-primary:hover:not(:disabled){box-shadow:0 4px 12px #3388ff73;transform:translateY(-1px)}.dc-form .btn-primary:active:not(:disabled){transform:translateY(0);box-shadow:0 1px 4px #3388ff4d}.dc-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.dc-hint{font-size:12px;color:#9ca3af;margin-top:8px;text-align:right}.dc-tab-desc{font-size:11px;color:#9ca3af;font-weight:400}.dc-subtabs{display:flex;gap:6px;margin-bottom:18px;flex-wrap:wrap}.dc-subtabs button{padding:5px 14px;background:#f3f4f6;border:1px solid #d1d5db;border-radius:6px;font-size:13px;cursor:pointer;color:#374151;transition:background .15s}.dc-subtabs button:hover{background:#e5e7eb}.dc-subtabs button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.dc-readonly-table{width:100%;border-collapse:collapse;font-size:13px;max-width:580px}.dc-readonly-table th{text-align:left;padding:6px 12px;border-bottom:2px solid var(--border);color:#6b7280;font-size:12px;font-weight:600}.dc-readonly-label{padding:6px 12px;color:#6b7280;font-size:13px;border-bottom:1px solid #f3f4f6;width:45%}.dc-readonly-val{padding:6px 12px;font-family:Courier New,monospace;font-size:13px;border-bottom:1px solid #f3f4f6;color:#1a1a2e}.dc-unit{font-size:11px;color:#9ca3af;font-family:inherit}.dc-section-row{padding:8px 12px 4px;font-size:11px;font-weight:700;color:#9ca3af;text-transform:uppercase;letter-spacing:.06em;background:#f9fafb;border-bottom:1px solid var(--border)}.dc-readonly-section{margin-top:16px;padding:12px;background:#f9fafb;border-radius:6px;border:1px solid var(--border)}.dc-ecef-grid{display:grid;grid-template-columns:20px 1fr;gap:4px 8px;font-family:Courier New,monospace;font-size:13px;margin-top:4px}.dc-ecef-label{font-weight:700;color:#6b7280}.dc-ecef-val{color:#1a1a2e}.bs2-page{--bs2-bg: #fafafa;--bs2-surface: #ffffff;--bs2-border: #e6e6eb;--bs2-border-s: #f0f0f3;--bs2-text: #0b0d12;--bs2-text2: #4b5565;--bs2-text3: #8a94a6;--bs2-green: #16a34a;--bs2-red: #dc2626;--bs2-amber: #d97706;--bs2-blue: #2563eb;--bs2-radius: 8px;--bs2-shadow: 0 1px 3px rgba(16,24,40,.06), 0 1px 2px rgba(16,24,40,.04);display:flex;flex-direction:column;gap:14px;height:100%;overflow:hidden;padding:20px 24px;background:var(--bs2-bg);box-sizing:border-box;font-family:Inter,-apple-system,system-ui,sans-serif;color:var(--bs2-text);font-size:13.5px}.bs2-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex-shrink:0;background:var(--bs2-surface);border:1px solid var(--bs2-border);border-radius:var(--bs2-radius);padding:10px 12px;box-shadow:var(--bs2-shadow)}.bs2-toolbar-right{margin-left:auto;display:flex;gap:8px}.bs2-search{display:flex;align-items:center;gap:8px;flex:1;min-width:180px;height:34px;padding:0 10px;background:#f5f5f7;border:1px solid transparent;border-radius:8px;color:var(--bs2-text3);transition:border-color .12s,background .12s}.bs2-search:focus-within{background:var(--bs2-surface);border-color:var(--bs2-blue);box-shadow:0 0 0 3px #2563eb1f}.bs2-search input{flex:1;border:0;outline:0;background:transparent;font:inherit;font-size:13px;color:var(--bs2-text)}.bs2-search input::placeholder{color:var(--bs2-text3)}.bs2-seg{display:flex;border:1px solid var(--bs2-border);border-radius:8px;overflow:hidden;background:#f5f5f7}.bs2-seg button{display:inline-flex;align-items:center;gap:5px;font:inherit;font-size:12px;font-weight:500;padding:6px 11px;background:transparent;border:0;color:var(--bs2-text2);cursor:pointer;white-space:nowrap}.bs2-seg button+button{border-left:1px solid var(--bs2-border)}.bs2-seg button.on{background:var(--bs2-surface);color:var(--bs2-text);box-shadow:inset 0 0 0 1px var(--bs2-border)}.bs2-seg-dot{width:6px;height:6px;border-radius:999px;display:inline-block}.bs2-seg-count{color:var(--bs2-text3);font-size:11px}.bs2-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;font:inherit;font-size:13px;font-weight:500;cursor:pointer;border:1px solid var(--bs2-border);background:var(--bs2-surface);color:var(--bs2-text);box-shadow:0 1px 2px #1018280a;white-space:nowrap;transition:background .12s,border-color .12s}.bs2-btn:hover{background:#f5f5f7;border-color:#d5d5dc}.bs2-btn:disabled{opacity:.55;cursor:not-allowed}.bs2-btn-primary{background:var(--bs2-blue);color:#fff;border-color:var(--bs2-blue);box-shadow:0 1px 2px #2563eb40}.bs2-btn-primary:hover{background:#1d4ed8;border-color:#1d4ed8}.bs2-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--bs2-surface);border:1px solid var(--bs2-border);border-radius:10px;box-shadow:var(--bs2-shadow);overflow:hidden}.bs2-table-wrap{flex:1;overflow:auto}.bs2-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px}.bs2-table thead th{position:sticky;top:0;z-index:2;background:var(--bs2-surface);text-align:left;font-weight:500;font-size:11.5px;color:var(--bs2-text3);letter-spacing:.03em;padding:10px 16px;border-bottom:1px solid var(--bs2-border);white-space:nowrap;-webkit-user-select:none;user-select:none}.bs2-table tbody td{padding:12px 16px;border-bottom:1px solid var(--bs2-border-s);vertical-align:middle}.bs2-table tbody tr:last-child td{border-bottom:0}.bs2-table tbody tr{cursor:pointer;transition:background .1s}.bs2-table tbody tr:hover{background:#f8f8fa}.bs2-table tbody tr.bs2-row-active{background:#eff6ff}.bs2-empty{text-align:center;color:var(--bs2-text3);padding:56px 16px;font-size:13.5px}.bs2-table-foot{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-top:1px solid var(--bs2-border-s);font-size:12px;color:var(--bs2-text2);background:#f8f8fa;flex-shrink:0}.bs2-name{font-weight:600;font-size:13.5px;color:var(--bs2-text)}.bs2-sub{font-size:11.5px;color:var(--bs2-text3);margin-top:1px}.bs2-avatar{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;flex-shrink:0;font-size:11px;font-weight:700;font-family:JetBrains Mono,ui-monospace,monospace;letter-spacing:.02em}.bs2-avatar-on{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e3a8a;border:1px solid #bfdbfe}.bs2-avatar-off{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#64748b;border:1px solid #e2e8f0}.bs2-avatar-warn{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;border:1px solid #fde68a}.bs2-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500}.bs2-status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0}.bs2-status-online .bs2-status-dot{background:var(--bs2-green);animation:bs2-pulse-green 2s ease-out infinite}.bs2-status-offline .bs2-status-dot{background:#cbd5e1}.bs2-status-warn .bs2-status-dot{background:var(--bs2-amber)}@keyframes bs2-pulse-green{0%,to{box-shadow:0 0 #16a34a66}50%{box-shadow:0 0 0 5px #16a34a00}}.bs2-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:5px;font-size:11.5px;font-weight:500;background:#f5f5f7;color:var(--bs2-text2);border:1px solid var(--bs2-border);white-space:nowrap}.bs2-tag-blue{background:#dbeafe;color:#1e3a8a;border-color:#c7d7fe}.bs2-tag-green{background:#dcfce7;color:#14532d;border-color:#bbf7d0}.bs2-rovers{display:flex;flex-direction:column;gap:5px;min-width:110px}.bs2-rovers-label{display:flex;align-items:baseline;gap:0;font-size:12px}.bs2-rovers-count{font-weight:600;color:var(--bs2-text)}.bs2-rovers-max{color:var(--bs2-text3)}.bs2-rovers-pct{margin-left:auto;color:var(--bs2-text3);font-size:11px}.bs2-rovers-track{height:4px;border-radius:999px;background:#ececf0;overflow:hidden}.bs2-rovers-fill{height:100%;border-radius:999px;transition:width .4s}.bs2-row-actions{display:inline-flex;gap:2px;opacity:0;transition:opacity .15s}tr:hover .bs2-row-actions{opacity:1}.bs2-action-btn{width:28px;height:28px;display:grid;place-items:center;border:0;background:transparent;border-radius:6px;color:var(--bs2-text3);cursor:pointer;transition:background .1s,color .1s}.bs2-action-btn:hover{background:#ececf0;color:var(--bs2-text)}.bs2-action-danger:hover{background:#fee2e2;color:var(--bs2-red)}.bs2-icon-btn{width:30px;height:30px;display:grid;place-items:center;border:0;background:transparent;border-radius:6px;color:var(--bs2-text2);cursor:pointer;font-size:14px;transition:background .1s}.bs2-icon-btn:hover{background:#f5f5f7}.bs2-modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0b0d1247;z-index:50;display:grid;place-items:center}.bs2-modal{background:var(--bs2-surface);border:1px solid var(--bs2-border);border-radius:12px;box-shadow:0 20px 60px #10182826;width:100%;max-width:480px;overflow:hidden}.bs2-modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--bs2-border)}.bs2-modal-title{font-size:15px;font-weight:600;color:var(--bs2-text)}.bs2-modal-body{padding:20px;display:flex;flex-direction:column;gap:6px}.bs2-modal-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.bs2-label{font-size:12px;font-weight:500;color:var(--bs2-text2);margin-bottom:2px;margin-top:8px}.bs2-label:first-of-type{margin-top:0}.bs2-input{width:100%;padding:7px 10px;border:1px solid var(--bs2-border);border-radius:8px;font:inherit;font-size:13px;color:var(--bs2-text);background:var(--bs2-surface);outline:none;box-sizing:border-box;transition:border-color .12s,box-shadow .12s}.bs2-input:focus{border-color:var(--bs2-blue);box-shadow:0 0 0 3px #2563eb1f}.bs2-form-error{background:#fee2e2;color:#991b1b;padding:8px 12px;border-radius:6px;font-size:12.5px;border:1px solid #fecaca}.user-table-row:hover{background:#fafbfd}.expiry-unset{color:#94a3b8}.user-table-row:hover .expiry-unset{color:#0ea5e9}.dashboard-page{display:flex;flex-direction:column;height:100%;overflow:hidden;background:#eef0f6;font-family:Noto Sans TC,Plus Jakarta Sans,system-ui,sans-serif;--db-bg: #EEF0F6;--db-card: #fff;--db-border: #E2E6EF;--db-text: #111827;--db-text2: #5C6478;--db-text3: #9CA3AF;--db-blue: #2B6CDB;--db-blue-lt: #EEF4FF;--db-green: #15B77A;--db-green-lt:#E8FAF3;--db-orange: #F5A623;--db-orange-lt:#FEF5E4;--db-red: #E53935;--db-red-lt: #FEECEB;--db-accent: #3A7BFC;--db-mono: "IBM Plex Mono", "Courier New", monospace;--db-r: 8px}.db-toolbar{background:var(--db-card);border-bottom:1px solid var(--db-border);padding:0 20px;height:52px;display:flex;align-items:center;gap:8px;flex-shrink:0}.db-toolbar-title{font-size:15px;font-weight:700;color:var(--db-text);white-space:nowrap}.db-tb-sep{width:1px;height:22px;background:var(--db-border);flex-shrink:0}.db-tb-filter{display:flex;align-items:center;gap:6px;padding:5px 11px;background:var(--db-bg);border:1px solid var(--db-border);border-radius:6px;font-size:12px;color:var(--db-text2);cursor:pointer;transition:border .12s;white-space:nowrap;font-family:inherit}.db-tb-filter:hover{border-color:#c0c8d8}.db-tb-filter svg{fill:var(--db-text3);flex-shrink:0}.db-tb-right{margin-left:auto;display:flex;align-items:center;gap:6px}.db-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 13px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .12s;font-family:inherit;white-space:nowrap;text-decoration:none}.db-btn-ghost{background:transparent;color:var(--db-text2);border-color:var(--db-border)}.db-btn-ghost:hover{background:var(--db-bg);border-color:#c0c8d8}.db-btn-primary{background:var(--db-blue);color:#fff;border-color:var(--db-blue)}.db-btn-primary:hover{background:#2460c4}.db-btn-subtle{background:var(--db-bg);color:var(--db-text2);border-color:var(--db-border)}.db-btn-subtle:hover{background:#e4e7f0}.db-tab-bar{background:var(--db-card);border-bottom:1px solid var(--db-border);padding:0 20px;display:flex;align-items:center;flex-shrink:0;overflow-x:auto;scrollbar-width:none}.db-tab-bar::-webkit-scrollbar{display:none}.db-tab{padding:0 14px;height:42px;display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--db-text2);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;transition:all .12s;flex-shrink:0}.db-tab:hover{color:var(--db-text)}.db-tab.active{color:var(--db-blue);border-bottom-color:var(--db-blue);font-weight:600}.db-tab-dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.5;flex-shrink:0}.db-tab.active .db-tab-dot{opacity:1}.db-dash-area{flex:1;overflow-y:auto;overflow-x:hidden;padding:18px 20px 80px;scrollbar-width:thin;scrollbar-color:#C8CDD8 transparent;min-height:0}.db-dash-area::-webkit-scrollbar{width:5px}.db-dash-area::-webkit-scrollbar-track{background:transparent}.db-dash-area::-webkit-scrollbar-thumb{background:#c8cdd8;border-radius:4px}.db-loading{display:flex;align-items:center;justify-content:center;height:200px;color:var(--db-text3);font-size:14px}.db-grid{min-height:200px}.db-card{background:var(--db-card);border:1px solid var(--db-border);border-radius:var(--db-r);display:flex;flex-direction:column;height:100%;overflow:hidden;transition:box-shadow .15s}.db-card:hover{box-shadow:0 2px 12px #00000012}.react-grid-item.react-dragging .db-card{box-shadow:0 12px 32px #00000024;transform:rotate(1.2deg) scale(1.015);z-index:50}.db-card-hd{display:flex;align-items:center;gap:6px;padding:12px 14px 0;flex-shrink:0}.db-card-drag{color:#c8cdd8;cursor:grab;font-size:13px;flex-shrink:0;line-height:1;padding:2px;letter-spacing:-1px;-webkit-user-select:none;user-select:none}.db-card-drag:active{cursor:grabbing}.db-card-ttl{font-size:11.5px;font-weight:600;color:var(--db-text2);letter-spacing:.02em;flex:1;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.db-card-acts{display:flex;align-items:center;gap:2px;flex-shrink:0}.db-card-act{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:#bcc2d0;cursor:pointer;border-radius:4px;font-size:13px;transition:all .1s;flex-shrink:0}.db-card-act:hover{background:var(--db-bg);color:var(--db-text2)}.db-card-act:hover svg{fill:var(--db-text2)}.db-card-bd{flex:1;padding:10px 14px 14px;overflow:hidden;display:flex;flex-direction:column}.db-placeholder{flex:1;display:flex;align-items:center;justify-content:center;color:var(--db-text3);font-size:13px;text-align:center;padding:16px}.db-kpi-val{font-size:30px;font-weight:700;color:var(--db-text);line-height:1;font-family:var(--db-mono)}.db-kpi-unit{font-size:13px;color:var(--db-text3);font-weight:400;margin-left:3px}.db-kpi-badge{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px;margin-top:8px}.db-badge-green{background:var(--db-green-lt);color:#0d8a5c}.db-badge-red{background:var(--db-red-lt);color:#c62828}.db-badge-orange{background:var(--db-orange-lt);color:#b87214}.db-kpi-sub{font-size:10.5px;color:var(--db-text3);margin-top:5px}.db-kpi-bar{height:3px;background:#eef0f6;border-radius:2px;margin-top:12px;overflow:hidden}.db-kpi-bar-fill{height:100%;border-radius:2px}.db-lt{width:100%;border-collapse:collapse;flex:1}.db-lt th{font-size:10px;font-weight:600;color:var(--db-text3);text-align:left;padding:0 0 8px;border-bottom:1px solid var(--db-bg);letter-spacing:.04em;text-transform:uppercase}.db-lt td{font-size:12px;color:var(--db-text2);padding:8px 0;border-bottom:1px solid #F4F6FA}.db-lt tr:last-child td{border-bottom:none}.db-sev{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:10.5px;font-weight:600}.db-sev-hi{background:var(--db-red-lt);color:var(--db-red)}.db-sev-md{background:var(--db-orange-lt);color:#b87214}.db-sev-lo{background:#f3f4f6;color:#6b7280}.db-mono{font-family:var(--db-mono)}.db-anomaly-list{display:flex;flex-direction:column;gap:8px;flex:1;overflow-y:auto}.db-anomaly-item{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;background:var(--db-bg);border-radius:6px;border:1px solid #FECACA}.db-anomaly-item.warn{border-color:#fde68a}.db-sdot{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-top:4px}.db-sdot-err{background:var(--db-red)}.db-sdot-warn{background:var(--db-orange)}.db-anomaly-plate{font-size:11px;font-weight:600;color:var(--db-text);font-family:var(--db-mono)}.db-anomaly-driver{font-size:10.5px;color:var(--db-text3);margin-left:6px}.db-anomaly-issue-err{font-size:11.5px;color:var(--db-red);margin-top:2px}.db-anomaly-issue-warn{font-size:11.5px;color:var(--db-orange);margin-top:2px}.db-anomaly-since{font-size:10px;color:var(--db-text3);margin-top:1px}.db-gauge-wrap{display:flex;flex-direction:column;align-items:center;padding-top:4px}.db-gauge-svg{overflow:visible}.db-gauge-score{font-size:24px;font-weight:700;font-family:var(--db-mono);text-anchor:middle;dominant-baseline:middle}.db-gauge-label{font-size:11px;fill:var(--db-text3);text-anchor:middle}.db-gauge-stats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;margin-top:12px;width:100%}.db-gauge-stat{text-align:center;background:var(--db-bg);border-radius:5px;padding:6px 4px}.db-gauge-stat-val{font-size:14px;font-weight:700;font-family:var(--db-mono)}.db-gauge-stat-lbl{font-size:9.5px;color:var(--db-text3);margin-top:1px}.db-drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0c1459;z-index:200;animation:db-fadeIn .15s ease}.db-drawer{position:fixed;top:0;right:0;bottom:0;width:400px;background:#fff;box-shadow:-6px 0 32px #0000001f;z-index:201;display:flex;flex-direction:column;animation:db-slideIn .22s ease}@keyframes db-slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes db-fadeIn{0%{opacity:0}to{opacity:1}}.db-drawer-hd{padding:18px 18px 14px;border-bottom:1px solid #E2E6EF;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.db-drawer-title{font-size:14px;font-weight:700;color:#111827}.db-drawer-sub{font-size:11px;color:#9ca3af;margin-top:1px}.db-drawer-close{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:#9ca3af;cursor:pointer;border-radius:6px;font-size:16px;flex-shrink:0}.db-drawer-close:hover{background:#eef0f6;color:#5c6478}.db-drawer-tabs{display:flex;padding:0 14px;border-bottom:1px solid #E2E6EF;overflow-x:auto;scrollbar-width:none;flex-shrink:0}.db-drawer-tabs::-webkit-scrollbar{display:none}.db-dtab{padding:0 10px;height:38px;font-size:12px;color:#9ca3af;cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;display:flex;align-items:center;transition:all .12s;flex-shrink:0}.db-dtab.active{color:#2b6cdb;border-bottom-color:#2b6cdb;font-weight:600}.db-dtab:not(.active):hover{color:#5c6478}.db-drawer-body{flex:1;overflow-y:auto;padding:14px;scrollbar-width:thin;scrollbar-color:#C8CDD8 transparent}.db-comp-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.db-comp-card{border:1px solid #E2E6EF;border-radius:7px;padding:11px;cursor:pointer;transition:all .15s}.db-comp-card:hover{border-color:#93c5fd;background:#f4f8ff;box-shadow:0 2px 8px #3a7bfc1a}.db-comp-preview{height:60px;background:#f7f9fc;border-radius:5px;margin-bottom:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:28px}.db-comp-name{font-size:12px;font-weight:600;color:#111827;line-height:1.3}.db-comp-desc{font-size:10.5px;color:#9ca3af;margin-top:2px;line-height:1.4}.db-comp-tag{display:inline-block;font-size:10px;padding:1px 7px;border-radius:10px;margin-top:5px;font-weight:500}.db-tag-ops{background:#eef4ff;color:#2b6cdb}.db-tag-esg{background:#e8faf3;color:#0d8a5c}.db-tag-cost{background:#fef5e4;color:#b87214}.db-tag-safe{background:#feeceb;color:#c62828}.db-tag-map{background:#f3f0ff;color:#7c3aed}.db-tag-anom{background:#fff0f0;color:#c62828}.db-drawer-footer{padding:12px 14px;border-top:1px solid #E2E6EF;flex-shrink:0}.db-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0c1473;z-index:300;display:flex;align-items:center;justify-content:center;animation:db-fadeIn .15s ease}.db-modal{background:#fff;border-radius:12px;width:480px;max-height:84vh;display:flex;flex-direction:column;box-shadow:0 24px 64px #0000002e;animation:db-popIn .2s ease}@keyframes db-popIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.db-modal-hd{padding:18px 22px 14px;border-bottom:1px solid #E2E6EF;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.db-modal-title{font-size:14px;font-weight:700;color:#111827}.db-modal-sub{font-size:11px;color:#9ca3af;margin-top:1px}.db-modal-body{padding:18px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.db-form-sec-ttl{font-size:10.5px;font-weight:700;color:#9ca3af;letter-spacing:.08em;text-transform:uppercase;margin-bottom:10px}.db-form-row{margin-bottom:12px}.db-form-lbl{font-size:11.5px;color:#5c6478;font-weight:500;margin-bottom:5px;display:block}.db-form-inp{width:100%;padding:8px 11px;border:1px solid #E2E6EF;border-radius:6px;font-size:13px;color:#111827;background:#fff;font-family:inherit;transition:border .12s,box-shadow .12s}.db-form-inp:focus{outline:none;border-color:#93c5fd;box-shadow:0 0 0 3px #3a7bfc1f}.db-form-row-2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.db-chart-types{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.db-ct-opt{border:1px solid #E2E6EF;border-radius:6px;padding:8px 4px;text-align:center;cursor:pointer;transition:all .12s}.db-ct-opt:hover{border-color:#93c5fd;background:#eef4ff}.db-ct-opt.active{border-color:#2b6cdb;background:#eef4ff}.db-ct-icon{font-size:18px;margin-bottom:2px}.db-ct-lbl{font-size:10px;color:#5c6478}.db-color-opts{display:flex;gap:8px}.db-col-opt{width:26px;height:26px;border-radius:50%;cursor:pointer;border:2px solid transparent;transition:all .12s}.db-col-opt.active{border-color:#1a1f2e;box-shadow:0 0 0 2px #fff,0 0 0 4px #1a1f2e}.db-modal-ft{padding:14px 22px;border-top:1px solid #E2E6EF;display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.db-grid .react-resizable-handle{z-index:10}.db-grid .react-grid-item.react-grid-placeholder{background:#3a7bfc;opacity:.12;border-radius:8px}.db-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--db-text3);font-size:13px;text-align:center}.db-empty-icon{font-size:40px;opacity:.4}.db-toast{position:fixed;bottom:28px;right:28px;z-index:3000;padding:10px 18px;border-radius:8px;font-size:13px;font-weight:600;box-shadow:0 4px 16px #00000024;animation:db-fadeIn .18s ease;pointer-events:none;white-space:nowrap}.db-toast-ok{background:#15b77a;color:#fff}.db-toast-err{background:#e53935;color:#fff}.db-tpl-list{display:flex;flex-direction:column;gap:2px}.db-tpl-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;background:#f8f9fb;border:1px solid var(--db-border)}.db-tpl-dot{width:8px;height:8px;border-radius:50%;background:#d1d5db;flex-shrink:0}.db-tpl-dot-active{background:var(--db-blue)}.db-tpl-name{flex:1;font-size:13px;font-weight:500;color:var(--db-text)}.db-tpl-badge{font-size:11px;font-weight:600;padding:2px 7px;border-radius:10px}.db-tpl-badge-active{background:var(--db-blue-lt);color:var(--db-blue)}.db-tpl-badge-custom{background:var(--db-orange-lt);color:var(--db-orange)}.db-tpl-reset-btn{font-size:12px;padding:4px 10px;flex-shrink:0}.db-tpl-reset-btn:disabled{opacity:.35;cursor:not-allowed}.ntf-page{--ntf-surface: #ffffff;--ntf-border: #e2e8f0;--ntf-border-md: #cbd5e1;--ntf-blue: #2563eb;--ntf-blue-dk: #1d4ed8;--ntf-blue-bg: #eff6ff;--ntf-green: #16a34a;--ntf-green-bg: #f0fdf4;--ntf-red: #dc2626;--ntf-red-bg: #fef2f2;--ntf-slate: #64748b;--ntf-text: #0f172a;--ntf-text-2: #475569;--ntf-text-3: #94a3b8;--ntf-bg: #f0f2f6;--ntf-radius-sm: 6px;--ntf-radius: 10px;--ntf-radius-lg: 14px;--ntf-shadow-sm: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);--ntf-shadow-lg: 0 16px 48px rgba(15, 23, 42, .16), 0 4px 12px rgba(15, 23, 42, .08);color:var(--ntf-text)}.ntf-section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:22px}.ntf-title{font-size:16px;font-weight:700;color:var(--ntf-text)}.ntf-desc{font-size:13px;color:var(--ntf-text-3);margin-top:3px}.ntf-header-actions{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.ntf-card{background:var(--ntf-surface);border:1px solid var(--ntf-border);border-radius:var(--ntf-radius-lg);overflow:hidden;box-shadow:var(--ntf-shadow-sm)}.ntf-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border-radius:var(--ntf-radius);font-size:13.5px;font-weight:500;font-family:inherit;cursor:pointer;border:none;transition:all .14s;white-space:nowrap}.ntf-btn-primary{background:var(--ntf-blue);color:#fff}.ntf-btn-primary:hover:not(:disabled){background:var(--ntf-blue-dk)}.ntf-btn-ghost{background:transparent;color:var(--ntf-text-2);border:1.5px solid var(--ntf-border-md)}.ntf-btn-ghost:hover:not(:disabled){background:var(--ntf-bg);border-color:var(--ntf-slate)}.ntf-btn:disabled{opacity:.55;cursor:not-allowed}.ntf-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--ntf-radius-sm);background:transparent;cursor:pointer;color:var(--ntf-text-3);transition:all .13s}.ntf-icon-btn:hover{background:var(--ntf-bg);color:var(--ntf-text)}.ntf-icon-btn-danger:hover{background:var(--ntf-red-bg);color:var(--ntf-red)}.ntf-table-wrap{overflow-x:auto}.ntf-table{width:100%;border-collapse:collapse;min-width:760px}.ntf-table th{padding:10px 16px;text-align:left;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ntf-text-3);border-bottom:1.5px solid var(--ntf-border);white-space:nowrap}.ntf-table td{padding:13px 16px;border-bottom:1px solid var(--ntf-border);vertical-align:middle}.ntf-table tbody tr:last-child td{border-bottom:none}.ntf-table tbody tr:hover td{background:#fafbfc}.ntf-name{font-weight:600;font-size:13.5px;color:var(--ntf-text)}.ntf-sub{font-size:12.5px;color:var(--ntf-text-2)}.ntf-muted{font-size:12.5px;color:var(--ntf-text-3)}.ntf-badges{display:flex;flex-wrap:wrap;gap:5px}.ntf-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:500}.ntf-badge-blue{background:var(--ntf-blue-bg);color:var(--ntf-blue)}.ntf-badge-slate{background:#f1f5f9;color:var(--ntf-slate)}.ntf-toggle{position:relative;display:inline-flex;width:36px;height:20px;flex-shrink:0}.ntf-toggle input{opacity:0;width:0;height:0;position:absolute}.ntf-toggle-track{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--ntf-border-md);border-radius:999px;cursor:pointer;transition:background .2s}.ntf-toggle-track:before{content:"";position:absolute;width:14px;height:14px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .2s;box-shadow:0 1px 3px #0003}.ntf-toggle input:checked~.ntf-toggle-track{background:var(--ntf-blue)}.ntf-toggle input:checked~.ntf-toggle-track:before{transform:translate(16px)}.ntf-status{display:flex;align-items:center;gap:8px}.ntf-status-text{font-size:12px;font-weight:500;color:var(--ntf-text-3)}.ntf-status-text.active{color:var(--ntf-green)}.ntf-empty{display:flex;flex-direction:column;align-items:center;padding:56px 40px;gap:14px;text-align:center}.ntf-empty-icon{width:52px;height:52px;border-radius:14px;background:var(--ntf-bg);display:flex;align-items:center;justify-content:center;color:var(--ntf-text-2)}.ntf-empty-label{font-size:14px;font-weight:600;color:var(--ntf-text-2)}.ntf-empty-hint{font-size:13px;color:var(--ntf-text-3)}.ntf-form-col{display:flex;flex-direction:column;gap:6px}.ntf-form-label{font-size:13px;font-weight:500;color:var(--ntf-text)}.ntf-req{color:var(--ntf-red);margin-left:2px}.ntf-form-hint{font-size:11.5px;color:var(--ntf-text-3);margin-top:2px}.ntf-input,.ntf-select,.ntf-textarea{width:100%;padding:9px 12px;border:1.5px solid var(--ntf-border-md);border-radius:var(--ntf-radius);font-size:13.5px;font-family:inherit;color:var(--ntf-text);background:#fff;transition:border-color .14s,box-shadow .14s;outline:none}.ntf-input:focus,.ntf-select:focus,.ntf-textarea:focus{border-color:var(--ntf-blue);box-shadow:0 0 0 3px #2563eb1a}.ntf-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7' viewBox='0 0 12 7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2394a3b8' stroke-width='1.4' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:36px}.ntf-textarea{resize:vertical;min-height:96px}.ntf-form-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:start}.ntf-unit-badge{display:flex;align-items:center;padding:9px 13px;background:var(--ntf-bg);border:1.5px solid var(--ntf-border-md);border-radius:var(--ntf-radius);font-size:13px;color:var(--ntf-text-2);white-space:nowrap;height:40px}.ntf-check-label{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:13.5px;color:var(--ntf-text)}.ntf-check-label input[type=checkbox]{width:15px;height:15px;accent-color:var(--ntf-blue);cursor:pointer;flex-shrink:0}.ntf-channel-group{display:flex;gap:12px;padding:12px 14px;background:var(--ntf-bg);border-radius:var(--ntf-radius);border:1.5px solid var(--ntf-border);flex-wrap:wrap}.ntf-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:2000}.ntf-modal{background:#fff;border-radius:18px;width:500px;max-width:calc(100vw - 32px);max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--ntf-shadow-lg)}.ntf-modal-head{display:flex;align-items:center;justify-content:space-between;padding:22px 24px 18px;border-bottom:1px solid var(--ntf-border)}.ntf-modal-title{font-size:17px;font-weight:700;color:var(--ntf-text)}.ntf-modal-close{background:none;border:none;cursor:pointer;color:var(--ntf-text-3);font-size:20px;width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;transition:all .12s;line-height:1}.ntf-modal-close:hover{background:var(--ntf-bg);color:var(--ntf-text)}.ntf-modal-body{flex:1;overflow-y:auto;padding:22px 24px;display:flex;flex-direction:column;gap:18px}.ntf-modal-foot{padding:16px 24px 20px;border-top:1px solid var(--ntf-border);display:flex;gap:10px;justify-content:flex-end}.ntf-error{color:var(--ntf-red);background:var(--ntf-red-bg);border:1px solid #fecaca;border-radius:var(--ntf-radius);padding:9px 12px;font-size:13px}.ntf-email-chips{display:flex;flex-wrap:wrap;gap:6px}.ntf-email-chip{background:var(--ntf-blue-bg);color:var(--ntf-blue);border-radius:var(--ntf-radius-sm);padding:2px 8px;font-size:12px;display:inline-flex;align-items:center;gap:4px}.ntf-ann-form-wrap{margin-bottom:22px}.ntf-ann-form-card{background:var(--ntf-surface);border:1px solid var(--ntf-border);border-radius:var(--ntf-radius-lg);box-shadow:var(--ntf-shadow-sm);overflow:hidden}.ntf-ann-form-head{padding:16px 22px;background:var(--ntf-blue-bg);border-bottom:1px solid #dbeafe;display:flex;align-items:center;gap:10px;color:var(--ntf-blue)}.ntf-ann-form-head-title{font-size:14px;font-weight:600}.ntf-ann-form-body{padding:22px;display:flex;flex-direction:column;gap:18px}.ntf-ann-form-foot{padding:14px 22px;border-top:1px solid var(--ntf-border);background:#fafbfc;display:flex;gap:10px;justify-content:flex-end}.ntf-customer-list{border:1.5px solid var(--ntf-border-md);border-radius:var(--ntf-radius);overflow:hidden}.ntf-customer-item{padding:10px 14px;border-bottom:1px solid var(--ntf-border);display:flex;align-items:center}.ntf-customer-item:last-child{border-bottom:none}.ntf-customer-item.header-row{background:var(--ntf-bg)}.ntf-line-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media (max-width: 768px){.ntf-section-header{flex-direction:column;align-items:stretch}.ntf-header-actions{justify-content:flex-start}.ntf-btn{width:100%}}
