/* ═══════════════════════════════════════════════════════════════════════════
   REFUGEBOT — COMMAND DECK design framework
   Defense-grade operations console. Squared geometry, hairline frames, one
   signal-orange accent. The page IS the product.

   FONTS — canonical Google Fonts URL. Load via <link> in every page <head>
   (NO @import — fonts load from markup, this file assumes they exist):

   <link rel="preconnect" href="https://fonts.googleapis.com">
   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
   <link href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">

   SECTIONS
     00  Tokens (Command Deck core + legacy alias tokens)
     01  Reset + base
     02  Global chrome — telemetry strip / icon rail / registration ticks
     03  Deck primitives — zone headers, datastrip, ledger, loadout,
         transmission footer, ops console card, chamfer, LEDs
     04  Hero atmosphere (body.pub only — sodium dusk + ridge + grid)
     05  Components — buttons, cards, tables, inputs, status tags, modals,
         rocker toggles, scrollbars, focus
     06  Legacy app classes (same selectors, Deck-restyled)
     07  Admin shell — instrument rail, pane headers, console, map
     08  Mobile passes (<1280 / <1024 / <800 / <480) + motion + a11y
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 00 · TOKENS ──────────────────────────────────────────────────────────── */
:root{
  /* surfaces: cold graphite, blue-leaning — the green-black era is over */
  --bg-0:#07090d;            /* page */
  --bg-1:#0a0d12;            /* alternating bands, chrome (strip/rail) */
  --srf-0:#0d1117;           /* panel / card */
  --srf-1:#11161d;           /* raised / hover */
  --srf-2:#161c25;           /* active / selected */
  --console:#05070a;         /* console + map viewports */

  /* ink */
  --ink:#e8edf2;             /* primary text */
  --ink-2:#aab4c0;           /* secondary */
  --ink-3:#6b7684;           /* muted labels (NON-interactive only) */
  --ink-4:#3d4754;           /* faint / disabled */

  /* hairlines + frames */
  --line:rgba(232,237,242,.10);
  --line-hi:rgba(232,237,242,.22);
  --frame:rgba(232,237,242,.14);    /* registration ticks/brackets */

  /* signal — the ONE brand accent (interactive, active, brand) */
  --signal:#ff6b1a;
  --signal-hi:#ff8a47;
  --signal-dim:rgba(255,107,26,.13);
  --on-signal:#0a0d12;       /* text on signal fills */

  /* scan — cool data accent: links in copy, chart strokes, map grid */
  --scan:#5fb2ff;
  --scan-dim:rgba(95,178,255,.12);

  /* status — functional ONLY, never decorative */
  --ok:#2ee06b;      --ok-dim:rgba(46,224,107,.12);
  --danger:#ff4242;  --danger-dim:rgba(255,66,66,.12);
  --warn:#ffc53d;    --warn-dim:rgba(255,197,61,.12);
  --gold:#f2c14e;    --gold-dim:rgba(242,193,78,.12);  /* currency only */
  --coin:#d4a050;    /* coin currency (player wallets) — distinct from gold */

  /* type */
  --display:'Chakra Petch',system-ui,sans-serif;
  --sans:'IBM Plex Sans',system-ui,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;

  /* shape */
  --r:2px;                   /* global radius — 12px is dead */
  --notch:10px;
  --chamfer:polygon(0 0,calc(100% - var(--notch)) 0,100% var(--notch),100% 100%,0 100%);
  --chamfer-sm:polygon(0 0,calc(100% - 6px) 0,100% 6px,100% 100%,0 100%);

  /* texture — rationed: grid in hero/map only, scanlines in console only */
  --grid-img:linear-gradient(rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.03) 1px,transparent 1px);
  --grid-size:56px 56px;
  --scanlines:repeating-linear-gradient(0deg,rgba(255,255,255,.02) 0 1px,transparent 1px 3px);
  --hazard:repeating-linear-gradient(135deg,rgba(255,66,66,.75) 0 10px,rgba(255,66,66,.08) 10px 20px);

  /* crest identity families (plugins Module Bay §3.1) — crest identity ONLY:
     never status, never interactive. f2/f4/f5 sit in empty wheel slots
     (172° / 262° / 315°) so they can't be read as ok/danger/warn/signal/scan. */
  --crest0-ink:#ff6b1a; --crest0-bg:rgba(255,107,26,.10); --crest0-bd:rgba(255,107,26,.30);
  --crest1-ink:#5fb2ff; --crest1-bg:rgba(95,178,255,.10); --crest1-bd:rgba(95,178,255,.30);
  --crest2-ink:#2ed9c3; --crest2-bg:rgba(46,217,195,.10); --crest2-bd:rgba(46,217,195,.30);
  --crest3-ink:#a78bfa; --crest3-bg:rgba(167,139,250,.10); --crest3-bd:rgba(167,139,250,.30);
  --crest4-ink:#e570c0; --crest4-bg:rgba(229,112,192,.10); --crest4-bd:rgba(229,112,192,.30);
  --crest5-ink:#93a4b8; --crest5-bg:rgba(147,164,184,.10); --crest5-bd:rgba(147,164,184,.28);

  /* layout + motion */
  --strip-h:34px; --rail-w:64px; --dock-h:56px; --gutter:48px;
  --strip-total:calc(var(--strip-h) + env(safe-area-inset-top, 0px));
  --fast:120ms linear; --med:240ms cubic-bezier(.2,0,.2,1);

  /* ── legacy alias tokens — old names resolve to Deck values so the
        hundreds of inline style="" attributes keep working ───────────── */
  --bg:        var(--bg-0);
  --bg2:       var(--bg-1);
  --bg3:       var(--srf-1);
  --panel:     var(--srf-0);
  --border:    var(--line);
  --border-hi: var(--line-hi);
  --accent:    var(--signal);
  --accent2:   var(--scan);
  --accent3:   var(--signal-hi);
  --ember:     var(--signal-hi);
  --text:      var(--ink);
  --muted:     var(--ink-2);   /* judge fix: legacy muted text is everywhere
                                  interactive — alias to --ink-2, never --ink-3 */
  --green:     var(--ok);
  --red:       var(--danger);
  --radius:    var(--r);
  --radius-sm: var(--r);
  --radius-pill: 3px;          /* pills are rectangular tags now */
  --ease:      cubic-bezier(.2,0,.2,1);
  --ease-pop:  cubic-bezier(.2,0,.2,1);   /* nothing bounces on the deck */
  --shadow-md: 0 8px 24px rgba(0,0,0,.45);   /* floating elements only */
  --shadow-lg: 0 16px 48px rgba(0,0,0,.55);
  --glow:      0 0 0 1px var(--line-hi);     /* "glow" is now a hairline ring */
}

/* ── Native dropdowns — theme EVERY <select> + its option popup to the Deck.
      Native option lists render browser-white otherwise, and the scattered
      inline style="" on old <select>s give boxes inconsistent radii/fills.
      Force the squared dark look here so all dropdowns (incl. the language
      picker + the cross-server / shared-economy pickers) match the site. The
      !important is what overrides those per-element inline styles. */
select{
  -webkit-appearance:none !important; -moz-appearance:none !important; appearance:none !important;
  background-color:var(--srf-0) !important;
  color:var(--ink) !important;
  border:1px solid var(--line) !important;
  border-radius:var(--r) !important;
  font-family:var(--sans);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23ff6b1a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 10px center !important;
  padding-right:30px !important;
  cursor:pointer;
}
select:hover{ border-color:var(--line-hi) !important; }
select:focus{ outline:none; border-color:var(--signal) !important; box-shadow:0 0 0 1px var(--signal-dim); }
select:disabled{ opacity:.55; cursor:not-allowed; }
select option, select optgroup{ background-color:var(--srf-0); color:var(--ink); }
select option:checked{ background-color:var(--srf-2); color:var(--ink); }

/* ── 01 · RESET + BASE ───────────────────────────────────────────────────── */
*           { box-sizing: border-box; margin: 0; padding: 0; }
html        { min-height: 100%; background: #05070a; scroll-behavior: smooth; }
/* Utility: elements with class="hidden" are removed from layout. Several pages
   (Admin whitelist banner, items dev-hint) toggle this class in JS assuming the
   rule exists — it previously did not, so those elements rendered permanently
   visible (forum #76). !important so it wins over an element's inline display. */
.hidden { display: none !important; }
body {
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.6;
  color: var(--ink);
  min-height: 100vh;
  min-height: 100dvh;
  background-color: var(--bg-0);
  padding-bottom: env(safe-area-inset-bottom);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* The radial-bloom wallpaper is DEAD. Flat graphite; depth comes from
   hairlines and one-step surface shifts, never glow. (body::before freed.) */

a       { color: var(--scan); text-decoration: none; transition: color var(--fast); }
a:hover { color: var(--ink); }
::selection { background: rgba(255,107,26,.28); color: var(--ink); }

h1, h2, h3 { font-family: var(--display); color: var(--ink); }
code, kbd, pre { font-family: var(--mono); }

/* One-line fleet-wide icon squaring — kills rounded caps on every inline SVG */
svg { stroke-linejoin: miter; stroke-linecap: square; }

.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px; }

/* ── 02 · GLOBAL CHROME ──────────────────────────────────────────────────── */
/* TELEMETRY STRIP — fixed 34px, opaque (no backdrop-filter dependence). */
.deck-strip {
  position: fixed; top: 0; left: 0; right: 0; z-index: 60;
  height: var(--strip-total);
  display: flex; align-items: center; gap: 18px;
  padding: env(safe-area-inset-top, 0px) calc(16px + env(safe-area-inset-right)) 0 calc(16px + env(safe-area-inset-left));
  background: var(--bg-1);
  border-bottom: 1px solid var(--line);
  font-family: var(--mono); font-size: 10.5px; font-weight: 500;
  letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3);
  white-space: nowrap;
  transition: border-color var(--med);
}
.deck-strip b { color: var(--ink-2); font-weight: 500; }
.deck-strip .gap { flex: 1; }
.deck-strip a { color: var(--ink-2); }
.deck-strip a:hover { color: var(--ink); }
.deck-strip.scrolled { border-bottom-color: var(--line-hi); }
.deck-brand { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-weight: 500; }
.deck-brand b { color: var(--ink-3); }
.deck-strip-item { display: inline-flex; align-items: center; gap: 6px; }
/* cross-link to the community site — quiet until hovered, then signal */
a.deck-strip-link { color: var(--ink-3); }
a.deck-strip-link:hover { color: var(--signal); }
.deck-auth {
  color: var(--signal) !important; border: 1px solid currentColor;
  padding: 3px 10px; letter-spacing: .14em;
}
.deck-auth:hover { background: var(--signal-dim); }
/* Search trigger mounted into the deck strip (admin page). Compact to fit 34px. */
.deck-strip-search {
  display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r);
  color: var(--ink-2); padding: 3px 9px; margin-right: 2px;
  font-family: var(--mono); font-size: 10px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase;
  transition: border-color var(--med), color var(--med);
}
.deck-strip-search:hover { border-color: var(--signal); color: var(--ink); }
.deck-strip-search svg { color: var(--signal); flex: 0 0 auto; }
.deck-strip-search kbd { font-size: 9px; padding: 1px 4px; border: 1px solid var(--line); border-radius: 3px; color: var(--signal); letter-spacing: .08em; }
@media (max-width: 720px) { .deck-strip-search span { display: none; } .deck-strip-search kbd { display: none; } }

/* square LEDs — never circles */
.led {
  display: inline-block; width: 6px; height: 6px; flex-shrink: 0;
  background: var(--ok); box-shadow: 0 0 8px currentColor; color: var(--ok);
  animation: led 2.4s infinite;
}
.led.bad  { background: var(--danger); color: var(--danger); animation: none; }
.led.warn { background: var(--warn);   color: var(--warn); }
.led.idle { background: var(--ink-4);  color: var(--ink-4); box-shadow: none; animation: none; }
@keyframes led { 50% { opacity: .45; } }

/* ICON RAIL — fixed 64px left (marketing chrome). App pages run rail-less. */
.deck-rail {
  position: fixed; left: 0; top: var(--strip-total); bottom: 0; z-index: 50;
  width: var(--rail-w);
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 14px 0 calc(14px + env(safe-area-inset-bottom));
  background: var(--bg-1);
  border-right: 1px solid var(--line);
}
.deck-mark {
  width: 34px; height: 34px; display: grid; place-items: center; flex-shrink: 0;
  border: 1px solid var(--signal); color: var(--signal);
  font: 700 12px var(--display); text-decoration: none;
  clip-path: polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%);
  margin-bottom: 10px;
  transition: background var(--fast), color var(--fast);
}
.deck-mark:hover { background: var(--signal); color: var(--on-signal); }
.rail-item {
  position: relative;
  width: 40px; height: 40px; display: grid; place-items: center;
  color: var(--ink-2);            /* judge fix: interactive ≥ --ink-2 */
  transition: color var(--fast), background var(--fast), box-shadow var(--fast);
}
.rail-item svg { width: 20px; height: 20px; }
.rail-item:hover { color: var(--ink); background: rgba(232,237,242,.04); }
.rail-item.active { color: var(--signal); background: var(--srf-1); box-shadow: inset 2px 0 0 var(--signal); }
.rail-hub { border: 1px solid rgba(255,107,26,.32); color: var(--signal); }
.rail-hub:hover { border-color: var(--signal); background: var(--signal-dim); }
/* Once signed in, the rail becomes an operations switcher instead of repeating
   the full marketing sitemap: Hub, Monitor, Community, then pinned servers. */
body.hub-page .deck-rail-authed .rail-secondary { display: none; }
.rail-gap { flex: 1; }
/* tooltip via data-tip */
.rail-item::after {
  content: attr(data-tip);
  position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%);
  padding: 4px 10px; background: var(--srf-2); border: 1px solid var(--line-hi);
  color: var(--ink); font: 500 10px var(--mono); letter-spacing: .12em; text-transform: uppercase;
  white-space: nowrap; opacity: 0; pointer-events: none; z-index: 70;
  transition: opacity var(--fast);
}
.rail-item:hover::after, .rail-item:focus-visible::after { opacity: 1; }
/* sign-in status LED riding the bottom rail item */
.rail-auth::before {
  content: ''; position: absolute; top: 6px; right: 6px;
  width: 6px; height: 6px; background: var(--ink-4);
}
.rail-auth.authed::before { background: var(--ok); box-shadow: 0 0 8px var(--ok); animation: led 2.4s infinite; }
/* pinned servers — separator + monogram pins (authed only; _DeckChrome JS fills #railPins) */
.rail-sep { width: 28px; height: 1px; background: var(--line); margin: 6px 0; flex-shrink: 0; }
.rail-pins {
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  max-height: 40vh; overflow-y: auto; scrollbar-width: none;
}
.rail-pins::-webkit-scrollbar { display: none; }
.rail-pin { border: 1px solid var(--line); }
.rail-pin:hover { border-color: var(--line-hi); }
.rail-pin.active { color: var(--signal); background: var(--srf-1); box-shadow: inset 2px 0 0 var(--signal); border-color: var(--line-hi); }
.pin-mono { font: 600 11px var(--mono); letter-spacing: .05em; color: inherit; }
.pin-led { position: absolute; top: 5px; right: 5px; width: 6px; height: 6px; }
.pin-led.on  { background: var(--ok); box-shadow: 0 0 8px var(--ok); animation: led 2.4s infinite; }
.pin-led.off { background: var(--ink-4); }

/* CONTENT — compensates for strip (+ rail when present) */
.deck-main { margin: var(--strip-total) 0 0 var(--rail-w); min-height: calc(100vh - var(--strip-total)); }
body.no-rail .deck-main, .deck-main.no-rail { margin-left: 0; }

/* REGISTRATION TICKS — 1px corner brackets framing the viewport */
.deck-ticks, .deck-ticks i { pointer-events: none; }
.deck-ticks i {
  position: fixed; width: 14px; height: 14px;
  border: 0 solid var(--frame); z-index: 55;
}
.deck-ticks .tl { top: calc(var(--strip-total) + 12px); left: calc(var(--rail-w) + 12px); border-width: 1px 0 0 1px; }
.deck-ticks .br { right: 12px; bottom: 12px; border-width: 0 1px 1px 0; }
body.no-rail .deck-ticks .tl { left: 12px; }

/* ── 03 · DECK PRIMITIVES ────────────────────────────────────────────────── */
/* Zone header — "07 // CONSOLE ———— GRID 1.2.37". The site's voice. */
.zone-head {
  display: flex; align-items: center; gap: 12px;
  font-family: var(--mono); font-size: 10.5px; font-weight: 500;
  letter-spacing: .18em; text-transform: uppercase; color: var(--ink-3);
}
.zone-head .zi { color: var(--signal); font-style: normal; }
.zone-head .rule { flex: 1; height: 1px; background: var(--line); transform-origin: left center; }
.zone-head .meta { color: var(--ink-3); }
.zone-head a { color: var(--ink-2); }    /* interactive labels ≥ ink-2 */

/* Datastrip — single ruled row of mono stats (replaces centered stat grids) */
.datastrip {
  display: flex; overflow-x: auto;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  font-family: var(--mono); font-size: 11px; font-weight: 500;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3);
}
.datastrip > div {
  flex-shrink: 0; padding: 14px 28px 14px 0; margin-right: 28px;
  border-right: 1px solid var(--line); white-space: nowrap;
}
.datastrip > div:last-child { border-right: 0; margin-right: 0; }
.datastrip b  { color: var(--ink); font-weight: 500; }
.datastrip .au { color: var(--gold); }

/* Systems ledger — full-width rows, hover "arms" the row */
.ledger { border-top: 1px solid var(--line); }
.ledger-row {
  position: relative;
  display: grid; grid-template-columns: 80px minmax(0,7fr) minmax(0,4fr); gap: 32px;
  padding: 44px 24px 44px 0; border-bottom: 1px solid var(--line);
  transition: background var(--fast);
}
.ledger-row::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 2px;
  background: var(--signal); opacity: 0; transition: opacity var(--fast);
}
.ledger-row:hover { background: var(--srf-1); }
.ledger-row:hover::before { opacity: 1; }
.ledger-idx { font: 500 11px var(--mono); color: var(--signal); letter-spacing: .14em; padding: 6px 0 0 16px; }
.ledger-name {
  font: 600 20px/1.2 var(--display); text-transform: uppercase; letter-spacing: .02em;
  color: var(--ink); margin: 0 0 10px;
}
.ledger-copy { color: var(--ink-2); font-size: 14px; line-height: 1.65; max-width: 60ch; }
.ledger-spec { font: 400 11.5px var(--mono); color: var(--ink-3); align-self: start; }
.ledger-spec-row {
  display: flex; justify-content: space-between; gap: 16px;
  padding: 7px 0; border-bottom: 1px solid var(--line);
}
.ledger-spec-row b { color: var(--ink-2); font-weight: 500; }

/* Pricing loadout — three columns sharing ONE continuous frame */
.loadout {
  display: grid; grid-template-columns: repeat(3, minmax(0,1fr));
  border: 1px solid var(--line-hi); background: var(--srf-0);
  position: relative;
}
.loadout-tier {
  position: relative; display: flex; flex-direction: column;
  padding: 36px 32px 32px; border-right: 1px solid var(--line);
}
.loadout-tier:last-child { border-right: none; }
.loadout-tier.featured { box-shadow: inset 0 2px 0 var(--signal); }
.loadout-tag {
  position: absolute; top: -9px; left: 24px;
  padding: 2px 10px; background: var(--signal); color: var(--on-signal);
  font: 600 9.5px var(--mono); letter-spacing: .14em; text-transform: uppercase;
  clip-path: var(--chamfer-sm);
}
.loadout-name { font: 500 10.5px var(--mono); letter-spacing: .18em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 14px; }
.loadout-price { font: 700 34px/1 var(--display); color: var(--ink); margin-bottom: 4px; }
.loadout-price small { font: 500 12px var(--mono); color: var(--ink-3); }
.loadout-seats { font: 400 11.5px var(--mono); color: var(--ink-3); margin-bottom: 20px; }
.loadout ul { list-style: none; margin: 0 0 28px; padding: 0; font-size: 13.5px; }
.loadout li { padding: 7px 0; color: var(--ink-2); border-bottom: 1px solid var(--line); }
.loadout li::before { content: "▸ "; color: var(--signal); margin-right: 4px; }
.loadout li.dim { color: var(--ink-4); }
.loadout li.dim::before { content: "— "; color: var(--ink-4); }
.loadout .btn { margin-top: auto; justify-content: center; }

/* Transmission footer — END OF TRANSMISSION band w/ giant outlined wordmark */
.transmission {
  position: relative; overflow: hidden;
  margin-top: 96px; padding: 56px var(--gutter) 28px;
  background: var(--bg-1); border-top: 1px solid var(--line);
}
.transmission-cols {
  display: grid; grid-template-columns: repeat(4, minmax(0,1fr));
  gap: 32px; margin: 40px 0 72px; position: relative; z-index: 1; max-width: 980px;
}
.transmission-col h4 {
  font: 500 10.5px var(--mono); letter-spacing: .18em; text-transform: uppercase;
  color: var(--ink-3); margin: 0 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--line);
}
.transmission-col a {
  display: block; padding: 5px 0;
  font: 400 12.5px var(--mono); color: var(--ink-2); letter-spacing: .04em;
}
.transmission-col a:hover { color: var(--signal); }
.transmission-mark {
  position: absolute; right: -30px; bottom: -28px; z-index: 0;
  font: 700 clamp(110px, 17vw, 240px)/0.9 var(--display); text-transform: uppercase;
  color: transparent; -webkit-text-stroke: 1px rgba(232,237,242,.06);
  pointer-events: none; user-select: none; white-space: nowrap;
}
.transmission-status {
  position: relative; z-index: 1;
  display: flex; flex-wrap: wrap; gap: 18px; justify-content: space-between;
  padding-top: 16px; border-top: 1px solid var(--line);
  font: 500 10.5px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3);
}

/* Ops console card — bordered live-console module w/ corner brackets */
.ops { position: relative; border: 1px solid var(--line); background: var(--srf-0); align-self: start; }
.ops::before, .ops::after {
  content: ''; position: absolute; width: 12px; height: 12px;
  border: 1px solid var(--signal); transition: width 160ms linear, height 160ms linear;
  pointer-events: none;
}
.ops::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.ops::after  { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }
.ops:hover::before, .ops:hover::after { width: 22px; height: 22px; }
.ops .hd {
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
  padding: 9px 14px; border-bottom: 1px solid var(--line);
  font: 500 10.5px var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--ink-2);
}
.ops pre {
  margin: 0; padding: 14px; overflow-x: auto;
  font: 12.5px/1.8 var(--mono); color: var(--ink-2);
  background: var(--console); background-image: var(--scanlines);
}
.ops pre .t  { color: var(--ink-3); }
.ops pre .ok { color: var(--ok); }
.ops pre .g  { color: var(--gold); }
.ops pre .s  { color: var(--signal); }
.ops .ft { padding: 12px 14px; border-top: 1px solid var(--line); }
.ops .ft .btn { width: 100%; }
.caret { animation: deckCaret 1s steps(2, end) infinite; }
@keyframes deckCaret { 50% { opacity: 0; } }

/* Chamfer utility — top-right 45° cut. FILLED elements only (clip kills borders). */
.chamfer { clip-path: var(--chamfer); }

/* ── 04 · HERO ATMOSPHERE — body.pub ONLY (marketing pages) ──────────────── */
/* Sodium-dusk horizon + ruined-ridge silhouette + blueprint grid.
   Texture is BANNED outside this band (and console/map viewports). */
.hero-deck {
  position: relative;
  display: grid; grid-template-columns: minmax(0,7fr) minmax(380px,5fr);
  gap: 48px; align-content: start;
  padding: 88px var(--gutter) 96px;
  min-height: calc(100vh - var(--strip-total));
  overflow: hidden;
}
.hero-deck > * { position: relative; z-index: 2; min-width: 0; }
body.pub .hero-deck::before {
  content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  /* subtle blueprint grid only — the orange sodium-horizon gradient + ruined-
     ridge silhouette were removed (owner disliked the orange banding). */
  background-image: var(--grid-img);
  background-size: var(--grid-size);
}
.hero-deck .zone-head { grid-column: 1 / -1; }
.hero-deck h1 {
  font: 700 clamp(40px, 5.6vw, 72px)/1.02 var(--display);
  text-transform: uppercase; letter-spacing: .01em; color: var(--ink);
  margin: 16px 0 20px;
}
.hero-deck h1 .sig { color: var(--signal); }
/* Two-line identity hero: RefugeBot dominant, "7 Days to Die admin platform"
   as the payoff line. Product + game lead; the game name never splits. */
