Skip to content

Shadows

Component Usage

The design system maps specific shadow levels to component categories:

Shadow

Components
shadow-0

Flat elements, disabled states, mobile resets

shadow-1

Buttons (rest state), form inputs, subtle UI

shadow-2

Cards, containers, default elevation

shadow-3

Toasts, elevated cards, hover states

shadow-4

Dropdowns, popovers, tooltips, context menus

shadow-5Dialogs, drawers, modal overlays
shadow-6

Full-screen overlays, maximum emphasis

shadow-inner

Inset containers, recessed surfaces

CSS Variables

All shadow tokens are available as CSS custom properties:

/* Shadow definitions */
var(--cn-shadow-0) /* none */
var(--cn-shadow-1) /* subtle */
var(--cn-shadow-2) /* default */
var(--cn-shadow-3) /* medium */
var(--cn-shadow-4) /* prominent */
var(--cn-shadow-5) /* strong */
var(--cn-shadow-6) /* maximum */
var(--cn-shadow-inner) /* inset */
/* Shadow colors (for custom shadows) */
var(--cn-shadow-color-0)
var(--cn-shadow-color-1)
/* ... through shadow-color-6 and shadow-color-inner */

Tailwind Utilities

Use the shadow-cn-{level} utilities in Tailwind:

<div className="shadow-cn-2">Default card shadow</div>
<div className="shadow-cn-4">Dropdown shadow</div>
<div className="shadow-cn-inner">Inset shadow</div>
<div className="shadow-cn-none">No shadow</div>
{/* Combine with hover for interactive elevation */}
<div className="shadow-cn-2 hover:shadow-cn-4 transition-shadow">
Elevates on hover
</div>

Token Architecture

Each shadow level is composed of two parts:

  1. shadow-color.{n} — a color token with an alpha modifier applied in LCH color space
  2. shadow.{n} — a boxShadow token referencing shadow-color.{n} with offset/blur/spread values

This separation means shadow geometry stays constant across themes, while shadow intensity adapts automatically.

TokenLightDark
shadow-color.0gray.600 / alpha 0pure.black / alpha 0
shadow-color.1gray.600 / alpha 0.13pure.black / alpha 0.6
shadow-color.2gray.600 / alpha 0.13pure.black / alpha 0.6
shadow-color.3gray.600 / alpha 0.08pure.black / alpha 0.5
shadow-color.4gray.600 / alpha 0.08pure.black / alpha 0.5
shadow-color.5gray.600 / alpha 0.08pure.black / alpha 0.5
shadow-color.6gray.600 / alpha 0.10pure.black / alpha 0.6
shadow-color.innerpure.black / alpha 0.15pure.black / alpha 0.6

Elevation Scale

Seven levels (0–6) plus an inner shadow provide a complete elevation vocabulary.

Shadow Geometry

Each level defines specific offset, blur, and spread values. Levels 2–5 use dual-layer shadows (two box-shadow values) for more natural depth.

LevelCSS ValueLayers
shadow-00 0 0 0Single
shadow-10 1px 2px 0Single
shadow-2

0 1px 3px 0 , 0 1px 15px -1px

Dual
shadow-3

0 4px 6px -1px , 0 2px 8px -2px

Dual
shadow-4

0 10px 15px -3px , 0 4px 8px -4px

Dual
shadow-5

0 20px 25px -5px , 0 8px 10px -6px

Dual
shadow-60 25px 50px -12pxSingle
shadow-innerinset 0 0 4.5px 0Single (inset)