Tokens
Semantic colors, six arcade accents, hard shadows, shape, and motion tokens.
Theming
Import @sketchpad/tokens/tokens.css once. System dark mode works automatically via prefers-color-scheme.
import '@sketchpad/tokens/tokens.css';
import { getThemeInitScript } from '@sketchpad/tokens';
import { ThemeProvider, ThemeToggle } from 'sketchpad-ui';
// In root layout <head> (before React):
// <script dangerouslySetInnerHTML={{ __html: getThemeInitScript() }} />
export default function App({ children }) {
return (
<ThemeProvider defaultTheme="system" defaultColor="blue">
<ThemeToggle />
{children}
</ThemeProvider>
);
}Set defaultColor to blue, yellow, pink, green, orange, or purple. A validated customAccent accepts any six-digit hex color and derives a readable foreground.
Contrast
Light text on canvas: 16.7:1 (WCAG AA pass)
Dark text on canvas: 17.9:1 (WCAG AA pass)
Accent foregrounds are selected automatically; muted colors are reserved for secondary text, placeholders, and disabled states.
Colors
canvas
#FFF6E5#101014surface
#FFFFFF#1B1B22surfaceRaised
#FFFDF7#24242Etext
#171717#FFF8E7textMuted
#5B5B66#B8B8C4border
#171717#F6F1E7hardShadow
#171717#000000disabled
#CAC7BE#54545Fbackdrop
rgba(23, 23, 23, 0.68)rgba(0, 0, 0, 0.78)focus
#3D7EFF#FFD23Fsuccess
#5CD65C#5CD65Cwarning
#FFD23F#FFD23Fdanger
#FF5A5F#FF7478info
#3D7EFF#6B9BFFpaper
#FFF6E5#101014paperAlt
#FFFFFF#1B1B22paperBright
#FFFDF7#24242Eink
#171717#FFF8E7inkSoft
#5B5B66#B8B8C4pencil
#77737E#8F8F9DaccentYellow
#FFD23F#FFD23FaccentBlue
#3D7EFF#6B9BFFaccentRed
#FF5A5F#FF7478accentGreen
#5CD65C#72E072accentLavender
#9B6DFF#B291FFACCENT PRESETS
blue
#3D7EFFyellow
#FFD23Fpink
#FF4D9Dgreen
#5CD65Corange
#FF8A3Dpurple
#9B6DFFCSS variables
All semantic tokens are custom properties, e.g. var(--sk-colors-surface).
canvas
var(--sk-colors-canvas)surface
var(--sk-colors-surface)surfaceRaised
var(--sk-colors-surfaceRaised)text
var(--sk-colors-text)textMuted
var(--sk-colors-textMuted)border
var(--sk-colors-border)hardShadow
var(--sk-colors-hardShadow)disabled
var(--sk-colors-disabled)backdrop
var(--sk-colors-backdrop)focus
var(--sk-colors-focus)success
var(--sk-colors-success)warning
var(--sk-colors-warning)danger
var(--sk-colors-danger)info
var(--sk-colors-info)paper
var(--sk-colors-paper)paperAlt
var(--sk-colors-paperAlt)paperBright
var(--sk-colors-paperBright)ink
var(--sk-colors-ink)inkSoft
var(--sk-colors-inkSoft)pencil
var(--sk-colors-pencil)accentYellow
var(--sk-colors-accentYellow)accentBlue
var(--sk-colors-accentBlue)accentRed
var(--sk-colors-accentRed)accentGreen
var(--sk-colors-accentGreen)accentLavender
var(--sk-colors-accentLavender)SHAPE & MOTION
{
"border": {
"compact": 2,
"default": 3
},
"radii": {
"none": 0,
"sm": 4,
"md": 8,
"sketchSm": 0,
"sketchMd": 4,
"sketchLg": 8
},
"shadow": {
"offsetSm": 3,
"offsetMd": 4
},
"motion": {
"fast": 80,
"default": 140,
"slow": 160
}
}