Visual identity & color
The palette
Parch's identity is a teal→blue gradient with a purple secondary accent, defined once in the design tokens. Interfaces use it sparingly: brand moments (logo, heroes, onboarding) may use the gradient; product UI uses the semantic tokens.
Brand teal
--color-brand-teal
Brand blue
--color-brand-blue
Brand purple
--color-brand-purple
Semantic roles
Color communicates role, never decoration:
- Accent (teal), primary actions, selection, focus rings, active navigation. One accent action per view.
- Info (blue), neutral information and in-progress states.
- Success (green), completed operations and healthy states.
- Warning (amber), attention needed but recoverable.
- Danger (red), destructive actions and failures only. Red is never decorative.
Dark theme
Dark is a first-class theme, not an inverted one: surfaces get lighter with elevation (background → surface → surface-2), brand colors brighten to keep contrast, and shadows give way to borders and subtle surface shifts.
- Never hardcode hex values; use semantic tokens so both themes work.
- Test every screen in both themes before shipping (the design-system demos have a built-in switch for exactly this).
- Respect the system theme by default; offer an in-app override only when the app is fullscreen for long sessions (video, terminal).
Do
surface card
elevated surface-2 card
Elevation reads through lighter surfaces and hairlines.
Don't
glowing card
brand-blue filler
Glows and saturated brand fills as surfaces, noise in dark mode.