/* Every map icon, ornament and root curve is drawn for this tool. */
.game-map-viewport{position:relative;isolation:isolate;min-height:480px;height:clamp(470px,59vh,720px);overflow:hidden;touch-action:none;user-select:none;cursor:grab;background:radial-gradient(ellipse at 44% 40%,#11332d55,transparent 60%),radial-gradient(ellipse at 80% 92%,#9a683013,transparent 45%),#080f10;border:1px solid #a8dbbd20}
.game-map-viewport::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.14;background-image:repeating-radial-gradient(ellipse at 31% 170%,transparent 0 68px,#87b4a533 69px,transparent 70px 112px),repeating-radial-gradient(ellipse at 106% -10%,transparent 0 91px,#a0bda428 92px,transparent 93px 146px);z-index:-1}
.game-map-viewport::after{content:"";pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 85px 28px #030809aa;z-index:1}
.game-map-viewport.is-panning{cursor:grabbing}.game-map-scene{position:absolute;left:0;top:0;width:1px;height:1px;transform-origin:0 0;will-change:transform}.game-map-svg{overflow:visible;position:absolute;left:0;top:0;pointer-events:none;font-family:"Microsoft YaHei","PingFang SC",sans-serif}
.map-edge{fill:none;stroke-linecap:round}.map-edge-root{stroke:#6685781f;stroke-width:8}.map-edge-core{stroke:#6d95846b;stroke-width:1.2}.map-edge.is-recommended .map-edge-root{stroke:#66ecba13;stroke-width:12}.map-edge.is-recommended .map-edge-core{stroke:#84e8bf;stroke-width:1.8}.map-edge.is-recorded:not(.is-recommended) .map-edge-core{stroke:#b6b18a;stroke-width:1.7}.map-edge.is-over .map-edge-root{stroke:#9f3e3b1f}.map-edge.is-over .map-edge-core{stroke:#a15251;stroke-dasharray:5 8}.map-flow-dot{fill:#d5ffe9;filter:drop-shadow(0 0 4px #72f7ba)}.map-route-cascade .map-edge.is-recommended{animation:map-route-on .35s cubic-bezier(.22,1,.36,1) both;animation-delay:var(--route-delay,0ms)}
.map-node{color:#9ab8ad;outline:none;pointer-events:auto;cursor:pointer}.map-node-face{transform-box:fill-box;transform-origin:center;transition:transform 180ms cubic-bezier(.22,1,.36,1),opacity 180ms cubic-bezier(.22,1,.36,1)}.map-node-shell{fill:#102723;stroke:#659e877d;stroke-width:1.4}.map-node-inner{fill:none;stroke:#6dc7a422;stroke-width:.7}.map-node-aura{fill:#3bcf9230;opacity:.25;filter:blur(5px);transform-box:fill-box;transform-origin:center}.map-node-icon{opacity:.9}.map-node-name{font-size:13px;fill:#e2eae3;paint-order:stroke;stroke:#08100f;stroke-width:4;stroke-linejoin:round;letter-spacing:.6px}.map-node-meta{font-size:10px;fill:#9aaba6;paint-order:stroke;stroke:#08100f;stroke-width:3}.map-node-ending{font-size:10px;fill:#c6ac72;letter-spacing:2px}.map-node.is-candidate .map-node-aura{animation:map-breathe 2.4s ease-in-out infinite}.map-node.is-detached{color:#7a8883}.map-node.is-detached .map-node-icon{opacity:.55}.map-node.is-detached .map-node-shell{fill:#131c19;stroke:#6c78745c;stroke-dasharray:3 5}.map-node.is-detached .map-node-name{fill:#aab4ae}.map-node.is-over{color:#e29c92}.map-node.is-over .map-node-shell{fill:#281817;stroke:#9a5351}.map-node.is-over .map-node-aura{fill:#a8363624;animation:none}.map-node.is-over .map-node-meta{fill:#d19188}.map-node-alert{font-size:12px;fill:#ffb1a2;paint-order:stroke;stroke:#281817;stroke-width:5}.map-node.is-recorded .map-node-shell{stroke:#d1c18a;fill:#223128}.map-node.is-recorded .map-node-aura{fill:#abc89124;animation:none}.map-recorded-mark circle{fill:#172c23;stroke:#a3dab0;stroke-width:1}.map-recorded-mark path{fill:none;stroke:#d7f1ca;stroke-width:1.3}.map-node.is-recommended{color:#bcffe0}.map-node.is-recommended .map-node-shell{stroke:#a0f3cf;fill:#143c2f;stroke-width:1.9}.map-node.is-recommended .map-node-name{fill:#c5ffe4}.map-best-ring{fill:none;stroke:#89e6bba8;stroke-width:.8;stroke-dasharray:12 40;transform-box:fill-box;transform-origin:center;animation:map-rotate 14s linear infinite}.map-best-notch{fill:none;stroke:#c2ffdc;stroke-width:1.5}.map-node:is(:focus-visible,.is-hovered) .map-node-face{transform:scale(1.06)}.map-node:focus-visible .map-node-shell{stroke:#fff3ba;stroke-width:2.8}.map-node.is-locked .map-node-face{transform:scale(.92)}.map-node.is-locked .map-node-shell{stroke:#efffd1;stroke-width:3}.map-node.is-selected .map-node-inner{stroke:#c5ffd2;stroke-dasharray:2 5}.map-node.is-growing .map-node-face{animation:map-grow 450ms cubic-bezier(.22,1,.36,1) both}.map-node.is-growing .map-node-aura{animation:map-arrive 800ms cubic-bezier(.22,1,.36,1) both}.map-removed{pointer-events:none;animation:map-vanish 250ms cubic-bezier(.22,1,.36,1) both;transform-box:fill-box;transform-origin:center}.map-ending-flash .map-node-inner{stroke:#ead39c;animation:map-gold-flash 700ms ease-out both}
.map-start{color:#d2ffe8}.map-start-ring{fill:#102a22;stroke:#b5f9d4;stroke-width:1}.map-start-aura{fill:#6defad18;filter:blur(5px);animation:map-breathe 2.4s ease-in-out infinite}.map-start-ripple{fill:none;stroke:#a2ffd58a;stroke-width:1;transform-box:fill-box;transform-origin:center;animation:map-ripple 3s cubic-bezier(.22,1,.36,1) infinite}.map-start-label{fill:#d7ebdc;font-size:12px;letter-spacing:3px}.map-start-note{fill:#8eaa9a;font-size:8.5px;letter-spacing:.5px}.map-arrived .map-node-aura,.map-arrived .map-start-ripple{animation:map-arrive 900ms cubic-bezier(.22,1,.36,1) both!important}.map-person{filter:drop-shadow(0 0 6px #b7f8d677)}
.map-node-tooltip{position:absolute;left:0;top:0;z-index:7;pointer-events:none;min-width:150px;max-width:250px;padding:10px 13px;background:#0b1918ed;border:1px solid #b0ceac66;box-shadow:0 12px 30px #0008;color:#e8f4ec;text-align:center;backdrop-filter:blur(8px)}.map-node-tooltip strong,.map-node-tooltip span,.map-node-tooltip small{display:block}.map-node-tooltip strong{font-size:13px;margin-bottom:5px}.map-node-tooltip span,.map-node-tooltip small{font-size:11px;color:#aec1b6}.map-node-tooltip small{color:#ceb581;margin-top:4px}.map-viewport-note{position:absolute;top:18px;left:22px;display:flex;gap:8px;flex-direction:column;z-index:2;pointer-events:none;font-size:10px;letter-spacing:1px;color:#91a69b}.map-node-counter{color:#c5d9cc;font-size:11px;letter-spacing:2px}.map-viewport-control{position:absolute;right:20px;bottom:24px;z-index:3;display:flex;align-items:center;background:#0a1715dd;border:1px solid #7b9c7855;color:#a7c4b4}.map-viewport-control button{width:34px;height:34px;min-height:34px;border:0;border-radius:0;background:transparent;color:#d2e7d8;font-size:20px;cursor:pointer;padding:0}.map-viewport-control button:hover,.map-viewport-control button:focus-visible{background:#8ed7ae22;color:#edffdd}.map-scale{min-width:42px;text-align:center;font:10px monospace}.map-legend{position:absolute;left:22px;bottom:24px;z-index:2;display:flex;gap:17px;color:#afc1b5;font-size:10px;pointer-events:none}.map-legend span::before{content:"";display:inline-block;width:6px;height:6px;margin-right:6px;vertical-align:1px;border:1px solid currentColor;transform:rotate(45deg)}.map-legend-best{color:#99e6bc}.map-legend-recorded{color:#c9bd8d}.map-legend-over{color:#d69b92}
.map-empty{position:absolute;left:50%;top:49%;transform:translate(-50%,-50%);z-index:3;width:min(90%,420px);text-align:center;pointer-events:none}.map-empty-symbol{display:block;font-size:64px;color:#acb9895c;font-family:Georgia,serif;line-height:1}.map-empty h3{font-family:SimSun,"Songti SC",serif;font-size:28px;font-weight:400;letter-spacing:8px;color:#c7d4bd;margin:20px 0 14px}.map-empty p{color:#9bb5a6;font-size:13px;letter-spacing:3px}.map-empty small{color:#728e80;font-size:11px}.map-empty[hidden],.map-floor-curtain[hidden],.map-node-tooltip[hidden]{display:none!important}
.map-floor-curtain{position:absolute;inset:0;z-index:10;background:#050b0a;display:flex;align-items:center;justify-content:center;flex-direction:column;cursor:pointer;animation:map-fade-in 250ms cubic-bezier(.22,1,.36,1) both}.map-floor-curtain.is-dismissed{animation:map-fade-out 250ms cubic-bezier(.22,1,.36,1) both;pointer-events:none}.map-floor-totem{width:145px;height:145px;color:#a8b78e;opacity:.65;animation:map-rotate 26s linear infinite}.map-floor-kicker{font-size:9px;letter-spacing:5px;color:#91a080;margin-top:20px}.map-floor-title{font-family:SimSun,"Songti SC",serif;font-weight:400;font-size:38px;letter-spacing:12px;color:#d5dfcb;margin:18px 0}.map-floor-description{font-size:11px;color:#9cae9d;letter-spacing:3px}.map-floor-curtain small{font-size:10px;color:#61776a;margin-top:30px;letter-spacing:2px}.map-live{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@keyframes map-breathe{0%,100%{opacity:.2;transform:scale(.95)}50%{opacity:.6;transform:scale(1.05)}}@keyframes map-ripple{0%{transform:scale(.7);opacity:.6}75%,100%{transform:scale(1.65);opacity:0}}@keyframes map-arrive{0%{transform:scale(.7);opacity:.95}100%{transform:scale(1.9);opacity:0}}@keyframes map-rotate{to{transform:rotate(360deg)}}@keyframes map-grow{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes map-vanish{to{transform:scale(.65);opacity:0}}@keyframes map-route-on{from{opacity:0}to{opacity:1}}@keyframes map-gold-flash{0%,100%{opacity:.35}40%{opacity:1}}@keyframes map-fade-in{from{opacity:0}to{opacity:1}}@keyframes map-fade-out{to{opacity:0}}
.map-many-nodes .map-node-aura,.map-many-nodes .map-start-ripple,.map-many-nodes .map-start-aura,.map-many-nodes .map-best-ring{animation:none!important}.map-many-nodes .map-node-aura{opacity:.25}.map-many-nodes .map-start-ripple{opacity:.2}.map-motion-reduced *{animation:none!important;transition:none!important}
@media(max-width:720px){.game-map-viewport{min-height:430px;height:58vh;max-height:620px}.map-viewport-note{top:15px;left:15px;font-size:9px;letter-spacing:.5px}.map-viewport-control{right:12px;bottom:44px}.map-legend{left:15px;bottom:16px;gap:12px;font-size:9px}.map-floor-totem{width:115px;height:115px}.map-floor-title{font-size:32px}.map-node-aura{filter:none;opacity:.2}.map-start-aura{filter:none}.map-flow-dot{filter:none}}
@media(prefers-reduced-motion:reduce){.game-map-viewport *{animation:none!important;transition:none!important}.map-start-ripple{opacity:.3}}
.map-node.is-conflict .map-node-shell{stroke:#e99a8c;fill:#2d1717}.map-node.is-conflict .map-node-aura{fill:#a9443a40;animation:map-breathe 3s ease-in-out infinite}.map-node.is-conflict .map-node-meta{fill:#e5aa9b}
