/* Soft Structuralism: silver ground, white cores floating on diffused ambient shadow, one bold
   grotesk. Seat colours and the urgent red are the only saturated hues - they carry meaning. */
:root{--fg:17,17,16;--sh:17,17,16;--hlk:1;--topbg:rgba(255,255,255,.86);
--lt-rgb:11,79,216;--ok:#1d6e52;--ok-rgb:29,110,82;--new:#1f5fd6;--newhover:#1a4fb8;--onink:#fff;
--ink2:#3d3d38;--ink3:#55554f;--closed:#a3a39c;--dot:#c9c9c3;--well:#fbfbfa;--old-bg:#f3e4da;--inkhover:#000;
--bg:#f3f3f1;--shell:rgba(var(--fg),.035);--ring:rgba(var(--fg),.06);--core:#fff;
--ink:#111110;--mute:#6e6e68;--soft:#8a8a84;--line:rgba(var(--fg),.07);
--lt:#0b4fd8;
/* Seat tones: HSL triplets; an element carrying --tone renders in that seat's colour.
   The first four are cool, so a project of four never puts a seat colour near the warm urgency
   signals (--urg, --warn); orange arrives only at a fifth seat. Slots 0 and 1 stay blue and pink
   because those are the two seats everyone has been reading since the Drive page (LT and BF).
   The first five are hue-distinct and were checked rather than chosen: every pair
   clears the colour-blind separation floor and the normal-vision floor, and all five clear 3:1
   against the page. Green is deliberately absent (Lorenzo, 2026-09-15), which is also what caps
   the set at five - with the green band out, the warm end only supports one hue before orange and
   ochre collapse into each other under deuteranopia. Slots 5 to 7 are for a sixth, seventh or
   eighth seat on one project, which no project has: they are lightness variants of blue, purple
   and orange and lean on darkness rather than hue. Seat names are always written out beside the
   colour, so colour is never the only thing carrying identity. */
--tone-0:222 85% 45%;--tone-1:330 85% 45%;--tone-2:190 95% 35%;--tone-3:280 50% 42%;
--tone-4:25 85% 45%;--tone-5:222 45% 52%;--tone-6:280 40% 32%;--tone-7:20 50% 34%;
--urg-bg:#fee4e2;--urg:#b42318;--warn:#8a4b2a;
--r:1.75rem;--pad:.375rem;--ri:calc(var(--r) - var(--pad));
--ease:cubic-bezier(.32,.72,0,1);
--amb:0 24px 60px -32px rgba(var(--sh),.22),0 2px 6px -2px rgba(var(--sh),.06)}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
/* Web Interface Guidelines pass, 2026-09-15: one keyboard focus ring for everything interactive
   (only keyboard focus, never a ring on click), no double-tap delay on touch, no grey tap flash. */
html{scroll-padding-top:120px}
:focus-visible{outline:2px solid var(--lt);outline-offset:2px;border-radius:6px}
.chip,.band .count,.rail-h .count,.tile .n,.top .new{white-space:nowrap}
.thead:focus-visible{outline-offset:-2px}
.error:focus,[role=alert]:focus{outline:none}
a,button,[role=button],[tabindex]{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
h1,h2,h3,.ttitle{text-wrap:balance}
.skip{position:absolute;left:16px;top:-48px;z-index:20;padding:8px 14px;border-radius:999px;background:var(--ink);color:var(--onink);font-weight:600;text-decoration:none}
.skip:focus-visible{top:12px;outline-offset:3px}
body{margin:0;background:var(--bg);color:var(--ink);
font:15px/1.6 "Plus Jakarta Sans","Segoe UI Variable Text",system-ui,sans-serif;
font-feature-settings:"ss01","cv11"}
code,.mono{font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:.92em}
a{color:inherit;text-decoration:none}

/* Floating island header - detached, centred, never glued to the top edge. */
.island{margin:28px auto 0;width:max-content;max-width:calc(100% - 32px);display:flex;
align-items:center;gap:14px;padding:10px 12px 10px 20px;border-radius:999px;background:var(--core);
box-shadow:var(--amb),inset 0 1px 0 rgba(255,255,255,calc(.8 * var(--hlk)));border:1px solid var(--ring)}
.island h1{margin:0;font-size:15px;font-weight:700;letter-spacing:-.015em;white-space:nowrap}
.island h1 span{color:var(--soft);font-weight:500}
.island .age{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border-radius:999px;
background:var(--shell);font-size:12.5px;color:var(--mute);white-space:nowrap;
font-variant-numeric:tabular-nums}
.island .age b{color:var(--ink);font-weight:600}

/* Two columns: the ledger and the activity rail. The rail is sticky on wide screens and drops
   below the ledger on narrow ones - it is a companion, never the thing being read. */
.wrap{max-width:1360px;margin:0 auto;padding:48px 24px 120px;display:grid;
grid-template-columns:minmax(0,1fr) 312px;gap:36px;align-items:start}
main{min-width:0}

/* Ribbon: the three counts in one line, then the view switch. A count links to its band. */
.ribbon{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 26px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.ribbon .rb{display:inline-flex;align-items:center;gap:7px;padding:7px 12px 7px 10px;border-radius:999px;background:var(--core);box-shadow:0 0 0 1px var(--ring);font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mute);text-decoration:none}
.ribbon .rb .bi{width:20px;height:20px;margin:-3px 2px -3px -3px}.ribbon .rb .bi svg{width:13px;height:13px}
.ribbon .rb b{font-size:15px;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;margin-left:2px}
.ribbon .rb.urgent{color:var(--urg);background:var(--urg-bg);box-shadow:none}.ribbon .rb.urgent b{color:var(--urg)}
.ribbon .rb.urgent.zero{color:var(--soft);background:var(--core);box-shadow:0 0 0 1px var(--ring)}.ribbon .rb.urgent.zero b{color:var(--soft)}
.ribbon .rb.zero b{color:var(--soft)}
.ribbon a.rb:hover{box-shadow:0 0 0 1px rgba(var(--fg),.2);color:var(--ink)}
.ribbon .viewbar{margin:0 0 0 auto}
.ribbon + .band,.say.inmain + .band,.notice + .band{margin-top:6px}
/* Bento summary (admin page). */
/* Sticky: the counts stay in view however far down the ledger the reader is. The strip paints
   the page ground behind itself so cards sliding underneath do not show through the gaps. */
.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:12px;margin:0 0 40px}
.tile{grid-column:span 3;display:block;border-radius:1.25rem;padding:var(--pad);
background:var(--shell);box-shadow:0 0 0 1px var(--ring);
transition:transform .7s var(--ease),box-shadow .7s var(--ease)}
.tile.urgent{grid-column:span 4}
.tile{grid-column:span 4}
.tile:hover{transform:translateY(-3px);box-shadow:0 0 0 1px var(--ring),var(--amb)}
.tile>div{border-radius:calc(1.25rem - var(--pad));background:var(--core);padding:12px 18px;
height:100%;box-shadow:inset 0 1px 1px rgba(255,255,255,calc(.9 * var(--hlk))),0 1px 2px -1px rgba(var(--sh),.06);
display:flex;flex-direction:row;align-items:center;gap:16px;min-height:64px}
.tile .n{margin-left:auto}
.tile .hint{display:none}
.tile.urgent .hint{display:block;margin-left:4px}
.eyebrow{display:inline-flex;align-items:center;gap:6px;width:max-content;padding:5px 11px;
border-radius:999px;background:var(--shell);font-size:10px;font-weight:600;letter-spacing:.2em;
text-transform:uppercase;color:var(--mute)}
.eyebrow.urgent{background:var(--urg-bg);color:var(--urg)}
/* Band marks: a white mark on a filled disc, so it reads at a glance instead of vanishing into
   the pill. Red for urgent, ink for open, the mute grey for closed. */
.bi{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;flex:none;margin:-2px 0 -2px -4px}
.bi svg{width:12px;height:12px}
.bi.urgent{background:var(--urg)}.bi.open{background:var(--ink)}.bi.closed{background:var(--mute)}
.bi.go{background:var(--lt)}  /* an action, not a state: the link blue, never a band colour */
.eyebrow.closed .bi.closed{background:var(--closed)}
.tile .n{font-size:30px;line-height:1;font-weight:700;letter-spacing:-.04em;
font-variant-numeric:tabular-nums;white-space:nowrap}
.tile.urgent .n{font-size:36px}
.tile .n small{font-size:12.5px;font-weight:500;letter-spacing:0;color:var(--soft);margin-left:7px}
.tile .hint{font-size:12.5px;color:var(--mute);margin:0;max-width:34ch;line-height:1.35}

/* Bands. The eyebrow IS the heading, so it reads as one: ink on the shell, the count in ink
   beside it, a hairline under the row. The hint stays quiet but legible (mute, not soft: soft on
   the page ground fell under the 4.5:1 floor at this size - "unreadable", 2026-09-15). */
.band{display:flex;align-items:center;gap:14px;margin:64px 0 18px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.band:first-of-type{margin-top:0}
.band .eyebrow{font-size:11px;color:var(--ink);background:rgba(var(--fg),.06)}
.band.closed .eyebrow{color:var(--mute)}
.band .count{font-size:14px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.band .count a{color:var(--ink);text-decoration:none;font-weight:500}
.band .count.ttl{white-space:normal;min-width:0;font-weight:500;color:var(--mute);overflow-wrap:anywhere}
.band .count a:hover{text-decoration:underline}
.band .hint{font-size:13px;color:var(--mute);margin-left:auto;text-align:right;max-width:52ch}
.band .btn.small{padding:4px 11px 4px 12px;font-size:12.5px;font-weight:600;color:var(--ink);background:var(--core);
box-shadow:0 0 0 1px var(--ring),0 1px 2px rgba(var(--sh),.06);gap:5px}
.band .btn.small:hover{background:var(--core);box-shadow:0 0 0 1px rgba(var(--fg),.18),0 1px 2px rgba(var(--sh),.06)}
.band .btn.small svg{transition:transform .2s ease}
.band .btn.small.open svg{transform:rotate(180deg)}
.none{color:var(--mute);font-size:13.5px;padding:4px 0 0 2px}

/* Double bezel: a shell tray with a hairline ring, and a white core with a concentric radius
   and its own inner highlight. Cards never sit flat on the ground. */
.thread{border-radius:var(--r);padding:var(--pad);background:var(--shell);
box-shadow:0 0 0 1px var(--ring);margin:0 0 20px;
transition:transform .8s var(--ease),box-shadow .8s var(--ease),opacity .9s var(--ease)}
.thread:hover{box-shadow:0 0 0 1px var(--ring),var(--amb)}
.core{border-radius:var(--ri);background:var(--core);
box-shadow:inset 0 1px 1px rgba(255,255,255,calc(.9 * var(--hlk))),0 1px 2px -1px rgba(var(--sh),.06);overflow:hidden}
.thead{display:grid;grid-template-columns:1fr auto;gap:18px;align-items:start;padding:24px 26px 22px;border-radius:inherit;
cursor:pointer}
/* Text in the header stays selectable (the whole card used to be user-select:none, which made
   copying a thread name impossible - 2026-09-11). Only the disclosure island is unselectable. */
.disc{user-select:none}
.ttitle{font-weight:700;font-size:17px;letter-spacing:-.02em;margin:0 0 10px;line-height:1.3;
user-select:text;cursor:text;overflow-wrap:anywhere}
/* The slug chip copies the thread's registry key - what `agent_comms.py --thread` takes - on
   click, and says so for a moment. Clicking it never toggles the card. */
.slug{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;
background:var(--shell);font:500 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
color:var(--ink2);cursor:copy;user-select:text;transition:background .5s var(--ease),transform .5s var(--ease)}
.slug:hover{background:rgba(var(--fg),.09)}
.slug:active{transform:scale(.97)}
.slug.copied{background:rgba(var(--ok-rgb),.16);color:var(--ok)}
.slug .ico{opacity:.55;font-size:11px}
.slug.reply{font-family:inherit;font-weight:600}
/* Entry permalink: the "Entry N" label is the copy target; the icon only shows on hover. */
.elink{cursor:copy;border-radius:6px;padding:1px 4px;margin-left:-4px}
.elink:hover{background:rgba(var(--fg),.07)}
.elink.copied{background:rgba(var(--ok-rgb),.16);color:var(--ok)}
.entry:target{box-shadow:inset 3px 0 0 var(--accent,var(--ok));padding-left:12px;margin-left:-12px}
/* Unread: set by the reader's own clicks (localStorage), never by the page loading. A thread
   with entries newer than the reader last opened it carries a NEW chip and a blue left edge;
   the island in the header carries the total. Loud on purpose - "make it obvious". */
.chip.new{background:var(--new);color:var(--onink);font-weight:700;letter-spacing:.02em}
.thread.unread>.core{box-shadow:inset 4px 0 0 var(--new),inset 0 1px 1px rgba(255,255,255,calc(.9 * var(--hlk))),
0 1px 2px -1px rgba(var(--sh),.06)}
.island .new{display:none;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;
background:var(--new);color:var(--onink);font-weight:700;font-size:13px;margin-left:8px}
.island .new.show{display:inline-flex}
/* The `?seat=` view: threads awaiting that seat are lifted into their own band at the top. */
.band.mine .eyebrow{background:var(--new);color:var(--onink)}
.seatbar{display:flex;gap:10px;align-items:center;font-size:13px;color:var(--mute);margin:0 0 18px}
.seatbar a{color:inherit}
.meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:13px;color:var(--mute)}
.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 11px;border-radius:999px;
background:var(--shell);font-size:12px;color:var(--ink2);font-variant-numeric:tabular-nums;
transition:transform .5s var(--ease)}
.chip.baton{font-weight:600}
.chip.seat{background:hsl(var(--tone) / .14);color:hsl(var(--tone));font-weight:700}
.chip.stale{outline:2px solid var(--warn);outline-offset:1px}
.chip.time svg{flex:none;opacity:.7}
.chip.time.stale{color:var(--warn);font-weight:600}
.chip.old{background:var(--old-bg);color:var(--warn);font-weight:600}
.chip.closed{color:var(--soft)}
.chip.idle{color:var(--soft);font-style:italic}
.chip.kind{color:var(--ink);background:rgba(var(--fg),.08);font-weight:600}
.chip.prio.urgent{background:var(--urg-bg);color:var(--urg);font-weight:700}
.status{margin:12px 0 0;font-size:13.5px;color:var(--ink2);max-width:78ch}
/* The ask is the one line on the card that demands an action, so it gets its own block, filled
   in the colour of the seat it is waiting on - the same blue or pink as the baton pill, so
   "whose move" and "what is asked" read as one thing. Grey when nobody holds it. */
