:root{--indigo-500: #3B5BFF;--indigo-600: #2E48E0;--indigo-700: #1F37BD;--indigo-100: #E6EAFF;--indigo-050: #F2F5FF;--bg-base: #FBFCFE;--bg-panel: #F4F6FB;--bg-card: #FFFFFF;--bg-tint: #EEF1F7;--ink-900: #0B1020;--ink-700: #2A3247;--ink-500: #5A647D;--ink-300: #8FA1BD;--ink-200: #C5CCDD;--ink-100: #E4E8F0;--ok: #10B981;--ok-bg: #DCFCE7;--warn: #B45309;--warn-bg: #FEF3C7;--crit: #B91C1C;--crit-bg: #FEE2E2;--info: #1D4ED8;--info-bg: #DBEAFE;--shadow-sm: 0 1px 2px rgba(11,16,32,.04), 0 1px 1px rgba(11,16,32,.03);--shadow-md: 0 4px 14px rgba(11,16,32,.06), 0 2px 4px rgba(11,16,32,.03);--shadow-lg: 0 18px 48px rgba(11,16,32,.1), 0 4px 12px rgba(11,16,32,.04);--r-xs: 4px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--ease: cubic-bezier(.2,.8,.2,1)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg-base);color:var(--ink-900);font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.55;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4{font-family:Geist,Inter,sans-serif;letter-spacing:-.015em;color:var(--ink-900);margin:0}.mono{font-family:Geist Mono,ui-monospace,Cascadia Mono,Menlo,monospace;font-feature-settings:"tnum" on,"zero" on}.muted{color:var(--ink-500)}.dim{color:var(--ink-300)}.small{font-size:12px}a{color:var(--indigo-500);text-decoration:none}a:hover{color:var(--indigo-600);text-decoration:underline}code{font-family:Geist Mono,ui-monospace,monospace;background:var(--bg-panel);color:var(--ink-700);padding:1px 6px;border-radius:var(--r-xs);font-size:12.5px}.app{display:grid;grid-template-columns:232px 1fr;min-height:100vh}.sidebar{background:var(--bg-card);border-right:1px solid var(--ink-100);padding:22px 16px 18px;display:flex;flex-direction:column;gap:24px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;padding:2px 8px}.brand-mark{flex-shrink:0}.brand-text{font-family:Geist,sans-serif;font-weight:500;font-size:18px;letter-spacing:-.02em;color:var(--ink-900)}.brand-tag{margin-left:auto;font-family:Geist Mono,monospace;font-size:10px;font-weight:500;color:var(--indigo-600);background:var(--indigo-050);border:1px solid var(--indigo-100);padding:2px 6px;border-radius:var(--r-xs);text-transform:uppercase;letter-spacing:.5px}.sidebar nav{display:flex;flex-direction:column;gap:2px}.nav-section-label{font-family:Geist Mono,monospace;font-size:10px;font-weight:500;color:var(--ink-300);text-transform:uppercase;letter-spacing:.8px;padding:8px 10px 6px}.nav-link{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-sm);font-size:13.5px;font-weight:500;color:var(--ink-700);transition:background .15s var(--ease),color .15s var(--ease)}.nav-link:hover{background:var(--bg-panel);color:var(--ink-900);text-decoration:none}.nav-link.active{background:var(--indigo-050);color:var(--indigo-600)}.nav-link .nav-icon{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;color:currentColor;opacity:.9}.sidebar-foot{margin-top:auto;padding:12px;background:var(--bg-panel);border-radius:var(--r-md);border:1px solid var(--ink-100);display:flex;flex-direction:column;gap:6px}.sidebar-foot .device-row{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-700);font-weight:500}.sidebar-foot .device-sub{font-family:Geist Mono,monospace;font-size:10.5px;color:var(--ink-500);letter-spacing:.2px}.content{padding:28px 36px 64px;max-width:1280px;width:100%}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--ink-100)}.page-header h1{font-size:24px;font-weight:600;margin:0 0 4px}.page-header .desc{color:var(--ink-500);font-size:13.5px;max-width:640px}.page-header .actions{display:flex;gap:8px;flex-shrink:0}.section-label{font-family:Geist Mono,monospace;font-size:11px;font-weight:500;color:var(--ink-500);text-transform:uppercase;letter-spacing:.8px;margin:28px 0 12px;display:flex;align-items:center;gap:10px}.section-label:after{content:"";flex:1;height:1px;background:var(--ink-100)}.card{background:var(--bg-card);border:1px solid var(--ink-100);border-radius:var(--r-md);box-shadow:var(--shadow-sm)}.card-header{padding:16px 20px;border-bottom:1px solid var(--ink-100);display:flex;align-items:center;justify-content:space-between;gap:12px}.card-header h3{font-size:14.5px;font-weight:600}.card-header .card-sub{color:var(--ink-500);font-size:12.5px}.card-body{padding:20px}.card-body.flush{padding:0}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:28px}@media(max-width:1100px){.stat-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.stat-grid{grid-template-columns:1fr}}.stat{background:var(--bg-card);border:1px solid var(--ink-100);border-radius:var(--r-md);padding:16px 18px;display:flex;flex-direction:column;gap:8px;position:relative;transition:box-shadow .2s var(--ease),border-color .2s var(--ease)}.stat:hover{box-shadow:var(--shadow-sm);border-color:var(--ink-200)}.stat.primary{background:linear-gradient(180deg,var(--indigo-050) 0%,var(--bg-card) 100%);border-color:var(--indigo-100)}.stat-label{font-size:12px;font-weight:500;color:var(--ink-500);display:flex;align-items:center;gap:6px}.stat-label .stat-icon{width:14px;height:14px;color:var(--ink-300)}.stat.primary .stat-label .stat-icon{color:var(--indigo-500)}.stat-value{font-family:Geist,sans-serif;font-weight:600;font-size:28px;line-height:1.1;color:var(--ink-900);letter-spacing:-.02em;font-feature-settings:"tnum" on}.stat-value .unit{font-family:Inter,sans-serif;font-weight:500;font-size:14px;color:var(--ink-500);margin-left:4px}.stat-foot{font-family:Geist Mono,monospace;font-size:11px;color:var(--ink-500);letter-spacing:.2px}.table-wrap{background:var(--bg-card);border:1px solid var(--ink-100);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow-sm)}.data-table{width:100%;border-collapse:collapse;font-size:13.5px}.data-table th{text-align:left;padding:12px 16px;font-family:Inter,sans-serif;font-weight:500;font-size:11.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-500);background:var(--bg-panel);border-bottom:1px solid var(--ink-100);white-space:nowrap}.data-table th.num{text-align:right}.data-table td{padding:14px 16px;border-bottom:1px solid var(--ink-100);color:var(--ink-700);vertical-align:middle}.data-table tr:last-child td{border-bottom:none}.data-table tbody tr{transition:background .12s var(--ease)}.data-table tbody tr:hover{background:var(--bg-panel)}.data-table td.num,.data-table td.mono{font-family:Geist Mono,monospace;font-feature-settings:"tnum" on}.data-table td.num{text-align:right}.data-table td .sub{font-size:11.5px;color:var(--ink-500);margin-top:2px}.data-table td a{color:var(--indigo-600);font-weight:500}.data-table .id-cell{font-family:Geist Mono,monospace;font-size:12.5px;color:var(--ink-700)}.badge{display:inline-flex;align-items:center;gap:5px;font-family:Inter,sans-serif;font-weight:500;font-size:11.5px;padding:2px 8px;border-radius:999px;letter-spacing:.1px;white-space:nowrap}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.crit{background:var(--crit-bg);color:var(--crit)}.badge.info{background:var(--info-bg);color:var(--info)}.badge.muted{background:var(--bg-tint);color:var(--ink-500)}.badge.indigo{background:var(--indigo-050);color:var(--indigo-600)}.badge.outline{background:transparent;border:1px solid var(--ink-200);color:var(--ink-700)}.format-chip{display:inline-block;font-family:Geist Mono,monospace;font-size:10.5px;font-weight:500;padding:2px 6px;border-radius:var(--r-xs);background:var(--bg-panel);color:var(--ink-700);border:1px solid var(--ink-100);letter-spacing:.3px}.format-chip.ulog{color:var(--indigo-600);border-color:var(--indigo-100);background:var(--indigo-050)}.format-chip.kpp{color:var(--ok);border-color:var(--ok-bg);background:var(--ok-bg)}.format-chip.apm{color:var(--warn);border-color:var(--warn-bg);background:var(--warn-bg)}.signed-chip{display:inline-flex;align-items:center;gap:4px;font-family:Geist Mono,monospace;font-size:10.5px;font-weight:500;padding:2px 6px;border-radius:var(--r-xs);background:var(--indigo-050);color:var(--indigo-600);border:1px solid var(--indigo-100)}.signed-chip svg{width:11px;height:11px}.kv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0}@media(max-width:720px){.kv-grid{grid-template-columns:1fr}}.kv-row{display:grid;grid-template-columns:180px 1fr;gap:12px 20px;padding:12px 20px;border-bottom:1px solid var(--ink-100);align-items:baseline}.kv-row:nth-last-child(-n+2){border-bottom:none}@media(max-width:720px){.kv-row:nth-last-child(2){border-bottom:1px solid var(--ink-100)}}.kv-row>label{font-size:12px;font-weight:500;color:var(--ink-500)}.kv-row>.v{font-size:13.5px;color:var(--ink-900);word-break:break-word}.kv-row>.v.mono{font-family:Geist Mono,monospace;font-size:12.5px}.kv-row>.v.hash{font-family:Geist Mono,monospace;font-size:11.5px;color:var(--ink-500);word-break:break-all}.btn{display:inline-flex;align-items:center;gap:6px;font-family:Inter,sans-serif;font-weight:500;font-size:13px;padding:8px 14px;border-radius:var(--r-sm);border:1px solid transparent;cursor:pointer;transition:all .15s var(--ease);text-decoration:none;white-space:nowrap}.btn-primary{background:var(--indigo-500);color:#fff}.btn-primary:hover{background:var(--indigo-600);color:#fff;text-decoration:none}.btn-secondary{background:var(--bg-card);color:var(--ink-700);border-color:var(--ink-200)}.btn-secondary:hover{background:var(--bg-panel);color:var(--ink-900);border-color:var(--ink-300);text-decoration:none}.btn-ghost{background:transparent;color:var(--ink-500)}.btn-ghost:hover{color:var(--ink-900);text-decoration:none}.btn svg{width:14px;height:14px}.empty-state{background:var(--bg-card);border:1px dashed var(--ink-200);border-radius:var(--r-md);padding:48px 24px;text-align:center;color:var(--ink-500)}.empty-state .empty-icon{width:40px;height:40px;margin:0 auto 12px;background:var(--bg-panel);border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink-300)}.empty-state h4{font-size:15px;font-weight:600;color:var(--ink-900);margin:0 0 4px}.empty-state p{font-size:13px;color:var(--ink-500);max-width:380px;margin:0 auto}.loading{padding:40px 0;display:flex;align-items:center;justify-content:center;gap:10px;color:var(--ink-500);font-size:13px}.spinner{width:16px;height:16px;border:2px solid var(--ink-100);border-top-color:var(--indigo-500);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.err{background:var(--crit-bg);border:1px solid #FCA5A5;color:var(--crit);padding:14px 16px;border-radius:var(--r-md);font-size:13px;margin:14px 0}.err b{color:#7f1d1d;font-weight:600}.err code{background:#7f1d1d14;color:var(--crit)}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}.toolbar .count{font-family:Geist Mono,monospace;font-size:12px;color:var(--ink-500)}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}@media(max-width:900px){.grid-2{grid-template-columns:1fr}}.grid-3{display:grid;grid-template-columns:2fr 1fr;gap:14px}@media(max-width:900px){.grid-3{grid-template-columns:1fr}}.map-frame{position:relative;width:100%;height:calc(100vh - 220px);min-height:480px;background:var(--bg-card);border:1px solid var(--ink-100);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow-sm)}.map-frame .cesium-viewer-bottom{bottom:6px!important;left:10px!important}.map-frame .cesium-credit-textContainer,.map-frame .cesium-credit-logoContainer{font-family:Inter,sans-serif!important;font-size:10px!important;color:var(--ink-300)!important}.map-frame .cesium-viewer-toolbar{top:12px!important;right:12px!important}.map-frame .cesium-button{background:#ffffffeb!important;border:1px solid var(--ink-100)!important;color:var(--ink-700)!important;border-radius:var(--r-sm)!important}.map-frame .cesium-button:hover{background:var(--bg-card)!important;color:var(--indigo-600)!important;border-color:var(--ink-200)!important}.back-link{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-500);margin-bottom:12px;font-weight:500}.back-link:hover{color:var(--ink-900);text-decoration:none}.back-link svg{width:14px;height:14px}