.hero-deck h1.hero-title { display: flex; flex-direction: column; gap: 4px; }
.hero-deck h1.hero-title .rb {
  font-size: clamp(52px, 8vw, 104px); line-height: .95; color: var(--ink);
  letter-spacing: -.01em;
}
.hero-deck h1.hero-title .hero-sub {
  font-size: clamp(20px, 2.7vw, 34px); line-height: 1.05; color: var(--ink-2);
  letter-spacing: .01em;
}
.hero-deck .lead { color: var(--ink-2); font-size: 15px; line-height: 1.6; max-width: 56ch; margin: 0 0 28px; }
.hero-deck .datastrip { grid-column: 1 / -1; margin-top: 24px; border-bottom: 0; }
/* right-margin rotated metadata (wide screens only, decoration) */
.deck-meta-vert {
  position: fixed; right: 14px; top: 50%; z-index: 30;
  transform: rotate(90deg) translateX(-50%); transform-origin: right top;
  font: 500 9.5px var(--mono); letter-spacing: .3em; text-transform: uppercase;
  color: var(--ink-4); pointer-events: none; white-space: nowrap;
  display: none;
}
@media (min-width: 1560px) { body.pub .deck-meta-vert { display: block; } }

/* ── 05 · COMPONENTS ─────────────────────────────────────────────────────── */
/* Buttons — squared; primary = chamfered signal fill; ghost = hairline.
   .btn / .btn.primary / .btn.ghost names are load-bearing (JS templates). */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  background: var(--srf-0); border: 1px solid var(--line); color: var(--ink);
  padding: 10px 18px; border-radius: var(--r); cursor: pointer;
  font-family: var(--display); font-size: 12.5px; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase; text-decoration: none;
  transition: background var(--fast), border-color var(--fast), color var(--fast);
  user-select: none; white-space: nowrap;
}
.btn:hover  { border-color: var(--line-hi); background: var(--srf-1); color: var(--ink); }
.btn:active { background: var(--srf-2); transform: none; }
.btn.primary {
  background: var(--signal); color: var(--on-signal); border: none;
  padding: 11px 22px; clip-path: var(--chamfer); box-shadow: none;
}
.btn.primary:hover { background: var(--signal-hi); transform: none; filter: none; box-shadow: none; }
.btn.ghost { background: transparent; border: 1px solid var(--line); color: var(--ink); }
.btn.ghost:hover { border-color: var(--signal); }
.btn.danger, .btn.warn { background: transparent; border: 1px solid var(--danger); color: var(--danger); }
.btn.danger:hover, .btn.warn:hover { background: var(--danger-dim); border-color: var(--danger); }
.btn-tiny { padding: 2px 8px !important; font-size: 10.5px !important; letter-spacing: .06em; }
.btn-sm   { padding: 6px 13px; font-size: 11px; }

/* Card — flat hairline instrument module. No glass, no blur, no shadow. */
.card {
  background: var(--srf-0);
  border: 1px solid var(--line);
  border-radius: var(--r);
  padding: 4px;
  overflow: hidden;
  box-shadow: none;
  transition: border-color var(--fast);
}
.card:hover { border-color: var(--line); }

/* Tables — hairline rows, sticky opaque mono header, tabular numerals */
.players-table { width: 100%; border-collapse: collapse; font-size: 13.5px; font-variant-numeric: tabular-nums; }
.players-table th {
  text-align: left; padding: 10px 14px; color: var(--ink-3); font-weight: 500;
  font-family: var(--mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: .14em;
  border-bottom: 1px solid var(--line);
  position: sticky; top: var(--strip-total); z-index: 2;
  background: var(--bg-1);             /* OPAQUE or rows ghost through */
}
/* The header sticks to the PAGE, offset below the fixed telemetry strip. But
   .card has overflow:hidden, which makes the card its own scroll-container and
   TRAPS the sticky header — the top:var(--strip-total) offset then pins it that
   far DOWN inside the card, permanently overlapping the first row (the "top
   player clipped behind the header bar" bug). Let cards that wrap a table opt
   out so the header pins against the viewport instead. (:has is already used
   below for mobile table cells.) */
.card:has(> .players-table) { overflow: visible; }
.players-table td { padding: 10px 14px; border-bottom: 1px solid var(--line); color: var(--ink); }
.players-table tr:last-child td { border-bottom: none; }
.players-table tr:hover td { background: var(--srf-1); }
.players-table tbody tr:hover td:first-child { box-shadow: inset 2px 0 0 var(--signal); }
.players-table .mono { font-family: var(--mono); font-size: 12px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.muted  { color: var(--ink-2); }
.center { text-align: center; padding: 24px !important; }

/* Inputs — flat, 2px radius, double-ring calibration focus.
   :where() keeps specificity at zero so component classes still win. */
input:where(:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="submit"]):not([type="button"])),
:where(select, textarea) {
  font-family: var(--sans); font-size: 13px; color: var(--ink);
  background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r);
  padding: 8px 10px; outline: none;
  transition: border-color var(--fast), box-shadow var(--fast);
}
:where(input, select, textarea):focus {
  border-color: var(--signal);
  box-shadow: 0 0 0 3px var(--signal-dim);   /* offset second ring */
}
:where(input, select, textarea)::placeholder { color: var(--ink-3); }

/* Status pills → rectangular tags w/ square LEDs (names load-bearing) */
.status-pill {
  display: inline-flex; align-items: center; gap: 8px;
  flex-shrink: 0; white-space: nowrap;
  padding: 3px 10px; border-radius: var(--r);
  background: var(--ok-dim); border: 1px solid rgba(46,224,107,.35);
  color: var(--ok); font-size: 10px; font-weight: 600; font-family: var(--mono);
  text-transform: uppercase; letter-spacing: .12em;
}
.status-pill::before {
  content: ""; width: 6px; height: 6px; border-radius: 0;
  background: currentColor; box-shadow: 0 0 8px currentColor;
  animation: led 2.4s infinite;
}
.status-pill-offline {
  background: var(--danger-dim); border-color: rgba(255,66,66,.35); color: var(--danger);
}
.status-pill-offline::before { animation: none; }
.status-pill-unknown {
  background: rgba(61,71,84,.18); border-color: var(--line); color: var(--ink-3);
}
.status-pill-unknown::before { box-shadow: none; animation: none; }

/* Status squares — small inline indicators in tables (squared, glowing) */
.status-dot { display: inline-block; width: 7px; height: 7px; border-radius: 0; margin-right: 6px; vertical-align: middle; }
.dot-online  { background: var(--ok); box-shadow: 0 0 8px var(--ok); }
.dot-offline { background: var(--ink-4); }

/* Modals — squared, zone-bar header; danger variant wears hazard stripes.
   (HAZARD RATION: exactly 2 uses site-wide — danger modal header + console
   pane header. Do not spend it anywhere else.) */
.modal-back {
  position: fixed; inset: 0; z-index: 1200;
  display: none; align-items: center; justify-content: center; padding: 24px;
  background: rgba(4,6,9,.72);
}
.modal-back.open { display: flex; }
.modal {
  width: min(560px, 100%); max-height: calc(100vh - 48px);
  display: flex; flex-direction: column; overflow: hidden;
  background: var(--srf-0); border: 1px solid var(--line-hi); border-radius: var(--r);
  animation: modalIn 140ms var(--ease) both;
}
@keyframes modalIn { from { opacity: 0; transform: translateY(-6px); } }
.modal-head {
  position: relative;
  display: flex; align-items: center; gap: 12px;
  padding: 10px 16px; border-bottom: 1px solid var(--line);
  font: 500 10.5px var(--mono); letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink-2);
}
.modal-head .zi { color: var(--signal); }
.modal-head .esc {
  margin-left: auto; cursor: pointer;
  background: none; border: 1px solid var(--line); color: var(--ink-2);
  padding: 3px 8px; font: 500 10px var(--mono); letter-spacing: .1em;
}
.modal-head .esc:hover { color: var(--ink); border-color: var(--line-hi); }
.modal-body { padding: 18px 16px; overflow-y: auto; }
.modal-foot { padding: 12px 16px; border-top: 1px solid var(--line); display: flex; justify-content: flex-end; gap: 8px; }
.modal-danger { border-color: rgba(255,66,66,.4); }
.modal-danger .modal-head { color: var(--danger); padding-bottom: 16px; }
.modal-danger .modal-head::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 6px;
  background: var(--hazard);
}
/* generic hazard rule — second (and FINAL) sanctioned use: console pane header */
.hazard-rule { position: relative; padding-bottom: 14px; }
.hazard-rule::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 6px;
  background: var(--hazard);
}

/* Focus ring — signal, every interactive element */
:focus-visible { outline: 2px solid var(--signal); outline-offset: 2px; }

/* Squared scrollbars */
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: var(--bg-1); border-radius: 0; }
*::-webkit-scrollbar-thumb { background: var(--srf-2); border: 1px solid var(--line); border-radius: 0; }
*::-webkit-scrollbar-thumb:hover { background: var(--ink-4); }
*::-webkit-scrollbar-corner { background: transparent; }
* { scrollbar-color: #3d4754 #0a0d12; scrollbar-width: thin; }

/* ── 06 · LEGACY APP CLASSES — same selectors, Deck-restyled ─────────────── */

/* Animations — keyframe names are referenced by JS-toggled classes; keep them */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes paneFadeIn { from { opacity: 0; } to { opacity: 1; } }
section[data-pane].pane-enter { animation: paneFadeIn 160ms var(--ease) both; }
@keyframes pulseGlow { 0%,100%{box-shadow:0 0 0 rgba(255,107,26,.25)} 50%{box-shadow:0 0 14px rgba(255,107,26,.3)} }
.page-fade { animation: fadeIn 240ms var(--ease) both; }

/* Hub (server selector) layout — desktop default + mobile collapse */
.hub-main-grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 18px; margin-bottom: 28px; }
.hub-server-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.hub-side { display: flex; flex-direction: column; gap: 14px; }
.hub-main-grid > *,
.hub-server-grid > *,
.hub-side > * { min-width: 0; }
/* Save-slot card — world name up top, LED status, mono timestamp, RESUME */
.server-card {
  box-sizing: border-box; min-width: 0; max-width: 100%; overflow: hidden;
  position: relative;
  background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r);
  transition: border-color var(--fast);
}
.server-card:hover { border-color: var(--line-hi); }
.server-card a.title {
  word-break: break-word; overflow-wrap: anywhere; display: block;
  font-family: var(--display); font-weight: 600; text-transform: uppercase;
  letter-spacing: .02em; color: var(--ink);
}
.server-card a.title:hover { color: var(--signal); }
.server-card .tenant { word-break: break-word; font-family: var(--mono); font-size: 11px; color: var(--ink-3); }
/* KPI tiles (Hub) — instrument modules, Chakra numerals */
.kpi-tile { background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); }
.kpi-n { font-family: var(--display); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--ink); }
.kpi-tile.accent .kpi-n { color: var(--signal); }
.kpi-tile.coin   .kpi-n { color: var(--coin); }
.kpi-tile.green  .kpi-n { color: var(--ok); }
.kpi-tile.red    .kpi-n { color: var(--danger); }
@media (max-width: 800px) {
  .hub-main-grid { grid-template-columns: 1fr !important; gap: 14px; margin-bottom: 18px; }
  .hub-server-grid { grid-template-columns: 1fr !important; }
  .server-card { padding: 14px !important; max-width: 100% !important; }
  .server-card .meta-row { font-size: 11px; flex-wrap: wrap !important; }
  .server-card .meta-row > * { max-width: 100%; }
  .kpi-tile { padding: 12px 14px !important; }
  .kpi-n { font-size: 20px !important; }
  .wrap > section, .wrap > div { max-width: 100%; }
}

/* Hero — framed console pane (login / upgrade / error / contact pages) */
.hero {
  max-width: 920px;
  margin: 64px auto 56px;
  padding: 48px 40px;
  text-align: left;
  background: var(--srf-0);
  border: 1px solid var(--line);
  border-top: 2px solid var(--signal);
  border-radius: var(--r);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: none;
}
.hero h1 {
  font: 700 clamp(34px, 4.6vw, 52px)/1.05 var(--display);
  text-transform: uppercase; letter-spacing: .01em;
  background: none; -webkit-background-clip: initial; background-clip: initial;
  color: var(--ink);
  margin-bottom: 14px;
}
.hero .tagline {
  font: 500 13px var(--mono); text-transform: uppercase; letter-spacing: .12em;
  color: var(--signal); margin-bottom: 24px;
}
.hero .lede { font-size: 15px; color: var(--ink-2); max-width: 56ch; margin: 0 0 32px; line-height: 1.65; }

/* Legacy pricing cards — re-framed as a continuous loadout */
.tiers {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 0;
  max-width: 920px; margin: 0 auto 56px;
  border: 1px solid var(--line-hi); background: var(--srf-0);
}
.tier {
  background: transparent;
  backdrop-filter: none;
  border: none; border-right: 1px solid var(--line);
  border-radius: 0;
  padding: 32px 28px;
  text-align: left;
  transition: background var(--fast);
}
.tier:last-child { border-right: none; }
.tier:hover { border-color: var(--line); transform: none; box-shadow: none; background: var(--srf-1); }
.tier.featured { border-color: var(--line); box-shadow: inset 0 2px 0 var(--signal); }
.tier h3 { color: var(--ink-3); font: 500 10.5px var(--mono); text-transform: uppercase; letter-spacing: .18em; margin-bottom: 12px; }
.tier .price { font: 700 34px/1 var(--display); color: var(--ink); margin-bottom: 6px; }
.tier .price small { font: 500 12px var(--mono); color: var(--ink-3); }
.tier .seats { font: 400 11.5px var(--mono); color: var(--ink-3); margin-bottom: 18px; }
.tier ul { list-style: none; padding: 0; margin: 0 0 24px; font-size: 13.5px; }
.tier li { padding: 6px 0; color: var(--ink-2); }
.tier li::before { content: "* "; color: var(--signal); font-weight: 600; margin-right: 4px; font-family: var(--mono); }
.tier li.dim { color: var(--ink-4); }
.tier li.dim::before { content: "- "; color: var(--ink-4); }

/* Connection banner */
.conn-banner {
  padding: 12px 18px; border-radius: var(--r); margin-bottom: 24px;
  font-size: 13.5px; backdrop-filter: none;
  border: 1px solid var(--line); background: var(--srf-0);
}
.conn-banner-offline {
  background: var(--danger-dim);
  border: 1px solid rgba(255,66,66,.35);
  color: var(--ink);
}
.conn-banner-offline strong { color: var(--danger); }

/* Shop (player-facing) — supply-crate modules, gold mono prices */
.shop-identity { text-align: right; }
.wallet-pill {
  display: inline-flex; align-items: baseline; gap: 8px;
  padding: 10px 18px; border-radius: var(--r);
  background: var(--srf-0);
  border: 1px solid var(--line-hi);
  box-shadow: none;
}
.wallet-label { font: 600 10.5px var(--mono); text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.wallet-amt   { font-size: 22px; font-weight: 600; color: var(--gold); font-family: var(--mono); font-variant-numeric: tabular-nums; }
.wallet-coin  { font-size: 10.5px; color: var(--coin); text-transform: uppercase; letter-spacing: .12em; font-weight: 600; font-family: var(--mono); }

.catalog-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 14px;
  margin-bottom: 32px;
}
.shop-card {
  display: flex; flex-direction: column; justify-content: space-between;
  background: var(--srf-0); backdrop-filter: none;
  border: 1px solid var(--line); border-radius: var(--r);
  padding: 18px; transition: border-color var(--fast), background var(--fast);
}
.shop-card:hover { border-color: var(--line-hi); transform: none; box-shadow: none; background: var(--srf-1); }
.shop-card-cat  { font: 500 10px var(--mono); text-transform: uppercase; letter-spacing: .18em; color: var(--ink-3); }
.shop-card-name { font: 600 16px var(--display); margin: 6px 0 8px; color: var(--ink); }
.shop-card-meta { font-size: 13px; color: var(--ink-2); margin-bottom: 14px; }
.shop-card-meta code { color: var(--scan); font-family: var(--mono); }
.shop-card-foot { display: flex; align-items: center; justify-content: space-between; margin-top: auto; }
.shop-price     { font-size: 16px; font-weight: 600; color: var(--gold); font-family: var(--mono); font-variant-numeric: tabular-nums; }
.shop-price .coin { font-size: 10px; color: var(--coin); text-transform: uppercase; letter-spacing: .12em; opacity: 1; margin-left: 3px; }

/* Footer — mini transmission status line */
.footer {
  text-align: center; color: var(--ink-3); font-size: 11px;
  font-family: var(--mono); text-transform: uppercase; letter-spacing: .12em;
  margin-top: 64px; padding: 28px 0 40px;
  border-top: 1px solid var(--line);
  position: relative;
}
.footer::before {
  content: "REFUGE GAMING · EST 2025 · © 2026";
  display: block;
  background: none; -webkit-background-clip: initial; background-clip: initial;
  color: var(--ink-3);
  font-weight: 500; font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase;
  margin-bottom: 12px; font-family: var(--mono);
}
.footer a { margin: 0 8px; color: var(--ink-2); transition: color var(--fast); }
.footer a:hover { color: var(--signal); }

/* Brand wordmark — chamfered signal monogram (minimal fallback; the deck
   strip is the canonical chrome on rebuilt pages) */
.rb-mark {
  display: inline-flex; align-items: center; gap: 10px;
  text-decoration: none; color: var(--ink);
  font-family: var(--display); font-weight: 600; letter-spacing: .06em;
  font-size: 13px; text-transform: uppercase;
  filter: none;
}
.rb-mark-glyph {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border-radius: 0;
  background: transparent;
  border: 1px solid var(--signal);
  font-family: var(--display); font-weight: 700; font-size: 12px; letter-spacing: 0;
  color: var(--signal);
  clip-path: polygon(0 0,calc(100% - 7px) 0,100% 7px,100% 100%,0 100%);
  box-shadow: none;
}
.rb-mark:hover .rb-mark-glyph {
  background: var(--signal);
  color: var(--on-signal);
  border-color: var(--signal);
}

/* Top brand bar — minimal fallback for not-yet-rebuilt pages; opaque, no blur.
   On rebuilt pages the strip hosts .brand-bar-right (#navRight) instead. */
.brand-bar {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 0; margin-bottom: 4px;
  position: sticky; top: 0; z-index: 40;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  background: var(--bg-1);
  border-bottom: 1px solid var(--line);
}
.brand-bar-right {
  display: flex; gap: 4px; align-items: center;
  font: 500 10.5px var(--mono); letter-spacing: .1em; text-transform: uppercase;
  color: var(--ink-3);
}
.brand-bar-right a { color: var(--ink-2); padding: 4px 8px; border-radius: var(--r); transition: color var(--fast), background var(--fast); }
.brand-bar-right a:hover { color: var(--ink); background: var(--srf-1); }
.brand-bar-right a.active { color: var(--signal); box-shadow: inset 0 -2px 0 var(--signal); }
.deck-strip .brand-bar-right { font-size: 10.5px; letter-spacing: .12em; }

/* Landing feature trio — flat instrument modules */
.features-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px;
  max-width: 980px; margin: 64px auto 16px;
}
.feature {
  background: var(--srf-0);
  backdrop-filter: none;
  border: 1px solid var(--line);
  border-radius: var(--r);
  padding: 24px;
  transition: border-color var(--fast), background var(--fast);
}
.feature:hover { border-color: var(--line-hi); transform: none; box-shadow: none; background: var(--srf-1); }
.feature .ico {
  width: 40px; height: 40px; border-radius: 0; margin-bottom: 16px;
  display: flex; align-items: center; justify-content: center;
  font-size: 20px;
  background: var(--signal-dim);
  border: 1px solid rgba(255,107,26,.3);
  color: var(--signal);
}
.feature h3 { font: 600 15px var(--display); text-transform: uppercase; letter-spacing: .03em; margin-bottom: 8px; color: var(--ink); }
.feature p  { color: var(--ink-2); font-size: 13.5px; line-height: 1.6; }

/* Section divider — mono rule w/ signal tick */
.section-divider {
  text-align: center; color: var(--ink-3);
  font-size: 10.5px; text-transform: uppercase; letter-spacing: .3em;
  margin: 56px 0 24px;
  font-family: var(--mono);
}
.section-divider::before, .section-divider::after {
  content: ""; display: inline-block; width: 60px; height: 1px;
  background: var(--line);
  vertical-align: middle; margin: 0 14px;
}
.section-divider::before { background: linear-gradient(to right, var(--signal) 0 24px, var(--line) 24px); }

