:root{color-scheme:light;--blue:#c2410c;--brand:#c2410c;--bg:#f8fafc;--card:#fff;--fg:#0f172a;--mut:#64748b;--line:#e2e8f0;--input:#fff;--border:#cbd5e1;
--map-bg:#eef2f7;--stroke:#fff;--c0:#d1d5db;--c1:#93c5fd;--c2:#3b82f6;--c3:#1d4ed8;--c4:#1e3a8a;--chip0:#e5e7eb;--chip-fg:#0f172a;--chip-hi:#2563eb;
--label-fg:#fff;--label-stroke:#0f172a;--bubble-stroke:#0f172a;--bubble0:#e5e7eb;--bubble-fg:#0f172a;--toast:#0f172a;--toast-fg:#fff;--undo:#fbbf24;
--mine:#fff7ed;--tag:#ffedd5;--tag-fg:#9a3412;--tag2:#e0f2fe;--tag2-fg:#075985;--danger:#b91c1c;--danger-border:#fca5a5;--shadow:rgba(0,0,0,.08);--chart:#ea580c;--grid:#e2e8f0}
:root[data-theme=dark]{color-scheme:dark;--brand:#c2410c;--blue:#f97316;--bg:#0b1220;--card:#151e2e;--fg:#e5e7eb;--mut:#94a3b8;--line:#263247;--input:#0f172a;--border:#334155;
--map-bg:#0f1729;--stroke:#0b1220;--c0:#374151;--c1:#1e40af;--c2:#2563eb;--c3:#60a5fa;--c4:#bfdbfe;--chip0:#1f2937;--chip-fg:#e5e7eb;--chip-hi:#2563eb;
--label-fg:#fff;--label-stroke:#020617;--bubble-stroke:#e5e7eb;--bubble0:#374151;--bubble-fg:#f8fafc;--toast:#e5e7eb;--toast-fg:#0f172a;--undo:#c2410c;
--mine:#3b2414;--tag:#431407;--tag-fg:#fdba74;--tag2:#0c2d48;--tag2-fg:#7dd3fc;--danger:#f87171;--danger-border:#7f1d1d;--shadow:rgba(0,0,0,.4);--chart:#fb923c;--grid:#263247}
*{box-sizing:border-box}body{margin:0;font:15px/1.4 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--fg);padding-bottom:env(safe-area-inset-bottom)}
header{display:flex;gap:6px;align-items:center;padding:8px;padding-top:max(8px,env(safe-area-inset-top));background:var(--brand);position:sticky;top:0;z-index:5}
header a{color:#fff;text-decoration:none;padding:6px 12px;border-radius:8px;font-weight:600}header a.on{background:rgba(255,255,255,.22)}
header .who{margin-left:auto;min-width:0;color:#fff;font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.summary{text-align:center;padding:8px;font-size:16px}
.zoom{display:flex;gap:4px;justify-content:center;padding:0 8px 4px;flex-wrap:wrap}
.zoom button,.btn{border:1px solid var(--border);background:var(--card);border-radius:16px;padding:4px 12px;font-size:14px;color:var(--fg);text-decoration:none;display:inline-block;cursor:pointer}
.zoom button.on{background:var(--blue);color:#fff;border-color:var(--blue)}
#mapwrap{position:relative;height:min(62vh,112vw);touch-action:none;user-select:none;-webkit-user-select:none;overflow:hidden;background:var(--map-bg);border-radius:10px;margin:0 6px}
#mapwrap svg{width:100%;height:100%;display:block}
.zbtns{position:absolute;right:8px;top:8px;display:flex;flex-direction:column;gap:6px;z-index:2}.zbtns button{width:40px;height:40px;border-radius:10px;border:1px solid var(--border);background:var(--card);color:var(--fg);font-size:22px;line-height:1;box-shadow:0 1px 3px var(--shadow)}
.hit{display:none;cursor:pointer}svg.zoomed .hit{display:inline}.hit circle{fill-opacity:.9;stroke:var(--bubble-stroke);stroke-width:1.5;vector-effect:non-scaling-stroke}.hit.c0 circle{fill:var(--bubble0)}
.hit text{font-size:calc(11px * var(--u));font-weight:700;text-anchor:middle;dominant-baseline:central;fill:var(--bubble-fg);pointer-events:none}.hit.c2 text,.hit.c3 text{fill:#fff}.hit.c4 text{fill:var(--c4-text,#fff)}
svg.zoomed #labels text{display:inline}.center{text-align:center}.hint{margin:4px 10px}
#mapwrap path{stroke:var(--stroke);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .2s}#mapwrap path:active{opacity:.6}
#labels text{font-weight:bold;font-family:sans-serif;font-size:calc(15px * var(--u));text-anchor:middle;dominant-baseline:middle;fill:var(--label-fg);paint-order:stroke;stroke:var(--label-stroke);stroke-width:3px;vector-effect:non-scaling-stroke;pointer-events:none}
.c0{fill:var(--c0)}.c1{fill:var(--c1)}.c2{fill:var(--c2)}.c3{fill:var(--c3)}.c4{fill:var(--c4)}
.legend{text-align:center;color:var(--mut);font-size:12px}.sw{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:middle;margin-left:6px}
.sw.c0{background:var(--c0)}.sw.c1{background:var(--c1)}.sw.c2{background:var(--c2)}.sw.c3{background:var(--c3)}.sw.c4{background:var(--c4)}
#note,#search{display:block;width:calc(100% - 16px);margin:8px;padding:10px;font-size:16px;border:1px solid var(--border);border-radius:10px;background:var(--input);color:var(--fg)}
.pick h3{margin:10px 10px 4px;font-size:13px;color:var(--mut);text-transform:uppercase}
.chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 8px}
.chip{border:0;border-radius:16px;padding:6px 10px;font-size:14px;cursor:pointer;color:var(--chip-fg)}
.chip b{margin-left:6px}.chip.c0{background:var(--chip0)}.chip.c1{background:var(--c1)}.chip.c2,.chip.c3,.chip.c4{background:var(--chip-hi);color:#fff}:root[data-theme=dark] .chip.c1{color:#fff}
#toast{position:fixed;left:12px;right:12px;bottom:calc(16px + env(safe-area-inset-bottom));background:var(--toast);color:var(--toast-fg);border-radius:12px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between;box-shadow:0 6px 20px rgba(0,0,0,.3);z-index:9}
#toast[hidden]{display:none}#undo{background:none;border:0;color:var(--undo);font-weight:700;font-size:15px}
.card{background:var(--card);margin:10px;padding:12px;border-radius:12px;box-shadow:0 1px 3px var(--shadow)}.card h2{margin:0 0 8px;font-size:17px}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px}.tiles div{background:var(--card);border-radius:12px;padding:10px;text-align:center;box-shadow:0 1px 3px var(--shadow)}
.tiles b{display:block;font-size:22px;color:var(--blue)}.tiles span{font-size:12px;color:var(--mut)}
.bar{display:flex;align-items:center;gap:8px;margin:4px 0}.bar span{width:70px}.bar i{height:14px;background:var(--c2);border-radius:4px}
table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:4px;border-bottom:1px solid var(--line)}
details{margin:6px 0}progress{width:100%}.muted{color:var(--mut);font-size:13px}.note{font-size:13px}
.srow{display:flex;flex-wrap:wrap;justify-content:space-between;border-bottom:1px solid var(--line);padding:6px 0}.acts button{background:none;border:0;font-size:18px}
.editf{width:100%;display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}.editf[hidden]{display:none}.editf input{flex:1}
body.login{display:grid;place-items:center;min-height:100vh}.login .card{text-align:center;width:min(340px,90vw)}
.login input{width:100%;padding:12px;font-size:17px;margin:8px 0;border:1px solid var(--border);border-radius:10px;background:var(--input);color:var(--fg)}
.login button{width:100%;padding:12px;font-size:17px;background:var(--brand);color:#fff;border:0;border-radius:10px}.err{color:var(--danger)}
.filter{padding:10px 10px 0}.filter select,.editf select,.editf input{font-size:16px;padding:6px;border-radius:8px;background:var(--input);color:var(--fg);border:1px solid var(--border)}
#board tr.mine{background:var(--mine)}#board td:first-child{width:28px}
.stack{display:flex;flex-direction:column;gap:8px}.stack input:not([type=checkbox]){padding:10px;font-size:16px;border:1px solid var(--border);border-radius:10px;background:var(--input);color:var(--fg)}
.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand);padding:8px 14px;font-size:15px}.btn.danger{color:var(--danger);border-color:var(--danger-border)}
.urow{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px;border-bottom:1px solid var(--line);padding:8px 0}.urow .acts{display:flex;gap:4px;flex-wrap:wrap}
.tag{background:var(--tag);color:var(--tag-fg);border-radius:6px;padding:0 6px;font-size:12px}.tag.me{background:var(--tag2);color:var(--tag2-fg)}
.urow .acts .btn{border:1px solid var(--border);font-size:13px;padding:4px 10px}.urow .acts .btn.danger{border-color:var(--danger-border)}
.login img{border-radius:18px}
:root[data-theme=dark] .hit.c4 text{fill:#0f172a}:root[data-theme=dark] .chip.c4{background:var(--c3);color:#0f172a}
a{color:var(--blue)}
.legend{display:flex;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap;padding:2px 8px}
.lg-bar{display:inline-block;width:140px;height:12px;border-radius:6px;border:1px solid var(--border)}.lg-n{font-weight:700;color:var(--fg)}
#mapwrap path.seen{transition:fill .25s}.hit.seen circle{fill-opacity:1}
header .logo{width:28px;height:28px;border-radius:6px;flex:none;box-shadow:0 0 0 1px rgba(255,255,255,.35)}
header a{padding:6px 8px}
.gpsrow{text-align:center;margin:-2px 0 6px}.pill{border:1px solid var(--border);background:var(--card);color:var(--fg);border-radius:999px;padding:3px 12px;font-size:13px;cursor:pointer}
.pill.on{background:var(--lock-pill);border-color:var(--brand);color:var(--fg);font-weight:600}.pill.off{color:var(--mut)}
:root{--lock-bg:rgba(255,255,255,.55);--lock-line:rgba(15,23,42,.45);--lock-pill:#ffedd5}
:root[data-theme=dark]{--lock-bg:rgba(0,0,0,.45);--lock-line:rgba(226,232,240,.45);--lock-pill:#431407}
#lock .lockfill{fill:url(#hatch);stroke:var(--brand);stroke-width:2.5;vector-effect:non-scaling-stroke;pointer-events:none}
#lock .lockicon{font-size:calc(18px * var(--u));transform:translateY(calc(-17px * var(--u)));text-anchor:middle;dominant-baseline:central;pointer-events:none}

.chip.locked{opacity:.55;text-decoration:line-through}
.switch{display:flex;gap:8px;align-items:flex-start}.switch input{width:20px;height:20px;flex:none}
header{gap:4px}header a{padding:6px 7px;font-size:14px;white-space:nowrap}header .who{font-size:13px}
.row2{display:flex;gap:8px;flex-wrap:wrap}.row2 label{display:flex;align-items:center;gap:6px;color:var(--mut);font-size:14px}
.row2 input,.row2 select{width:90px;padding:8px;font-size:16px;border:1px solid var(--border);border-radius:10px;background:var(--input);color:var(--fg)}
.inv{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px;border-bottom:1px solid var(--line);padding:8px 0}.inv .acts{display:flex;gap:4px;flex-wrap:wrap}
.inv .acts .btn{border:1px solid var(--border);font-size:13px;padding:4px 10px}.inv.dead .inv-main{opacity:.6}.inv .acts{align-self:flex-start;align-items:flex-start}
code.link{display:block;font-size:12px;word-break:break-all;color:var(--mut);margin-top:2px}
.login .card a{color:var(--blue)}
header a.who{margin-left:auto;padding:6px 6px}
.uname{background:none;border:0;padding:0;font:inherit;font-weight:700;color:var(--fg);cursor:pointer}.uname .chev{color:var(--mut);font-size:12px}
.urow .acts[hidden]{display:none}.urow .acts{width:100%}
.seg{display:flex;gap:6px;flex-wrap:wrap}.seg label{border:1px solid var(--border);border-radius:999px;padding:6px 12px;cursor:pointer;background:var(--card)}
.seg label.on{background:var(--brand);color:#fff;border-color:var(--brand)}.seg input{position:absolute;opacity:0;pointer-events:none}
.fl{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}.fl input{padding:10px;font-size:16px;border:1px solid var(--border);border-radius:10px;background:var(--input);color:var(--fg)}
.need-email{border:2px solid var(--brand)}.warn{color:var(--danger)}
#mapwrap,#mapwrap *,.chips,.chip{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}
#pop{position:fixed;z-index:20;min-width:220px;max-width:min(320px,92vw);background:var(--card);color:var(--fg);border:1px solid var(--border);border-radius:14px;padding:10px 12px;box-shadow:0 10px 30px var(--shadow)}
.pop-h{display:flex;justify-content:space-between;align-items:center;gap:8px}.pop-x{background:none;border:0;color:var(--mut);font-size:16px;cursor:pointer}
.pop-n{margin:6px 0}.pop-a{display:flex;gap:6px}.pop-a .btn{flex:1;padding:8px;font-size:15px}.pop-a .btn:disabled{opacity:.4;cursor:not-allowed}.pop-note{margin:6px 0 0}
#invhist{margin-top:12px}#invhist>summary{cursor:pointer;font-weight:600;padding:6px 0;list-style-position:inside}
.invf{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}.invf button{border:1px solid var(--border);background:var(--card);color:var(--fg);border-radius:999px;padding:3px 10px;font-size:13px;cursor:pointer}
.invf button[aria-pressed=true]{background:var(--accent,#c2410c);color:#fff;border-color:transparent}
.inv-main{min-width:0;flex:1 1 220px}.inv code.link{word-break:break-all;font-size:12px}
.tag.st-active{background:var(--tag2);color:var(--tag2-fg)}.tag.st-revoked,.tag.st-expired{background:#fee2e2;color:#991b1b}.tag.st-used-up{background:#e0e7ff;color:#3730a3}
:root[data-theme=dark] .tag.st-revoked,:root[data-theme=dark] .tag.st-expired{background:#7f1d1d;color:#fecaca}:root[data-theme=dark] .tag.st-used-up{background:#312e81;color:#c7d2fe}
.danger-zone{border:1px solid #fca5a5}:root[data-theme=dark] .danger-zone{border-color:#7f1d1d}.danger-zone h2{color:#b91c1c}:root[data-theme=dark] .danger-zone h2{color:#fca5a5}
.btn.danger:disabled{opacity:.45;cursor:not-allowed}
header a.info{margin-left:auto;padding:4px 9px;font-size:18px;line-height:1;font-weight:700}header a.info+a.who{margin-left:0}
.help h2{margin:0 0 6px}.help p,.help li{line-height:1.5}.help ul{padding-left:20px;margin:6px 0}.help .heat{display:inline-block;width:110px;height:10px;border-radius:5px;background:linear-gradient(90deg,#2563eb,#9333ea,#db2777,#dc2626);vertical-align:middle}
.help-top{padding:10px 14px 0}.help-top a{color:var(--blue)}
