*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}:root,[data-theme=dark]{--bg-base:#060b12;--bg-surface:#0f1620;--bg-surface-hover:#16202e;--bg-inset:#0b121b;--bg-overlay:#000000b3;--text-primary:#e6f1f5;--text-secondary:#aab8c4;--text-muted:#6b7c8c;--text-faint:#455563;--border:#ffffff14;--border-light:#ffffff24;--accent:#06b6d4;--accent-hover:#22d3ee;--accent-contrast:#04141a;--accent-soft:#06b6d42e;--success:#34d399;--success-hover:#6ee7b7;--success-bg:#34d3991f;--warning:#fbbf24;--text-on-warning:#1f2937;--warning-bg:#fbbf241f;--danger:#f87171;--danger-bg:#f871711f;--info:#38bdf8;--json-key:#22d3ee;--json-string:#34d399;--json-number:#fbbf24;--json-boolean:#c4b5fd;--json-null:#6b7c8c;--shadow:0 8px 30px #0006}[data-theme=light]{--bg-base:#eef4f7;--bg-surface:#fff;--bg-surface-hover:#f1f6f9;--bg-inset:#f4f8fa;--bg-overlay:#0f172a4d;--text-primary:#0f2230;--text-secondary:#36505f;--text-muted:#6b8190;--text-faint:#9fb1bd;--border:#0f22301a;--border-light:#0f223029;--accent:#0891b2;--accent-hover:#06b6d4;--accent-contrast:#fff;--accent-soft:#0891b224;--success:#059669;--success-hover:#10b981;--success-bg:#0596691a;--warning:#d97706;--text-on-warning:#1f2937;--warning-bg:#d977061a;--danger:#dc2626;--danger-bg:#dc26261a;--info:#0284c7;--json-key:#0891b2;--json-string:#059669;--json-number:#d97706;--json-boolean:#7c3aed;--json-null:#9fb1bd;--shadow:0 8px 30px #0f22301f}body{color:var(--text-primary);background:var(--bg-base);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans SC,sans-serif;font-size:14px;line-height:1.6;transition:background .2s,color .2s}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{background:var(--bg-surface);color:var(--text-primary);border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:10px 24px;display:flex}.app-header h1{white-space:nowrap;font-size:18px;font-weight:600}.app-header-left{align-items:center;gap:16px;display:flex}.back-link{color:var(--text-secondary);font-size:13px;text-decoration:none;transition:color .2s}.back-link:hover{color:var(--accent)}.app-header-right{align-items:center;gap:12px;display:flex}.theme-toggle{background:var(--bg-inset);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;width:36px;height:36px;font-size:18px;transition:all .2s;display:flex}.theme-toggle:hover{border-color:var(--accent);background:var(--bg-surface-hover)}.app-nav{background:var(--bg-surface);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;padding:0 24px;display:flex}.app-nav a{color:var(--text-muted);border-bottom:2px solid #0000;padding:10px 16px;font-size:13px;text-decoration:none;transition:all .2s}.app-nav a:hover{color:var(--text-primary);background:var(--bg-surface-hover)}.app-nav a.router-link-active{color:var(--accent);border-bottom-color:var(--accent);background:var(--bg-surface-hover)}.app-main{flex:1;width:100%;max-width:1600px;margin:0 auto;padding:20px 24px}.app-full{flex:1}.card{background:var(--bg-surface);box-shadow:var(--shadow);border:1px solid var(--border);border-radius:12px}.btn{cursor:pointer;white-space:nowrap;border:none;border-radius:8px;align-items:center;gap:6px;padding:6px 16px;font-size:13px;transition:all .15s;display:inline-flex}.btn-primary{background:var(--accent);color:var(--accent-contrast)}.btn-primary:hover{background:var(--accent-hover)}.btn-success{background:var(--success);color:var(--bg-base)}.btn-success:hover{background:var(--success-hover)}.btn-warning{background:var(--warning);color:var(--bg-base)}.btn-danger{background:var(--danger);color:var(--bg-base)}.btn-secondary{background:var(--text-faint);color:var(--text-primary)}.btn-secondary:hover{background:var(--text-muted)}.btn-sm{padding:4px 10px;font-size:12px}.btn-lg{padding:12px 32px;font-size:16px}.btn:disabled{opacity:.5;cursor:not-allowed}textarea,input,select{font-family:inherit}textarea{border:1px solid var(--border);resize:vertical;background:var(--bg-inset);width:100%;color:var(--text-primary);border-radius:8px;outline:none;padding:8px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:12px}textarea:focus{border-color:var(--accent)}input,select{background:var(--bg-inset);border:1px solid var(--border);color:var(--text-primary);border-radius:8px;outline:none;padding:6px 10px;font-size:13px}input:focus,select:focus{border-color:var(--accent)}input::placeholder{color:var(--text-faint)}.badge{border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.badge-success{background:var(--success-bg);color:var(--success)}.badge-danger{background:var(--danger-bg);color:var(--danger)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-info{color:var(--info);background:#89dceb1a}.badge-secondary{background:var(--bg-inset);color:var(--text-muted)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-inset)}::-webkit-scrollbar-thumb{background:var(--border-light);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.map-popup-alarm,.map-popup-alarm .mapboxgl-popup-content{box-shadow:none!important;background:0 0!important}.map-popup-alarm .mapboxgl-popup-content{border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.35;box-shadow:0 8px 24px #00000059;background:var(--bg-surface)!important;color:var(--text-primary)!important}:is(.map-popup-alarm.mapboxgl-popup-anchor-top,.map-popup-alarm.mapboxgl-popup-anchor-top-left,.map-popup-alarm.mapboxgl-popup-anchor-top-right) .mapboxgl-popup-tip{border-bottom-color:var(--bg-surface)}:is(.map-popup-alarm.mapboxgl-popup-anchor-bottom,.map-popup-alarm.mapboxgl-popup-anchor-bottom-left,.map-popup-alarm.mapboxgl-popup-anchor-bottom-right) .mapboxgl-popup-tip{border-top-color:var(--bg-surface)}.map-popup-alarm.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{border-right-color:var(--bg-surface)}.map-popup-alarm.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{border-left-color:var(--bg-surface)}.map-popup-alarm .mapboxgl-popup-close-button{display:none!important}