/* Console toolbar chips (legacy .term-badge / .term-btn ports) */
.con-badge { padding:5px 9px; border:1px solid var(--line); border-radius:var(--r); background:var(--srf-0); color:var(--ink-2); font-family:var(--mono); font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; cursor:pointer; transition:color var(--fast), border-color var(--fast), background var(--fast); display:inline-flex; align-items:center; gap:6px; }
.con-badge:hover { color:var(--ink); border-color:var(--line-hi); }
.con-badge.active { color:var(--signal); border-color:var(--signal); background:var(--signal-dim); }
.con-bct { font-size:9px; padding:1px 5px; border-radius:var(--r); background:var(--bg-1); color:var(--ink-3); font-variant-numeric:tabular-nums; }
.con-badge.active .con-bct { background:rgba(255,107,26,.2); color:var(--signal); }
.con-btn { padding:5px 10px; border:1px solid var(--line); border-radius:var(--r); background:var(--srf-0); color:var(--ink-2); font-family:var(--mono); font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; cursor:pointer; transition:color var(--fast), border-color var(--fast), background var(--fast); }
.con-btn:hover { color:var(--ink); border-color:var(--line-hi); }
.con-btn.active { color:var(--signal); border-color:var(--signal); background:var(--signal-dim); }
.console-favorites { padding:9px 14px; border-top:1px solid var(--line); background:var(--srf-0); display:grid; gap:7px; }
.console-favorites-head { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; font-family:var(--mono); font-size:10px; letter-spacing:.06em; text-transform:uppercase; color:var(--signal); }
.console-favorites-head .muted { font-size:9px; letter-spacing:0; text-transform:none; }
.console-favorite-chips { display:flex; flex-wrap:wrap; gap:6px; min-width:0; }
.console-favorite-chip { display:inline-flex; align-items:stretch; min-width:0; max-width:min(100%, 360px); border:1px solid var(--line); border-radius:var(--r); overflow:hidden; background:var(--bg-1); }
.console-favorite-load,.console-favorite-remove { border:0; background:transparent; color:var(--ink-2); cursor:pointer; font-family:var(--mono); }
.console-favorite-load { padding:6px 9px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.console-favorite-remove { padding:5px 7px; border-left:1px solid var(--line); color:var(--ink-3); }
.console-favorite-load:hover { color:var(--signal); background:var(--signal-dim); }
.console-favorite-remove:hover { color:var(--red); background:rgba(248,113,113,.08); }
.console-viewbar { display:grid; grid-template-columns:minmax(250px,420px) auto minmax(180px,1fr) auto; gap:8px 12px; align-items:end; padding:9px 14px; border-bottom:1px solid var(--line); background:var(--srf-0); }
.console-session-field,.console-view-controls label { display:grid; gap:3px; color:var(--ink-3); font:600 9px var(--mono); letter-spacing:.06em; text-transform:uppercase; }
.console-session-field select,.console-view-controls select { min-height:31px; min-width:0; border:1px solid var(--line); border-radius:var(--r); background:var(--bg-1); color:var(--ink); padding:5px 8px; font:11px var(--mono); }
.console-archive-meta { min-width:0; align-self:center; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font:10px var(--mono); }
.console-view-controls { display:flex; align-items:end; justify-content:flex-end; gap:8px; }
.console-view-controls .console-check { display:flex; min-height:31px; flex-direction:row; align-items:center; gap:6px; padding:5px 8px; border:1px solid var(--line); background:var(--bg-1); color:var(--ink-2); cursor:pointer; }
.console-check input { accent-color:var(--signal); }
.console-lines { line-height:1.45; }
.console-line { display:flex; align-items:flex-start; gap:7px; border-bottom:1px solid transparent; }
.console-line-time { flex:0 0 76px; color:#6b7684; font-variant-numeric:tabular-nums; }
.console-line-level { flex:0 0 32px; font-weight:700; }
.console-line-text { min-width:0; color:#e8edf2; white-space:pre; }
.console-lines.is-wrap .console-line-text { white-space:pre-wrap; overflow-wrap:anywhere; }
.console-lines.density-compact .console-line { padding:1px 0; line-height:1.35; }
.console-lines.density-comfortable .console-line { padding:3px 0; line-height:1.5; }
.console-lines.density-roomy .console-line { padding:6px 0; line-height:1.65; border-bottom-color:rgba(255,255,255,.035); }
@media(max-width:980px){.console-viewbar{grid-template-columns:minmax(0,1fr) auto}.console-archive-meta{grid-column:1/-1}.console-view-controls{grid-column:1/-1;justify-content:flex-start;flex-wrap:wrap}}
@media(max-width:620px){.console-viewbar{grid-template-columns:1fr}.console-viewbar>.con-btn{width:100%}.console-view-controls{grid-column:auto;display:grid;grid-template-columns:1fr 1fr}.console-view-controls .console-check{grid-column:1/-1}.console-line-time{flex-basis:65px}}
.cmd-favorite-star { min-width:30px; font-size:16px; line-height:1; }
.cmd-favorite-star.active { color:#f5c451; border-color:rgba(245,196,81,.45); background:rgba(245,196,81,.08); }
@media (max-width: 620px) {
  .console-favorites-head .muted { flex-basis:100%; }
  .console-favorite-chip { max-width:100%; }
  #consoleForm { flex-wrap:wrap; }
  #consoleForm #consoleCmd { min-width:calc(100% - 28px); }
}
.chat-category-bar { display:flex; flex-wrap:wrap; gap:7px; margin:0 0 8px; padding:10px 12px; border:1px solid var(--line); background:var(--srf-0); border-radius:var(--r); }
.chat-category { display:inline-flex; align-items:center; gap:7px; padding:7px 10px; border:1px solid var(--line); border-radius:999px; background:var(--bg-1); color:var(--ink-2); cursor:pointer; font-size:11px; }
.chat-category b { min-width:19px; padding:1px 5px; border-radius:999px; background:rgba(255,255,255,.055); color:var(--ink-3); font-family:var(--mono); font-size:9px; text-align:center; }
.chat-category:hover { color:var(--ink); border-color:var(--line-hi); }
.chat-category.active { color:var(--signal); border-color:var(--signal); background:var(--signal-dim); }
.chat-category.active b { color:var(--signal); background:rgba(255,107,26,.14); }
.chat-category-hint { margin:0 2px 10px; color:var(--ink-3); font-size:10px; line-height:1.45; }
@media (max-width: 620px) {
  .chat-category-bar { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .chat-category { justify-content:space-between; min-width:0; }
}

/* ── 07 · ADMIN SHELL — instrument rail + zone-voiced panes ──────────────── */
.admin-shell { max-width: 100%; }

/* Sidebar → instrument rail: hairline-separated 38px rows, CSS-counter tab
   indices, inset 2px signal active bar. Same .side-tab[data-tab] anchors. */
.admin-side { counter-reset: deck-tab; }
.side-tab {
  display: flex; align-items: center; gap: 10px;
  height: 38px; padding: 0 12px; margin: 0;
  color: var(--ink-2); font-size: 12.5px; font-weight: 500; font-family: var(--sans);
  text-decoration: none; cursor: pointer;
  border-radius: 0;
  border-left: 2px solid transparent;
  border-bottom: 1px solid var(--line);
  transition: background var(--fast), color var(--fast);
  counter-increment: deck-tab;
}
.side-tab::before {
  content: counter(deck-tab, decimal-leading-zero);
  font: 500 9px var(--mono); color: var(--ink-4); letter-spacing: .08em;
  width: 16px; flex-shrink: 0; text-align: right;
}
.side-tab:hover { color: var(--ink); background: var(--srf-1); }
.side-tab.active {
  color: var(--ink); background: var(--srf-2);
  border-left-color: var(--signal);
}
.side-tab .ico { width: 18px; height: 18px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
.side-tab .ico svg { width: 16px; height: 16px; transition: none; }
.side-tab:hover .ico svg { transform: none; }
.side-tab.active .ico { color: var(--signal); }
.side-tab.active .ico svg { filter: none; }
.side-tab .lbl { flex: 1; }
/* nav group labels — inert elements inserted between anchor clusters */
.side-group {
  display: flex; align-items: center; gap: 8px;
  padding: 14px 12px 6px;
  font: 600 10px var(--mono); letter-spacing: .18em; text-transform: uppercase;
  color: var(--ink-3);
}
.side-group::before { content: ''; width: 10px; height: 1px; background: var(--signal); flex-shrink: 0; }
@media (max-width: 800px) {
  .admin-shell { grid-template-columns: 1fr !important; }
  .admin-side { position: static !important; flex-direction: row !important; flex-wrap: wrap; overflow-x: auto; }
  .side-tab { padding: 8px 10px; font-size: 12px; height: auto; border-bottom: none; }
  .side-tab::before { display: none; }
  .side-tab .lbl { display: none; }
}

/* Admin header — callsign + status; pane titles speak zone-header */
.admin-header {
  display: flex; justify-content: space-between; align-items: flex-end;
  margin: 24px 0 24px; padding-bottom: 14px; border-bottom: 1px solid var(--line);
  position: relative;
}
.admin-header::after { content: ''; position: absolute; left: 0; bottom: -1px; width: 24px; height: 1px; background: var(--signal); }
.muted-label { font: 600 10.5px var(--mono); text-transform: uppercase; letter-spacing: .18em; color: var(--ink-3); }
.server-title { font: 600 26px/1.1 var(--display); text-transform: uppercase; letter-spacing: .01em; color: var(--ink); margin: 4px 0; }

/* Tenant settings underline tabs */
.admin-tabs { display: flex; gap: 2px; margin-bottom: 24px; border-bottom: 1px solid var(--line); padding-bottom: 0; }
.admin-tab {
  padding: 10px 14px; font: 500 11px var(--mono); letter-spacing: .12em; text-transform: uppercase;
  color: var(--ink-2);
  border-bottom: 2px solid transparent; transition: color var(--fast), border-color var(--fast);
  text-decoration: none;
  margin-bottom: -1px;
}
.admin-tab:hover { color: var(--ink); }
.admin-tab.active { color: var(--signal); border-bottom-color: var(--signal); }
.admin-tab.dim { opacity: .55; pointer-events: none; }
.admin-tab .soon {
  font-size: 9px; font-family: var(--mono); padding: 2px 6px; margin-left: 6px;
  background: var(--srf-1); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink-3);
}

/* Section headers — zone-header voice w/ signal tick on the rule */
.section-header {
  display: flex; justify-content: space-between; align-items: baseline;
  margin: 24px 0 12px; padding-bottom: 8px;
  border-bottom: 1px solid var(--line); position: relative;
}
.section-header::after { content: ''; position: absolute; left: 0; bottom: -1px; width: 24px; height: 1px; background: var(--signal); }
.section-header h2 { font: 600 15px var(--display); text-transform: uppercase; letter-spacing: .04em; color: var(--ink); }
.section-meta { font: 500 11px var(--mono); color: var(--ink-3); letter-spacing: .06em; }

/* Console viewport — the pit. Darker ground, scanlines, phosphor-warm INF
   text (ERR/WRN/EXC inline coloring is untouched). !important beats the
   page's inline hardcoded navies. */
#consoleOut {
  background-color: var(--console) !important;
  background-image: var(--scanlines) !important;
  color: #d8cba8 !important;                 /* phosphor-warm INF */
  font-family: var(--mono) !important;
  border: 1px solid var(--line) !important;
  border-radius: 0 !important;
}
#consoleCmd {
  font-family: var(--mono) !important;
  background: var(--console) !important;
  color: var(--ink) !important;
  border: 1px solid var(--line) !important;
  border-radius: 0 !important;
  caret-color: var(--signal);
}
#consoleCmd:focus { border-color: var(--signal) !important; box-shadow: 0 0 0 3px var(--signal-dim); }

/* Map viewport — registration-framed, crosshair cursor */
#mapVP { background: var(--console) !important; border: 1px solid var(--line) !important; border-radius: 0 !important; cursor: crosshair; }

/* ── 06b · PLUGINS (legacy AdminPanel port — Deck-adjusted) ──────────────── */
.plg-page { width: 100%; max-width: none; margin: 0; }
.lua-ref-tools { display:grid; grid-template-columns:minmax(220px,1fr) auto minmax(170px,.55fr); gap:8px; align-items:center; padding:9px 12px; border-bottom:1px solid var(--line); background:var(--srf-0); }
.lua-ref-tools input { min-width:0; padding:8px 10px; border:1px solid var(--line); background:var(--bg-1); color:var(--ink); font:11px var(--mono); }
@media(max-width:650px){.lua-ref-tools{grid-template-columns:1fr auto}.lua-ref-tools .muted{grid-column:1/-1}}
.plg-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.plg-actions { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
/* Zone 01 — bay status strip + comms-fault readout (Module Bay §2) */
.plg-ops { display: flex; gap: 18px; align-items: center; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 10px 2px; margin: 12px 0 0; font-family: var(--mono); font-size: 11.5px; letter-spacing: .06em; color: var(--ink-2); overflow-x: auto; -webkit-overflow-scrolling: touch; }
.plg-ops > div { flex-shrink: 0; display: flex; gap: 6px; align-items: center; text-transform: uppercase; white-space: nowrap; }
.plg-ops b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.plg-ops-hint { margin: 8px 0 0; font-size: 12px; color: var(--ink-3); }
.plg-api-banner { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:16px; align-items:center;
  margin:12px 0 0; padding:13px 14px; border:1px solid var(--line-hi); background:linear-gradient(110deg,var(--srf-1),var(--signal-dim)); }
.plg-api-banner strong { display:block; color:var(--ink); font:700 13px var(--display); letter-spacing:.08em; text-transform:uppercase; }
.plg-api-banner p { margin:4px 0 0; max-width:880px; color:var(--ink-2); font-size:12px; line-height:1.55; }
.plg-api-capabilities { display:flex; flex-wrap:wrap; gap:5px; margin-top:8px; }
.plg-api-capabilities span { border:1px solid var(--line); padding:2px 6px; color:var(--ink-3); font:9.5px var(--mono); letter-spacing:.08em; text-transform:uppercase; }
@media (max-width:720px) { .plg-api-banner { grid-template-columns:1fr; } .plg-api-banner .btn { width:100%; } }
.plg-hub-err { margin: 10px 0 0; padding: 10px 12px; background: var(--danger-dim); border-left: 2px solid var(--danger); color: var(--ink-2); font-family: var(--mono); font-size: 11.5px; line-height: 1.6; border-radius: 0; overflow-wrap: anywhere; }
.plg-hub-err a[data-plg-retry] { color: var(--ink-2); text-decoration: underline; cursor: pointer; }
.plg-hub-err a[data-plg-retry]:hover { color: var(--ink); }
.plg-hub-err .plg-hub-err-url { color: var(--ink-3); margin-left: 8px; }

/* Crest identity plates (Module Bay §3) — plate + glyph + monogram + tick */
.crest { position: relative; display: inline-grid; place-items: center; border: 1px solid; border-radius: 0; flex-shrink: 0; }
.crest-f0 { color: var(--crest0-ink); background: var(--crest0-bg); border-color: var(--crest0-bd); }
.crest-f1 { color: var(--crest1-ink); background: var(--crest1-bg); border-color: var(--crest1-bd); }
.crest-f2 { color: var(--crest2-ink); background: var(--crest2-bg); border-color: var(--crest2-bd); }
.crest-f3 { color: var(--crest3-ink); background: var(--crest3-bg); border-color: var(--crest3-bd); }
.crest-f4 { color: var(--crest4-ink); background: var(--crest4-bg); border-color: var(--crest4-bd); }
.crest-f5 { color: var(--crest5-ink); background: var(--crest5-bg); border-color: var(--crest5-bd); }
.crest-40 { width: 40px; height: 40px; }
.crest-40 svg { width: 20px; height: 20px; }
.crest-56 { width: 56px; height: 56px; }
.crest-56 svg { width: 24px; height: 24px; }
.crest-72 { width: 72px; height: 72px; }
.crest-72 svg { width: 28px; height: 28px; transform: translateY(-4px); }
.crest-mono { display: none; font-family: var(--display); font-weight: 700; font-style: normal; color: currentColor; line-height: 1; }
.crest-56 .crest-mono { display: block; position: absolute; bottom: 3px; left: 4px; font-size: 8.5px; }
.crest-72 .crest-mono { display: block; position: absolute; bottom: 5px; left: 0; right: 0; text-align: center; font-size: 10px; letter-spacing: .08em; }
.crest-tick { position: absolute; bottom: 3px; right: 3px; width: 5px; height: 5px; font-style: normal; }
.crest-56 .crest-tick { width: 6px; height: 6px; }
.crest-72 .crest-tick { width: 7px; height: 7px; }
.crest-tick-builtin { background: currentColor; }
.crest-tick-hub { background: transparent; border: 1px solid currentColor; box-sizing: border-box; }
.crest-tick-local { width: 0 !important; height: 0 !important; background: transparent; border-left: 5px solid transparent; border-bottom: 5px solid currentColor; }
.crest-56 .crest-tick-local { border-left-width: 6px; border-bottom-width: 6px; }
.crest-72 .crest-tick-local { border-left-width: 7px; border-bottom-width: 7px; }

/* Square status LED — lives in the row title line so state survives the
   mobile column collapse (§4) */
.plg-led { display: inline-block; width: 6px; height: 6px; flex-shrink: 0; background: var(--ink-4); }
.plg-led-ok { background: var(--ok); animation: led 2.4s ease-in-out infinite; }
.plg-led-off { background: var(--ink-4); animation: none; }
.plg-led-err { background: var(--danger); animation: none; }
.plg-ci { padding: 12px 14px; margin-bottom: 16px; background: var(--srf-0); border: 1px solid var(--line); border-left: 3px solid var(--signal); border-radius: 0; font-size: 13px; line-height: 1.5; color: var(--ink); }
.plg-ci strong { color: var(--signal); }
.plg-ci code { background: var(--bg-1); padding: 1px 6px; border-radius: var(--r); font-family: var(--mono); font-size: 11px; color: var(--signal); }

.plg-section { margin-top: 26px; }
.plg-section-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.plg-section-title { font: 600 14px var(--display); text-transform: uppercase; color: var(--ink); display: flex; align-items: center; gap: 10px; letter-spacing: .04em; }
.plg-section-title .plg-sect-dot { width: 6px; height: 6px; border-radius: 0; background: var(--signal); box-shadow: 0 0 8px var(--signal); }
.plg-section-sub { color: var(--ink-3); font-size: 11px; font-family: var(--mono); margin-left: 6px; font-weight: 400; text-transform: none; letter-spacing: .04em; }
.plg-section-actions { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }

.plg-lib-controls { display: flex; flex-direction: column; gap: 8px; margin: 0 0 10px; }
.plg-lib-tabs { display: flex; gap: 3px; flex-wrap: wrap; }
.plg-tab { padding: 5px 11px; border: 1px solid var(--line); border-radius: var(--r); background: transparent; color: var(--ink-2); font-family: var(--mono); font-size: 10.5px; font-weight: 600; cursor: pointer; text-transform: uppercase; letter-spacing: .08em; transition: color var(--fast), border-color var(--fast), background var(--fast); }
.plg-tab:hover { color: var(--ink); border-color: var(--line-hi); }
.plg-tab.active { background: var(--signal-dim); color: var(--signal); border-color: var(--signal); }
.plg-tab-c { margin-left: 5px; opacity: .75; font-size: 10px; }
.plg-tab-c.hot { opacity: 1; color: var(--warn); }

.plg-lib-search, .plg-market-search { width: 100%; padding: 9px 12px; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); font-family: var(--mono); font-size: 13px; margin-bottom: 10px; box-sizing: border-box; }
.plg-lib-search:focus, .plg-market-search:focus { outline: none; border-color: var(--signal); background: var(--srf-0); box-shadow: 0 0 0 3px var(--signal-dim); }

.plg-list { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; background: var(--srf-0); }
.plg-empty { padding: 32px; text-align: center; color: var(--ink-2); font-size: 13px; font-family: var(--mono); }
.plg-row { display: grid; grid-template-columns: 40px minmax(0,1fr) auto auto; gap: 12px; align-items: center; padding: 12px 14px; border-bottom: 1px solid var(--line); cursor: pointer; transition: background var(--fast); }
.plg-row:last-child { border-bottom: none; }
.plg-row:hover { background: var(--srf-1); }
.plg-row-on { border-left: 3px solid var(--ok); }
.plg-row-off { border-left: 3px solid var(--ink-4); }    /* standby is a choice, not a failure */
.plg-row-update { border-left: 3px solid var(--warn); background: rgba(255,197,61,.04); }
.plg-row-avail { border-left: 3px solid var(--line); }
.plg-row-err { border-left: 3px solid var(--danger); background: var(--danger-dim); }
/* "Just installed" flash — keep keyframe name (JS adds the class) */
.plg-row-just-installed { position: relative; animation: plgJustInstalled 2.4s ease-out; border-radius: var(--r); }
@keyframes plgJustInstalled {
    0%   { background-color: transparent; box-shadow: inset 0 0 0 0 rgba(46,224,107,0), 0 0 0 0 rgba(46,224,107,0); }
    12%  { background-color: rgba(46,224,107,.16); box-shadow: inset 0 0 0 2px rgba(46,224,107,.55), 0 0 22px rgba(46,224,107,.35); }
    55%  { background-color: rgba(46,224,107,.10); box-shadow: inset 0 0 0 2px rgba(46,224,107,.30), 0 0 14px rgba(46,224,107,.20); }
    100% { background-color: transparent; box-shadow: inset 0 0 0 0 rgba(46,224,107,0), 0 0 0 0 rgba(46,224,107,0); }
}
/* ═ Global search palette (Ctrl/Cmd+K) + jumped-to-setting flash ════════════ */
.cfg-search-flash { animation: cfgSearchFlash 2.2s ease-out; border-radius: var(--r); }
@keyframes cfgSearchFlash {
    0%   { background-color: transparent; box-shadow: inset 0 0 0 0 rgba(255,107,26,0), 0 0 0 0 rgba(255,107,26,0); }
    12%  { background-color: rgba(255,107,26,.16); box-shadow: inset 0 0 0 2px rgba(255,107,26,.6), 0 0 24px rgba(255,107,26,.32); }
    55%  { background-color: rgba(255,107,26,.09); box-shadow: inset 0 0 0 2px rgba(255,107,26,.32), 0 0 14px rgba(255,107,26,.18); }
    100% { background-color: transparent; box-shadow: inset 0 0 0 0 rgba(255,107,26,0), 0 0 0 0 rgba(255,107,26,0); }
}
.sp-overlay {
    position: fixed; inset: 0; z-index: 1300; display: none;
    background: rgba(3,6,4,.62); backdrop-filter: blur(6px);
    align-items: flex-start; justify-content: center; padding: 12vh 16px 16px;
    animation: fadeIn .14s var(--ease);
}
.sp-overlay.open { display: flex; }
.sp-box {
    width: 100%; max-width: 640px; max-height: 70vh; display: flex; flex-direction: column;
    background: var(--bg-1); border: 1px solid var(--line-hi, var(--line)); border-radius: var(--r);
    box-shadow: 0 24px 70px rgba(0,0,0,.6), 0 0 0 1px rgba(255,107,26,.08);
    overflow: hidden; animation: modalIn .16s var(--ease);
}
.sp-input-row { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border-bottom: 1px solid var(--line); }
.sp-input-ico { color: var(--signal); flex: 0 0 auto; }
#spInput { flex: 1; background: transparent; border: 0; outline: 0; color: var(--ink); font: 500 16px var(--sans, inherit); }
#spInput::placeholder { color: var(--ink-2); }
.sp-esc { font: 600 10px var(--mono); padding: 2px 6px; border: 1px solid var(--line); border-radius: 3px; color: var(--ink-2); }
.sp-results { overflow-y: auto; flex: 1; padding: 6px; }
.sp-grp { font: 600 10px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-2); padding: 10px 10px 5px; position: sticky; top: 0; background: var(--bg-1); }
.sp-row { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: var(--r); cursor: pointer; }
.sp-row:hover, .sp-row.active { background: rgba(255,107,26,.10); }
.sp-row.active { box-shadow: inset 0 0 0 1px rgba(255,107,26,.4); }
.sp-row-ico { flex: 0 0 22px; text-align: center; font-size: 15px; color: var(--signal); }
.sp-row-main { flex: 1; min-width: 0; }
.sp-row-label { font: 500 13.5px var(--sans, inherit); color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-row-sub { font: 400 11px var(--mono); color: var(--ink-2); margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-chip { flex: 0 0 auto; font: 600 9.5px var(--mono); letter-spacing: .08em; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; border: 1px solid var(--line); color: var(--ink-2); }
.sp-chip.cmd { color: var(--scan, #5eead4); border-color: rgba(94,234,212,.3); }
.sp-match { color: var(--signal); font-weight: 700; }
.sp-empty { padding: 36px 16px; text-align: center; color: var(--ink-2); font-size: 13px; }
.sp-foot { display: flex; gap: 16px; align-items: center; padding: 9px 14px; border-top: 1px solid var(--line); font: 500 10.5px var(--mono); color: var(--ink-2); flex-wrap: wrap; }
.sp-foot kbd { font: 600 9.5px var(--mono); padding: 1px 4px; border: 1px solid var(--line); border-radius: 3px; margin: 0 1px; }
.sp-foot-note { margin-left: auto; color: var(--ink-2); opacity: .7; }
@media (max-width: 800px) { .sp-overlay { padding: 6vh 8px 8px; } .sp-box { max-height: 86vh; } }

.hub-pulse { animation: hubPulse 1.1s ease-out; }
@keyframes hubPulse {
    0%   { box-shadow: 0 0 0 0 rgba(255,107,26,.55); }
    100% { box-shadow: 0 0 0 14px rgba(255,107,26,0); }
}
.hub-spinner { display: inline-block; width: 12px; height: 12px; border: 2px solid rgba(232,237,242,.2); border-top-color: var(--signal); border-radius: 50%; animation: hubSpin .7s linear infinite; vertical-align: -2px; }
@keyframes hubSpin { to { transform: rotate(360deg); } }
.plg-row-icon { font-size: 26px; line-height: 1; text-align: center; color: var(--signal); }
.plg-row-icon svg { width: 1em; height: 1em; }
.plg-row-body { min-width: 0; }
.plg-row-title { display: flex; align-items: center; gap: 6px; font-weight: 600; color: var(--ink); font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.plg-row-title .plg-row-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.plg-row-title .plg-src, .plg-row-title .plg-row-ver { flex-shrink: 0; }
.plg-row-desc { color: var(--ink-2); font-size: 11px; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.3; }
.plg-row-ver { font-family: var(--mono); font-size: 11px; color: var(--ink-3); font-weight: 400; }
.plg-row-status { display: flex; gap: 6px; align-items: center; flex-shrink: 0; }
.plg-row-actions { display: flex; gap: 6px; align-items: center; }
.plg-badge-fault { font-family: var(--mono); font-size: 9.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--danger); background: var(--danger-dim); border: 1px solid rgba(255,66,66,.35); padding: 3px 8px; cursor: pointer; border-radius: 0; white-space: nowrap; }
.plg-badge-fault:hover { border-color: var(--danger); }
.plg-badge-update { font-family: var(--mono); font-size: 9.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--warn); background: var(--warn-dim); border: 1px solid rgba(255,197,61,.35); padding: 3px 8px; border-radius: 0; white-space: nowrap; }
.plg-fault-line { grid-column: 1 / -1; background: var(--console); border-left: 2px solid var(--danger); font-family: var(--mono); font-size: 11.5px; line-height: 1.6; color: var(--ink); padding: 8px 12px; max-height: 120px; overflow-y: auto; overflow-wrap: anywhere; cursor: default; }
.plg-src { font-size: 9px; padding: 1px 5px; border-radius: var(--r); font-family: var(--mono); letter-spacing: .08em; font-weight: 600; }
.plg-src-builtin { background: var(--srf-2); color: var(--ink-2); }
.plg-src-hub { background: var(--scan-dim); color: var(--scan); }
.plg-src-local { background: var(--gold-dim); color: var(--gold); }
.plg-pill { display: inline-block; padding: 3px 8px; border-radius: var(--r); font-family: var(--mono); font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; background: var(--srf-2); color: var(--ink-2); white-space: nowrap; }
.plg-pill-ok { background: var(--ok-dim); color: var(--ok); }
.plg-pill-off { background: var(--danger-dim); color: #ff8b8b; }
.plg-pill-warn { background: var(--warn-dim); color: var(--warn); }
.plg-pill-err { background: rgba(255,66,66,.18); color: #ff8b8b; }

/* Industrial rocker toggle — ribbed track, square thumb, O/I markings,
   signal ON. Pure CSS on the existing checkbox markup. */
.plug-toggle { position: relative; display: inline-block; width: 44px; height: 22px; cursor: pointer; flex-shrink: 0; }
.plug-toggle input { opacity: 0; width: 0; height: 0; position: absolute; padding: 0; margin: 0; border: 0; }
.plug-slider {
  position: absolute; top: 0; left: 0; right: 0; bottom: 0;
  background-color: var(--srf-0);
  background-image: repeating-linear-gradient(90deg, rgba(232,237,242,.05) 0 1px, transparent 1px 4px); /* ribbed */
  border: 1px solid var(--line); border-radius: var(--r);
  transition: background-color var(--fast), border-color var(--fast);
}
.plug-slider::before {
  content: ''; position: absolute; height: 14px; width: 16px; left: 3px; top: 3px;
  background: var(--ink-3); border-radius: 1px;
  transition: transform 160ms cubic-bezier(.2,0,.2,1), background-color var(--fast);
  box-shadow: 0 1px 2px rgba(0,0,0,.4);
}
.plug-slider::after {
  content: 'O'; position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  font: 600 8px var(--mono); color: var(--ink-4);
  transition: color var(--fast);
}
.plug-toggle input:checked + .plug-slider { background-color: var(--signal-dim); border-color: var(--signal); }
.plug-toggle input:checked + .plug-slider::before { transform: translateX(22px); background: var(--signal); box-shadow: 0 0 6px rgba(255,107,26,.45); }
.plug-toggle input:checked + .plug-slider::after { content: 'I'; right: auto; left: 7px; color: var(--signal); }

.plg-row-kebab { width: 26px; height: 26px; padding: 0; font-size: 18px; line-height: 1; background: transparent; border: 1px solid transparent; color: var(--ink-2); cursor: pointer; border-radius: var(--r); font-family: var(--mono); }
.plg-row-kebab:hover { border-color: var(--line); color: var(--signal); background: var(--srf-1); }

/* Marketplace tiles */
.plg-tag-chips { display: flex; gap: 5px; flex-wrap: wrap; margin-bottom: 12px; }
.plg-tag-chip { padding: 4px 11px; border: 1px solid var(--line); border-radius: var(--r); background: transparent; color: var(--ink-2); font-family: var(--mono); font-size: 10.5px; letter-spacing: .06em; cursor: pointer; transition: color var(--fast), border-color var(--fast), background var(--fast); }
.plg-tag-chip:hover { color: var(--ink); border-color: var(--line-hi); }
.plg-tag-chip.active { background: var(--signal); color: var(--on-signal); border-color: var(--signal); font-weight: 600; }
.plg-tag-chip.active::before { content: '▸ '; }

.plg-market-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; padding: 2px 0; }
.plg-tile { position: relative; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); padding: 0 16px 14px; cursor: pointer; transition: border-color var(--fast), background var(--fast); display: flex; flex-direction: column; gap: 10px; min-height: 208px; }
.plg-tile:hover { border-color: var(--line-hi); transform: none; box-shadow: none; background: var(--srf-1); }
/* instrument-module header strip — cards open with a header per Deck law */
.plg-tile-hd { height: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0 -16px; padding: 0 12px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.plg-tile-hd > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* corner brackets on hover — tiles are requisitionable (reuses the .ops recipe) */
.plg-tile::before, .plg-tile::after { content: ''; position: absolute; width: 12px; height: 12px; border: 1px solid var(--signal); opacity: 0; transition: width 160ms linear, height 160ms linear, opacity 160ms linear; pointer-events: none; }
.plg-tile::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.plg-tile::after { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }
.plg-tile:hover::before, .plg-tile:hover::after { opacity: 1; width: 22px; height: 22px; }
.plg-tile-icon { width: 54px; height: 54px; display: flex; align-items: center; justify-content: center; font-size: 28px; background: var(--signal-dim); color: var(--signal); border: 1px solid rgba(255,107,26,.3); border-radius: 0; box-shadow: none; flex-shrink: 0; }
.plg-tile-icon svg { width: 1em; height: 1em; }
.plg-tile-head { display: flex; gap: 12px; align-items: flex-start; }
.plg-tile-head-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.plg-tile-name-row { display: flex; gap: 8px; align-items: flex-start; min-width: 0; }
.plg-tile-name { font: 600 14px var(--display); color: var(--ink); line-height: 1.25; flex: 1; min-width: 0; word-break: break-word; }
.plg-tile-meta { font-size: 11px; color: var(--ink-3); font-family: var(--mono); }
.plg-tile-desc { font-size: 12px; color: var(--ink-2); line-height: 1.45; flex: 1; }
.plg-tile-foot { display: flex; gap: 6px; align-items: center; justify-content: space-between; margin-top: auto; }
.plg-tile-tags { display: flex; gap: 4px; flex-wrap: wrap; overflow: hidden; max-height: 18px; }
.plg-tile-tag { font-size: 10px; padding: 1px 6px; border-radius: var(--r); background: transparent; border: 1px solid var(--line); color: var(--ink-2); font-family: var(--mono); white-space: nowrap; }
.plg-tile-cta { padding: 6px 14px; font-family: var(--display); font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; border-radius: 0; border: 1px solid var(--signal); background: var(--signal); color: var(--on-signal); cursor: pointer; transition: background var(--fast); clip-path: var(--chamfer-sm); }
.plg-tile-cta:hover { filter: none; background: var(--signal-hi); }
.plg-tile-cta.cta-update { background: var(--warn); border-color: var(--warn); color: #0a0d12; }
.plg-tile-cta.cta-installed { background: transparent; color: var(--ok); border-color: rgba(46,224,107,.4); cursor: default; clip-path: none; }
.plg-tile-badge { flex-shrink: 0; padding: 2px 8px; border-radius: var(--r); font-family: var(--mono); font-size: 9px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; align-self: flex-start; margin-top: 2px; white-space: nowrap; }
.plg-tile-badge-installed { background: var(--ok-dim); color: var(--ok); border: 1px solid rgba(46,224,107,.3); }
.plg-tile-badge-update { background: var(--warn-dim); color: var(--warn); border: 1px solid rgba(255,197,61,.3); }
.plg-tile-badge-new { background: var(--scan-dim); color: var(--scan); border: 1px solid rgba(95,178,255,.3); }
.plg-tile-badge-builtin { background: var(--srf-2); color: var(--ink-2); border: 1px solid var(--line); }
.plg-market-empty, .plg-lib-empty { padding: 36px 20px; text-align: center; color: var(--ink-2); font-size: 13px; background: var(--srf-0); border: 1px dashed var(--line); border-radius: var(--r); }
.plg-market-empty strong, .plg-lib-empty strong { color: var(--ink); font-weight: 600; display: block; margin-bottom: 6px; }
/* Zone 02 — FABRICATOR (AI forge bench, Module Bay §7) */
.fab { position: relative; border: 1px solid var(--line); background: var(--srf-0); margin-top: 10px; }
.fab.open::before, .fab.open::after { content: ''; position: absolute; width: 12px; height: 12px; border: 1px solid var(--signal); pointer-events: none; }
.fab.open::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.fab.open::after { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }
.fab-hd { height: 32px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 0 12px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 10px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.fab > .plg-ops-hint { padding: 10px 12px; margin: 0; }
.fab-body { padding: 0 16px 16px; }
.fab-step { display: grid; grid-template-columns: 56px 1fr; padding: 16px 0; border-bottom: 1px solid var(--line); }
.fab-step:last-child { border-bottom: none; }
.fab-step-idx { font-family: var(--mono); font-size: 11px; color: var(--signal); letter-spacing: .14em; border-right: 1px solid var(--line); padding-top: 2px; }
.fab-step-main { padding-left: 16px; min-width: 0; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.fab-step-lbl { font-family: var(--display); font-weight: 600; font-size: 12.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--ink); }
.fab-step-hint { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); line-height: 1.6; }
.fab-step-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.fab-step textarea { width: 100%; box-sizing: border-box; padding: 10px 12px; background: var(--console); border: 1px solid var(--line); border-radius: 0; color: var(--ink); font-family: var(--mono); font-size: 12.5px; line-height: 1.6; resize: vertical; }
.fab-step textarea:focus { outline: none; border-color: var(--signal); box-shadow: 0 0 0 3px var(--signal-dim); }

/* Validate-result readout (§7) — SHARED: #fabReadout + #luaEdValidateOut */
.lua-check { width: 100%; box-sizing: border-box; background: var(--console); border: 1px solid var(--line); font-family: var(--mono); font-size: 12px; line-height: 1.7; padding: 12px; max-height: 240px; overflow: auto; }
.lua-check-ok { color: var(--ok); }
.lua-check-warn { color: var(--warn); }
.lua-check-err { color: var(--danger); overflow-wrap: anywhere; }
.lua-check-meta { color: var(--ink-3); }

/* Plugin details modal — Details + Settings tabs */
.pd-head { display: flex; align-items: center; gap: 16px; margin-bottom: 10px; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.pd-head .pd-icon { font-size: 26px; line-height: 1; flex-shrink: 0; width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background: var(--signal-dim); border: 1px solid rgba(255,107,26,.3); border-radius: 0; color: var(--signal); }
.pd-head-text { flex: 1; min-width: 0; }
.pd-name { font: 600 18px var(--display); color: var(--ink); display: flex; align-items: center; gap: 10px; flex-wrap: wrap; line-height: 1.2; }
.pd-meta { color: var(--ink-3); font-size: 12px; font-family: var(--mono); margin-top: 5px; }
.pd-desc { margin: 14px 0; color: var(--ink); font-size: 14px; line-height: 1.6; }
.pd-section { margin: 20px 0; }
.pd-section-label { font: 600 10.5px var(--mono); color: var(--ink-3); text-transform: uppercase; letter-spacing: .16em; margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--line); }
/* Details modal — module dossier chrome (Module Bay §6) */
#pdBody { padding: 18px 20px; overflow-y: auto; min-height: 0; }
.pd-esc { position: absolute; top: 12px; right: 14px; z-index: 2; cursor: pointer; background: var(--srf-0); border: 1px solid var(--line); color: var(--ink-2); padding: 3px 8px; font: 500 10px var(--mono); letter-spacing: .1em; }
.pd-esc:hover { color: var(--ink); border-color: var(--line-hi); }
.pd-zonebar { display: flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 10.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3); margin: 0 28px 14px 0; }
.pd-zonebar .zi { color: var(--signal); font-style: normal; }
.pd-zonebar .rule { flex: 1; height: 1px; background: var(--line); }
.pd-statusline { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; font-family: var(--mono); font-size: 11px; color: var(--ink-2); text-transform: uppercase; letter-spacing: .06em; margin: 10px 0; }
.pd-statusline-err, .pd-statusline-warn { font-family: var(--mono); font-size: 11.5px; line-height: 1.6; margin: 6px 0; overflow-wrap: anywhere; }
.pd-hook-chip { font-family: var(--mono); font-size: 10.5px; text-transform: none; letter-spacing: 0; border: 1px solid var(--line); background: var(--srf-1); color: var(--ink-2); padding: 2px 8px; }
.pd-hook-chip-inert { border-color: rgba(255,66,66,.35); background: var(--danger-dim); color: var(--danger); }
.pd-cmds { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.pd-cmds td { padding: 6px 8px; border-bottom: 1px solid var(--line); vertical-align: top; color: var(--ink-2); }
.pd-cmds td:first-child { font-family: var(--mono); font-size: 11.5px; color: var(--ink); white-space: nowrap; }
/* sanitized readme/changelog typography (replaces the retired .pd-readme) */
.pd-doc { font-size: 13.5px; line-height: 1.65; color: var(--ink-2); max-height: 48vh; overflow-y: auto; }
.pd-doc h1, .pd-doc h2, .pd-doc h3 { font-family: var(--display); font-weight: 600; text-transform: uppercase; color: var(--ink); padding-bottom: 6px; border-bottom: 1px solid var(--line); margin: 18px 0 8px; }
.pd-doc h1 { font-size: 15px; }
.pd-doc h2 { font-size: 13.5px; }
.pd-doc h3 { font-size: 12.5px; }
.pd-doc code { font-family: var(--mono); font-size: 11.5px; background: var(--bg-1); border: 1px solid var(--line); padding: 1px 6px; }
.pd-doc pre { background: var(--console); font-family: var(--mono); font-size: 12px; padding: 12px; border: 1px solid var(--line); overflow-x: auto; }
.pd-doc pre code { background: none; border: 0; padding: 0; }
.pd-doc a { color: var(--scan); text-decoration: none; }
.pd-doc a:hover { text-decoration: underline; }
.pd-doc ul, .pd-doc ol { padding-left: 18px; margin: 8px 0; }
.pd-doc li::marker { color: var(--ink-3); }
.pd-doc blockquote { border-left: 2px solid var(--line-hi); margin: 10px 0; padding: 2px 12px; color: var(--ink-3); font-style: normal; }
.pd-doc img { max-width: 100%; border: 1px solid var(--line); }
.pd-doc table { border-collapse: collapse; width: 100%; margin: 8px 0; }
.pd-doc th { font-family: var(--mono); font-size: 10.5px; text-transform: uppercase; color: var(--ink-3); text-align: left; padding: 5px 8px; border-bottom: 1px solid var(--line-hi); }
.pd-doc td { padding: 5px 8px; border-bottom: 1px solid var(--line); }
.pd-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 2px; }
.pd-tag { font-family: var(--mono); font-size: 10.5px; padding: 3px 9px; background: var(--signal-dim); border: 1px solid rgba(255,107,26,.3); border-radius: var(--r); color: var(--signal); }
.pd-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 4px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.pd-pill { display: inline-block; padding: 3px 10px; border-radius: var(--r); font-family: var(--mono); font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; background: var(--srf-2); color: var(--ink-2); border: 1px solid var(--line); }
.pd-pill-ok { background: var(--ok-dim); color: var(--ok); border-color: rgba(46,224,107,.3); }
.pd-pill-off { background: var(--srf-1); }
.pd-pill-warn { background: var(--warn-dim); color: var(--warn); border-color: rgba(255,197,61,.35); }
.pd-tabs { display: flex; gap: 2px; padding: 2px; background: var(--bg-1); border: 1px solid var(--line); border-radius: var(--r); margin: 4px 0 16px; width: fit-content; }
.pd-tab { padding: 8px 16px; background: transparent; border: none; color: var(--ink-2); font-family: var(--mono); font-size: 11px; font-weight: 600; cursor: pointer; border-radius: 0; letter-spacing: .1em; text-transform: uppercase; transition: color var(--fast), background var(--fast); }
.pd-tab:hover { color: var(--ink); }
.pd-tab.active { background: var(--signal-dim); color: var(--signal); }
.pd-pane { display: none; }
.pd-pane.active { display: block; }
.pd-settings-empty { padding: 40px 16px; text-align: center; color: var(--ink-2); font-family: var(--mono); font-size: 13px; background: var(--srf-0); border: 1px dashed var(--line); border-radius: var(--r); }

/* ── 06b+ · ASSEMBLY BUILDER (.asm-*) — no-code rule builder drawer ───────
   UI-CONTRACT ASSEMBLY §A1/§A7. Fills the #asmDrawer seam: fixed full-height
   right drawer (z 240 — above the pane + inline luaApiModal z210, below
   .modal-back z1200). Everything additive; namespace-frozen to .asm-*.     */
#asmDrawer { position: fixed; inset: 0; z-index: 240; }
.asm-scrim { position: absolute; inset: 0; background: rgba(4,6,9,.6); opacity: 0; transition: opacity 180ms ease-out; }
#asmDrawer.asm-open .asm-scrim { opacity: 1; }
.asm-drawer { position: relative; width: min(1240px, 100vw); height: 100%; margin-left: auto; background: var(--bg-0); border-left: 1px solid var(--line-hi); display: flex; flex-direction: column; transform: translateX(100%); transition: transform 180ms ease-out; }
#asmDrawer.asm-open .asm-drawer { transform: none; }
@media (prefers-reduced-motion: reduce) { .asm-drawer { transition: none; } .asm-scrim { transition: none; } }
.asm-head { height: 44px; flex-shrink: 0; display: flex; align-items: center; gap: 10px; padding: 0 14px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 10.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3); }
.asm-head .zi { color: var(--signal); font-style: normal; }
.asm-head .rule { flex: 1; height: 1px; background: var(--line); }
.asm-esc { cursor: pointer; background: var(--srf-0); border: 1px solid var(--line); color: var(--ink-2); padding: 3px 8px; font: 500 10px var(--mono); letter-spacing: .1em; border-radius: 0; }
.asm-esc:hover { color: var(--ink); border-color: var(--line-hi); }
.asm-load { max-width: 220px; font-family: var(--mono); font-size: 10.5px; letter-spacing: .04em; text-transform: none; background: var(--bg-1); border: 1px solid var(--line); color: var(--ink-2); padding: 4px 6px; border-radius: 0; }
.asm-pitch { padding: 8px 14px; margin: 0; border-bottom: 1px solid var(--line); }
.asm-body { flex: 1; display: grid; grid-template-columns: minmax(0,1fr) clamp(340px, 36%, 470px); grid-template-rows: minmax(0,1fr); min-height: 0; }
.asm-canvas { overflow-y: auto; padding: 18px 20px; min-width: 0; }
.asm-sec { display: flex; align-items: center; gap: 8px; font-family: var(--mono); font-size: 10px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); margin: 16px 0 10px; }
.asm-sec::after { content: ''; flex: 1; height: 1px; background: var(--line); }
/* IDENT card */
.asm-ident { border: 1px solid var(--line); background: var(--srf-1); padding: 14px 16px; margin-bottom: 14px; }
.asm-ident-hd { display: flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 12px; }
.asm-ident-hd .zi { color: var(--signal); font-style: normal; }
.asm-ident-hd .rule { flex: 1; height: 1px; background: var(--line); }
.asm-ident-grid { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 16px; }
.asm-ident-fields input { width: 100%; box-sizing: border-box; }
.asm-lbl { display: block; font-family: var(--mono); font-size: 10px; text-transform: uppercase; letter-spacing: .12em; color: var(--ink-3); margin: 10px 0 4px; }
.asm-lbl:first-child { margin-top: 0; }
.asm-slug-echo { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); margin-top: 4px; }
.asm-slug-echo b { color: var(--ink); letter-spacing: .04em; }
.asm-tag-row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.asm-crest-slot { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-width: 90px; }
.asm-crest-ver { font-family: var(--mono); font-size: 10px; color: var(--ink-3); }
/* drift + undo bands */
.asm-drift { background: var(--warn-dim); border-left: 2px solid var(--warn); color: var(--warn); font-family: var(--mono); font-size: 11.5px; line-height: 1.6; padding: 8px 12px; margin-bottom: 12px; }
.asm-undo { display: flex; gap: 8px; align-items: center; font-family: var(--mono); font-size: 11px; background: var(--srf-2); border: 1px solid var(--line); color: var(--ink-2); padding: 8px 12px; margin-bottom: 14px; }
.asm-undo a { color: var(--signal); text-decoration: none; }
.asm-undo a:hover { text-decoration: underline; }
/* rule cards */
.asm-rule { border: 1px solid var(--line); background: var(--srf-1); margin-bottom: 14px; }
.asm-rule-hd { height: 28px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 0 6px 0 12px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.asm-rule-body { padding: 14px 16px; }
.asm-rule-del, .asm-row-del { width: 24px; height: 24px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; background: transparent; border: 1px solid transparent; color: var(--ink-3); cursor: pointer; font-size: 12px; line-height: 1; border-radius: 0; }
.asm-rule-del:hover, .asm-row-del:hover { color: var(--danger); border-color: var(--line); }
.asm-row-del { width: 22px; height: 22px; margin-top: 5px; }
.asm-band { display: flex; align-items: center; gap: 8px; font-family: var(--mono); font-size: 10px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); margin: 12px 0 8px; }
.asm-band::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.asm-band-sub { font-size: 9.5px; color: var(--ink-4); letter-spacing: .12em; }
/* WHEN segmented picker */
.asm-when-seg { display: flex; border: 1px solid var(--line); }
.asm-seg-btn { flex: 1; display: flex; flex-direction: column; gap: 2px; align-items: flex-start; text-align: left; padding: 8px 10px; background: transparent; border: none; border-left: 1px solid var(--line); cursor: pointer; min-width: 0; border-radius: 0; }
.asm-seg-btn:first-child { border-left: none; }
.asm-seg-btn > span:first-child { font-family: var(--display); font-weight: 600; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-2); }
.asm-seg-sub { font-family: var(--mono); font-size: 9.5px; color: var(--ink-3); white-space: nowrap; }
.asm-seg-btn:hover:not(.active) { background: var(--srf-2); }
.asm-seg-btn.active { background: var(--signal); }
.asm-seg-btn.active > span:first-child, .asm-seg-btn.active .asm-seg-sub { color: var(--on-signal); }
.asm-when-var { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 8px; }
.asm-var-seg { display: inline-flex; border: 1px solid var(--line); }
.asm-var-btn { padding: 5px 10px; font-family: var(--mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: .08em; background: transparent; border: none; border-left: 1px solid var(--line); color: var(--ink-2); cursor: pointer; border-radius: 0; }
.asm-var-btn:first-child { border-left: none; }
.asm-var-btn.active { background: var(--signal); color: var(--on-signal); }
.asm-slash { font-family: var(--mono); font-size: 13px; color: var(--ink-2); }
/* IF / THEN ledger rows */
.asm-cond, .asm-act { display: flex; align-items: flex-start; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.asm-row-idx { font-family: var(--mono); font-size: 10px; color: var(--ink-3); letter-spacing: .12em; width: 44px; flex-shrink: 0; padding-top: 9px; }
.asm-row-body { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; flex: 1; min-width: 0; }
.asm-row-up, .asm-row-dn { width: 24px; height: 24px; flex-shrink: 0; margin-top: 4px; display: inline-flex; align-items: center; justify-content: center; background: transparent; border: 1px solid var(--line); color: var(--ink-3); cursor: pointer; font-size: 9px; border-radius: 0; }
.asm-row-up:hover:not([disabled]), .asm-row-dn:hover:not([disabled]) { color: var(--ink); border-color: var(--line-hi); }
.asm-row-up[disabled], .asm-row-dn[disabled] { opacity: .3; cursor: default; }
.asm-add { display: block; width: 100%; box-sizing: border-box; border: 1px dashed var(--line); background: transparent; color: var(--ink-2); font-family: var(--mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: .1em; padding: 9px; cursor: pointer; margin: 8px 0 0; border-radius: 0; }
.asm-add:hover { border-color: var(--line-hi); color: var(--ink); }
.asm-add-rule { margin-top: 0; }
.asm-noact { font-family: var(--mono); font-size: 11px; color: var(--warn); padding: 4px 0; }
.asm-note { flex-basis: 100%; font-family: var(--mono); font-size: 10px; color: var(--ink-3); line-height: 1.5; }
.asm-note-lbl { font-family: var(--mono); font-size: 10.5px; color: var(--ink-2); }
.asm-ci { display: inline-flex; align-items: center; gap: 5px; font-family: var(--mono); font-size: 10.5px; color: var(--ink-2); }
/* flat fields */
.asm-canvas input[type="text"] { background: var(--bg-1); border: 1px solid var(--line); border-radius: 0; color: var(--ink); padding: 6px 8px; font-size: 12.5px; font-family: var(--sans); min-width: 0; }
.asm-canvas input[type="text"]:focus { outline: none; border-color: var(--signal); box-shadow: 0 0 0 3px var(--signal-dim); }
.asm-sel { font-family: var(--mono); font-size: 11.5px; background: var(--bg-1); border: 1px solid var(--line); border-radius: 0; color: var(--ink); padding: 6px; max-width: 100%; }
.asm-sel:focus { outline: none; border-color: var(--signal); box-shadow: 0 0 0 3px var(--signal-dim); }
.asm-in-num { width: 80px; font-family: var(--mono) !important; }
.asm-in-msg { flex: 1 1 220px; }
.asm-in-ident { width: 130px; font-family: var(--mono) !important; }
.asm-bad { border-color: var(--danger) !important; background: var(--danger-dim) !important; }
/* Value slots + SETTING micro-toggle + chips */
.asm-val { display: inline-flex; align-items: center; gap: 0; flex-wrap: wrap; max-width: 100%; min-width: 0; }
.asm-val > input { min-width: 0; }
.asm-val:has(> .asm-in-msg) { flex: 1 1 240px; }
.asm-val-set { align-self: center; height: 22px; padding: 0 7px; margin-left: 6px; flex-shrink: 0; font-family: var(--mono); font-size: 9px; text-transform: uppercase; letter-spacing: .1em; background: transparent; border: 1px solid var(--line); color: var(--ink-3); cursor: pointer; border-radius: 0; }
.asm-val-set:hover { color: var(--ink-2); border-color: var(--line-hi); }
.asm-val-set.on { background: var(--signal); color: var(--on-signal); border-color: var(--signal); }
.asm-val-tag { display: inline-flex; align-items: center; font-family: var(--mono); font-size: 10.5px; background: var(--signal-dim); border: 1px solid rgba(255,107,26,.35); color: var(--signal); padding: 5px 8px; white-space: nowrap; }
.asm-val-cfg { flex-basis: 100%; display: grid; grid-template-columns: repeat(3, minmax(90px,1fr)); gap: 8px; border-left: 2px solid var(--signal); padding: 8px 0 2px 10px; margin-top: 6px; }
.asm-val-cfg label { font-family: var(--mono); font-size: 9px; text-transform: uppercase; letter-spacing: .1em; color: var(--ink-3); display: flex; flex-direction: column; gap: 3px; }
.asm-set-dup { grid-column: 1 / -1; font-family: var(--mono); font-size: 10px; color: var(--danger); }
.asm-chips { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 6px; }
.asm-chips-lbl { font-family: var(--mono); font-size: 9px; letter-spacing: .12em; color: var(--ink-3); }
.asm-chip { font-family: var(--mono); font-size: 10.5px; border: 1px solid var(--line); background: var(--srf-2); color: var(--ink-2); padding: 3px 7px; cursor: pointer; border-radius: 0; }
.asm-chip:hover { border-color: var(--line-hi); color: var(--ink); }
.asm-chip:active { transform: translateY(1px); }
/* live Lua preview — genuine console viewport: scanlines sanctioned here */
.asm-preview { display: flex; flex-direction: column; min-height: 0; background: var(--console); background-image: var(--scanlines); border-left: 1px solid var(--line); }
.asm-preview-hd { height: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 0 12px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.asm-preview-hd-r { display: flex; gap: 10px; align-items: center; }
#asmPreviewToggle { display: none; background: transparent; border: 1px solid var(--line); color: var(--ink-2); font-family: var(--mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: .1em; padding: 3px 8px; cursor: pointer; border-radius: 0; }
.asm-preview-code { flex: 1; min-height: 0; overflow: auto; margin: 0; font-family: var(--mono); font-size: 12px; line-height: 1.6; color: var(--ink-2); padding: 12px; tab-size: 2; white-space: pre; }
.asm-readout { flex-shrink: 0; }
.asm-readout .lua-check { border-left: none; border-right: none; border-bottom: none; }
.asm-stale { opacity: .55; }
/* footer band */
.asm-foot { min-height: 56px; flex-shrink: 0; display: flex; align-items: center; gap: 12px; padding: 0 16px; border-top: 1px solid var(--line); }
.asm-foot-spacer { flex: 1; }
.asm-foot-status { font-family: var(--mono); font-size: 11px; color: var(--ink-3); max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asm-foot-status.asm-fs-ok { color: var(--ok); }
.asm-foot-status.asm-fs-err { color: var(--danger); }
.asm-foot-status.asm-fs-meta { color: var(--ink-3); }
.asm-foot-note { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); }
.asm-foot-slug { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); letter-spacing: .06em; white-space: nowrap; }
.asm-foot-slug b { color: var(--ink); }
/* ≤800px — single column; preview collapses to a band docked above the foot */
@media (max-width: 800px) {
  .asm-drawer { width: 100vw; border-left: none; }
  .asm-body { grid-template-columns: 1fr; grid-template-rows: minmax(0,1fr) auto; }
  .asm-canvas { order: 1; }
  .asm-preview { order: 2; border-left: none; border-top: 1px solid var(--line); max-height: 44px; overflow: hidden; transition: max-height 180ms ease-out; }
  .asm-preview.open { max-height: 45vh; }
  .asm-preview-hd { height: 44px; }
  #asmPreviewToggle { display: inline-block; min-height: 32px; }
  .asm-canvas input[type="text"], .asm-sel { font-size: 16px; }
  .asm-when-seg { flex-wrap: wrap; }
  .asm-seg-btn { flex: 1 1 33%; border-top: 1px solid var(--line); }
  .asm-rule-del, .asm-row-del, .asm-row-up, .asm-row-dn { width: 44px; height: 44px; }
  .asm-foot { flex-wrap: wrap; height: auto; padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); }
  #asmValidateBtn, #asmDeployBtn { flex: 1 1 100%; }
  .asm-foot-status { max-width: 100%; }
}

/* ── 06c · DASHBOARD — instrument modules, Chakra numerals ───────────────── */
.dash-strip { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; background: var(--bg-1); border: 1px solid var(--line); border-radius: var(--r); padding: 10px 16px; font-family: var(--mono); font-size: 12px; margin-bottom: 14px; }
.dash-strip-tile { display: flex; flex-direction: column; gap: 2px; min-width: 100px; }
.dash-strip-tile .dsl { color: var(--ink-3); font-size: 10px; text-transform: uppercase; letter-spacing: .12em; }
.dash-strip-tile .dsv { font-weight: 600; font-size: 14px; color: var(--ink); font-variant-numeric: tabular-nums; }

.dash-hero { display: block; margin-bottom: 14px; }
.hero-card { padding: 14px 16px; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); position: relative; overflow: hidden; }
.dash-vitals-head { display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding-bottom:10px; margin-bottom:2px; border-bottom:1px solid var(--line); }
.dash-vitals-head strong { font:600 12px var(--display); letter-spacing:.07em; text-transform:uppercase; }
.dash-vitals-head span { color:var(--ink-3); font:10px var(--mono); }
.dash-vitals-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); }
.dash-vital { min-width:0; padding:12px 14px 8px; border-right:1px solid var(--line); }
.dash-vital:last-child { border-right:0; }
.dash-vital-top { display:flex; align-items:flex-start; justify-content:space-between; gap:8px; }
.dash-vital .hero-label { min-height:27px; }
.dash-vital .hero-val { margin:0; font-size:24px; text-align:right; white-space:nowrap; }
.dash-vital .hero-sub { min-height:16px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash-vital-meter { height:3px; margin:7px 0 3px; background:var(--bg-1); overflow:hidden; }
.dash-vital-meter span { display:block; height:100%; width:0; background:var(--signal); transition:width .3s ease,background .3s ease; }
.dash-vital .hero-spark { height:42px; margin-top:3px; }
.hero-card .hero-label { font-size: 10px; color: var(--ink-3); text-transform: uppercase; letter-spacing: .16em; font-family: var(--mono); }
.hero-card .hero-val { font-size: 36px; font-weight: 700; color: var(--ink); line-height: 1.1; margin-top: 4px; font-family: var(--display); font-variant-numeric: tabular-nums; }
.hero-card .hero-sub { font-size: 11px; color: var(--ink-3); margin-top: 4px; font-family: var(--mono); }
.hero-card .hero-spark { width: 100%; height: 42px; margin-top: 4px; display: block; }
.dash-info-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; margin-bottom: 16px; align-items: stretch; }
@media (max-width: 1100px) { .dash-info-grid { grid-template-columns: 1fr; } }
@media (max-width: 1050px) { .dash-vitals-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }.dash-vital:nth-child(2){border-right:0}.dash-vital:nth-child(-n+2){border-bottom:1px solid var(--line)} }
@media (max-width: 620px) { .dash-vitals-head{align-items:flex-start;flex-direction:column;gap:3px}.dash-vitals-grid{grid-template-columns:1fr}.dash-vital,.dash-vital:nth-child(2){border-right:0;border-bottom:1px solid var(--line)}.dash-vital:last-child{border-bottom:0}.dash-vital .hero-spark{display:block!important;height:38px}.dash-vital .hero-label{min-height:0}.dash-vital-top{align-items:baseline}.dash-vital .hero-val{font-size:21px!important} }
.dash-info-card { padding: 14px 16px; display: flex; flex-direction: column; }
.dash-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.dash-card-head h3 { margin: 0; font: 600 12px var(--display); text-transform: uppercase; color: var(--ink); letter-spacing: .06em; }
.dash-info-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.dash-info-table td { padding: 5px 0; border-bottom: 1px solid var(--line); }
.dash-info-table td:first-child { color: var(--ink-3); width: 130px; font-family: var(--mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: .08em; }
.dash-info-table td:last-child { color: var(--ink); font-family: var(--mono); font-variant-numeric: tabular-nums; }
.dash-info-table tr:last-child td { border-bottom: none; }

.dash-online { display: flex; flex-direction: column; gap: 4px; max-height: 280px; overflow-y: auto; padding-right: 4px; }
.dash-online-empty { padding: 30px 0; text-align: center; color: var(--ink-2); font-size: 13px; font-family: var(--mono); }
.dash-online-row { display: grid; grid-template-columns: 36px 1fr auto; gap: 10px; align-items: center; padding: 6px 8px; border-radius: 0; cursor: pointer; transition: background var(--fast); }
.dash-online-row:hover { background: var(--srf-1); box-shadow: inset 2px 0 0 var(--signal); }
.dash-online-ava { width: 32px; height: 32px; border-radius: 0; background: var(--srf-2); border: 1px solid var(--line-hi); color: var(--signal); font-weight: 600; display: flex; align-items: center; justify-content: center; font-family: var(--mono); }
.dash-online-info { min-width: 0; }
.dash-online-name { font-weight: 500; color: var(--ink); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-online-sid { font-family: var(--mono); font-size: 10px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-online-meta { font-family: var(--mono); font-size: 11px; color: var(--ink-3); font-variant-numeric: tabular-nums; }

.dash-perf-row { display: grid; grid-template-columns: 240px 1fr 1fr; gap: 14px; margin-bottom: 16px; align-items: stretch; }
@media (max-width: 1100px) { .dash-perf-row { grid-template-columns: 1fr; } }
.dash-perf-kpis { display: flex; flex-direction: column; gap: 14px; }
.kpi-card { padding: 14px 16px; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); }
.kpi-card .k { font-size: 10px; color: var(--ink-3); text-transform: uppercase; letter-spacing: .16em; font-family: var(--mono); }
.kpi-card .v { font-size: 26px; font-weight: 700; color: var(--ink); margin: 4px 0; font-family: var(--display); font-variant-numeric: tabular-nums; }
.kpi-card .meter { width: 100%; height: 5px; background: var(--bg-1); border-radius: 0; overflow: hidden; margin-top: 6px; border: 1px solid var(--line); }
.kpi-card .meter .fill { height: 100%; transition: width .25s; }
.kpi-card .meter.m-ok .fill { background: var(--ok); }
.kpi-card .meter.m-warn .fill { background: var(--warn); }
.kpi-card .meter.m-bad .fill { background: var(--danger); }
.kpi-card .kpi-sub { font-size: 11px; color: var(--ink-3); margin-top: 6px; font-family: var(--mono); }
.chart-panel { padding: 14px 16px; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); display: flex; flex-direction: column; }
.chart-hdr { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 8px; }
.chart-hdr .ch-name { font-size: 10.5px; color: var(--ink-3); text-transform: uppercase; letter-spacing: .16em; font-family: var(--mono); font-weight: 500; }
.chart-hdr .ch-cur { font-family: var(--mono); font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; }
.chart-body { flex: 1; min-height: 110px; }
.chart-body canvas { width: 100% !important; height: 110px; display: block; }

/* ── 06d · ROLES & PERMISSIONS ───────────────────────────────────────────── */
.perm-role-btn {
  background: var(--srf-0);
  border: 1px solid var(--line);
  padding: 7px 14px;
  color: var(--ink-2);
  font-family: var(--mono);
  font-size: .76rem;
  font-weight: 600;
  letter-spacing: .04em;
  cursor: pointer;
  border-radius: var(--r);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: color var(--fast), background var(--fast), border-color var(--fast);
}
.perm-role-btn:hover { color: var(--ink); background: var(--srf-1); border-color: var(--line-hi); }
.perm-role-btn.active {
  background: var(--signal-dim);
  color: var(--signal);
  border-color: var(--signal);
  box-shadow: none;
}
.perm-role-dirty {
  background: var(--warn-dim);
  color: var(--warn);
  font-size: .62rem;
  font-family: var(--mono);
  padding: 1px 6px;
  border-radius: var(--r);
  border: 1px solid rgba(255,197,61,.35);
}

.perm-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: 10px;
  padding: 6px;
}
.perm-row {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: var(--r);
  background: var(--srf-0);
  cursor: pointer;
  transition: border-color var(--fast), background var(--fast);
}
.perm-row:hover { border-color: var(--line-hi); background: var(--srf-1); }
.perm-tog { position: relative; flex-shrink: 0; padding-top: 2px; }
.perm-tog input { position: absolute; opacity: 0; pointer-events: none; }
/* mini rocker — squared slide-gate */
.perm-slider {
  display: inline-block;
  width: 34px; height: 18px;
  background-color: var(--srf-2);
  background-image: repeating-linear-gradient(90deg, rgba(232,237,242,.05) 0 1px, transparent 1px 4px);
  border: 1px solid var(--line);
  border-radius: var(--r);
  position: relative;
  transition: background-color var(--fast), border-color var(--fast);
}
.perm-slider::after {
  content: '';
  position: absolute;
  top: 2px; left: 2px;
  width: 12px; height: 12px;
  background: var(--ink-3);
  border-radius: 1px;
  transition: transform 160ms cubic-bezier(.2,0,.2,1), background-color var(--fast);
}
.perm-tog input:checked + .perm-slider { background-color: var(--signal-dim); border-color: var(--signal); }
.perm-tog input:checked + .perm-slider::after { transform: translateX(16px); background: var(--signal); }
.perm-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.perm-label { font-size: .85rem; font-weight: 600; color: var(--ink); }
.perm-desc { font-size: .72rem; color: var(--ink-2); line-height: 1.4; }
.perm-key {
  font-family: var(--mono);
  font-size: .62rem;
  color: var(--ink-3);
  opacity: 1;
  letter-spacing: .06em;
  margin-top: 2px;
}
.perm-group .card-header { padding: 14px 16px 10px; border-bottom: 1px solid var(--line); }
.perm-group .card-header h3 { margin: 0; font: 600 12px var(--display); text-transform: uppercase; color: var(--ink); letter-spacing: .06em; }
.perm-group .card-header .sub { font-size: 11px; color: var(--ink-3); font-family: var(--mono); display: block; margin-top: 2px; }

