/* pbxctl staff console.
   The palette and type are the product's, carried over from the architecture
   document: cyan-biased neutrals, deep teal for the control plane, amber for
   anything in flight or agent-side. Density is deliberate -- this is a console,
   not a landing page. */

:root{
  --ground:#F5F7F8;
  --surface:#FFFFFF;
  --surface-2:#EAEFF1;
  --surface-3:#E1E8EB;
  --ink:#101A1F;
  --ink-2:#4E606B;
  --ink-3:#7A8B95;
  --rule:#D3DCE1;
  --rule-2:#E4EAED;
  --accent:#0E6E80;
  --accent-ink:#0E3B44;
  --accent-soft:#DCEDF0;
  --signal:#A85C13;
  --signal-soft:#F6E8D8;
  --ok:#2C6E49;
  --ok-soft:#DCEBE1;
  --fail:#A32C24;
  --fail-soft:#F5E0DE;
  --code-bg:#EEF3F5;
  --log-bg:#101A1F;
  --log-ink:#C7D6DC;
  --focus:#0E6E80;

  --f-display:"Archivo","Helvetica Neue",Arial,sans-serif;
  --f-body:"IBM Plex Sans","Helvetica Neue",Arial,sans-serif;
  --f-mono:"IBM Plex Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace;

  --maxw:1440px;
  --r:3px;
}

@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#0C1417;
    --surface:#121D21;
    --surface-2:#182529;
    --surface-3:#1E2D33;
    --ink:#E3EDF0;
    --ink-2:#9DAFB7;
    --ink-3:#72858E;
    --rule:#26363C;
    --rule-2:#1C2A2F;
    --accent:#5CB8C9;
    --accent-ink:#BFE4EC;
    --accent-soft:#123037;
    --signal:#D9A05B;
    --signal-soft:#2E2317;
    --ok:#63B98A;
    --ok-soft:#16291F;
    --fail:#E0736A;
    --fail-soft:#2C1A18;
    --code-bg:#162226;
    --log-bg:#0A1114;
    --log-ink:#BFD2D9;
    --focus:#5CB8C9;
  }
}
:root[data-theme="dark"]{
  --ground:#0C1417;
  --surface:#121D21;
  --surface-2:#182529;
  --surface-3:#1E2D33;
  --ink:#E3EDF0;
  --ink-2:#9DAFB7;
  --ink-3:#72858E;
  --rule:#26363C;
  --rule-2:#1C2A2F;
  --accent:#5CB8C9;
  --accent-ink:#BFE4EC;
  --accent-soft:#123037;
  --signal:#D9A05B;
  --signal-soft:#2E2317;
  --ok:#63B98A;
  --ok-soft:#16291F;
  --fail:#E0736A;
  --fail-soft:#2C1A18;
  --code-bg:#162226;
  --log-bg:#0A1114;
  --log-ink:#BFD2D9;
  --focus:#5CB8C9;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--ground);
  color:var(--ink);
  font-family:var(--f-body);
  font-size:15px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--accent)}
a:hover{text-decoration-thickness:2px}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.mono{font-family:var(--f-mono)}
.num{font-variant-numeric:tabular-nums}
.sub{color:var(--ink-3);font-size:.82em}
.muted{color:var(--ink-2)}
.warn{color:var(--signal)}
.ok{color:var(--ok)}
.fail{color:var(--fail)}
.break{word-break:break-all}
.hint{color:var(--ink-3);font-weight:400;font-size:.78rem}
.fine{color:var(--ink-3);font-size:.78rem;margin:.6rem 0 0}
code,.code{font-family:var(--f-mono);background:var(--code-bg);padding:.08em .34em;border-radius:2px}

.skip{position:absolute;left:-9999px;top:0;background:var(--surface);padding:.6rem 1rem;z-index:20}
.skip:focus{left:.5rem;top:.5rem}