.ask{margin:14px 0 0;padding:11px 14px 12px;border-radius:14px;background:rgba(var(--fg),.055);
font-size:13.5px;color:var(--ink);max-width:78ch;
display:grid;grid-template-columns:auto 1fr;gap:6px 12px;align-items:baseline}
.ask .lbl{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
color:var(--mute);padding-top:1px}
.ask.seat{background:hsl(var(--tone) / .14)}.ask.seat .lbl{color:hsl(var(--tone))}
.thread.is-closed .ask{background:var(--shell);color:var(--mute)}
.thread.is-closed .ask .lbl{color:var(--soft)}

/* Island chevron - the disclosure control lives in its own circle, flush with the header's
   right padding, and reads as pressable. */
.disc{width:36px;height:36px;border-radius:999px;background:var(--shell);display:flex;
align-items:center;justify-content:center;flex:none;margin-top:2px;
transition:transform .7s var(--ease),background .5s var(--ease)}
.disc svg{transition:transform .7s var(--ease)}
.thead:hover .disc{background:rgba(var(--fg),.07);transform:translate(1px,-1px) scale(1.06)}
.thead:active .disc{transform:scale(.96)}
.thread.open .disc svg{transform:rotate(180deg)}

.entries{display:none;padding:6px 26px 22px;border-top:1px solid var(--line);background:var(--well)}
.thread.open .entries{display:block}
.entry{padding:18px 0;border-bottom:1px solid var(--line);
opacity:0;transform:translateY(10px);animation:rise .8s var(--ease) forwards}
.entry:nth-child(2){animation-delay:.06s}.entry:nth-child(3){animation-delay:.12s}
.entry:nth-child(4){animation-delay:.18s}.entry:nth-child(n+5){animation-delay:.24s}
.entry:last-child{border-bottom:0}
/* who wrote it, in their seat colour: a dot and the seat name, so a long thread reads as an
   alternation between two people rather than one wall. The entry already carries --tone. */
.entry .eby{display:inline-flex;align-items:center;gap:5px;color:hsl(var(--tone));font-weight:700}
.entry .edot{width:6px;height:6px;border-radius:50%;background:hsl(var(--tone));flex:none}
.eh{font-size:12px;color:var(--soft);margin:0 0 6px;letter-spacing:.02em;
font-variant-numeric:tabular-nums}
.es{font-weight:600;margin:0 0 8px;letter-spacing:-.01em}
.eb{font-size:13.5px;color:var(--ink2);line-height:1.6;max-width:78ch}
.eb p{margin:0 0 10px}.eb p:last-child{margin-bottom:0}
.eb h4,.eb h5,.eb h6{margin:16px 0 6px;font-size:14px;letter-spacing:-.01em}
.eb h4{font-size:15px}
.eb ul,.eb ol{margin:0 0 10px;padding-left:22px}.eb li{margin:2px 0}
.eb code{font:12.5px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
background:rgba(var(--fg),.06);padding:1px 5px;border-radius:5px}
.eb pre{background:rgba(var(--fg),.05);padding:10px 12px;border-radius:10px;overflow-x:auto;margin:0 0 10px}
.eb pre code{background:none;padding:0}
.eb blockquote{margin:0 0 10px;padding:6px 12px;border-left:3px solid var(--line);color:var(--ink3)}
.eb .tbl{overflow-x:auto;margin:0 0 12px}
.eb table{border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;min-width:50%}
.eb th,.eb td{padding:5px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.eb th{font-weight:600;color:var(--ink3);font-size:12px;letter-spacing:.02em}
.eb a{color:var(--new)}
/* Anchored scrolls land below the sticky summary row, not under it. */
.thread,.entry{scroll-margin-top:120px}
.thread.is-closed{opacity:.72}.thread.is-closed:hover{opacity:1}
.empty{color:var(--soft);padding:40px 0;text-align:center}
footer{max-width:1360px;margin:0 auto;padding:0 24px 80px;color:var(--soft);font-size:12.5px}

/* Back to top. Fixed in the gutter to the LEFT of the canvas on wide screens, tucked to the
   edge on narrow ones; hidden until the reader has actually scrolled. Same island as the
   disclosure chevron, pointing up. */
.totop{position:fixed;bottom:32px;left:max(16px,calc((100vw - 1360px) / 2 - 64px));
width:44px;height:44px;border-radius:999px;border:1px solid var(--ring);background:var(--core);
box-shadow:var(--amb),inset 0 1px 0 rgba(255,255,255,calc(.8 * var(--hlk)));display:flex;align-items:center;
justify-content:center;cursor:pointer;padding:0;color:var(--ink);z-index:6;
opacity:0;transform:translateY(12px) scale(.94);pointer-events:none;
transition:opacity .6s var(--ease),transform .6s var(--ease),background .4s var(--ease)}
.totop.show{opacity:1;transform:none;pointer-events:auto}
.totop svg{transform:rotate(180deg);transition:transform .5s var(--ease)}
.totop:hover{background:var(--well)}
.totop:hover svg{transform:rotate(180deg) translateY(2px)}
.totop:active{transform:scale(.96)}
.totop:focus-visible{outline:2px solid var(--lt);outline-offset:3px}

/* Activity rail. Same bezel as a card; sticky so the feed stays beside whatever is being
   read. The list is a timeline: a hairline down the left, a dot per event in the person's
   seat colour, newest at the top. */
.rail{position:sticky;top:78px;max-height:calc(100vh - 98px);display:flex;flex-direction:column;
border-radius:var(--r);padding:var(--pad);background:var(--shell);box-shadow:0 0 0 1px var(--ring)}
.rail-h{display:flex;align-items:center;gap:10px;padding:18px 20px 12px}
.rail-h .count{font-size:12.5px;color:var(--soft);font-variant-numeric:tabular-nums}
.feed{list-style:none;margin:0;padding:6px 14px 16px 20px;overflow:auto;position:relative;
border-radius:0 0 var(--ri) var(--ri);background:var(--core);
box-shadow:inset 0 1px 1px rgba(255,255,255,calc(.9 * var(--hlk)));scrollbar-width:thin}
.rail-h{border-radius:var(--ri) var(--ri) 0 0;background:var(--core)}
.feed::before{content:"";position:absolute;left:29px;top:14px;bottom:14px;width:1px;
background:var(--line)}
.feed .day{position:relative;z-index:1;font-size:10px;font-weight:600;letter-spacing:.18em;
text-transform:uppercase;color:var(--soft);padding:12px 0 8px 22px;background:var(--core)}
.feed .day:first-child{padding-top:4px}
.ev{position:relative;display:grid;grid-template-columns:18px 1fr;gap:6px;align-items:start;
padding:7px 6px 7px 0;border-radius:12px;cursor:pointer;
transition:background .5s var(--ease),transform .5s var(--ease)}
.ev:hover{background:var(--shell);transform:translateX(2px)}
.ev .dot{width:9px;height:9px;border-radius:999px;margin:6px 0 0 5px;background:var(--dot);
box-shadow:0 0 0 3px var(--core)}
.ev.toned .dot{background:hsl(var(--tone))}
.ev .et{margin:0;font-size:13px;line-height:1.4;color:var(--ink)}
.ev .et b{font-weight:700}
.ev .on{display:block;font-size:12px;color:var(--mute);font-family:"JetBrains Mono","Cascadia Code",
ui-monospace,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.ev .ew{margin:4px 0 0;font-size:11.5px;color:var(--soft);display:flex;align-items:center;gap:4px}
.ev .ew .chip{padding:2px 8px;font-size:11px}
.ev .also{margin:3px 0 0;font-size:11.5px;color:var(--soft);font-style:italic}

/* No scroll-reveal on cards. Every thread is visible the moment the page opens, whatever the
   viewport - a card hidden for style is a card a reader can miss. The only entry motion left
   is the stagger inside a thread when it is expanded, which the reader has just asked for. */
@keyframes rise{to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  *{transition-duration:.01ms!important;animation-duration:.01ms!important}
  .entry{opacity:1;transform:none}}

@media (max-width:1099px){
  .wrap{grid-template-columns:1fr}
  .rail{position:static;max-height:none}
  .feed{max-height:520px}}

@media (max-width:767px){
  .wrap{padding:28px 16px 80px;gap:28px}
  .island{margin-top:16px;padding:8px 10px 8px 16px;gap:10px}
  .island h1 span{display:none}
  .bento{grid-template-columns:1fr;gap:10px;margin-bottom:40px}
  .tile,.tile.urgent{grid-column:span 1}
  .tile.urgent .hint{display:none}
  .band{margin-top:44px;flex-wrap:wrap}
  .band .hint{margin-left:0;text-align:left;width:100%}
  .thead{padding:20px 18px 18px;gap:12px}
  .entries{padding:6px 18px 18px}}
.eh .at{color:var(--mute);font-weight:600}


/* ══ Additions for the hosted bridge (everything above is the Drive page's own stylesheet) ══ */
.island .live{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;background:var(--shell);font-size:12.5px;color:var(--soft)}
.island .live::before{content:"";width:7px;height:7px;border-radius:999px;background:var(--dot)}
.island .live.on{color:var(--ok)}.island .live.on::before{background:var(--ok)}
.island .who{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--mute);font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace}
.island .who a,.island .who button{font:inherit;color:var(--mute);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.island .who a:hover,.island .who button:hover{color:var(--ink)}
.island h1 a{color:inherit;text-decoration:none}
/* the thead's "open on its own page" link, intentional, beside the chevron */
.goto{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:999px;background:var(--shell);color:var(--mute);text-decoration:none;margin-right:8px}
.goto:hover{background:rgba(var(--fg),.07);color:var(--ink)}
.thead .right{display:flex;align-items:center}
/* copy chips: whole sentences for the person's Claude (the .slug style, sentence-length) */
.say{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:14px 0 0}
.say .lbl{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--soft);margin-right:2px}
.say .slug{font-family:inherit;font-weight:500;max-width:100%}
.say .slug .txt{white-space:normal}
/* entries inside an open card: markdown bodies */
.eb table{border-collapse:collapse;margin:8px 0;font-size:13px}.eb th,.eb td{border:1px solid var(--line);padding:4px 8px;text-align:left}
.eb pre{background:var(--shell);padding:10px 12px;border-radius:10px;overflow-x:auto;font-size:12.5px}
.eb code{font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:12.5px}
.eb blockquote{margin:8px 0;padding-left:12px;border-left:3px solid var(--line);color:var(--mute)}
.eb ul,.eb ol{padding-left:22px}.eb li.done{color:var(--soft)}
.eb .cb{margin-right:4px}
.entry .eneed{margin:10px 0 0;font-size:13px;color:var(--mute)}
.entry .eneed b{color:var(--ink);font-weight:600}
/* follow-ups and seats on a thread's own page */
.side{display:grid;gap:14px}
.panel{border-radius:var(--r);padding:var(--pad);background:var(--shell)}
.panel>div{border-radius:var(--ri);background:var(--core);padding:18px 22px}
.panel h3{margin:0 0 10px;font-size:13px;letter-spacing:-.01em}
.panel h3 .count{color:var(--soft);font-weight:500;margin-left:6px}
.fu{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:13.5px}
.fu li{display:flex;gap:8px;align-items:baseline}.fu li.done{color:var(--soft);text-decoration:line-through}
.enotes{margin:6px 0 0;padding:0;list-style:none;font-size:12.5px;color:var(--mute)}.enotes li{padding:1px 0}
.fu.asks li{flex-wrap:wrap;row-gap:2px}.fu.asks li.done{text-decoration:none}
.fu.asks .sub{flex-basis:100%;font-size:12px;color:var(--mute)}.fu.asks .sub b{color:var(--ink);font-weight:600}
.fu.asks li.open>span:not(.chip):not(.sub){font-weight:600}.fu.asks .reo{color:var(--urg)}
.fu .cb{width:15px;height:15px;accent-color:var(--new);flex:none;transform:translateY(2px);cursor:pointer}
/* Tickable follow-ups on the Tracker, and the add-an-item row under the project checklist. */
.fucheck{display:flex;gap:10px;align-items:baseline;cursor:pointer}
.fucheck input{width:16px;height:16px;accent-color:var(--new);flex:none;transform:translateY(2px)}
.additem{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}
.additem select,.additem input{height:34px;border-radius:10px;border:0;box-shadow:0 0 0 1px var(--ring);background:var(--core);font:inherit;font-size:13.5px;padding:0 10px}
.additem input{flex:1 1 260px;min-width:0}
.members{list-style:none;margin:0;padding:0;display:grid;gap:10px;font-size:13.5px}
.members li{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:center}
.members .email{font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:12px;color:var(--soft);grid-column:1 / -1}
.members .role{color:var(--mute);font-size:12px}
.swatches{display:inline-flex;gap:4px;grid-column:1 / -1}
.swatches .sw{width:14px;height:14px;border-radius:50%;border:2px solid transparent;background:hsl(var(--tone));cursor:pointer;padding:0;opacity:.55}
.swatches .sw:hover{opacity:1}.swatches .sw.on{opacity:1;border-color:var(--ink)}
/* forms (owner actions, sign-in, connect) */
form.row{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));align-items:end}
.field{display:grid;gap:5px;font-size:12.5px;color:var(--mute)}
.field .hint{color:var(--soft);font-size:11.5px}
.field input{font:inherit;font-size:14px;padding:9px 12px;border-radius:12px;border:1px solid rgba(var(--fg),.14);background:var(--core);color:var(--ink)}
.field input:focus{outline:2px solid var(--lt);outline-offset:1px;border-color:transparent}
.field select{font:inherit;font-size:14px;padding:9px 12px;border-radius:12px;border:1px solid rgba(var(--fg),.14);background:var(--core);color:var(--ink)}
.field select:focus{outline:2px solid var(--lt);outline-offset:1px;border-color:transparent}
/* Slack nudge settings in the seats sheet: a checkbox row, a select, one explanatory line. */
.nudges{display:grid;gap:12px;max-width:60ch}
.nudges .check{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;cursor:pointer}
.nudges .check input{margin:3px 0 0;accent-color:var(--lt)}
.nudges .hint{margin:0;font-size:12.5px;color:var(--soft)}
.ic.slack{width:14px;height:14px;flex:none;vertical-align:-2px;margin-right:6px}
.ic.clawd{width:15px;height:15px;flex:none;vertical-align:-3px;margin-right:7px}
.prail .hl .ic.clawd,.say .lbl .ic.clawd{vertical-align:-4px}
.btn .ic.slack{margin-right:0}
.panel h3 .ic.slack,.eyebrow .ic.slack{width:13px;height:13px}
/* The nudge toggle sits on a grey panel, where the default grey button fill vanishes: an outlined
   white pill when off, ink when on, so both states read as a button. */
