:root{--bg: #060914;--bg-card: #0d1326;--bg-card2: #111828;--border: rgba(100, 180, 255, .12);--accent: #4fc3f7;--accent2: #00bcd4;--green: #66bb6a;--amber: #ffa726;--red: #ef5350;--text: #e8eaf6;--text-sub: #90a4ae;--text-muted: #546e7a;--radius: 14px;--radius-sm: 8px;--header-h: 60px;--sidebar-w: 300px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:15px}.vm-header{height:var(--header-h);background:#060914eb;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:fixed;top:0;left:0;right:0;z-index:900}.vm-header-inner{display:flex;align-items:center;gap:16px;height:100%;padding:0 20px}.back-link{color:var(--text-muted);text-decoration:none;font-size:.85rem;white-space:nowrap;transition:color .2s}.back-link:hover{color:var(--accent)}.vm-header-title{flex:1}.vm-header-title h1{font-size:1.05rem;font-weight:700;color:var(--text);line-height:1.1}.vm-header-sub{font-size:.72rem;color:var(--text-muted);margin-top:1px}.vm-header-actions{display:flex;gap:10px}.vm-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:var(--radius-sm);cursor:pointer;font-family:inherit;font-size:.85rem;font-weight:600;padding:8px 16px;transition:opacity .2s,background .2s;text-decoration:none}.vm-btn--primary{background:var(--accent2);color:#000}.vm-btn--primary:hover{opacity:.88}.vm-btn--ghost{background:transparent;border:1px solid var(--border);color:var(--text-muted)}.vm-btn--ghost:hover{border-color:var(--red);color:var(--red)}.vm-btn--full{width:100%;margin-top:4px}.vm-link-btn{background:none;border:none;color:var(--accent);cursor:pointer;font-family:inherit;font-size:.85rem;text-decoration:underline}.vm-link-btn:hover{opacity:.8}.vm-upload-overlay{position:fixed;top:var(--header-h);left:0;right:0;bottom:0;z-index:500;display:flex;align-items:center;justify-content:center;padding:24px 20px;background:#0609148c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:opacity .25s}.vm-upload-overlay.hidden{opacity:0;pointer-events:none}.vm-upload-card{position:relative;background:var(--bg-card);border:2px dashed var(--border);border-radius:var(--radius);padding:52px 40px;text-align:center;max-width:500px;width:100%;transition:border-color .2s,background .2s}.vm-upload-card.drag-over{border-color:var(--accent);background:#4fc3f70f}.vm-upload-dismiss{position:absolute;top:12px;right:12px;background:none;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;padding:5px 9px;border-radius:var(--radius-sm);line-height:1;transition:color .2s,background .2s}.vm-upload-dismiss:hover{color:var(--text);background:#ffffff12}.vm-upload-icon{font-size:3rem;margin-bottom:16px}.vm-upload-card h2{font-size:1.35rem;font-weight:700;color:var(--text);margin-bottom:12px}.vm-upload-hint{font-size:.88rem;color:var(--text-sub);line-height:1.6;margin-bottom:24px}.vm-upload-hint strong{color:var(--accent)}#fileInput{display:none}.vm-upload-example{margin-top:20px;font-size:.82rem;color:var(--text-muted)}.vm-sidebar{position:fixed;top:var(--header-h);left:0;bottom:0;width:var(--sidebar-w);z-index:100;background:var(--bg-card);border-right:1px solid var(--border);overflow-y:auto;transform:translate(calc(-1 * var(--sidebar-w)));transition:transform .3s cubic-bezier(.4,0,.2,1);box-shadow:4px 0 24px #00000080}.vm-sidebar.is-open{transform:translate(0)}.vm-sidebar-inner{padding:20px 16px;display:flex;flex-direction:column;gap:16px}.vm-panel{background:var(--bg-card2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px 14px 16px}.vm-panel-title{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);margin-bottom:12px}.vm-file-name{font-size:.88rem;color:var(--text);font-weight:600;word-break:break-all;margin-bottom:4px}.vm-file-meta{font-size:.78rem;color:var(--text-muted)}.vm-field-group{margin-bottom:12px}.vm-label{display:block;font-size:.75rem;font-weight:600;color:var(--text-sub);margin-bottom:5px}.vm-optional{font-weight:400;color:var(--text-muted)}.vm-select{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:inherit;font-size:.85rem;padding:7px 10px;outline:none;cursor:pointer;transition:border-color .2s}.vm-select:focus{border-color:var(--accent)}.vm-select option{background:var(--bg-card2)}.vm-plot-msg{font-size:.78rem;color:var(--red);min-height:16px;margin-top:8px}.vm-geo-src-note{font-size:.8rem;color:var(--accent);background:#4fc3f714;border:1px solid rgba(79,195,247,.2);border-radius:var(--radius-sm);padding:7px 10px;margin-bottom:12px;line-height:1.4}.vm-stats-row{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}.vm-stat-val{font-size:1.3rem;font-weight:800;color:var(--text);min-width:42px}.vm-stat-good{color:var(--green)}.vm-stat-warn{color:var(--amber)}.vm-stat-lbl{font-size:.78rem;color:var(--text-muted)}.vm-filter-group{border-bottom:1px solid var(--border);padding-bottom:12px;margin-bottom:12px}.vm-filter-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.vm-filter-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}.vm-filter-col-name{font-size:.75rem;font-weight:600;color:var(--text-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:165px}.vm-filter-toggle{font-size:.7rem;color:var(--text-muted);white-space:nowrap;flex-shrink:0;padding:0}.vm-filter-search{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:inherit;font-size:.8rem;padding:5px 8px;outline:none;margin-bottom:6px}.vm-filter-search:focus{border-color:var(--accent)}.vm-filter-cat-list{display:flex;flex-direction:column;gap:3px;max-height:160px;overflow-y:auto;padding-right:2px}.vm-filter-item{display:flex;align-items:center;gap:7px;font-size:.8rem;color:var(--text-sub);cursor:pointer;padding:3px 5px;border-radius:4px;transition:background .15s}.vm-filter-item:hover{background:#ffffff0d}.vm-filter-item input{accent-color:var(--accent);cursor:pointer;flex-shrink:0;margin:0}.vm-filter-range-row{display:flex;align-items:center;gap:6px}.vm-filter-num{flex:1;min-width:0;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:inherit;font-size:.82rem;padding:5px 7px;outline:none}.vm-filter-num:focus{border-color:var(--accent)}.vm-filter-num::-webkit-inner-spin-button,.vm-filter-num::-webkit-outer-spin-button{opacity:.5}.vm-filter-range-sep{color:var(--text-muted);font-size:.85rem;flex-shrink:0}.vm-color-legend{margin-top:8px;display:flex;flex-direction:column;gap:4px}.vm-legend-item{display:flex;align-items:center;gap:8px;font-size:.8rem;color:var(--text-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vm-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;border:1px solid rgba(0,0,0,.3)}.vm-legend-more{font-size:.72rem;color:var(--text-muted);margin-top:2px}.vm-legend-gradient{height:12px;border-radius:6px;background:linear-gradient(to right,#4fc3f7,#ffa726,#ef5350);margin-top:4px}.vm-legend-gradient-labels{display:flex;justify-content:space-between;font-size:.72rem;color:var(--text-muted);margin-top:3px}.vm-map-wrap{position:fixed;top:var(--header-h);left:0;right:0;bottom:0;z-index:1}#map{width:100%;height:100%;background:#0c1527}.vm-map-hint{position:absolute;bottom:28px;left:50%;transform:translate(-50%);background:#0d1326eb;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-sub);font-size:.82rem;padding:9px 18px;pointer-events:none;white-space:nowrap;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:opacity .35s}.vm-map-hint.hidden{opacity:0}.leaflet-control-layers{background:#0d1326f0!important;border:1px solid var(--border)!important;border-radius:var(--radius-sm)!important;box-shadow:0 4px 20px #0009!important;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.leaflet-control-layers-toggle{background-color:#0d1326f0!important;border:1px solid var(--border)!important;border-radius:var(--radius-sm)!important;width:34px!important;height:34px!important;background-size:18px!important;filter:invert(1) brightness(.7)}.leaflet-control-layers-expanded{padding:10px 14px!important;min-width:170px}.leaflet-control-layers label{color:var(--text-sub)!important;font-size:.83rem!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important;display:flex;align-items:center;gap:7px;margin-bottom:4px;cursor:pointer}.leaflet-control-layers label:last-child{margin-bottom:0}.leaflet-control-layers label:hover{color:var(--text)!important}.leaflet-control-layers input[type=radio]{accentColor:var(--accent);margin:0;cursor:pointer}.leaflet-control-layers-separator{border-top:1px solid var(--border)!important;margin:6px 0!important}.leaflet-popup-content-wrapper{background:var(--bg-card)!important;color:var(--text)!important;border:1px solid var(--border)!important;border-radius:var(--radius-sm)!important;box-shadow:0 8px 32px #000000b3!important}.leaflet-popup-tip{background:var(--bg-card)!important}.leaflet-popup-close-button{color:var(--text-muted)!important}.leaflet-popup-close-button:hover{color:var(--text)!important}.vm-popup-label{font-size:.95rem;font-weight:700;color:var(--accent);margin-bottom:8px}.vm-popup-table{font-size:.78rem;border-collapse:collapse;width:100%}.vm-popup-table tr:not(:last-child) td{padding-bottom:4px}.vm-popup-table td:first-child{color:var(--text-muted);padding-right:10px;white-space:nowrap;font-weight:600}.vm-popup-table td:last-child{color:var(--text-sub);word-break:break-word}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#4fc3f733;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#4fc3f766}@media (max-width: 680px){:root{--sidebar-w: 100%}.vm-app{flex-direction:column;height:auto;min-height:calc(100vh - var(--header-h))}.vm-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border);overflow-y:visible}.vm-map-wrap{height:60vw;min-height:280px}}
