/* board-embed.css - board.css scoped under #tab-board AND rebranded to the
   Zack admin design system (Inter / JetBrains Mono / dark navy + cyan).
   AUTO-GENERATED by admin/rebrand-board-embed.py - do NOT hand-edit;
   regenerate after editing board.css. board.css itself stays the light
   standalone /board theme and is left untouched. (#12744 scope, #12745 rebrand) */
#tab-board{
  --paper:transparent;
  --panel:rgba(255,255,255,.05);
  --ink:#e4e4e7;
  --muted:#8095a3;
  --rule:rgba(255,255,255,.11);
  --sig-run:#10b981;
  --sig-block:#f59e0b;
  --sig-error:#ef4444;
  --sig-idle:#6b7f8e;
  --sig-busy:#38bdf8;
  --emph:#00d4ff;
  --emph-2:#00b8d9;
  --on-emph:#062029;
  /* #13171 — soft "this one is open" surface. A TOKEN (not a hardcoded ink
     tint) so rebrand-board-embed.py can flip it for the dark embed; the old
     hardcoded rgba(20,26,30,.05) was darker than the navy and invisible. */
  --soft:rgba(255,255,255,.075);
  --soft-hi:rgba(255,255,255,.105);
  --row-h:56px;
  --gutter:168px;
  --track-pad:10px;
}
#tab-board *{box-sizing:border-box}
#tab-board, #tab-board{margin:0;padding:0}
#tab-board{
  background:var(--paper);
  color:var(--ink);
  font-family:'Inter',system-ui,sans-serif;
  font-size:15px;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
#tab-board .mono{font-family:'JetBrains Mono',ui-monospace,monospace}

/* ---------- chrome ---------- */
#tab-board header.bar{
  position:sticky;top:0;z-index:30;
  background:var(--paper);
  border-bottom:1px solid var(--rule);
  padding:12px 18px;
  /* #12857 — single-row header: flatten .bar-top + .controls onto one wrapping
     flex line (via display:contents on both) so the chips share the top row
     instead of forming a second row, reclaiming ~34px of vertical space. */
  display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;
}
#tab-board .bar-top{display:contents}
#tab-board .mark{
  font-family:'JetBrains Mono',monospace;font-weight:600;
  font-size:13px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink);text-decoration:none;
}
#tab-board .mark span{color:var(--muted)}
#tab-board .mark:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .tally{
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--muted);
  margin-left:auto;display:flex;gap:14px;order:5;   /* #12857 — right cluster, after the chips */
}
#tab-board .tenant-wrap{position:relative}
#tab-board .tenant{
  display:inline-flex;align-items:baseline;gap:7px;
  background:var(--emph);color:var(--on-emph);border:0;border-radius:2px;
  padding:5px 9px;cursor:pointer;font-family:'JetBrains Mono',monospace;
}
#tab-board .tenant .tlabel{font-size:9px;letter-spacing:.14em;text-transform:uppercase;opacity:.55}
#tab-board .tenant .tname{font-size:12.5px;font-weight:500;letter-spacing:.02em}
#tab-board .tenant .tcaret{font-size:9px;opacity:.6}
#tab-board .tenant:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .tenant-menu{
  position:absolute;top:calc(100% + 4px);left:0;z-index:60;
  background:var(--panel);border:1px solid var(--rule);border-radius:2px;
  min-width:200px;max-height:320px;overflow-y:auto;
  box-shadow:0 6px 18px rgba(0,0,0,.45);
}
#tab-board .tenant-menu button{
  display:block;width:100%;text-align:left;background:none;border:0;
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  padding:8px 12px;cursor:pointer;
}
#tab-board .tenant-menu button:hover{background:rgba(255,255,255,.06)}
#tab-board .tenant-menu button[aria-selected="true"]{background:var(--emph);color:var(--on-emph)}
#tab-board .tenant-menu button:focus-visible{outline:2px solid var(--emph);outline-offset:-2px}
#tab-board .tally b{font-weight:500;color:var(--ink)}
#tab-board .controls{display:contents}   /* #12857 — children join header.bar's single flex row */
#tab-board .chip{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.06em;
  text-transform:uppercase;padding:5px 10px;border:1px solid var(--rule);
  background:transparent;color:var(--muted);cursor:pointer;border-radius:2px;
}
#tab-board .chip[aria-pressed="true"]{background:var(--emph);color:var(--on-emph);border-color:var(--emph)}
#tab-board .chip:focus-visible, #tab-board .row:focus-visible, #tab-board .close:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .conn{
  font-family:'JetBrains Mono',monospace;font-size:10px;order:5;   /* #12857 — right cluster next to the tally (was margin-left:auto, which split the row) */
  letter-spacing:.08em;text-transform:uppercase;color:var(--sig-idle);
}
#tab-board .conn.err{color:var(--sig-error)}

/* ---------- stage header (desktop) ---------- */
#tab-board .stage-head{
  display:none;
  padding:0 18px;
  border-bottom:1px solid var(--rule);
  background:var(--paper);
  position:sticky;top:97px;z-index:20;
}
#tab-board .stage-head-inner{display:flex;padding:8px 0}
#tab-board .stage-head .spacer{width:var(--gutter);flex:none}
#tab-board .stage-head .labels{position:relative;flex:1;height:16px}
#tab-board .stage-head .labels i{
  position:absolute;transform:translateX(-50%);
  font-style:normal;font-family:'JetBrains Mono',monospace;
  font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);
  white-space:nowrap;
}

/* ---------- rows ---------- */
#tab-board main{padding:0 18px 40px}
#tab-board .row{
  display:flex;align-items:center;width:100%;
  height:var(--row-h);
  border-bottom:1px solid var(--rule);
  background:none;border-left:0;border-right:0;border-top:0;
  font:inherit;color:inherit;text-align:left;cursor:pointer;padding:0;
  transition:height .18s ease;
}
#tab-board .row:hover{background:rgba(255,255,255,.05)}
#tab-board.compact{--row-h:38px}
#tab-board.compact .task-title{font-size:13px}

#tab-board .gutter{width:var(--gutter);flex:none;display:flex;align-items:center;gap:9px;padding-right:14px}
#tab-board .dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--sig-idle)}
#tab-board .dot.run{background:var(--sig-run)}
#tab-board .dot.block{background:var(--sig-block)}
#tab-board .dot.error{background:var(--sig-error)}
#tab-board .dot.busy{background:var(--sig-busy)}
#tab-board .dot.run{animation:pulse 2.4s ease-in-out infinite}
#tab-board .dot.busy{animation:pulse 3.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
#tab-board .agent-name{font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:500;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px;display:block}
#tab-board .agent-sub{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);display:block;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}
#tab-board.compact .agent-sub{display:none}
/* 🧠 per-worker memory launcher, pinned to the right of the gutter (#12819).
   m-elapsed is display:none on desktop, so margin-left:auto floats this right;
   on mobile m-elapsed shows and grabs the auto space, this sits just after it. */
#tab-board .wmem-ico{
  margin-left:auto;flex:none;cursor:pointer;
  font-size:13px;line-height:1;opacity:.4;
  padding:4px;border-radius:6px;
  -webkit-user-select:none;user-select:none;
  transition:opacity .15s ease,background .15s ease;
}
#tab-board .row:hover .wmem-ico{opacity:.8}
#tab-board .wmem-ico:hover, #tab-board .wmem-ico:focus-visible{opacity:1;background:var(--rule);outline:none}
@media (max-width:840px){#tab-board .wmem-ico{margin-left:8px}}

/* ---------- the track (signature element) ---------- */
#tab-board .track{position:relative;flex:1;height:var(--row-h);min-width:0}
#tab-board .ticks{position:absolute;inset:0;pointer-events:none}
#tab-board .ticks u{
  position:absolute;top:50%;width:1px;height:14px;margin-top:-7px;
  background:var(--rule);text-decoration:none;
}
#tab-board .rail{
  position:absolute;top:50%;left:var(--track-pad);right:var(--track-pad);
  height:1px;background:var(--rule);margin-top:-.5px;
}
#tab-board .trail{
  position:absolute;top:50%;height:2px;margin-top:-1px;
  background:var(--emph);opacity:.16;
  transition:width .65s cubic-bezier(.32,.72,0,1);
}
#tab-board .pill{
  position:absolute;top:50%;transform:translate(-50%,-50%);
  display:flex;align-items:center;gap:8px;
  background:var(--panel);border:1px solid var(--rule);
  padding:5px 10px;border-radius:2px;white-space:nowrap;
  max-width:min(420px,72%);
  transition:left .65s cubic-bezier(.32,.72,0,1),opacity .3s ease;
  box-shadow:0 1px 0 rgba(0,0,0,.2);
}
#tab-board .pill.error{border-color:var(--sig-error)}
#tab-board .pill.block{border-color:var(--sig-block)}
#tab-board .task-title{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:230px}
#tab-board .meta{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);flex:none}
#tab-board.compact .meta.cost, #tab-board.compact .meta.step{display:none}
#tab-board .idle-note{
  position:absolute;top:50%;left:var(--track-pad);transform:translateY(-50%);
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-idle);
}
#tab-board .elsewhere-note{
  position:absolute;top:50%;left:var(--track-pad);transform:translateY(-50%);
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-busy);
  border:1px solid var(--sig-busy);border-radius:2px;padding:2px 8px;
  background:color-mix(in srgb,var(--sig-busy) 8%,transparent);white-space:nowrap;
  max-width:min(360px,72%);overflow:hidden;text-overflow:ellipsis;
}
#tab-board .elsewhere-note b{font-weight:600}
#tab-board .queued-badge{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);
  border:1px solid var(--rule);padding:1px 5px;border-radius:2px;flex:none;
}
#tab-board .board-empty{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-idle);
  padding:18px 0;
}
/* completely-idle agents: dimmed when revealed (#12772) */
#tab-board .row.idle-dim{opacity:.4;transition:opacity .18s ease}
#tab-board .row.idle-dim:hover{opacity:.75}
/* footer toggle to reveal/hide the idle agents */
#tab-board .idle-toggle{
  display:block;width:100%;text-align:left;background:none;border:0;
  border-bottom:1px solid var(--rule);cursor:pointer;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--sig-idle);padding:10px 4px;
}
#tab-board .idle-toggle:hover{color:var(--muted)}
#tab-board .idle-toggle.open{color:var(--muted)}

/* ---------- backlog bucket ---------- */
#tab-board .backlog{padding:0 18px;border-bottom:1px solid var(--rule);background:rgba(255,255,255,.022)}
#tab-board .bl-head{display:flex;align-items:baseline;gap:10px;padding:15px 0 9px}
#tab-board .bl-head h2{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
}
#tab-board .bl-head .n{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--ink)}
#tab-board .bl-head .hint{
  margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:10px;
  color:var(--sig-idle);letter-spacing:.06em;
}
/* ---------- add ungrouped task (#12813) ---------- */
#tab-board .bl-add{
  margin-left:12px;font-family:'JetBrains Mono',monospace;font-size:10px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink);
  border:1px solid var(--rule);background:transparent;
  padding:4px 10px;border-radius:3px;cursor:pointer;line-height:1;
  display:inline-flex;align-items:center;gap:5px;align-self:center;
  transition:border-color .15s ease,background .15s ease,color .15s ease;
}
#tab-board .bl-add:hover{border-color:var(--emph);background:var(--panel)}
#tab-board .bl-add[aria-expanded="true"]{border-color:var(--emph);background:var(--emph);color:var(--on-emph)}
#tab-board .bl-add:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-add-ic{font-size:13px;font-weight:600}
#tab-board .bl-addform{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  padding:11px 12px;margin:6px 0 8px;
  background:var(--panel);border:1px solid var(--rule);border-radius:6px;
  animation:addform-in .18s ease;
}
@keyframes addform-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
/* multi-line since #13076 — Mike's long task briefs were silently cut at the old
   maxlength=300 single-line input. Auto-grows from 2 lines up to ~6, then scrolls. */
