Token reference Porchlight CSS

Spacing, Radius & Motion

52 components 51 stable 1 experimental

Command

Search Porchlight

Spacing, Radius & Motion Tokens

Spacing scale

A t-shirt-sized scale based on rem (not px) for accessibility:

TokenValueUsage
--pl-space-00No gap
--pl-space-10.25rem (4px)Inline gaps, icon insets
--pl-space-20.5rem (8px)Compact padding
--pl-space-30.75rem (12px)Default button padding, field gaps
--pl-space-41rem (16px)Card padding, section spacing
--pl-space-51.25rem (20px)Larger card padding
--pl-space-61.5rem (24px)Sidebar gaps, section breaks
--pl-space-82rem (32px)Large section spacing
--pl-space-102.5rem (40px)Page-level spacing
--pl-space-123rem (48px)Hero spacing

Radius scale

TokenValueUsage
--pl-radius-xs0.25remSmall chips, badges
--pl-radius-sm0.375remInputs, small buttons
--pl-radius-md0.5remDefault controls
--pl-radius-lg0.75remCards, panels
--pl-radius-xl1remLarge containers
--pl-radius-2xl1.5remSoft cards, dialogs
--pl-radius-3xl2remLarge expressive surfaces
--pl-radius-pill999remAvatars, pills, toggle switches

--pl-radius-control defaults to --pl-radius-md and drives interactive control corners globally.

Motion

All durations multiply by --pl-motion-scale, which drops to 0 under prefers-reduced-motion: reduce:

TokenBaseAt scale=1Purpose
--pl-duration-1120ms120msFast: hover, focus
--pl-duration-2180ms180msDefault: open, close, slide
--pl-duration-3260ms260msSlow: width transitions, large reveals

Easing

TokenCurveCharacter
--pl-ease-standardcubic-bezier(0.2, 0, 0, 1)Smooth, natural deceleration
--pl-ease-emphasizedcubic-bezier(0.2, 0, 0, 1.2)Slight overshoot, playful

Z-index scale

TokenValueUsage
--pl-z-base0Default content
--pl-z-raised10Sticky headers, sticky table rows
--pl-z-sticky100Sticky bars, sticky-shell
--pl-z-overlay1000Dialogs, drawers, popovers
--pl-z-toast1100Toast notifications (above overlays)

Control geometry

TokenDefaultPurpose
--pl-control-block-size2.5remInput/button height
--pl-control-padding-inline--pl-space-4Horizontal padding
--pl-control-gap--pl-space-2Internal gap (icon + label)
--pl-control-border-width1pxBorder thickness
--pl-control-radius--pl-radius-controlCorner radius

Density presets (data-density) override these:

DensityBlock sizePadding inlineGap
compact2rem--pl-space-3--pl-space-1
comfortable (default)2.5rem--pl-space-4--pl-space-2
touch2.75rem--pl-space-5--pl-space-2

Shadows

TokenValueUsage
--pl-shadow-10 1px 2px oklch(0% / 12%)Cards, subtle elevation
--pl-shadow-20 6px 18px oklch(0% / 16%)Hovered cards, sticky bars
--pl-shadow-30 16px 48px oklch(0% / 20%)Popovers, dialogs

Registered properties

Three custom properties are registered with @property so they animate smoothly and inherit predictably:

PropertySyntaxInitialPurpose
--pl-motion-scale<number>1Global motion multiplier (0 = no motion)
--pl-radius-control<length>8pxControl corner radius fallback
--pl-focus-size<length>2pxFocus ring thickness