Colour
Cool slate neutrals, a single jade accent, and semantic colours reserved for money states. Positive and negative amounts never borrow the accent.
Showing light theme valuesTypography
Manrope for the product: geometric, warm and with tabular figures, so money lines up in columns. Fraunces is kept for editorial moments only. IBM Plex Mono for IDs and code.
Space & radius
A 4px base scale. Radius grows with the size of the surface: controls 8–10px, cards 16px, dialogs 22px.
Elevation
Three levels. Most surfaces sit at level 1. Level 3 is reserved for things above the page: dialogs, drawers and toasts.
cards, inputs
hover, popovers
dialogs, drawers
Motion
Three durations and two curves cover every animation. Tap a card to play it.
Buttons
Primary (ink) for the main action on a page. Accent for money-moving confirmation only. Secondary and ghost for everything else. Loading keeps the button’s width.
Inputs
42px tall with a visible border, so fields read as fields. Errors say what to do, next to the field.
Selection
Switches take effect immediately. Segmented controls switch views. Chips filter lists. Tabs switch between groups of the same thing.
Status & identity
Badges carry state with a dot and a word, never colour alone. Merchants get a coloured tile, people get their photo.

Payment cards
Four finishes so people can tell cards apart at a glance. Hover for the light sweep. Tap to flip. The frozen state frosts the card wherever it appears.
Feedback
Toasts confirm and offer undo. Empty states say what will appear and how to add it. Skeletons match the layout they replace.
You’re all caught up
New requests will appear here and in Slack.
Review and send
Data display
Amounts are right-aligned with tabular figures. Rows group by date. Everything that opens something shows a pointer and a hover state.
| Merchant | Category | Amount |
|---|---|---|
aws Amazon Web ServicesLeo Hart · Card ••3310 | Software | −$18,420.16 |
S Stripe payoutOperating ••4821 | Revenue | +$42,318.90 |