:root{--bg:#fff;--fg:#111827;--muted:#6b7280;--border:#e5e7eb;--accent:#2563eb;--accent2:#dc2626}*{box-sizing:border-box}body,html{padding:0;margin:0;background:var(--bg);color:var(--fg);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,Apple Color Emoji,Segoe UI Emoji}a{color:inherit;text-decoration:none}.container{max-width:1200px;margin:0 auto;padding:18px}.h1{font-size:22px;font-weight:900;margin:0}.sub{margin-top:8px;font-size:13px;color:var(--muted);line-height:1.6}.grid{display:grid;grid-template-columns:320px 1fr 340px;grid-gap:16px;gap:16px;margin-top:14px}@media (max-width:980px){.grid{grid-template-columns:1fr}}.card{border:1px solid var(--border);border-radius:12px;background:#fff;overflow:hidden}.toolbar{padding:12px;border-bottom:1px solid var(--border);display:flex;gap:10px;align-items:center;flex-wrap:wrap}.input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;font-size:14px;outline:none}.pill{padding:6px 10px;border:1px solid var(--border);border-radius:999px;font-size:12px;background:#fff;cursor:pointer}.pill.active{border-color:var(--accent);color:var(--accent)}.list{max-height:72vh;overflow:auto}.item{padding:10px 12px;border-top:1px solid var(--border);cursor:pointer}.item:hover{background:#f9fafb}.item.active{background:#eff6ff;border-left:3px solid var(--accent);padding-left:9px}.itemTitle{font-weight:700;font-size:14px}.itemMeta{margin-top:4px;font-size:12px;color:var(--muted)}.mapWrap{padding:12px}.legend{margin-top:10px;font-size:12px;color:var(--muted);line-height:1.6}.info{padding:12px}.badge{display:inline-block;font-size:12px;padding:3px 8px;border-radius:999px;border:1px solid var(--border);margin-right:8px}.kv{margin-top:10px}.k{font-size:12px;color:var(--muted);margin-bottom:4px}.v{font-size:14px;line-height:1.6}svg{width:100%;height:auto}.point{fill:var(--accent2);opacity:.85;cursor:pointer}.point:hover{opacity:1}.point.selected{fill:var(--accent);opacity:1}.pointRing{fill:none;stroke:var(--accent);stroke-width:2;opacity:.9;pointer-events:none}