Where your styles go
Your app’ssrc/styles.css imports the Spree stylesheet. Anything below that
import wins, because it lands later at the same specificity:
src/styles.css
The seller panel works the same way — its starter imports
@spree/seller-dashboard/styles.css, and the same tokens apply.Dark mode
Every token has a dark counterpart under.dark. A theme is only complete when
you set both:
src/styles.css
The tokens
Surfaces and text
Brand and interaction
Status
--destructive and --destructive-foreground for dangerous actions, plus four
status families used by badges and callouts — each with -bg, -border and
-fg:
--status-green-*, --status-amber-*, --status-red-*, --status-blue-*
Borders and structure
Sidebar
The sidebar has its own family so you can give the chrome a different tone from the content:--sidebar, --sidebar-foreground, --sidebar-primary,
--sidebar-accent and its hover steps, --sidebar-border, --sidebar-ring.
Charts
--chart-1 through --chart-5, in series order.
Tokens defined from other tokens
Several tokens alias another rather than naming their own colour:--foreground alone also moves
primary buttons, because that is where --primary points. Override the alias
directly when you want them to diverge.
Fonts and the type scale
Typography is set in a@theme inline block and overridden the same way:
src/styles.css
--text-base raises everything built on it.
Using tokens in your own pages
Tailwind maps every token through@theme inline, so utilities follow your
values with no extra work:
var(--token) — a page built from
bg-card and text-muted-foreground inherits every future change, including
dark mode.
For inline text links there is a .link class carrying the canonical treatment:
.link would fight it.
Related
- Dashboard overview — the three packages and what each is for
- Translations — the other half of white-labelling
- Slots — adding your own UI to existing screens