#tab-board .bl-add-input{
  flex:1 1 320px;min-width:220px;
  font-family:inherit;font-size:13px;line-height:1.45;color:var(--ink);
  background:var(--paper);border:1px solid var(--rule);border-radius:4px;padding:8px 10px;
  min-height:56px;max-height:132px;overflow-y:auto;resize:none;display:block;
}
#tab-board .bl-add-input:focus{outline:none;border-color:var(--emph)}
#tab-board .bl-add-input::placeholder{color:var(--sig-idle)}
#tab-board .bl-add-count{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.06em;
  color:var(--muted);white-space:nowrap;
}
#tab-board .bl-add-count.over{color:var(--sig-error)}
#tab-board .bl-add-count[hidden]{display:none}
#tab-board .bl-add-sel{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--ink);
  background:var(--paper);border:1px solid var(--rule);border-radius:4px;
  padding:7px 8px;cursor:pointer;max-width:160px;
}
#tab-board .bl-add-sel:focus{outline:none;border-color:var(--emph)}
#tab-board .bl-add-save{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:8px 15px;
  border:1px solid var(--emph);background:var(--emph);color:var(--on-emph);
  cursor:pointer;border-radius:3px;
}
#tab-board .bl-add-save:hover{background:var(--sig-run);border-color:var(--sig-run)}
#tab-board .bl-add-save:disabled{opacity:.5;cursor:progress}
#tab-board .bl-add-cancel{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:8px 12px;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  cursor:pointer;border-radius:3px;
}
#tab-board .bl-add-cancel:hover{border-color:var(--emph);color:var(--ink)}
#tab-board .bl-add-save:focus-visible, #tab-board .bl-add-cancel:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-add-err{
  flex:1 1 100%;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-error);
}
#tab-board .bl-add-err:empty{display:none}
#tab-board .bl-cols, #tab-board .bl-row{
  /* pri column widened 38→48px for the #13167 picker caret */
  display:grid;grid-template-columns:1fr 130px 84px 48px 52px 62px 30px;
  gap:14px;align-items:center;
}
#tab-board .bl-agent{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  border:1px solid transparent;background:none;color:inherit;
  padding:2px 5px;margin:-2px -5px;text-align:left;cursor:pointer;
  border-radius:3px;transition:border-color .15s ease,background .15s ease;
}
#tab-board .bl-agent:hover{border-color:var(--rule);background:var(--paper)}
#tab-board .bl-agent[aria-expanded="true"]{border-color:var(--emph);background:var(--paper)}
#tab-board .bl-agent:focus-visible{outline:2px solid var(--emph);outline-offset:1px}
#tab-board .bl-agent.none{color:var(--sig-idle)}
#tab-board .bl-caret{font-size:8px;color:var(--muted);margin-left:5px;opacity:0;transition:opacity .15s ease}
#tab-board .bl-agent:hover .bl-caret, #tab-board .bl-agent[aria-expanded="true"] .bl-caret{opacity:1}
#tab-board .bl-agent .st{
  display:block;font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin-top:2px;
}
/* #13172 — a dispatched row (Run clicked → todo, waiting for its worker) spins a
   tiny arc on the status line so "queued and about to start" reads at a glance.
   Mobile hides .st, so the media query pulses the .bl-status dot instead. */
#tab-board .bl-row.queued .bl-agent .st{color:var(--sig-run)}
#tab-board .bl-row.queued .bl-agent .st::before{
  content:"";display:inline-block;width:8px;height:8px;
  margin-right:5px;vertical-align:-1px;border-radius:50%;box-sizing:border-box;
  border:1.5px solid rgba(47,122,85,.28);border-top-color:var(--sig-run);
  animation:bl-queued-spin .8s linear infinite;
}
@keyframes bl-queued-spin{to{transform:rotate(360deg)}}
@keyframes bl-queued-pulse{50%{opacity:.3;transform:scale(1.4)}}
@media (prefers-reduced-motion:reduce){
  #tab-board .bl-row.queued .bl-agent .st::before, #tab-board .bl-row.queued .bl-line > .bl-status::before{animation:none}
}
#tab-board .bl-run{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:4px 0;width:100%;
  border:1px solid var(--emph);background:transparent;color:var(--ink);
  cursor:pointer;border-radius:2px;
}
#tab-board .bl-run:hover{background:var(--emph);color:var(--on-emph)}
#tab-board .bl-run[disabled]{border-color:var(--rule);color:var(--sig-idle);cursor:not-allowed;background:none}
#tab-board .bl-run:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-msg{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:4px 0;width:100%;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  cursor:pointer;border-radius:2px;
}
#tab-board .bl-msg:hover{border-color:var(--emph);color:var(--ink)}
#tab-board .bl-msg.active{border-color:var(--emph);color:var(--on-emph);background:var(--emph)}
#tab-board .bl-msg:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-trash{
  font-size:13px;line-height:1;padding:4px 0;width:100%;
  border:1px solid transparent;background:transparent;color:var(--muted);
  cursor:pointer;border-radius:2px;opacity:.55;transition:opacity .15s ease,border-color .15s ease,color .15s ease;
}
#tab-board .bl-trash:hover{opacity:1;border-color:var(--sig-error);color:var(--sig-error)}
#tab-board .bl-trash:focus-visible{outline:2px solid var(--emph);outline-offset:2px;opacity:1}
#tab-board .bl-trash[disabled]{cursor:not-allowed;opacity:.3}
/* Trash panel actions (#12824) — reuses .dv-panel/.dv-body chrome */
#tab-board .tr-actions{display:flex;gap:8px;margin-top:8px}
#tab-board .tr-restore:hover{border-color:var(--sig-run);color:var(--sig-run)}
#tab-board .tr-del:hover{border-color:var(--sig-error);color:var(--sig-error)}
#tab-board .bl-cols{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);padding-bottom:6px;padding-left:15px;
  border-bottom:1px solid var(--rule);
}
#tab-board .bl-row{
  height:34px;border-bottom:1px solid rgba(203,206,201,.55);
  overflow:hidden;
  transition:height .42s cubic-bezier(.32,.72,0,1),opacity .3s ease,
             transform .42s cubic-bezier(.32,.72,0,1),background .2s ease;
}
#tab-board .bl-item:last-child > .bl-row{border-bottom:0}
#tab-board .bl-item:has(.bl-compose:not([hidden])) > .bl-row{border-bottom:0}
/* #12855 — .bl-assign is an absolute popover (out of flow) on desktop, so the
   row keeps its divider; on mobile it flows in-block (see media query) and the
   :has rule there re-hides the border. */
#tab-board .bl-item{position:relative}
#tab-board .bl-task{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#tab-board .bl-task .tid{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);margin-right:6px}
#tab-board .bl-meta{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted)}
/* #13167 — the P-chip is a button that opens the level picker. Styled like
   .bl-agent (transparent until hover) so the row reads unchanged at rest. */
#tab-board .bl-pri{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);
  text-align:right;white-space:nowrap;
  border:1px solid transparent;background:none;
  padding:2px 4px;margin:-2px -4px;cursor:pointer;border-radius:3px;
  transition:border-color .15s ease,background .15s ease;
}
#tab-board .bl-pri:hover{border-color:var(--rule);background:var(--paper)}
#tab-board .bl-pri[aria-expanded="true"]{border-color:var(--emph);background:var(--paper)}
#tab-board .bl-pri:focus-visible{outline:2px solid var(--emph);outline-offset:1px}
#tab-board .bl-pri:hover .bl-caret, #tab-board .bl-pri[aria-expanded="true"] .bl-caret{opacity:1}
#tab-board .bl-pri .bl-caret{margin-left:3px}
#tab-board .bl-pri.p2{color:var(--sig-error);font-weight:600}
#tab-board .bl-pri.p1{color:var(--sig-block)}
#tab-board .bl-row.claiming{
  height:0;opacity:0;transform:translateY(14px);
  background:rgba(47,122,85,.16);border-bottom-color:transparent;
}
#tab-board .bl-row.arriving{animation:arrive .5s ease}
@keyframes arrive{from{background:rgba(255,255,255,.09);transform:translateY(-6px)}to{background:none;transform:none}}
#tab-board .bl-list{padding-bottom:10px}
#tab-board .bl-group{
  border-left:2px solid var(--rule);padding-left:13px;
  margin:2px 0 4px;transition:border-color .3s ease,background .5s ease;
}
#tab-board .bl-group.released{border-left-color:var(--sig-run)}
#tab-board .bl-group.just-released{background:rgba(47,122,85,.10)}
#tab-board .bl-ghead{display:flex;align-items:baseline;gap:10px;padding:11px 0 7px}
#tab-board .bl-toggle{
  background:none;border:0;padding:0;cursor:pointer;color:var(--muted);
  font-size:11px;line-height:1;width:12px;flex:none;
}
#tab-board .bl-gname{font-size:15px;font-weight:500;letter-spacing:-.005em}
#tab-board .bl-gmeta{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--muted)}
#tab-board .bl-release{
  margin-left:auto;flex:none;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:5px 11px;
  border:1px solid var(--emph);background:transparent;color:var(--ink);
  cursor:pointer;border-radius:2px;
}
#tab-board .bl-release:hover{background:var(--emph);color:var(--on-emph)}
#tab-board .bl-release[disabled]{
  border-color:transparent;color:var(--sig-run);cursor:default;background:none;padding-right:0;
}
#tab-board .bl-release.manual[disabled]{color:var(--sig-idle)}
/* run-mode chip (#1000004) — sequential has been the default since #12797 but
   was invisible, so "Release group" silently stopped meaning "queue them all" */
#tab-board .bl-mode{
  margin-left:auto;flex:none;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.06em;
  padding:4px 8px;border:1px dashed var(--rule);border-radius:2px;
  background:transparent;color:var(--muted);cursor:pointer;
}
#tab-board .bl-mode:hover{border-style:solid;border-color:var(--emph);color:var(--ink)}
#tab-board .bl-toggle:focus-visible, #tab-board .bl-release:focus-visible, #tab-board .bl-mode:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-gitems .bl-item:last-child > .bl-row{border-bottom:0}
#tab-board .bl-row.instructed{animation:instructed 1s ease}
@keyframes instructed{0%{background:rgba(47,122,85,.20)}100%{background:none}}

/* ---------- worker-assign picker (#12725) ---------- */
/* #12855 — floats as a popover directly beneath its Assign button (JS sets
   top/left via positionAssignMenu) instead of a full-width block on the left,
   so the worker list is right under the cursor (less mouse travel). */
#tab-board .bl-assign{
  position:absolute;top:0;left:0;z-index:40;
  margin:0;padding:6px;border:1px solid var(--rule);border-radius:3px;
  background:var(--paper);max-width:340px;min-width:200px;
  box-shadow:0 10px 28px rgba(20,26,30,.16);animation:composeIn .15s ease;
}
#tab-board .bl-assign-head{
  font-family:'JetBrains Mono',monospace;font-size:9.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);padding:2px 6px 6px;
}
#tab-board .bl-wpick{
  display:flex;align-items:center;gap:9px;width:100%;
  padding:7px 8px;border:0;background:none;color:var(--ink);
  font-family:'Inter',sans-serif;font-size:13px;text-align:left;
  cursor:pointer;border-radius:2px;
}
#tab-board .bl-wpick:hover{background:var(--emph);color:var(--on-emph)}
#tab-board .bl-wpick:hover .bl-wrole{color:var(--on-emph)}
#tab-board .bl-wpick.current{background:rgba(255,255,255,.06)}
#tab-board .bl-wpick.busy{opacity:.5;pointer-events:none}
#tab-board .bl-wpick:focus-visible{outline:2px solid var(--emph);outline-offset:-2px}
#tab-board .bl-wdot{width:9px;height:9px;border-radius:50%;flex:none}
#tab-board .bl-wname{flex:none}
#tab-board .bl-wrole{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .bl-wtick{margin-left:auto;color:var(--sig-run);font-size:12px}
#tab-board .bl-wpick:hover .bl-wtick{color:var(--on-emph)}
#tab-board .bl-assign-empty{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);padding:6px 8px;
}
#tab-board .bl-assign-err{
  display:none;font-family:'JetBrains Mono',monospace;font-size:10.5px;
  color:var(--sig-error);padding:4px 8px 2px;
}
#tab-board .bl-assign-err.show{display:block}

/* ---------- priority picker (#13167) ----------
   Shares .bl-assign's popover chrome (position, head, error line); only the
   rows differ, so the mobile position:static override applies to both. */
#tab-board .bl-prisel{min-width:212px}
#tab-board .bl-ppick{
  display:flex;align-items:center;gap:9px;width:100%;
  padding:7px 8px;border:0;background:none;color:var(--ink);
  font-family:'Inter',sans-serif;font-size:13px;text-align:left;
  cursor:pointer;border-radius:2px;
}
#tab-board .bl-ppick:hover{background:var(--emph);color:var(--on-emph)}
#tab-board .bl-ppick.current{background:rgba(255,255,255,.06)}
#tab-board .bl-ppick.busy{opacity:.5;pointer-events:none}
#tab-board .bl-ppick:focus-visible{outline:2px solid var(--emph);outline-offset:-2px}
#tab-board .bl-pcode{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);
  flex:none;width:19px;
}
#tab-board .bl-ppick.p2 .bl-pcode{color:var(--sig-error);font-weight:600}
#tab-board .bl-ppick.p1 .bl-pcode{color:var(--sig-block)}
#tab-board .bl-ppick:hover .bl-pcode, #tab-board .bl-ppick:hover .bl-phint{color:var(--on-emph)}
#tab-board .bl-pname{flex:none}
#tab-board .bl-phint{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .bl-ppick:hover .bl-wtick{color:var(--on-emph)}