/* -- top bar ------------------------------------------------------------ */
.bar{background:var(--surface);border-bottom:1px solid var(--rule);position:sticky;top:0;z-index:10}
.bar-in{
  max-width:var(--maxw);margin:0 auto;padding:0 1rem;
  display:flex;align-items:center;gap:1.2rem;min-height:52px;flex-wrap:wrap;
}
.brand{display:flex;align-items:baseline;gap:.45rem;text-decoration:none;color:var(--ink)}
.brand-mark{
  width:11px;height:11px;border:2px solid var(--accent);border-radius:1px;
  display:inline-block;align-self:center;position:relative;
}
.brand-mark::after{content:"";position:absolute;inset:2px;background:var(--signal)}
.brand-mark.big{width:22px;height:22px;border-width:3px}
.brand-name{font-family:var(--f-display);font-weight:700;letter-spacing:-.02em;font-size:1.05rem}
.brand-sub{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}
.nav{display:flex;gap:.1rem;flex-wrap:wrap;margin-right:auto}
.nav a{
  color:var(--ink-2);text-decoration:none;font-size:.86rem;padding:.35rem .55rem;
  border-radius:var(--r);border-bottom:2px solid transparent;
}
.nav a:hover{color:var(--ink);background:var(--surface-2)}
.nav a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}
.bar-right{display:flex;align-items:center;gap:.5rem}
.who{position:relative;font-size:.82rem}
.who summary{
  cursor:pointer;list-style:none;padding:.3rem .55rem;border:1px solid var(--rule);
  border-radius:var(--r);display:flex;gap:.4rem;align-items:center;
}
.who summary::-webkit-details-marker{display:none}
.who-role{font-family:var(--f-mono);font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;color:var(--accent)}
.who-menu{
  position:absolute;right:0;top:calc(100% + .3rem);background:var(--surface);
  border:1px solid var(--rule);padding:.7rem;min-width:220px;z-index:12;
  box-shadow:0 8px 24px rgba(16,26,31,.14);
}
.who-email{margin:0 0 .5rem;font-size:.76rem;color:var(--ink-2);word-break:break-all}

/* -- shell -------------------------------------------------------------- */
.shell{max-width:var(--maxw);margin:0 auto;padding:1.2rem 1rem 3rem;display:flex;flex-direction:column;gap:1.1rem}
.shell-bare{padding:0;max-width:none}
.foot{
  max-width:var(--maxw);margin:0 auto;padding:1rem;border-top:1px solid var(--rule);
  display:flex;gap:1.4rem;flex-wrap:wrap;font-size:.76rem;color:var(--ink-3);
}
.flash{
  background:var(--accent-soft);color:var(--accent-ink);border-bottom:1px solid var(--accent);
  padding:.55rem 1rem;font-size:.86rem;
}

.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.page-h{font-family:var(--f-display);font-weight:700;font-size:1.5rem;letter-spacing:-.018em;margin:0}
.page-sub{margin:.25rem 0 0;color:var(--ink-2);font-size:.86rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.crumb{margin:0 0 .2rem;font-size:.76rem;color:var(--ink-3)}
.sec-h{
  font-family:var(--f-display);font-weight:600;font-size:.98rem;margin:0;letter-spacing:-.01em;
}
.status{color:var(--fail);font-size:1.1rem;margin-right:.4rem}

/* -- panels and tables --------------------------------------------------- */
.panel{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r)}
.panel > .panel-head,.panel > h2,.panel > .sec-h{padding:.7rem .9rem}
.panel-head{
  display:flex;justify-content:space-between;align-items:baseline;gap:1rem;flex-wrap:wrap;
  border-bottom:1px solid var(--rule-2);
}
.panel-note{margin:0;font-size:.78rem;color:var(--ink-3);max-width:70ch}
.panel.narrow{max-width:60ch;padding:1.2rem}
.note-panel{padding:.9rem}
.note-panel p{margin:0 0 .8rem;font-size:.88rem;color:var(--ink-2);max-width:70ch}

.tablewrap{overflow-x:auto}
table.grid{border-collapse:collapse;width:100%;font-size:.83rem}
.grid th,.grid td{text-align:left;padding:.45rem .7rem;border-bottom:1px solid var(--rule-2);vertical-align:top}
.grid thead th{
  font-family:var(--f-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ink-3);font-weight:500;background:var(--surface-2);white-space:nowrap;
  border-bottom:1px solid var(--rule);position:sticky;top:0;
}
.grid tbody tr:hover{background:var(--surface-2)}
.grid tr.empty td{color:var(--ink-3);padding:1.2rem .7rem}
.grid td .meter{margin-top:.2rem}
.row{border-left:3px solid transparent}
.row.is-run{border-left-color:var(--signal)}
.row.is-ok{border-left-color:var(--ok)}
.row.is-fail{border-left-color:var(--fail)}
.row.is-wait{border-left-color:var(--rule)}
.row.is-off{border-left-color:var(--ink-3)}
.c-id a{text-decoration:none}
.c-client .client{display:block}
.kv{margin-right:.5rem;white-space:nowrap}

/* -- pills, tags -------------------------------------------------------- */
.pill{
  display:inline-flex;align-items:center;gap:.3rem;
  font-family:var(--f-mono);font-size:.66rem;letter-spacing:.05em;
  padding:.08rem .4rem;border:1px solid currentColor;border-radius:2px;white-space:nowrap;
}
.pill::before{content:"";width:5px;height:5px;background:currentColor;border-radius:50%}
.pill.big{font-size:.78rem;padding:.2rem .55rem}
.pill.small{font-size:.6rem;margin-left:.35rem}
.pill.is-ok{color:var(--ok)}
.pill.is-fail{color:var(--fail)}
/* In-flight pills are square rather than round, so state is legible without
   relying on colour alone. */
.pill.is-run{color:var(--signal)}
.pill.is-run::before{border-radius:0}
.pill.is-wait{color:var(--ink-3)}
.pill.is-wait::before{border-radius:0;transform:rotate(45deg)}
.pill.is-skip{color:var(--ink-3)}
.pill.is-skip::before{background:none;border:1px solid currentColor;border-radius:0}
.pill.is-off{color:var(--ink-3)}
.pill.is-off::before{background:none;border:1px solid currentColor}
.tag{
  font-size:.7rem;padding:.08rem .38rem;border-radius:2px;white-space:nowrap;
  background:var(--surface-2);color:var(--ink-2);border:1px solid var(--rule);
}
.tag.t-managed{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent)}

/* -- meters and progress ------------------------------------------------- */
.prog{height:4px;background:var(--surface-3);border-radius:2px;overflow:hidden;min-width:90px}
.prog.wide{width:220px;height:6px}
.prog-bar{height:100%;background:var(--accent);transition:width .3s ease}
.prog-text{font-size:.72rem;color:var(--ink-3);display:block;margin-top:.2rem}
.meter{height:4px;background:var(--surface-3);border-radius:2px;overflow:hidden}
.meter.small{width:76px}
.meter-fill{height:100%;background:var(--signal)}

/* -- stats -------------------------------------------------------------- */
.stats{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1px;
  background:var(--rule);border:1px solid var(--rule);border-radius:var(--r);overflow:hidden;
}
.stat{background:var(--surface);padding:.55rem .8rem;display:flex;flex-direction:column;gap:.1rem}
.stat dt{
  font-family:var(--f-mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);
}
.stat dd{margin:0;font-family:var(--f-display);font-size:1.4rem;font-weight:700;line-height:1.1}
.stat.is-ok dd{color:var(--ok)}
.stat.is-fail dd{color:var(--fail)}

