/* Layout: one-screen field console. Command bar on top, kit rail on the left
   (bottom strip on phones), map stage fills the rest. */
:root{
  --bg:#dde1d3; --panel:#eceee5; --fg:#1c2117; --muted:#586049; --line:#b3baa2;
  --accent:#b5531a; --accent-fg:#fff7ef; --stage:#c6cbb6; --grid:rgba(28,33,23,.30);
  --chip:#e1e4d7; --hud:rgba(236,238,229,.94); --warn:#9c3a1d;
  --f-display:"Saira Stencil One","Arial Narrow",Impact,sans-serif;
  --f-body:"Saira Semi Condensed","Arial Narrow",system-ui,sans-serif;
  --f-mono:"JetBrains Mono",ui-monospace,Consolas,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){:root{
  --bg:#141812; --panel:#1b2018; --fg:#dbe1cc; --muted:#8f987d; --line:#323a2a;
  --accent:#e0782d; --accent-fg:#1a0f06; --stage:#0e110c; --grid:rgba(219,225,204,.16);
  --chip:#242a20; --hud:rgba(27,32,24,.94); --warn:#ef8a5e; color-scheme:dark}}

*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--fg);font-family:var(--f-body);font-size:15px;line-height:1.35;overflow:hidden;
  padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sr{position:absolute;left:-9999px}
.contents{display:contents}

.app{height:100%;display:grid;grid-template-rows:auto 1fr}
.bar{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;padding-block:9px;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));
  background:var(--panel);border-bottom:1px solid var(--line)}
