:root{
  /* lower-contrast palette: dark grays, not pure black (note #0) */
  --bg:#181b1f; --panel:#20242a; --panel-2:#262b31; --panel-3:#2c323a;
  --line:#2b3138; --edge:#3a424b; --edge-2:#4a535d;
  --ink:#c4cbd2; --ink-2:#e7ebef; --dim:#79838d;
  --amber:#ffc24d; --amber-2:#bd8b3a; --amber-dim:#6f5a30;
  --cross:#ff8a5c; --sel:#ffe08a; --ok:#69c074; --err:#ef6b68;
  --mono:'IBM Plex Mono', ui-monospace, monospace;
  --radius:8px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:var(--mono);overflow:hidden;font-size:14px}
button,input,select,textarea{font-family:var(--mono)}

/* ---- Orchestra suite shell: brand + module tabs over one workspace ---- */
#orchestra{display:flex;flex-direction:column;height:100vh}
#suitebar{flex:0 0 36px;display:flex;align-items:flex-end;gap:14px;padding:0 14px;
  background:var(--bg);border-bottom:1px solid var(--edge);position:relative;z-index:2}
#suitebar>*:not(#suite-tabs){align-self:center}
.suite-brand{color:var(--amber);font-weight:600;letter-spacing:.30em;font-size:13px}
/* module tabs styled like file-folder tabs: rounded top, square bottom, and the
 * active tab folds down over the suitebar's bottom edge into the bar below it. */
#suite-tabs{display:flex;gap:3px;align-items:flex-end}
.suite-tab{background:none;border:1px solid transparent;border-bottom:none;color:var(--dim);
  font-size:12.5px;letter-spacing:.04em;padding:6px 14px;border-radius:7px 7px 0 0;cursor:pointer;
  margin-bottom:-1px}
.suite-tab:hover{color:var(--ink);background:var(--panel-2)}
.suite-tab.active{color:var(--amber);background:var(--panel-3);border-color:var(--edge);
  border-bottom:1px solid var(--panel-3)}
.ws-status{color:var(--dim);font-size:11.5px;letter-spacing:.02em}
.ws-status.warn{color:var(--err)}
#panes{flex:1 1 auto;position:relative;min-height:0}
.pane{position:absolute;inset:0}
.pane[hidden]{display:none}

/* #o0 — Feature Freeze: a bright ice banner across the top of every tab, and a
 * view-only lockdown of the module panes. The server refuses writes regardless;
 * this makes the UI honest. The suite bar + banner stay live so you can still
 * switch tabs to read, sign out, and (owner) end the freeze from the banner. */
#freeze-banner[hidden]{display:none}   /* an #id display rule outranks the [hidden] UA rule — restore it (#o1) */
#freeze-banner{flex:0 0 auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:7px 16px;background:linear-gradient(90deg,#28e0f0,#5cc8ff);color:#04222b;
  font-size:13px;font-weight:600;border-bottom:1px solid #0a3a44;box-shadow:0 1px 0 rgba(0,0,0,.25)}
#freeze-banner .fz-tag{letter-spacing:.08em;text-transform:uppercase;font-weight:800;white-space:nowrap}
#freeze-banner .fz-msg{font-weight:600;min-width:0}
#freeze-banner .fz-until{margin-left:auto;background:rgba(4,34,43,.18);border-radius:5px;
  padding:2px 8px;font-weight:700;white-space:nowrap}
#freeze-banner .fz-end{background:#04222b;color:#d8fbff;border:1px solid #04222b;border-radius:6px;
  padding:3px 12px;font-weight:700;cursor:pointer}
#freeze-banner .fz-end:hover:not(:disabled){background:#0a3a44}
#freeze-banner .fz-end:disabled{opacity:.6;cursor:default}
/* the actual lockdown: module panes become non-interactive (no clicks/typing/drawing) */
body.frozen #panes{pointer-events:none}
/* …except Director's own Feature-freeze page, so the owner can still lift it from there */
body.frozen #panes .dir-freeze{pointer-events:auto}
.dir-freeze-state{border:1px solid var(--line);border-radius:8px;padding:10px 12px;font-size:13px}
.dir-freeze-state.on{border-color:#0a3a44;background:#06222b;color:#bfeff7}
.dir-freeze-state.off{color:var(--dim)}

#app{
  position:absolute;inset:0;        /* fill the pane with a DEFINITE height so the 1fr stage row resolves */
  display:grid;
  grid-template-columns:1fr 344px;
  grid-template-rows:38px 52px 1fr;
  grid-template-areas:"menubar menubar" "toolbar toolbar" "stage side";
}
/* no area open (area index showing / closed): drop the inspector so the master
   area list gets the full window width (#1-1-2) */
#app.no-area{grid-template-columns:1fr 0}
#app.no-area #side{display:none}
#app.no-area #toolbar{display:none}
#app.no-area{grid-template-rows:38px 0 1fr}
/* nothing is "open" on the Areas page — hide the go-to-room box + area title
   (the go-to box mis-fired from here, opening a half-state) */
#app.no-area #gotoRoom,#app.no-area #areaTitle{display:none}

/* ---- Construct / Forge stub panes: a manifest list + raw-doc viewer ---- */
.viewer{display:grid;grid-template-columns:240px 1fr;grid-template-rows:auto 1fr;height:100%;
  grid-template-areas:"head head" "list body"}
.viewer-head{grid-area:head;display:flex;align-items:center;gap:10px;padding:10px 16px;
  background:var(--panel);border-bottom:1px solid var(--edge)}
.viewer-head h2{margin:0;font-size:14px;color:var(--ink-2);font-weight:600}
.viewer-head .tag{font-size:11px;color:var(--dim);border:1px solid var(--edge);
  border-radius:5px;padding:2px 7px;letter-spacing:.03em}
.viewer-list{grid-area:list;overflow:auto;border-right:1px solid var(--line);background:var(--panel)}
.viewer-list .vrow{display:block;width:100%;text-align:left;background:none;border:0;
  color:var(--ink);font-size:13px;padding:9px 16px;cursor:pointer;border-bottom:1px solid var(--line)}
.viewer-list .vrow:hover{background:var(--panel-2)}
.viewer-list .vrow.sel{background:var(--panel-3);color:var(--amber)}
.viewer-body{grid-area:body;overflow:auto;padding:16px 20px}
.viewer-body pre{margin:0;font-size:12.5px;line-height:1.55;color:var(--ink);white-space:pre-wrap;word-break:break-word}
.viewer-empty{color:var(--dim);font-size:13px;line-height:1.7;max-width:520px}
.viewer-empty b{color:var(--ink-2);font-weight:600}

/* ---- menubar (shared look across all modules: Roomsmith/Construct/Forge/Stacks) ---- */
#menubar{grid-area:menubar;display:flex;align-items:center;gap:6px;padding:0 14px;
  background:var(--panel);border-bottom:1px solid var(--edge)}
.brand{color:var(--amber);font-weight:600;letter-spacing:.24em;font-size:13px;margin-right:12px}
#menus{display:flex;gap:2px;align-items:center}
.menu-btn{background:none;border:1px solid transparent;color:var(--ink);font-size:13px;padding:6px 11px;
  border-radius:6px;cursor:pointer}
.menu-btn:hover,.menu-btn.open{background:var(--panel-3);color:var(--amber)}
/* overworld "now building on continent" selector — a distinct cyan accent so the
   special multi-continent mode is unmistakable (#96) */
.ow-continent{display:inline-flex;align-items:center;gap:7px;margin-left:10px;background:rgba(95,208,255,.12);
  border:1px solid #5fd0ff;color:#9fe2ff;font-size:12.5px;padding:5px 11px;border-radius:7px;cursor:pointer;white-space:nowrap}
.ow-continent:hover{background:rgba(95,208,255,.2);color:#cdeeff}
.ow-continent .ow-dot{width:8px;height:8px;border-radius:50%;background:#5fd0ff;box-shadow:0 0 6px #5fd0ff}
.ow-continent .ow-caret{color:#5fd0ff;font-size:10px}
.grow{flex:1}
.areaTitle{color:var(--dim);font-size:12px;letter-spacing:.02em}
.goto-room{width:96px;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);
  font-size:12px;padding:4px 8px;border-radius:6px}
.goto-room:focus{outline:none;border-color:var(--amber);color:var(--ink-2)}
.goto-room::placeholder{color:var(--dim)}
/* yellow "save & jump back to previous room" dot (menubar + room editor) */
.goto-back{width:11px;height:11px;border-radius:50%;border:none;background:var(--amber);cursor:pointer;
  margin:0 10px 0 7px;padding:0;flex:0 0 auto;opacity:.85}
.goto-back:hover{opacity:1;box-shadow:0 0 0 3px rgba(255,194,77,.25)}

/* ---- toolbar (horizontal) + options popout ---- */
#toolbar{grid-area:toolbar;position:relative;background:var(--panel);border-bottom:1px solid var(--edge);
  display:flex;align-items:center;padding:0 12px;gap:8px;overflow-x:auto;overflow-y:hidden}
#toolRow{display:flex;gap:8px;align-items:center;flex:0 0 auto}
.tool{width:42px;height:38px;border:1px solid var(--edge);background:var(--panel-2);color:var(--ink);
  border-radius:var(--radius);cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;
  position:relative}
.tool:hover{border-color:var(--edge-2);color:var(--amber)}
.tool.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.tool small{position:absolute;right:3px;bottom:1px;font-size:8px;color:var(--dim)}
.tool svg{width:19px;height:19px;display:block}
/* tool options now live INLINE in the toolbar, right of a divider (note #12) */
.tool-divider{flex:0 0 auto;width:1px;height:30px;background:var(--edge);margin:0 4px}
#toolOptions{display:flex;align-items:center;gap:9px;flex-wrap:nowrap;flex:1 1 auto;min-width:0}
#toolOptions .opt-label{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.1em}
#toolOptions .btn{padding:6px 9px;font-size:12px}

/* ---- buttons / chips ---- */
.btn{border:1px solid var(--edge);background:var(--panel-2);color:var(--ink);font-size:13px;
  padding:8px 12px;border-radius:var(--radius);cursor:pointer}
.btn:hover{border-color:var(--edge-2);color:var(--amber)}
.btn:disabled{opacity:.4;cursor:default}
.btn-save:disabled{cursor:not-allowed}   /* a Save with nothing to save: dim, and says so on hover (#save-lit) */
.btn.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.swatch{width:20px;height:20px;border-radius:5px;border:1px solid #0008;display:inline-block;vertical-align:middle}

/* #r1 — colour-swatch dropdown (native <select> replacement in the room editor) */
.swatch-select{position:relative;width:100%}
.swatch-select-trigger{width:100%;display:flex;align-items:center;gap:8px;background:var(--panel-2);
  border:1px solid var(--edge);color:var(--ink-2);border-radius:7px;padding:8px 10px;font-size:13px;cursor:pointer;text-align:left}
.swatch-select-trigger:hover{border-color:var(--amber-dim,#8a6a2c)}
.swatch-select.open .swatch-select-trigger{border-color:var(--amber)}
.swatch-select-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.swatch-select-caret{color:var(--dim);font-size:10px}
.swatch-dot{width:16px;height:16px;border-radius:4px;border:1px solid #0008;flex:0 0 auto;display:inline-block;vertical-align:middle}
/* a colour word with its swatch, inline (context menus, previews, inspector) */
.color-label{display:inline-flex;align-items:center;gap:6px;vertical-align:middle}
.color-label .swatch-dot{width:13px;height:13px;border-radius:3px}
/* the "inherit / type default" swatch reads as no-override: a faint diagonal */
.swatch-dot.inherit{background:
  repeating-linear-gradient(45deg,var(--panel-3) 0 3px,transparent 3px 6px);border-style:dashed;border-color:var(--edge)}
.swatch-select-panel{position:absolute;left:0;right:0;top:100%;z-index:40;margin-top:3px;background:var(--panel);
  border:1px solid var(--edge);border-radius:7px;box-shadow:0 10px 28px rgba(0,0,0,.5);max-height:260px;overflow:auto;padding:4px}
.swatch-select-opt{width:100%;display:flex;align-items:center;gap:9px;background:none;border:1px solid transparent;
  color:var(--ink-2);border-radius:5px;padding:6px 8px;font-size:12.5px;cursor:pointer;text-align:left}
.swatch-select-opt:hover{background:var(--panel-2)}
.swatch-select-opt.on{background:var(--panel-3);border-color:var(--amber-dim,#8a6a2c);color:var(--amber)}
.chiprow{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid var(--edge);border-radius:7px;padding:5px 9px;cursor:pointer;font-size:12px;
  display:flex;align-items:center;gap:7px;background:var(--panel-2);color:var(--ink)}
.chip:hover{border-color:var(--edge-2)}
.chip.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.chip .glyph{font-weight:600;font-size:14px}

/* ---- stage ---- */
#stage{grid-area:stage;position:relative;min-width:0;min-height:0;overflow:hidden;background:radial-gradient(130% 130% at 50% 0%,#232a30 0%,#13161a 72%)}
canvas{display:block;width:100%;height:100%;cursor:crosshair}
canvas.pan{cursor:grab} canvas.panning{cursor:grabbing}
.hud{position:absolute;pointer-events:none;font-size:12px;letter-spacing:.03em}
#stats{bottom:14px;left:16px;color:var(--dim);line-height:1.6;white-space:pre}
#paintHud{top:14px;left:16px;color:var(--amber-2);line-height:1.7;white-space:pre}
#convertBadge{top:14px;right:16px;color:#1a1206;background:var(--amber);border-radius:7px;padding:5px 11px;
  font-size:11px;letter-spacing:.06em;pointer-events:auto;cursor:help}

#zbar{position:absolute;top:50%;right:16px;transform:translateY(-50%);display:flex;flex-direction:column;
  align-items:center;gap:9px}
#zbar button{width:38px;height:34px;border:1px solid var(--edge);background:var(--panel);color:var(--amber);
  font-size:16px;cursor:pointer;border-radius:7px}
#zbar button:hover{border-color:var(--edge-2)}
#zbar button:disabled{opacity:.35;cursor:default}
#zlevel{font-size:14px;color:var(--ink);min-width:46px;text-align:center}
#zlevel b{color:var(--amber)} #zlevel span{display:block;font-size:9px;color:var(--dim);letter-spacing:.18em}

#zoombar{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:7px}
#zoombar button{width:34px;height:32px;border:1px solid var(--edge);background:var(--panel);color:var(--amber);
  border-radius:7px;cursor:pointer;font-size:15px}
#zoombar button:hover{border-color:var(--edge-2)}
/* live zoom-level readout (#77) */
#zoomLevel{min-width:48px;height:32px;display:flex;align-items:center;justify-content:center;padding:0 8px;
  border:1px solid var(--edge);background:var(--panel);color:var(--amber);border-radius:7px;
  font-family:var(--mono);font-size:12.5px;font-variant-numeric:tabular-nums;user-select:none}

/* ---- side panel ---- */
#side{grid-area:side;background:var(--panel);border-left:1px solid var(--edge);padding:16px 16px;overflow:hidden;display:flex;flex-direction:column}
/* tabbed side panel: Inspector / Room list (#78). Tabs stay pinned; only the content
   below them scrolls, so you can switch tabs without scrolling back up. */
.side-tabs{display:flex;gap:4px;margin:-4px 0 0;border-bottom:1px solid var(--edge);flex:0 0 auto}
#sideScroll{flex:1 1 auto;min-height:0;overflow:auto;padding-top:14px}
.side-tab{appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--dim);
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;padding:6px 8px;cursor:pointer;margin-bottom:-1px}
.side-tab:hover{color:var(--ink-2)}
.side-tab.active{color:var(--amber);border-bottom-color:var(--amber)}
/* room list */
/* stick flush to the scroll top: #sideScroll has 14px top padding, so pull the
   header up by that much or scrolled rows bleed above it (#85). */
.rl-head{display:grid;grid-template-columns:54px 34px 1fr;gap:6px;padding:5px 6px;position:sticky;top:-14px;background:var(--panel);
  border-bottom:1px solid var(--edge);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-2);z-index:1}
.rl-h{cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rl-h:hover{color:var(--amber)}
.rl-h.type{text-align:center}
.rl-body{display:flex;flex-direction:column}
.rl-row{display:grid;grid-template-columns:54px 34px 1fr;gap:6px;align-items:center;padding:5px 6px;border-bottom:1px solid var(--line);
  cursor:pointer;font-size:12.5px}
.rl-row:hover{background:var(--panel-2)}
.rl-row.sel{background:#2a2410}
.rl-num{color:var(--dim);font-size:11.5px}
.rl-type{text-align:center;font-family:var(--mono)}
.rl-name{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rl-count{margin-top:8px;font-size:11px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.rl-page{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink-2);border-radius:6px;cursor:pointer;padding:3px 11px;font-size:12px;line-height:1}
.rl-page:hover:not(:disabled){border-color:var(--amber);color:var(--amber)}
.rl-page:disabled{opacity:.35;cursor:default}
/* room-list search bar + builder (search.js) */
.rl-searchbar{display:flex;gap:5px;margin:0 0 6px;align-items:center}
.rl-search{flex:1 1 auto;min-width:0;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink-2);border-radius:6px;padding:6px 9px;font-size:12px}
.rl-search:focus{outline:none;border-color:var(--amber-dim)}
.rl-tool{flex:0 0 auto;background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);border-radius:6px;cursor:pointer;padding:5px 8px;font-size:12px;line-height:1}
.rl-tool:hover{color:var(--amber);border-color:var(--edge-2)}
.rl-tool.on{color:var(--amber);border-color:var(--amber);background:#2a2410}
.rl-hint{color:var(--err);font-size:11px;margin:0 0 6px;display:none}
.rl-builder{border:1px solid var(--line);border-radius:8px;padding:10px;margin:0 0 8px;background:var(--panel-2)}
.rl-bsect{margin:0 0 9px}
.rl-bsect:last-child{margin-bottom:0}
.rl-blabel{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-2);margin:0 0 5px}
.rl-chips{display:flex;flex-wrap:wrap;gap:4px}
.rl-chips .chip{padding:3px 7px;font-size:11px}
.rl-builder input{background:var(--panel);border:1px solid var(--edge);color:var(--ink-2);border-radius:6px;padding:5px 8px;font-size:12px;box-sizing:border-box}
.rl-builder input:focus{outline:none;border-color:var(--amber-dim)}
.rl-builder .row-inline{display:flex;gap:8px;align-items:center}
#side h2{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);margin:0 0 12px;
  display:flex;align-items:baseline;justify-content:space-between;gap:8px}
#side h2 .rid{color:var(--ink-2);font-size:13px;font-weight:600;letter-spacing:.02em}
#inspectHead{margin:-12px 0 0}                 /* compact inspector header (#0) */
.muted{color:var(--dim);font-size:12px;line-height:1.55}
.empty{color:var(--dim);font-size:12px;font-style:italic}
#inspect .nm{color:var(--ink-2);margin:0 0 5px;font-size:13.5px}
.kv{font-size:12.5px;line-height:1.7}
.kv .lbl{color:var(--dim);font-weight:500;text-transform:uppercase;letter-spacing:.1em;font-size:10px;display:block;margin-top:10px}
.tag{display:inline-block;border:1px solid var(--edge);border-radius:5px;padding:2px 7px;margin:3px 5px 0 0;
  font-size:11px;cursor:pointer;user-select:none}
.tag.on{color:var(--amber);border-color:var(--amber-dim)}
.tag.off{color:var(--dim)}
.tag:hover{border-color:var(--edge-2)}
.exit-chip{display:inline-block;border:1px solid var(--edge);border-radius:5px;padding:2px 7px;margin:3px 5px 0 0;
  font-size:12px;color:var(--ink);cursor:pointer}
.exit-chip:hover{border-color:var(--amber-dim);color:var(--amber)}
.exit-chip.cross{color:var(--cross);border-color:#6a3a2a}
#trayWrap{margin-top:18px;border-top:1px solid var(--line);padding-top:14px}
/* door dialog: the KEY's Forge "consumed on use" flag, surfaced as a red pill (#consume-key) */
.re-keypill{display:inline-block;font-size:11px;font-weight:600;border-radius:5px;padding:2px 8px;border:1px solid}
.re-keypill.consumed{color:#ff6b6b;border-color:#ff6b6b;background:rgba(255,107,107,.12)}
.re-keypill.warn{color:var(--amber);border-color:var(--amber-dim);background:#2a2410}
#tray .pill{display:inline-block;border:1px solid var(--amber-dim);color:var(--amber);border-radius:5px;
  padding:2px 7px;margin:3px;cursor:pointer;font-size:11px}

/* ---- exits visualizer: fixed 6-panel mini-map (note #1) ---- */
.exgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;width:204px;margin:8px auto 12px;user-select:none}
.expanel{position:relative;height:34px;border:1px solid var(--line);border-radius:6px;display:flex;
  align-items:center;justify-content:center;background:var(--panel-2);overflow:hidden}
.expanel.empty{opacity:.26}
.expanel.center{border-color:var(--amber-dim);background:#241f10}
.expanel.nav{cursor:pointer}
.expanel.nav:hover{border-color:var(--amber);background:#2a2410}
.exlabel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:21px;
  color:var(--ink);opacity:.11;pointer-events:none;font-weight:600}
.exnum{position:relative;z-index:1;font-size:12px;color:var(--ink-2)}
.expanel.center .exnum{color:var(--amber);font-weight:600}
.expanel.cross .exnum{color:var(--cross)}
.exmark{position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:1px;background:var(--edge-2);z-index:2}

/* ---- modal ---- */
.modal-back{position:fixed;inset:0;background:rgba(8,10,12,.6);display:flex;align-items:center;justify-content:center;z-index:50}
.modal{background:var(--panel);border:1px solid var(--edge);border-radius:12px;max-width:860px;width:92vw;
  max-height:90vh;overflow:auto;padding:20px 22px;box-shadow:0 20px 60px rgba(0,0,0,.55)}
.modal.wide{max-width:1120px;width:94vw}
table.area-index{width:100%;border-collapse:collapse;font-size:12.5px}
table.area-index th{position:sticky;top:0;background:var(--panel-2);color:var(--amber-2);text-align:left;
  padding:7px 10px;border-bottom:1px solid var(--edge);cursor:pointer;user-select:none;white-space:nowrap}
table.area-index th:hover{color:var(--amber)}
table.area-index td{padding:6px 10px;border-bottom:1px solid var(--line);color:var(--ink)}
table.area-index tbody tr:hover{background:var(--panel-2)}
table.area-index tr.overlap td{background:rgba(239,107,104,.12)}
table.area-index td button{padding:3px 9px;margin-right:5px}
.modal h1{font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin:0 0 16px}
.modal h3{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-2);margin:18px 0 9px;
  border-top:1px solid var(--line);padding-top:13px}
.modal label{display:block;font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin:11px 0 5px}
.modal input[type=text],.modal input[type=number],.modal textarea,.modal select{
  width:100%;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink-2);border-radius:7px;
  padding:9px 10px;font-size:13px}
.modal textarea{min-height:100px;resize:vertical;line-height:1.5}
.modal .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.modal .grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.modal .check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);text-transform:none;letter-spacing:0;margin:7px 0}
/* a checkbox that is on show but may not be changed (Area Info ▸ Inside): dimmed box, a red ✕ over it, not-allowed cursor; the label's title + a toast say why */
.modal .check.check-locked{cursor:not-allowed;color:var(--dim)}
.check-lock{position:relative;display:inline-flex;align-items:center}
.check-lock input{opacity:.45;pointer-events:none;margin:0}
.check-lock-x{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--err);font-weight:700;font-size:13px;line-height:1;pointer-events:none}
.modal .check input{width:auto}
.modal .actions{display:flex;justify-content:flex-end;gap:9px;margin-top:20px;position:sticky;bottom:-20px;
  background:var(--panel);padding:14px 0 2px}
.modal .row-inline{display:flex;gap:9px;align-items:end}
.modal .pick-group{color:var(--amber-2);font-size:11px;letter-spacing:.10em;text-transform:uppercase;
  margin:12px 0 5px;padding-bottom:3px;border-bottom:1px solid var(--line)}
.modal .pick-group:first-child{margin-top:2px}
.modal .listline{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--line);
  border-radius:7px;padding:7px 10px;margin:6px 0;font-size:13px;gap:8px}
.modal .listline button{padding:4px 9px}
/* exit rows: fixed-width left columns so every direction lines up (#1) */
.modal .exit-row{display:flex;align-items:center;gap:6px;border:1px solid var(--line);
  border-radius:6px;padding:3px 8px;margin:3px 0;font-size:12px}
.modal .exit-row .exit-dir{flex:0 0 34px;color:var(--amber);font-weight:600;font-size:11px}
.modal .exit-row .exit-target{flex:0 0 78px;width:78px}
.modal .exit-row .exit-dirctl{flex:0 0 auto;min-width:120px;display:flex;gap:3px;align-items:center}
.modal .exit-row .exit-dirctl .btn{flex:0 0 auto}
.modal .exit-row .exit-cross{color:var(--cross);font-size:11px;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}
.modal .exit-row .exit-cross.unknown{color:var(--dim)}
.modal .exit-row .exit-dirctl .btn.staged{border-color:var(--ok);color:var(--ok)}
.modal .exit-row .exit-spacer{flex:1 1 auto}
.modal .exit-row button{padding:2px 7px;font-size:11px}
.kbd{display:grid;grid-template-columns:140px 1fr;gap:5px 16px;font-size:13px}
.kbd b{color:var(--amber)}
.help-legend dl{display:grid;grid-template-columns:28px 1fr;gap:6px 12px;font-size:13px;margin:0}
.help-legend dt{color:var(--amber);text-align:center} .help-legend dd{margin:0}

/* ---- dropdown menu / context menu ---- */
.ctx{position:fixed;z-index:60;background:var(--panel);border:1px solid var(--edge);border-radius:9px;
  padding:6px;min-width:208px;box-shadow:0 14px 40px rgba(0,0,0,.55)}
.ctx button{display:flex;justify-content:space-between;align-items:center;gap:14px;width:100%;text-align:left;
  background:none;border:none;color:var(--ink);font-size:13px;padding:8px 10px;border-radius:6px;cursor:pointer}
.ctx button:hover:not(:disabled){background:var(--panel-3);color:var(--amber)}
.ctx button:disabled{color:var(--dim);cursor:default}
.ctx button .acc{color:var(--dim);font-size:11px}
.ctx .div{height:1px;background:var(--line);margin:5px 3px}
.ctx .lab{color:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:.1em;padding:6px 10px 4px}

/* ---- toasts ---- */
#toastRoot{position:fixed;bottom:14px;left:14px;z-index:70;display:flex;
  flex-direction:column;gap:7px;align-items:flex-start}
.toast{display:flex;align-items:flex-start;gap:8px;background:var(--panel);border:1px solid var(--edge);border-left:3px solid var(--amber);
  border-radius:7px;padding:7px 11px;font-size:10px;color:var(--ink-2);max-width:380px;white-space:pre-wrap;
  box-shadow:0 8px 22px rgba(0,0,0,.5)}
.toast .toast-msg{min-width:0}
.toast.ok{border-left-color:var(--ok)} .toast.err{border-left-color:var(--err)}
.toast-x{flex:0 0 auto;background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px;line-height:1;padding:0 0 0 4px}
.toast-x:hover{color:var(--err)}
.menu-slider{width:96px;accent-color:var(--amber);cursor:pointer;vertical-align:middle}
.menu-slider-val{color:var(--dim);font-size:11px;min-width:30px;text-align:right}
/* tiny on/off status pill for a toggle menu item (e.g. "Show mobs on maps?") */
.menu-status{font-size:10px;line-height:1.5;padding:0 7px;border-radius:9px;white-space:nowrap;
  background:var(--panel-3);color:var(--dim);border:1px solid var(--edge)}
