Skip to content

Web UI: dual-theme design system + new shell chrome - #237

Closed
srikanth-bitdynamics wants to merge 1 commit into
mainfrom
ui-theming-mockup
Closed

Web UI: dual-theme design system + new shell chrome#237
srikanth-bitdynamics wants to merge 1 commit into
mainfrom
ui-theming-mockup

Conversation

@srikanth-bitdynamics

Copy link
Copy Markdown
Collaborator

Restyles the Web UI to the provided mockup and adds a light theme alongside the existing dark one, keeping the app's flow and information architecture unchanged.

Theming

  • index.css now defines the full token ramp as CSS variables with a dark default (:root) and a light override (:root[data-theme="light"]). The W.* tokens in tokens.ts resolve through those variables, so every screen that already used W.* themes for both palettes with no per-screen color edit — one architecture change instead of touching 19 screens by hand.
  • theme.ts owns the active theme: written to data-theme on <html>, persisted to localStorage, applied before first paint (no flash). useTheme() drives the topbar toggle.
  • The 55 ${W.x}NN hex-alpha concatenations that would become invalid once W.x is a variable (var(--accent)1A is not a color) are replaced with a tint() helper backed by color-mix. The few hardcoded hexes that actually break in light mode — dark text meant to sit on the cobalt fill, dark switch-track backgrounds — move to W.onAccent / W.borderHi so they flip; the dataviz mid-tones (teal/amber/green series colors) stay fixed since they read on either background.

Shell chrome

  • Topbar: page title, an instance-switcher pill with a status dot and wide-caps label, a Commands button that opens the ⌘K palette, a Connected health pill, the light/dark toggle, and a Docs link.
  • Sidebar: a LocalNet group label, icon + label nav (one stroke glyph per route), and a pinned footer showing loopback-only and the live schema version.
  • CommandPalette gains an openPalette() event hook so the topbar button can open it while the component keeps ownership of its state.

Scope

Design-only: the existing Overview and every screen's flow are restyled, not re-architected. The mockup's denser consolidated Overview (JWT generator / app-config tabs on the Overview page) was intentionally not adopted, since that would change the flow.

Verification

  • tsc clean, 218/218 frontend tests, Go UI suite, make lint 0 issues
  • Both themes reviewed live against a running LocalNet (Overview, Explorer, DAR, Agent Skills) — the toggle flips the entire app

Note: the exact accent/neutral color pairings are being revisited in follow-up work; this PR lands the dual-theme architecture and shell, which that tuning builds on.

Restyle the Web UI to the provided design and add a light theme
alongside the existing dark one, without changing the app's flow or
information architecture.

Theming
- index.css now defines the full token ramp as CSS variables with a
  dark default (:root) and a light override (:root[data-theme]). The
  W.* tokens in tokens.ts resolve through those variables, so every
  screen that already used W.* themes for both palettes with no
  per-screen color edit — one architecture change instead of touching
  19 screens by hand.
- theme.ts owns the active theme: written to data-theme on <html>,
  persisted to localStorage, applied before first paint (no flash).
  useTheme() drives the topbar toggle.
- The 55 `${W.x}NN` hex-alpha concatenations that would become invalid
  once W.x is a variable (var(--accent)1A is not a color) are replaced
  with a tint() helper backed by color-mix. The handful of hardcoded
  hexes that actually break in light mode — dark text meant to sit on
  the cobalt fill, dark switch-track backgrounds — move to W.onAccent /
  W.borderHi so they flip; the dataviz mid-tones (teal/amber/green
  series colors) stay fixed since they read on either background.

Shell chrome
- Topbar: page title, an instance-switcher pill with a status dot and
  wide-caps label, a Commands button that opens the ⌘K palette, a
  Connected health pill, the light/dark toggle, and a Docs link.
- Sidebar: a LocalNet group label, icon + label nav (one stroke glyph
  per route), and a pinned footer showing loopback-only and the live
  schema version.
- CommandPalette gains an openPalette() event hook so the topbar
  button can open it while the component keeps ownership of its state.

Verified: tsc clean, 218/218 frontend tests, Go UI suite, make lint
0 issues, and both themes reviewed live against a running LocalNet
(Overview, Explorer, DAR, Agent Skills) — the toggle flips the entire
app.
@srikanth-bitdynamics

Copy link
Copy Markdown
Collaborator Author

Superseded by #241, which carries this dual-theme + shell-chrome work rebased onto current main, plus the Carbon Slate palette, the console design polish, and the token-demo V1 fix — all in one branch. Closing in favour of that PR.

@srikanth-bitdynamics
srikanth-bitdynamics deleted the ui-theming-mockup branch July 12, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant