:root{color-scheme:dark;--bg:#071417;--panel:#102226;--line:#285058;--text:#eaf8f7;--muted:#95b9b8;--accent:#65e3c2;--warn:#f7c766;--travel:#65e3c2;--tower:#79a8ff;--boss:#ff7b8c}
*{box-sizing:border-box}[hidden]{display:none!important}
body{margin:0;background:radial-gradient(circle at 20% 0,#16353a 0,#071417 42%);color:var(--text);font:16px/1.45 system-ui,sans-serif;min-height:100vh}
header{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1rem clamp(1rem,4vw,3rem);border-bottom:1px solid var(--line);background:#071417dd}
h1,h2,p{margin-top:0}h1{margin-bottom:0}.eyebrow{margin-bottom:.15rem;color:var(--accent);font-size:.75rem;letter-spacing:.18em}.viewer{text-align:right;color:var(--accent);font-size:.8rem;margin-bottom:.25rem}.status{border:1px solid var(--line);border-radius:999px;padding:.45rem .8rem;color:var(--muted)}.status.error{color:var(--warn)}
main{display:grid;grid-template-columns:minmax(0,1fr) minmax(16rem,22rem);gap:1rem;padding:1rem;max-width:1600px;margin:auto}.map-shell,aside{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:1rem;overflow:hidden}.map-shell{min-height:72vh}aside{padding:1rem}
#viewport{height:72vh;overflow:hidden;touch-action:none;cursor:grab;background:#061012;user-select:none}#viewport.dragging{cursor:grabbing}#world{position:absolute;width:8192px;height:8192px;transform-origin:0 0;will-change:transform}body.player-lock-mode #world{transition:transform .8s linear}body.player-lock-mode #viewport.dragging #world{transition:none}#world>img{width:8192px;height:8192px;display:block;user-select:none;pointer-events:none}#poiMarkers,#markers{position:absolute;inset:0;pointer-events:none}#poiMarkers{z-index:10}#waypointMarkers{pointer-events:none;position:absolute;inset:0;z-index:15}#markers{z-index:20}
.marker{pointer-events:auto;position:absolute;translate:-50% -50%;transform:scale(var(--marker-scale,1));transform-origin:center;width:1.05rem;height:1.05rem;border-radius:50%;background:var(--accent);border:3px solid #fff;box-shadow:0 0 0 .35rem #65e3c244,0 3px 12px #000;cursor:pointer}.marker.followed{box-shadow:0 0 0 .55rem #65e3c255,0 0 22px #65e3c2}#playerLabels{position:absolute;inset:0;z-index:21;overflow:hidden;pointer-events:none}.player-label{position:absolute;translate:-50% calc(-100% - 1rem);white-space:nowrap;background:#071417f2;border:1px solid var(--line);padding:.2rem .45rem;border-radius:.35rem;font-size:.75rem;font-weight:700;color:var(--text);text-shadow:0 1px 1px #000;box-shadow:0 2px 8px #0009}body.player-lock-mode .player-label{transition:left .8s linear,top .8s linear}body.player-lock-mode #viewport.dragging .player-label{transition:none}
.coordinate-readout{position:absolute;z-index:26;right:1rem;bottom:.75rem;min-width:9.5rem;padding:.3rem .55rem;border:1px solid var(--line);border-radius:.4rem;background:#071417e8;color:var(--text);font-size:.78rem;font-weight:800;font-variant-numeric:tabular-nums;text-align:center;pointer-events:none}
#viewport.placing-waypoint{cursor:crosshair}#addWaypoint[aria-pressed="true"]{border-color:var(--warn);color:var(--warn)}.waypoint-marker{pointer-events:auto;position:absolute;z-index:8;translate:-50% -50%;transform:scale(var(--marker-scale,1));transform-origin:center;width:30px;height:30px;padding:0;border:2px solid #fff;border-radius:50% 50% 50% 0;rotate:-45deg;background:#d84ca8;color:#fff;display:grid;place-items:center;font:900 12px/1 system-ui;box-shadow:0 3px 10px #000d;cursor:pointer}.waypoint-marker::first-line{rotate:45deg}.waypoint-marker:is(:hover,:focus-visible){background:#f06fc2;z-index:9}
.poi-marker{pointer-events:auto;position:absolute;z-index:1;translate:-50% -50%;transform:scale(var(--marker-scale,1));transform-origin:center;width:30px;height:30px;padding:0;border:2px solid #fff;border-radius:50%;background:#0b1b1f;color:#fff;display:grid;place-items:center;font:800 15px/1 system-ui;box-shadow:0 2px 8px #000c;cursor:pointer}.poi-marker[class*="poi-effigy-"],.poi-field-boss,.poi-coal,.poi-sulfur,.poi-quartz,.poi-oil,.poi-copper,.poi-soralite,.poi-nightstar-sand,.poi-world-tree-ore,.poi-skill-fruit,.poi-journal,.poi-dog-coin,.poi-junk-pile,.poi-guild-base{width:22px;height:22px;font-size:11px}.poi-fast-travel{z-index:4;color:var(--travel);border-color:var(--travel)}.poi-watchtower{z-index:6;color:var(--tower);border-color:var(--tower)}.poi-boss-gate,.poi-field-boss{z-index:5;color:var(--boss);border-color:var(--boss)}.poi-effigy-capture-power{color:#83f79c;border-color:#83f79c}.poi-effigy-hunger-reduction{color:#f0b36a;border-color:#f0b36a}.poi-effigy-swim-speed{color:#64c7ff;border-color:#64c7ff}.poi-effigy-food-decay{color:#ff8f70;border-color:#ff8f70}.poi-effigy-jump-power{color:#ffe66d;border-color:#ffe66d}.poi-effigy-glider-speed{color:#8bd8ff;border-color:#8bd8ff}.poi-effigy-climb-speed{color:#c79a6b;border-color:#c79a6b}.poi-effigy-ailment-resist{color:#cf8cff;border-color:#cf8cff}.poi-effigy-stamina-reduction{color:#5eead4;border-color:#5eead4}.poi-effigy-sphere-homing{color:#f8fafc;border-color:#f8fafc}.poi-effigy-exp-bonus{color:#a3e635;border-color:#a3e635}.poi-effigy-rainbow-passive{color:#ff79c6;border-color:#ff79c6}.poi-effigy-move-speed{color:#f97316;border-color:#f97316}.poi-coal{color:#9aa3ab;border-color:#9aa3ab}.poi-sulfur{color:#f2d04f;border-color:#f2d04f}.poi-quartz{color:#e6b9ff;border-color:#e6b9ff}.poi-oil{color:#d8a45c;border-color:#d8a45c}.poi-copper{color:#d98555;border-color:#d98555}.poi-soralite{color:#9ae6ff;border-color:#9ae6ff}.poi-nightstar-sand{color:#7793ff;border-color:#7793ff}.poi-world-tree-ore{color:#65e39b;border-color:#65e39b}.poi-skill-fruit{color:#f78c5c;border-color:#f78c5c}.poi-journal{color:#f4e2a0;border-color:#f4e2a0}.poi-dog-coin{color:#ffd166;border-color:#ffd166}.poi-junk-pile{color:#a6b7b8;border-color:#a6b7b8}.poi-guild-base{z-index:7;color:#ff9fda;border-color:#ff9fda}.poi-marker:is(:hover,:focus-visible){z-index:9}.poi-marker.completed{background:#173f31;box-shadow:0 0 0 2px #69efaa99,0 2px 8px #000}.poi-marker.completed::after{content:"✓";position:absolute;right:-7px;top:-7px;width:16px;height:16px;display:grid;place-items:center;border-radius:50%;background:#65e3a2;color:#062018;border:1px solid #fff;font-size:11px}
.controls{position:absolute;z-index:30;left:1rem;top:1rem;display:flex;flex-wrap:wrap;gap:.4rem;max-width:calc(100% - 2rem)}button,select{font:inherit}.controls button,.controls select,.layers-panel button,.waypoints-panel button,.waypoints-panel input{min-width:44px;min-height:44px;touch-action:manipulation;background:#071417ee;color:var(--text);border:1px solid var(--line);border-radius:.45rem;padding:.5rem .7rem;font-weight:700}.controls button:hover,.layers-panel button:hover{border-color:var(--accent)}
.layers-panel{position:absolute;z-index:40;top:4.5rem;bottom:1rem;left:1rem;width:min(24rem,calc(100% - 2rem));max-height:none;overflow:hidden;display:flex;flex-direction:column;padding:.85rem;background:#071417f5;border:1px solid var(--line);border-radius:.75rem;box-shadow:0 12px 35px #000b}.layers-panel[hidden]{display:none}.layers-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.layers-head h2{margin:0}.layers-head button{font-size:1.3rem}.layers-actions{display:flex;gap:.5rem;margin:.65rem 0}.layer-options{display:grid;gap:.3rem;min-height:0;overflow-y:auto;scrollbar-gutter:stable;scrollbar-color:var(--accent) #102226;scrollbar-width:auto;padding-right:.2rem}.layer-option{min-height:44px;display:grid;grid-template-columns:24px 28px 1fr auto;align-items:center;gap:.55rem;padding:.35rem .5rem;border-radius:.45rem;background:#102226}.layer-option input{width:20px;height:20px;accent-color:var(--accent)}.layer-symbol{font-weight:900;text-align:center}.layer-option-count{color:var(--muted);font-variant-numeric:tabular-nums}.layer-group{border:1px solid var(--line);border-radius:.55rem;background:#0b1c20}.layer-group>summary{min-height:44px;display:flex;align-items:center;padding:.5rem .65rem;color:var(--accent);font-weight:800;cursor:pointer}.layer-group-actions{display:flex;gap:.45rem;padding:.35rem .5rem}.layer-group-actions button{min-height:40px;flex:1}.layer-group-options{display:grid;gap:.3rem;padding:0 .35rem .35rem}.completion-note{margin:.7rem 0 0;color:var(--muted);font-size:.82rem}
.waypoints-panel{position:absolute;z-index:41;top:4.5rem;bottom:1rem;left:1rem;width:min(26rem,calc(100% - 2rem));overflow:hidden;display:flex;flex-direction:column;padding:.85rem;background:#071417f5;border:1px solid var(--line);border-radius:.75rem;box-shadow:0 12px 35px #000b}.waypoints-panel form{display:grid;gap:.5rem;margin:.7rem 0;padding:.7rem;border:1px solid var(--line);border-radius:.55rem;background:#102226}.waypoint-coordinates,.waypoint-note,.waypoint-empty{color:var(--muted);font-size:.82rem}.waypoint-form-actions,.waypoint-row-actions{display:flex;gap:.45rem}.waypoint-form-actions button{flex:1}.waypoint-list{display:grid;gap:.45rem;min-height:0;overflow-y:auto;scrollbar-gutter:stable}.waypoint-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:center;padding:.5rem;border:1px solid var(--line);border-radius:.55rem;background:#102226}.waypoint-details{display:flex;flex-direction:column;align-items:flex-start!important;text-align:left;min-width:0!important}.waypoint-details strong,.waypoint-details span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waypoint-details span{color:var(--muted);font-size:.76rem}.waypoint-row-actions button{min-width:3.5rem!important}.waypoint-row-actions .danger{border-color:#8c4050;color:#ff9bad}.waypoint-note{margin:.7rem 0 0}
.notice{position:absolute;z-index:25;left:1rem;bottom:.75rem;margin:0;padding:.25rem .5rem;border-radius:.3rem;background:#071417cc;color:var(--muted);font-size:.72rem}.players{display:grid;gap:.65rem}.player{width:100%;padding:.7rem;border:1px solid var(--line);border-radius:.6rem;background:#0b1c20;color:var(--text);text-align:left;cursor:pointer}.player:hover{border-color:var(--accent)}.player-name-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem}.player-level{flex:none;padding:.1rem .4rem;border:1px solid var(--line);border-radius:999px;color:var(--accent);font-size:.75rem;font-weight:800}.meta,.privacy{color:var(--muted);font-size:.85rem}.privacy{margin:1rem 0 0}
body.map-fullscreen{overflow:hidden}body.map-fullscreen>header,body.map-fullscreen main>aside{display:none}body.map-fullscreen main{display:block;max-width:none;height:100vh;padding:0}body.map-fullscreen .map-shell,body.map-fullscreen #viewport{width:100%;height:100vh;min-height:100vh;border:0;border-radius:0}body.map-fullscreen .notice{display:none}body.map-fullscreen .controls{left:.5rem;top:.5rem;max-width:calc(100% - 1rem)}#followButton.paused{border-color:var(--warn);color:var(--warn)}
.login-page{display:grid;place-items:center}.login-page main{display:block;width:100%;padding:1rem}.login-wrap{max-width:28rem!important}.login-card{padding:1.5rem;background:var(--panel);border:1px solid var(--line);border-radius:1rem}.login-card form{display:grid;gap:1rem}.login-card label{display:grid;gap:.35rem}.login-card input,.login-card button{width:100%;min-height:48px;border:1px solid var(--line);border-radius:.5rem;background:#071417;color:var(--text);padding:.7rem}.login-card button{background:var(--accent);color:#05201a;font-weight:800}
.header-actions{display:flex;align-items:flex-end;flex-direction:column;gap:.35rem}.admin-link,.back-link{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:.45rem .8rem;border:1px solid var(--accent);border-radius:.5rem;color:var(--accent);font-weight:800;text-decoration:none}.admin-link:hover,.back-link:hover{background:#65e3c21a}.admin-link[hidden]{display:none}.fullscreen-admin-link{display:none!important}body.map-fullscreen .fullscreen-admin-link:not([hidden]){display:inline-flex!important}
.admin-page header{position:sticky;top:0;z-index:5}.admin-main{display:block;max-width:1100px;padding:1rem}.admin-message{padding:.75rem 1rem;border:1px solid var(--line);border-radius:.6rem;background:#0b1c20;color:var(--accent)}.admin-message.error{color:var(--warn);border-color:#8a6230}.admin-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.admin-grid[hidden],.admin-card[hidden]{display:none}.admin-card{padding:1rem;background:var(--panel);border:1px solid var(--line);border-radius:.85rem}.admin-card form{display:grid;gap:.8rem}.admin-card label{display:grid;gap:.3rem;color:var(--muted)}.admin-card input,.admin-card textarea,.admin-card button{width:100%;min-height:46px;border:1px solid var(--line);border-radius:.5rem;background:#071417;color:var(--text);padding:.65rem .75rem}.admin-card textarea{resize:vertical}.admin-card button{background:var(--accent);color:#05201a;font-weight:800;cursor:pointer}.admin-card button.secondary{background:#132a2f;color:var(--text)}.admin-card button.danger{background:#7d2634;color:#fff;border-color:#d45568}.danger-card{border-color:#633744}.admin-list{display:grid;gap:.55rem;margin-bottom:.75rem}.admin-list-row{display:flex;align-items:center;justify-content:space-between;gap:.7rem;padding:.65rem;border:1px solid var(--line);border-radius:.5rem;background:#0b1c20}.admin-row-actions{display:flex;gap:.4rem}.admin-row-actions button,.admin-list-row>button{width:auto;min-width:70px}.admin-page .privacy{max-width:62rem;margin:1rem auto;text-align:center}
.access-card{grid-column:1/-1}.access-list{display:grid;gap:.65rem;margin-bottom:.75rem}.access-row{display:grid;grid-template-columns:minmax(11rem,1fr) minmax(20rem,2fr) auto;align-items:center;gap:.8rem;padding:.75rem;border:1px solid var(--line);border-radius:.6rem;background:#0b1c20}.access-head{display:flex;flex-direction:column;gap:.15rem}.access-fixed{color:var(--accent);font-size:.78rem}.access-groups{display:flex;flex-wrap:wrap;gap:.45rem 1rem}.access-groups label{display:flex;align-items:center;gap:.4rem;color:var(--text)}.access-groups input{width:1.25rem;min-height:1.25rem;margin:0;padding:0}.access-row>button{width:auto;min-width:7rem}.access-row button:disabled,.access-groups input:disabled{opacity:.65;cursor:not-allowed}
@media(pointer:coarse){.poi-marker{width:clamp(18px,4.5vmin,26px);height:clamp(18px,4.5vmin,26px);font-size:clamp(10px,2.8vmin,14px)}.poi-marker[class*="poi-effigy-"],.poi-field-boss,.poi-coal,.poi-sulfur,.poi-quartz,.poi-oil,.poi-copper,.poi-soralite,.poi-nightstar-sand,.poi-world-tree-ore,.poi-skill-fruit,.poi-journal,.poi-dog-coin,.poi-junk-pile,.poi-guild-base{width:clamp(15px,3.2vmin,18px);height:clamp(15px,3.2vmin,18px);font-size:clamp(8px,2vmin,10px)}.poi-marker.completed::after{right:-5px;top:-5px;width:clamp(11px,2.7vmin,14px);height:clamp(11px,2.7vmin,14px);font-size:clamp(8px,1.8vmin,10px)}}
body.portrait-view{min-height:100svh;overflow-x:hidden}body.portrait-view header{padding:.65rem .75rem}body.portrait-view header h1{font-size:1.25rem}body.portrait-view .viewer{display:none}body.portrait-view main{grid-template-columns:1fr;gap:.5rem;max-width:none;padding:.5rem}body.portrait-view .map-shell{min-height:calc(100svh - 8.75rem)}body.portrait-view #viewport{height:calc(100svh - 8.75rem);min-height:34rem}body.portrait-view aside{max-height:35svh;overflow:auto;border-radius:.75rem}body.portrait-view .controls{left:.5rem;right:.5rem;top:.5rem;max-width:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem}body.portrait-view .controls>*{min-width:0;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:clamp(.72rem,2.7vw,.95rem)}body.portrait-view .controls #layerSelect{grid-column:span 2}body.portrait-view .controls #followSelect{grid-column:span 3}body.portrait-view .controls #reset{display:none}body.portrait-view .layers-panel{position:fixed;left:.5rem;right:.5rem;top:auto;bottom:.5rem;width:auto;max-height:75svh;padding-bottom:max(1rem,env(safe-area-inset-bottom))}body.portrait-view .waypoints-panel{position:fixed;left:.5rem;right:.5rem;top:auto;bottom:.5rem;width:auto;max-height:75svh;padding-bottom:max(1rem,env(safe-area-inset-bottom))}body.portrait-view .notice{display:none}body.portrait-view.map-fullscreen .map-shell,body.portrait-view.map-fullscreen #viewport{height:100svh;min-height:100svh}
@media(max-width:800px){header{padding:.75rem 1rem}header h1{font-size:1.25rem}main{grid-template-columns:1fr;padding:.5rem}.admin-grid{grid-template-columns:1fr}.admin-list-row{align-items:flex-start;flex-direction:column}.access-row{grid-template-columns:1fr;align-items:stretch}.access-groups{display:grid;grid-template-columns:1fr}.access-row>button{width:100%}.admin-row-actions{width:100%}.admin-row-actions button{flex:1}.map-shell,#viewport{min-height:72svh;height:72svh}.controls{left:.5rem;top:.5rem;max-width:calc(100% - 1rem)}.controls select{max-width:9rem}.layers-panel{position:fixed;left:0;right:0;top:auto;bottom:0;width:100%;max-height:75svh;overflow:hidden;border-radius:1rem 1rem 0 0;padding:1rem;padding-bottom:max(1rem,env(safe-area-inset-bottom))}.waypoints-panel{position:fixed;left:0;right:0;top:auto;bottom:0;width:100%;max-height:75svh;overflow:hidden;border-radius:1rem 1rem 0 0;padding:1rem;padding-bottom:max(1rem,env(safe-area-inset-bottom))}.notice{left:.5rem;bottom:.5rem}aside{border-radius:.75rem}.viewer{display:none}}
@media(max-width:430px){.controls button,.controls select{padding:.4rem .55rem}.controls #reset{display:none}.status{font-size:.78rem;padding:.35rem .55rem}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
