*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#f5f7fa;color:#172033;overflow:hidden}button,input,select{font:inherit}.app{height:100vh;display:grid;grid-template-columns:224px minmax(660px,1fr) 360px;grid-template-rows:64px 1fr;transition:grid-template-columns .25s ease}.app.sidebarCollapsed{grid-template-columns:72px minmax(720px,1fr) 360px}.app.drawerClosed{grid-template-columns:224px minmax(760px,1fr) 0}.app.sidebarCollapsed.drawerClosed{grid-template-columns:72px minmax(820px,1fr) 0}.topbar{grid-column:1/-1;height:64px;background:#fff;border-bottom:1px solid #e7ebf0;display:flex;align-items:center;padding:0 16px;gap:16px;z-index:20}.brand{display:flex;align-items:center;gap:10px;min-width:190px}.brandMark{width:34px;height:34px;border-radius:11px;background:#2563eb;color:#fff;display:grid;place-items:center;font-weight:800}.brand strong{font-size:18px}.brand strong span{color:#2563eb}.siteSelector{height:42px;border:1px solid #e3e7ed;background:#fff;border-radius:12px;display:flex;align-items:center;gap:9px;padding:0 12px;min-width:250px;text-align:left}.siteSelector>span:nth-child(2){display:grid;flex:1}.siteSelector b{font-size:12px}.siteSelector small{font-size:10px;color:#758094}.diamond{color:#2563eb;font-size:18px}.topnav{height:64px;display:flex;align-items:stretch;gap:4px;flex:1;overflow:hidden}.topnav a{display:flex;align-items:center;padding:0 10px;font-size:12px;color:#626d7e;white-space:nowrap;position:relative}.topnav a.active{color:#2563eb;font-weight:700}.topnav a.active:after{content:"";height:2px;background:#2563eb;position:absolute;left:8px;right:8px;bottom:0}.editorNav{font-weight:700}.topActions{display:flex;align-items:center;gap:8px}.searchBox{width:245px;height:38px;border:1px solid #e3e7ed;border-radius:11px;background:#fafbfc;display:flex;align-items:center;padding:0 10px;color:#8b95a5}.searchBox input{border:0;background:transparent;outline:0;width:100%;padding-left:7px;font-size:11px}.liveBadge,.notification{height:38px;border:1px solid #e3e7ed;border-radius:10px;background:#fff}.liveBadge{padding:0 12px;color:#178f50}.liveBadge i{display:inline-block;width:7px;height:7px;background:#22c55e;border-radius:50%;margin-right:5px}.notification{width:38px;position:relative}.notification b{position:absolute;right:-5px;top:-6px;background:#ef4444;color:#fff;border-radius:10px;font-size:9px;padding:2px 5px}.userBlock{display:flex;align-items:center;gap:8px}.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#eef3ff;color:#2563eb;font-weight:700;font-size:11px}.userBlock>div:last-child{display:grid}.userBlock b{font-size:11px}.userBlock select{border:0;background:transparent;color:#758094;font-size:9px;outline:0;max-width:120px}.sidebar{grid-row:2;background:#fff;border-right:1px solid #e7ebf0;padding:16px 12px 14px;display:flex;flex-direction:column;justify-content:space-between;min-width:0}.sidebar>div:first-child,.sidebarBottom{display:grid;gap:5px}.sidebar button{height:46px;border:0;border-radius:11px;background:transparent;display:grid;grid-template-columns:34px 1fr auto;align-items:center;text-align:left;padding:0 10px;color:#5f6b7d}.sidebar button.active{background:#edf3ff;color:#2563eb}.sidebar button span{font-size:18px;text-align:center}.sidebar button b{font-size:12px;font-weight:580}.sidebar button em{font-style:normal;font-size:9px;background:#eef3ff;color:#2563eb;border-radius:10px;padding:3px 6px}.sidebarBottom{border-top:1px solid #edf0f4;padding-top:10px}.sidebarUser{display:flex;align-items:center;gap:9px;padding:10px}.avatar.small{width:30px;height:30px}.sidebarUser span{display:grid}.sidebarUser b{font-size:10px}.sidebarUser small{font-size:9px;color:#22a55b}.sidebar.collapsed{padding-left:8px;padding-right:8px}.sidebar.collapsed button{grid-template-columns:1fr;padding:0}.sidebar.collapsed button b,.sidebar.collapsed button em,.sidebar.collapsed .sidebarUser span{display:none}.sidebar.collapsed .sidebarUser{justify-content:center}.main{grid-row:2;padding:14px;display:grid;grid-template-rows:minmax(0,1fr) 96px;gap:12px;min-width:0;overflow:hidden}.commandPanel{background:#fff;border:1px solid #e6eaf0;border-radius:18px;overflow:hidden;box-shadow:0 8px 30px #0f172a0b;display:grid;grid-template-rows:auto 1fr}.canvasHeader{display:flex;justify-content:space-between;align-items:flex-start;padding:16px 18px 10px}.canvasHeader p{margin:0 0 5px;font-size:10px;color:#7b8798}.canvasHeader h1{font-size:18px;margin:0}.canvasHeader small{font-size:10px;color:#7b8798}.canvasHeader>div:last-child{display:flex;gap:7px}.canvasHeader button{width:36px;height:36px;border:1px solid #e3e7ed;background:#fff;border-radius:10px}.canvasWrap{position:relative;min-height:0;background:radial-gradient(circle at 50% 40%,#fff 10%,#f8fafc);overflow:hidden}.canvasWrap canvas{display:block}.floorControls{position:absolute;right:18px;top:50%;transform:translateY(-50%);display:grid;gap:7px}.floorControls button{width:46px;height:42px;border:1px solid #e3e7ed;border-radius:12px;background:#fffffff2;box-shadow:0 5px 18px #0f172a0f;font-size:11px}.floorControls button.active{border-color:#4e87ff;background:#eef4ff;color:#2563eb;font-weight:700}.floorControls button:disabled{opacity:.35}.canvasHint{position:absolute;left:18px;bottom:22px;font-size:10px;color:#7a8596}.canvasDock{position:absolute;left:50%;bottom:16px;transform:translate(-50%);display:flex;gap:4px;padding:6px;background:#fffffff5;border:1px solid #e3e7ed;border-radius:14px;box-shadow:0 10px 30px #0f172a14}.canvasDock button{height:34px;border:0;background:transparent;border-radius:9px;color:#657184;padding:0 10px}.canvasDock button.active{background:#eef4ff;color:#2563eb}.sceneLabel{background:#fffffff5;border:1px solid #dfe5ec;border-radius:12px;box-shadow:0 10px 28px #0f172a1f;padding:7px 9px;display:flex;gap:7px;min-width:142px;pointer-events:none}.sceneLabel>span{width:21px;height:21px;border-radius:50%;background:#2563eb;color:#fff;display:grid;place-items:center;font-size:9px;font-weight:700}.sceneLabel>div{display:grid}.sceneLabel b{font-size:9px}.sceneLabel small{font-size:8px;color:#748094}.sceneLabel i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#22c55e}.sceneLabel i.warning{background:#f59e0b}.sceneLabel i.critical{background:#ef4444}.statusStrip{background:#fff;border:1px solid #e6eaf0;border-radius:18px;display:grid;grid-template-columns:1.25fr repeat(4,1fr);overflow:hidden}.statusStrip button{border:0;border-right:1px solid #edf0f4;background:#fff;display:flex;align-items:center;gap:10px;padding:12px;text-align:left}.statusStrip button:last-child{border-right:0}.statusStrip button>span{width:32px;height:32px;border-radius:10px;display:grid;place-items:center}.statusStrip .green{background:#eaf9f0;color:#18a55a}.statusStrip .red{background:#fff0f0;color:#ef4444}.statusStrip .blue{background:#edf3ff;color:#2563eb}.statusStrip .amber{background:#fff6e3;color:#f59e0b}.statusStrip .mint{background:#eaf9f2;color:#16966a}.statusStrip button>div{display:grid}.statusStrip small{text-transform:uppercase;font-size:8px;letter-spacing:.4px;color:#8993a3}.statusStrip strong{font-size:13px}.statusStrip em{font-style:normal;font-size:9px;color:#778294}.drawer{grid-row:2;background:#fff;border-left:1px solid #e7ebf0;padding:16px;overflow:auto;min-width:0;transition:.25s}.drawer:not(.open){transform:translate(100%);opacity:0;pointer-events:none}.drawerHeader{display:flex;justify-content:space-between;padding-bottom:12px;border-bottom:1px solid #edf0f4}.drawerTitleRow{display:flex;gap:10px}.drawerCode{width:36px;height:36px;border-radius:10px;background:#eef4ff;color:#2563eb;display:grid;place-items:center;font-size:10px;font-weight:700}.drawerHeader h2{margin:0 0 4px;font-size:16px}.drawerHeader p{margin:0;color:#778294;font-size:9px}.drawerHeader>button{border:0;background:transparent;font-size:22px;color:#8d97a6}.statusPill{display:inline-block;margin:12px 0;padding:5px 9px;border-radius:20px;font-size:10px}.statusPill.healthy{background:#eaf9f0;color:#178f50}.statusPill.warning{background:#fff5df;color:#b87400}.statusPill.critical{background:#fff0f0;color:#d63434}.drawerTabs{display:flex;border-bottom:1px solid #edf0f4;overflow:auto}.drawerTabs button{border:0;background:transparent;padding:9px 8px;color:#778294;font-size:10px;white-space:nowrap}.drawerTabs button.active{color:#2563eb;border-bottom:2px solid #2563eb}.roleNotice{margin:14px 0 10px;padding:10px;border-radius:10px;background:#edf4ff;color:#2a60b9;font-size:10px}.metricGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.metricCard{border:1px solid #e4e8ee;border-radius:11px;padding:11px}.metricCard small{display:block;font-size:9px;color:#7d8797;margin-bottom:5px}.metricCard strong{font-size:15px}.sectionHeading{display:flex;justify-content:space-between;align-items:center;margin:17px 0 9px;text-transform:uppercase;font-size:10px;letter-spacing:.35px}.sectionHeading a{color:#2563eb;text-transform:none;font-size:9px}.alertCard{border:1px solid #f1d4d4;background:#fff8f8;border-radius:12px;padding:12px}.alertCard b{color:#d43a3a;font-size:11px}.alertCard p{font-size:10px}.alertCard small{font-size:9px;color:#8a94a4}.actionGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.actionGrid button{min-height:42px;border:1px solid #e1e6ed;background:#fff;border-radius:10px;text-align:left;padding:9px;font-size:10px}.healthBlock{display:flex;gap:14px;align-items:center;padding:14px;background:#f8fafc;border:1px solid #edf0f4;border-radius:14px;margin-top:14px}.healthScore{width:68px;height:68px;border-radius:50%;display:grid;place-items:center;border:8px solid #51c982;font-size:20px;font-weight:700}.healthBlock h3{font-size:12px;margin:0 0 4px}.healthBlock p{font-size:9px;color:#778294;margin:0}@media(max-width:1380px){.app{grid-template-columns:72px minmax(610px,1fr) 330px}.sidebar{padding-left:8px;padding-right:8px}.sidebar button{grid-template-columns:1fr;padding:0}.sidebar button b,.sidebar button em,.sidebarUser span{display:none}.sidebarUser{justify-content:center}.siteSelector{display:none}.brand{min-width:150px}.topnav a{padding:0 7px}.searchBox{width:185px}}@media(max-width:1120px){.app{grid-template-columns:72px 1fr 0}.drawer{position:fixed;right:0;top:64px;bottom:0;width:350px;z-index:30;box-shadow:-16px 0 40px #0f172a1f}.topnav a:not(.active):not(.editorNav){display:none}.searchBox{width:170px}}.app,.main,.commandPanel,.canvasWrap,.threeCanvasHost{min-width:0;min-height:0}.canvasWrap,.threeCanvasHost{width:100%!important;height:100%!important}.threeCanvasHost{position:absolute;inset:0;overflow:hidden;background:#fff;contain:strict}.threeCanvasHost canvas{display:block;touch-action:none}.canvasWrap{isolation:isolate}.canvasWrap>.floorControls,.canvasWrap>.canvasHint,.canvasWrap>.canvasDock{z-index:5}.canvasHeaderActions{align-items:center}.stackedToggle{height:36px;display:flex;align-items:center;gap:8px;padding:0 9px;border:1px solid #dfe5ec;border-radius:8px;color:#657184;font-size:10px;font-weight:700;cursor:pointer}.stackedToggle input{position:absolute;opacity:0;pointer-events:none}.stackedToggle i{position:relative;width:30px;height:17px;border-radius:10px;background:#cbd3dd;transition:background .2s ease}.stackedToggle i:after{content:"";position:absolute;width:13px;height:13px;left:2px;top:2px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0f172a33;transition:transform .2s ease}.stackedToggle input:checked+i{background:#2563eb}.stackedToggle input:checked+i:after{transform:translate(13px)}.spatialLabels{position:absolute;inset:0;z-index:4;pointer-events:none}.facilityLabel,.assetLabel{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;border:1px solid #d9e1ea;background:#fffffff5;box-shadow:0 8px 22px #0f172a21;color:#172033;display:flex;align-items:center;text-align:left;cursor:pointer;left:50%;top:50%;will-change:left,top}.facilityLabel{min-width:132px;min-height:43px;border-radius:7px;padding:7px 10px;gap:8px;border-left:4px solid var(--zone-color)}.facilityLabel:hover,.assetLabel:hover{border-color:var(--zone-color, #2563eb);transform:translate(-50%,-50%) translateY(-2px)}.facilityLabel i{width:9px;height:9px;border-radius:50%;background:#22c55e;flex:0 0 9px}.facilityLabel.warning i{background:#f59e0b}.facilityLabel.critical i{background:#ef4444}.facilityLabel span,.assetLabel span:last-child{display:grid;min-width:0}.facilityLabel b,.assetLabel b{font-size:10px;white-space:nowrap}.facilityLabel small,.assetLabel small{font-size:8px;color:#738094;white-space:nowrap}.facilityLabel.stackedLabel{min-width:0;min-height:32px;max-width:126px;padding:5px 8px;gap:6px;box-shadow:0 5px 14px #0f172a1a}.facilityLabel.stackedLabel b{max-width:96px;overflow:hidden;text-overflow:ellipsis}.facilityLabel.stackedLabel small{display:none}.facilityLabel.stackedLabel.floor-lt3{opacity:.96}.facilityLabel.stackedLabel.floor-lt2{opacity:.68}.facilityLabel.stackedLabel.floor-lt1{opacity:.42}.facilityLabel.stackedLabel:hover{opacity:1;z-index:2}.assetLabel{min-width:145px;border-radius:7px;padding:7px 9px;gap:8px}.assetLabel.missing{border-left:4px solid #ef4444}.assetLabel.due{border-left:4px solid #f59e0b}.assetLabel.verified{border-left:4px solid #22a55b}.rfidSignal{color:#2563eb;font-size:10px;font-weight:800;transform:rotate(180deg)}.backToFloor{position:absolute;z-index:6;top:14px;left:18px;height:36px;padding:0 12px;border:1px solid #dbe3ec;border-radius:8px;background:#fffffff5;color:#2563eb;font-size:10px;font-weight:700;box-shadow:0 5px 16px #0f172a14}.modalBackdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;background:#0f172a5c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.facilityModal{width:min(520px,100%);max-height:calc(100vh - 40px);overflow:auto;border-radius:8px;background:#fff;box-shadow:0 24px 70px #0f172a40;border-top:4px solid var(--zone-color);padding:20px}.facilityModal header{display:grid;grid-template-columns:44px 1fr 32px;align-items:center;gap:11px}.facilityModal header h2{margin:2px 0 0;font-size:18px}.facilityModal header small{color:#778294;font-size:9px}.modalIcon{width:44px;height:44px;display:grid;place-items:center;border-radius:7px;background:color-mix(in srgb,var(--zone-color) 14%,white);color:var(--zone-color);font-weight:800}.modalClose{border:0;background:transparent;color:#7d8795;font-size:24px}.modalStatusRow{display:flex;align-items:center;gap:12px;border-bottom:1px solid #edf0f4;padding:8px 0 14px;color:#657184;font-size:10px}.modalMetrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0}.modalMetrics div{border:1px solid #e3e8ef;border-radius:7px;padding:11px;display:grid;gap:5px}.modalMetrics small{color:#7c8797;font-size:8px}.modalMetrics strong{font-size:13px}.assetPreviewList{display:grid;border-top:1px solid #edf0f4}.assetPreviewList>div{display:flex;align-items:center;gap:9px;padding:10px 2px;border-bottom:1px solid #edf0f4}.assetPreviewList i{width:8px;height:8px;border-radius:50%;background:#22a55b}.assetPreviewList i.due{background:#f59e0b}.assetPreviewList i.missing{background:#ef4444}.assetPreviewList i.found{background:#16a34a}.assetPreviewList i.notFound{background:#ef4444}.assetPreviewList span{display:grid}.assetPreviewList b{font-size:10px}.assetPreviewList small{color:#778294;font-size:8px}.assetPreviewList>div.scanning{animation:scanPulse 1s ease-in-out infinite}.assetPreviewList em{margin-left:auto;font-style:normal;font-size:9px;font-weight:700;padding:4px 7px;border-radius:10px}.assetPreviewList em.found{color:#15803d;background:#eaf9f0}.assetPreviewList em.notFound{color:#dc2626;background:#fff0f0}.facilityModal footer{display:flex;justify-content:flex-end;gap:8px;padding-top:16px}.facilityModal footer button{height:38px;border-radius:7px;padding:0 14px;font-size:10px;font-weight:700}.secondaryButton{border:1px solid #dce3eb;background:#fff;color:#5e6a7c}.primaryButton{border:1px solid #2563eb;background:#2563eb;color:#fff}.scanButton{border:1px solid #2563eb;background:#eef4ff;color:#2563eb}.scanButton:disabled{opacity:.65;cursor:wait}.primaryButton:disabled{opacity:.65;cursor:wait}.primaryButton span{margin-left:8px}.deviceControl,.climateControl{margin-top:14px;padding:13px;border:1px solid #dfe5ec;border-radius:8px;background:#f8fafc}.deviceControl.armed{border-color:#b9e7cc;background:#f2fbf6}.deviceControl.unarmed{border-color:#fecaca;background:#fff7f7}.controlHeading{display:flex;align-items:center;justify-content:space-between;gap:10px}.controlHeading>div{display:grid;gap:3px}.controlHeading small{font-size:8px;color:#7c8797;text-transform:uppercase}.controlHeading strong{font-size:12px}.deviceControl p{color:#687588;font-size:9px;line-height:1.45;margin:10px 0}.controlSwitch{position:relative;width:38px;height:21px;flex:0 0 38px}.controlSwitch input{position:absolute;opacity:0}.controlSwitch i{position:absolute;inset:0;border-radius:12px;background:#cbd3dd;cursor:pointer;transition:.2s}.controlSwitch i:after{content:"";position:absolute;width:17px;height:17px;left:2px;top:2px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0f172a40;transition:transform .2s}.controlSwitch input:checked+i{background:#16a34a}.controlSwitch input:checked+i:after{transform:translate(17px)}.controlState{display:flex;justify-content:space-between;align-items:center;border-top:1px solid rgba(100,116,139,.16);padding-top:9px}.controlState span{font-size:9px;font-weight:800;color:#16a34a}.unarmed .controlState span{color:#dc2626}.controlState small{color:#778294;font-size:8px}.controlLive{color:#15803d;background:#dcfce7;border-radius:10px;padding:4px 7px;font-size:8px;font-weight:800}.temperatureControl{display:grid;grid-template-columns:34px 1fr 34px;align-items:center;gap:12px;margin:12px 0 8px}.temperatureControl button{width:34px;height:34px;border:1px solid #dbe2ea;border-radius:50%;background:#fff;color:#2563eb;font-size:17px}.temperatureGauge{justify-self:center;width:82px;height:82px;border-radius:50%;display:grid;place-content:center;text-align:center;position:relative;background:conic-gradient(#2563eb var(--temperature-progress),#e5eaf0 0)}.temperatureGauge:after{content:"";position:absolute;inset:7px;border-radius:50%;background:#fff}.temperatureGauge strong,.temperatureGauge small{position:relative;z-index:1}.temperatureGauge strong{font-size:20px}.temperatureGauge small{color:#778294;font-size:7px}.temperatureRange{width:100%;accent-color:#2563eb}.rangeLabels{display:flex;justify-content:space-between;color:#8590a0;font-size:7px}@keyframes scanPulse{50%{opacity:.42}}.healthScore{flex:0 0 68px;width:68px;height:68px;aspect-ratio:1}.healthBlock>div:last-child{min-width:0}@media(max-height:760px){.main{grid-template-rows:minmax(420px,1fr) 88px}}@media(max-width:900px){.facilityLabel{min-width:105px;padding:6px}.facilityLabel small{display:none}.modalMetrics{grid-template-columns:1fr}}