/* ---------- per-task instruction composer ---------- */
#tab-board .bl-compose{padding:2px 0 13px;animation:composeIn .18s ease}
@keyframes composeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
#tab-board .bl-compose textarea{
  width:100%;box-sizing:border-box;resize:vertical;min-height:44px;
  font-family:'Inter',sans-serif;font-size:14px;line-height:1.4;
  padding:8px 10px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);
  border-radius:2px;
}
#tab-board .bl-compose textarea:focus{outline:2px solid var(--emph);outline-offset:-1px;border-color:var(--emph)}
#tab-board .bl-compose-bar{display:flex;align-items:center;gap:10px;margin-top:7px}
#tab-board .bl-compose-note{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);
  margin-right:auto;
}
#tab-board .bl-cancel, #tab-board .bl-cmsg{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:6px 13px;border-radius:2px;cursor:pointer;flex:none;
}
#tab-board .bl-cancel{border:1px solid var(--rule);background:transparent;color:var(--muted)}
#tab-board .bl-cancel:hover{border-color:var(--emph);color:var(--ink)}
#tab-board .bl-cmsg{border:0;background:var(--emph);color:var(--on-emph)}
#tab-board .bl-cmsg[disabled]{background:var(--rule);color:var(--muted);cursor:not-allowed}
#tab-board .bl-cancel:focus-visible, #tab-board .bl-cmsg:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-compose-err{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-error);
  margin-top:6px;display:none;
}
#tab-board .bl-compose-err.show{display:block}
/* expandable row detail (#12853) — full title + description */
#tab-board .bl-task{cursor:pointer}
#tab-board .bl-row{cursor:pointer}
#tab-board .bl-row:hover{background:rgba(255,255,255,.05)}
/* #13171 — an open task reads as ONE soft card: the row and its detail panel
   share var(--soft) and round on the OUTSIDE corners only, so the pair looks
   like a single raised block lifted off the list (the divider between them is
   already suppressed by the :has rule below). Tokenised on purpose — see the
   note in :root. Expanded beats :hover on source order, so the hover state of
   an already-open row gets its own slightly stronger step. */
#tab-board .bl-row.expanded{background:var(--soft);border-radius:7px 7px 0 0}
#tab-board .bl-row.expanded:hover{background:var(--soft-hi)}
#tab-board .bl-item:has(.bl-detail:not([hidden])) > .bl-row{border-bottom:0}
/* #13180 — the detail is the BODY of the soft card, so it gets card padding on
   every side; without it the title, the empty-state line and any code block or
   image ran flush into the tinted edge. The row above stays unpadded on purpose:
   it is a grid whose columns must line up with .bl-cols and every sibling row,
   so the detail title sits one step in from the row title — reads as nested
   content under a header bar, which is what it is. */
#tab-board .bl-detail{padding:6px 12px 14px;animation:composeIn .18s ease}
#tab-board .bl-item:has(> .bl-row.expanded) > .bl-detail{
  background:var(--soft);border-radius:0 0 7px 7px;
  padding:4px 12px 14px;margin-bottom:6px;
}
#tab-board .bl-detail-title{font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:7px;line-height:1.35}
#tab-board .bl-detail-body{
  font-size:13px;line-height:1.55;color:var(--ink);
  white-space:pre-wrap;word-break:break-word;
  border-left:2px solid var(--rule);padding-left:12px;
  max-height:360px;overflow:auto;
}
/* rendered-markdown task detail (#13169) — same treatment as .dv-fb in the
   delivered sidebar, so a card body reads as prose instead of raw markdown */
#tab-board .bl-detail-body.bl-md{white-space:normal}
#tab-board .bl-md>:first-child{margin-top:0}
#tab-board .bl-md>:last-child{margin-bottom:0}
#tab-board .bl-md p, #tab-board .bl-md ul, #tab-board .bl-md ol, #tab-board .bl-md table, #tab-board .bl-md pre, #tab-board .bl-md blockquote{margin:7px 0}
#tab-board .bl-md h1, #tab-board .bl-md h2, #tab-board .bl-md h3, #tab-board .bl-md h4{margin:13px 0 5px;font-size:13px;line-height:1.3}
#tab-board .bl-md ul, #tab-board .bl-md ol{padding-left:20px}
#tab-board .bl-md li{margin:2px 0}
#tab-board .bl-md table{border-collapse:collapse;display:block;overflow-x:auto;max-width:100%;font-size:12px}
#tab-board .bl-md th, #tab-board .bl-md td{border:1px solid var(--rule);padding:4px 8px;text-align:left;vertical-align:top}
#tab-board .bl-md th{background:var(--panel);font-weight:600}
#tab-board .bl-md code{font-family:'JetBrains Mono',monospace;font-size:11.5px;background:var(--panel);
  border:1px solid var(--rule);padding:0 4px;border-radius:2px}
#tab-board .bl-md pre{background:var(--panel);border:1px solid var(--rule);padding:8px 10px;overflow-x:auto}
#tab-board .bl-md pre code{background:none;border:none;padding:0;white-space:pre}
#tab-board .bl-md img{max-width:100%;height:auto;border:1px solid var(--rule)}
#tab-board .bl-md blockquote{border-left:3px solid var(--rule);margin-left:0;padding-left:10px;color:var(--muted)}
#tab-board .bl-md hr{border:none;border-top:1px solid var(--rule);margin:10px 0}
#tab-board .bl-md a{color:var(--ink);text-decoration:underline}
/* #13174 — markdown screenshots: full-size link wrapper + unresolvable-path placeholder */
#tab-board .md-img-link{display:block;text-decoration:none;border:none}
#tab-board .md-img-link img{display:block;cursor:zoom-in}
#tab-board .md-img-missing{
  display:inline-block;font-family:'JetBrains Mono',monospace;font-size:11px;
  color:var(--sig-idle);background:var(--panel);border:1px dashed var(--rule);
  padding:5px 8px;word-break:break-all}
#tab-board .bl-detail-empty{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-idle)}
/* #1000066 — block this card on a human, from the board. Lives in the detail
   panel rather than the row: the row's action strip is the everyday one (Run /
   Msg / Trash) and blocking is rare, and this is where there is room to say what
   `blocked` now means. Reads as the quiet, reversible action it is — no red, no
   confirm; the Blocked panel's Unblock/Hold is the way back. */
#tab-board .bl-detail-actions{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:11px;
  padding-top:9px;border-top:1px solid var(--rule);
}
#tab-board .bl-block{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:5px 11px;border-radius:2px;cursor:pointer;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  transition:border-color .15s ease,color .15s ease;
}
#tab-board .bl-block:hover{border-color:var(--sig-block);color:var(--sig-block)}
#tab-board .bl-block:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-block[disabled]{cursor:not-allowed;opacity:.4}
#tab-board .bl-block-note{
  flex:1 1 200px;font-family:'JetBrains Mono',monospace;font-size:10px;
  line-height:1.45;color:var(--muted);
}
/* #1000023 — the card this one waits on. Sits above the brief in the detail
   panel because it explains why the Run button is dead; the "Clear dependency"
   button is the only override (there is no force-run — the dispatcher re-checks
   the gate on every poll, so clearing it is the honest way past). */
#tab-board .bl-dep{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-bottom:9px;
  padding:7px 10px;border:1px solid var(--rule);border-left:2px solid var(--sig-block);
  border-radius:3px;font-size:12px;line-height:1.45;color:var(--ink);
}
#tab-board .bl-dep-tag{
  font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--sig-block);flex:none;
}
#tab-board .bl-dep-txt{flex:1 1 200px;color:var(--muted)}
#tab-board .bl-dep-clear{
  flex:none;font-size:11px;padding:3px 9px;cursor:pointer;border-radius:2px;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  transition:border-color .15s ease,color .15s ease;
}
#tab-board .bl-dep-clear:hover{border-color:var(--sig-run);color:var(--sig-run)}
#tab-board .bl-dep-clear[disabled]{cursor:not-allowed;opacity:.4}
#tab-board .bl-empty{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-idle);
  padding:12px 0;
}
#tab-board .bl-line{display:none}
#tab-board .row.receiving{animation:receive 1.1s ease}
@keyframes receive{0%{background:rgba(47,122,85,.20)}100%{background:none}}

/* ---------- blockers: agents waiting on a human ---------- */
/* blocked tasks — stalled, not running, not shipped (#12810) */
#tab-board .blocked-tasks{
  border:1px solid var(--sig-block);border-left-width:3px;
  background:var(--panel);border-radius:2px;
  margin:0 0 26px;padding:14px 18px 10px;
}
#tab-board .bt-head{display:flex;align-items:baseline;gap:9px;padding-bottom:6px}
#tab-board .bt-pip{width:7px;height:7px;border-radius:50%;background:var(--sig-block);align-self:center}
#tab-board .bt-head h2{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink);
}
#tab-board .bt-count{
  font-family:'JetBrains Mono',monospace;font-size:10px;padding:1px 6px;border-radius:2px;
  background:var(--sig-block);color:var(--on-emph);
}
#tab-board .bt-hint{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted)}
#tab-board .bt-list{display:flex;flex-direction:column}
#tab-board .bt-item{
  border-top:1px solid var(--rule);padding:11px 0;
  display:grid;grid-template-columns:minmax(0,1fr) auto auto auto auto auto auto;
  gap:14px;align-items:center;
}
#tab-board .bt-item:first-child{border-top:0}
#tab-board .bt-task{font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#tab-board .bt-task .tid{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);margin-right:7px}
#tab-board .bt-agent, #tab-board .bt-group, #tab-board .bt-wait, #tab-board .bt-pri{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted)}
#tab-board .bt-group{padding:1px 6px;border:1px solid var(--rule);border-radius:2px}
#tab-board .bt-unblock, #tab-board .bt-hold{
  font-family:'JetBrains Mono',monospace;font-size:11px;
  padding:3px 10px;border-radius:2px;cursor:pointer;
  border:1px solid var(--sig-block);background:none;color:var(--sig-block);
}
#tab-board .bt-unblock:hover{background:var(--sig-block);color:var(--on-emph)}
#tab-board .bt-hold{border-color:var(--rule);color:var(--muted)}
#tab-board .bt-hold:hover{border-color:var(--emph);color:var(--ink)}
#tab-board .bt-unblock:focus-visible, #tab-board .bt-hold:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bt-unblock[disabled], #tab-board .bt-hold[disabled]{opacity:.5;cursor:not-allowed}
/* #12961 — disregard a blocked row into Trash (mirrors .bl-trash on the bucket) */
#tab-board .bt-trash{
  font-size:13px;line-height:1;padding:3px 8px;
  border:1px solid transparent;background:transparent;color:var(--muted);
  cursor:pointer;border-radius:2px;opacity:.55;transition:opacity .15s ease,border-color .15s ease,color .15s ease;
}
#tab-board .bt-trash:hover{opacity:1;border-color:var(--sig-error);color:var(--sig-error)}
#tab-board .bt-trash:focus-visible{outline:2px solid var(--emph);outline-offset:2px;opacity:1}
#tab-board .bt-trash[disabled]{cursor:not-allowed;opacity:.3}
@media(max-width:840px){
  /* #13401 — the desktop grid squeezed the title to a few characters between
     the buttons. Mirror the mobile task-card layout (#12793) instead: full
     wrapping TITLE → META LINE (agent · blocked-for · priority) → ACTION
     FOOTER with thumb-sized buttons. */
  #tab-board .bt-item{
    display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;
    grid-template-columns:none;padding:13px 0 14px;
  }
  #tab-board .bt-task{
    flex:1 1 100%;order:0;white-space:normal;
    font-size:15px;line-height:1.4;font-weight:500;
  }
  #tab-board .bt-task .tid{font-size:11px}
  #tab-board .bt-group{display:none}
  #tab-board .bt-agent, #tab-board .bt-wait{
    order:1;display:inline-flex;align-items:center;gap:6px;margin-top:6px;
    font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;
  }
  /* amber dot in front of the blocked-for age — same affordance as .bl-status */
  #tab-board .bt-wait::before{
    content:"";width:6px;height:6px;border-radius:50%;flex:none;background:var(--sig-block);
  }
  #tab-board .bt-pri{
    order:2;display:inline-flex;align-items:center;margin-top:6px;
    font-size:10.5px;letter-spacing:.06em;
    border:1px solid var(--rule);padding:4px 8px;border-radius:3px;
  }
  #tab-board .bt-pri.p2{color:var(--sig-error);font-weight:600}
  #tab-board .bt-pri.p1{color:var(--sig-block)}
  /* full-width spacer forces the buttons onto their own footer row */
  #tab-board .bt-item::after{content:"";flex:1 1 100%;order:3;height:0}
  #tab-board .bt-unblock, #tab-board .bt-hold{
    order:4;min-height:44px;padding:0 20px;margin-top:12px;
    display:inline-flex;align-items:center;justify-content:center;border-radius:3px;
  }
  #tab-board .bt-unblock{margin-left:auto}
  #tab-board .bt-hold{order:5}
  #tab-board .bt-trash{
    order:6;min-height:44px;padding:0 16px;margin-top:12px;
    display:inline-flex;align-items:center;justify-content:center;
    border:1px solid var(--rule);border-radius:3px;opacity:1;
  }
}

