.map-root{--biolum:var(--teal);--biolum-dim:#35e0c873;--biolum-green:#66f0a0;--amber:var(--gold);--amber-deep:#b98a2c;--bad:var(--danger);--ink-deep:#0b1210;--ink-on-glow:#06231e;--card-edge:var(--line-2);--scrim:#070c0a8c;--scrim-deep:#050908e6;--bg-raise:var(--surface-2);--text-bright:#f2f8f3;--tint-2:#ffffff1a;--tint-3:#ffffff29;--font-body:var(--font-sans);width:100%;height:100%;position:relative}.map-viewport{cursor:grab;touch-action:none;background:0 0;width:100%;height:100%;position:relative;overflow:hidden}.map-viewport:active{cursor:grabbing}.map-attribution{z-index:6;font-family:var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:#e9f2ec8c;pointer-events:auto;font-size:10px;line-height:1;text-decoration:none;transition:color .15s;position:absolute;bottom:12px;right:12px}.map-attribution:hover{color:var(--text-bright)}.map-world{transform-origin:0 0;position:absolute;top:0;left:0}.map-world:before{content:"";z-index:-1;filter:brightness(.72)saturate(.9);pointer-events:none;background:radial-gradient(circle closest-side,#334f7e 0% 50%,#2a4269 62%,#1e3050 74%,#14203a 86%,#0b1424 100%);position:absolute;inset:-100%}.map-world:after{content:"";z-index:2;filter:brightness(.72)saturate(.9);pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 110px 36px #334f7e}.map-world>.map-polys{z-index:3}.map-world>.map-shapes{z-index:4}.map-img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;filter:brightness(.72)saturate(.9);width:100%;height:100%;display:block}.map-overlay{pointer-events:none;z-index:5;position:absolute;inset:0}.map-dot{background:var(--dot-c,var(--biolum));width:15px;height:15px;box-shadow:0 0 0 1.5px #fff6, 0 2px 6px #0009, 0 0 16px color-mix(in srgb, var(--dot-c,var(--biolum)) 55%, transparent);pointer-events:auto;z-index:3;border:2px solid #000000a6;border-radius:50%;margin:-7.5px 0 0 -7.5px;position:absolute}@keyframes dot-select-breathe{0%,to{box-shadow:0 0 0 2px var(--teal), 0 0 14px color-mix(in srgb, var(--dot-c,var(--biolum)) 45%, transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb, var(--teal) 55%, transparent), 0 0 18px color-mix(in srgb, var(--dot-c,var(--biolum)) 60%, transparent)}}.map-dot.self{background:radial-gradient(circle, #fff7e0 0%, var(--amber) 55%, var(--amber-deep,#b98a2c) 100%);z-index:4;border:2.5px solid #000000b3;width:19px;height:19px;margin:-9.5px 0 0 -9.5px;animation:2.6s ease-in-out infinite selfPulse;box-shadow:0 0 0 1.5px #ffffff8c,0 2px 8px #000000a6,0 0 20px #d9b23ad9}.map-dot.self:after{content:"";pointer-events:none;border:2px solid #d9b23ae6;border-radius:50%;animation:2.6s cubic-bezier(.22,.61,.36,1) infinite self-beacon;position:absolute;inset:-3px}@keyframes self-beacon{0%{opacity:1;transform:scale(.7)}70%,to{opacity:0;transform:scale(2.1)}}@keyframes selfPulse{50%{box-shadow:0 0 0 1.5px #ffffff8c,0 2px 8px #000000a6,0 0 10px #d9b23a80}}.map-arrow{transform-origin:50% 13px;border-bottom:9px solid #eafbf3;border-left:5px solid #0000;border-right:5px solid #0000;width:0;height:0;margin:-13px 0 0 -5px;position:absolute;top:50%;left:50%}.map-label{white-space:nowrap;color:#e4f7ee;text-shadow:0 1px 3px #000,0 0 2px #000;pointer-events:none;opacity:0;font-size:12px;font-weight:500;transition:opacity .14s;position:absolute;top:-4px;left:12px}.map-dot.target-dot>.map-label{opacity:1}.map-bar{z-index:6;border:1px solid var(--line-2);background:color-mix(in srgb, var(--floor-1) 95%, transparent);border-radius:999px;align-items:center;gap:10px;max-width:min(92%,640px);padding:6px 14px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.map-hint{color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12px;overflow:hidden}.map-hint[data-empty=true]{color:var(--amber-deep)}@keyframes map-chrome-rest{to{opacity:0;visibility:hidden}}.map-bar .map-hint{animation:.6s 6s forwards map-chrome-rest}.map-bar:not(:has(.map-calib-btn)){animation:.6s 6s forwards map-chrome-rest}.map-root.drawing .map-bar,.map-root.calibrating .map-bar,.map-root.drawing .map-hint,.map-root.calibrating .map-hint,.map-hint[data-empty=true]{opacity:1;visibility:visible;animation:none}.map-bar:has(.map-hint[data-empty=true]){opacity:1;visibility:visible;animation:none}.map-calib-btn{background:var(--bg-raise);border:1px solid var(--card-edge);color:var(--text-dim);cursor:pointer;border-radius:999px;flex:none;padding:3px 12px;font-size:12px;transition:color .15s,border-color .15s}.map-calib-btn:hover{color:var(--text);border-color:var(--biolum-dim)}.map-root.calibrating .map-viewport{cursor:crosshair}.map-root.calibrating .map-calib-btn{border-color:var(--biolum);color:var(--biolum)}.map-calib-pt{background:var(--biolum);width:20px;height:20px;color:var(--ink-on-glow);text-align:center;border:2px solid var(--ink-deep);box-shadow:0 0 0 1px var(--biolum), 0 0 10px #35e0c899;border-radius:50%;margin:-10px 0 0 -10px;font-size:12px;font-weight:700;line-height:20px;position:absolute}.map-polys{pointer-events:none;position:absolute;inset:0;overflow:visible}.terr{stroke-width:3px;stroke-linejoin:round}.terr.terr-hunting{fill:#e0654e1a;stroke:#e0654ea6;filter:drop-shadow(0 0 6px #e0654e59)}.terr.terr-nesting{fill:#d9b23a1a;stroke:#d9b23aa6;filter:drop-shadow(0 0 6px #d9b23a59)}.terr.terr-general{fill:#35e0c817;stroke:#35e0c899;filter:drop-shadow(0 0 6px #35e0c84d)}.terr.zone-patrol,.terr.zone-migration,.terr.zone-sanctuaries{pointer-events:visiblePainted;transition:stroke-opacity .15s ease-out,fill-opacity .15s ease-out}.terr.zone-patrol{fill:#c9a23a;fill-opacity:.1;stroke:#c9a23a;stroke-opacity:.9;stroke-width:3.5px;stroke-linecap:round}.terr.zone-migration{fill:url(#eoe-mig-current) #5aa9d6;fill-opacity:.85;stroke:#5aa9d6;stroke-opacity:.55;stroke-width:2px;stroke-linecap:round}.terr.zone-sanctuaries{fill:#66f0a0;fill-opacity:.12;stroke:#66f0a0;stroke-opacity:.82;stroke-width:4.5px}.terr.terr-pending{stroke-dasharray:13 9;fill-opacity:.5}.terr.terr-draft{fill:#d9b23a1a;stroke:var(--amber);stroke-dasharray:10 7}.terr-vertex{fill:var(--amber);stroke:var(--ink-deep);stroke-width:2px}.terr-label{font-family:var(--font-body);letter-spacing:.04em;fill:#f2f8f3e0;paint-order:stroke;stroke:var(--scrim-deep);stroke-width:5px;text-anchor:middle;font-size:26px}.map-root.drawing .map-viewport{cursor:crosshair}.map-shape.ml-patrol{--zone-c:#c9a23a}.map-shape.ml-migration{--zone-c:#5aa9d6}.map-shape.ml-sanctuaries{--zone-c:#66f0a0}.map-teleport-marker{border:2px solid var(--biolum);width:22px;height:22px;box-shadow:0 0 0 2px var(--scrim), 0 0 12px #35e0c8b3;pointer-events:none;z-index:6;border-radius:50%;margin:-11px 0 0 -11px;position:absolute}.map-teleport-marker:before,.map-teleport-marker:after{content:"";background:var(--biolum);position:absolute}.map-teleport-marker:before{width:2px;height:34px;margin-left:-1px;top:-6px;left:50%}.map-teleport-marker:after{width:34px;height:2px;margin-top:-1px;top:50%;left:-6px}.map-dot.target-dot{animation:2s ease-in-out infinite dot-select-breathe}.map-shapes{pointer-events:none;position:absolute;inset:0}.map-shape{box-sizing:border-box;pointer-events:auto;--zone-c:#8a978f;background:radial-gradient(circle, color-mix(in srgb, var(--zone-c) 36%, transparent) 0%, color-mix(in srgb, var(--zone-c) 20%, transparent) 46%, color-mix(in srgb, var(--zone-c) 9%, transparent) 68%, transparent 80%);box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--zone-c) 88%, transparent), inset 0 0 30px color-mix(in srgb, var(--zone-c) 30%, transparent), 0 0 22px 3px color-mix(in srgb, var(--zone-c) 32%, transparent);border-radius:50%;transition:box-shadow .16s ease-out;position:absolute}.map-shape:hover{z-index:60;box-shadow:inset 0 0 0 2.5px var(--zone-c), inset 0 0 36px color-mix(in srgb, var(--zone-c) 45%, transparent), 0 0 30px 6px color-mix(in srgb, var(--zone-c) 50%, transparent)}.map-shape.zs-hypsi{--zone-c:#6fbf5e}.map-shape.zs-teno{--zone-c:#e0a83c}.map-shape.zs-dibble{--zone-c:#b06fd9}.map-shape.zs-dryo{--zone-c:#5ec8bf}.map-shape.zs-trike{--zone-c:#d9634f}.map-shape.zs-maia{--zone-c:#d977a8}.map-shape.zs-cerato{--zone-c:#d9342b}.map-shape.zs-omni{--zone-c:#e0763c}.map-shape.zs-psitt{--zone-c:#b8d13f}.map-shape.zs-stego{--zone-c:#8a9bd4}.map-shape.zs-galli{--zone-c:#8fd18a}.map-shape>.zone-label{z-index:30;transform:translate(-50%, -50%) scale(calc(1 / var(--zoom,1))) translateY(10px);transform-origin:50%;opacity:0;pointer-events:none;white-space:nowrap;border:1px solid color-mix(in srgb, var(--zone-c) 58%, transparent);box-shadow:0 2px 12px #0000008c, 0 0 12px color-mix(in srgb, var(--zone-c) 22%, transparent);font-family:var(--font-display,"Cinzel", serif);letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb, var(--zone-c) 30%, #efe7cf);background:#070f0ceb;border-radius:999px;padding:4px 12px 3px;font-size:11px;font-weight:600;transition:opacity .16s ease-out,transform .16s ease-out;position:absolute;top:50%;left:50%}.map-shape:hover>.zone-label{opacity:1;transform:translate(-50%, -50%) scale(calc(1 / var(--zoom,1))) translateY(0)}.map-shapes.zai-solo .map-shape.ml-zai:not(.zs-solo){opacity:.07;pointer-events:none}.map-shapes.zai-solo .map-shape.ml-zai:not(.zs-solo)>.zone-label{display:none}.map-shape.readonly{opacity:.6}.map-shape.pending{opacity:.8}.map-shape.selected{box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--zone-c) 95%, white), 0 0 28px color-mix(in srgb, var(--zone-c) 45%, transparent)}.map-shape.ml-zai{--dur:5.6s;--dsync:0s}.map-shape.ml-zai:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--zone-c) 52%, transparent) 0%, color-mix(in srgb, var(--zone-c) 22%, transparent) 55%, transparent 74%);pointer-events:none;animation:zai-core var(--dur) ease-out infinite var(--dsync);border:none;border-radius:50%;position:absolute;inset:25%}@keyframes zai-core{0%,to{opacity:.82;transform:scale(1)}6%{opacity:1;transform:scale(1.16)}28%{opacity:.82;transform:scale(1)}}.map-shape.ml-zai:after{content:"";border:2px solid color-mix(in srgb, var(--zone-c) 90%, transparent);opacity:0;pointer-events:none;animation:zai-ping var(--dur) cubic-bezier(.22, .61, .36, 1) infinite var(--dsync);border-radius:50%;position:absolute;inset:0;transform:scale(.32)}@keyframes zai-ping{0%{opacity:0;transform:scale(.32)}6%{opacity:.9;transform:scale(.36)}55%{opacity:0;transform:scale(1.02)}to{opacity:0;transform:scale(1.02)}}.map-shape.ml-zai:nth-child(5n){--dsync:0s}.map-shape.ml-zai:nth-child(5n+1){--dsync:-1.1s}.map-shape.ml-zai:nth-child(5n+2){--dsync:-2.3s}.map-shape.ml-zai:nth-child(5n+3){--dsync:-3.4s}.map-shape.ml-zai:nth-child(5n+4){--dsync:-4.6s}.terr.zone-patrol{stroke-dasharray:18 12;animation:7.5s linear infinite patrol-march}@keyframes patrol-march{to{stroke-dashoffset:-60px}}g.zone-patrol:nth-of-type(2n) .terr{animation-duration:8.5s;animation-direction:reverse}.terr.zone-migration{animation:13s cubic-bezier(.37,0,.63,1) infinite migration-swell}@keyframes migration-swell{0%,to{fill-opacity:.85}58%{fill-opacity:1}}g.zone-migration:nth-of-type(2n) .terr{animation-delay:-6.5s}.terr.zone-sanctuaries{animation:7s ease-in-out infinite sanctuary-ward}@keyframes sanctuary-ward{0%{fill-opacity:.12;stroke-opacity:.82}8%{fill-opacity:.22;stroke-opacity:1}16%{fill-opacity:.13;stroke-opacity:.86}24%{fill-opacity:.24;stroke-opacity:1}45%,to{fill-opacity:.12;stroke-opacity:.82}}g.zone-sanctuaries:nth-of-type(3n+1) .terr{animation-delay:-2.3s}g.zone-sanctuaries:nth-of-type(3n+2) .terr{animation-delay:-4.7s}.map-shape.ml-patrol:after{content:"";border:2px dashed color-mix(in srgb, var(--zone-c) 88%, transparent);pointer-events:none;border-radius:50%;animation:18s linear infinite patrol-orbit;position:absolute;inset:5%}@keyframes patrol-orbit{to{transform:rotate(360deg)}}.map-shape.ml-migration:after{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--zone-c) 30%, transparent) 0%, transparent 70%);pointer-events:none;border-radius:50%;animation:13s cubic-bezier(.37,0,.63,1) infinite migration-tide-c;position:absolute;inset:0}@keyframes migration-tide-c{0%,to{opacity:.35}58%{opacity:.8}}.map-shape.ml-sanctuaries:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--zone-c) 52%, transparent) 0%, color-mix(in srgb, var(--zone-c) 22%, transparent) 55%, transparent 74%);pointer-events:none;border-radius:50%;animation:7s ease-in-out infinite sanctuary-beat;position:absolute;inset:25%}@keyframes sanctuary-beat{0%,to{opacity:.78;transform:scale(1)}8%{opacity:1;transform:scale(1.16)}16%{opacity:.82;transform:scale(1.02)}24%{opacity:1;transform:scale(1.18)}45%{opacity:.78;transform:scale(1)}}@keyframes zone-breathe{0%,to{opacity:.65}50%{opacity:1}}.map-polys .terr:not(.terr-draft):not(.terr-vertex):not(.zone-patrol):not(.zone-migration):not(.zone-sanctuaries){transform-box:fill-box;transform-origin:50%;animation:6s ease-in-out infinite zone-breathe}.map-polys g:not(.zone-patrol):not(.zone-migration):not(.zone-sanctuaries):nth-of-type(2n) .terr{animation-delay:-2.2s}.map-shapes.zai-solo .map-shape.ml-zai:not(.zs-solo),.map-shapes.zai-solo .map-shape.ml-zai:not(.zs-solo):before{animation:none}.map-shapes.zai-solo .map-shape.ml-zai:not(.zs-solo):after{opacity:0;animation:none}g.zone-patrol .terr-label,g.zone-migration .terr-label,g.zone-sanctuaries .terr-label{font-family:var(--font-display,"Cinzel", serif);letter-spacing:.14em;text-transform:uppercase;paint-order:stroke;stroke:#070f0ceb;stroke-width:6px;stroke-linejoin:round;transform:scale(calc(1 / var(--zoom,1)));transform-box:fill-box;transform-origin:50%;opacity:0;pointer-events:none;font-size:12px;font-weight:600;transition:opacity .16s ease-out}g.zone-patrol .terr-label{fill:#e2cf9b}g.zone-migration .terr-label{fill:#bbd1d1}g.zone-sanctuaries .terr-label{fill:#bfeabf}g.zone-patrol:hover .terr-label,g.zone-migration:hover .terr-label,g.zone-sanctuaries:hover .terr-label{opacity:1}g.zone-patrol:hover .terr{stroke-opacity:1;fill-opacity:.18}g.zone-migration:hover .terr{stroke-opacity:1;fill-opacity:1;animation:none}g.zone-sanctuaries:hover .terr{stroke-opacity:1;fill-opacity:.2;animation:none}
