html,body{margin:0;height:100%;background:#0d1014;color:#d7dde5;font-family:system-ui,-apple-system,IBM Plex Sans,sans-serif;overflow:hidden}.mono{font-family:ui-monospace,IBM Plex Mono,Cascadia Code,SF Mono,monospace}#map-root{display:flex;flex-direction:column;height:100%;min-height:100%}.map-app{display:flex;flex-direction:column;height:100%;min-height:0}.map-topbar{display:flex;align-items:center;gap:1.125rem;flex-shrink:0;padding:.625rem 1.125rem;background:#12161c;border-bottom:1px solid #232a33}.map-title-block{display:flex;flex-direction:column;line-height:1.15}.map-title{margin:0;font-size:.9375rem;font-weight:700;letter-spacing:.02em;color:#f0e3c8}.map-subtitle{margin:0;font-size:.6875rem;color:#7b8794;letter-spacing:.04em}.map-topbar-spacer{flex:1}.map-cursor{font-family:ui-monospace,IBM Plex Mono,Cascadia Code,SF Mono,monospace;font-size:.75rem;color:#9fb0c0;background:#0d1014;border:1px solid #232a33;border-radius:6px;padding:.375rem .625rem;min-width:9.375rem;text-align:center}.map-origin-measure{font-family:ui-monospace,IBM Plex Mono,Cascadia Code,SF Mono,monospace;font-size:.75rem;color:#5a8fd4;min-width:8rem;text-align:right}.map-zoom-controls{display:flex;gap:.375rem}.map-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #2a323d;background:#1b212a;color:#d7dde5;border-radius:6px;padding:0 .875rem;height:2.125rem;font-size:.75rem;font-weight:600;cursor:pointer;line-height:1.4;text-decoration:none;display:inline-flex;align-items:center}.map-btn-icon{width:2.125rem;padding:0;font-size:1.125rem}.map-btn:hover{background:#232c37}.map-body{display:flex;flex:1;min-height:0}.map-sidebar{flex-shrink:0;overflow-y:auto;padding:.875rem;background:#12161c}.map-sidebar-left{width:236px;border-right:1px solid #232a33}.map-sidebar-right{width:316px;border-left:1px solid #232a33}.map-section-title{font-size:.6875rem;font-weight:700;letter-spacing:.08em;color:#7b8794;margin-bottom:.5rem;margin-top:1.25rem}.map-section-title:first-child{margin-top:0}.map-layer-list{display:flex;flex-direction:column;gap:.3125rem;margin-bottom:.25rem}.map-layer-btn{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4375rem .625rem;font-size:.78rem;font-weight:500;border-radius:6px;cursor:pointer;border:1px solid #232a33;background:#12161c;color:#7b8794;text-align:left}.map-layer-btn.is-on{border-color:#3a4a3a;background:#1a2a1e;color:#cfe6d2}.map-layer-btn:hover{filter:brightness(1.08)}.map-storyline-list{display:grid;gap:.35rem}.map-storyline{border:1px solid #232a33;border-radius:6px;background:#0f1319}.map-storyline summary{display:flex;justify-content:space-between;gap:.5rem;padding:.45rem .55rem;cursor:pointer;color:#d7dde5;font-size:.75rem;border-left:3px solid var(--storyline-color, #c9a24b)}.map-storyline-chapters{display:grid;gap:1px;padding:.25rem}.map-storyline-quest{border:0;border-radius:3px;background:transparent;color:#9fb0c0;cursor:pointer;font:inherit;font-size:.7rem;padding:.32rem;text-align:left}.map-storyline-quest:hover{background:#1b212a;color:#f0e3c8}.map-level-badge,.map-codex-level{color:#d8bb68;font:600 .65rem ui-monospace,monospace;white-space:nowrap}.map-layer-mark{font-size:.6875rem;opacity:.85}.map-legend-block{display:flex;flex-direction:column;gap:.375rem;margin-bottom:.25rem;font-size:.75rem}.map-legend-row{display:flex;align-items:center;gap:.5rem}.map-legend-muted{color:#9fb0c0}.map-legend-dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto}.map-legend-sq{width:11px;height:11px;border-radius:2px;flex:0 0 auto}.map-legend-diamond{transform:rotate(45deg)}.map-legend-line{width:16px;border-top:1.5px solid;flex:0 0 auto}.map-legend-line-dashed{border-top-style:dashed}.map-legend-footprint{width:14px;height:10px;border:1.4px solid;flex:0 0 auto}.map-legend-footprint-dashed{border-style:dashed}.map-legend-biomes{font-size:.72rem;gap:.3125rem}.map-detail{margin-bottom:1.125rem}.map-detail-empty-card{border:1px dashed #2a323d;border-radius:8px;padding:1rem;font-size:.78rem;color:#7b8794;line-height:1.5}.map-detail-card{border:1px solid #2a323d;border-radius:8px;padding:.875rem;background:#0f1319}.map-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem}.map-detail-title{font-size:1rem;font-weight:700;color:#f0e3c8;line-height:1.2}.map-detail-tag{font-size:.6875rem;letter-spacing:.05em;text-transform:uppercase;margin-top:.1875rem;font-weight:600}.map-clear-sel{background:none;border:none;color:#7b8794;font-size:1.125rem;cursor:pointer;line-height:1;padding:0;flex-shrink:0}.map-clear-sel:hover{color:#d7dde5}.map-detail-divider{height:1px;background:#232a33;margin:.75rem 0}.map-detail-grid{display:grid;grid-template-columns:auto 1fr;gap:.375rem .75rem;font-size:.78rem}.map-detail-key{color:#7b8794}.map-detail-val{color:#d7dde5;text-align:right}.map-detail-desc,.map-detail-quests{font-size:.78rem;line-height:1.5;color:#aeb9c5;margin-top:.75rem;border-top:1px solid #232a33;padding-top:.625rem}.map-detail-quests-title{font-size:.68rem;letter-spacing:.08em;color:#c9a24b;margin-bottom:.35rem}.map-detail-quests ul{margin:0;padding-left:1.1rem}.map-detail-quests li{margin:.15rem 0}.map-detail-quest{border:0;background:transparent;color:#d8bb68;cursor:pointer;font:inherit;padding:0;text-align:left}.map-detail-quest:hover{color:#f0e3c8;text-decoration:underline}.map-canvas-host{flex:1;min-width:0;min-height:0;position:relative;background:#080a0d;display:flex;align-items:center;justify-content:center}.map-svg{display:block;width:100%;height:100%;cursor:default;touch-action:none}.map-svg.is-panning{cursor:grabbing}.map-grid line{stroke:#ffffff0d;stroke-width:1;vector-effect:non-scaling-stroke}.map-grid-minor{stroke:#ffffff0d;stroke-width:1}.map-grid-major{stroke:#ffffff1f;stroke-width:1.5}.map-bounds{fill:none;stroke:#5a8fd440;stroke-width:2;vector-effect:non-scaling-stroke}.map-origin{fill:#5a8fd4;stroke:#e8edf2;stroke-width:1.5;vector-effect:non-scaling-stroke;pointer-events:none}.map-selection-ring{fill:none;stroke:#ffd77a;stroke-width:2;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;pointer-events:none}.map-hit-target{fill:transparent;stroke:none;pointer-events:all}.map-biome-region{pointer-events:none}.map-biome{stroke:#0003;stroke-width:1}.map-area,.map-area-dot{vector-effect:non-scaling-stroke}.map-area-safe .map-area{fill-opacity:.14}.map-scale-bar line{stroke:#d7dde5;stroke-width:2;vector-effect:non-scaling-stroke}.map-scale-bar text{fill:#d7dde5;font-size:12px;font-family:ui-monospace,IBM Plex Mono,Cascadia Code,SF Mono,monospace;text-anchor:middle;pointer-events:none}.map-road{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.map-road-cobble{stroke:#6a6152;stroke-opacity:.85}.map-road-dirt{stroke:#5a4a38;stroke-opacity:.8}.map-road-trail{stroke:#4a4436;stroke-opacity:.65;stroke-dasharray:4 3}.map-ring{fill:none;stroke-width:1.5;vector-effect:non-scaling-stroke;pointer-events:none}.map-ring-capital{fill:none;stroke:#e8b04b59;stroke-width:2;stroke-dasharray:6 4;vector-effect:non-scaling-stroke;pointer-events:none}.map-ring-threat-outer{stroke:#c4392f40}.map-ring-threat-mid{stroke:#c4392f66}.map-ring-threat-inner{stroke:#c4392f8c}.map-ring-aggro{fill:none;stroke:#d47a4a;stroke-width:.7;opacity:.5;vector-effect:non-scaling-stroke;pointer-events:none}.map-ring-leash{fill:none;stroke:#6b7683;stroke-width:.6;stroke-dasharray:3 3;opacity:.4;vector-effect:non-scaling-stroke;pointer-events:none}.map-building{fill:#c9a24b1a;stroke:#c9a24b;stroke-width:1.2;vector-effect:non-scaling-stroke}.map-building-yard{fill:none;stroke:#8b95a1;stroke-dasharray:4 3}.map-building-tent{fill:#c4392f1f;stroke:#c4392f}.map-building-tower{fill:#8ca0be8c;stroke:#8a9ab8}.map-building-arena{fill:#a08c6466;stroke:#b8a070}.map-mob{stroke:#0a0d11;stroke-width:.7;vector-effect:non-scaling-stroke}.map-mob-normal{fill:#64748b}.map-mob-elite{fill:#a06bff}.map-mob-boss{fill:#f0872e}.map-mob-world-boss{fill:#e5433a}.map-poi{stroke:#0a0d11;stroke-width:.6;vector-effect:non-scaling-stroke}.map-poi-portal,.map-poi-waypoint{fill:#2fb3c9}.map-poi-dungeon{fill:#c4392f}.map-poi-shrine{fill:#8fd6d0}.map-poi-quest{fill:#e8b04b}.map-poi-resource{fill:#4fae5c}.map-poi-notice,.map-poi-sign{fill:#8b95a1}.map-poi-lore{fill:#3fb0a8}.map-poi-item{fill:#e8b04b}.map-poi-default{fill:#8b95a1}.map-npc{vector-effect:non-scaling-stroke}.map-label{fill:#eef2f6;font-family:system-ui,sans-serif;paint-order:stroke;stroke:#0a0d11;pointer-events:none}.map-progression-label{font:700 13px ui-monospace,IBM Plex Mono,monospace;text-anchor:middle;letter-spacing:.08em;paint-order:stroke;stroke:#0a0d11;stroke-width:3px;pointer-events:none}.map-codex-modal{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:1.5rem;background:#040609b8}.map-codex-modal.hidden{display:none}.map-codex-card{position:relative;width:min(620px,100%);max-height:min(720px,92vh);overflow:auto;border:1px solid #3a4655;border-radius:10px;padding:1.5rem;background:#12161c;box-shadow:0 20px 60px #000;color:#d7dde5}.map-codex-card h2{margin:.3rem 2rem .35rem 0;color:#f0e3c8}.map-codex-card h3{font-size:.75rem;letter-spacing:.08em;color:#7b8794;margin-top:1.15rem}.map-codex-card p,.map-codex-card li,.map-codex-card dd{color:#aeb9c5;line-height:1.55;font-size:.85rem}.map-codex-card dl{display:grid;grid-template-columns:6.5rem 1fr;gap:.45rem .8rem;font-size:.8rem}.map-codex-card dt{color:#7b8794}.map-codex-card dd{margin:0}.map-codex-kicker{font-size:.68rem;font-weight:700;letter-spacing:.1em}.map-codex-close{position:absolute;top:.65rem;right:.7rem;border:0;background:transparent;color:#9fb0c0;cursor:pointer;font-size:1.5rem}.map-label-biome{letter-spacing:.06em;paint-order:normal;stroke:none}.map-selectable{cursor:pointer}.map-area-group:has(.map-hit-target.is-hovered),.map-mob-group:has(.map-hit-target.is-hovered),.map-poi-group:has(.map-hit-target.is-hovered),.map-npc-group:has(.map-hit-target.is-hovered){filter:brightness(1.25)}.map-building.map-selectable.is-hovered{filter:brightness(1.25)}.map-area-group:has(.map-hit-target.is-selected),.map-mob-group:has(.map-hit-target.is-selected),.map-poi-group:has(.map-hit-target.is-selected),.map-npc-group:has(.map-hit-target.is-selected){filter:brightness(1.35)}.map-building.map-selectable.is-selected{filter:brightness(1.35)}