.btn.nudge{background:var(--core);box-shadow:0 0 0 1px rgba(var(--fg),.22);color:var(--ink);text-align:left;line-height:1.3}
.btn.nudge:hover{box-shadow:0 0 0 1px var(--ink)}
.btn.nudge.on{background:var(--ink);color:var(--onink);box-shadow:none}
.btn.nudge.on:hover{background:var(--inkhover)}
.btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;border:0;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;background:var(--shell);color:var(--ink);text-decoration:none}
.btn:hover{background:rgba(var(--fg),.09)}
.btn.primary{background:var(--ink);color:var(--onink)}.btn.primary:hover{background:var(--inkhover)}
.btn.small{padding:6px 12px;font-size:12.5px}
.btn.quiet{background:transparent;color:var(--mute);font-weight:500}.btn.quiet:hover{background:var(--shell)}
.actions{display:flex;gap:10px;align-items:center}
.error{margin-top:10px;padding:10px 14px;border-radius:12px;background:var(--urg-bg);color:var(--urg);font-size:13.5px}
.narrow{max-width:640px;margin:56px auto 0;padding:0 24px}
.hidden{display:none !important}
/* projects home: the your-move strip */
.moves{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.mv>a{display:grid;gap:8px;border-radius:1.25rem;padding:14px 18px;background:var(--core);box-shadow:0 0 0 1px var(--ring);color:inherit;transition:box-shadow .5s var(--ease),transform .5s var(--ease)}
.mv>a:hover{box-shadow:0 0 0 1px var(--ring),var(--amb);transform:translateY(-1px)}
.mv .mvh{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
/* The chips (whose move, urgent, age, entry count) always sit on their own row under the title,
   so the turn badge is in the same place on every card instead of trailing a short title. */
.mv .mvc{flex-basis:100%;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.mv .mvt{font-weight:700;letter-spacing:-.01em;font-size:15px;overflow-wrap:anywhere}
.mv .chip.proj{background:hsl(var(--tone) / .14);color:hsl(var(--tone));font-weight:600}
.mv .mvn{margin:0;font-size:13.5px;color:var(--ink2);display:grid;grid-template-columns:auto 1fr;gap:6px 12px;align-items:baseline;max-width:90ch}
.mv .mvn .lbl{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);padding-top:1px;white-space:nowrap}
.mv.parked .mvn .lbl{color:hsl(var(--tone))}
/* the inbox view on home */
.inbox{display:grid;gap:14px}
.inbox .band{margin:36px 0 4px}
.inbox .band:first-child{margin-top:0}
.inbox .band.mine .eyebrow{background:var(--urg-bg);color:var(--urg)}
.inbox .band.waiting .eyebrow{background:rgba(var(--fg),.06);color:var(--ink)}
.inbox .band.idle .eyebrow,.inbox .band.closed .eyebrow{color:var(--mute)}
.inbox .moves.idle .mv>a{padding:12px 18px}
.inbox .mv .say{margin:8px 0 0 18px}
.inbox .mv .say .cc{font-size:12.5px}
.moves[hidden]{display:none}
@media (min-width:1200px){.wrap.home.has-prail{grid-template-columns:200px minmax(0,1fr) 312px}}
@media (min-width:1100px) and (max-width:1199px){.wrap.home.inbox-wrap{grid-template-columns:minmax(0,1fr) 312px}}
.prail button.pp{font:inherit;border:0;background:none;cursor:pointer;text-align:left;width:100%}
.prail .pp .n{margin-left:auto;font-size:11.5px;color:var(--soft);font-variant-numeric:tabular-nums}
.prail .pp .nn{margin-left:auto;font-size:10.5px;font-weight:700;line-height:1;padding:3px 6px;border-radius:999px;background:var(--new);color:var(--onink);font-variant-numeric:tabular-nums}
.prail .pp .nn+.n{margin-left:0}
.ev .et .onp{display:block;font-size:11.5px;color:var(--soft);margin-top:1px}
.inbox .mv .chip.proj{background:var(--shell);color:var(--mute);font-weight:500}
/* projects home: toolbar, cards, pin */
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 16px}
.toolbar[hidden]{display:none}
#psearch,#dsearch{flex:1;min-width:220px;font:inherit;font-size:14px;padding:9px 16px;border-radius:999px;border:1px solid rgba(var(--fg),.14);background:var(--core);color:var(--ink)}
#psearch:focus,#dsearch:focus{outline:2px solid var(--lt);outline-offset:1px;border-color:transparent}
.toolbar .chips{display:flex;gap:6px;flex-wrap:wrap}
.fchip{font:inherit;font-size:12.5px;font-weight:600;padding:7px 13px;border-radius:999px;border:0;background:var(--shell);color:var(--mute);cursor:pointer}
.fchip:hover{background:rgba(var(--fg),.09);color:var(--ink)}
.fchip.on{background:var(--ink);color:var(--onink)}
.fchip small{font-weight:500;opacity:.8;margin-left:3px}
.pcard .ptop{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.pcard .ptop .ttitle{min-width:0;overflow-wrap:anywhere}
.pin{border:0;background:none;cursor:pointer;font-size:17px;line-height:1;color:rgba(var(--fg),.22);padding:2px 6px;border-radius:8px;flex:none}
.pin:hover{color:var(--mute);background:var(--shell)}
.pin.on{color:var(--ink)}
.pcard.archived>div{opacity:.62}.pcard.archived:hover>div{opacity:1}
.digest{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;font-size:13px;color:var(--mute);margin-top:2px}
.digest .evi b{color:var(--ink);font-weight:600}
.digest .mono{font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:12px}
.digest .mini{display:inline-flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.digest .mini .chip{padding:2px 8px;font-size:11px}
@media (max-width:767px){.digest .mini{margin-left:0}}
/* owner tools on the Seats card, the Settings card, the archived notice */
.members .acts{grid-column:1 / -1;display:flex;gap:6px;flex-wrap:wrap;margin-top:2px}
.btn.danger{color:var(--urg)}.btn.danger:hover{background:var(--urg-bg)}
/* Thread tools (download, delete) in the foot row: outlined pills so they read as buttons on the card. */
.btn.tool{background:var(--core);box-shadow:0 0 0 1px rgba(var(--fg),.18);color:var(--mute);font-weight:500;gap:6px}
.btn.tool:hover{color:var(--ink);box-shadow:0 0 0 1px var(--ink)}
.btn.tool .ic{width:13px;height:13px;flex:none}
.btn.tool.danger{color:var(--urg);box-shadow:0 0 0 1px rgba(200,40,40,.3)}
.btn.tool.danger:hover{background:var(--urg-bg);box-shadow:0 0 0 1px var(--urg);color:var(--urg)}
/* The bold verb that leads a command chip. */
.cc .verb{font-weight:800;text-transform:uppercase;letter-spacing:.06em;font-size:11px;color:var(--ink);margin-right:8px;white-space:nowrap}
.cc.copied .verb{display:none}
.notice{display:flex;gap:14px;align-items:center;padding:12px 16px;border-radius:14px;background:var(--core);box-shadow:0 0 0 1px var(--ring);margin:-20px 0 28px;font-size:13.5px;color:var(--mute)}
.notice.archived .eyebrow{background:var(--shell);color:var(--ink)}
.wrap.is-archived .thread:not(#settings):not(#seats){opacity:.72}

/* The project rail: one small pill per project down the left of a project or thread page, so
   switching projects is one click. It takes a narrow first column only where there is room;
   below that width the page is the two columns it always was and the rail is not rendered. */
@media (min-width:1200px){
  .wrap.has-prail{grid-template-columns:200px minmax(0,1fr) 312px;gap:28px}
  .wrap.has-prail .say.inmain{display:none}
  .prail{position:sticky;top:78px;display:flex;flex-direction:column;gap:4px;padding-top:4px}
}
@media (max-width:1199px){.prail{display:none}}
.prail .hl{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--soft);padding:0 10px 8px}
.prail .pp{display:flex;align-items:center;gap:7px;min-width:0;padding:6px 10px;border-radius:999px;font-size:12.5px;color:var(--mute);text-decoration:none;transition:background .15s ease,color .15s ease}
.prail .pp .t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prail .pp:hover{background:var(--shell);color:var(--ink)}
.prail .pp.on{background:var(--core);color:var(--ink);font-weight:600;box-shadow:0 0 0 1px var(--ring),inset 0 1px 0 rgba(255,255,255,calc(.9 * var(--hlk)))}
.prail .pp .dot{width:6px;height:6px;border-radius:50%;background:var(--urg);flex:none}
.prail .pp.all{margin-top:6px;color:var(--soft);font-size:12px}
/* the roster in the rail: the seat name is the thing you copy, the person's name is the caption */
.prail .hl small{font-weight:600;letter-spacing:0;color:var(--soft)}
.prail .rseats{list-style:none;margin:0;padding:0 2px;display:grid;gap:10px}
.prail .rseats li{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;align-items:center;min-width:0}
.prail .rseats li>div{display:grid;gap:2px;min-width:0}
/* People's pictures: a picture when the bridge has one, initials otherwise. avs is the small
   in-line size beside a seat or an entry author. */
.avs{width:20px;height:20px;border-radius:50%;background:hsl(var(--tone) / .18);color:hsl(var(--tone));font-size:8.5px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex:none;vertical-align:middle;letter-spacing:.02em}
img.pic{object-fit:cover;background:var(--shell)}
.entry .eby .avs{margin-right:1px}
.members .role .avs{margin-right:6px}
.prail .rseats .slug.rs{justify-self:start;max-width:100%;padding:3px 8px;font-size:11.5px;
background:hsl(var(--tone) / .12);color:hsl(var(--tone));font-weight:700;
font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace}
.prail .rseats .slug.rs:hover{background:hsl(var(--tone) / .2)}
.prail .rseats .slug.rs .txt{overflow-wrap:anywhere}
.prail .rseats .who{font-size:11.5px;color:var(--soft);padding-left:9px}
/* The rail's actions. Flat grey text disappeared into a grey column, so these carry the bands'
   filled disc in the link blue and an ink label, separated from the list they act on by a rule. */
.prail .act{display:flex;align-items:center;gap:9px;width:100%;margin-top:14px;padding:9px 10px 0;
border:0;border-top:1px solid var(--line);background:none;cursor:pointer;text-align:left;
font:inherit;font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.35;
transition:color .15s ease}
.prail .act .bi.go{margin:0;transition:transform .15s var(--ease)}
.prail .act:hover{color:var(--lt)}
.prail .act:hover .bi.go{transform:scale(1.08)}
/* the ribbon keeps its own copies for the widths where the sidebar is not drawn */
@media (min-width:1200px){.ribbon .btn.norail{display:none}}
.ribbon .btn .bi.go{margin:0 6px 0 -2px}
.ribbon .btn b{margin-left:5px;font-variant-numeric:tabular-nums}

/* a thread's Jira tickets: not ledger entries, so they sit beside the brief rather than in it */
.tickets{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:14px 0 0;font-size:13px}
.tickets .lbl{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--soft)}
.chip.jira{background:rgba(var(--lt-rgb),.1);color:var(--lt);font-weight:700;text-decoration:none;
font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:12px}
.chip.jira:hover{background:rgba(var(--lt-rgb),.18)}
.tickets .saidso{color:var(--mute);font-size:12.5px}
.tickets.justnow .chip.jira{box-shadow:0 0 0 2px rgba(var(--lt-rgb),.3)}
/* the Jira row inside a thread card: only while the card is open, since it is an action on what
   you are reading, not a property of the card in a list */
.thread:not(.open) .tacts{display:none}
.tacts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0;padding:0 26px 20px;font-size:13px}
.tacts .sp{flex:1}
.tacts .lbl,.tickets .lbl{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--soft)}
.tacts .saidso{color:var(--mute);font-size:12.5px;width:100%}
.tacts.justnow .chip.jira{box-shadow:0 0 0 2px rgba(var(--lt-rgb),.3)}
.chip.proposed{background:rgba(var(--lt-rgb),.1);color:var(--lt);font-weight:600}
/* an agent'+chr(39)+'s escalation proposal, waiting for a person to release it */
.tacts.propose{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;padding:16px 18px;margin:0 26px 20px;
border-radius:18px;background:var(--core);box-shadow:0 0 0 1px rgba(var(--lt-rgb),.22),0 0 0 4px rgba(var(--lt-rgb),.06)}
.propose .pmark .bi.go{margin:2px 0 0}
.propose .pbody{flex:1;min-width:220px;display:grid;gap:4px}
.propose .ptitle{margin:0;font-size:14px;color:var(--ink)}
.propose .pwhy{margin:0;font-size:13.5px;color:var(--mute)}
.propose .meta{margin:2px 0 0;font-size:12px;color:var(--soft)}
.propose .pnote{margin:4px 0 0;font-size:12.5px;color:var(--lt);font-weight:600}
.propose .pacts{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media (max-width:640px){.propose .pacts{width:100%}.propose .pacts .btn{flex:1}}
/* the priority choice in the escalate dialog */
#escform{align-items:start}
#escform .field:has(.picks),#escform .meta,#escform .actions{grid-column:1 / -1}
.picks{display:grid;gap:8px;margin-top:6px}
.pick{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:14px;
background:var(--core);box-shadow:0 0 0 1px var(--ring);cursor:pointer}
.pick:hover{box-shadow:0 0 0 1px rgba(var(--fg),.14)}
.pick input{margin:2px 0 0;accent-color:var(--lt);flex:none}
.pick span{display:grid;gap:1px;font-size:13px}
.pick small{color:var(--soft);font-size:11.5px}
.pick:has(input:checked){box-shadow:0 0 0 1px var(--lt),0 0 0 4px rgba(var(--lt-rgb),.1)}
.sheet-b .notice{margin:0 0 18px}
.sheet-b .meta code{font-size:11.5px;background:var(--shell);padding:1px 5px;border-radius:5px}

/* admin dialog: everything that changes the project rather than reading it */
.sheet{border:0;padding:0;background:var(--core);color:var(--ink);border-radius:calc(var(--r) - .25rem);
box-shadow:var(--amb);width:min(640px,calc(100vw - 32px));max-height:min(86vh,900px);overflow:auto}
.sheet::backdrop{background:rgba(var(--sh),.34)}
.sheet-h{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
padding:20px 24px 14px;background:var(--core);border-bottom:1px solid var(--line)}
.sheet-h h2{margin:0;font-size:17px;letter-spacing:-.01em}
.sheet-h .btn{margin-left:auto}
.sheet-b{padding:22px 24px 26px}
/* the seat pill sizes to the name here, rather than stretching the row as it did full-width */
.sheet-b .members li{grid-template-columns:auto 1fr;gap:6px 12px}
.sheet-b .members .role{justify-self:end;text-align:right}
.sheet-s{display:flex;align-items:baseline;gap:10px;margin:30px 0 14px;
padding-top:20px;border-top:1px solid var(--line)}
.sheet-s .count{font-size:12px;color:var(--soft)}
@media (max-width:640px){
  .sheet{width:100vw;max-width:100vw;max-height:100vh;height:100vh;border-radius:0}
  .sheet-b{padding:18px 16px 28px}
  /* the explainer chip drops so the title and Close stay on one row */
  .sheet-h{padding:16px 16px 12px;flex-wrap:nowrap}
  .sheet-h .chip{display:none}
}
.prail .cc.short{width:100%;justify-content:flex-start;margin:0 0 6px;padding:8px 12px;font-size:12.5px}
.prail .cc.short .txt{white-space:normal}
.chip.tag{color:var(--mute);font-weight:500}
/* nav links in the top bar, the directory and the admin page */
.top .links{display:flex;gap:4px;margin-right:4px}
.top .links a{font-size:13px;color:var(--mute);padding:5px 10px;border-radius:999px}
.top .links a:hover{color:var(--ink);background:var(--shell)}
.pcard.dir .ttitle a{color:inherit}
.admin .bento.stats{position:static;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));background:none;padding:0;margin:0 0 20px}
.admin .bento.stats::after{display:none}
.admin .tile{grid-column:auto}
.admin .tile>div{flex-direction:column;align-items:flex-start;gap:8px;min-height:0;padding:14px 16px}
.admin .tile .n{margin-left:0;font-size:26px}
.admin .tile .n small{display:block;margin:4px 0 0;font-size:11.5px}
.charts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
@media (max-width:900px){.charts{grid-template-columns:1fr}}
.chart{margin-top:10px}
.bars{display:flex;align-items:flex-end;gap:2px;height:110px;padding:0 2px;border-bottom:1px solid var(--line)}
.bar{flex:1;min-width:0;background:var(--lt);border-radius:4px 4px 0 0;opacity:.85;transition:opacity .2s}
.bar:hover{opacity:1}
.axis{display:flex;justify-content:space-between;font-size:11px;color:var(--soft);margin-top:6px;font-variant-numeric:tabular-nums}
.axis .peak{color:var(--mute)}
.tblwrap{overflow-x:auto;border-radius:var(--r);padding:var(--pad);background:var(--shell);box-shadow:0 0 0 1px var(--ring)}
.tbl{border-collapse:collapse;font-size:13px;width:100%;background:var(--core);border-radius:var(--ri)}
.tbl th{text-align:left;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--soft);font-weight:600;padding:12px 14px;border-bottom:1px solid var(--line)}
.tbl td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.tbl tr.archived td{opacity:.6}
.tbl td.acts{white-space:normal;min-width:190px}
.tbl td.acts .btn{margin:0 4px 4px 0}
.tbl td.acts .btn{margin-right:4px}
.tbl .mono,.kv .mono{font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-size:12px}
.tbl .chip small{opacity:.7;font-weight:400;margin-left:4px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:8px 18px;font-size:13.5px}
.kv span{color:var(--mute)}
.admin .rail .ev{cursor:default}
.admin .rail .ev:hover{transform:none;background:none}
.admin .ev .chip.proj{background:var(--shell);color:var(--mute);font-weight:500;font-size:11px;padding:2px 8px;margin-left:4px}
/* board view: columns by urgency, cards stacked like solitaire */
.viewbar{display:inline-flex;gap:2px;padding:3px;border-radius:999px;background:var(--shell);margin:16px 0 0}
.viewbar button{font:inherit;font-size:12.5px;font-weight:600;padding:5px 12px;border-radius:999px;border:0;background:transparent;color:var(--mute);cursor:pointer}
.viewbar button.on{background:var(--core);color:var(--ink);box-shadow:0 1px 2px rgba(var(--sh),.08)}
.band .viewbar{margin:0}
.board{display:flex;gap:14px;overflow-x:auto;align-items:flex-start;padding:16px 4px 28px;scroll-snap-type:x proximity;scrollbar-width:thin}
.board .col{flex:0 0 330px;scroll-snap-align:start;border-radius:var(--r);padding:var(--pad);background:var(--shell);box-shadow:0 0 0 1px var(--ring)}
.board .col.urgent{box-shadow:0 0 0 1px var(--ring),inset 3px 0 0 var(--urg)}
.board .col.is-closed{opacity:.7}
.board .col.folded-closed{flex-basis:240px;opacity:.85}
.closedlist{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:6px}
.closedlist a{display:block;padding:8px 10px;border-radius:10px;background:var(--core);box-shadow:0 0 0 1px var(--ring);color:var(--mute);font-size:12.5px;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.closedlist a:hover{color:var(--ink)}
.board .colh{background:var(--core);border-radius:var(--ri) var(--ri) 0 0;padding:14px 16px 12px}
.board .colh .ttitle{font-size:15px;margin:0 0 8px}
.board .colh .ttitle a{color:inherit}
.board .colh .status{font-size:12.5px;margin-top:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.board .stack{display:flex;flex-direction:column;padding:10px 8px 10px;background:rgba(var(--fg),.02);border-radius:0 0 var(--ri) var(--ri)}
.board .card{background:var(--core);border-radius:14px;box-shadow:0 0 0 1px var(--ring),0 2px 6px -3px rgba(var(--sh),.18);padding:12px 14px;position:relative}
.board .card.folded{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;padding:7px 12px;margin-bottom:-8px;cursor:pointer;background:var(--well);font-size:12px;color:var(--soft);box-shadow:inset 3px 0 0 hsl(var(--tone)),0 0 0 1px var(--ring);transition:transform .35s var(--ease),background .3s}
.board .card.folded .who b{color:hsl(var(--tone));font-weight:700}
.board .card.folded .what{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--mute)}
.board .card.folded:hover{background:var(--core);transform:translateY(-3px);z-index:2}
.board .card.folded.fanned{grid-template-columns:auto 1fr auto;padding:10px 12px;margin-bottom:4px;background:var(--core);transform:none}
.board .card.folded.fanned .what{white-space:normal;color:var(--ink)}
.board .card.open{margin-top:8px;z-index:1;box-shadow:inset 3px 0 0 hsl(var(--tone)),0 0 0 1px var(--ring),0 6px 16px -10px rgba(var(--sh),.3)}
.board .card .ct{margin:0 0 6px;font-weight:700;font-size:14px;letter-spacing:-.01em}
.board .card .ct a{color:inherit}
.board .card .eh{font-size:11.5px;color:var(--soft);margin:0 0 6px}
.board .card .eh b{color:hsl(var(--tone))}
.board .card .es{font-weight:600;font-size:13.5px;margin:0 0 6px;letter-spacing:-.01em}
.board .card .eb{font-size:12.5px;color:var(--ink3)}
.board .card .eb.clamp{max-height:9.5em;overflow:hidden;position:relative;-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent)}
.board .card .ask{margin-top:10px;padding:8px 10px;font-size:12.5px}
.board .card .cl{margin:10px 0 0;font-size:12px}
.board .card .cl a{color:var(--lt)}
.board .card.more.load{border:1px dashed rgba(var(--fg),.28);background:var(--core);color:var(--mute);font:inherit;font-size:12.5px;cursor:pointer;text-align:center;margin:0}
.board .meta .chip{font-size:11px;padding:3px 9px}
@media (max-width:767px){.board .col{flex-basis:86vw}}
/* board cards are narrow: the ask label sits above its text; a fanned strip stacks who / what / when */
.board .card .ask{grid-template-columns:1fr;gap:4px 0}
.board .card .ask .lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.board .card.folded .who{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.board .card.folded.fanned{grid-template-columns:1fr;gap:4px}
.board .card.folded.fanned .who{max-width:none}
.board .card .eh{overflow-wrap:anywhere}
/* the right cluster of the bar sheds its email line and sign-out label until the screen is wide,
   so the centred crumbs never run into it */
@media (min-width:900px) and (max-width:1499px){.top .pn small{display:none}.top .signout .lbl{display:none}.top .person{padding-right:10px}}
/* project tiles on the projects page */
.plist{display:grid;gap:14px}
.wrap.home{grid-template-columns:1fr}
@media (min-width:900px){.plist{grid-template-columns:repeat(auto-fill,minmax(400px,1fr))}}
@media (min-width:1500px){.plist{grid-template-columns:repeat(3,minmax(0,1fr))}}
.pcard{display:block;border-radius:var(--r);padding:var(--pad);background:var(--shell);text-decoration:none;color:inherit;transition:transform .5s var(--ease),box-shadow .5s var(--ease)}
.pcard:hover{transform:translateY(-2px);box-shadow:0 0 0 1px var(--ring),var(--amb)}
.pcard>div{border-radius:var(--ri);background:var(--core);padding:20px 24px;display:grid;gap:10px}
.pcard .ttitle{margin:0}
.pcard .meta{gap:8px}
.pcard .pstat .chip.baton{font-size:13.5px;padding:6px 13px}
.pcard .pstat .chip.idle{font-size:13px;padding:6px 12px}
.pfoot{display:grid;gap:8px;margin-top:4px;padding-top:12px;border-top:1px solid var(--line)}
.pfoot .digest{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}
.pfoot .digest .evi{display:inline}
.pseats{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;justify-content:space-between}
.pseats .mini{display:inline-flex;gap:6px;flex-wrap:wrap;margin:0}
.pseats .pid{display:inline-flex;gap:8px;align-items:center;font-size:11.5px;color:var(--soft)}
.pseats .pid .slug{font-size:10.5px;padding:2px 7px}
.pseats .tag{color:var(--soft)}
.ribbon .rb.mine{color:var(--urg);background:var(--urg-bg);box-shadow:none}.ribbon .rb.mine b{color:var(--urg)}
.ribbon .rb.zero .bi{background:var(--soft)}
.ribbon .btn.small{margin-left:6px}
.eb h1,.eb h2,.eb h3,.eb h4{font-size:14px;margin:14px 0 6px;letter-spacing:-.01em}
.eb p{margin:8px 0}

/* copy chips for whole sentences: the dashed pill from the first version */
.say{margin:22px 0 0}
.tbrief{padding:0 26px 18px;border-top:1px solid var(--line)}
.tbrief .say.page{margin:16px 0 0}
.tbrief .status{margin-top:14px}
.tbrief .meta{margin:10px 0 0}
/* Goal and units are the agents' bookkeeping (declared at open, coverage reported back to agents
   on every write). A person reads the status and the NEED above; this stays readable but recedes:
   small, grey, one line per row, no card. */
.agentmeta{margin:14px 0 0;padding-top:10px;border-top:1px dashed var(--line);font-size:12px;color:var(--mute);line-height:1.45}
.agentmeta p{margin:0 0 4px;display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;max-width:90ch}
.agentmeta .lbl{font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--soft);min-width:38px}
.agentmeta .unit{display:inline;padding:0;color:var(--mute)}
.agentmeta .unit::after{content:" ·";color:var(--soft);display:inline-block;padding-left:2px} /* inline-block: a built unit's strike must not run through the dot */
.agentmeta .unit:last-child::after{content:""}
.agentmeta .unit.built{text-decoration:line-through;color:var(--soft)}
.agentmeta .unit.planned{color:var(--ink2)}
.cc{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;cursor:pointer;text-align:left;max-width:100%;
  border:1px dashed rgba(var(--fg),.28);background:var(--core);color:var(--ink2);font:inherit;font-size:13px;line-height:1.35;
  transition:border-color .15s ease,background .15s ease,color .15s ease}