.brand{font-family:var(--f-display);font-size:22px;letter-spacing:.05em;line-height:1;white-space:nowrap}
.brand small{display:block;font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;color:var(--muted);margin-top:3px}
.mapsel{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
select#mapSelect{background:var(--chip);border:1px solid var(--line);border-radius:4px;padding:6px 8px;min-width:150px;max-width:220px;font-weight:600}
.btn{background:var(--chip);border:1px solid var(--line);border-radius:4px;padding:6px 10px;font-weight:600;font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.btn:hover{border-color:var(--muted)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}
.btn.danger{color:var(--warn)}
.btn.armed{background:var(--warn);border-color:var(--warn);color:var(--accent-fg)}
.btn:disabled{opacity:.5;cursor:wait}
.spacer{flex:1}
.roster{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.roster .lbl{font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;margin-left:4px}
.who{font-size:12px;font-weight:600;padding:2px 7px;border-radius:3px;background:var(--chip);border:1px solid var(--line);display:inline-flex;align-items:center;gap:5px}
.who i{width:8px;height:8px;border-radius:50%;display:inline-block}
.pill{font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;padding:3px 7px;border-radius:3px;border:1px solid var(--line);color:var(--muted);text-transform:uppercase}
.pill.live{color:var(--accent);border-color:var(--accent)}

/* Leader mode */
.leadbox{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.leadbox .btn{font-size:13px;padding:5px 9px}
.pill.lead{color:var(--fg);border-color:var(--fg);font-weight:600}
.pill.lead.mine{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}
.pill.lead.away{color:var(--muted);border-color:var(--line);border-style:dashed}
.passwrap{position:relative}
.passmenu{position:absolute;right:0;top:calc(100% + 6px);z-index:15;min-width:200px;max-width:min(280px,calc(100vw - 32px));
  background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:6px;display:flex;flex-direction:column;gap:2px;
  box-shadow:0 8px 24px rgba(0,0,0,.25)}
.passmenu h4{margin:2px 6px 4px;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
.passmenu button{background:transparent;border:0;border-radius:4px;padding:7px 8px;text-align:left;font-weight:600;display:flex;align-items:center;gap:8px}
.passmenu button:hover,.passmenu button:focus-visible{background:var(--chip)}
.passmenu button i{width:8px;height:8px;border-radius:50%;flex:none}
.passmenu p{margin:4px 8px 6px;font-size:13px;color:var(--muted)}
.who.leader{border-color:var(--fg)}
.who .star{color:var(--accent);font-style:normal;font-weight:700}

/* Followers can look, zoom and ping, but the edit controls are hidden. */
body.follower .kinds-g,body.follower .label-g,body.follower .edit-only,body.follower #newMap{display:none!important}
.banner.info{border-color:var(--line);color:var(--fg)}
#offlineBanner:not([hidden]) ~ #leadBanner{top:44px}

.newmap{flex-basis:100%;display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding-top:4px}
.chip{background:var(--chip);border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:13px;font-weight:600}
.chip:hover{border-color:var(--accent);color:var(--accent)}
.newmap input{background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:5px 8px;width:170px}

.main{display:grid;grid-template-columns:236px 1fr;min-height:0}
.kit{background:var(--panel);border-right:1px solid var(--line);overflow:auto;display:flex;flex-direction:column;gap:18px;
  padding-block:14px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:14px}
.grp{display:flex;flex-direction:column;gap:7px;min-width:0}
.grp h3{margin:0;font-family:var(--f-mono);font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.tools{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.tool{background:var(--chip);border:1px solid var(--line);border-radius:4px;padding:7px 4px 5px;display:flex;flex-direction:column;align-items:center;gap:1px;font-weight:600;font-size:13px}
.tool kbd{font-family:var(--f-mono);font-size:9.5px;color:var(--muted)}
.tool[aria-pressed="true"]{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.tool[aria-pressed="true"] kbd{color:var(--bg);opacity:.7}
.tool:disabled{opacity:.38;cursor:not-allowed}
.kinds{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.kind{background:transparent;border:1px solid var(--line);border-radius:4px;padding:5px 6px;display:flex;align-items:center;gap:7px;font-size:13px;font-weight:500;text-align:left}
.kind b{width:20px;height:20px;border-radius:50%;background:var(--fg);color:var(--bg);display:grid;place-items:center;font-family:var(--f-mono);font-size:11px;flex:none}
.kind[aria-pressed="true"]{border-color:var(--accent);background:var(--chip)}
.kind[aria-pressed="true"] b{background:var(--accent);color:var(--accent-fg)}
.swatches{display:flex;gap:7px;flex-wrap:wrap}
.sw{width:26px;height:26px;border-radius:50%;border:2px solid var(--line);padding:0}
.sw[aria-pressed="true"]{border-color:var(--fg);box-shadow:0 0 0 2px var(--panel) inset}
#label{background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:6px 8px;width:100%}
.hint{font-size:12px;color:var(--muted);margin:0}
.acts{display:flex;flex-wrap:wrap;gap:5px}
.acts .btn{font-size:13px;padding:5px 8px}
.keys{font-family:var(--f-mono);font-size:10.5px;color:var(--muted);line-height:1.6;margin:0}

.stage{position:relative;overflow:hidden;background:var(--stage);touch-action:none;cursor:grab;min-width:0}
.stage[data-tool="marker"],.stage[data-tool="note"],.stage[data-tool="route"],.stage[data-tool="ping"]{cursor:crosshair}
.stage[data-tool="erase"]{cursor:pointer}
.stage.dragging{cursor:grabbing}
#world{position:absolute;left:0;top:0;transform-origin:0 0;background:var(--stage)}
#mapImg{position:absolute;inset:0;width:100%;height:100%;user-select:none;-webkit-user-drag:none;pointer-events:none}
#ov{position:absolute;inset:0;overflow:visible}
.gl{stroke:var(--grid);stroke-width:1px;vector-effect:non-scaling-stroke}
.has-img .gl{stroke:rgba(240,236,220,.32)}
.gt{font:600 12px var(--f-mono);fill:#f2efe3;stroke:rgba(12,14,10,.85);stroke-width:3px;paint-order:stroke;text-anchor:middle;dominant-baseline:central}
.blank{font:20px var(--f-display);fill:var(--muted);text-anchor:middle;letter-spacing:.1em;opacity:.55}
.casing{fill:none;stroke:rgba(10,12,8,.78);stroke-width:8px;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.ink{fill:none;stroke-width:3.5px;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.head{stroke:rgba(10,12,8,.78);stroke-width:1.5px}
.mk-ring{fill:rgba(10,12,8,.82)}
.glyph{font:700 12px var(--f-mono);fill:#0d0f0b;text-anchor:middle;dominant-baseline:central}
.lbl{font:600 13px var(--f-body);fill:#f4f1e6;stroke:rgba(10,12,8,.88);stroke-width:3.5px;paint-order:stroke;text-anchor:middle}
.notet{font:700 17px var(--f-body);stroke:rgba(10,12,8,.9);stroke-width:4px;paint-order:stroke;text-anchor:middle;dominant-baseline:central;letter-spacing:.02em}
.stage[data-tool="erase"] .it:hover{opacity:.45}
.ping circle{fill:none;stroke-width:3px}
.ping .pc{stroke:rgba(10,12,8,.8);stroke-width:1.5px}
.pr{transform-box:fill-box;transform-origin:center;animation:pingr 1.3s ease-out 2 both}
.pr.d2{animation-delay:.3s}
@keyframes pingr{from{transform:scale(.25);opacity:1}to{transform:scale(3.2);opacity:0}}
@media (prefers-reduced-motion: reduce){.pr{animation:none;opacity:.85}}

#cursors{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.cur{position:absolute;left:0;top:0;display:flex;align-items:flex-start;gap:2px;transition:transform .08s linear}
.cur span{font:600 11px var(--f-body);background:rgba(12,14,10,.85);color:#f2efe3;padding:1px 6px;border-radius:3px;margin-top:12px;white-space:nowrap}
@media (prefers-reduced-motion: reduce){.cur{transition:none}}

.hud{position:absolute;left:max(10px,env(safe-area-inset-left,0px));top:10px;background:var(--hud);border:1px solid var(--line);border-radius:4px;padding:4px 8px;font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;font-variant-numeric:tabular-nums;pointer-events:none}
.hud b{color:var(--accent)}
.zoom{position:absolute;right:max(10px,env(safe-area-inset-right,0px));bottom:10px;display:flex;flex-direction:column;gap:4px}
.zoom button{width:34px;height:34px;background:var(--hud);border:1px solid var(--line);border-radius:4px;font-weight:700;font-size:16px}
.zoom button.fit{font-size:12px}
#focusBtn{display:grid;place-items:center;margin-bottom:6px}
#focusBtn .ic-close,#focusBtn[aria-pressed="true"] .ic-open{display:none}
#focusBtn[aria-pressed="true"] .ic-close{display:block}

/* Fullscreen map: hide the top bar and tool panel, let the map take the whole screen.
   Tools, keyboard shortcuts, zoom and live sync keep working. */
body.focus .bar,body.focus .kit{display:none}
body.focus .app{grid-template-rows:1fr}
body.focus .main{grid-template-columns:1fr;grid-template-rows:1fr}
body.focus .zoom{bottom:max(10px,env(safe-area-inset-bottom,0px))}
body.focus .hud{top:max(10px,env(safe-area-inset-top,0px));bottom:auto}
#zoomLbl{font-family:var(--f-mono);font-size:10px;text-align:center;background:var(--hud);border-radius:3px;padding:2px 0;font-variant-numeric:tabular-nums}

.empty{position:absolute;inset:0;display:grid;place-items:center;padding:24px max(16px,env(safe-area-inset-right,0px)) 24px max(16px,env(safe-area-inset-left,0px));text-align:center}
.card{max-width:440px;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:22px;display:flex;flex-direction:column;gap:12px;align-items:center}
.empty h2{margin:0;font-family:var(--f-display);font-size:26px;letter-spacing:.04em;font-weight:400;text-wrap:balance}
.empty p{margin:0;color:var(--muted);max-width:42ch}
.empty .chips{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}

.banner{position:absolute;left:50%;transform:translateX(-50%);top:10px;background:var(--hud);border:1px solid var(--warn);color:var(--warn);border-radius:4px;padding:4px 10px;font-size:12.5px;font-weight:600;max-width:calc(100% - 32px);text-align:center}
#toast{position:fixed;left:50%;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--fg);color:var(--bg);padding:8px 14px;border-radius:4px;font-weight:600;font-size:14px;max-width:calc(100% - 32px);z-index:20;text-align:center}

.login{position:fixed;inset:0;background:var(--bg);display:grid;place-items:center;padding:24px 16px;z-index:30}
.login .card{width:100%;max-width:360px;align-items:stretch;text-align:left}
.login .brand.big{font-size:30px;text-align:center}
.login label{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:-6px}
.login input{background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:9px 10px;font-size:16px}
.login .btn{padding:10px;font-size:16px}
.err{margin:0;color:var(--warn);font-weight:600;font-size:14px}

@media (max-width:760px){
  .brand{font-size:19px}
  .brand small{display:none}
  .main{grid-template-columns:1fr;grid-template-rows:1fr auto}
  .stage{order:1}
  .kit{order:2;flex-direction:row;border-right:0;border-top:1px solid var(--line);overflow-x:auto;overflow-y:hidden;gap:16px;
    padding-block:10px;padding-right:max(16px,env(safe-area-inset-right,0px));max-height:46vh}
  .grp{flex:none}
  .grp.tools-g{width:200px}
  .grp.kinds-g{width:230px}
  .grp.label-g{width:180px}
  .grp.acts-g{width:240px}
  .grp.help{display:none}
  .hud{top:auto;bottom:10px}
}
