From cac3404aa462c53cb5976a2881ed66114abe4efe Mon Sep 17 00:00:00 2001 From: William Valentin Date: Sat, 14 Mar 2026 11:03:26 -0700 Subject: [PATCH] feat: add dashboard CSS styles --- cmd/web-ui/static/style.css | 225 ++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) diff --git a/cmd/web-ui/static/style.css b/cmd/web-ui/static/style.css index 96e3087..e01c213 100644 --- a/cmd/web-ui/static/style.css +++ b/cmd/web-ui/static/style.css @@ -935,3 +935,228 @@ tr.clickable:hover td:first-child { color: var(--text-dim); border: 1px solid var(--border); } + +/* ── Dashboard ────────────────────────────────────────────── */ +.dashboard-summary { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1rem; + margin-bottom: 1.5rem; +} + +@media (max-width: 900px) { + .dashboard-summary { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 500px) { + .dashboard-summary { + grid-template-columns: 1fr; + } +} + +.summary-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 1.125rem 1.25rem; + transition: border-color 0.2s; +} + +.summary-card:hover { + border-color: rgba(34, 211, 238, 0.18); +} + +.summary-card-label { + font-size: 0.68rem; + font-weight: 700; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.1em; + margin-bottom: 0.5rem; +} + +.summary-card-value { + font-family: var(--font-display); + font-size: 2rem; + font-weight: 800; + color: var(--text-bright); + letter-spacing: -0.02em; + line-height: 1; +} + +.summary-card-value.has-errors { + color: var(--error); +} + +.summary-card-sub { + font-size: 0.72rem; + color: var(--text-dim); + margin-top: 0.35rem; + font-family: var(--font-mono); +} + +.charts-row { + display: grid; + grid-template-columns: 1fr 320px; + gap: 1.25rem; + margin-bottom: 1.5rem; +} + +@media (max-width: 900px) { + .charts-row { + grid-template-columns: 1fr; + } +} + +.chart-panel { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 1.25rem; + min-height: 280px; +} + +.chart-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 1rem; +} + +.chart-title { + font-family: var(--font-display); + font-size: 0.88rem; + font-weight: 700; + color: var(--text-bright); + letter-spacing: 0.01em; +} + +.window-selector { + display: flex; + gap: 0; + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; +} + +.window-btn { + background: transparent; + border: none; + color: var(--text-dim); + font-family: var(--font-mono); + font-size: 0.7rem; + font-weight: 600; + padding: 0.3rem 0.65rem; + cursor: pointer; + letter-spacing: 0.04em; + transition: background 0.15s, color 0.15s; + border-right: 1px solid var(--border); +} + +.window-btn:last-child { + border-right: none; +} + +.window-btn:hover { + color: var(--text-bright); + background: var(--surface-2); +} + +.window-btn.active { + color: var(--accent); + background: var(--accent-dim); +} + +.chart-container { + width: 100%; + min-height: 200px; +} + +.fw-bars { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin-top: 0.25rem; +} + +.fw-bar-row { + display: flex; + flex-direction: column; + gap: 0.3rem; +} + +.fw-bar-label { + display: flex; + justify-content: space-between; + align-items: center; +} + +.fw-bar-name { + font-family: var(--font-mono); + font-size: 0.78rem; + color: var(--text); +} + +.fw-bar-count { + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--text-dim); +} + +.fw-bar-track { + height: 6px; + background: var(--surface-2); + border-radius: 3px; + overflow: hidden; +} + +.fw-bar-fill { + height: 100%; + border-radius: 3px; + transition: width 0.4s ease; +} + +.fw-bar-fill.openclaw { background: var(--accent); } +.fw-bar-fill.claude-code { background: var(--success); } +.fw-bar-fill.opencode { background: var(--purple); } +.fw-bar-fill.unknown { background: var(--text-dim); } + +.bottom-panels { + display: grid; + grid-template-columns: 1fr 320px; + gap: 1.25rem; +} + +@media (max-width: 900px) { + .bottom-panels { + grid-template-columns: 1fr; + } +} + +.feed-panel { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 1.25rem; + max-height: 480px; + overflow-y: auto; +} + +.feed-panel .timeline-event { + padding: 0.625rem 0.875rem; + border-radius: var(--radius); + margin-bottom: 0.375rem; + border: 1px solid var(--border-soft); + background: transparent; +} + +.tools-panel { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 1.25rem; +} + +.uplot .u-legend { display: none; }