/* -- fleet strip -------------------------------------------------------- */
.fleet-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.6rem}
.fnode{
  background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--ink-3);
  border-radius:var(--r);padding:.55rem .7rem;
}
.fnode.is-ok{border-left-color:var(--ok)}
.fnode.is-fail{border-left-color:var(--fail)}
.fnode header{display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.fnode-name{font-weight:500;font-size:.86rem}
.fnode-facts{display:flex;gap:.9rem;margin:.4rem 0 .35rem;flex-wrap:wrap}
.fnode-facts div{display:flex;flex-direction:column}
.fnode-facts dt{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.fnode-facts dd{margin:0;font-size:.82rem}
.fnode-note{margin:.35rem 0 0;font-size:.72rem;color:var(--ink-3)}
.fleet .sec-h{margin-bottom:.5rem}

/* -- buttons and forms --------------------------------------------------- */
.btn{
  display:inline-flex;align-items:center;gap:.35rem;justify-content:center;
  font:inherit;font-size:.82rem;padding:.34rem .7rem;border:1px solid var(--rule);
  background:var(--surface);color:var(--ink);border-radius:var(--r);cursor:pointer;
  text-decoration:none;white-space:nowrap;
}
.btn:hover{background:var(--surface-2);border-color:var(--ink-3)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.btn-primary:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:#fff}
:root[data-theme="dark"] .btn-primary{color:#08171B}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .btn-primary{color:#08171B}
}
.btn-quiet{background:none;border-color:transparent;color:var(--ink-2)}
.btn-quiet:hover{background:var(--surface-2);border-color:var(--rule)}
.btn-danger{color:var(--fail);border-color:var(--fail)}
.btn-danger:hover{background:var(--fail-soft);color:var(--fail)}
.btn-block{width:100%;margin-top:.4rem}
.btn[disabled]{opacity:.5;cursor:not-allowed}

.field{display:flex;flex-direction:column;gap:.22rem;margin-bottom:.7rem}
.field label{font-size:.8rem;font-weight:600;display:flex;flex-direction:column;gap:.22rem}
input[type=text],input[type=email],input[type=password],input[type=search],input[type=url],
input[type=number],select,textarea{
  font:inherit;font-size:.86rem;padding:.36rem .5rem;border:1px solid var(--rule);
  background:var(--surface);color:var(--ink);border-radius:var(--r);width:100%;
}
input.mono,textarea.mono,select.mono{font-family:var(--f-mono);font-size:.82rem}
input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--accent)}
.field.has-error input,.field.has-error select{border-color:var(--fail);background:var(--fail-soft)}
.err{margin:0;color:var(--fail);font-size:.78rem}
.field.check label,.check{flex-direction:row;align-items:center;gap:.4rem;font-weight:400}
.checks{display:flex;flex-wrap:wrap;gap:.4rem 1rem;border:1px solid var(--rule-2);padding:.5rem .7rem;border-radius:var(--r)}
.checks legend{font-size:.8rem;font-weight:600;padding:0 .3rem}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 1rem;padding:.9rem}
.form-grid .field.wide{grid-column:1/-1}
.editor{border-top:1px solid var(--rule-2)}
.editor summary{padding:.55rem .9rem;cursor:pointer;font-size:.84rem;color:var(--accent)}
.editor-form{background:var(--surface-2);border-top:1px solid var(--rule-2)}
.filters{
  display:flex;gap:.7rem;align-items:flex-end;flex-wrap:wrap;background:var(--surface);
  border:1px solid var(--rule);border-radius:var(--r);padding:.7rem .9rem;
}
.filters .field{margin-bottom:0}
.filters .field.inline{min-width:150px}
.inline-filters{border:none;padding:0;background:none}
.pager{display:flex;gap:.5rem;padding:.6rem .9rem;border-top:1px solid var(--rule-2)}
.danger-form{display:flex;gap:.5rem;padding:.7rem .9rem;border-top:1px solid var(--rule-2);align-items:center}
.danger-form input{max-width:320px}

/* -- login -------------------------------------------------------------- */
.login{min-height:100vh;display:grid;grid-template-columns:1fr;align-items:stretch}
@media (min-width:860px){.login{grid-template-columns:1.1fr .9fr}}
.login-side{
  background:var(--surface-2);border-right:1px solid var(--rule);
  padding:3rem 2.4rem;display:flex;flex-direction:column;gap:.7rem;justify-content:center;
}
.login-side h1{font-family:var(--f-display);font-size:2.4rem;margin:.3rem 0 0;letter-spacing:-.025em}
.standfirst{margin:0;color:var(--ink-2);max-width:46ch}
.login-points{margin:1rem 0 0;padding-left:1.1rem;color:var(--ink-2);font-size:.88rem;max-width:46ch}
.login-points li{margin-bottom:.35rem}
.login-form{padding:3rem 2.4rem;display:flex;flex-direction:column;justify-content:center;max-width:420px}
.login-form h2{font-family:var(--f-display);font-size:1.2rem;margin:0 0 1rem}
.alert{
  background:var(--fail-soft);border-left:3px solid var(--fail);color:var(--fail);
  padding:.5rem .7rem;margin:0 0 .9rem;font-size:.84rem;
}