.menu-status.on{color:var(--amber);border-color:var(--amber-dim,#8a6a2c);background:color-mix(in srgb,var(--amber) 12%,transparent)}
/* room-name autocomplete (#82) */
.ac-drop{position:absolute;left:0;right:0;top:100%;z-index:30;margin-top:2px;background:var(--panel);
  border:1px solid var(--edge);border-radius:7px;box-shadow:0 10px 28px rgba(0,0,0,.5);max-height:240px;overflow:auto}
.ac-head{display:flex;align-items:center;gap:7px;padding:6px 9px;border-bottom:1px solid var(--line);
  color:var(--dim);font-size:11px;cursor:pointer}
.ac-row{display:flex;justify-content:space-between;gap:10px;padding:6px 9px;cursor:pointer;font-size:12.5px}
.ac-row.on{background:var(--panel-2)}
.ac-name{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ac-id{color:var(--dim);font-family:var(--mono);font-size:11px}
.ac-group{padding:4px 9px;font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--amber-2,#c9a24a);
  background:var(--panel-2);border-bottom:1px solid var(--line);position:sticky;top:0}

/* room editor R0/R1: flag chip groups + mob/item loadout lists */
.re-flaggroups{display:flex;flex-direction:column;gap:9px}
.re-flaggroup>label{display:block;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);margin-bottom:4px}
.re-loadlist{display:flex;flex-direction:column;gap:5px}
.re-loadrow{display:grid;grid-template-columns:minmax(0,1fr) 64px 30px;gap:8px;align-items:center}
.re-loadrow-item{grid-template-columns:minmax(0,1fr) 64px 78px 30px}
.re-loadhead{font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
.re-load-empty{color:var(--dim);font-size:12px;padding:3px 1px}
.re-load-name{color:var(--ink-2);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.re-load-name.missing{color:var(--cross,#e08a3c)}
.re-load-cell{display:flex;align-items:center;gap:3px;min-width:0}
.re-pct{color:var(--dim);font-size:11px}
.re-qty{width:100%;min-width:0}
.re-search{margin-top:6px}
.re-other{margin-top:6px;background:none;border:1px dashed var(--edge);color:var(--dim);
  border-radius:7px;padding:6px 11px;font-size:12px;cursor:pointer}
.re-other:hover{border-color:var(--amber);color:var(--amber)}
/* compact type box: preview + color override on top, all 38 chips below (no scroll) */
.re-typebox{border:1px solid var(--line);border-radius:8px;padding:10px}
.re-typetop{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.re-typepreview{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.re-typeglyph{font-size:26px;font-weight:600;letter-spacing:4px}
.re-typetop>div:last-child{flex:0 0 160px}
.re-typetop>div:last-child select{width:100%}
.re-typegrid{display:grid;grid-template-columns:repeat(8,1fr);gap:3px}
.re-typegrid .chip{padding:3px 2px;font-size:9.5px;gap:3px;justify-content:center}
.re-typegrid .chip .glyph{font-size:11px}
/* room editor header: hint left, "go to room" box right */
.re-edit-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin:0 0 6px}
.re-goto{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.re-goto-lbl{font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--dim)}
.re-goto-input{width:74px;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);
  font-size:12px;padding:4px 8px;border-radius:6px}
.re-goto-input:focus{outline:none;border-color:var(--amber)}
.re-goto .goto-back{margin:0 0 0 2px}
/* "ⓘ" info circle next to a section title; longer help lives in its tooltip */
.re-info{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;
  border:1px solid var(--edge-2,var(--edge));color:var(--dim);font-size:10px;font-style:italic;font-weight:600;
  cursor:help;vertical-align:middle;line-height:1}
.re-info:hover{border-color:var(--amber);color:var(--amber)}
.linklike{color:var(--amber);cursor:pointer;text-decoration:underline}
.toast-action{color:var(--amber);cursor:pointer;text-decoration:underline;font-weight:500;white-space:nowrap}
/* #r0 — inspector "Monument here" cross-link row */
.insp-monument{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:2px 0 8px;padding:5px 8px;border:1px solid var(--edge);border-radius:7px;background:var(--panel-2);font-size:12px}
.insp-mon-ico{font-weight:700;font-family:ui-monospace,Menlo,Consolas,monospace}
.insp-mon-lead{color:var(--dim)}
.insp-mon-kw{color:var(--ink-2);cursor:pointer;text-decoration:underline;text-decoration-color:var(--edge-2)}
.insp-mon-kw:hover{color:var(--amber)}
.insp-mon-name{color:var(--ink-2)}
.insp-mon-btn{margin-left:auto;font-size:10.5px;padding:2px 7px;border:1px solid var(--edge);border-radius:5px;background:var(--panel);color:var(--dim);cursor:pointer}
.insp-mon-btn+.insp-mon-btn{margin-left:4px}
.insp-mon-btn:hover{color:var(--ink-2);border-color:var(--amber-2)}
/* #r0 — the "List every monument" dialog table */
.mon-list{width:100%;border-collapse:collapse;font-size:12.5px}
.mon-list th{text-align:left;color:var(--dim);font-weight:500;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;padding:2px 10px 5px 0}
.mon-list td{padding:4px 10px 4px 0;border-top:1px solid var(--line);vertical-align:top}
/* #r0 — Concert "View in Roomsmith" link + the flash when a monument is deep-linked */
.cc-viewrs{font-size:11px;padding:2px 8px;vertical-align:middle}
.cc-tiercard.cc-flash{animation:cc-flash 1.6s ease-out}
@keyframes cc-flash{0%,40%{box-shadow:0 0 0 2px var(--amber) inset;border-color:var(--amber)}100%{box-shadow:none}}

/* ===========================================================================
 * CONSTRUCT — mob / class / race editor (.cx-*). Inherits the dark palette and
 * monospace accents above; three-pane layout (list · canvas · diagnostics).
 * ========================================================================= */
.cx-app{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--bg)}

/* menubar */
.cx-menubar{flex:0 0 38px;display:flex;align-items:center;gap:6px;padding:0 14px;
  background:var(--panel);border-bottom:1px solid var(--edge)}
.cx-brand{color:var(--amber);font-weight:600;letter-spacing:.24em;font-size:13px;margin-right:12px}
.cx-views{display:flex;align-items:center;gap:3px;margin-left:14px}
.cx-view-tab{background:none;border:1px solid transparent;color:var(--dim);font-size:12px;padding:5px 11px;border-radius:6px;cursor:pointer}
.cx-view-tab:hover:not(:disabled){color:var(--ink);background:var(--panel-2)}
.cx-view-tab.active{color:var(--amber);background:var(--panel-3);border-color:var(--amber-dim)}
.cx-view-tab:disabled{opacity:.4;cursor:default}
.cx-view-div{width:1px;height:18px;background:var(--edge);margin:0 7px}
.cx-menus{display:flex;gap:2px}
.cx-menu-btn{background:none;border:1px solid transparent;color:var(--ink);font-size:13px;padding:6px 11px;
  border-radius:6px;cursor:pointer}
.cx-menu-btn:hover{background:var(--panel-3);color:var(--amber)}
.cx-context{color:var(--dim);font-size:11.5px;letter-spacing:.02em}

/* body grid — diagnostics is wide enough for the two side-by-side radars (#8) */
/* position:relative scopes .area-home's inset:0 to the body, not the whole
 * .pane — so the Areas/Classes/Races/etc. list overlays never cover the
 * menubar (mode tabs + File/Edit/View/Meta stay clickable while one is up). */
.cx-body{position:relative;flex:1 1 auto;min-height:0;display:grid;grid-template-columns:280px 1fr 380px;grid-template-rows:1fr}
.cx-app.cx-hide-list .cx-body{grid-template-columns:0 1fr 380px}
.cx-app.cx-hide-diag .cx-body{grid-template-columns:280px 1fr 0}
.cx-app.cx-hide-list .cx-list,.cx-app.cx-hide-diag .cx-diag{display:none}

/* ---- list pane ---- */
.cx-list{background:var(--panel);border-right:1px solid var(--edge);overflow:auto;display:flex;flex-direction:column;min-width:0}
.cx-list-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;row-gap:8px;padding:12px 14px 8px}
.cx-list-head h2{margin:0;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--amber)}
.cx-new{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:7px;
  padding:5px 10px;font-size:12px;cursor:pointer}
.cx-new:hover{border-color:var(--amber);color:var(--amber)}
.cx-list-controls{display:flex;gap:6px;padding:0 14px 8px}
.cx-list-search{flex:1 1 auto}
.cx-sort{flex:0 0 96px}
.cx-list-filters{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;padding:0 14px 8px;border-bottom:1px solid var(--line)}
.cx-filter-lead{font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.04em;cursor:help}
/* a stray/long archetype tag must read as a tag, not a giant button */
.cx-tag-chip{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cx-mini-check{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--dim);cursor:pointer}
.cx-mini-check input{width:auto;accent-color:var(--amber-2)}
.cx-cards{flex:1 1 auto;overflow:auto;padding:8px}
.cx-list-foot{display:flex;align-items:center;justify-content:space-between;padding:9px 14px;
  border-top:1px solid var(--line);background:var(--panel)}
.cx-list-count{color:var(--dim);font-size:11px}
.cx-list-empty{color:var(--dim);font-size:12px;font-style:italic;padding:18px 10px;line-height:1.6}

/* cards */
.cx-card{position:relative;display:flex;align-items:flex-start;gap:8px;border:1px solid var(--line);
  border-radius:9px;background:var(--panel-2);padding:9px 10px;margin-bottom:7px;cursor:pointer}
.cx-card:hover{border-color:var(--edge-2)}
.cx-card.active{border-color:var(--amber);background:#2a2410}
.cx-card.legacy{border-style:dashed;opacity:.82}
.cx-card.legacy:hover{opacity:1}
.cx-card-main{display:flex;gap:9px;flex:1 1 auto;min-width:0}
.cx-card-icon{font-size:17px;line-height:1.2;flex:0 0 auto}
.cx-card-text{min-width:0;flex:1 1 auto}
.cx-card-title{color:var(--ink-2);font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-card-sub{color:var(--dim);font-size:11px;margin-top:1px;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.cx-diffmeter{height:4px;border-radius:3px;background:var(--panel-3);margin-top:6px;overflow:hidden}
.cx-diffbar{display:block;height:100%;border-radius:3px}
.cx-badges{display:flex;gap:3px;margin-top:5px}
.cx-badge{font-size:11px}
.cx-card-edit{flex:0 0 auto;background:none;border:1px solid var(--edge);color:var(--dim);border-radius:6px;
  font-size:11px;padding:3px 8px;cursor:pointer}
.cx-card-edit:hover{border-color:var(--amber);color:var(--amber)}
.cx-legacy-tag{position:absolute;top:6px;right:54px;font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--amber-2);border:1px solid var(--amber-dim);border-radius:4px;padding:0 4px}
.cx-mono{font-family:var(--mono);color:var(--dim)}
.cx-pill{font-size:9.5px;letter-spacing:.06em;border-radius:4px;padding:1px 5px;border:1px solid var(--edge)}
.cx-pill.pc{color:var(--ok);border-color:#3a6b40}
.cx-pill.npc{color:var(--dim)}
.cx-pill.tier0{color:var(--dim)}
.cx-pill.tier1{color:#c9c24a;border-color:#6f6a2e}
.cx-pill.tier2{color:var(--cross);border-color:#6a3a2a}

/* ---- canvas ---- */
.cx-canvas{display:flex;flex-direction:column;min-width:0;min-height:0;
  background:radial-gradient(140% 120% at 50% 0%,#232a30 0%,#15181c 70%)}
.cx-canvas-scroll{flex:1 1 auto;overflow:auto;padding:18px 22px 8px}
.cx-editor-form{max-width:820px;margin:0 auto}
.cx-editor-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;padding-bottom:10px;
  border-bottom:1px solid var(--line)}
.cx-editor-eyebrow{color:var(--dim);font-size:11px;letter-spacing:.04em;text-transform:uppercase}
.cx-editor-id{color:var(--amber);font-size:12.5px;margin-left:auto}
.cx-dirty{color:var(--amber-2);font-size:11px}
.cx-ro-banner{background:#2a2410;border:1px solid var(--amber-dim);color:var(--amber);border-radius:8px;
  padding:8px 12px;font-size:12px;margin-bottom:14px}
.cx-readonly{opacity:.92}
.cx-readonly .cx-sec-body input,.cx-readonly .cx-sec-body select,.cx-readonly .cx-sec-body textarea,
.cx-readonly .cx-sec-body button{pointer-events:none}
.cx-readonly-val{color:var(--ink-2)}

/* sections (accordion) */
.cx-sec{border:1px solid var(--line);border-radius:10px;background:var(--panel);margin-bottom:12px;overflow:hidden}
.cx-sec.req{border-left:2px solid var(--amber-dim)}
.cx-sec.dim{opacity:.78}
.cx-sec-head{display:flex;align-items:center;gap:9px;padding:11px 14px;cursor:pointer;position:sticky;top:-18px;
  background:var(--panel);z-index:1}
.cx-sec-head:hover{background:var(--panel-2)}
.cx-sec-caret{color:var(--dim);font-size:11px;width:12px}
.cx-sec-title{margin:0;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-2);flex:1 1 auto}
.cx-sec-badge{color:var(--dim);font-size:11px;border:1px solid var(--line);border-radius:10px;padding:1px 8px}
.cx-sec-body{padding:6px 14px 16px}

/* fields */
.cx-field{margin:11px 0}
.cx-field.req>.cx-label{padding-left:8px;border-left:2px solid var(--amber);margin-left:-10px}
.cx-label{display:block;font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin:0 0 5px}
/* label row carrying a one-shot action button (Construct "#1", Forge "set basic") */
.cx-label--act{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cx-oneshot{font-family:inherit;font-size:10px;line-height:1;padding:2px 6px;border:1px solid var(--edge);border-radius:4px;background:var(--panel-2);color:var(--dim);cursor:pointer;text-transform:none;letter-spacing:normal;white-space:nowrap}
.cx-oneshot:hover{color:var(--ink-2);border-color:var(--amber-2)}
.cx-oneshot:active{background:var(--panel-3)}
.cx-input{width:100%;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink-2);border-radius:7px;
  padding:8px 10px;font-size:13px}
.cx-input:focus{outline:none;border-color:var(--amber-dim)}
.cx-input.mono{font-family:var(--mono)}
.cx-area{resize:vertical;line-height:1.5;min-height:74px}
.cx-num{width:100%}
/* number fields: no spinner arrows — they steal width so the digits get clipped
   (#3-1-0). Typing still works; values stay numeric. */
.cx-num{-moz-appearance:textfield;appearance:textfield}
.cx-num::-webkit-outer-spin-button,.cx-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
/* skill/spell + meta dyn-rows: tighter input padding so small numeric cells show
   their value, and right-aligned numbers read cleanly (#3-1-0). */
.cx-metarow .cx-input{padding:7px 7px;font-size:12.5px}
.cx-metarow .cx-num{text-align:right}
.cx-hint{color:var(--dim);font-size:11px;margin-top:4px;line-height:1.5}
.cx-hint.cx-warn,.cx-warn{color:var(--amber)}
/* live gold→platinum readout under Vendor gold — a value, not just guidance */
.cx-hint.cx-vendor-plat{color:var(--amber);font-weight:600}
.cx-err{color:var(--err);font-size:11.5px;margin-top:4px}
.cx-warn{color:var(--amber);font-size:11.5px;margin-top:4px}
.cx-field.has-err .cx-input{border-color:var(--err)}
/* Duplicate-as-Template: prose carried over verbatim, not yet rewritten (#0) */
.cx-inherit-tag{margin-left:7px;color:var(--cross);letter-spacing:0;text-transform:none;font-size:10px}
.cx-field.cx-inherited>.cx-input{border-style:dashed;border-color:#6a4a34;color:#c9a58a}
.cx-field.cx-inherited>.cx-input:focus{border-style:solid}
.cx-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.cx-inline{display:flex;align-items:center;gap:6px}

/* low/high pair */
.cx-lh-pair{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:6px;align-items:center}
.cx-lh-cap{font-size:9.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em}

/* slider+int */
.cx-slider{display:flex;align-items:center;gap:10px}
.cx-range{flex:1 1 auto;accent-color:var(--amber)}
.cx-slider .cx-num{flex:0 0 76px}

/* radio + toggle */
.cx-radio{display:flex;flex-wrap:wrap;gap:6px}
.cx-radio-opt{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--edge);border-radius:7px;
  padding:6px 11px;font-size:12.5px;color:var(--ink);cursor:pointer}
.cx-radio-opt input{accent-color:var(--amber)}
.cx-toggle{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--ink);cursor:pointer;margin:6px 0}
.cx-toggle.sub{margin:4px 0 4px 4px;font-size:12px}
.cx-toggle.dim{opacity:.5}
.cx-toggle input{display:none}
.cx-switch{flex:0 0 auto;width:32px;height:18px;border-radius:10px;background:var(--panel-3);border:1px solid var(--edge);
  position:relative;transition:background .15s}
.cx-switch::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;
  background:var(--dim);transition:transform .15s,background .15s}
.cx-toggle input:checked + .cx-switch{background:#3a2f12;border-color:var(--amber-dim)}
.cx-toggle input:checked + .cx-switch::after{transform:translateX(14px);background:var(--amber)}

/* select + search dropdown */
.cx-select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),linear-gradient(135deg,var(--dim) 50%,transparent 50%);
  background-position:calc(100% - 16px) 16px,calc(100% - 11px) 16px;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}
.cx-searchsel{position:relative}
.cx-search-clear{position:absolute;top:6px;right:6px;background:none;border:none;color:var(--dim);font-size:16px;cursor:pointer}
.cx-search-menu{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 3px);max-height:260px;overflow:auto;
  background:var(--panel);border:1px solid var(--edge);border-radius:8px;box-shadow:0 14px 38px rgba(0,0,0,.55);padding:5px}
.cx-search-group{color:var(--amber-2);font-size:10px;letter-spacing:.1em;text-transform:uppercase;padding:7px 8px 3px}
.cx-search-row{display:flex;justify-content:space-between;gap:10px;width:100%;text-align:left;background:none;border:none;
  color:var(--ink);font-size:12.5px;padding:6px 9px;border-radius:6px;cursor:pointer}
.cx-search-row:hover{background:var(--panel-3);color:var(--amber)}
.cx-search-sub{color:var(--amber-2);font-size:10px}
.cx-search-empty{color:var(--dim);font-size:12px;padding:8px}
/* tiny toggle pinned top-right inside a picker menu (#c2 "show NPC-only?") */
.cx-search-tools{display:flex;justify-content:flex-end;padding:2px 6px 5px;margin:-5px -5px 3px;
  position:sticky;top:-5px;background:var(--panel);border-bottom:1px solid var(--line);z-index:1}
.cx-search-tools .cx-mini-check{font-size:10.5px}
/* two-column option list (#0) — group headers / empty span the full width */
.cx-search-menu.cx-search-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px 4px;min-width:260px}
.cx-search-menu.cx-search-grid .cx-search-group,.cx-search-menu.cx-search-grid .cx-search-empty,
.cx-search-menu.cx-search-grid .cx-search-tools{grid-column:1/-1}
/* picker row hint line (#11) — base/tier/PC-NPC under the name */
.cx-search-row.has-meta{flex-direction:column;align-items:stretch;gap:3px}
.cx-srow-top{display:flex;justify-content:space-between;gap:10px;width:100%}
.cx-srow-meta{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.cx-srow-base{color:var(--dim);font-size:10px}
/* hover quick-reference card (#9/#10) */
.cx-hovercard{position:fixed;z-index:90;max-width:300px;background:var(--panel);border:1px solid var(--edge);
  border-radius:9px;box-shadow:0 14px 38px rgba(0,0,0,.55);padding:10px 12px;pointer-events:none}
.cx-hc-title{color:var(--ink-2);font-size:12.5px;font-weight:600;margin-bottom:2px}
.cx-hc-sub{color:var(--amber-2);font-size:10px;margin-bottom:6px}
.cx-hc-row{display:flex;gap:10px;font-size:11.5px;line-height:1.5}
.cx-hc-k{color:var(--dim);flex:0 0 62px;text-transform:uppercase;letter-spacing:.06em;font-size:9.5px;padding-top:2px}
.cx-hc-v{color:var(--ink);flex:1 1 auto;min-width:0;word-break:break-word}
.cx-hc-foot{margin-top:6px;color:var(--amber-2);font-size:10px}

/* stat / eq grid */
.cx-statgrid{display:grid;grid-template-columns:1fr 1fr;gap:4px 16px}
.cx-statgrid .cx-field{margin:7px 0}
.cx-slot-empty{opacity:.45}
.cx-slot-empty:focus-within{opacity:1}

/* dynamic rows */
.cx-dynlist{display:flex;flex-direction:column;gap:7px}
.cx-dynrow{display:flex;align-items:center;gap:8px}
.cx-metarow{flex-wrap:wrap}
.cx-cell{display:flex;align-items:center;gap:5px;flex:1 1 auto}
.cx-skillrow .cx-mastery{display:flex;align-items:center;gap:5px;flex:0 0 130px}
.cx-skill-cost{flex:0 0 150px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--amber-2)}
.cx-del{flex:0 0 auto;background:none;border:1px solid var(--edge);color:var(--dim);border-radius:6px;
  width:28px;height:30px;cursor:pointer;font-size:15px}
.cx-del:hover{border-color:var(--err);color:var(--err)}
.cx-addrow{align-self:flex-start;background:var(--panel-2);border:1px dashed var(--edge);color:var(--dim);
  border-radius:7px;padding:6px 12px;font-size:12px;cursor:pointer}
.cx-addrow:hover{border-color:var(--amber-dim);color:var(--amber)}
.cx-group-preview{background:var(--panel-2);border:1px solid var(--line);border-radius:7px;padding:8px 10px;
  color:var(--amber);font-size:12.5px}

/* flags */
.cx-flags{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}
.cx-flag-group{border:1px solid var(--line);border-radius:9px;padding:9px 11px;background:var(--panel-2)}
.cx-flag-title{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-2);margin-bottom:4px}
.cx-flag-subs{margin-top:4px;padding-left:8px;border-left:1px solid var(--line)}
/* Mob AI knob panels — one per gated behaviour (Wander / Aggro), stacked */
.cx-ai-panels{display:flex;flex-direction:column;gap:14px}
/* each panel head is a collapse toggle (#c0): caret + title + file key */
.cx-ai-panel-head{display:flex;align-items:baseline;gap:8px;cursor:pointer;user-select:none;padding:2px 0}
.cx-ai-panel-head:hover .cx-flag-title{color:var(--amber)}
.cx-ai-panel-head .cx-sec-caret{align-self:center}
.cx-ai-panel-head .cx-flag-title{margin-bottom:0}
.cx-ai-panel-key{font-size:10px;color:var(--dim)}
.cx-ai-panel.folded .cx-ai-panel-head{opacity:.8}
/* Wander AI panel — lives in the Mob AI section when the Wander flag is on */
.cx-wander-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;padding:10px 11px;margin-top:8px;border:1px solid var(--line);border-radius:9px;background:var(--panel-2)}
.cx-wander-body>.cx-field{margin:0}
.cx-wander-body .cx-flag-subs{grid-column:1 / -1;margin-top:0}
.cx-wander-checks{display:flex;flex-wrap:wrap;gap:6px 14px}
/* loadout lists — Inventory (item·qty·load%) + Equipment (item·slot·load%) */
.cx-loadlist{display:flex;flex-direction:column;gap:6px}
.cx-loadrow{display:grid;grid-template-columns:minmax(0,1fr) 118px 92px 30px;gap:8px;align-items:center}
.cx-loadhead{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}
.cx-loadhead span{padding:0 2px}
.cx-load-cell{display:flex;align-items:center;gap:4px;min-width:0}
.cx-loadrow .cx-num,.cx-loadrow .cx-select,.cx-load-add-box .cx-num,.cx-load-add-box .cx-select{width:100%;min-width:0}
.cx-load-name{font-size:12.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-load-name.missing{color:var(--err)}
.cx-load-empty{color:var(--dim);font-size:12px;padding:4px 2px}
.cx-load-note{color:var(--dim);font-size:11px;font-style:italic;padding:2px 2px}
.cx-load-add-box{display:grid;grid-template-columns:minmax(0,1fr) 118px 92px auto auto;gap:8px;align-items:center;
  margin-top:6px;padding-top:8px;border-top:1px solid var(--line)}
.cx-load-clear{justify-self:center}
.cx-load-add-box .cx-searchsel{width:100%}
.cx-load-add{background:var(--panel-2);border:1px solid var(--amber-dim);color:var(--amber);border-radius:7px;
  padding:7px 12px;font-size:12px;cursor:pointer;white-space:nowrap}
.cx-load-add:hover{border-color:var(--amber);background:var(--panel)}

/* race modifier grid — every stat shown with a blank box; × appears on value --- */
.cx-modgroup{margin:12px 0}
.cx-modgroup:first-of-type{margin-top:4px}
.cx-modgroup-h{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-2);margin:0 0 8px}
.cx-modgrid{display:grid;gap:8px 12px}
.cx-modcell{display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:7px}
.cx-modlabel{font-size:10.5px;letter-spacing:.03em;color:var(--dim);text-align:right;font-family:var(--mono)}
.cx-modfield{position:relative;min-width:0}
.cx-modfield .cx-num{width:100%;text-align:right;padding:6px 22px 6px 7px}
.cx-modclear{position:absolute;top:50%;right:5px;transform:translateY(-50%);display:none;background:none;
  border:none;color:var(--dim);font-size:14px;line-height:1;cursor:pointer;padding:0}
.cx-modcell.has-val .cx-modclear{display:block}
.cx-modclear:hover{color:var(--err)}
.cx-modcell.has-val .cx-modlabel{color:var(--amber)}
.cx-modcell.has-val .cx-modfield .cx-num{border-color:var(--amber-dim);color:var(--ink-2)}

/* class Stat & Pool Gain (bottom of Class Properties) ------------------------- */
.cx-gain{margin-top:14px;padding-top:13px;border-top:1px solid var(--line)}
.cx-gain>.cx-label{margin-bottom:3px}
.cx-gain-sub{margin-top:13px}
.cx-gain-subh{display:flex;align-items:baseline;gap:9px;font-size:9.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--amber-2);margin-bottom:9px}
.cx-gain-note{color:var(--dim);letter-spacing:.02em;text-transform:none;font-size:10.5px}
.cx-statgain{display:grid;grid-auto-flow:column;grid-template-rows:repeat(4,auto);
  grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px}
.cx-gaincell{display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:7px}
.cx-gain-lbl{font-size:10.5px;color:var(--dim);text-align:right;font-family:var(--mono)}
.cx-gain-inwrap{display:flex;align-items:center;gap:8px;min-width:0}
.cx-gain-inwrap .cx-num{flex:1 1 auto;min-width:0;text-align:right;padding:6px 7px}
.cx-gain-read{flex:0 0 34px;color:var(--amber-2);font-size:10.5px;white-space:nowrap}
.cx-poolgain{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 12px}
.cx-poolcell{display:flex;flex-direction:column;gap:4px}
.cx-poolcell .cx-gain-lbl{text-align:left}
.cx-poolcell .cx-num{width:100%;text-align:right}
.cx-pool-parent{min-height:12px;color:var(--dim);font-size:9.5px;font-style:italic;opacity:.72}

/* #3 — per-section "load prev tier" carry action + ⟲ carried tag */
.cx-sec-actions{display:flex;align-items:center;gap:9px;margin:0 0 9px}
.cx-prevtier{background:none;border:1px dashed var(--edge);color:var(--dim);border-radius:6px;
  padding:3px 9px;font-size:10.5px;cursor:pointer;white-space:nowrap}
.cx-prevtier:hover{border-color:var(--amber-dim);color:var(--amber)}
.cx-sec-actions .cx-inherit-tag{margin-left:0}

/* mob AI */
.cx-ai-reserved{color:var(--dim);font-size:12.5px;line-height:1.6}
.cx-ai-reserved pre{background:var(--panel-2);border:1px solid var(--line);border-radius:7px;padding:9px 12px;color:var(--ink)}

/* lineage panel */
.cx-lineage{display:flex;align-items:stretch;gap:8px}
.cx-lin-box{flex:1 1 0;min-width:0;border:1px solid var(--line);border-radius:9px;background:var(--panel-2);padding:10px}
.cx-lin-label{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-2)}
.cx-lin-name{color:var(--ink-2);font-size:13px;margin:5px 0 3px;font-weight:500}
.cx-lin-badge{color:var(--dim);font-size:10px;margin-bottom:7px}
.cx-lin-arrow{align-self:center;color:var(--dim)}
.cx-lin-box.active{border-color:var(--amber-dim);background:#241f10}
.cx-lin-name.self{color:var(--amber)}
.cx-lin-self-tag{font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-2);margin-top:4px}
.cx-lin-na{font-size:10px;color:var(--dim);margin-top:3px}

/* empty canvas */
.cx-empty-canvas{max-width:460px;margin:64px auto;text-align:center;color:var(--dim)}
.cx-empty-glyph{font-size:46px;opacity:.3;margin-bottom:10px}
.cx-empty-canvas h3{color:var(--ink-2);font-size:15px;margin:0 0 8px;font-weight:500}
.cx-empty-canvas p{font-size:13px;line-height:1.6}

/* action bar */
.cx-actionbar{flex:0 0 auto;display:flex;align-items:center;gap:9px;padding:10px 18px;
  background:var(--panel);border-top:1px solid var(--edge)}
.cx-action-status{color:var(--dim);font-size:12px}
.cx-action-hint{color:var(--dim);font-size:12px}

/* ---- diagnostics pane ---- */
.cx-diag{background:var(--panel);border-left:1px solid var(--edge);overflow:auto;padding:16px}
.cx-diag h2{margin:0 0 14px;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--amber)}
.cx-diag-h3{margin:18px 0 9px;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-2);
  border-top:1px solid var(--line);padding-top:13px}