#tab-board .blockers{
  border:1px solid var(--sig-block);border-left-width:3px;
  background:var(--panel);border-radius:2px;
  margin:0 0 26px;padding:14px 18px 6px;
}
#tab-board .bk-head{display:flex;align-items:baseline;gap:9px;padding-bottom:10px}
#tab-board .bk-pip{
  width:7px;height:7px;border-radius:50%;background:var(--sig-block);
  align-self:center;animation:pipPulse 1.8s ease-in-out infinite;
}
@keyframes pipPulse{0%,100%{opacity:1}50%{opacity:.25}}
#tab-board .bk-head h2{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink);
}
#tab-board .bk-count{
  font-family:'JetBrains Mono',monospace;font-size:10px;padding:1px 6px;border-radius:2px;
  background:var(--sig-block);color:var(--on-emph);
}
#tab-board .bk-hint{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted)}
#tab-board .bk-list{display:flex;flex-direction:column}
#tab-board .bk-item{
  border-top:1px solid var(--rule);padding:14px 0;
  display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;align-items:start;
}
#tab-board .bk-item.answering{
  opacity:0;transform:translateY(-6px);
  transition:opacity .35s ease,transform .35s ease;
}
#tab-board .bk-who{display:flex;flex-direction:column;gap:3px;padding-top:1px}
#tab-board .bk-agent{font-family:'JetBrains Mono',monospace;font-size:12.5px;color:var(--ink)}
#tab-board .bk-task{font-size:12.5px;color:var(--muted);line-height:1.35}
#tab-board .bk-wait{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--sig-block);
  letter-spacing:.06em;margin-top:2px;
}
#tab-board .bk-q{font-size:15.5px;line-height:1.5;margin:0 0 10px;color:var(--ink)}
#tab-board .bk-ctx{font-size:12.5px;color:var(--muted);line-height:1.45;margin:-4px 0 10px}
#tab-board .bk-sug{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
#tab-board .bk-sug button{
  font-size:12px;padding:4px 9px;border:1px solid var(--rule);background:transparent;
  color:var(--muted);border-radius:2px;cursor:pointer;
}
#tab-board .bk-sug button:hover{color:var(--ink);border-color:var(--emph)}
#tab-board .bk-reply{display:flex;gap:8px;align-items:stretch}
#tab-board .bk-reply textarea{
  flex:1;min-width:0;resize:none;font-family:'Inter',sans-serif;font-size:14px;
  padding:8px 10px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);
  border-radius:2px;line-height:1.4;
}
#tab-board .bk-reply textarea:focus{outline:2px solid var(--emph);outline-offset:-1px;border-color:var(--emph)}
#tab-board .bk-send{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:0 14px;border:0;border-radius:2px;
  background:var(--emph);color:var(--on-emph);cursor:pointer;
}
#tab-board .bk-send[disabled]{background:var(--rule);color:var(--muted);cursor:not-allowed}
#tab-board .bk-sug button:focus-visible, #tab-board .bk-send:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bk-err{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-error);
  margin-top:6px;display:none;
}
#tab-board .bk-item.failed .bk-err{display:block}
#tab-board .bk-item.flash{animation:bkFlash 1.2s ease}
@keyframes bkFlash{0%{background:rgba(180,122,24,.16)}100%{background:none}}
#tab-board .row .dot.block{cursor:pointer}
/* blocked agents read as paused, not running */
#tab-board .pill.block .task-title::after{
  content:" · awaiting you";font-family:'JetBrains Mono',monospace;
  font-size:10px;color:var(--sig-block);
}

/* ---------- planner column ---------- */
/* #13372 — the split was the one region on the board with no breathing room:
   its content sat 14px off the agent rail below and hard against the bucket
   head above, while every panel around it is an inset card. Vertical only —
   a left/right inset would pull the group rule and the TASK column off the
   x=24 page gutter that .bl-head and the panels above align to. */
#tab-board .bl-split{
  display:grid;grid-template-columns:minmax(0,1fr) 352px;
  gap:26px;align-items:start;padding:6px 0 24px;
}
#tab-board .planner{
  border-left:1px solid var(--rule);padding-left:22px;
  position:sticky;top:150px;
}
#tab-board .pl-head{display:flex;align-items:baseline;gap:9px;padding:0 0 10px}
#tab-board .pl-head h2{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
}
#tab-board .pl-sub{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--sig-idle)}
#tab-board .pl-state{
  margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:9.5px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--sig-idle);
}
#tab-board .pl-state.busy{color:var(--sig-run)}
#tab-board .pl-log{
  max-height:250px;overflow-y:auto;padding:2px 0 10px;
  display:flex;flex-direction:column;gap:11px;
}
#tab-board .pl-hint{font-size:13px;line-height:1.5;color:var(--muted)}
#tab-board .pl-you{
  font-size:14px;line-height:1.45;background:var(--panel);
  border:1px solid var(--rule);border-radius:2px;padding:8px 10px;
}
#tab-board .pl-you b{
  display:block;font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:4px;
}
#tab-board .pl-steps{display:flex;flex-direction:column;gap:5px}
#tab-board .pl-step{
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);
  display:flex;gap:8px;opacity:0;animation:stepIn .3s ease forwards;
}
@keyframes stepIn{to{opacity:1}}
#tab-board .pl-step .m{color:var(--sig-idle);width:10px;flex:none}
#tab-board .pl-step.done .m{color:var(--sig-run)}
#tab-board .pl-step.err .m, #tab-board .pl-step.err span{color:var(--sig-error)}
#tab-board .pl-result{
  border-left:2px solid var(--sig-run);padding:2px 0 2px 11px;
}
#tab-board .pl-result b{display:block;font-size:14px;font-weight:500;margin-bottom:3px}
#tab-board .pl-result span{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--muted)}
#tab-board .pl-chips{display:flex;flex-wrap:wrap;gap:6px;padding:4px 0 10px;max-height:150px;overflow-y:auto;align-content:flex-start}
#tab-board .pl-chip{
  font-size:12px;padding:5px 9px;border:1px solid var(--rule);background:transparent;
  color:var(--muted);cursor:pointer;border-radius:2px;text-align:left;line-height:1.25;
  display:inline-flex;align-items:center;gap:6px;
}
#tab-board .pl-chip:hover{color:var(--ink);border-color:var(--emph)}
/* quick-prompt CRUD chips (#12865) */
#tab-board .pl-chip-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
#tab-board .pl-chip-del{
  flex:none;font-size:14px;line-height:1;color:var(--muted);opacity:0;
  transition:opacity .12s ease,color .12s ease;
}
#tab-board .pl-chip:hover .pl-chip-del{opacity:.7}
#tab-board .pl-chip-del:hover{color:var(--sig-error,#e5484d);opacity:1}
@media (hover:none){#tab-board .pl-chip-del{opacity:.55}}
#tab-board .pl-chip-add{color:var(--ink);border-style:dashed}
#tab-board .pl-chip-form{display:inline-flex;align-items:center;gap:6px}
#tab-board .pl-chip-input{
  font-size:12px;padding:5px 8px;border:1px solid var(--emph);background:var(--panel);
  color:var(--ink);border-radius:2px;min-width:180px;font-family:inherit;line-height:1.25;
}
#tab-board .pl-chip-input:focus{outline:2px solid var(--emph);outline-offset:-1px}
#tab-board .pl-chip-save{color:var(--ink);border-color:var(--emph)}
#tab-board .pl-chip-cancel{color:var(--muted)}
#tab-board .pl-target{display:flex;align-items:center;gap:10px;padding:2px 0 11px}
#tab-board .pl-target label{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted);
}
/* custom-styled select: native chevron replaced by an on-brand caret mask
   (tinted var(--muted) so the embed's dark theme recolours it for free) */
#tab-board .pl-select{position:relative;flex:1;min-width:0;display:flex}
#tab-board .pl-select::after{
  content:"";position:absolute;right:10px;top:50%;width:9px;height:9px;
  transform:translateY(-50%);pointer-events:none;background-color:var(--muted);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M1.5 3.5l3.5 3.5 3.5-3.5' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M1.5 3.5l3.5 3.5 3.5-3.5' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:background-color .15s ease;
}
#tab-board .pl-select:hover::after{background-color:var(--ink)}
#tab-board .pl-select:has(.pl-group[disabled])::after{opacity:.5}
#tab-board .pl-group{
  flex:1;width:100%;min-width:0;font-family:'Inter',sans-serif;font-size:13px;
  padding:7px 30px 7px 10px;border:1px solid var(--rule);background:var(--panel);color:var(--ink);
  border-radius:2px;cursor:pointer;text-overflow:ellipsis;
  -webkit-appearance:none;-moz-appearance:none;appearance:none;transition:border-color .15s ease;
}
#tab-board .pl-group:hover{border-color:var(--muted)}
#tab-board .pl-group:focus{outline:2px solid var(--emph);outline-offset:-1px;border-color:var(--emph)}
#tab-board .pl-group[disabled]{opacity:.5;cursor:not-allowed}
#tab-board .pl-input{display:flex;gap:8px;align-items:stretch}
#tab-board .pl-input textarea{
  flex:1;min-width:0;resize:none;font-family:'Inter',sans-serif;font-size:14px;
  padding:8px 10px;border:1px solid var(--rule);background:var(--panel);color:var(--ink);
  border-radius:2px;line-height:1.4;
}
#tab-board .pl-input textarea:focus{outline:2px solid var(--emph);outline-offset:-1px;border-color:var(--emph)}
#tab-board .pl-send{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:0 13px;border:0;border-radius:2px;
  background:var(--emph);color:var(--on-emph);cursor:pointer;
}
#tab-board .pl-send[disabled]{background:var(--rule);color:var(--muted);cursor:not-allowed}
#tab-board .pl-chip:focus-visible, #tab-board .pl-send:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .bl-group.fresh{animation:freshIn 1.4s ease}
@keyframes freshIn{0%{background:rgba(255,255,255,.09)}100%{background:none}}

/* ---------- inspector ---------- */
#tab-board .scrim{
  position:fixed;inset:0;background:rgba(4,10,20,.55);
  opacity:0;pointer-events:none;transition:opacity .25s ease;z-index:40;
}
#tab-board .scrim.open{opacity:1;pointer-events:auto}
#tab-board .inspector{
  position:fixed;top:0;right:0;bottom:0;width:440px;max-width:100%;
  background:var(--panel);border-left:1px solid var(--rule);
  transform:translateX(100%);transition:transform .32s cubic-bezier(.32,.72,0,1);
  z-index:50;display:flex;flex-direction:column;
}
#tab-board .inspector.open{transform:none}
#tab-board .insp-head{padding:18px 20px 14px;border-bottom:1px solid var(--rule);display:flex;gap:12px;align-items:flex-start}
#tab-board .insp-head h2{margin:0;font-size:17px;font-weight:600;line-height:1.3}
#tab-board .insp-head .mono{font-size:11px;color:var(--muted);display:block;margin-top:5px;letter-spacing:.06em;text-transform:uppercase}
#tab-board .close{
  margin-left:auto;flex:none;background:none;border:1px solid var(--rule);
  width:28px;height:28px;cursor:pointer;color:var(--muted);border-radius:2px;
  font-family:'JetBrains Mono',monospace;line-height:1;
}
#tab-board .insp-body{overflow-y:auto;padding:18px 20px 32px;flex:1}
#tab-board .stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-bottom:22px}
#tab-board .stat{background:var(--panel);padding:10px 12px}
#tab-board .stat dt{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0}
#tab-board .stat dd{margin:4px 0 0;font-family:'JetBrains Mono',monospace;font-size:15px}
#tab-board h3.sec{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);margin:0 0 10px;font-weight:500;
}
#tab-board .steps{list-style:none;margin:0 0 24px;padding:0}
#tab-board .steps li{display:flex;gap:10px;padding:6px 0;font-size:14px;align-items:baseline}
#tab-board .steps .n{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted);width:22px;flex:none}
#tab-board .steps li.done{color:var(--muted)}
#tab-board .steps li.done .n::after{content:" ✓"}
#tab-board .steps li.now{font-weight:500}
#tab-board .steps li.ask{color:var(--sig-block);font-weight:500}
#tab-board .log{
  background:#0b1220;color:#c8d2ce;font-family:'JetBrains Mono',monospace;
  font-size:11.5px;line-height:1.65;padding:12px 14px;
  max-height:210px;overflow-y:auto;border-radius:2px;
}
#tab-board .log div{white-space:pre-wrap;word-break:break-word}
#tab-board .log .t{color:#7E8A80}

