@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-vietnamese-400-normal-CRcqvyg1.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-400-normal-BuGn0gnm.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-latin-ext-400-normal-CiZNW1ec.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-ext-400-normal-DYBYyMQr.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-latin-400-normal-PpnXBOrz.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-400-normal-bXgqVju9.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-vietnamese-500-normal-DREgrEoJ.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-500-normal-CfdwVo8-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-latin-ext-500-normal-h0Fp6aX0.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-ext-500-normal-CK0UkkKf.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-latin-500-normal-B6LVzGNe.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-500-normal-BJkVuMHw.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-vietnamese-600-normal-nyU-ZL2p.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-600-normal-DkpCIyan.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-latin-ext-600-normal-BNd8euf0.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-ext-600-normal-BeUwKxhG.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-latin-600-normal-BZDkUTrt.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-600-normal-5IO4e7bK.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/be-vietnam-pro-vietnamese-700-normal-Csr0PCuG.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-700-normal-By_5yT39.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/be-vietnam-pro-latin-ext-700-normal-C8_gqRu2.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-ext-700-normal-4Hjo2OtD.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/be-vietnam-pro-latin-700-normal-DlW1Zbsh.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-700-normal-C2EtzaOi.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}:root{--bg: #f4f6fa;--surface: #ffffff;--border: #e4e9f0;--border-strong: #d3dbe6;--text: #0f172a;--muted: #56657b;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eff4ff;--radius: 14px;--radius-sm: 9px;--shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 4px 16px rgba(15, 23, 42, .04);font-family:Be Vietnam Pro,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;color:var(--text);background:var(--bg);font-synthesis:none;-webkit-font-smoothing:antialiased}body{margin:0;min-width:320px;background:var(--bg)}h1,h2,h3{letter-spacing:-.01em}h1{font-weight:700}h2,h3,strong,b,th{font-weight:600}h3{font-size:15px}button,input,select,.file-button{min-height:38px;line-height:1.2}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}button,input,select{font:inherit}button{border:1px solid transparent;border-radius:var(--radius-sm);background:var(--primary);color:#fff;padding:9px 14px;cursor:pointer;font-weight:600;font-size:14px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}button:hover:not(:disabled){background:var(--primary-hover)}button.secondary{background:var(--surface);color:#1e293b;border-color:var(--border-strong)}button.secondary:hover:not(:disabled){background:#f1f5f9}button.danger{background:#fef3f2;color:#b42318;border:1px solid #fecdca}button.danger:hover:not(:disabled){background:#fee4e2}button.ghost-dark{background:transparent;color:#cbd5e1;border:1px solid #334155}button.ghost-dark:hover:not(:disabled){background:#1e293b;color:#fff}button:disabled{opacity:.45;cursor:not-allowed}input,select{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);padding:9px 12px;color:var(--text);min-width:0;font-size:14px;transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}input::placeholder{color:#94a3b8}.shell{min-height:100vh;display:grid;grid-template-columns:240px minmax(0,1fr)}.sidebar{background:#111827;color:#fff;padding:24px 14px 18px;display:flex;flex-direction:column;gap:22px;height:100vh;position:sticky;top:0;overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;padding:2px 8px 4px}.brand img{flex:none;width:40px;height:40px;object-fit:contain;filter:drop-shadow(0 2px 6px rgba(0,0,0,.25))}.brand>div{display:grid;gap:2px;min-width:0;flex:1;line-height:1.2}.brand strong{font-size:14px;font-weight:700;letter-spacing:0;white-space:nowrap;overflow:visible;text-overflow:clip}.brand span{font-size:10.5px;color:#9aa8c2;letter-spacing:-.01em;white-space:nowrap;overflow:visible;text-overflow:clip}.sidebar nav{display:grid;gap:18px}.nav-group{display:grid;gap:2px}.nav-title{margin:0 0 6px;padding:0 12px;color:#64748b;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.sidebar a{color:#cbd5e1;text-decoration:none;padding:8px 12px;border-radius:9px;font-weight:600;font-size:14px;display:flex;justify-content:space-between;align-items:center}.sidebar a.active{box-shadow:inset 3px 0 #3b82f6}.nav-count{min-width:22px;padding:2px 7px;border-radius:999px;background:#dc2626;color:#fff;font-size:11px;text-align:center}.sidebar-footer{margin-top:auto;display:grid;gap:12px;padding-top:16px;border-top:1px solid #1f2937}.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#1d4ed8;font-weight:700}.sidebar a.active,.sidebar a:hover{color:#fff;background:#243044}.sidebar-user{padding:0 6px;display:flex;gap:10px;align-items:center}.sidebar-user>div{display:grid;gap:2px}.sidebar-user small{color:#94a3b8}.content{padding:28px 32px;min-width:0;max-width:1600px;width:100%}.page-header{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px}.page-header h1{margin:2px 0 0;font-size:26px;font-weight:700}.page-subtitle{margin:4px 0 0;color:var(--muted);font-size:14px}.eyebrow{margin:0;color:var(--primary);font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.split-view{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}.panel h2{margin-top:0;font-size:16px;font-weight:700}.list{display:grid;gap:4px}.list-row{display:flex;justify-content:space-between;align-items:center;padding:10px 4px;border-bottom:1px solid #eef2f7;gap:12px}.list-row:last-child{border-bottom:0}.list-row div{display:grid;gap:4px}small,.helper{color:#667589}.cell-subtitle{display:block;margin-top:4px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:12px;font-weight:700}.badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.8}.badge.ok{background:#dcfce7;color:#166534}.badge.source-badge{white-space:nowrap;vertical-align:middle;font-weight:600;gap:0;box-shadow:none}.badge.source-badge:before{content:none;display:none}.badge.source-badge-solum{background:#eaf7f1;color:#2f6f55;border:1px solid #d6eee0}.badge.source-badge-fsemi{background:#eff4fa;color:#536a85;border:1px solid #dfe8f2}.inline-form{display:flex;gap:10px;margin-bottom:16px;align-items:center}.stack-form{display:grid;gap:12px}.stack-form label{display:grid;gap:6px;font-size:13px;font-weight:700;color:#334155}.stack-form label input,.stack-form label select,.login-card label input{font-weight:400;font-size:13px}.form-narrow{max-width:620px}.search{width:min(320px,45vw)}.table-wrap{overflow-x:auto}.panel.table-wrap{padding:8px}.panel.table-wrap>h2{padding:12px 12px 4px}.panel.table-wrap>.table-note{margin:0;padding:0 12px 8px;font-size:13px}table{width:100%;border-collapse:collapse}th,td{padding:12px 14px;text-align:left;border-bottom:1px solid #eef2f7;white-space:nowrap;font-size:14px}th{color:var(--muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;background:#f8fafc}thead th:first-child{border-top-left-radius:10px}thead th:last-child{border-top-right-radius:10px}tbody tr:last-child td{border-bottom:0}.split-view tbody tr{cursor:pointer}tbody tr{transition:background .15s ease}tbody tr:hover{background:#f8fafc}.selected-row,.selected-row:hover{background:var(--primary-soft);box-shadow:inset 3px 0 0 var(--primary)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%);background:#fff;border:1px solid #e0e6ef;border-radius:20px;padding:28px;display:grid;gap:18px;box-shadow:0 20px 50px #0f172a14}.login-card h1{margin:4px 0}.login-card label{display:grid;gap:7px;font-size:13px;font-weight:700}.error{color:#b42318;margin:0}.feedback{margin:0 0 16px;padding:12px 14px;border-radius:10px;font-size:14px;font-weight:600}.feedback.error{background:#fef3f2;color:#b42318;border:1px solid #fecdca}.feedback.success{background:#ecfdf3;color:#067647;border:1px solid #abefc6}.feedback.info{background:#eff8ff;color:#175cd3;border:1px solid #b2ddff}.empty-state{min-height:280px;display:grid;place-content:center;text-align:center}.empty-state.compact{min-height:150px}.empty-state h3,.empty-state p{margin:4px 0}.empty-state p{color:#64748b}.settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.setting{border:1px solid #edf1f6;border-radius:12px;padding:16px;display:grid;gap:7px}.setting span{color:#64748b;font-size:13px}.row-actions{display:flex!important;grid-auto-flow:column;gap:8px!important;align-items:center}.secret-box{margin-bottom:16px;display:grid;gap:10px}.secret-box code{word-break:break-all;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:12px}.map-toolbar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:16px}.file-button{display:inline-flex;justify-content:center;align-items:center;border-radius:var(--radius-sm);background:var(--surface);color:#1e293b;border:1px dashed var(--border-strong);padding:9px 14px;cursor:pointer;font-weight:600;font-size:14px}.file-button:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.map-canvas{position:relative;width:100%;overflow:hidden;background:#f8fafc;cursor:crosshair;line-height:0}.map-canvas img{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none}.map-marker{position:absolute;transform:translate(-50%,-50%);min-width:38px;padding:6px 8px;border-radius:999px;background:#1458d4;color:#fff;text-align:center;font-size:11px;font-weight:700;box-shadow:0 4px 12px #0f172a40;cursor:grab;touch-action:none;z-index:2}.map-marker:active{cursor:grabbing}.map-marker.selected{outline:3px solid rgba(20,88,212,.22);outline-offset:3px}.map-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:10px}.mini-list{display:grid;gap:2px}.mini-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid #eef2f7}.mini-row:last-child{border-bottom:0}.mini-row>div{display:grid;gap:3px}.mini-values{text-align:right;font-size:12px;color:#475569}.gateway-split{grid-template-columns:minmax(0,1fr) 390px}.detail-panel{position:sticky;top:18px;display:grid;gap:14px}.detail-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.detail-heading h2{margin:4px 0 0;font-size:20px}.asset-preview{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:12px;border:1px solid #e2e8f0}.asset-placeholder{width:100%;aspect-ratio:4 / 3;display:grid;place-items:center;border-radius:12px;background:#f8fafc;border:1px dashed #cbd5e1;color:#94a3b8}.detail-list{margin:0;display:grid;gap:8px}.detail-list div{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #eef2f7}.detail-list dt{color:#64748b;font-size:12px}.detail-list dd{margin:0;text-align:right;overflow:hidden;text-overflow:ellipsis}@media(max-width:1100px){.grid-3,.map-toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.split-view{grid-template-columns:1fr}.detail-panel{position:static}}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{min-height:auto}.sidebar nav{grid-template-columns:repeat(3,1fr)}.sidebar-user{margin-top:0}.grid-2{grid-template-columns:1fr 1fr}}@media(max-width:600px){.content{padding:18px}.sidebar nav,.grid-2,.grid-3,.settings-grid,.map-toolbar{grid-template-columns:1fr}.inline-form{flex-direction:column;align-items:stretch}.page-header{align-items:flex-start;flex-direction:column}.search{width:100%}}.language-switch{display:inline-grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;padding:4px;border-radius:10px;background:#ffffff0f}.language-switch button{padding:7px 10px;border-radius:7px;background:transparent;color:#94a3b8;font-size:12px;letter-spacing:.06em}.language-switch button.active{background:#fff;color:#111827}.login-language{position:fixed;top:20px;right:20px}.login-language .language-switch{background:#e2e8f0}.filter-panel{margin-bottom:16px}.filter-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.filter-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.asset-workspace{grid-template-columns:minmax(0,1fr) 390px}.detail-editor{padding-top:4px;border-top:1px solid #eef2f7}.telemetry-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}.telemetry-summary div{padding:10px;border-radius:10px;background:#f8fafc;border:1px solid #e8edf4}.telemetry-summary span{display:block;color:#64748b;font-size:11px;margin-bottom:4px}.telemetry-summary strong{font-size:14px}@media(max-width:1100px){.filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.filter-grid,.telemetry-summary{grid-template-columns:1fr}}.badge.alert{background:#fff7ed;color:#c2410c}.map-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;align-items:start}.map-inspector{display:grid;gap:18px;position:sticky;top:18px}.map-inspector section+section{border-top:1px solid #eef2f7;padding-top:16px}.gateway-focus{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.gateway-focus>div{display:grid;gap:4px}.zone-cards{display:grid;gap:9px}.zone-card{padding:12px;border:1px solid #e6ebf2;border-radius:12px;background:#fbfcfe;display:grid;gap:8px}.zone-card>div{display:flex;justify-content:space-between;gap:12px;color:#64748b;font-size:12px}.zone-card b{color:#172033}@media(max-width:1100px){.map-layout{grid-template-columns:1fr}.map-inspector{position:static}}.toast-viewport{position:fixed;top:18px;right:18px;z-index:1700;display:grid;gap:10px;width:min(380px,calc(100vw - 36px));pointer-events:none}.toast-viewport>*{pointer-events:auto}.toast{width:100%;display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:10px;text-align:left;padding:13px 14px;border-radius:14px;background:#fff;color:#172033;border:1px solid #e2e8f0;box-shadow:0 14px 35px #0f172a29}.toast b{font-size:18px;color:#64748b}.toast-dot{width:9px;height:9px;border-radius:50%;background:#64748b}.toast-success .toast-dot{background:#16a34a}.toast-error .toast-dot{background:#dc2626}.toast-info .toast-dot{background:#2563eb}.modal-backdrop,.scanner-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background:#0f172a85;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:grid;place-items:center;padding:20px}.modal-backdrop.confirmation-backdrop{z-index:1600}.confirm-modal{width:min(460px,100%);background:#fff;border-radius:18px;padding:22px;box-shadow:0 30px 80px #0f172a40;display:grid;grid-template-columns:42px 1fr;gap:14px}.confirm-modal h2{margin:0 0 6px}.confirm-modal p{margin:0;color:#64748b}.confirm-icon{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:#eff6ff;color:#1d4ed8;font-weight:700}.modal-actions{grid-column:1 / -1;display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.skeleton{display:grid;gap:10px;padding:8px 0}.skeleton-compact{padding:0}.skeleton-line,.table-skeleton-row span{display:block;height:14px;border-radius:8px;background:linear-gradient(90deg,#edf2f7 25%,#f8fafc 37%,#edf2f7 63%);background-size:400% 100%;animation:skeleton-shimmer 1.25s ease infinite}.table-skeleton{display:grid;gap:12px;padding:10px 0}.table-skeleton-row{display:grid;grid-template-columns:1.4fr 1fr 1fr .8fr;gap:12px}@keyframes skeleton-shimmer{0%{background-position:100% 0}to{background-position:0 0}}.registration-tabs{display:flex;gap:8px;margin-bottom:16px}.registration-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;align-items:start}.mobile-register-card{display:grid;gap:18px}.scan-button{min-height:110px;border-radius:16px;display:grid;place-items:center;gap:6px;font-size:16px}.scan-icon{font-size:34px;line-height:1}.scan-result{display:grid;gap:6px;padding:12px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0}.scan-result span{color:#64748b;font-size:12px}.scan-result code{overflow-wrap:anywhere}.registration-help{position:sticky;top:18px}.scanner-sheet{width:min(560px,100%);background:#fff;border-radius:20px;padding:18px;box-shadow:0 30px 80px #0f172a4d}.scanner-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.scanner-header h2{margin:3px 0 0}.scanner-camera{position:relative;overflow:hidden;border-radius:16px;background:#0f172a;aspect-ratio:3 / 4;max-height:70vh}.scanner-camera video{width:100%;height:100%;object-fit:cover}.scanner-frame{position:absolute;top:18%;right:12%;bottom:18%;left:12%;border:3px solid rgba(255,255,255,.95);border-radius:18px;box-shadow:0 0 0 999px #0f172a3d;pointer-events:none}@media(max-width:900px){.registration-layout{grid-template-columns:1fr}.registration-help{position:static}}@media(max-width:600px){.toast-viewport{top:auto;bottom:16px;right:16px}.registration-page .content{padding:0}.registration-tabs{display:grid;grid-template-columns:1fr 1fr}.scanner-backdrop{padding:0;align-items:end}.scanner-sheet{width:100%;max-height:92vh;overflow-y:auto;border-radius:20px 20px 0 0}.confirm-modal{grid-template-columns:1fr}.confirm-icon{display:none}.modal-actions{grid-column:auto}}td button,.row-actions button,.list-row button{padding:6px 11px;font-size:13px;border-radius:8px}.page-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.toolbar>input{flex:1 1 160px}.toolbar>select{flex:0 1 180px}.toolbar .spacer{flex:1}.filter-grid.advanced{margin-bottom:14px;padding:14px;border-radius:12px;background:#f8fafc;border:1px solid #edf1f6}.create-panel{margin-bottom:16px;border-color:#bfd3f6;background:#f7faff}.create-panel h2{margin:0 0 12px}.create-panel .inline-form{margin:0;flex-wrap:wrap}.new-asset-tag{display:inline-flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:0}.new-asset-tag-chip{display:inline-flex;align-items:center;gap:6px;min-width:0;padding:6px 10px;border:1px solid #bfd3f6;border-radius:10px;background:var(--surface);color:var(--primary)}.new-asset-tag-chip strong{overflow-wrap:anywhere}.new-asset-tag-chip small{color:var(--muted)}.asset-import-modal{width:min(720px,100%);grid-template-rows:auto minmax(0,1fr) auto}.asset-import-body{display:grid;gap:12px;min-height:0;overflow-y:auto}.asset-import-steps{list-style:none;margin:0;padding:0;display:grid;gap:10px}.asset-import-steps li{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}.asset-import-steps li>div{display:grid;gap:2px;min-width:0;flex:1 1 240px}.asset-import-steps small{color:var(--muted);overflow-wrap:anywhere}.asset-import-body>.helper{margin:0;font-size:13px}.asset-import-errors{display:grid;gap:8px}.asset-import-errors .asset-tag-table-wrap{min-height:0;max-height:260px}.asset-import-errors .asset-tag-table td{white-space:normal}.asset-import-errors .asset-tag-table td:first-child{width:64px;text-align:center}.place-on-bind{display:grid;gap:1px;min-width:0}.place-on-bind small{color:var(--muted);font-size:11px}@media(max-width:900px){.asset-tag-modal .asset-tag-table td{white-space:normal;overflow-wrap:anywhere}}.create-panel .inline-form input{flex:1 1 180px}.table-panel h2{margin-bottom:10px}.badge.alert{background:#fef3f2;color:#b42318}.badge.warn{background:#fffaeb;color:#b54708}.alerts-layout{grid-template-columns:minmax(0,1fr)}.alerts-layout>aside{display:grid;grid-template-columns:minmax(260px,360px) minmax(0,1fr);column-gap:28px;align-items:start}.alerts-layout>aside>h2{grid-column:1 / -1}.alerts-layout .rule-list{margin-top:0;padding-top:0;border-top:0}.rule-list{margin-top:16px;padding-top:6px;border-top:1px solid #eef2f7}.count-pill{margin-left:8px;padding:2px 8px;border-radius:999px;background:#eef2f7;color:#475569;font-size:12px;font-weight:700}.alerts-layout td:nth-child(3){white-space:normal;min-width:150px}@media(max-width:1100px){.asset-workspace,.gateway-split{grid-template-columns:1fr}.alerts-layout>aside{grid-template-columns:1fr}.alerts-layout .rule-list{margin-top:16px}}@media(max-width:900px){.shell{grid-template-columns:minmax(0,1fr)}.sidebar{min-width:0;height:auto;position:sticky;top:0;z-index:50;overflow:visible;flex-direction:row;align-items:center;justify-content:space-between;gap:10px;padding:calc(10px + env(safe-area-inset-top)) calc(14px + env(safe-area-inset-right)) 10px calc(14px + env(safe-area-inset-left))}.sidebar .brand span{display:none}.side-nav{display:none!important}.sidebar-footer{margin:0;padding:0;border:0;display:flex;align-items:center;gap:8px}.sidebar-user>div{display:none}.avatar{width:32px;height:32px}.sidebar-footer .ghost-dark{padding:6px 12px;font-size:13px;white-space:nowrap}}.settings-layout .stack-form h2{margin-bottom:4px}select.compact{padding:6px 10px;font-size:13px}.user-cell{display:flex;align-items:center;gap:10px}.avatar.sm{width:28px;height:28px;font-size:12px;color:#fff}.resource-cell{max-width:520px;overflow:hidden;text-overflow:ellipsis;font-size:13px}.method{display:inline-block;min-width:62px;padding:3px 8px;border-radius:6px;font-size:11px;font-weight:700;text-align:center;letter-spacing:.04em;background:#f1f5f9;color:#475569}.method-post{background:#ecfdf3;color:#067647}.method-put,.method-patch{background:#eff4ff;color:#1d4ed8}.method-delete{background:#fef3f2;color:#b42318}.create-panel .helper{display:block;margin-top:10px;font-size:12px}.login-page{grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding:0;place-items:stretch}.login-hero{display:flex;flex-direction:column;align-items:flex-start;gap:28px;padding:48px;background:linear-gradient(180deg,#fff,#eef3f8);border-right:1px solid var(--border)}.login-company{width:104px;height:auto}.login-showcase{flex:1;width:100%;display:flex;flex-direction:column;justify-content:center;gap:24px}.login-hero h2{margin:0;font-size:clamp(22px,2.1vw,30px);line-height:1.25;font-weight:700;letter-spacing:-.015em;text-wrap:balance;color:var(--text)}.login-illustration{width:100%;height:auto;border-radius:16px;mix-blend-mode:multiply}.login-logo{justify-self:center;width:160px;height:auto}.login-hero small{color:var(--muted)}.login-card{align-self:center;justify-self:center;margin:24px;box-shadow:none;border:0;background:transparent}@media(max-width:900px){.login-page{grid-template-columns:1fr}.login-hero{display:none}.login-card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow)}}.file-button.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.map-canvas{border-radius:10px}td button,.row-actions button,.list-row button,select.compact,.sidebar-footer .ghost-dark{min-height:30px}.badge,.method,.nav-count{line-height:1.4}.sidebar a{min-height:36px}.language-switch button{min-height:30px}.map-marker{min-height:0;line-height:1.2}.detail-actions{display:flex;gap:10px;padding-top:14px;border-top:1px solid #eef2f7}.detail-actions button{flex:1}.rule-edit{display:grid;grid-template-columns:minmax(120px,1fr) 110px 130px auto;gap:8px;align-items:center}input.compact{min-height:30px;padding:5px 10px;font-size:13px;width:210px}@media(max-width:700px){.rule-edit{grid-template-columns:1fr 1fr}}:root{--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--dur-fast: .14s;--dur: .24s;--shadow-lift: 0 2px 4px rgba(15, 23, 42, .04), 0 12px 28px rgba(15, 23, 42, .08)}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-down{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@keyframes pop-in{0%{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}@keyframes toast-in{0%{opacity:0;transform:translate(24px) scale(.98)}to{opacity:1;transform:none}}@keyframes shrink{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes grow-x{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.page-enter{animation:fade-up var(--dur) var(--ease-out)}.grid-2>*,.grid-3>*,.split-view>*,.map-layout>*{animation:fade-up .32s var(--ease-out) backwards}.grid-2>:nth-child(2),.grid-3>:nth-child(2),.split-view>:nth-child(2),.map-layout>:nth-child(2){animation-delay:40ms}.grid-2>:nth-child(3),.grid-3>:nth-child(3){animation-delay:80ms}.grid-2>:nth-child(4){animation-delay:.12s}.detail-panel{animation:fade-in var(--dur) var(--ease-out)}.create-panel,.filter-grid.advanced,.rule-edit,.secret-box{animation:slide-down var(--dur) var(--ease-out)}tbody tr{animation:fade-in .26s var(--ease-out) backwards}.panel{transition:box-shadow var(--dur) var(--ease-out),transform var(--dur) var(--ease-out),border-color var(--dur) ease}.zone-card,.setting,.telemetry-summary div{transition:border-color var(--dur) ease,background var(--dur) ease}.zone-card:hover{border-color:#c7d7f2;background:#fff}button,.file-button{transition:background var(--dur-fast) ease,border-color var(--dur-fast) ease,color var(--dur-fast) ease,box-shadow var(--dur) var(--ease-out),transform var(--dur-fast) var(--ease-out)}button:not(.secondary):not(.danger):not(.ghost-dark):not(.map-marker):not(.toast):not(.device-choice):not(.sheet-close):not(.language-switch button):hover:not(:disabled){box-shadow:0 4px 14px #2563eb47}button:active:not(:disabled),.file-button:active{transform:scale(.97)}.sidebar a{transition:background var(--dur-fast) ease,color var(--dur-fast) ease,box-shadow var(--dur) var(--ease-out),padding-left var(--dur) var(--ease-out)}.sidebar a:hover:not(.active){padding-left:16px}.nav-count{animation:nav-pulse 2s var(--ease-out) infinite}@keyframes nav-pulse{0%{box-shadow:0 0 #dc26268c}70%,to{box-shadow:0 0 0 7px #dc262600}}tbody tr,.list-row,.mini-row{transition:background var(--dur-fast) ease,box-shadow var(--dur) var(--ease-out)}.list-row:hover{background:#f8fafc}.selected-row{transition:background var(--dur) ease,box-shadow var(--dur) var(--ease-out)}@keyframes live-pulse{0%{box-shadow:0 0 #087f5b73}70%,to{box-shadow:0 0 0 9px #087f5b00}}.badge.alert:before{animation:dot-blink 1.6s ease-in-out infinite}@keyframes dot-blink{0%,to{opacity:.9}50%{opacity:.25}}.toast{position:relative;overflow:hidden;animation:toast-in .3s var(--ease-spring) backwards;transition:transform var(--dur-fast) ease,box-shadow var(--dur) ease}.toast:hover{transform:translate(-2px);box-shadow:0 18px 40px #0f172a33}.toast-progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:currentColor;opacity:.18;transform-origin:left;animation:shrink 3.5s linear forwards}.toast-success .toast-progress{background:#16a34a;opacity:.5}.toast-error .toast-progress{background:#dc2626;opacity:.5}.toast-info .toast-progress{background:#2563eb;opacity:.5}.modal-backdrop,.scanner-backdrop{animation:fade-in .18s ease backwards}.confirm-modal,.scanner-sheet{animation:pop-in .26s var(--ease-spring) backwards}.map-marker{transition:transform var(--dur-fast) var(--ease-out),box-shadow var(--dur) ease,background var(--dur-fast) ease}.map-marker:hover{transform:translate(-50%,-50%) scale(1.08);box-shadow:0 8px 20px #0f172a4d}.map-marker.selected{animation:marker-pulse 1.8s var(--ease-out) infinite}@keyframes marker-pulse{0%{box-shadow:0 0 #2563eb80}70%,to{box-shadow:0 0 0 12px #2563eb00}}.map-canvas img{animation:fade-in .4s ease backwards}.login-card{animation:fade-up .42s var(--ease-out) backwards}.login-showcase{animation:fade-up .52s var(--ease-out) 80ms backwards}.login-illustration{animation:float 7s ease-in-out .6s infinite}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:1ms!important;animation-iteration-count:1!important;animation-delay:0ms!important;transition-duration:1ms!important}}.confirm-icon.danger{background:#fef3f2;color:#d92d20}.modal-actions button.danger{background:#d92d20;color:#fff;border-color:#d92d20}.modal-actions button.danger:hover:not(:disabled){background:#b42318;box-shadow:0 4px 14px #d92d204d}.bottom-nav,.sheet-backdrop,.sheet-close{display:none}@media(max-width:900px){.content{padding:18px calc(16px + env(safe-area-inset-right)) calc(96px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left))}.bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:60;display:grid;grid-template-columns:repeat(5,1fr);padding:6px 6px calc(6px + env(safe-area-inset-bottom));background:#ffffffeb;backdrop-filter:saturate(1.6) blur(14px);-webkit-backdrop-filter:saturate(1.6) blur(14px);border-top:1px solid var(--border);box-shadow:0 -6px 20px #0f172a0f}.bottom-nav a,.bottom-nav button{min-height:54px;padding:4px 2px;border:0;border-radius:12px;background:transparent;box-shadow:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:#56657b;font-size:11px;font-weight:600;text-decoration:none;-webkit-tap-highlight-color:transparent}.bottom-nav a.active,.bottom-nav button.active{color:var(--primary)}.bottom-nav a.active .tab-icon,.bottom-nav button.active .tab-icon{background:var(--primary-soft)}.bottom-nav button:hover:not(:disabled){background:transparent;box-shadow:none}.tab-icon{position:relative;display:grid;place-items:center;width:52px;height:30px;border-radius:999px;transition:background var(--dur) var(--ease-out)}.tab-badge{position:absolute;top:-3px;right:6px;min-width:18px;padding:1px 5px;border-radius:999px;background:#dc2626;color:#fff;font-size:10px;line-height:1.4;border:2px solid white}.sheet-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0f172a73;animation:fade-in .18s ease backwards}.menu-sheet{position:absolute;left:0;right:0;bottom:0;max-height:80vh;overflow-y:auto;padding:8px 16px calc(20px + env(safe-area-inset-bottom));border-radius:22px 22px 0 0;background:#111827;color:#fff;animation:sheet-up .28s var(--ease-out) backwards}.sheet-grip{display:block;width:40px;height:4px;margin:4px auto 14px;border-radius:4px;background:#475569}.sheet-nav{display:grid;gap:14px}.sheet-nav .nav-group{display:grid;grid-template-columns:1fr 1fr;gap:6px}.sheet-nav .nav-title{grid-column:1 / -1;margin:0;padding:0 4px}.sheet-nav a{color:#e2e8f0;text-decoration:none;padding:12px;min-height:48px;border-radius:12px;background:#1e293b;display:flex;justify-content:space-between;align-items:center;font-weight:600}.sheet-nav a.active{background:var(--primary);color:#fff}.split-view>.detail-panel:not(.is-open){display:none}.detail-panel.is-open{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:80;max-height:86vh;overflow-y:auto;border-radius:22px 22px 0 0;padding:22px 18px calc(24px + env(safe-area-inset-bottom));box-shadow:0 0 0 100vmax #0f172a73,0 -10px 30px #0f172a33;animation:sheet-up .3s var(--ease-out) backwards}.sheet-close{display:grid;place-items:center;position:sticky;top:0;margin:-8px -4px -36px auto;width:38px;height:38px;min-height:38px;padding:0;border-radius:50%;background:#f1f5f9;color:#334155;z-index:3}.sheet-close:hover:not(:disabled){background:#e2e8f0;box-shadow:none}.detail-panel.is-open .detail-heading{padding-right:44px}input,select,textarea{font-size:16px}button,input,select,.file-button{min-height:44px}td button,.row-actions button,.list-row button,select.compact,input.compact{min-height:38px}.page-header h1{font-size:22px}.toast-viewport{top:auto;bottom:calc(84px + env(safe-area-inset-bottom))}}@keyframes sheet-up{0%{transform:translateY(100%)}to{transform:none}}@media(max-width:700px){.panel.table-wrap{padding:6px;background:transparent;border:0;box-shadow:none;overflow:visible}.table-wrap table,.table-wrap tbody{display:block}.table-wrap thead{display:none}.table-wrap tbody tr{display:grid;gap:2px;margin-bottom:10px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}.table-wrap tbody tr.selected-row{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}.table-wrap td{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 0;border:0;white-space:normal;text-align:right;min-width:0}.table-wrap td:before{content:attr(data-label);flex:none;color:var(--muted);font-size:12px;font-weight:600;text-align:left}.table-wrap td[data-label=""]:before{content:none}.table-wrap td:first-child{display:block;text-align:left;padding:0 0 6px;margin-bottom:4px;border-bottom:1px solid #eef2f7;font-size:15px}.table-wrap td:first-child:before{content:none}.table-wrap td .row-actions{flex-wrap:wrap;justify-content:flex-end}.table-wrap td .cell-subtitle{max-width:none}.resource-cell{max-width:none;overflow-wrap:anywhere}.alerts-layout td:nth-child(3){min-width:0}}.badge{white-space:nowrap;flex:none}@media(max-width:900px){.detail-panel .asset-preview,.detail-panel .asset-placeholder{aspect-ratio:16 / 9;max-height:200px}}.login-subtitle{margin:-6px 0 4px;text-align:center}.device-create{display:grid;grid-template-columns:168px minmax(0,1fr);gap:20px;align-items:center}.device-photo{width:100%;height:auto;aspect-ratio:3 / 2;object-fit:contain;border-radius:12px;background:radial-gradient(circle at 50% 45%,#fff,#eef3fa 75%)}.device-banner{width:100%;height:132px;object-fit:contain;border-radius:12px;background:radial-gradient(circle at 50% 45%,#fff,#eef3fa 80%)}.registration-tabs{gap:12px}.device-choice{display:flex;align-items:center;gap:12px;padding:8px 16px 8px 8px;min-height:0;background:var(--surface);color:var(--text);border:1px solid var(--border-strong);border-radius:14px;box-shadow:var(--shadow)}.device-choice img{width:84px;height:56px;object-fit:contain;border-radius:9px;transition:transform var(--dur) var(--ease-out)}.device-choice:hover:not(:disabled){background:var(--surface);border-color:#b9cdf0;box-shadow:var(--shadow-lift)}.device-choice:hover img{transform:scale(1.04)}.device-choice.active{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px #2563eb26;color:var(--primary)}.device-choice.active:hover:not(:disabled){background:var(--primary-soft)}@media(max-width:600px){.device-create{grid-template-columns:1fr}.device-create .device-photo{max-height:150px}.registration-tabs{display:grid;grid-template-columns:1fr 1fr}.device-choice{flex-direction:column;padding:8px;gap:6px;text-align:center;font-size:13px}.device-choice img{width:100%;height:80px}}.device-cell{display:flex;align-items:center;gap:12px}.unified-device-cell{min-width:0;gap:10px}.unified-device-cell .name-link{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-location-cell{display:inline-flex;align-items:center;gap:6px;max-width:100%;color:#15803d;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-location-cell svg{flex:none;color:#16a34a}.gateway-table-wide td:nth-child(4),.tag-table-wide td:nth-child(5){overflow:hidden}.gateway-table-wide,.tag-table-wide{overflow-x:auto}.gateway-table-wide table,.tag-table-wide table{table-layout:auto;width:100%;min-width:1080px}.gateway-table-wide th,.gateway-table-wide td,.tag-table-wide th,.tag-table-wide td{vertical-align:middle;white-space:nowrap}.gateway-table-wide th:nth-child(2),.gateway-table-wide td:nth-child(2){min-width:220px}.gateway-table-wide th:nth-child(3),.gateway-table-wide td:nth-child(3){min-width:180px}.gateway-table-wide th:nth-child(4),.gateway-table-wide td:nth-child(4){min-width:300px;overflow:visible}.gateway-table-wide th:nth-child(5),.gateway-table-wide td:nth-child(5){min-width:125px}.gateway-table-wide th:nth-child(6),.gateway-table-wide td:nth-child(6){min-width:175px}.tag-table-wide th:nth-child(2),.tag-table-wide td:nth-child(2){min-width:185px}.tag-table-wide th:nth-child(3),.tag-table-wide td:nth-child(3){min-width:180px}.tag-table-wide th:nth-child(4),.tag-table-wide td:nth-child(4){min-width:210px}.tag-table-wide th:nth-child(5),.tag-table-wide td:nth-child(5){min-width:310px;overflow:visible}.tag-table-wide th:nth-child(6),.tag-table-wide td:nth-child(6){min-width:145px}.gateway-table-wide th:last-child,.gateway-table-wide td:last-child,.tag-table-wide th:last-child,.tag-table-wide td:last-child{min-width:145px;width:145px}.device-location-cell{overflow:visible;text-overflow:clip}.device-list-actions{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:nowrap;white-space:nowrap}.device-list-actions .row-actions,.device-list-actions .table-actions{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;margin:0}.device-thumb{position:relative;flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:10px;background:radial-gradient(circle at 50% 40%,#fff,#eef3fa 85%);border:1px solid var(--border)}.device-thumb img{width:34px;height:34px;object-fit:contain;transition:transform var(--dur) var(--ease-out)}tbody tr:hover .device-thumb img{transform:scale(1.12) rotate(-4deg)}.status-dot{position:absolute;right:-3px;bottom:-3px;width:12px;height:12px;border-radius:50%;border:2px solid #fff;background:#94a3b8}.status-dot.online{background:#22c55e;animation:none;box-shadow:none}@keyframes live-dot-ring{0%{box-shadow:0 0 #22c55e80}70%,to{box-shadow:0 0 0 6px #22c55e00}}.device-empty{display:grid;justify-items:center;gap:6px;padding:20px 8px;text-align:center}.device-empty img{width:180px;height:120px;object-fit:contain;animation:float 6s ease-in-out infinite;filter:drop-shadow(0 12px 18px rgba(15,23,42,.12))}.device-empty-icon{display:grid;place-items:center;width:84px;height:84px;border-radius:22px;background:var(--primary-soft);color:var(--primary);font-size:40px}.device-empty h3{margin:8px 0 0}.device-empty p{margin:0;color:var(--muted);max-width:280px}@media(max-width:700px){.table-wrap td:first-child .device-cell{gap:10px}}.site-columns{align-items:start}.site-column h2{display:flex;align-items:center;gap:8px}.step{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-size:12px;font-weight:700}.quick-add{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.quick-add input{flex:1 1 140px}.quick-add button{flex:none}.site-list{max-height:560px;overflow-y:auto;margin:0 -6px;padding:0 6px;scrollbar-width:thin}.site-row{border-radius:10px;padding:10px;border-bottom-color:transparent}.site-row.selectable{cursor:pointer}.site-row.selected{background:var(--primary-soft);box-shadow:inset 3px 0 0 var(--primary)}.site-row.selected strong{color:var(--primary)}.site-hint{margin:24px 0;color:var(--muted);text-align:center}.shell{grid-template-columns:236px minmax(0,1fr);background:linear-gradient(90deg,#16213b 236px,var(--bg) 236px)}.main-column{min-width:0;display:flex;flex-direction:column}.sidebar{background:#16213b;padding:22px 14px}.side-nav{display:grid;gap:16px}.side-nav a,.sheet-nav a{gap:12px;justify-content:flex-start}.side-nav a{min-height:44px;padding:10px 14px;border-radius:12px;color:#c6d0e3;font-size:14.5px}.side-nav a svg{flex:none;opacity:.9}.side-nav .nav-label{flex:1}.side-nav a:hover:not(.active){background:#ffffff0f;color:#fff;padding-left:16px}.side-nav a.active{background:linear-gradient(180deg,#2f6fe4,#2563eb);color:#fff;box-shadow:0 8px 18px #2563eb59}.sidebar-footer{display:none}.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:16px;padding:14px 32px;background:#f4f6fad9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.topbar-title{flex:1;min-width:0}.topbar-title h1{margin:0;font-size:26px;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumbs{margin:0;color:var(--muted);font-size:14px}.crumbs span{margin:0 6px;opacity:.6}.crumbs b{color:var(--text);font-weight:600}.topbar-bell{position:relative;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:#334155;transition:background var(--dur-fast) ease}.topbar-bell:hover{background:#e8edf5}.topbar-bell b{position:absolute;top:2px;right:0;min-width:18px;padding:1px 5px;border-radius:999px;background:#dc2626;color:#fff;font-size:10px;line-height:1.4;text-align:center;border:2px solid var(--bg);animation:nav-pulse 2s var(--ease-out) infinite}.user-menu{position:relative}.user-trigger{display:flex;align-items:center;gap:10px;padding:4px 10px 4px 4px;min-height:0;border-radius:999px;background:transparent;color:var(--text);box-shadow:none!important}.user-trigger:hover:not(:disabled){background:#e8edf5}.user-trigger .avatar{width:38px;height:38px;color:#fff;background:linear-gradient(135deg,#3b82f6,#1d4ed8)}.user-name{display:grid;text-align:left;font-weight:600;line-height:1.2}.user-name small{color:var(--muted);font-size:11px;font-weight:600}.user-dropdown{position:absolute;right:0;top:calc(100% + 8px);min-width:180px;padding:6px;border-radius:12px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lift);animation:pop-in .18s var(--ease-out) backwards;z-index:50}.user-dropdown button{width:100%;justify-content:flex-start;text-align:left;background:transparent;color:#b42318;box-shadow:none!important}.user-dropdown button:hover:not(:disabled){background:#fef3f2}.content{padding-top:6px}@media(max-width:900px){.shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);background:var(--bg)}.topbar{display:none}.sidebar{background:#16213b}.sidebar-footer{display:flex}.content{padding-top:18px}}.dashboard{display:grid;gap:16px}.dash-card{padding:18px;display:flex;flex-direction:column;min-width:0}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.card-head h2{margin:0;font-size:17px}.card-head a{color:var(--primary);font-size:13px;font-weight:600;text-decoration:none}.card-head a:hover{text-decoration:underline}.legend-row{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0 0 10px;padding:0;list-style:none;color:var(--muted);font-size:12.5px}.card-head .legend-row{margin:0}.legend-row li{display:flex;align-items:center;gap:6px}.legend-row i{width:10px;height:10px;border-radius:50%}.kpi-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.kpi{position:relative;overflow:hidden;display:flex;align-items:flex-start;gap:16px;min-height:132px;padding:20px;border-radius:18px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);color:inherit;text-decoration:none;transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out)}.kpi:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}.kpi-icon{flex:none;display:grid;place-items:center;width:56px;height:56px;border-radius:16px;color:#fff}.kpi-blue .kpi-icon{background:linear-gradient(135deg,#3b8bf6,#1f63e0);box-shadow:0 8px 18px #2563eb4d}.kpi-green .kpi-icon{background:linear-gradient(135deg,#2bc46a,#16a34a);box-shadow:0 8px 18px #16a34a4d}.kpi-orange .kpi-icon{background:linear-gradient(135deg,#fbb024,#f08a0c);box-shadow:0 8px 18px #f08a0c4d}.kpi-violet .kpi-icon{background:linear-gradient(135deg,#7c6cf2,#5a46d6);box-shadow:0 8px 18px #5a46d64d}.kpi-body{display:grid;gap:2px;min-width:0}.kpi:has(.kpi-image) .kpi-body{padding-right:88px}.kpi-label{color:#334155;font-size:15px;font-weight:600}.kpi-value{font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}.kpi-sub{margin:6px 0 0;color:var(--muted);font-size:13px}.kpi-spark{position:absolute;right:18px;top:22px;display:flex;align-items:flex-end;gap:3px;height:44px}.kpi-spark i{width:6px;border-radius:3px 3px 0 0;background:linear-gradient(180deg,#3b82f6,#93c5fd);transform-origin:bottom;animation:grow-y .6s var(--ease-out) backwards}.kpi-spark i:nth-child(n+7){animation-delay:80ms}@keyframes grow-y{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.kpi-legend{margin:6px 0 0;padding:0;list-style:none;display:grid;gap:2px;font-size:13px;color:#475569}.kpi-legend li{display:grid;grid-template-columns:14px auto 1fr;align-items:center;column-gap:6px;white-space:nowrap}.kpi-legend b{justify-self:start;margin-left:10px;color:var(--text)}.dot{width:9px;height:9px;border-radius:50%;display:inline-block}.dot.good{background:#22c55e}.dot.muted{background:#cbd5e1}.dot.critical{background:#ef4444}.kpi-image{position:absolute;right:6px;bottom:6px;width:104px;height:80px;object-fit:contain;filter:drop-shadow(0 10px 14px rgba(15,23,42,.18));transition:transform .4s var(--ease-out)}.kpi:hover .kpi-image{transform:translateY(-4px) rotate(-3deg) scale(1.04)}.kpi-violet .kpi-body{flex:1;grid-template-columns:auto 1fr;column-gap:18px}.kpi-violet .kpi-label,.kpi-violet .kpi-value{grid-column:1}.kpi-floors{grid-column:2;grid-row:1 / span 3;margin:0;padding:0;list-style:none;display:grid;gap:3px;font-size:12px;color:#475569}.kpi-floors li{display:grid;grid-template-columns:minmax(0,64px) 1fr auto;align-items:center;gap:8px}.kpi-floors span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kpi-floors i{height:7px;border-radius:999px;background:#eef2f7;overflow:hidden}.kpi-floors em{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#5aa2f8,#2563eb);transform-origin:left;animation:grow-x .7s var(--ease-out) backwards}.kpi-floors b{color:var(--text);font-variant-numeric:tabular-nums}.dash-middle{display:grid;grid-template-columns:minmax(232px,.8fr) minmax(0,2.4fr) minmax(350px,1fr);gap:16px}.dash-bottom{display:grid;grid-template-columns:minmax(330px,1fr) minmax(0,2fr);gap:16px}.building-body{flex:1;display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,1fr);gap:12px;align-items:center}.storey-list{margin:0;padding:0;list-style:none;display:grid;gap:6px}.storey-list button{width:100%;min-height:0;display:grid;gap:2px;text-align:left;padding:9px 12px;border-radius:12px;background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:none!important}.storey-list button small{color:var(--muted);font-weight:500}.storey-list button:hover:not(:disabled){background:#f8fafc;border-color:#c7d7f2}.storey-list button.active,.storey-list button.active:hover:not(:disabled){background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.plan-canvas{--plan-max-h: 560px;flex:1;display:grid;place-items:center;min-height:0}.plan-stage{position:relative;width:min(100%,calc(var(--plan-max-h) * var(--ar)));aspect-ratio:var(--ar);border-radius:10px;overflow:hidden;background:#fff;border:1px solid var(--border);container-type:inline-size}.plan-stage>img{position:absolute;max-width:none;object-fit:fill;-webkit-user-select:none;user-select:none;animation:fade-in .4s ease backwards}.plan-zone{position:absolute;border-radius:clamp(6px,2cqi,16px);pointer-events:none;background:color-mix(in srgb,var(--zone) 14%,transparent);border:1px dashed color-mix(in srgb,var(--zone) 70%,transparent)}.plan-asset-position{position:absolute;z-index:8;width:16px;height:16px;transform:translate(-50%,-50%);border:2px solid #fff;border-radius:50%;background:#111827;box-shadow:0 0 0 2px #11182747,0 2px 8px #0f172a3d;cursor:pointer}.plan-asset-position>span{position:absolute;top:4px;right:4px;bottom:4px;left:4px;border-radius:50%;background:#fff}.plan-asset-position:hover,.plan-asset-position:focus-visible{z-index:20;transform:translate(-50%,-50%) scale(1.25)}.lg-asset-position{width:12px;height:12px;display:inline-block;border:2px solid #fff;border-radius:50%;background:#111827;box-shadow:0 0 0 1px #11182759}.plan-gw{position:absolute;width:0;height:0;z-index:2}.plan-gw i{position:absolute;left:0;top:0;transform:translate(-50%,-50%);width:clamp(7px,1.1cqi,11px);aspect-ratio:1;border-radius:50%;background:var(--zone);border:1.5px solid #fff;box-shadow:0 0 0 1.5px #94a3b8,0 1px 3px #0f172a59}.plan-gw.online i{box-shadow:0 0 0 1.5px #16a34a,0 1px 3px #0f172a59}.plan-gw small{position:absolute;left:0;top:clamp(6px,1cqi,9px);transform:translate(-50%);padding:1px 4px;border-radius:4px;background:#0f172abf;color:#fff;font-size:clamp(8px,.95cqi,10px);font-weight:700;line-height:1.3;white-space:nowrap;pointer-events:none}.plan-gw:hover{z-index:5}.plan-legend{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-top:10px;color:var(--muted);font-size:12px;font-weight:600}.plan-legend span{display:inline-flex;align-items:center;gap:6px}.plan-legend a{color:var(--primary);text-decoration:none}.plan-legend-gw{width:10px;height:10px;border-radius:50%;background:#fff;box-shadow:0 0 0 2px #94a3b8}.plan-legend-gw.online{box-shadow:0 0 0 2px #16a34a}.zone-chip{position:absolute;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:4px;z-index:3;padding:.2em .55em;border-radius:999px;background:#fffffff2;border:1px solid var(--zone);color:var(--text);text-decoration:none;font-size:clamp(9px,1.1cqi,12px);font-weight:600;line-height:1.3;box-shadow:0 2px 6px #0f172a26;white-space:nowrap;animation:pop-in .36s var(--ease-spring) backwards;transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) ease}.zone-chip:hover{transform:translate(-50%,-50%) scale(1.06);box-shadow:0 6px 14px #0f172a38;z-index:4}.zone-chip i{width:.6em;height:.6em;border-radius:50%;background:var(--zone)}.zone-chip b.chip-alert{background:#fffaeb;color:#b54708}.zone-chip b.chip-offline{background:#fef3f2;color:#b42318}.zone-chip b{padding:0 .4em;border-radius:999px;background:color-mix(in srgb,var(--zone) 16%,#fff);color:var(--text);font-weight:700}.plan-empty{flex:1;display:grid;place-content:center;justify-items:center;gap:6px;min-height:260px;border-radius:14px;background:#f8fafc;border:1px dashed var(--border-strong);color:var(--muted)}.plan-empty p{margin:0}.plan-empty a{color:var(--primary);font-weight:600;text-decoration:none}.donut-body{flex:1;display:flex;align-items:center;gap:20px}.donut-body svg{flex:none;overflow:visible}.donut-slice{transition:stroke-width var(--dur) var(--ease-out),opacity var(--dur) ease;cursor:pointer}.donut-total{font-size:26px;font-weight:700;fill:var(--text)}.donut-caption{font-size:12px;fill:var(--muted)}.donut-legend{flex:1;margin:0;padding:0;list-style:none;display:grid;gap:8px;font-size:13.5px;min-width:0}.donut-legend li{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:8px;padding:2px 6px;border-radius:8px;transition:background var(--dur-fast) ease}.donut-legend li.hover{background:#f1f5f9}.donut-legend i{width:10px;height:10px;border-radius:50%}.donut-legend span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.donut-legend b{font-variant-numeric:tabular-nums}.donut-legend small{color:var(--muted);font-weight:500}.chart-wrap{position:relative;flex:1}.chart-wrap svg{display:block;max-width:100%}.chart-grid line{stroke:#eef2f7}.chart-grid text,.chart-axis{fill:#94a3b8;font-size:11px}.chart-baseline{stroke:#cbd5e1}.chart-hover-band{fill:#f1f5f9}.chart-wrap g.dim path{opacity:.45}.chart-wrap path{transition:opacity var(--dur-fast) ease}.chart-tooltip{position:absolute;top:0;transform:translate(-50%);pointer-events:none;display:grid;gap:4px;min-width:150px;padding:10px 12px;border-radius:12px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lift);font-size:12.5px;animation:fade-in .12s ease backwards}.chart-tooltip span{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:6px;color:var(--muted)}.chart-tooltip span i{width:8px;height:8px;border-radius:2px}.chart-tooltip b{color:var(--text);font-variant-numeric:tabular-nums}.activity-list{margin:0;padding:0;list-style:none;display:grid;gap:6px}.activity-list li{display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:52px;padding:7px 8px;border-radius:12px;transition:background var(--dur-fast) ease;animation:fade-up .3s var(--ease-out) backwards}.activity-list li:hover{background:#f8fafc}.activity-list li>div{display:grid;align-content:center;gap:2px;min-width:0;overflow:hidden}.activity-list strong{display:block;min-width:0;font-size:14px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-list small{display:block;min-width:0;color:var(--muted);font-size:12.5px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-list time{align-self:center;color:var(--muted);font-size:12px;line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap}.activity-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:50%}.activity-move .activity-icon{background:#ecfdf3;color:#16a34a}.activity-alert{background:#fef3f2}.activity-alert:hover{background:#fee4e2!important}.activity-alert .activity-icon{background:#fff;color:#dc2626}.activity-resolved .activity-icon{background:#eff6ff;color:#2563eb}@media(max-width:1400px){.kpi-image{width:92px;height:70px;opacity:.9}.kpi:has(.kpi-image) .kpi-body{padding-right:80px}.kpi-violet .kpi-body{grid-template-columns:1fr}.kpi-floors{grid-column:1;grid-row:auto;margin-top:6px}}@media(max-width:1280px){.kpi-row,.dash-middle,.dash-bottom{grid-template-columns:repeat(2,minmax(0,1fr))}.plan-card,.timeline-card{grid-column:1 / -1}}@media(max-width:700px){.kpi-row,.dash-middle,.dash-bottom{grid-template-columns:1fr}.kpi{min-height:0}.kpi-value{font-size:28px}.donut-body{flex-direction:column;align-items:stretch}.donut-body svg{align-self:center}.plan-canvas{--plan-max-h: 380px}}.mobile-title{display:none}@media(max-width:900px){.mobile-title{display:block;margin:0;font-size:22px;line-height:1.25;text-wrap:balance}}.building-photo{display:block;border-radius:14px;overflow:hidden}.building-photo img{width:100%;height:auto;max-height:320px;object-fit:contain;mix-blend-mode:multiply;transition:transform .5s var(--ease-out)}.building-photo:hover img{transform:scale(1.04)}.buildings-layout{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr) minmax(220px,280px);gap:16px;align-items:start}.building-list{padding:14px}.building-list ul{margin:0;padding:0;list-style:none;display:grid;gap:8px;max-height:640px;overflow-y:auto}.building-item{width:100%;min-height:0;display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center;padding:8px;text-align:left;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:14px;box-shadow:none!important}.building-item:hover:not(:disabled){background:#f8fafc;border-color:#c7d7f2}.building-item.active,.building-item.active:hover:not(:disabled){background:var(--primary-soft);border-color:var(--primary);box-shadow:0 0 0 3px #2563eb1f!important}.building-item img{width:72px;height:60px;object-fit:cover;border-radius:10px;background:#eef3fa}.building-item span{display:grid;gap:3px;min-width:0}.building-item strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.building-item small{color:var(--muted)}.building-hero{padding:12px;display:grid;gap:12px}.hero-frame{position:relative;border-radius:14px;overflow:hidden;background:linear-gradient(180deg,#f8fbff,#eef3fa);aspect-ratio:16 / 10;display:grid;place-items:center}.hero-frame img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;animation:fade-in .4s ease backwards}.hero-badge{position:absolute;left:12px;top:12px;padding:4px 10px;border-radius:999px;background:#ffffffe6;color:var(--muted);font-size:12px;font-weight:600}.hero-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:4px 6px}.hero-bar h2{margin:0;font-size:20px}.hero-bar small{color:var(--muted)}.building-gallery{padding:14px}.building-gallery h2{margin-top:0}.gallery-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.gallery-item{position:relative;margin:0;border-radius:12px;overflow:hidden;border:2px solid transparent;transition:border-color var(--dur) ease}.gallery-item.active{border-color:var(--primary)}.gallery-thumb{display:block;width:100%;min-height:0;padding:0;border-radius:0;background:#eef3fa;box-shadow:none!important}.gallery-thumb img{display:block;width:100%;aspect-ratio:4 / 3;object-fit:cover;transition:transform .4s var(--ease-out)}.gallery-item:hover .gallery-thumb img{transform:scale(1.06)}.cover-badge{position:absolute;left:6px;top:6px;display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:999px;background:#2563ebeb;color:#fff;font-size:11px;font-weight:600}.gallery-item figcaption{position:absolute;right:6px;bottom:6px;display:flex;gap:4px;opacity:0;transition:opacity var(--dur) ease}.gallery-item:hover figcaption,.gallery-item:focus-within figcaption{opacity:1}.gallery-item figcaption button{min-height:28px;width:28px;padding:0;display:grid;place-items:center;border-radius:8px;background:#fffffff2;color:#334155;box-shadow:0 2px 8px #0f172a33!important}.gallery-item figcaption button:hover:not(:disabled){background:#fff;color:var(--primary)}.gallery-add{display:grid;place-content:center;justify-items:center;gap:4px;aspect-ratio:4 / 3;border-radius:12px;border:1.5px dashed var(--border-strong);color:var(--muted);font-size:12.5px;font-weight:600;cursor:pointer;transition:border-color var(--dur) ease,color var(--dur) ease,background var(--dur) ease}.gallery-add:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.gallery-add.busy{opacity:.6;pointer-events:none}.floors-layout{display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr) minmax(260px,320px);gap:16px;align-items:start}.floor-rail{padding:12px;display:grid;gap:10px}.floor-rail ul{margin:0;padding:0;list-style:none;display:grid;gap:8px;max-height:620px;overflow-y:auto}.floor-thumb{width:100%;min-height:0;display:grid;gap:6px;padding:8px;text-align:left;border-radius:14px;background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:none!important}.floor-thumb:hover:not(:disabled){background:#f8fafc;border-color:#c7d7f2}.floor-thumb.active,.floor-thumb.active:hover:not(:disabled){border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px #2563eb1f!important}.floor-thumb img{width:100%;aspect-ratio:16 / 10;object-fit:cover;border-radius:10px;background:#f1f5f9;transform:perspective(500px) rotateX(18deg);transform-origin:bottom;transition:transform .4s var(--ease-out)}.floor-thumb:hover img,.floor-thumb.active img{transform:none}.floor-thumb-empty{display:grid;place-items:center;aspect-ratio:16 / 10;border-radius:10px;background:#f1f5f9;color:#94a3b8}.floor-thumb span:last-child{display:flex;justify-content:space-between;gap:8px}.floor-thumb small{color:var(--muted)}.floor-side{display:grid;gap:18px;padding:16px}.floor-side section+section{border-top:1px solid #eef2f7;padding-top:14px}.floor-side h2{margin:0 0 10px}.floor-tools{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.floor-tools .file-button{gap:6px;text-decoration:none;font-size:13px}.zone-admin{margin:0;padding:0;list-style:none;display:grid;gap:6px;max-height:420px;overflow-y:auto}.zone-admin li{display:grid;gap:6px;padding:10px;border-radius:12px;border:1px solid #eef2f7}.zone-admin li>div:first-child{display:grid;gap:2px}.zone-admin small{color:var(--muted)}.quick-add.inline{margin:0}.date-field{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:13px;font-weight:600}.date-field input{min-width:150px}.direction{display:inline-flex;align-items:center;gap:6px;font-weight:600}.direction-in{color:#16a34a}.direction-out{color:#dc2626}.zone-pin{display:inline-flex;align-items:center;gap:6px}.zone-pin svg{color:var(--primary);flex:none}.pager{display:flex;justify-content:center;align-items:center;gap:12px;margin-top:14px;color:var(--muted);font-weight:600}.device-heroes{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:14px}.device-hero{position:relative;display:grid;grid-template-columns:minmax(140px,220px) 1fr;align-items:center;gap:20px;min-height:0;padding:18px 22px;border-radius:20px;text-align:left;background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow)!important;transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) ease,border-color var(--dur) ease}.device-hero:hover:not(:disabled){background:var(--surface);transform:translateY(-3px);box-shadow:var(--shadow-lift)!important}.device-hero.active{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb24,var(--shadow)!important}.device-hero img{width:100%;height:150px;object-fit:contain;filter:drop-shadow(0 14px 18px rgba(15,23,42,.18));transition:transform .5s var(--ease-out)}.device-hero:hover img{transform:translateY(-4px) rotate(-3deg)}.device-hero-signal{position:absolute;right:16px;top:16px;display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#38bdf8,#0284c7);color:#fff;box-shadow:0 6px 14px #0284c74d}.device-hero-body{display:grid;gap:2px}.device-hero ul{margin:8px 0 0;padding:0;list-style:none;display:grid;gap:6px;font-size:13px;color:#475569}.device-hero li{display:grid;grid-template-columns:12px minmax(90px,auto) 1fr auto;align-items:center;gap:8px}.hero-meter{height:8px;border-radius:999px;background:#eef2f7;overflow:hidden;display:block}.hero-meter em{display:block;height:100%;border-radius:inherit;transform-origin:left;animation:grow-x .7s var(--ease-out) backwards}.hero-meter em.good{background:#22c55e}.hero-meter em.critical{background:#ef4444}.hero-meter em.info,.dot.info{background:#3b82f6}.device-strip{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 10px;margin-bottom:8px;scrollbar-width:thin}.strip-tile{position:relative;flex:none;display:grid;justify-items:center;gap:2px;width:84px;min-height:0;padding:8px 6px 6px;border-radius:14px;background:var(--surface);color:var(--muted);border:1px solid var(--border);box-shadow:none!important}.strip-tile:hover:not(:disabled){background:#f8fafc;border-color:#c7d7f2;transform:translateY(-2px)}.strip-tile img{width:56px;height:44px;object-fit:contain}.strip-tile .status-dot{right:8px;bottom:auto;top:8px}.strip-tile small{font-size:10.5px}.segmented{display:inline-flex;gap:4px;padding:4px;margin-bottom:14px;border-radius:14px;background:#e8edf5}.segmented button{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:6px 14px;border-radius:10px;background:transparent;color:#475569;box-shadow:none!important}.segmented button:hover:not(:disabled){background:#fff9}.segmented button.active,.segmented button.active:hover:not(:disabled){background:var(--surface);color:var(--text);box-shadow:0 2px 6px #0f172a1a!important}.segmented.compact{margin-bottom:0}.battery{display:inline-flex;align-items:center;gap:8px}.battery-track{position:relative;width:44px;height:14px;padding:2px;border-radius:4px;border:1.5px solid #94a3b8}.battery-track:after{content:"";position:absolute;right:-4px;top:3px;width:2px;height:5px;border-radius:0 2px 2px 0;background:#94a3b8}.battery-track i{display:block;height:100%;border-radius:2px}.battery-track i.good{background:#22c55e}.battery-track i.warning{background:#f59e0b}.battery-track i.critical{background:#ef4444}.battery small,.signal small{color:var(--muted);font-variant-numeric:tabular-nums}.signal{display:inline-flex;align-items:flex-end;gap:2px;height:16px}.signal i{width:4px;border-radius:1px;background:#dbe3ee}.signal i.on{background:#2563eb}.signal small{margin-left:6px;align-self:center}.alert-cell{display:flex;align-items:center;gap:12px}.alert-cell>div{display:grid}.alert-cell small{color:var(--muted)}.severity-icon{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;flex:none}.severity-icon.critical{background:#fef3f2;color:#dc2626}.severity-icon.warning{background:#fffaeb;color:#d97706}.severity-pill{display:inline-flex;padding:4px 12px;border-radius:8px;font-size:12px;font-weight:700}.severity-pill.critical{background:#fee4e2;color:#b42318}.severity-pill.warning{background:#fef0c7;color:#b54708}.stat-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.stat-tiles div{display:grid;gap:4px;padding:16px 18px;border-radius:16px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow)}.stat-tiles span{color:var(--muted);font-size:13px;font-weight:600}.stat-tiles strong{font-size:28px;font-variant-numeric:tabular-nums}.reports-grid{display:grid;grid-template-columns:minmax(330px,1.2fr) minmax(0,1fr) minmax(0,1.2fr);gap:16px}.rank-bars{margin:0;padding:0;list-style:none;display:grid;gap:10px}.rank-bars li{display:grid;grid-template-columns:minmax(0,120px) 1fr auto;align-items:center;gap:10px;font-size:13px}.rank-name{display:grid;min-width:0}.rank-name strong,.rank-name small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rank-name small{color:var(--muted)}.rank-track{height:10px;border-radius:999px;background:#eef2f7;overflow:hidden}.rank-track i{display:block;height:100%;border-radius:0 4px 4px 0;transform-origin:left;animation:grow-x .7s var(--ease-out) backwards}.rank-bars b{font-variant-numeric:tabular-nums}.chart-crosshair{stroke:#cbd5e1;stroke-dasharray:3 3}@media(max-width:1280px){.buildings-layout,.floors-layout{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr)}.building-gallery,.floor-side{grid-column:1 / -1}.gallery-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.reports-grid{grid-template-columns:1fr 1fr}.reports-grid>:last-child{grid-column:1 / -1}}@media(max-width:900px){.buildings-layout,.floors-layout,.device-heroes,.reports-grid{grid-template-columns:minmax(0,1fr)}.reports-grid>:last-child{grid-column:auto}.stat-tiles{grid-template-columns:1fr 1fr}.floor-rail ul{grid-auto-flow:column;grid-auto-columns:170px;overflow-x:auto;max-height:none}.building-list ul{grid-auto-flow:column;grid-auto-columns:240px;overflow-x:auto;max-height:none}.device-hero{grid-template-columns:120px 1fr}.device-hero img{height:110px}}.field-error{margin:6px 0 0;color:#b42318;font-size:13px;font-weight:600}input[aria-invalid=true]{border-color:#f04438;box-shadow:0 0 0 3px #f044381f}.side-nav .nav-title{display:none}.side-nav{gap:4px}.side-nav .nav-group+.nav-group{margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08)}.hub-body>section>.page-header .eyebrow,.hub-body>section>.page-header h1{display:none}.hub-body>section>.page-header{min-height:0;margin-bottom:14px}.button-link{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:9px 14px;border-radius:var(--radius-sm);background:var(--primary);color:#fff;font-weight:650;font-size:14px;text-decoration:none;transition:background var(--dur-fast) ease,box-shadow var(--dur) ease}.button-link:hover{background:var(--primary-hover);box-shadow:0 4px 14px #2563eb47}.segmented{max-width:100%;overflow-x:auto;scrollbar-width:none}.segmented button{flex:none;white-space:nowrap}.building-card .card-head{flex-wrap:wrap;gap:8px}.building-card .card-head h2{white-space:nowrap}.building-card .card-head select{flex:1 1 100%;width:100%;max-width:none;padding-left:10px;padding-right:6px;font-size:13px;text-overflow:ellipsis}.building-card .building-body{position:relative;display:block;flex:1;min-height:380px}.building-card .building-photo{position:absolute;inset:0 auto 0 -18px;width:calc(100% + 18px);border-radius:0;overflow:visible}.building-card .building-photo{display:flex;align-items:center}.building-card .building-photo img{width:auto;height:auto;max-width:100%;max-height:100%;aspect-ratio:1 / 1;object-fit:contain}.building-card .building-photo:hover img{transform:scale(1.03)}.building-card .storey-list{position:absolute;right:0;top:50%;transform:translateY(-50%);width:max-content;min-width:42%;max-width:75%;max-height:100%;overflow-y:auto;z-index:1}.building-card .storey-list button{background:#ffffffdb;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 4px 12px #0f172a14!important}.building-card .storey-list button.active{background:#eff4fff2}.building-card .storey-list button>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.building-card .storey-empty{position:absolute;right:0;bottom:0;width:46%;margin:0;padding:10px 12px;border-radius:12px;background:#ffffffe0;font-size:13px}@media(max-width:700px){.building-card .building-body{min-height:300px}}@media(min-width:701px)and (max-width:1280px){.dash-middle .building-card .building-body{min-height:240px}}@media(min-width:1281px){.dash-middle>.building-card,.dash-middle>.activity-card{height:0;min-height:100%}.dash-middle .activity-card{display:flex;flex-direction:column}.dash-middle .activity-card .activity-list{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;align-content:start;padding-right:3px}.dash-middle .building-card .building-body{min-height:0}}.building-card .building-photo img{-webkit-mask-image:linear-gradient(to right,transparent,#000 9%,#000 91%,transparent),linear-gradient(to bottom,transparent,#000 9%,#000 91%,transparent);-webkit-mask-composite:source-in;mask-image:linear-gradient(to right,transparent,#000 9%,#000 91%,transparent),linear-gradient(to bottom,transparent,#000 9%,#000 91%,transparent);mask-composite:intersect}@media(max-width:900px){.brand img{width:36px;height:36px}.brand strong{font-size:15px}}.brand strong,.brand span{white-space:nowrap;overflow:visible;text-overflow:clip}.brand strong{font-size:14px;line-height:1.2}.brand span{font-size:10.5px;line-height:1.25;letter-spacing:-.01em}.kpi-icon{width:50px;height:50px;border-radius:14px}.kpi:has(.kpi-image) .kpi-body{padding-right:0;flex:1}.kpi-image{top:12px;right:12px;bottom:auto;width:100px;height:72px}.kpi-legend{margin-top:10px;gap:4px}.kpi-legend li{grid-template-columns:12px minmax(0,1fr) auto}.kpi-legend b{justify-self:end;margin-left:12px}@media(max-width:1500px){.kpi-image{width:72px;height:54px;opacity:1}.kpi:has(.kpi-image) .kpi-body{padding-right:0}}.donut-body svg{width:150px;height:150px}.donut-legend span{white-space:normal;overflow:visible;line-height:1.3}.donut-legend li{align-items:start}.donut-legend i{margin-top:4px}.sidebar .brand{margin:-6px -6px 6px;padding:14px 10px;border-radius:16px;background:linear-gradient(135deg,#2f6fe4,#1d4ed8 55%,#1e3a8a);box-shadow:0 10px 24px #1d4ed859,inset 0 1px #ffffff2e;position:relative;overflow:hidden}.sidebar .brand:after{content:"";position:absolute;right:-30px;top:-30px;width:110px;height:110px;border-radius:50%;background:#ffffff14;pointer-events:none}.sidebar .brand>*{position:relative;z-index:1}.sidebar .brand span{color:#dbe6ff}.side-nav a.active{background:#ffffff1f;box-shadow:inset 3px 0 #60a5fa}@media(max-width:900px){.sidebar .brand{margin:0;padding:8px 10px;border-radius:12px;box-shadow:none}}@media(max-width:1500px){.kpi-image{width:60px;height:46px;top:10px;right:10px}.donut-body{flex-direction:column;align-items:stretch}.donut-body svg{align-self:center}}.building-hierarchy{margin-top:16px;padding:18px}.hierarchy-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}.hierarchy-header h2{margin:3px 0 0;font-size:20px}.hierarchy-header .file-button{flex:none;gap:6px;text-decoration:none}.hierarchy-columns{gap:14px}.hierarchy-columns .site-column{min-width:0;padding:14px;border:1px solid var(--border);border-radius:14px;background:#fbfcfe}.hierarchy-columns .site-column h2{margin:0 0 12px;display:flex;align-items:center;gap:8px;font-size:16px}.hierarchy-columns .site-column h2 .count-pill{margin-left:auto}.hierarchy-row{width:100%;display:flex;justify-content:space-between;align-items:center;gap:10px;min-height:54px;margin-bottom:6px;border:1px solid transparent;background:transparent;color:var(--text);text-align:left}.hierarchy-row:hover:not(:disabled){background:#f3f6fb;border-color:#dbe5f2;box-shadow:none}.hierarchy-row.selected,.hierarchy-row.selected:hover:not(:disabled){background:var(--primary-soft);border-color:#b9cdf8;box-shadow:inset 3px 0 0 var(--primary)}.hierarchy-row>span,.hierarchy-zone>span{display:grid;gap:3px;min-width:0}.hierarchy-row small,.hierarchy-zone small{color:var(--muted)}.zone-hierarchy-list{display:grid;gap:6px}.hierarchy-zone{display:block;border:1px solid #e6ebf2;background:#fff}@media(max-width:900px){.hierarchy-header{flex-direction:column}.hierarchy-columns{grid-template-columns:1fr}}.binding-panel{display:grid;gap:10px;padding-top:14px;border-top:1px solid #eef2f7}.binding-panel .card-head{margin-bottom:0}.binding-current,.binding-picker{display:flex;align-items:center;justify-content:space-between;gap:10px}.binding-current>div{display:grid;gap:3px;min-width:0}.binding-current strong{overflow:hidden;text-overflow:ellipsis}.binding-picker select{flex:1;min-width:0}@media(max-width:600px){.binding-current,.binding-picker{align-items:stretch;flex-direction:column}}.asset-workspace .detail-panel{max-height:calc(100vh - 36px);overflow-y:auto;align-content:start}.asset-workspace .asset-preview,.asset-workspace .asset-placeholder{max-height:180px;aspect-ratio:16 / 8}.compact-detail{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}.compact-detail>div{grid-template-columns:86px minmax(0,1fr)}.compact-detail .detail-wide{grid-column:1 / -1}.relationship-card{padding:12px;border:1px solid #e8edf4;border-radius:12px;background:#fbfcfe}.relationship-card .card-head{margin-bottom:8px}.relationship-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.relationship-grid>div{min-width:0;display:grid;gap:2px;padding:8px;border-radius:9px;background:#fff;border:1px solid #edf1f6}.relationship-grid small{font-size:10.5px}.relationship-grid strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px}.compact-fold{border-top:1px solid #eef2f7;padding-top:8px}.compact-fold summary{cursor:pointer;font-weight:700;font-size:13px;color:#334155;padding:6px 0}.compact-fold[open] summary{margin-bottom:8px}.device-list-tabs{margin:0 0 14px}.create-panel .inline-form{flex-wrap:wrap}.create-panel .inline-form input{flex:1 1 160px}@media(max-width:600px){.create-panel .inline-form input{flex:0 0 auto}}@media(max-width:1100px){.asset-workspace .detail-panel{max-height:none;overflow-y:visible}}@media(max-width:600px){.compact-detail,.relationship-grid{grid-template-columns:1fr}.compact-detail .detail-wide{grid-column:auto}}.asset-detail-top{display:grid;grid-template-columns:132px minmax(0,1fr);gap:12px;align-items:stretch}.asset-preview.compact,.asset-placeholder.compact{width:132px;height:92px;max-height:none;aspect-ratio:auto}.asset-detail-top-actions{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}.file-button.compact{min-height:36px;padding:7px 10px;font-size:12px}.detail-tabs{width:100%;display:grid;grid-template-columns:1fr 1fr;margin:0}.detail-tabs button{justify-content:center}.compact-edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px;border:1px solid #e8edf4;border-radius:12px;background:#fbfcfe}.compact-edit-actions{grid-column:1 / -1;justify-content:flex-end}.compact-telemetry{margin:0}.asset-history-tab{display:grid;gap:12px}.asset-history-tab section{min-height:0}.asset-history-tab h3{margin:0 0 8px}.asset-history-tab .mini-list{max-height:180px;overflow-y:auto;padding-right:4px}.compact-actions{position:sticky;bottom:-1px;z-index:3;padding-top:10px;margin-top:auto;background:linear-gradient(to bottom,#ffffffe6,#fff 35%);border-top:1px solid #eef2f7}@media(min-width:1101px){.asset-workspace .detail-panel{gap:10px;padding:16px}.asset-workspace .detail-heading h2{font-size:18px}.asset-workspace .relationship-card{padding:10px}.asset-workspace .binding-panel{padding-top:10px}.asset-workspace .detail-list div{padding:6px 0}.asset-workspace .telemetry-summary div{padding:8px}}@media(max-width:600px){.asset-detail-top{grid-template-columns:1fr}.asset-preview.compact,.asset-placeholder.compact{width:100%;height:150px}.compact-edit-grid{grid-template-columns:1fr}}.buildings-page .buildings-layout{grid-template-columns:minmax(250px,300px) minmax(0,1fr);gap:16px}.buildings-page .building-gallery{grid-column:1 / -1;padding:12px 14px}.buildings-page .building-gallery .gallery-grid{grid-template-columns:repeat(auto-fill,minmax(120px,150px));justify-content:start}.buildings-page .building-hero{min-height:0}.buildings-page .hero-frame{max-height:420px;aspect-ratio:16 / 8.5}.building-hierarchy{padding:16px}.hierarchy-header{margin-bottom:12px;align-items:center}.hierarchy-context h2{margin:2px 0 0;font-size:18px}.hierarchy-context .page-subtitle{margin-top:2px}.hierarchy-columns{grid-template-columns:repeat(2,minmax(0,1fr))}.hierarchy-columns .site-column{min-height:260px}.column-context{margin:-6px 0 10px;color:var(--muted);font-size:12px;font-weight:600}.hierarchy-columns .site-list,.zone-hierarchy-list{max-height:310px;overflow-y:auto;padding-right:3px}.hierarchy-zone{min-height:48px}.site-workspace{display:grid;grid-template-columns:minmax(210px,250px) minmax(0,1fr) minmax(280px,330px);gap:16px;align-items:start}.site-workspace>.panel,.site-plan-panel{min-width:0}.site-plan-panel{display:grid;gap:10px}.site-plan-panel>.site-panel-title{padding:0 2px}.site-panel-title{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.site-panel-title h2{margin:2px 0 0;font-size:16px}.site-panel-title .eyebrow{font-size:10px}.site-workspace .floor-rail{padding:14px;align-content:start}.site-workspace .floor-rail ul{max-height:520px}.site-workspace .floor-thumb{grid-template-columns:52px minmax(0,1fr);align-items:center;gap:10px}.site-workspace .floor-thumb img,.site-workspace .floor-thumb-empty{width:52px;height:52px;aspect-ratio:1;transform:none}.site-workspace .floor-thumb span:last-child{display:grid;gap:2px}.site-workspace .floor-side{gap:14px;padding:14px;max-height:calc(100vh - 170px);overflow-y:auto}.site-workspace .zone-admin{max-height:360px}.site-workspace .zone-admin li{padding:9px 10px}.site-workspace .quick-add{margin-bottom:10px}.site-workspace .floor-tools{margin-top:8px}@media(max-width:1280px){.buildings-page .buildings-layout{grid-template-columns:minmax(230px,280px) minmax(0,1fr)}.site-workspace{grid-template-columns:minmax(190px,230px) minmax(0,1fr)}.site-workspace .floor-side{grid-column:1 / -1;max-height:none;overflow:visible;grid-template-columns:1fr 1.2fr}}@media(max-width:900px){.buildings-page .buildings-layout,.hierarchy-columns,.site-workspace{grid-template-columns:1fr}.site-workspace .floor-side{grid-column:auto;grid-template-columns:1fr}}.asset-list-page{display:block}.asset-table-wide{width:100%;overflow-x:auto}.asset-table-wide table{min-width:1040px}.asset-table-wide th,.asset-table-wide td{vertical-align:middle}.asset-table-wide td:nth-child(3),.asset-table-wide td:nth-child(4),.asset-table-wide td:nth-child(5){white-space:nowrap}@media(max-width:700px){.table-wrap.asset-table-wide table,.table-wrap.tag-table-wide table,.table-wrap.gateway-table-wide table{min-width:0}}@media(min-width:701px){.table-wrap table:has(td:last-child>.row-actions) thead th:last-child,.table-wrap td:last-child:has(>.row-actions){position:sticky;right:0;z-index:1;box-shadow:inset 1px 0 #eef2f7}.table-wrap table:has(td:last-child>.row-actions) thead th:last-child:after,.table-wrap td:last-child:has(>.row-actions):after{content:"";position:absolute;top:0;bottom:0;left:100%;width:9px;background:var(--surface)}.table-wrap td:last-child:has(>.row-actions){background:var(--surface)}.table-wrap tbody tr:hover>td:last-child:has(>.row-actions){background:#f8fafc}.table-wrap tbody tr.selected-row>td:last-child:has(>.row-actions){background:var(--primary-soft)}}.asset-hierarchy-filters{display:grid;grid-template-columns:minmax(260px,1.5fr) repeat(3,minmax(150px,.75fr)) auto auto;gap:10px;align-items:center}.asset-hierarchy-filters>*{min-width:0}.table-detail-link{display:inline-flex;align-items:center;min-height:34px;padding:6px 10px;border-radius:9px;border:1px solid #cdd9ea;background:#fff;color:var(--primary);font-size:12.5px;font-weight:700;text-decoration:none;white-space:nowrap}.table-detail-link:hover{border-color:var(--primary);background:var(--primary-soft)}.secondary-link{background:#fff;color:#334155;border:1px solid var(--border);box-shadow:none}.secondary-link:hover{background:#f8fafc;color:var(--primary);box-shadow:none}.asset-detail-page{display:block}.asset-detail-large{position:relative;display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr);column-gap:22px;row-gap:14px;padding:22px;min-height:560px}.asset-detail-large>.sheet-close{position:absolute;right:16px;top:16px}.asset-detail-large>.detail-heading{grid-column:1 / -1;padding-right:44px}.asset-detail-large>.asset-detail-top{grid-column:1;grid-row:span 4;align-self:start;display:grid;grid-template-columns:1fr;gap:10px}.asset-detail-large .asset-preview.compact,.asset-detail-large .asset-placeholder.compact{width:100%;height:210px;border-radius:14px}.asset-detail-large .asset-detail-top-actions{align-items:stretch}.asset-detail-large .asset-detail-top-actions>*{flex:1;justify-content:center}.asset-detail-large>.detail-tabs,.asset-detail-large>.compact-edit-grid,.asset-detail-large>.compact-detail,.asset-detail-large>.relationship-card,.asset-detail-large>.binding-panel,.asset-detail-large>.compact-telemetry,.asset-detail-large>.asset-history-tab{grid-column:2}.asset-detail-large .compact-detail{grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid #e8edf4;border-radius:12px;padding:8px 12px;margin:0}.asset-detail-large .relationship-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.asset-detail-large .binding-panel{border:1px solid #e8edf4;border-radius:12px;padding:12px}.asset-tag-linker{display:grid;gap:10px}.asset-tag-linker .binding-picker{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center}.asset-tag-linker .binding-picker select{min-width:0}.asset-tag-preview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:10px;border:1px solid #e8edf4;border-radius:10px;background:#f8fafc}.asset-tag-preview>div{display:grid;gap:3px;min-width:0}.asset-tag-preview small{color:#64748b;font-size:11px}.asset-tag-preview strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-detail-large .telemetry-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.asset-detail-large .asset-history-tab{grid-template-columns:1fr 1fr;gap:16px}.asset-detail-large .asset-history-tab section{padding:14px;border:1px solid #e8edf4;border-radius:12px;background:#fbfcfe}.asset-detail-large .detail-actions{grid-column:1 / -1;position:static;justify-content:flex-end;margin-top:2px}@media(max-width:1280px){.asset-hierarchy-filters{grid-template-columns:minmax(240px,1fr) repeat(3,minmax(140px,.7fr))}.asset-hierarchy-filters>button{justify-self:start}.asset-detail-large .relationship-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:900px){.asset-hierarchy-filters{grid-template-columns:1fr 1fr}.asset-detail-large{grid-template-columns:1fr}.asset-detail-large>.asset-detail-top,.asset-detail-large>.detail-tabs,.asset-detail-large>.compact-edit-grid,.asset-detail-large>.compact-detail,.asset-detail-large>.relationship-card,.asset-detail-large>.binding-panel,.asset-detail-large>.compact-telemetry,.asset-detail-large>.asset-history-tab{grid-column:1}.asset-detail-large>.asset-detail-top{grid-row:auto;grid-template-columns:minmax(140px,220px) minmax(0,1fr)}.asset-detail-large .asset-preview.compact,.asset-detail-large .asset-placeholder.compact{height:150px}.asset-detail-large .relationship-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.asset-tag-linker .binding-picker,.asset-tag-preview{grid-template-columns:1fr}}@media(max-width:600px){.asset-hierarchy-filters{grid-template-columns:1fr}.asset-detail-large{padding:14px}.asset-detail-large>.asset-detail-top{grid-template-columns:1fr}.asset-detail-large .relationship-grid,.asset-detail-large .asset-history-tab{grid-template-columns:1fr}}.tag-list-page{display:block}.tag-table-wide{width:100%;overflow-x:auto}.tag-table-wide table{min-width:1120px}.tag-table-wide th,.tag-table-wide td{vertical-align:middle}.tag-table-wide td:nth-child(2),.tag-table-wide td:nth-child(3),.tag-table-wide td:nth-child(4),.tag-table-wide td:nth-child(5),.tag-table-wide td:nth-child(6){white-space:nowrap}.tag-detail-page{display:block}.tag-detail-large{position:relative;display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr);gap:16px 22px;padding:22px;min-height:560px}.tag-detail-large>.sheet-close{position:absolute;right:16px;top:16px}.tag-detail-large>.device-banner{grid-column:1;grid-row:1 / span 5;width:100%;height:220px;object-fit:contain;border-radius:14px;background:#f8fafc}.tag-detail-large>.detail-heading,.tag-detail-large>.compact-detail,.tag-detail-large>.relationship-card,.tag-detail-large>.detail-editor,.tag-detail-large>div:not(.detail-heading){grid-column:2}.tag-detail-large .relationship-grid,.tag-detail-large .telemetry-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.tag-detail-large .mini-list{max-height:260px;overflow-y:auto;padding-right:4px}.tag-detail-large .detail-actions{grid-column:1 / -1;justify-content:flex-end;position:static;border-top:1px solid #eef2f7;padding-top:12px;margin-top:2px}.relationship-note{margin:10px 0 0;color:var(--muted);font-size:12px;line-height:1.45}@media(max-width:900px){.tag-detail-large{grid-template-columns:1fr}.tag-detail-large>.device-banner,.tag-detail-large>.detail-heading,.tag-detail-large>.compact-detail,.tag-detail-large>.relationship-card,.tag-detail-large>.detail-editor,.tag-detail-large>div:not(.detail-heading){grid-column:1;grid-row:auto}.tag-detail-large>.device-banner{height:180px}.tag-detail-large .relationship-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.tag-detail-large{padding:14px}.tag-detail-large .relationship-grid,.tag-detail-large .telemetry-summary{grid-template-columns:1fr}}.gateway-list-page{display:block}.gateway-table-wide{width:100%;overflow-x:auto}.gateway-table-wide table{min-width:1120px}.gateway-table-wide th,.gateway-table-wide td{vertical-align:middle}.gateway-table-wide td:nth-child(3),.gateway-table-wide td:nth-child(4),.gateway-table-wide td:nth-child(5){white-space:nowrap}.gateway-detail-page{display:block}.gateway-detail-large{position:relative;display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr);gap:16px 22px;padding:22px;min-height:620px}.gateway-detail-large>.sheet-close{position:absolute;right:16px;top:16px}.gateway-detail-large>.device-banner{grid-column:1;grid-row:1 / span 5;width:100%;height:220px;object-fit:contain;border-radius:14px;background:#f8fafc}.gateway-detail-large>.detail-heading,.gateway-detail-large>.compact-detail,.gateway-detail-large>.relationship-card,.gateway-detail-large>.stack-form,.gateway-detail-large>.gateway-tag-map,.gateway-detail-large>div:not(.detail-heading){grid-column:2}.gateway-detail-large .relationship-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.gateway-tag-map{padding:12px;border:1px solid #e8edf4;border-radius:12px;background:#fbfcfe}.gateway-tag-grid{display:grid;gap:8px}.gateway-tag-card{display:grid;grid-template-columns:minmax(180px,1.4fr) minmax(140px,1fr) 100px minmax(120px,.9fr);gap:10px;align-items:center;padding:10px;border:1px solid #edf1f6;border-radius:10px;background:#fff}.gateway-tag-card>div{min-width:0;display:grid;gap:2px}.gateway-tag-card strong,.gateway-tag-card .tag-link{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tag-link{color:var(--primary);font-weight:700;text-decoration:none}.tag-link:hover{text-decoration:underline}.gateway-detail-large .mini-list{max-height:220px;overflow-y:auto}.gateway-detail-large .detail-actions{grid-column:1 / -1;position:static;justify-content:flex-end;border-top:1px solid #eef2f7;padding-top:12px}@media(max-width:1100px){.gateway-detail-large .relationship-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.gateway-tag-card{grid-template-columns:1.4fr 1fr}}@media(max-width:900px){.gateway-detail-large{grid-template-columns:minmax(0,1fr)}.gateway-detail-large>.device-banner,.gateway-detail-large>.detail-heading,.gateway-detail-large>.compact-detail,.gateway-detail-large>.relationship-card,.gateway-detail-large>.stack-form,.gateway-detail-large>.gateway-tag-map,.gateway-detail-large>section,.gateway-detail-large>div:not(.detail-heading){grid-column:1;grid-row:auto}.gateway-detail-large>.device-banner{height:180px}}@media(max-width:600px){.gateway-detail-large{padding:14px}.gateway-detail-large .relationship-grid,.gateway-tag-card{grid-template-columns:1fr}}.gateway-assignment-card{grid-column:2;padding:12px;border:1px solid #e8edf4;border-radius:12px;background:#fbfcfe}.gateway-tag-picker{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end;margin-bottom:12px}.gateway-tag-picker-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;max-height:190px;overflow-y:auto;padding:3px}.gateway-tag-option{display:flex;gap:8px;align-items:center;min-width:0;padding:8px 9px;border:1px solid #e4eaf2;border-radius:9px;background:#fff;cursor:default}.gateway-tag-option.pickable{cursor:pointer}.gateway-tag-option-title{display:flex;align-items:center;gap:6px;min-width:0}.gateway-tag-option-title>:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gateway-tag-option-title .badge{flex:none;padding:1px 7px;font-size:11px}.gateway-assignment-card .card-head .row-actions{flex:none}.gateway-assignment-card .card-head .row-actions button{white-space:nowrap}.gateway-placement-guide{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 12px;padding:12px 14px;border:1px solid #bbf7d0;border-radius:12px;background:#f0fdf4}.gateway-placement-guide>div{display:grid;gap:3px}.gateway-placement-guide strong{color:#166534}.gateway-placement-guide span,.gateway-placement-guide small{color:#475569}.gateway-placement-guide.needs-floor{border-color:#86efac;box-shadow:0 0 0 3px #22c55e14}.placement-floor-select.required{border-color:#22c55e;box-shadow:0 0 0 3px #22c55e1f}.placement-required-hint{color:#15803d!important;font-weight:700}.gateway-tag-option.selected{border-color:#b9cdf8;background:var(--primary-soft)}.gateway-tag-option input{width:auto;flex:none}.gateway-tag-option>span{display:grid;min-width:0;gap:2px}.gateway-tag-option strong,.gateway-tag-option small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assigned-tag-list{display:grid;gap:7px}.assigned-tag-row{display:grid;grid-template-columns:minmax(120px,1.1fr) minmax(100px,1fr) minmax(140px,1.3fr) minmax(110px,.9fr) auto;gap:10px;align-items:center;padding:9px 10px;border:1px solid #edf1f6;border-radius:10px;background:#fff}.assigned-tag-row>div{min-width:0;display:grid;gap:2px}.tag-metrics{display:flex;flex-wrap:wrap;gap:4px}.tag-metrics .metric-chip{padding:2px 7px;border-radius:999px;background:var(--primary-soft);color:var(--text, #1f2937);font-size:12px;font-weight:600;white-space:nowrap}.assigned-tag-row strong.muted{color:var(--muted, #8a94a6);font-weight:600}.assigned-tag-row strong,.inline-resource-link{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inline-resource-link{color:var(--primary);font-weight:700;text-decoration:none}.inline-resource-link:hover{text-decoration:underline}@media(max-width:1100px){.gateway-assignment-card{grid-column:1 / -1}.assigned-tag-row{grid-template-columns:1.2fr 1fr 1fr}}@media(max-width:700px){.gateway-tag-picker,.gateway-tag-picker-list,.assigned-tag-row{grid-template-columns:1fr}}.site-table{padding:14px}.clickable-row{cursor:pointer}.clickable-row:hover td{background:#f6f9fd}.cell-link{color:var(--primary);font-weight:600;text-decoration:none}.cell-link:hover,.cell-link:focus-visible{text-decoration:underline}.gateway-code-link{color:var(--primary);font-weight:700;text-decoration:none;cursor:pointer}.gateway-code-link:hover,.gateway-code-link:focus-visible{color:color-mix(in srgb,var(--primary) 82%,#000);text-decoration:underline;text-underline-offset:2px}.cell-link.name-link{color:var(--text);font-weight:700}.cell-link.name-link:hover,.cell-link.name-link:focus-visible{color:var(--primary)}.table-wrap tbody tr.clickable-row:hover>td:last-child:has(>.row-actions){background:#f6f9fd}.asset-row-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px}.asset-row-actions>.row-actions{margin:0}.site-name-cell{display:flex;align-items:center;gap:12px;min-width:0}.site-name-cell img,.site-name-cell .floor-thumb-empty{width:64px;height:44px;flex:none;object-fit:cover;border-radius:8px;background:#eef3fa;aspect-ratio:auto}.site-name-cell strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-detail-layout{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(300px,1fr);gap:16px;align-items:start}.site-detail-layout>*{min-width:0}@media(min-width:901px){.site-detail-layout:has(>.site-plan-panel){grid-template-columns:minmax(0,2.4fr) minmax(300px,1fr)}}@media(min-width:1281px){.site-detail-layout>.floor-side{align-self:stretch;display:flex;flex-direction:column;gap:12px;padding:14px 16px}.site-detail-layout>.floor-side>section{flex:none}.site-detail-layout>.floor-side>section:last-child{flex:1 0 auto;display:flex;flex-direction:column}.site-detail-layout>.floor-side>section+section{padding-top:10px}.site-detail-layout>.floor-side h2{margin-bottom:6px}.site-detail-layout>.floor-side .detail-list{grid-template-columns:1fr 1fr;column-gap:14px;row-gap:0}.site-detail-layout>.floor-side .detail-list div{grid-template-columns:auto minmax(0,1fr);padding:5px 0;align-items:baseline}.site-detail-layout>.floor-side .detail-list dd{white-space:nowrap}.site-detail-layout>.floor-side .detail-list div:first-child{grid-column:1 / -1}.site-detail-layout>.floor-side .site-row{padding:7px 10px}.site-detail-layout>.floor-side .site-list{flex:1 1 auto;min-height:0;max-height:280px}}@media(max-width:1280px){.site-detail-layout>.floor-side .site-list{max-height:320px}}.site-detail-layout .building-gallery{grid-column:1 / -1;padding:12px 14px}.site-detail-layout .building-gallery .gallery-grid{grid-template-columns:repeat(auto-fill,minmax(120px,150px));justify-content:start}.site-detail-layout .hero-frame{max-height:420px;aspect-ratio:16 / 8.5}.site-children,.site-info{padding:16px;display:grid;gap:12px;align-content:start}.site-children .site-list{max-height:460px}.site-children .site-panel-title,.site-info .site-panel-title{align-items:center}a.hierarchy-row{text-decoration:none}.site-detail-layout .site-hint{margin:8px 0;text-align:left;font-size:13px}.site-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:-6px 0 14px;color:var(--muted);font-size:13px;font-weight:600}.site-crumbs a{color:var(--primary);text-decoration:none}.site-crumbs a:hover{text-decoration:underline}.site-crumbs span{color:var(--text)}@media(max-width:900px){.site-detail-layout{grid-template-columns:1fr}}.site-target{align-self:center;color:var(--muted);font-size:13px;white-space:nowrap}.site-target strong{color:var(--text)}.asset-preview{object-fit:contain;background:#f8fafc}.gallery-thumb img{object-fit:contain;background:#eef3fa}.site-name-cell img{object-fit:contain;background:#f8fafc;border:1px solid var(--border)}.floor-thumb img{object-fit:contain;background:#fff}.asset-thumb{flex:none;display:grid;place-items:center;width:40px;height:40px;overflow:hidden;border-radius:10px;background:#f8fafc;border:1px solid var(--border);color:#94a3b8}.asset-thumb img{width:100%;height:100%;object-fit:contain}.site-side-stack{display:grid;gap:16px;align-content:start;min-width:0}.journey-panel{padding:16px;margin-bottom:16px;display:grid;gap:14px}.journey-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.journey-head h2{margin:2px 0 0;font-size:18px}.journey-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.journey-filters select{width:auto;min-width:220px}.segmented.compact{margin:0;padding:3px;border-radius:12px}.segmented.compact button{min-height:32px;padding:4px 12px;font-size:13px}.journey{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,320px);gap:16px;align-items:start}.journey-map{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;min-width:0}.journey-map-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.journey-map-head h3{margin:0;font-size:16px}.journey-map-head .eyebrow{margin:0}.journey-canvas{--plan-max-h: 520px}.journey-path{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:visible;pointer-events:none}.journey-path .leg{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.journey-path .planned .leg{stroke:#94a3b8;stroke-width:2;stroke-dasharray:5 5}.journey-path .walked .leg{stroke:var(--primary);stroke-width:3.5}.journey-path .leg-arrow{fill:#94a3b8}.journey-path .walked .leg-arrow{fill:var(--primary)}.journey-path .leg-hit{fill:none;stroke:transparent;stroke-width:14;vector-effect:non-scaling-stroke;pointer-events:stroke}.journey-path g:hover .leg{stroke-width:5}.journey-start{position:absolute;z-index:3;transform:translate(-50%,-175%);padding:1px 6px;border-radius:999px;background:#16a34a;color:#fff;font-size:10px;font-weight:700;white-space:nowrap;box-shadow:0 1px 4px #0f172a4d;pointer-events:none}button.journey-floor-change{position:absolute;z-index:4;min-height:0;padding:1px 7px;border-radius:999px;border:1px solid #c4b5fd;background:#f5f3ff;color:#6d28d9;font-size:10px;font-weight:700;white-space:nowrap;box-shadow:0 1px 4px #0f172a33!important;transform:translate(14px,-50%);cursor:pointer}button.journey-floor-change.in{transform:translate(calc(-100% - 14px),-50%)}button.journey-floor-change.walked{background:#7c3aed;border-color:#7c3aed;color:#fff}.journey-stop{position:absolute;width:0;height:0;z-index:2}.journey-stop b{position:absolute;left:0;top:0;transform:translate(-50%,-50%);display:grid;place-items:center;min-width:18px;height:18px;padding:0 4px;border-radius:999px;background:#fff;color:#64748b;border:1.5px solid #94a3b8;font-size:10px;line-height:1;white-space:nowrap}.journey-stop.visited b{background:var(--primary);border-color:#fff;color:#fff;box-shadow:0 1px 4px #0f172a4d}.journey-stop small{position:absolute;left:0;top:12px;transform:translate(-50%);padding:1px 5px;border-radius:4px;background:#0f172abf;color:#fff;font-size:clamp(8px,.95cqi,10px);font-weight:600;white-space:nowrap;pointer-events:none}.journey-asset{position:absolute;z-index:3;transform:translate(-50%,-135%);display:grid;place-items:center;width:26px;height:26px;border-radius:50% 50% 50% 0;rotate:-45deg;background:#ea580c;color:#fff;box-shadow:0 4px 10px #ea580c73;transition:left .7s var(--ease-out),top .7s var(--ease-out)}.journey-asset svg{rotate:45deg}.journey-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.journey-controls input[type=range]{flex:1 1 160px;min-width:120px;padding:0;min-height:0;accent-color:var(--primary)}.icon-only{display:inline-grid;place-items:center;width:36px;min-height:36px;padding:0}.journey-counter{min-width:48px;text-align:center;color:var(--muted);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}.live-toggle{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 12px;background:var(--surface);color:#475569;border:1px solid var(--border-strong)}.live-toggle i{width:8px;height:8px;border-radius:50%;background:#94a3b8}.live-toggle.on{color:#166534;border-color:#86efac;background:#f0fdf4}.live-toggle.on i{background:#16a34a;animation:dot-blink 1.6s ease-in-out infinite}.journey-stops{margin:0;padding:0;list-style:none;display:grid;gap:6px;max-height:600px;overflow-y:auto;scrollbar-width:thin}.journey-stops button{width:100%;display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border-radius:12px;text-align:left;background:transparent;color:var(--text);border:1px solid #eef2f7;box-shadow:none!important;min-height:0}.journey-stops button:hover:not(:disabled){background:#f6f9fd}.journey-stops b{flex:none;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--primary);color:#fff;font-size:11px}.journey-stops span{display:grid;gap:2px;min-width:0}.journey-stops small{color:var(--muted);font-size:12px;font-weight:500}.journey-stops li.active button{background:var(--primary-soft);border-color:#b9cdf8;box-shadow:inset 3px 0 0 var(--primary)!important}.journey-stops li.future b{background:#cbd5e1}.journey-stops li.future strong{color:var(--muted)}.journey-empty{display:grid;place-items:center;gap:6px;min-height:180px;border-radius:14px;background:#f8fafc;border:1px dashed var(--border-strong);color:var(--muted);text-align:center;padding:16px}.journey-empty p{margin:0}@media(max-width:1000px){.journey{grid-template-columns:minmax(0,1fr)}.journey-stops{max-height:320px}.journey-canvas{--plan-max-h: 380px}}.journey-side{display:grid;gap:10px;align-content:start;min-width:0}.journey-note{display:flex;align-items:flex-start;gap:8px;margin:0;padding:10px 12px;border-radius:12px;background:#f8fafc;border:1px dashed var(--border-strong);color:var(--muted);font-size:13px}.journey-note svg{flex:none;margin-top:1px}.site-assets{padding:16px;margin-top:16px;display:grid;gap:12px}.site-side-stack .site-assets{margin-top:0}.zone-boxes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}.site-detail-layout>.zone-boxes{grid-column:1 / -1}.zone-boxes>.panel:not(.is-collapsed){min-height:220px;max-height:620px;overflow-y:auto;align-content:start}.zone-boxes>.panel.is-collapsed{align-self:start}.zone-boxes .site-assets{margin-top:0}.zone-boxes>.panel{padding:16px}@media(max-width:1100px){.zone-boxes{grid-template-columns:1fr}}.collapse-toggle{display:inline-grid;place-items:center;width:30px;height:30px;min-height:0;padding:0;border-radius:8px;background:var(--surface);color:var(--muted);border:1px solid var(--border);box-shadow:none!important}.collapse-toggle:hover{color:var(--primary);border-color:var(--primary)}.collapse-toggle svg{transition:transform var(--dur-fast) var(--ease-out)}.collapse-toggle.collapsed svg{transform:rotate(-90deg)}.panel.is-collapsed{gap:0}.panel.is-collapsed .site-panel-title{margin-bottom:0}.site-assets .site-panel-title{flex-wrap:wrap;align-items:center}.site-assets-form{margin:0;padding:12px;border-radius:12px;background:#f8fafc;border:1px solid var(--border)}.site-assets-form select{flex:1 1 180px;width:auto}.site-assets .site-hint{margin:8px 0;text-align:left;font-size:13px}.rights{display:inline-flex;flex-wrap:wrap;gap:6px}.right-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;cursor:pointer;border:1px solid var(--border-strong);background:var(--surface);color:#64748b;font-size:12.5px;font-weight:600;-webkit-user-select:none;user-select:none}.right-chip input{width:14px;height:14px;min-height:0;margin:0;padding:0;accent-color:var(--primary)}.right-chip.on{background:var(--primary-soft);border-color:#b9cdf8;color:var(--primary)}.right-chip:has(input:disabled){cursor:default;opacity:.85}.plan-card .card-head{gap:10px;flex-wrap:wrap}.floor-plan-workbench .floor-plan-toolbar{border-bottom:0}.floor-plan-workbench .plan-stage{border:0;border-radius:0;background:transparent;box-shadow:none}.dash-middle .plan-card{padding-left:12px;padding-right:12px}.dash-middle .plan-card .plan-canvas{--plan-max-h: 620px;width:100%;place-items:center}.dash-middle .plan-card .plan-legend{margin-top:8px}.plan-mode button{min-width:44px;justify-content:center;font-weight:700}.plan-image{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;border-radius:inherit}.plan-image>img{position:absolute;max-width:none;object-fit:fill;-webkit-user-select:none;user-select:none;animation:fade-in .4s ease backwards}.plan-stage{transition:transform .65s var(--ease-out),box-shadow .65s ease}.plan-canvas.is-3d{--tilt-x: 52deg;--tilt-z: -18deg;perspective:1600px;perspective-origin:50% 20%;padding:2% 0 7%}.plan-canvas.is-3d .plan-stage{overflow:visible;transform-style:preserve-3d;transform:rotateX(var(--tilt-x)) rotate(var(--tilt-z)) scale(.88);box-shadow:0 40px 50px -20px #0f172a59}.plan-canvas.is-3d .plan-zone{transform:translateZ(4px);background:color-mix(in srgb,var(--zone) 26%,transparent);border-style:solid;box-shadow:0 0 0 1px color-mix(in srgb,var(--zone) 50%,transparent),0 0 18px color-mix(in srgb,var(--zone) 35%,transparent)}.plan-canvas.is-3d .plan-stage .plan-gw.plan-marker-dot{transform-origin:50% 50%;transform:translate(-50%,-50%) rotate(calc(var(--tilt-z) * -1)) rotateX(calc(var(--tilt-x) * -1))}.plan-canvas.is-3d .zone-chip,.plan-canvas.is-3d .zone-chip:hover{transform-origin:0 0;transform:rotate(calc(var(--tilt-z) * -1)) rotateX(calc(var(--tilt-x) * -1)) translate(-50%,-150%)}@media(prefers-reduced-motion:reduce){.plan-stage{transition:none}}@media(max-width:700px){.plan-canvas.is-3d{--tilt-x: 45deg}}.pager{flex-wrap:wrap;padding:4px 0}.pager button{min-width:36px;min-height:34px;padding:4px 10px}.pager span{font-variant-numeric:tabular-nums}.pager small{color:var(--muted);font-weight:500}.table-actions{flex-wrap:nowrap;align-items:center;gap:8px!important}.table-actions .table-detail-link{min-height:32px;height:32px;padding:0 12px}.icon-action{display:inline-grid;place-items:center;width:32px;height:32px;min-height:0;padding:0;border-radius:8px;background:var(--surface);color:#475569;border:1px solid var(--border-strong);box-shadow:none!important;text-decoration:none}.icon-action:hover:not(:disabled){background:var(--primary-soft);color:var(--primary);border-color:#b9cdf8}.icon-action.danger{color:#b42318;background:var(--surface)}.icon-action.danger:hover:not(:disabled){background:#fef3f2;color:#b42318;border-color:#fecdca}.icon-action:disabled{opacity:.4;cursor:not-allowed}.calibration{padding:16px;margin-bottom:16px;display:grid;gap:10px}.calibration .site-panel-title{flex-wrap:wrap;align-items:center}.calib-step{margin:0;padding:8px 12px;border-radius:10px;background:var(--primary-soft);color:var(--primary);font-weight:600;font-size:13px}.calib-step.done{background:#f0fdf4;color:#166534}.calib-panes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.calib-panes figure{margin:0;display:grid;gap:6px}.calib-panes figcaption{color:var(--muted);font-size:12px;font-weight:700}.calib-canvas{position:relative;line-height:0;border-radius:10px;overflow:hidden;border:2px solid var(--border);background:#f8fafc;cursor:not-allowed}.calib-canvas.active{border-color:var(--primary);cursor:crosshair;box-shadow:0 0 0 4px #2563eb1f}.calib-canvas img{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none}.calib-marker{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;width:22px;height:22px;border-radius:50%;color:#fff;font-size:11px;font-weight:800;line-height:1;border:2px solid #fff;box-shadow:0 2px 6px #0f172a59;pointer-events:none}@media(max-width:800px){.calib-panes{grid-template-columns:1fr}}.row-check{width:16px;height:16px;min-height:0;margin:0;padding:0;accent-color:var(--primary);cursor:pointer;vertical-align:middle}.row-check:disabled{cursor:not-allowed;opacity:.4}th.select-col,td.select-col{width:36px;padding-right:0}.bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;padding:10px 12px;border-radius:12px;background:var(--primary-soft);border:1px solid #b9cdf8;color:var(--primary);animation:fade-in .2s ease}.bulk-bar .spacer{flex:1}.note-cell{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#475569}.building-note{display:grid;gap:6px;padding-top:10px;border-top:1px solid #eef2f7}.building-note .site-panel-title{align-items:center}.building-note .eyebrow{margin:0}.note-text{margin:0;white-space:pre-wrap;color:var(--text)}.building-note textarea{width:100%;resize:vertical}.row-unbind{margin-right:6px;vertical-align:middle}.row-unbind+.table-actions{display:inline-flex!important;vertical-align:middle}.asset-state,.asset-gateway-cell{display:grid;gap:2px;justify-items:start;min-width:0}.asset-state .cell-subtitle,.asset-gateway-cell .cell-subtitle{margin-top:0;font-size:11.5px}.add-device-modal{width:min(520px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--surface);border-radius:18px;padding:22px;box-shadow:0 30px 80px #0f172a40;display:grid;gap:16px;animation:pop-in .26s var(--ease-spring) backwards}.add-device-modal .site-panel-title{align-items:center}.add-device-modal h2{margin:2px 0 0;font-size:20px}.add-device-form{display:grid;gap:14px}.add-device-form fieldset{margin:0;padding:0;border:0;display:grid;gap:8px}.add-device-form legend,.add-device-form label{color:#475569;font-size:13px;font-weight:700}.add-device-form label{display:grid;gap:6px}.add-device-form .segmented{margin:0;justify-self:start}.device-kind{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.device-kind-option{display:grid;justify-items:center;gap:6px;padding:12px;border-radius:14px;min-height:0;background:var(--surface);color:var(--text);border:2px solid var(--border);box-shadow:none!important}.device-kind-option img{width:96px;height:64px;object-fit:contain}.device-kind-option span{font-weight:700}.device-kind-option.active{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.device-kind-option:disabled{opacity:.45;cursor:not-allowed}.add-device-modal .modal-actions{display:flex;justify-content:flex-end;gap:10px}.ota-card .file-button{justify-self:start}.ota-file{display:grid;gap:2px;margin:0;padding:8px 10px;border-radius:10px;background:#f8fafc;border:1px solid var(--border)}.ota-file strong{overflow-wrap:anywhere;font-size:13px}.ota-file small{color:var(--muted)}.plan-required{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:10px 12px;border-radius:12px;background:#fffaeb;border:1px solid #fedf89;color:#93370d;font-size:13px;font-weight:600}.plan-required a{margin-left:auto;color:var(--primary);text-decoration:none}.device-search{margin-bottom:12px}.search-field{flex:1 1 360px;max-width:560px;display:flex;align-items:center;gap:8px;padding:0 10px 0 14px;border-radius:12px;background:var(--surface);border:1px solid var(--border-strong);color:var(--muted)}.search-field:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb24}.search-field input{flex:1;border:0;padding:0;min-height:42px;background:transparent;box-shadow:none!important}.search-field input::-webkit-search-cancel-button{display:none}.search-clear{display:grid;place-items:center;width:28px;height:28px;min-height:0;padding:0;border-radius:8px;background:transparent;color:var(--muted);box-shadow:none!important}.search-clear:hover:not(:disabled){background:#f1f5f9;color:var(--text)}.placed-list{margin:0;padding:0;list-style:none;display:grid;gap:6px;max-height:320px;overflow-y:auto}.placed-list li{display:flex;align-items:center;gap:6px;padding:4px;border-radius:10px;border:1px solid #eef2f7}.placed-list li.active{border-color:#b9cdf8;background:var(--primary-soft)}.placed-select{flex:1;min-width:0;display:flex;align-items:center;gap:8px;padding:6px;min-height:0;background:transparent;color:var(--text);text-align:left;box-shadow:none!important}.placed-select i{flex:none;width:9px;height:9px;border-radius:50%;background:#94a3b8}.placed-select i.online{background:#16a34a}.placed-select span{display:grid;gap:1px;min-width:0}.placed-select strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.placed-select small{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-canvas{container-type:inline-size}.map-dot{position:absolute;z-index:2;transform:translate(-50%,-50%);display:grid;justify-items:center;width:26px;height:26px;min-height:0;padding:0;border:0;border-radius:50%;background:transparent;box-shadow:none!important;cursor:grab;touch-action:none}.map-dot:active,.map-dot.dragging{cursor:grabbing}.map-dot i{align-self:center;width:clamp(10px,1.3cqi,14px);aspect-ratio:1;border-radius:50%;background:var(--zone);border:2px solid #fff;box-shadow:0 0 0 2px #94a3b8,0 1px 4px #0f172a59;transition:transform var(--dur-fast) var(--ease-out)}.map-dot.online i{box-shadow:0 0 0 2px #16a34a,0 1px 4px #0f172a59}.map-dot small{position:absolute;top:22px;left:50%;transform:translate(-50%);padding:1px 5px;border-radius:5px;background:#0f172ac7;color:#fff;font-size:10px;font-weight:700;line-height:1.35;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--dur-fast) ease}.map-dot:hover small,.map-dot:focus-visible small,.map-dot.dragging small{opacity:1}.map-dot:hover i{transform:scale(1.25)}.map-dot.selected i{transform:scale(1.45);background:var(--primary);box-shadow:0 0 0 3px #fff,0 0 0 6px color-mix(in srgb,var(--primary) 70%,transparent),0 0 18px color-mix(in srgb,var(--primary) 65%,transparent);animation:marker-pulse 1.2s var(--ease-out) infinite}.map-dot.selected small{opacity:1;background:var(--primary)}.map-dot.dragging{z-index:5}.map-dot.dragging i{transform:scale(1.45)}.zone-marker{position:absolute;width:0;height:0;z-index:2;pointer-events:none}.zone-marker i{position:absolute;left:0;top:0;transform:translate(-50%,-100%);width:18px;height:18px;border-radius:50% 50% 50% 0;rotate:-45deg;background:var(--zone, var(--primary));border:2px solid #fff;box-shadow:0 2px 6px #0f172a59}.zone-marker.current i{--zone: var(--primary);width:22px;height:22px;animation:pop-in .22s var(--ease-spring) backwards}.zone-marker.other i{opacity:.85}.zone-marker small{position:absolute;left:0;top:4px;transform:translate(-50%);padding:1px 5px;border-radius:4px;white-space:nowrap;background:#ffffffeb;border-left:3px solid var(--zone);color:#334155;font-size:10.5px;font-weight:700;line-height:1.4}.zone-add-form{display:grid;gap:10px}.zone-add-form>input{max-width:420px}.zone-add-form .helper,.zone-redraw .helper{margin:0;font-size:12.5px}.plan-pick-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:7;cursor:crosshair}.plan-canvas.is-placing .plan-stage{outline:2px dashed var(--primary);outline-offset:3px;border-radius:6px}.plan-pick-hint{display:flex;align-items:center;gap:6px;margin:10px 0 0;padding:8px 12px;border-radius:10px;background:color-mix(in srgb,var(--primary) 10%,transparent);color:var(--primary);font-size:13px;font-weight:600}.zone-redraw{display:grid;gap:8px;margin-top:8px}.plan-canvas{position:relative}.plan-zone-pin{position:absolute;z-index:3;width:26px;height:30px;min-height:0;padding:0;border:0;transform:translate(-50%,-100%);background:transparent;box-shadow:none!important;cursor:pointer}.plan-zone-pin i{position:absolute;left:50%;bottom:6px;transform:translate(-50%);width:clamp(14px,1.8cqi,20px);aspect-ratio:1;border-radius:50% 50% 50% 0;rotate:-45deg;background:var(--zone);border:2px solid #fff;box-shadow:0 2px 6px #0f172a59;transition:scale var(--dur-fast) var(--ease-out)}.plan-zone-pin:hover i,.plan-zone-pin.open i{scale:1.2}.plan-zone-pin.open i{box-shadow:0 0 0 3px color-mix(in srgb,var(--zone) 35%,transparent),0 2px 6px #0f172a59}button.zone-chip{min-height:0;cursor:pointer;font-family:inherit}.zone-chip.open{outline:2px solid var(--zone);outline-offset:1px}.zone-info{position:absolute;top:8px;right:8px;z-index:6;width:min(300px,calc(100% - 16px));max-height:calc(100% - 16px);overflow-y:auto;display:grid;gap:10px;padding:12px;border-radius:14px;background:var(--surface);border:1px solid var(--border);box-shadow:0 16px 40px #0f172a38;animation:pop-in .22s var(--ease-spring) backwards;line-height:1.35}.zone-info-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.zone-info-head strong{font-size:15px}.zone-info h4{display:flex;align-items:center;gap:6px;margin:0 0 6px;color:#475569;font-size:12px;text-transform:uppercase;letter-spacing:.04em}.zone-info ul{margin:0;padding:0;list-style:none;display:grid;gap:6px}.zone-info li{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:8px;font-size:13px}.zone-info li .dot{width:8px;height:8px;border-radius:50%;background:#94a3b8}.zone-info li .dot.good{background:#16a34a}.zone-info li span{display:grid;min-width:0}.zone-info li span>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zone-info li small{color:var(--muted);font-size:11.5px}.zone-info li a{color:var(--text);font-weight:600;text-decoration:none}.zone-info li a:hover{color:var(--primary)}.zone-info li em{font-style:normal;color:var(--muted);font-size:11.5px}.zone-info section .helper{margin:0;font-size:12.5px}.zone-info-link{justify-self:start;color:var(--primary);font-weight:600;font-size:13px;text-decoration:none}.journey-zone{color:var(--muted);font-weight:500}.search-toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px}.search-toolbar .search-field{flex:1 1 320px;max-width:520px}.search-toolbar>select,.search-toolbar>.date-field{flex:0 1 auto;width:auto;min-width:160px}@media(max-width:700px){.search-toolbar .search-field,.search-toolbar>select{flex-basis:100%;max-width:none}}.row-actions>.count-pill{margin-left:0}.site-panel-title .row-actions{gap:8px!important;flex-wrap:wrap;justify-content:flex-end}.site-panel-title .row-actions>button:not(.collapse-toggle){min-height:0;height:32px;padding:0 12px;font-size:13px}.site-panel-title .collapse-toggle{width:32px;height:32px}.floor-side .detail-list+.row-actions,.site-info .detail-list+.row-actions{margin-top:12px}.floor-side .row-actions>button,.site-info .row-actions>button{min-height:0;height:32px;padding:0 16px;font-size:13px}.floor-tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}.floor-tools>.file-button,.floor-tools>button,.floor-tools>a{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;min-height:0;margin:0;padding:0 10px;box-sizing:border-box;font-size:13px;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.floor-tools svg{flex:none}.site-info>button.secondary{min-height:0;height:36px}.managed-picker{grid-column:1 / -1;flex:1 1 100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.managed-picker label{display:grid;gap:4px;margin:0;min-width:0}.managed-picker label span{color:var(--muted);font-size:12px;font-weight:600}.managed-picker select{width:100%;min-width:0}@media(max-width:700px){.managed-picker{grid-template-columns:1fr}}.asset-detail-large .compact-telemetry{grid-template-columns:repeat(5,minmax(0,1fr))}@media(max-width:1100px){.asset-detail-large .compact-telemetry{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:700px){.asset-detail-large .compact-telemetry{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:901px){button,input,select,.file-button{min-height:34px}button{padding:7px 12px;font-size:13px}input,select{padding:7px 10px;font-size:13px}.topbar{padding:10px 28px}.topbar-title h1{font-size:21px}.content{padding:4px 28px 20px}.page-header{margin-bottom:14px}.page-header h1{font-size:22px}.page-subtitle{margin-top:2px;font-size:13px}.panel{padding:16px}.panel h2,.card-head h2{font-size:15px}h3{font-size:14px}th,td{padding:9px 12px;font-size:13px}th{font-size:10.5px}}@media(min-width:701px){.asset-detail-large .compact-detail>div{grid-template-columns:max-content minmax(0,1fr);padding:6px 0}.asset-detail-large .compact-detail dt{white-space:nowrap}.asset-detail-large .relationship-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}.asset-detail-large .relationship-grid>div{padding:6px 8px}.asset-detail-large .relationship-card{padding:10px 12px}.asset-detail-large .relationship-note{margin:6px 0 0}.asset-detail-large .binding-panel{gap:8px;padding:10px 12px}.asset-detail-large .binding-panel h3{margin:0}.asset-detail-large .asset-preview.compact,.asset-detail-large .asset-placeholder.compact{height:180px}.asset-detail-large .asset-detail-top-actions>*{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:34px;padding:0 10px;font-size:13px;white-space:nowrap}}@media(min-width:701px)and (max-width:1280px){.asset-detail-large .relationship-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:701px){.kpi{min-height:116px;padding:16px 18px}.kpi-value{font-size:28px}.donut-body svg{width:130px;height:130px}}button.plan-gw{min-height:0;padding:0;border:0;background:transparent;box-shadow:none!important;cursor:pointer;color:inherit;font:inherit}button.plan-gw:hover:not(:disabled){background:transparent}.plan-gw.open i{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 40%,transparent),0 1px 3px #0f172a59}.plan-gw-count{position:absolute;left:6px;top:-18px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;box-sizing:border-box;display:grid;place-items:center;background:var(--primary);color:#fff;font-size:10px;font-weight:700;line-height:1;box-shadow:0 0 0 1.5px #fff;pointer-events:none}.zone-info .helper .dot{display:inline-block;vertical-align:middle;margin-right:4px}button.plan-gw i:after{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;border-radius:50%}.zone-info>.helper{margin:-4px 0 0;font-size:12.5px}.managed-picker-note{grid-column:1 / -1;color:var(--muted);font-size:12px}.compact-detail dd .cell-subtitle{display:block;font-size:11.5px}.plan-gw:not(.online) i,.map-dot:not(.online) i{opacity:1;filter:none;background:#94a3b8;box-shadow:0 0 0 2px #64748b,0 1px 4px #0f172a2e;animation:none}.plan-gw:not(.online) small{opacity:1}.plan-gw.online i,.map-dot.online i{opacity:1;filter:none;background:#22c55e;box-shadow:0 0 0 2px #16a34a,0 1px 4px #0f172a2e;animation:none}.plan-gw:not(.online):hover i,.plan-gw.open i,.map-dot.selected i{opacity:1}.gw-placement-editor{display:grid;gap:10px;margin-top:10px}.gw-placement-editor .plan-card{box-shadow:none}.plan-gw.placing{z-index:8;pointer-events:none}.plan-gw.placing i{opacity:1;filter:none;width:clamp(10px,1.4cqi,14px);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 35%,transparent),0 1px 3px #0f172a59;animation:pop-in .22s var(--ease-spring) backwards}.plan-gw.placing small{opacity:1;background:var(--primary)}.plan-zone-pin i:after,.zone-marker i:after,.plan-legend-zone:after{content:"";position:absolute;left:50%;top:50%;width:38%;aspect-ratio:1;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}.plan-legend-keys{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px 14px}.plan-legend-keys>span{display:inline-flex;align-items:center;gap:6px}.plan-legend-zone{position:relative;display:inline-block;width:11px;height:11px;border-radius:50% 50% 50% 0;rotate:-45deg;background:var(--primary);border:1.5px solid #fff;box-shadow:0 0 0 1px #cbd5e1}.kpi-violet .kpi-body{grid-template-columns:1fr}.kpi-violet .kpi-sub{grid-column:1}@media(min-width:1281px){.site-detail-layout:has(>.floor-side)>.site-plan-panel{align-self:stretch;grid-template-rows:1fr}.site-detail-layout:has(>.floor-side)>.site-plan-panel>.plan-card{height:100%;box-sizing:border-box}}a.hierarchy-row>svg:last-child{transform:rotate(-90deg);flex:none}.movements-page .journey-panel{padding:14px;margin-bottom:0}.movements-page .journey{grid-template-columns:minmax(0,1fr) minmax(320px,380px);align-items:stretch}.movements-page .journey-canvas{--plan-max-h: clamp(280px, calc(100vh - 360px) , 560px)}.movements-page .journey-side{height:0;min-height:100%;display:flex;flex-direction:column;gap:10px;overflow-y:auto;scrollbar-width:thin}.movements-page .journey-side>.journey-note{margin:0;flex:none}.movements-page .journey-stops{flex:0 1 auto;max-height:42%}.movement-list{flex:1 1 0;min-height:160px;display:flex;flex-direction:column;gap:8px;border-top:1px solid #eef2f7;padding-top:10px}.movement-list-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.movement-list-head h3{margin:0}.movement-list-note{margin:0;color:var(--muted);font-size:12px}.movement-events{flex:1 1 0;min-height:0;overflow-y:auto;scrollbar-width:thin;margin:0;padding:0;list-style:none;display:grid;align-content:start;gap:2px}.movement-event{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 6px;border-radius:10px;border-bottom:1px solid #f1f5f9}.movement-event:hover{background:#f6f9fd}.movement-event>svg{flex:none}.movement-event>span{display:grid;gap:2px;min-width:0}.movement-event strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.movement-event strong a{color:var(--text);text-decoration:none}.movement-event strong a:hover{color:var(--primary);text-decoration:underline}.movement-event small{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.movement-event small b{color:var(--text);font-weight:600}.movement-event-time{justify-items:end;text-align:right;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.movement-event-time em{font-style:normal;font-size:10.5px;padding:1px 6px}.movement-list .pager{margin-top:0}@media(max-width:1100px){.movements-page .journey{grid-template-columns:minmax(0,1fr)}.movements-page .journey-side{height:auto;min-height:0}.movement-events{max-height:420px}}@media(min-width:1281px){.movements-page .search-toolbar{gap:8px}.movements-page .search-toolbar .search-field{flex:1 1 200px;min-width:200px;max-width:320px}.movements-page .search-toolbar .search-field input{min-height:34px}.movements-page .search-toolbar>select{min-width:150px;flex:0 1 190px}.movements-page .search-toolbar>.date-field{min-width:0;gap:6px;font-size:12px;white-space:nowrap}.movements-page .search-toolbar>.date-field input{min-width:0;width:140px}.movements-page .search-toolbar>.segmented{flex:none}.movements-page .search-toolbar>button{flex:none;white-space:nowrap}}@media(max-width:700px){.movements-page .search-toolbar>.segmented{flex-basis:100%}.movements-page .search-toolbar>.segmented button{flex:1 0 auto;padding:4px 8px}}.plan-canvas.is-placing .plan-gw:not(.placing) i{opacity:.9;filter:none}.plan-canvas.is-placing .plan-gw:not(.placing) small{opacity:1}@media(min-width:901px){button,a.button-link,a.file-button,label.file-button,a.table-detail-link{font-size:13px}input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea{font-size:13px}main button:not(.icon-action):not(.collapse-toggle):not(.plan-gw):not(.plan-zone-pin):not(.zone-chip):not(.search-clear):not(.icon-only):not(.device-hero):not(.gallery-thumb):not(.storey-list button):not(.hierarchy-row):not(.list-row):not(.placed-select):not(.leave-item):not(.route-alert-dot):not(.route-picked-clear):not(.route-alert-pick button):not(.mh-row):not(.activity-entry-link),main a.button-link,main a.file-button,main label.file-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;height:auto;padding-top:0;padding-bottom:0;line-height:1.2;box-sizing:border-box}main input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),main select:not(.compact){min-height:34px;height:34px;box-sizing:border-box}main td button,main .row-actions>button,main .table-actions>*,main a.table-detail-link,main .site-panel-title .row-actions>button{min-height:32px;height:32px}.page-actions,.row-actions{gap:8px}.panel h2,.card-head h2{font-size:15px}h3,.journey-map-head h3{font-size:14px}.panel:not(.table-wrap):not(.site-table){padding:16px}.site-detail-layout>.floor-side{padding:16px}main label.file-button{flex-direction:row}}.floor-tools>.primary-tool{grid-column:1 / -1;order:-1;border:1px solid var(--primary);border-style:solid;background:var(--primary);color:#fff;box-shadow:0 6px 14px #2563eb38}.floor-tools>.primary-tool:hover{background:var(--primary-hover);border-color:var(--primary-hover);color:#fff}.first-connection{display:flex;align-items:center;gap:6px;margin:0;padding:6px 10px;border-radius:8px;background:var(--primary-soft);color:var(--primary);font-size:12px}.first-connection b{color:var(--text)}.first-connection svg{flex:none}.plan-legend{align-items:flex-start}.plan-legend-count{flex:none}.plan-legend-keys{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0;padding:0;list-style:none;flex:1 1 auto}.plan-legend-keys li{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;color:var(--muted);font-size:11.5px;font-weight:600}.lg-gw{position:relative;display:inline-block;flex:none;width:10px;height:10px;margin:0 3px}.lg-gw i{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:#94a3b8;border:2px solid #fff}.lg-gw.on i{background:#22c55e;box-shadow:0 0 0 2px #16a34a,0 0 8px 2px #16a34a8c}.lg-gw.off i{background:#ef4444;box-shadow:0 0 0 2px #dc2626,0 0 8px 1px #dc262633}.lg-gw.alert i{background:#facc15;box-shadow:0 0 0 3px #f59e0b4d;animation:gateway-alert-pulse 1.05s ease-in-out infinite}.lg-gw.placing i{background:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 35%,transparent)}.lg-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border-radius:999px;background:#fff;border:1px solid #93b4f0;color:var(--text);font-size:11px;font-weight:700;--zone: #2563eb}.lg-chip>i{width:6px;height:6px;border-radius:50%;background:var(--zone)}.lg-chip b{padding:0 .4em;border-radius:999px;background:color-mix(in srgb,var(--zone) 16%,#fff)}.lg-chip b.chip-alert{background:#fffaeb;color:#b54708}.lg-chip b.chip-offline{background:#fef3f2;color:#b42318}.lg-chip:has(>b:only-child){padding:0;border:0;background:transparent}.plan-legend-keys,.plan-legend-count{padding-left:3px}.presence-marker{position:absolute;z-index:4;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:3px;min-height:0!important;height:24px!important;padding:0 8px!important;border-radius:999px;border:2px solid #fff;background:#64748b;color:#fff;font-size:11px;font-weight:700;box-shadow:0 2px 6px #0f172a4d!important;cursor:pointer}.presence-marker.live{background:var(--primary)}.presence-marker.open,.presence-marker:hover{outline:3px solid color-mix(in srgb,var(--primary) 35%,transparent)}.presence-info ul{margin:0;padding:0;list-style:none;display:grid;gap:6px}.presence-info li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;font-size:13px}.presence-info li span{display:grid;min-width:0}.presence-info li small{color:var(--muted);font-size:11.5px}.presence-info li button{height:28px!important;min-height:0!important;padding:0 8px!important;font-size:12px}.movement-event.selectable{cursor:pointer}.journey-note span{display:block}.plan-legend-keys{gap:4px 14px}.plan-legend-keys li{font-size:11.5px;font-weight:600;color:var(--muted)}.asset-tag-modal{width:min(920px,100%);max-height:calc(100vh - 48px);overflow:hidden;background:var(--surface);border-radius:18px;box-shadow:0 30px 80px #0f172a47;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:14px;padding:20px;animation:pop-in .26s var(--ease-spring) backwards}.asset-tag-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.asset-tag-modal-head h2{margin:2px 0 4px;font-size:21px}.asset-tag-modal-head small{color:var(--muted)}.asset-tag-search{display:flex;align-items:center;gap:8px;border:1px solid var(--border-strong);border-radius:12px;padding:0 12px;background:var(--surface);color:var(--muted)}.asset-tag-search:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb1f}.asset-tag-search input{flex:1;border:0;box-shadow:none!important;min-height:44px;padding:0;background:transparent}.asset-tag-table-wrap{min-height:240px;max-height:480px;overflow:auto;border:1px solid var(--border);border-radius:12px}.asset-tag-table{width:100%;border-collapse:collapse}.asset-tag-table th,.asset-tag-table td{padding:11px 12px;border-bottom:1px solid #eef2f7;text-align:left;vertical-align:middle}.asset-tag-table th{position:sticky;top:0;z-index:1;background:#f8fafc;font-size:12px;color:#64748b}.asset-tag-table tbody tr{cursor:pointer}.asset-tag-table tbody tr:hover{background:#f8fafc}.asset-tag-table tbody tr.selected{background:#eff6ff}.asset-tag-table th:first-child,.asset-tag-table td:first-child{width:42px;text-align:center}.asset-tag-empty{margin:0;padding:28px 16px;text-align:center;color:var(--muted)}.asset-tag-modal-actions{align-items:center}.asset-tag-modal-actions>span{margin-right:auto;color:var(--muted);font-size:13px}@media(max-width:700px){.asset-tag-modal{width:100%;max-height:92vh;border-radius:20px 20px 0 0;align-self:end}.asset-tag-table th:nth-child(4),.asset-tag-table td:nth-child(4),.asset-tag-table th:nth-child(5),.asset-tag-table td:nth-child(5){display:none}}.gateway-picker-modal{width:min(980px,100%);max-height:calc(100vh - 48px);overflow:hidden;background:var(--surface);border-radius:18px;box-shadow:0 30px 80px #0f172a47;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:14px;padding:20px;animation:pop-in .26s var(--ease-spring) backwards}.gateway-picker-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left}.gateway-picker-trigger>span{display:grid;gap:2px;min-width:0}.gateway-picker-trigger strong,.gateway-picker-trigger small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gateway-picker-trigger small{color:var(--muted)}@media(max-width:700px){.gateway-picker-modal{width:100%;max-height:92vh;border-radius:20px 20px 0 0;align-self:end}.gateway-picker-modal .asset-tag-table .gp-code,.gateway-picker-modal .asset-tag-table .gp-status{display:none}.gateway-picker-modal .asset-tag-table th.gp-place,.gateway-picker-modal .asset-tag-table td.gp-place{display:table-cell}.gateway-picker-modal .gp-code-inline{display:block}.gateway-picker-modal .gateway-placement-status strong{white-space:normal}.gateway-picker-modal{padding:16px}.gateway-picker-modal .asset-tag-table{table-layout:fixed}.gateway-picker-modal .asset-tag-table th,.gateway-picker-modal .asset-tag-table td{padding:10px 8px}.gateway-picker-modal .asset-tag-table .gp-place{width:46%}.gateway-picker-modal .asset-tag-modal-actions{flex-wrap:wrap}.gateway-picker-modal .asset-tag-modal-actions>span{flex:1 0 100%;margin-right:0}.gateway-picker-modal .asset-tag-modal-actions>button{flex:1 1 auto}.gateway-picker-modal .asset-tag-modal-actions>button.secondary{flex:0 0 auto}}@media(max-width:900px){.gateway-picker-modal .asset-tag-table td{white-space:normal;overflow-wrap:anywhere}.gateway-picker-modal .asset-tag-table .badge{white-space:nowrap}.gateway-picker-modal .gateway-remove-button{white-space:normal;text-align:left}}.gp-code-inline{display:none;margin-top:2px;color:var(--muted);font-size:11px}.selected-gateway-queue{display:grid;gap:8px;padding:10px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}.selected-gateway-queue-head{display:flex;align-items:center;justify-content:space-between}.selected-gateway-queue-head small{color:var(--muted);font-weight:700}.selected-gateway-chips{display:grid;gap:8px}.selected-gateway-chip{width:100%;min-height:0;padding:9px 10px;display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left;background:var(--surface);border:1px solid var(--border);color:var(--text);box-shadow:none!important}.selected-gateway-chip span{display:grid;gap:2px;min-width:0}.selected-gateway-chip strong,.selected-gateway-chip small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selected-gateway-chip small{color:var(--muted)}.selected-gateway-chip i{width:9px;height:9px;flex:none;border-radius:50%;background:#94a3b8}.selected-gateway-chip i.online{background:#16a34a}.selected-gateway-chip.active{border-color:#93b4f8;background:var(--primary-soft)}.building-card-title{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}.building-card .storey-asset-count b{color:var(--primary);font-weight:800;font-variant-numeric:tabular-nums}.building-card-title h2{margin:0}.building-card .card-head .building-card-title{flex:1 1 100%;justify-content:space-between}.building-card-title .count-pill{flex:none}.building-card .card-head select.building-select{font-size:14px;font-weight:700;color:var(--text);text-overflow:ellipsis}.building-card .storey-list{min-height:0;align-content:start}.building-card .storey-list.dense{gap:4px}.building-card .storey-list.dense button{padding:6px 9px;border-radius:10px}.building-card .storey-list.dense button strong{font-size:12.5px}.building-card .storey-list.dense button small{font-size:11px}.building-card .storey-list.many{max-height:100%;overflow-y:auto;padding-right:3px;scrollbar-width:thin}.building-card .storey-list.many::-webkit-scrollbar{width:6px}.building-card .storey-list.many::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:999px}@media(min-width:1281px){.dash-middle .building-card .building-body{grid-template-columns:minmax(0,.9fr) minmax(132px,1.1fr);align-items:stretch}.dash-middle .building-card .building-photo{min-height:0}.dash-middle .building-card .storey-list.many{max-height:100%}}@media(max-width:700px){.building-card-title{flex-wrap:wrap}}.zone-tag-cluster{position:absolute;transform:translate(-50%,-50%);z-index:4;display:inline-flex;align-items:center;gap:3px;min-height:0!important;height:24px!important;padding:0 6px!important;border-radius:999px;border:1px solid color-mix(in srgb,var(--zone) 65%,#fff);background:#fffffff0;box-shadow:0 2px 8px #0f172a24!important}.zone-tag-dot,.zone-mini-tag{display:inline-grid;place-items:center;width:16px;height:16px;border-radius:999px;background:#e2e8f0;color:#475569;font-size:9px;font-weight:800;line-height:1}.zone-tag-dot.bound,.zone-mini-tag.bound{background:#dbeafe;color:#1d4ed8;box-shadow:inset 0 0 0 1px #93c5fd}.zone-tag-cluster>b{font-size:10px;color:var(--muted)}.zone-info-expanded{width:min(460px,calc(100% - 24px));max-height:min(620px,calc(100vh - 140px));overflow:auto}.zone-info-head>div{display:grid;gap:2px}.zone-info-head small{color:var(--muted);font-size:11.5px}.zone-gateway-groups{display:grid;gap:10px}.zone-gateway-group{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:#fff}.zone-gateway-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:9px 10px;background:#f8fafc}.zone-gateway-head>span:nth-child(2){display:grid;min-width:0}.zone-gateway-head small,.zone-gateway-head em{color:var(--muted);font-style:normal;font-size:11px}.zone-gateway-tags{margin:0;padding:6px 8px 8px;list-style:none;display:grid;gap:4px}.zone-gateway-tags li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:6px 4px}.zone-gateway-tags li>span:nth-child(2){display:grid;min-width:0}.zone-gateway-tags a.mono{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zone-gateway-tags small{color:var(--muted);font-size:11px}.overview-zone-marker{position:absolute;transform:translate(-50%,-50%);z-index:5;min-height:0!important;height:auto!important;padding:6px 9px!important;display:grid;gap:2px;justify-items:center;border-radius:12px;border:1px solid color-mix(in srgb,var(--zone) 65%,#fff);background:#fffffff5;color:var(--text);box-shadow:0 3px 10px #0f172a29!important}.overview-zone-marker span{font-size:11px;font-weight:700;white-space:nowrap}.overview-zone-marker b{min-width:34px;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--zone) 16%,#fff);color:var(--text);font-size:10px}.overview-zone-marker:hover{transform:translate(-50%,-50%) scale(1.05)}.topbar-back{display:inline-flex;align-items:center;gap:5px;flex:none;min-height:32px;padding:0 9px;border-radius:9px;border:1px solid var(--border);background:var(--surface);color:var(--text);text-decoration:none;font-size:12.5px;font-weight:700;transition:background var(--dur-fast) ease,border-color var(--dur-fast) ease}.topbar-back svg{transform:rotate(90deg)}.topbar-back:hover{background:#f8fafc;border-color:var(--border-strong)}@media(max-width:700px){.topbar-back{min-width:32px;width:32px;padding:0;justify-content:center}.topbar-back span{display:none}}.assigned-tag-row{grid-template-columns:34px minmax(150px,.95fr) minmax(210px,1.25fr) minmax(220px,1.2fr) minmax(160px,.9fr) auto;align-items:start}.assigned-tag-select{display:flex!important;align-items:center;justify-content:center;align-self:center}.assigned-tag-head{background:var(--surface-muted, #f8fafc);font-weight:700}.assigned-tag-head small{color:var(--muted);font-weight:700}.assigned-tag-title{display:flex;align-items:center;gap:6px;min-width:0;flex-wrap:wrap}.assigned-tag-title .tag-link{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assigned-tag-identity>small,.assigned-tag-lastseen>strong,.assigned-tag-asset .inline-resource-link,.assigned-tag-asset>strong{min-width:0;overflow:hidden;text-overflow:ellipsis}.assigned-tag-lastseen>strong,.assigned-tag-asset .inline-resource-link,.assigned-tag-asset>strong{white-space:nowrap}.assigned-tag-readings{align-content:start}.assigned-tag-readings .tag-metrics{display:flex;flex-wrap:wrap;gap:5px;min-width:0}.assigned-tag-readings .metric-chip{max-width:100%}.assigned-tag-remove{align-self:center;white-space:nowrap}.gateway-tag-option>span{min-width:0}.gateway-tag-option>span>strong{display:block;max-width:100%}.gateway-tag-option>span>small{display:block;white-space:normal;overflow-wrap:anywhere;line-height:1.35}@media(max-width:1280px){.assigned-tag-row{grid-template-columns:34px minmax(150px,1fr) minmax(210px,1.2fr) minmax(220px,1.15fr)}.assigned-tag-lastseen{grid-column:2 / 4}.assigned-tag-remove{grid-column:4;justify-self:end}}@media(max-width:820px){.assigned-tag-row{grid-template-columns:34px minmax(0,1fr) minmax(0,1fr)}.assigned-tag-identity,.assigned-tag-readings,.assigned-tag-lastseen{grid-column:2 / -1}.assigned-tag-remove{grid-column:3;justify-self:end}}@media(max-width:560px){.assigned-tag-row{grid-template-columns:34px 1fr;gap:8px}.assigned-tag-asset,.assigned-tag-identity,.assigned-tag-readings,.assigned-tag-lastseen,.assigned-tag-remove{grid-column:2}.assigned-tag-select{grid-column:1;grid-row:1}.assigned-tag-remove{justify-self:stretch}.assigned-tag-title .tag-link{white-space:normal;overflow-wrap:anywhere}}.zone-detail-gateways{display:grid;gap:8px;padding-top:10px;border-top:1px solid var(--border)}.zone-detail-gateway-list{display:grid;gap:6px}.zone-detail-gateway-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 9px;border:1px solid var(--border);border-radius:10px;background:#fff;color:inherit;text-decoration:none}.zone-detail-gateway-row>span:nth-child(2){display:grid;min-width:0}.zone-detail-gateway-row strong,.zone-detail-gateway-row small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-marker-dot{position:absolute;transform:translate(-50%,-50%);z-index:6;width:14px!important;min-width:14px!important;height:14px!important;min-height:14px!important;padding:0!important;border:0!important;border-radius:999px!important;background:transparent!important;box-shadow:none!important;overflow:visible}.plan-marker-dot>i{position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:999px;background:var(--zone, #64748b);border:2px solid #fff;box-shadow:0 1px 5px #0f172a47}.plan-gw.plan-marker-dot>i{background:#94a3b8}.plan-gw.plan-marker-dot.online>i{background:#22c55e;animation:none}.plan-marker-dot:after{content:attr(data-tooltip);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%) translateY(3px);z-index:20;width:max-content;max-width:260px;padding:6px 8px;border-radius:8px;background:#0f172af0;color:#fff;font-size:11px;font-weight:600;line-height:1.35;white-space:normal;text-align:left;opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.plan-marker-dot:before{content:"";position:absolute;left:50%;bottom:calc(100% + 3px);transform:translate(-50%);border:5px solid transparent;border-top:0;border-bottom-color:#0f172af0;opacity:0;pointer-events:none;transition:opacity .12s ease}.plan-marker-dot:hover:after,.plan-marker-dot:focus-visible:after,.plan-marker-dot:hover:before,.plan-marker-dot:focus-visible:before{opacity:1}.plan-marker-dot:hover:after,.plan-marker-dot:focus-visible:after{transform:translate(-50%) translateY(0)}.plan-marker-dot:focus-visible{outline:2px solid var(--primary);outline-offset:3px}.overview-zone-marker.plan-marker-dot{background:transparent!important;border:0!important}.overview-zone-marker.plan-marker-dot:hover{transform:translate(-50%,-50%) scale(1.15)}@keyframes gateway-alert-pulse{0%,to{opacity:1;box-shadow:0 0 0 2px #f59e0b9e,0 0 #facc156b}50%{opacity:.42;box-shadow:0 0 0 2px #f59e0bf2,0 0 0 9px #facc1500}}.plan-gw.has-alert>i{opacity:1;filter:none;background:#facc15!important;animation:gateway-alert-pulse 1.05s ease-in-out infinite!important}.floor-gateways{display:grid;gap:10px;align-content:start;min-height:0}.floor-gateways>button{justify-self:start}.floor-gateway-list{display:grid;gap:6px;max-height:420px;overflow-y:auto;padding-right:2px}.floor-gateways .floor-gateway-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:8px;width:100%;min-height:0;padding:8px 9px;border:1px solid var(--border);border-radius:10px;background:#fff;color:inherit;font:inherit;text-align:left;box-shadow:none;cursor:pointer}.floor-gateways .floor-gateway-head:hover:not(:disabled){background:var(--primary-soft);border-color:#b9cdf8;color:inherit;box-shadow:none}.floor-gateway-head>span:nth-child(2){display:grid;min-width:0}.floor-gateway-head strong,.floor-gateway-head small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.floor-gateway-head>svg{color:var(--muted)}.place-queue{display:grid;gap:8px;padding:10px 12px;border:1px dashed #b9cdf8;border-radius:10px;background:var(--primary-soft)}.place-queue .helper{margin:0}.gw-tags-modal{width:min(920px,calc(100vw - 32px))}.gw-tags-modal .asset-tag-table td{white-space:nowrap}.gw-tags-modal .eyebrow{display:inline-flex;align-items:center;gap:6px}.gw-tags-modal .modal-actions{flex-wrap:wrap;align-items:center}.gw-tags-modal .modal-actions .table-detail-link{margin-right:auto}.zone-info .tag-metrics{margin-top:2px}.gw-tags-modal{grid-template-rows:auto auto minmax(0,1fr) auto auto}.gw-tags-modal .pager{margin-top:0}.gw-tags-modal .asset-tag-table th:first-child,.gw-tags-modal .asset-tag-table td:first-child{width:auto;text-align:left}.gw-summary-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 0 10px}.gw-summary-stats>div{display:grid;gap:2px;padding:8px 10px;border-radius:10px;background:#f8fafc}.gw-summary-stats dt{color:var(--muted);font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gw-summary-stats dd{margin:0;font-size:18px;font-weight:700;font-variant-numeric:tabular-nums}.gw-summary-stats>.alert{grid-column:1 / -1;background:#fef3f2}.gw-summary-stats>.alert dd{color:#b42318}.gw-summary{gap:6px;padding:10px 12px}.gw-summary .helper,.gw-summary .gw-summary-stats{margin:0}.gw-summary .gw-summary-stats>div{padding:5px 8px}.gw-summary .gw-summary-stats dd{font-size:16px}@media(max-width:700px){.gw-summary{position:static;width:100%;max-height:none;margin-top:8px;box-shadow:none}}.settings-layout{align-items:start}.settings-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.settings-card-head>div{display:grid;gap:2px;min-width:0}.settings-card-head h2{margin:0}.settings-card-head small{color:var(--muted);font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-note{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:#f8fafc}.settings-note strong{font-size:13px;color:#334155}.settings-note small{line-height:1.5}.asset-detail-large,.tag-detail-large,.gateway-detail-large{align-content:start}.asset-detail-large .asset-history-tab section{min-height:180px;align-content:start}.asset-history-tab .history-empty{margin:6px 0 0;color:var(--muted);font-size:13px}.gw-quick-card{width:min(340px,calc(100% - 20px))}.gw-quick-title{min-width:0;display:grid;gap:2px}.gw-quick-title strong,.gw-quick-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gw-quick-status{display:flex;align-items:center;justify-content:space-between;gap:8px}.gw-quick-status>span{display:inline-flex;align-items:center;gap:5px;min-width:0}.gw-quick-edit{min-height:28px;padding:4px 7px;display:inline-flex;align-items:center;gap:4px;border-radius:8px;background:transparent;color:var(--primary);box-shadow:none}.gw-inline-rename{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;width:100%}.gw-inline-rename input{min-width:0;min-height:32px;padding:5px 8px}.gw-inline-rename button{min-height:32px;padding:5px 8px}.gw-quick-actions{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:6px 12px;border-top:1px solid var(--border);padding-top:7px}.gw-quick-find,.gw-quick-back{min-height:28px;padding:4px 8px;display:inline-flex;align-items:center;gap:4px;border-radius:8px;background:var(--primary-soft);color:var(--primary);box-shadow:none;font-size:13px;font-weight:600}.gw-quick-find{margin-right:auto}.gw-quick-back{flex:0 0 auto}.gw-quick-back svg{transform:rotate(90deg)}.gw-quick-list .zone-info-head{gap:8px}.gw-quick-list .gw-quick-title{flex:1 1 auto}.gw-quick-tags{list-style:none;margin:0;padding:0;max-height:240px;overflow-y:auto;display:grid}.gw-quick-tags li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 2px;border-bottom:1px solid #eef2f7}.gw-quick-tags li:last-child{border-bottom:0}.gw-quick-tags li>span:first-of-type{display:grid;gap:1px;min-width:0}.gw-quick-tags li>span:first-of-type>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gw-quick-tags small{color:var(--muted);font-size:12px}.gw-quick-rssi{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.gw-quick-tags a.cell-link{color:var(--primary)}.gw-quick-list{display:flex;flex-direction:column;gap:10px;overflow:hidden}.gw-quick-list>*{flex:0 0 auto}.gw-quick-list>.gw-quick-tags{flex:1 1 auto;min-height:48px}.gw-detail-tag-search{margin-bottom:12px}@media(max-width:700px){.gw-inline-rename{grid-template-columns:1fr 1fr}.gw-inline-rename input{grid-column:1 / -1}}.plan-marker-dot:after{max-width:190px;padding:4px 6px;border-radius:6px;font-size:9.5px;line-height:1.25;letter-spacing:0;overflow-wrap:anywhere}.plan-marker-dot.tooltip-right:after{left:calc(100% + 7px);bottom:50%;transform:translateY(50%) translate(-3px)}.plan-marker-dot.tooltip-right:hover:after,.plan-marker-dot.tooltip-right:focus-visible:after{transform:translateY(50%) translate(0)}.plan-marker-dot.tooltip-right:before{left:calc(100% + 1px);bottom:50%;transform:translateY(50%);border:4px solid transparent;border-left:0;border-right-color:#0f172af0}.plan-marker-dot.tooltip-left:after{left:auto;right:calc(100% + 7px);bottom:50%;transform:translateY(50%) translate(3px)}.plan-marker-dot.tooltip-left:hover:after,.plan-marker-dot.tooltip-left:focus-visible:after{transform:translateY(50%) translate(0)}.plan-marker-dot.tooltip-left:before{left:auto;right:calc(100% + 1px);bottom:50%;transform:translateY(50%);border:4px solid transparent;border-right:0;border-left-color:#0f172af0}.plan-marker-dot.tooltip-below:not(.tooltip-right):not(.tooltip-left):after{top:calc(100% + 8px);bottom:auto}.plan-marker-dot.tooltip-below:not(.tooltip-right):not(.tooltip-left):before{top:calc(100% + 3px);bottom:auto;border:5px solid transparent;border-top-color:#0f172af0;border-bottom:0}@media(max-width:700px){.plan-marker-dot:after{max-width:160px;font-size:9px;padding:4px 5px}}.detail-heading-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.gateway-inline-editor{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.gateway-inline-editor label{display:grid;gap:5px}.gateway-inline-editor .row-actions{margin:0;flex-wrap:nowrap}@media(max-width:700px){.detail-heading-actions{justify-content:flex-start}.gateway-inline-editor{grid-template-columns:1fr}.gateway-inline-editor .row-actions{justify-content:stretch}.gateway-inline-editor .row-actions>button{flex:1}}.floor-gateway-table-card{margin-top:14px;display:grid;gap:10px}.floor-gateway-table-wrap{max-height:300px;overflow:auto;border:1px solid var(--border);border-radius:12px;scrollbar-width:thin}.floor-gateway-table{width:100%;min-width:620px;border-collapse:collapse}.floor-gateway-table thead{position:sticky;top:0;z-index:1;background:var(--surface)}.floor-gateway-table th,.floor-gateway-table td{white-space:nowrap}.floor-gateway-name{display:inline-flex;align-items:center;gap:7px;min-width:0}.floor-gateway-name strong{max-width:260px;overflow:hidden;text-overflow:ellipsis}.floor-gateway-map-hint{margin:0}.floor-gateway-bulk{margin:0;border-radius:10px}.floor-remove-selected,.floor-remove-action{color:#b45309}.floor-remove-selected:hover:not(:disabled),.floor-remove-action:hover:not(:disabled){color:#92400e;border-color:#f59e0b;background:#fffbeb}.floor-gateway-table .table-actions{gap:6px}.floor-gateway-table .icon-action{width:32px;height:32px}.gateway-tags-panel{width:min(760px,calc(100% - 16px));max-height:min(520px,calc(100% - 16px));grid-template-rows:auto auto auto minmax(0,1fr) auto}.gateway-tags-panel .zone-info-head>div{display:grid;gap:2px;min-width:0}.gateway-tags-panel .zone-info-head strong,.gateway-tags-panel .zone-info-head small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gateway-tags-panel-meta{display:flex;align-items:center;gap:8px}.gateway-tags-panel-search{margin:0}.gateway-tags-panel-table-wrap{min-height:0;max-height:320px;overflow:auto;border:1px solid var(--border);border-radius:10px;scrollbar-width:thin}.gateway-tags-panel-table{width:100%;min-width:720px;border-collapse:collapse}.gateway-tags-panel-table thead{position:sticky;top:0;z-index:1;background:var(--surface)}.gateway-tags-panel-table th,.gateway-tags-panel-table td{padding:7px 9px;font-size:12px;white-space:nowrap;border-bottom:1px solid #eef2f7}.gateway-tags-panel-table th{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.gateway-tags-panel-table td:first-child{display:grid;gap:2px}.gateway-tags-panel-table td:first-child small{color:var(--muted);font-size:10.5px}.gateway-tags-panel-table a:not(.cell-link){color:inherit;text-decoration:none}.gateway-tags-panel-table a:not(.cell-link):hover{color:var(--primary)}@media(max-width:700px){.floor-gateway-table-wrap.table-wrap{max-height:none;overflow:visible;border:0;border-radius:0}.floor-gateway-table{min-width:0}.gateway-tags-panel{width:calc(100% - 12px);max-height:calc(100% - 12px);top:6px;right:6px}.gateway-tags-panel-table-wrap{max-height:260px}}.floor-gateway-table-card{width:100%;padding:18px}.floor-gateway-table-card .card-head{margin-bottom:2px}.floor-gateway-table-wrap{max-height:420px}.floor-gateway-table th,.floor-gateway-table td{padding:11px 14px}.floor-gateway-name strong{max-width:360px;font-size:13.5px}.gateway-tags-panel{width:min(980px,calc(100% - 20px));max-height:min(640px,calc(100% - 20px));padding:14px}.gateway-tags-panel-table-wrap{max-height:430px}.gateway-tags-panel-table{min-width:820px}.gateway-tags-panel-table th,.gateway-tags-panel-table td{padding:9px 11px;font-size:12.5px}.gateway-detail-large .gateway-assignment-card{width:100%;box-sizing:border-box;padding:14px 16px}.gateway-detail-large .assigned-tag-list{max-height:460px;overflow-y:auto;scrollbar-width:thin;padding-right:3px}.gateway-detail-large .gateway-tag-picker-list{max-height:360px;overflow-y:auto;scrollbar-width:thin}.gateway-detail-large .assigned-tag-row{padding:11px 12px}.gateway-detail-large .gateway-unassigned-card{margin-top:12px}@media(max-width:900px){.floor-gateway-table-wrap{max-height:340px}.gateway-tags-panel{width:calc(100% - 12px);max-height:calc(100% - 12px);padding:10px}.gateway-tags-panel-table-wrap{max-height:340px}}.gateway-picker-modal tr.gateway-placement-current,.gateway-picker-modal tr.gateway-placement-current:hover{cursor:default;box-shadow:inset 3px 0 #93c5fd}.gateway-picker-modal tr.gateway-placement-current td,.gateway-picker-modal tr.gateway-placement-current:hover td{background:#f8fafc;color:var(--muted)}.gateway-placement-cell{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px 10px}.gateway-remove-button{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:4px 10px;font-size:12px;white-space:nowrap;color:#b42318;border-color:#fecdca}.gateway-remove-button:hover:not(:disabled){background:#fef3f2;color:#b42318}.gateway-picker-modal tr.gateway-placement-other td{background:#fffaf0}.gateway-placement-status{display:inline-flex;align-items:flex-start;gap:6px;min-width:0}.gateway-placement-status>span{display:grid;gap:1px;min-width:0}.gateway-placement-status strong,.gateway-placement-status small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gateway-placement-status.current{color:#1d4ed8}.gateway-placement-status.other{color:#b45309}.gateway-placement-status.none{color:var(--muted)}.gateway-placement-status small,.gateway-picker-current-placement{color:var(--muted);font-size:11px;font-weight:600}.gateway-picker-trigger .gateway-picker-current-placement{white-space:normal;line-height:1.3}.floor-gateway-rename{display:grid;grid-template-columns:minmax(150px,1fr) auto auto;gap:6px;align-items:center;max-width:520px}.floor-gateway-rename input{min-width:0;min-height:32px;padding:5px 8px}.floor-gateway-rename button{min-height:32px;padding:5px 8px}@media(max-width:760px){.floor-gateway-rename{grid-template-columns:1fr 1fr}.floor-gateway-rename input{grid-column:1 / -1}}.gateway-tags-panel-table{min-width:940px}.gateway-tag-asset-cell{min-width:150px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.gateway-tag-binding-actions{display:flex;align-items:center;gap:5px}.gateway-tag-binding-actions button{min-height:28px;padding:4px 7px;font-size:11px;white-space:nowrap}.action-with-icon{display:inline-flex;align-items:center;justify-content:center;gap:5px}.action-with-icon svg{flex:none}.gateway-tag-asset-picker{display:grid;gap:8px;padding:10px;border:1px solid #cbd5e1;border-radius:10px;background:#f8fafc;min-height:0}.gateway-tag-asset-picker-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.gateway-tag-asset-picker-head>div{display:grid;gap:1px;min-width:0}.gateway-tag-asset-picker-head small{color:var(--muted);font-size:10.5px;font-weight:700}.gateway-tag-asset-options{display:grid;gap:5px;max-height:190px;overflow-y:auto;scrollbar-width:thin}.gateway-tag-asset-option{width:100%;min-height:0;padding:8px 9px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;background:#fff;color:var(--text);border:1px solid var(--border);border-radius:9px;box-shadow:none!important}.gateway-tag-asset-option:hover:not(:disabled){border-color:#b9cdf8;background:var(--primary-soft)}.gateway-tag-asset-option.current{border-color:#86efac;background:#f0fdf4}.gateway-tag-asset-option>span:first-child{display:grid;min-width:0;gap:1px}.gateway-tag-asset-option strong,.gateway-tag-asset-option small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gateway-tag-asset-option small{color:var(--muted);font-size:10.5px}.gateway-plan-state{display:inline-flex;align-items:center;gap:7px;min-width:118px}.gateway-plan-icon{width:26px;height:26px;display:inline-grid;place-items:center;border-radius:50%;flex:none}.gateway-plan-state>span:last-child{display:grid;gap:1px;min-width:0}.gateway-plan-state strong{font-size:12px;line-height:1.2;white-space:nowrap}.gateway-plan-state small{color:var(--muted);font-size:10.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px}.gateway-plan-state.placed{color:#166534}.gateway-plan-state.placed .gateway-plan-icon{background:#dcfce7;color:#16a34a}.gateway-plan-state.unplaced{color:#64748b}.gateway-plan-state.unplaced .gateway-plan-icon{background:#f1f5f9;color:#94a3b8}.direct-gateway-placement{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid #bfdbfe;border-radius:11px;background:#eff6ff;color:var(--text)}.direct-gateway-placement>span:last-child{display:grid;gap:2px;min-width:0}.direct-gateway-placement strong,.direct-gateway-placement small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.direct-gateway-placement>span:last-child>small:last-child{color:var(--muted);font-size:11px}.plan-canvas .gateway-tags-panel{left:8px;right:8px;top:8px;width:auto;height:calc(100% - 16px);max-height:none;box-sizing:border-box;overflow:hidden;grid-template-rows:auto auto auto minmax(0,1fr) auto auto}.plan-canvas .gateway-tags-panel-table-wrap{width:100%;max-height:none;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.plan-canvas .gateway-tags-panel-table th,.plan-canvas .gateway-tags-panel-table td{min-width:0;white-space:normal;overflow-wrap:anywhere;vertical-align:middle}.plan-canvas .gateway-tags-panel-table th:nth-child(1),.plan-canvas .gateway-tags-panel-table td:nth-child(1){width:15%}.plan-canvas .gateway-tags-panel-table th:nth-child(2),.plan-canvas .gateway-tags-panel-table td:nth-child(2){width:18%}.plan-canvas .gateway-tags-panel-table th:nth-child(3),.plan-canvas .gateway-tags-panel-table td:nth-child(3){width:9%}.plan-canvas .gateway-tags-panel-table th:nth-child(4),.plan-canvas .gateway-tags-panel-table td:nth-child(4){width:10%}.plan-canvas .gateway-tags-panel-table th:nth-child(5),.plan-canvas .gateway-tags-panel-table td:nth-child(5){width:9%}.plan-canvas .gateway-tags-panel-table th:nth-child(6),.plan-canvas .gateway-tags-panel-table td:nth-child(6){width:20%}.plan-canvas .gateway-tags-panel-table th:nth-child(7),.plan-canvas .gateway-tags-panel-table td:nth-child(7){width:19%}.plan-canvas .gateway-tag-asset-cell{min-width:0;max-width:none}.plan-canvas .gateway-tag-binding-actions{flex-wrap:wrap;align-items:stretch}.plan-canvas .gateway-tag-binding-actions button{flex:1 1 auto;min-width:74px}.plan-canvas .gateway-tag-asset-picker{max-height:210px;overflow:hidden}.plan-canvas .gateway-tag-asset-options{max-height:130px}@media(max-width:900px){.plan-canvas .gateway-tags-panel{left:6px;right:6px;top:6px;width:auto;height:calc(100% - 12px);max-height:none}.plan-canvas .gateway-tags-panel-table-wrap{overflow-x:auto}.plan-canvas .gateway-tags-panel-table{min-width:760px;table-layout:auto}.plan-canvas .gateway-tags-panel-table th,.plan-canvas .gateway-tags-panel-table td{white-space:nowrap}}.plan-canvas .gateway-tags-panel{position:fixed;left:264px;right:24px;top:24px;bottom:24px;width:auto;height:auto;max-width:none;max-height:none;z-index:120;padding:18px;box-sizing:border-box;overflow:hidden;grid-template-rows:auto auto auto minmax(0,1fr) auto auto;border-radius:16px;box-shadow:0 24px 70px #0f172a47}.plan-canvas .gateway-tags-panel-table-wrap{min-height:0;max-height:none;width:100%;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable}.plan-canvas .gateway-tags-panel-table{width:100%;min-width:0;table-layout:fixed}.plan-canvas .gateway-tags-panel-table th,.plan-canvas .gateway-tags-panel-table td{white-space:normal;overflow-wrap:anywhere}.plan-canvas .gateway-tags-panel .zone-info-head{min-height:44px}.plan-canvas .gateway-tags-panel-search{width:100%}.plan-canvas .gateway-tag-asset-picker{max-height:230px}.plan-canvas .gateway-tag-asset-options{max-height:145px}@media(max-width:900px){.plan-canvas .gateway-tags-panel{left:10px;right:10px;top:72px;bottom:78px;width:auto;height:auto;max-height:none;padding:12px}.plan-canvas .gateway-tags-panel-table-wrap{overflow-x:auto}.plan-canvas .gateway-tags-panel-table{min-width:760px;table-layout:auto}.plan-canvas .gateway-tags-panel-table th,.plan-canvas .gateway-tags-panel-table td{white-space:nowrap}}.plan-canvas .gateway-tags-panel-table td:first-child{display:table-cell;white-space:normal;overflow-wrap:normal;word-break:normal}.plan-canvas .gateway-tags-panel-table td:first-child>a{display:block;width:100%;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:normal;word-break:normal}.plan-canvas .gateway-tags-panel-table td:first-child>small{display:block;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:normal;word-break:normal}@media(max-width:900px){body :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),select,textarea){font-size:16px!important}body select.compact{min-height:40px!important}input[type=checkbox],input[type=radio],.row-check{width:22px;height:22px}.segmented button,main .row-actions>button,main .row-actions>a,main a.table-detail-link,.pager button{min-height:40px!important}.collapse-toggle,main .icon-action,.pager button{min-width:40px!important;min-height:40px!important}}@media(max-width:700px){.card-head,.detail-heading{flex-wrap:wrap}.card-head>.row-actions,.detail-heading-actions{flex-wrap:wrap}}.sidebar .mobile-back{display:none}@media(max-width:900px){.sidebar .mobile-back{display:inline-grid;place-items:center;flex:none;width:40px;height:40px;min-height:40px;padding:0;border-radius:12px;background:#ffffff1f;color:#fff;text-decoration:none;box-shadow:none}.sidebar .mobile-back:hover,.sidebar .mobile-back:hover:not(.active){padding:0;background:#ffffff2e}.sidebar .mobile-back:active{background:#ffffff38}.sidebar .mobile-back svg{transform:rotate(90deg)}.sidebar .mobile-back span{display:none}}@media(max-width:480px){.sidebar.has-back .brand strong{display:none}}.logs-switch{margin-bottom:12px}.badge.info{background:#eff4ff;color:#1d4ed8}.live-toggle-field{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;font-weight:600;white-space:nowrap;cursor:pointer}.system-log-table .log-time{white-space:nowrap;font-variant-numeric:tabular-nums}.system-log-table .log-message{white-space:normal;min-width:280px}.system-log-table .log-message>span{display:block;overflow-wrap:anywhere}.system-log-table .log-message small{display:block;margin-top:2px;color:var(--muted);font-size:11.5px}.system-log-table .log-detail-row>td{background:#f8fafc;white-space:normal}.log-detail{display:flex;flex-wrap:wrap;gap:6px 24px;margin:0 0 8px}.log-detail>div{display:flex;gap:6px;align-items:baseline}.log-detail dt{color:var(--muted);font-size:12px;font-weight:600}.log-detail dd{margin:0;font-size:13px}.log-pre{margin:6px 0 0;padding:10px 12px;max-height:320px;overflow:auto;border-radius:10px;border:1px solid var(--border);background:var(--surface);font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.log-pre.log-exception{color:#b42318;border-color:#fecdca;background:#fffbfa}@media(max-width:700px){.system-log-table .log-message{min-width:0}.table-wrap .system-log-table td.log-message{display:block;text-align:left}.table-wrap .system-log-table td.log-message:before{display:block;margin-bottom:2px}.table-wrap tr.log-detail-row>td:before{content:none}.table-wrap tr.log-detail-row>td{display:block;text-align:left}}.log-summary-line{margin:0 0 8px;font-size:13px;color:var(--text)}.log-tag-table-wrap{max-height:360px;overflow:auto;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.log-tag-table th,.log-tag-table td{padding:6px 10px;font-size:12.5px}.log-tag-table thead th{position:sticky;top:0;z-index:1}.log-chip-list{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 6px;padding:0;list-style:none}.log-chip-list li{padding:2px 8px;border-radius:999px;background:#eff4ff;color:#1d4ed8;font-size:12px}.log-raw{margin-top:8px}.log-raw summary{cursor:pointer;color:var(--muted);font-size:12px;font-weight:600}.log-tag-table .muted,.log-detail .muted{color:var(--muted)}.placing-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-bottom:10px;padding:8px 12px;border:1px solid #b9cdf8;border-radius:12px;background:var(--primary-soft);color:var(--primary);font-weight:600;font-size:13px}.placing-bar>span{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}.site-plan-panel{scroll-margin-top:88px}@media(max-width:900px){.site-plan-panel{scroll-margin-top:112px}}.placing-bar .placing-next{display:block;margin-top:2px;font-weight:500;opacity:.85}.gateway-picker-hint{margin:6px 0 0;color:var(--muted);font-size:13px}.gateway-pick-cell{width:44px;text-align:center;cursor:pointer}.gw-unbound-asset{color:#b54708;font-weight:700}.plan-stage .plan-gw.plan-marker-dot{width:22px;height:22px;min-width:22px;min-height:22px;padding:0;border:3px solid #fff;border-radius:999px;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0f172a38,0 0 0 1px #0f172a1f;z-index:8;overflow:visible}.plan-stage .plan-gw.plan-marker-dot>i{width:10px;height:10px;margin:0;transform:none;border-radius:999px;background:#ef4444;box-shadow:none;animation:none}.plan-stage .plan-gw.plan-marker-dot.online>i{background:#16a34a}.plan-stage .plan-gw.plan-marker-dot.has-alert>i{background:#facc15}.plan-stage .plan-gw.plan-marker-dot.has-alert{border-color:#fff;box-shadow:0 2px 8px #0f172a38,0 0 0 3px #f59e0b3d;animation:gateway-alert-pulse 1.05s ease-in-out infinite}.plan-stage .plan-gw.plan-marker-dot.open{z-index:12;box-shadow:0 3px 10px #0f172a47,0 0 0 4px #2563eb33}.plan-gw-alert-count{position:absolute;right:-9px;top:-10px;display:grid;place-items:center;min-width:17px;height:17px;padding:0 4px;border:2px solid #fff;border-radius:999px;background:#facc15;color:#713f12;font-size:9px;font-weight:800;line-height:1;box-shadow:0 1px 4px #a1620752;pointer-events:none}.plan-stage .plan-asset-position{z-index:7;display:grid;place-items:center;width:18px;height:18px;transform:translate(-50%,-50%);transition:left .55s ease,top .55s ease,transform .15s ease,box-shadow .15s ease;border:2px solid #fff;border-radius:6px;background:#2563eb;box-shadow:0 2px 7px #0f172a3d;text-decoration:none}.plan-stage .plan-asset-position>span{width:6px;height:6px;border-radius:2px;background:#fff}.plan-stage .plan-asset-position>small{position:absolute;left:50%;top:calc(100% + 5px);transform:translate(-50%);max-width:125px;padding:2px 6px;border-radius:6px;background:#0f172ae0;color:#fff;font-size:9.5px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none}.plan-stage .plan-asset-position:hover>small{opacity:1}.journey-path .leg-halo{fill:none;stroke:#fffffff0;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.journey-path .planned .leg{stroke-width:2.25;opacity:.82}.journey-path .walked .leg{stroke-width:3.25}.journey-path .leg-arrow{stroke:#fff;stroke-width:.5;paint-order:stroke fill}.journey-stop b{box-shadow:0 2px 6px #0f172a38}.journey-stop.visited b{box-shadow:0 2px 7px #2563eb47}.journey-asset{z-index:7;width:28px;height:28px;display:grid;place-items:center;transform:translate(-50%,-50%);border:3px solid #fff;border-radius:9px;background:#2563eb;color:#fff;box-shadow:0 3px 12px #2563eb57}.activity-list{gap:6px}.activity-list li{min-height:50px;padding:8px 10px;border:1px solid transparent}.activity-list li.activity-alert{border-color:#fecaca;background:#fff7f7}.activity-list li.activity-resolved{border-color:#dbeafe;background:#f8fbff}.activity-list li.activity-resolved strong,.activity-list li.activity-resolved small{opacity:.78}.activity-list small{white-space:normal;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media(max-width:700px){.activity-list li{grid-template-columns:32px minmax(0,1fr)}.activity-list time{grid-column:2;justify-self:start}}.plan-stage .plan-asset-position.boundary{background:#f59e0b;border-style:dashed;box-shadow:0 2px 7px #f59e0b4d,0 0 0 3px #f59e0b1f}.plan-stage .plan-asset-position.uncertain{background:#f59e0b;border-style:dashed;opacity:.78}.journey-canvas .journey-stop{z-index:8}.journey-canvas .journey-stop b{min-width:24px;height:24px;padding:0 5px;border:3px solid #fff;background:#64748b;color:#fff;font-size:10px;font-weight:800;box-shadow:0 3px 9px #0f172a52}.journey-canvas .journey-stop.visited b{background:var(--primary);border-color:#fff;color:#fff;box-shadow:0 3px 10px #2563eb57}.journey-canvas .journey-stop.current{z-index:10}.journey-canvas .journey-stop.current b{min-width:28px;height:28px;box-shadow:0 0 0 4px #2563eb2e,0 4px 12px #0f172a52}.journey-canvas .journey-stop small{top:15px;z-index:9}.journey-canvas .journey-floor-change{display:none!important}.plan-stage .plan-gw.plan-marker-dot.online:not(.has-alert){animation:none!important;box-shadow:0 2px 8px #0f172a33,0 0 0 3px #16a34a33,0 0 12px 3px #16a34a29}.plan-stage .plan-gw.plan-marker-dot.online:not(.has-alert)>i{background:#16a34a;box-shadow:0 0 0 1px #16a34a47;animation:none!important}.plan-legend-keys .lg-gw.on{animation:none!important;box-shadow:0 0 0 2px #16a34a38,0 0 8px #16a34a29}.plan-legend-keys .lg-gw.on i{animation:none!important}.journey-canvas .journey-stop b.journey-history-dot{min-width:14px;width:14px;height:14px;padding:0;border:3px solid #fff;border-radius:999px;background:#64748b;box-shadow:0 2px 7px #0f172a52;font-size:0}.journey-canvas .journey-stop.visited b.journey-history-dot{background:var(--primary)}.journey-canvas .journey-stop.current b.journey-history-dot{width:18px;min-width:18px;height:18px;box-shadow:0 0 0 4px #2563eb29,0 3px 9px #0f172a57}.journey-canvas .journey-stop small{display:none!important}.journey-canvas .journey-start.journey-start-dot{width:16px;height:16px;min-width:16px;padding:0;border:3px solid #fff;border-radius:999px;transform:translate(-50%,-50%);background:#16a34a;box-shadow:0 0 0 3px #16a34a29,0 2px 7px #0f172a47;font-size:0}.plan-canvas>.zone-info.gw-quick-card,.plan-canvas>.zone-info.gw-summary,.plan-canvas>.zone-info.gateway-tags-panel{z-index:40}.plan-canvas:has(>.zone-info.gw-quick-card) .plan-stage .plan-gw,.plan-canvas:has(>.zone-info.gw-quick-card) .plan-stage .plan-asset-position{z-index:5}.gw-quick-assets li{grid-template-columns:auto minmax(0,1fr) auto}.gw-quick-assets li>span:first-of-type{display:grid;gap:1px;min-width:0}.gw-quick-assets li>span:first-of-type>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-stage.is-editing .plan-gw.editable{cursor:grab;touch-action:none}.plan-stage.is-drop-target{outline:2px dashed var(--primary);outline-offset:3px}.plan-gw.plan-marker-dot.dragging{cursor:grabbing;z-index:30;transform:translate(-50%,-50%) scale(1.6);transition:none}.plan-gw.plan-marker-dot.dragging:after,.plan-gw.plan-marker-dot.dragging:before{opacity:0}.plan-gw.plan-marker-dot.saving>i{animation:gw-saving .9s ease-in-out infinite}.plan-gw.plan-marker-dot.highlight{z-index:35;transform:translate(-50%,-50%) scale(1.7);transition:transform var(--dur) var(--ease-spring)}.plan-gw.plan-marker-dot.highlight>i{background:#22c55e;box-shadow:0 0 0 3px #fff,0 0 0 7px #22c55e8c,0 0 22px 9px #22c55e61;animation:linked-gw-highlight .9s ease-in-out infinite alternate}.plan-gw.plan-marker-dot.highlight:before,.plan-gw.plan-marker-dot.highlight:after{opacity:1}.plan-gw.plan-marker-dot.highlight:after{transform:translate(-50%) translateY(0)}.plan-gw.plan-marker-dot.highlight>.plan-gw-name{display:block;opacity:1;background:#15803d}@keyframes linked-gw-highlight{0%{filter:brightness(1)}to{filter:brightness(1.35)}}.plan-drop-ghost{position:absolute;z-index:9;width:26px;height:26px;transform:translate(-50%,-50%);pointer-events:none;border:2px dashed var(--primary);border-radius:50%;background:color-mix(in srgb,var(--primary) 16%,transparent);animation:gw-drop 1s ease-in-out infinite}.plan-drop-ghost:after{content:"";position:absolute;top:8px;right:8px;bottom:8px;left:8px;border-radius:50%;background:var(--primary)}@keyframes gw-saving{50%{transform:scale(.7);opacity:.6}}@keyframes gw-drop{50%{transform:translate(-50%,-50%) scale(1.18)}}.gw-dock{display:grid;gap:10px}.gw-dock-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.gw-dock-head h2{margin:0}.gw-dock-hint{display:flex;align-items:flex-start;gap:6px;margin:0;padding:8px 10px;border-radius:var(--radius-sm);background:var(--primary-soft);color:var(--primary);font-size:12px;font-weight:600;line-height:1.4}.gw-dock-hint svg{flex:none;margin-top:1px}.gw-dock-search{margin:0;width:100%;min-width:0}.gw-dock-search input{width:100%;min-width:0;padding-right:4px;overflow:visible;text-overflow:clip;white-space:nowrap}.gw-dock-group{display:flex;align-items:center;gap:6px;margin:4px 0 0;color:var(--muted);font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.gw-dock-group small{padding:0 6px;border-radius:999px;background:#eef2f7;color:var(--text);font-size:11px;letter-spacing:0}.gw-dock-list{display:grid;gap:6px;margin:0;padding:0;list-style:none;max-height:320px;overflow-y:auto}.gw-dock-item{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);transition:border-color var(--dur-fast) ease,box-shadow var(--dur-fast) ease,transform var(--dur-fast) ease,opacity var(--dur-fast) ease}.gw-dock-item:not(.draggable){grid-template-columns:auto minmax(0,1fr) auto}.gw-dock-item.placed{border-left:3px solid #22c55e}.gw-dock-item.draggable{cursor:grab}.gw-dock-item:hover{border-color:color-mix(in srgb,var(--primary) 45%,var(--border));box-shadow:var(--shadow-lift);transform:translateY(-1px)}.gw-dock-item.dragging{opacity:.45;border-style:dashed;transform:none;box-shadow:none}.gw-dock-item.placing{border-color:var(--primary);background:var(--primary-soft)}.gw-dock-grip{display:flex;color:var(--muted)}.gw-dock-grip svg{stroke-width:3.2}.gw-dock-name{display:grid;min-width:0;gap:1px}.gw-dock-name a,.gw-dock-name small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gw-dock-name a{font-weight:700}.gw-dock-name small{color:var(--muted);font-size:12px}.gw-dock-actions{display:flex;align-items:center;gap:4px}.gw-dock-place{display:inline-flex;align-items:center;gap:4px;min-height:0;height:28px;padding:0 10px;font-size:12px}.gw-dock-rename{grid-column:span 2;display:flex;gap:6px;min-width:0}.gw-dock-rename input{flex:1;min-width:0;height:30px}.gw-dock-rename button{min-height:0;height:30px;padding:0 10px;font-size:12px}@media(prefers-reduced-motion:reduce){.plan-drop-ghost,.plan-gw.plan-marker-dot.saving>i{animation:none}.gw-dock-item,.gw-dock-item:hover{transition:none;transform:none}}.site-detail-layout:has(>.floor-side) .plan-canvas{--plan-max-h: clamp(260px, calc(100vh - 300px) , 520px)}@media(min-width:1281px){.site-detail-layout:has(>.floor-side)>.site-plan-panel{align-self:start;position:sticky;top:12px;grid-template-rows:auto}.site-detail-layout:has(>.floor-side)>.site-plan-panel>.plan-card{height:auto}.site-detail-layout>.floor-side>section.gw-dock{display:grid;flex:none;gap:10px}}.gw-title-name{display:flex;align-items:center;gap:6px;min-width:0}.gw-title-name strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gw-title-edit{flex:none;width:26px;height:26px;border-radius:7px}.zone-info-head>.gw-inline-rename{flex:1}.gw-bind-button{min-height:0;height:26px;padding:0 9px;font-size:11.5px;white-space:nowrap}.gateway-tags-panel{width:min(620px,calc(100% - 16px))}.gateway-tags-panel-table{min-width:540px}.gateway-tags-panel-table .gateway-tag-asset-cell{display:grid;gap:4px;max-width:230px}.gateway-tags-panel-table .gateway-tag-asset-cell>a,.gateway-tags-panel-table .gateway-tag-asset-cell>span.muted{overflow:hidden;text-overflow:ellipsis}.plan-guide{position:absolute;z-index:8;pointer-events:none;border:0 dashed color-mix(in srgb,var(--primary) 75%,transparent)}.plan-guide-h{left:0;right:0;height:0;border-top-width:1.5px}.plan-guide-v{top:0;bottom:0;width:0;border-left-width:1.5px}.plan-guide-label{position:absolute;z-index:31;transform:translate(-50%,calc(-100% - 16px));pointer-events:none;display:inline-flex;align-items:center;gap:4px;max-width:70%;padding:3px 9px;border-radius:999px;background:var(--primary);color:#fff;font-size:11.5px;font-weight:700;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 4px 12px #0f172a40}.plan-guide-label.below{transform:translate(-50%,16px)}.plan-guide-label svg{flex:none}.gw-drag-image{position:fixed;top:-1000px;left:-1000px;padding:18px 0 0 18px;pointer-events:none}.gw-drag-image span{display:inline-block;padding:4px 10px;border-radius:999px;background:var(--primary);color:#fff;font-size:12px;font-weight:700;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;box-shadow:0 4px 12px #0f172a40}.floor-gateway-table tbody tr:hover td{background:#f8fafc}.floor-gateway-table tr.is-moving td{background:var(--primary-soft)}.floor-gateway-search{margin:0;flex:0 1 340px;width:min(340px,100%);min-width:280px}.floor-gateway-search input{width:100%;min-width:0;padding-right:4px;overflow:visible;text-overflow:clip;white-space:nowrap}.floor-gateway-table-card .card-head{align-items:center;flex-wrap:wrap}.floor-gateway-table-card .card-head>.floor-gateway-search{margin-left:auto}@media(max-width:760px){.floor-gateway-search{flex:1 1 100%;width:100%;min-width:0}}.icon-action.active,.icon-action.active:hover:not(:disabled){background:var(--primary);color:#fff;border-color:var(--primary)}@media(prefers-reduced-motion:reduce){.plan-guide-label{box-shadow:none}}.floor-gateway-title{margin:0}.collapse-toggle{display:inline-flex;align-items:center;gap:8px;min-height:0!important;height:auto!important;margin-left:-6px;padding:2px 6px;border:0;border-radius:8px;background:transparent;color:var(--text);font:inherit;box-shadow:none;cursor:pointer}.collapse-toggle:hover{background:#f1f5f9}.collapse-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.collapse-toggle>svg{color:var(--muted);transition:transform var(--dur) var(--ease-out)}.collapse-toggle[aria-expanded=false]>svg{transform:rotate(-90deg)}.floor-gateway-body{display:grid;gap:10px}.floor-gateway-table{min-width:520px}.floor-gateway-table th.num,.floor-gateway-table td.num{width:90px;text-align:center;font-variant-numeric:tabular-nums}.floor-gateway-table th.actions-col,.floor-gateway-table td.actions-col{width:1%;text-align:right}.floor-gateway-table td.actions-col .table-actions{justify-content:flex-end;gap:6px!important}.floor-gateway-table td.actions-col .icon-action{width:32px;height:32px}@media(prefers-reduced-motion:reduce){.collapse-toggle>svg{transition:none}}.plan-canvas>.zone-info.gateway-tags-panel.gw-drawer{position:fixed;top:80px;right:16px;bottom:auto;left:auto;z-index:120;width:min(440px,calc(100vw - 32px));height:auto;max-height:calc(100vh - 96px);display:flex;flex-direction:column;gap:10px;padding:14px;overflow:hidden;box-sizing:border-box}.gw-drawer .gateway-tags-panel-meta{flex-wrap:wrap}.gw-drawer .gw-tag-list{flex:1 1 auto;min-height:0;overflow-y:auto;display:grid;gap:6px;align-content:start;scrollbar-width:thin}.gw-drawer .gw-tag-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 10px;padding:9px 10px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.gw-drawer .gw-tag-row.unbound{border-left:3px solid #f59e0b}.gw-tag-id{display:grid;gap:2px;min-width:0}.gw-tag-id>a{font-size:12.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gw-tag-id>small{display:flex;align-items:center;gap:5px;color:var(--muted);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gw-tag-id .dot{width:7px;height:7px;flex:none}.gw-drawer .gw-tag-row>.tag-metrics{display:flex;flex-wrap:wrap;justify-content:flex-end;align-content:start;gap:4px;margin:0;max-width:190px}.gw-tag-asset{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding-top:6px;border-top:1px dashed #e8edf3}.gw-tag-asset>a,.gw-tag-asset>.muted{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600}.gw-drawer .gateway-tag-binding-actions{display:flex;flex:none;gap:5px}@media(max-width:900px){.plan-canvas>.zone-info.gateway-tags-panel.gw-drawer{top:72px;left:10px;right:10px;width:auto;max-height:calc(100vh - 160px)}}.plan-gw.plan-marker-dot>.plan-gw-name{position:absolute;left:50%;top:calc(100% + 3px);transform:translate(-50%);pointer-events:none;max-width:120px;padding:1px 5px;border-radius:4px;background:#0f172ab8;color:#fff;font-size:10px;font-weight:700;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-gw.plan-marker-dot.dragging>.plan-gw-name,.plan-canvas.is-3d .plan-gw-name{display:none}.plan-gw.plan-marker-dot.open>.plan-gw-name,.plan-gw.plan-marker-dot.highlight>.plan-gw-name{background:var(--primary)}.site-detail-layout .floor-tools{display:flex;flex-wrap:wrap;gap:8px}.site-detail-layout .floor-tools>.file-button{flex:1 1 0;min-width:0;justify-content:center;white-space:nowrap}.site-detail-layout .floor-tools>.icon-action{flex:none;width:36px;height:36px}.floor-gateway-table-card .card-head>div:first-child{flex:1 1 auto;min-width:0}.floor-gateway-title .collapse-toggle{white-space:nowrap}.floor-gateway-table-card .floor-gateway-map-hint{margin:0;text-align:left;font-size:12.5px}.floor-gateway-table th,.floor-gateway-table td{padding:8px 12px}.site-detail-layout .floor-tools>.file-button{padding:0 10px;gap:6px;font-size:12.5px}@media(max-width:560px){.plan-canvas>.zone-info.gateway-tags-panel.gw-drawer{top:84px;max-height:calc(100vh - 170px)}.gw-drawer .gw-tag-row{grid-template-columns:minmax(0,1fr)}.gw-drawer .gw-tag-row>.tag-metrics{justify-content:flex-start;max-width:none}}@media(min-width:1281px){.content:has(.dashboard){max-width:none}.dash-middle .plan-canvas{--plan-max-h: clamp(240px, calc(100vh - 630px) , 560px)}}@media(min-width:1281px)and (max-height:820px){.dashboard,.kpi-row,.dash-middle,.dash-bottom{gap:12px}.kpi{min-height:0;padding:12px 16px}.dashboard .dash-card{padding:12px 14px}.dash-middle .plan-canvas{--plan-max-h: clamp(200px, calc(100vh - 560px) , 560px)}.kpi .kpi-value{font-size:24px}.dash-bottom .donut-body svg{width:128px;height:128px}.content:has(.dashboard){padding-bottom:12px}}@media(min-width:1281px){.dash-bottom .donut-body{flex-direction:row;align-items:center;gap:16px}.dash-bottom .donut-body svg{width:132px;height:132px;align-self:center}}@media(min-width:1281px)and (max-height:820px){.dash-bottom .donut-body svg{width:112px;height:112px}.dash-bottom .donut-legend{gap:4px;font-size:12.5px}}@media(max-width:1500px){.kpi-spark{top:16px;right:14px;height:30px;gap:2px}.kpi-spark i{width:4px}}.content:has(.floor-workspace-page){max-width:none}.floor-workspace-grid{display:grid;grid-template-columns:minmax(230px,280px) minmax(0,1fr) minmax(250px,300px);grid-template-areas:"plan plan dock" "floors table dock";gap:14px;align-items:stretch}.floor-workspace-plan{grid-area:plan;min-width:0}.floor-workspace-unplaced{grid-area:dock;min-width:0;padding:14px;align-self:stretch;overflow:hidden}.floor-stack-card{grid-area:floors;min-width:0;padding:14px}.floor-workspace-table{grid-area:table;min-width:0}.floor-workspace-table>.panel{height:100%}.floor-plan-workbench{padding:0;overflow:hidden}.floor-plan-toolbar{min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;border-bottom:1px solid var(--border);background:#fff}.floor-plan-toolbar-left,.floor-plan-toolbar-right{display:flex;align-items:center;gap:8px;min-width:0}.floor-plan-toolbar-left{flex-wrap:wrap}.floor-plan-toolbar-right{flex:none}.floor-plan-toolbar .floor-drag-gw{display:inline-flex;align-items:center;gap:6px}.floor-plan-workbench:fullscreen{background:var(--bg);padding:14px;overflow:auto}.floor-plan-workbench:fullscreen .floor-plan-workspace{min-height:calc(100vh - 90px)}.floor-plan-workspace{display:grid;grid-template-columns:minmax(0,1fr);min-width:0;align-items:stretch}.floor-plan-workspace.has-detail{grid-template-columns:minmax(0,1fr) minmax(320px,390px)}.floor-plan-workspace>.plan-canvas{min-width:0;border-radius:0;overflow:auto}.floor-plan-workbench .plan-stage{zoom:var(--plan-zoom, 1)}.floor-plan-workspace>.gw-docked{position:static!important;inset:auto!important;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important;border:0;border-left:1px solid var(--border);border-radius:0;box-shadow:none;padding:14px;overflow:hidden;animation:none}.gw-docked .zone-info-head{flex:none}.gw-docked-info{margin:0;display:grid;gap:0;border:1px solid var(--border);border-radius:10px;overflow:hidden}.gw-docked-info>div{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px;padding:7px 9px;border-bottom:1px solid #eef2f7}.gw-docked-info>div:last-child{border-bottom:0}.gw-docked-info dt{color:var(--muted);font-size:11.5px}.gw-docked-info dd{margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600}.gw-kpi-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.gw-kpi-row>div{min-width:0;display:grid;gap:3px;padding:9px 8px;border:1px solid #e8edf4;border-radius:10px;background:#f8fafc}.gw-kpi-row span{color:var(--muted);font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gw-kpi-row strong{font-size:14px;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gw-docked .gateway-tags-panel-search{margin:0}.gw-docked-tag-table-wrap{min-height:0;overflow:auto;border:1px solid var(--border);border-radius:10px}.gw-docked-tag-table{min-width:560px}.gw-docked-tag-table th,.gw-docked-tag-table td{padding:7px 8px;font-size:11.5px}.gw-docked-tag-table th{font-size:10px}.gw-docked-tag-table tr.unbound td{background:#fffaf0}.status-inline{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:11.5px}.status-inline i{width:7px;height:7px;border-radius:50%;background:#94a3b8}.status-inline.online i{background:#16a34a}.plan-gw.plan-marker-dot>.plan-gw-name{opacity:0;transform:translate(-50%,3px);transition:opacity .12s ease,transform .12s ease}.plan-gw.plan-marker-dot:hover>.plan-gw-name,.plan-gw.plan-marker-dot:focus-visible>.plan-gw-name,.plan-gw.plan-marker-dot.open>.plan-gw-name,.plan-gw.plan-marker-dot.highlight>.plan-gw-name{opacity:1;transform:translate(-50%)}.floor-workspace-unplaced .gw-dock{height:100%;min-height:0;display:grid;grid-template-rows:auto auto auto minmax(0,1fr);align-content:start}.floor-workspace-unplaced .gw-dock-list{max-height:none;min-height:180px;overflow-y:auto;align-content:start;padding-right:2px}.floor-workspace-unplaced .gw-dock-item{padding:10px;grid-template-columns:auto auto minmax(0,1fr)}.floor-workspace-unplaced .gw-dock-actions{grid-column:2 / -1;justify-content:flex-end}.floor-workspace-unplaced .gw-dock-place{background:transparent;color:var(--primary);border-color:transparent}.floor-workspace-unplaced .gw-dock-hint{background:transparent;padding:0;color:var(--muted);font-weight:500}.floor-stack-list{display:grid;gap:4px;margin-top:8px}.floor-stack-item{min-height:42px;display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:8px;padding:5px 8px;background:transparent;color:var(--text);border:1px solid transparent;box-shadow:none;text-align:left}.floor-stack-item:hover:not(:disabled){background:#f8fafc;color:var(--text);border-color:var(--border)}.floor-stack-item.active{background:var(--primary-soft);color:var(--primary);border-color:#bfdbfe}.floor-stack-item small{color:var(--muted);font-size:10.5px}.floor-stack-layer{position:relative;display:block;width:38px;height:18px;border:1px solid #b8c4d4;border-radius:4px;background:linear-gradient(145deg,#eef3f8,#d8e1ec);transform:skewY(-10deg);box-shadow:0 4px 0 -1px #fff,0 5px #cbd5e1,0 8px 0 -1px #fff,0 9px #d7dee8}.floor-stack-item.active .floor-stack-layer{border-color:#3b82f6;background:linear-gradient(145deg,#dbeafe,#bfdbfe);box-shadow:0 4px 0 -1px #fff,0 5px #60a5fa,0 8px 0 -1px #fff,0 9px #93c5fd}.floor-stack-meta{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.floor-stack-meta>div{display:grid;gap:3px;padding:8px;border-radius:9px;background:#f8fafc}.floor-stack-meta span{color:var(--muted);font-size:10.5px}.floor-stack-meta strong{font-size:12.5px}.floor-stack-actions{display:grid;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.floor-stack-actions .file-button{min-height:32px;padding:6px 8px;font-size:11.5px}.floor-stack-actions .row-actions{justify-content:flex-start}.floor-stack-actions .row-actions button{min-height:30px;padding:5px 9px;font-size:11.5px}.floor-workspace-table .floor-gateway-table-card{padding:14px}.floor-workspace-table .floor-gateway-table{min-width:780px}.floor-gateway-code-cell{display:flex;align-items:center;gap:8px;min-width:150px}.floor-gateway-code-cell>i{flex:none;width:8px;height:8px;border-radius:50%;background:#94a3b8}.floor-gateway-code-cell>i.good{background:#16a34a}.floor-gateway-code-cell>span{display:grid;gap:2px;min-width:0}.floor-gateway-code-cell strong,.floor-gateway-code-cell small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.floor-gateway-code-cell small{color:var(--muted);font-size:10.5px}.floor-workspace-table .icon-action{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}@media(min-width:1450px){.floor-workspace-unplaced{position:sticky;top:12px;max-height:calc(100vh - 32px)}}@media(max-width:1449px){.floor-workspace-grid{grid-template-columns:240px minmax(0,1fr);grid-template-areas:"plan plan" "floors table" "dock dock"}.floor-workspace-unplaced{max-height:360px}.floor-workspace-unplaced .gw-dock-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:980px){.floor-plan-workspace.has-detail{grid-template-columns:1fr}.floor-plan-workspace>.gw-docked{border-left:0;border-top:1px solid var(--border)}.floor-workspace-grid{grid-template-columns:1fr;grid-template-areas:"plan" "dock" "floors" "table"}}@media(max-width:640px){.floor-plan-toolbar{align-items:stretch;flex-direction:column}.floor-plan-toolbar-left,.floor-plan-toolbar-right{width:100%}.floor-plan-toolbar-right{justify-content:flex-end}.floor-workspace-unplaced .gw-dock-list,.gw-kpi-row{grid-template-columns:1fr}}.floor-plan-workbench .plan-gw.plan-marker-dot:not(.has-alert),.floor-plan-workbench .plan-gw.plan-marker-dot.online:not(.has-alert){animation:none!important;box-shadow:0 2px 8px #0f172a3b,0 0 0 1px #0f172a29}.floor-plan-workbench .plan-gw.plan-marker-dot.online:not(.has-alert)>i{background:#16a34a;box-shadow:none}.floor-plan-workbench .plan-gw.plan-marker-dot.has-alert{box-shadow:0 2px 8px #0f172a38,0 0 0 2px #f59e0b4d}.floor-stack-meta{grid-template-columns:repeat(3,minmax(0,1fr))}.floor-stack-map-actions{display:flex;align-items:center;gap:6px}.floor-stack-map-actions .icon-action{width:32px;height:32px}.floor-workspace-grid{grid-template-columns:minmax(0,1fr) minmax(280px,320px);grid-template-areas:"plan dock" "table dock"}.floor-workspace-plan{grid-area:plan}.floor-workspace-unplaced{grid-area:dock}.floor-workspace-table{grid-area:table}.floor-stack-card{display:none!important}.gateway-detail-modal{width:min(820px,92vw);max-height:min(78vh,720px);overflow:hidden;background:var(--surface);border-radius:18px;box-shadow:0 30px 80px #0f172a47;display:grid;grid-template-rows:auto auto auto auto minmax(0,1fr) auto;gap:9px;padding:14px}.gateway-detail-modal .gw-docked-tag-table-wrap{min-height:180px;max-height:320px;overflow:auto}.gateway-detail-modal .gw-docked-tag-table{min-width:620px}.gateway-detail-modal .gateway-tags-panel-meta,.gateway-detail-modal .gw-kpi-row,.gateway-detail-modal .gw-docked-info{width:100%}.gateway-detail-modal-backdrop{z-index:1200}.gateway-detail-modal .zone-info-head{margin-bottom:2px}.gateway-detail-modal .zone-info-link{justify-self:end}.gateway-detail-modal+.modal-backdrop,.asset-tag-modal{z-index:1300}.floor-workspace-unplaced{min-width:280px;max-width:320px}.floor-workspace-unplaced .gw-dock-list{min-height:420px}.floor-workspace-table .floor-gateway-table-card{margin-top:0}@media(max-width:1180px){.floor-workspace-grid{grid-template-columns:1fr;grid-template-areas:"plan" "dock" "table"}.floor-workspace-unplaced{max-width:none;max-height:360px}}.floor-plan-workbench:fullscreen .floor-plan-workspace.fullscreen-with-gw{grid-template-columns:minmax(0,1fr) minmax(340px,420px);min-height:calc(100vh - 90px)}.floor-plan-workbench:fullscreen .gateway-detail-fullscreen-dock{width:auto;max-width:none;max-height:calc(100vh - 105px);border-radius:0;border-left:1px solid var(--border);box-shadow:none;align-self:stretch;overflow:hidden}.floor-plan-workbench:fullscreen .gateway-detail-fullscreen-dock .gw-docked-tag-table-wrap{max-height:none;min-height:0}.floor-plan-workbench:fullscreen .gateway-detail-fullscreen-dock .gw-docked-tag-table{min-width:680px}@media(max-width:900px){.floor-plan-workbench:fullscreen .floor-plan-workspace.fullscreen-with-gw{grid-template-columns:1fr}.floor-plan-workbench:fullscreen .gateway-detail-fullscreen-dock{border-left:0;border-top:1px solid var(--border);max-height:48vh}}.movement-history-simple{display:grid;gap:14px}.movement-last-point{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--border);border-radius:14px;background:#f8fafc}.movement-last-point .eyebrow{margin:0 0 4px}.movement-last-point h2{margin:0;font-size:20px}.movement-last-point-meta{display:grid;justify-items:end;gap:3px;min-width:0}.movement-last-point-meta strong{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.movement-last-point-meta span{color:var(--muted);font-size:12px}.movement-history-simple .movement-list{border-top:0;padding-top:0;min-height:280px}.movement-history-simple .movement-events{max-height:min(58vh,620px)}@media(max-width:700px){.movement-last-point{align-items:flex-start;flex-direction:column}.movement-last-point-meta{justify-items:start}}.floor-plan-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;padding:0 2px}.floor-plan-actions>div:first-child{display:grid;gap:2px;min-width:0}.floor-plan-actions>div:first-child strong{font-size:15px}.floor-plan-actions>div:first-child small{color:var(--muted);font-size:12px}.floor-plan-actions .row-actions{flex-wrap:wrap;justify-content:flex-end}@media(max-width:700px){.floor-plan-actions{align-items:stretch;flex-direction:column}.floor-plan-actions .row-actions{justify-content:flex-start}}.movement-history-map{overflow:hidden}.movement-history-map .journey{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(320px,.85fr);gap:16px;align-items:stretch}.movement-history-map .journey-map{min-width:0}.movement-history-map .journey-side{min-width:0;border-left:1px solid var(--border);padding-left:16px}.movement-history-map .movement-list{border-top:0;padding-top:0}.movement-history-map .movement-events{max-height:min(68vh,720px);overflow-y:auto}.movement-history-map .journey-canvas .journey-asset{z-index:8;transform:translate(-50%,-50%) scale(1.12)}@media(max-width:980px){.movement-history-map .journey{grid-template-columns:minmax(0,1fr)}.movement-history-map .journey-side{border-left:0;border-top:1px solid var(--border);padding-left:0;padding-top:14px}}.dash-middle .activity-card{overflow:hidden;border-radius:18px}.dash-middle .activity-card .card-head{min-width:0}.dash-middle .activity-card .activity-list{width:100%;min-width:0;box-sizing:border-box}.dash-middle .activity-card .activity-list li{width:100%;min-width:0;box-sizing:border-box;grid-template-columns:32px minmax(0,1fr) minmax(42px,auto);gap:8px;padding:7px 8px;border:1px solid transparent;border-radius:14px;overflow:hidden}.dash-middle .activity-card .activity-list li>div{min-width:0;overflow:hidden}.dash-middle .activity-card .activity-list strong{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-middle .activity-card .activity-list small{min-width:0;max-width:100%;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;white-space:normal;overflow:hidden;overflow-wrap:anywhere;word-break:break-word;line-height:1.3}.dash-middle .activity-card .activity-list time{min-width:max-content;white-space:nowrap;text-align:right}.dash-middle .activity-card .activity-icon{width:32px;height:32px;flex:0 0 32px}@media(max-width:1400px){.dash-middle .activity-card .activity-list li{grid-template-columns:30px minmax(0,1fr)}.dash-middle .activity-card .activity-list time{grid-column:2;justify-self:start;max-width:100%;text-align:left;font-size:11px}.dash-middle .activity-card .activity-icon{width:30px;height:30px}}.table-wrap tbody tr.alert-row-resolved{opacity:.68;background:#f8fafc}.table-wrap tbody tr.alert-row-resolved:hover{opacity:.82;background:#f1f5f9}.pager-simple{display:flex;align-items:center;justify-content:center;gap:6px}.pager-status{min-width:112px;display:grid;justify-items:center;gap:1px;padding:0 6px}.pager-status strong{font-size:13px}.pager-status small{color:var(--muted);font-size:11px;font-weight:500}@media(max-width:520px){.pager-edge{display:none}.pager-status{min-width:92px}}.toast{cursor:default}.toast-close{width:28px;height:28px;min-height:28px;padding:0;display:grid;place-items:center;border:0;border-radius:8px;background:transparent;color:inherit;box-shadow:none!important;font-size:18px;line-height:1}.toast-close:hover:not(:disabled),.toast-close:focus-visible{background:#0f172a14}.floor-plan-empty-3d{min-height:360px;display:grid;place-items:center;align-content:center;gap:8px;padding:32px;text-align:center;border:1px dashed var(--border-strong);border-radius:14px;background:#f8fafc;color:var(--muted)}.floor-plan-empty-3d strong{color:var(--text);font-size:16px}.floor-plan-empty-3d small{max-width:520px;line-height:1.5}.floor-plan-empty-3d .file-button{margin-top:6px}@media(max-width:700px){.floor-plan-empty-3d{min-height:260px;padding:24px 16px}}.movement-current-card{display:grid;gap:8px;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}.movement-current-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.movement-current-head>span:first-child{display:grid;gap:2px;min-width:0}.movement-current-head small{color:var(--muted);font-size:11px}.movement-current-head strong,.movement-current-head strong a{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);text-decoration:none}.movement-current-grid{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px}.movement-current-grid>div{min-width:0;display:grid;grid-template-columns:76px minmax(0,1fr);gap:6px}.movement-current-grid dt{color:var(--muted);font-size:11px}.movement-current-grid dd{margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600}.movement-current-grid a{color:var(--primary);text-decoration:none}.movement-current-grid a:hover{text-decoration:underline}@media(max-width:700px){.movement-current-grid{grid-template-columns:1fr}}.fingerprint-dot{position:absolute;z-index:4;width:12px;height:12px;transform:translate(-50%,-50%);border:2px solid #fff;border-radius:50%;background:#7c3aed;box-shadow:0 0 0 2px #7c3aed33,0 2px 6px #0f172a33;pointer-events:auto}.fingerprint-dot>i{position:absolute;top:3px;right:3px;bottom:3px;left:3px;border-radius:50%;background:#fff}.fingerprint-dot.capturing{z-index:9;width:16px;height:16px;border-style:dashed;animation:fingerprint-pulse 1s ease-in-out infinite}@keyframes fingerprint-pulse{0%,to{transform:translate(-50%,-50%) scale(1);opacity:1}50%{transform:translate(-50%,-50%) scale(1.25);opacity:.72}}.fingerprint-survey-panel .stack-form{gap:5px;margin-top:10px}.fingerprint-survey-panel .stack-form>span{color:var(--muted);font-size:12px;font-weight:700}.fingerprint-survey-status{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.floor-plan-workbench .plan-gw.plan-marker-dot.tracking-active:not(.has-alert){z-index:11}.floor-plan-workbench .plan-gw.plan-marker-dot.tracking-active.online:not(.has-alert){box-shadow:0 2px 8px #0f172a3b,0 0 0 1px #0f172a29}.gateway-overview-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1250;display:grid;place-items:center;padding:24px;background:#0f172a57;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.gateway-overview-modal-shell{width:min(560px,calc(100vw - 40px));max-height:min(72vh,620px);display:grid}.gateway-overview-modal-shell>.gw-quick-card{position:relative;inset:auto;width:100%;max-height:min(72vh,620px);overflow:auto;padding:14px;border-radius:16px;box-shadow:0 28px 80px #0f172a4d}.gateway-overview-modal-shell .gw-quick-title strong{font-size:16px}.gateway-overview-modal-shell .gw-quick-tags{max-height:34vh;overflow-y:auto;padding-right:4px}@media(max-width:700px){.gateway-overview-modal-backdrop{padding:12px}.gateway-overview-modal-shell{width:calc(100vw - 24px);max-height:88vh}.gateway-overview-modal-shell>.gw-quick-card{max-height:88vh;padding:16px}}.plan-asset-position,.lg-asset-position{display:none!important}.asset-tag-picker-tools{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.asset-tag-picker-tools .asset-tag-search{margin:0;min-width:0}.asset-tag-qr{white-space:nowrap}@media(max-width:640px){.asset-tag-picker-tools{grid-template-columns:1fr}.asset-tag-qr{width:100%}}.device-thumb.gateway .status-dot.offline{background:#ef4444;box-shadow:0 0 0 1px #dc26262e}.plan-stage .plan-gw.plan-marker-dot:not(.online):not(.has-alert)>i,.floor-plan-workbench .plan-gw.plan-marker-dot:not(.online):not(.has-alert)>i{background:#ef4444!important;box-shadow:0 0 0 1px #dc262652,0 0 9px #dc262647!important;animation:none!important}.plan-stage .plan-gw.plan-marker-dot.online:not(.has-alert)>i,.floor-plan-workbench .plan-gw.plan-marker-dot.online:not(.has-alert)>i{background:#16a34a!important;animation:none!important}.plan-stage .plan-gw.plan-marker-dot.has-alert>i,.floor-plan-workbench .plan-gw.plan-marker-dot.has-alert>i{background:#facc15!important;animation:gateway-alert-pulse 1.05s ease-in-out infinite!important}.lg-gw.off i{background:#ef4444!important;box-shadow:0 0 0 2px #dc2626,0 0 8px 1px #dc262638!important}.lg-gw.alert i{background:#facc15!important;animation:gateway-alert-pulse 1.05s ease-in-out infinite!important}.gateway-row-tag-modal{width:min(880px,calc(100vw - 32px))}.gateway-row-tag-table th:nth-child(2),.gateway-row-tag-table td:nth-child(2){min-width:180px}.gateway-row-tag-table th:nth-child(3),.gateway-row-tag-table td:nth-child(3){min-width:160px}.gateway-row-tag-table tbody tr{cursor:pointer}.gateway-row-tag-table tbody tr.selected{background:var(--primary-soft)}@media(max-width:720px){.gateway-row-tag-modal{width:calc(100vw - 20px)}}@media(min-width:1281px){.dashboard{min-height:calc(100vh - 104px);grid-template-rows:auto minmax(0,1fr);align-content:stretch}.dash-middle{min-height:clamp(480px,calc(100vh - 300px),760px);align-items:stretch}.dash-middle>.building-card,.dash-middle>.plan-card,.dash-middle>.activity-card{height:100%;min-height:0}.dash-middle>.building-card,.dash-middle>.activity-card{height:100%}.dash-middle .building-card{overflow:hidden}.dash-middle .building-card .building-body{flex:1 1 auto;min-height:0;align-items:stretch}.dash-middle .building-card .building-photo{min-height:0;display:grid;place-items:center}.dash-middle .building-card .building-photo img{width:100%;height:100%;max-height:none;object-fit:contain}.dash-middle .storey-list{min-height:0;align-content:start;overflow-y:auto;padding-right:2px}.dash-middle .plan-card{min-height:0}.dash-middle .plan-canvas{--plan-max-h: clamp(420px, calc(100vh - 350px) , 720px);flex:1 1 auto;min-height:0}.dash-middle .activity-card{display:flex;flex-direction:column;overflow:hidden}.dash-middle .activity-card .activity-list{flex:1 1 auto;min-height:0;overflow-y:auto;align-content:start;padding-right:3px}}@media(min-width:901px)and (max-width:1280px){.dash-middle>.building-card,.dash-middle>.plan-card,.dash-middle>.activity-card{min-height:420px}}.dashboard-building-photo-wrap{position:absolute;inset:0 auto 0 -18px;width:calc(100% + 18px);pointer-events:none}.dashboard-building-photo-wrap .building-photo{pointer-events:auto}.dashboard-building-photo-action{position:absolute;top:8px;left:8px;z-index:3;width:30px;height:30px;display:inline-grid;place-items:center;border:1px solid rgba(148,163,184,.45);border-radius:9px;background:#ffffffeb;color:#475569;box-shadow:0 4px 12px #0f172a1f;cursor:pointer;pointer-events:auto;transition:background .15s ease,color .15s ease,transform .15s ease}.dashboard-building-photo-action:hover{background:var(--primary-soft);color:var(--primary);transform:translateY(-1px)}.dashboard-building-photo-action.busy{opacity:.55;pointer-events:none}@media(min-width:1281px){.dashboard{min-height:0;grid-template-rows:auto auto}.dash-middle{grid-template-columns:minmax(220px,20fr) minmax(560px,60fr) minmax(270px,20fr);gap:16px;height:auto;min-height:420px;align-items:stretch}.dash-middle>.plan-card{height:auto;min-height:100%;overflow:hidden}.dash-middle>.building-card,.dash-middle>.activity-card{height:0;min-height:100%;overflow:hidden}}.dash-middle .building-card{display:flex;flex-direction:column;min-width:0}.dash-middle .building-card .building-body{position:relative;display:block!important;flex:1 1 auto;min-height:0;gap:0}.dash-middle .dashboard-building-photo-wrap{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;border-radius:12px;background:linear-gradient(180deg,#f8fbff,#f2f6fb)}.dash-middle .dashboard-building-photo-wrap .building-photo{position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;width:100%!important;height:100%!important;min-height:0;display:grid;place-items:center;overflow:hidden;border-radius:12px}.dash-middle .dashboard-building-photo-wrap .building-photo img{width:100%;height:100%;max-width:100%;max-height:100%;aspect-ratio:auto;object-fit:contain}.dash-middle .building-card .storey-list{position:absolute!important;top:50%!important;right:8px!important;bottom:auto!important;left:auto!important;transform:translateY(-50%)!important;z-index:2;width:min(48%,190px)!important;min-width:130px!important;max-width:190px!important;max-height:calc(100% - 20px);min-height:0;overflow-y:auto;overflow-x:hidden;align-content:start;padding:3px}.dash-middle .building-card .storey-list button{width:100%;background:#ffffffe6;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);box-shadow:0 3px 12px #0f172a1a!important}.dash-middle .building-card .storey-list button.active{background:#eff4fff7}.dash-middle .building-card .storey-empty{position:absolute;right:8px;bottom:8px;width:min(48%,190px);margin:0;z-index:2}.dash-middle .plan-card{display:flex;flex-direction:column;min-width:0;min-height:0}.dash-middle .plan-card .floor-plan-toolbar,.dash-middle .plan-card .plan-legend{flex:0 0 auto}.dash-middle .plan-card .floor-plan-workspace{flex:1 1 auto;min-width:0;min-height:0;display:flex;overflow:hidden}.dash-middle .plan-card .plan-canvas{--plan-max-h: clamp(340px, calc(100vh - 385px) , 590px);flex:1 1 auto;width:100%;min-width:0;min-height:0;display:grid;place-items:center;overflow:hidden}.dash-middle .plan-card .plan-stage{max-width:100%;max-height:100%}.dash-middle .plan-card .plan-image{overflow:hidden}.dash-middle .activity-card{display:flex;flex-direction:column}.dash-middle .activity-card .card-head{flex:0 0 auto}.dash-middle .activity-card .activity-list{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;align-content:start;padding-right:4px}@media(min-width:901px)and (max-width:1280px){.dash-middle{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"plan plan" "building activity";gap:14px;align-items:stretch}.dash-middle>.plan-card{grid-area:plan;min-height:420px}.dash-middle>.building-card{grid-area:building;min-height:340px}.dash-middle>.activity-card{grid-area:activity;min-height:340px}.dash-middle .building-card .building-body{min-height:270px}.dash-middle .plan-card .plan-canvas{--plan-max-h: 390px}}@media(max-width:900px){.dash-middle{grid-template-columns:1fr}.dash-middle .building-card .building-body{min-height:300px}.dash-middle .building-card .storey-list{width:min(46%,180px)!important;min-width:125px!important;max-width:180px!important}}@media(max-width:620px){.dash-middle .building-card .building-body{min-height:280px}.dash-middle .building-card .storey-list{top:auto!important;right:8px!important;bottom:8px!important;transform:none!important;width:calc(100% - 16px)!important;max-width:none!important;max-height:118px}}.compact-relation-button{min-height:30px;padding:5px 9px;display:inline-flex;align-items:center;gap:5px}.detail-heading-actions a.detail-action-link{min-height:38px;padding:9px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:#1e293b;font-size:14px;font-weight:600;line-height:1.2;text-decoration:none;box-sizing:border-box;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.detail-heading-actions a.detail-action-link:hover{background:#f1f5f9;color:#1e293b}.gw-quick-tag-copy{display:grid;gap:2px;min-width:0}.gw-quick-asset-name,.gw-quick-unlinked{font-weight:600}.gw-quick-tag-copy small{display:block}.tag-name-stack{display:grid;gap:2px;min-width:0}.tag-name-stack small{color:var(--muted);font-size:11px}.tag-name-editor{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}.tag-name-editor label{display:grid;gap:5px;min-width:0}.tag-name-editor .row-actions{display:flex;gap:6px;flex-wrap:wrap}@media(max-width:700px){.tag-name-editor{grid-template-columns:1fr}}.plan-stage .plan-gw.plan-marker-dot:before,.plan-stage .plan-gw.plan-marker-dot:after{content:none!important;display:none!important}.plan-stage .plan-gw.plan-marker-dot.highlight,.plan-stage .plan-gw.plan-marker-dot.open{z-index:60;width:26px!important;min-width:26px!important;height:26px!important;min-height:26px!important;transform:translate(-50%,-50%);border:3px solid #fff!important;animation:none!important;box-shadow:0 3px 9px #0f172a52,0 0 0 2px #475569!important}.plan-stage .plan-gw.plan-marker-dot.highlight>i,.plan-stage .plan-gw.plan-marker-dot.open>i{top:3px!important;right:3px!important;bottom:3px!important;left:3px!important;width:14px!important;height:14px!important;box-sizing:border-box;border:2px solid #fff;transform:none;animation:none!important;box-shadow:none}.plan-stage .plan-gw.plan-marker-dot.highlight:not(.online):not(.has-alert)>i{background:#ef4444}.plan-stage .plan-gw.plan-marker-dot.highlight.online:not(.has-alert)>i{background:#16a34a}.plan-stage .plan-gw.plan-marker-dot.highlight.has-alert>i{background:#facc15}.plan-stage .plan-gw.plan-marker-dot.highlight>.plan-gw-name,.plan-stage .plan-gw.plan-marker-dot.open>.plan-gw-name{display:block!important;position:absolute;top:calc(100% + 9px);left:50%;right:auto;bottom:auto;z-index:2;width:max-content;max-width:min(270px,70vw);padding:5px 10px;border:2px solid #fff;border-radius:8px;background:#0f172a;color:#fff;font-size:13px;font-weight:800;line-height:1.35;text-align:center;white-space:normal;overflow:visible;overflow-wrap:anywhere;text-overflow:clip;opacity:1!important;transform:translate(-50%)!important;box-shadow:0 3px 12px #0f172a4d;pointer-events:none}.plan-stage .plan-gw.plan-marker-dot.highlight.label-align-start>.plan-gw-name{left:0;right:auto;text-align:left;transform:none!important}.plan-stage .plan-gw.plan-marker-dot.highlight.label-align-end>.plan-gw-name{left:auto;right:0;text-align:right;transform:none!important}.plan-stage .plan-gw.plan-marker-dot.highlight.label-above>.plan-gw-name{top:auto;bottom:calc(100% + 9px)}.plan-canvas.is-3d .plan-stage .plan-gw.plan-marker-dot.highlight{transform:translate(-50%,-50%) rotate(calc(var(--tilt-z) * -1)) rotateX(calc(var(--tilt-x) * -1))}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot:not(.highlight):not(.open){width:22px!important;min-width:22px!important;height:22px!important;min-height:22px!important;border:0!important;background:transparent!important;box-shadow:none!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot:not(.highlight):not(.open)>i{inset:auto!important;left:50%!important;top:50%!important;transform:translate(-50%,-50%)!important;width:10px!important;height:10px!important;box-sizing:border-box;border:2px solid #fff!important;border-radius:50%}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.online:not(.has-alert):not(.highlight):not(.open)>i{background:#22c55e!important;box-shadow:0 0 0 2px #16a34a,0 0 8px 2px #16a34a8c!important;animation:none!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot:not(.online):not(.has-alert):not(.highlight):not(.open)>i{background:#ef4444!important;box-shadow:0 0 0 2px #dc2626,0 0 8px 1px #dc262638!important;animation:none!important}@media(min-width:1281px){.dashboard:has(>.dash-middle){min-height:0;grid-template-rows:auto auto;align-content:start}.dashboard>.dash-middle{grid-template-columns:minmax(218px,.78fr) minmax(0,2.7fr) minmax(244px,.85fr);min-height:0;align-items:stretch}.dashboard>.dash-middle>.building-card,.dashboard>.dash-middle>.plan-card,.dashboard>.dash-middle>.activity-card{height:clamp(350px,33vw,510px);min-height:0;box-sizing:border-box}.dashboard>.dash-middle .plan-card .plan-canvas{--plan-max-h: none;flex:1 1 auto;min-height:0}}@media(min-width:901px)and (max-width:1280px){.dashboard>.dash-middle>.plan-card{min-height:370px}.dashboard>.dash-middle>.building-card,.dashboard>.dash-middle>.activity-card{min-height:290px}}.asset-table-wide .asset-stt-col{width:56px;min-width:56px;text-align:center;font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}@media(min-width:1281px){.dashboard>.dash-middle{grid-template-columns:minmax(218px,.78fr) minmax(0,2.7fr) minmax(320px,.93fr)}}.dashboard .dash-middle .activity-card .card-head{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;min-width:0}.dashboard .dash-middle .activity-card .card-head h2{flex:0 1 auto;min-width:0;margin:0;font-size:clamp(13px,1vw,16px);line-height:1.3;white-space:nowrap;letter-spacing:-.02em}.dashboard .dash-middle .activity-card .card-head a{flex:none;font-size:12px;white-space:nowrap}@media(min-width:1281px){.dashboard>.dash-middle{grid-template-columns:minmax(280px,1fr) minmax(0,2.65fr) minmax(330px,.96fr)}}.gateway-table-wide .gateway-stt-col{width:56px;min-width:56px;padding-left:8px;padding-right:8px;text-align:center;font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot:not(.highlight):not(.open)>i{width:8px!important;height:8px!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.online:not(.has-alert):not(.highlight):not(.open)>i{box-shadow:0 0 0 1.5px #16a34a,0 0 6px 1px #16a34a6b!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot:not(.online):not(.has-alert):not(.highlight):not(.open)>i{box-shadow:0 0 0 1.5px #dc2626,0 0 6px 1px #dc262633!important}.system-resources{padding:18px;display:grid;gap:16px;min-width:0}.system-resources .system-resources-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.system-resources .system-resources-head h2{font-size:17px;margin:0 0 3px}.system-resources .system-resources-head p{font-size:12px;color:var(--muted);margin:0}.system-resources .system-resources-meta{color:var(--muted);font-size:12px}.system-resource-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.system-resource-card{display:grid;gap:12px;align-content:start;min-width:0;border-radius:14px;border:1px solid var(--border);background:#f8fafc;padding:16px}.system-resource-top{display:flex;align-items:center;justify-content:space-between;gap:6px;color:var(--muted);font-size:13px;font-weight:700}.system-resource-top svg{color:#2563eb}.system-resource-value{font-size:clamp(21px,2vw,29px);color:var(--text);line-height:1;font-weight:750;font-variant-numeric:tabular-nums}.system-resource-detail{min-height:32px;font-size:12px;color:var(--muted);line-height:1.5}.system-resource-progress{height:8px;border-radius:999px;overflow:hidden;background:#e2e8f0}.system-resource-progress>i{display:block;height:100%;background:#2563eb;border-radius:inherit;transition:width .4s ease}.system-resource-progress>i.warn{background:#f59e0b}.system-resource-progress>i.critical{background:#dc2626}.system-resource-network{display:grid;gap:6px;font-variant-numeric:tabular-nums}.system-resource-network>span{white-space:nowrap}@media(max-width:1100px){.system-resource-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.system-resource-grid{grid-template-columns:1fr}.system-resources{padding:14px}}.kpi .kpi-body{flex:1}@media(max-width:700px){.table-wrap td.asset-stt-col,.table-wrap td.gateway-stt-col{display:none}.table-wrap td.mono:before{font-family:Be Vietnam Pro,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}}@media(max-width:700px){.page-header .page-actions:has(>:nth-child(2)){display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.page-header .page-actions:has(>:nth-child(2))>:last-child:nth-child(odd){grid-column:1 / -1}.page-header .page-actions:has(>:nth-child(2))>button{justify-content:center}}@media(max-width:700px){.movements-page .search-toolbar>.date-field{display:grid;grid-template-columns:72px minmax(0,1fr);width:100%;min-width:0}.movements-page .search-toolbar>.date-field input{min-width:0;width:100%}.table-wrap tbody tr:has(>td.select-col){position:relative}.table-wrap td.select-col{position:absolute;top:8px;right:10px;width:34px;min-height:34px;padding:0;margin:0;border:0;display:grid;place-items:center;z-index:2}.table-wrap td.select-col:before{content:none}.table-wrap td.responsive-title-cell{display:block;text-align:left;padding:0 0 6px;margin-bottom:4px;border-bottom:1px solid #eef2f7;font-size:15px}.table-wrap td.responsive-title-cell:before{content:none}.table-wrap tr:has(>td.select-col) td.responsive-title-cell{padding-right:42px}}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot{--gw-d: clamp(12px, 1.4cqi, 15px);width:var(--gw-d)!important;height:var(--gw-d)!important;min-width:var(--gw-d)!important;min-height:var(--gw-d)!important;display:grid;place-items:center;border:1.5px solid #dc2626!important;background:#fff!important;color:#0f172a;box-shadow:0 2px 6px #0f172a38,0 0 0 2px #dc262624,0 0 6px 1px #dc262638!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot>i{display:none}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.online:not(.has-alert){border-color:#16a34a!important;box-shadow:0 2px 6px #0f172a38,0 0 0 2px #16a34a26,0 0 6px 1px #16a34a3d!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert{border-color:#f59e0b!important}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.open{box-shadow:0 3px 10px #0f172a47,0 0 0 4px #2563eb40!important}.plan-gw-online{font-size:calc(var(--gw-d, 14px) * .6);font-weight:800;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.02em;pointer-events:none}.plan-gw-offline{position:absolute;right:-6px;top:-6px;min-width:11px;height:11px;padding:0 2px;box-sizing:border-box;display:grid;place-items:center;border:1px solid #fff;border-radius:999px;background:#64748b;color:#fff;font-size:7px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums;pointer-events:none}.floor-plan-workbench .plan-gw-alert-count{right:auto;left:-6px}.plan-gw-tip{position:absolute;left:50%;bottom:calc(100% + 12px);transform:translate(-50%,3px);z-index:40;width:max-content;min-width:190px;max-width:320px;padding:9px 12px;box-sizing:border-box;display:grid;gap:5px;text-align:left;cursor:default;border-radius:8px;background:#0f172af2;color:#f1f5f9;box-shadow:0 8px 24px #0f172a59;font-size:12px;font-weight:500;line-height:1.35;white-space:normal;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease,transform .12s ease}.plan-gw-tip>strong{font-size:13px;font-weight:800;color:#fff;overflow-wrap:anywhere}.plan-gw-tip-row{display:flex;justify-content:space-between;gap:14px;white-space:nowrap}.plan-gw-tip-row>span,.plan-gw-tip-types>span:first-child{color:#94a3b8}.plan-gw-tip-row b{font-weight:700;text-align:right}.plan-gw-tip-row b.ok{color:#4ade80}.plan-gw-tip-row b.lost{color:#fca5a5}.plan-gw-tip-row b em{font-style:normal;font-weight:500;color:#cbd5e1}.plan-gw-tip-types{display:grid;gap:3px}.plan-gw-tip-types>em{font-style:normal;color:#cbd5e1}.plan-gw-tip-table{display:grid;margin-top:2px;border-top:1px solid rgba(148,163,184,.3)}.plan-gw-tip-table>span{display:flex;justify-content:space-between;gap:14px;padding:3px 0;border-bottom:1px solid rgba(148,163,184,.18)}.plan-gw-tip-table>span:last-child{border-bottom:0}.plan-gw-tip-table b{font-variant-numeric:tabular-nums}.plan-gw-tip.tip-below{bottom:auto;top:calc(100% + 12px);transform:translate(-50%,-3px)}.plan-gw-tip.tip-start{left:-13px;transform:translateY(3px)}.plan-gw-tip.tip-end{left:auto;right:-13px;transform:translateY(3px)}.plan-gw-tip.tip-below.tip-start,.plan-gw-tip.tip-below.tip-end{transform:translateY(-3px)}.plan-gw.plan-marker-dot:hover>.plan-gw-tip,.plan-gw.plan-marker-dot:focus-visible>.plan-gw-tip{opacity:1;visibility:visible;transform:translate(-50%)}.plan-gw.plan-marker-dot:hover>.plan-gw-tip.tip-start,.plan-gw.plan-marker-dot:focus-visible>.plan-gw-tip.tip-start,.plan-gw.plan-marker-dot:hover>.plan-gw-tip.tip-end,.plan-gw.plan-marker-dot:focus-visible>.plan-gw-tip.tip-end{transform:none}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot:hover{z-index:40}.plan-gw.plan-marker-dot.dragging>.plan-gw-tip,.plan-canvas.is-3d .plan-gw-tip{display:none}.lg-count{display:inline-grid;place-items:center;flex:none;width:17px;height:17px;margin:0 3px;box-sizing:border-box;border-radius:50%;font-size:9px;font-weight:800;line-height:1;background:#fff;color:#0f172a}.lg-count.on{border:2px solid #16a34a}.lg-count.off{border:0;background:#64748b;color:#fff}.lg-gw.off i{background:#ef4444;box-shadow:0 0 0 2px #dc2626}.plan-gw-tip-row.sub{font-size:11px}.plan-gw-tip-row.sub b em{font-style:normal;font-weight:700;color:#cbd5e1}.plan-gw-tip-row.sub b em.ok{color:#4ade80}.plan-legend-keys .lg-count{display:inline-flex;align-items:center;justify-content:center;padding:0}.plan-legend-keys .lg-gw.off i{background:#ef4444!important;box-shadow:0 0 0 2px #dc2626!important}@media(max-width:700px){.plan-gw-offline{right:-5px;top:-5px;min-width:10px;height:10px;font-size:6.5px}.floor-plan-workbench .plan-gw-alert-count{left:-6px}}.plan-gw-tip.floating{position:fixed;bottom:auto;right:auto;z-index:3000;transform:translate(-50%,-100%);opacity:1;visibility:visible;pointer-events:none}.plan-gw-tip.floating.tip-below{transform:translate(-50%)}.floor-plan-workspace.docked-gw{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,400px);align-items:stretch;gap:0;overflow:visible}.floor-plan-workspace.docked-gw>.plan-canvas{min-width:0;width:auto}.floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock{width:auto;max-width:none;max-height:min(640px,calc(100vh - 220px));align-self:stretch;border-radius:0 12px 12px 0;border-left:1px solid var(--border);box-shadow:none;overflow:hidden;position:static;margin:0}.floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock .gw-docked-tag-table-wrap{max-height:none;min-height:0}.floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock .gw-docked-tag-table{min-width:560px}.dash-middle .plan-card .floor-plan-workspace.docked-gw{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;align-items:start;flex:0 0 auto;height:auto;overflow:visible}.dash-middle .plan-card .floor-plan-workspace.docked-gw>.plan-canvas{width:100%;min-width:0;flex:none;height:clamp(240px,34vh,320px)}.dash-middle .plan-card .floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock{min-width:0;padding:10px;max-height:360px;overflow:auto;border-left:0;border-top:1px solid var(--border);border-radius:0 0 12px 12px}.dash-middle .plan-card .floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock .gw-docked-tag-table-wrap{overflow-x:auto}.dash-middle .plan-card .floor-plan-workspace.docked-gw>.gateway-detail-fullscreen-dock .gw-docked-tag-table{min-width:440px}.dash-middle>.plan-card:has(.floor-plan-workspace.docked-gw){overflow:visible;min-height:0;height:auto}.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot{--gw-d: clamp(14px, 1.4cqi, 16px)}.plan-gw-online{font-size:calc(var(--gw-d, 14px) * .62)}@media(max-width:700px){.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot{--gw-d: 15px}.plan-gw-online{font-size:9px}.plan-gw-offline{min-width:12px;height:12px;font-size:7.5px}.segmented[role=tablist]{background:linear-gradient(to right,#e8edf5 24px,#e8edf500) left center / 40px 100% no-repeat local,linear-gradient(to left,#e8edf5 24px,#e8edf500) right center / 40px 100% no-repeat local,linear-gradient(to right,#0f172a29,#0f172a00) left center / 12px 100% no-repeat scroll,linear-gradient(to left,#0f172a29,#0f172a00) right center / 12px 100% no-repeat scroll,#e8edf5}.segmented[role=tablist] button{flex:none}}@media(max-width:700px){.table-wrap td a.cell-link,.table-wrap td a.name-link{padding:9px 0;margin:-9px 0}.table-wrap input.row-check{width:26px;height:26px}.table-wrap td.select-col{width:44px;min-height:44px}}@media(max-width:700px){.table-wrap td.same-as-title{display:none}}.floor-plan-workspace>.plan-canvas.is-zoomable{overflow:hidden}@media(pointer:coarse){.plan-canvas.is-zoomable.is-pan-enabled{touch-action:pan-y}}.movement-history-tabs{margin:12px 0 16px;width:fit-content}.activity-entry-link{display:flex;flex-direction:column;min-width:0;gap:3px;color:inherit;text-decoration:none}.activity-entry-link:hover strong{color:var(--primary);text-decoration:underline}button.activity-entry-link{display:flex;flex-direction:column;flex:1;width:100%;min-width:0;align-items:stretch;justify-content:center;background:transparent;border:0;padding:0;min-height:0;font:inherit;color:inherit;text-align:left;cursor:pointer;box-shadow:none!important;transform:none!important}button.activity-entry-link:hover:not(:disabled){background:transparent}.activity-entry-link strong,.activity-entry-link small{display:block;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-list li.activity-alert.selected{box-shadow:inset 0 0 0 2px #dc2626}.activity-count{font-weight:500;color:var(--muted, #64748b)}.movement-archived-viewer{margin:14px 0 18px}.movement-archived-viewer .floor-plan-workspace>.plan-canvas{min-height:clamp(280px,42vw,620px)}.movement-archived-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px}.movement-archived-head h2{margin:0 0 4px;font-size:17px}.movement-archive-floors{margin:10px 0;flex-wrap:wrap}.movement-archive-note{margin:8px 0;font-size:12px;color:var(--muted)}.movement-archive-stops{display:flex;flex-wrap:wrap;gap:10px 20px;margin:10px 0 18px;padding:0 0 0 20px}.movement-archive-stops li{min-width:150px;font-size:12px}.movement-archive-stops span{display:block;color:var(--muted)}.movement-archive-scroll{width:100%;overflow-x:auto}.movement-archive-picked{background:var(--primary-soft)}.movement-archive-detail{display:block;margin-top:5px;color:var(--muted)}.route-history-caption{color:var(--muted);font-size:12px}@media(max-width:720px){.movement-archived-head{flex-wrap:wrap}.movement-archived-viewer .floor-plan-workspace>.plan-canvas{min-height:clamp(220px,60vw,360px)}.movement-archive-stops{display:block}}.dashboard-connection-status{padding:12px 16px;border:1px solid #d4dae3;border-radius:12px;font-size:13px;line-height:1.5;background:#f8fafc;color:#27384f}.dashboard-connection-status.error{border-color:#fca5a5;background:#fff7f7;color:#9f2222}.dashboard-connection-status.empty{border-color:#fbbf24;background:#fffbeb;color:#92400e}.dashboard-connection-status p{margin:4px 0 6px}.dashboard-connection-status ul{margin:0 0 10px;padding-left:20px}.dashboard-connection-status button{margin-top:4px}.movement-history-layout{display:grid;gap:16px;min-width:0}.movement-history-layout .movement-history-map .journey{grid-template-columns:minmax(0,1fr)}.movement-history-layout .movement-history-map .journey-side{display:none}.movement-history-layout .movement-history-map .journey-canvas{--plan-max-h: clamp(280px, 42vh, 500px)}.movement-history-layout>.movement-list{min-width:0;padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface);display:grid;gap:12px}.movement-history-layout .movement-list-head{flex-wrap:wrap;gap:10px}.movement-history-layout .movement-list-head>div:first-child{margin-right:auto}.movement-history-layout .movement-list-head h3{font-size:16px}.movement-history-layout .movement-list-head small{color:var(--muted);font-size:12px}.movement-history-layout .movement-current-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.movement-table-scroll{width:100%;overflow-x:auto}.movement-event-table{width:100%;min-width:790px}.movement-event-table th{white-space:nowrap}.movement-event-table td{vertical-align:middle}.movement-table-time{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:550}.movement-direction-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:9px;font-weight:700;font-size:12px;white-space:nowrap}.movement-direction-badge.in{color:#157347;background:#eaf8f0}.movement-direction-badge.out{color:#b45309;background:#fff7e8}.movement-state-muted{color:var(--muted);font-size:12px}.movement-view-action{white-space:nowrap}.movement-direction{flex:none}@media(max-width:850px){.movement-history-layout .movement-current-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:550px){.movement-history-layout>.movement-list{padding:10px}.movement-history-layout .movement-current-grid{grid-template-columns:1fr}}.mh-layout{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:16px;align-items:start;margin-top:14px}.mh-list{display:flex;flex-direction:column;gap:10px;min-width:0;position:sticky;top:12px;max-height:calc(100vh - 24px)}.mh-list .card-head h2{margin:0;font-size:16px}.mh-rows{list-style:none;margin:0;padding:0;overflow-y:auto;display:grid;gap:6px;min-height:0}.mh-rows li{position:relative;border:1px solid var(--border);border-radius:10px;background:var(--surface, #fff)}.mh-rows li.active{border-color:var(--primary);background:var(--primary-soft)}.mh-rows .mh-row{all:unset;box-sizing:border-box;display:grid;gap:3px;width:100%;min-width:0;padding:10px 12px;cursor:pointer;border-radius:10px;text-align:left}.mh-row-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mh-row:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.mh-row-top{display:flex;justify-content:space-between;align-items:center;gap:8px}.mh-row-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mh-row-meta,.mh-row time{font-size:12px;color:var(--muted)}.mh-list-actions{display:flex;flex-wrap:wrap;gap:8px}.movement-alert-archive{margin-top:14px}.mh-viewer{min-width:0}.mh-viewer-body{display:grid;gap:10px}.mh-viewer-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}.mh-viewer-title{flex:1 1 220px;min-width:0}.mh-viewer-head h2{margin:0 0 2px;font-size:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mh-viewer-head .helper{margin:0;font-size:12px}.mh-viewer-head .mh-last{flex:0 1 360px;padding:6px 10px}.mh-viewer .floor-plan-workbench,.mh-viewer .floor-plan-workspace{height:auto;min-height:0}.mh-viewer .floor-plan-workspace>.plan-canvas{flex:none;width:100%;height:auto;min-height:200px;max-height:520px;aspect-ratio:var(--ar, 1.6)}.mh-last{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--primary-soft);color:var(--primary)}.mh-last.absent{background:#fff4e5;color:#b45309}.mh-last div{display:grid;gap:2px;color:var(--text, inherit)}.mh-last-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.mh-last small{color:var(--muted)}.mh-section-title{margin:6px 0 0;font-size:14px}.mh-timeline{list-style:none;margin:0;padding:0 0 0 22px;display:grid;gap:10px;max-height:360px;overflow-y:auto;background:linear-gradient(var(--border),var(--border)) 6px 0 / 2px 100% no-repeat}.mh-timeline li{position:relative;display:grid;gap:2px;font-size:13px}.mh-timeline li:before{content:"";position:absolute;left:-21px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--border-strong, #94a3b8)}.mh-timeline li.now:before{background:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.mh-timeline time,.mh-timeline small{font-size:12px;color:var(--muted)}@media(max-width:960px){.mh-layout{grid-template-columns:1fr}.mh-list{position:static;max-height:none}.mh-rows{max-height:320px}}.movement-history-page.is-viewing .mh-viewer{margin-top:4px;padding:14px 16px}.mh-viewer .route-title,.mh-viewer .route-picked,.mh-viewer .route-range:has(.route-history-caption){display:none}.is-viewing .mh-viewer{--mh-chrome: 412px}.is-viewing .mh-viewer .mh-asset-view{--mh-chrome: 448px}.is-viewing .mh-viewer .floor-plan-workspace>.plan-canvas{max-height:max(240px,calc(100dvh - var(--mh-chrome)))}.mh-stops{list-style:none;margin:0;padding:0 0 4px;display:flex;gap:6px;overflow-x:auto}.mh-stops li{flex:none;display:grid;gap:1px;padding:5px 10px;border:1px solid var(--border);border-radius:8px;font-size:12px}.mh-stops li.now{border-color:var(--primary);background:var(--primary-soft)}.mh-stops time{color:var(--muted);font-size:11px}.mh-more summary{cursor:pointer;font-weight:600;font-size:13px;padding:4px 0}.mh-more[open] summary{margin-bottom:8px}.movement-history-page .search-toolbar{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;align-items:center;margin:4px 0 14px}.movement-history-page .search-toolbar>*{min-width:0;width:100%;max-width:none;margin:0}.movement-history-page .search-toolbar>.search-field{grid-column:span 4;flex:none;max-width:none;min-width:0}.movement-history-page .search-toolbar>select{grid-column:span 2}.movement-history-page .search-toolbar>.mh-date-range{grid-column:span 6}.movement-history-page .search-toolbar>.mh-sort{grid-column:span 3}.movement-history-page .search-toolbar>button{grid-column:10 / span 3;justify-self:end;width:auto}.mh-date-range{display:flex;align-items:center;gap:8px;height:38px;padding:0 12px;border:1px solid var(--border-strong, #cbd5e1);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted)}.mh-date-range:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.mh-date-label{font-size:13px;font-weight:600;white-space:nowrap;padding-right:4px;border-right:1px solid var(--border);margin-right:4px}.movement-history-page .mh-date-range input[type=date]{flex:1 1 0;min-width:0;width:auto;height:30px;min-height:0;border:0;padding:0 4px;background:transparent;box-shadow:none}@media(min-width:641px)and (max-width:1180px){.movement-history-page .search-toolbar{grid-template-columns:repeat(6,minmax(0,1fr))}.movement-history-page .search-toolbar>.search-field{grid-column:span 4}.movement-history-page .search-toolbar>select{grid-column:span 2}.movement-history-page .search-toolbar>.mh-sort{grid-column:5 / span 2;grid-row:1}.movement-history-page .search-toolbar>.mh-date-range{grid-column:span 3}.movement-history-page .search-toolbar:not(:has(>button))>.mh-date-range{grid-column:span 4}.movement-history-page .search-toolbar>button{grid-column:span 1;justify-self:stretch;width:100%;padding-inline:6px}}@media(max-width:640px){.movement-history-page .search-toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.movement-history-page .search-toolbar>*,.movement-history-page .search-toolbar>select,.movement-history-page .search-toolbar>.mh-sort{grid-column:span 1}.movement-history-page .search-toolbar>.search-field,.movement-history-page .search-toolbar>.mh-date-range,.movement-history-page .search-toolbar>.mh-sort,.movement-history-page .search-toolbar>button{grid-column:1 / -1;grid-row:auto}.mh-date-label{display:none}}.asset-filters .search-toolbar>select{flex:0 1 200px;min-width:150px}@media(min-width:701px)and (max-width:1240px){.asset-filters .search-toolbar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.asset-filters .search-toolbar>*{width:100%;min-width:0;max-width:none}.asset-filters .search-toolbar>.search-field{grid-column:1 / -1}.asset-filters .search-toolbar:has(>button)>.search-field{grid-column:span 2}.asset-filters .search-toolbar>button{grid-row:1;grid-column:3}}@media(max-width:700px){.asset-filters .search-toolbar>select{flex:1 1 calc(50% - 5px);min-width:0;max-width:calc(50% - 5px)}.asset-filters .search-toolbar>select:last-of-type{flex-basis:100%;max-width:none}}.device-filters .search-toolbar .search-field{flex:1 1 220px;min-width:200px}.device-filters .search-toolbar>select{flex:0 1 180px;min-width:130px}.device-filters .search-toolbar>button{flex:none;white-space:nowrap}@media(max-width:700px){.device-filters .search-toolbar>select{flex:1 1 calc(50% - 5px);min-width:0;max-width:calc(50% - 5px)}}.dash-middle .plan-card .plan-legend-keys,.route-legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:6px 14px}.route-legend li{white-space:nowrap}.plan-stage .plan-gw.plan-marker-dot.highlight,.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.highlight.highlight,.plan-stage .plan-gw.plan-marker-dot.open,.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.open.open{z-index:70;--gw-d: clamp(18px, 2cqi, 22px);border:2px solid #7c3aed!important;box-shadow:0 0 0 3px #fff,0 0 0 6px #7c3aed,0 4px 12px #0f172a59!important;animation:located-gw-pulse 1.4s ease-out infinite!important}.plan-stage .plan-gw.plan-marker-dot.highlight>.plan-gw-name,.plan-stage .plan-gw.plan-marker-dot.open>.plan-gw-name{background:#7c3aed!important;color:#fff!important;font-weight:700}@keyframes located-gw-pulse{0%{box-shadow:0 0 0 3px #fff,0 0 0 6px #7c3aed,0 0 0 7px #7c3aed80,0 4px 12px #0f172a59}to{box-shadow:0 0 0 3px #fff,0 0 0 6px #7c3aed,0 0 0 22px #7c3aed00,0 4px 12px #0f172a59}}@media(prefers-reduced-motion:reduce){.plan-stage .plan-gw.plan-marker-dot.highlight,.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.highlight.highlight,.plan-stage .plan-gw.plan-marker-dot.open,.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.open.open{animation:none!important}}.dash-middle .plan-card:has(.route-controls) .plan-canvas{container-type:size;--plan-max-h: 100cqh}.dash-middle .activity-card .card-head{flex-wrap:nowrap}.dash-middle .activity-card .card-head{gap:10px;align-items:baseline}.dash-middle .activity-card .card-head h2{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:clamp(14px,1.05vw,16px)}.dash-middle .activity-card .card-head .card-head-link{flex:none;white-space:nowrap;font-size:13px}.dash-middle .activity-card .activity-list small{display:block;-webkit-line-clamp:unset;white-space:nowrap;text-overflow:ellipsis}.dash-middle .activity-card .activity-list li{min-height:0}@keyframes gateway-alert-ring{0%{box-shadow:0 2px 8px #0f172a38,0 0 #f59e0b8c}70%,to{box-shadow:0 2px 8px #0f172a38,0 0 0 10px #f59e0b00}}.plan-stage:not(.gw-muted) .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert,.floor-plan-workbench .plan-stage:not(.gw-muted) .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert{opacity:1!important;animation:gateway-alert-ring 1.6s ease-out infinite!important}.plan-stage:not(.gw-muted) .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert>i,.floor-plan-workbench .plan-stage:not(.gw-muted) .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert>i{opacity:1!important;animation:none!important;background:#facc15!important}@media(prefers-reduced-motion:reduce){.plan-stage:not(.gw-muted) .plan-gw.plan-marker-dot.plan-marker-dot.plan-marker-dot.has-alert{animation:none!important}}.gw-tag-split{display:inline-flex;align-items:baseline;gap:8px;flex-wrap:wrap}.gw-tag-split strong{font-size:15px}.gw-tag-split small{color:var(--muted);font-size:12px}.gw-tag-split em{font-style:normal;font-weight:600}.gw-tag-split em.ok{color:#15803d}.gw-tag-split em.lost{color:#b91c1c}.plan-stage .plan-gw.plan-marker-dot .plan-gw-alert-count,.floor-plan-workbench .plan-stage .plan-gw.plan-marker-dot .plan-gw-alert-count{left:auto;top:auto;bottom:-5px;right:-6px;min-width:10px;height:10px;padding:0 2px;box-sizing:border-box;border:1px solid #fff;font-size:6.5px;box-shadow:0 1px 2px #a1620766}.device-list-actions,.asset-row-actions,.gateway-tag-binding-actions{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;white-space:nowrap}.device-list-actions .icon-action,.asset-row-actions .icon-action,.gateway-tag-binding-actions .icon-action{width:32px;height:32px;min-width:32px;min-height:32px;padding:0;display:inline-grid;place-items:center;border-radius:8px}.device-list-actions .row-actions,.device-list-actions .table-actions,.asset-row-actions .row-actions,.asset-row-actions .table-actions{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;margin:0}.search-field,.asset-tag-search{min-width:0}.search-field>svg,.asset-tag-search>svg{flex:0 0 auto}.search-field input,.asset-tag-search input{min-width:0;width:100%;text-overflow:clip}.search-toolbar .search-field{flex:1 1 300px;min-width:260px}.movement-event.direction-in>svg{color:#16a34a}.movement-event.direction-out>svg{color:#64748b}.movement-event.direction-in{border-left:3px solid rgba(22,163,74,.42)}.movement-event.direction-out{border-left:3px solid rgba(100,116,139,.34)}@media(max-width:900px){.optional-table-col{display:none!important}.search-toolbar .search-field{flex:1 1 100%;min-width:0}}@media(max-width:700px){.table-wrap.gateway-table-wide table,.table-wrap.tag-table-wide table,.table-wrap.asset-table-wide table{min-width:0!important;width:100%}.gateway-table-wide tbody tr,.tag-table-wide tbody tr,.asset-table-wide tbody tr{position:relative;gap:1px;padding:12px 14px}.gateway-table-wide td,.tag-table-wide td,.asset-table-wide td{min-height:32px;padding:5px 0}.gateway-table-wide td.responsive-title-cell,.tag-table-wide td.responsive-title-cell,.asset-table-wide td.responsive-title-cell{display:block;padding:0 42px 8px 0;margin-bottom:4px;border-bottom:1px solid #eef2f7;text-align:left;font-size:15px}.gateway-table-wide td.responsive-title-cell:before,.tag-table-wide td.responsive-title-cell:before,.asset-table-wide td.responsive-title-cell:before{content:none}.gateway-table-wide td.select-col,.tag-table-wide td.select-col,.asset-table-wide td.select-col{position:absolute;top:8px;right:10px;width:34px;min-height:34px;padding:0;margin:0;border:0;display:grid;place-items:center;z-index:2}.gateway-table-wide td.select-col:before,.tag-table-wide td.select-col:before,.asset-table-wide td.select-col:before{content:none}.gateway-table-wide .device-list-actions,.tag-table-wide .device-list-actions,.asset-table-wide .device-list-actions,.asset-table-wide .asset-row-actions{justify-content:flex-end;gap:4px}.device-list-actions .icon-action,.asset-row-actions .icon-action,.gateway-tag-binding-actions .icon-action{width:40px;height:40px;min-width:40px;min-height:40px}}.gateway-detail-modal .gw-docked-tag-table-wrap{position:relative;overflow:auto}.gateway-detail-modal .gw-docked-tag-table thead th{position:sticky;top:0;z-index:5;background:var(--surface);box-shadow:inset 0 -1px 0 var(--border)}.gateway-detail-modal .gw-docked-tag-table th:last-child,.gateway-detail-modal .gw-docked-tag-table td:last-child{position:sticky;right:0;z-index:4;background:var(--surface);box-shadow:-8px 0 12px -12px #0f172a52}.gateway-detail-modal .gw-docked-tag-table thead th:last-child{z-index:7}.gateway-detail-modal .gw-docked-tag-table tr.unbound td:last-child{background:#fffaf0}.gw-quick-card .gw-quick-title strong,.gateway-detail-modal .gw-quick-title strong{font-size:14px;line-height:1.25}.gw-quick-card .gw-quick-title small,.gateway-detail-modal .gw-quick-title small{font-size:11px}.gw-quick-card .icon-action,.gateway-detail-modal .icon-action{width:30px;height:30px;min-width:30px;min-height:30px}.gw-inline-rename input{font-size:13px}.gw-inline-rename button{font-size:12px}.gw-quick-tag-groups{display:grid;gap:10px;min-height:0}.gw-quick-tag-group{min-height:0;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}.gw-quick-tag-group.unassigned{background:#fffaf0;border-color:#f3dfb3}.gw-quick-group-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 9px;border-bottom:1px solid var(--border);background:#f8fafc}.gw-quick-tag-group.unassigned .gw-quick-group-head{background:#fff7e8}.gw-quick-group-head strong{font-size:10px;letter-spacing:.08em;color:var(--muted)}.gw-quick-group-head .count-pill{min-width:24px;padding:2px 7px;font-size:10px}.gw-quick-tag-groups .gw-quick-tags{max-height:150px}.gw-quick-tag-groups .gw-quick-tags li{padding-left:8px;padding-right:8px}.gw-quick-actions{display:flex;align-items:center;justify-content:flex-end;gap:4px}.gw-quick-actions .icon-action{width:28px;height:28px;min-width:28px;min-height:28px}.floor-workspace-grid{grid-template-columns:minmax(0,1fr) minmax(220px,236px);grid-template-areas:"plan dock"}.floor-workspace-unplaced{min-width:220px;max-width:236px;padding:10px}.floor-workspace-unplaced .gw-dock-head{align-items:center}.floor-workspace-unplaced .gw-dock-head h2{margin:0;font-size:15px}.floor-workspace-unplaced .gw-dock-item{padding:7px;gap:5px}.floor-workspace-unplaced .gw-dock-name>a{font-size:12px}.floor-workspace-unplaced .gw-dock-name small{font-size:10px}.floor-plan-workbench .plan-gw.plan-marker-dot:not(.online):not(.has-alert){background:transparent;border:0;box-shadow:none}.floor-plan-workbench .plan-gw.plan-marker-dot:not(.online):not(.has-alert)>i{width:10px;height:10px;background:#94a3b8;border:2px solid #fff;box-sizing:border-box;box-shadow:0 0 0 2px #64748b,0 1px 4px #0f172a2e}.plan-gw.plan-marker-dot>.plan-gw-name{max-width:140px;padding:2px 6px;font-size:10px;line-height:1.25;border-radius:5px}.plan-gw.plan-marker-dot.highlight{z-index:35;transform:translate(-50%,-50%)}.plan-gw.plan-marker-dot.highlight>i{transform:scale(1.9);transform-origin:center;background:#22c55e;box-shadow:0 0 0 3px #fff,0 0 0 8px #22c55eb8,0 0 28px 12px #22c55e80;animation:linked-gw-highlight .9s ease-in-out infinite alternate}.plan-gw.plan-marker-dot.highlight:before,.plan-gw.plan-marker-dot.highlight:after{opacity:0}.plan-gw.plan-marker-dot.highlight:hover:before,.plan-gw.plan-marker-dot.highlight:hover:after,.plan-gw.plan-marker-dot.highlight:focus-visible:before,.plan-gw.plan-marker-dot.highlight:focus-visible:after{opacity:1}.plan-gw.plan-marker-dot.highlight>.plan-gw-name{display:block;opacity:1;max-width:120px;padding:2px 5px;background:#15803d!important;color:#fff;font-size:9px;line-height:1.2;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:900px){.floor-workspace-grid{grid-template-columns:1fr;grid-template-areas:"plan" "dock"}.floor-workspace-unplaced{min-width:0;max-width:none;width:100%}}.floor-workspace-grid.no-unplaced-dock{grid-template-columns:minmax(0,1fr);grid-template-areas:"plan"}.floor-workspace-grid.no-unplaced-dock .floor-workspace-plan{width:100%}.site-workspace-selector{margin:0 0 12px;padding:12px;border:1px solid var(--border);border-radius:14px;background:#fff;box-shadow:0 5px 18px #0f172a0a}.site-selector-groups{display:grid;grid-template-columns:minmax(230px,300px) minmax(0,1fr);gap:14px;align-items:start}.site-selector-group{display:grid;gap:8px;min-width:0}.site-selector-group-head{min-height:26px;display:flex;align-items:center;justify-content:space-between;gap:10px}.site-selector-group-head .eyebrow{margin:0}.site-add-link{min-height:28px;padding:4px 9px;border-radius:8px;background:transparent;color:var(--primary);border:1px solid transparent;box-shadow:none;font-size:11.5px;font-weight:700}.site-add-link:hover,.site-add-link.active{background:var(--primary-soft);border-color:#bfd3f6}.site-building-select{width:100%;max-width:none;min-height:38px;text-overflow:ellipsis}.site-floor-chips{display:flex;align-items:center;gap:7px;min-height:38px;min-width:0;overflow-x:auto;padding:1px 1px 3px;scrollbar-width:thin}.site-floor-chip{flex:0 0 auto;min-height:36px;display:inline-flex;align-items:center;gap:7px;padding:6px 10px;color:#475569;background:#fff;border:1px solid var(--border);border-radius:999px;box-shadow:none;font-size:12px;font-weight:650}.site-floor-chip small{min-width:20px;padding:1px 6px;border-radius:999px;color:#64748b;background:#f1f5f9;text-align:center;font-size:10px}.site-floor-chip.active{color:#fff;background:var(--primary);border-color:var(--primary);box-shadow:0 5px 14px #2563eb33}.site-floor-chip.active small{color:var(--primary);background:#fff}.site-inline-create{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px;border:1px solid #dbe7f7;border-radius:10px;background:#f8fbff}.site-inline-create-floor{grid-template-columns:auto minmax(0,1fr) auto}.site-inline-create input{min-width:0;min-height:34px}.site-inline-create button{min-height:34px;padding:7px 11px;font-size:12px}.site-create-target{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 9px;border-radius:8px;background:#eef4ff;color:#315dbe;font-size:11.5px;font-weight:700}@media(max-width:620px){.site-inline-create,.site-inline-create-floor{grid-template-columns:1fr;align-items:stretch}.site-create-target{max-width:none}}@keyframes site-group-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.site-selector-group{animation:site-group-in .18s ease-out both}.site-selector-group.floor-group{animation-delay:35ms}.site-building-select,.site-floor-chip{transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease,transform .15s ease}.site-floor-chip:hover,.site-floor-chip.active{transform:translateY(-1px)}@media(prefers-reduced-motion:reduce){.site-selector-group,.site-building-select,.site-floor-chip{animation:none;transition:none;transform:none}}.site-selector-group-actions{display:inline-flex;align-items:center;gap:6px}.site-delete-building{width:30px;min-width:30px;height:30px;min-height:30px;display:inline-grid;place-items:center;padding:0;border-radius:8px;border:1px solid transparent;background:transparent;color:#b42318;box-shadow:none}.site-delete-building:hover{background:#fff1f0;border-color:#f3c6c2}.site-delete-building:disabled{opacity:.5;cursor:not-allowed}.site-selector-groups{column-gap:18px;row-gap:12px}.site-selector-group-head{margin-bottom:1px}.site-building-select,.site-floor-chips{margin-top:1px}@media(max-width:900px){.site-selector-groups{row-gap:14px}}.floor-workspace-page{display:grid;gap:8px}.site-workspace-selector{margin:0;padding:10px 12px}.site-selector-groups{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:16px;row-gap:10px}.site-selector-group{gap:6px}.site-selector-group-head{min-height:24px;margin-bottom:0}.site-selector-group-actions{gap:4px}.site-add-link{min-height:28px;padding:3px 7px}.site-action-icon{width:28px;min-width:28px;height:28px;min-height:28px;display:inline-grid;place-items:center;padding:0;border-radius:8px;border:1px solid transparent;background:transparent;color:#475569;box-shadow:none}.site-action-icon:hover,.site-action-icon.active{background:#eef4ff;border-color:#c9d8f3;color:var(--primary)}.site-action-icon.danger-action{color:#b42318}.site-action-icon.danger-action:hover{background:#fff1f0;border-color:#f3c6c2}.site-inline-edit{grid-template-columns:minmax(0,1fr) auto auto}.site-building-select,.site-floor-select{margin-top:0}.floor-workspace-grid{margin-top:0;gap:10px;align-items:start}.floor-workspace-plan{align-self:start}.floor-workspace-plan.site-plan-panel{gap:4px}.floor-plan-actions{margin:0 0 4px;padding:0 2px}.floor-plan-actions>div:first-child{gap:0}.floor-plan-actions>div:first-child strong{line-height:1.2}.floor-plan-actions>div:first-child small{line-height:1.2}.floor-workspace-plan .floor-plan-workbench{margin-top:0}@media(max-width:900px){.site-selector-groups{grid-template-columns:1fr}}@media(max-width:620px){.site-inline-edit{grid-template-columns:1fr}}.floor-workspace-unplaced{overflow:hidden;display:grid;min-height:0}.floor-workspace-unplaced .gw-dock{height:100%;min-height:0;overflow:hidden;grid-template-rows:auto auto auto minmax(0,1fr)}.floor-workspace-unplaced .gw-dock-list{grid-template-columns:minmax(0,1fr);min-height:0;max-height:none;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}@media(max-width:900px){.floor-workspace-unplaced{height:auto!important;max-height:360px!important}.floor-workspace-unplaced .gw-dock-list{max-height:250px}}.site-floor-select{width:100%;max-width:none;min-height:38px;text-overflow:ellipsis}.site-create-map{min-height:34px;white-space:nowrap}.site-create-map.disabled{opacity:.5;pointer-events:none}.site-inline-create-floor{grid-template-columns:auto minmax(0,1fr) auto auto}@media(max-width:720px){.site-inline-create-floor{grid-template-columns:1fr}}.floor-plan-workbench .plan-scale-frame{position:relative;flex:none;width:min(100%,calc(var(--plan-max-h) * var(--ar)));aspect-ratio:var(--ar);transform:translate(var(--plan-pan-x, 0px),var(--plan-pan-y, 0px)) scale(var(--plan-zoom-factor, 1));transform-origin:center center;transition:transform .18s ease}.floor-plan-workbench .plan-scale-frame>.plan-stage{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:none;max-height:none;aspect-ratio:auto;zoom:1}.dash-middle .plan-card .plan-canvas{display:flex;align-items:center;justify-content:center;overflow:hidden}.dash-middle .plan-card .plan-scale-frame{max-width:none;max-height:none}.floor-plan-toolbar .plan-zoom-controls{display:inline-flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--border);background:#f8fafc;border-radius:10px}.floor-plan-toolbar .plan-zoom-controls button{display:inline-flex;align-items:center;justify-content:center;min-width:31px;min-height:30px;padding:2px 7px;border:0;border-radius:7px;background:transparent;color:var(--text);font-size:14px;font-weight:700;box-shadow:none}.floor-plan-toolbar .plan-zoom-controls .plan-zoom-reset{min-width:54px;font-size:12px;font-variant-numeric:tabular-nums}.floor-plan-toolbar .plan-zoom-controls button:hover:not(:disabled){background:#fff;color:var(--primary)}.floor-plan-toolbar .plan-zoom-controls button:disabled{opacity:.4;cursor:not-allowed}@media(prefers-reduced-motion:reduce){.floor-plan-workbench .plan-scale-frame{transition:none}}.plan-canvas.is-pan-enabled{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.plan-canvas.is-pan-enabled .plan-image img{-webkit-user-drag:none;-webkit-user-select:none;user-select:none}.plan-canvas.is-panning{cursor:grabbing}.plan-canvas.is-panning .plan-scale-frame{transition:none}.nav-editor{display:grid;gap:12px}.nav-editor-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.nav-editor-title{display:grid;gap:2px;min-width:0;flex:1 1 260px}.nav-editor-title strong{font-size:18px;font-weight:800}.nav-editor-title small{color:var(--muted);font-size:12.5px;line-height:1.4}.nav-editor-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.nav-activate:not(:disabled){background:#15803d;border-color:#15803d}.nav-editor-body{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px;align-items:start}.nav-editor-main{display:grid;gap:8px;min-width:0}.nav-toolbar{display:flex;flex-wrap:wrap;gap:6px}.nav-tool{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:4px 10px;border-radius:10px;font-size:12.5px;font-weight:700;background:var(--surface);color:var(--text);border:1px solid var(--border-strong);box-shadow:none!important}.nav-tool.active{background:var(--primary);border-color:var(--primary);color:#fff}.nav-hint{margin:0;padding:6px 10px;border-radius:8px;background:#eff6ff;color:#1e3a8a;font-size:12.5px}.nav-stage{position:relative;width:100%;overflow:hidden;border-radius:12px;border:1px solid var(--border-strong);background:#fff;touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab}.nav-stage.tool-door,.nav-stage.tool-waypoint,.nav-stage.tool-room,.nav-stage.tool-hall,.nav-stage.tool-walkable,.nav-stage.tool-restricted,.nav-stage.tool-wall,.nav-stage.tool-probe{cursor:crosshair}.nav-stage.tool-delete{cursor:not-allowed}.nav-world{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:0 0}.nav-plan,.nav-walls{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:none;object-fit:fill;pointer-events:none}.nav-walls{image-rendering:pixelated}.nav-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:visible}.nav-svg *{vector-effect:non-scaling-stroke}.nav-region{fill-opacity:.13;stroke-width:1.6;stroke-opacity:.9}.nav-region.proposed{fill-opacity:.06;stroke-dasharray:5 4}.nav-region.selected{fill-opacity:.28;stroke-width:3}.nav-region.error{stroke:#dc2626!important;stroke-width:3}.nav-region.warn{stroke:#f59e0b!important}.nav-wall{fill:none;stroke:#111827;stroke-width:3;stroke-linecap:round}.nav-wall.selected{stroke:var(--primary)}.nav-edge{stroke:#0f766e;stroke-width:2.2;stroke-linecap:round}.nav-edge.blocked{stroke:#dc2626;stroke-dasharray:4 4}.nav-edge.error{stroke:#dc2626;stroke-width:4}.nav-edge.selected{stroke:var(--primary);stroke-width:4}.nav-edge-hit{stroke:transparent;cursor:pointer}.nav-node{fill:#0f766e;stroke:#fff;stroke-width:1.6;cursor:pointer}.nav-node.kind-DOOR{fill:#f59e0b}.nav-node.kind-ROOM_CENTER{fill:#6366f1}.nav-node.kind-STAIRS,.nav-node.kind-ELEVATOR{fill:#7c3aed}.nav-node.proposed{fill:#fff;stroke:#f59e0b;stroke-width:2.4}.nav-node.locked{stroke:#dc2626;stroke-width:3}.nav-node.selected,.nav-node.linking{stroke:var(--primary);stroke-width:3.5}.nav-node.error{stroke:#dc2626;stroke-width:3.5}.nav-node.warn{stroke:#f59e0b;stroke-width:3}.nav-drawing polyline{fill:#2563eb1f;stroke:var(--primary);stroke-width:2;stroke-dasharray:5 4}.nav-drawing circle{fill:var(--primary);stroke:#fff;stroke-width:1}.nav-probe-line{fill:none;stroke:#16a34a;stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.nav-probe-a{fill:#16a34a;stroke:#fff;stroke-width:2}.nav-probe-b{fill:#dc2626;stroke:#fff;stroke-width:2}.nav-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;margin:0;color:var(--muted)}.nav-statusbar{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:12.5px;color:var(--muted)}.nav-statusbar .warn{color:#b45309;font-weight:700}.nav-statusbar .ok{color:#15803d;font-weight:700}.nav-statusbar .bad{color:#b42318;font-weight:700}.nav-zoom{margin-left:auto;font-variant-numeric:tabular-nums}.nav-side{display:grid;gap:10px;min-width:0}.nav-callout{margin:0;padding:10px 12px;border-radius:10px;background:#fffbeb;border:1px solid #fde68a;color:#92400e;font-size:13px}.nav-card{display:grid;gap:8px;padding:12px;border-radius:12px;background:var(--surface);border:1px solid var(--border)}.nav-card h3{margin:0;font-size:13px;font-weight:800}.nav-card small,.nav-muted{color:var(--muted);font-size:12px;margin:0}.nav-wide{width:100%;justify-content:center}.nav-row{display:flex;flex-wrap:wrap;gap:8px}.nav-row>button{flex:1 1 130px;font-size:12.5px}.nav-toggles label,.nav-check{display:inline-flex;align-items:center;gap:6px;font-size:13px}.nav-form{display:grid;gap:8px}.nav-form label{display:grid;gap:4px;font-size:12.5px;font-weight:600;color:var(--muted)}.nav-form .nav-check{display:flex;color:var(--text);font-weight:600}.nav-ok{margin:0;color:#15803d;font-weight:700;font-size:13px}.nav-issues{margin:0;padding:0;list-style:none;display:grid;gap:4px;max-height:260px;overflow-y:auto}.nav-issues button{width:100%;justify-content:flex-start;text-align:left;min-height:0;padding:6px 8px;font-size:12px;font-weight:600;line-height:1.35;border-radius:8px;background:#fef2f2;color:#991b1b;border:1px solid #fecaca;box-shadow:none!important}.nav-issues li.warning button{background:#fffbeb;color:#92400e;border-color:#fde68a}.nav-legend ul{margin:0;padding:0;list-style:none;display:grid;gap:6px;font-size:12.5px}.nav-legend li{display:flex;align-items:center;gap:8px}.nav-legend .dot{width:12px;height:12px;border-radius:50%;background:#0f766e;border:2px solid #fff;box-shadow:0 0 0 1px #94a3b8}.nav-legend .dot.door{background:#f59e0b}.nav-legend .dot.door.proposed{background:#fff;border-color:#f59e0b;box-shadow:none}.nav-legend .swatch{width:14px;height:10px;border-radius:3px;opacity:.55}@media(max-width:1000px){.nav-editor-body{grid-template-columns:minmax(0,1fr)}}.plan-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1}.route-lines{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;overflow:visible}.route-line{fill:none;stroke-width:3.5;stroke-dasharray:10 7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 2px rgba(255,255,255,.9))}.route-arrow{position:absolute;width:0;height:0;border-left:9px solid #1d4ed8;border-top:5px solid transparent;border-bottom:5px solid transparent;filter:drop-shadow(0 0 2px #fff)}.route-fix{position:absolute;width:8px;height:8px;transform:translate(-50%,-50%);border-radius:50%;background:#fff;border:2px solid #2563eb;pointer-events:auto}.route-fix.uncertain{border-style:dotted;border-color:#94a3b8;background:#fff9}.route-end{position:absolute;width:18px;height:18px;transform:translate(-50%,-50%);border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px #15803d,0 2px 6px #0f172a59;pointer-events:auto}.route-end.start{background:#fff;box-shadow:0 0 0 2.5px #15803d,0 2px 6px #0f172a4d}.route-end.now{background:#2563eb;box-shadow:0 0 0 2.5px #fff,0 0 0 5px #2563eb59}.route-stamp{position:absolute;transform:translate(10px,-150%);padding:1px 6px;border-radius:6px;background:#0f172ae0;color:#fff;font-size:10.5px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}.route-stamp.start{background:#15803d}.route-fix.legend,.route-end.legend{position:static;display:inline-block;transform:none;width:12px;height:12px;border-width:2px;flex:none}.route-end.legend.start,.route-end.legend.now{box-shadow:none}.route-end.legend.start{border-color:#15803d}.route-end.legend.now{border-color:#2563eb}.route-controls{display:grid;gap:8px;margin-bottom:8px}.route-controls-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px}.route-asset{display:grid;gap:3px;flex:1 1 200px;min-width:0;font-size:12px;font-weight:700;color:var(--muted)}.route-asset select{width:100%}.route-range{flex:none;margin:0}.route-note{margin:0;font-size:12.5px;color:#92400e}.route-note.muted{color:var(--muted)}.route-note a{color:var(--primary);font-weight:700}.route-footer{display:grid;gap:6px;margin-top:8px}.route-legend{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:4px 14px;font-size:11.5px;font-weight:600;color:var(--muted)}.route-legend li{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.route-legs{font-size:12.5px}.route-legs summary{cursor:pointer;font-weight:700;color:var(--muted)}.route-legs ul{margin:6px 0 0;padding:0;list-style:none;display:grid;gap:4px;max-height:150px;overflow-y:auto}.route-legs li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 8px;border-radius:8px;background:#eff6ff}.route-legs li.bad{background:#fff7ed;color:#9a3412}.route-legs time{font-variant-numeric:tabular-nums;font-weight:600}.route-legs em{font-style:normal;color:var(--muted);font-size:11.5px}.dash-middle>.plan-card:has(.route-controls){overflow:visible;min-height:0;height:auto}.dash-middle .plan-card:has(.route-controls) .floor-plan-workspace{flex:1 1 auto;min-height:0}.dash-middle .plan-card:has(.route-controls) .plan-canvas{flex:1 1 auto;height:auto;min-height:180px;aspect-ratio:auto;max-height:none}.gw-muted .plan-gw{opacity:.22}.gw-muted .plan-gw:hover,.gw-muted .plan-gw.open{opacity:1}.nav-status{display:grid;gap:6px;margin:0 0 10px;padding:10px 12px;border:1px solid var(--border, #e2e8f0);border-radius:12px;background:#f8fafc}.nav-status.review{background:#fffbeb;border-color:#fde68a}.nav-status.running{background:#eff6ff;border-color:#bfdbfe}.nav-status-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.nav-status-head small{color:var(--muted)}.nav-pill{padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;background:#e2e8f0;color:#334155}.nav-pill.active{background:#dcfce7;color:#166534}.nav-pill.review{background:#fef3c7;color:#92400e}.nav-pill.running{background:#dbeafe;color:#1e40af}.nav-status-note{margin:0;font-size:12.5px;color:var(--muted)}.nav-status-note.bad{color:#b91c1c}.nav-review-list{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12.5px}.nav-review-list li{display:inline-flex;align-items:center;gap:6px}.nav-review-list i{width:12px;height:12px;border-radius:50%;border:2px solid #f59e0b;background:#f59e0b40;flex:none}.nav-status-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}.nav-status-actions button.on{background:#ccfbf1;border-color:#0f766e;color:#115e59}.nav-status-actions select{min-height:34px;max-width:190px}.route-arrow.legend{position:static;display:inline-block;border-left-width:9px;border-top-width:5px;border-bottom-width:5px;filter:none;flex:none}.route-legend .route-gw{opacity:.45;display:inline-flex;align-items:center}.route-range button{padding:6px 10px}.dash-middle .plan-card:has(.route-controls) .floor-plan-toolbar{margin:0 0 6px;min-height:0}.dash-middle .plan-card:has(.route-controls) .floor-plan-toolbar-left:empty{display:none}.route-stamp.now.below{transform:translate(10px,60%)}.route-casing{fill:none;stroke:#fff;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;opacity:.9}.route-line{stroke-width:3.5;filter:none}.plan-card:has(.route-line) .plan-image img{opacity:.62;filter:grayscale(.35)}.route-zone{fill:#2563eb1a;stroke:none}.route-line{stroke-dasharray:none;stroke-width:5}.route-line.room{stroke-dasharray:.1 9;stroke-width:5}.route-casing{stroke-width:8.5}.route-door{position:absolute;width:11px;height:11px;transform:translate(-50%,-50%);border-radius:50%;background:#fff;border:2.5px solid #2563eb;box-sizing:border-box;box-shadow:0 0 0 1.5px #fff}.route-door.legend{position:static;display:inline-block;transform:none;flex:none}.route-end.small{width:12px;height:12px;border-width:2px;box-shadow:0 0 0 1.5px #2563eb}.route-stamp.who{transform:translate(10px,-50%);background:#0f172ad9;max-width:130px;overflow:hidden;text-overflow:ellipsis}.route-end{display:grid;place-items:center;font-size:9.5px;font-weight:800;line-height:1;color:#fff;font-variant-numeric:tabular-nums}.route-end.start{color:#166534}.route-end.stop{width:16px;height:16px;background:#2563eb;border:2px solid #fff;box-shadow:0 0 0 1.5px #2563eb}.route-end.uncertain{opacity:.55;border-style:dotted}.route-end.legend{font-size:0}.route-end.stop.legend{width:12px;height:12px;box-shadow:none;border-width:2px}@keyframes leave-blink{0%,to{background:#facc15;box-shadow:0 0 0 2px #f59e0bb3,0 0 #facc1580}50%{background:#fde68a;box-shadow:0 0 0 2px #f59e0bf2,0 0 0 7px #facc1500}}.leave-toggle{display:inline-flex;align-items:center;gap:7px;flex:none;padding:6px 10px;border-radius:8px;border:1px solid var(--border, #cbd5e1);background:var(--surface, #fff);color:inherit;font-size:12.5px;font-weight:700;cursor:pointer}.leave-toggle>i{width:10px;height:10px;border-radius:50%;background:#cbd5e1;flex:none}.leave-toggle>b{min-width:20px;padding:0 6px;border-radius:999px;background:#e2e8f0;color:#334155;font-size:11px;line-height:18px;text-align:center}.leave-toggle:hover:not(:disabled){background:#f1f5f9}.leave-toggle.active{border-color:#2563eb}.leave-toggle.alerting,.leave-toggle.alerting:hover:not(:disabled){border-color:#f59e0b;background:#fffbeb;color:#92400e}.leave-toggle.alerting>i{animation:leave-blink 1.05s ease-in-out infinite}.leave-toggle.alerting>b{background:#facc15;color:#78350f}.leave-panel{display:grid;gap:6px}.leave-list{margin:0;padding:0;list-style:none;display:grid;gap:4px;max-height:190px;overflow-y:auto}.leave-item{width:100%;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;justify-content:stretch;justify-items:start;gap:9px;padding:6px 9px;border-radius:8px;border:1px solid transparent;background:#f8fafc;color:inherit;text-align:left;cursor:pointer}.leave-item:hover:not(:disabled){background:#eff6ff}.leave-item>i{width:10px;height:10px;border-radius:50%;background:#94a3b8}.leave-item.open>i{animation:leave-blink 1.05s ease-in-out infinite}.leave-item.open,.leave-item.open:hover:not(:disabled){background:#fffbeb}.leave-item.selected,.leave-item.selected:hover:not(:disabled){border-color:#2563eb;background:#eff6ff;color:inherit}.leave-main{display:grid;min-width:0}.leave-main strong,.leave-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.leave-main strong{font-size:12.5px}.leave-main small{font-size:11.5px;color:var(--muted)}.leave-meta{display:grid;justify-self:end;justify-items:end;font-size:11px}.leave-meta time{font-variant-numeric:tabular-nums;font-weight:700}.leave-meta em{font-style:normal;color:var(--muted)}.leave-item.open .leave-meta em{color:#b45309;font-weight:700}.leave-picked{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.leave-picked .route-note{flex:1 1 200px}.gw-muted .plan-gw.has-alert{opacity:1}.route-line.alert-route{stroke:#2563eb;stroke-width:6;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round}.route-turn{position:absolute;width:11px;height:11px;transform:translate(-50%,-50%);border-radius:50%;background:#2563eb;box-shadow:0 0 0 2px #fff;pointer-events:none}.route-gw-stop{position:absolute;z-index:3;width:22px;height:22px;transform:translate(-50%,-50%);border-radius:50%;border:3px solid #fff;box-shadow:0 2px 6px #0f172a59;pointer-events:auto}.route-gw-stop.start{background:#16a34a}.route-gw-stop.end{background:#dc2626}.route-gw-stop.via{width:16px;height:16px;background:#2563eb}@keyframes route-start-blink{0%,to{box-shadow:0 0 0 3px #facc15,0 0 0 4px #facc1599}50%{box-shadow:0 0 0 3px #f59e0b,0 0 0 11px #facc1500}}.route-gw-label{position:absolute;z-index:3;transform:translate(-50%,calc(-100% - 15px));padding:1px 7px;border-radius:6px;background:#0f172ae0;color:#fff;font-size:10.5px;font-weight:600;white-space:nowrap;pointer-events:none}.route-gw-label.start{background:#15803d}.route-gw-label.end{background:#b91c1c;transform:translate(-50%,15px)}.route-gw-stop.legend{position:static;display:inline-block;transform:none;width:12px;height:12px;border-width:2px;box-shadow:none;flex:none;animation:none}.route-gw-stop.end.current{width:26px;height:26px;animation:route-current-glow 1.2s ease-in-out infinite}@keyframes route-current-glow{0%,to{box-shadow:0 0 0 3px #fff,0 0 0 6px #dc26268c,0 0 14px 4px #facc15bf}50%{box-shadow:0 0 0 3px #fff,0 0 0 14px #dc262600,0 0 22px 10px #facc1559}}.route-alert-dot{position:absolute;z-index:4;width:20px;height:20px;min-height:0;padding:0;transform:translate(-50%,-50%);border-radius:50%;border:3px solid #fff;background:#dc2626;cursor:pointer;pointer-events:auto;animation:route-alert-dot 1.05s ease-in-out infinite}.route-alert-dot:hover:not(:disabled){background:#b91c1c;transform:translate(-50%,-50%) scale(1.15)}@keyframes route-alert-dot{0%,to{box-shadow:0 0 0 2px #facc15,0 0 0 4px #facc158c}50%{box-shadow:0 0 0 2px #f59e0b,0 0 0 12px #facc1500}}.route-alert-name{position:absolute;z-index:4;transform:translate(-50%,14px);padding:1px 7px;border-radius:6px;background:#0f172ad9;color:#fff;font-size:10.5px;font-weight:600;white-space:nowrap;pointer-events:none}.route-alert-dot.legend{position:static;display:inline-block;transform:none;width:12px;height:12px;border-width:2px;animation:none;box-shadow:0 0 0 2px #facc15;flex:none}.plan-overlay:has(.route-alert-dot){z-index:20}.route-line.alert-route{stroke-width:3}.route-casing.alert-route{stroke-width:6;opacity:.95}.route-turn{width:6px;height:6px;box-shadow:0 0 0 1.5px #fff}.route-chevron{position:absolute;z-index:2;width:13px;height:13px;pointer-events:none}.route-chevron:before{content:"";position:absolute;left:1px;top:2.5px;width:6px;height:6px;border-top:2.5px solid #1d4ed8;border-right:2.5px solid #1d4ed8;transform:rotate(45deg);filter:drop-shadow(0 0 1.2px #fff) drop-shadow(0 0 1.2px #fff)}.route-gw-stop{width:13px;height:13px;border-width:2px;box-shadow:0 1px 4px #0f172a59}.route-gw-stop.via{width:9px;height:9px;border-width:2px}.route-gw-stop.end.current{width:16px;height:16px}.route-gw-label{transform:translate(-50%,calc(-100% - 9px));padding:0 5px;font-size:9.5px;line-height:15px;border-radius:4px}.route-gw-label.end{transform:translate(-50%,9px)}.route-gw-label.via{opacity:.85}.route-alert-dot{width:14px;height:14px;border-width:2px}.route-alert-name{transform:translate(-50%,10px);font-size:9.5px;padding:0 5px;line-height:15px}.route-gw-label{transform:translate(8px,calc(-100% - 4px));min-width:15px;text-align:center}.route-gw-label.end{transform:translate(8px,4px)}.route-gw-label b{font-weight:800}.gw-muted .plan-gw-online,.gw-muted .plan-gw-offline,.gw-muted .plan-gw-alert-count{display:none}.plan-stage.gw-muted .plan-gw.plan-marker-dot.has-alert,.gw-muted .plan-gw.has-alert>i{animation:none!important;opacity:.3}.route-controls .route-title{font-size:12px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.route-controls .route-controls-row{flex-wrap:wrap;align-items:center;gap:8px}.route-controls .route-asset{display:block;flex:1 1 220px;min-width:0}.route-controls .route-asset input{width:100%;height:36px;min-height:36px}.route-controls .route-range{flex:0 0 auto;display:inline-flex;height:36px;padding:3px;align-items:stretch}.route-controls .route-range button{min-height:0;height:auto;padding:0 10px;font-size:12.5px}.route-controls .route-asset{flex:1 1 100%}.route-controls .route-asset input{height:40px;min-height:40px}.route-controls .route-range{flex:1 1 100%;display:grid;grid-template-columns:repeat(4,1fr);height:40px}.route-controls .route-range button{justify-content:center}.leave-picked{justify-content:flex-end}.leave-picked .route-note{margin-right:auto}.route-controls .route-range{grid-template-columns:repeat(5,1fr)}.route-gw-stop[role=button]{cursor:pointer}.route-gw-box{position:absolute;z-index:6;transform:translate(-50%,calc(-100% - 14px));min-width:150px;padding:7px 9px 8px;border-radius:8px;background:#0f172af0;color:#fff;font-size:11.5px;pointer-events:auto;box-shadow:0 6px 18px #0f172a4d}.route-gw-box:after{content:"";position:absolute;left:50%;bottom:-6px;transform:translate(-50%);border:6px solid transparent;border-bottom:0;border-top-color:#0f172af0}.route-gw-box-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.route-gw-box-head strong{font-size:12px;white-space:nowrap}.route-gw-box-head button{min-height:0;height:18px;width:18px;padding:0;border:0;background:transparent;color:#cbd5e1;font-size:15px;line-height:1}.route-gw-box dl{display:grid;grid-template-columns:auto 1fr;gap:1px 10px;margin:0}.route-gw-box dl+dl{margin-top:5px;padding-top:5px;border-top:1px solid rgba(148,163,184,.35)}.route-gw-box dt{color:#94a3b8}.route-gw-box dd{margin:0;font-variant-numeric:tabular-nums;font-weight:600}.route-gw-box dd b{color:#4ade80}.plan-overlay:has(.route-gw-box){z-index:20}.route-gw-box.below{transform:translate(-50%,14px)}.route-gw-box.below:after{top:-6px;bottom:auto;border-top:0;border-bottom:6px solid rgba(15,23,42,.94)}.route-gw-box .route-gw-box-head button{min-height:0!important;height:18px!important}.dash-middle .plan-card:has(.route-controls) .floor-plan-toolbar{pointer-events:none}.dash-middle .plan-card:has(.route-controls) .floor-plan-toolbar>*>*{pointer-events:auto}.route-gw-stop:focus{outline:none}.route-gw-stop:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.route-gw-stop.start,.route-gw-stop.start:focus{background:#16a34a}.route-gw-stop.end,.route-gw-stop.end:focus{background:#dc2626}.route-gw-stop.via,.route-gw-stop.via:focus{background:#2563eb}.route-gw-box.hover{pointer-events:none}.plan-overlay:has(.route-gw-box.hover){z-index:1}.route-gw-stop{width:14px;height:14px;border:2.5px solid #fff}.route-gw-stop.start,.route-gw-stop.start:focus{background:#16a34a;box-shadow:0 0 0 4px #22c55e47,0 0 14px 5px #22c55e8c}.route-gw-stop.via,.route-gw-stop.via:focus{width:13px;height:13px;background:#3b82f6;box-shadow:0 0 0 4px #3b82f647,0 0 14px 5px #3b82f699}.route-gw-stop.end,.route-gw-stop.end:focus{background:#dc2626;box-shadow:0 0 0 4px #ef444447,0 0 14px 5px #ef44448c}.route-gw-stop.start.alerting{animation:route-start-blink 1.05s ease-in-out infinite}.route-gw-stop.legend{box-shadow:none!important}.route-gw-stop.via.legend{background:#3b82f6}.route-line.alert-route.branch{stroke-dasharray:5 4;stroke-linecap:butt}.route-casing.alert-route.branch{stroke-dasharray:none;opacity:.75}.route-picked{display:inline-flex;align-items:center;gap:6px;flex:1 1 160px;min-width:0;height:40px;padding:0 6px 0 10px;border:1px solid #93c5fd;border-radius:10px;background:#f5f9ff;color:var(--primary, #2563eb)}.route-picked strong{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e3a8a;font-size:13px}.route-picked-clear{display:inline-grid;place-items:center;width:22px;height:22px;min-height:0;padding:0;border:0;border-radius:50%;background:transparent;color:#64748b;cursor:pointer;flex:none;transition:background-color .15s,color .15s}.route-picked-clear:hover:not(:disabled){background:#fee2e2;color:#dc2626}.route-picked-clear:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:1px}.dash-middle .plan-card:has(.route-controls) .route-controls{margin-bottom:12px}.dash-middle .plan-card:has(.route-controls) .floor-plan-toolbar:not(:has(button,select,input,a)){display:none}.dash-middle .plan-card:has(.route-controls) .plan-legend{margin-top:12px}.dash-middle .plan-card:has(.route-controls) .route-footer{margin-top:12px}.dash-middle .plan-card:has(.route-controls) .plan-legend-keys{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:8px 16px;width:100%;padding-left:0}.dash-middle .plan-card:has(.route-controls) .plan-legend-keys li,.dash-middle .plan-card:has(.route-controls) .route-legend li{gap:8px;min-height:18px;font-size:12px}.dash-middle .plan-card:has(.route-controls) .plan-legend-keys li,.dash-middle .plan-card:has(.route-controls) .route-legend li{display:grid;grid-template-columns:22px auto;align-items:center;justify-content:start;column-gap:6px}.dash-middle .plan-card:has(.route-controls) .plan-legend-keys li>:first-child,.dash-middle .plan-card:has(.route-controls) .route-legend li>:first-child{justify-self:center;margin:0}.dash-middle .plan-card:has(.route-controls) .route-legend li>svg{width:22px}.dash-middle .plan-card:has(.route-controls) .route-legend{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px}.route-alert-count{position:absolute;top:-9px;right:-12px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#0f172a;color:#fff;font-size:9.5px;font-weight:800;line-height:16px;text-align:center;pointer-events:none}.route-alert-pick{position:fixed;z-index:1200;display:flex;flex-direction:column;width:min(300px,calc(100vw - 16px));min-height:0;overflow:hidden;padding:4px;border-radius:10px;background:#fff;box-shadow:0 10px 28px #0f172a40;border:1px solid #e2e8f0}.route-alert-pick-head{display:grid;gap:1px;padding:4px 8px 6px;border-bottom:1px solid #e2e8f0;margin-bottom:2px}.route-alert-pick-head strong{font-size:12px;color:var(--text, #0f172a);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.route-alert-pick-head small{color:var(--muted);font-size:10.5px;line-height:1.3}.route-alert-pick-list{display:grid;align-content:start;min-height:0;overflow-y:auto;overscroll-behavior:contain}.route-alert-pick button{display:flex;justify-content:space-between;align-items:baseline;gap:8px;width:100%;min-height:0;padding:6px 8px;border:0;border-radius:7px;background:transparent;color:var(--text, #0f172a);text-align:left;cursor:pointer}.route-alert-pick button:hover:not(:disabled),.route-alert-pick button:focus-visible{background:#eff6ff}.route-alert-pick strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.route-alert-pick small{flex:none;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.dash-middle .plan-card:has(.route-controls) .plan-canvas,.dash-middle .plan-card:has(.route-controls) .plan-scale-frame,.dash-middle .plan-card:has(.route-controls) .plan-stage{background:#fff}.dash-middle .plan-card:has(.route-controls) .plan-canvas{border-radius:12px;box-shadow:none}.route-alert-name.above{transform:translate(-50%,calc(-100% - 12px))}.route-alert-name{display:none;z-index:7}.route-alert-dot:hover~.route-alert-name,.route-alert-dot:focus-visible~.route-alert-name{display:block}.route-gw-stop.start.alerting,.route-gw-stop.end.alerting{background:#f59e0b;border-color:#fff7ed;animation:fsemi-amber-alert 1.15s ease-in-out infinite!important}.route-tag-alert{position:absolute;z-index:5;width:15px;height:15px;transform:translate(4px,-23px);display:grid;place-items:center;background:#f59e0b;color:#451a03;border:2px solid #fff;font-size:8px;font-weight:900;border-radius:4px;pointer-events:none;animation:fsemi-amber-alert 1.15s ease-in-out infinite}@keyframes fsemi-amber-alert{0%,to{box-shadow:0 0 0 3px #fde68a,0 0 0 5px #f59e0b61;opacity:1}50%{box-shadow:0 0 0 3px #fbbf24,0 0 0 12px #f59e0b00;opacity:.65}}@media(prefers-reduced-motion:reduce){.route-gw-stop.alerting,.route-tag-alert{animation:none!important;box-shadow:0 0 0 3px #fbbf24!important}}.route-line.alert-route.inferred{stroke:#d97706;stroke-dasharray:7 6}.route-casing.alert-route.inferred{stroke-dasharray:none}:root{--trace-depart: #16a34a;--trace-via: #3b82f6;--trace-arrive: #dc2626;--trace-route: #2563eb;--trace-alert: #f59e0b}.route-gw-stop.start,.route-gw-stop.start:focus,.route-gw-stop.start.legend{background:var(--trace-depart)}.route-gw-stop.via,.route-gw-stop.via:focus,.route-gw-stop.via.legend{background:var(--trace-via)}.route-gw-stop.end,.route-gw-stop.end:focus,.route-gw-stop.end.legend{background:var(--trace-arrive)}.route-gw-label.start{background:var(--trace-depart);color:#fff}.route-gw-label.via{background:var(--trace-via);color:#fff}.route-gw-label.end{background:var(--trace-arrive);color:#fff}.route-line.alert-route.hall,.route-line.alert-route.branch,.route-line.alert-route.inferred{stroke:var(--trace-route)}.route-line.alert-route.hall{stroke-dasharray:none}.route-line.alert-route.branch{stroke-dasharray:5 4}.route-line.alert-route.inferred{stroke-dasharray:7 6}.route-gw-stop.start.alerting,.route-gw-stop.end.alerting{border-color:#fff;background:var(--trace-depart);animation:fsemi-trace-alert-halo 1.15s ease-in-out infinite!important}@keyframes fsemi-trace-alert-halo{0%,to{box-shadow:0 0 0 3px #fde68a,0 0 0 6px #f59e0b8c;opacity:1}50%{box-shadow:0 0 0 3px #fbbf24,0 0 0 13px #f59e0b00;opacity:.76}}.route-gw-stop.legend{animation:none!important;box-shadow:none!important}@media(prefers-reduced-motion:reduce){.route-gw-stop.start.alerting,.route-gw-stop.end.alerting{animation:none!important;box-shadow:0 0 0 3px #fbbf24!important}}.route-gw-stop.end.alerting{background:var(--trace-arrive)}.gw-muted .plan-gw.route-traversed{opacity:1;z-index:4}.plan-stage .plan-gw.route-traversed>i,.plan-stage .plan-gw.route-traversed.online>i,.plan-stage .plan-gw.route-traversed:not(.online)>i{background:#facc15;box-shadow:0 0 0 3px #fff,0 0 0 6px #f59e0b,0 0 17px 5px #facc15d9;width:14px;height:14px}@media(prefers-reduced-motion:no-preference){.plan-stage .plan-gw.route-traversed>i{animation:route-gateway-glow 1.8s ease-in-out infinite}@keyframes route-gateway-glow{0%,to{filter:brightness(1)}50%{filter:brightness(1.22)}}}.route-controls .route-controls-row:has(.route-picked){flex-wrap:wrap}.route-controls .route-controls-row:has(.route-picked) .route-picked{flex:1 1 220px;height:36px}.route-controls .route-controls-row:has(.route-picked) .route-range{flex:1 1 380px;height:36px}.route-alert-pick button.alerted{background:#fef9c3;box-shadow:inset 3px 0 #f59e0b}.route-alert-pick button.alerted:hover:not(:disabled),.route-alert-pick button.alerted:focus-visible{background:#fde68a}.route-alert-pick button.alerted strong{color:#92400e}.route-alert-pick-empty{margin:0;padding:8px;color:var(--muted);font-size:12px}.route-gw-label.via{background:#2563eb;transform:translate(9px,calc(-100% - 5px));min-width:15px;text-align:center;opacity:1}.route-alert-pick button{flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;text-align:left}.route-alert-pick .pick-name{display:flex;align-items:center;gap:6px;min-width:0}.route-alert-pick .pick-name strong{flex:1;min-width:0}.route-alert-pick .pick-badge{flex:none;font-style:normal;font-size:10px;font-weight:600;padding:1px 6px;border-radius:999px;background:#fee2e2;color:#b91c1c}.route-alert-pick small.pick-facts,.route-alert-pick small.pick-signal,.route-alert-pick small.pick-alert{flex:initial;white-space:normal;line-height:1.35}.route-alert-pick small.pick-alert{color:#b45309}.route-alert-pick small.pick-signal.live:before{content:"● ";color:#16a34a}.route-alert-pick small.pick-signal.lost:before{content:"● ";color:#dc2626}.route-alert-pick button.alerted-elsewhere{box-shadow:inset 3px 0 #fca5a5}.route-alert-pick .pick-section{margin:0;padding:6px 8px 2px;font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.02em;color:var(--muted)}.route-alert-pick .pick-section.warn{color:#b45309}.route-alert-pick-list{display:block}.route-alert-pick-list>button{flex:none;height:auto;min-height:0;margin-bottom:2px;overflow:visible}.route-alert-pick-list>button>*{flex:none}.route-alert-pick .pick-section{display:block}
