feat: redesign UI with centralized design token system#376
Merged
nadaverell merged 2 commits intomainfrom Mar 29, 2026
Merged
Conversation
Gives the UI a more technical, purpose-built feel by rendering data values in DM Mono instead of the body font. Applied to health ring center numbers, resource count badges, metrics chart values/axes, and cluster health card breakdowns.
63a4e57 to
a31ee7a
Compare
Introduces a cohesive design token system and centralized component classes across the entire UI. Design tokens (packages/k8s-ui/src/theme/variables.css): - Brand color tokens (--color-brand, --color-brand-light) - Selection tokens (--selection-bg, --selection-border, --selection-text) - Shadow tokens (--shadow-drawer, --shadow-card, --shadow-lg) - Background hierarchy: base (chrome) / surface (panels) / elevated (inputs, badges) - Blue-tinted cool neutrals in light mode for subtle palette cohesion Centralized component CSS (packages/k8s-ui/src/theme/components.css): - New shared file with all component classes in @layer components - .badge / .badge-sm with 0.5px hairline borders (retina-friendly) - .btn-brand / .btn-brand-muted / .btn-brand-toggle - .card-inner / .card-inner-lg with 0.5px borders - .selection / .selection-strong / .selection-text / .selection-ring - .dialog, .status-*, .border-*-subtle (all 0.5px), .table-divide-subtle - Exported from k8s-ui package so koala-frontend can import without Radar's index.css Badge.tsx — single source of truth for badge color strings (static strings required for Tailwind class scanning). badge-colors.ts now re-exports from Badge.tsx, removing ~200 lines of ad-hoc definitions. Other changes: - HealthRing rewritten as 270° arc gauge with SVG glow filter - Uppercase tracking on section labels, editorial typography hierarchy - Brand accent replaces cold blue-500 across sidebar, table, topology, workload tabs, and drawer resize handle - Header uses bg-theme-base chrome layer with backdrop-blur - Toolbar and table column headers use bg-theme-base for clear zone separation - Topology node borders reduced to 0.5px hairlines - vite.config.ts: RADAR_PORT env override for backend proxy target
a31ee7a to
88ba9f4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Design token system: New CSS variable hierarchy in
packages/k8s-ui/src/theme/variables.css— brand, selection, shadow, and background tokens with a deliberatebase / surface / elevatedlayering that creates clear visual zones (chrome vs content vs inputs/badges). Light mode uses blue-tinted cool neutrals for palette cohesion.Centralized component CSS: New
packages/k8s-ui/src/theme/components.cssmoves all shared component classes (.badge,.btn-brand,.card-inner,.selection,.dialog,.status-*,.border-*-subtle) into the k8s-ui package under@layer components. koala-frontend can now import these styles directly without depending on Radar'sindex.css.Badge centralization:
Badge.tsxbecomes the single source of truth for all badge color strings (required for Tailwind class scanning — no template literals).badge-colors.tsre-exports from it, removing ~200 lines of duplicated ad-hoc color definitions spread across the codebase.Visual refinements: HealthRing rewritten as a 270° arc gauge with SVG glow; uppercase tracking on section labels; brand accent replaces cold
blue-500throughout sidebar/table/topology/workload; header and toolbar use thebasechrome layer withbackdrop-blur; all decorative borders (badges, cards, topology nodes, subtle dividers) reduced to 0.5px hairlines for retina displays.