.cc:hover{border-color:var(--lt);color:var(--ink)}
.cc.copied{border-style:solid;border-color:var(--ok);background:rgba(var(--ok-rgb),.12);color:var(--ok)}
.cc .ic{flex:none;width:14px;height:14px;opacity:.7}
.cc .txt{white-space:normal}

/* The "open a new thread" chip on a 3+ seat project carries its seat picker inside the label:
   "Open a new thread to [Tim v]". The <select> is stripped to plain text so the pill reads as one
   control; clicking the name opens the list, clicking anywhere else copies. */
.seatpick{flex-wrap:wrap;row-gap:2px}
.seatpick .seat{display:inline-flex;align-items:center;gap:3px;color:var(--ink);font-weight:600;white-space:nowrap}
.seatpick select{appearance:none;-webkit-appearance:none;border:0;border-bottom:1px dotted currentColor;border-radius:0;background:transparent;
  color:inherit;font:inherit;font-weight:inherit;padding:0;margin:0;cursor:pointer;max-width:140px;text-overflow:ellipsis;outline:none}
.seatpick select:hover,.seatpick select:focus{border-bottom-style:solid}
.seatpick .caret{font-size:10px;opacity:.6}
.seatpick:focus-visible{outline:2px solid var(--lt);outline-offset:2px}
.cc.copied .seat{display:none}

