Theme
Pick one brand color. You get a light and a dark theme, checked against the same 81 contrast pairs as ours. Then copy the CSS.
To pick corners and pill shapes too, and get one command for your agent, set up your agent.
Use hex, rgb(), hsl(), oklch(), or a color name.
Checked: all 81 contrast pairs pass in light and dark, and every color fits in sRGB.
light
button · solid
button · soft
button · outline
button · ghost
badge · solid and soft
alert
notice · danger, warning, success, and brand
tabs · solid and ghost
card · label · input · select · textarea · checkbox · switch · separator
combobox · calendar
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
popover · menu
dialog · alert dialog · tooltip · toast
Delete this project?
You cannot undo it.
Discard changes?
Your edits will be lost.
Archived Tuesday training
Reminder not sent
Check your connection.
selection card · one answer and several
inline edit · radio group · slider · progress · spinner · kbd
- Owner
- Place
breadcrumb · accordion · table · pagination
| Invoice | Amount |
|---|---|
| INV-001 | $250.00 |
skeleton
choice poll · feature voting · step dots
- Monday67%
- Wednesday33%
- Dark mode
- CSV export
- Step 1 of 4: Account, done
- Step 2 of 4: Profile, current
- Step 3 of 4: Team, upcoming
- Step 4 of 4: Invite, upcoming
chart · donut · bar · line · area · beeswarm
Visitors could not load.
Visitors could not load.
sparkline
avatar · avatar stack · hover card · peek card · peek person · peek spread · person · status text
Ask Josh Tait about kit.
Josh Tait
Josh Tait
- Back
- Sat 17 Oct
Tuesday training
- Warm-up
- Lineouts
- Game
action keys · bulk bar · hover actions · response button · row actions · suggestion · tool button
code field · icon color picker · date picker · field frame · number stepper · search field · time field · token field · unit switch
breakdown list · form guide · funnel chart · heat calendar · period picker · qr code · ring progress · rolling number
- Under 12s: 92%
- Under 14s: 81%
- Under 16s: 64%
- Started a form: 64
- Paid: 51, 80% of the first step
- First session: 46, 72% of the first step
Arrow keys move a day or a week. Enter marks the start of a span, and again its end. Escape clears it.
Aug 1 to Sep 29
back link · section header · sheet · smart pick · motion · stagger · timeline · zoom pan
Members
Invite members
Who kicked?
Sam moved training to Pitch 3
Ava added 4 players
Fees are due Friday
champion card · command menu · icon · solid icon · no access · position slot · shirt number · spot icon · team flag
Harbour Town
Harbour Town
Sam Carter owns this
They get an email.
data table · hub link · leaderboard · list row · receipt · standings · status strip · sync status
| Player | Caps |
|---|---|
| Tom Hale | 42 |
| Mia Okafor | 31 |
| # | Player | Tries |
|---|---|---|
| 1 | Mia Okafor | 9 |
| 2 | Tom Hale | 7 |
| Your place | ||
| 3 | You, Cal Nash | 4 |
October membershipPaid
- Senior membership£15
Total£15
- Method
- Visa ending 4242
| Place | Team | Played | Won | Drawn | Lost | Points difference | Bonus points | Points |
|---|---|---|---|---|---|---|---|---|
| 1, Promotion | Harbour Town | 10 | 8 | 0 | 2 | +96 | 6 | 38 |
| 2 | You, Riverside | 10 | 6 | 1 | 3 | +41 | 5 | 31 |
| 3 | Northfield | 10 | 1 | 1 | 8 | −120 | 2 | 8 |
- £15
- 18 of 22
- Fri 2 Oct
audience · composer · editor · inline reply · lightbox · media grid · media image · message row
Goes to 3 people, Juniors' parents get it instead
Kit day is Tuesday at 6. Bring boots.
U14s vs Harbour Town
With Josh Tait and Ella Clarke
Training moves to Pitch 3 on Wednesday.
Got it, thanks.
access list · call to action · club switcher · notifications · rail · read by · scene · scroll progress · share link
- Sam CarterOwner
- Kate Clarke
Invite your coaches
Notifications
A guide to getting started
Explore the essentials.
Next steps
agreement · card field · choice chips · file drop · file row · photo field · repeat field · scale question
Club rules
Drop a file here or
Members 2026.csvUploaded
Members 2026.csv uploaded
Every Tue and Thu, 19:00 to 20:30, until Sat 15 May 2027 · 64 sessions
bracket match · finals board · knockout bracket · knockout wheel · match card
Champion to be decided
- Riverside RFC24Harbour Town17 Riverside RFC won.
- Old Millers7St Brendan's13 St Brendan's won.
- Riverside RFCSt Brendan's
Arrow keys move between teams: up toward the champion, down to the round before, and left and right around a ring. Enter keeps a team's run lit.
Champion: Riverside RFC.
check in code · duty slot · match clock · reorder list · suspension row · time grid
Scan with your phone camera to check in
Second half
- Warm-up
- Lineouts
- Game
approval request · context window · shimmer · thinking state · tool call card
Run migration 0042 on production?
npm run db:migrate -- --to 0042Context window
- System prompt: 4.2K
- Files: 31K
- Chat: 132K
Read 12 files
Ran the tests (working)
consensus meter · estimate chart · price chart
- 1
- 3
- 8
- $240
- $312
- $281
- $360
Average $312, +11% from current $281. Low $240, -14.6%. High $360, +28.1%.
panel switch · slideshow
Three items are open
One is due this week.
board · gantt chart
button variants
tokens
dark
button · solid
button · soft
button · outline
button · ghost
badge · solid and soft
alert
notice · danger, warning, success, and brand
tabs · solid and ghost
card · label · input · select · textarea · checkbox · switch · separator
combobox · calendar
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
popover · menu
dialog · alert dialog · tooltip · toast
Delete this project?
You cannot undo it.
Discard changes?
Your edits will be lost.
Archived Tuesday training
Reminder not sent
Check your connection.
selection card · one answer and several
inline edit · radio group · slider · progress · spinner · kbd
- Owner
- Place
breadcrumb · accordion · table · pagination
| Invoice | Amount |
|---|---|
| INV-001 | $250.00 |
skeleton
choice poll · feature voting · step dots
- Monday67%
- Wednesday33%
- Dark mode
- CSV export
- Step 1 of 4: Account, done
- Step 2 of 4: Profile, current
- Step 3 of 4: Team, upcoming
- Step 4 of 4: Invite, upcoming
chart · donut · bar · line · area · beeswarm
Visitors could not load.
Visitors could not load.
sparkline
avatar · avatar stack · hover card · peek card · peek person · peek spread · person · status text
Ask Josh Tait about kit.
Josh Tait
Josh Tait
- Back
- Sat 17 Oct
Tuesday training
- Warm-up
- Lineouts
- Game
action keys · bulk bar · hover actions · response button · row actions · suggestion · tool button
code field · icon color picker · date picker · field frame · number stepper · search field · time field · token field · unit switch
breakdown list · form guide · funnel chart · heat calendar · period picker · qr code · ring progress · rolling number
- Under 12s: 92%
- Under 14s: 81%
- Under 16s: 64%
- Started a form: 64
- Paid: 51, 80% of the first step
- First session: 46, 72% of the first step
Arrow keys move a day or a week. Enter marks the start of a span, and again its end. Escape clears it.
Aug 1 to Sep 29
back link · section header · sheet · smart pick · motion · stagger · timeline · zoom pan
Members
Invite members
Who kicked?
Sam moved training to Pitch 3
Ava added 4 players
Fees are due Friday
champion card · command menu · icon · solid icon · no access · position slot · shirt number · spot icon · team flag
Harbour Town
Harbour Town
Sam Carter owns this
They get an email.
data table · hub link · leaderboard · list row · receipt · standings · status strip · sync status
| Player | Caps |
|---|---|
| Tom Hale | 42 |
| Mia Okafor | 31 |
| # | Player | Tries |
|---|---|---|
| 1 | Mia Okafor | 9 |
| 2 | Tom Hale | 7 |
| Your place | ||
| 3 | You, Cal Nash | 4 |
October membershipPaid
- Senior membership£15
Total£15
- Method
- Visa ending 4242
| Place | Team | Played | Won | Drawn | Lost | Points difference | Bonus points | Points |
|---|---|---|---|---|---|---|---|---|
| 1, Promotion | Harbour Town | 10 | 8 | 0 | 2 | +96 | 6 | 38 |
| 2 | You, Riverside | 10 | 6 | 1 | 3 | +41 | 5 | 31 |
| 3 | Northfield | 10 | 1 | 1 | 8 | −120 | 2 | 8 |
- £15
- 18 of 22
- Fri 2 Oct
audience · composer · editor · inline reply · lightbox · media grid · media image · message row
Goes to 3 people, Juniors' parents get it instead
Kit day is Tuesday at 6. Bring boots.
U14s vs Harbour Town
With Josh Tait and Ella Clarke
Training moves to Pitch 3 on Wednesday.
Got it, thanks.
access list · call to action · club switcher · notifications · rail · read by · scene · scroll progress · share link
- Sam CarterOwner
- Kate Clarke
Invite your coaches
Notifications
A guide to getting started
Explore the essentials.
Next steps
agreement · card field · choice chips · file drop · file row · photo field · repeat field · scale question
Club rules
Drop a file here or
Members 2026.csvUploaded
Members 2026.csv uploaded
Every Tue and Thu, 19:00 to 20:30, until Sat 15 May 2027 · 64 sessions
bracket match · finals board · knockout bracket · knockout wheel · match card
Champion to be decided
- Riverside RFC24Harbour Town17 Riverside RFC won.
- Old Millers7St Brendan's13 St Brendan's won.
- Riverside RFCSt Brendan's
Arrow keys move between teams: up toward the champion, down to the round before, and left and right around a ring. Enter keeps a team's run lit.
Champion: Riverside RFC.
check in code · duty slot · match clock · reorder list · suspension row · time grid
Scan with your phone camera to check in
Second half
- Warm-up
- Lineouts
- Game
approval request · context window · shimmer · thinking state · tool call card
Run migration 0042 on production?
npm run db:migrate -- --to 0042Context window
- System prompt: 4.2K
- Files: 31K
- Chat: 132K
Read 12 files
Ran the tests (working)
consensus meter · estimate chart · price chart
- 1
- 3
- 8
- $240
- $312
- $281
- $360
Average $312, +11% from current $281. Low $240, -14.6%. High $360, +28.1%.
panel switch · slideshow
Three items are open
One is due this week.
board · gantt chart
button variants
tokens
Texture
Dither draws charts, meters, buttons, and photos as dots, with a glow on dark pages. An app turns it on everywhere with one class on its body.
CSS
Paste these values over the color tokens in your :root and .dark blocks.
:root {
--radius: 0.875rem;
/* Surfaces and text */
--background: oklch(0.982 0 0);
--foreground: oklch(0.163 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.208 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.208 0 0);
--muted: oklch(0.952 0 0);
--muted-foreground: oklch(0.502 0 0);
--accent: oklch(0.955 0 0);
--accent-foreground: oklch(0.208 0 0);
--secondary: oklch(0.952 0 0);
--secondary-foreground: oklch(0.208 0 0);
/* Tones: solid, text on solid, solid on hover, soft, text on soft */
--neutral: oklch(0.208 0 0);
--neutral-foreground: oklch(0.99 0 0);
--neutral-hover: oklch(0.3 0 0);
--primary: oklch(0.542 0.212 266);
--primary-foreground: oklch(0.99 0 0);
--primary-hover: oklch(0.517 0.199 266);
--primary-soft: oklch(0.957 0.02 266);
--primary-soft-foreground: oklch(0.469 0.182 266);
--destructive: oklch(0.57 0.2 24);
--destructive-foreground: oklch(0.99 0 0);
--destructive-hover: oklch(0.545 0.19 24);
--destructive-soft: oklch(0.949 0.021 15);
--destructive-soft-foreground: oklch(0.483 0.138 18);
--success: oklch(0.511 0.12 157);
--success-foreground: oklch(0.99 0 0);
--success-hover: oklch(0.485 0.113 157);
--success-soft: oklch(0.953 0.023 168);
--success-soft-foreground: oklch(0.452 0.099 160);
--warning: oklch(0.531 0.113 73);
--warning-foreground: oklch(0.99 0 0);
--warning-hover: oklch(0.505 0.106 73);
--warning-soft: oklch(0.959 0.023 83);
--warning-soft-foreground: oklch(0.468 0.095 76);
/* Lines */
--border: oklch(0.907 0 0);
--input: oklch(0.64 0 0);
--ring: oklch(0.542 0.212 266);
/* Data */
--chart-1: oklch(0.542 0.212 266);
--chart-2: oklch(0.58 0.099 193);
--chart-3: oklch(0.62 0.135 68);
--chart-4: oklch(0.55 0.18 308);
--chart-5: oklch(0.58 0.19 23);
/* Sidebar (kept for shadcn compatibility) */
--sidebar: oklch(0.973 0 0);
--sidebar-foreground: oklch(0.163 0 0);
--sidebar-primary: oklch(0.542 0.212 266);
--sidebar-primary-foreground: oklch(0.99 0 0);
--sidebar-accent: oklch(0.955 0 0);
--sidebar-accent-foreground: oklch(0.208 0 0);
--sidebar-border: oklch(0.907 0 0);
--sidebar-ring: oklch(0.542 0.212 266);
}
.dark {
--background: oklch(0.17 0 0);
--foreground: oklch(0.97 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.97 0 0);
--popover: oklch(0.225 0 0);
--popover-foreground: oklch(0.97 0 0);
--muted: oklch(0.25 0 0);
--muted-foreground: oklch(0.72 0 0);
--accent: oklch(0.28 0 0);
--accent-foreground: oklch(0.97 0 0);
--secondary: oklch(0.26 0 0);
--secondary-foreground: oklch(0.96 0 0);
--neutral: oklch(0.93 0 0);
--neutral-foreground: oklch(0.208 0 0);
--neutral-hover: oklch(0.86 0 0);
--primary: oklch(0.55 0.191 266);
--primary-foreground: oklch(0.99 0 0);
--primary-hover: oklch(0.525 0.191 266);
--primary-soft: oklch(0.29 0.075 266);
--primary-soft-foreground: oklch(0.84 0.078 266);
--destructive: oklch(0.57 0.19 24);
--destructive-foreground: oklch(0.99 0 0);
--destructive-hover: oklch(0.545 0.18 24);
--destructive-soft: oklch(0.3 0.08 25);
--destructive-soft-foreground: oklch(0.85 0.08 25);
--success: oklch(0.53 0.12 157);
--success-foreground: oklch(0.99 0 0);
--success-hover: oklch(0.505 0.113 157);
--success-soft: oklch(0.29 0.06 155);
--success-soft-foreground: oklch(0.86 0.09 155);
--warning: oklch(0.55 0.113 73);
--warning-foreground: oklch(0.99 0 0);
--warning-hover: oklch(0.525 0.106 73);
--warning-soft: oklch(0.31 0.06 75);
--warning-soft-foreground: oklch(0.88 0.09 85);
--border: oklch(1 0 0 / 10%);
--input: oklch(0.53 0 0);
--ring: oklch(0.55 0.191 266);
--chart-1: oklch(0.72 0.14 266);
--chart-2: oklch(0.74 0.11 193);
--chart-3: oklch(0.78 0.14 78);
--chart-4: oklch(0.72 0.15 308);
--chart-5: oklch(0.72 0.16 23);
--sidebar: oklch(0.15 0 0);
--sidebar-foreground: oklch(0.97 0 0);
--sidebar-primary: oklch(0.55 0.191 266);
--sidebar-primary-foreground: oklch(0.99 0 0);
--sidebar-accent: oklch(0.28 0 0);
--sidebar-accent-foreground: oklch(0.97 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.55 0.191 266);
}