#mapBg{position:fixed;inset:0;z-index:1;background:var(--panel);overflow:hidden;cursor:grab;touch-action:none;user-select:none}
#mapBg.dragging{cursor:grabbing}
#mapViewport{position:absolute;top:0;left:0;width:1600px;height:1013px;transform-origin:0 0}
#mapViewport.dragging{will-change:transform}
#worldSvg{display:block;width:100%;height:100%;pointer-events:auto;shape-rendering:geometricPrecision;text-rendering:geometricPrecision}
.region{cursor:pointer;transition:filter .18s,opacity .18s}.region:hover{filter:brightness(1.16)}
.region.future{opacity:.26}.region.focused{filter:brightness(1.22);stroke-width:2.4}
.region-label{font-family:"PingFang SC","Microsoft YaHei",sans-serif;text-anchor:middle;fill:#5a6572;letter-spacing:4px;pointer-events:none}
.marker{cursor:pointer;transition:opacity .2s}.marker.future{opacity:.17}.marker-ended{opacity:.48}.marker circle.dot{fill:currentColor;stroke:#0e1116;stroke-width:2;transition:r .15s,stroke-width .15s,filter .15s}.marker circle.halo{fill:currentColor;opacity:.16;pointer-events:none}.marker:hover circle.dot{r:9;stroke:var(--gold);stroke-width:3;filter:drop-shadow(0 0 8px currentColor)}.marker.selected circle.dot{r:9;stroke:var(--gold);stroke-width:3;filter:drop-shadow(0 0 8px currentColor)}
.marker text{font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-size:12px;fill:#c9d1d9;text-anchor:middle;pointer-events:none;paint-order:stroke fill;stroke:#0e1116;stroke-width:2.5px;stroke-linejoin:round;stroke-linecap:round}
.marker .marker-state{font-size:8px;fill:#7f8a96;stroke-width:2px}
.location-pulse{fill:none;stroke:currentColor;opacity:.45;stroke-width:1;animation:mapPulse 1.8s ease-out infinite}@keyframes mapPulse{0%{r:8;opacity:.55}100%{r:17;opacity:0}}
.map-highlight{animation:highlight 1.1s ease-in-out infinite alternate}@keyframes highlight{from{filter:drop-shadow(0 0 3px currentColor)}to{filter:drop-shadow(0 0 12px currentColor)}}
.map-region-tooltip{font-size:11px;fill:#aeb8c4;pointer-events:none}
