Foundations
Tokens
Complete CSS custom property reference for the Blanc design system. Tokens are defined in packages/ui/src/tokens/tokens.css and available globally. Reference Colors, Typography, and Spacing for those dedicated sections.
This page covers the remaining token groups: shadows, animation, and grid/layout tokens, plus the dark mode and forced section theme overrides.
Shadows
Seven levels. Use the lightest shadow that creates the necessary depth — avoid stacking shadows.
--shadow-xs0 1px 2px 0 rgba(0,0,0,0.04)Focused inputs, subtle lift
--shadow-sm0 1px 2px 0 rgba(0,0,0,0.05)Buttons, chips
--shadow-md0 4px 6px -1px rgba(0,0,0,0.08)Cards, dropdowns
--shadow-lg0 10px 15px -3px rgba(0,0,0,0.08)Modals, popovers
--shadow-xl0 20px 25px -5px rgba(0,0,0,0.08)Floating panels
--shadow-2xl0 25px 50px -12px rgba(0,0,0,0.18)Full-screen overlays
--shadow-innerinset 0 2px 4px 0 rgba(0,0,0,0.06)Inset inputs, pressed states
Duration
Four named durations. Always pair with an easing — never use linear for UI motion.
--duration-fast150msMicro-interactions — hover states, toggles
--duration-normal250msComponent transitions — modals, drawers
--duration-slow400msPage-level transitions
--duration-slower600msAmbient / decorative motion
Easing
Four named curves. ease-out for entering, ease-in for exiting, ease-default for in-place transitions.
--ease-defaultcubic-bezier(0.4, 0, 0.2, 1)Standard — most transitions
--ease-incubic-bezier(0.4, 0, 1, 1)Exiting elements
--ease-outcubic-bezier(0, 0, 0.2, 1)Entering elements
--ease-springcubic-bezier(0.34, 1.56, 0.64, 1)Bouncy / playful
Grid & Layout
Container widths, gutters, and margins. These are set on :root and scale responsively via media queries.
--container-sm640pxSmall container width
--container-md768pxMedium container width
--container-lg1024pxLarge container width
--container-xl1280pxXL container width
--container-2xl1440pxMax container width
--gutter32px (responsive)Active column gutter — scales up at each breakpoint
--margin24px (responsive)Page margin — space from viewport edge to grid
--gap-gallery32pxGap between gallery rows and cards
Dark Mode Strategy
Dark mode uses a CSS class strategy — add .dark to <html> to activate. Only the semantic role tokens flip — numeric scales stay constant. A synchronous <script> in layout.tsx reads localStorage before first paint to prevent FOUC.
Light
background#FFFFFFsurface#F7F6F3border#DEDED9accent#0057FFforeground#0A0A0ADark
background#0D0D0Bsurface#181816border#252523accent#4B8EFFforeground#EEEEE8Forced Section Themes
Individual page sections can be forced to light or dark regardless of the global toggle. Apply data-theme="dark" or data-theme="light" to any element — CSS variables cascade down to all children. Used by the Sanity page builder textSection and imageSection blocks.
data-theme="light"Forces light palette. Overrides .dark on <html>.
data-theme="dark"Forces dark palette regardless of global mode.