Design system
Tokens, primitives, patterns and templates for every TerminalK dashboard. Dark-first, dense by default, accessible (WCAG AA), colour-blind-safe market semantics.
Principles
Near-black canvas, graphite surfaces, one signal-violet accent. Colour is reserved for meaning: market direction, status, series.
Geist with tabular figures everywhere numbers align; hero figures large and quiet; every value carries its unit and freshness.
▲/▼ glyph + sign + label accompany teal/red. A blue/orange scheme is one click away for colour-blind users.
Compact, comfortable and spacious modes change row height, padding and type size from three tokens — no per-page tweaks.
Colour
Semantic roles only — components never use raw hex. Values shown are live for the current theme; ratios are WCAG contrast on the surface colour.
Surfaces
Text
Market
Status (icon + label always)
Series (validated order — never cycled)
Typography
Geist Sans for UI, Geist Mono for tickers, codes and the wordmark. Tabular figures wherever numbers stack.
Spacing, radius, elevation & density
4 px base grid. Radius: 4 controls-inner · 6 controls · 10 widgets · 12 dialogs. Elevation by border + subtle shadow; popovers use the pop shadow.
Motion
Short, functional, interruptible. Everything respects prefers-reduced-motion.
Primitives
shadcn-style components on Radix: keyboard-complete, focus-visible rings, token-driven.
Patterns
The building blocks every dashboard composes: widgets, stats, charts, tables, filters, and their loading/empty states.
Sentiment scale
LiveLoading state
Empty state
Factor contribution
Score around neutral 50 · points
Top positive drivers
NIFTY vs sentiment
Stacked panes share the time axis and crosshair — never dual y-axes
Virtualised data table
1,000 rows · sortable · ↑/↓ to move · heat column
Stat skeleton
Chart skeleton
Table skeleton
Empty state (standalone)
Sample screens
Two India Sentiment screens composed entirely from system patterns (widget grid, virtualised chain table, stacked chart panes).