.role-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: var(--r);
  border: 1px solid transparent;
  font-family: var(--mono);
  font-size: .62rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
}
.role-owner { color: var(--gold); background: var(--gold-dim); border-color: rgba(242,193,78,.4); text-shadow: none; }
.role-admin { color: var(--scan); background: var(--scan-dim); border-color: rgba(95,178,255,.4); }
.role-mod   { color: var(--ok); background: var(--ok-dim); border-color: rgba(46,224,107,.4); }

/* ── 06e · DONOR EDITOR ──────────────────────────────────────────────────── */
.dn-field{display:flex;flex-direction:column;gap:6px;min-width:0;max-width:100%}
.dn-label{display:block;font-size:.64rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.12em;font-family:var(--mono);font-weight:600}
.dn-stepper{display:flex;align-items:stretch;background:var(--srf-0);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:border-color var(--fast);min-width:0}
.dn-stepper:hover{border-color:var(--line-hi)}
.dn-stepper:focus-within{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-dim)}
.dn-step-btn{background:transparent;border:none;color:var(--ink-2);padding:0 12px;font-size:.85rem;cursor:pointer;transition:background var(--fast), color var(--fast);user-select:none;min-width:34px;display:flex;align-items:center;justify-content:center}
.dn-step-btn:hover{background:var(--srf-1);color:var(--signal)}
.dn-step-btn:active{background:var(--srf-2);transform:none}
.dn-step-btn.minus{border-right:1px solid var(--line)}
.dn-step-btn.plus {border-left:1px solid var(--line)}
.dn-step-input{flex:1;border:none;outline:none;background:transparent;color:var(--ink);font-family:var(--mono);font-weight:600;font-size:.92rem;text-align:center;padding:10px 4px;min-width:0;font-variant-numeric:tabular-nums}
.dn-suffix{display:flex;align-items:center;padding:0 10px 0 0;color:var(--ink-3);font-family:var(--mono);font-size:.8rem;font-weight:600;background:transparent}
.dn-presets{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px;min-width:0;max-width:100%}
.dn-preset{background:transparent;border:1px solid var(--line);color:var(--ink-2);padding:3px 9px;border-radius:var(--r);font-family:var(--mono);font-size:.66rem;font-weight:600;cursor:pointer;transition:color var(--fast), border-color var(--fast), background var(--fast);user-select:none;font-variant-numeric:tabular-nums}
.dn-preset:hover{border-color:var(--line-hi);color:var(--ink);transform:none}
.dn-preset.active{background:var(--signal);border-color:var(--signal);color:var(--on-signal);box-shadow:none}

