From 4d821c1c7dc018bfdfea180a1a0b8ddb32c40c2b Mon Sep 17 00:00:00 2001 From: Chris Phillipson Date: Thu, 6 Aug 2026 02:10:03 -0700 Subject: [PATCH] feat(dashboard): relocate local-source pills to the tabbar with branded host icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The local-source health pills (previously three text chips, "Claude: ok" / "Codex: transcripts: ok · ledger: ok" / "OpenCode: ok") lived inside the Usage panel content, only visible on that one tab, and read as a redundant claude/codex/opencode text label sitting next to an already-labeled status word. * Relocated to the sticky tabbar, right-aligned - Moved #u-source-health out of panel-usage into
@@ -270,7 +271,6 @@ export function renderPage({ name, version }) {

Usage scorecard

Token consumption, API-equivalent cost, efficiency, and trends.

-
diff --git a/src/lib/dashboard/styles.mjs b/src/lib/dashboard/styles.mjs index 1ae03ad5..3c571cf1 100644 --- a/src/lib/dashboard/styles.mjs +++ b/src/lib/dashboard/styles.mjs @@ -157,7 +157,7 @@ body.gated .band,body.gated .tabbar,body.gated main{display:none} /* ── sticky frosted segmented control ── */ .tabbar{ position:sticky; top:0; z-index:20; - display:flex; padding:8px clamp(16px,4vw,40px) 10px; + display:flex; align-items:center; gap:12px; padding:8px clamp(16px,4vw,40px) 10px; background:var(--material); -webkit-backdrop-filter:saturate(180%) blur(20px); backdrop-filter:saturate(180%) blur(20px); @@ -407,19 +407,30 @@ body.gated .band,body.gated .tabbar,body.gated main{display:none} } .note b{color:var(--ink)} .note .i{color:var(--accent); font-weight:700} -.source-health{ - display:flex; flex-wrap:wrap; align-items:center; gap:7px; margin:-2px 0 16px; +/* local-source pills — sit right-aligned in the sticky tabbar, one per host */ +.tabbar .source-health{ + display:flex; align-items:stretch; gap:6px; margin-left:auto; color:var(--ink-2); font-size:11.5px; } .source-health[hidden]{display:none} -.source-health .source-label{font-weight:600; color:var(--ink-dim); margin-right:2px} -.source-chip{ - border:1px solid var(--line); border-radius:999px; padding:4px 9px; - background:var(--panel); color:var(--ink-2); -} -.source-chip[data-status="ok"]{border-color:var(--ok); color:var(--ok)} -.source-chip[data-status="degraded"]{border-color:var(--warn); color:var(--warn); background:color-mix(in srgb,var(--warn) 10%,transparent)} -.source-chip[data-status="absent"],.source-chip[data-status="not-read"]{color:var(--ink-dim)} +.source-pill{ + display:inline-flex; align-items:stretch; border-radius:999px; + background:var(--panel-2); overflow:hidden; +} +.source-pill .sp-icon{display:flex; align-items:center; padding:4px 10px 4px 5px} +.tabbar .source-pill .live-host{ + width:32px; height:32px; display:grid; place-items:center; + border-radius:50%; background:var(--bg); border:1px solid var(--line); +} +.tabbar .source-pill .live-host-icon{width:20px; height:20px; stroke-width:1.8} +.source-pill .sp-status{ + display:flex; align-items:center; padding:5px 14px 5px 10px; font-size:13px; + font-weight:600; letter-spacing:-.006em; text-transform:lowercase; color:var(--ink-2); +} +.source-pill[data-status="ok"] .sp-status{color:var(--ok)} +.source-pill[data-status="degraded"]{background:color-mix(in srgb,var(--warn) 16%,var(--panel-2))} +.source-pill[data-status="degraded"] .sp-status{color:var(--warn)} +.source-pill[data-status="absent"] .sp-status,.source-pill[data-status="not-read"] .sp-status{color:var(--ink-dim)} .sh{display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:14px} .sh h2{font-size:15px; font-weight:600; letter-spacing:-.014em; margin:0} .sh .n{color:var(--ink-dim); font-size:11.5px}