/* The top bar. Sticky and translucent so the page reads through it; the mark sits in a tinted
   tile; crumbs follow the wordmark with the current page in ink; on the right the live pill, the
   new-since pill, the person (avatar, first name, email) and a quiet sign-out. */
.top{position:sticky;top:0;z-index:7;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:22px;
  height:58px;padding:0 24px;background:var(--topbg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);box-shadow:0 10px 30px -26px rgba(var(--sh),.35)}
.wordmark{display:inline-flex;align-items:center;gap:10px;white-space:nowrap;color:var(--ink);font-weight:700;letter-spacing:-.015em;text-decoration:none;font-size:15px}
.wordmark .mark{width:30px;height:30px;border-radius:10px;background:hsl(var(--tone-0) / .12);color:var(--lt);display:inline-flex;align-items:center;justify-content:center;flex:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,calc(.7 * var(--hlk)))}
.wordmark .mark svg{width:20px;height:20px}
.wordmark:hover .mark{background:hsl(var(--tone-0) / .2)}
/* the brand cluster on the left: mark, wordmark, then About as a quiet nav link */
.brand{display:inline-flex;align-items:center;gap:16px;min-width:0}
.top .navlink{font-size:13px;color:var(--mute);padding:5px 10px;border-radius:999px;text-decoration:none;white-space:nowrap}
.top .navlink:hover{color:var(--ink);background:var(--shell)}

/* the crumbs read as one chip, in the same vocabulary as the person chip on the right: ancestors
   quiet, the current page in ink, a chevron between. Empty (signed out) it disappears entirely. */
.crumbs{display:inline-flex;align-items:center;gap:8px;min-width:0;font-size:13px;color:var(--soft);
  padding:6px 15px;border-radius:999px;background:var(--shell);
  box-shadow:inset 0 1px 0 rgba(255,255,255,calc(.8 * var(--hlk))),0 0 0 1px var(--ring)}
.crumbs:empty{display:none}
/* wide screens: the crumbs sit at the true centre of the bar, whatever the two ends weigh */
@media (min-width:900px){.top{grid-template-columns:auto auto;justify-content:space-between}.crumbs{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:36vw;justify-content:center}}
.top .who{justify-self:end}
.crumbs a{color:var(--mute);text-decoration:none;white-space:nowrap;transition:color .15s ease}
.crumbs a:hover{color:var(--ink)}
.crumbs .here{color:var(--ink);font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crumbs .sep{display:inline-flex;align-items:center;color:rgba(var(--fg),.26);flex:none}
.top .who{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--mute)}
.top .live{display:inline-flex;align-items:center;gap:6px;padding:5px 10px 5px 8px;border-radius:999px;background:var(--shell);font-size:11px;font-weight:600;color:var(--soft);text-transform:uppercase;letter-spacing:.1em}
.top .live .dot{width:7px;height:7px;border-radius:50%;background:rgba(var(--fg),.2);transition:background .4s ease}
.top .live.on{color:var(--ok);background:rgba(var(--ok-rgb),.1)}.top .live.on .dot{background:var(--ok);box-shadow:0 0 0 3px rgba(var(--ok-rgb),.18)}
/* Who else has the bridge open right now: overlapped initials, the name and their page on hover.
   It sits in the brand cluster rather than beside the person chip because the crumbs are centred
   on the viewport, and a growing right-hand cluster runs into them. */
.top .herenow{display:inline-flex;align-items:center;gap:9px;padding-left:16px;border-left:1px solid var(--line)}
.top .herenow .hl{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--soft);white-space:nowrap}
.top .herenow .av{width:24px;height:24px;border-radius:50%;background:var(--core);color:var(--mute);font-size:10px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center;cursor:default;margin-left:-8px;
  box-shadow:0 0 0 1px var(--ring),0 0 0 3px rgba(255,255,255,calc(.92 * var(--hlk)))}
.top .herenow .hl + .av{margin-left:0}
.top .herenow .av.rest{background:var(--shell);color:var(--soft)}
.top .new{display:none;align-items:center;padding:6px 12px;border-radius:999px;background:var(--new);color:var(--onink);font:inherit;font-size:12.5px;font-weight:700;border:0;cursor:pointer}
.top .new.show{display:inline-flex}
.top .new:hover{background:var(--newhover)}
.top .person{display:inline-flex;align-items:center;gap:9px;min-width:0;padding:4px 12px 4px 4px;border-radius:999px;background:var(--shell);box-shadow:inset 0 1px 0 rgba(255,255,255,calc(.8 * var(--hlk)))}
.top .avatar{width:28px;height:28px;border-radius:50%;background:var(--lt);color:var(--onink);font-size:11.5px;font-weight:700;letter-spacing:.02em;display:inline-flex;align-items:center;justify-content:center;flex:none}
.top .pn{display:grid;line-height:1.15;min-width:0}
.top .pn b,.top .pn small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .pn b{font-size:13px;font-weight:600;color:var(--ink)}
.top .pn small{font-size:11px;color:var(--soft);font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace}
.top .signout{gap:6px;white-space:nowrap}
.top .signout svg{flex:none}
/* the sticky summary tiles sit below the bar, and anchored scrolls clear both */
html{scroll-padding-top:110px}
.thread,.entry{scroll-margin-top:110px}
.wrap{padding-top:28px}

/* batch 1 (docs/progress/ui-ux-improvements.md) */
.chip.baton .sub{margin-left:7px;font-family:"JetBrains Mono","Cascadia Code",ui-monospace,monospace;font-weight:500;font-size:11px;opacity:.75}
/* an idle thread: no ask, the last message instead, in its writer's colour */
.last{margin:14px 0 0;padding:10px 14px 11px;border-radius:14px;background:var(--shell);font-size:13.5px;color:var(--mute);max-width:78ch;
  display:grid;grid-template-columns:auto 1fr;gap:6px 12px;align-items:baseline;box-shadow:inset 3px 0 0 hsl(var(--tone))}