/* ---------- memory panel (task #12787) ---------- */
#tab-board .mem-panel{
  position:fixed;top:0;right:0;bottom:0;width:660px;max-width:100%;
  background:var(--panel);border-left:1px solid var(--rule);
  transform:translateX(100%);transition:transform .32s cubic-bezier(.32,.72,0,1);
  z-index:50;display:flex;flex-direction:column;
}
#tab-board .mem-panel.open{transform:none}
#tab-board .mem-body{overflow-y:auto;padding:16px 20px 40px;flex:1}
#tab-board .mem-alert{
  margin:0;padding:10px 20px;border-bottom:1px solid var(--rule);
  background:#F6E5E2;color:var(--sig-error);
  font-family:'JetBrains Mono',monospace;font-size:11.5px;line-height:1.45;
}
#tab-board .mem-alert.ok{background:#E1EEE7;color:var(--sig-run)}
#tab-board .mem-loading, #tab-board .mem-empty{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--muted);
  padding:12px 2px;line-height:1.5;
}
#tab-board .mem-sec{margin:0 0 24px}
#tab-board .mem-file{border:1px solid var(--rule);background:var(--panel);margin-bottom:8px}
#tab-board .mem-file.attached{border-left:3px solid var(--sig-run)}
#tab-board .mem-file.locked{background:#EDEEEB}
#tab-board .mem-file.missing{border-left:3px solid var(--sig-error)}
#tab-board .mem-frow{display:flex;align-items:flex-start;gap:12px;padding:10px 12px}
#tab-board .mem-fcol{min-width:0;flex:1;display:flex;flex-direction:column;gap:3px}
#tab-board .mem-fname{font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:500;color:var(--ink);word-break:break-all}
#tab-board .mem-fmeta{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted)}
#tab-board .mem-fdesc{font-family:'Inter',sans-serif;font-size:12px;color:var(--muted);line-height:1.4;margin-top:2px}
#tab-board .mem-lines.warn{color:var(--sig-block);font-weight:600}
#tab-board .mem-tag{
  font-family:'JetBrains Mono',monospace;font-size:8.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--sig-run);border:1px solid var(--sig-run);
  border-radius:2px;padding:1px 4px;margin-left:6px;vertical-align:middle;
}
#tab-board .mem-actions{margin-left:auto;display:flex;gap:6px;flex:none;align-items:center}
#tab-board .mem-btn{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.05em;
  padding:5px 9px;border:1px solid var(--rule);background:var(--panel);
  cursor:pointer;color:var(--ink);border-radius:2px;white-space:nowrap;
}
#tab-board .mem-btn:hover{background:var(--paper)}
#tab-board .mem-btn:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .mem-btn[disabled]{opacity:.5;cursor:not-allowed}
#tab-board .mem-btn.primary{background:var(--emph);color:var(--on-emph);border-color:var(--emph)}
#tab-board .mem-btn.danger{color:var(--sig-error);border-color:var(--sig-error)}
#tab-board .mem-lock{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);cursor:help;white-space:nowrap}
#tab-board .mem-editor{border-top:1px solid var(--rule);padding:12px;background:#FCFCFB}
#tab-board .mem-editor textarea{
  width:100%;box-sizing:border-box;min-height:300px;resize:vertical;
  font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.55;
  border:1px solid var(--rule);padding:10px;color:var(--ink);background:#fff;
}
#tab-board .mem-editor textarea:focus-visible{outline:2px solid var(--emph);outline-offset:0}
#tab-board .mem-warn{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--sig-block);margin-top:7px;line-height:1.4}
#tab-board .mem-ed-foot{display:flex;align-items:center;gap:10px;margin-top:9px}
#tab-board .mem-dirty{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--sig-block)}
#tab-board .mem-ed-actions{margin-left:auto;display:flex;gap:6px}

/* ---------- delivered panel (task #12809) ---------- */
#tab-board .dv-panel{
  position:fixed;top:0;right:0;bottom:0;width:560px;max-width:100%;
  background:var(--panel);border-left:1px solid var(--rule);
  transform:translateX(100%);transition:transform .32s cubic-bezier(.32,.72,0,1);
  z-index:50;display:flex;flex-direction:column;
}
#tab-board .dv-panel.open{transform:none}
/* find-a-task box (#1000281): lives in the panel head, OUTSIDE #dv-body, so the
 * result re-render never destroys the input being typed into (#13268). */
#tab-board .dv-search{display:flex;gap:8px;align-items:center;padding:10px 20px;border-bottom:1px solid var(--rule)}
#tab-board .dv-find{flex:1;min-width:0;box-sizing:border-box;
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  background:var(--paper);border:1px solid var(--rule);border-radius:3px;padding:7px 10px}
#tab-board .dv-find::placeholder{color:var(--muted)}
#tab-board .dv-find:focus{outline:2px solid var(--emph);outline-offset:1px;border-color:var(--emph)}
#tab-board .dv-find-clear{flex:none;width:30px;height:30px;cursor:pointer;border-radius:3px;
  background:none;border:1px solid var(--rule);color:var(--muted);font-size:13px;line-height:1}
#tab-board .dv-find-clear:hover{background:var(--paper);color:var(--ink);border-color:var(--emph)}
#tab-board .dv-find-clear:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-body{overflow-y:auto;padding:16px 20px 40px;flex:1}
#tab-board .dv-loading, #tab-board .dv-empty{
  font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--muted);
  padding:12px 2px;line-height:1.5;
}
#tab-board .dv-count{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);margin:0 0 12px;
}
/* live auto-refresh (#13077): "live" ticker on the count line, and a brief
 * highlight on rows that arrived while the panel was open */
#tab-board .dv-live{float:right;display:inline-flex;align-items:center;gap:5px;opacity:.8}
#tab-board .dv-live::before{
  content:"";width:6px;height:6px;border-radius:50%;background:var(--sig-run);
  animation:dvPulse 2.2s ease-in-out infinite;
}
@keyframes dvPulse{0%,100%{opacity:1}50%{opacity:.2}}
#tab-board .dv-item{border:1px solid var(--rule);border-left:3px solid var(--sig-run);
  background:var(--panel);margin-bottom:8px;padding:11px 13px}
#tab-board .dv-item.dv-new{border-left-color:var(--sig-busy);animation:dvArrive .55s ease-out}
@keyframes dvArrive{
  from{opacity:.35;transform:translateY(-6px);background:rgba(255,255,255,.09)}
  to{opacity:1;transform:none;background:var(--panel)}
}
#tab-board .dv-newtag{
  padding:1px 7px;border-radius:10px;border:1px solid var(--sig-busy);
  color:var(--sig-busy);letter-spacing:.08em;text-transform:uppercase;font-size:9.5px;
}
@media (prefers-reduced-motion:reduce){
  #tab-board .dv-live::before{animation:none}
  #tab-board .dv-item.dv-new{animation:none}
}
#tab-board .dv-irow{display:flex;gap:12px;align-items:baseline}
#tab-board .dv-ititle{flex:1;min-width:0;font-size:14px;font-weight:500;line-height:1.35}
#tab-board .dv-when{flex:none;font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--muted);white-space:nowrap}
#tab-board .dv-meta{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:7px 0 0;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--muted)}
#tab-board .dv-agent{color:var(--ink);font-weight:500}
#tab-board .dv-grp{padding:1px 7px;border:1px solid var(--rule);border-radius:10px;
  max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#tab-board .dv-id{margin-left:auto;opacity:.7}
/* a search result can be any status/board, so drop the green "delivered" spine
 * and carry a status chip + board pill (#1000281) */
#tab-board .dv-item.dv-found{border-left-color:var(--muted)}
#tab-board .dv-board{padding:1px 7px;border:1px solid var(--rule);border-radius:10px;
  max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#tab-board .dv-st{padding:1px 8px;border-radius:10px;border:1px solid var(--rule);color:var(--muted);
  letter-spacing:.06em;text-transform:uppercase;font-size:9.5px;white-space:nowrap}
#tab-board .dv-st-done{border-color:var(--sig-run);color:var(--sig-run)}
#tab-board .dv-st-in_progress, #tab-board .dv-st-todo{border-color:var(--sig-busy);color:var(--sig-busy)}
#tab-board .dv-st-blocked{border-color:var(--sig-error);color:var(--sig-error)}
#tab-board .dv-st-backlog, #tab-board .dv-st-archived{border-color:var(--sig-idle);color:var(--sig-idle)}
#tab-board .dv-desc{margin-top:9px}
#tab-board .dv-desc summary{cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:10.5px;
  color:var(--muted);letter-spacing:.04em;padding:2px 0}
#tab-board .dv-desc summary:hover{color:var(--ink)}
#tab-board .dv-find-back{margin-left:12px;padding:2px 8px;cursor:pointer;vertical-align:middle;
  background:none;border:1px solid var(--rule);color:var(--muted);border-radius:2px;
  font-family:'JetBrains Mono',monospace;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase}
#tab-board .dv-find-back:hover{background:var(--paper);color:var(--ink);border-color:var(--emph)}
#tab-board .dv-find-back:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-fbwrap{margin-top:9px}
#tab-board .dv-fbtoggle{
  background:none;border:1px solid var(--rule);cursor:pointer;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--ink);
  padding:4px 9px;border-radius:2px;
}
#tab-board .dv-fbtoggle:hover{background:var(--paper)}
#tab-board .dv-fbtoggle:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-nofb{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);opacity:.7}
/* "Discuss with agent" follow-up affordance (#12953) */
#tab-board .dv-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
#tab-board .dv-discuss{
  background:var(--panel);border:1px solid var(--rule);cursor:pointer;
  font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--ink);
  padding:4px 9px;border-radius:2px;
}
#tab-board .dv-discuss:hover{background:var(--paper);border-color:var(--emph)}
#tab-board .dv-discuss[aria-expanded="true"]{border-color:var(--emph);background:var(--paper)}
#tab-board .dv-discuss:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-compose{margin-top:9px;animation:composeIn .18s ease}
#tab-board .dv-compose textarea{
  width:100%;box-sizing:border-box;resize:vertical;min-height:52px;
  font-family:'Inter',sans-serif;font-size:14px;line-height:1.4;
  padding:8px 10px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);
  border-radius:2px;
}
#tab-board .dv-compose textarea:focus{outline:2px solid var(--emph);outline-offset:-1px;border-color:var(--emph)}
#tab-board .dv-compose-bar{display:flex;align-items:center;gap:10px;margin-top:7px}
#tab-board .dv-compose-note{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);margin-right:auto;
}
#tab-board .dv-cancel, #tab-board .dv-send{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:6px 13px;border-radius:2px;cursor:pointer;flex:none;
}
#tab-board .dv-cancel{border:1px solid var(--rule);background:transparent;color:var(--muted)}
#tab-board .dv-cancel:hover{border-color:var(--emph);color:var(--ink)}
#tab-board .dv-send{border:0;background:var(--emph);color:var(--on-emph)}
#tab-board .dv-send[disabled]{background:var(--rule);color:var(--muted);cursor:not-allowed}
#tab-board .dv-cancel:focus-visible, #tab-board .dv-send:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-compose-err{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-error);margin-top:6px;display:none}
#tab-board .dv-compose-err.show{display:block}
#tab-board .dv-sent{
  margin-top:8px;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sig-ok,#2e7d32);
  animation:composeIn .18s ease;
}
#tab-board .dv-fb{
  margin-top:8px;word-break:break-word;
  font-size:12.5px;line-height:1.55;color:var(--ink);
  background:var(--paper);border:1px solid var(--rule);padding:10px 12px;
}
/* rendered-markdown feedback */
#tab-board .dv-fb>:first-child{margin-top:0}
#tab-board .dv-fb>:last-child{margin-bottom:0}
#tab-board .dv-fb p, #tab-board .dv-fb ul, #tab-board .dv-fb ol, #tab-board .dv-fb table, #tab-board .dv-fb pre, #tab-board .dv-fb blockquote{margin:7px 0}
#tab-board .dv-fb h1, #tab-board .dv-fb h2, #tab-board .dv-fb h3, #tab-board .dv-fb h4{margin:13px 0 5px;font-size:13px;line-height:1.3}
#tab-board .dv-fb ul, #tab-board .dv-fb ol{padding-left:20px}
#tab-board .dv-fb li{margin:2px 0}
#tab-board .dv-fb table{border-collapse:collapse;display:block;overflow-x:auto;max-width:100%;font-size:12px}
#tab-board .dv-fb th, #tab-board .dv-fb td{border:1px solid var(--rule);padding:4px 8px;text-align:left;vertical-align:top}
#tab-board .dv-fb th{background:var(--panel);font-weight:600}
#tab-board .dv-fb code{font-family:'JetBrains Mono',monospace;font-size:11.5px;background:var(--panel);
  border:1px solid var(--rule);padding:0 4px;border-radius:2px}
#tab-board .dv-fb pre{background:var(--panel);border:1px solid var(--rule);padding:8px 10px;overflow-x:auto}
#tab-board .dv-fb pre code{background:none;border:none;padding:0}
#tab-board .dv-fb img{max-width:100%;height:auto;border:1px solid var(--rule)}
#tab-board .dv-fb blockquote{border-left:3px solid var(--rule);margin-left:0;padding-left:10px;color:var(--muted)}
#tab-board .dv-fb hr{border:none;border-top:1px solid var(--rule);margin:10px 0}
#tab-board .dv-fb a{color:var(--ink);text-decoration:underline}
#tab-board .dv-btn{
  display:block;width:100%;margin-top:12px;padding:9px;cursor:pointer;
  background:var(--panel);border:1px solid var(--rule);color:var(--ink);
  font-family:'JetBrains Mono',monospace;font-size:11px;border-radius:2px;
}
#tab-board .dv-btn:hover{background:var(--paper)}
#tab-board .dv-btn:focus-visible{outline:2px solid var(--emph);outline-offset:2px}
#tab-board .dv-alldone{margin-top:14px;text-align:center;font-family:'JetBrains Mono',monospace;
  font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