.dn-role-select, .dn-role-text{
  width:100%;background:var(--srf-0);border:1px solid var(--line);
  border-radius:var(--r);padding:10px 12px;color:var(--ink);font-family:inherit;font-size:.86rem;
  outline:none;transition:border-color var(--fast), box-shadow var(--fast);
  appearance:none;-webkit-appearance:none;
}
.dn-role-select{
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' stroke='%23ff6b1a' stroke-width='1.5' fill='none'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;cursor:pointer;
}
.dn-role-select:hover, .dn-role-text:hover{border-color:var(--line-hi)}
.dn-role-select:focus, .dn-role-text:focus{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-dim)}
.dn-role-select option{background:var(--srf-0);color:var(--ink);padding:8px;font-size:.88rem}

.donor-card .card-header { padding: 14px 16px 10px; border-bottom: 1px solid var(--line); display:flex; }
.donor-card .card-header h3 { margin: 0; font: 600 13px var(--display); text-transform: uppercase; color: var(--ink); letter-spacing: .05em; }
.donor-card .card-header .sub { font-size: 11px; color: var(--ink-3); font-family: var(--mono); }
.donor-card > div:last-child { padding: 14px 16px; }

/* Bazaar lock overlay (player-facing) */
.bazaar-lock {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 50px 30px; text-align: center; min-height: 320px;
  background: var(--srf-0);
  border: 1px solid var(--line); border-radius: var(--r);
}
.bazaar-lock-icon { font-size: 3rem; margin-bottom: 14px; opacity: .85; }
.bazaar-lock h3 { font: 600 20px var(--display); text-transform: uppercase; margin: 0 0 8px; color: var(--ink); }
.bazaar-lock p { font-size: 14px; color: var(--ink-2); max-width: 440px; line-height: 1.6; margin: 0 0 18px; }
.bazaar-lock .btn-donate { background: var(--signal); color: var(--on-signal); padding: 11px 22px; font-family: var(--display); font-weight: 600; font-size: 12.5px; letter-spacing: .08em; text-transform: uppercase; border-radius: 0; clip-path: var(--chamfer); box-shadow: none; border: none; cursor: pointer; text-decoration: none; display: inline-block; }
.bazaar-lock .btn-donate:hover { transform: none; filter: none; background: var(--signal-hi); }

/* ── 06f · FILE BROWSER + CODE EDITOR ────────────────────────────────────── */
.fbrow { border-bottom: 1px solid var(--line); transition: background var(--fast); }
.fbrow:hover { background: var(--srf-1); }
.fbrow td { padding: 8px 12px; vertical-align: middle; }
.fb-name { display: flex; align-items: center; gap: 8px; }
.fb-name svg { flex-shrink: 0; }
.fb-name a { color: var(--scan); text-decoration: none; transition: color var(--fast); }
.fb-name a:hover { color: var(--ink); }
.fb-name span.fname { color: var(--ink); }
.fb-ext { color: var(--ink-3); font-size: .7rem; margin-left: 4px; }
.fb-actions { display: flex; gap: 4px; justify-content: flex-end; }
.fb-toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.fb-crumb { display: flex; gap: 2px; align-items: center; flex-wrap: wrap; font-size: 13px; font-family: var(--mono); }
.fb-crumb a { color: var(--scan); text-decoration: none; padding: 2px 4px; border-radius: var(--r); transition: background var(--fast), color var(--fast); }
.fb-crumb a:hover { background: var(--srf-1); color: var(--ink); }
.fb-crumb .sep { color: var(--ink-3); margin: 0 1px; }
.fb-crumb .cur { color: var(--ink); font-weight: 600; padding: 2px 4px; }
.fb-roots { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.fbc.active { background: var(--signal-dim); border-color: var(--signal); color: var(--signal); }
.fb-drop { position: relative; min-height: 200px; }
.fb-drop-overlay { display: none; position: absolute; inset: 0; background: var(--signal-dim); border: 2px dashed var(--signal); border-radius: var(--r); z-index: 10; pointer-events: none; }
.fb-drop-overlay div { display: flex; align-items: center; justify-content: center; height: 100%; font-size: 16px; color: var(--signal); font-family: var(--mono); gap: 8px; }
.fb-empty { padding: 40px 20px; text-align: center; color: var(--ink-2); }
.fb-empty svg { margin-bottom: 12px; opacity: .3; }
.fb-info-back { padding: calc(16px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-right)) calc(16px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left)); }
.fb-info-modal { width: min(440px, 100%); max-height: min(680px, calc(100dvh - 32px)); }
.fb-info-body { flex: 1; overflow-y: auto; padding: 16px 20px; }
.fb-info-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--line); font-size: .78rem; }
.fb-info-row .lbl { color: var(--ink-3); font-family: var(--mono); text-transform: uppercase; font-size: .65rem; letter-spacing: .1em; }
.fb-info-row .val { color: var(--ink); font-family: var(--mono); text-align: right; word-break: break-all; }
.fb-ctx-menu { position: fixed; left: 0; top: 0; z-index: 1300; min-width: 210px; max-width: min(320px, calc(100vw - 16px)); padding: 6px; overflow: hidden; background: var(--bg-1); border: 1px solid var(--line-hi); border-radius: var(--r); box-shadow: var(--shadow-md); }
.fb-ctx-item { display: grid; grid-template-columns: 24px minmax(0, 1fr); align-items: center; gap: 8px; width: 100%; min-height: 34px; padding: 6px 10px; border: 0; border-radius: var(--r); background: none; color: var(--ink-2); cursor: pointer; font: 500 .76rem/1.35 var(--mono); text-align: left; }
.fb-ctx-item:hover, .fb-ctx-item:focus-visible { color: var(--ink); background: var(--signal-dim); outline: none; }
.fb-ctx-item.danger { color: var(--danger); }
.fb-ctx-icon { display: inline-flex; align-items: center; justify-content: center; width: 24px; line-height: 1; font-family: "Segoe UI Symbol", "Segoe UI Emoji", sans-serif; }
.fb-ctx-label { min-width: 0; overflow-wrap: anywhere; }
.pf-tier-tabs { flex-wrap: wrap; }
.pf-action-row { flex-wrap: wrap; }
.pf-action-row .btn { min-width: 0; white-space: normal; text-align: center; }
.pf-list-row:hover { background: var(--srf-1) !important; }
.pf-list-row img { margin-right: 2px; }
.items-card { min-width: 0; overflow: hidden; }
.items-tech-name { min-width: 0; max-width: 100%; overflow-wrap: anywhere; word-break: break-word; line-height: 1.35; }
.gi-value-field { display: grid; grid-template-rows: minmax(2.7em, auto) auto; align-content: end; min-width: 0; }
.gi-value-field .muted-label { align-self: end; line-height: 1.25; }
@media (max-width: 1200px) {
  .pf-layout { grid-template-columns: minmax(0, 1fr) !important; }
}
@media (max-width: 560px) {
  .pf-action-row { display: grid !important; grid-template-columns: minmax(0, 1fr); }
  .pf-action-row .btn { width: 100%; }
  .gi-value-grid { grid-template-columns: minmax(0, 1fr) !important; }
  .gi-value-field { grid-template-rows: auto auto; }
}
.btn-xs { background: var(--srf-0); border: 1px solid var(--line); color: var(--ink-2); padding: 4px 6px; border-radius: var(--r); cursor: pointer; transition: color var(--fast), border-color var(--fast), background var(--fast); display: inline-flex; align-items: center; justify-content: center; }
.btn-xs:hover { color: var(--ink); background: var(--srf-1); border-color: var(--line-hi); }
.btn-xs.warn:hover { color: var(--danger); border-color: rgba(255,66,66,.4); background: var(--danger-dim); }
.btn-xs.edit:hover { color: var(--signal); border-color: rgba(255,107,26,.4); }