.last .lbl{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--soft);padding-top:1px}
.last b{color:hsl(var(--tone));font-weight:700}
.last .when{color:var(--soft);font-size:12px;margin-left:4px}
/* older entries behind one control inside a card */
.more{display:block;margin:14px 0 4px;padding:6px 12px;border-radius:999px;border:1px dashed rgba(var(--fg),.28);background:var(--core);color:var(--mute);font:inherit;font-size:12.5px;cursor:pointer}
.more:hover{border-color:var(--lt);color:var(--ink)}
/* narrow screens: the bar keeps the mark, the current page and the avatar */
@media (max-width:767px){
  .ask{grid-template-columns:1fr;gap:4px 0}
  .btn,.btn.small,.fchip,.viewbar button,.top .navlink,.top .links a,.cc,.slug[role=button],.goto,.more,.prail .pp,.pin,.band .btn.small{min-height:44px}
  .cc,.slug[role=button]{padding-top:10px;padding-bottom:10px}
  .swatches .sw{width:24px;height:24px}
  .top{padding:8px 14px 10px;gap:8px 10px;height:auto;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto}
  .top .brand{grid-column:1;grid-row:1}
  .top .who{grid-column:2;grid-row:1;justify-self:end}
  .top .crumbs{grid-column:1 / -1;grid-row:2;max-width:100%;width:100%;justify-content:flex-start;padding:5px 12px;font-size:12.5px}
  .crumbs .here{flex:1;min-width:0}
  .wordmark .wm{display:none}
  .brand{gap:8px}
  .top .navlink{padding:4px 8px;font-size:12.5px}
  .top .who{gap:6px;flex-wrap:wrap;justify-content:flex-end;min-width:0}
  .top .herenow .hl{display:none}
  .top .pn{display:none}
  .top .person{padding:2px}
  .top .signout .lbl{display:none}
  .top .live .lt{display:inline;font-size:10px}
  html{scroll-padding-top:104px}
  .thread,.entry{scroll-margin-top:104px}
}

/* item 3: on phones the summary tiles are one compact row and never sticky, so they stop covering the page while scrolling */
@media (max-width:767px){
  .bento{position:static;top:auto;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:-4px 0 24px;padding:0;background:none}
  .bento::after{display:none}
  .tile,.tile.urgent{grid-column:span 1;border-radius:1rem}
  .tile>div{flex-direction:column;align-items:flex-start;gap:6px;min-height:0;padding:10px 12px}
  .tile .eyebrow{font-size:9px;padding:4px 8px;letter-spacing:.14em;gap:5px}
  .tile .eyebrow .bi{width:16px;height:16px}.tile .eyebrow .bi svg{width:10px;height:10px}
  .tile .n,.tile.urgent .n{margin-left:0;font-size:22px}
  .tile .n small{display:block;margin:2px 0 0;font-size:11px}
}

/* Urgent threads sit in the one Open band with the rest (2026-09-21) and are told apart by a red
   border, not a section of their own. The border stays through hover and unread. */
.thread.urgent{box-shadow:0 0 0 2px var(--urg)}
.thread.urgent:hover{box-shadow:0 0 0 2px var(--urg),var(--amb)}
.band .count .urgn{color:var(--urg);font-weight:700}
.mv.unread>a{box-shadow:inset 4px 0 0 var(--new),0 0 0 1px var(--ring)}
.mv.urgent>a{box-shadow:0 0 0 2px var(--urg)}
.mv.urgent.unread>a{box-shadow:inset 4px 0 0 var(--new),0 0 0 2px var(--urg)}
.mv.urgent>a:hover{box-shadow:0 0 0 2px var(--urg),var(--amb)}

/* Seat requests: the chip on home and directory cards, the door on a directory card you are not
   in, and the pending list in Seats. Same red family as urgent: it is the one thing on a project
   an owner is being asked to act on that is not a thread. */
.chip.req{background:var(--urg-bg);color:var(--urg);font-weight:600;text-decoration:none}
a.chip.req:hover{background:var(--urg);color:var(--onink)}
.eyebrow.req{background:var(--urg-bg);color:var(--urg)}
.door{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:14px 0 0}
.door .hint{color:var(--mute);font-size:12px}
.members.requests li{background:var(--urg-bg)}
.sheet-b>.sheet-s:first-child{margin-top:0}
.members.requests{margin-bottom:26px}
.members.requests .email i{color:var(--ink);font-style:italic}

/* Tracker view (2026-09-25): six stacked sections, each a plain list of rows; the only colour is
   the red eyebrow on Blocked and the seat chips. Rows are cards-lite: a hairline, no shadow. */