/* ---------- mobile ---------- */
@media (min-width:841px){
  #tab-board .stage-head{display:block}
}
@media (max-width:840px){
  #tab-board{--row-h:auto;--gutter:0}
  #tab-board main{padding:0 14px 48px}
  /* add-task form: full-width input, comfy tap targets (#12813) */
  #tab-board .bl-add{min-height:34px}
  #tab-board .bl-add-input{flex:1 1 100%}
  #tab-board .bl-add-count{flex:1 1 100%;text-align:right}
  #tab-board .bl-add-sel{flex:1 1 46%;max-width:none;min-height:42px}
  #tab-board .bl-add-save, #tab-board .bl-add-cancel{flex:1 1 46%;min-height:44px}
  #tab-board .row{
    display:block;padding:13px 0 15px;height:auto;
    border-bottom:1px solid var(--rule);
  }
  #tab-board .gutter{width:auto;padding:0 0 7px 0;gap:8px}
  #tab-board .agent-sub{display:none}
  #tab-board .m-elapsed{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--muted)}
  #tab-board .track{height:auto;display:block}
  #tab-board .ticks, #tab-board .rail, #tab-board .trail{display:none}
  #tab-board .pill{
    position:static;transform:none;max-width:100%;
    border:0;background:none;padding:0;box-shadow:none;
    display:block;
  }
  #tab-board .task-title{max-width:100%;white-space:normal;font-size:15px;line-height:1.35}
  #tab-board .pill .meta{display:none}
  #tab-board .m-rail{
    display:flex;align-items:center;gap:10px;margin-top:9px;
  }
  #tab-board .m-bar{flex:1;height:3px;background:var(--rule);position:relative;overflow:hidden}
  #tab-board .m-bar i{
    position:absolute;left:0;top:0;bottom:0;background:var(--emph);opacity:.75;
    transition:width .65s cubic-bezier(.32,.72,0,1);
  }
  #tab-board .m-stage{
    font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.1em;
    text-transform:uppercase;color:var(--muted);flex:none;
  }
  #tab-board .m-cost{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);flex:none}
  #tab-board .idle-note{position:static;transform:none}
  #tab-board .inspector{
    top:auto;height:92vh;width:100%;border-left:0;border-top:1px solid var(--rule);
    transform:translateY(100%);border-radius:10px 10px 0 0;
  }
  #tab-board .inspector.open{transform:none}
  #tab-board .mem-panel{
    top:auto;height:92vh;width:100%;border-left:0;border-top:1px solid var(--rule);
    transform:translateY(100%);border-radius:10px 10px 0 0;
  }
  #tab-board .mem-panel.open{transform:none}
  #tab-board .dv-panel{
    top:auto;height:92vh;width:100%;border-left:0;border-top:1px solid var(--rule);
    transform:translateY(100%);border-radius:10px 10px 0 0;
  }
  #tab-board .dv-panel.open{transform:none}
  #tab-board .mem-frow{flex-wrap:wrap}
  #tab-board .mem-actions{margin-left:0;width:100%;justify-content:flex-end}
  #tab-board .insp-head::before{
    content:"";position:absolute;top:8px;left:50%;transform:translateX(-50%);
    width:34px;height:3px;background:var(--rule);border-radius:2px;
  }
  #tab-board .insp-head{position:relative;padding-top:22px}
  #tab-board .tally{width:100%;margin:8px 0 0}

  #tab-board .backlog{padding:0 14px}
  #tab-board .bl-cols{display:none}
  /* #12792 — flex the card so the action controls form a consistent footer
     (assign chip left, Run + Msg pinned bottom-right) regardless of title length.
     #12793 — vertical-rhythm + typographic-hierarchy polish. Every card reads
     top-down with identical spacing: TITLE (ink, 15/1.4, medium) → STATUS LINE
     (colour-dot affordance + priority) → ACTION FOOTER. bl-compose / bl-assign are
     siblings of .bl-row (children of .bl-item) so they still lay out below unaffected. */
  #tab-board .bl-row{
    display:flex;flex-wrap:wrap;align-items:center;gap:0 8px;
    height:auto;padding:13px 0 14px;grid-template-columns:none;
  }
  #tab-board .bl-row.claiming{height:0;padding:0;opacity:0}
  #tab-board .bl-task{
    flex:1 1 100%;order:0;white-space:normal;
    font-size:15px;line-height:1.4;font-weight:500;color:var(--ink);
  }
  #tab-board .bl-task .tid{font-size:11px}
  /* status line — coloured dot + human status, then the priority tag */
  #tab-board .bl-line{
    flex:1 1 100%;order:1;display:flex;flex-wrap:wrap;gap:5px 10px;
    align-items:center;margin-top:6px;
  }
  #tab-board .bl-row > .bl-meta, #tab-board .bl-row > .bl-pri{display:none}
  #tab-board .bl-line > .bl-meta{display:none}          /* worker name is redundant — it's in the chip below */
  #tab-board .bl-line > .bl-status{
    display:inline-flex;align-items:center;gap:6px;
    font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);
  }
  #tab-board .bl-line > .bl-status::before{
    content:"";width:6px;height:6px;border-radius:50%;flex:none;background:var(--sig-idle);
  }
  #tab-board .bl-line > .bl-status.s-held::before{background:var(--sig-block)}
  #tab-board .bl-line > .bl-status.s-ready::before{background:var(--sig-run)}
  #tab-board .bl-line > .bl-status.s-busy::before, #tab-board .bl-line > .bl-status.s-squad::before{background:var(--sig-busy)}
  #tab-board .bl-line > .bl-status.s-await::before{background:var(--sig-idle)}
  /* #1000023 — held on another card. Reads as a block (it is one), but it is a
     MACHINE wait: nobody has to answer it, it clears when the other card lands. */
  #tab-board .bl-line > .bl-status.s-dep::before{background:var(--sig-block)}
  #tab-board .bl-line > .bl-status.s-dep{color:var(--sig-block)}
  #tab-board .bl-line > .bl-status.s-ready{color:var(--sig-run)}   /* ready = actionable — tint the label */
  /* #13172 — queued rows: dot goes run-green and pulses (spinner lives on .st on desktop) */
  #tab-board .bl-row.queued .bl-line > .bl-status{color:var(--sig-run)}
  #tab-board .bl-row.queued .bl-line > .bl-status::before{
    background:var(--sig-run);
    animation:bl-queued-pulse 1.1s ease-in-out infinite;
  }
  /* #13167 — tappable on mobile: no hover to reveal the affordance, so the
     border and caret are always shown rather than appearing on :hover */
  #tab-board .bl-line > .bl-pri{
    display:inline-flex;align-items:center;font-family:'JetBrains Mono',monospace;
    font-size:10.5px;letter-spacing:.06em;color:var(--muted);
    border:1px solid var(--rule);padding:5px 8px;margin:0;border-radius:3px;
  }
  #tab-board .bl-line > .bl-pri .bl-caret{opacity:1}
  #tab-board .bl-line > .bl-pri.p2{color:var(--sig-error);font-weight:600}
  #tab-board .bl-line > .bl-pri.p1{color:var(--sig-block)}
  #tab-board .bl-ppick{padding:11px 8px;font-size:14px}   /* comfortable tap targets */
  /* action footer */
  #tab-board .bl-row > .bl-agent{
    order:2;display:inline-flex;align-items:center;min-height:44px;
    margin:14px auto 0 0;   /* margin-right:auto pushes Run + Msg to the right */
    border:1px solid var(--rule);padding:6px 12px;border-radius:3px;overflow:visible;
    font-size:12px;
  }
  #tab-board .bl-row > .bl-agent .st{display:none}       /* status now lives on the line above */
  #tab-board .bl-row > .bl-agent .bl-caret{opacity:1;margin-left:5px}
  #tab-board .bl-msg, #tab-board .bl-run{
    width:auto;min-height:44px;padding:0 20px;margin-top:14px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  #tab-board .bl-msg{order:3}
  #tab-board .bl-run{order:4}
  #tab-board .bl-trash{
    order:5;width:auto;min-height:44px;padding:0 16px;margin-top:14px;
    display:inline-flex;align-items:center;justify-content:center;
    border:1px solid var(--rule);border-radius:3px;opacity:1;
  }
  /* #12855 — on mobile the popover reverts to a natural in-flow block (the
     Assign button wraps, so a floating anchor would be unpredictable) */
  #tab-board .bl-assign{position:static;max-width:none;margin:0 0 12px;box-shadow:none}
  #tab-board .bl-item:has(.bl-assign) > .bl-row{border-bottom:0}
  #tab-board .bl-pri{text-align:left}
  /* #1000066 — comfortable tap target; the note wraps under it on a phone */
  #tab-board .bl-block{min-height:44px;padding:0 16px;display:inline-flex;align-items:center}
  #tab-board .bl-block-note{flex:1 1 100%}
  #tab-board .bl-compose{padding:2px 0 12px}
  #tab-board .bl-compose-bar{flex-wrap:wrap}
  #tab-board .bl-compose-note{width:100%;margin-bottom:4px}

  /* #12791 — each group is a distinct collapsible card on mobile */
  #tab-board .bl-group{
    padding-left:0;margin-bottom:12px;border-left:0;
    background:var(--panel);border:1px solid var(--rule);
    border-radius:10px;overflow:hidden;
  }
  #tab-board .bl-group.released{border-color:var(--sig-run)}
  #tab-board .bl-ghead{
    flex-wrap:wrap;row-gap:3px;gap:10px;align-items:center;
    padding:12px 14px;min-height:44px;cursor:pointer;
    -webkit-tap-highlight-color:transparent;
  }
  #tab-board .bl-ghead:active{background:rgba(255,255,255,.05)}
  #tab-board .bl-toggle{font-size:15px;width:16px;color:var(--ink);opacity:.6;order:0}
  #tab-board .bl-gname{flex:1;min-width:0;order:1;font-size:16px;line-height:1.3}
  #tab-board .bl-gmeta{width:100%;padding-left:26px;order:2;margin-top:1px;letter-spacing:.02em}
  #tab-board .bl-release{
    margin-left:26px;order:3;margin-top:8px;min-height:38px;padding:0 14px;
    display:inline-flex;align-items:center;
  }
  #tab-board .bl-release[disabled]{margin-left:26px;min-height:0;padding:2px 0 0}
  /* mode chip drops onto its own row with the button, tap target ≥38px (#1000004) */
  #tab-board .bl-mode{margin-left:26px;order:3;margin-top:8px;min-height:38px;display:inline-flex;align-items:center}
  #tab-board .bl-release{margin-left:8px;order:4}
  #tab-board .bl-release[disabled]{margin-left:8px}
  /* divide the header zone from the item list so each group reads as one card */
  #tab-board .bl-gitems{padding:4px 14px 6px;border-top:1px solid var(--rule)}

  #tab-board .blockers{padding:12px 14px 4px;margin-bottom:20px}
  #tab-board .bk-item{grid-template-columns:1fr;gap:9px}
  #tab-board .bk-q{font-size:15px}
  #tab-board .bk-hint{display:none}

  #tab-board .bl-split{display:block}
  #tab-board .planner{
    border-left:0;border-top:1px solid var(--rule);
    padding-left:0;padding-top:16px;margin-top:6px;position:static;
  }
  #tab-board .pl-log{max-height:none}
  #tab-board .pl-chips{flex-direction:column;align-items:stretch;max-height:none}
  #tab-board .pl-chip{width:100%}
  #tab-board .pl-chip:not(.pl-chip-add):not(.pl-chip-save):not(.pl-chip-cancel){justify-content:space-between}
  #tab-board .pl-chip-txt{max-width:none}
  #tab-board .pl-chip-form{width:100%}
  #tab-board .pl-chip-input{flex:1;min-width:0}
}
@media (prefers-reduced-motion:reduce){
  #tab-board *{transition-duration:.01ms!important;animation-duration:.01ms!important}
  #tab-board .pill, #tab-board .trail, #tab-board .m-bar i{transition:none!important}
}
#tab-board .m-rail{display:none}
@media (max-width:840px){#tab-board .m-rail{display:flex}}
#tab-board .m-elapsed{display:none}
@media (max-width:840px){#tab-board .m-elapsed{display:block}}

/* ---------- board top row: two columns (#13289) ----------
   LEFT column keeps the amber "attention" stack (#xb-alert / #blockers /
   #blocked-tasks) stacked exactly as before; RIGHT column is the customer
   panel at ~30%.
   QUIET BOARD: all three left boxes ship `hidden` and only unhide when there
   is something to show, so most of the time the left column is EMPTY. :has()
   drops it. No JS involved — the boxes already toggle the `hidden` attribute,
   so the layout follows for free.
   Below the breakpoint it is one column throughout, panel under the boxes.

   #13392 — the right track is the SAME RAIL as .planner below it: 352px fixed,
   26px gutter, not the old `minmax(210px,30%)` at a 20px gap. Those two rows
   are stacked and read as one right-hand rail, so a 417px panel sitting 66px
   left of a 352px planner was the only misalignment on the board. Keep the
   FOUR numbers (352px / 26px / grid-column 2 / the 841px breakpoint) in
   lock-step with .bl-split — changing one without the other re-opens this.
   The breakpoint moved 901px -> 841px to match .bl-split's own `display:block`
   query: at 901px they disagreed across a 60px band where the planner was
   still a 352px rail while the panel above it had already gone full width.
   The panel is EXPLICITLY placed in column 2 because on a quiet board .tg-left
   is display:none and auto-placement would otherwise drop the panel into the
   1fr track — i.e. it would silently go full-width again, which is exactly the
   varies-with-whatever-alert-is-showing behaviour #13392 removed. That does
   leave an empty 1fr on a quiet board: intended, the panel now holds the rail.
   Mirrored into board-embed.css by rebrand-board-embed.py — never hand-edit
   that file, regenerate it. */
#tab-board .top-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:0 26px;align-items:start}
#tab-board .tg-left{min-width:0}
#tab-board .tg-left:not(:has(> :not([hidden]))){display:none}
@media (min-width:841px){
  #tab-board .top-grid{grid-template-columns:minmax(0,1fr) 352px}
  #tab-board .top-grid > .cust-panel{grid-column:2}
}

/* customer panel — shell + empty state only (#13289); search + contact
   rendering lands in the next card. Neutral --rule border on purpose: amber
   is the board's "paused / needs you" signal and this panel is not that.
   NAMESPACE IS `cust-`, NOT `cp-`: the customer_portal extension injects a
   runtime <style> holding ~50 UNSCOPED `.cp-*` rules, including
   `.cp-empty{text-align:center}`. Injected late, it beats board-embed.css on
   source order, and `#tab-board .cp-empty` only shields the properties we
   actually declare — so the empty state silently centred in the SPA while
   staying left-aligned on standalone /board. Keep new classes off `cp-`. */
#tab-board .cust-panel{
  border:1px solid var(--rule);border-radius:2px;background:var(--panel);
  margin:0 0 26px;padding:14px 16px 12px;min-width:0;
}
#tab-board .cust-head{display:flex;align-items:baseline;gap:9px;padding-bottom:8px}
#tab-board .cust-pip{width:7px;height:7px;border-radius:50%;background:var(--sig-idle);align-self:center;flex:none}
#tab-board .cust-head h2{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink);
}
#tab-board .cust-body{min-width:0}
#tab-board .cust-empty{
  margin:0;font-family:'JetBrains Mono',monospace;font-size:11px;
  color:var(--muted);letter-spacing:.02em;
}
/* a mapped customer's name must ellipsis inside the track, never widen it */
#tab-board .cust-name{
  display:block;min-width:0;font-family:'JetBrains Mono',monospace;font-size:12px;
  color:var(--ink);letter-spacing:.02em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}

