.skeleton-block{background:linear-gradient(90deg,#e2e8f0 25%,#edf1f5 37%,#e2e8f0 63%);background-size:400% 100%;border-radius:6px;animation:skeleton-shimmer 1.4s ease infinite}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.skeleton-logo{width:140px;height:32px}.skeleton-user-trigger{cursor:default;pointer-events:none}.skeleton-avatar{width:32px;height:32px;border-radius:50%}.skeleton-user-name{width:90px;height:13px;margin-bottom:5px}.skeleton-user-status{width:70px;height:11px}.skeleton-page-title{width:140px;height:26px;margin-bottom:8px}.skeleton-page-summary{width:200px;height:14px}.skeleton-search{width:300px;height:40px;border-radius:var(--radius-md)}.skeleton-filter{width:250px;height:40px;border-radius:var(--radius-md)}.skeleton-card{cursor:default;pointer-events:none}.skeleton-icon{width:40px;height:40px;border-radius:var(--radius-md);flex-shrink:0}.skeleton-title{width:60%;height:15px;margin-bottom:7px}.skeleton-subtitle{width:40%;height:12px}.skeleton-status{width:60px;height:22px;border-radius:999px}.skeleton-mode-title{width:40px;height:10px}.skeleton-label{width:90px;height:22px;border-radius:999px}.skeleton-toggle{width:40px;height:22px;border-radius:999px;flex-shrink:0}.skeleton-button-large{width:100%;height:40px;border-radius:var(--radius-md)}@media(max-width:900px){.skeleton-search,.skeleton-filter{flex:1 1 220px}}html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden;font-family:sans-serif}#root{height:100%}.editor-sidebar{grid-column:2 / 3;grid-row:1 / 3;overflow:hidden;background:#fff;border-left:1px solid #ddd;min-width:400px}.editor-renderer{grid-column:1 / 2;grid-row:2 / 3;display:flex;align-items:stretch;background-color:#f0f0f0;overflow:hidden;position:relative}.canvas-viewport{flex:1;display:flex;justify-content:center;align-items:center;min-width:0;min-height:0;overflow:hidden;position:relative}.editor-container{display:grid;grid-template-rows:auto 1fr;height:100vh;width:100vw;overflow:hidden;transition:grid-template-columns .4s cubic-bezier(.4,0,.2,1)}.editor-toolbar-container{grid-column:1 / -1;padding:clamp(.2rem,1vh,.35rem) clamp(.5rem,2vw,1rem);display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid #eee;min-height:clamp(40px,8vh,60px);z-index:100}.editor-toolbar-container .button{font-size:clamp(.55rem,1vw + .2rem,1.125rem);padding:clamp(2px,.7vh + .05rem,12px) clamp(3px,1vw + .05rem,18px);gap:clamp(2px,.6vw,10px);margin:0 clamp(.05rem,.3vw,.4rem);white-space:nowrap}.editor-toolbar-container .button svg{width:1.2em;height:1.2em;flex-shrink:0}.editor-sidebar-container{grid-column:2 / 3;grid-row:2 / 3;background:#fff;border-left:1px solid #ddd;overflow:hidden;position:relative}.toolbar-left{flex:1;min-width:0}.toolbar-right{flex:1;display:flex;justify-content:flex-end;min-width:0}.toolbar-right{margin-left:auto}.editor-container.sidebar-open{grid-template-columns:1fr 400px}.editor-container.sidebar-closed{grid-template-columns:1fr 60px}.button{display:flex;align-items:center;justify-content:center;gap:clamp(6px,1vw,10px);padding:clamp(5px,1.5vh,12px) clamp(12px,2vw,18px);margin:0 .4rem;border:none;border-radius:.75rem;cursor:pointer;font-size:clamp(.875rem,1.1vw,1.125rem);transition:all .2s ease;box-shadow:0 2px 6px #0000002b;background-color:#fff;color:#333}.button:hover:not(:disabled){background-color:#e0e0e0}.button:disabled{opacity:.5;cursor:not-allowed}.button.primary{background-color:#4f46e5;color:#fff}.button.primary:hover:not(:disabled){background-color:#4338ca}.button.danger{background-color:#ef4444;color:#fff}.button.danger:hover:not(:disabled){background-color:#dc2626}.button.active{background-color:#eef2ff;color:#4f46e5;transition:all 0s ease}.button.secondary{background-color:#f3f4f6;color:#374151;box-shadow:none;border:1px solid #e0e0e0}.button.secondary:hover:not(:disabled){background-color:#e5e7eb;border-color:#d1d5db}.button.small{margin:0;padding:5px 12px;font-size:.8rem;border-radius:.5rem;box-shadow:none;gap:4px}.button.icon-only{padding:6px;aspect-ratio:1;gap:0}.sidebar-header{padding:12px 16px;display:flex;align-items:center;justify-content:space-between;min-height:60px;box-sizing:border-box;border-bottom:2px solid #f3f4f6}.collapsed .sidebar-header{padding:10px 0;justify-content:center}.sidebar-title{font-size:24px;font-weight:700;margin:0;color:#111827;animation:fadeIn .3s ease}.sidebar-badge{background:#4f46e5;color:#fff;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:700}.sidebar-label{font-size:12px;font-weight:600;color:#666}.sidebar-panel.collapsed .zone-item-btn:hover .zone-number-circle{transform:scale(1.1);background:#e5e7eb}.sidebar-panel.collapsed .zone-item-body{display:none}.sidebar-closed .sidebar-header{padding:20px 0;justify-content:center;border-bottom:none}.sidebar-toggle-btn{width:36px;height:36px;border-radius:10px;background:#f3f4f6;border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#4b5563;transition:all .2s ease;padding:0}.sidebar-toggle-btn:hover{background:#e5e7eb;transform:scale(1.1)}.sidebar-open .sidebar-toggle-btn{background:transparent;border:1px solid #eee}.sidebar-open .sidebar-toggle-btn:hover{background:#f9fafb}.sidebar-panel.collapsed .sidebar-content{overflow-y:auto;align-items:center}.sidebar-panel{background-color:#fff;padding:12px 16px;height:100vh;display:flex;flex-direction:column;overflow:hidden;border-left:1px solid #ddd}.sidebar-content{overflow-x:hidden;padding:12px;scrollbar-width:none;-ms-overflow-style:none}.sidebar-content::-webkit-scrollbar{display:none}.sidebar-panel.collapsed{width:60px;align-items:center;padding:5px 0 0}.sidebar-panel.collapsed .zone-item-expand{grid-template-rows:0fr!important}.drawing-rail{width:92px;flex-shrink:0;background:#fff;border-right:1px solid #eee;display:flex;flex-direction:column;align-items:center;padding:18px 0;gap:10px;overflow-y:auto;z-index:5}.rail-btn{width:64px;height:64px;flex-shrink:0;border:none;border-radius:.75rem;background:#fff;box-shadow:0 2px 6px #0000002b;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#333;transition:background-color .15s ease,color .15s ease,box-shadow .15s ease,transform .1s ease}.rail-btn svg{width:23px;height:23px;transition:transform .15s ease}.rail-btn span{font-size:10px;font-weight:600;letter-spacing:.02em;line-height:1;text-align:center;transition:color .15s ease}.rail-btn:hover{background:#e0e0e0}.rail-btn:hover svg{transform:translateY(-1px)}.rail-btn:active{transform:scale(.94);transition-duration:.05s}.rail-btn:focus-visible{outline:2px solid #4f46e5;outline-offset:2px}.rail-btn.active{background:#eef2ff;color:#4f46e5;box-shadow:0 2px 6px #4f46e540,inset 0 0 0 1.5px #4f46e559}.rail-btn.active:hover{background:#e0e7ff}.rail-btn.active svg{transform:none}.rail-divider{width:48px;height:2px;border-radius:1px;background:#d1d5db;margin:6px 0;flex-shrink:0}.trajectory-popover.rail-popover{position:fixed;right:auto;z-index:1000}.skeleton-nav-btn{width:40px;height:40px;border-radius:.75rem}.skeleton-tool-btn{height:38px;border-radius:.75rem;margin:0 .4rem}.skeleton-rail-btn{width:64px;height:64px;border-radius:.75rem}.skeleton-editor .canvas-viewport{container-type:size}.skeleton-canvas{position:relative;aspect-ratio:16 / 9;width:min(100cqw,100cqh * 16 / 9);height:min(100cqh,100cqw * 9 / 16);border-radius:12px}.skeleton-canvas-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:15%;color:#cbd5e1}.skeleton-sidebar{cursor:default;pointer-events:none}.skeleton-sidebar-toggle{width:36px;height:36px;border-radius:10px}:root{--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--c-bg: #f6f7f9;--c-surface: #ffffff;--c-surface-muted: #f8fafc;--c-border: #e4e7ec;--c-border-strong: #d0d5dd;--c-divider: #eef0f3;--c-text: #101828;--c-text-secondary: #475467;--c-text-muted: #667085;--c-text-subtle: #98a2b3;--c-primary: #4f46e5;--c-primary-hover: #4338ca;--c-primary-soft: #eef2ff;--c-primary-ring: rgba(79, 70, 229, .16);--c-success: #079455;--c-success-dot: #17b26a;--c-success-soft: #ecfdf3;--c-success-border: #abefc6;--c-danger: #d92d20;--c-danger-hover: #b42318;--c-danger-dot: #f04438;--c-danger-soft: #fef3f2;--c-danger-border: #fecdca;--c-warning: #b54708;--c-warning-dot: #f79009;--c-warning-soft: #fffaeb;--c-warning-border: #fedf89;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--shadow-xs: 0 1px 2px rgba(16, 24, 40, .05);--shadow-sm: 0 1px 3px rgba(16, 24, 40, .08), 0 1px 2px rgba(16, 24, 40, .04);--shadow-md: 0 4px 8px -2px rgba(16, 24, 40, .08), 0 2px 4px -2px rgba(16, 24, 40, .04);--shadow-lg: 0 12px 16px -4px rgba(16, 24, 40, .08), 0 4px 6px -2px rgba(16, 24, 40, .03);--shadow-xl: 0 24px 48px -12px rgba(16, 24, 40, .18);--focus-ring: 0 0 0 3px var(--c-primary-ring)}html,body,#root{margin:0;padding:0;height:100%;width:100%;font-family:var(--font-sans);background-color:var(--c-bg);color:var(--c-text);-webkit-font-smoothing:antialiased}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border:1px solid transparent;border-radius:var(--radius-md);font-family:inherit;font-size:14px;font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease}.btn:focus-visible{outline:none;box-shadow:var(--focus-ring)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn svg{width:16px;height:16px;flex-shrink:0}.btn--primary{background:var(--c-primary);color:#fff;box-shadow:var(--shadow-xs)}.btn--primary:hover:not(:disabled){background:var(--c-primary-hover)}.btn--secondary{background:var(--c-surface);border-color:var(--c-border-strong);color:var(--c-text-secondary);box-shadow:var(--shadow-xs)}.btn--secondary:hover:not(:disabled){background:var(--c-surface-muted);color:var(--c-text)}.btn--danger{background:var(--c-danger);color:#fff;box-shadow:var(--shadow-xs)}.btn--danger:hover:not(:disabled){background:var(--c-danger-hover)}.btn--danger-ghost{background:transparent;color:var(--c-danger)}.btn--danger-ghost:hover:not(:disabled){background:var(--c-danger-soft)}.btn--ghost{background:transparent;color:var(--c-text-muted)}.btn--ghost:hover:not(:disabled){background:var(--c-surface-muted);color:var(--c-text)}.btn--sm{height:34px;padding:0 12px;font-size:13px}.btn--icon{width:34px;height:34px;padding:0}.btn--icon.btn--danger-ghost:hover:not(:disabled){color:var(--c-danger)}.btn--block{width:100%}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field-label{font-size:13px;font-weight:600;color:var(--c-text-secondary)}.field-input{width:100%;box-sizing:border-box;height:40px;padding:0 12px;background:var(--c-surface);border:1px solid var(--c-border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);font-family:inherit;font-size:14px;color:var(--c-text);transition:border-color .15s ease,box-shadow .15s ease}select.field-input{appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;cursor:pointer}.field-input::placeholder{color:var(--c-text-subtle)}.field-input:focus{outline:none;border-color:var(--c-primary);box-shadow:var(--shadow-xs),var(--focus-ring)}.field-input:disabled{background-color:var(--c-surface-muted);color:var(--c-text-subtle);cursor:not-allowed}.field-hint{margin:0;font-size:12px;line-height:1.45;color:var(--c-text-muted)}.field-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-stack{display:flex;flex-direction:column;gap:16px}.form-actions-row{display:flex;align-items:center;justify-content:flex-end;gap:8px}@media(max-width:560px){.field-row{grid-template-columns:1fr}}.chip{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:999px;border:1px solid var(--c-border);background:var(--c-surface-muted);color:var(--c-text-secondary);font-size:12px;font-weight:600;white-space:nowrap}.chip--dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.chip--primary{background:var(--c-primary-soft);border-color:#c7d2fe;color:var(--c-primary)}.chip--success{background:var(--c-success-soft);border-color:var(--c-success-border);color:var(--c-success)}.chip--danger{background:var(--c-danger-soft);border-color:var(--c-danger-border);color:var(--c-danger)}.chip--warning{background:var(--c-warning-soft);border-color:var(--c-warning-border);color:var(--c-warning)}.avatar{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--c-primary-soft);color:var(--c-primary);font-size:13px;font-weight:700;text-transform:uppercase;-webkit-user-select:none;user-select:none}.avatar--lg{width:56px;height:56px;font-size:20px}.login-page{position:relative;height:100vh;width:100vw;display:flex;flex-direction:column;gap:20px;justify-content:center;align-items:center;background-color:#f0f0f0;font-family:sans-serif}.login-lang-switcher{position:absolute;top:20px;right:20px}.login-lang-toggle{display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:16px;background:#fff;border:1px solid #ddd;border-radius:10px;cursor:pointer;box-shadow:0 1px 4px #0000001a;transition:all .2s ease}.login-lang-toggle:hover{border-color:#cfcfff;box-shadow:0 2px 6px #00000026}.login-lang-chevron{font-size:11px;color:#888;transition:transform .2s ease}.login-lang-chevron.open{transform:rotate(180deg)}.login-lang-dropdown{position:absolute;top:calc(100% + 6px);right:0;min-width:100px;margin:0;padding:6px;list-style:none;background:#fff;border:1px solid #eee;border-radius:10px;box-shadow:0 6px 16px #0000001f;animation:langDropdownIn .15s ease-out}.login-lang-option{width:100%;display:flex;align-items:center;gap:8px;padding:8px 10px;font-size:14px;font-weight:500;color:#333;background:none;border:none;border-radius:6px;cursor:pointer;text-align:left;transition:background-color .15s ease}.login-lang-option:hover{background-color:#f5f3ff;color:#4f46e5}@keyframes langDropdownIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.login-card{width:360px;background:#fff;border:1px solid #ddd;border-radius:16px;padding:32px;box-shadow:0 4px 12px #0000001f;display:flex;flex-direction:column;gap:20px}.login-card h2{margin:0;font-size:22px;font-weight:600;text-align:center;color:#333}.login-card form{display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:14px;font-weight:500;color:#555}.form-group input{padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:8px;outline:none;transition:border-color .2s,box-shadow .2s}.form-group input:focus{border-color:#4f46e5;box-shadow:0 0 0 2px #4f46e533}.login-card button{margin-top:8px;padding:12px;border:none;border-radius:12px;font-size:15px;font-weight:500;cursor:pointer;transition:all .2s ease;background-color:#4f46e5;color:#fff;box-shadow:0 2px 6px #00000026}.login-card button:hover:not(:disabled){background-color:#4338ca}.login-card button:active:not(:disabled){transform:translateY(1px)}.login-card button:disabled{opacity:.6;cursor:not-allowed}.overview-page-container{display:flex;flex-direction:column;height:100vh;overflow:hidden}.overview-navbar{flex-shrink:0;background-color:var(--c-surface);border-bottom:1px solid var(--c-border);z-index:20}.overview-navbar-inner{display:flex;justify-content:space-between;align-items:center;gap:16px;height:64px;max-width:1440px;margin:0 auto;padding:0 32px}.navbar-brand{display:flex;align-items:center;min-width:0}.navbar-logo{height:32px;width:auto;display:block}.navbar-actions{display:flex;align-items:center}.overview-toolbar-bar{flex-shrink:0;padding:28px 32px 20px;background:var(--c-bg);position:relative;z-index:10;transition:box-shadow .15s ease}.overview-toolbar-bar.is-scrolled{box-shadow:0 1px 0 var(--c-border),0 6px 12px -8px #1018282e}.overview-main-content{flex:1;min-height:0;overflow-y:auto;padding:4px 32px 32px}.overview-content-wrapper{max-width:1440px;margin:0 auto}.overview-toolbar{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:16px 24px}.overview-heading{min-width:0}.overview-title{margin:0;font-size:24px;font-weight:700;line-height:1.25;letter-spacing:-.02em;color:var(--c-text)}.overview-summary{margin:4px 0 0;font-size:14px;color:var(--c-text-muted);font-variant-numeric:tabular-nums}.overview-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.search-field{position:relative;width:300px}.search-field-icon{position:absolute;top:50%;left:12px;transform:translateY(-50%);color:var(--c-text-subtle);pointer-events:none}.search-input{width:100%;box-sizing:border-box;height:40px;padding:0 12px 0 38px;background-color:var(--c-surface);border:1px solid var(--c-border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);font-family:inherit;font-size:14px;color:var(--c-text);transition:border-color .15s ease,box-shadow .15s ease}.search-input::placeholder{color:var(--c-text-subtle)}.search-input:focus{outline:none;border-color:var(--c-primary);box-shadow:var(--shadow-xs),var(--focus-ring)}.status-filter{display:inline-flex;align-items:center;height:40px;box-sizing:border-box;padding:3px;gap:2px;background:#eceef2;border-radius:var(--radius-md)}.status-filter-option{display:inline-flex;align-items:center;gap:7px;height:100%;padding:0 12px;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:13px;font-weight:600;color:var(--c-text-muted);white-space:nowrap;cursor:pointer;transition:background-color .15s ease,color .15s ease,box-shadow .15s ease}.status-filter-option:hover{color:var(--c-text)}.status-filter-option:focus-visible{outline:none;box-shadow:var(--focus-ring)}.status-filter-option.active{background:var(--c-surface);color:var(--c-text);box-shadow:var(--shadow-sm)}.status-filter-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-filter-dot.online{background:var(--c-success-dot)}.status-filter-dot.offline{background:var(--c-danger-dot)}.status-filter-count{min-width:20px;padding:1px 6px;box-sizing:border-box;border-radius:999px;background:#1018280f;font-size:12px;font-weight:600;text-align:center;color:var(--c-text-muted);font-variant-numeric:tabular-nums}.status-filter-option.active .status-filter-count{background:var(--c-primary-soft);color:var(--c-primary)}.sidebar-user{position:relative}.user-trigger{display:flex;align-items:center;gap:10px;padding:4px 8px 4px 4px;border:1px solid transparent;border-radius:999px;background:none;font-family:inherit;text-align:left;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}.user-trigger:hover,.user-trigger.open{background:var(--c-surface-muted);border-color:var(--c-border)}.user-trigger:focus-visible{outline:none;box-shadow:var(--focus-ring)}.user-info{display:flex;flex-direction:column;min-width:0}.user-name{font-size:14px;font-weight:600;line-height:1.3;color:var(--c-text)}.user-status{font-size:12px;line-height:1.3;color:var(--c-text-muted)}.user-trigger-chevron{color:var(--c-text-subtle);transition:transform .15s ease}.user-trigger.open .user-trigger-chevron{transform:rotate(180deg)}.user-menu{position:absolute;top:calc(100% + 8px);right:0;width:248px;padding:6px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;gap:1px;z-index:30;animation:menu-in .12s ease-out}.user-menu-header{display:flex;align-items:center;gap:10px;padding:8px 10px}.user-menu-header-text{display:flex;flex-direction:column;min-width:0}.user-menu-header-name{font-size:14px;font-weight:600;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-menu-header-meta{font-size:12px;color:var(--c-text-muted)}.user-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:none;border-radius:var(--radius-sm);background:none;font-family:inherit;font-size:14px;font-weight:500;text-align:left;color:var(--c-text-secondary);cursor:pointer;transition:background-color .12s ease,color .12s ease}.user-menu-item svg{width:16px;height:16px;flex-shrink:0;color:var(--c-text-subtle)}.user-menu-item:hover,.user-menu-item:focus-visible{outline:none;background:var(--c-surface-muted);color:var(--c-text)}.user-menu-item:hover svg{color:var(--c-text-muted)}.user-menu-divider{height:1px;margin:4px 0;background-color:var(--c-divider)}.user-menu-item.danger,.user-menu-item.danger svg{color:var(--c-danger)}.user-menu-item.danger:hover{background:var(--c-danger-soft)}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.sensor-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.sensor-card{display:flex;flex-direction:column;gap:16px;min-width:0;padding:20px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.sensor-card:hover{border-color:var(--c-border-strong);box-shadow:var(--shadow-md)}.sensor-card.active{border-color:var(--c-primary);box-shadow:var(--shadow-xs),var(--focus-ring)}.sensor-card-header{display:flex;align-items:flex-start;gap:12px}.sensor-icon-wrapper{width:40px;height:40px;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:var(--radius-md);background:var(--c-primary-soft);color:var(--c-primary)}.sensor-icon-wrapper.offline{background:var(--c-surface-muted);color:var(--c-text-subtle);border:1px solid var(--c-border);box-sizing:border-box}.sensor-card-heading{flex:1;min-width:0}.sensor-title{margin:0;font-size:15px;font-weight:600;line-height:1.35;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sensor-subtitle{margin-top:2px;font-size:13px;color:var(--c-text-muted);font-variant-numeric:tabular-nums}.sensor-subtitle-sep{margin:0 6px;color:var(--c-text-subtle)}.sensor-status{flex-shrink:0}.mode-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;background:var(--c-surface-muted);border:1px solid var(--c-divider);border-radius:var(--radius-md)}.mode-row-label{display:flex;flex-direction:column;gap:6px;min-width:0}.mode-row-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-subtle)}.mode-row-values{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.mode-toggle{position:relative;width:40px;height:22px;flex-shrink:0;padding:0;border:none;border-radius:999px;background:var(--c-border-strong);cursor:pointer;transition:background-color .2s ease}.mode-toggle.on{background:var(--c-success-dot)}.mode-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring)}.mode-toggle-thumb{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #10182833;transition:transform .2s ease}.mode-toggle.on .mode-toggle-thumb{transform:translate(18px)}.mode-toggle:disabled{opacity:.5;cursor:not-allowed}.sensor-card-footer{margin-top:auto}.sensor-card-configure .upload-indicator-spinner{display:inline-block}.no-sensors-found{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:64px 32px;background:var(--c-surface);border:1px dashed var(--c-border-strong);border-radius:var(--radius-lg);color:var(--c-text-muted);font-size:14px;font-weight:500;text-align:center}.no-sensors-found-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--c-surface-muted);border:1px solid var(--c-border);color:var(--c-text-subtle)}.configure-btn{width:100%;height:46px;margin-top:auto;border:none;border-radius:10px;background:#4f46e5;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s ease,transform .2s ease}.configure-btn:hover{background:#4338ca}.configure-btn:active{transform:scale(.98)}.configure-btn:disabled{opacity:.5;cursor:not-allowed}@media(max-width:900px){.overview-controls,.search-field{width:100%}.search-field{flex:1 1 220px}}@media(max-width:768px){.overview-navbar-inner{padding:0 16px}.overview-toolbar-bar{padding:20px 16px 16px}.overview-main-content{padding:4px 16px 20px}.sensor-grid{grid-template-columns:minmax(0,1fr)}.user-info{display:none}.search-input{font-size:16px}}.overlay{position:absolute;inset:0;background-color:#f0f0f0cc;display:flex;justify-content:center;align-items:center;z-index:9999;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);font-family:sans-serif;transition:all .3s ease-in-out}.loader-content{display:flex;flex-direction:column;align-items:center;gap:1.5vh}.company-logo{margin-bottom:5px;animation:pulse 2s infinite ease-in-out}.company-logo img{height:50px;width:auto;display:block}.spinner{width:60px;height:60px;border:.3vw solid #ddd;border-top:.3vw solid #4f46e5;border-radius:50%;animation:spin 1s linear infinite}.overlay p{font-size:16px;margin:0;font-weight:600;color:#333}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:.8;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}}.error-card,.warning-card{background:#fff;width:clamp(240px,60%,400px);padding:clamp(14px,3vh,32px);border-radius:16px;box-shadow:0 4px 12px #0000001f;text-align:center;border:1px solid}.error-card{border-color:#fcc}.warning-card{border-color:#ffd580}.error-card h3{color:#d32f2f;margin:0 0 1vh;font-size:24px}.warning-card h3{color:#f57c00;margin:0 0 1vh;font-size:24px}.error-card p,.warning-card p{color:#555;font-size:15px;line-height:1.4}.dismiss-text{margin-top:1.5vh;font-size:13px;color:#888;font-style:italic}.edge-length-box{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;display:flex;align-items:center;gap:4px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;box-shadow:0 2px 8px #0000002e;z-index:10;transition:all .2s ease}.edge-length-box:hover,.edge-length-box:focus-within{border-color:#4f46e5;box-shadow:0 0 0 1px #4f46e5,0 4px 12px #4f46e540}.edge-length-box input{width:42px;border:none;outline:none;font-size:13px;font-weight:700;color:#1f2937;background:transparent;text-align:right;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.edge-length-box input::placeholder{color:#d1d5db;font-weight:600}.edge-length-box .unit{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;font-weight:700}.speed-badge-box{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;display:flex;align-items:center;justify-content:center;width:fit-content;gap:4px;padding:4px 6px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px #0000002e;z-index:11;box-sizing:border-box;transition:border-color .15s ease,box-shadow .15s ease}.speed-badge-box:hover,.speed-badge-box:focus-within{border-color:#4f46e5;box-shadow:0 0 0 1px #4f46e5,0 4px 12px #4f46e540}.speed-direction-input{flex:0 1 auto;min-width:2ch;max-width:56px;border:none;outline:none;font-size:12px;font-weight:700;color:#1f2937;background:transparent;text-align:center;padding:0 2px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:max-width .15s ease}.speed-direction-input:focus{max-width:96px;color:#4f46e5}.speed-direction-input::placeholder{color:#d1d5db;font-weight:600}.crossing-indicator span.is-connecting{color:#3b82f6;filter:drop-shadow(0 0 6px #3b82f6);animation:pulse 1.5s infinite}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.2)}to{transform:scale(1)}}.edge-overlay-layer{position:absolute;inset:0;pointer-events:none}.crossing-badge-box{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;display:flex;align-items:center;justify-content:center;width:fit-content;min-width:clamp(140px,16vw,280px);max-width:min(90vw,480px);gap:.4vw;padding:clamp(4px,.4vw,8px) clamp(6px,.6vw,12px);background:#fff;border:1px solid #e5e7eb;border-radius:clamp(6px,.5vw,10px);box-shadow:0 2px 8px #00000014;z-index:10;transition:border-color .15s ease,box-shadow .15s ease;box-sizing:border-box}.crossing-badge-box:hover,.crossing-badge-box:focus-within{border-color:#4f46e5;box-shadow:0 0 0 1px #4f46e5,0 4px 12px #4f46e526}.crossing-input{flex:0 1 auto;min-width:2ch;max-width:clamp(80px,10vw,160px);border:none;outline:none;font-family:Inter,sans-serif;font-size:clamp(10px,.7vw,13px);font-weight:700;color:#1f2937;background:transparent;padding:0 3px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:max-width .15s ease}.crossing-input:focus{max-width:clamp(140px,20vw,280px)}.crossing-badge-box .crossing-input:first-of-type{text-align:right}.crossing-badge-box .crossing-input:last-of-type{text-align:left}.crossing-input::placeholder{color:#d1d5db;font-weight:600;font-size:inherit;text-overflow:ellipsis;opacity:1;transition:opacity .15s ease}.crossing-input:focus::placeholder{opacity:.3}.crossing-input:focus{color:#4f46e5}.crossing-indicator{display:flex;align-items:center;gap:.4vw;-webkit-user-select:none;user-select:none;flex-shrink:0;padding:0 2px}.crossing-indicator .center-line{width:1px;height:clamp(10px,.8vw,14px);background-color:#e5e7eb}.crossing-indicator .arrow-side-a,.crossing-indicator .arrow-side-b{display:inline-block;line-height:1;font-size:clamp(10px,.7vw,13px);transition:color .15s ease}.crossing-indicator .arrow-side-a svg,.crossing-indicator .arrow-side-b svg{width:1.2em;height:1.2em;display:block}.crossing-indicator .arrow-side-a{color:#4f46e5}.crossing-indicator .arrow-side-b{color:#ea580c}.crossing-indicator .is-connecting{color:#22c55e!important;scale:1;animation:crossingPulse 1.5s infinite ease-in-out}@keyframes crossingPulse{0%,to{opacity:.5;scale:.95}50%{opacity:1;scale:1.2}}.editor-toolbar-container{padding:9px;display:flex}.upload-button{position:relative}.upload-pending-dot{position:absolute;top:-4px;right:-4px;width:12px;height:12px;border-radius:50%;background:#f59e0b;border:2px solid #fff;box-shadow:0 0 #f59e0b99;animation:upload-pending-pulse 2s ease-out infinite}@keyframes upload-pending-pulse{0%{box-shadow:0 0 #f59e0b99}70%{box-shadow:0 0 0 8px #f59e0b00}to{box-shadow:0 0 #f59e0b00}}@media(prefers-reduced-motion:reduce){.upload-pending-dot{animation:none}}.trajectory-dropdown-container{position:relative;display:inline-block}.dropdown-arrow{font-size:.65rem;margin-left:4px;opacity:.7}.trajectory-popover{position:absolute;top:calc(100% + 8px);right:0;background:#fff;border-radius:.75rem;box-shadow:0 10px 25px #00000026;border:1px solid #eee;padding:16px;min-width:280px;z-index:200;display:flex;flex-direction:column;gap:12px;animation:fadeIn .15s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.popover-section{display:flex;flex-direction:column;gap:6px}.popover-section label{font-size:.8rem;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.05em}.segmented-control{display:flex;background:#f3f4f6;padding:4px;border-radius:.5rem}.segmented-control button{flex:1;border:none;background:transparent;padding:6px 12px;font-size:.875rem;font-weight:500;border-radius:.375rem;cursor:pointer;color:#4b5563;transition:all .15s ease}.segmented-control button.active{background:#fff;color:#4f46e5;box-shadow:0 2px 4px #0000000f}.custom-range-inputs{border-top:1px solid #f3f4f6;padding-top:12px;animation:slideDown .2s ease-out}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:100px}}.input-group{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.input-group label{min-width:30px}.input-group input[type=datetime-local]{flex:1;padding:6px 10px;border:1px solid #d1d5db;border-radius:.375rem;font-size:.85rem;color:#333;font-family:sans-serif}.input-group input[type=datetime-local]:focus{outline:none;border-color:#4f46e5;box-shadow:0 0 0 2px #4f46e533}.zone-item-btn{flex-shrink:0;background-color:#fff;border-radius:12px;box-shadow:0 2px 6px #0000001f;transition:all .3s cubic-bezier(.4,0,.2,1);border:1px solid #eee;box-sizing:border-box;margin-bottom:10px}.zone-item-btn:hover:not(.active){background-color:#e0e0e0}.zone-item-btn.active{background:#e3f2fd;box-shadow:inset 0 0 0 1px #2196f3,inset 0 2px 4px #00000026;transform:translateY(1px)}.zone-item-trigger{padding:12px;display:flex;align-items:center;gap:12px;cursor:pointer;min-height:44px}.zone-number-circle{width:36px;height:36px;flex-shrink:0;border-radius:10px;background:#f3f4f6;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#4b5563;position:relative;transition:all .4s}.active .zone-number-circle{background:#4f46e5;color:#fff}.status-dot-mini{position:absolute;top:-2px;right:-2px;width:10px;height:10px;border-radius:50%;border:2px solid white}.status-dot-mini.saved{background:#10b981}.status-dot-mini.draft{background:#f59e0b}.zone-name{flex:1;font-size:15px;color:#4b5563;font-weight:700;padding:0 8px}.chevron{font-size:18px;color:#888}.zone-item-expand{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}.active .zone-item-expand{grid-template-rows:1fr}.zone-item-body{overflow:hidden;padding:0 16px}.sidebar-field{display:flex;flex-direction:column;gap:4px;margin-top:8px;margin-bottom:16px}.sidebar-input{padding:8px 10px;font-size:14px;border:1px solid #ddd;border-radius:8px;outline:none;background:#fff}.sidebar-input:focus{border-color:#2196f3}.sidebar-panel.collapsed .zone-item-btn{width:44px;min-height:44px;border-radius:12px;box-shadow:none;background:transparent;border-color:transparent}.sidebar-panel.collapsed .zone-item-trigger{padding:0;justify-content:center}.categories-grid{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.category-chip{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;border:1px solid #e5e7eb;background:#f9fafb;font-size:12px;font-weight:600;color:#4b5563;cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.category-chip:hover{border-color:#4f46e5;background:#f3f4f6}.category-chip.selected{background:#4f46e5;color:#fff;border-color:#4f46e5;box-shadow:0 2px 4px #4f46e533}.chip-icon{font-size:10px;font-weight:800}.sidebar-label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;font-weight:700;margin-bottom:4px}.templates-stack{display:flex;flex-direction:column;gap:8px;margin-top:4px}.template-option{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-radius:10px;border:1px solid #e5e7eb;background:#fff;cursor:pointer;transition:all .2s ease}.template-option:hover{border-color:#4f46e5;background:#f9fafb}.template-option.selected{border-color:#4f46e5;background:#eef2ff;box-shadow:0 0 0 1px #4f46e5}.template-info{display:flex;flex-direction:column;gap:2px}.template-name{font-size:13px;font-weight:700;color:#1f2937}.template-desc{font-size:11px;color:#6b7280}.template-checkbox{width:20px;height:20px;border-radius:6px;border:2px solid #d1d5db;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:#fff;transition:all .2s}.selected .template-checkbox{background:#4f46e5;border-color:#4f46e5}.template-info-badge{display:inline-flex;align-items:center;gap:8px;background:#4f46e5;color:#fff;padding:6px 14px;border-radius:8px;font-weight:600;letter-spacing:.5px;box-shadow:0 2px 8px #4f46e540;border:1px solid rgba(255,255,255,.1);transition:transform .2s ease;width:fit-content}.zone-item-btn:hover .template-info-badge{transform:translateY(-1px);box-shadow:0 4px 12px #4f46e559}.template-name-text{font-size:.85rem;text-transform:uppercase}.presence-flag{position:fixed;top:150px;left:0;z-index:200;display:flex;align-items:center;gap:14px;padding:14px 26px 14px 16px;font-family:inherit;background:#ffd54f;border-radius:0 10px 10px 0;box-shadow:5px 6px 18px #451a0366}.presence-flag-icon{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:38px;height:38px;border-radius:50%;background:#451a03;color:#ffd54f}.presence-flag-ring{position:absolute;inset:-4px;border-radius:50%;border:2px solid rgba(69,26,3,.35)}.presence-flag-text{display:flex;flex-direction:column;gap:1px}.presence-flag-title{font-size:12px;font-weight:800;color:#451a03;text-transform:uppercase;letter-spacing:.04em}.presence-flag-subtitle{font-size:15px;font-weight:700;color:#1c1917;white-space:nowrap}.installation-container{display:grid;grid-template-columns:1fr 360px;grid-template-rows:auto 1fr auto;height:100vh;width:100vw;overflow:hidden;background-color:#f0f0f0}.editor-toolbar-container{grid-column:1 / span 2}.installation-sidebar{grid-column:2;grid-row:2 / span 2;background-color:#fff;border-left:1px solid #e5e7eb;padding:2rem 1.5rem;display:flex;flex-direction:column;gap:1.5rem;box-sizing:border-box}.sidebar-section-title{font-size:16px;font-weight:600;color:#111827;margin:0 0 .5rem;text-transform:uppercase;letter-spacing:.05em}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group label{font-size:13px;font-weight:600;color:#4b5563}.form-input,.form-textarea{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff;color:#111827;font-family:inherit;box-sizing:border-box}.form-input:focus,.form-textarea:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px #2563eb26}.form-textarea{resize:none}.installation-footer-actions{grid-column:1;grid-row:3;background:#fff;padding:1rem 2rem;display:flex;justify-content:center;border-top:1px solid #eee;border-right:1px solid #e5e7eb;z-index:10}.action-group{display:flex;gap:1rem;align-items:center}.divider-v{width:1px;height:32px;background:#e5e7eb;margin:0 .5rem}.toolbar-center .sidebar-title{font-size:20px;color:#111827}.installation-main{grid-column:1;grid-row:2;padding:1rem;display:flex;align-items:center;justify-content:center;overflow:hidden}.image-frame{position:relative;background:#fff;padding:8px;border-radius:12px;box-shadow:0 10px 25px #0000001a;width:100%;height:100%;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.main-preview{display:block;width:100%;height:100%;object-fit:contain;border-radius:4px}.modal-overlay{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;padding:16px;box-sizing:border-box;background:#10182880;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:9999;animation:modal-overlay-in .15s ease-out}.modal{display:flex;flex-direction:column;width:100%;max-height:calc(100vh - 32px);overflow:hidden;background:var(--c-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);animation:modal-in .18s ease-out}.modal--sm{max-width:440px}.modal--md{max-width:560px}.modal--lg{max-width:820px}.modal--xl{max-width:1040px}.modal-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:20px 24px;border-bottom:1px solid var(--c-divider)}.modal-heading{min-width:0}.modal-title{margin:0;font-size:18px;font-weight:600;line-height:1.4;color:var(--c-text)}.modal-subtitle{margin:4px 0 0;font-size:14px;color:var(--c-text-muted)}.modal-header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.modal-close{margin:-4px -8px 0 0}.modal-body{flex:1;min-height:0;overflow-y:auto;padding:20px 24px 24px;scrollbar-width:thin;scrollbar-color:var(--c-border-strong) transparent}.modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--c-divider);background:var(--c-surface-muted)}.modal-footer-spacer{flex:1}.modal-form{display:flex;flex-direction:column;flex:1;min-height:0}@keyframes modal-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes modal-in{0%{opacity:0;transform:translateY(8px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:560px){.modal-header,.modal-body,.modal-footer{padding-left:16px;padding-right:16px}}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.section-label{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-muted)}.section-label svg{width:14px;height:14px}.field-label--split{display:flex;justify-content:space-between;align-items:baseline}.field-label-count{font-size:12px;font-weight:500;color:var(--c-text-muted);font-variant-numeric:tabular-nums}.detail-muted{color:var(--c-text-subtle)!important}.tabs{display:flex;gap:4px;padding:0 24px;border-bottom:1px solid var(--c-divider);overflow-x:auto;scrollbar-width:none}.tab{position:relative;padding:12px 10px;border:none;background:none;font-family:inherit;font-size:14px;font-weight:600;color:var(--c-text-muted);white-space:nowrap;cursor:pointer;transition:color .15s ease}.tab:after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px 2px 0 0;background:transparent}.tab:hover{color:var(--c-text)}.tab:focus-visible{outline:none;box-shadow:inset var(--focus-ring);border-radius:var(--radius-sm)}.tab.active{color:var(--c-primary)}.tab.active:after{background:var(--c-primary)}.list-panel{max-height:340px;overflow-y:auto;border:1px solid var(--c-border);border-radius:var(--radius-md);background:var(--c-surface);scrollbar-width:thin}.list-entry+.list-entry,.check-row+.check-row{border-top:1px solid var(--c-divider)}.list-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 10px 10px 14px;transition:background-color .12s ease}.list-row:hover{background:var(--c-surface-muted)}.list-row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.list-row-title{font-size:14px;font-weight:600;color:var(--c-text)}.list-row-meta{font-size:12px;color:var(--c-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-row-actions{display:flex;align-items:center;gap:2px;flex-shrink:0}.list-row-editor{padding:16px 14px;background:var(--c-surface-muted);border-top:1px dashed var(--c-border)}.list-empty{padding:24px 14px;font-size:14px;text-align:center;color:var(--c-text-muted)}.check-row{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;transition:background-color .12s ease}.check-row:hover{background:var(--c-surface-muted)}.check-row.active{background:var(--c-primary-soft)}.check-row input{width:16px;height:16px;margin:0;accent-color:var(--c-primary);cursor:pointer}.check-row-title{flex:1;min-width:0;font-size:14px;font-weight:500;color:var(--c-text)}.check-row-meta{font-size:12px;color:var(--c-text-subtle);font-variant-numeric:tabular-nums}.modal-body--flush{padding:0}.data-table{width:100%;border-collapse:collapse;font-size:14px}.data-table th{position:sticky;top:0;z-index:1;padding:10px 16px;background:var(--c-surface-muted);border-bottom:1px solid var(--c-divider);font-size:12px;font-weight:600;text-align:left;color:var(--c-text-muted)}.data-table th:first-child,.data-table td:first-child{padding-left:24px}.data-table th:last-child,.data-table td:last-child{padding-right:24px}.data-table td{padding:12px 16px;border-bottom:1px solid var(--c-divider);color:var(--c-text-secondary)}.data-table tbody tr:last-child td{border-bottom:none}.data-table-row-clickable{cursor:pointer;transition:background-color .12s ease}.data-table-row-clickable:hover{background:var(--c-surface-muted)}.data-table-actions{width:1%;text-align:right!important}.data-table-user{display:flex;align-items:center;gap:10px}.data-table-strong{font-weight:600;color:var(--c-text)}.profile-hero{display:flex;align-items:center;gap:16px;margin-bottom:20px}.profile-hero-text{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-width:0}.profile-hero-name{font-size:18px;font-weight:600;color:var(--c-text)}.detail-list{margin:0;border:1px solid var(--c-border);border-radius:var(--radius-md)}.detail-row{display:flex;justify-content:space-between;gap:16px;padding:12px 14px;font-size:14px}.detail-row+.detail-row{border-top:1px solid var(--c-divider)}.detail-row dt{color:var(--c-text-muted)}.detail-row dd{margin:0;font-weight:600;color:var(--c-text);text-align:right}.option-list{display:flex;flex-direction:column;gap:8px}.option-card{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-md);font-family:inherit;font-size:14px;font-weight:500;text-align:left;color:var(--c-text-secondary);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease}.option-card:hover:not(.active){border-color:var(--c-border-strong);background:var(--c-surface-muted)}.option-card:focus-visible{outline:none;box-shadow:var(--focus-ring)}.option-card.active{border-color:var(--c-primary);background:var(--c-primary-soft);color:var(--c-text);box-shadow:0 0 0 1px var(--c-primary)}.option-card-flag{font-size:18px;line-height:1}.option-card-label{flex:1}.option-card-check{color:var(--c-primary)}.group-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.group-card{display:flex;flex-direction:column;gap:14px;padding:16px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.group-card:hover{border-color:var(--c-border-strong);box-shadow:var(--shadow-md)}.group-card:focus-visible{outline:none;border-color:var(--c-primary);box-shadow:var(--focus-ring)}.group-card-header{display:flex;align-items:flex-start;gap:12px}.group-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border-radius:var(--radius-md);background:var(--c-primary-soft);color:var(--c-primary)}.group-card-heading{flex:1;min-width:0}.group-card-heading h3{margin:0;font-size:15px;font-weight:600;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sensor-count{margin-top:2px;font-size:13px;color:var(--c-text-muted)}.group-card-edit{flex-shrink:0;color:var(--c-text-subtle);opacity:0;transition:opacity .15s ease}.group-card:hover .group-card-edit,.group-card:focus-visible .group-card-edit{opacity:1}.sensor-tags{display:flex;flex-wrap:wrap;gap:6px}.empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:48px 24px;border:1px dashed var(--c-border-strong);border-radius:var(--radius-lg);text-align:center;color:var(--c-text-muted);font-size:14px}.empty-state p{margin:0}.empty-state-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--c-surface-muted);border:1px solid var(--c-border);color:var(--c-text-subtle)}.admin-tools-body{min-height:360px}.admin-tools-form{max-width:520px}.admin-tools-list{margin-top:24px}.admin-tools-create-header{display:flex;flex-direction:column;gap:6px}.admin-tools-create-row{display:flex;gap:8px;align-items:center}.admin-tools-create-row .field-input{flex:1}.toast-container{position:fixed;top:20px;right:20px;z-index:10000;display:flex;flex-direction:column;gap:10px}.toast{min-width:250px;max-width:380px;padding:12px 20px;border-radius:8px;color:#fff;display:flex;justify-content:space-between;align-items:center;gap:10px;box-shadow:0 4px 12px #00000026;animation:slideIn .3s ease-out}.toast.success{background-color:#4caf50}.toast.info{background-color:#2196f3}.toast.error{background-color:#dc2626;border:1px solid #991b1b;box-shadow:0 4px 16px #dc262659}.toast-icon{flex-shrink:0}.toast-message{flex:1}.toast.error .toast-message{font-weight:600}.toast button{background:none;border:none;color:#fff;font-size:1.5rem;cursor:pointer;flex-shrink:0}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.upload-indicator-spinner{flex-shrink:0;width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:upload-indicator-spin .8s linear infinite}.configure-btn .upload-indicator-spinner{display:inline-block;vertical-align:middle}.upload-blocked-banner{padding:10px 12px;border-radius:6px;background-color:#e3f2fd;color:#0d47a1;font-size:.85rem}@keyframes upload-indicator-spin{to{transform:rotate(360deg)}}