/* -- wizard ------------------------------------------------------------- */
.steps{
  display:flex;list-style:none;margin:0;padding:0;gap:.15rem;flex-wrap:wrap;
  border:1px solid var(--rule);background:var(--surface);border-radius:var(--r);
}
.steps li{
  display:flex;align-items:center;gap:.4rem;padding:.45rem .8rem;font-size:.8rem;color:var(--ink-3);
  border-right:1px solid var(--rule-2);flex:1 1 auto;
}
.steps li:last-child{border-right:none}
.steps-n{
  font-family:var(--f-mono);font-size:.68rem;width:1.25rem;height:1.25rem;flex:none;
  display:grid;place-items:center;border:1px solid currentColor;border-radius:50%;
}
.steps li.is-now{color:var(--accent);font-weight:600;background:var(--accent-soft)}
.steps li.is-done{color:var(--ok)}
.steps li.is-done .steps-n{background:var(--ok);color:var(--surface);border-color:var(--ok)}
.wizard{display:flex;flex-direction:column;gap:1rem}
.wizard fieldset.panel{border:1px solid var(--rule);margin:0;padding:0}
.wizard legend{padding:.7rem .9rem;font-family:var(--f-display);font-weight:600}
.choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.6rem;padding:0 .9rem .9rem}
.choice{
  display:flex;gap:.6rem;padding:.7rem .8rem;border:1px solid var(--rule);border-radius:var(--r);
  cursor:pointer;background:var(--surface);align-items:flex-start;
}
.choice:hover{border-color:var(--accent)}
.choice.is-picked{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.choice.is-blocked{opacity:.55;cursor:not-allowed}
.choice input{margin-top:.25rem;accent-color:var(--accent)}
.choice-body{display:flex;flex-direction:column;gap:.2rem}
.choice-title{font-weight:600;font-size:.9rem;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap}
.choice-blurb{font-size:.82rem;color:var(--ink-2)}
.choice-meta{font-size:.74rem;color:var(--ink-3)}
.choice-meta.warn{color:var(--signal)}
.wizard-nav{display:flex;justify-content:space-between;gap:.6rem}
.planlist{list-style:none;margin:0;padding:.4rem .9rem .9rem;display:flex;flex-direction:column;gap:.1rem}
.planlist li{display:flex;gap:.6rem;align-items:baseline;padding:.25rem 0;border-bottom:1px solid var(--rule-2);font-size:.85rem}
.planlist li:last-child{border-bottom:none}
.planlist-n{font-family:var(--f-mono);color:var(--accent);font-size:.75rem;width:1.4rem}
.planlist-t{flex:1}
.planlist-w{font-family:var(--f-mono);font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3)}
.facts-list{margin:0;padding:.5rem .9rem .9rem}
.facts-list > div{
  display:grid;grid-template-columns:1fr;gap:.05rem;padding:.35rem 0;border-bottom:1px solid var(--rule-2);
}
@media (min-width:560px){.facts-list > div{grid-template-columns:170px minmax(0,1fr);gap:1rem}}
.facts-list > div:last-child{border-bottom:none}
.facts-list dt{
  font-family:var(--f-mono);font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);
}
.facts-list dd{margin:0;font-size:.86rem;word-break:break-word}

