Skip to content

feat(control-plane): refresh the UI design system - #3149

Merged
nicoloboschi merged 1 commit into
mainfrom
control-plane-design-system
Aug 3, 2026
Merged

feat(control-plane): refresh the UI design system#3149
nicoloboschi merged 1 commit into
mainfrom
control-plane-design-system

Conversation

@nicoloboschi

Copy link
Copy Markdown
Collaborator

Refreshes the control plane's design system. The stock shadcn oklch greys are replaced with the Hindsight palette and the shared primitives move onto the design system's density, so the whole app picks up the new look from tokens rather than per-component edits.

Tokens (globals.css)

  • Blue-shifted neutral palette in both modes: page #F3F5F9/#080C17, card #FFFFFF/#0F1724, sidebar #FFFFFF/#0A1020, hairline borders (rgba(0,0,0,0.08) / rgba(100,160,255,0.10)).
    In light mode --card was previously the same value as --background, so cards were indistinguishable from the page behind them.
  • Adds the --hs-* semantic layer (surface / foreground / border / status / chart) plus its @theme inline mappings, so pages can reach for bg-success, text-chart-world etc. instead of raw hex.
  • --tracking-normal 0.025em0. Inter reads wrong with positive tracking at body sizes.
  • Light --muted-foreground is #525866 — 5.3:1 against the page and 7.1:1 against card white, so body copy clears WCAG AA in both modes.

Fonts

Inter and JetBrains Mono move to next/font/google. The Google Fonts @import they replace loaded weights lazily, which left semibold headings rendering in the system fallback until the weight arrived. Space Grotesk is dropped — it was only reachable through a font-heading utility that no component used.

Primitives

card, button (plus a gradient variant for the primary CTA), input, textarea, select, switch, checkbox, dialog, alert-dialog, popover, dropdown-menu and command move to 13px / h-9 / rounded-[10px], with rounded-[16px] cards and dialogs and blurred overlays.

Layout

  • Bank page content is capped by a responsive staircase (1024 / xl:1280 / 2xl:1440, centered). It was previously uncapped, so on a 16" display body text and table rows spanned the full ~1700px window.
  • Active tab underlines use the brand gradient rather than flat --primary. The bank-config strategy tabs needed converting from border-b-2 border-primary to an absolutely-positioned bar, since a border can't carry a gradient; the transparent border-b-2 stays so inactive tabs keep their hover underline.
  • The sidebar toggles from anywhere on its chrome, not just the collapse button. The keydown handler is scoped to the aside itself so pressing Enter on a focused nav link navigates without also collapsing the rail.
  • The three dashboard panels and the entities graph panel were bordered but transparent, which showed page-grey inside a card-looking box under the new palette; they now carry a card surface.

Deliberately preserved

  • The h1h6 weight default. Tailwind preflight resets headings to font-weight: inherit, and not every heading in this app carries an explicit weight utility, so dropping the rule would flatten them.
  • The chip tokens (facet-chip), logo keyframes, themed scrollbars and .prose table rules, which a wholesale token rewrite would have dropped.
  • Nested bg-muted boxes (code blocks, tool-call rows, chunk lists) stay at rounded-lg. The 16px radius is for card surfaces; promoting nested content boxes to it makes sub-content read as cards.

Review notes

  • page.tsx is mostly re-indentation from wrapping the views in the width container — git diff -w shows the actual change.
  • No new primitives were added even where the design system defines them (badge, skeleton, tooltip): nothing imports them yet and knip's orphaned-file check is blocking in CI.

Verification

  • ./scripts/hooks/lint.sh passes; check-unused.sh reports no blocking findings.
  • 101/101 control-plane tests pass.
  • npm run build compiles clean (54/54 static pages).
  • Exercised manually against a live API in both themes: sidebar collapse/expand, bank config tabs, the configuration form (selects, inputs, textarea, switch, checkbox) and the Add Document dialog.

Replaces the stock shadcn oklch greys with the Hindsight palette and moves
the shared primitives onto the design system's density, so the whole app
picks up the new look from tokens rather than per-component edits.

Tokens (globals.css)
- Blue-shifted neutral palette in both modes: page #F3F5F9/#080C17, card
  #FFFFFF/#0F1724, sidebar #FFFFFF/#0A1020, hairline borders. Light mode
  previously had --card equal to --background, so cards were invisible
  against the page.
- Adds the --hs-* semantic layer (surface/fg/border/status/chart) and its
  @theme mappings.
- --tracking-normal 0.025em -> 0; Inter reads wrong with positive tracking
  at body sizes.
- Light --muted-foreground is #525866 (5.3:1 vs page, 7.1:1 vs card) so body
  copy clears WCAG AA in both modes.

Fonts
- Inter and JetBrains Mono move to next/font/google, replacing the Google
  Fonts @import that loaded weights lazily and left semibold headings in the
  system fallback until the weight arrived. Space Grotesk is dropped; it was
  only reachable via a `font-heading` utility no component used.

Primitives
- card, button (+ gradient variant), input, textarea, select, switch,
  checkbox, dialog, alert-dialog, popover, dropdown-menu, command move to
  13px / h-9 / rounded-[10px], with rounded-[16px] cards and dialogs and
  blurred overlays.

Layout
- Bank page content is capped by a responsive staircase
  (1024 / xl:1280 / 2xl:1440, centered). It was uncapped, so on a 16" display
  body text and table rows spanned the full ~1700px window.
- Active tab underlines use the brand gradient instead of flat --primary.
- The sidebar toggles from anywhere on its chrome, not just the button.

Preserved deliberately: the h1-h6 weight default (Tailwind preflight resets
headings to inherit and not every heading here carries an explicit weight
utility), plus the chip tokens, logo keyframes, themed scrollbars and .prose
table rules that the tokens rewrite would otherwise have dropped.

Note: page.tsx is mostly re-indentation from wrapping the views in the width
container; `git diff -w` shows the real change.
@nicoloboschi
nicoloboschi merged commit bf6c12d into main Aug 3, 2026
91 checks passed
@nicoloboschi
nicoloboschi deleted the control-plane-design-system branch August 3, 2026 10:32
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