/* Built-in code editor (full-screen modal) */
.fb-editor { position: fixed; inset: 0; z-index: 200; display: none; background: rgba(4,6,9,.85); backdrop-filter: none; -webkit-backdrop-filter: none; }
.fb-editor.open { display: flex; align-items: stretch; justify-content: center; padding: 16px; }
.fb-editor-inner { background-color: var(--bg-1); background-image: none; border: 1px solid var(--line-hi); border-radius: var(--r); width: 100%; max-width: 1400px; display: flex; flex-direction: column; overflow: hidden; box-shadow: var(--shadow-lg); }
.ed-topbar { display: flex; align-items: center; padding: 0 12px; height: 40px; background: var(--bg-1); border-bottom: 1px solid var(--line); gap: 8px; }
.ed-topbar .fname { font-family: var(--mono); font-size: .82rem; color: var(--signal); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ed-topbar .unsaved { color: var(--warn); margin-left: 2px; display: none; }
.ed-topbar .acts { display: flex; gap: 6px; margin-left: auto; flex-shrink: 0; }
.ed-toolbar { display: flex; align-items: center; padding: 0 12px; height: 34px; background: var(--srf-0); border-bottom: 1px solid var(--line); gap: 4px; font-size: .7rem; }
.ed-toolbar .sep { width: 1px; height: 18px; background: var(--line); margin: 0 4px; }
.ed-tbtn { padding: 3px 8px; font-size: .68rem; border: 1px solid transparent; border-radius: var(--r); background: none; color: var(--ink-2); cursor: pointer; font-family: var(--mono); transition: color var(--fast), background var(--fast), border-color var(--fast); display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.ed-tbtn:hover { color: var(--ink); background: var(--srf-1); border-color: var(--line); }
.ed-tbtn.on { color: var(--signal); background: var(--signal-dim); border-color: rgba(255,107,26,.3); }
.ed-find { display: none; align-items: center; padding: 6px 12px; background: var(--bg-1); border-bottom: 1px solid var(--line); gap: 6px; }
.ed-find.open { display: flex; }
.ed-find input { background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); padding: 4px 8px; color: var(--ink); font-family: var(--mono); font-size: .78rem; outline: none; min-width: 200px; }
.ed-find input:focus { border-color: var(--signal); box-shadow: 0 0 0 3px var(--signal-dim); }
.ed-find .info { font-size: .68rem; color: var(--ink-3); font-family: var(--mono); min-width: 60px; text-align: center; }
.ed-body { flex: 1; display: flex; overflow: hidden; min-height: 0; }
.ed-gutter { width: 52px; background: var(--bg-1); border-right: 1px solid var(--line); overflow: hidden; flex-shrink: 0; user-select: none; }
.ed-gutter pre { margin: 0; padding: 8px 8px 8px 0; font-family: var(--mono); font-size: 13px; line-height: 1.6; color: var(--ink-4); text-align: right; white-space: pre; }
.ed-code { flex: 1; position: relative; overflow: hidden; min-width: 0; }
.ed-code textarea { display: block; width: 100%; height: 100%; padding: 8px 12px; background: var(--console); color: var(--ink); border: none; resize: none; font-family: var(--mono); font-size: 13px; line-height: 1.6; tab-size: 4; outline: none; white-space: pre; overflow: auto; caret-color: var(--signal); }
.ed-code textarea.wrap { white-space: pre-wrap; word-break: break-all; }
.ed-code textarea::selection { background: rgba(255,107,26,.28); }
.ed-statusbar { display: flex; align-items: center; padding: 0 12px; height: 26px; background: var(--bg-1); border-top: 1px solid var(--line); gap: 16px; font-family: var(--mono); font-size: .65rem; color: var(--ink-3); }
.ed-statusbar .right { margin-left: auto; display: flex; gap: 16px; }
/* syntax highlight hues — Deck-tuned, still readable on the console pit */
.ed-hl-tag { color: var(--scan); }
.ed-hl-attr { color: #9fd0ff; }
.ed-hl-str { color: var(--ok); }
.ed-hl-num { color: var(--gold); }
.ed-hl-cmt { color: var(--ink-4); font-style: italic; }
.ed-hl-kw { color: var(--signal-hi); }
.ed-hl-key { color: #9fd0ff; }
.ed-hl-bool { color: var(--signal-hi); }

/* ── 06g · ESC PANEL EDITOR (.pnl-*) ─────────────────────────────────────── */
.pnl-wrap { width: 100%; max-width: 1280px; margin: 0 auto; padding-bottom: 72px; }
.pnl-studio-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:22px 24px;background:linear-gradient(135deg,var(--srf-0),rgba(249,115,22,.09));border:1px solid var(--line-hi);border-left:3px solid var(--signal);margin-bottom:12px}.pnl-studio-hero h3{margin:5px 0 7px;font-size:1.35rem;color:var(--ink)}.pnl-studio-hero p{margin:0;max-width:720px;color:var(--ink-2);line-height:1.55;font-size:.82rem}.pnl-kicker{font:600 .62rem var(--mono);letter-spacing:.18em;color:var(--signal)}.pnl-runtime{display:flex;align-items:center;gap:8px;flex:none}.pnl-runtime span{display:grid;grid-template-columns:24px auto;align-items:center;gap:7px;font:600 .62rem var(--mono);text-transform:uppercase;color:var(--ink-2)}.pnl-runtime b{display:grid;place-items:center;width:24px;height:24px;border:1px solid var(--signal);color:var(--signal)}.pnl-runtime i{color:var(--ink-4);font-style:normal}.pnl-studio-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--srf-0);border:1px solid var(--line);margin-bottom:10px}.pnl-template,.pnl-xui-template{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.pnl-template label,.pnl-xui-template label{font:600 .62rem var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.1em}.pnl-template select,.pnl-xui-template select{min-width:190px;padding:7px 9px;background:var(--bg-1);border:1px solid var(--line);color:var(--ink);font:inherit}.pnl-safe-note{padding:8px 10px;border:1px solid rgba(63,185,80,.28);background:rgba(63,185,80,.07);color:var(--ok);font:.65rem/1.45 var(--mono)}
.pnl-workspaces{display:flex;gap:4px;overflow-x:auto;padding:4px;background:var(--bg-1);border:1px solid var(--line);margin-bottom:12px}.pnl-workspaces button,.pnl-native-tabs button{border:0;background:transparent;color:var(--ink-3);font:600 .65rem var(--mono);text-transform:uppercase;letter-spacing:.08em;padding:9px 12px;white-space:nowrap;cursor:pointer}.pnl-workspaces button.active,.pnl-native-tabs button.active{background:var(--signal-dim);color:var(--signal);box-shadow:inset 0 -2px var(--signal)}.pnl-studio-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(290px,380px);gap:14px;align-items:start}.pnl-studio-main{min-width:0}.pnl-preview-sticky{position:sticky;top:76px;border:1px solid var(--line-hi);background:var(--bg-1);box-shadow:var(--shadow-md)}.pnl-preview-head{display:flex;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);font:600 .66rem var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--ink-2)}.pnl-preview-head small{color:var(--ink-4);font-weight:400}.pnl-preview-canvas{padding:12px;display:grid;gap:12px}.pnl-game-frame,.pnl-native-preview{border:1px solid var(--pnl-preview-accent,var(--signal));background:#080b10;color:#e6edf3;font-family:var(--mono);overflow:hidden}.pnl-game-top,.pnl-native-cover{min-height:72px;padding:15px;background:linear-gradient(135deg,color-mix(in srgb,var(--pnl-preview-accent) 22%,#090b0f),#090b0f);background-size:cover;background-position:center;display:flex;flex-direction:column;justify-content:end}.pnl-game-top b,.pnl-native-cover b{color:var(--pnl-preview-accent);font-size:.85rem}.pnl-game-top small,.pnl-native-cover small{margin-top:4px;color:#b5beca;font-size:.56rem}.pnl-game-tabs,.pnl-native-preview-tabs{display:flex;overflow:hidden;border-block:1px solid #30363d;background:#11161d}.pnl-game-tabs span,.pnl-native-preview-tabs span{padding:7px 8px;font-size:.5rem;color:#8b949e;white-space:nowrap}.pnl-game-tabs .on,.pnl-native-preview-tabs span:first-child{color:var(--pnl-preview-accent);box-shadow:inset 0 -2px var(--pnl-preview-accent)}.pnl-game-content{padding:14px;min-height:160px}.pnl-game-content h4{margin:0 0 10px;color:var(--pnl-preview-accent);font-size:.72rem}.pnl-game-content p{margin:4px 0;color:#c9d1d9;font-size:.54rem;line-height:1.45}.pnl-game-links,.pnl-native-cards{display:flex;gap:5px;flex-wrap:wrap;margin-top:12px}.pnl-game-links span,.pnl-native-cards i{padding:5px 7px;border:1px solid #30363d;color:var(--pnl-preview-accent);font-size:.49rem;font-style:normal;text-transform:uppercase}.pnl-player-sample{display:grid;gap:5px;padding:12px;font-size:.52rem}.pnl-player-sample b{color:var(--pnl-preview-accent)}.pnl-player-sample span{padding:5px;background:#11161d}.pnl-player-sample small{color:#6e7681}
.pnl-switch{display:flex;align-items:center;gap:7px;cursor:pointer}.pnl-switch input{width:18px;height:18px;accent-color:var(--signal)}.pnl-explainer{font-size:.72rem;margin:0 0 12px}.pnl-xui-template{padding:10px;border:1px solid var(--line);background:var(--bg-1);margin-bottom:10px}.pnl-native-tabs{display:flex;border-bottom:1px solid var(--line);margin-bottom:14px}.pnl-xui-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}.pnl-xui-heading h4{margin:0;color:var(--ink);font-size:.9rem}.pnl-xui-heading p{margin:5px 0 0;color:var(--ink-3);font-size:.72rem;line-height:1.5}.pnl-xui-background{display:grid;grid-template-columns:180px 1fr;gap:12px;align-items:center;padding:12px;border:1px solid var(--line);margin-top:12px}.pnl-xui-background-state{aspect-ratio:16/7;background:var(--console);border:1px dashed var(--line-hi);display:grid;place-items:center;overflow:hidden;color:var(--ink-4);font:.6rem var(--mono);text-align:center}.pnl-xui-background-state img{width:100%;height:100%;object-fit:cover;grid-area:1/1}.pnl-xui-background-state span{grid-area:1/1;background:rgba(0,0,0,.7);padding:4px;z-index:1}.pnl-xui-background strong{font-size:.78rem}.pnl-xui-background p{margin:5px 0 8px;color:var(--ink-3);font-size:.68rem;line-height:1.45}.pnl-choice-grid{border:0;padding:0;margin:14px 0 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:6px}.pnl-choice-grid legend{grid-column:1/-1;padding:0 0 7px;font:600 .62rem var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3)}.pnl-choice-grid label,.pnl-check-row{display:flex;align-items:center;gap:8px;padding:8px 9px;border:1px solid var(--line);background:var(--bg-1);font-size:.68rem;cursor:pointer}.pnl-choice-grid input,.pnl-check-row input{width:17px;height:17px;accent-color:var(--signal)}.pnl-privacy-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.pnl-privacy-grid .pnl-check-row{grid-column:1/-1}
.pnl-intro { display: flex; align-items: flex-start; gap: .9rem; padding: .9rem 1.1rem; background: var(--srf-0); border: 1px solid var(--line); border-left: 3px solid var(--signal); border-radius: 0; margin-bottom: 1.1rem; }
.pnl-intro .ico { font-size: 1.4rem; line-height: 1; flex-shrink: 0; margin-top: 2px; }
.pnl-intro .body { flex: 1; min-width: 0; }
.pnl-intro h4 { margin: 0; color: var(--ink); font-family: var(--mono); font-size: .82rem; text-transform: uppercase; letter-spacing: .12em; font-weight: 600; }
.pnl-intro p { margin: .35rem 0 0; color: var(--ink-2); font-size: .76rem; line-height: 1.55; }
.pnl-intro code { color: var(--signal); background: var(--signal-dim); padding: 1px 6px; border-radius: var(--r); font-size: .72rem; }
.pnl-card { position: relative; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); padding: 1.1rem 1.3rem; margin-bottom: 1rem; overflow: hidden; }
.pnl-card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--signal); opacity: .7; }
.pnl-card.identity::before { background: var(--signal); }
.pnl-card.welcome::before { background: var(--warn); }
.pnl-card.shops::before { background: var(--gold); }
.pnl-card.links::before { background: var(--scan); }
.pnl-card.feed::before { background: var(--ink-3); }
.pnl-card.external::before { background: var(--ok); }
.pnl-card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: .85rem; padding-bottom: .55rem; border-bottom: 1px solid var(--line); gap: .7rem; }
.pnl-card-head h3 { margin: 0; font-family: var(--mono); font-size: .72rem; color: var(--ink-2); text-transform: uppercase; letter-spacing: .16em; font-weight: 600; display: flex; align-items: center; gap: .45rem; }
.pnl-card-head h3 .tag-ico { color: var(--ink); font-size: 1em; line-height: 1; }
.pnl-card-head .sub { font-family: var(--mono); font-size: .66rem; color: var(--ink-3); }
.pnl-card-head .sub .pill { display: inline-block; padding: 2px 8px; border-radius: var(--r); background: var(--signal-dim); color: var(--signal); font-weight: 600; letter-spacing: .1em; font-size: .6rem; text-transform: uppercase; }
.pnl-hint { color: var(--ink-3); font-family: var(--mono); font-size: .66rem; line-height: 1.55; margin-top: .4rem; }
.pnl-hint code { color: var(--signal); background: var(--signal-dim); padding: 1px 5px; border-radius: var(--r); }
.pnl-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .7rem; }
.pnl-grid.full { grid-template-columns: 1fr; }
.pnl-field { display: flex; flex-direction: column; gap: 4px; }
.pnl-field.span2 { grid-column: span 2; }
.pnl-field label { font-family: var(--mono); font-size: .6rem; color: var(--ink-3); text-transform: uppercase; letter-spacing: .12em; font-weight: 600; display: flex; align-items: center; gap: .35rem; }
.pnl-field label .opt { font-weight: 400; color: var(--ink-3); opacity: .75; letter-spacing: 0; text-transform: none; }
.pnl-field input, .pnl-field textarea, .pnl-field select { width: 100%; padding: 8px 10px; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); font-family: var(--mono); font-size: .78rem; outline: none; transition: border-color var(--fast); }
.pnl-field input[type="checkbox"], .pnl-check-row input[type="checkbox"] { width: 17px; height: 17px; padding: 0; flex: 0 0 17px; accent-color: var(--signal); }
.pnl-field input:focus, .pnl-field textarea:focus, .pnl-field select:focus { border-color: var(--signal); box-shadow: 0 0 0 3px var(--signal-dim); }
.pnl-field textarea { resize: vertical; min-height: 110px; line-height: 1.55; }
.pnl-shops-info { display: grid; grid-template-columns: 1fr 1fr; gap: .7rem; }
.pnl-shops-info .chip { background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); padding: .7rem .9rem; display: flex; gap: .65rem; align-items: center; }
.pnl-shops-info .chip .ic { font-size: 1.3rem; line-height: 1; }
.pnl-shops-info .chip .lbl { font-family: var(--mono); font-size: .68rem; color: var(--ink-3); text-transform: uppercase; letter-spacing: .1em; }
.pnl-shops-info .chip .val { font-family: var(--mono); font-size: .8rem; color: var(--ink); margin-top: 2px; }
.pnl-codeblock { background: var(--console); border: 1px solid var(--line); border-radius: var(--r); padding: .75rem .9rem; color: var(--ink); font-family: var(--mono); font-size: .7rem; white-space: pre; overflow-x: auto; line-height: 1.45; margin-top: .5rem; }
.pnl-links { display: flex; flex-direction: column; gap: .45rem; }
.pnl-link { display: grid; grid-template-columns: 32px 2fr 3fr 1.7fr auto; gap: .5rem; align-items: center; padding: .5rem .65rem; background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); transition: border-color var(--fast); }
.pnl-link:hover { border-color: var(--line-hi); }
.pnl-link-badge { width: 32px; height: 32px; border-radius: 0; background: var(--srf-1); border: 1px solid var(--line); display: flex; align-items: center; justify-content: center; color: var(--signal); font-family: var(--mono); font-size: .62rem; font-weight: 600; overflow: hidden; white-space: nowrap; padding: 0 2px; }
.pnl-link input { padding: 6px 9px; font-size: .72rem; background: var(--bg-1); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); font-family: var(--mono); outline: none; }
.pnl-link input:focus { border-color: var(--signal); }
.pnl-link .lnk-btns { display: flex; gap: 2px; }
.pnl-link .lnk-btns button { width: 24px; height: 24px; padding: 0; background: var(--srf-1); border: 1px solid var(--line); color: var(--ink-2); border-radius: var(--r); cursor: pointer; font-size: .7rem; display: inline-flex; align-items: center; justify-content: center; }
.pnl-link .lnk-btns button:hover { color: var(--signal); border-color: var(--signal); }
.pnl-link .lnk-btns button:disabled { opacity: .3; cursor: not-allowed; }
.pnl-link .lnk-btns .del:hover { color: var(--danger); border-color: var(--danger); }
.pnl-empty { padding: 1.5rem; text-align: center; color: var(--ink-2); font-family: var(--mono); font-size: .74rem; background: var(--srf-0); border: 1px dashed var(--line); border-radius: var(--r); }
/* Welcome-tab extras block editor */
.pnl-extras { display: flex; flex-direction: column; gap: .55rem; }
.pnl-extra { background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); padding: .55rem .65rem; transition: border-color var(--fast); }
.pnl-extra:hover { border-color: var(--line-hi); }
.pnl-extra-head { display: flex; align-items: center; gap: .5rem; margin-bottom: .55rem; }
.pnl-extra-head select { padding: 5px 8px; font-size: .72rem; background: var(--bg-1); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); font-family: var(--mono); outline: none; }
.pnl-extra-head select:focus { border-color: var(--signal); }
.pnl-extra-idx { font-family: var(--mono); font-size: .66rem; color: var(--ink-3); flex: 1; }
.pnl-extra .lnk-btns { display: flex; gap: 2px; }
.pnl-extra .lnk-btns button { width: 24px; height: 24px; padding: 0; background: var(--srf-1); border: 1px solid var(--line); color: var(--ink-2); border-radius: var(--r); cursor: pointer; font-size: .7rem; display: inline-flex; align-items: center; justify-content: center; }
.pnl-extra .lnk-btns button:hover { color: var(--signal); border-color: var(--signal); }
.pnl-extra .lnk-btns button:disabled { opacity: .3; cursor: not-allowed; }
.pnl-extra .lnk-btns .del:hover { color: var(--danger); border-color: var(--danger); }
.pnl-extra-body { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
.pnl-extra-body .pnl-field.span2 { grid-column: 1 / -1; }
.pnl-extra-body .pnl-field label { display: block; font-family: var(--mono); font-size: .62rem; color: var(--ink-3); margin-bottom: .25rem; text-transform: uppercase; letter-spacing: .1em; }
.pnl-extra-body .pnl-field input, .pnl-extra-body .pnl-field textarea, .pnl-extra-body .pnl-field select { width: 100%; box-sizing: border-box; padding: 6px 9px; font-size: .72rem; background: var(--bg-1); border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); font-family: var(--mono); outline: none; }
.pnl-extra-body .pnl-field input:focus, .pnl-extra-body .pnl-field textarea:focus, .pnl-extra-body .pnl-field select:focus { border-color: var(--signal); }
.pnl-extra-body .pnl-field .opt { color: var(--ink-3); font-weight: 400; text-transform: none; }
.pnl-savebar { position: sticky; bottom: 0; left: 0; right: 0; margin-top: 1.2rem; padding: .85rem 0; display: flex; justify-content: space-between; align-items: center; gap: .6rem; }
.pnl-savebar .savebar-inner { display: flex; align-items: center; gap: .8rem; flex: 1; background: var(--bg-1); border: 1px solid var(--line-hi); border-radius: var(--r); padding: .7rem 1rem; box-shadow: var(--shadow-md); }
.pnl-savebar .hint { font-family: var(--mono); font-size: .66rem; color: var(--ink-3); flex: 1; }
.pnl-savebar .msg { min-width: 0; max-width: min(420px, 45vw); overflow-wrap: anywhere; font-family: var(--mono); font-size: .72rem; line-height: 1.4; font-weight: 600; letter-spacing: .04em; }
.pnl-savebar .msg.ok { color: var(--ok); }
.pnl-savebar .msg.err { color: var(--danger); }
@media (max-width: 820px) {
  .pnl-studio-hero{align-items:flex-start;flex-direction:column;padding:16px}.pnl-runtime{width:100%;overflow-x:auto}.pnl-studio-tools{align-items:flex-start;flex-direction:column}.pnl-studio-grid{grid-template-columns:1fr}.pnl-preview{order:-1}.pnl-preview-sticky{position:static}.pnl-preview-canvas{grid-template-columns:1fr 1fr}.pnl-xui-background{grid-template-columns:1fr}.pnl-xui-background-state{max-width:360px}.pnl-privacy-grid{grid-template-columns:1fr}.pnl-privacy-grid .pnl-check-row{grid-column:auto}
  .pnl-grid { grid-template-columns: 1fr; }
  .pnl-field.span2 { grid-column: auto; }
  .pnl-shops-info { grid-template-columns: 1fr; }
  .pnl-link { grid-template-columns: 1fr 1fr auto; row-gap: .35rem; }
  .pnl-link-badge { grid-column: 1/-1; width: auto; height: auto; padding: 4px 8px; }
  .pnl-extra-body { grid-template-columns: 1fr; }
  .pnl-savebar .savebar-inner { flex-wrap: wrap; }
  .pnl-savebar .msg { max-width: 100%; flex-basis: 100%; }
}
@media(max-width:560px){.pnl-preview-canvas{grid-template-columns:1fr}.pnl-runtime i{display:none}.pnl-runtime{display:grid;grid-template-columns:1fr}.pnl-runtime span{grid-template-columns:24px 1fr}.pnl-workspaces button{min-height:44px}.pnl-card-head,.pnl-xui-heading{align-items:flex-start;flex-direction:column}.pnl-template,.pnl-xui-template{align-items:stretch;display:grid;grid-template-columns:1fr}.pnl-template select,.pnl-xui-template select{min-width:0;width:100%}}

/* ── 06h · ONBOARDING TOUR ───────────────────────────────────────────────── */
body.tour-active { overflow: hidden; }
.tour-overlay { position: fixed; inset: 0; z-index: 9998; pointer-events: none; }
.tour-backdrop {
  position: absolute; inset: 0;
  background: rgba(4,6,9,.78);
  pointer-events: auto;
  backdrop-filter: none;
  animation: tour-fade-in .25s ease both;
}
.tour-spotlight {
  position: relative;
  z-index: 10000 !important;
  border-radius: var(--r);
  box-shadow: 0 0 0 2px var(--signal), 0 0 24px rgba(255,107,26,.45);
  animation: tour-pulse 1.8s ease-in-out infinite;
}
.tour-arrow { position: absolute; inset: 0; pointer-events: none; z-index: 10001; overflow: visible;
  filter: drop-shadow(0 0 6px rgba(255,107,26,.6)); }