.tracker{display:grid;gap:34px}
.trk .band{margin-bottom:10px}
.eyebrow.blocked{background:var(--urg-bg);color:var(--urg)}
.trklist{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.trklist li{background:var(--core);border-radius:14px;padding:12px 16px;box-shadow:0 0 0 1px var(--ring);display:grid;gap:4px}
.trklist .tt{font-weight:600;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.trklist .tt a{color:inherit}
.trklist .td{font-size:13px;color:var(--mute)}
.trklist .td .chip{margin-left:4px}
.trkempty{margin:0;color:var(--mute);font-size:13px}
.trklist .ts{margin:0;font-size:13.5px;color:var(--ink)}
.trklist .ts.ans{color:var(--mute)}
.trklist .ts.pend{color:var(--urg);font-size:12px;font-weight:600}
.trklist .sub{color:var(--mute);font-weight:400;font-size:12px}
.trkwho{display:flex;align-items:center;gap:8px;margin:12px 0 6px}
.trkwho:first-child{margin-top:0}

/* Project plan at the top of the Tracker: the agents' summary, then a checklist per owner. */
.trk.plan .plansum{background:var(--core);border-radius:14px;padding:14px 18px;box-shadow:0 0 0 1px var(--ring);margin-bottom:14px}
.trk.plan .plansum .eb{font-size:14px}
.trk.plan .plansum .eb p{margin:0 0 6px}
.trk.plan .sub{color:var(--mute);font-size:12px;margin:6px 0 0}
.trk.plan .sub.stale{color:var(--urg);font-weight:600}
.checklist{list-style:none;margin:0 0 6px;padding:0;display:grid;gap:6px}
.checklist li{background:var(--core);border-radius:12px;padding:10px 14px;box-shadow:0 0 0 1px var(--ring);display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;justify-content:space-between}
.checklist label{display:flex;gap:10px;align-items:baseline;cursor:pointer;font-weight:600;font-size:14px}
.checklist input{width:16px;height:16px;accent-color:var(--new);flex:none;transform:translateY(2px)}
.checklist li.done label span{text-decoration:line-through;color:var(--mute);font-weight:400}
.checklist .sub{margin:0}

/* Weekly recap on home: four short columns under the ribbon. */
.recap{margin:18px 0 26px;padding:16px 18px;border-radius:var(--r);background:var(--core);box-shadow:0 0 0 1px var(--ring)}
.recap .rtop{display:flex;gap:10px;align-items:baseline;margin-bottom:12px}
.recap .rcols{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:18px}
.recap .rh{margin:0 0 6px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--mute)}
.recap .rh b{color:var(--ink);margin-left:4px}
.recap ul{list-style:none;margin:0;padding:0;display:grid;gap:5px;font-size:13.5px}
.recap ul a{color:var(--ink);font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.recap .sub{color:var(--mute);font-size:12px}
/* This week, dark look (2026-09-26): header + counts, then two groups of full-width rows. */
.wkpage{display:flex;flex-direction:column;gap:22px;margin:4px 0 40px}
.wkhead{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap}
.wktitle h2{margin:0;font-size:24px;font-weight:600;letter-spacing:-.015em;color:var(--ink)}
.wktitle p{margin:4px 0 0;font-size:13px;color:var(--mute)}
.wkstats{display:grid;grid-template-columns:repeat(4,minmax(110px,1fr));gap:8px}
.wkstat{display:flex;flex-direction:column;gap:4px;padding:10px 14px;border-radius:12px;background:var(--core);box-shadow:0 0 0 1px var(--ring)}
.wkstat span{font-size:11.5px;color:var(--mute)}
.wkstat b{font-size:22px;font-weight:600;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.wkstat.urg b{color:var(--urg)}.wkstat.ok b{color:var(--ok)}
.wkgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;align-items:start}
.wkgroup{display:flex;flex-direction:column;gap:16px;min-width:0}
.wkg{margin:0;font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--soft)}
.wksec{border-radius:14px;background:var(--core);box-shadow:0 0 0 1px var(--ring);overflow:hidden}
.wksec.mine{box-shadow:0 0 0 1px rgba(var(--fg),.16),inset 3px 0 0 var(--new)}
.wksh{display:flex;align-items:baseline;gap:10px;padding:14px 18px 12px;border-bottom:1px solid var(--line)}
.wksh h3{margin:0;font-size:14px;font-weight:600;color:var(--ink)}
.wksh .wkn{font-size:12.5px;color:var(--mute);font-variant-numeric:tabular-nums}
.wksh .hint{margin-left:auto;font-size:12px;color:var(--soft);text-align:right}
.wksec .none{margin:0;padding:14px 18px;font-size:13px}
.wklist{list-style:none;margin:0;padding:0}
.wklist li+li{border-top:1px solid var(--line)}
.wkrow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 14px;padding:10px 18px;color:var(--ink);text-decoration:none}
.wkrow:hover{background:rgba(var(--fg),.04)}
.wkrow:focus-visible{outline:2px solid var(--new);outline-offset:-2px}
.wkt{grid-column:1;font-size:13.5px;font-weight:500;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.wkm{grid-column:1;display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;font-size:12px;color:var(--mute)}
.wkm .chip{font-size:10.5px;padding:1px 7px}
.wkwho{color:var(--ink3)}
.wkwho::before{content:"\00b7";margin-right:8px;color:var(--soft)}
.wkr{grid-column:2;grid-row:1 / span 2;align-self:center;font-size:12px;color:var(--mute);font-variant-numeric:tabular-nums;text-align:right}
.wkage.stale{color:var(--urg)}
.wkmore{border-top:1px solid var(--line)}
.wkmore summary{padding:10px 18px;font-size:12.5px;color:var(--lt);cursor:pointer;list-style:none}
.wkmore summary::-webkit-details-marker{display:none}
.wkmore[open] summary{border-bottom:1px solid var(--line)}
@media (max-width:1099px){.wkgrid{grid-template-columns:1fr}}
@media (max-width:640px){.wkstats{grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.wksh{flex-wrap:wrap}.wksh .hint{margin-left:0;text-align:left;flex-basis:100%}.wkrow{padding:10px 14px}}


/* Admin: per-person stats (2026-09-25). Setup is five small chips; done ones are ink, missing ones
   grey, so a stuck onboarding reads at a glance down the column. */
.tbl.pstats td{vertical-align:top}
.tbl.pstats .sub{color:var(--mute);font-size:12px;white-space:nowrap}
.tbl.pstats .sub.stale{color:var(--urg);font-weight:600}
.tbl.pstats .avs{margin-right:6px;vertical-align:middle}
.tbl.pstats .setupcell{display:flex;flex-wrap:wrap;gap:4px;min-width:220px}
.chip.setup{color:var(--soft);background:transparent;box-shadow:0 0 0 1px var(--ring);font-size:11px}
.chip.setup.on{color:var(--ink);background:var(--shell);box-shadow:none}

/* Home inbox filtered to one project: a header with the way into the project (2026-09-25). */
.phead{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;padding:14px 18px;margin:0 0 22px;border-radius:var(--r);background:var(--core);box-shadow:0 0 0 1px var(--ring)}
.phead .pt{margin:0;font-weight:700;font-size:17px;letter-spacing:-.01em}
.phead .sub{margin:2px 0 0;color:var(--mute);font-size:12.5px}
.phead .acts{display:flex;gap:8px}

/* ── The dark look (2026-09-26) ─────────────────────────────────────────────────────────────
   Lorenzo's pick from a reference: near-black ground, one violet accent, Geist. Opt-in per person
   while it is built (the header's look switch sets data-look on <html>, remembered in the
   browser); becomes the default once every screen is covered. Everything above styles through
   tokens, so this block is mostly values. Seat tones keep their hues - those were checked for
   colour-blind separation - and only gain lightness so they read on black. */
:root[data-look="dark"]{
--fg:236,234,244;--sh:0,0,0;--hlk:.035;--topbg:rgba(11,10,16,.82);
--bg:#0b0a10;--core:#16151f;--ink:#eceaf4;--mute:#8c89a0;--soft:#6f6c82;
--lt:#b3a9ff;--lt-rgb:179,169,255;--ok:#4fc3a1;--ok-rgb:79,195,161;
--new:#7c6cf2;--newhover:#8f81f5;--onink:#0b0a10;--ink2:#c9c5dc;--ink3:#a5a2b8;--dot:#4a4760;
--well:#13121b;--old-bg:rgba(232,176,74,.14);--closed:#6f6c82;--inkhover:#fff;
--urg-bg:rgba(242,120,108,.15);--urg:#f59a90;--warn:#e8b04a;
--tone-0:222 90% 74%;--tone-1:330 80% 76%;--tone-2:190 70% 62%;--tone-3:280 65% 76%;
--tone-4:25 85% 68%;--tone-5:222 55% 70%;--tone-6:280 45% 64%;--tone-7:20 55% 62%;
--r:1.15rem;--pad:.3rem;
--amb:0 24px 60px -30px rgba(0,0,0,.85),0 2px 6px -2px rgba(0,0,0,.5);
color-scheme:dark}
:root[data-look="dark"] body{font-family:Geist,"Segoe UI Variable Text",system-ui,sans-serif;font-feature-settings:normal}
:root[data-look="dark"] code,:root[data-look="dark"] .mono{font-family:"Geist Mono",ui-monospace,monospace}
/* Primary actions carry the accent, not the ink: ink is near-white here. */
:root[data-look="dark"] .btn.primary,:root[data-look="dark"] .btn.nudge.on{background:var(--new);color:var(--onink)}
:root[data-look="dark"] .btn.primary:hover,:root[data-look="dark"] .btn.nudge.on:hover{background:var(--newhover)}
:root[data-look="dark"] .fchip.on{background:var(--new);color:var(--onink)}
/* Band marks are a white mark on a filled disc; the "open" disc is ink, near-white here. */
:root[data-look="dark"] .bi.open{background:#4a4760}
/* Form fields sit a step below their card. */
:root[data-look="dark"] input,:root[data-look="dark"] select,:root[data-look="dark"] textarea{background:#0f0e16;color:var(--ink)}
:root[data-look="dark"] ::placeholder{color:var(--soft)}

/* The header's look switch. */
.lookbtn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;border:0;background:var(--shell);color:var(--mute);cursor:pointer}
.lookbtn:hover{color:var(--ink);background:rgba(var(--fg),.08)}
.lookbtn svg{width:15px;height:15px}
@media (max-width:520px){.top .brand .navlink{display:none}}

/* ── New-look structure (phase 2-3, 2026-09-26) ─────────────────────────────────────────────
   Project colour squares and the project header card. Shown in the dark look only while it is
   built, so the current look stays exactly as colleagues know it; the gate goes at switch-over. */
:root:not([data-look="dark"]) .phero,:root:not([data-look="dark"]) .psq{display:none}
/* The project square carries an icon or the project's initials, in the project colour on a
   tint of it (2026-09-26). Sizes scale per place; the glyph is ~62% of the square. */
.psq{--s:20px;width:var(--s);height:var(--s);border-radius:calc(var(--s) * .3);background:color-mix(in srgb,var(--pc) 20%,transparent);color:var(--pc);flex:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}
.psq svg{width:62%;height:62%}
/* An emoji mark stands on its own: no tint box, sized to the square. */
.psq.emo{background:none;font-size:calc(var(--s) * .82);line-height:1;font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif}
.psq b{font-size:calc(var(--s) * .42);font-weight:700;letter-spacing:.02em;line-height:1}
.ttitle .psq{--s:22px;margin-right:10px;vertical-align:-5px}
.wkm .psq{--s:16px}
.phero .htitle .psq{--s:34px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.iconpick{border:0;padding:0;margin:4px 0 0;display:flex;flex-wrap:wrap;gap:6px}
.iconpick legend{font-size:12.5px;font-weight:600;margin-bottom:6px;padding:0}
.iconpick .ip{cursor:pointer;border-radius:10px;padding:3px;box-shadow:0 0 0 1px var(--line)}
.iconpick .ip input{position:absolute;opacity:0;width:1px;height:1px}
.iconpick .ip .psq{--s:30px}
.iconpick .ip:has(input:checked){box-shadow:0 0 0 2px var(--new)}
.iconpick .ip:has(input:focus-visible){outline:2px solid var(--lt);outline-offset:2px}
.pc-0{--pc:#7c6cf2}.pc-1{--pc:#4fc3a1}.pc-2{--pc:#e8b04a}.pc-3{--pc:#6cb4f2}.pc-4{--pc:#f2a6c9}.pc-5{--pc:#a5a2b8}
.phero{display:flex;gap:36px;padding:22px 26px;margin:0 0 20px;border-radius:var(--r);background:var(--well);box-shadow:0 0 0 1px var(--ring)}
.phero .hmain{flex:1;min-width:0;display:flex;flex-direction:column;gap:14px}
.phero .htitle{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.phero h1{margin:0;font-size:26px;font-weight:600;letter-spacing:-.02em;line-height:1.2}
.phero .hgrid{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px 14px;align-items:baseline}
.phero .hl{font-size:12.5px;color:var(--mute)}
.phero .hsum{font-size:13.5px;color:var(--ink2);line-height:1.5}
.phero .hsum p{margin:0 0 4px}
.phero .sub{display:block;font-size:12px;color:var(--soft);margin-top:2px}
.phero .hpeople{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px}
.phero .hpeople>span{display:inline-flex;align-items:center;gap:7px}
.phero .htags{display:flex;flex-wrap:wrap;gap:6px}
.phero .hplan{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:12.5px}
.phero .hplan .sub{display:inline;margin:0}
.phero .hpb{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 10px;font-size:13px;color:var(--ink2)}
.phero .hpb .sub{display:inline;margin:0}

/* Playbook at the top of the Tracker: five fixed sections, owners edit, proposals to review. */
.trk.playbook .pbcard{background:var(--core);border-radius:14px;padding:14px 18px;box-shadow:0 0 0 1px var(--ring);margin-bottom:14px;display:grid;gap:10px}
.trk.playbook .pbgrid{display:grid;grid-template-columns:150px minmax(0,1fr);gap:10px 14px;align-items:baseline}
.trk.playbook .hl{font-size:12.5px;color:var(--mute)}
.trk.playbook .pbv{font-size:14px;color:var(--ink)}
.trk.playbook .pbv p{margin:0 0 4px}
.trk.playbook .pbv.empty{color:var(--soft);font-size:13px}
.trk.playbook .sub{color:var(--mute);font-size:12px;margin:0}
.trk.playbook .pbact{display:flex;gap:8px;margin-top:6px}
.pbedit summary{list-style:none;width:fit-content;cursor:pointer}
.pbedit summary::-webkit-details-marker{display:none}
.pbedit form{display:grid;gap:12px;margin-top:12px}
.field textarea{font:inherit;font-size:14px;padding:9px 12px;border-radius:12px;border:1px solid rgba(var(--fg),.14);background:var(--core);color:var(--ink);resize:vertical}
.field textarea:focus{outline:2px solid var(--lt);outline-offset:1px;border-color:transparent}
.pbedit form .btn{width:fit-content}
@media (max-width:640px){.trk.playbook .pbgrid{grid-template-columns:1fr;gap:2px}.trk.playbook .pbgrid .pbv{margin-bottom:8px}}
.phero .segs{display:inline-flex;gap:4px}
.phero .segs span{width:24px;height:5px;border-radius:3px;background:rgba(var(--fg),.12)}
.phero .segs span.on{background:var(--new)}
.phero .pbar{width:220px;height:5px;border-radius:3px;background:rgba(var(--fg),.12);overflow:hidden}
.phero .pbar span{display:block;height:100%;background:var(--new)}
.phero .htiles{width:300px;flex:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-content:start}
.phero .ht{background:var(--core);border-radius:12px;padding:12px 14px;box-shadow:0 0 0 1px var(--ring);display:flex;flex-direction:column;gap:2px}
.phero .ht span{font-size:11.5px;color:var(--mute)}
.phero .ht b{font-size:26px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.phero .ht.urg b{color:var(--urg)}.phero .ht.warn b{color:var(--warn)}.phero .ht.ok b{color:var(--ok)}
@media (max-width:1099px){.phero{flex-direction:column;gap:18px}.phero .htiles{width:auto;grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:640px){.phero{padding:16px}.phero .hgrid{grid-template-columns:1fr;gap:4px}.phero .hgrid .hl{margin-top:8px}.phero .htiles{grid-template-columns:repeat(2,minmax(0,1fr))}.phero h1{font-size:22px}}
.act .chip.req{margin-left:auto}

/* Timeline view (phase 4, 2026-09-26): a week grid, one bar per thread active that week. */
.timeline{background:var(--well);border-radius:var(--r);box-shadow:0 0 0 1px var(--ring);padding:16px 18px 20px;display:flex;flex-direction:column;gap:12px}
.tlnav{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tlnav b{font-size:14px}
.tlnav .hint{margin-left:auto;font-size:12px;color:var(--soft)}
.tldays,.tlgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));column-gap:10px}
.tldays{padding-bottom:8px;border-bottom:1px solid var(--line)}
.tldays span{font-size:11.5px;letter-spacing:.06em;color:var(--mute)}
.tldays b{color:var(--ink);font-weight:600}
.tldays .today{color:var(--lt)}.tldays .today b{color:var(--lt)}
.tlgrid{position:relative;row-gap:10px;grid-auto-flow:row dense;align-items:start;min-height:120px}
.tlnow{position:absolute;top:-8px;bottom:0;width:1px;background:var(--new);opacity:.7;pointer-events:none}
.tlcard{display:flex;flex-direction:column;gap:8px;padding:11px 13px;border-radius:12px;background:var(--core);box-shadow:0 0 0 1px var(--ring),0 10px 24px -18px rgba(var(--sh),.8);color:var(--ink);text-decoration:none;min-width:0;position:relative;z-index:1}
.tlcard:hover{box-shadow:0 0 0 1px rgba(var(--fg),.2),0 10px 24px -14px rgba(var(--sh),.9)}
.tlcard .tlt{font-size:13.5px;font-weight:600;line-height:1.3;overflow-wrap:anywhere}
.tlcard .tlm{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tlcard.urgent{box-shadow:0 0 0 2px var(--urg)}
.tlcard.unread{box-shadow:inset 3px 0 0 var(--new),0 0 0 1px var(--ring)}
.tlcard.closed{opacity:.55}.tlcard.closed .tlt{text-decoration:line-through;text-decoration-color:var(--soft)}
@media (max-width:767px){.tldays,.tlgrid{column-gap:4px}.tldays span b{display:block}.tlcard{padding:8px}.tlcard .tlm .chip:not(.baton):not(.new){display:none}.tlnav .hint{display:none}}
.tlcard .tlt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tlcard .tlr{margin-left:auto;display:inline-flex;align-items:center;gap:8px;font-size:11.5px;color:var(--mute)}
.tlcard .tlav{display:inline-flex}.tlcard .tlav .avs{width:22px;height:22px;font-size:9px;box-shadow:0 0 0 2px var(--core)}
.tlcard .tlav .avs{background:linear-gradient(hsl(var(--tone) / .25),hsl(var(--tone) / .25)),var(--core)}
.tlcard .tlav .avs+.avs{margin-left:-5px}
.tlcard .slug.reply{border-style:dashed}
/* Tracker checklist, dark look: who added or ticked an item, and in which thread, moves to the
   row's tooltip; a done item keeps only its date (Lorenzo, 2026-09-26). */
:root[data-look="dark"] .checklist .ol{display:none}
/* Baton band: the card split by who held the baton, a tint per stretch with a solid top edge. */
.tlcard{overflow:hidden;isolation:isolate}
.tlcard>:not(.tlband){position:relative;z-index:1}
.tlband{position:absolute;inset:0;z-index:0;pointer-events:none}
.tlseg{position:absolute;top:0;bottom:0;background:hsl(var(--tone) / .14);box-shadow:inset 0 3px 0 hsl(var(--tone));pointer-events:auto}
.tlseg.idle{background:rgba(var(--fg),.03);box-shadow:inset 0 3px 0 rgba(var(--fg),.18)}
.tlseg+.tlseg{border-left:1px solid var(--core)}
.tlcard.closed .tlseg{background:transparent}
.tlspan{display:inline-flex;gap:4px;margin-left:6px}
.tlspan .btn.on{background:var(--ink);color:var(--onink)}
:root[data-look="dark"] .tlspan .btn.on{background:#221f33;color:var(--ink)}
/* Month: stacked week rows, smaller cards. */
.timeline.month{gap:6px}
.tlweek{display:flex;flex-direction:column;gap:6px;padding-top:10px}
.tlweek+.tlweek{border-top:1px solid var(--line)}
.tlweek .tldays{border-bottom:0;padding-bottom:2px}
.tldays .out{opacity:.4}
.tlgrid.mini{row-gap:6px;min-height:36px}
.tlcard.mini{padding:6px 9px;gap:5px;border-radius:9px}
.tlcard.mini .tlt{font-size:12.5px;-webkit-line-clamp:1}
.tlcard.mini .chip{font-size:10.5px;padding:1px 6px}
.tlcard.mini .slug{font-size:10.5px}
@media (max-width:767px){.tlcard.mini .tlm{display:none}.tlspan{margin-left:0}}
:root[data-look="dark"] .prail .pp:not(.nl) .dot{display:none}

/* ── The new look's frame (2026-09-26, second cut) ──────────────────────────────────────────
   Ported from the sketch, not recoloured: an icon strip down the left, the top bar becomes the
   page bar (breadcrumb, who is here, live, new since you looked, Activity, Tracker), the project
   sidebar is a full-height panel, the project page's activity feed is a slide-out, and the page
   is dense - 13.5px text, 7px tag corners, 12-14px card corners. Everything here is under the
   dark look; .nl marks markup that exists for it alone, .ol markup it hides. */
:root:not([data-look="dark"]) .nl{display:none!important}
.istrip{display:none}
:root[data-look="dark"] body{font-size:13.5px;line-height:1.5}
:root[data-look="dark"] .chip{border-radius:7px;padding:3px 8px;font-size:11.5px}
:root[data-look="dark"] .btn{border-radius:9px}
:root[data-look="dark"] .btn.small{padding:6px 11px;font-size:12.5px}
:root[data-look="dark"] .eyebrow{border-radius:7px;padding:4px 9px;letter-spacing:.14em;font-weight:500}
/* View tabs: easier to spot (Lorenzo, 2026-09-26) - an icon per tab, brighter idle labels, and
   the current view filled in the accent. */
:root[data-look="dark"] .viewbar{border-radius:12px;padding:4px;gap:4px;background:#14131d;box-shadow:0 0 0 1px rgba(var(--fg),.14);margin:0}
:root[data-look="dark"] .viewbar button{display:inline-flex;align-items:center;gap:7px;border-radius:9px;font-weight:500;font-size:13.5px;padding:7px 14px;color:var(--ink3)}
:root[data-look="dark"] .viewbar button svg{width:15px;height:15px;flex:none;opacity:.85}
:root[data-look="dark"] .viewbar button:hover{color:var(--head);background:rgba(var(--fg),.06)}
:root[data-look="dark"] .viewbar button.on{background:var(--new);color:var(--onink);font-weight:600;box-shadow:0 6px 18px -8px rgba(124,108,242,.7)}
:root[data-look="dark"] .viewbar button.on svg{opacity:1}
:root[data-look="dark"] .viewbar button:focus-visible{outline:2px solid var(--lt);outline-offset:2px}
:root[data-look="dark"] .ribbon{gap:6px;margin:0 0 18px;padding:0 0 12px}
:root[data-look="dark"] .ribbon .rb{border-radius:7px;padding:4px 9px;font-size:11px;letter-spacing:.04em;box-shadow:none;background:#1c1a27;gap:6px}
:root[data-look="dark"] .ribbon .rb .bi{width:16px;height:16px;margin:0}
:root[data-look="dark"] .ribbon .rb .bi svg{width:10px;height:10px}
:root[data-look="dark"] .ribbon .rb b{font-size:12px}
:root[data-look="dark"] .ribbon .viewbar{margin-left:auto}
:root[data-look="dark"] .band{margin:28px 0 12px;padding-bottom:10px;gap:10px}
:root[data-look="dark"] .band .count{font-size:13px}
:root[data-look="dark"] .band .hint{font-size:12px;color:var(--soft)}
:root[data-look="dark"] .thread{border-radius:14px;padding:0;background:none;margin:0 0 12px}
:root[data-look="dark"] .thread:not(.urgent){box-shadow:none}
:root[data-look="dark"] .thread:not(.urgent):hover{box-shadow:0 0 0 1px rgba(var(--fg),.14)}
:root[data-look="dark"] .core{border-radius:14px;box-shadow:0 0 0 1px var(--ring)}
:root[data-look="dark"] .thead{padding:16px 18px 14px;gap:14px}
:root[data-look="dark"] .ttitle{font-size:14.5px;font-weight:600;letter-spacing:-.01em;margin:0 0 8px}
:root[data-look="dark"] .status{font-size:13px}
:root[data-look="dark"] .ask{border-radius:10px;padding:9px 12px;margin-top:10px}
:root[data-look="dark"] .mv>a,:root[data-look="dark"] .pcard,:root[data-look="dark"] .tlcard{border-radius:12px}
:root[data-look="dark"] .phero{border-radius:18px}
/* The dark frame has no page max-width, so the 78ch text cap left the right half of every thread
   card empty (Lorenzo, 2026-09-26). Entry text runs the card's width; the need and last-entry
   boxes size to their text instead of stretching. */
:root[data-look="dark"] .eb,:root[data-look="dark"] .status,:root[data-look="dark"] .mv .mvn,:root[data-look="dark"] .agentmeta p{max-width:none}
:root[data-look="dark"] .ask,:root[data-look="dark"] .last{max-width:100%;width:fit-content}
/* Two reading levels on a card (Lorenzo, 2026-09-26): the parts a person must read - title, the
   NEED, each entry's one-line summary, timeline and week titles - go near-white (~17.5:1 on a card); the detail written for
   agents - status summary, entry bodies - steps down to --ink3 (~7.3:1,
   still well past AA) with its bold runs at --ink2 so an entry's own structure survives. */
:root[data-look="dark"]{--head:#f7f6fc}
:root[data-look="dark"] .ttitle,:root[data-look="dark"] .entry .es,:root[data-look="dark"] .tlcard .tlt,:root[data-look="dark"] .wkt,:root[data-look="dark"] .wktitle h2,:root[data-look="dark"] .wksh h3{color:var(--head)}
:root[data-look="dark"] .ttitle{font-size:15.5px}
:root[data-look="dark"] .ask{color:var(--head);font-weight:500}
:root[data-look="dark"] .status,:root[data-look="dark"] .eb,:root[data-look="dark"] .entry .eneed{color:var(--ink3)}
:root[data-look="dark"] .eb b,:root[data-look="dark"] .eb strong,:root[data-look="dark"] .eb h4,:root[data-look="dark"] .eb h5,:root[data-look="dark"] .eb h6,:root[data-look="dark"] .entry .eneed b{color:var(--ink2)}
.hclamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.hsum.open .hclamp{display:block}
.hmore{border:0;background:none;padding:0;margin-top:2px;color:var(--lt);font:inherit;font-size:12px;cursor:pointer}
.pb{display:inline-flex;align-items:center;height:32px;padding:0 13px;border-radius:9px;border:1px solid rgba(var(--fg),.09);background:var(--core);color:var(--ink2);font:inherit;font-size:13px;font-weight:500;text-decoration:none;cursor:pointer;white-space:nowrap}
.pb:hover,.pb.on{background:#221f33;color:var(--ink)}
@media (max-width:1199px){.pb.js-activity{display:none}}

/* Desktop frame: strip, page bar, sidebar panel, activity slide-out. */
@media (min-width:1200px){
  :root[data-look="dark"] body{padding-left:64px}
  :root[data-look="dark"] .istrip{display:flex;position:fixed;left:0;top:0;bottom:0;width:64px;z-index:8;flex-direction:column;align-items:center;gap:10px;padding:16px 0;border-right:1px solid var(--line);background:var(--bg)}
  .istrip .si{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--mute);background:none;border:0;cursor:pointer;flex:none;text-decoration:none}
  .istrip .si svg{width:19px;height:19px}
  .istrip .si:hover{color:var(--ink);background:rgba(var(--fg),.06)}
  .istrip .si.on{color:var(--ink);background:#221f33}
  .istrip .si.mark{width:34px;height:34px;background:var(--new);color:var(--onink);margin-bottom:10px}
  .istrip .si.mark:hover{background:var(--newhover);color:var(--onink)}
  .istrip .sgap{flex:1}
  .istrip .si.me{cursor:default}.istrip .si.me:hover{background:none}
  .istrip .si.me .avatar{width:30px;height:30px;border-radius:50%;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--lt);color:var(--onink)}

  :root[data-look="dark"] .top{display:flex;align-items:center;gap:12px;height:56px;padding:0 32px;background:var(--bg);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
  :root[data-look="dark"] .top .brand .wordmark,:root[data-look="dark"] .top .brand .navlink{display:none}
  :root[data-look="dark"] .top .crumbs{position:static;transform:none;background:none;box-shadow:none;padding:0;max-width:none;justify-content:flex-start;font-size:13px}
  :root[data-look="dark"] .top .brand{order:1;margin-left:auto}
  :root[data-look="dark"] .top .who{order:2;gap:8px}
  :root[data-look="dark"] .top .who .links,:root[data-look="dark"] .top .who .person,:root[data-look="dark"] .top .who .lookbtn,:root[data-look="dark"] .top .who .signout{display:none}
  :root[data-look="dark"] .top .new{border-radius:9px;padding:0 13px;height:32px}
  :root[data-look="dark"] .top .live{border-radius:7px}

  :root[data-look="dark"] .wrap{max-width:none;padding:24px 32px 80px}
  :root[data-look="dark"] .wrap.has-prail{padding:0;gap:0;grid-template-columns:250px minmax(0,1fr)}
  :root[data-look="dark"] .wrap.has-prail:has(>aside.side){grid-template-columns:250px minmax(0,1fr) 340px}
  :root[data-look="dark"] .wrap.home.has-prail{grid-template-columns:250px minmax(0,1fr) 320px}
  :root[data-look="dark"] .wrap.has-prail>main{padding:24px 32px 80px}
  :root[data-look="dark"] .wrap.has-prail>aside.side{padding:24px 24px 80px 0}
  :root[data-look="dark"] .wrap.home.has-prail>aside.rail{margin:24px 24px 0 0;top:80px}
  :root[data-look="dark"] .prail{position:sticky;top:56px;height:calc(100vh - 56px);overflow:auto;padding:20px 14px 16px;border-right:1px solid var(--line);gap:2px}
  :root[data-look="dark"] .prail .ol{display:none}
  .nlhead{display:flex;align-items:baseline;justify-content:space-between;padding:0 10px 12px}
  .nlhead b{font-size:19px;font-weight:600;letter-spacing:-.01em;color:var(--ink)}
  .nlhead span{font-family:"Geist Mono",ui-monospace,monospace;font-size:11px;color:var(--soft)}
  .nlsearch{display:flex;align-items:center;gap:8px;height:36px;padding:0 12px;margin:0 0 6px;border-radius:10px;background:var(--core);box-shadow:0 0 0 1px var(--ring);color:var(--soft);font-size:13px;text-decoration:none}
  .nlsearch:hover{color:var(--ink)}
  .nlsearch kbd{margin-left:auto;font-family:"Geist Mono",ui-monospace,monospace;font-size:10.5px;color:var(--soft)}
  :root[data-look="dark"] .prail .hl{font-size:10.5px;font-weight:500;letter-spacing:.14em;color:var(--soft);padding:14px 10px 6px;margin-top:0!important}
  :root[data-look="dark"] .prail .pp{border-radius:10px;padding:7px 10px;font-size:13.5px;color:var(--ink3);gap:10px}
  :root[data-look="dark"] .prail .pp.on{background:#221f33;box-shadow:none;color:var(--ink);font-weight:500}
  :root[data-look="dark"] .prail .pp .n{font-size:12px;color:var(--soft)}
  :root[data-look="dark"] .prail .pp .n.urg{color:var(--urg)}
  :root[data-look="dark"] .prail .pp.all{margin-top:2px;font-size:12.5px}
  :root[data-look="dark"] .prail .rseats{gap:4px}
  :root[data-look="dark"] .prail .rseats li{padding:5px 10px;gap:0 10px}
  :root[data-look="dark"] .prail .rseats li>div{display:flex;flex-direction:column-reverse;gap:0}
  :root[data-look="dark"] .prail .rseats .who{padding:0;font-size:13px;color:var(--ink)}
  :root[data-look="dark"] .prail .rseats .slug.rs{padding:0;background:none;font-size:10.5px;color:var(--soft)}
  :root[data-look="dark"] .prail .rseats .avs{width:24px;height:24px;font-size:9.5px}
  :root[data-look="dark"] .prail .act{padding:8px 10px;margin-top:4px;color:var(--lt);font-size:13px;border-top:0}
  :root[data-look="dark"] .prail>.hl:has(.clawd){margin-top:auto!important;padding-top:22px}
  :root[data-look="dark"] .prail .cc{border-radius:9px}

  :root[data-look="dark"] .wrap.has-prail:not(.home)>aside.rail{position:fixed;top:56px;right:0;bottom:0;width:380px;max-height:none;z-index:9;border-radius:0;transform:translateX(100%);visibility:hidden;transition:transform .3s var(--ease),visibility 0s linear .3s;box-shadow:-30px 0 60px -20px rgba(0,0,0,.85);background:var(--well)}
  :root[data-look="dark"] body.act-open .wrap.has-prail:not(.home)>aside.rail{transform:none;visibility:visible;transition:transform .3s var(--ease)}
}
@media (prefers-reduced-motion:reduce){:root[data-look="dark"] .wrap.has-prail:not(.home)>aside.rail{transition:none}}