/* ---------- customer chip + picker + detail (#13290) ----------
   The chip carries the mapped name, so it needs its own ellipsis track — a long
   company name must never widen the header row. The picker's result list is
   IN FLOW inside the panel (not an absolutely-positioned popover): nothing
   renders behind it, so the translucent embed var(--panel) can't ghost, which
   is the #12816 trap every floating board surface has to be patched out of.
   Tokens + rebrand-mapped tint literals only — no hardcoded hex (#12818). */
#tab-board .chip-cust{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* the chip family is uppercase, but a person's NAME shouted in caps reads
   wrong — and the board pill beside it already renders mixed case ("Zack
   Admin"). Placeholder stays uppercase like its siblings. */
#tab-board .chip-cust.is-set{border-color:var(--emph);color:var(--ink);text-transform:none;letter-spacing:.03em}

#tab-board .cust-idrow{display:flex;align-items:flex-start;gap:8px}
#tab-board .cust-idrow .cust-name{flex:1 1 auto}
#tab-board .cust-x{
  flex:none;width:22px;height:22px;line-height:1;font-size:15px;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  cursor:pointer;border-radius:2px;padding:0;
}
#tab-board .cust-x:hover{color:var(--sig-error);border-color:var(--sig-error)}
#tab-board .cust-sub{
  margin:5px 0 0;font-family:'JetBrains Mono',monospace;font-size:11px;
  color:var(--muted);letter-spacing:.02em;overflow-wrap:anywhere;
}
#tab-board .cust-rows{display:flex;flex-direction:column;gap:5px;margin-top:10px}
#tab-board .cust-row{display:flex;gap:8px;align-items:baseline;min-width:0}
#tab-board .cust-k{
  flex:none;width:54px;font-family:'JetBrains Mono',monospace;font-size:9px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted);
}
#tab-board .cust-v{
  min-width:0;font-family:'JetBrains Mono',monospace;font-size:11px;
  color:var(--ink);letter-spacing:.02em;overflow-wrap:anywhere;
}
#tab-board .cust-link{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--rule)}
#tab-board .cust-link:hover{border-bottom-color:currentColor}
#tab-board .cust-addr{white-space:pre-line}
#tab-board .cust-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}
#tab-board .cust-tag{
  font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);
  border:1px solid var(--rule);border-radius:2px;padding:2px 6px;
}
/* #13298 — what mapping this customer actually did to the board's data.
   A footnote, not an alert: hairline rule, muted, no colour signal. `anywhere`
   so a long stamped name wraps instead of widening the panel. */
#tab-board .cust-stamp{
  margin:11px 0 0;padding-top:9px;border-top:1px solid var(--rule);
  font-family:'JetBrains Mono',monospace;font-size:10px;line-height:1.55;
  color:var(--muted);letter-spacing:.02em;overflow-wrap:anywhere;
}
#tab-board .cust-stamp-as{color:var(--ink)}

#tab-board .cust-change{
  margin-top:12px;font-family:'JetBrains Mono',monospace;font-size:10px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--muted);
  border:1px solid var(--rule);background:transparent;border-radius:2px;
  padding:5px 9px;cursor:pointer;
}
#tab-board .cust-change:hover{color:var(--ink);border-color:var(--emph)}

#tab-board .cust-search{margin-top:10px;min-width:0}
#tab-board .cust-q{
  width:100%;box-sizing:border-box;font-family:'JetBrains Mono',monospace;font-size:12px;
  color:var(--ink);background:transparent;border:1px solid var(--rule);
  border-radius:2px;padding:7px 9px;min-height:34px;
}
#tab-board .cust-q::placeholder{color:var(--muted)}
#tab-board .cust-q:focus{outline:2px solid var(--emph);outline-offset:1px}
#tab-board .cust-results{
  list-style:none;margin:6px 0 0;padding:0;max-height:262px;overflow-y:auto;
  border:1px solid var(--rule);border-radius:2px;
}
#tab-board .cust-opt{
  display:flex;flex-direction:column;gap:2px;padding:7px 9px;cursor:pointer;
  border-bottom:1px solid var(--rule);min-width:0;
}
#tab-board .cust-opt:last-child{border-bottom:0}
#tab-board .cust-opt.current{background:var(--soft-hi)}
#tab-board .cust-opt:hover{background:var(--soft)}
#tab-board .cust-opt-name{
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .cust-opt-tag{
  margin-left:6px;font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--sig-run);
}
#tab-board .cust-opt-meta{
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--muted);
  letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .cust-msg{
  margin:6px 0 0;font-family:'JetBrains Mono',monospace;font-size:10px;
  color:var(--muted);letter-spacing:.02em;overflow-wrap:anywhere;
}
/* touch: the chip and the unmap/change controls need a real target */
@media (max-width:840px){
  #tab-board .cust-x{width:30px;height:30px;font-size:17px}
  #tab-board .cust-change{padding:8px 11px}
  #tab-board .cust-q{min-height:40px}
}

/* ---------- Drive folder picker (#13409) ----------
   A slide-down disclosure under the header, NOT a modal (Mike's word was
   "slide-down") and NOT a popover — same reasoning as the customer picker: it is
   IN FLOW, so nothing renders behind it and the translucent embed var(--panel)
   cannot ghost (#12816). It pushes the board down while open and takes the space
   back when closed, which is why it sits between header.bar and .top-grid rather
   than inside the customer rail.

   NAMESPACE IS `drv-`, deliberately not `dr-`/`drive-`: extension frontend.js
   files inject UNSCOPED runtime <style> blocks that beat board-embed.css on
   source order (#13289 — customer_portal's `.cp-empty{text-align:center}` silently
   centred the customer empty state in the SPA only). Verified free across
   client_extensions/*/#tab-board static/* before use.

   Tokens + the rebrand-mapped tint vars only — no hardcoded hex (#12818), #tab-board so
   rebrand-board-embed.py themes the dark embed with no OVERRIDES entry. */
.drv-panel{
  border:1px solid var(--rule);border-radius:2px;background:var(--panel);
  margin:0 0 22px;padding:13px 16px 14px;min-width:0;
}
/* an author display: rule beats the UA [hidden] rule at equal specificity, and
   this panel is animated — pin the closed state explicitly (#13089/#12836). */
#tab-board .drv-panel[hidden]{display:none}
@media (prefers-reduced-motion:no-preference){
  #tab-board .drv-panel{animation:drv-slide .18s ease-out}
}
@keyframes drv-slide{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}

#tab-board .drv-head{display:flex;align-items:center;gap:9px;padding-bottom:10px}
#tab-board .drv-pip{width:7px;height:7px;border-radius:50%;background:var(--sig-idle);flex:none}
#tab-board .drv-head h2{
  margin:0;flex:1 1 auto;font-family:'JetBrains Mono',monospace;font-size:10px;
  font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);
}
#tab-board .drv-x{
  flex:none;width:22px;height:22px;line-height:1;font-size:15px;
  border:1px solid var(--rule);background:transparent;color:var(--muted);
  cursor:pointer;border-radius:2px;padding:0;
}
#tab-board .drv-x:hover{color:var(--ink);border-color:var(--emph)}

/* the mapped folder, shown above the browser so "what is mapped now" is never
   ambiguous while you are picking a replacement */
#tab-board .drv-current{
  display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap;
  border:1px solid var(--rule);border-radius:2px;background:var(--soft);
  padding:9px 11px;margin-bottom:12px;min-width:0;
}
#tab-board .drv-cur-main{flex:1 1 220px;min-width:0}
#tab-board .drv-cur-name{
  display:block;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .drv-cur-path{
  display:block;margin-top:3px;font-family:'JetBrains Mono',monospace;font-size:10px;
  color:var(--muted);letter-spacing:.02em;overflow-wrap:anywhere;
}
#tab-board .drv-cur-acts{display:flex;align-items:center;gap:8px;flex:none}
#tab-board .drv-open{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);text-decoration:none;
  border:1px solid var(--rule);border-radius:2px;padding:5px 9px;white-space:nowrap;
}
#tab-board .drv-open:hover{color:var(--ink);border-color:var(--emph)}

#tab-board .drv-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
#tab-board .drv-crumbs{display:flex;align-items:center;flex-wrap:wrap;gap:2px;flex:1 1 240px;min-width:0}
#tab-board .drv-crumb{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.02em;
  color:var(--muted);background:transparent;border:0;border-radius:2px;
  padding:3px 5px;cursor:pointer;max-width:190px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .drv-crumb:hover{color:var(--ink);background:var(--soft)}
#tab-board .drv-crumb[aria-current="true"]{color:var(--ink);cursor:default}
#tab-board .drv-crumb[aria-current="true"]:hover{background:transparent}
#tab-board .drv-sep{color:var(--muted);font-size:10px;opacity:.6;flex:none}
#tab-board .drv-q{
  flex:0 1 220px;min-width:0;box-sizing:border-box;
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  background:transparent;border:1px solid var(--rule);border-radius:2px;
  padding:7px 9px;min-height:34px;
}
#tab-board .drv-q::placeholder{color:var(--muted)}
#tab-board .drv-q:focus{outline:2px solid var(--emph);outline-offset:1px}

#tab-board .drv-list{
  list-style:none;margin:9px 0 0;padding:0;max-height:288px;overflow-y:auto;
  border:1px solid var(--rule);border-radius:2px;min-width:0;
}
#tab-board .drv-list:empty{display:none}
#tab-board .drv-opt{
  display:flex;align-items:center;gap:9px;padding:7px 9px;cursor:pointer;
  border-bottom:1px solid var(--rule);min-width:0;
}
#tab-board .drv-opt:last-child{border-bottom:0}
#tab-board .drv-opt.current{background:var(--soft-hi)}
#tab-board .drv-opt:hover{background:var(--soft)}
#tab-board .drv-ic{flex:none;font-size:11px;color:var(--muted);line-height:1}
#tab-board .drv-opt-main{flex:1 1 auto;min-width:0}
#tab-board .drv-opt-name{
  display:block;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);
  letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .drv-opt-path{
  display:block;margin-top:2px;font-family:'JetBrains Mono',monospace;font-size:10px;
  color:var(--muted);letter-spacing:.02em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* suggestion only — never an auto-map (#13410's "when instructed" fence) */
#tab-board .drv-tag{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--sig-run);
}
#tab-board .drv-in{
  flex:none;font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);border:1px solid var(--rule);
  background:transparent;border-radius:2px;padding:3px 6px;cursor:pointer;
}
#tab-board .drv-in:hover{color:var(--ink);border-color:var(--emph)}
#tab-board .drv-more{
  display:block;width:100%;box-sizing:border-box;text-align:left;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);background:transparent;
  border:0;border-top:1px solid var(--rule);padding:8px 9px;cursor:pointer;
}
#tab-board .drv-more:hover{color:var(--ink);background:var(--soft)}

#tab-board .drv-msg{
  margin:8px 0 0;font-family:'JetBrains Mono',monospace;font-size:10px;
  color:var(--muted);letter-spacing:.02em;overflow-wrap:anywhere;
}
#tab-board .drv-msg.is-err{color:var(--sig-error)}

