:root{--bg: #070b14;--bg-soft: #0d1424;--panel: rgba(17, 26, 44, .84);--line: rgba(146, 170, 203, .22);--ink: #e6eefc;--muted: #9cb0cf;--brand: #35d0ba;--brand-2: #68a4ff;--danger: #ff7b7b}*{box-sizing:border-box}html,body,#root{min-height:100%}html,body{overflow-x:hidden}body{margin:0;color:var(--ink);font-family:Space Grotesk,IBM Plex Sans,sans-serif;background:radial-gradient(circle at 0% 0%,rgba(53,208,186,.18),transparent 28%),radial-gradient(circle at 100% 0%,rgba(104,164,255,.14),transparent 34%),linear-gradient(145deg,#05070c,#0a1220 48%,#0f1830)}a{color:inherit}.gate{min-height:100vh;display:grid;place-items:center;padding:20px}.gateCard{width:min(420px,100%);border:1px solid var(--line);background:var(--panel);border-radius:18px;padding:24px;box-shadow:0 24px 60px #00000052}.gateCard h1{margin:0 0 8px}.gateCard p{margin:0 0 18px;color:var(--muted)}.appShell{min-height:100vh;display:grid;grid-template-columns:260px 1fr;max-width:100vw}.sideNav{border-right:1px solid var(--line);background:#070b14c7;padding:18px;display:grid;align-content:start;gap:14px;position:sticky;top:0;height:100vh;min-width:0}.sideNav h1{margin:0;font-size:1.45rem}.sideNav p{margin:0;font-size:.84rem;color:var(--muted);word-break:break-word}.sideNav nav{display:grid;gap:8px}.sideNav nav button{text-align:left;display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:#121b2cb8;color:var(--ink);border-radius:10px;min-height:40px;padding:0 12px;cursor:pointer}.sideNav nav button.navActive{border-color:#35d0ba99;background:linear-gradient(150deg,#35d0ba42,#68a4ff2e)}.btnGhost,button,select,input,.btnPrimary{font:inherit}.btnGhost,.btnPrimary,button{border-radius:10px;border:1px solid var(--line);min-height:38px;padding:0 12px;color:var(--ink);background:#19253dd9;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}.btnPrimary{color:#06221d;border:0;background:linear-gradient(130deg,#5de1d0,#44c2b2);font-weight:700}.content{padding:20px;display:grid;gap:14px;min-width:0}.topBar{display:flex;justify-content:space-between;align-items:center;gap:10px}.topBar h2{margin:0;font-size:1.55rem}.topBar p{margin:4px 0 0;color:var(--muted)}.inlineActions{display:flex;gap:8px;flex-wrap:wrap;min-width:0}.dashboardControls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}.dashboardActions{flex-wrap:nowrap}.dashboardActions select{width:auto;min-width:180px}.globalState{display:inline-flex;align-items:center;gap:6px;min-height:40px;border-radius:10px;padding:0 12px;font-weight:700}.globalState.warn{border:1px solid rgba(255,120,120,.5);background:#ff5a5a29;color:#ffd3d3}.globalState.ok{border:1px solid rgba(92,224,157,.45);background:#3cbc8029;color:#c9ffe0}.panel{border:1px solid var(--line);border-radius:16px;background:var(--panel);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 12px 34px #00000038;padding:14px;min-width:0}.panelHead{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}.panelHead h3{margin:0;display:inline-flex;align-items:center;gap:8px}.metricsGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.metricCard{border:1px solid var(--line);border-radius:12px;padding:12px;background:linear-gradient(170deg,#22314a8c,#17223780)}.metricCard p{margin:0;color:var(--muted);font-size:.82rem;display:inline-flex;align-items:center;gap:6px}.metricCard strong{display:block;margin-top:8px;font-size:1.45rem;font-family:IBM Plex Mono,monospace}.metricCard.warn strong{color:#ffd4a4}.metricCard.danger strong{color:#ffc1c1}.dashboardSplit{display:grid;grid-template-columns:1fr 1fr;gap:10px}.compactPanel table{margin-top:2px}.compactPanel{position:relative;overflow:hidden}.compactPanel:first-child{border-color:#ff848466;background:linear-gradient(180deg,#441f2a47,#131c2fe6)}.compactPanel:last-child{border-color:#78e2ae52;background:linear-gradient(180deg,#1d423c3d,#131c2fe6)}.compactPanel td:last-child,.compactPanel th:last-child{width:1%;white-space:nowrap}.cityBadge{display:inline-flex;min-height:22px;align-items:center;border-radius:999px;padding:0 8px;border:1px solid rgba(154,181,222,.35);background:#7491c41f;color:#d7e8ff}.statusBadge{display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:0 9px;border-radius:999px;font-size:.78rem;font-weight:600}.statusBadge.warn{color:#ffd0d0;border:1px solid rgba(255,120,120,.45);background:#ff626229}.statusBadge.ok{color:#c9ffe0;border:1px solid rgba(109,232,167,.45);background:#50c98f29}.rowWarn td:first-child{border-left:3px solid rgba(255,129,129,.55)}.rowOk td:first-child{border-left:3px solid rgba(101,221,167,.5)}.panelHint{margin:8px 2px 0;color:var(--muted);font-size:.82rem}.linkButton{padding:0;min-height:0;border:0;background:transparent;color:#dff1ff;font-weight:600;text-align:left;justify-content:flex-start}.linkButton:hover{text-decoration:underline}.moreButton{margin-top:8px}.installGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.installTile{border:1px solid var(--line);border-radius:12px;padding:12px;display:grid;gap:8px;background:#151f33b8}.installTile.warn{border-color:#ff7b7b80}.installTile h4{margin:0}.installTile p{margin:0;font-size:.88rem;color:#d7e3f6}.installTile .sub{color:var(--muted);font-family:IBM Plex Mono,monospace;font-size:.78rem}.tileMeta{display:grid;gap:6px}.tileMeta p{display:flex;justify-content:space-between;gap:8px;font-size:.82rem;color:#cfe0f8}.tileMeta p span{color:var(--muted)}.tileMeta p strong{color:#e8f1ff;font-family:IBM Plex Mono,monospace;font-weight:600}.filtersPanel{display:grid;gap:10px}.advancedFilters{border:1px solid rgba(146,170,203,.26);border-radius:12px;padding:8px 10px;background:#0c132199}.advancedFilters summary{cursor:pointer;color:#c9d7ee;font-weight:600;-webkit-user-select:none;user-select:none}.advancedFilters[open] summary{margin-bottom:10px}.formGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.formGrid.core{grid-template-columns:1.1fr 1.5fr 1fr 1fr}.formGrid.customRange{grid-template-columns:1fr 1fr}.dateTimeGroup{display:grid;gap:6px}.dateTimeGroup label{font-size:.8rem;color:var(--muted)}.dateTimePair{display:grid;grid-template-columns:1fr 150px;gap:8px}.formGrid.wide{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:8px}input,select,textarea{width:100%;border:1px solid var(--line);border-radius:10px;min-height:40px;padding:0 10px;color:var(--ink);background:#0b121fe0}textarea{min-height:96px;padding:10px;resize:vertical}.severityChoices{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.filterLabel{color:var(--muted);font-size:.84rem;margin-right:4px}.severityBtn{min-height:32px;padding:0 10px;border-radius:10px;border:1px solid rgba(146,170,203,.28);background:#111c2f9e;color:#b9c9e3;font-size:.78rem;font-weight:600}.severityBtn.active{color:#e9f3ff}.severityBtn.sev2.active,.severityBtn.sev3.active{border-color:#ff7b7b8c;background:#ff6c6c2e}.severityBtn.sev4.active{border-color:#ffc5608c;background:#ffc5602e}.severityBtn.sev5.active{border-color:#a6badc8c;background:#a6badc2e}.severityBtn.sev6.active{border-color:#35d0ba8c;background:#35d0ba2e}.severityBtn.sev7.active{border-color:#7a9aff8c;background:#7a9aff2e}.columnChoices{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.columnChoices>span{color:var(--muted);font-size:.84rem}.severityChoice{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:3px 8px;background:#121b2bcc}.severityChoice input{width:auto;min-height:auto}.severityChoice.active{border-color:#68a4ff94}table{width:100%;border-collapse:collapse}.tableWrap{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.logsTable{min-width:760px}th,td{text-align:left;padding:10px;border-bottom:1px solid rgba(146,170,203,.24)}th{font-size:.74rem;text-transform:uppercase;color:#9eb0ca;letter-spacing:.08em}td{font-size:.84rem;color:#dbe7f8}table tbody tr:nth-child(2n) td{background:#1623394d}.eventsTable th:nth-child(1),.eventsTable td:nth-child(1),.logsTable .col-ts{white-space:nowrap;width:1%}.eventsTable th:nth-child(2),.eventsTable td:nth-child(2),.logsTable .col-installation{min-width:220px}.eventsTable th:nth-child(3),.eventsTable td:nth-child(3),.logsTable .col-controller{min-width:140px}.eventsTable th:nth-child(4),.eventsTable td:nth-child(4),.logsTable .col-severity,.logsTable .col-source{white-space:nowrap;width:1%}.messageCell{min-width:320px;max-width:none}.clickRow{cursor:pointer}.clickRow:hover{background:#35d0ba14}.loadMoreBar{margin-top:10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.loadMoreBar span{color:var(--muted);font-size:.82rem}.sevRow0 td:first-child,.sevRow1 td:first-child,.sevRow2 td:first-child,.sevRow3 td:first-child{border-left:3px solid rgba(255,116,116,.85)}.sevRow4 td:first-child{border-left:3px solid rgba(255,196,96,.85)}.sevRow5 td:first-child{border-left:3px solid rgba(188,208,245,.85)}.sevRow6 td:first-child{border-left:3px solid rgba(91,220,177,.9)}.sevRow7 td:first-child{border-left:3px solid rgba(140,170,255,.9)}.typePill{display:inline-flex;align-items:center;min-height:22px;border-radius:999px;padding:0 8px;font-size:.7rem;border:1px solid transparent;font-weight:700}.typePill.sev0,.typePill.sev1,.typePill.sev2,.typePill.sev3{background:#ff7b7b33;color:#ffd4d4;border-color:#ff7b7b73}.typePill.sev4{background:#ffc56038;color:#ffe3b0;border-color:#ffc56073}.typePill.sev5{background:#a6badc33;color:#dce7fb;border-color:#a6badc73}.typePill.sev6{background:#35d0ba33;color:#befff5;border-color:#35d0ba73}.typePill.sev7{background:#7a9aff38;color:#d4e0ff;border-color:#7a9aff80}.detailPanel p{margin:0 0 8px}.detailGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px}.detailGrid p{margin:0}.detailGrid.compact{margin:0 0 10px;gap:4px 12px}.detailHero{margin:0 0 10px}.detailHeroTop{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:6px}.detailHeroTitle{font-size:1.1rem;font-weight:700;color:#eef5ff;line-height:1.25;margin-bottom:4px}.detailHeroSub{display:flex;flex-wrap:wrap;gap:6px;color:#b7c9e5;font-size:.88rem}.dotSep{opacity:.65}.detailKeyvals{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px;margin:0 0 10px}.detailKeyvals p{margin:0;display:grid;gap:1px}.detailKeyvals span{color:#9fb4d7;font-size:.76rem;text-transform:uppercase;letter-spacing:.04em}.detailKeyvals strong{color:#e8f1ff;line-height:1.25}.surroundList{margin:0;padding-left:18px;color:#c9d8ef}.surroundListStyled{list-style:none;padding-left:0;display:grid;gap:0}.surroundItem{padding:0}.surroundItem.rowLike{border-top:1px solid rgba(104,134,189,.18)}.surroundListStyled .surroundItem:first-child{border-top:0}.surroundTable{border-top:1px solid rgba(104,134,189,.22);border-bottom:1px solid rgba(104,134,189,.22)}.surroundTableHead{display:grid;grid-template-columns:190px minmax(160px,240px) 110px 90px minmax(0,1fr);gap:12px;color:#90a8ce;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;padding:6px 0;border-bottom:1px solid rgba(104,134,189,.14)}.surroundRow{display:grid;grid-template-columns:190px minmax(160px,240px) 110px 90px minmax(0,1fr);gap:12px;align-items:start;padding:6px 0}.surroundCell{min-width:0}.surroundCell.time{color:#b5c7e3;font-size:.84rem}.surroundCell.controller{color:#dbe8fb;overflow-wrap:anywhere;word-break:break-word;line-height:1.2;font-size:.9rem}.surroundCell.sev,.surroundCell.source{display:flex;align-items:center}.surroundCell.msg{color:#e6eefc;line-height:1.25;word-break:break-word;overflow-wrap:anywhere;font-size:.9rem}.surroundCurrent{font-weight:700;color:#eff7ff;border-left:3px solid rgba(93,225,210,.75)}.surroundCurrent .surroundRow{padding-left:7px}.detailHeaderLine{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.smallPill{min-height:22px;padding:0 8px;font-size:.75rem}.detailTypePill{border-color:#5d83c459;background:#5d83c424;color:#d3e2ff}.detailInlineMeta{color:#b6c9e9;font-size:.85rem}.detailSection{margin:0 0 10px}.detailSection h4,.detailSectionTitle{margin:0 0 6px}.detailMessage{margin:0;color:#edf4ff;line-height:1.45;word-break:break-word}.detailRaw{margin:0;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem;color:#d8e5ff}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.typePill.tiny{font-size:.68rem;padding:0 6px;min-height:18px}.gateLoading .gateCardLoading{position:relative;overflow:hidden}.loadingPulseBar{height:4px;border-radius:999px;background:#75d0bf24;margin:10px 0 14px;overflow:hidden;position:relative}.loadingPulseBar:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;width:45%;background:linear-gradient(90deg,transparent,rgba(77,224,207,.9),transparent);animation:shimmerMove 1.2s ease-in-out infinite}.loadingSkeletonGrid{display:grid;gap:8px}.loadingSkeletonGrid span{display:block;height:12px;border-radius:8px;background:linear-gradient(90deg,#50669229,#7e97c647,#50669229);background-size:220% 100%;animation:shimmerBg 1.2s linear infinite}.loadingSkeletonGrid span:nth-child(1){width:92%}.loadingSkeletonGrid span:nth-child(2){width:78%}.loadingSkeletonGrid span:nth-child(3){width:86%}.loadingSkeletonGrid span:nth-child(4){width:64%}@keyframes shimmerMove{0%{transform:translate(-120%)}to{transform:translate(260%)}}@keyframes shimmerBg{0%{background-position:200% 0}to{background-position:-20% 0}}.modalBackdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#040810b8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:40;display:grid;place-items:center;padding:20px}.modalCard{width:min(980px,100%);max-height:min(88vh,920px);overflow:auto;border:1px solid var(--line);border-radius:16px;background:linear-gradient(180deg,#091223fa,#0c1930fa);box-shadow:0 20px 60px #00000073;padding:14px}.modalHead{position:sticky;top:-14px;background:#0a1323f2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:8px 0;margin-bottom:8px;z-index:1}.modalCloseBtn{margin-left:auto}.detailModal h4{margin:10px 0 6px}.adminPanel h4{margin:12px 0 8px}.adminPanel.clean{padding:12px}.adminLayout{display:grid;gap:12px}.adminCard{border:1px solid var(--line);border-radius:12px;padding:12px;background:#0f17268c;display:grid;gap:10px}.adminCard h3{margin:0;font-size:1rem}.muted{margin:0;color:var(--muted);font-size:.84rem}.rowActions{display:flex;gap:6px}.splitGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.errorText{margin:0 0 10px;border:1px solid rgba(255,123,123,.45);background:#ff7b7b21;border-radius:10px;padding:8px 10px;color:#ffcaca}.senderBadge{margin-left:8px;display:inline-flex;align-items:center;min-height:20px;border-radius:999px;padding:0 8px;font-size:.68rem;color:#ffe0b1;border:1px solid rgba(255,194,102,.45);background:#ffc26629}.hintText{margin:0 0 8px;border:1px solid rgba(255,194,102,.45);background:#ffc2661f;border-radius:10px;padding:8px 10px;color:#ffe5c3}@media (max-width: 1180px){.appShell{grid-template-columns:1fr;grid-template-rows:auto 1fr;align-content:start}.sideNav{height:auto;position:static;border-right:0;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:10px;align-items:stretch}.sideNav nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-bottom:2px}.sideNav nav button{min-width:0}.metricsGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboardSplit{grid-template-columns:1fr}.installGrid,.formGrid.core,.formGrid.wide{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 760px){.content{padding:12px}.topBar{flex-direction:column;align-items:stretch}.topBar .inlineActions{width:100%;display:grid;grid-template-columns:1fr}.topBar .inlineActions button{width:100%;min-width:0}.dashboardControls{justify-content:flex-start}.dashboardActions{flex-wrap:wrap;width:100%}.dashboardActions select,.dashboardActions button{width:100%;min-width:0}.globalState{width:100%;justify-content:center}.sideNav{gap:10px;padding:12px}.sideNav nav{display:grid;grid-template-columns:1fr}.sideNav nav button{width:100%}.sideNav .btnGhost{width:100%}.metricsGrid,.dashboardSplit,.installGrid,.splitGrid,.formGrid,.formGrid.core,.formGrid.customRange,.formGrid.wide,.detailGrid,.dateTimePair{grid-template-columns:1fr}.severityChoices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.filterLabel{grid-column:1 / -1;margin-right:0}.severityChoices .severityBtn{width:100%}.columnChoices{align-items:stretch;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.columnChoices>span{width:100%}.columnChoices>span{grid-column:1 / -1}.loadMoreBar{display:grid;grid-template-columns:1fr}.modalBackdrop{padding:10px;align-items:end}.modalCard{max-height:92vh;border-radius:14px;padding:12px}.detailHeaderLine{align-items:flex-start}.detailKeyvals{grid-template-columns:1fr}.surroundTableHead{display:none}.surroundRow{grid-template-columns:1fr;gap:4px}.surroundCell.sev,.surroundCell.source{display:block}.surroundCell.controller{font-size:.86rem}}