.tour-arrow-path { fill: none; stroke: var(--signal); stroke-width: 2.5; stroke-linecap: square; }
.tour-tooltip {
  position: absolute; width: 340px; max-width: calc(100vw - 32px);
  background: var(--srf-0);
  border: 1px solid var(--line-hi);
  border-radius: var(--r);
  clip-path: var(--chamfer);
  padding: 20px 20px 16px;
  z-index: 10002;
  pointer-events: auto;
  color: var(--ink);
  box-shadow: var(--shadow-lg);
  font-family: var(--sans);
  opacity: 0;
}
.tour-tooltip.tour-anim-in {
  animation: tour-tip-in .3s var(--ease) both;
}
.tour-tip-step { font: 600 10px var(--mono); color: var(--signal); letter-spacing: .18em; text-transform: uppercase; margin-bottom: 4px; opacity: 1; }
.tour-title { margin: 0 0 6px; font: 600 17px var(--display); text-transform: uppercase; letter-spacing: .02em; color: var(--ink); }
.tour-body { margin: 0 0 14px; font-size: 13.5px; line-height: 1.55; color: var(--ink-2); }
.tour-actions { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.tour-actions .tour-skip { background: transparent; border: 1px solid var(--line); color: var(--ink-2); padding: 6px 12px; border-radius: var(--r); cursor: pointer; font: 500 11px var(--mono); letter-spacing: .08em; text-transform: uppercase; transition: color var(--fast), border-color var(--fast); }
.tour-actions .tour-skip:hover { color: var(--ink); border-color: var(--line-hi); }
.tour-actions .tour-next { background: var(--signal); color: var(--on-signal); border: 0; padding: 8px 16px; border-radius: 0; clip-path: var(--chamfer-sm); cursor: pointer; font: 600 11.5px var(--display); letter-spacing: .08em; text-transform: uppercase; transition: background var(--fast); box-shadow: none; }
.tour-actions .tour-next:hover { transform: none; box-shadow: none; background: var(--signal-hi); }
@keyframes tour-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes tour-tip-in {
  0%   { opacity: 0; transform: translateY(8px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes tour-pulse { 0%,100% { box-shadow: 0 0 0 2px var(--signal), 0 0 24px rgba(255,107,26,.45); } 50% { box-shadow: 0 0 0 2px var(--signal), 0 0 40px rgba(255,107,26,.7); } }
@keyframes tour-dash { from { stroke-dashoffset: 0; } to { stroke-dashoffset: -32; } }

/* ── 08 · RESPONSIVE — chrome collapse + mobile passes ───────────────────── */

/* <1280px — registration ticks inset to 6px (frame tax on small screens) */
@media (max-width: 1279px) {
  .deck-ticks .tl { top: calc(var(--strip-total) + 6px); left: calc(var(--rail-w) + 6px); }
  body.no-rail .deck-ticks .tl { left: 6px; }
  .deck-ticks .br { right: 6px; bottom: 6px; }
}

/* <1024px — icon rail collapses to a 56px bottom dock; content margin drops */
@media (max-width: 1023px) {
  .deck-rail {
    top: auto; bottom: 0; left: 0; right: 0; width: auto;
    height: calc(var(--dock-h) + env(safe-area-inset-bottom));
    flex-direction: row; justify-content: center; align-items: center; gap: 4px;
    padding: 0 12px env(safe-area-inset-bottom);
    border-right: none; border-top: 1px solid var(--line);
  }
  .deck-mark { margin-bottom: 0; width: 30px; height: 30px; }
  .rail-gap { display: none; }
  .rail-sep, .rail-pins { display: none; } /* pins are desktop-only — the dock doesn't scroll */
  .rail-item.active { box-shadow: inset 0 2px 0 var(--signal); }
  .rail-item::after { left: 50%; top: auto; bottom: calc(100% + 8px); transform: translateX(-50%); }
  .deck-main { margin-left: 0; }
  body:not(.no-rail) .deck-main { padding-bottom: calc(var(--dock-h) + env(safe-area-inset-bottom)); }
  .deck-ticks .tl { left: 6px; }
  body:not(.no-rail) .deck-ticks .br { bottom: calc(var(--dock-h) + env(safe-area-inset-bottom) + 6px); }
  .hero-deck { grid-template-columns: 1fr; padding: 56px 24px 64px; gap: 32px; }
  .hero-deck .datastrip { margin-top: 32px; }
  .ledger-row { grid-template-columns: 1fr; gap: 12px; padding: 32px 16px 32px 0; }
  .ledger-idx { padding-left: 16px; }
  .loadout, .transmission-cols { grid-template-columns: 1fr; }
  .loadout-tier { border-right: none; border-bottom: 1px solid var(--line); }
  .loadout-tier:last-child { border-bottom: none; }
}

/* ── Mobile <800px — comprehensive pass (ported mechanics, Deck visuals) ── */
@media (max-width: 800px) {
  /* Page-level overflow guards */
  html, body { overflow-x: hidden; max-width: 100%; }
  /* console readouts wrap on phones — non-wrapping mono lines otherwise set the
     min-content width of their column past the viewport (.ops is align-self:start) */
  .ops { max-width: 100%; }
  .ops pre { white-space: pre-wrap; overflow-wrap: anywhere; }
  .admin-shell, .admin-content, .admin-side,
  .admin-shell > *, .admin-content > *, section[data-pane] > * {
    min-width: 0 !important; max-width: 100% !important;
  }
  .card, .card * { max-width: 100%; }
  .card { min-width: 0; box-sizing: border-box; overflow-wrap: anywhere; word-break: break-word; }

  /* Outer wrap */
  body { font-size: 14px; }
  .wrap { padding: 12px !important; max-width: 100% !important; }
  .brand-bar { flex-wrap: wrap; gap: 8px; padding: 10px 12px !important; }
  .brand-bar-right { font-size: 10.5px; }
  .admin-header { flex-direction: column; align-items: flex-start; gap: 8px; }
  .admin-header h1, .admin-header .server-title { font-size: 18px !important; }
  .footer { font-size: 10px; padding: 10px 0; }

  /* Sidebar → horizontal icon scroll bar. NOT sticky on mobile (iOS trap). */
  .admin-shell { grid-template-columns: 1fr !important; gap: 10px !important; }
  .admin-side { position: relative !important; top: auto !important; z-index: 1;
    display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important;
    overflow-x: auto !important; overflow-y: hidden !important;
    padding: 6px !important; gap: 4px !important;
    -webkit-overflow-scrolling: touch; touch-action: pan-x;
    scroll-snap-type: x proximity;
    width: 100% !important; max-width: 100% !important;
    scrollbar-width: thin; }
  .admin-side::-webkit-scrollbar { height: 4px; }
  .admin-side > * { flex: 0 0 auto !important; scroll-snap-align: start; }
  .side-tab { padding: 8px 10px !important; min-width: 44px; min-height: 40px; height: auto; flex-direction: column; align-items: center; gap: 2px; font-size: 10px; border-radius: var(--r); border-bottom: none; border-left: none; }
  .side-tab::before { display: none; }   /* no counter indices on the icon bar */
  .side-tab.active { box-shadow: inset 0 2px 0 var(--signal); }
  .side-tab .lbl { display: block; font-size: 9px; line-height: 1; text-transform: uppercase; letter-spacing: .04em; opacity: .9; }
  .side-tab .ico { width: 22px; height: 22px; }
  .side-tab .ico svg { width: 22px; height: 22px; }
  .admin-side > div { display: none; } /* divider lines clutter the bar */
  .side-group { display: none; }       /* group labels too */

  /* Section headers */
  .section-header { flex-direction: column; align-items: flex-start; gap: 6px; }
  .section-header h2 { font-size: 14px; }
  .section-meta { font-size: 10.5px; flex-wrap: wrap; gap: 6px; }

  /* Cards */
  .card { padding: 12px !important; }
  .card .card-pad-tight { padding: 8px !important; }

  /* Tables — horizontal scroll instead of squashed columns */
  table.players-table, .card table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
  table.players-table thead, .card table thead { white-space: nowrap; }
  table.players-table td, .card table td { white-space: nowrap; }
  .players-table th { position: static; }   /* sticky header off inside scrollers */

  /* Modals — fullscreen on phones */
  [id$="Modal"], #plgDetailsModal, #profileModal, #invModal, #skillsModal, #catModal, #packModal, #itemPickerModal, #givePackModal, #giveItemModal, #adminAddModal, #schedModal {
    padding: 0 !important;
  }
  [id$="Modal"] > .card, #plgDetailsModal > .card, #profileModal > .card, #invModal > .card, #skillsModal > .card, #catModal > .card, #packModal > .card, #itemPickerModal > .card, #givePackModal > .card, #giveItemModal > .card, #adminAddModal > .card, #schedModal > .card {
    width: 100% !important; max-width: 100% !important; min-height: 100vh; max-height: 100vh; border-radius: 0 !important;
    padding: 16px !important; box-sizing: border-box; overflow: auto;
  }

  /* Forms */
  form input, form select, form textarea { font-size: 16px !important; /* iOS no-zoom */ box-sizing: border-box; }
  form[id="schedForm"], form[id="catForm"], form[id="packForm"] { gap: 10px !important; }
  .modal-actions, [style*="justify-content:flex-end"], [style*="justify-content: flex-end"] { flex-wrap: wrap !important; }

  /* Console */
  #consoleOut { height: calc(100vh - 360px) !important; min-height: 240px; font-size: 11px !important; line-height: 1.4 !important; }
  #consoleForm { padding: 8px !important; }
  #consoleCmd { font-size: 16px !important; padding: 8px 10px !important; }
  .con-badge, .con-btn { padding: 4px 8px !important; font-size: 10px !important; }

  /* Map viewport */
  #mapVP { height: calc(100vh - 280px) !important; min-height: 360px !important; }
  #mapLegend { font-size: 10px !important; padding: 6px 8px !important; min-width: 120px !important; }

  /* Items grid */
  #itemsGrid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)) !important; gap: 6px !important; }
  .items-card img { width: 48px !important; height: 48px !important; }
  .items-card { padding: 6px !important; font-size: 11px !important; }

  /* Dashboard */
  .dash-strip { padding: 8px 10px; gap: 10px; font-size: 11px; }
  .dash-strip-tile { min-width: 80px; }
  .dash-strip-tile .dsv { font-size: 12px; }
  .dash-hero { display:block !important; }
  .hero-card { padding: 10px 8px !important; }
  .hero-card .hero-label { font-size: 9px !important; letter-spacing: .1em !important; }
  .hero-card .hero-val { font-size: 22px !important; margin-top: 2px !important; }
  .hero-card .hero-val span { font-size: .7em !important; }
  .hero-card .hero-sub { display: none; }
  .hero-card .hero-spark { display: block; }
  .dash-online-row { grid-template-columns: 32px 1fr auto; gap: 8px; padding: 4px 6px; }
  .dash-online-name { font-size: 12px; }
  .dash-info-table td { padding: 4px 0; font-size: 11px; }
  .dash-info-table td:first-child { width: 100px; font-size: 10px; }
  .kpi-card .v { font-size: 22px; }
  .chart-body { min-height: 80px; }
  .chart-body canvas { height: 80px; }

  /* Plugins */
  .plg-page { max-width: 100%; }
  .plg-row { grid-template-columns: 36px 1fr auto; gap: 8px; padding: 8px 10px; }
  .plg-row-ver, .plg-row-status { display: none; }
  .plg-market-grid { grid-template-columns: 1fr !important; }
  .plg-tile { padding: 0 12px 12px; min-height: 0; }
  .plg-tile-hd { margin: 0 -12px; }
  /* Module Bay mobile (§2): crest shrinks with the 36px row column; fab steps
     narrow; ops strip keeps the single-row momentum scroll; 16px inputs stop
     the iOS focus zoom. */
  .crest-40 { width: 36px; height: 36px; }
  .crest-40 svg { width: 18px; height: 18px; }
  .fab-step { grid-template-columns: 36px 1fr; }
  .fab-step-main { padding-left: 10px; }
  .fab-step textarea { font-size: 16px; }
  .fab-step-row .btn { width: 100%; }
  .plg-ops { flex-wrap: nowrap; }
  .plg-hub-err a[data-plg-retry] { display: inline-block; padding: 10px 4px; }

  /* Context menu — bottom sheet on phones */
  #ctxMenu { left: 8px !important; right: 8px !important; top: auto !important; bottom: 12px !important;
    width: auto !important; min-width: 0 !important; max-width: none !important;
    padding: 8px !important; font-size: 14px !important; box-shadow: var(--shadow-lg) !important; }
  #ctxMenu div[data-idx] { padding: 12px 14px !important; }

  /* No hover-lift effects on touch */
  .plg-tile:hover { transform: none !important; }
.items-card:hover { transform: none !important; }

  /* Scheduler cards */
  .sched-card { padding: 10px 12px !important; }
  .sched-card > div { flex-direction: column !important; gap: 6px !important; }

  /* Hub dashboard tiles */
  .tiles, .hub-grid, .pack-grid, .shop-grid { grid-template-columns: 1fr !important; gap: 10px !important; }

  /* ─ Gap-fill pass — inline-grid admin forms force single-column ─ */
  #banForm > div, #wlForm,
  #catForm > div, #packForm > div,
  #schedForm > div, #roleEditForm > div,
  .donor-card > div[style*="grid-template-columns"] {
    grid-template-columns: 1fr !important;
    gap: 8px !important;
  }
  .donor-card > div[style*="minmax(0,1fr) minmax(0,1fr)"],
  .donor-card > div[style*="minmax(0, 1fr) minmax(0, 1fr)"] {
    grid-template-columns: minmax(0,1fr) minmax(0,1fr) !important;
  }

  .admin-shell form input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
  .admin-shell form select, .admin-shell form textarea,
  [id$="Modal"] form input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
  [id$="Modal"] form select, [id$="Modal"] form textarea {
    width: 100% !important; max-width: 100% !important;
  }

  .pack-item-row, .cat-item-row {
    display: flex !important; flex-wrap: wrap !important;
    grid-template-columns: none !important; gap: 6px !important;
  }
  .pack-item-row > *, .cat-item-row > * { flex-shrink: 0; }
  .pack-item-row .pi-name, .cat-item-row .pi-name { flex: 1 1 140px; min-width: 0; }
  .pack-item-row .pi-qty, .cat-item-row .pi-qty { width: 70px; }
  .pack-item-row .pi-q,   .cat-item-row .pi-q   { width: 56px; }

  #donorsBody > div[style*="grid-template-columns"][style*="minmax(330px"] {
    grid-template-columns: 1fr !important;
  }

  [id$="Modal"] form > div[style*="grid-template-columns"],
  [id$="Modal"] .card > div[style*="grid-template-columns"] {
    grid-template-columns: 1fr !important;
  }

  #catGrid { grid-template-columns: 1fr !important; gap: 10px !important; }

  .wrap section[data-pane="items"] > div[style*="grid-template-columns"] {
    grid-template-columns: 1fr !important;
  }

  .section-header { row-gap: 8px; }
  .section-header > * { max-width: 100%; }
  .section-header [style*="display:flex"], .section-header [style*="display: flex"] { flex-wrap: wrap !important; gap: 6px !important; }

  .dash-strip { overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; }
  .dash-strip-tile { flex-shrink: 0; min-width: 76px; }

  .players-table { min-width: 100%; }

  .btn-tiny, .btn-sm { min-height: 32px; padding: 6px 10px !important; }
  .btn { min-height: 36px; }

  .brand-bar-right { width: 100%; justify-content: flex-end; }

  /* Horizontal sidebar — opaque ground + bottom hairline shadow */
  .admin-side { box-shadow: 0 4px 12px rgba(0,0,0,.35); background: var(--bg-1); }
}

/* ─ Smaller phones — extra compression ─ */
@media (max-width: 480px) {
  .wrap { padding: 8px !important; }
  .admin-header { padding: 8px 0 !important; }
  .side-tab { min-width: 42px; padding: 6px 8px !important; }
  .side-tab .lbl { display: none; } /* icons-only on tiny screens */
  .dash-strip-tile { min-width: 70px; }
  .hero-card { padding: 8px 6px !important; }
  .hero-card .hero-val { font-size: 18px !important; }
  .hero-card .hero-label { font-size: 8px !important; }
  #itemsGrid { grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)) !important; }
  table.players-table th:nth-child(3), table.players-table td:nth-child(3),
  table.players-table th:nth-child(4), table.players-table td:nth-child(4) { display: none; }
}

/* ═══ Mobile overhaul — tables→cards, bottom tab bar, collapsible fieldsets.
   Mechanics preserved verbatim; visuals Deck-restyled. All scoped <=800px
   or to elements display:none on desktop. ═══ */

.mobile-tabbar      { display: none; }
.mobile-more-sheet  { display: none; }

@media (max-width: 800px) {
  /* ── #1 Tables → cards (data-label injected by JS from thead) ── */
  .players-table { display: block !important; width: 100% !important; border-collapse: separate; }
  .players-table thead { position: absolute !important; left: -9999px !important; }
  .players-table tbody { display: block !important; }
  .players-table tbody tr {
    display: block !important;
    background: var(--srf-0);
    border: 1px solid var(--line);
    border-radius: var(--r);
    padding: 10px 12px;
    margin-bottom: 10px;
    box-shadow: none;
  }
  .players-table tbody td {
    display: flex !important;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    padding: 6px 0 !important;
    border: none !important;
    white-space: normal !important;
    min-height: 32px;
    font-size: 13px;
    border-bottom: 1px solid var(--line) !important;
  }
  .players-table tbody td:last-child { border-bottom: none !important; }
  .players-table tbody td::before {
    content: attr(data-label);
    color: var(--ink-3);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: .12em;
    font-weight: 500;
    font-family: var(--mono);
    flex: 0 0 auto;
    margin-right: 8px;
  }
  .players-table tbody td:not([data-label])::before,
  .players-table tbody td[data-label=""]::before { content: none; }
  .players-table tbody td:not([data-label]),
  .players-table tbody td[data-label=""] {
    justify-content: flex-end;
    padding-top: 8px !important;
  }
  .players-table tbody td > *:not(:first-child),
  .players-table tbody td:has(button), .players-table tbody td:has(a),
  .players-table tbody td:has(input), .players-table tbody td:has(select) {
    text-align: right;
  }
  table.players-table, .card table { overflow-x: visible !important; }
  table.players-table td, .card table td { white-space: normal !important; }
  .players-table tr:hover td { background: transparent; }
  .players-table tbody tr:hover td:first-child { box-shadow: none; }

  /* The Players screen needs a scan-friendly roster, not the generic
     field-by-field table card used by admin forms. */
  #playersBody .plr-row {
    display: grid !important;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 6px;
    align-items: center;
    padding: 8px !important;
    margin-bottom: 7px;
    border-color: rgba(255,255,255,.1);
    background: linear-gradient(135deg,rgba(255,107,26,.035),var(--srf-0) 38%);
  }
  #playersBody .plr-row > td {
    min-width: 0;
    min-height: 0;
    padding: 0 !important;
    border: 0 !important;
    justify-content: flex-start;
  }
  #playersBody .plr-row > td::before { margin: 0; font-size: 7px; letter-spacing: .08em; }
  #playersBody .plr-row > td:nth-child(1) { grid-column: 1; grid-row: 1; justify-content: center; }
  #playersBody .plr-row > td:nth-child(2) { grid-column: 2; grid-row: 1; }
  #playersBody .plr-row > td:nth-child(2) > * { width: 36px !important; height: 36px !important; }
  #playersBody .plr-row > td:nth-child(3) { grid-column: 3 / 6; grid-row: 1; }
  #playersBody .plr-row > td:nth-child(3) .profile-link { overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; }
  #playersBody .plr-row > td:nth-child(4),
  #playersBody .plr-row > td:nth-child(9) { display: none !important; }
  #playersBody .plr-row > td:nth-child(10) {
    grid-column: 6; grid-row: 1; flex-direction: column; align-items: flex-end;
    color: var(--accent2); font-family: var(--mono); font-size: 12px;
  }
  #playersBody .plr-row > td:nth-child(5),
  #playersBody .plr-row > td:nth-child(6),
  #playersBody .plr-row > td:nth-child(7),
  #playersBody .plr-row > td:nth-child(8) {
    min-height: 32px; flex-direction: column; align-items: flex-start;
    justify-content: center; gap: 2px; padding: 3px 5px !important;
    border: 1px solid rgba(255,255,255,.075) !important; border-radius: 5px;
    background: linear-gradient(135deg,rgba(255,255,255,.04),rgba(255,255,255,.015));
    overflow: hidden; font-family: var(--mono); font-size: 10px;
  }
  #playersBody .plr-row > td:nth-child(n+5):nth-child(-n+8)::before {
    max-width: 100%; overflow: hidden; font-size: 6.5px; line-height: 1;
    text-overflow: ellipsis; white-space: nowrap;
  }
  #playersBody .plr-row > td:nth-child(5) { grid-column: 1 / 3; grid-row: 2; }
  #playersBody .plr-row > td:nth-child(6) { grid-column: 3; grid-row: 2; }
  #playersBody .plr-row > td:nth-child(7) { grid-column: 4; grid-row: 2; }
  #playersBody .plr-row > td:nth-child(8) { grid-column: 5 / 7; grid-row: 2; }
  #playersBody .plr-row > td:nth-child(7) span,
  #playersBody .plr-row > td:nth-child(8) span { max-width: 100%; overflow: hidden; font-size: 9px !important; text-overflow: ellipsis; white-space: nowrap; }
  #playersBody .plr-row > td:nth-child(11) {
    grid-column: 1 / -1; grid-row: 3; display: grid !important;
    grid-template-columns: repeat(auto-fit,minmax(54px,1fr)); gap: 4px;
    padding-top: 2px !important;
  }
  #playersBody .plr-row > td:nth-child(11) .btn { min-height: 29px; padding: 4px 5px; border-color:rgba(255,255,255,.11); background:rgba(255,255,255,.025); font-size:9px; }

  #offlineBody .off-row {
    display: grid !important;
    grid-template-columns: repeat(4,minmax(0,1fr));
    gap: 6px;
    padding: 8px !important;
    margin-bottom: 7px;
    border-color: rgba(255,255,255,.09);
  }
  #offlineBody .off-row > td {
    min-width: 0; min-height: 0; padding: 0 !important; border: 0 !important;
    justify-content: flex-start;
  }
  #offlineBody .off-row > td::before { margin: 0; font-size: 7px; letter-spacing: .08em; }
  #offlineBody .off-row > td:nth-child(1) { grid-column: 1 / 4; grid-row: 1; }
  #offlineBody .off-row > td:nth-child(1) .profile-link { overflow:hidden; font-size:14px; text-overflow:ellipsis; white-space:nowrap; }
  #offlineBody .off-row > td:nth-child(2) { display:none !important; }
  #offlineBody .off-row > td:nth-child(3),
  #offlineBody .off-row > td:nth-child(4),
  #offlineBody .off-row > td:nth-child(5),
  #offlineBody .off-row > td:nth-child(6) {
    grid-row: 2; min-height: 36px; flex-direction: column; align-items: flex-start;
    justify-content: center; gap: 2px; padding: 4px 6px !important;
    border: 1px solid rgba(255,255,255,.07) !important; border-radius: 5px;
    background: rgba(255,255,255,.02); font-family: var(--mono); font-size: 10px;
  }
  #offlineBody .off-row > td:nth-child(3) { grid-column: 1; }
  #offlineBody .off-row > td:nth-child(4) { grid-column: 2; }
  #offlineBody .off-row > td:nth-child(5) { grid-column: 3; }
  #offlineBody .off-row > td:nth-child(6) { grid-column: 4; }
  #offlineBody .off-row > td:nth-child(7) { grid-column: 1 / 4; grid-row: 3; font-size: 9px; }
  #offlineBody .off-row > td:nth-child(8) { grid-column: 4; grid-row: 1 / 2; justify-content: flex-end; }
  #offlineBody .off-row > td:nth-child(8) .btn { min-height: 28px; padding: 4px 8px; font-size: 9px; }

  /* ── #2 Bottom tab bar (JS builds it; restyled as a deck dock) ── */
  .mobile-tabbar {
    display: grid !important;
    grid-template-columns: repeat(6, 1fr);
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 1000;
    background: var(--bg-1);
    border-top: 1px solid var(--line);
    box-shadow: 0 -4px 20px rgba(0,0,0,.5);
    padding: 1px 2px calc(1px + env(safe-area-inset-bottom)) 2px;
    gap: 0;
  }
  .mtb-btn {
    background: transparent;
    border: none;
    /* Muted/grey by default; orange ONLY when the tab is active/selected. */
    color: var(--ink-3);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    padding: 7px 2px;
    min-height: 0;
    cursor: pointer;
    border-radius: 0;
    transition: color var(--fast), background var(--fast), box-shadow var(--fast);
    font-family: var(--sans);
    text-decoration: none;
  }
  .mtb-hub { color: var(--signal); background: rgba(255,107,26,.07); box-shadow: inset 0 2px 0 rgba(255,107,26,.42); }
  /* The JS copies the .ico's INNER html, so the SVG is a DIRECT child of .mtb-btn
     (no .ico wrapper in the bar). Size the bare svg directly — this is what makes
     the bar actually short. (.ico kept for the rare wrapped case.) */
  .mtb-btn .ico, .mtb-ico, .mtb-btn > svg { width: 18px; height: 18px; flex: 0 0 auto; }
  .mtb-btn .ico, .mtb-ico { display: flex; align-items: center; justify-content: center; color: inherit; font:700 18px/1 var(--display); }
  .mtb-btn .ico svg, .mtb-ico svg, .mtb-btn > svg { width: 18px !important; height: 18px !important; }
  .mtb-lbl { font-size: 7.5px; line-height: 1; text-transform: uppercase; letter-spacing: .02em; opacity: .85; }
  .mtb-btn:active { background: var(--srf-1); }
  .mtb-btn.active { color: var(--signal); box-shadow: inset 0 2px 0 var(--signal); }
  .mtb-btn.active .ico { color: var(--signal); }
  .mtb-btn.active .ico svg { filter: none; }

  /* Hide the horizontal sidebar — bottom bar replaces it on small phones */
  .admin-side { display: none !important; }

  body.has-mobile-tabbar { padding-bottom: calc(44px + env(safe-area-inset-bottom)) !important; }
  /* admin pages run the global rail now — on phones the tabbar replaces the
     dock outright (two bottom bars would stack); body padding above keeps
     clearance, so drop the dock's own .deck-main compensation too */
  body.has-mobile-tabbar .deck-rail { display: none; }
  body.has-mobile-tabbar:not(.no-rail) .deck-main { padding-bottom: 0; }
  /* dock is gone on phones (tabbar overlays the frame corner rather than
     displacing it), so drop the dock-height offset that was floating the
     bottom-right corner bracket ~62px above the viewport edge */
  body.has-mobile-tabbar .deck-ticks .br { bottom: calc(env(safe-area-inset-bottom) + 6px); }

  /* ── More sheet (fullscreen tab picker) ── */
  .mobile-more-sheet {
    display: block !important;
    position: fixed;
    inset: 0;
    z-index: 1100;
    pointer-events: none;
    opacity: 0;
    transition: opacity .18s;
  }
  .mobile-more-sheet.open { opacity: 1; pointer-events: auto; }
  .mms-backdrop { position: absolute; inset: 0; background: rgba(4,6,9,.72); backdrop-filter: none; }
  .mms-panel {
    position: absolute; left: 0; right: 0; bottom: 0;
    max-height: 80vh; overflow-y: auto;
    background: var(--bg-1);
    border-top: 1px solid var(--line-hi);
    border-radius: 0;
    padding: 16px 16px calc(16px + env(safe-area-inset-bottom)) 16px;
    transform: translateY(100%);
    transition: transform .22s cubic-bezier(.2,0,.2,1);
  }
  .mobile-more-sheet.open .mms-panel { transform: translateY(0); }
  .mms-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; font: 600 13px var(--display); text-transform: uppercase; letter-spacing: .06em; color: var(--ink); }
  .mms-close { background: var(--srf-1); border: 1px solid var(--line); color: var(--ink-2); width: 32px; height: 32px; border-radius: 0; font-size: 14px; cursor: pointer; }
  .mms-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
  .mms-tile {
    background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r);
    padding: 14px 8px;
    display: flex; flex-direction: column; align-items: center; gap: 6px;
    color: var(--ink); font-family: var(--sans); font-size: 11px; cursor: pointer; text-decoration: none;
    min-height: 72px;
  }
  .mms-ico { width: 24px; height: 24px; color: var(--signal); display: flex; align-items: center; justify-content: center; font:700 22px/1 var(--display); }
  .mms-ico svg { width: 24px; height: 24px; }
  .mms-lbl { line-height: 1.1; text-align: center; }
  .mms-tile:active { background: var(--srf-2); transform: none; }

  /* ── #3 Collapsible fieldsets ── */
  fieldset.mobile-collapsible {
    border: 1px solid var(--line);
    border-radius: var(--r);
    padding: 0;
    margin: 8px 0;
    overflow: hidden;
  }
  fieldset.mobile-collapsible > legend {
    width: 100%;
    padding: 12px 14px;
    background: var(--srf-1);
    border-bottom: 1px solid var(--line);
    color: var(--ink);
    font-weight: 600;
    font-size: 13px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    user-select: none;
  }
  fieldset.mobile-collapsible > legend::after {
    content: '▾';
    color: var(--signal);
    font-size: 14px;
    transition: transform .15s;
  }
  fieldset.mobile-collapsible.collapsed > legend::after { transform: rotate(-90deg); }
  fieldset.mobile-collapsible > :not(legend) { padding: 0 14px; }
  fieldset.mobile-collapsible > :first-of-type:not(legend) { padding-top: 12px; }
  fieldset.mobile-collapsible > :last-child:not(legend) { padding-bottom: 12px; }
  fieldset.mobile-collapsible.collapsed > :not(legend) { display: none; }
}