/* -- deployment detail --------------------------------------------------- */
.detail{display:flex;flex-direction:column;gap:1rem}
.detail-head{align-items:flex-end}
.detail-state{display:flex;flex-direction:column;align-items:flex-end;gap:.3rem}
.detail-prog{font-size:.78rem;color:var(--ink-2)}
.stream-state{font-family:var(--f-mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.stream-state[data-state="live"]{color:var(--ok)}
.stream-state[data-state="lost"]{color:var(--fail)}
.detail-grid{display:grid;grid-template-columns:1fr;gap:1rem}
@media (min-width:1000px){.detail-grid{grid-template-columns:1.15fr .85fr}}
.alert-panel{border-left:3px solid var(--fail);background:var(--fail-soft);padding:.9rem}
.alert-panel .sec-h{padding:0;color:var(--fail)}
.fail-code{margin:.4rem 0 .3rem}
.fail-code .code{background:var(--surface);color:var(--fail);font-size:.82rem;border:1px solid var(--fail)}
.fail-help{margin:0 0 .6rem;font-size:.88rem;max-width:75ch}
.fail-msg{margin:0 0 .6rem;font-size:.78rem;color:var(--ink-2);word-break:break-word}
.retry-row{display:flex;gap:.8rem;flex-wrap:wrap;align-items:flex-end}
.retry-host{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}
.retry-host label{font-size:.78rem}
.retry-host input{width:200px}
.abandoned-panel{border-left:3px solid var(--ink-3);padding:.9rem}
.abandoned-panel .sec-h{padding:0}
.abandoned-help{margin:.4rem 0 0;font-size:.88rem;max-width:75ch;color:var(--ink-2)}
/* Abandon is deliberately the quietest control on the page: collapsed, below
   the log, and opened on purpose rather than met on the way to Rebuild. */
.abandon{margin-top:1rem}
.abandon summary{padding:.55rem .9rem;cursor:pointer;font-size:.84rem;color:var(--ink-2)}
.abandon[open] summary{border-bottom:1px solid var(--rule-2);color:var(--fail)}
.abandon-body{padding:.7rem .9rem .9rem;font-size:.88rem;max-width:75ch}
.abandon-body p{margin:0 0 .5rem}
.abandon-body ul{margin:0 0 .8rem;padding-left:1.2rem}
.abandon-body li{margin:.2rem 0}
.abandon-form{display:flex;gap:.8rem;flex-wrap:wrap;align-items:center}
.abandon-ack{display:flex;gap:.4rem;align-items:center;font-size:.84rem}

.timeline{list-style:none;margin:0;padding:.6rem .9rem .9rem;display:flex;flex-direction:column}
.tl{display:grid;grid-template-columns:1.6rem 14px minmax(0,1fr);gap:.5rem;padding:.35rem 0;position:relative}
.tl-ord{font-family:var(--f-mono);font-size:.7rem;color:var(--ink-3);padding-top:.15rem}
.tl-mark{
  width:10px;height:10px;margin-top:.35rem;border:2px solid var(--ink-3);border-radius:50%;
  background:var(--surface);position:relative;
}
.tl:not(:last-child) .tl-mark::after{
  content:"";position:absolute;left:50%;top:12px;bottom:-20px;width:2px;
  transform:translateX(-50%);background:var(--rule);
}
.tl.is-ok .tl-mark{border-color:var(--ok);background:var(--ok)}
.tl.is-fail .tl-mark{border-color:var(--fail);background:var(--fail);border-radius:1px}
.tl.is-run .tl-mark{border-color:var(--signal);background:var(--signal);border-radius:1px;animation:pulse 1.6s ease-in-out infinite}
.tl.is-skip .tl-mark{border-style:dashed}
.tl-body{min-width:0}
.tl-title{margin:0;font-size:.87rem;font-weight:500;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap}
.tl-where{font-family:var(--f-mono);font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3)}
.tl-detail{margin:.1rem 0 0;font-size:.78rem;color:var(--ink-2);word-break:break-word}
.tl-detail.fail{color:var(--fail)}
.tl-time{margin:.05rem 0 0;font-size:.72rem;color:var(--ink-3)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

.creds{border-left:3px solid var(--signal)}
.creds .panel-note.warn{color:var(--signal)}
.creds-list dd{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.secret{display:inline-flex;align-items:center;gap:.5rem}
.secret-mask{letter-spacing:.1em;color:var(--ink-3)}
.secret-value{background:var(--code-bg);padding:.1rem .35rem;border-radius:2px;word-break:break-all}
.secret-once{border-left:3px solid var(--signal);background:var(--signal-soft);padding:.9rem}
.secret-once .sec-h{padding:0}
.secret-once p{margin:.4rem 0;font-size:.86rem}
.secret-once-value{
  font-size:.9rem;background:var(--surface);border:1px solid var(--rule);
  padding:.5rem .6rem;border-radius:var(--r);word-break:break-all;
}

/* -- log viewer ---------------------------------------------------------- */
.logpanel{overflow:hidden}
.log-head{align-items:center}
.log-tools{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.log-tools .tool{display:flex;align-items:center;gap:.35rem;font-size:.76rem;color:var(--ink-2)}
.log-tools input[type=search]{width:180px}
.log-tools .switch input{accent-color:var(--accent)}
.log{
  background:var(--log-bg);color:var(--log-ink);font-family:var(--f-mono);font-size:.76rem;
  line-height:1.5;max-height:460px;overflow:auto;padding:.5rem 0;
}
.log-line{display:grid;grid-template-columns:3.4rem 8.5rem minmax(0,1fr);gap:.6rem;padding:0 .8rem}
.log-line:hover{background:rgba(255,255,255,.05)}
.log-line.is-err{border-left:2px solid var(--fail);margin-left:-2px}
.log-line.is-err .log-text{color:#F0A79F}
.log-seq{color:#4E606B;text-align:right}
.log-step{color:#7FA6B0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-text{white-space:pre-wrap;word-break:break-word}
.log-empty{padding:.6rem .8rem;color:#7A8B95}
.log-line[hidden]{display:none}

@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
