/* ── Site Asset Register ──────────────────────────────────────────────────
   A ledger kept per client. White paper on a cool grey desk, one accent ink
   beside black: it rules the page, labels the client index tabs and carries
   the primary action. States are stamps set on the row, not badges floating
   in a card. Committed to light: read in a lit office, glanced at between
   tickets, often screen-shared. The accent is a variable so a deployment can
   re-ink the register without touching the layout. */
:root {
  color-scheme: light;
  --desk:#E6EAF0; --paper:#FFFFFF; --paper-2:#F4F6F9; --paper-3:#EBEFF4;
  --ink:#152238; --ink-2:#44526A; --ink-3:#5A677E;
  --rule:#D3DAE4; --rule-2:#B9C3D1;
  --accent:#0F6E5E; --accent-dk:#0A4B40; --accent-wash:#E4F0ED; --accent-line:#8FBFB4;
  --red:#A63A22; --red-wash:#FBEAE5;
  --amber:#7A4E00; --amber-wash:#FBF0D3;
  --r:3px;
  --sheet:1760px; /* page width; masthead, tabs and sheet share its edge */
  --ease:cubic-bezier(.16,1,.3,1);
  --shadow:0 1px 0 rgba(21,34,56,.06), 0 6px 18px -8px rgba(21,34,56,.18), 0 18px 40px -22px rgba(21,34,56,.16);
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
}
::selection { background:var(--accent-wash); color:var(--accent-dk); }
* { box-sizing:border-box; }
html { background:var(--desk); }
body {
  margin:0; background:var(--desk); color:var(--ink); font-size:14.5px; line-height:1.5;
  font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-variant-numeric:tabular-nums; -webkit-font-smoothing:antialiased;
}
svg.i { width:16px; height:16px; flex:none; stroke:currentColor; fill:none;
        stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
svg.sprite { position:absolute; width:0; height:0; }
.sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
[hidden] { display:none !important; }
a { color:var(--accent); }
code, .mono { font-family:var(--mono); }

/* ── masthead: the register's cover band ── */
.top { position:sticky; top:0; z-index:20; background:var(--accent); color:#fff;
       display:flex; align-items:center; gap:14px; padding:0 max(28px, calc((100% - var(--sheet) + 56px) / 2)); height:52px;
       box-shadow:0 1px 0 var(--accent-dk); }
.brand { display:flex; align-items:center; gap:10px; font-size:15px; font-weight:600; letter-spacing:-.005em; white-space:nowrap; }
.brand .m { color:#fff; width:20px; height:20px; }
.env { font-size:10.5px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:#fff;
       border:1px solid rgba(255,255,255,.6); padding:3px 8px; border-radius:2px; white-space:nowrap; }
.sp { flex:1 1 auto; }
.who { font-size:13px; color:rgba(255,255,255,.92); max-width:32ch; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.top .q { color:#fff; }
.top .q:hover:not(:disabled) { background:rgba(255,255,255,.14); border-color:rgba(255,255,255,.35); color:#fff; }
.top .q:focus-visible { outline-color:#fff; box-shadow:none; }

/* ── section tabs under the masthead: the register's index ── */
.nav { background:var(--paper); border-bottom:1px solid var(--rule-2); position:sticky; top:52px; z-index:19; }
.nav-in { max-width:var(--sheet); margin:0 auto; padding:0 16px; display:flex; gap:2px; overflow-x:auto; scrollbar-width:none; }
.nav-in::-webkit-scrollbar { display:none; }
.nav a { display:inline-flex; align-items:center; gap:7px; padding:11px 12px 9px; font-size:13px; font-weight:600;
         color:var(--ink-2); text-decoration:none; border-bottom:2px solid transparent; white-space:nowrap; letter-spacing:.01em; }
.nav a:hover { color:var(--ink); background:var(--paper-2); }
.nav a[aria-current="page"] { color:var(--accent); border-bottom-color:var(--accent); }
.nav a:focus-visible { outline:2px solid var(--accent); outline-offset:-2px; }
.nav .cnt { font-size:10.5px; font-weight:700; letter-spacing:.06em; color:var(--amber); border:1.5px solid currentColor; border-radius:2px; padding:1px 6px; line-height:1.3; }

/* ── controls: one vocabulary everywhere ── */
button, select, input, textarea {
  font:inherit; font-size:13.5px; color:var(--ink); background:var(--paper);
  border:1px solid var(--rule-2); padding:6px 11px; border-radius:var(--r); line-height:1.3;
  transition:background .15s, border-color .15s, color .15s, box-shadow .15s; }
input::placeholder, textarea::placeholder { color:var(--ink-3); }
input[type=number] { width:8ch; }
button { cursor:pointer; display:inline-flex; align-items:center; gap:6px; vertical-align:middle; }
button, select, input:not([type=checkbox]):not([type=radio]):not([type=file]) { min-height:32px; }
button:hover:not(:disabled) { border-color:var(--ink-3); background:var(--paper-2); }
button:active:not(:disabled) { background:var(--paper-3); }
button:disabled { opacity:.5; cursor:not-allowed; }
button:focus-visible, select:focus-visible, input:focus-visible, textarea:focus-visible, a:focus-visible, summary:focus-visible {
  outline:2px solid var(--accent); outline-offset:2px; }
tr.row:focus-visible { outline:2px solid var(--accent); outline-offset:-2px; }
.p { background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; }
.p:hover:not(:disabled) { background:var(--accent-dk); border-color:var(--accent-dk); color:#fff; }
.d { color:var(--red); }
.d:hover:not(:disabled) { background:var(--red-wash); border-color:var(--red); }
.q { background:transparent; border-color:transparent; color:var(--ink-2); padding:6px 8px; }
.q:hover:not(:disabled) { background:var(--paper-3); border-color:var(--rule); color:var(--ink); }
.ico { padding:6px 8px; min-width:32px; justify-content:center; }
.lnk { min-height:0; background:none; border:0; padding:0; color:var(--accent); text-decoration:underline; cursor:pointer; font-size:inherit; }
.lnk:hover:not(:disabled) { background:none; border:0; color:var(--accent-dk); }

/* ── the sheet ── */
main { max-width:var(--sheet); margin:0 auto; padding:24px 28px 72px; }
h1.head { font-size:24px; font-weight:600; letter-spacing:-.015em; line-height:1.2; margin:0; }
h1.head .n { color:var(--accent); }
.headline { display:flex; align-items:baseline; gap:6px 16px; flex-wrap:wrap;
            padding-bottom:14px; margin-bottom:20px; border-bottom:3px double var(--accent); }
.headline .tot { font-size:13px; color:var(--ink-2); margin-left:auto; white-space:nowrap; }
.headline .sub { flex:0 0 100%; font-size:13.5px; color:var(--ink-2); margin:0; padding-right:clamp(0px, calc(100% - 80ch), 60%); }
.sec { margin-bottom:28px; }
.sec-h { display:flex; align-items:baseline; gap:12px; margin:0 0 10px;
         font-size:12px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); }
.sec-h .rule { flex:1 1 auto; height:0; border-bottom:1px solid var(--rule-2); align-self:center; }
.sec-h .plain { text-transform:none; letter-spacing:0; font-weight:400; color:var(--ink-2); font-size:13px; }
.sec-h a { text-transform:none; letter-spacing:0; font-weight:600; font-size:13px; }

/* ── slips: working sheets side by side ── */
.slips { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.inst { background:var(--paper); border:1px solid var(--rule-2); border-radius:var(--r); box-shadow:var(--shadow);
        display:flex; flex-direction:column; min-width:0; }
.inst-h { display:flex; align-items:center; gap:10px; padding:12px 14px; flex-wrap:wrap;
          border-bottom:1px solid var(--rule); }
.inst-h .t { font-weight:700; font-size:12px; letter-spacing:.08em; text-transform:uppercase; color:var(--accent);
             display:inline-flex; align-items:center; gap:8px; min-height:32px; }
.inst-h .t svg { width:15px; height:15px; }
.inst-h .s { font-size:13px; color:var(--ink-2); flex:1 1 100%; order:9; margin-top:-2px; }
.inst-b { padding:14px; background:var(--paper-2); border-top:1px solid var(--rule); }
.inst-b:first-child { border-top:0; }
.inst-b + .inst-b { border-top:1px solid var(--rule); }
.url { font-family:var(--mono); font-size:11.5px; line-height:1.6;
       word-break:break-all; background:var(--paper); border:1px solid var(--rule); border-radius:var(--r);
       padding:9px 11px; margin-bottom:10px; color:var(--ink); }
.url.big { font-size:12.5px; }
.mrow { display:flex; align-items:center; gap:12px; flex-wrap:wrap; font-size:12.5px; color:var(--ink-2); }
.mrow + .mrow { margin-top:10px; }
.hash { font-family:var(--mono); font-size:11px; color:var(--ink-3); word-break:break-all; }
.caution, .hint { display:flex; gap:9px; align-items:flex-start; margin-top:12px; font-size:12.5px; line-height:1.5;
                  border-radius:var(--r); padding:9px 11px; }
.caution { color:var(--amber); background:var(--amber-wash); }
.caution svg { color:var(--amber); margin-top:1px; }
.hint { color:var(--accent-dk); background:var(--accent-wash); }
.hint svg { color:var(--accent); margin-top:1px; }
.steps { margin:0; padding-left:1.35em; font-size:13px; line-height:1.65; color:var(--ink-2); }
.steps li { margin-bottom:5px; }
.steps li:last-child { margin-bottom:0; }
.steps b { color:var(--ink); font-weight:600; }
.steps code { font-size:12px; color:var(--ink); background:var(--paper); border:1px solid var(--rule); border-radius:2px; padding:0 4px; word-break:break-all; }
.assist { margin:0; }
.assist h4 { margin:12px 0 4px; font-size:12px; font-weight:700; color:var(--ink); letter-spacing:.01em; }
.assist h4:first-child { margin-top:0; }

/* ── stamps: the state language ── */
.tag, .upd {
  display:inline-flex; align-items:center; gap:4px; font-size:10.5px; font-weight:700; letter-spacing:.1em;
  text-transform:uppercase; line-height:1; padding:4px 7px; border-radius:2px; white-space:nowrap;
  border:1.5px solid currentColor; box-shadow:inset 0 0 0 1.5px var(--paper), inset 0 0 0 2.5px currentColor;
  background:transparent; }
.tag.ok   { color:var(--accent); }
.tag.bad  { color:var(--red); }
.tag.warn { color:var(--amber); }
.tag.off  { color:var(--ink-3); }
.upd { min-height:0; color:var(--amber); cursor:pointer; padding:3px 7px; font:inherit; font-size:10.5px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; }
.upd svg { width:12px; height:12px; }
.upd:hover:not(:disabled) { background:var(--amber); border-color:var(--amber); color:#fff;
  box-shadow:inset 0 0 0 1.5px var(--amber), inset 0 0 0 2.5px #fff; }
.upd:hover:not(:disabled) svg { color:#fff; }

/* ── awaiting-entry slips ── */
.qlist { display:flex; flex-direction:column; gap:12px; }
.qi { background:var(--paper); border:1px solid var(--rule-2); border-radius:var(--r); box-shadow:var(--shadow);
      padding:14px 16px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; position:relative; }
.qi .t { flex:1 1 260px; min-width:0; order:0; }
.qn { font-size:17px; font-weight:600; letter-spacing:-.01em; display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.qm { font-size:12.5px; color:var(--ink-2); margin-top:3px; }
.qm .k { color:var(--accent-dk); font-weight:600; }
.qid { font-family:var(--mono); font-size:11px; color:var(--ink-3); margin-top:3px; word-break:break-all; }
.qa { display:flex; gap:8px; flex:none; margin-left:auto; order:1; }
.qi .edit { flex:1 1 100%; order:2; border-top:1px solid var(--rule); padding-top:12px; margin-top:2px; }
.qi .cmd { flex:1 1 100%; order:2; }
.qi.link { padding:12px 16px; align-items:center; }
.qi.link .t { font-size:14.5px; }
.qi.link .t b { color:var(--accent); }

/* command block on an approval slip and a job */
.cmd { font-family:var(--mono); font-size:12px; line-height:1.6; white-space:pre-wrap; word-break:break-word;
       background:var(--paper-2); border:1px solid var(--rule); border-radius:var(--r); padding:9px 11px; color:var(--ink); margin:0; }
.cmd .sh { display:block; font-family:inherit; font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); margin-bottom:4px; }
pre.out { font-family:var(--mono); font-size:11.5px; line-height:1.55; white-space:pre-wrap; word-break:break-word; margin:0;
          background:var(--paper); border:1px solid var(--rule); border-radius:var(--r); padding:9px 11px; max-height:360px; overflow:auto; color:var(--ink); }
pre.out.err { color:var(--red); }
pre.out:empty::before { content:"(empty)"; color:var(--ink-3); font-style:italic; }

/* ── the ledger ── */
.bar { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:0 0 10px; }
.bar input[type=search] { flex:1 1 240px; min-width:0; }
.bar select { max-width:220px; }
.bar .plain { font-size:13px; color:var(--ink-2); }
.tw { background:var(--paper); border:1px solid var(--rule-2); border-radius:var(--r); box-shadow:var(--shadow); overflow-x:auto; }
table.ledger { width:100%; border-collapse:collapse; }
.ledger th { text-align:left; font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent);
     padding:10px 14px; border-bottom:3px double var(--accent); white-space:nowrap; background:var(--paper); }
.ledger td { padding:8px 14px; border-bottom:1px solid var(--rule); font-size:14px; vertical-align:middle; }
.ledger th.chev, .ledger td.chev { width:34px; padding-right:0; }
tr.row.x { cursor:pointer; transition:background .15s; }
tr.row.x:hover { background:var(--accent-wash); }
tr.last > td { border-bottom:none; }
tr.grp td { padding:14px 14px 0; border-bottom:none; background:var(--paper); }
tr.grp + tr.row td { border-top:1px solid var(--rule-2); }
.gtab { display:inline-flex; align-items:baseline; gap:10px; background:var(--accent); color:#fff;
        font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase;
        padding:5px 12px 6px; border-radius:var(--r) var(--r) 0 0; }
.gtab .cnt { font-weight:500; letter-spacing:0; text-transform:none; color:rgba(255,255,255,.92); font-size:12px; }
.gtab.none { background:var(--paper-3); color:var(--ink-2); }
.dn { font-weight:600; letter-spacing:-.005em; display:flex; align-items:center; gap:8px; white-space:nowrap; }
td.dev { min-width:200px; }
.did { font-family:var(--mono); font-size:11px; color:var(--ink-3); margin-top:2px; }
.num { white-space:nowrap; }
.dim { color:var(--ink-2); }
.faint { color:var(--ink-3); }
td.act { text-align:right; white-space:nowrap; }
td.act button + button { margin-left:6px; }
.chev-i { transition:transform .2s ease; color:var(--ink-3); }
tr.open .chev-i { transform:rotate(180deg); }
.ver { white-space:nowrap; display:flex; align-items:center; gap:8px; }
.loc { display:inline-block; font-size:12px; color:var(--accent-dk); background:var(--accent-wash);
       border:1px solid var(--accent-line); border-radius:2px; padding:1px 7px; white-space:nowrap; max-width:26ch;
       overflow:hidden; text-overflow:ellipsis; vertical-align:middle; }
.who-cell { max-width:24ch; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
td.trunc { max-width:34ch; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
td.trunc code { font-size:12px; }
.dot { width:8px; height:8px; border-radius:50%; flex:none; background:var(--paper); box-shadow:inset 0 0 0 2px var(--ink-3); }
.dot.on { background:var(--accent); box-shadow:0 0 0 3px var(--accent-wash); }

/* expanded detail */
tr.det > td { padding:0; border-bottom:1px solid var(--rule); background:var(--paper-2); }
.det-in { padding:16px 16px 18px 42px; display:grid; gap:14px 28px; margin:0;
          grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); animation:unfold .42s var(--ease) both; }
@keyframes unfold {
  from { opacity:0; clip-path:inset(0 0 100% 0); transform:translateY(-4px); }
  to   { opacity:1; clip-path:inset(0 0 0 0);    transform:none; }
}
.f { min-width:0; }
.f dt, .lbl { font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); margin-bottom:2px; }
.f dd { margin:0; font-size:13.5px; word-break:break-word; }
.f dd.mono { font-family:var(--mono); font-size:11.5px; color:var(--ink-2); display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.f dd .q { padding:2px 6px; font-size:12px; min-height:0; min-width:0; }
.wide { grid-column:1 / -1; }
.edit { grid-column:1 / -1; display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap;
        padding-top:12px; border-top:1px solid var(--rule); margin-top:4px; }
.edit label { display:flex; flex-direction:column; gap:3px; font-size:10.5px; font-weight:700;
              letter-spacing:.08em; text-transform:uppercase; color:var(--accent); flex:1 1 180px; min-width:0; max-width:320px; }
.edit input, .edit select { min-width:0; font-weight:400; letter-spacing:0; text-transform:none; }
.det-act { display:none; grid-column:1 / -1; gap:8px; padding-top:12px; border-top:1px solid var(--rule); margin-top:2px; flex-wrap:wrap; }
.det-act button { flex:1 1 auto; justify-content:center; }
.det-act button.ico { flex:0 0 auto; }
.jobs-mini { grid-column:1 / -1; border-top:1px solid var(--rule); padding-top:12px; margin-top:4px; }
.jobs-mini table { width:100%; border-collapse:collapse; font-size:13px; }
.jobs-mini td { padding:5px 8px 5px 0; border-bottom:1px solid var(--rule); vertical-align:middle; }
.jobs-mini tr:last-child td { border-bottom:0; }
.jobs-mini td.trunc { max-width:40ch; }
.jobs-mini .more { margin-top:6px; font-size:12.5px; }

/* forms on a sheet (tokens, clients) */
.form { display:flex; gap:10px; align-items:flex-end; flex-wrap:wrap; }
.form label { display:flex; flex-direction:column; gap:3px; font-size:10.5px; font-weight:700;
              letter-spacing:.08em; text-transform:uppercase; color:var(--accent); flex:1 1 160px; min-width:0; max-width:320px; }
.form label.n { flex:0 1 110px; }
.form input, .form select { min-width:0; font-weight:400; letter-spacing:0; text-transform:none; width:100%; }
.form .act { flex:0 0 auto; display:flex; gap:8px; }
.modes { margin:10px 0 0; padding:0; list-style:none; font-size:12.5px; color:var(--ink-2); display:grid; gap:4px; }
.modes b { color:var(--ink); font-weight:600; }
.modes code { font-size:11.5px; color:var(--accent-dk); }

/* notes, empty, loading */
.note { display:flex; gap:9px; align-items:flex-start; padding:10px 13px; border-radius:var(--r);
        font-size:13.5px; margin-bottom:18px; border:1px solid var(--rule-2); background:var(--paper); }
.note.ok { border-color:var(--accent-line); background:var(--accent-wash); color:var(--accent-dk); }
.note.bad { border-color:var(--red); background:var(--red-wash); color:var(--red); }
.note svg { margin-top:2px; }
.note .sp { flex:1; }
.note .q { padding:2px 6px; color:inherit; min-height:0; min-width:0; }
.empty { text-align:center; padding:56px 24px; }
.empty svg { width:34px; height:34px; color:var(--accent); stroke-width:1.3; margin-bottom:12px; }
.empty h3 { margin:0 0 6px; font-size:16px; font-weight:600; }
.empty p { margin:0 auto; max-width:46ch; font-size:13.5px; color:var(--ink-2); line-height:1.6; }
.empty.small { padding:28px 20px; }
.skel { padding:16px; }
.sk { height:12px; border-radius:4px; background:var(--rule); animation:pulse 1.5s ease-in-out infinite; margin:14px 0; }
.sk.w72 { width:72% } .sk.w58 { width:58% } .sk.w64 { width:64% } .sk.w50 { width:50% }
@keyframes pulse { 0%,100% { opacity:.45 } 50% { opacity:1 } }
.foot { display:flex; gap:12px; align-items:center; justify-content:center; padding:12px; font-size:13px; color:var(--ink-2); }

/* sign-in gate: the register's cover */
.gate { max-width:420px; margin:14vh auto 0; text-align:center; padding:36px 28px 32px; background:var(--paper);
        border:1px solid var(--rule-2); box-shadow:var(--shadow); border-top:6px solid var(--accent); }
.gate .m { color:var(--accent); width:40px; height:40px; margin-bottom:14px; }
.gate h1 { font-size:20px; font-weight:600; letter-spacing:-.01em; margin:0 0 8px; }
.gate p { font-size:14px; color:var(--ink-2); margin:0 0 22px; line-height:1.6; }
.gate .note { text-align:left; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; }
}
@media (max-width:1119px) { .ledger th.opt, .ledger td.opt { display:none } }
@media (min-width:1500px) { td.trunc { max-width:64ch } .jobs-mini td.trunc { max-width:80ch } }
@media (max-width:900px)  { .slips { grid-template-columns:1fr } }

/* ── phones: the ledger folds into cards, actions grow to thumb size ── */
@media (max-width:760px) {
  .top { padding:0 14px; height:48px; gap:10px } .nav { top:48px; position:sticky } .nav-in { padding:0 4px } main { padding:20px 16px 64px } .who { display:none }
  /* the section tabs scroll sideways; a fade at the edge says so */
  .nav { position:sticky; }
  .nav::after { content:""; position:absolute; top:0; right:0; bottom:1px; width:36px; pointer-events:none;
                background:linear-gradient(to right, rgba(255,255,255,0), var(--paper) 75%); }
  .brand { flex:1 1 auto; min-width:0 } .brand b { min-width:0; overflow:hidden; text-overflow:ellipsis }
  .env { flex:0 1 auto; min-width:10ch; overflow:hidden; text-overflow:ellipsis }
  h1.head { font-size:21px }
  .headline .tot { white-space:normal; margin-left:0; flex:0 0 100% }
  .headline .sub { padding-right:0 }
  .inst-h .sp { display:none } .inst-h .t { flex:1 1 100% }
  .inst-h > select, .inst-h > button { flex:1 1 auto; justify-content:center }
  .qa { width:100%; order:3 } .qa button { min-height:42px } .qa button:not(.ico) { flex:1 1 auto; justify-content:center } .qa button.ico { min-width:42px }
  .edit label, .form label, .form label.n { flex:1 1 100%; max-width:none } .edit button, .form .act { width:100% } .form .act button, .edit button { flex:1 1 auto; justify-content:center; min-height:42px }
  .mrow button { min-height:42px }
  select, input:not([type=checkbox]):not([type=radio]):not([type=file]), textarea { font-size:16px }
  select, input:not([type=checkbox]):not([type=radio]):not([type=file]) { min-height:42px }
  .bar select { max-width:none; flex:1 1 140px }

  .tw { overflow-x:hidden }
  table.ledger, .ledger tbody, .ledger tr, .ledger td { display:block }
  .ledger thead { display:none }
  .ledger tr.row { padding:12px 14px; border-bottom:1px solid var(--rule) }
  .ledger tr.row.x:focus-visible { outline-offset:-3px }
  .ledger td { padding:3px 0; border:0; font-size:13.5px; display:flex; gap:10px; align-items:center; min-width:0 }
  .ledger td.chev, .ledger td.act, .ledger th.act { display:none }
  .ledger td.dev { display:block; padding-bottom:6px; min-width:0 }
  .dn { white-space:normal; overflow-wrap:anywhere }
  .did, .f dd.mono { word-break:break-all }
  .ledger td[data-l]::before { content:attr(data-l); flex:0 0 9ch; font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent) }
  .ledger td.trunc { white-space:normal; overflow:visible; max-width:none }
  .ledger td.trunc code { white-space:pre-wrap; word-break:break-word }
  .who-cell { max-width:none; white-space:normal }
  .ledger tr.grp td { padding:14px 14px 0 }
  .ledger tr.grp + tr.row { border-top:1px solid var(--rule-2) }
  tr.det > td { padding:0 }
  .det-in { padding:14px 14px 16px }
  .det-act { display:flex } .det-act button { min-height:42px } .det-act button.ico { min-width:42px }
  .jobs-mini table, .jobs-mini tbody, .jobs-mini tr { display:block }
  .jobs-mini tr { padding:6px 0; border-bottom:1px solid var(--rule) }
  .jobs-mini td { display:inline-block; border:0; padding:2px 8px 2px 0 }
}

/* ── chat (ADR-015) ── */
main:has(.chat) { padding-bottom:28px; }
.chat { display:grid; grid-template-columns:250px minmax(0,1fr); gap:16px; height:calc(100vh - 148px); height:calc(100dvh - 148px); min-height:480px; }
.chat .threads { display:flex; flex-direction:column; gap:10px; min-height:0; }
.chat .threads > .p { justify-content:center; }
.chat .tlist { flex:1 1 auto; overflow:auto; background:var(--paper); border:1px solid var(--rule); border-radius:var(--r); }
.chat .ti { position:relative; display:flex; flex-direction:column; gap:1px; padding:9px 34px 9px 12px; border-bottom:1px solid var(--rule); cursor:pointer; }
.chat .ti:hover { background:var(--paper-2); }
.chat .ti.on { background:var(--accent-wash); box-shadow:inset 3px 0 0 var(--accent); }
.chat .ti .tt { font-weight:600; font-size:13.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.chat .ti .dim { font-size:12px; }
.chat .ti .del { position:absolute; right:4px; top:8px; opacity:0; }
.chat .ti:hover .del, .chat .ti:focus-within .del { opacity:1; }
.chat .pad { padding:12px; margin:0; }
.chat .convwrap { display:flex; flex-direction:column; min-height:0; background:var(--paper); border:1px solid var(--rule); border-radius:var(--r); box-shadow:var(--shadow); }
.chat .conv { flex:1 1 auto; overflow:auto; padding:20px 22px; display:flex; flex-direction:column; gap:12px; }
.chat .msg { display:flex; }
.chat .msg.me { justify-content:flex-end; }
.chat .bubble { max-width:78%; background:var(--accent); color:#fff; padding:9px 13px; border-radius:12px 12px 2px 12px; white-space:normal; overflow-wrap:anywhere; }
.chat .bubble .att { background:rgba(255,255,255,.18); color:#fff; margin:6px 6px 0 0; }
.chat .answer { max-width:100%; overflow-wrap:break-word; }
.chat .notice { align-self:center; display:flex; gap:6px; align-items:center; font-size:12.5px; color:var(--ink-2); background:var(--paper-2); border:1px solid var(--rule); border-radius:999px; padding:4px 12px; max-width:90%; }
.chat .notice.bad { color:var(--red); background:var(--red-wash); border-color:var(--red); }
.chat .work { border-left:1px solid var(--rule-2); padding:2px 0 2px 12px; color:var(--ink-2); font-size:13px; }
.chat .work > summary { cursor:pointer; color:var(--ink-3); font-weight:600; font-size:12px; letter-spacing:.04em; text-transform:uppercase; }
.chat .wnote { margin:6px 0; }
.chat .tool { margin:4px 0; }
.chat .tool > summary { list-style:none; cursor:pointer; display:flex; gap:7px; align-items:center; padding:3px 0; }
.chat .tool > summary::-webkit-details-marker { display:none; }
.chat .tool.t-ok > summary svg { color:var(--accent); }
.chat .tool.t-bad > summary svg { color:var(--red); }
.chat .tool.t-run > summary svg { color:var(--amber); animation:spin 1.2s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce) { .chat .tool.t-run > summary svg { animation:none; } }
.chat pre { margin:6px 0; padding:8px 10px; background:var(--paper-2); border:1px solid var(--rule); border-radius:var(--r); font:12.5px/1.45 var(--mono); white-space:pre-wrap; overflow-wrap:anywhere; max-height:320px; overflow:auto; }
.chat pre.cmd { background:#0F1A2B; color:#E6EDF6; border-color:#0F1A2B; }
.chat .appr { border:1px solid var(--amber); background:var(--amber-wash); border-radius:var(--r); padding:12px 14px; }
.chat .appr-approved { border-color:var(--accent-line); background:var(--accent-wash); }
.chat .appr-denied { border-color:var(--rule-2); background:var(--paper-2); }
.chat .appr-h { display:flex; gap:2px 8px; align-items:center; flex-wrap:wrap; }
.nw { white-space:nowrap; }
.chat .appr-pending .appr-h svg { color:var(--amber); }
.chat .appr-approved .appr-h svg { color:var(--accent); }
.chat .appr-r { margin:4px 0 8px; color:var(--ink-2); font-size:13px; }
.chat .appr-a { display:flex; gap:8px; }
.chat .typing { display:flex; gap:4px; padding:6px 2px; }
.chat .typing span { width:6px; height:6px; border-radius:50%; background:var(--ink-3); animation:blink 1.2s infinite; }
.chat .typing span:nth-child(2) { animation-delay:.2s; } .chat .typing span:nth-child(3) { animation-delay:.4s; }
@keyframes blink { 0%,80%,100% { opacity:.25; } 40% { opacity:1; } }
.chat .composer { border-top:1px solid var(--rule); padding:10px 12px 8px; display:flex; flex-direction:column; gap:6px; }
.chat .composer .row { display:flex; gap:8px; align-items:flex-end; }
.chat .composer .row > button { min-height:40px; }
.chat .composer .attach { display:inline-flex; align-items:center; justify-content:center; width:40px; height:40px; flex:none; border-radius:var(--r); border:1px solid transparent; }
.chat .composer textarea { flex:1 1 auto; resize:vertical; min-height:40px; max-height:240px; field-sizing:content; }
.chat .composer .attach { cursor:pointer; }
.chat .composer .attach:focus-within { outline:2px solid var(--accent); outline-offset:2px; }
.chat .composer .hint { margin:0; padding:0 0 0 48px; background:none; color:var(--ink-3); font-size:12px; }
.chat .atts:empty { display:none; }
.chat .att { display:inline-flex; gap:4px; align-items:center; font-size:12.5px; background:var(--paper-3); border-radius:999px; padding:2px 4px 2px 9px; margin-right:6px; }
.chat .att svg { width:13px; height:13px; }
.chat .att .q { min-height:0; min-width:0; padding:3px; }
@media (max-width:760px) { .chat { grid-template-columns:1fr; height:auto; } .chat .tlist { max-height:180px; } .chat .conv { min-height:60vh; } }

/* ── markdown the assistant writes ── */
.md p { margin:6px 0; }
.md .md-h { margin:14px 0 4px; font-size:14px; }
.md ul, .md ol { margin:6px 0; padding-left:22px; }
.md code { background:var(--paper-3); padding:1px 4px; border-radius:2px; font-size:12.5px; }
.md blockquote { margin:6px 0; padding:4px 12px; border-left:3px solid var(--rule-2); color:var(--ink-2); }
.md .md-tw { overflow-x:auto; margin:8px 0; }
.md .md-t { border-collapse:collapse; font-size:13px; }
.md .md-t th, .md .md-t td { border:1px solid var(--rule); padding:5px 9px; text-align:left; vertical-align:top; }
.md .md-t th { background:var(--paper-2); font-weight:600; }
.md .st { white-space:nowrap; font-weight:700; font-size:11.5px; letter-spacing:.05em; text-transform:uppercase; }
.md .st-ok { color:var(--accent); } .md .st-warn { color:var(--amber); } .md .st-bad { color:var(--red); }
.md .c-red { color:var(--red); font-weight:600; } .md .c-amber { color:var(--amber); font-weight:600; } .md .c-green { color:var(--accent); font-weight:600; }
.md .md-call { display:flex; gap:9px; padding:9px 12px; margin:8px 0; border-radius:var(--r); border:1px solid var(--rule); background:var(--paper-2); }
.md .md-call p { margin:2px 0 0; }
.md .md-warning { border-color:var(--amber); background:var(--amber-wash); } .md .md-warning > svg { color:var(--amber); }
.md .md-note > svg, .md .md-tip > svg { color:var(--accent); }
.md .md-code { position:relative; }
.md .md-code .lang { position:absolute; top:6px; right:36px; font-size:11px; color:var(--ink-3); }
.md .md-code > button { position:absolute; top:2px; right:2px; }
.md .md-opts { display:flex; flex-direction:column; align-items:flex-start; gap:6px; margin:10px 0 2px; }
.md .opt { text-align:left; border-color:var(--accent-line); color:var(--accent-dk); background:var(--accent-wash); }
.md .opt:hover:not(:disabled) { background:var(--accent); border-color:var(--accent); color:#fff; }

/* ── users ── */
.uform { display:flex; flex-direction:column; gap:14px; }
.uform .form label { max-width:260px; }
.access { margin:0; padding:0; border:0; min-width:0; display:flex; flex-direction:column; gap:6px; }
.access legend { padding:0; margin-bottom:6px; font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); }
.access .opt-r { display:flex; align-items:center; gap:8px; font-size:13.5px; cursor:pointer; width:fit-content; }
.access .picks { display:flex; flex-wrap:wrap; gap:6px 8px; padding:4px 0 0 24px; }
.access .pick { display:inline-flex; align-items:center; gap:7px; font-size:13px; padding:5px 10px; min-height:32px;
                background:var(--paper); border:1px solid var(--rule-2); border-radius:var(--r); cursor:pointer; }
.access .pick:has(input:checked) { border-color:var(--accent-line); background:var(--accent-wash); color:var(--accent-dk); }
.access .pick:has(input:disabled) { opacity:.55; cursor:not-allowed; }
.access.off .opt-r { opacity:.55; cursor:not-allowed; }
.access input[type=radio], .access input[type=checkbox] { accent-color:var(--accent); width:16px; height:16px; margin:0; }
.uact { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.uact .dim { font-size:12.5px; }
.secret { border-color:var(--amber); }
.secret .url { font-size:15px; letter-spacing:.04em; }
.det-in .uform { padding-top:12px; border-top:1px solid var(--rule); }
.det-in .pact { grid-column:1 / -1; }
.self-note { margin:0; padding-top:12px; border-top:1px solid var(--rule); font-size:13px; }
@media (max-width:760px) {
  .uform .form label { max-width:none; }
  .access .picks { padding-left:0; }
  .access .pick { min-height:42px; flex:1 1 140px; }
  .uact button { flex:1 1 100%; justify-content:center; min-height:42px; }
}

/* ── procedures ── */
.pdet { padding:16px 14px 18px; animation:unfold .42s var(--ease) both; }
.pform { display:grid; grid-template-columns:1fr 280px; gap:12px; }
.pform label { display:flex; flex-direction:column; gap:3px; font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); min-width:0; }
.pform input, .pform select, .pform textarea { font-weight:400; letter-spacing:0; text-transform:none; width:100%; min-width:0; }
.pform .wide { grid-column:1 / -1; }
.pform textarea { font-family:var(--mono); font-size:13px; }
.pform .fa { display:flex; gap:8px; }
.pform p { margin:0; font-size:12.5px; }
.pbody { white-space:pre-wrap; overflow-wrap:break-word; font-family:var(--mono); font-size:12.5px; line-height:1.65; background:var(--paper); border:1px solid var(--rule); border-radius:var(--r); padding:11px 13px; margin:0 0 12px; }
.hist { margin:0 0 12px; } .hist summary { cursor:pointer; color:var(--ink-2); font-size:13px; padding:2px 0; }
.hist .pbody { margin-bottom:8px; }
.hv p { margin:8px 0 2px; font-size:12.5px; }
.pact { display:flex; gap:8px; padding-top:12px; border-top:1px solid var(--rule); }
@media (max-width:760px) { .pform { grid-template-columns:1fr; } .pact button { flex:1 1 auto; justify-content:center; min-height:42px; } }