/* ── 09 · MOTION — instrument motion, never web motion ───────────────────── */
/* Scroll reveal: IntersectionObserver adds .armed to a section; children
   carrying .deck-arm fade-rise 8px once. Rule lines draw left→right. */
.deck-arm {
  opacity: 0; transform: translateY(8px);
  transition: opacity 300ms cubic-bezier(.2,0,.2,1) 120ms, transform 300ms cubic-bezier(.2,0,.2,1) 120ms;
}
.armed .deck-arm, .deck-arm.armed { opacity: 1; transform: none; }
.armed .deck-arm:nth-child(2) { transition-delay: 180ms; }
.armed .deck-arm:nth-child(3) { transition-delay: 240ms; }
.armed .deck-arm:nth-child(4) { transition-delay: 300ms; }
section.armed .zone-head .rule, .armed > .zone-head .rule { animation: ruleDraw 400ms cubic-bezier(.2,0,.2,1) both; }
@keyframes ruleDraw { from { transform: scaleX(0); } to { transform: scaleX(1); } }
/* Boot sequence (hero, one-time) — apply .deck-boot to the strip on pub pages */
.deck-boot { animation: deckStripIn 200ms cubic-bezier(.2,0,.2,1) both; }
@keyframes deckStripIn { from { transform: translateY(-100%); } to { transform: translateY(0); } }

/* ── FEATURES & COMMANDS tab (.fc-*) ──────────────────────────────────────
   Deck visual language: squared geometry, mono micro-labels, signal accents.
   Reuses .card / .plug-toggle / .zone-head / .btn primitives. */
.fc-page { display: flex; flex-direction: column; gap: 4px; }
.fc-intro { color: var(--ink-2); font-size: 12.5px; line-height: 1.5; margin: 6px 0 12px; max-width: 70ch; }
.fc-hint { color: var(--ink-3); font-size: 11.5px; line-height: 1.5; margin: 4px 0 10px; }
.fc-empty { color: var(--ink-3); font-family: var(--mono); font-size: 12px; padding: 18px; text-align: center; }

/* Feature grid — macro cards */
.fc-feature-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; margin-bottom: 4px; }
.fc-feature {
  background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r);
  padding: 12px 14px; display: flex; flex-direction: column; gap: 7px;
  transition: border-color var(--fast);
}
.fc-feature:hover { border-color: var(--line-hi); }
.fc-feature.is-partial { border-color: rgba(255,107,26,.4); }
.fc-feature-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.fc-feature-name { font: 600 13px var(--display); letter-spacing: .02em; color: var(--ink); text-transform: uppercase; }
.fc-feature-meta { display: flex; align-items: center; gap: 8px; }
.fc-count { font: 500 10.5px var(--mono); letter-spacing: .08em; color: var(--ink-3); text-transform: uppercase; }
.fc-partial-tag { font: 600 9px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--signal); border: 1px solid rgba(255,107,26,.4); border-radius: var(--r); padding: 1px 5px; }
.fc-feature-restart { font: 500 10px var(--mono); letter-spacing: .04em; color: var(--ink-3); display: flex; align-items: center; gap: 5px; }
.fc-feature-restart::before { content: '↻'; color: var(--signal); font-size: 12px; }
/* Partial state: half-lit slider thumb so it reads distinct from full on/off */
.plug-toggle.fc-toggle-partial input + .plug-slider { background-color: rgba(255,107,26,.07); border-color: rgba(255,107,26,.35); }
.plug-toggle.fc-toggle-partial input:checked + .plug-slider::before { background: var(--ink-2); box-shadow: none; transform: translateX(11px); }

/* Command list — grouped rows */
.fc-cmd-controls { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 4px 0 10px; }
.fc-search {
  flex: 1; min-width: 180px; padding: 8px 12px; border-radius: var(--r);
  border: 1px solid var(--line); background: rgba(0,0,0,.3); color: var(--ink);
  font-family: var(--mono); font-size: 12px;
}
.fc-search:focus { outline: none; border-color: var(--signal); }
.fc-restart-note { font: 500 10.5px var(--mono); letter-spacing: .04em; color: var(--ink-3); display: inline-flex; align-items: center; gap: 6px; }
.fc-cmd-list { display: flex; flex-direction: column; gap: 14px; }
.fc-cmd-group { background: var(--srf-0); border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; }
.fc-cmd-grouphd {
  font: 600 10.5px var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--signal);
  padding: 8px 14px; border-bottom: 1px solid var(--line); background: var(--srf-1);
}
.fc-cmd-row { display: flex; align-items: center; gap: 12px; padding: 9px 14px; border-bottom: 1px solid var(--line); }
.fc-cmd-row:last-child { border-bottom: none; }
.fc-cmd-row:hover { background: rgba(255,255,255,.02); }
.fc-cmd-info { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 auto; }
.fc-built-alias { display: flex; align-items: center; gap: 8px; margin-top: 5px; color: var(--ink-3); font: 500 10px/1.2 var(--mono); text-transform: uppercase; letter-spacing: .08em; }
.fc-built-alias input { width: min(360px, 100%); min-width: 0; padding: 6px 8px; border: 1px solid var(--line); border-radius: 4px; background: rgba(0,0,0,.24); color: var(--ink); font: 12px/1.2 var(--mono); text-transform: none; letter-spacing: normal; }
@media (max-width: 680px) { .fc-built-alias { align-items: stretch; flex-direction: column; gap: 4px; } .fc-built-alias input { width: 100%; } }
.fc-cmd-name { font: 600 13px var(--mono); color: var(--ink); display: flex; align-items: center; gap: 7px; }
.fc-cmd-label { font-size: 11.5px; color: var(--ink-3); }
.fc-badge { display: inline-flex; align-items: center; justify-content: center; font: 600 9px var(--mono); letter-spacing: .1em; text-transform: uppercase; border-radius: var(--r); padding: 1px 5px; line-height: 1.4; }
.fc-badge-restart { color: var(--signal); border: 1px solid rgba(255,107,26,.4); }
.fc-badge-admin { color: var(--ink-2); border: 1px solid var(--line-hi); }

/* Custom section cards */
.fc-card { padding: 16px 18px; margin-top: 12px; }
.fc-card-hd { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 2px; }
.fc-card-ft { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin-top: 8px; }
.fc-char-count { font: 500 10.5px var(--mono); letter-spacing: .06em; }
.fc-save-msg { font: 500 11px var(--mono); letter-spacing: .04em; min-height: 14px; }
.fc-textarea {
  width: 100%; padding: 10px 12px; border-radius: var(--r); border: 1px solid var(--line);
  background: rgba(0,0,0,.3); color: var(--ink); font-family: var(--mono); font-size: 12px; line-height: 1.5;
  resize: vertical; box-sizing: border-box;
}
.fc-textarea:focus { outline: none; border-color: var(--signal); }

/* Custom-command table */
.fc-custom-table { width: 100%; border-collapse: collapse; margin-top: 6px; }
.fc-custom-table th { font: 600 10px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3); text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--line); }
.fc-custom-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); font-size: 12.5px; color: var(--ink-2); vertical-align: middle; }
.fc-custom-table tr:last-child td { border-bottom: none; }
.fc-cc-trig { font-family: var(--mono); color: var(--ink); white-space: nowrap; }
.fc-cc-resp { color: var(--ink-2); }
.fc-cc-actions { text-align: right; white-space: nowrap; }
.fc-slash { color: var(--signal); font-weight: 600; }

/* Add form */
.fc-add-form { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line); }
.fc-add-trigger { display: flex; align-items: center; gap: 0; border: 1px solid var(--line); border-radius: var(--r); background: rgba(0,0,0,.3); overflow: hidden; max-width: 280px; }
.fc-add-trigger:focus-within { border-color: var(--signal); }
.fc-add-trigger .fc-slash { padding: 8px 4px 8px 12px; background: var(--srf-1); }
.fc-add-trigger input { flex: 1; padding: 8px 12px 8px 4px; border: none; background: transparent; color: var(--ink); font-family: var(--mono); font-size: 12px; }
.fc-add-trigger input:focus { outline: none; }
.fc-add-enabled { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--ink-2); }
.fc-add-err { font: 500 11.5px var(--mono); color: var(--danger); min-height: 14px; }

@media (max-width: 560px) {
  .fc-feature-grid { grid-template-columns: 1fr; }
  .fc-custom-table thead { display: none; }
  .fc-custom-table, .fc-custom-table tbody, .fc-custom-table tr, .fc-custom-table td { display: block; width: 100%; box-sizing: border-box; }
  .fc-custom-table tr { border: 1px solid var(--line); border-radius: var(--r); margin-bottom: 8px; padding: 4px 2px; }
  .fc-custom-table td { border-bottom: none; padding: 5px 10px; }
  .fc-cc-actions { text-align: left; }
}

/* Kits / packs — keep long names, translated labels, and redemption IDs inside
   one predictable table/editor geometry. */
.packs-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.packs-toolbar .muted { flex: 1 1 320px; min-width: 0; margin-left: 0 !important; }
.card.packs-table-wrap { max-width: 100%; overflow-x: auto !important; overflow-y: visible; overscroll-behavior-x: contain; }
.packs-table { width: 100%; min-width: 820px; table-layout: auto; }
.packs-table th { position: static; top: auto; z-index: auto; }
.packs-table th, .packs-table td { word-break: normal; overflow-wrap: normal; }
.packs-table th:first-child, .packs-table td:first-child { min-width: 220px; max-width: 340px; }
.packs-table td:first-child .pack-description { display: block; margin-top: 3px; white-space: normal; overflow-wrap: anywhere; line-height: 1.35; }
.packs-table tbody tr { transition: background-color 120ms ease, box-shadow 120ms ease; }
.packs-table tbody tr:hover { background: rgba(255,107,26,.045); box-shadow: inset 3px 0 0 rgba(255,107,26,.55); }
.packs-table td:last-child { min-width: 196px; }

.pack-modal-back { padding: max(18px, env(safe-area-inset-top)) max(18px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(18px, env(safe-area-inset-left)); }
.pack-modal { width: min(760px, 100%); max-height: calc(100dvh - 36px); }
.pack-modal-head { flex: none; display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px 20px; border-bottom: 1px solid var(--line); background: linear-gradient(180deg, rgba(255,107,26,.08), transparent); }
.pack-modal-body { min-width: 0; padding: 18px 20px 22px; overflow: auto; overscroll-behavior: contain; }
.pack-form, .pack-form fieldset, .pack-form label { min-width: 0; }
.pack-field-grid { display: grid; gap: 10px; align-items: stretch; }
.pack-field-grid-identity { grid-template-columns: minmax(0, 1fr) minmax(150px, .38fr); }
.pack-field-grid-thirds { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.pack-field-grid-halves { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.pack-field-grid > label { display: grid; grid-template-rows: minmax(2.8em, auto) auto; align-content: end; gap: 5px; }
.pack-field-grid input, .pack-field-grid select { min-width: 0; max-width: 100%; box-sizing: border-box; }
.pack-icon-grid { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; }
.pack-icon-grid .pk-iconp { width: 40px; min-height: 38px; padding: 3px !important; font-size: 25px !important; line-height: 1 !important; }
.pack-items-list { display: grid; gap: 7px; max-height: 280px; overflow: auto; padding: 8px; background: rgba(0,0,0,.2); border: 1px solid var(--border); border-radius: 8px; }
.pack-item-row { display: grid; grid-template-columns: 32px minmax(120px, 1fr) auto 72px 72px auto; gap: 6px; align-items: center; min-width: 0; padding: 3px; border: 1px solid transparent; border-radius: 7px; }
.pack-item-row:hover, .pack-item-row:focus-within { border-color: rgba(255,107,26,.28); background: rgba(255,107,26,.035); }
.pack-item-row input { min-width: 0; max-width: 100%; box-sizing: border-box; }
.pack-item-actions { display: inline-flex; gap: 3px; justify-content: flex-end; white-space: nowrap; }
.pack-redemption-history { max-width: 100%; max-height: 240px; margin-top: 8px; overflow: auto; overscroll-behavior: contain; background: rgba(0,0,0,.2); border: 1px solid var(--border); border-radius: 6px; padding: 8px; font-size: 12px; }
.pack-redemption-table { width: 100%; min-width: 560px; table-layout: fixed; }
.pack-redemption-table th, .pack-redemption-table td { white-space: normal; word-break: normal; overflow-wrap: anywhere; vertical-align: top; }
.pack-redemption-table th:nth-child(1) { width: 28%; }
.pack-redemption-table th:nth-child(2) { width: 42%; }
.pack-redemption-table th:nth-child(3) { width: 20%; }
.pack-redemption-table th:nth-child(4) { width: 10%; }
.pack-player-id { display: block; max-width: 100%; margin-top: 2px; white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 800px) {
  .card.packs-table-wrap { overflow-x: hidden !important; }
  .packs-table { min-width: 0 !important; }
  .packs-table th:first-child, .packs-table td:first-child,
  .packs-table td:last-child { min-width: 0; max-width: none; }
  .packs-table td:last-child { display: flex !important; flex-wrap: wrap; gap: 6px; }
}
.items-page-bar { display: flex; align-items: center; justify-content: center; gap: 4px; min-height: 34px; padding: 10px 0; overflow-x: auto; }
.items-page-bar:empty { display: none; }
.items-page-count { flex: none; margin-left: 8px; font-family: var(--mono); font-size: 10px; }
.gi-picker-tile { display: grid !important; place-items: center; width: 50px; height: 50px; flex: 0 0 50px; padding: 0 !important; line-height: 1; }
.gi-picker-tile .gi-img { grid-area: 1 / 1; object-fit: contain; }
.gi-picker-tile .gi-pick-lbl { grid-area: 1 / 1; display: grid; width: 32px; height: 32px; place-items: center; color: var(--muted); font: 600 18px/1 var(--mono); }
.card.bans-table-wrap { max-width: 100%; overflow-x: auto !important; overflow-y: visible; overscroll-behavior-x: contain; }
.bans-table { min-width: 1160px; }
.bans-table th:nth-child(1), .bans-table td:nth-child(1) { min-width: 130px; }
.bans-table th:nth-child(2), .bans-table td:nth-child(2) { min-width: 230px; }
.bans-table th:nth-child(4), .bans-table td:nth-child(4) { min-width: 190px; max-width: 280px; white-space: normal; overflow-wrap: anywhere; }
.bans-table th:last-child, .bans-table td:last-child { min-width: 190px; }
.ban-details-backdrop { position: fixed; inset: 0; z-index: 10080; display: flex; align-items: center; justify-content: center; padding: max(18px, env(safe-area-inset-top)) max(18px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(18px, env(safe-area-inset-left)); background: rgba(0,0,0,.72); }
.ban-details-dialog { width: min(880px, 100%); max-height: calc(100dvh - 36px); overflow: auto; padding: 20px; border: 1px solid var(--border); }
.ban-sessions-wrap { max-width: 100%; overflow: auto !important; padding: 0 !important; }
.ban-sessions-table { min-width: 680px; }
.ban-sessions-table th { position: static; top: auto; }
.ban-sessions-table td[colspan] { height: auto; padding: 28px 14px !important; line-height: 1.5; vertical-align: middle; }

@media (max-width: 680px) {
  .pack-modal-back { align-items: stretch; padding: 0; }
  .pack-modal { width: 100%; max-height: 100dvh; border-width: 0; }
  .pack-modal-head { padding: 13px 14px; }
  .pack-modal-body { padding: 14px; }
  .pack-field-grid-identity, .pack-field-grid-thirds, .pack-field-grid-halves { grid-template-columns: 1fr; }
  .pack-field-grid > label { grid-template-rows: auto auto; }
  .pack-item-row { grid-template-columns: 32px minmax(0, 1fr) auto; }
  .pack-item-row .pi-qty, .pack-item-row .pi-q { grid-column: span 1; }
  .pack-item-actions { grid-column: 3; }
}

/* Reduced motion — opacity fades only */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
  html { scroll-behavior: auto; }
  .deck-arm { transform: none; }
}
.profile-chat-tabs { display:flex; gap:6px; flex-wrap:wrap; }
.profile-chat-tab.active { border-color:var(--accent); color:var(--accent); background:rgba(255,107,26,.1); }
@media (max-width: 520px) {
  .profile-chat-tabs { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .profile-chat-tab { width:100%; justify-content:center; }
}
.admin-tag-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}
.admin-tag-color-control {
  display: grid;
  grid-template-columns: 46px minmax(0, 1fr);
  gap: 8px;
  align-items: stretch;
}
.admin-tag-color-control input[type="color"] {
  width: 46px;
  min-width: 46px;
  height: 42px;
  padding: 3px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: rgba(0,0,0,.3);
  cursor: pointer;
}
.admin-tag-color-control input:not([type="color"]) {
  min-width: 0;
  width: 100%;
  padding: 10px 12px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: rgba(0,0,0,.3);
  color: var(--text);
  font-family: var(--mono);
}
@media (max-width: 760px) {
  .admin-tag-grid { grid-template-columns: 1fr; }
}

/* Compact locale control shared by public product and forum surfaces. */
.product-language-control {
  position: relative;
  width: fit-content;
  max-width: 100%;
  display: grid;
  grid-template-columns: auto minmax(142px, 1fr);
  align-items: center;
  gap: 8px 12px;
  margin-top: 22px;
  padding: 9px 10px 9px 12px;
  border: 1px solid var(--line-hi);
  background: rgba(5, 9, 12, .82);
  color: var(--ink-3);
  clip-path: var(--chamfer-sm);
  font: 600 9px var(--mono);
  letter-spacing: .1em;
  text-transform: uppercase;
}
.product-language-control::before { content: '◎'; color: var(--signal); font-size: 13px; }
.product-language-control > span { grid-column: 2; }
.product-language-control select {
  grid-column: 1 / -1;
  min-height: 36px;
  width: 100%;
  padding: 6px 30px 6px 9px;
  border: 1px solid var(--line-hi);
  border-radius: 0;
  background: rgba(4, 8, 11, .96);
  color: var(--ink);
  font: 600 11px var(--mono);
  cursor: pointer;
}
.product-language-control select:hover,
.product-language-control select:focus-visible { border-color: var(--signal); outline: none; }
.product-language-control select:disabled { cursor: wait; opacity: .68; }
.product-language-control small {
  grid-column: 1 / -1;
  max-width: 300px;
  color: #ffb18a;
  font: 500 9px/1.4 var(--mono);
  letter-spacing: 0;
  text-transform: none;
}
.product-language-control small:empty { display: none; }
