*{box-sizing:border-box}:root{--bg: #07111f;--panel: rgba(15, 23, 42, .9);--panel-solid: #0f172a;--panel-soft: #111c31;--border: rgba(148, 163, 184, .18);--border-strong: rgba(96, 165, 250, .65);--text: #e5e7eb;--muted: #94a3b8;--blue: #3b82f6;--blue-dark: #1e3a8a;--green: #22c55e;--red: #ef4444;--amber: #f59e0b}body{margin:0;min-height:100vh;color:var(--text);background:radial-gradient(circle at top left,rgba(59,130,246,.22),transparent 26rem),radial-gradient(circle at top right,rgba(34,197,94,.1),transparent 30rem),linear-gradient(135deg,#07111f,#0b1020 55%,#08111f);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}button{font:inherit}.appShell{min-height:100vh;display:grid;grid-template-columns:280px 1fr}.sidebar{border-right:1px solid var(--border);background:#0206178c;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);padding:24px;display:flex;flex-direction:column}.brand{display:grid;gap:12px;margin-bottom:28px}.brandLogo{width:100%;max-width:220px;height:auto;display:block;padding:10px 12px;border:1px solid var(--border);border-radius:16px;background:#fffffff5}.brandText{display:grid;gap:2px}.brand h1{margin:0;font-size:20px;letter-spacing:-.04em}.brand p{margin:3px 0 0;color:var(--muted);font-size:13px}.nav{display:grid;gap:8px}.navItem{display:flex;align-items:center;gap:11px;width:100%;border:1px solid transparent;background:transparent;color:var(--muted);border-radius:14px;padding:12px 13px;cursor:pointer;text-align:left}.navItem:hover{background:#94a3b814;color:#fff}.navItem.active{color:#fff;background:#3b82f62e;border-color:#60a5fa59}.sidebarFooter{margin-top:auto}.miniStatus{display:flex;gap:9px;align-items:center;color:var(--muted);font-size:12px}.refreshTrack{margin-top:12px;height:6px;background:#94a3b829;border-radius:999px;overflow:hidden}.refreshTrack div{height:100%;background:linear-gradient(90deg,var(--blue),#22c55e)}.main{min-width:0;padding:28px}.topbar{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:18px}.topbar h2{margin:0;font-size:32px;letter-spacing:-.045em}.topbar p{margin:7px 0 0;color:var(--muted)}.topActions{display:flex;gap:10px}.primaryBtn,.ghostBtn{display:inline-flex;gap:8px;align-items:center;border-radius:13px;padding:10px 14px;cursor:pointer;border:1px solid var(--border);color:#fff}.primaryBtn{background:var(--blue);border-color:var(--blue)}.ghostBtn{background:#0f172ab3}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.healthStrip{display:grid;grid-template-columns:1.3fr 1fr .8fr .9fr;gap:12px;margin-bottom:14px}.statusPill{display:flex;gap:10px;align-items:center;min-width:0;padding:12px 14px;border-radius:16px;background:var(--panel);border:1px solid var(--border)}.statusPill small{display:block;color:var(--muted);font-size:11px}.statusPill strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.onlineDot,.offlineDot{width:9px;height:9px;flex:0 0 9px;border-radius:999px}.onlineDot{background:var(--green);box-shadow:0 0 18px #22c55ee6}.offlineDot{background:var(--red);box-shadow:0 0 18px #ef4444bf}.kpiGrid{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:16px;margin-bottom:18px}.kpi{display:flex;gap:14px;align-items:center;padding:18px;border-radius:20px;background:var(--panel);border:1px solid var(--border)}.kpiIcon{width:48px;height:48px;display:grid;place-items:center;border-radius:16px;background:#3b82f62e;color:#93c5fd}.kpi span{display:block;color:var(--muted);font-size:13px}.kpi strong{display:block;margin-top:3px;font-size:24px;letter-spacing:-.04em}.kpi small{display:block;margin-top:3px;color:var(--muted);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contentGrid{display:grid;grid-template-columns:360px 1fr;gap:18px}.panel{min-width:0;padding:18px;border-radius:22px;background:var(--panel);border:1px solid var(--border);box-shadow:0 22px 80px #00000038}.panelTitle{display:flex;justify-content:space-between;margin-bottom:16px}.panelTitle h3{margin:0;font-size:21px;letter-spacing:-.035em}.panelTitle p{margin:4px 0 0;color:var(--muted);font-size:13px}.deviceList{display:grid;gap:10px}.deviceCard{width:100%;text-align:left;border:1px solid var(--border);background:#0f172ab8;color:var(--text);border-radius:17px;padding:14px;cursor:pointer;transition:.15s ease}.deviceCard:hover{transform:translateY(-1px);border-color:#94a3b873}.deviceCard.active{border-color:var(--border-strong);background:linear-gradient(135deg,#1e3a8af2,#0f172ae0)}.deviceCardTop,.deviceMeta{display:flex;align-items:center;gap:8px}.deviceCardTop strong{flex:1}.deviceMeta{justify-content:space-between;margin-top:7px;color:var(--muted);font-size:13px}.deviceMeta span{display:inline-flex;align-items:center;gap:6px}.tabBar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.tab{border:1px solid var(--border);background:#0f172ab8;color:var(--muted);border-radius:999px;padding:8px 13px;cursor:pointer}.tab.active{background:var(--blue);border-color:var(--blue);color:#fff}.summaryCard{display:grid;grid-template-columns:repeat(2,minmax(240px,1fr));gap:10px 20px;margin-bottom:18px;padding:16px;border-radius:18px;background:#02061757;border:1px solid var(--border)}.infoRow{display:grid;grid-template-columns:140px 1fr;gap:10px}.infoRow span,.dataTile span{color:var(--muted)}.infoRow strong{word-break:break-word}.positionGrid{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:12px;margin-bottom:16px}.dataTile,.futureCard{padding:14px;border-radius:17px;background:#02061757;border:1px solid var(--border)}.dataTile span{display:block;font-size:12px;margin-bottom:8px}.dataTile strong{font-size:21px}.mapPreview{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:18px;margin-bottom:16px;border-radius:20px;background:linear-gradient(135deg,#3b82f629,#22c55e14);border:1px solid var(--border)}.mapPreview h4{margin:8px 0 4px}.mapPreview p{margin:0;color:var(--muted)}.futureGrid{display:grid;grid-template-columns:repeat(2,minmax(180px,1fr));gap:12px}.futureCard strong{display:block}.futureCard span{display:block;color:var(--muted);margin-top:6px}pre{margin:0 0 16px;padding:15px;border-radius:17px;background:#020617;color:#bbf7d0;border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;overflow:auto;max-height:340px}.emptyState{display:grid;place-items:center;gap:10px;min-height:280px;text-align:center;color:var(--muted);border:1px dashed var(--border);border-radius:20px}.emptyState strong{color:var(--text)}@media (max-width: 1180px){.appShell{grid-template-columns:1fr}.sidebar{position:static;border-right:0;border-bottom:1px solid var(--border)}.nav{grid-template-columns:repeat(4,minmax(120px,1fr))}.contentGrid,.healthStrip{grid-template-columns:1fr}}@media (max-width: 760px){.main,.page{padding:18px}.topbar,.mapPreview{flex-direction:column;align-items:stretch}.kpiGrid,.positionGrid,.summaryCard,.futureGrid,.nav{grid-template-columns:1fr}}.sectionHeader{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}.sectionHeader h4{margin:0 0 4px}.sectionHeader p{margin:0;color:var(--muted)}.smallMuted{color:var(--muted);font-size:13px}.doGrid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px;margin-bottom:16px}.doCard{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px;border-radius:18px;background:#02061757;border:1px solid var(--border)}.doCard.on{border-color:#22c55e8c;background:linear-gradient(135deg,#22c55e29,#0f172ab8)}.doCard span,.doCard small{display:block;color:var(--muted)}.doCard strong{display:block;margin:5px 0;font-size:24px}.toggleBtn{border:1px solid rgba(96,165,250,.45);background:#3b82f629;color:#fff;border-radius:13px;padding:10px 13px;cursor:pointer;white-space:nowrap}.toggleBtn.on{border-color:#22c55e8c;background:#22c55e2e}.toggleBtn:disabled,.ghostBtn:disabled{opacity:.45;cursor:not-allowed}.commandSummary{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:10px 20px;margin-bottom:14px;padding:16px;border-radius:18px;background:#02061757;border:1px solid var(--border)}.errorBanner{margin-bottom:14px;padding:12px 14px;border-radius:14px;color:#fecaca;background:#ef444429;border:1px solid rgba(239,68,68,.35)}.neutralNotice{padding:12px 14px;border-radius:14px;color:var(--muted);background:#0f172a8c;border:1px solid var(--border)}.hintBox{padding:12px 14px;border-radius:14px;color:var(--muted);background:#f59e0b1a;border:1px solid rgba(245,158,11,.28)}@media (max-width: 980px){.doGrid,.commandSummary{grid-template-columns:1fr}}.doLifecycle{display:grid;gap:4px;margin-bottom:14px;padding:13px 15px;border-radius:15px;background:#94a3b81a;border:1px solid var(--border)}.doLifecycle strong{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.doLifecycle span{font-weight:700}.doLifecycle.pending{background:#f59e0b1f;border-color:#f59e0b6b}.doLifecycle.success{background:#22c55e1f;border-color:#22c55e6b}.doLifecycle.error{background:#ef444424;border-color:#ef44446b}.buttonGroup{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.ghostBtn.activeMini{background:#3b82f642;border-color:#60a5fab8}.compactHeader{margin-top:4px}.rawLogList{display:grid;gap:12px}.rawLogEntry{padding:14px;border-radius:16px;border:1px solid var(--border);background:#02061757}.rawLogMeta{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;margin-bottom:10px;color:var(--muted);font-size:13px}.rawLogMeta strong{color:var(--text)}.rawLogEntry details{margin-top:10px;color:var(--muted)}.rawLogEntry summary{cursor:pointer;margin-bottom:8px}.eventLog{display:grid;gap:10px;margin-top:14px}.eventRow{display:grid;grid-template-columns:110px minmax(220px,280px) minmax(0,1fr);gap:14px;align-items:start;padding:12px;border-radius:14px;border:1px solid var(--border);background:#02061757}.eventRow span{color:var(--muted);font-size:12px}.eventRow strong{font-size:12px;letter-spacing:.04em;color:var(--text);overflow-wrap:anywhere}.eventRow p{margin:0;font-size:13px}.eventRow small{grid-column:3;color:var(--muted);overflow-wrap:anywhere}.eventRow.warn,.eventRow.warning{border-color:#f59e0b73;background:#f59e0b1a}.eventRow.error{border-color:#ef444473;background:#ef44441f}@media (max-width: 760px){.eventRow{grid-template-columns:1fr}.eventRow small{grid-column:1}}.streamStatus{margin-top:6px;font-size:11px;color:var(--muted)}.telemetryHealthPanel{margin:0 0 18px;padding:14px;border:1px solid var(--border);border-radius:18px;background:#02061738}.telemetryHealthGrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px}.telemetryHealthCard,.telemetryStatusCard{border:1px solid var(--border);border-radius:14px;padding:12px;background:#0f172a8c}.telemetryStatusCard{margin:0 0 14px;display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.telemetryHealthCard span,.telemetryStatusCard span{display:block;color:var(--muted);font-size:12px}.telemetryHealthCard strong,.telemetryStatusCard strong{display:block;margin-top:4px}.telemetryHealthCard small,.telemetryStatusCard small,.telemetryStatusCard p{display:block;color:var(--muted);margin:4px 0 0;font-size:12px}.telemetryHealthCard.healthLive,.telemetryStatusCard.healthLive{border-color:#22c55e8c;background:#22c55e14}.telemetryHealthCard.healthStale,.telemetryStatusCard.healthStale{border-color:#f59e0b99;background:#f59e0b14}.telemetryHealthCard.healthDead,.telemetryStatusCard.healthDead,.telemetryHealthCard.healthMissing,.telemetryStatusCard.healthMissing{border-color:#ef444473;background:#ef444414}.warningBanner{margin:10px 0 14px;padding:12px 14px;border-radius:14px;border:1px solid rgba(245,158,11,.5);color:#fde68a;background:#f59e0b1f;font-size:13px}.miniHealthDots{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}.miniHealthDots span{font-size:10px;line-height:1;padding:4px 6px;border-radius:999px;border:1px solid var(--border);color:var(--muted)}.miniHealthDots span.healthLive{color:#bbf7d0;border-color:#22c55e80;background:#22c55e1f}.miniHealthDots span.healthStale{color:#fde68a;border-color:#f59e0b80;background:#f59e0b1f}.miniHealthDots span.healthDead,.miniHealthDots span.healthMissing{color:#fecaca;border-color:#ef444480;background:#ef44441f}@media (max-width: 1200px){.telemetryHealthGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.canConfigText{width:100%;min-height:120px;resize:vertical;border:1px solid rgba(148,163,184,.25);background:#0206178c;color:#dbeafe;border-radius:14px;padding:14px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px;outline:none}.canTableWrap{overflow-x:auto;border:1px solid rgba(148,163,184,.16);border-radius:14px;margin-top:12px}.canTable{width:100%;border-collapse:collapse;font-size:13px}.canTable th,.canTable td{text-align:left;padding:10px 12px;border-bottom:1px solid rgba(148,163,184,.12)}.canTable th{color:#93c5fd;font-weight:700;background:#0f172a8c}.canTable code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;color:#bbf7d0}.rawDetails{margin-top:14px}.canHistoryHeader{margin-top:20px}.canHistoryList{display:grid;gap:12px;margin-top:10px}.canHistoryDetails{border:1px solid rgba(148,163,184,.16);border-radius:14px;background:#02061738;overflow:hidden}.canHistoryDetails summary{cursor:pointer;padding:12px 14px;color:#dbeafe;font-weight:700}.canHistoryDetails .canTableWrap{margin-top:0;border-left:0;border-right:0;border-bottom:0;border-radius:0}.headerActions{display:flex;align-items:center;gap:12px}.secondaryBtn{border:1px solid rgba(148,163,184,.35);background:#0f172aa6;color:#e5edff;border-radius:10px;padding:8px 12px;cursor:pointer;font-weight:700}.secondaryBtn:hover:not(:disabled){border-color:#60a5fab3;background:#1e293bd9}.secondaryBtn:disabled{opacity:.55;cursor:not-allowed}.telemetryMetaGrid{display:grid;grid-template-columns:repeat(3,minmax(220px,1fr));gap:10px 20px;margin-top:14px;padding:14px;border-radius:16px;background:#02061747;border:1px solid var(--border)}.gnssDataTile em{display:block;margin:-4px 0 8px;color:var(--muted);font-style:normal;font-size:11px}.gnssDataTile small{display:block;margin-top:8px;color:var(--muted);font-size:11px}.courseTile{min-height:142px}.courseContent{display:flex;align-items:center;justify-content:space-between;gap:12px}.courseContent b{display:block;margin-top:4px;color:var(--muted);font-size:13px}.miniCompass{position:relative;width:82px;height:82px;flex:0 0 82px;border-radius:50%;border:1px solid rgba(148,163,184,.45);background:radial-gradient(circle,#3b82f62e,#02061759)}.compassN,.compassE,.compassS,.compassW{position:absolute;color:var(--muted);font-size:10px;font-weight:800}.compassN{top:5px;left:50%;transform:translate(-50%)}.compassE{right:6px;top:50%;transform:translateY(-50%)}.compassS{bottom:5px;left:50%;transform:translate(-50%)}.compassW{left:6px;top:50%;transform:translateY(-50%)}.navTriangle{position:absolute;left:50%;top:50%;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:32px solid #60a5fa;transform-origin:50% 75%;filter:drop-shadow(0 0 8px rgba(96,165,250,.45));transition:transform .24s ease}@media (max-width: 980px){.telemetryMetaGrid{grid-template-columns:1fr}}.logPageGrid{display:grid;grid-template-columns:360px 1fr;gap:18px;align-items:start}.logSummaryGrid{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:10px 18px;margin:12px 0 18px;padding:14px;border-radius:16px;background:#02061747;border:1px solid var(--border)}.logTableWrap{overflow-x:auto;border:1px solid var(--border);border-radius:14px;background:#02061740}.logTable td:first-child{display:flex;align-items:center;gap:8px;font-weight:700}.uploadList{display:grid;gap:10px}.uploadCard{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px;border-radius:14px;border:1px solid var(--border);background:#0f172a7a}.uploadCard strong,.uploadCard small,.uploadCard p{display:block}.uploadCard small,.uploadCard p{color:var(--muted);margin-top:4px}.linkBtn{text-decoration:none;white-space:nowrap}@media (max-width: 1100px){.logPageGrid,.logSummaryGrid{grid-template-columns:1fr}.uploadCard{align-items:flex-start;flex-direction:column}}.uploadCard{align-items:stretch;overflow:hidden}.uploadCardMain{min-width:0;width:100%}.uploadCardHeader{display:flex;align-items:center;justify-content:space-between;gap:16px;min-width:0}.uploadCardHeader>div{min-width:0}.uploadCardHeader strong,.uploadCardHeader small{overflow-wrap:anywhere;word-break:break-word}.logPreviewBox{margin-top:12px;border:1px solid rgba(148,163,184,.22);border-radius:12px;background:#02061761;overflow:hidden}.logPreviewTitle{padding:8px 10px;color:#93c5fd;font-size:12px;font-weight:800;border-bottom:1px solid rgba(148,163,184,.16)}.logPreviewBox pre{margin:0;padding:10px;max-height:260px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;color:#dbeafe;font-size:12px;line-height:1.45}.mutedSubtext{display:block;color:var(--muted);margin-top:2px}.doDebugLine{margin-top:10px}.canToolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0 8px}.canSearchInput{min-width:min(420px,100%);flex:1;border:1px solid rgba(148,163,184,.25);background:#0206178c;color:#dbeafe;border-radius:12px;padding:10px 12px;outline:none}.canSearchInput:focus{border-color:#60a5fabf;box-shadow:0 0 0 3px #60a5fa1f}.filterBtn{border:1px solid rgba(148,163,184,.35);background:#0f172aa6;color:#cbd5e1;border-radius:999px;padding:9px 12px;cursor:pointer;font-weight:700}.filterBtn.active{border-color:#60a5facc;background:#3b82f647;color:#eff6ff}.canTableStable{max-height:680px;overflow:auto}.canTableStable thead th{position:sticky;top:0;z-index:1}.canTableMeta{margin-top:8px;color:var(--muted);font-size:12px}.fullWidthPanel{grid-column:1 / -1}.healthMetricGrid{margin-top:14px}.textInput{width:100%;box-sizing:border-box;border:1px solid rgba(148,163,184,.35);border-radius:12px;padding:12px 14px;background:#0f172a8c;color:inherit;font:inherit;outline:none}.textInput:focus{border-color:#3b82f6bf}.canFreshnessBadge{display:inline-flex;align-items:center;justify-content:center;min-width:64px;padding:4px 8px;border-radius:999px;font-size:12px;font-weight:800;border:1px solid rgba(148,163,184,.22)}.canFreshnessLatest{color:#bbf7d0;background:#16a34a2e;border-color:#22c55e6b}.canFreshnessOld{color:#fde68a;background:#f59e0b29;border-color:#f59e0b6b}.canFreshnessUnknown{color:#cbd5e1;background:#94a3b81f}.canFaultCell{max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#cbd5e1;font-size:12px}.fieldUpdated{display:block;margin-top:4px;color:var(--muted);font-size:11px;font-weight:500}.infoRow .fieldUpdated{margin-top:2px}
