@font-face{font-family:"DM Sans";src:url(https://cdn.jsdelivr.net/npm/@fontsource-variable/dm-sans@5.3.0/files/dm-sans-latin-wght-normal.woff2) format("woff2");font-weight:100 1000;font-display:swap}@font-face{font-family:"JetBrains Mono";src:url(https://cdn.jsdelivr.net/npm/@fontsource-variable/jetbrains-mono@5.3.0/files/jetbrains-mono-latin-wght-normal.woff2) format("woff2");font-weight:100 800;font-display:swap}:root{color-scheme:dark;--color-ink: oklch(15% 0.02 262);--color-surface: oklch(19% 0.022 262);--color-surface-2: oklch(23% 0.022 262);--color-surface-3: oklch(27% 0.024 262);--color-surface-4: oklch(31% 0.026 262);--color-well: oklch(0% 0 0 / 0.24);--color-well-deep: oklch(0% 0 0 / 0.34);--color-line: oklch(100% 0 0 / 0.08);--color-line-strong: oklch(100% 0 0 / 0.16);--color-sheen: oklch(100% 0 0 / 0.06);--color-text: oklch(96% 0.006 250);--color-text-2: oklch(79% 0.016 256);--color-text-3: oklch(63% 0.02 258);--color-accent: oklch(80% 0.155 74);--color-accent-hover: oklch(85% 0.15 76);--color-accent-press: oklch(76% 0.15 72);--color-accent-soft: oklch(80% 0.155 74 / 0.16);--color-accent-line: oklch(80% 0.155 74 / 0.48);--color-accent-text: oklch(88% 0.12 80);--color-accent-ink: oklch(23% 0.05 70);--color-live: oklch(76% 0.15 162);--color-live-ring: oklch(76% 0.15 162 / 0.18);--color-vacant: oklch(70% 0.15 162);--color-stop: oklch(67% 0.2 25);--color-person: oklch(64% 0.17 258);--color-ring: oklch(100% 0 0 / 0.85);--color-unplaced: oklch(55% 0.03 258);--color-shadow: oklch(0% 0 0 / 0.4);--font-ui: "DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-xs: 11px;--text-s: 12.5px;--text-m: 14px;--text-l: 17px;--text-xl: 26px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--radius-s: 6px;--radius-m: 10px;--radius-l: 16px;--ease-out: cubic-bezier(0.16, 1, 0.3, 1);--ease-in: cubic-bezier(0.7, 0, 0.84, 0);--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);--dur-micro: 120ms;--dur-short: 220ms;--dur-long: 380ms;--raise: inset 0 1px 0 var(--color-sheen);--lift: inset 0 1px 0 var(--color-sheen), 0 1px 2px var(--color-shadow), 0 10px 28px -10px oklch(0% 0 0 / 0.7);--press: inset 0 1px 2px oklch(0% 0 0 / 0.45);--panel-w: 372px;--edge-top: max(12px, env(safe-area-inset-top));--edge-right: max(12px, env(safe-area-inset-right));--edge-bottom: max(12px, env(safe-area-inset-bottom));--edge-left: max(12px, env(safe-area-inset-left));font:400 var(--text-m) / 1.45 var(--font-ui);color:var(--color-text)}*,*::before,*::after{box-sizing:border-box;margin:0}html,body{height:100%;overflow:clip;background:var(--color-ink);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}[hidden]{display:none!important}button,input,select{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.sprite-sheet{position:absolute;width:0;height:0}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}#map{position:fixed;inset:0}.surface{background:var(--color-surface);border:1px solid var(--color-line);box-shadow:var(--lift)}.icon{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.icon.filled{fill:currentColor;stroke:none}.control{display:inline-flex;align-items:center;gap:var(--space-2);min-height:38px;padding:0 var(--space-3);border-radius:var(--radius-m);background:var(--color-surface-2);border:1px solid var(--color-line);box-shadow:var(--raise);color:inherit;font-size:var(--text-s);font-weight:600;white-space:nowrap;text-decoration:none;transition:background-color var(--dur-micro) var(--ease-out),transform var(--dur-micro) var(--ease-out)}.control:active{transform:translateY(1px);background:var(--color-surface-2);box-shadow:var(--press)}.topbar{position:fixed;z-index:20;top:var(--edge-top);left:var(--edge-left);display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1);border-radius:calc(var(--radius-m) + var(--space-1));max-width:calc(100vw - var(--edge-left) - var(--edge-right))}.picker{position:relative;display:flex;min-width:0}.picker select{appearance:none;-webkit-appearance:none;min-width:0;padding-right:34px;cursor:pointer}.picker select option{background:var(--color-surface-2);color:var(--color-text)}.picker .icon{position:absolute;right:10px;top:50%;translate:0 -50%;width:14px;height:14px;color:var(--color-text-3);pointer-events:none}.status{display:inline-flex;align-items:center;gap:var(--space-2);min-height:38px;padding:0 var(--space-3) 0 var(--space-2);font-size:var(--text-s);font-weight:600;color:var(--color-text-2);white-space:nowrap}.status i{width:8px;height:8px;border-radius:50%;background:var(--color-text-3)}.status[data-state=live] i{background:var(--color-live);box-shadow:0 0 0 3px var(--color-live-ring)}.status[data-state=reconnecting] i{background:var(--color-accent)}.status[data-state=connecting] i,.status[data-state=reconnecting] i{animation:blink 1.2s var(--ease-in-out) infinite}@keyframes blink{50%{opacity:0.3}}.join{color:var(--color-accent-ink);background:var(--color-accent);border-color:transparent}.join:active{background:var(--color-accent-press)}.panel{position:fixed;z-index:15;top:var(--edge-top);right:var(--edge-right);bottom:var(--edge-bottom);width:var(--panel-w);display:flex;flex-direction:column;border-radius:var(--radius-l);overflow:hidden;transition:transform var(--dur-long) var(--ease-out),opacity var(--dur-short) var(--ease-out)}body.panel-closed .panel{transform:translateX(calc(100% + var(--edge-right) + 8px));opacity:0;pointer-events:none;transition:transform var(--dur-short) var(--ease-in),opacity var(--dur-short) var(--ease-in)}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);padding:var(--space-4) var(--space-4) var(--space-3)}.panel-head h1{font-size:var(--text-l);font-weight:700;letter-spacing:-0.01em}.panel-head p{font-size:var(--text-s);color:var(--color-text-3);font-variant-numeric:tabular-nums}.icon-button{display:grid;place-items:center;width:34px;height:34px;flex:none;padding:0;border:0;border-radius:var(--radius-s);background:transparent;color:var(--color-text-2);transition:background-color var(--dur-micro) var(--ease-out),color var(--dur-micro) var(--ease-out)}.icon-button:active{background:var(--color-surface-2);box-shadow:var(--press)}.icon-button[aria-pressed=true],.sort.active{background:var(--color-accent-soft);box-shadow:inset 0 0 0 1px var(--color-accent-line);color:var(--color-accent-text)}.sort{position:relative}.sort select{position:absolute;inset:0;opacity:0;cursor:pointer}.sort select option{background:var(--color-surface-2);color:var(--color-text)}.sort:focus-within{outline:2px solid var(--color-accent);outline-offset:2px}.tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;margin:0 var(--space-4);padding:3px;border-radius:var(--radius-m);background:var(--color-well);box-shadow:var(--press)}.tabs button{display:flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 var(--space-2);border:0;border-radius:7px;background:transparent;color:var(--color-text-3);font-size:var(--text-s);font-weight:600;white-space:nowrap;transition:background-color var(--dur-micro) var(--ease-out),color var(--dur-micro) var(--ease-out)}.tabs button[aria-selected=true]{background:var(--color-surface-4);color:var(--color-text);box-shadow:var(--raise),0 1px 3px var(--color-shadow)}.tabs .count{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:600;font-variant-numeric:tabular-nums;color:var(--color-text-3)}.tabs button[aria-selected=true] .count{color:var(--color-accent)}.tabs .count[data-state=free],.tabs .count[data-state=full]{padding:0 5px;border-radius:99px}.tabs .count[data-state=free]{color:var(--color-vacant);background:oklch(from var(--color-vacant) l c h / 0.16)}.tabs .count[data-state=full]{color:var(--color-stop);background:oklch(from var(--color-stop) l c h / 0.14)}.risks{min-width:18px;padding:0 5px;border-radius:99px;background:var(--color-stop);color:var(--color-ink);font:700 var(--text-xs) / 18px var(--font-mono);font-variant-numeric:tabular-nums;text-align:center}.search{display:flex;align-items:center;gap:var(--space-2);margin:var(--space-3) var(--space-4) var(--space-2)}.search-field{position:relative;display:flex;align-items:center;flex:1;min-width:0}.search-field>.icon{position:absolute;left:11px;width:16px;height:16px;color:var(--color-text-3);pointer-events:none}.search input{width:100%;min-height:38px;padding:0 38px 0 36px;border:1px solid var(--color-line);border-radius:var(--radius-m);background:var(--color-well);outline:none;transition:border-color var(--dur-micro) var(--ease-out),background-color var(--dur-micro) var(--ease-out)}.search input::placeholder{color:var(--color-text-3)}.search input:focus-visible{border-color:var(--color-accent);background:var(--color-well-deep)}.search input::-webkit-search-cancel-button{display:none}.search kbd,.search .clear{position:absolute;right:8px}.search kbd{padding:1px 6px;border:1px solid var(--color-line-strong);border-radius:5px;font:600 var(--text-xs) / 1.4 var(--font-mono);color:var(--color-text-3);pointer-events:none}@media (hover: none){.search kbd{display:none}}.search .clear{width:26px;height:26px}.list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;contain:layout paint style;padding:var(--space-1) var(--space-2) var(--space-3);scrollbar-width:thin;scrollbar-color:var(--color-surface-4) transparent}.empty{padding:var(--space-6) var(--space-4);text-align:center;color:var(--color-text-3);font-size:var(--text-s)}.row{content-visibility:auto;contain-intrinsic-size:auto 56px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;column-gap:var(--space-3);width:100%;padding:9px var(--space-2);border:1px solid transparent;border-radius:var(--radius-m);background:transparent;text-align:left;transition:background-color var(--dur-micro) var(--ease-out)}.row:active{background:var(--color-surface-2);box-shadow:var(--press)}.row[aria-current=true]{background:var(--color-accent-soft);border-color:var(--color-accent-line)}.row .main{display:flex;flex-direction:column;min-width:0}.row .primary,.row .secondary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row .primary{font-weight:600}.row .secondary{font-size:var(--text-s);color:var(--color-text-3)}.row .aside{display:flex;flex-direction:column;align-items:flex-end;font-size:var(--text-xs);color:var(--color-text-3);white-space:nowrap}.row .aside b{display:flex;align-items:center;gap:5px;font-size:var(--text-xs);font-weight:600;color:var(--color-text-2)}.row.risk .headcode{background:var(--color-stop);box-shadow:none;color:var(--color-ink)}.dial{flex:none;width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.6}.dial.off{display:none}.dial .track{opacity:0.22}.dial .ring{stroke-linecap:round;transform:rotate(-90deg);transform-origin:center}.dial .hub{fill:currentColor;stroke:none;opacity:0}.dial.full .hub{opacity:1}.dial.full .ring{stroke-linecap:butt}.headcode{display:inline-grid;place-items:center;min-width:54px;padding:3px 7px;border-radius:var(--radius-s);background:var(--color-well-deep);box-shadow:inset 0 0 0 1px oklch(from var(--c) l c h / 0.5);color:oklch(from var(--c) calc(l + 0.08) c h);font:700 var(--text-m) / 1.2 var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:0.04em}.person-dot,.lamp{width:10px;height:10px;margin:0 var(--space-2)}.person-dot{border-radius:50%;background:var(--color-person);box-shadow:0 0 0 2px var(--color-ring)}.person-dot.signaller{background:var(--color-accent)}.lamp{border-radius:3px;background:var(--color-unplaced);box-shadow:inset 0 0 0 1px var(--color-line-strong)}.lamp[data-status=vacant]{background:var(--color-vacant)}.lamp[data-status=manned]{background:var(--color-stop)}.lamp[data-status=mixed]{background:var(--color-accent)}.server-tag{font-family:var(--font-mono)}.warning{color:var(--color-stop)}.card{position:fixed;z-index:16;left:var(--edge-left);bottom:var(--edge-bottom);width:min(340px,calc(100vw - var(--edge-left) - var(--edge-right)));padding:var(--space-4);border-radius:var(--radius-l);animation:card-in var(--dur-short) var(--ease-out)}@keyframes card-in{from{opacity:0;transform:translateY(8px)}}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}.card-title{min-width:0}.card-title h2{font:700 var(--text-xl) / 1.05 var(--font-mono);letter-spacing:0.02em;color:oklch(from var(--c, var(--color-text)) calc(l + 0.06) c h);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-title h2.name{font-family:var(--font-ui);font-size:21px;letter-spacing:-0.01em}.card-title p{margin-top:6px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-where{margin-top:2px;font-size:var(--text-s);color:var(--color-text-2)}.card-where:empty{display:none}.card-alert{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-3);color:var(--color-stop);font-size:var(--text-s);font-weight:600}.card-alert::before{content:"";flex:none;width:10px;height:10px;border-radius:3px;background:currentColor}.card dl{display:grid;gap:6px;margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-line);font-size:var(--text-s)}.card dl div{display:flex;justify-content:space-between;gap:var(--space-4)}.card dt{color:var(--color-text-3)}.card dd{min-width:0;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card dd .dial{margin-right:6px;vertical-align:-2px}.card dl.stacked div{display:grid;gap:2px}.card dl.stacked dd{text-align:left;white-space:normal}.card dd.vacant{color:var(--color-vacant)}.card .fact-link{padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px}.card-actions{display:flex;gap:var(--space-2);margin-top:var(--space-4)}.card-actions .control{flex:1;justify-content:center}.follow[aria-pressed=true]{background:var(--color-accent-soft);border-color:var(--color-accent-line);color:var(--color-accent-text)}.tip{position:fixed;z-index:17;left:0;top:0;display:grid;gap:1px;max-width:260px;padding:6px 10px;border-radius:var(--radius-s);font-size:var(--text-s);color:var(--color-text-2);pointer-events:none}.tip b{color:var(--color-text);font-weight:600}@media (hover: none){.tip{display:none}}.map-controls{position:fixed;z-index:14;right:calc(var(--edge-right) + var(--panel-w) + var(--space-3));bottom:var(--edge-bottom);display:flex;flex-direction:column;border-radius:var(--radius-m);overflow:hidden;transition:right var(--dur-long) var(--ease-out)}body.panel-closed .map-controls{right:var(--edge-right)}.map-controls button{display:grid;place-items:center;width:40px;height:40px;padding:0;border:0;background:transparent;color:var(--color-text-2);transition:background-color var(--dur-micro) var(--ease-out),color var(--dur-micro) var(--ease-out)}.map-controls button+button{border-top:1px solid var(--color-line)}.map-controls button:active{background:var(--color-surface-2);box-shadow:var(--press)}.map-controls button:focus-visible{outline-offset:-2px}#needle{stroke:none;transition:transform var(--dur-micro) linear}#needle .north{fill:var(--color-accent)}#needle .south{fill:currentColor;opacity:0.45}.list-toggle{position:fixed;z-index:14;top:var(--edge-top);right:var(--edge-right);padding:var(--space-1);border-radius:calc(var(--radius-m) + var(--space-1))}body:not(.panel-closed) .list-toggle{display:none}@media (hover: hover){.control:hover{background:var(--color-surface-3)}.join:hover{background:var(--color-accent-hover)}.icon-button:hover{background:var(--color-surface-3);color:var(--color-text)}.icon-button[aria-pressed=true]:hover,.sort.active:hover{background:var(--color-accent-soft);color:var(--color-accent-text)}.tabs button:hover{color:var(--color-text)}.search input:hover{border-color:var(--color-line-strong)}.row:hover{background:var(--color-surface-3)}.row[aria-current=true]:hover{background:var(--color-accent-soft)}.card .fact-link:hover{color:var(--color-text);text-decoration-style:solid}.map-controls button:hover{background:var(--color-surface-3);color:var(--color-text)}}@media (max-width: 768px){:root{--panel-w: 100vw}.topbar{right:var(--edge-right)}.picker{flex:1}.picker select{width:100%}.status{padding:0 var(--space-2)}.status:not([data-state=reconnecting]) span{display:none}.panel{top:auto;left:0;right:0;bottom:0;width:auto;height:min(72dvh,640px);border-radius:var(--radius-l) var(--radius-l) 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom)}body.panel-closed .panel{transform:translateY(100%)}.list-toggle{top:auto;left:50%;right:auto;bottom:var(--edge-bottom);translate:-50% 0}.map-controls{top:calc(var(--edge-top) + 58px);bottom:auto;right:var(--edge-right)}body:not(.panel-closed) .map-controls,body:not(.panel-closed) .card{display:none}.card{left:var(--edge-left);right:var(--edge-right);width:auto;bottom:calc(var(--edge-bottom) + 56px)}}@media (max-height: 520px){.card{width:min(320px,calc(100vw - var(--edge-left) - var(--edge-right)));padding:var(--space-3)}.card-title h2{font-size:var(--text-l)}.card dl{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-1) var(--space-4);margin-top:var(--space-3);padding-top:var(--space-2)}.card dl div{display:grid;gap:0}.card dd{text-align:left}.card-actions{margin-top:var(--space-3)}}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}
