Tokens, type, number formatting and base components for the Fyro Finance app. Every colour is an HSL CSS variable compatible with the shadcn theme; every component below maps to a shadcn/ui primitive with lucide-react icons and Recharts for charts.
Wordmark, in three sizes and one collapsed mark for the compressed sidebar.
Declared as bare HSL triples on :root and .dark, consumed as hsl(var(--token)).
One hue family for income, one for costs, neutral ink for subtotals. Sections are tinted at 4% saturation-weight on light and 14% on dark, so a 26-column table never turns into a pastel quilt. Colour carries the sign; the label carries the meaning.
Geist for the interface, Geist Mono for every figure. font-variant-numeric: tabular-nums is set on body, so columns align without extra classes.
One rule set for the whole app, implemented once in formatMoney() / formatPct() on top of Intl.NumberFormat. The locale switch drives separators and symbol position; nothing is hand-formatted in a component.
Each one maps to a shadcn/ui primitive: Card, Table, Select, Tabs, ToggleGroup, Badge, Skeleton, Alert, AlertDialog, Button.