#tab-board .drv-newform{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;min-width:0}
#tab-board .drv-newform[hidden]{display:none}
#tab-board .drv-newq{flex:1 1 220px}

#tab-board .drv-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:11px}
#tab-board .drv-btn{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);border:1px solid var(--rule);
  background:transparent;border-radius:2px;padding:6px 10px;cursor:pointer;
}
#tab-board .drv-btn:hover{color:var(--ink);border-color:var(--emph)}
#tab-board .drv-go{
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink);border:1px solid var(--emph);
  background:transparent;border-radius:2px;padding:6px 12px;cursor:pointer;
  max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#tab-board .drv-go:hover{background:var(--soft-hi)}
#tab-board .drv-go[disabled], #tab-board .drv-btn[disabled]{opacity:.45;cursor:default}
#tab-board .drv-go[disabled]:hover{background:transparent}

/* the chip carries the mapped folder name, so it needs its own ellipsis track —
   a long folder name must never widen the header row (same rule as .chip-cust) */
#tab-board .chip-drive{max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#tab-board .chip-drive.is-set{border-color:var(--emph);color:var(--ink);text-transform:none;letter-spacing:.03em}

/* touch: EVERY control in the picker is a real 40px target. The picker is a
   browser — you tap crumbs, per-row Open buttons and the action pair far more
   than anything in the customer panel — so 30px (the .cust-x size) is not enough
   here. Asserted per-element in browser/13409-verify.cjs rather than eyeballed. */
@media (max-width:840px){
  #tab-board .drv-panel{padding:12px 13px 13px}
  #tab-board .drv-x{width:40px;height:40px;font-size:19px}
  #tab-board .drv-bar{align-items:stretch;flex-direction:column;gap:8px}
  #tab-board .drv-q{flex:1 1 auto;width:100%;min-height:40px}
  #tab-board .drv-list{max-height:262px}
  #tab-board .drv-opt{padding:9px}
  #tab-board .drv-crumb{min-height:40px;padding:3px 8px}
  #tab-board .drv-in{min-height:40px;padding:6px 10px}
  #tab-board .drv-btn, #tab-board .drv-go{min-height:40px;padding:9px 12px}
  #tab-board .drv-newq{min-height:40px}
  #tab-board .drv-actions{justify-content:stretch}
  #tab-board .drv-actions .drv-btn, #tab-board .drv-actions .drv-go{flex:1 1 auto;max-width:none}
}

/* ---------- cross-board feedback alert (#12817) ----------
   Prominent, always-in-flow strip warning that agents on OTHER boards are
   paused for a human answer, so it's visible even while viewing this board.
   Mirrors .blockers surface (var(--panel)) so it's embed-safe (no ghosting). */
#tab-board .xb-alert{
  display:flex;align-items:center;gap:10px 12px;flex-wrap:wrap;
  border:1px solid var(--sig-block);border-left-width:3px;border-radius:2px;
  background:var(--panel);margin:0 0 22px;padding:11px 14px;
}
#tab-board .xb-alert-pip{
  width:8px;height:8px;border-radius:50%;background:var(--sig-block);flex:none;
  animation:pipPulse 1.6s ease-in-out infinite;
}
#tab-board .xb-alert-text{
  font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);letter-spacing:.02em;
}
#tab-board .xb-alert-text b{color:var(--sig-block);font-weight:600}
#tab-board .xb-alert-boards{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
#tab-board .xb-jump{
  font-family:'JetBrains Mono',monospace;font-size:11px;
  border:1px solid var(--sig-block);background:transparent;color:var(--sig-block);
  border-radius:2px;padding:4px 9px;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
}
#tab-board .xb-jump:hover{background:var(--sig-block);color:var(--on-emph)}
#tab-board .xb-jump .xb-jn{background:var(--sig-block);color:var(--on-emph);border-radius:2px;padding:0 5px;font-weight:600;font-size:10px}
#tab-board .xb-jump:hover .xb-jn{background:var(--panel);color:var(--sig-block)}
#tab-board .xb-jump:focus-visible{outline:2px solid var(--emph);outline-offset:2px}

/* tenant switcher — pending-feedback badge (count on OTHER boards) */
#tab-board .tenant-badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:16px;height:16px;padding:0 4px;border-radius:8px;margin-left:2px;
  background:var(--sig-block);color:var(--on-emph);
  font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:600;
  animation:pipPulse 1.8s ease-in-out infinite;
}
#tab-board .tenant-menu button .tb-badge{
  float:right;background:var(--sig-block);color:var(--on-emph);
  border-radius:8px;padding:0 6px;margin-left:8px;
  font-size:10px;font-weight:600;
}
#tab-board .tenant-menu button[aria-selected="true"] .tb-badge{background:var(--panel);color:var(--sig-block)}
@media (max-width:840px){
  #tab-board .xb-alert-boards{margin-left:0;width:100%}
  #tab-board .xb-jump{flex:1 1 auto;justify-content:center;min-height:40px}
}

/* ---------- dockable side panels (task #13027) ----------
   Pin a slide-over and it stays open with the board pushed left (body gets
   .board-dock-open) instead of covered. Unpinned = the old overlay + scrim.
   Desktop only; below 841px the panels stay full-width bottom sheets.
   Mirrors the SPA copy in board-embed.css — keep the two in step. */
#tab-board .dock-btn{
  display:none;margin-left:auto;flex:none;background:none;
  border:1px solid var(--rule);width:28px;height:28px;padding:0;
  align-items:center;justify-content:center;
  cursor:pointer;color:var(--muted);border-radius:2px;line-height:1;
}
#tab-board .dock-btn:hover{color:var(--ink);border-color:var(--muted)}
#tab-board .dock-btn.on{color:var(--sig-busy);border-color:var(--sig-busy)}
#tab-board .dock-btn svg{display:block;transform:rotate(45deg);transition:transform .2s}
#tab-board .dock-btn.on svg{transform:none}
#tab-board .dock-btn + .close{margin-left:0}
#tab-board .dock-resize{display:none}

@media (min-width:841px){
  #tab-board .dock-btn{display:flex}
  #tab-board .inspector.docked, #tab-board .mem-panel.docked, #tab-board .dv-panel.docked{
    transform:none;
    width:var(--board-dock-w,560px);
    z-index:39;    /* under .scrim (40) so an overlay panel still dims it */
  }
  #tab-board.board-dock-open{padding-right:var(--board-dock-w,560px)}
  #tab-board .docked .dock-resize{
    display:block;position:absolute;left:0;top:0;bottom:0;width:5px;
    cursor:ew-resize;z-index:10;background:transparent;transition:background .2s;
  }
  #tab-board .docked .dock-resize:hover, #tab-board .docked .dock-resize.dragging{background:var(--sig-busy)}
}

/* inline title rename (#13168) — double-click the title, edit in place. The
   field inherits the row's own type metrics so the text does not jump between
   read and edit mode; the ellipsis on .bl-task is dropped while editing so a
   long title is fully reachable instead of being clipped mid-edit. Tokenised
   (--panel / --rule / --sig-run) so rebrand-board-embed.py flips it for the
   dark embed automatically — never hand-edit board-embed.css. */
/* flex while editing so the field takes the space LEFT OVER by the #id chip.
   width:100% would be 100% of the whole cell and, sitting after the chip,
   overhang the assigned column by exactly the chip's width. */
#tab-board .bl-task.editing{display:flex;align-items:center;overflow:visible;cursor:text}
#tab-board .bl-task.saving{opacity:.55}
#tab-board .bl-tinput{
  font:inherit;color:inherit;flex:1 1 auto;width:auto;min-width:0;box-sizing:border-box;
  background:var(--panel);border:1px solid var(--rule);border-radius:5px;
  padding:2px 6px;margin:-3px 0;outline:none;
}
#tab-board .bl-tinput:focus{border-color:var(--sig-run)}

/* ---------- #12745 embed overrides ----------
   Appended (equal specificity, later => wins) so no !important is needed.
   Solid floating surfaces, chrome de-stickied out from under the fixed SPA
   navbar, board's own 18px gutters removed (the .main-content wrapper already
   pads the tab), and the desktop slide-over offset below the 72px navbar. */
#tab-board .tenant-menu,
#tab-board .inspector,
#tab-board .mem-panel,
#tab-board .dv-panel{background:#0f1a2c}
#tab-board header.bar{position:static;background:transparent;padding:2px 0 14px}
#tab-board .stage-head{position:static;top:auto;background:transparent;padding:0}
#tab-board main{padding-left:0;padding-right:0}
#tab-board .backlog{padding-left:0;padding-right:0}
#tab-board .blockers{padding:14px 16px 6px}

/* ---------- #12950 / #13271 slide-over navbar clearance ----------
   The SPA .navbar is position:fixed, 73px + env(safe-area-inset-top) tall, at
   z-index 1000; every board slide-over (.inspector, .mem-panel [Memory + Worker
   memory], .dv-panel [Delivered + Trash]) is z-index 50. Any geometric overlap
   and the navbar paints OVER the panel — burying the header: the title, the
   #13027 pin and the close X. Worse, the X's coordinates are the navbar's
   Logout button and the pin's are the chat toggle, so aiming for close logged
   you out. One variable clears it everywhere.
   Standalone /board needs none of this — its header.bar is sticky at z-index 30,
   BELOW the panels, so they legitimately cover it there. Embed only.
   WARNING: #12950 shipped this as a hand-edit to the generated board-embed.css
   and the next run of this script silently wiped it — which is what Mike
   reported as "we seem to have lost them" on #13271. It lives HERE now. */
#tab-board{--nav-clear:calc(74px + env(safe-area-inset-top,0px))}
#tab-board .inspector,
#tab-board .mem-panel,
#tab-board .dv-panel{top:var(--nav-clear)}
@media (min-width:841px){
  #tab-board .insp-head{padding-top:16px}
}
@media (max-width:840px){
  #tab-board main{padding-left:0;padding-right:0}
  #tab-board .backlog{padding-left:0;padding-right:0}
  /* bottom sheets: board.css sizes these with top:auto;height:92vh, which floats
     the top edge off VIEWPORT height and so ignores the navbar completely (a
     notch, which grows the navbar but not 8vh, makes it much worse). Pin the top
     to the clearance instead and let the height fall out of top/bottom. */
  #tab-board .inspector,
  #tab-board .mem-panel,
  #tab-board .dv-panel{top:var(--nav-clear);bottom:0;height:auto}
  #tab-board .close{width:34px;height:34px}
}
/* ---------- #12818 memory-panel dark-surface fix ----------
   The mem-panel editor + a few status tints hardcode near-white backgrounds
   (#FCFCFB / #fff / #F6E5E2 / #E1EEE7 / #EDEEEB) in board.css. Those are fine on
   the light standalone /board, but the token rebrand only swaps CSS-var VALUES,
   never hardcoded hex — so in the dark embed the bg stayed white while the text
   (var(--ink)) flipped light => light-on-white, unreadable. Repoint to dark
   surfaces (same reasoning as #12816's offcanvas fix). Text is already
   var(--ink) (light) so only the backgrounds need overriding. */
#tab-board .mem-editor{background:transparent}
#tab-board .mem-editor textarea{background:#0b1220}
#tab-board .mem-alert{background:rgba(239,68,68,.13)}
#tab-board .mem-alert.ok{background:rgba(16,185,129,.13)}
#tab-board .mem-file.locked{background:rgba(255,255,255,.04)}
/* ---------- #1000695 popover menus need a SOLID surface ----------
   .bl-assign (Assign to…) and .bl-prisel (Priority) float position:absolute
   OVER the rows beneath them and paint background:var(--paper). On the light
   standalone /board --paper is an opaque #E2E4E1, but the embed token block
   sets --paper:transparent (the SPA pane supplies the navy), so in the SPA the
   worker list rendered see-through with the next card's title/meta bleeding up
   through the buttons — Mike: "the transparency is making the selections
   unreadable as there is text beneath." Same fix as the slide-overs above:
   pin the popover to the solid navy surface + a deeper shadow. Text stays
   var(--ink). .bl-prisel already carries .bl-assign so one selector covers both.
   The @media (max-width:840px) block makes the menu position:static (in-flow,
   nothing beneath it) so an opaque bg is harmless there too. */
#tab-board .bl-assign{background:#0f1a2c;box-shadow:0 10px 28px rgba(0,0,0,.55)}
/* ---------- worker function-icon chips (#1000630 / #1000648) ----------
   SPA-only markup (app.js renders .agent-name-ico in the lane header and
   .dv-agent-ico in the Delivered panel; standalone board.js has neither), so the
   rules live here, NOT in board.css. Base .worker-tab-icon (style.css) supplies
   the round centred flex chip; these only shrink + inline it next to mono text.
   Both were hand-edited into the generated file first and would have been wiped
   by the next run of this script (the #12950/#13271 lesson, again). */
#tab-board .agent-name .agent-name-ico{width:16px;height:16px;font-size:9px;display:inline-flex;vertical-align:middle;margin-right:6px;position:relative;top:-1px}
#tab-board .dv-agent .dv-agent-ico{width:14px;height:14px;font-size:8px;display:inline-flex;vertical-align:middle;margin-right:5px;position:relative;top:-1px}