.cx-diag-empty,.cx-diag-warn{color:var(--dim);font-size:12px;line-height:1.6}
.cx-diag-warn{color:var(--amber);background:#2a2410;border:1px solid var(--amber-dim);border-radius:8px;padding:9px 11px;margin-bottom:12px}
.cx-gauge{margin-bottom:6px}
.cx-gauge-label{font-size:15px;font-weight:600;margin-bottom:7px}
.cx-gauge-track{height:10px;border-radius:6px;background:var(--panel-3);overflow:hidden}
.cx-gauge-fill{height:100%;border-radius:6px;transition:width .2s}
.cx-gauge-stats{margin-top:9px;color:var(--dim);font-size:11.5px;line-height:1.7}
.cx-checks{display:flex;flex-direction:column;gap:7px}
.cx-check{display:flex;gap:9px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--panel-2)}
.cx-check.fail{border-color:#6a3a2a}.cx-check.warn{border-color:#6f6a2e}
.cx-check-icon{flex:0 0 auto}
.cx-check-label{color:var(--ink-2);font-size:12.5px}
.cx-check-detail{color:var(--dim);font-size:11px;margin-top:2px}
.cx-meta-info .cx-kv{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:5px 0;border-bottom:1px solid var(--line)}
.cx-kv-k{color:var(--dim)}.cx-kv-v{color:var(--ink-2)}

/* ---- abilities (skills/spells) editor + list + diagnostics ---------------- */
.cx-row4{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
/* abilities (2026-10-06): a skill's mana / spirit boxes are dimmed; lag + the two static-span pills share a row; four targeting cards */
.cx-pool-off{opacity:.42}
.cx-pool-off:focus-within{opacity:1}
.cx-timing-row{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:flex-start}
.cx-timing-row>.cx-field,.cx-timing-row>.cx-span{min-width:200px}
.cx-span-pill{white-space:nowrap;border-style:dashed;color:var(--dim)}
.cx-span-pill:hover{color:var(--amber);border-color:var(--amber)}
.cx-span-row{display:flex;align-items:center;gap:6px}
.cx-span-row .cx-input{width:110px}
.cx-span-unit{color:var(--dim);font-size:12px}
.cx-span-x{background:none;border:1px solid var(--line);border-radius:6px;color:var(--dim);cursor:pointer;padding:1px 8px;font-size:13px}
.cx-span-x:hover{border-color:var(--err);color:var(--err)}
/* ability messages ▸ Named lines (2026-10-07): ordinary .cx-field rows — the key rides the label row as a tag */
.cx-named-row{margin:0}
.cx-named-tags{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;text-transform:none;letter-spacing:normal}
.cx-named-tags .cx-pill{font-size:10px;letter-spacing:.02em;white-space:nowrap}
.cx-named-key{color:var(--dim)}
.cx-named-wait{color:var(--amber);border-color:var(--amber-dim,#8a6a2c)}
.cx-named-quiet{color:var(--dim)}
.cx-named-inputrow{display:flex;align-items:center;gap:6px}
.cx-named-inputrow .cx-input{flex:1 1 auto;min-width:0}
.cx-named-inputrow .cx-del:disabled{opacity:.25;cursor:default}
.cx-named-row.missing .cx-input{border-style:dashed}
.cx-named-renamein{width:220px;padding:3px 7px;font-size:11.5px}
.cx-scope{display:flex;flex-direction:column;gap:8px}
.cx-scope-sel{max-width:440px}
.cx-scope-explain{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 11px;display:flex;flex-direction:column;gap:4px}
.cx-scope-row{display:flex;gap:10px;font-size:12px;align-items:baseline}
.cx-scope-k{color:var(--ink-2);min-width:120px}
.cx-scope-v{color:var(--ink)}
.cx-scope-row.off .cx-scope-v,.cx-scope-row.off .cx-scope-k{color:#e0908c}
.cx-scope-today{font-size:11.5px;color:var(--amber)}
.cx-scope-today[hidden]{display:none}
.cx-scope-file{font-size:10.5px;color:var(--dim);word-break:break-all}
.cx-tmodes{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px}   /* 2 across when the editor is wide, stacked when it's narrow */
.cx-tmode{display:flex;gap:9px;align-items:flex-start;text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:9px 11px;color:var(--ink);cursor:pointer}
.cx-tmode:hover{border-color:var(--edge-2,var(--edge))}
.cx-tmode.active{border-color:var(--amber);background:#2a2410}
.cx-tmode-dot{color:var(--amber);font-size:13px;line-height:1.3}
.cx-tmode-body{display:flex;flex-direction:column;gap:3px;min-width:0}
.cx-tmode-label{font-weight:600;font-size:12.5px;color:var(--ink-2)}
.cx-tmode.active .cx-tmode-label{color:var(--amber)}
.cx-tmode-hint{font-size:11.5px;color:var(--dim);line-height:1.45}
.cx-tmode-ex{font-size:11px;color:var(--ink-2)}
.cx-tmode-saved{font-size:10.5px;color:var(--dim);opacity:.8}
.cx-sublabel{color:var(--dim);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;margin:2px 0}
.cx-idbox{display:flex;align-items:center;gap:6px;background:var(--panel-2);border:1px solid var(--edge);border-radius:6px;padding:6px 9px;font-size:12px;color:var(--ink-2)}
.cx-help-row{display:flex;align-items:center;gap:10px;margin-top:4px}
.cx-msg-groups{display:flex;flex-direction:column;gap:14px}
.cx-msg-group{display:flex;flex-direction:column;gap:6px}
.cx-msg-rows{display:flex;flex-direction:column;gap:8px}
/* a class-level display wins over the [hidden] UA rule, so the caret couldn't
   collapse a message group — restore the collapse (#msg-collapse) */
.cx-msg-rows[hidden]{display:none}
.cx-mastery-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#2a2410;border:1px solid var(--amber-dim);
  border-radius:8px;padding:7px 10px;font-size:11.5px;color:var(--amber)}
.cx-copychip{background:var(--panel);border:1px solid var(--amber-dim);color:var(--amber);border-radius:6px;
  padding:3px 8px;font:inherit;font-size:11px;cursor:pointer}
.cx-copychip:hover{border-color:var(--amber);color:var(--sel)}
/* list: skills/spells segmented toggle + archetype tag pills */
.cx-seg{display:flex;gap:4px;padding:6px 14px 4px}
.cx-seg-btn{flex:1;background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);border-radius:7px;
  padding:6px 0;font:inherit;font-size:12px;cursor:pointer}
.cx-seg-btn.active{background:#211d12;border-color:var(--amber);color:var(--amber);font-weight:600}
.cx-tag{font-size:9.5px;color:var(--dim);border:1px solid var(--edge);border-radius:5px;padding:1px 5px;margin-right:3px}
.cx-abil-link{background:var(--panel-2);border:1px solid var(--edge);border-radius:6px;width:30px;height:30px;
  cursor:pointer;font-size:13px;line-height:1}
.cx-abil-link.ok{color:var(--amber-2)}
.cx-abil-link.missing{color:var(--cross);border-color:#6a3a2a}
.cx-abil-link.blank{background:none;border:1px dashed var(--edge);color:var(--dim);cursor:default}
.cx-abil-cost{color:var(--dim);font-size:11px;white-space:nowrap}
/* c0 — a class's skills / spells: one aligned table (name · lvl · cost · positions · ✎ · ×) */
.cx-abiltable{display:flex;flex-direction:column;container-type:inline-size}
.cx-abilrow{display:grid;grid-template-columns:minmax(0,1fr) 54px 180px 30px 26px;gap:6px;align-items:center}
/* cost + positions: side by side when there's room, stacked when the editor is narrow */
.cx-abil-detail{display:grid;grid-template-columns:84px 90px;gap:6px;align-items:center}
@container (max-width: 480px){
  .cx-abilrow{grid-template-columns:minmax(0,1fr) 48px 86px 28px 24px;gap:5px}
  .cx-abil-detail{grid-template-columns:1fr;gap:0;line-height:1.25}
}
.cx-abilrow > *{min-width:0}
.cx-abilrow .cx-abil-cost{overflow:hidden;text-overflow:ellipsis}
.cx-abilrow .cx-input{padding:6px 7px;font-size:12.5px}
.cx-abilrow .cx-num{text-align:right}
.cx-abilhead{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);padding:0 0 2px}
.cx-abilhead .r{text-align:right}
.cx-abilhead [title]{cursor:help}
/* c0 — a level edited and left out of order: the ↕ chip (or Enter in the box) re-sorts,
   and the edited box that isn't in its place yet wears a dashed amber edge */
.cx-abilhead-lvl{display:flex;align-items:center;justify-content:flex-end;gap:4px}
.cx-abil-resort{background:none;border:1px dashed var(--amber-dim);border-radius:9px;color:var(--amber);font-size:11px;
  line-height:1;padding:1px 4px;cursor:pointer}
.cx-abil-resort:hover{border-style:solid;background:#2a2410}
.cx-abil-resort[hidden]{display:none}
.cx-abilrow .cx-num.cx-abil-unplaced{border-style:dashed;border-color:var(--amber-dim)}
.cx-abilrow.cx-abil-moved{animation:cx-abil-moved 1s ease-out;border-radius:6px}
@keyframes cx-abil-moved{0%,35%{background:rgba(255,194,77,.14);box-shadow:0 0 0 1px var(--amber-dim)}100%{background:transparent;box-shadow:none}}
/* c1 — the seam between two rows is ONE click target the full width of the table:
   hover anywhere on it for the dashed line + "+", click anywhere on it to insert a row
   there. 14px tall (was 8), overlapping the rows by only their outer 2px; the line
   lingers a beat after the pointer leaves so it doesn't flicker. */
.cx-abil-seam{position:relative;display:block;width:100%;height:14px;margin:-2px 0;padding:0;border:0;background:none;
  cursor:pointer;z-index:1}
.cx-abil-seam::before{content:'';position:absolute;left:0;right:0;top:50%;border-top:1px dashed var(--amber-dim);
  opacity:0;transition:opacity .15s ease .12s}
.cx-abil-ins{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:20px;height:20px;padding:0;
  border-radius:50%;border:1px solid var(--amber-dim);background:var(--panel);color:var(--amber);font-size:14px;line-height:18px;
  text-align:center;opacity:0;transition:opacity .15s ease .12s}
.cx-abil-seam:hover::before,.cx-abil-seam:hover .cx-abil-ins,
.cx-abil-seam:focus-visible::before,.cx-abil-seam:focus-visible .cx-abil-ins{opacity:1;transition-delay:0s}
.cx-abil-seam:hover .cx-abil-ins{border-color:var(--amber);background:#2a2410}
.cx-abil-seam:focus-visible{outline:none}
.cx-abil-cost.missing{color:var(--cross)}
/* definition = the Stacks help file, read-only here */
.cx-def-head{display:flex;align-items:center;gap:10px}
.cx-def-status{font-size:10.5px}
.cx-def-status.ok{color:var(--ok)} .cx-def-status.none{color:var(--dim)}
.cx-def-body{margin-top:6px;background:var(--panel);border:1px solid var(--edge);border-radius:8px;
  padding:9px 11px;font-size:12px;line-height:1.6;color:var(--ink);max-height:140px;overflow:auto;white-space:pre-wrap}
.cx-def-body.empty{color:var(--dim);font-style:italic}
.cx-msg-head{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-bottom:4px}
.cx-msg-auto{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 11px;margin-bottom:6px}
.cx-auto-row{display:flex;gap:10px;align-items:baseline;padding:3px 0;font-size:11.5px}
.cx-auto-lbl{color:var(--dim);flex:0 0 190px;white-space:nowrap}
.cx-auto-txt{color:var(--ink-2)}
.cx-msg-grouphead{display:flex;align-items:center;gap:7px;cursor:pointer;color:var(--ink-2);font-size:11px;
  letter-spacing:.06em;text-transform:uppercase;padding:6px 0}
/* diagnostics: used-by + prevention */
.cx-diag-note{color:var(--dim);font-size:12px;font-style:italic;padding:2px 0 6px}
.cx-usedby{display:flex;flex-direction:column;gap:6px}
.cx-ub{display:flex;align-items:center;gap:8px;background:var(--panel-2);border:1px solid var(--edge);border-radius:7px;padding:6px 9px}
.cx-ub-name{color:var(--ink-2);font-size:12.5px}
.cx-ub-lv{color:var(--dim);font-size:11px}
.cx-ub-go{margin-left:auto;color:var(--amber-2);font-size:10.5px;cursor:pointer;white-space:nowrap}
.cx-ub-go:hover{color:var(--amber)}
.cx-conn-row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink);margin-top:4px}
.cx-listline{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12.5px;
  border:1px solid var(--line);border-radius:7px;padding:7px 10px;background:var(--panel-2)}

/* dialogs */
.cx-dlg-form{display:flex;flex-direction:column;gap:10px}
.cx-picklist{display:flex;flex-direction:column;gap:9px;min-width:380px}
.cx-pick-rows{max-height:50vh;overflow:auto;display:flex;flex-direction:column;gap:3px}
.cx-pick-row{text-align:left;background:var(--panel-2);border:1px solid var(--line);color:var(--ink);
  border-radius:7px;padding:9px 11px;font-size:13px;cursor:pointer}
.cx-pick-row:hover{border-color:var(--amber);color:var(--amber)}
.cx-help{font-size:13px;line-height:1.65;color:var(--ink)}
.cx-help code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12px}

/* ===========================================================================
 * CONSTRUCT — Phase 1 additions
 * ========================================================================= */
/* portaled dropdown (escapes section overflow) */
.cx-search-menu.cx-portal{position:fixed;z-index:80;max-width:420px}
.cx-search-menu.cx-portal .cx-search-row{align-items:flex-start}
.cx-search-menu.cx-portal .cx-search-row>span:first-child{white-space:normal;line-height:1.4}

/* min/max + base±% pair */
.cx-lh{display:flex;align-items:center;gap:6px}
.cx-lh-inner{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:6px;align-items:center;flex:1 1 auto}
.cx-lh-mode{flex:0 0 auto;background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);
  border-radius:6px;font-size:10px;padding:4px 6px;cursor:pointer;letter-spacing:.04em}
.cx-lh-mode:hover{border-color:var(--edge-2);color:var(--ink)}
.cx-lh-mode.active{border-color:var(--amber);color:var(--amber);background:#2a2410}

/* gradient alignment slider (red → yellow → green; track shows, fill doesn't) */
.cx-range.cx-align{-webkit-appearance:none;appearance:none;height:8px;border-radius:5px;
  background:linear-gradient(90deg,#c0392b 0%,#d8b94a 50%,#4f9d57 100%);outline:1px solid var(--edge)}
.cx-range.cx-align::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:18px;border-radius:4px;
  background:var(--ink-2);border:1px solid #000;cursor:pointer}
.cx-range.cx-align::-moz-range-thumb{width:14px;height:18px;border-radius:4px;background:var(--ink-2);border:1px solid #000;cursor:pointer}

/* identity: mass-mob row */
.cx-mass-row{display:flex;align-items:center;gap:8px;justify-content:flex-end;font-size:12px;color:var(--ink);
  margin:0 0 6px;cursor:pointer}
.cx-mass-row input{accent-color:var(--amber)}
.cx-mass-hint{color:var(--dim);font-size:10.5px}

/* compact 3-up classification row + compact age */
.cx-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;align-items:start}
.cx-age{grid-template-columns:auto 1fr auto 1fr}
.cx-gender{margin-top:2px}

/* disabled lineage box (tier-gated) */
.cx-disabled-box{background:var(--panel-2);border:1px dashed var(--edge);color:var(--dim);
  border-radius:7px;padding:8px 10px;font-size:11.5px;font-style:italic;opacity:.7}

/* chip multi-select (class requirements: allowed/excluded races) — #3-2c */
.cx-chipmulti{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cx-chipmulti .cx-searchsel{flex:1 1 140px;min-width:140px}
.cx-chip{display:inline-flex;align-items:center;gap:5px;background:var(--panel-2);border:1px solid var(--edge);
  border-radius:6px;padding:3px 4px 3px 9px;font-size:12px;color:var(--ink-2)}
.cx-chip-x{background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px;line-height:1;padding:0 2px}
.cx-chip-x:hover{color:var(--err)}
/* prevention family: committed value shows as a clickable pill (click to rename) */
.cx-prevfam{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cx-prevfam .cx-searchsel{flex:1 1 220px;min-width:180px}
.cx-prevfam-pill{cursor:pointer;padding:3px 10px;color:var(--amber-2);border-color:var(--amber-dim)}
.cx-prevfam-pill::after{content:'✎';margin-left:7px;font-size:11px;color:var(--dim)}
.cx-prevfam-pill:hover{border-color:var(--amber);color:var(--amber)}

/* duplicate-row warning (race modifiers) */
.cx-metarow.cx-row-dup .cx-cell .cx-input{border-color:var(--err)}
.cx-skillrow.cx-row-dup .cx-input{border-color:var(--err)}   /* a repeated mob skill — the engine ignores it */
.cx-row-warn{color:var(--amber);flex:0 0 auto}
/* a race attribute value that isn't in its Attributes list any more (c0) */
.cx-input.cx-unknown{border-color:var(--cross);color:#e3b9a3}

/* de-boxed flags: titles only, tighter grid */
.cx-flags{display:grid;grid-template-columns:1fr 1fr;gap:4px 22px}
.cx-flag-group{border:0;background:none;padding:6px 0;border-top:1px solid var(--line)}
.cx-flag-group:nth-child(1),.cx-flag-group:nth-child(2){border-top:0}
.cx-flag-title{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-2);margin-bottom:3px}

/* the picker dialog used for areas reuses .cx-picklist (already styled) */

/* ===========================================================================
 * CONSTRUCT — Phase 2 additions
 * ========================================================================= */
/* suitebar open-file indicator */
.open-file{color:var(--dim);font-size:11.5px;letter-spacing:.04em}
.open-file b{color:var(--amber);font-weight:600}
.suite-sep{width:1px;height:16px;background:var(--edge)}
/* the return ticket — "● back to Mob Stats" (workspace.setReturn) */
.suite-return{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--amber-dim);border-radius:12px;
  background:#2a2410;padding:1px 3px 1px 2px;margin-left:6px;white-space:nowrap;flex:0 0 auto}
.suite-return[hidden]{display:none}
.suite-return-go{display:inline-flex;align-items:center;background:none;border:none;color:var(--amber);font:inherit;
  font-size:11.5px;letter-spacing:.02em;cursor:pointer;padding:2px 6px 2px 0}
.suite-return-go .goto-back{display:inline-block;margin:0 7px 0 6px}
.suite-return-go:hover{color:var(--sel)}
.suite-return-x{background:none;border:none;color:var(--dim);cursor:pointer;font-size:13px;line-height:1;padding:2px 5px;border-radius:8px}
.suite-return-x:hover{color:var(--ink-2);background:var(--panel-3)}

/* list header: New + New Unassigned */
.cx-new-group{display:flex;gap:5px}
.cx-new.cx-new-un{color:var(--dim)}
.cx-new.cx-new-un:hover{color:var(--amber);border-color:var(--amber)}

/* radar charts */
.cx-radars{display:flex;gap:6px;justify-content:space-around}
.cx-radar-fig{margin:0;text-align:center}
.cx-radar-fig figcaption{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin-top:-4px}
.cx-radar{display:block;margin:0 auto}

/* lineage viewer */
.cx-lineviewer{margin-top:6px}
.cx-lv-rows{display:flex;flex-direction:column;gap:11px;max-height:340px;overflow:auto;padding-right:4px}
.cx-lv-row{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:11px;border-bottom:1px solid var(--line);padding-bottom:11px}
.cx-lv-row:last-child{border-bottom:none;padding-bottom:0}
.cx-lv-tier{display:flex;gap:4px;flex-wrap:wrap}
.cx-lv-arrow{color:var(--dim)}
.cx-lv-chip{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:6px;
  padding:3px 7px;font-size:10.5px;cursor:pointer;white-space:nowrap}
/* tier-tinted outlines, matching the Mo/Mi/Mj tier pills */
.cx-lv-chip.t0{border-color:var(--edge)}
.cx-lv-chip.t1{border-color:#6f6a2e;color:#c9c24a}
.cx-lv-chip.t2{border-color:#6a3a2a;color:var(--cross)}
.cx-lv-chip:hover{border-color:var(--edge-2);color:var(--amber)}
.cx-lv-chip.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
/* separator between variant twins in one tier cell (Witch / Wizard) */
.cx-lv-slash{color:var(--dim);align-self:center;padding:0 1px}
/* branching: a family fans out base → [minor → its own majors] sub-rows (#branch) */
.cx-lv-row{align-items:flex-start}
.cx-lv-branches{display:flex;flex-direction:column;gap:6px;min-width:0}
.cx-lv-branch{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.cx-lv-orphan{color:var(--dim);font-size:9px;letter-spacing:.06em;text-transform:uppercase;
  border:1px dashed var(--edge);border-radius:6px;padding:3px 7px;align-self:center}

/* attributes editor */
.cx-attr-editor{display:flex;flex-direction:column;height:100%;min-height:0}
.cx-attr-head{display:flex;align-items:center;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--line);margin-bottom:12px}
.cx-attr-head h2{margin:0;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
.cx-attr-hint{color:var(--dim);font-size:11.5px}
/* c3 — Attack Types (2nd) is wider: its cards carry a kind + channel line */
.cx-attr-grid{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr) minmax(0,1fr) minmax(0,1fr);gap:12px}
.cx-attr-col{display:flex;flex-direction:column;min-height:0;border:1px solid var(--line);border-radius:9px;background:var(--panel);overflow:hidden}
.cx-attr-col-head{display:flex;justify-content:space-between;align-items:center;padding:9px 11px;background:var(--panel-2);
  border-bottom:1px solid var(--line);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-2)}
.cx-attr-count{color:var(--dim);border:1px solid var(--line);border-radius:9px;padding:0 7px;font-size:10px}
.cx-attr-col-head.sortable{cursor:pointer;gap:7px}
.cx-attr-col-head.sortable>span:first-child{margin-right:auto}
.cx-attr-col-head.sortable:hover{color:var(--amber)}
.cx-attr-sort{color:var(--dim);font-size:12px;letter-spacing:0}
/* pinned add box (type a name → key derived; Enter or Add commits) */
.cx-attr-add{flex:0 0 auto;padding:8px;border-bottom:1px solid var(--line);background:var(--panel-2)}
.cx-attr-add-line{display:flex;gap:6px}
.cx-attr-add-input{flex:1 1 auto;font-size:11.5px;padding:5px 7px}
.cx-attr-add-btn{flex:0 0 auto;padding:4px 10px;font-size:11px}
.cx-attr-keypeek{display:block;min-height:13px;margin-top:4px;font-family:var(--mono);font-size:10.5px;color:var(--dim)}
.cx-attr-keypeek.dup{color:var(--err)}
/* independently scrolling card list */
.cx-attr-rows{flex:1 1 auto;min-height:0;overflow:auto;padding:8px;display:flex;flex-direction:column;gap:6px}
.cx-attr-empty{color:var(--dim);font-size:11px;text-align:center;padding:16px 6px}
.cx-attr-row{border:1px solid var(--line);border-radius:7px;padding:6px 7px;background:var(--panel)}
.cx-attr-row-main{display:flex;align-items:center;gap:6px}
.cx-attr-name{flex:1 1 auto;font-size:11.5px;padding:5px 7px;color:var(--ink-2)}
.cx-attr-row .cx-del{flex:0 0 auto;width:20px;height:20px;padding:0;font-size:12px;line-height:1;opacity:0;transition:opacity .1s}
.cx-attr-row:hover .cx-del,.cx-attr-row:focus-within .cx-del{opacity:1}
.cx-attr-row-foot{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:5px}
/* key peek: quiet at rest, legible on hover; click to override */
.cx-attr-key{display:inline-flex;align-items:center;gap:5px;min-width:0;cursor:text;opacity:.45;transition:opacity .1s}
.cx-attr-row:hover .cx-attr-key,.cx-attr-row:focus-within .cx-attr-key{opacity:1}
.cx-attr-key-label{text-transform:uppercase;letter-spacing:.08em;color:var(--dim);font-size:9px}
.cx-attr-keytext{font-family:var(--mono);font-size:10.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cx-attr-key-input{font-family:var(--mono);font-size:10.5px;padding:2px 5px;width:130px}
/* Stacks bridge button: + Help (create) / ✎ Help (edit existing) */
.cx-attr-help{flex:0 0 auto;background:none;border:1px solid var(--edge);color:var(--dim);border-radius:6px;
  padding:2px 8px;font-size:10px;cursor:pointer;white-space:nowrap}
.cx-attr-help:hover:not(:disabled){border-color:var(--amber-dim);color:var(--amber)}
.cx-attr-help.exists{color:var(--amber-2);border-color:var(--amber-dim)}
.cx-attr-help:disabled{opacity:.4;cursor:default}

/* attr/stats: full-width canvas (single column; side panes removed from flow) */
.cx-app.cx-fullcanvas .cx-body{grid-template-columns:1fr}
.cx-app.cx-fullcanvas .cx-list,.cx-app.cx-fullcanvas .cx-diag{display:none}

/* ===========================================================================
 * CONSTRUCT — Phase 1 (data-contract round): attr validation
 * ========================================================================= */
.cx-attr-row.invalid{outline:1px solid var(--err);border-color:var(--err)}
.cx-attr-row.invalid .cx-attr-name,.cx-attr-row.invalid .cx-attr-keytext{border-color:var(--err);color:var(--err)}

/* c2 — a filter box on every Attributes column (name / key; view-only, Esc clears) */
.cx-attr-filterline{flex:0 0 auto;display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--line);background:var(--panel-2)}
.cx-attr-filter{flex:1 1 auto;min-width:0;font-size:11.5px;padding:4px 7px}
.cx-attr-fcount{flex:0 0 auto;color:var(--amber-2);font-size:10px;white-space:nowrap}
.cx-attr-fcount:empty{display:none}
/* c3 — Attack Types: kind tabs, the per-row kind + channel picker, the live notes */
.cx-attr-info{background:none;border:none;color:var(--dim);font-size:12px;padding:0 2px;cursor:pointer;letter-spacing:0}
.cx-attr-info:hover{color:var(--amber)}
.cx-kindbar{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:6px 8px;border-bottom:1px solid var(--line);background:var(--panel-2)}
.cx-kindtab{display:inline-flex;align-items:center;gap:4px;background:none;border:1px solid var(--edge);border-radius:9px;color:var(--dim);
  font-size:10.5px;padding:1px 7px;cursor:pointer}
.cx-kindtab:hover{border-color:var(--edge-2);color:var(--ink)}
.cx-kindtab-n{font-size:9.5px;opacity:.75}
.cx-kindtab.on{color:var(--amber);border-color:var(--amber-dim);background:#2a2410}
.cx-kindtab.k-channel.on{color:#8cc3e0;border-color:#35566a;background:#1b2a33}
.cx-kindtab.k-aspect.on{color:#c7a3ee;border-color:#5b4775;background:#271f33}
.cx-kindtab.k-unset{color:var(--cross);border-color:#6a3f2e}
.cx-kindtab.k-unset.on{background:#2e1c15}
.cx-kindfix{margin-left:auto;background:#2a2410;border:1px solid var(--amber-dim);border-radius:6px;color:var(--amber);font-size:10.5px;padding:2px 8px;cursor:pointer}
.cx-kindfix:hover{border-color:var(--amber)}
.cx-kindline{display:flex;align-items:center;gap:6px;margin-top:5px;min-width:0;flex-wrap:wrap}
.cx-kindseg{display:inline-flex;flex:0 0 auto;border:1px solid var(--edge);border-radius:6px;overflow:hidden}
.cx-kindseg-b{background:none;border:none;border-right:1px solid var(--edge);color:var(--dim);font-size:10px;padding:2px 7px;cursor:pointer}
.cx-kindseg-b:last-child{border-right:none}
.cx-kindseg-b:hover{color:var(--ink);background:var(--panel-3)}
.cx-kindseg-b.on.k-channel{color:#8cc3e0;background:#1b2a33}
.cx-kindseg-b.on.k-attack{color:var(--amber);background:#2a2410}
.cx-kindseg-b.on.k-aspect{color:#c7a3ee;background:#271f33}
.cx-atk-chans{display:inline-flex;align-items:center;flex-wrap:wrap;gap:3px;min-width:0;background:none;border:1px dashed var(--edge);
  border-radius:6px;padding:1px 5px;cursor:pointer;color:var(--dim);font-size:10.5px}
.cx-atk-chans:hover{border-style:solid;border-color:var(--edge-2)}
.cx-atk-arrow{color:var(--dim)}
.cx-atk-chan{border:1px solid #35566a;border-radius:8px;padding:0 6px;color:#8cc3e0;background:#1b2a33;font-size:10px;line-height:15px}
.cx-atk-chan.default{border-style:dashed;border-color:var(--edge);background:none;color:var(--dim)}
.cx-atk-chan.bad{border-color:var(--err);color:var(--err);background:none}
.cx-atk-chan.warn{border-color:var(--amber-dim);color:var(--amber);background:none}
.cx-atk-caret{color:var(--dim);font-size:9px}
.cx-atk-notes{margin-top:4px;display:flex;flex-direction:column;gap:2px}
.cx-atk-note{font-size:10px;line-height:1.35;color:var(--dim)}
.cx-atk-note.err{color:var(--err)}
.cx-atk-note.warn{color:var(--amber-2)}
.cx-atk-note.info{color:var(--dim);font-style:italic}
.cx-attr-row.cx-atk-bad{border-color:#6b3534}
.cx-attr-row.cx-atk-soft{border-left:2px solid var(--amber-dim)}
.cx-attr-eng{flex:0 0 auto;margin-left:auto;margin-right:6px;font-size:9.5px;color:var(--amber-2);border:1px dashed var(--amber-dim);border-radius:8px;padding:0 6px;cursor:help;white-space:nowrap}
.cx-atk-note[hidden]{display:none}
.cx-engchanges{margin:6px 0 10px;padding-left:18px;line-height:1.55;font-size:12.5px}
.cx-engchanges li{margin-bottom:4px}
.cx-search-menu.cx-chanmenu{right:auto;width:max-content;max-width:300px}
.cx-chanmenu .cx-chanopt{align-items:center}
.cx-chanopt-box{display:inline-block;width:14px;color:var(--dim)}
.cx-chanopt.on{color:#8cc3e0}
.cx-chanopt.on .cx-chanopt-box{color:#8cc3e0}
.cx-chanopt.stray{color:var(--err)}
.cx-chanopt.clear{color:var(--dim);font-style:italic;border-top:1px solid var(--line)}
.cx-kindplan{margin:6px 0 10px;padding-left:18px;line-height:1.55;font-size:12.5px}
.cx-kindplan-add{display:block;font-size:12.5px;line-height:1.5;cursor:pointer;text-transform:none;letter-spacing:normal;color:var(--ink)}
.cx-kindplan .k-channel,.cx-help .k-channel{color:#8cc3e0}
.cx-kindplan .k-attack,.cx-help .k-attack{color:var(--amber)}
.cx-kindplan .k-aspect,.cx-help .k-aspect{color:#c7a3ee}

/* ===========================================================================
 * Phase 3 — inspector preview, lineage filter/actions
 * ========================================================================= */
.room-preview{display:flex;align-items:center;gap:10px;margin:4px 0 8px;padding:6px 8px;border:1px solid var(--line);
  border-radius:7px;background:var(--panel-2)}
.room-glyphs{font-family:var(--mono);font-size:20px;font-weight:600;letter-spacing:2px;min-width:34px;text-align:center}
.room-prev-type{font-size:12px;color:var(--ink-2)} .room-prev-col{font-size:11px}
.cx-lv-filter{margin:4px 0 8px;padding:5px 8px;font-size:11.5px}
.cx-lin-actions{margin-top:10px;display:flex;gap:8px}

/* ===========================================================================
 * STACKS — help-file viewer/editor/exporter (.st-*). Reuses .cx-app/.cx-body/
 * .cx-list/.cx-canvas/.cx-diag and form primitives (.cx-field, .cx-input,
 * .cx-mini-check, .cx-pill, .btn) for layout; these rules cover the
 * prefix+tags top row, the chip-style tag editor, card tag rows, and the
 * Related pane (keyword pills + related-entry rows).
 * ========================================================================= */

/* ---- top row: prefix checkboxes + tags ---- */
.st-top-row{display:flex;gap:20px;align-items:flex-start;margin-bottom:14px}
.st-top-col{flex:0 0 auto}
.st-top-col.grow{flex:1 1 auto;min-width:0}
.st-prefix-row{display:flex;gap:14px;align-items:center;min-height:36px}

/* ---- tag-chip editor (Tags, See Also) ---- */
.st-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;width:100%;
  background:var(--panel-2);border:1px solid var(--edge);border-radius:7px;
  padding:6px 8px;min-height:36px}
.st-tags:focus-within{border-color:var(--amber-dim)}
.st-tag-chips{display:flex;flex-wrap:wrap;gap:6px}
.st-tag-chip{display:inline-flex;align-items:center;gap:5px;background:var(--panel-3);
  border:1px solid var(--edge);border-radius:6px;padding:3px 4px 3px 9px;font-size:12px;color:var(--ink)}
.st-tag-x{background:none;border:none;color:var(--dim);font-size:13px;line-height:1;
  padding:1px 5px;border-radius:4px;cursor:pointer}
.st-tag-x:hover{color:var(--err);background:var(--panel-2)}
.st-tag-input{flex:1 1 90px;min-width:90px;background:none;border:none;outline:none;
  color:var(--ink-2);font-size:13px;padding:4px 2px}
.st-tag-input::placeholder{color:var(--dim)}

/* the immortal section of a help topic (its `immhelp` in topics.help) — list pill,
   the editor's checkbox row, and the section's own text / tags / see-also, set off
   with an amber rule so it reads as "staff eyes only" */
.st-imm-pill{color:var(--amber);border-color:var(--amber-dim)}
.st-imm-row{display:flex;align-items:center;min-height:36px}
.st-imm-row .cx-mini-check{font-size:12.5px;color:var(--ink)}
.st-imm-box{border-left:2px solid var(--amber-dim);padding-left:12px;margin-bottom:14px}
.st-imm-box[hidden]{display:none}
/* "per-topic files still need migrating" — until Maintenance ▸ Migrate has run */
.st-migrate-banner{display:flex;align-items:center;gap:10px;margin:0 10px 8px;padding:8px 10px;
  border:1px solid var(--amber-dim);border-radius:6px;color:var(--amber);font-size:12px;line-height:1.35}
.st-migrate-banner[hidden]{display:none}
.st-migrate-banner .cx-new{flex:0 0 auto;margin-left:auto}

/* small read-only chips on list cards */
.st-card-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.st-tag-chip.sm{padding:1px 6px;font-size:10px;border-radius:4px}
.st-tag-chip.sm.more{color:var(--dim);border-style:dashed}

/* ---- Related pane: keyword pills + related-entry rows ---- */
.st-kw-row{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 4px}
.st-kw-pill{font-size:11px;color:var(--ink);background:var(--panel-2);border:1px solid var(--edge);
  border-radius:5px;padding:2px 8px}
.st-kw-pill.shared{color:var(--amber);border-color:var(--amber-dim);background:#2a2410}
.st-related-row{border:1px solid var(--line);border-radius:9px;background:var(--panel-2);
  padding:9px 10px;margin-bottom:8px}
.st-related-row:hover{border-color:var(--edge-2)}
.st-related-title{color:var(--ink-2);font-size:12.5px;font-weight:500;margin-bottom:6px}
.st-related-actions{display:flex;gap:6px;margin-top:8px}
.st-related-actions .btn{padding:4px 9px;font-size:11.5px}

/* ===========================================================================
 * FORGE — item editor (.fg-*). Inherits the dark palette + monospace accents;
 * three-pane layout (list · editor · diagnostics) mirroring Construct, with
 * large keyboard-navigable button grids, live cost badges, a unique tracker
 * and the meta-balance table editor.
 * ========================================================================= */
.fg-app{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--bg)}

/* menubar + view tabs */
.fg-menubar{flex:0 0 38px;display:flex;align-items:center;gap:6px;padding:0 14px;background:var(--panel);border-bottom:1px solid var(--edge)}
.fg-brand{color:var(--amber);font-weight:600;letter-spacing:.24em;font-size:13px;margin-right:12px}
.fg-views{display:flex;gap:3px;margin-right:10px}
.fg-view-tab{background:none;border:1px solid transparent;color:var(--dim);font-size:12px;padding:5px 11px;border-radius:6px;cursor:pointer}
.fg-view-tab:hover{color:var(--ink);background:var(--panel-2)}
.fg-view-tab.active{color:var(--amber);background:var(--panel-3);border-color:var(--amber-dim)}
.fg-menus{display:flex;gap:2px}
.fg-menu-btn{background:none;border:1px solid transparent;color:var(--ink);font-size:13px;padding:6px 11px;border-radius:6px;cursor:pointer}
.fg-menu-btn:hover{background:var(--panel-3);color:var(--amber)}
.fg-context{color:var(--dim);font-size:11.5px;letter-spacing:.02em}

/* body grid */
.fg-body{position:relative;flex:1 1 auto;min-height:0;display:grid;grid-template-columns:280px 1fr 332px;grid-template-rows:1fr}
.fg-app.fg-hide-list .fg-body{grid-template-columns:0 1fr 332px}
.fg-app.fg-hide-diag .fg-body{grid-template-columns:280px 1fr 0}
.fg-app.fg-hide-list .fg-list,.fg-app.fg-hide-diag .fg-diag{display:none}
.fg-app.fg-fullcanvas .fg-body{grid-template-columns:1fr}
.fg-app.fg-fullcanvas .fg-list,.fg-app.fg-fullcanvas .fg-diag{display:none}

/* ---- list pane ---- */
.fg-list{background:var(--panel);border-right:1px solid var(--edge);overflow:auto;display:flex;flex-direction:column;min-width:0}
.fg-list-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px 8px}
.fg-list-head h2{margin:0;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--amber)}
.fg-new{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:7px;padding:5px 10px;font-size:12px;cursor:pointer}
.fg-new:hover{border-color:var(--amber);color:var(--amber)}
.fg-list-controls{display:flex;gap:6px;padding:0 14px 6px}
.fg-list-search{flex:1 1 auto}
.fg-sort{flex:0 0 110px}
.fg-list-filters2{display:flex;gap:6px;padding:0 14px 8px}
.fg-filtersel{flex:1 1 0}
.fg-list-filters{display:flex;flex-wrap:wrap;gap:4px 12px;padding:0 14px 8px;border-bottom:1px solid var(--line)}
.fg-mini-check{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--dim);cursor:pointer}
.fg-mini-check input{width:auto;accent-color:var(--amber-2)}
.fg-cards{flex:1 1 auto;overflow:auto;padding:8px}
.fg-list-foot{display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border-top:1px solid var(--line);background:var(--panel)}
.fg-list-count{color:var(--dim);font-size:11px}
.fg-list-empty{color:var(--dim);font-size:12px;font-style:italic;padding:18px 10px;line-height:1.6}

/* cards */
.fg-card{position:relative;border:1px solid var(--line);border-radius:9px;background:var(--panel-2);padding:9px 10px;margin-bottom:7px;cursor:pointer}
.fg-card:hover{border-color:var(--edge-2)}
.fg-card.active{border-color:var(--amber);background:#2a2410}
.fg-card.wip{border-left:2px solid var(--amber-dim)}
.fg-card-title{color:var(--ink-2);font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-card-sub{color:var(--dim);font-size:11px;margin-top:3px;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.fg-mono{font-family:var(--mono);color:var(--dim)}
.fg-badges{display:flex;gap:4px;margin-top:6px}
.fg-badge{font-size:12px}

/* pills */
.fg-pill{font-size:9.5px;letter-spacing:.05em;border-radius:4px;padding:1px 5px;border:1px solid var(--edge);color:var(--dim)}
.fg-pill.type{color:var(--ink);border-color:var(--edge-2)}
.fg-pill.lvl{color:var(--amber);border-color:var(--amber-dim)}
.fg-pill.prefix{color:var(--sel);border-color:var(--amber-dim);text-transform:capitalize}
.fg-pill.tier-mortal{color:var(--dim)}
.fg-pill.tier-minor{color:#c9c24a;border-color:#6f6a2e}
.fg-pill.tier-major{color:var(--cross);border-color:#6a3a2a}
.fg-pill.pc{color:var(--ok);border-color:#3a6b40}
.fg-pill.npc{color:var(--dim)}

/* ---- canvas / editor ---- */
.fg-canvas{display:flex;flex-direction:column;min-width:0;min-height:0;background:radial-gradient(140% 120% at 50% 0%,#232a30 0%,#15181c 70%)}
.fg-canvas-scroll{flex:1 1 auto;overflow:auto;padding:18px 22px 8px}
.fg-form{max-width:880px;margin:0 auto}
.fg-editor-empty{max-width:460px;margin:64px auto;text-align:center;color:var(--dim);font-size:13px;line-height:1.7}
.fg-empty-big{font-size:46px;opacity:.3;margin-bottom:10px}
.fg-secgrid{display:flex;flex-direction:column;gap:2px}
.fg-sublabel{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber-2);margin:12px 0 6px}

/* button grids */
/* uniform cells — equal width (1fr columns) AND equal height (grid-auto-rows:1fr)
   so the class-group buttons line up as a clean grid (#2-1-2) */
.fg-btngrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));grid-auto-rows:1fr;gap:6px;margin:2px 0 6px}
.fg-btngrid.compact{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:5px}
.fg-gridbtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:40px;background:var(--panel-2);border:1px solid var(--edge);
  color:var(--ink);border-radius:8px;padding:9px 8px;font-size:12.5px;cursor:pointer;text-align:center}
.fg-gridbtn-lbl{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fg-gridbtn:hover{border-color:var(--edge-2)}
.fg-gridbtn:focus-visible{outline:2px solid var(--amber-dim);outline-offset:1px}
.fg-gridbtn.active{border-color:var(--amber);background:#2a2410;color:var(--amber)}
.fg-gridbtn.danger.active{border-color:var(--err);background:#2a1614;color:var(--err)}
.fg-gridbtn-sub{font-size:9.5px;color:var(--dim);letter-spacing:.04em}
.fg-gridbtn.active .fg-gridbtn-sub{color:var(--amber-2)}

/* classes */
.fg-classgroups .fg-classgrouphdr{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);margin:8px 0 3px}

/* stats */
.fg-statsbody{display:flex;flex-direction:column}
.fg-statblock{margin-bottom:6px}
.fg-statgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.fg-statgrid.pools{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
/* Core stats: exactly two columns, filled top-to-bottom per column (A1–A4, B1–B4) */
/* #f3 — row-major flow so Tab goes across (STR→INT→CON→WIS…); the DOM interleaves
 * the two columns (editor.js) to keep the visual STR/CON/DEX/AGI-down layout. */
.fg-statgrid.core2{grid-template-columns:repeat(2,1fr)}
.fg-statcell{position:relative;--warn:0;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;
  gap:2px 8px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:6px 9px;background:var(--panel-2)}
.fg-statcell.pool{background:#1f2530;border-color:#33414f}
.fg-statlbl{grid-column:1;grid-row:1;font-size:11px;color:var(--dim)}
.fg-statnum{grid-column:1;grid-row:2;width:100%}
.fg-statcell .fg-cost{grid-column:2;grid-row:2;color:var(--dim);font-size:11px;font-family:var(--mono);min-width:30px;text-align:right}
.fg-statcell.over{border-color:color-mix(in srgb,var(--err) calc(var(--warn)*100%),var(--edge))}
.fg-statcell.over .fg-statnum{color:color-mix(in srgb,var(--err) calc(var(--warn)*85%),var(--ink-2))}
.fg-statcell.ro{opacity:.85}
.fg-statcell .fg-ro{grid-column:1;grid-row:2;color:var(--amber);font-size:14px}
.fg-pool .fg-statnum{font-size:15px}
.fg-reqreduce{color:var(--dim);font-size:11.5px;margin-top:8px;padding:6px 9px;border:1px dashed var(--line);border-radius:7px}
.fg-weapondmg{font-size:12.5px;margin:6px 0;padding:6px 9px;border:1px solid var(--line);border-radius:7px;background:var(--panel-2)}
.fg-weapondmg .fg-dim{color:var(--dim)}
.fg-goldval{color:var(--ink-2);font-size:13px}
/* #f6 — the "with multiplier:" tail: a little smaller, a little lighter */
.fg-goldval-mult{font-size:.85em;color:var(--dim)}
.fg-band-valrow{display:flex;align-items:center;gap:6px}
.fg-band-valrow .cx-input{max-width:200px}
.fg-band-warn{color:var(--amber);font-size:12px;margin:2px 0 8px}
.fg-band-warn[hidden]{display:none}
.fg-band-heal{font-size:12.5px;color:var(--ink-2);line-height:1.6}   /* plain inline text — a flex row trimmed the spaces between the parts */
.fg-band-hp{color:#69c074;font-weight:600;font-variant-numeric:tabular-nums;margin:0 1px}
.fg-band-i{display:inline-block;margin-left:3px;color:var(--dim);cursor:help;font-size:13px}
.fg-band-i:hover,.fg-band-i:focus{color:var(--amber);outline:none}
.fg-band-ref{font-size:10.5px;color:var(--dim);margin-top:6px}
/* #f1 — Game Balance value legend (button + modal) */
.fg-legend-btn{margin-left:auto;font-size:11px;padding:3px 9px;border:1px solid var(--edge);border-radius:6px;background:var(--panel-2);color:var(--dim);cursor:pointer}
.fg-legend-btn:hover{color:var(--ink-2);border-color:var(--amber-2)}
.fg-legend{max-width:452px;font-size:12.5px;line-height:1.5}
.fg-legend h4{margin:15px 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--amber)}
.fg-legend h4:first-child{margin-top:0}
.fg-legend-ladder,.fg-legend-corel{display:flex;flex-direction:column;gap:3px}
.fg-legend-row{display:flex;gap:12px;align-items:baseline}
.fg-legend-v{min-width:66px;color:var(--ink-2);text-align:right;font-weight:600;white-space:pre}
.fg-legend-d{color:var(--ink)}
.fg-legend-note,.fg-legend-key{color:var(--dim);font-size:11.5px;margin:6px 0 0}
.fg-legend-formula{color:var(--ink-2);background:var(--panel-2);border:1px solid var(--edge);border-radius:6px;padding:6px 9px;display:inline-block;margin:2px 0}
.fg-legend-list{margin:6px 0 0;padding-left:18px;color:var(--ink)}
.fg-legend-list li{margin:2px 0}
/* #f2 — orphaned-class-reference cleanup banner on the Game Balance page */
.fg-orphan-note{display:flex;gap:10px;align-items:flex-start;margin:0 0 14px;padding:10px 12px;border:1px solid var(--amber-2);border-left-width:3px;border-radius:8px;background:rgba(255,194,77,.06)}
.fg-orphan-ico{color:var(--amber);font-size:15px;line-height:1.3}
.fg-orphan-body{flex:1;min-width:0}
.fg-orphan-head{color:var(--ink-2);font-size:12.5px;font-weight:600}
.fg-orphan-sub{color:var(--dim);font-size:11.5px;margin-top:3px;line-height:1.45}
/* #f7 — Nodeka import: the affix button on Short name, the search dialog, the checklist */
.fg-input-affix{display:flex;align-items:stretch;gap:6px}
.fg-input-affix>.cx-input,.fg-input-affix>input{flex:1;min-width:0}
.fg-nk-btn{display:inline-flex;align-items:center;gap:0;padding:0 9px;border:1px solid var(--edge);border-radius:7px;background:var(--panel-2);color:var(--dim);cursor:pointer;font-size:13px;line-height:1;white-space:nowrap}
.fg-nk-btn:hover{color:var(--ink-2);border-color:var(--amber-2)}
.fg-nk-glass{font-size:13px}
.fg-nk-i{font-size:10px;font-weight:700;margin-left:-4px;transform:translateY(-3px);color:var(--amber)}
.fg-nk-head{display:flex;align-items:baseline;gap:12px;margin-bottom:6px}
.fg-nk-search{flex:1}
.fg-nk-count{font-size:11px;white-space:nowrap}
.fg-nk-note{font-size:11.5px;margin-bottom:8px}
.fg-nk-results{max-height:min(56vh,420px);overflow:auto;border:1px solid var(--line);border-radius:8px}
.fg-nk-row{display:flex;justify-content:space-between;gap:12px;align-items:baseline;width:100%;text-align:left;background:transparent;border:0;border-bottom:1px solid var(--line);color:var(--ink);padding:7px 10px;cursor:pointer;font-size:12.5px}
.fg-nk-row:last-child{border-bottom:0}
.fg-nk-row:hover{background:var(--panel-2)}
.fg-nk-sn{color:var(--ink-2)}
.fg-nk-meta{font-size:11px;white-space:nowrap}
.fg-nk-empty{padding:12px 10px;font-size:12.5px}
.fg-nk-empty.err{color:var(--err)}
/* the checklist panel in Diagnostics */
.fg-nkref{border:1px solid var(--amber-2);border-radius:9px;background:rgba(255,194,77,.05);padding:9px 10px;margin-bottom:12px}
.fg-nkref-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.fg-nkref-title{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--amber)}
.fg-nkref-sn{color:var(--ink-2);text-transform:none;letter-spacing:0;font-weight:600}
.fg-nkref-clear{border:0;background:transparent;color:var(--dim);cursor:pointer;font-size:15px;line-height:1;padding:0 2px}
.fg-nkref-clear:hover{color:var(--ink-2)}
.fg-nkref-rows{display:flex;flex-direction:column;gap:1px;max-height:340px;overflow:auto}
.fg-nkref-row{display:grid;grid-template-columns:auto auto 1fr;gap:6px 8px;align-items:baseline;font-size:11.5px;padding:2px 0;cursor:pointer}
.fg-nkref-row input{margin:0;accent-color:var(--amber-2)}
.fg-nkref-k{color:var(--dim);text-transform:uppercase;font-size:10px;letter-spacing:.05em;white-space:nowrap}
.fg-nkref-v{color:var(--ink-2);word-break:break-word}
.fg-nkref-note{grid-column:2 / -1;color:var(--dim);font-size:10.5px;line-height:1.4}
.fg-nkref-row.manual .fg-nkref-note{color:var(--amber)}
.fg-nkref-foot{font-size:10.5px;margin-top:6px}
.fg-reserved{color:var(--dim);font-size:12.5px;font-style:italic}
.fg-forcebadge{color:var(--err);font-size:12px;border:1px solid #6a3a2a;border-radius:7px;padding:7px 10px;background:#2a1614}
.fg-forcereason{color:var(--dim);font-style:italic}
.fg-dim{color:var(--dim)}

/* tag input (keywords) */
.fg-taginput{display:flex;flex-wrap:wrap;gap:5px;border:1px solid var(--edge);border-radius:7px;padding:6px 8px;background:var(--panel-2)}
.fg-tag{display:inline-flex;align-items:center;gap:5px;background:var(--panel-3);border:1px solid var(--edge);border-radius:6px;padding:2px 4px 2px 8px;font-size:12px;color:var(--ink)}
.fg-tag-x{background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px;line-height:1;padding:0 3px}
.fg-tag-x:hover{color:var(--err)}
.fg-tagentry{flex:1 1 90px;background:none;border:none;color:var(--ink-2);font-size:12.5px;padding:2px;min-width:90px}
.fg-tagentry:focus{outline:none}

/* action bar */
.fg-actionbar{flex:0 0 auto;display:flex;align-items:center;gap:9px;padding:10px 18px;background:var(--panel);border-top:1px solid var(--edge)}
.fg-action-status{color:var(--dim);font-size:12px}
.fg-action-hint{color:var(--dim);font-size:12px}

/* ---- diagnostics pane ---- */
.fg-diag{background:var(--panel);border-left:1px solid var(--edge);overflow:auto;padding:16px}
.fg-diag-h{margin:0 0 12px;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--amber)}
.fg-diag-h3{margin:16px 0 8px;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-2);border-top:1px solid var(--line);padding-top:12px}
.fg-diag-empty,.fg-diag-note{color:var(--dim);font-size:12px;line-height:1.6}
.fg-diag-err{color:var(--err);background:#2a1614;border:1px solid #6a3a2a;border-radius:8px;padding:8px 11px;font-size:12px;margin-bottom:10px}
.fg-calcbox{display:flex;flex-direction:column;gap:2px}
.fg-calcrow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid var(--line)}
.fg-calcrow.strong .fg-calc-value{font-size:16px;font-weight:600}
.fg-calc-label{color:var(--dim);font-size:12px;cursor:help;border-bottom:1px dotted var(--edge)}
.fg-calc-value{color:var(--ink-2);font-size:13px}
.fg-fitwrap{margin:12px 0 4px}
.fg-fit-cap{display:flex;justify-content:space-between;font-size:10.5px;color:var(--dim);margin-bottom:4px;text-transform:uppercase;letter-spacing:.08em}
.fg-fitbar{position:relative;height:10px;border-radius:6px;background:var(--panel-3);overflow:hidden}
.fg-fitbar-fill{height:100%;border-radius:6px;transition:width .2s,background .2s}
.fg-fitbar-tick{position:absolute;top:-2px;bottom:-2px;left:100%;width:0}
.fg-costtable{display:flex;flex-direction:column;font-size:12px}
.fg-costhdr,.fg-costrow{display:grid;grid-template-columns:1fr 52px 60px;gap:6px;padding:4px 0}
.fg-costhdr{color:var(--amber-2);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;border-bottom:1px solid var(--line);cursor:help}
.fg-costhdr span:not(:first-child),.fg-costrow span:not(:first-child){text-align:right}
.fg-costrow{color:var(--ink);border-bottom:1px solid var(--line)}
.fg-validation{display:flex;flex-direction:column;gap:6px}
.fg-vmsg{display:flex;gap:8px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:7px 10px;background:var(--panel-2);font-size:12px;line-height:1.45}
.fg-vmsg.error{border-color:#6a3a2a}.fg-vmsg.warning{border-color:#6f6a2e}.fg-vmsg.ok{border-color:#3a6b40}
.fg-vicon{flex:0 0 auto;font-size:11px}
.fg-xr{margin-top:14px}
.fg-xr-head{display:flex;align-items:center;gap:6px;cursor:pointer}
.fg-xr-head .fg-diag-h3{border-top:0;padding-top:0;margin:0}
.fg-sec-caret{color:var(--dim);font-size:11px}
.fg-xr-body{display:flex;flex-direction:column;gap:7px;margin-top:9px}
.fg-xr-line{font-size:12px}
.fg-xr-line.warn{color:var(--amber)}
.fg-xr-k{display:block;color:var(--amber-2);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;margin-bottom:2px}
.fg-xr-v{color:var(--ink);line-height:1.5}

/* ---- unique tracker ---- */
.fg-u-head{max-width:980px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.fg-u-title{margin:0;font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--amber)}
.fg-u-tabs{display:flex;gap:4px}
.fg-u-tab{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);font-size:12px;padding:6px 13px;border-radius:7px;cursor:pointer}
.fg-u-tab.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.fg-u-body{max-width:980px;margin:14px auto 0}
.fg-u-search{width:100%}
.fg-u-results{display:flex;flex-direction:column;gap:3px;max-height:240px;overflow:auto;margin:8px 0}
.fg-u-result{display:flex;justify-content:space-between;gap:10px;text-align:left;background:var(--panel-2);border:1px solid var(--line);color:var(--ink);border-radius:7px;padding:8px 11px;font-size:12.5px;cursor:pointer}
.fg-u-result:hover{border-color:var(--amber-dim)}
.fg-u-result.active{border-color:var(--amber);color:var(--amber)}
.fg-u-basecard{display:flex;align-items:center;gap:10px;background:var(--panel-2);border:1px solid var(--edge);border-radius:8px;padding:10px 12px;margin:6px 0}
.fg-u-rollbar{display:flex;gap:8px;align-items:center;margin:8px 0 4px}
.fg-u-builder{flex:0 0 200px}
.fg-u-candidates{display:flex;flex-direction:column;gap:7px}
.fg-u-cand{display:flex;align-items:center;gap:12px;justify-content:space-between;border:1px solid var(--line);border-radius:9px;background:var(--panel-2);padding:10px 12px}
.fg-u-cand.empty{opacity:.6}
.fg-u-cand-main{flex:1 1 auto;min-width:0}
.fg-u-cand-deltas{color:var(--ink-2);font-size:13px}
.fg-u-cand-meta{display:flex;align-items:center;gap:10px;margin-top:6px}
.fg-u-cand-bar,.fg-u-minibar{flex:1 1 auto;height:6px;border-radius:4px;background:var(--panel-3);overflow:hidden;max-width:160px}
.fg-u-cand-fill,.fg-u-minifill{height:100%;background:linear-gradient(90deg,var(--amber-2),var(--amber));border-radius:4px}
.fg-u-cand-acts{display:flex;gap:6px;flex:0 0 auto}
.fg-u-filters{display:flex;gap:8px;margin-bottom:10px}
.fg-u-table{display:flex;flex-direction:column}
.fg-u-trow{display:grid;grid-template-columns:1.4fr 1.6fr .9fr .9fr 1.1fr .8fr;gap:10px;align-items:center;padding:9px 8px;border-bottom:1px solid var(--line);font-size:12px;cursor:pointer}
.fg-u-trow:hover{background:var(--panel-2)}
.fg-u-trow.open{background:#2a2410}
.fg-u-thead{color:var(--amber-2);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;cursor:default}
.fg-u-thead:hover{background:none}
.fg-u-rune{color:var(--sel);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:copy}
.fg-u-roll{display:flex;align-items:center;gap:6px}
.fg-u-custody{grid-column:1/-1;border-bottom:1px solid var(--line);background:var(--panel);padding:12px 14px}
.fg-u-timeline{display:flex;flex-direction:column;gap:9px;margin-bottom:12px}
.fg-u-tl{display:flex;gap:10px;align-items:flex-start}
.fg-u-tl-dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:var(--amber);margin-top:5px}
.fg-u-addxfer{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.fg-u-addxfer .cx-input{flex:1 1 140px}
.fg-u-exports{display:flex;gap:8px;margin-top:10px}

/* ---- meta pages (in-canvas, §feedback #4) ---- */
.fg-meta-head{max-width:1200px;margin:0 auto 6px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--line)}
.fg-meta-subtabs{display:flex;gap:4px;flex-wrap:wrap}
.fg-meta-subtab{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);font-size:12px;padding:6px 12px;border-radius:7px;cursor:pointer}
.fg-meta-subtab.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.fg-meta-delta{color:var(--amber);font-size:12px}
.fg-meta-page{max-width:1480px;margin:12px auto 0;overflow-x:auto}
.fg-meta-page>p{margin:0 0 12px}
/* global (non-tier) balance field, e.g. the gold value cap */
.fg-meta-global{display:flex;align-items:center;gap:10px;margin-top:16px}
.fg-meta-global .fg-statlbl{position:static;font-size:12px;color:var(--dim)}
.fg-meta-global .fg-mcell{flex:0 0 160px;width:160px}
/* width:max-content only — no min-width:100%, which used to leave a phantom empty
   column of flex slack on the right of short tables (#2-1-3). */
.fg-mtable{display:inline-flex;flex-direction:column;width:max-content;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.fg-mrow{display:flex;gap:0;border-bottom:1px solid var(--line)}
.fg-mrow:last-child{border-bottom:0}
.fg-mhead{position:sticky;top:0;z-index:2;background:var(--panel-3)}
.fg-mhead span{flex:0 0 74px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--amber-2);text-transform:uppercase;letter-spacing:.03em;padding:9px 4px;text-align:center}
.fg-mhead span:first-child{flex:0 0 190px;justify-content:flex-start;text-align:left;padding-left:12px}
.fg-mrow-h{flex:0 0 190px;display:flex;align-items:center;position:sticky;left:0;z-index:1;background:var(--panel-2);color:var(--ink);font-size:12.5px;padding:8px 12px;border-right:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-mcell{flex:0 0 74px;width:74px;background:var(--panel);border:0;border-right:1px solid var(--line);color:var(--ink-2);font-size:12.5px;padding:9px 6px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fg-mcell:focus{outline:none;background:#2a2410;color:var(--amber)}
.fg-mcell-ro{display:flex;align-items:center;justify-content:center;color:var(--dim)}
.fg-mtable-wide .fg-mhead span,.fg-mtable-wide .fg-mcell{flex:0 0 130px;width:130px}
/* keep the row-label column aligned between header + rows in wide tables (§ feedback #3) */
.fg-mtable-wide .fg-mhead span:first-child{flex:0 0 190px;width:190px}
.fg-mboolwrap{flex:0 0 74px;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);background:var(--panel)}
.fg-mbool{accent-color:var(--amber);width:16px;height:16px}
.fg-groups{display:flex;flex-direction:column;gap:12px;margin-top:8px;max-width:980px}
.fg-group-card{border:1px solid var(--line);border-radius:9px;background:var(--panel-2);padding:12px 14px}
.fg-group-head{display:flex;gap:12px;align-items:flex-end;margin-bottom:10px}
.fg-group-fields{display:flex;gap:12px;flex:1 1 auto}
.fg-group-field{display:flex;flex-direction:column;gap:4px}
.fg-group-field .fg-statlbl{font-size:10px}
.fg-group-label{min-width:220px}
.fg-group-tag{min-width:160px}

/* "Any" class button (§ feedback b) */
.fg-any{width:100%;flex-direction:row;justify-content:flex-start;gap:10px;margin-bottom:8px;border-color:var(--edge-2)}
.fg-any .fg-gridbtn-lbl{font-weight:600}
.fg-any.active{border-color:var(--amber);background:#2a2410;color:var(--amber)}
.fg-any.active .fg-gridbtn-sub{color:var(--amber-2)}

/* changed-but-unsaved cell highlight (§ feedback d) */
.fg-mcell.changed,.fg-mboolwrap.changed{box-shadow:inset 0 0 0 1.5px rgba(224,138,60,.65)}

/* compact class-stat-costs table + tier badges (§ feedback e) */
.fg-mtable-costs .fg-mhead span,.fg-mtable-costs .fg-mcell{flex:0 0 64px;width:64px;font-size:12px}
/* wider class-name column so base-class names aren't truncated (#2-1-3) */
.fg-mtable-costs .fg-mhead span:first-child,.fg-mtable-costs .fg-mrow-h{flex:0 0 210px;width:210px}
.fg-mrow-h-costs{display:flex;align-items:center;gap:6px;justify-content:space-between}
.fg-rh-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Class Stat Costs: tools sidebar + copy/paste affordances */
.fg-cost-layout{display:flex;gap:16px;align-items:flex-start}
.fg-cost-side{flex:0 0 190px;position:sticky;top:0;display:flex;flex-direction:column;gap:6px}
.fg-cost-tablewrap{flex:1 1 auto;min-width:0;overflow-x:auto}
.fg-side-h{color:var(--amber-2);font-size:11px;letter-spacing:.06em;text-transform:uppercase;margin-top:6px}
.fg-cost-pills{display:flex;flex-wrap:wrap;gap:5px}
.fg-cost-pill{border:1px solid var(--edge);border-radius:12px;padding:3px 10px;font-size:11.5px;cursor:pointer;
  background:var(--panel-2);color:var(--dim)}
.fg-cost-pill:hover{border-color:var(--edge-2)}
.fg-cost-pill.on{border-color:var(--amber);color:var(--amber);background:#2a2410}
.fg-side-actions{display:flex;gap:6px}
.fg-side-mini{border:1px solid var(--edge);border-radius:6px;background:var(--panel-2);color:var(--ink);
  font-size:11px;padding:3px 8px;cursor:pointer}
.fg-side-mini:hover{border-color:var(--edge-2)}
.fg-copy-status{border:1px solid var(--ok);border-radius:7px;padding:8px;background:rgba(105,192,116,.08);font-size:12px}
.fg-copy-status b{color:var(--ok)}
.fg-copyable{cursor:copy}
.fg-mtable.fg-pasting .fg-copyable{cursor:cell}
.fg-mtable.fg-pasting .fg-mrow:hover .fg-mrow-h{background:rgba(105,192,116,.14)}
.fg-mrow.fg-buf-src .fg-mrow-h{outline:1px solid var(--ok);outline-offset:-1px}
.fg-tier-badge{flex:0 0 auto;font-size:9.5px;font-weight:600;border-radius:4px;padding:1px 5px;border:1px solid var(--edge)}
.fg-tier-badge.mortal{color:var(--dim)}
.fg-tier-badge.minor{color:#c9c24a;border-color:#6f6a2e}
.fg-tier-badge.major{color:var(--cross);border-color:#6a3a2a}

/* dialogs */
.fg-picklist{display:flex;flex-direction:column;gap:9px;min-width:380px}
.fg-pick-rows{max-height:50vh;overflow:auto;display:flex;flex-direction:column;gap:3px}
.fg-pick-row{text-align:left;background:var(--panel-2);border:1px solid var(--line);color:var(--ink);border-radius:7px;padding:9px 11px;font-size:13px;cursor:pointer}
.fg-pick-row:hover{border-color:var(--amber);color:var(--amber)}
.fg-listline{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12.5px;padding:7px 0;border-bottom:1px solid var(--line)}
.fg-listline .btn{padding:4px 9px;font-size:11.5px}
.fg-dlg-form{display:flex;flex-direction:column;gap:10px}
.fg-modal-list{margin:6px 0;padding-left:18px;color:var(--ink);font-size:12.5px;line-height:1.7}
.fg-help{font-size:13px;line-height:1.65;color:var(--ink)}
.fg-help code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12px}

/* collapsible diagnostics sections (§ feedback #7 / #10) */
.fg-diag-sec{border-top:1px solid var(--line)}
.fg-diag-sec:first-of-type{border-top:0}
.fg-diag-sec-head{display:flex;align-items:center;gap:6px;cursor:pointer;padding:10px 0 8px;user-select:none}
.fg-diag-sec-head:hover .fg-diag-sec-title{color:var(--amber)}
.fg-diag-sec-title{margin:0;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-2)}
.fg-diag-sec-body{padding-bottom:10px}
.fg-diag-sec-body .fg-fitwrap{margin-top:12px}

/* new-item-file dialog sections (§ feedback #0) */
.fg-dlg-section{margin-bottom:14px}
.fg-dlg-section:last-child{margin-bottom:0}
.fg-dlg-row{display:flex;gap:8px;align-items:center}
.fg-dlg-row .cx-input{flex:1 1 auto}
.fg-dlg-row .btn{flex:0 0 auto}

/* temporary-item lifetime (minutes) — preset select + custom number + live
 * "≈ N days" readout, all on one row (#f0) */
.fg-life-minutes{display:flex;gap:8px;align-items:center}
.fg-life-minutes .cx-select{flex:1 1 auto}
.fg-life-minutes .cx-num{flex:0 0 100px}
.fg-life-hint{color:var(--dim);font-size:12px;white-space:nowrap}

/* ===========================================================================
 * ROOMSMITH — improvement cycle: area page (#75), wizard (#26), stats (#14),
 * exit validator (#9), scatter density (#25).
 * ========================================================================= */
.scatter-range{accent-color:var(--amber);width:120px;vertical-align:middle}

/* area master list as an in-canvas page (#75) */
.area-page{position:absolute;inset:0;z-index:20;background:var(--bg);overflow:auto;padding:14px 18px;display:flex;flex-direction:column}
.area-page[hidden]{display:none}
.area-page-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.area-page-head h2{margin:0;font-size:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
.area-page-head .btn{flex:0 0 auto}
.area-page-table{overflow:auto}
/* per-row inline range bar — the old standalone "range map" lane, folded into the
   table so each row shows where it sits in the global id space */
.rng-track{position:relative;height:12px;min-width:120px;background:var(--panel-2);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.rng-fill{position:absolute;top:0;bottom:0;background:#3a3416;border-left:1px solid var(--amber-dim);border-right:1px solid var(--amber-dim);min-width:2px}
tr.overlap .rng-fill{background:#3a1d18;border-color:#6a3a2a}
/* "insert / add area" rows between and after the table rows */
.area-insert{height:0;text-align:center;position:relative}
.area-insert td{padding:0 !important;border:0 !important}
.area-insert .ins-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;margin:2px auto;
  padding:1px 12px;font-size:12px;line-height:1.5;color:var(--dim);background:transparent;border:1px dashed var(--edge);
  border-radius:12px;cursor:pointer;opacity:.45;transition:opacity .12s,color .12s,border-color .12s}
.area-insert .ins-btn:hover{opacity:1;color:var(--amber);border-color:var(--amber-dim)}
.area-insert.add-end .ins-btn{opacity:.8;border-style:solid;color:var(--amber-2)}
.col-reclaim button{padding:3px 9px;font-size:11.5px}
table.area-index{border-collapse:collapse;width:100%;font-size:12.5px}
table.area-index th{text-align:left;color:var(--amber-2);font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  padding:6px 10px;border-bottom:1px solid var(--edge);cursor:pointer;white-space:nowrap}
table.area-index td{padding:6px 10px;border-bottom:1px solid var(--line);color:var(--ink)}
table.area-index tr.overlap td{background:#2a1614}
table.area-index .btn{padding:3px 9px;font-size:11.5px}

/* new-area wizard (#26) */
.wiz-body{min-width:440px}
.wiz-steps{display:flex;gap:8px;margin-bottom:14px;font-size:11px}
.wiz-step{color:var(--dim);letter-spacing:.04em}
.wiz-step.active{color:var(--amber)}
.wiz-step.done{color:var(--ok)}
.wiz-field{margin:12px 0}
.wiz-field>label{display:block;font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:5px}
.wiz-input{width:100%;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink-2);border-radius:7px;padding:8px 10px;font-size:13px}
.wiz-input:focus{outline:none;border-color:var(--amber-dim)}
.wiz-hint{color:var(--dim);font-size:11px;margin-top:4px;line-height:1.5}
.wiz-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.wiz-tiers{display:flex;gap:14px}
.wiz-tier{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink);cursor:pointer;text-transform:capitalize}
.wiz-tier input{accent-color:var(--amber)}
/* builder chips — tokenize on Space / Tab / , / ; */
.wiz-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;background:var(--panel-2);border:1px solid var(--edge);border-radius:7px;padding:6px 8px;min-height:38px}
.wiz-tags:focus-within{border-color:var(--amber-dim)}
.wiz-tag{display:inline-flex;align-items:center;gap:5px;background:var(--panel);border:1px solid var(--edge);border-radius:6px;padding:3px 4px 3px 9px;font-size:12.5px;color:var(--ink-2)}
.wiz-tag-x{background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px;line-height:1;padding:0 2px}
.wiz-tag-x:hover{color:var(--err)}
.wiz-taginput{flex:1 1 120px;min-width:80px;background:transparent;border:none;outline:none;color:var(--ink-2);font-size:13px;padding:2px}
/* continent picker — exclusive buttons from live data only */
.wiz-picks{display:flex;flex-wrap:wrap;gap:6px}
.wiz-pick{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:7px;padding:6px 12px;font-size:12.5px;cursor:pointer}
.wiz-pick:hover{border-color:var(--amber-dim)}
.wiz-pick.active{border-color:var(--amber);background:#2a2410;color:var(--amber)}

/* area statistics (#14) */
.stat-section{margin:14px 0}
.stat-section h3{margin:0 0 8px;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber-2);
  border-top:1px solid var(--line);padding-top:12px}
.stat-bars{display:flex;flex-direction:column;gap:5px}
.stat-bar-row{display:grid;grid-template-columns:150px 1fr 80px;gap:10px;align-items:center;font-size:12px}
.stat-bar-label{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stat-bar-track{height:12px;background:var(--panel-3);border-radius:6px;overflow:hidden}
.stat-bar-fill{height:100%;border-radius:6px}
.stat-bar-num{color:var(--dim);text-align:right}
.stat-kv{display:grid;grid-template-columns:1fr 1fr;gap:2px 18px}
.stat-kv-row{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:4px 0;border-bottom:1px solid var(--line)}
.stat-kv-row span:first-child{color:var(--dim)}
.stat-kv-row span:last-child{color:var(--ink-2)}

/* exit validator (#9) */
.exval-summary{display:flex;gap:18px;margin-bottom:10px;font-size:12.5px}
.exval-summary .ok{color:var(--ok)}
.exval-summary .warn{color:var(--amber)}
.exval-rows{display:flex;flex-direction:column;gap:4px;max-height:54vh;overflow:auto}
.exval-row{display:grid;grid-template-columns:54px 1fr auto auto auto auto;gap:10px;align-items:center;
  padding:6px 8px;border:1px solid var(--line);border-radius:7px;background:var(--panel-2);font-size:12.5px}
.exval-row.bad{border-color:#6a3a2a;background:#2a1614}
.exval-tag{font-size:10px;border:1px solid var(--edge);border-radius:4px;padding:1px 6px;color:var(--dim)}
.exval-tag.ok{color:var(--ok);border-color:#3a6b40}
.exval-tag.bad{color:var(--err);border-color:#6a3a2a}
.exval-acts{display:flex;gap:5px}
.exval-acts .btn{padding:3px 8px;font-size:11.5px}

/* ==========================================================================
 * LEDGER — .ld-* namespace
 * ========================================================================== */

/* ---- App shell ----------------------------------------------------------- */
.ld-app{position:absolute;inset:0;display:flex;flex-direction:column}
.ld-menubar{flex:0 0 38px;display:flex;align-items:center;gap:6px;padding:0 14px;
  background:var(--panel);border-bottom:1px solid var(--edge)}
.ld-brand{color:var(--amber);font-weight:600;letter-spacing:.24em;font-size:13px;margin-right:12px}
.ld-tabs{display:flex;gap:2px}
.ld-tab{background:none;border:1px solid transparent;color:var(--dim);font-size:13px;
  padding:5px 13px;border-radius:6px;cursor:pointer}
.ld-tab:hover{color:var(--ink);background:var(--panel-2)}
.ld-tab.active{color:var(--amber);background:var(--panel-3)}
.ld-menus{display:flex;gap:2px}
.ld-menu-btn{background:none;border:1px solid transparent;color:var(--ink);font-size:13px;
  padding:6px 11px;border-radius:6px;cursor:pointer}
.ld-menu-btn:hover{background:var(--panel-3);color:var(--amber)}
.ld-status{color:var(--dim);font-size:11.5px;margin-left:auto}
.ld-body{flex:1 1 auto;display:grid;grid-template-columns:280px 1fr;min-height:0}
.ld-app.ld-show-aside .ld-body{grid-template-columns:280px 1fr 300px}
.ld-list{overflow:auto;background:var(--panel);border-right:1px solid var(--edge)}
/* canvas is a flex column: mode-bar/banner pin to the top, the active content
 * (view sheet or editor) fills the rest, so editor save-bars stay on-screen */
.ld-canvas{background:var(--bg);padding:0;display:flex;flex-direction:column;overflow:hidden}
.ld-canvas > *{flex:0 0 auto}
.ld-canvas > .ld-view,
.ld-canvas > .ld-score-sheet,
.ld-canvas > .ld-empty-canvas,
.ld-canvas > .ld-editor-outer{flex:1 1 auto;min-height:0}
.ld-canvas > .ld-view,
.ld-canvas > .ld-score-sheet{overflow:auto}
.ld-aside{display:none;overflow:auto;background:var(--panel);border-left:1px solid var(--edge)}
.ld-app.ld-show-aside .ld-aside{display:block}

/* ---- Right inspector pane (Socials substitution help) ------------------- */
.ld-aside-head{padding:11px 14px 8px;border-bottom:1px solid var(--line)}
.ld-aside-head h3{margin:0;font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--ink-2);text-transform:uppercase}
.ld-aside-head .ld-aside-sub{margin-top:3px;font-size:11.5px;color:var(--dim)}
.ld-aside-body{padding:12px 14px;font-size:12px;color:var(--ink-2)}
.ld-aside-body .ld-aside-grp{margin-bottom:16px}
.ld-aside-body .ld-aside-grp:last-child{margin-bottom:0}
.ld-aside-grp h4{margin:0 0 6px;font-size:11px;font-weight:600;letter-spacing:.05em;color:var(--amber);text-transform:uppercase}
.ld-tok{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:baseline}
.ld-tok code{color:var(--amber);font-size:11.5px;white-space:nowrap}
.ld-tok span{color:var(--dim);font-size:11.5px}
.ld-aside-note{font-size:11px;color:var(--dim);line-height:1.5;border-top:1px solid var(--line);padding-top:10px}
.ld-aside-note code{color:var(--ink-2)}

/* ---- List pane ----------------------------------------------------------- */
.ld-list-head{display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px 6px;border-bottom:1px solid var(--line)}
.ld-list-head h2{margin:0;font-size:13px;font-weight:600;color:var(--ink-2)}
.ld-filter-chips{display:flex;flex-wrap:wrap;gap:4px;padding:6px 12px}
.ld-chip{background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);
  font-size:11.5px;padding:2px 9px;border-radius:999px;cursor:pointer}
.ld-chip:hover{color:var(--ink)}
.ld-chip.active{background:var(--amber-dim);border-color:var(--amber-2);color:var(--amber)}
.ld-card-display{font-size:11px;color:var(--dim);margin-top:1px}
/* category filter needs room for the full "All categories" label */
.ld-cat-sel{flex:0 0 140px}

/* ---- Right pane shared --------------------------------------------------- */
.ld-empty{color:var(--dim);padding:48px 32px;font-size:13px;text-align:center}
.ld-empty-canvas{color:var(--dim);padding:80px 48px;font-size:13.5px;text-align:center;line-height:2}
/* #ledger — list empty-state (stale/empty index → offer a rebuild) */
.ld-empty-list{padding:18px 14px;color:var(--dim);font-size:12.5px;line-height:1.6;text-align:center}
.ld-empty-list p{margin:0 0 10px}
.ld-empty-glyph{font-size:46px;opacity:.3;margin-bottom:10px;line-height:1}
.ld-empty-canvas h3{color:var(--ink-2);font-size:15px;margin:0 0 8px;font-weight:500}
.ld-empty-canvas p{font-size:13px;line-height:1.6;margin:0}
.ld-mode-bar{display:flex;align-items:center;justify-content:flex-end;padding:8px 20px;
  border-bottom:1px solid var(--line);background:var(--panel)}
.ld-view{padding:20px 24px;max-width:860px}
.ld-editor{padding:0 24px 24px}
.ld-editor-outer{display:flex;flex-direction:column;min-height:0}
.ld-editor-outer .ld-editor,
.ld-editor-outer .ld-editor-form{flex:1 1 auto;overflow:auto;padding-top:16px}
/* #ledger-edit — online guard + Admin / GM-Overrides zones */
.ld-online-warn{margin:0 0 12px;padding:8px 12px;border-radius:8px;border:1px solid var(--amber-2);background:rgba(255,194,77,.08);color:var(--ink-2);font-size:12px;line-height:1.5}
.ld-online-warn.hard{border-color:var(--err);background:rgba(239,107,104,.10)}
.ld-zone-head{margin:16px 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);border-bottom:1px solid var(--line);padding-bottom:5px}
.ld-zone-head.gm{color:var(--amber);border-color:var(--amber-2);margin-top:26px}
.ld-gm-warn{margin:0 0 12px;padding:8px 12px;border-radius:8px;border:1px solid var(--amber-2);border-left-width:3px;background:rgba(255,194,77,.06);color:var(--dim);font-size:11.5px;line-height:1.5}
.ld-save-bar{flex:0 0 auto;display:flex;align-items:center;justify-content:flex-end;gap:8px;
  padding:10px 24px;border-top:1px solid var(--line);background:var(--panel)}

/* ---- Player header ------------------------------------------------------- */
.ld-player-hdr{display:flex;align-items:flex-start;justify-content:space-between;
  gap:16px;margin-bottom:16px}
.ld-hdr-main{flex:1}
.ld-name{margin:0 0 4px;font-size:20px;font-weight:700;color:var(--ink-2)}
.ld-tagline{font-size:12px;color:var(--dim);font-style:italic;margin-bottom:6px}
.ld-hdr-sub{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12px;color:var(--dim)}
.ld-sub-id{color:var(--dim);font-size:11px}
.ld-sub-meta{color:var(--dim);font-size:11px}
.ld-hdr-actions{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-start;padding-top:2px}
.ld-online-banner{background:#1a3a1a;border:1px solid #3a6b40;color:var(--ok);
  border-radius:8px;padding:7px 14px;font-size:12.5px;margin-bottom:14px;display:flex;align-items:center;gap:8px}

/* ---- Badges -------------------------------------------------------------- */
.ld-badge{display:inline-block;font-size:11px;padding:1px 7px;border-radius:5px;
  border:1px solid var(--edge);color:var(--dim);background:var(--panel-2)}
.ld-badge.pk{color:var(--err);border-color:#6a3a2a;background:#2a1614}
.ld-badge.clan{color:#6aaeef;border-color:#2a4a7f;background:#162032}
.ld-badge.cat{color:var(--amber);border-color:var(--amber-2);background:var(--amber-dim)}
.ld-badge.online{color:var(--ok);border-color:#3a6b40;background:#1a3a1a}
.ld-badge.rank-leader{color:var(--amber);border-color:var(--amber-2);background:var(--amber-dim)}
.ld-badge.rank-coleader{color:#9a80d0;border-color:#4a3080;background:#1e1630}
.ld-badge.rank-member{color:var(--dim);border-color:var(--edge)}

/* ---- Sections (accordion) ------------------------------------------------ */
.ld-sec{border-bottom:1px solid var(--line)}
.ld-sec.req .ld-sec-title::after{content:' *';color:var(--amber);font-size:11px}
.ld-sec-head{display:flex;align-items:center;gap:8px;padding:10px 0 9px;cursor:pointer;user-select:none}
.ld-sec-head:hover .ld-sec-title{color:var(--ink-2)}
.ld-sec-caret{color:var(--dim);font-size:12px;width:14px;text-align:center}
.ld-sec-title{margin:0;font-size:12.5px;font-weight:600;color:var(--ink);letter-spacing:.03em}
.ld-sec-badge{background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);
  font-size:10px;padding:1px 6px;border-radius:5px;margin-left:auto}
.ld-sec-body{padding-bottom:14px}

/* ---- Fields -------------------------------------------------------------- */
.ld-field{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.ld-field.wide{grid-column:1/-1}
.ld-label{font-size:11px;color:var(--dim);letter-spacing:.03em}
.ld-hint{font-size:11px;color:var(--dim);font-style:italic}
.ld-err{font-size:11px;color:var(--err);margin-top:1px}
.ld-field.has-err .cx-input{border-color:var(--err)}
.ld-locked-field{display:flex;align-items:center;gap:7px;background:var(--panel-3);
  border:1px solid var(--edge);border-radius:7px;padding:5px 10px;font-size:12.5px}
.ld-locked-val{color:var(--dim);flex:1}
.ld-lock-icon{font-size:13px}

/* ---- KV pairs ------------------------------------------------------------ */
.ld-kv{display:flex;gap:8px;align-items:baseline;font-size:12.5px;padding:3px 0}
.ld-kv-k{color:var(--dim);min-width:120px;flex:0 0 auto}
.ld-kv-v{color:var(--ink-2)}
.ld-kv-v.mono{font-family:var(--mono)}
.ld-kv-v.muted{color:var(--dim)}

/* ---- Gauges -------------------------------------------------------------- */
.ld-gauge{margin-bottom:8px}
.ld-gauge-row{display:flex;justify-content:space-between;font-size:12px;margin-bottom:3px}
.ld-gauge-label{color:var(--dim)}
.ld-gauge-vals{color:var(--ink-2);font-size:11.5px}
.ld-gauge-track{height:8px;background:var(--panel-3);border-radius:4px;overflow:hidden}
.ld-gauge-fill{height:100%;border-radius:4px;transition:width .2s}

/* ---- Stat table ---------------------------------------------------------- */
.ld-stat-table{border-collapse:collapse;width:100%;font-size:12.5px;margin-bottom:8px}
.ld-stat-table th{text-align:left;color:var(--dim);font-weight:normal;font-size:11px;
  padding:4px 8px 4px 0;border-bottom:1px solid var(--line)}
.ld-stat-table td{padding:4px 8px 4px 0;color:var(--ink-2);border-bottom:1px solid var(--line)}
.ld-stat-table td.stat-name{color:var(--dim)}
.ld-stat-table td.buffed{color:var(--ok)}
.ld-stat-table td.debuffed{color:#6aaeef}

/* ---- Alignment bar ------------------------------------------------------- */
.ld-align-bar{height:10px;background:var(--panel-3);border-radius:5px;
  position:relative;overflow:visible;margin:8px 0 4px}
.ld-align-fill{position:absolute;top:0;height:100%;border-radius:5px}
.ld-align-labels{display:flex;justify-content:space-between;font-size:10px;color:var(--dim);margin-top:2px}

/* ---- Kill data ----------------------------------------------------------- */
.ld-kill-table{border-collapse:collapse;font-size:12.5px}
.ld-kill-table th{color:var(--dim);font-weight:normal;font-size:11px;padding:4px 12px 4px 0;border-bottom:1px solid var(--line)}
.ld-kill-table td{padding:4px 12px 4px 0;color:var(--ink-2);border-bottom:1px solid var(--line)}

/* ---- Currency ------------------------------------------------------------ */
.ld-currency{display:flex;gap:18px;align-items:center}
.ld-currency{flex-wrap:wrap}
/* #ledger-view — new score-sheet blocks (abilities / affects / equipment / donations) */
.ld-ability-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px 14px}
.ld-ability{display:flex;justify-content:space-between;gap:8px;font-size:12px;padding:2px 0;border-bottom:1px solid var(--line)}
.ld-ability-name{color:var(--ink)}
.ld-ability-rank{color:var(--amber)}
.ld-affects{display:flex;flex-direction:column;gap:4px}
.ld-affect{display:flex;align-items:baseline;gap:10px;font-size:12px;padding:3px 0;border-bottom:1px solid var(--line)}
.ld-affect-name{color:var(--ink-2)}
.ld-affect-cat{color:var(--dim);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}
.ld-affect-ttl{color:var(--amber)}
.ld-affect-by{color:var(--dim);font-size:11px}
.ld-eq-list{display:flex;flex-direction:column;gap:3px}
.ld-eq-row{display:flex;align-items:baseline;gap:10px;font-size:12.5px;padding:3px 0;border-bottom:1px solid var(--line)}
.ld-eq-slot{min-width:74px;color:var(--dim);text-transform:capitalize;font-size:11px}
.ld-eq-ttl{color:var(--dim);font-size:11px}
.ld-reveal-body{margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.ld-coin{display:flex;align-items:center;gap:6px;font-size:13px}
.ld-coin-icon{font-size:16px}
.ld-coin-val{color:var(--ink-2);font-weight:600}
.ld-coin-label{color:var(--dim);font-size:11px}

/* ---- Bio/notes block ----------------------------------------------------- */
.ld-bio-block{font-size:12.5px;color:var(--ink);line-height:1.7;
  background:var(--panel-2);border:1px solid var(--line);border-radius:8px;
  padding:12px 14px;margin-bottom:16px;white-space:pre-wrap}

/* ---- Admin note ---------------------------------------------------------- */
.ld-note-list{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.ld-note{background:var(--panel-2);border:1px solid var(--line);border-radius:7px;
  padding:8px 12px;font-size:12px}
.ld-note-meta{color:var(--dim);font-size:10.5px;margin-bottom:3px}
.ld-addrow{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:8px}

/* ---- Admin action buttons ------------------------------------------------ */
.ld-admin-btns{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.ld-btn-admin{font-size:12px;padding:4px 10px;border-radius:6px;border:1px solid var(--amber-2);
  background:var(--amber-dim);color:var(--amber);cursor:pointer}
.ld-btn-admin:hover{background:var(--amber-2);color:#000}
.ld-btn-admin.active{background:var(--amber-2);color:#000}
.ld-btn-danger{font-size:12px;padding:4px 10px;border-radius:6px;border:1px solid #6a3a2a;
  background:#2a1614;color:var(--err);cursor:pointer}
.ld-btn-danger:hover{background:var(--err);color:#fff}

/* ---- IP / security table ------------------------------------------------- */
.ld-ip-table{border-collapse:collapse;font-size:12px;width:100%}
.ld-ip-table th{color:var(--dim);font-weight:normal;font-size:10.5px;padding:3px 10px 3px 0;border-bottom:1px solid var(--line)}
.ld-ip-table td{padding:3px 10px 3px 0;color:var(--ink);border-bottom:1px solid var(--line)}

/* ---- Social strings editor ----------------------------------------------- */
.ld-social-strings{display:flex;flex-direction:column;gap:10px}
.ld-soc-row{display:grid;grid-template-columns:200px 1fr;gap:12px;align-items:start;font-size:12.5px}
.ld-soc-key{display:flex;flex-direction:column;gap:2px}
.ld-soc-label{color:var(--ink)}
.ld-soc-val{color:var(--ink-2);padding:4px 0;line-height:1.5}
.ld-soc-hint{font-size:11px;color:var(--dim);font-style:italic;grid-column:1/-1}
.ld-soc-preview-wrap .ld-sec{border:1px solid var(--line);border-radius:8px;margin-top:14px;padding:0 14px}

/* ---- History timeline ---------------------------------------------------- */
.ld-history{display:flex;flex-direction:column;gap:0}
.ld-hist-list{display:flex;flex-direction:column;gap:0}
.ld-hist-empty{color:var(--dim);font-size:12.5px;padding:12px 0}
.ld-hist-entry{display:grid;grid-template-columns:18px 1fr;gap:10px;
  padding:7px 0;border-bottom:1px solid var(--line)}
.ld-hist-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}
.ld-hist-content{display:flex;flex-direction:column;gap:2px}
.ld-hist-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px}
.ld-hist-type{font-weight:600}
.ld-hist-actor{color:var(--dim);font-size:11.5px}
.ld-hist-ts{color:var(--dim);font-size:11px;margin-left:auto}
.ld-hist-detail{color:var(--dim);font-size:11.5px;word-break:break-all}
.ld-hist-form{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;
  padding:12px;margin-top:6px;display:flex;flex-direction:column;gap:6px}
.ld-hist-form-btns{display:flex;gap:6px;justify-content:flex-end}
.cx-addrow{background:none;border:1px dashed var(--edge);color:var(--dim);font-size:12px;
  padding:5px 10px;border-radius:6px;cursor:pointer;margin-top:8px}
.cx-addrow:hover{border-color:var(--amber-2);color:var(--amber)}

/* ---- Clan members -------------------------------------------------------- */
.ld-member-list{display:flex;flex-direction:column;gap:6px}
.ld-member-row{display:flex;align-items:center;gap:8px;font-size:12.5px;
  background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:5px 10px}
.ld-member-name{flex:1;color:var(--ink-2)}
.ld-player-link{color:var(--amber);cursor:pointer;text-decoration:underline}
.ld-player-link:hover{color:var(--ink-2)}
.ld-area-link{color:#6aaeef;cursor:pointer;text-decoration:underline}
.ld-area-link:hover{color:var(--ink-2)}
.ld-sub-count{color:var(--dim);font-size:11px;padding:6px 0}
.ld-table-wrap{overflow:auto}

/* ---- Hall entries -------------------------------------------------------- */
.ld-hall-entry{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:5px 0;
  border-bottom:1px solid var(--line)}
.ld-hall-entry.editable{flex-direction:column;align-items:stretch;gap:4px;
  background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:12px;margin-bottom:8px}

/* ---- Tables (shared) ----------------------------------------------------- */
.ld-table{border-collapse:collapse;width:100%;font-size:12.5px}
.ld-table th{text-align:left;color:var(--dim);font-weight:normal;font-size:11px;
  padding:5px 12px 5px 0;border-bottom:1px solid var(--line)}
.ld-table td{padding:5px 12px 5px 0;color:var(--ink-2);border-bottom:1px solid var(--line)}

/* ---- Misc ---------------------------------------------------------------- */
.ld-sep{height:1px;background:var(--line);margin:8px 0}
.ld-empty-sec{color:var(--dim);font-size:12px;padding:6px 0}
.ld-review{display:flex;flex-direction:column;gap:4px;padding:8px 0}
.ld-sub-id,.ld-sub-meta{font-size:11px}
.dim{color:var(--dim)}
.muted{color:var(--dim);font-style:italic}

/* ---- Wizard -------------------------------------------------------------- */
.ld-wizard{display:flex;flex-direction:column;gap:14px;min-width:460px}
.ld-wizard-prog{display:flex;gap:6px;align-items:center}
.ld-wiz-step{font-size:11.5px;padding:3px 10px;border-radius:5px;
  background:var(--panel-2);border:1px solid var(--edge);color:var(--dim)}
.ld-wiz-step.active{background:var(--amber-dim);border-color:var(--amber-2);color:var(--amber)}
.ld-wiz-step.done{border-color:#3a6b40;color:var(--ok)}
.ld-wizard-body{display:flex;flex-direction:column;gap:8px}
.ld-wizard-btns{display:flex;justify-content:flex-end;gap:8px;padding-top:6px;border-top:1px solid var(--line)}

/* ---- Flag chips ---------------------------------------------------------- */
.ld-flag-chips{display:flex;flex-wrap:wrap;gap:5px}
.ld-flag-chip{font-size:11px;padding:2px 8px;border-radius:5px;
  background:var(--panel-3);border:1px solid var(--edge);color:var(--dim)}
.ld-flag-chip.on{background:#1a3a1a;border-color:#3a6b40;color:var(--ok)}
.ld-flag-chip.danger{background:#2a1614;border-color:#6a3a2a;color:var(--err)}

/* ---- Staff permissions --------------------------------------------------- */
.ld-perm-chips{display:flex;flex-wrap:wrap;gap:4px}
.ld-perm-chip{font-size:10.5px;padding:2px 7px;border-radius:4px;
  border:1px solid var(--edge);background:var(--panel-3);color:var(--dim)}
.ld-perm-chip.on{background:#162032;border-color:#2a4a7f;color:#6aaeef}

/* ---- Ledger cross-module links + suite-bar counts ------------------------ */
.open-counts{color:var(--dim);font-size:11px;letter-spacing:.02em}
.ld-entity-link{color:var(--ink-2);border-bottom:1px dotted var(--edge-2);cursor:context-menu}
.ld-entity-link:hover{color:#6aaeef;border-bottom-color:#6aaeef}
.ld-muted{color:var(--dim)}
/* fuzzy player suggestions in the clan roster editor */
.ld-suggest{display:flex;flex-direction:column;gap:1px;margin-top:4px;
  border:1px solid var(--edge);border-radius:7px;overflow:hidden;background:var(--panel-2)}
.ld-suggest-row{display:block;width:100%;text-align:left;background:none;border:0;cursor:pointer;
  color:var(--ink);font-size:12.5px;padding:6px 10px;border-bottom:1px solid var(--line)}
.ld-suggest-row:last-child{border-bottom:0}
.ld-suggest-row:hover{background:var(--panel-3)}

/* ---- Ledger inventory ---------------------------------------------------- */
.ld-inv-block{margin-top:8px}
.ld-inv-head{font-size:11px;color:var(--amber-2);letter-spacing:.06em;text-transform:uppercase;margin:6px 0 3px}
.ld-inv-items{display:flex;flex-wrap:wrap;gap:6px}
.ld-inv-items.nested{padding-left:14px;border-left:1px solid var(--line);margin-left:2px}
.ld-inv-item{background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:3px 9px;font-size:12.5px}
.ld-inv-container{margin-top:8px;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.ld-inv-chead{display:flex;align-items:center;gap:4px;font-size:12.5px;margin-bottom:5px}
.ld-inv-cap{color:var(--dim);font-size:11.5px}
.ld-inv-editor{display:flex;flex-direction:column;gap:6px}
.ld-inv-erow{display:grid;grid-template-columns:90px 1fr 70px auto;gap:6px;align-items:center}
.ld-inv-csec{border:1px solid var(--line);border-radius:8px;padding:8px;margin-top:6px;background:var(--panel-2)}

/* ===========================================================================
 * DIRECTOR — administration: sign-in gate, identity chip, users, permissions,
 * change queue. Prefix: .dir-* (plus .login-* / .who-* for the shell pieces).
 * =========================================================================== */

/* ---- suite-bar identity chip -------------------------------------------- */
.who{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--dim)}
.who-name{color:var(--ink);letter-spacing:.02em}
.who-mode{border:1px solid var(--edge);border-radius:5px;padding:1px 6px;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase}
.who-mode.pub{color:var(--ok);border-color:#2f5c37}
.who-mode.rev{color:var(--amber);border-color:var(--amber-dim)}
.who-break{color:#1a1206;background:var(--err);border-radius:5px;padding:1px 6px;font-weight:600}
.who-out{background:none;border:1px solid transparent;color:var(--dim);font-size:11px;cursor:pointer;padding:2px 5px;border-radius:5px}
.who-out:hover{color:var(--amber);border-color:var(--edge)}

/* ---- sign-in gate -------------------------------------------------------- */
.login-gate{position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 120% at 50% 0%,#232a30 0%,#101317 70%)}
.login-card{width:min(420px,92vw);background:var(--panel);border:1px solid var(--edge);border-radius:12px;
  padding:30px 30px 26px;box-shadow:0 24px 70px #0009}
.login-brand{color:var(--amber);font-weight:600;letter-spacing:.30em;font-size:15px}
.login-sub{color:var(--dim);font-size:11.5px;letter-spacing:.04em;margin-top:3px}
.login-title{font-size:16px;color:var(--ink-2);margin:22px 0 4px;font-weight:600}
.login-note{color:var(--dim);font-size:12px;line-height:1.6;margin:0 0 12px}
.login-label{display:block;color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.1em;margin:12px 0 5px}
.login-input{width:100%;background:var(--panel-2);border:1px solid var(--edge);border-radius:var(--radius);
  color:var(--ink);padding:9px 11px;font-size:13.5px}
.login-input:focus{outline:none;border-color:var(--amber-2)}
.login-check{margin-top:14px;color:var(--dim);font-size:12px}
.login-err{margin-top:14px;color:var(--err);font-size:12.5px;line-height:1.5}
.login-btn{margin-top:18px;width:100%;background:#2a2410;border:1px solid var(--amber);color:var(--amber);
  border-radius:var(--radius);padding:11px;font-size:13.5px;cursor:pointer;letter-spacing:.04em}
.login-btn:hover{background:#332b12}
.login-btn:disabled{opacity:.5;cursor:default}
.login-hint{margin:16px 0 0;color:var(--dim);font-size:11.5px;line-height:1.6;
  border-top:1px solid var(--line);padding-top:12px}

/* ---- Director shell ------------------------------------------------------ */
.dir-app{position:absolute;inset:0;display:grid;grid-template-rows:38px 1fr}
.dir-menubar{display:flex;align-items:center;gap:16px;padding:0 14px;background:var(--panel);
  border-bottom:1px solid var(--edge)}
.dir-nav{display:flex;gap:2px}
.dir-tab{background:none;border:1px solid transparent;color:var(--dim);font-size:12.5px;
  padding:5px 11px;border-radius:6px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.dir-tab:hover{color:var(--ink);background:var(--panel-2)}
.dir-tab.active{color:var(--amber);border-color:var(--edge);background:var(--panel-3)}
.dir-badge{background:var(--amber);color:#1a1206;border-radius:9px;padding:0 6px;font-size:10.5px;font-weight:600}
.dir-who{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--dim)}
.dir-who-name{color:var(--ink)}
.dir-who-role{border:1px solid var(--edge);border-radius:5px;padding:1px 6px;font-size:10.5px;letter-spacing:.06em}
.dir-who-role.admin{color:var(--amber);border-color:var(--amber-dim)}
.dir-who-pub{color:var(--ok)} .dir-who-rev{color:var(--amber)}
.dir-page{overflow:auto;padding:22px 26px 60px}
.dir-body{max-width:1100px}
.dir-h{margin:0 0 14px;font-size:17px;color:var(--ink-2);font-weight:600}
.dir-h4{margin:0 0 8px;font-size:12.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.1em}
.dir-sect{margin:24px 0;padding:16px 18px;background:var(--panel);border:1px solid var(--line);border-radius:10px}
.dir-sect h3{margin:0 0 10px;font-size:14px;color:var(--ink-2);font-weight:600}
.dir-warn{background:#3a1f1c;border:1px solid #6d3430;color:#ffb8b4;border-radius:8px;
  padding:11px 14px;margin-bottom:16px;font-size:12.5px;line-height:1.6}
.dir-warn-inline{color:var(--amber);font-size:12px;margin:6px 0}
.dir-list{margin:0;padding-left:18px;color:var(--dim);font-size:12.5px;line-height:1.8}
.dir-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}

/* ---- dashboard stats ----------------------------------------------------- */
.dir-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.dir-stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px 18px}
.dir-stat-n{font-size:30px;color:var(--amber);line-height:1.1}
.dir-stat-l{font-size:12.5px;color:var(--ink);margin-top:4px}
.dir-stat-s{font-size:11.5px;color:var(--dim);margin-top:3px}

/* ---- tables -------------------------------------------------------------- */
.dir-table-wrap{overflow-x:auto}
.dir-table{width:100%;border-collapse:collapse;font-size:12.5px}
.dir-table th{text-align:left;color:var(--dim);font-weight:500;font-size:11px;text-transform:uppercase;
  letter-spacing:.09em;padding:6px 10px;border-bottom:1px solid var(--edge);white-space:nowrap}
.dir-table td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top}

/* ---- pills --------------------------------------------------------------- */
.dir-pill{display:inline-block;border:1px solid var(--edge);border-radius:5px;padding:1px 7px;
  font-size:10.5px;letter-spacing:.05em;color:var(--dim);white-space:nowrap}
.dir-pill.admin{color:var(--amber);border-color:var(--amber-dim)}
.dir-pill.pending{color:var(--amber);border-color:var(--amber-dim)}
.dir-pill.approved{color:var(--ok);border-color:#2f5c37}
.dir-pill.rejected{color:var(--err);border-color:#6d3430}
.dir-pill.withdrawn{color:var(--dim)}

/* ---- users: list + detail ------------------------------------------------ */
.dir-split{display:grid;grid-template-columns:250px 1fr;gap:18px;align-items:start}
.dir-userlist{display:flex;flex-direction:column;gap:5px;position:sticky;top:0}
.dir-userrow{text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:9px;
  padding:9px 11px;cursor:pointer;display:flex;flex-direction:column;gap:3px;color:var(--ink)}
.dir-userrow:hover{border-color:var(--edge-2)}
.dir-userrow.active{border-color:var(--amber);background:var(--panel-3)}
.dir-userrow.off{opacity:.55}
.dir-user-name{font-size:13px;color:var(--ink-2)}
.dir-user-sub{font-size:11px;color:var(--dim)}
.dir-user-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}
.dir-userdetail{min-width:0}
.dir-user-head{display:flex;align-items:baseline;gap:10px;margin-bottom:4px}
.dir-user-head h3{margin:0;font-size:16px;color:var(--ink-2)}
.dir-field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.dir-field label{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.09em}
.dir-input{background:var(--panel-2);border:1px solid var(--edge);border-radius:var(--radius);
  color:var(--ink);padding:7px 10px;font-size:13px;width:100%}
.dir-input:focus{outline:none;border-color:var(--amber-2)}
.dir-static{padding:7px 0;font-size:13px;color:var(--ink)}
.dir-grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.dir-grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 16px}

/* ---- Releases page ------------------------------------------------------- */
.rel-row{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.rel-row .dir-field{margin-bottom:0}
.rel-setwrap{padding-bottom:1px}
.rel-chan{min-width:110px}
.rel-slug{color:var(--dim);font-size:12.5px;display:flex;flex-direction:column;gap:3px}
.rel-prev{font-size:11.5px;opacity:.85}
.rel-static-label{margin:2px 0 4px}
.rel-fallback{margin-top:2px}
.rel-linkwrap{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.rel-linkrow{display:flex;align-items:center;gap:12px}
.rel-dl{color:var(--amber);font-weight:600;text-decoration:none;font-size:13px}
.rel-dl:hover{text-decoration:underline}
.rel-path{font-size:11.5px;color:var(--ink);background:var(--panel-2);border:1px solid var(--edge);
  border-radius:6px;padding:5px 8px;word-break:break-all;user-select:all}
.rel-serverpath{font-size:11px}
/* server control — 6 buttons: 3 profiles × {Restart, Restart and Update Data} */
.rel-rgrid{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.rel-rrow{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.rel-rbtn{background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:6px;
  padding:8px 12px;font-size:12.5px;cursor:pointer;text-align:center;letter-spacing:.02em}
.rel-rbtn:hover:not(:disabled){border-color:var(--amber-dim,#8a6a2c);color:var(--ink-2)}
.rel-rbtn.data{border-color:var(--amber-dim);color:var(--amber)}          /* "…and Update Data" — does more */
.rel-rbtn.data:hover:not(:disabled){background:#2a2410;border-color:var(--amber)}
.rel-rbtn.danger{border-color:#6d3430;color:#e0908c}                      /* live */
.rel-rbtn.danger:hover:not(:disabled){background:#3a1f1c;border-color:#e06b68;color:#fff}
.rel-rbtn.danger.data{border-color:#8a3a34}
.rel-rbtn:disabled{opacity:.4;cursor:not-allowed}
.pill.rel-owner{border-color:var(--amber);color:var(--amber);margin-left:8px}

/* ---- permission grid ----------------------------------------------------- */
.dir-presets{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:10px 0 16px}
.dir-presets .btn{padding:5px 9px;font-size:12px}
.dir-perm-group{margin-bottom:16px}
.dir-perm-title{color:var(--amber-2);font-size:11.5px;text-transform:uppercase;letter-spacing:.1em;
  margin-bottom:6px;border-bottom:1px solid var(--line);padding-bottom:4px}
.dir-perm{display:grid;grid-template-columns:auto auto auto 1fr;align-items:center;gap:8px;
  padding:5px 6px;border-radius:6px;cursor:pointer;font-size:12.5px}
.dir-perm:hover{background:var(--panel-2)}
.dir-perm-label{color:var(--ink)}
.dir-perm-hint{color:var(--dim);font-size:11.5px;grid-column:1/-1;padding-left:24px;margin-top:-3px}
.dir-tag{border-radius:4px;padding:0 5px;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase}
.dir-tag.meta{color:#9fd3ff;border:1px solid #2f4a63}
.dir-tag.danger{color:var(--err);border:1px solid #6d3430}
.dir-perm-readout{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.dir-areachips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}

/* ---- change queue -------------------------------------------------------- */
.dir-subtabs{display:flex;gap:4px;margin:14px 0}
.dir-subtab{background:none;border:1px solid var(--edge);color:var(--dim);font-size:12px;
  padding:5px 12px;border-radius:6px;cursor:pointer}
.dir-subtab.active{color:var(--amber);border-color:var(--amber);background:#2a2410}
.dir-change{background:var(--panel);border:1px solid var(--line);border-radius:10px;
  padding:14px 16px;margin-bottom:10px}
.dir-change-head{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--ink-2)}
.dir-change-meta{color:var(--dim);font-size:11.5px;margin-top:5px}
.dir-change-lines{margin:9px 0 0;padding-left:18px;color:var(--ink);font-size:12.5px;line-height:1.8}
.dir-change-note{margin-top:8px;color:var(--amber-2);font-size:12px;font-style:italic}
.dir-inspect{max-height:60vh;overflow:auto}
.dir-pre{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:12px;
  font-size:11.5px;line-height:1.55;overflow-x:auto;white-space:pre;color:var(--ink)}
.dir-kv{display:flex;gap:10px;padding:4px 0;border-bottom:1px solid var(--line);font-size:12.5px}
.dir-kv-k{color:var(--dim);min-width:120px}
.dir-kv-v{color:var(--ink)}
/* Roomsmith menubar access badges (multi-user) */
.rs-readonly{color:var(--err);border:1px solid #6d3430;border-radius:5px;padding:2px 7px;
  font-size:11px;letter-spacing:.04em;margin-left:8px;align-self:center;cursor:help}
.rs-reviewed{color:var(--amber);border:1px solid var(--amber-dim);border-radius:5px;padding:2px 7px;
  font-size:11px;letter-spacing:.04em;margin-left:8px;align-self:center;cursor:help}
.dir-selfnote{color:var(--amber);font-size:12px;align-self:center;margin-right:4px}

/* ---- account ↔ character links ------------------------------------------- */
.dir-claims{border-color:var(--amber-dim)}
.dir-claim{background:var(--panel-2);border:1px solid var(--line);border-radius:9px;
  padding:12px 14px;margin-top:10px}
.dir-claim-pair{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13.5px;color:var(--ink-2)}
.dir-claim-arrow{color:var(--amber);font-size:15px;margin:0 2px}
.dir-code{max-width:130px;font-size:19px;letter-spacing:.34em;text-align:center;text-transform:uppercase}
.dir-bigcode{margin:16px 0;padding:18px;text-align:center;font-size:38px;letter-spacing:.34em;
  color:var(--amber);background:var(--panel-2);border:1px solid var(--amber-dim);border-radius:10px;
  user-select:all}
.dir-linkok{color:var(--ok);font-size:12.5px;margin:0}
.dir-field-label{display:block;color:var(--dim);font-size:11px;text-transform:uppercase;
  letter-spacing:.09em;margin:10px 0 5px}
/* Ledger: the Orchestra account a character is linked to */
.ld-orchestra-link{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--amber);
  border:1px solid var(--amber-dim);border-radius:5px;padding:2px 8px}

/* ---- shared area home (Construct / Forge "File > Close" landing) ---------- */
/* Same look as Roomsmith's Areas page, but a full-cover layer inside whichever
 * module pane opened it, so no module has to reshape its grid. */
.area-home{position:absolute;inset:0;z-index:30;background:var(--bg);overflow:auto;
  padding:14px 18px;display:flex;flex-direction:column}
.area-home .area-page-table{overflow:auto}

/* ---- Stacks maintenance: verify/repair findings + action log -------------- */
.st-findings{max-height:46vh;overflow:auto;margin:10px 0;border:1px solid var(--line);
  border-radius:8px;background:var(--panel-2)}
.st-finding{padding:7px 11px;font-size:12.5px;line-height:1.5;border-bottom:1px solid var(--line);color:var(--ink)}
.st-finding:last-child{border-bottom:none}
.st-finding.warn{color:var(--amber)}
/* Stacks: the live <topic>.help badge turns red when that topic is already taken
   (same signal as Construct's attribute-key preview). */
.cx-editor-id.dup{color:var(--err)}

/* ---- permission-gated view-only states (class groups, game balance) ------- */
.cx-input:disabled{opacity:.55;cursor:default}
.fg-viewonly{color:var(--amber);border:1px solid var(--amber-dim);border-radius:7px;
  padding:6px 10px;margin:-2px 0 10px;background:#2a2410}
.fg-gridbtn-ro{opacity:.6;cursor:default}
.fg-gridbtn-ro:hover{border-color:var(--edge)}

/* ---- Forge: view-only balance tables (no forge.meta.edit) ------------------ */
.fg-viewonly-badge{color:var(--amber);border:1px solid var(--amber-dim);border-radius:6px;
  padding:3px 9px;font-size:11px;letter-spacing:.04em;white-space:nowrap;cursor:help}
.fg-btngrid-ro .fg-gridbtn{cursor:default}
.fg-btngrid-ro .fg-gridbtn:hover{border-color:var(--edge)}

/* ---- #queue-merge: change-queue conflict resolver (3-up merge editor) ------- */
.dir-batchbar{display:flex;align-items:center;gap:12px;margin:0 0 14px;padding:10px 12px;
  background:var(--panel-2);border:1px solid var(--edge);border-radius:8px}
.dir-cr-summary{color:var(--dim);font-size:12px;margin-right:auto}
.dir-cr-list{display:flex;flex-direction:column;gap:16px;max-height:64vh;overflow:auto}
.dir-cr-card{border:1px solid var(--edge);border-radius:9px;padding:12px;background:var(--panel)}
.dir-cr-title{display:flex;align-items:center;gap:9px;margin:0 0 9px}
.dir-cr-title b{color:var(--ink-2);font-size:13.5px}
.dir-cr-op{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--amber);
  border:1px solid var(--amber-dim);border-radius:5px;padding:1px 7px}
.dir-cr-cols3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.dir-cr-col{display:flex;flex-direction:column;min-width:0}
.dir-cr-h{font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--dim);margin:0 0 4px}
.dir-cr-pre{margin:0;background:var(--bg);border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-family:var(--mono);font-size:11px;line-height:1.5;color:var(--ink);
  height:230px;overflow:auto;white-space:pre;min-width:0}
.dir-cr-line{display:block}
.dir-cr-line.chg{background:rgba(255,194,77,.14)}
.dir-cr-choices{display:flex;align-items:center;gap:8px;margin-top:10px}
.dir-cr-btn{background:none;border:1px solid var(--edge);color:var(--ink);font-size:12px;
  padding:5px 11px;border-radius:6px;cursor:pointer}
.dir-cr-btn:hover{border-color:var(--amber);color:var(--amber)}
.dir-cr-btn.on{background:var(--panel-3);border-color:var(--amber);color:var(--amber)}
.dir-cr-status{font-size:11.5px;color:var(--dim)}
.dir-cr-status.ok{color:var(--ok)}
.dir-cr-status.err{color:var(--err)}
.dir-cr-edit{width:100%;height:230px;box-sizing:border-box;background:#1c2733;border:1px solid var(--amber-dim);
  border-radius:6px;color:var(--ink-2);padding:8px 10px;font-family:var(--mono);font-size:11px;line-height:1.5;
  resize:none;overflow:auto;white-space:pre}
.dir-cr-edit:focus{outline:none;border-color:var(--amber)}
.dir-cr-err{color:var(--err);font-size:11.5px;margin:6px 0 0;min-height:1em}

/* ---- #queue-merge: applied-change review rows (adds/removes/replaces) ------- */
.dir-ap-list{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px;max-height:38vh;overflow:auto}
.dir-ap-row{border:1px solid var(--line);border-radius:7px;background:var(--panel)}
.dir-ap-head{width:100%;display:flex;align-items:center;gap:9px;background:none;border:none;
  color:var(--ink);font-size:12.5px;padding:7px 10px;cursor:pointer;text-align:left;font-family:var(--mono)}
.dir-ap-head:hover{background:var(--panel-2)}
.dir-ap-caret{color:var(--dim);font-size:10px;width:10px}
.dir-ap-op{font-size:10px;text-transform:uppercase;letter-spacing:.06em;border-radius:5px;padding:1px 7px;white-space:nowrap}
.dir-ap-op.ok{color:var(--ok);border:1px solid #3c6b45}
.dir-ap-op.del{color:var(--err);border:1px solid #6e3a3a}
.dir-ap-op.chg{color:var(--amber);border:1px solid var(--amber-dim)}
.dir-ap-body{padding:0 10px 10px}
.dir-cr-conflict-head{margin:16px 0 6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--amber)}

/* ---- Populate Rooms with Mobs tool (dialogs/populateMobs.js) --------------- */
.pm-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.pm-area{font-family:var(--mono);color:var(--amber);font-weight:600}
.pm-scopebar{display:flex;align-items:center;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.pm-lbl{color:var(--dim);font-size:12px}
.pm-scope{border:1px solid var(--edge);border-radius:7px;padding:4px 10px;cursor:pointer;font-size:12px;
  background:var(--panel-2);color:var(--ink)}
.pm-scope:hover{border-color:var(--edge-2)}
.pm-scope.on{border-color:var(--amber);color:var(--amber);background:#2a2410}
.pm-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:10px}
.pm-tab{border:1px solid transparent;border-bottom:none;border-radius:7px 7px 0 0;padding:6px 16px;cursor:pointer;
  background:transparent;color:var(--dim);font-size:13px}
.pm-tab:hover{color:var(--ink)}
.pm-tab.on{color:var(--amber);border-color:var(--line);background:var(--panel-2)}
.pm-body{min-height:200px}
.pm-picker{border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:10px}
.pm-controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.pm-in{background:var(--panel-3);border:1px solid var(--edge);border-radius:6px;color:var(--ink);
  padding:4px 7px;font-size:12px;font-family:var(--mono)}
.pm-num{width:64px;text-align:right}
.pm-lvl{display:flex;align-items:center;gap:4px;color:var(--dim);font-size:12px}
.pm-lvl .pm-num{width:52px}
/* the generic `.modal input/select{width:100%}` rule would blow these out — beat
 * it with equal-specificity, later-in-source overrides so the pickers stay compact */
.modal input.pm-in, .modal select.pm-in{width:auto}
.modal input.pm-num{width:60px;text-align:right}
.modal input.pm-mini{width:46px;text-align:right}
.modal select.pm-sort{width:118px}
.modal input.pm-weight{width:44px;text-align:right}
.modal input.pm-weight-rb{width:66px;-webkit-appearance:none;-moz-appearance:textfield;appearance:textfield}
.modal input.pm-weight-rb::-webkit-outer-spin-button,.modal input.pm-weight-rb::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.pm-mini{width:46px;text-align:right}
.pm-sort{width:118px}
.pm-moblist{max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:6px;background:var(--panel)}
.pm-mobrow{display:flex;align-items:center;gap:8px;padding:5px 8px;cursor:pointer;border-bottom:1px solid var(--line);user-select:none}
.pm-mobrow:last-child{border-bottom:none}
.pm-mobrow:hover{background:var(--panel-2)}
.pm-mobrow.on{background:#241f10}
/* click-anywhere check box (span, not a real <input>) */
.pm-box{flex:none;width:14px;height:14px;border:1px solid var(--edge-2);border-radius:4px;position:relative}
.pm-box.on{border-color:var(--amber);background:var(--amber)}
.pm-box.on::after{content:'✓';position:absolute;inset:-3px 0 0;text-align:center;font-size:12px;color:#1a1400;font-weight:700}
.pm-mname{flex:0 1 auto;min-width:0;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pm-mlvl{color:var(--dim);font-size:10.5px;border:1px solid var(--line);border-radius:4px;padding:0 4px}
.pm-count{color:var(--dim);font-size:11px}
/* relative-strength meter (by level) — the diffbar's little sibling */
.pm-str{flex:none;width:46px;height:4px;border-radius:3px;background:var(--panel-3);overflow:hidden}
.pm-strbar{display:block;height:100%;border-radius:3px}
.pm-tag{font-size:11px}
.pm-tag.named{color:var(--amber)}
.pm-wwrap{display:inline-flex;align-items:center;gap:6px}
.pm-wwrap.off{opacity:.25}
.pm-weight{width:42px;text-align:right;background:var(--panel-3);border:1px solid var(--edge);border-radius:5px;
  color:var(--ink);padding:2px 4px;font-size:11px;font-family:var(--mono)}
.pm-hint{color:var(--dim);font-size:11px;margin:7px 2px 8px}
.pm-help{color:var(--dim);font-size:12px;line-height:1.5;margin:0 2px 12px;max-width:60ch}
/* compact settings: inline [label][control] chips that wrap */
.pm-fields{display:flex;flex-wrap:wrap;gap:11px 20px;align-items:center;margin:4px 0 12px}
.pm-field{display:inline-flex;align-items:center;gap:8px;font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.04em}
.pm-flbl{white-space:nowrap}
.pm-dash{color:var(--dim);margin:0 3px}
.pm-check{display:inline-flex;align-items:center;gap:5px;font-size:12px;cursor:pointer;color:var(--ink);text-transform:none;letter-spacing:0}
.pm-seg{display:inline-flex;border:1px solid var(--edge);border-radius:6px;overflow:hidden}
.pm-segbtn{border:none;background:var(--panel-2);color:var(--ink);padding:4px 10px;cursor:pointer;font-size:12px}
.pm-segbtn+.pm-segbtn{border-left:1px solid var(--edge)}
.pm-segbtn.on{background:#2a2410;color:var(--amber)}
.pm-sec{border-top:1px solid var(--line);padding-top:8px}
.pm-seclbl{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--dim);
  font-size:11px;letter-spacing:.05em;text-transform:uppercase;margin-bottom:6px}
.pm-preview{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px;min-height:36px}
.pm-stat{font-size:13px;color:var(--ink)}
.pm-stat b{color:var(--amber)}
.pm-capped{color:var(--cross)}
.pm-breakdown{margin-top:7px;display:grid;grid-template-columns:1fr 1fr;gap:2px 18px}
.pm-brow{display:flex;justify-content:space-between;gap:10px;font-size:12px;border-bottom:1px dotted var(--line);padding:1px 0}

.pm-zweights{margin:0 0 12px}
.pm-ztoggle{appearance:none;background:none;border:none;color:var(--dim);cursor:pointer;font-size:11.5px;
  padding:2px 0;letter-spacing:.03em;text-transform:uppercase}
.pm-ztoggle:hover{color:var(--ink-2)}
.pm-ztoggle.on{color:var(--amber)}
.pm-zhint{font-size:11px;line-height:1.5;margin:4px 0 7px;max-width:60ch}
.pm-zgrid{display:flex;flex-wrap:wrap;gap:8px 16px}
.pm-zrow{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--ink)}
.pm-zlbl{color:var(--dim);font-family:var(--mono);font-size:11.5px;min-width:34px}
.pm-zactions{margin-top:8px}
/* rebalance: current→target share on each row */
.pm-rbnow{color:var(--dim);font-size:11px;min-width:52px;text-align:right}
.pm-rbarrow{margin:0 2px}
/* rebalance dials: counts segmented + optional difficulty target */
.pm-rbctl{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:0 0 10px}
.pm-rblbl{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--dim);min-width:52px}
.pm-countin{display:inline-flex;align-items:center;gap:7px}
.pm-diffbody{display:inline-flex;align-items:center;gap:10px;transition:opacity .15s}
.pm-diffbody.off{opacity:.35;pointer-events:none}
.pm-diffslider{width:170px;accent-color:var(--amber)}
.pm-difflbl{font-size:12px;font-weight:600;min-width:120px}
.pm-rbgauge{margin:2px 0 4px}
.pm-rbnote{color:var(--amber);font-size:11.5px;line-height:1.45;margin:2px 0;min-height:0;max-width:64ch}
.pm-rbnote:empty{display:none}
.pm-mobrow.pm-absent .pm-mname{color:var(--dim);font-style:italic}
.pm-mobrow.pm-absent .pm-rbnow{opacity:.6}

/* mob-paint brush: palette % badge + erase-mode toggle tint */
.pm-pct{min-width:38px;text-align:right;color:var(--amber-2);font-size:11px}
#toolOptions button.mob-erase{border-color:var(--err);color:var(--err)}

/* ===========================================================================
 * Mobs board (Area Mob Statistics) — the third side-panel tab (#mobStats).
 * Reuses the difficulty scale/gauge look of Construct's mob diagnostic.
 * =========================================================================== */
#mobStats{padding:0 2px}
.ms-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.ms-head h2{margin:0}
.ms-refresh{appearance:none;background:var(--panel-2);border:1px solid var(--line);border-radius:6px;
  color:var(--dim);width:24px;height:24px;cursor:pointer;font-size:13px;line-height:1}
.ms-refresh:hover{color:var(--amber);border-color:var(--edge-2)}
.ms-empty{color:var(--dim);font-size:12.5px;line-height:1.6;padding:10px 2px}
.ms-empty p{margin:0 0 6px}
.ms-block{margin:0 0 14px;padding-top:11px;border-top:1px solid var(--line)}
.ms-block:first-of-type{border-top:none;padding-top:2px}
.ms-block-h{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--amber-2);margin:0 0 8px}
.ms-line{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12.5px;padding:3px 0}
.ms-lbl{color:var(--dim);white-space:nowrap}
.ms-val{color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}
.ms-line-gauge{flex-direction:column;align-items:stretch;gap:6px;padding:6px 0}
.ms-gauge{margin:0}
.ms-gauge-label{font-size:13px;font-weight:600;margin-bottom:6px}
.ms-gauge-track{height:9px;border-radius:6px;background:var(--panel-3);overflow:hidden}
.ms-gauge-fill{height:100%;border-radius:6px;transition:width .2s}
.ms-gauge-stats{margin-top:7px;display:flex;justify-content:space-between;gap:10px;color:var(--dim);font-size:11px}
.ms-gauge-empty{color:var(--dim);font-size:11.5px;font-style:italic}
.ms-bymob{margin-top:10px}
.ms-bymob-h{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;margin-bottom:5px}
.ms-mrow{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:12px}
.ms-mbar{flex:none;width:44px;height:5px;border-radius:3px;background:var(--panel-3);overflow:hidden}
.ms-mbar-fill{display:block;height:100%;border-radius:3px;background:var(--amber-2)}
.ms-mrow.named .ms-mbar-fill{background:var(--amber)}
.ms-mrow.unknown{opacity:.6}
.ms-mrow.unknown .ms-mbar-fill{background:var(--dim)}
.ms-mname{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
.ms-mrow.named .ms-mname{color:var(--amber)}
.ms-mcount{flex:none;color:var(--dim);font-size:11px}
.ms-more{font-size:11px;margin-top:4px}
.ms-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;padding-top:11px;border-top:1px solid var(--line)}

/* ===========================================================================
 * Concert — game features & releases (reuses the .dir-* module shell). Only the
 * genuinely-new widgets (feature sub-nav + the list / line / staff editors) get
 * their own .cc-* rules.
 * =========================================================================== */
.cc-feat{display:grid;grid-template-columns:212px 1fr;gap:20px;align-items:start}
.cc-featnav{display:flex;flex-direction:column;gap:5px;position:sticky;top:0}
.cc-featrow{text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:9px;
  padding:9px 11px;cursor:pointer;display:flex;flex-direction:column;gap:3px;color:var(--ink)}
.cc-featrow:hover{border-color:var(--edge-2)}
.cc-featrow.active{border-color:var(--amber);background:var(--panel-3)}
.cc-featrow-l{font-size:13px;color:var(--ink-2)}
.cc-featrow-f{font-size:10.5px;color:var(--dim);font-family:var(--mono)}
.cc-feathost{min-width:0}
.cc-feathead{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.cc-feathead .dir-h{margin:0}
.cc-featpath{font-size:11.5px;color:var(--dim);font-family:var(--mono)}
.cc-featblurb{color:var(--dim);font-size:12.5px;line-height:1.55;margin:6px 0 14px;max-width:70ch}
.cc-viewonly{color:var(--amber);border:1px solid var(--amber-dim);border-radius:7px;
  padding:6px 10px;margin:0 0 14px;background:#2a2410;font-size:12.5px}
.cc-featbody{display:flex;flex-direction:column;gap:2px}
.cc-loading{color:var(--dim);font-size:12.5px;padding:14px 0}

.cc-field{margin-bottom:12px;max-width:640px}
.cc-hint{color:var(--dim);font-size:11.5px;line-height:1.5;margin-top:1px}
/* Game features (2026-10-03): every group is a CARD and every setting inside it a TILE, so
 * the eye can tell which switch belongs to which group while clicking around. A tile lights
 * its border while its control has focus; the group title is a strip across the card. */
.cc-fgroup{margin:0 0 14px;padding:12px 14px 10px;border:1px solid var(--edge);border-radius:10px;background:var(--panel-2)}
.cc-fgroup>.dir-h4{margin:-12px -14px 12px;padding:8px 14px;border-bottom:1px solid var(--edge);border-radius:10px 10px 0 0;background:var(--panel);color:var(--ink-2);letter-spacing:.09em}
.cc-fgroup>.dir-h4::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--amber);margin-right:8px;vertical-align:1px}
.cc-featbody .cc-field{margin:0;padding:9px 11px 8px;border:1px solid var(--line);border-radius:8px;background:var(--panel);transition:border-color .12s}
.cc-featbody .cc-field:hover{border-color:var(--edge-2,var(--edge))}
.cc-featbody .cc-field:focus-within{border-color:var(--amber-dim,#8a6a2c)}
.cc-featbody>.cc-field{margin-bottom:8px}                      /* a setting standing on its own (not in a grid) */
.cc-fgroup>.cc-hint{margin:-4px 0 10px}                       /* a group's own explanation sits under the title strip */
/* features.meta ▸ run_time — the 24-hour table (2026-10-03) */
.cc-rt{border-collapse:collapse;font-size:12px;margin-top:8px}
.cc-rt th{text-align:left;font-weight:500;color:var(--dim);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;padding:2px 8px}
.cc-rt td{padding:2px 8px;border-top:1px solid var(--line);vertical-align:middle}
.cc-rt-hour{width:44px;color:var(--ink-2)}
.cc-rt-in.cc-num{width:78px;max-width:78px}
.cc-rt-eff{min-width:120px;font-variant-numeric:tabular-nums}
.cc-rt tr.bad td{background:rgba(239,107,104,.08)}
.cc-rt tr.bad input{border-color:var(--err)}
.cc-rt-bands{font-size:11.5px;color:var(--ink-2);margin:6px 0 2px;line-height:1.5}
.cc-rt-errs{color:var(--err);font-size:12px;margin:4px 0}
.cc-rt-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px;font-size:12px}
.cc-rt-sep{width:14px}
.cc-fgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px 10px}
@media (max-width:900px){.cc-fgrid{grid-template-columns:1fr}}
.cc-num{max-width:130px}
/* #o0 — remort-cost input + its live Δ badge (amount + % vs the loaded baseline) */
.cc-num-wrap{display:flex;align-items:center;gap:8px}
.cc-num-wrap .cc-num{max-width:150px}
.cc-delta{font-size:11px;font-variant-numeric:tabular-nums;padding:1px 7px;border-radius:10px;white-space:nowrap}
.cc-delta.up{color:#8be34a;background:rgba(139,227,74,.12)}
.cc-delta.down{color:#ef6b68;background:rgba(239,107,104,.12)}
.cc-toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);cursor:pointer}
.cc-toggle input{width:15px;height:15px;accent-color:var(--amber)}

/* ordered string lists (rules / motd / word filter) */
.cc-strlist{display:flex;flex-direction:column;gap:6px;margin:2px 0 10px}
.cc-strrow{display:flex;align-items:center;gap:7px}
.cc-strnum{min-width:20px;text-align:right;color:var(--dim);font-size:11.5px;font-family:var(--mono)}
.cc-strinput{flex:1;min-width:0}
.cc-empty{color:var(--dim);font-size:12px;font-style:italic;padding:4px 0}
.cc-icon{background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);border-radius:6px;
  width:26px;height:28px;cursor:pointer;font-size:14px;line-height:1;flex:none}
.cc-icon:hover:not(:disabled){color:var(--ink);border-color:var(--edge-2)}
.cc-icon:disabled{opacity:.3;cursor:default}
.cc-icon.rm:hover:not(:disabled){color:var(--err);border-color:#6d3430}

/* score box — fixed lines with a live column meter */
.cc-linewrap{margin-bottom:10px;max-width:560px}
.cc-linerow{display:flex;align-items:center;gap:10px}
.cc-linemeter{font-size:11px;color:var(--dim);font-family:var(--mono);min-width:46px;text-align:right}
.cc-linemeter.over{color:var(--err);font-weight:600}

/* staff roster */
.cc-stafflist{display:flex;flex-direction:column;gap:10px;margin:4px 0 10px}
.cc-staffrow{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.cc-staffhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.cc-staffgrid{display:grid;grid-template-columns:1.4fr 1.4fr 1fr .6fr;gap:0 16px}
.cc-staffgrid2{display:grid;grid-template-columns:2fr 1fr;gap:0 16px;align-items:end}
.cc-staffgrid .cc-field,.cc-staffgrid2 .cc-field{margin-bottom:4px}
.cc-staffret{padding-bottom:8px}
.cc-wordcol{margin-bottom:22px;max-width:460px}

.cc-save.btn{border-color:var(--amber);color:var(--amber)}
.cc-save.btn:disabled{opacity:.4;border-color:var(--edge);color:var(--dim)}
.cc-savestatus{font-size:12px;color:var(--dim);align-self:center}
.cc-savestatus.dirty{color:var(--amber)}
.cc-savestatus.err{color:var(--err)}

/* left-right On/Off switch (replaces the "off"-labelled checkbox) */
.cc-switchwrap{display:inline-flex;align-items:center;gap:9px}
.cc-switch{position:relative;width:42px;height:23px;border-radius:999px;border:1px solid var(--edge);
  background:var(--panel-3);cursor:pointer;padding:0;flex:none;transition:background .12s,border-color .12s}
.cc-switch .cc-switch-knob{position:absolute;top:2px;left:2px;width:17px;height:17px;border-radius:50%;
  background:var(--dim);transition:transform .12s,background .12s}
.cc-switch.on{background:var(--amber-dim);border-color:var(--amber)}
.cc-switch.on .cc-switch-knob{transform:translateX(19px);background:var(--amber)}
.cc-switch:disabled{opacity:.5;cursor:default}
.cc-switch-lbl{font-size:12.5px;color:var(--dim);min-width:22px}
.cc-switch-lbl.on{color:var(--amber)}

/* word filter — blur the slur list until you actually want to read it */
.cc-blurword{filter:blur(4.5px);transition:filter .1s}
.cc-blurword:hover,.cc-blurword:focus{filter:none}

/* MOTD — dated entry cards (newest first; add at top, "load more" for the rest) */
.cc-motdadd{margin-bottom:12px}
.cc-motdlist{display:flex;flex-direction:column;gap:10px}
.cc-motdcard{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.cc-motdhead{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.cc-motddatelbl{display:inline-flex;align-items:center;gap:7px;font-size:11px;color:var(--dim);
  text-transform:uppercase;letter-spacing:.08em}
.cc-motddate{max-width:170px}
.cc-motdtext{width:100%;resize:vertical;font-family:inherit;line-height:1.5;min-height:62px}
.cc-motdhead .cc-icon{margin-left:auto}
.cc-loadmore{align-self:flex-start}

/* syllables — cipher grid + live preview */
.cc-notearea{width:100%;resize:vertical;font-family:inherit;line-height:1.5;min-height:44px}
.cc-ciphergrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px 12px;margin:4px 0 8px}
.cc-ciphercell{display:flex;align-items:center;gap:6px}
.cc-cipherlbl{font-family:var(--mono);color:var(--ink-2);width:14px;text-align:center;text-transform:uppercase}
.cc-cipherarrow{color:var(--dim);font-size:12px}
.cc-cipherin{width:42px;text-align:center;padding:5px 4px}
.cc-cipherprev{display:flex;align-items:center;gap:10px;max-width:560px}
.cc-cipherprev input{flex:1}
.cc-cipherout{font-family:var(--mono);color:var(--amber);background:var(--panel-2);border:1px solid var(--edge);
  border-radius:6px;padding:6px 10px;min-width:120px;letter-spacing:.06em}

/* donations — reward tier cards */
.cc-tierlist{display:flex;flex-direction:column;gap:12px;margin:4px 0 10px}
.cc-tiercard{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.cc-tierhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.cc-tiergrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:2px 16px}
.cc-tiergrid .cc-field{margin-bottom:6px}
.cc-perksblock{margin-top:8px;border-top:1px solid var(--line);padding-top:8px}
.cc-perkslabel{font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.09em;margin-bottom:6px}
.cc-perklist{display:flex;flex-direction:column;gap:6px}
.cc-perkrow{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap}
.cc-perkrow .cc-field{margin-bottom:0}
.cc-perkadd{margin-top:8px}

/* terms — one card per term: prose (terms.meta) + exp/gold bonus (features.meta) */
.cc-termproselist{display:flex;flex-direction:column;gap:10px;margin:2px 0 10px}
.cc-termbonusrow{margin-top:8px;border-top:1px solid var(--line);padding-top:8px}
.cc-termbonusrow .cc-num{max-width:110px}
.cc-termproselist .cc-motdcard{max-width:70ch}
.cc-termprosehead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}
.cc-termproselabel{font-size:13px;color:var(--ink-2);font-weight:600}
.cc-termprosehead .cc-strnum{min-width:0;text-align:right}
.cc-termproselist .cc-field{margin-bottom:8px}

/* monument requirements — term chips + a small section label */
.cc-reqlabel{font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin:10px 0 3px}
.cc-termchips{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 6px}
.cc-termchip{background:var(--panel-2);border:1px solid var(--edge);color:var(--dim);border-radius:999px;
  padding:4px 11px;font-size:12px;cursor:pointer}
.cc-termchip:hover:not(:disabled){border-color:var(--edge-2);color:var(--ink)}
.cc-termchip.on{background:var(--amber-dim);border-color:var(--amber);color:var(--amber)}
.cc-termchip:disabled{opacity:.5;cursor:default}

/* Releases — Server (top-left) + Data (top-right), Website full-width below */
.cc-relgrid{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start;
  grid-template-areas:"server data" "website website"}
.cc-col-server{grid-area:server}
.cc-col-data{grid-area:data}
.cc-col-website{grid-area:website}
@media (max-width:760px){
  .cc-relgrid{grid-template-columns:1fr;grid-template-areas:"data" "server" "website"}
}
.cc-relcol{min-width:0}
.cc-relcolhead{margin:0 0 10px}
.cc-relcoltitle{margin:0;font-size:13px;color:var(--amber-2);text-transform:uppercase;letter-spacing:.12em;
  border-bottom:1px solid var(--line);padding-bottom:6px}
.cc-relcolhead .muted{margin:6px 0 0}
.cc-relcol .dir-sect{margin:0 0 14px}
.cc-relcol .dir-sect .rel-row{gap:10px}

/* #o0 Data integrity — the suite-wide files-vs-index scan table */
.cc-di-host{margin-top:6px}
.cc-di{border-collapse:collapse;width:100%;max-width:860px;font-size:12.5px}
.cc-di th{text-align:left;color:var(--dim);font-weight:600;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--line);padding:6px 10px}
.cc-di td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.cc-di-type{color:var(--ink-2);font-weight:600;white-space:nowrap}
.cc-di-warnrow{background:#2a2410}
.cc-di-ok{color:#5ec26a;white-space:nowrap}
.cc-di-bad{color:var(--amber);white-space:nowrap}
.cc-di-detail{color:var(--dim);font-size:11px;line-height:1.5;margin-top:3px;max-width:46ch}
.cc-di-fix.btn,.cc-di-open.btn{padding:3px 10px;font-size:12px;white-space:nowrap}
.cc-di-ignore.btn{padding:3px 10px;font-size:12px;white-space:nowrap;border-color:var(--edge);color:var(--dim)}
.cc-di-fixcell{display:flex;gap:6px;flex-wrap:wrap;align-items:center}

/* ---- Concert ▸ Server status mini-dashboard ------------------------------ */
.cc-status{margin:0 0 18px}
.cc-stat-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cc-stat-head h3{margin:0}
.cc-stat-live{display:inline-flex;align-items:center;gap:7px;font-size:13px}
.cc-stat-label{font-weight:600;color:var(--ink-2)}
.cc-stat-ping,.cc-stat-seen{font-size:11.5px}
.cc-stat-dot{width:11px;height:11px;border-radius:50%;background:var(--dim);flex:0 0 auto;box-shadow:0 0 0 3px transparent}
.cc-stat-dot.cc-stat-up{background:#69c074;box-shadow:0 0 0 3px rgba(105,192,116,.18)}
.cc-stat-dot.cc-stat-down{background:var(--err);box-shadow:0 0 0 3px rgba(239,107,104,.18)}
.cc-stat-dot.cc-stat-warn{background:var(--amber)}
.cc-stat-dot.cc-stat-unknown{background:var(--dim)}
.cc-stat-auto{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--dim);cursor:pointer;user-select:none}
.cc-stat-detail{margin-top:12px}
.cc-stat-detail.cc-stale{opacity:.5}
.cc-stat-host{font-size:12px;margin-bottom:10px}
.cc-stat-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.cc-stat-card{border:1px solid var(--edge);border-radius:8px;padding:10px 12px;background:var(--panel-2)}
.cc-stat-card.cc-stat-crashed{border-color:var(--err)}
.cc-stat-cardhead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}
.cc-stat-name{font-weight:600;color:var(--ink-2);font-size:13px}
.cc-stat-kvs{display:grid;grid-template-columns:1fr 1fr;gap:2px 12px;font-size:12px}
.cc-stat-kv{display:flex;justify-content:space-between;gap:8px}
.cc-stat-kv .muted{text-transform:uppercase;font-size:10px;letter-spacing:.04em}
.cc-pill{font-size:10px;line-height:1.6;padding:0 8px;border-radius:9px;text-transform:uppercase;letter-spacing:.03em;
  border:1px solid var(--edge);color:var(--dim);white-space:nowrap}
.cc-pill-up{color:#69c074;border-color:#3f6b47;background:rgba(105,192,116,.10)}
.cc-pill-down{color:var(--err);border-color:#7a2f2e;background:rgba(239,107,104,.10)}
.cc-pill-warn{color:var(--amber);border-color:var(--amber-dim,#8a6a2c);background:rgba(224,167,60,.10)}
.cc-pill-unknown{color:var(--dim);border-color:var(--edge);background:transparent}
.cc-stat-exit{margin-top:7px;font-size:11.5px;color:var(--err)}

/* "new data needed" pill (amber) — head badge, inline variant, and bundle box */
.cc-datapill{display:inline-flex;align-items:center;font-size:10px;line-height:1.7;padding:0 9px;border-radius:9px;
  text-transform:uppercase;letter-spacing:.04em;color:var(--amber);border:1px solid var(--amber-dim,#8a6a2c);
  background:rgba(224,167,60,.12);white-space:nowrap}
.cc-datapill-inline{text-transform:none;letter-spacing:0;font-size:11px}
/* #o3 — the class-level display above outranks the [hidden] UA rule, so the bundle
   box's pill never hid (it read "new data needed" even right after a fresh bundle) */
.cc-datapill[hidden]{display:none}
.cc-sect-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cc-sect-head h3{margin:0}

/* Data reference line (rollback context) + unreachable banner */
.cc-dataref{font-size:12px;margin:0 0 12px}
.cc-unreach{color:var(--err);font-size:12.5px;margin:0 0 12px}

/* ---- Full-width per-server rows (status + Start/Stop/Restart/Rollback) ---- */
.cc-stat-rows{display:flex;flex-direction:column;gap:8px}
.cc-prow{border:1px solid var(--edge);border-radius:8px;padding:10px 12px 10px 8px;background:var(--panel-2);
  display:grid;grid-template-columns:auto 1fr;gap:8px 8px;align-items:start}   /* ⠿ | name · state · facts / data line / buttons (2026-10-03) */
.cc-prow-crashed{border-color:var(--err)}
.cc-prow-grip{cursor:grab;color:var(--dim);user-select:none;font-size:15px;line-height:1;padding:3px 4px 0 2px;align-self:stretch}
.cc-prow-grip:hover{color:var(--amber)}
.cc-prow-grip:active{cursor:grabbing}
.cc-prow-dragging{opacity:.45}
.cc-prow-over{outline:1px dashed var(--amber);outline-offset:2px}
.cc-prow-main{min-width:0;display:flex;flex-direction:column;gap:6px}
.cc-prow-head{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap}
.cc-prow-name{font-weight:600;color:var(--ink-2);font-size:14px;text-transform:capitalize}
.cc-prow-facts{display:flex;flex-wrap:wrap;gap:4px 18px;font-size:12px;margin-left:4px}   /* one row beside the name when it fits, wraps under it when not */
.cc-prow-data{margin-top:4px;font-size:11px;line-height:1.5}   /* #n0 per-profile data status + its own "new data needed" pill */
.cc-fact{display:inline-flex;align-items:baseline;gap:5px}
.cc-fact-k{text-transform:uppercase;font-size:10px;letter-spacing:.04em}
.cc-fact-v{color:var(--ink);font-variant-numeric:tabular-nums}
.cc-prow-actions{display:flex;justify-content:flex-start;margin-top:2px}   /* the buttons are a row of their own, under the facts */
.cc-btns{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}
.cc-opbtn{white-space:nowrap}
.cc-opbtn.cc-dim{opacity:.32}
.cc-opbtn.cc-dim:hover{border-color:var(--edge);color:var(--ink)}   /* no hover affordance when dimmed */
.cc-norun{font-size:11.5px;font-style:italic}
.cc-prow .cc-stat-exit,.cc-prow .cc-stat-verify{grid-column:1 / -1}
@media (max-width:720px){
  .cc-prow-actions{justify-content:flex-start}
  .cc-btns{justify-content:flex-start}
}

/* ---- verify block: readable rows, not a cramped inline run ---- */
.cc-stat-verify{margin-top:10px;padding-top:9px;border-top:1px solid var(--line)}
.cc-verify-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cc-verify-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--dim)}   /* #o2 which check this is */
.cc-stat-verify-2{opacity:.8}                                        /* the box's-own-data check, under the bundle check */
.cc-verify-clear{margin-left:auto;background:none;border:1px solid var(--line);border-radius:6px;color:var(--dim);font-size:10.5px;padding:1px 7px;cursor:pointer}
.cc-verify-clear:hover{border-color:var(--amber);color:var(--amber)}
.cc-verify-cleared{font-size:11.5px}                                 /* a cleared verdict collapses to one line until the next check differs */
.cc-opbtn.primary:not(.cc-dim){border-color:var(--amber-dim,#8a6a2c);color:var(--amber)}   /* #o2 Verify latest bundle */
.cc-opbtn.primary:hover:not(:disabled){background:#2a2410;border-color:var(--amber)}
.cc-stat-counts{display:flex;flex-wrap:wrap;gap:4px 8px;font-size:11px;margin-top:6px}
.cc-count{display:inline-block;padding:0 7px;border:1px solid var(--edge);border-radius:8px;font-variant-numeric:tabular-nums}
.cc-stat-samples{margin:7px 0 0;padding-left:16px;font-size:11.5px;line-height:1.55;max-height:150px;overflow:auto}
.cc-samp-err{color:var(--err)}
.cc-samp-warn{color:var(--amber)}

/* ---- Construct ▸ Mob Stats (statsView.js, round 4 — 2026-10-01) -------------
 * A full-height app layout: header · [areas rail | tabs], each pane scrolling on
 * its own. Every control shows its state: segmented buttons fill amber when on,
 * chips carry a ✓, ticked areas show their series colour + shape. */
.cx-canvas-scroll.cx-st-host{overflow:hidden;padding:0}
.cx-st{height:100%;display:flex;flex-direction:column;min-height:0}
.cx-st .muted{color:var(--dim)}
.cx-st-head{flex:0 0 auto;padding:12px 18px 10px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:9px}
.cx-st-titlebar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cx-st-titlebar h2{margin:0;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
.cx-st-titlebar .btn{padding:4px 10px;font-size:12px}
.cx-st-summary{font-size:11.5px;color:var(--dim)}
.cx-st-busy{font-size:11px;color:var(--amber);border:1px solid var(--amber-dim);border-radius:9px;padding:1px 8px}
.cx-st-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cx-st-controls .cx-select{width:auto;min-width:170px;padding:4px 8px;font-size:12px}
.cx-st-ctllab{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.cx-st-err{color:var(--err);font-size:12px;padding:16px}
/* segmented control: the active option is filled + amber; the rest read as available */
.cx-st-seg{display:inline-flex;border:1px solid var(--edge);border-radius:8px;overflow:hidden;background:var(--panel-2)}
.cx-st-segbtn{background:none;border:none;border-right:1px solid var(--edge);color:var(--ink);font:inherit;font-size:12px;padding:5px 11px;cursor:pointer}
.cx-st-segbtn:last-child{border-right:none}
.cx-st-segbtn:hover{background:var(--panel-3);color:var(--ink-2)}
.cx-st-segbtn.on{background:#2a2410;color:var(--amber);font-weight:600;box-shadow:inset 0 -2px 0 var(--amber)}
.cx-st-seg.sm .cx-st-segbtn{font-size:11px;padding:3px 8px}
/* toggle chip: ✓ + amber outline when on */
.cx-st-chip{display:inline-flex;align-items:center;gap:5px;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:12px;font:inherit;font-size:11.5px;padding:2px 10px 2px 6px;cursor:pointer}
.cx-st-chip .ck{display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;border:1px solid var(--edge-2);border-radius:3px;font-size:10px;line-height:1}
.cx-st-chip:hover{border-color:var(--edge-2);color:var(--ink-2)}
.cx-st-chip.on{border-color:var(--amber);color:var(--amber);background:#2a2410}
.cx-st-chip.on .ck{border-color:var(--amber);background:var(--amber);color:#1b1b1b;font-weight:700}
.cx-st-link{background:none;border:none;color:var(--amber-2);font:inherit;font-size:11.5px;cursor:pointer;padding:0;text-decoration:underline;text-underline-offset:2px}
.cx-st-link:hover{color:var(--amber)}
.cx-st .dot,.cx-st-legend i.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:-1px;flex:0 0 auto}
.cx-st b.sw{font-weight:400;margin-right:5px;font-size:11px}
/* body: rail + main */
.cx-st-body{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:290px minmax(0,1fr)}
.cx-st-rail{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line);background:var(--panel)}
.cx-st-railhead{padding:12px 14px 6px}
.cx-st-railhead h3{margin:0;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-2)}
.cx-st-railhead p{margin:4px 0 0;font-size:11px;color:var(--dim);line-height:1.45}
.cx-st-rail > .cx-st-seg{margin:4px 14px 8px;align-self:flex-start}
.cx-st-railq{margin:0 14px 8px;width:auto;font-size:12px;padding:4px 8px}
.cx-st-raillist{flex:1 1 auto;min-height:0;overflow:auto;padding:0 6px 6px}
.cx-st-arow{display:grid;grid-template-columns:18px minmax(0,1fr) 8px auto 20px;align-items:center;gap:7px;height:30px;padding:0 6px 0 8px;border-radius:6px;cursor:pointer;font-size:12px;color:var(--ink);border:1px solid transparent}
.cx-st-arow:hover{background:var(--panel-2);border-color:var(--edge)}
.cx-st-arow.on{background:#232830;border-color:var(--edge-2);color:var(--ink-2)}
.cx-st-arow .cb{width:16px;height:16px;border:1.5px solid var(--edge-2);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:9px;line-height:1}
.cx-st-arow.on .cb{border-width:2px;background:#15181c}
.cx-st-arow .cb.world{border:none;background:#79838d;border-radius:50%;width:10px;height:10px;margin-left:3px}
.cx-st-arow.world{cursor:default;color:var(--dim);font-style:italic;border-bottom:1px dashed var(--line);border-radius:0;margin-bottom:3px}
.cx-st-arow.world:hover{background:none;border-color:transparent;border-bottom-color:var(--line)}
.cx-st-arow .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-st-arow .nm .cont{color:var(--dim)}
.cx-st-arow.cont .nm{color:var(--dim)}
.cx-st-arow .fd{width:8px;height:8px;border-radius:50%}
.cx-st-arow .val{font-size:11px;white-space:nowrap;text-align:right;color:var(--ink)}
.cx-st-arow .val.muted{color:var(--dim)}
.cx-st-arow .val.ok,.cx-st .ok{color:#69c074}
.cx-st-arow .val.ok2,.cx-st .ok2{color:#9ad07a}
.cx-st-arow .val.warn,.cx-st .warn{color:#e08a3c}
.cx-st-arow .val.bad,.cx-st .bad{color:#ef6b68}
.cx-st-arow .go{background:none;border:1px solid transparent;color:var(--dim);border-radius:5px;width:20px;height:20px;padding:0;font-size:11px;cursor:pointer;opacity:.55}
.cx-st-arow:hover .go{opacity:1;border-color:var(--edge)}
.cx-st-arow .go:hover{color:var(--amber);border-color:var(--amber-dim)}
.cx-st-railfoot{flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 14px;border-top:1px solid var(--line);font-size:11px;color:var(--dim)}
.cx-st-main{min-width:0;min-height:0;overflow:auto;background:var(--bg)}
.cx-st-sticky{position:sticky;top:0;z-index:3;background:var(--bg);border-bottom:1px solid var(--line);padding:10px 18px 0}
.cx-st-compare{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:26px}
.cx-st-cmp{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--edge);border-radius:12px;padding:2px 4px 2px 9px;font-size:11.5px;color:var(--ink-2);background:var(--panel)}
.cx-st-cmp.world{padding-right:10px;color:var(--ink)}
.cx-st-cmp .x{background:none;border:none;color:var(--dim);cursor:pointer;font-size:13px;line-height:1;padding:0 4px;border-radius:8px}
.cx-st-cmp .x:hover{color:var(--ink-2);background:var(--panel-3)}
.cx-st-cmphint{font-size:11.5px;color:var(--amber-2)}
.cx-st-tabs{display:flex;gap:2px;margin-top:9px;overflow-x:auto}
.cx-st-tab{background:none;border:1px solid transparent;border-bottom:none;color:var(--dim);font:inherit;font-size:12px;padding:6px 12px;border-radius:7px 7px 0 0;cursor:pointer;white-space:nowrap;margin-bottom:-1px}
.cx-st-tab:hover{color:var(--ink-2);background:var(--panel-2)}
.cx-st-tab.on{color:var(--amber);background:var(--panel);border-color:var(--edge);font-weight:600}
.cx-st-tabbody{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:14px 18px 40px}
@media (max-width:1250px){.cx-st-tabbody{grid-template-columns:minmax(0,1fr)}}
@media (max-width:900px){.cx-st-body{grid-template-columns:minmax(0,1fr)}.cx-st-rail{max-height:260px;border-right:none;border-bottom:1px solid var(--line)}}
/* cards: question title · how to read · chart · legend · "click does…" */
.cx-st-card{min-width:0;border:1px solid var(--line);border-radius:9px;background:var(--panel);padding:12px 14px 10px;display:flex;flex-direction:column;gap:8px}
.cx-st-card.wide{grid-column:1 / -1}
.cx-st-cardhead{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cx-st-cardhead h4{margin:0;font-size:13px;font-weight:600;color:var(--ink-2);letter-spacing:.01em;flex:1 1 auto}
.cx-st-cardctl{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cx-st-read{margin:0;font-size:11.5px;line-height:1.55;color:var(--dim);max-width:110ch}
.cx-st-hint{margin:0;font-size:11px;color:var(--amber-2)}
.cx-st-note{margin:0;font-size:11px;color:var(--dim);font-style:italic}
.cx-st-empty{color:var(--dim);font-size:12px;padding:18px 4px;text-align:center}
.cx-st-legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;color:var(--ink)}
.cx-st-legend > span{display:inline-flex;align-items:center}
.cx-st-legend i.lgring{display:inline-block;width:9px;height:9px;border-radius:50%;border:1.4px solid #e7ebef;margin-right:6px}
.cx-st-legend i.lgband{display:inline-block;width:16px;height:9px;background:rgba(154,163,173,.32);margin-right:6px;border-radius:2px}
.cx-st-legend i.lgband.light{background:rgba(154,163,173,.14)}
.cx-st-legend i.lgline{display:inline-block;width:16px;height:0;border-top:1.6px solid #c4cbd2;margin-right:6px}
.cx-st-legend i.lgline.grey{border-top-color:#4a535d}
.cx-st-legend i.lgdash{display:inline-block;width:16px;height:0;border-top:1.6px dashed var(--amber);margin-right:6px}
.cx-st-legend i.lgbox{display:inline-block;width:16px;height:7px;background:#5a636d;border-radius:2px;margin-right:6px}
.cx-st-legend i.lgwh{display:inline-block;width:16px;height:0;border-top:1.4px solid #5a636d;margin-right:6px}
.cx-st-legend b.dia,.cx-st-rrow b.dia{color:var(--amber);font-weight:400}
.cx-st-legend b.dia{margin-right:6px}
/* the fast tooltip */
.cx-st-tip{position:fixed;z-index:9999;display:none;pointer-events:none;max-width:360px;background:#14171b;border:1px solid var(--edge-2);border-radius:7px;padding:7px 10px;font-size:11.5px;line-height:1.5;color:var(--ink);box-shadow:0 8px 24px rgba(0,0,0,.5)}
.cx-st-tip b{display:block;color:var(--ink-2);font-weight:600;margin-bottom:1px}
.cx-st-tip div{color:var(--ink)}
.cx-st-plot{width:100%}
.cx-st-svg{display:block;max-width:100%}
/* pills */
.cx-st-idx{white-space:nowrap}
.cx-st-idx .cx-pill{margin-right:2px}
.cx-st-fit{display:inline-block;padding:0 7px;border-radius:9px;font-size:10px;letter-spacing:.03em;border:1px solid transparent;white-space:nowrap}
.cx-st-fit.ok{color:#69c074;border-color:#2f5a35}
.cx-st-fit.ok2{color:#9ad07a;border-color:#3a5a2f}
.cx-st-fit.warn{color:#e08a3c;border-color:#6a4a2a}
.cx-st-fit.bad{color:#ef6b68;border-color:#6a2f2f}
.cx-st-fit.none{color:var(--dim);border-color:var(--edge);border-style:dashed}
.cx-st-vd{display:inline-block;font-size:10.5px;padding:0 5px;border-radius:9px;white-space:nowrap;border:1px solid var(--edge)}
.cx-st-vd.mid{color:var(--dim);border-color:transparent}
.cx-st-vd.up{color:#ec9a8f;border-color:#5a3532}
.cx-st-vd.up2{color:#ef6b68;border-color:#8a3a38;background:#2a1716}
.cx-st-vd.down{color:#8db7ec;border-color:#2f4560}
.cx-st-vd.down2{color:#5b9cf0;border-color:#2f5a8a;background:#141d2a}
.cx-st-delta{display:inline-block;margin-left:6px;font-size:10.5px;color:var(--dim);white-space:nowrap}
.cx-st-delta.up{color:#ffc24d}
.cx-st-delta.down{color:#8db7ec}
.cx-st-warn{color:#e08a3c}
.cx-st-named{color:var(--amber);margin-right:4px;font-size:11px}
/* tables: uniform rows, sticky head */
.cx-st-tablewrap{overflow:auto;max-height:560px;border:1px solid var(--line);border-radius:8px;background:var(--bg)}
.cx-st-tablewrap.tall{max-height:70vh}
.cx-st-table,.cx-st-score{width:100%;border-collapse:collapse;font-size:12px}
.cx-st-table th,.cx-st-score th{position:sticky;top:0;z-index:1;background:var(--panel-2);color:var(--dim);font-weight:500;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;text-align:left;padding:7px 7px;white-space:nowrap;border-bottom:1px solid var(--edge)}
.cx-st-table th{cursor:pointer;user-select:none}
.cx-st-table th:hover{color:var(--ink-2)}
.cx-st-table th.sorted{color:var(--amber)}
.cx-st-table th .arr{font-size:9px}
.cx-st-table td,.cx-st-score td{height:30px;padding:0 7px;white-space:nowrap;border-bottom:1px solid var(--line);color:var(--ink)}
.cx-st-table td{max-width:200px;overflow:hidden;text-overflow:ellipsis}
.cx-st-table td.ar{max-width:140px}
.cx-st-table tbody tr{cursor:pointer}
.cx-st-table tbody tr:hover td{background:var(--panel-2)}
.cx-st-table tbody tr.on td{background:#2a2410}
.cx-st-table .num,.cx-st-score .num{text-align:right;font-variant-numeric:tabular-nums}
.cx-st-table td.b{color:var(--ink-2);font-weight:600}
.cx-st-table td.lnk{color:var(--amber-2);text-decoration:underline dotted;text-underline-offset:3px}
.cx-st-table td.lnk:hover{color:var(--amber)}
.cx-st-table td.ar:hover{color:var(--amber)}
.cx-st-table.recipe tbody tr{cursor:default}
.cx-st-score td.m{color:var(--ink-2);cursor:help}
.cx-st-score td.ref{color:var(--ink-2)}
.cx-st-score th.sel{color:var(--ink-2)}
.cx-st-score td.sel{background:rgba(255,255,255,.015)}
.cx-st-score .stripcol{width:34%;min-width:220px}
.cx-st-score tbody tr:hover td{background:var(--panel-2)}
/* strip: every area as a tick on one line */
.cx-st-strip{position:relative;height:22px;margin:0 8px}
.cx-st-strip.empty{color:var(--dim);font-size:11px;line-height:22px}
.cx-st-strip .axis{position:absolute;left:0;right:0;top:11px;border-top:1px solid var(--edge)}
.cx-st-strip .tick{position:absolute;top:4px;width:7px;height:15px;margin-left:-3.5px}
.cx-st-strip .tick::before{content:'';position:absolute;left:3px;top:0;width:1.5px;height:15px;background:#5d6670;border-radius:1px}
.cx-st-strip .tick.click{cursor:pointer}
.cx-st-strip .tick:hover::before{background:var(--ink-2)}
.cx-st-strip .ref{position:absolute;top:1px;width:2px;height:20px;margin-left:-1px;background:var(--amber);opacity:.85;border-radius:1px}
.cx-st-strip .sel{position:absolute;top:2px;transform:translateX(-50%);font-size:12px;line-height:18px;font-weight:400;text-shadow:0 0 3px #000,0 0 2px #000;z-index:1}
/* findings */
.cx-st-findings{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px}
.cx-st-fgroup h5{margin:0 0 6px;font-size:12px;color:var(--ink-2);font-weight:600;display:flex;align-items:center}
.cx-st-fgroup ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.cx-st-fgroup li{display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:8px;align-items:start;padding:6px 8px;border:1px solid var(--line);border-radius:6px;font-size:12px;line-height:1.45;cursor:pointer;background:var(--bg)}
.cx-st-fgroup li:hover{border-color:var(--edge-2);background:var(--panel-2)}
.cx-st-fgroup li .ic{font-size:10px;text-align:center;line-height:18px;border-radius:50%;width:18px;height:18px;background:var(--panel-3);color:var(--dim)}
.cx-st-fgroup li.up .ic{color:#ffc24d}
.cx-st-fgroup li.down .ic{color:#8db7ec}
.cx-st-fgroup li.warn .ic{color:#e08a3c;font-weight:700}
.cx-st-fgroup li .go{font-size:10.5px;color:var(--amber-2);white-space:nowrap;padding-top:2px}
/* range rows (difficulty) */
.cx-st-ranges{display:flex;flex-direction:column}
.cx-st-rrow{display:grid;grid-template-columns:200px minmax(0,1fr) 150px;align-items:center;gap:10px;height:28px;padding:0 6px;border-radius:6px;cursor:pointer;font-size:12px}
.cx-st-rrow:hover{background:var(--panel-2)}
.cx-st-rrow.on{background:#232830}
.cx-st-rrow.dim{opacity:.55}
.cx-st-rrow.dim:hover{opacity:1}
.cx-st-rrow .lab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink-2)}
.cx-st-rrow .val{text-align:right;white-space:nowrap;font-size:11px}
.cx-st-rrow .val .mono{font-variant-numeric:tabular-nums;color:var(--ink)}
.cx-st-rrow .track{position:relative;height:18px;background:linear-gradient(90deg,rgba(121,131,141,.07) 0 33.11%,rgba(201,194,74,.06) 33.11% 66.56%,rgba(255,138,92,.06) 66.56% 100%);border-radius:3px}
.cx-st-rrow .track i,.cx-st-rrow .track b{position:absolute}
.cx-st-rrow .wh{top:8.5px;height:1.4px;background:#6b7580}
.cx-st-rrow .box{top:5px;height:8px;background:#5a636d;border-radius:2px}
.cx-st-rrow .gap{top:8px;height:0;border-top:1.5px dashed rgba(255,194,77,.55)}
.cx-st-rrow .mid{top:4px;width:10px;height:10px;margin-left:-5px;border-radius:50%;box-shadow:0 0 0 2px var(--panel)}
.cx-st-rrow b.dia{top:0;transform:translateX(-50%);font-size:13px;line-height:18px;text-shadow:0 0 3px #000}
.cx-st-rrow .track .none{position:absolute;left:8px;top:2px;color:var(--dim);font-size:10.5px;font-style:italic}
.cx-st-rrow.axis{cursor:default;height:30px;color:var(--dim)}
.cx-st-rrow.axis:hover{background:none}
.cx-st-rrow.axis .track{background:none;height:30px}
.cx-st-rrow.axis .tk{position:absolute;top:16px;transform:translateX(-50%);font-size:9.5px;font-style:normal}
.cx-st-rrow.axis .z{position:absolute;top:0;transform:translateX(-50%);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;font-weight:400;color:#5d6670}
/* "what to do" */
.cx-st-todo{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:10px}
.cx-st-todocard{border:1px solid var(--line);border-left:3px solid var(--edge-2);border-radius:7px;padding:9px 11px;background:var(--bg);display:flex;flex-direction:column;gap:6px}
.cx-st-todocard .h{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px;color:var(--ink-2)}
.cx-st-todocard .h .muted{font-size:11px}
.cx-st-todocard p{margin:0;font-size:12px;color:var(--ink);line-height:1.5}
.cx-st .chips{display:flex;flex-wrap:wrap;gap:5px}
.cx-st-mobchip{display:inline-flex;align-items:center;gap:4px;background:var(--panel-2);border:1px solid var(--edge);color:var(--ink);border-radius:6px;font:inherit;font-size:11px;padding:2px 8px;cursor:pointer;white-space:nowrap}
.cx-st-mobchip:hover{border-color:var(--amber-dim);color:var(--amber)}
/* outlier lists */
.cx-st-olists{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}
@media (max-width:1500px){.cx-st-olists{grid-template-columns:minmax(0,1fr)}}
.cx-st-olist h5{margin:0 0 4px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);font-weight:500}
.cx-st-orow{display:grid;grid-template-columns:16px minmax(0,1.4fr) minmax(0,1fr) 34px 64px 76px;align-items:center;gap:7px;height:28px;padding:0 6px;border-radius:6px;font-size:12px;cursor:pointer}
.cx-st-orow:hover{background:var(--panel-2)}
.cx-st-orow > span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-st-orow .v{text-align:right;font-variant-numeric:tabular-nums}
.cx-st-orow .lv{font-size:11px}
.cx-st-orow .ar{font-size:11px}
/* ranked bars */
.cx-st-bars{display:flex;flex-direction:column}
.cx-st-bar{display:grid;grid-template-columns:170px minmax(0,1fr) 130px;align-items:center;gap:10px;height:26px;padding:0 6px;border-radius:6px;font-size:12px}
.cx-st-bar.click{cursor:pointer}
.cx-st-bar.click:hover{background:var(--panel-2)}
.cx-st-bar.dim{opacity:.6}
.cx-st-bar.on .lab{color:var(--ink-2)}
.cx-st-bar .lab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink)}
.cx-st-bar .track{position:relative;height:12px}
.cx-st-bar .fill{position:absolute;left:0;top:1px;height:10px;border-radius:0 4px 4px 0;min-width:2px}
.cx-st-bar .ref,.cx-st-bars-key .ref{position:absolute;top:-3px;width:2px;height:18px;margin-left:-1px;background:var(--amber);opacity:.85}
.cx-st-bar .val{text-align:right;font-size:11px;color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums}
.cx-st-bars-key{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--dim);margin-top:6px;padding-left:6px}
.cx-st-bars-key .ref{position:static;display:inline-block;height:12px}
/* 100% stacked bars */
.cx-st-stack{display:flex;gap:2px;height:16px;border-radius:4px;overflow:hidden;min-width:0}
.cx-st-stack.empty{color:var(--dim);font-size:11px;align-items:center}
.cx-st-stack i{display:flex;align-items:center;justify-content:center;min-width:2px;font-style:normal}
.cx-st-stack i.click{cursor:pointer}
.cx-st-stack i:hover{filter:brightness(1.25)}
.cx-st-stack i span{font-size:9.5px;color:#0e1013;font-weight:600}
.cx-st-crowd{display:flex;flex-direction:column;gap:6px;padding:4px 0 8px;border-bottom:1px dashed var(--line)}
.cx-st-crowd .h{font-size:12px;color:var(--ink-2);display:flex;align-items:center}
.cx-st-crowdkey,.cx-st-compkey{display:flex;flex-wrap:wrap;gap:4px 12px}
.cx-st-key{display:inline-flex;align-items:center;background:none;border:none;color:var(--ink);font:inherit;font-size:11px;padding:1px 0;cursor:default}
button.cx-st-key{cursor:pointer}
.cx-st-key .muted{margin-left:5px}
button.cx-st-key:hover{color:var(--amber)}
.cx-st-unplaced h5{margin:4px 0 6px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);font-weight:500}
.cx-st-comps{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:14px 22px}
.cx-st-comp h5{margin:0 0 6px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-2);font-weight:500}
.cx-st-comprow{display:grid;grid-template-columns:150px minmax(0,1fr) 36px;align-items:center;gap:8px;height:24px;font-size:11.5px}
.cx-st-comprow .lab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center}
.cx-st-comprow .val{text-align:right;font-size:10.5px}
.cx-st-compkey{margin-top:6px}
/* mobs table filters */
.cx-st-filters{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap}
.cx-st-search{max-width:300px;font-size:12px;padding:4px 8px}
.cx-st-filters .cx-st-ctllab{margin-left:6px}
/* recipe */
.cx-st-lvl{width:64px;padding:3px 6px;font-size:12px}
.cx-st-range{width:180px;accent-color:var(--amber)}
.cx-st-nearest{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cx-st-dl{margin:0;display:grid;grid-template-columns:max-content 1fr;gap:4px 16px;font-size:12px}
.cx-st-dl dt{color:var(--dim)}
.cx-st-dl dd{margin:0;color:var(--ink-2);font-variant-numeric:tabular-nums}
.cx-stats-back{margin-right:8px;flex:0 0 auto;align-self:center}

/* ---- Concert ▸ Server logs (logs.js) ------------------------------------------ */
.cc-logs{display:flex;flex-direction:column;gap:10px}
.cc-logs-bar,.cc-logs-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--dim)}
.cc-logs-bar label,.cc-logs-filters label{display:inline-flex;align-items:center;gap:6px}
.cc-logs-bar .cx-select,.cc-logs-filters .cx-select{width:auto;min-width:120px}
.cc-logs-prof{font-family:var(--mono);color:var(--amber);letter-spacing:.06em}
.cc-logs-live input{margin:0}
.cc-logs-cats{display:flex;flex-wrap:wrap;gap:4px}
.cc-logs-cat{background:none;border:1px solid var(--line);border-radius:7px;color:var(--ink-2);padding:3px 9px;font-size:11px;cursor:pointer;display:inline-flex;gap:6px;align-items:center}
.cc-logs-cat:hover{border-color:var(--edge-2);color:var(--amber)}
.cc-logs-cat.active{border-color:var(--amber);color:var(--amber);background:#2a2410}
.cc-logs-cat.empty{opacity:.5}
.cc-logs-cnt{font-family:var(--mono);font-size:10px;color:var(--dim)}
.cc-logs-status{font-size:11px}
.cc-logs-livenote{color:var(--amber)}
.cc-logs-live.on{color:var(--amber)}                                  /* the Live tail label shows its state */
.cc-logs-reports-open{border-color:var(--amber-dim,#8a6a2c);color:var(--amber)}   /* open player reports waiting */
.cc-rep-text{white-space:pre-wrap;max-width:46ch}
.cc-rep-row.handled{opacity:.55}
.cc-rep-state{white-space:nowrap}
.cc-rep-state input{vertical-align:middle;margin:0 2px 0 0}
.cc-rep-bug{color:var(--err)} .cc-rep-idea{color:var(--amber)} .cc-rep-typo{color:var(--ink-2)}
.cc-lm-auto{white-space:nowrap}
.cc-logs-tablewrap{overflow:auto;max-height:62vh;border:1px solid var(--line);border-radius:8px;background:var(--panel)}
.cc-logs-table td{font-size:12px;vertical-align:top}
.cc-logs-table td.cc-logs-ts{white-space:nowrap;color:var(--dim);font-size:11px}
.cc-logs-table td.cc-logs-msg{white-space:normal;min-width:320px}
.cc-logs-row.failed td.cc-logs-msg{color:var(--dim)}
.cc-logs-ev{display:inline-block;padding:1px 7px;border-radius:9px;font-size:10px;letter-spacing:.04em;border:1px solid var(--line);color:var(--ink-2);font-family:var(--mono)}
.cc-logs-ev.cc-ev-death,.cc-logs-ev.cc-ev-pk,.cc-logs-ev.cc-ev-panic,.cc-logs-ev.cc-ev-login_fail,.cc-logs-ev.cc-ev-ban{border-color:#6a2f2f;color:#ef6b68}
.cc-logs-ev.cc-ev-login,.cc-logs-ev.cc-ev-boot,.cc-logs-ev.cc-ev-level,.cc-logs-ev.cc-ev-remort,.cc-logs-ev.cc-ev-award{border-color:#2f5a35;color:#69c074}
.cc-logs-ev.cc-ev-tell,.cc-logs-ev.cc-ev-gt,.cc-logs-ev.cc-ev-say,.cc-logs-ev.cc-ev-global{border-color:#3a4a6a;color:#8fb0ff}
.cc-logs-bits{display:inline-flex;flex-wrap:wrap;gap:8px;margin-left:10px;font-size:11px}
.cc-logs-link{color:var(--amber-2);cursor:pointer;text-decoration:none;border-bottom:1px dotted #6a5a2a}
.cc-logs-link:hover{color:var(--amber)}
.cc-logs-ip{color:var(--dim);font-size:10.5px}
.cc-logs-fail{color:#e08a3c;font-size:10.5px}
.cc-logs-more{background:none;border:1px solid var(--line);color:var(--dim);border-radius:5px;padding:0 6px;font-family:var(--mono);font-size:10px;cursor:pointer}
.cc-logs-more:hover{color:var(--amber);border-color:var(--edge-2)}
.cc-logs-detail td{background:var(--panel-2)}
.cc-logs-detail pre{margin:0;font-size:11px;white-space:pre-wrap;word-break:break-word;max-height:320px;overflow:auto}
.cc-logs-catpill{font-family:var(--mono);font-size:10px;color:var(--amber-2)}
.cc-logs-catchecks{display:flex;flex-wrap:wrap;gap:8px 14px;margin:6px 0 10px}
/* maintenance */
.cc-logmaint{display:flex;flex-direction:column;gap:14px}
.cc-lm-grid h4{margin:10px 0 6px;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);font-weight:500}
.cc-lm-table td{font-size:11px;text-align:center}
.cc-lm-table td.mono{text-align:left}
.cc-lm-cell{cursor:pointer;font-family:var(--mono)}
.cc-lm-cell.ok{color:#69c074}
.cc-lm-cell.gaps{color:#e08a3c}
.cc-lm-cell.bad{color:#ef6b68}
.cc-lm-cell.none{color:var(--dim);opacity:.5;cursor:default}
.cc-lm-bad{color:#ef6b68}
.cc-lm-policy{display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:start}
.cc-lm-poltable td{padding:3px 10px 3px 0;font-size:12px}
.cc-lm-polside{display:flex;flex-direction:column;gap:10px;font-size:12px;color:var(--ink-2)}
.cc-lm-polside label{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cc-lm-preview{max-height:300px;overflow:auto;font-size:11px}
.dir-who-ver{color:var(--dim);font-family:var(--mono);font-size:10px;margin-left:8px;letter-spacing:.04em}   /* suite version in Concert/Director's header strip */

/* ---- the ORCHESTRA front page (js/front/front.js) ---------------------------- */
.suite-brand.suite-tab{font-weight:600;letter-spacing:.30em;font-size:13px;color:var(--amber);padding:0 6px 6px;cursor:pointer;border-color:transparent}
.suite-brand.suite-tab:hover{color:var(--amber)}
.suite-brand.suite-tab.active{border-bottom:2px solid var(--amber)}
.pane[data-pane="orchestra"]{overflow:auto}
.fr{max-width:860px;margin:0 auto;padding:36px 24px 120px;display:flex;flex-direction:column;gap:14px;min-height:100%;position:relative}
.fr-hero{text-align:center;margin-bottom:6px}
.fr-brand{font-size:30px;letter-spacing:.34em;color:var(--amber);font-weight:600}
.fr-tag{font-size:12px;margin-top:4px}
.fr-ver{font-family:var(--mono);font-size:10.5px;margin-top:2px}
.fr-searchwrap{position:relative}
.fr-search{width:100%;box-sizing:border-box;font-size:16px;padding:12px 110px 12px 16px;background:var(--panel);color:var(--ink);border:1px solid var(--edge-2);border-radius:10px;outline:none;font-family:inherit}
.fr-search:focus{border-color:var(--amber);box-shadow:0 0 0 3px rgba(255,194,77,.15)}
.fr-count{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:11px;pointer-events:none}
.fr-hint{font-size:11px;text-align:center}
.fr-results{border:1px solid var(--line);border-radius:10px;background:var(--panel);max-height:46vh;overflow:auto}
.fr-results[hidden]{display:none}
.fr-group{padding:7px 12px 3px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-2);background:var(--panel-2);position:sticky;top:0}
.fr-hit{display:flex;align-items:baseline;gap:10px;padding:6px 12px;cursor:pointer;border-bottom:1px solid var(--line)}
.fr-hit:hover,.fr-hit.sel{background:#2a2410}
.fr-hit-label{color:var(--ink);font-size:13px}
.fr-hit-sub{font-size:11px;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fr-hit-kind{font-size:10px;letter-spacing:.06em;white-space:nowrap}
.fr-empty{padding:14px;font-size:12px}
.fr-info{border:1px solid #6a5a2a;border-radius:10px;background:#1e1a10;padding:12px 14px}
.fr-info[hidden]{display:none}
.fr-info-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px}
.fr-info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:6px 16px}
.fr-fact{display:flex;gap:8px;font-size:12px}
.fr-fact-k{min-width:80px;text-transform:uppercase;letter-spacing:.06em;font-size:10px;padding-top:2px}
.fr-fact-v{color:var(--ink)}
.fr-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:6px}
.fr-tile{text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;cursor:pointer;display:flex;flex-direction:column;gap:5px;color:var(--ink-2);font-family:inherit}
.fr-tile b{color:var(--amber);letter-spacing:.14em;text-transform:uppercase;font-size:11.5px}
.fr-tile span{font-size:11.5px;line-height:1.45}
.fr-tile:hover{border-color:var(--amber-dim,#8a6a2a);color:var(--ink)}
.fr-status{position:fixed;left:50%;bottom:14px;transform:translateX(-50%);display:flex;gap:18px;align-items:center;padding:6px 16px;border:1px solid var(--line);border-radius:20px;background:var(--panel);font-size:11.5px;color:var(--ink-2);cursor:pointer;z-index:5}
.fr-status[hidden]{display:none}
.fr-st{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.fr-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--dim)}
.fr-dot.up{background:#69c074}.fr-dot.down{background:#ef6b68}.fr-dot.warn{background:#e08a3c}

/* ---- Construct ▸ Mob Stats — round 3: the "How it works" popup, reward, player baseline (2026-09-17) */
.modal.cx-stats-helpm{position:relative;max-width:900px}
.cx-stats-help-x{position:absolute;top:12px;right:14px;background:none;border:1px solid var(--line);color:var(--dim);border-radius:6px;width:26px;height:26px;font-size:17px;line-height:1;cursor:pointer;padding:0}
.cx-stats-help-x:hover{color:var(--ink);border-color:var(--edge)}
.cx-stats-help{max-height:68vh;overflow:auto;padding-right:8px;font-size:13px;line-height:1.6;color:var(--ink)}
.cx-stats-help-sec h3{margin:14px 0 6px}
.cx-stats-help-sec:first-child h3{margin-top:0}
.cx-stats-help p{margin:0 0 8px}
.cx-stats-help dl{margin:0 0 8px;display:grid;grid-template-columns:170px 1fr;gap:5px 12px}
.cx-stats-help dt{color:var(--amber-2);font-weight:600;font-size:12px;padding-top:1px}
.cx-stats-help dd{margin:0;color:var(--ink-2)}
.cx-stats-partial{color:var(--dim);font-style:italic}

/* ---- live list cards: unsaved-draft / editing markers (Forge · Stacks · Ledger) (2026-09-17) */
.fg-pill.draft,.st-draft-pill,.ld-badge.editing{border:1px solid #6a5a2a;color:var(--amber);background:#221d10;border-radius:9px;padding:0 6px;font-size:10px}
.fg-card.draft,.cx-card.st-draft,.cx-card.ld-editing{border-style:dashed}

/* ---- Director ▸ login throttling — the "accounts locked or in timeout" notice + the sign-in gate's wait state (2026-09-17) */
.dir-warn.amber{background:#3a2f14;border-color:#6f5a30;color:#ffd58a}      /* timeouts only: amber; any lock keeps .dir-warn's red */
.dir-lockouts-head{font-size:13px}
.dir-lockouts-sub{opacity:.85}
.dir-lockout-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.08)}
.dir-lockout-row b.mono{font-family:var(--mono);font-size:13px}
.dir-lockout-meta{font-size:12px;opacity:.9}
.dir-lockout-state{font-weight:600}
.dir-lockout-row .btn{margin-left:auto;padding:3px 10px;font-size:12px}
.login-err.wait{color:var(--amber)}                                          /* a timeout is "wait", not "wrong" */
.login-err.locked{font-weight:600}

/* ---- Concert ▸ Game features ▸ Hand damage (meta/hand_damage.meta) (2026-09-18) */
.cc-hd{display:grid;grid-template-columns:210px 1fr;gap:14px;align-items:start}
.cc-hd-list{display:flex;flex-direction:column;gap:3px}
.cc-hd-add{display:flex;gap:6px;margin-top:8px}
.cc-hd-add .cc-hd-newslug{flex:1;min-width:0}
.cc-hd-cov{margin:4px 0 12px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px}
.cc-hd-cov .cc-hd-unused{width:100%}
.cc-hd-addfor{padding:1px 8px;font-size:11px}
.cc-hd-variant{margin-bottom:10px}
.cc-hd-vhead{display:flex;align-items:center;gap:6px;margin-bottom:6px}
.cc-hd-terms{border-collapse:collapse;width:100%;font-size:12px}
.cc-hd-terms th{text-align:left;font-weight:500;color:var(--dim);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;padding:2px 6px}
.cc-hd-terms td{padding:3px 6px;border-top:1px solid var(--line);vertical-align:middle}
.cc-hd-terms .cc-num{width:64px}
.cc-hd-divs{width:140px}
.cc-hd-prev{color:var(--amber);text-align:right}
.cc-hd-avg{margin:6px 0 2px;color:var(--dim);font-size:11.5px}

/* ---- #o0 who's online (shared/whoPanel.js) — front page + Concert ▸ Server logs. Prefix .onl-*
   (the shell's signed-in badge already owns .who / .who-*) ---- */
.onl{border:1px solid var(--edge);border-radius:8px;background:var(--panel-2);padding:10px 12px;margin:0 0 14px}
.onl[hidden]{display:none}
.onl-head{display:flex;align-items:center;gap:10px}
.onl-title{margin:0;font-size:13px;color:var(--ink-2)}
.onl-count{font-size:12px}
.onl-note{font-size:11px}
.onl-note.onl-stale{color:var(--amber)}
.onl-refresh{background:none;border:1px solid var(--edge);border-radius:6px;color:var(--dim);cursor:pointer;padding:0 7px;line-height:20px}
.onl-refresh:hover{color:var(--ink);border-color:var(--amber-dim,#8a6a2c)}
.onl-body{margin-top:8px;max-height:320px;overflow:auto}
.onl-prof + .onl-prof{margin-top:10px}
.onl-prof-head{display:flex;align-items:center;gap:6px;font-size:12px;margin-bottom:4px}
.onl-prof-head b{text-transform:capitalize}
.onl-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--dim)}
.onl-dot.up{background:#69c074}.onl-dot.down{background:#ef6b68}
.onl-table{width:100%;border-collapse:collapse;font-size:12px}
.onl-table th{text-align:left;font-weight:500;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--dim);padding:3px 8px 3px 0;border-bottom:1px solid var(--line)}
.onl-table td{padding:3px 8px 3px 0;border-bottom:1px solid var(--line);white-space:nowrap}
.onl-link{color:var(--amber);text-decoration:none;cursor:pointer}
.onl-link:hover{text-decoration:underline}
.onl-empty{font-size:12px;padding:2px 0}
.onl-compact{margin:18px 0 0}

/* #c3 Construct ▸ ability Cost & timing — the cost disagrees with the kind (mana/spirit on a
   skill, endurance on a spell): say so and offer the conversion in place */
.cx-kindhint{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:6px 0 10px;padding:6px 10px;border:1px solid var(--amber-dim,#8a6a2c);
  border-radius:6px;background:rgba(224,167,60,.08);font-size:12px;color:var(--amber)}
.cx-kindhint[hidden]{display:none}

/* shared/saveOnce.js — while a module is writing, its primary buttons (Save…) read as
   busy and ignore clicks; a second Ctrl+S joins the save in flight anyway */
.pane.is-saving .btn.active,.pane.is-saving button.cc-save{pointer-events:none;opacity:.55}
.pane.is-saving{cursor:progress}

/* ---- Construct ▸ mob packs (mobPackUI.js): the Kit, the Import preview, imported drafts ---- */
.cx-card.imported{border-style:dashed;border-color:var(--amber-dim)}
.cx-card.imported.active{border-color:var(--amber)}
.cx-mp-lead{margin:0 0 12px;color:var(--ink);line-height:1.5}
.cx-mp-step{display:flex;gap:12px;padding:10px 0;border-top:1px solid var(--line)}
.cx-mp-num{flex:0 0 26px;height:26px;border-radius:50%;border:1px solid var(--amber-2);color:var(--amber);display:flex;align-items:center;justify-content:center;font-weight:600}
.cx-mp-stepbody{flex:1 1 auto;min-width:0}
.cx-mp-steptitle{color:var(--ink-2);font-weight:600}
.cx-mp-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px}
.cx-mp-status,.cx-mp-sum{color:var(--dim);font-size:11.5px}
.cx-mp-request,.cx-mp-paste{width:100%;box-sizing:border-box;font-size:12px;line-height:1.5;resize:vertical}
.cx-mp-more{margin-top:10px;border-top:1px solid var(--line);padding-top:10px}
.cx-mp-more summary{cursor:pointer;color:var(--ink)}
.cx-mp-out{margin-top:10px;display:flex;flex-direction:column;gap:6px;max-height:min(52vh,520px);overflow:auto}
.cx-mp-err{color:var(--err);font-size:12.5px}
.cx-mp-note{color:var(--amber);font-size:12px}
.cx-mp-row{border:1px solid var(--line);border-radius:8px;padding:6px 9px;background:var(--panel-2)}
.cx-mp-row.fix{border-color:var(--amber-dim)}
.cx-mp-row.skip{opacity:.7}
.cx-mp-rowhead{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px;font-size:12.5px}
.cx-mp-rowhead input{margin:0;accent-color:var(--amber-2)}
.cx-mp-chip{font-size:11px;padding:1px 7px;border-radius:10px;border:1px solid var(--edge);white-space:nowrap}
.cx-mp-chip.ready{color:var(--ok);border-color:var(--ok)}
.cx-mp-chip.fix{color:var(--amber);border-color:var(--amber-2)}
.cx-mp-chip.skip{color:var(--err);border-color:var(--err)}
.cx-mp-vnum{color:var(--dim);font-size:11.5px;white-space:nowrap}
.cx-mp-name{color:var(--ink-2);font-weight:600}
.cx-mp-meta,.cx-mp-flags{color:var(--dim);font-size:11.5px}
.cx-mp-detail{margin-top:4px;font-size:11.5px}
.cx-mp-detail summary{cursor:pointer;color:var(--dim)}
.cx-mp-detail ul{margin:4px 0 2px;padding-left:18px;line-height:1.5}
.cx-mp-detail li.err{color:var(--err)}
.cx-mp-detail li.left{color:var(--amber)}
.cx-mp-detail li.note{color:var(--ink)}
.cx-mp-panel .cx-mp-controls{margin-top:8px}
