Primitive tokens
Raw design scales, parsed live from
packages/porchlight/src/02-tokens.css at build time — so this
page can never drift from the source. Semantic colors (bg/surface/text/
border/accent/danger…) are included; theme, density, and forced-colors
overrides live in the themes preview.
Registered properties
@property gives these a type and initial value, so they animate
cleanly and inherit predictably.
| Name | Syntax | Inherits | Initial |
|---|---|---|---|
--pl-motion-scale | <number> | yes | 1 |
--pl-radius-control | <length> | yes | 8px |
--pl-focus-size | <length> | yes | 2px |
Fonts
-
--pl-font-sanssystem-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif -
--pl-font-monoui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace -
--pl-font-weight-normal400 -
--pl-font-weight-medium500 -
--pl-font-weight-semibold600 -
--pl-font-weight-bold700 -
--pl-font-weight-black900 -
--pl-text-xsclamp(0.75rem, 0.72rem + 0.1vi, 0.8125rem) -
--pl-text-smclamp(0.875rem, 0.84rem + 0.1vi, 0.9375rem) -
--pl-text-md1rem -
--pl-text-lgclamp(1.125rem, 1.05rem + 0.25vi, 1.25rem) -
--pl-text-xlclamp(1.25rem, 1.1rem + 0.55vi, 1.625rem) -
--pl-text-2xlclamp(1.5rem, 1.2rem + 1vi, 2rem) -
--pl-text-3xlclamp(1.875rem, 1.4rem + 1.6vi, 2.75rem) -
--pl-text-displayclamp(2.5rem, 1.8rem + 3vi, 4.5rem)
Leading
-
--pl-leading-tight1.15 -
--pl-leading-snug1.3 -
--pl-leading-normal1.5 -
--pl-leading-loose1.7
Spacing
-
--pl-space-00 -
--pl-space-10.25rem -
--pl-space-20.5rem -
--pl-space-30.75rem -
--pl-space-41rem -
--pl-space-51.25rem -
--pl-space-61.5rem -
--pl-space-82rem -
--pl-space-102.5rem -
--pl-space-123rem
Radius
-
--pl-radius-xs0.25rem -
--pl-radius-sm0.375rem -
--pl-radius-md0.5rem -
--pl-radius-lg0.75rem -
--pl-radius-xl1rem -
--pl-radius-2xl1.5rem -
--pl-radius-3xl2rem -
--pl-radius-pill999rem -
--pl-radius-controlvar(--pl-radius-md)
Motion
-
--pl-duration-1calc(120ms * var(--pl-motion-scale)) -
--pl-duration-2calc(180ms * var(--pl-motion-scale)) -
--pl-duration-3calc(260ms * var(--pl-motion-scale))
Asymmetric enter/exit: entries feel considered; exits feel snappy.
-
--pl-duration-entercalc(220ms * var(--pl-motion-scale)) -
--pl-duration-exitcalc(160ms * var(--pl-motion-scale)) -
--pl-ease-standardcubic-bezier(0.2, 0, 0, 1) -
--pl-ease-emphasizedcubic-bezier(0.2, 0, 0, 1.2) -
--pl-ease-springcubic-bezier(0.34, 1.56, 0.64, 1)
subtle overshoot
-
--pl-ease-deceleratecubic-bezier(0, 0, 0.2, 1)
enter: fast → slow
-
--pl-ease-acceleratecubic-bezier(0.4, 0, 1, 1)
Z-index
-
--pl-z-base0 -
--pl-z-raised10 -
--pl-z-sticky100 -
--pl-z-overlay1000 -
--pl-z-toast1100 -
--pl-brand-1oklch(97% 0.02 82deg) -
--pl-brand-2oklch(89% 0.05 82deg) -
--pl-brand-3oklch(80% 0.09 82deg) -
--pl-brand-4oklch(70% 0.13 82deg) -
--pl-brand-5oklch(63% 0.15 82deg) -
--pl-brand-6oklch(56% 0.14 82deg) -
--pl-brand-7oklch(48% 0.11 82deg) -
--pl-brand-8oklch(39% 0.07 82deg) -
--pl-brand-9oklch(29% 0.04 82deg) -
--pl-color-bglight-dark(oklch(98% 0.005 60deg), oklch(14% 0.008 55deg)) -
--pl-color-surfacelight-dark(oklch(100% 0 0deg), oklch(18% 0.008 55deg)) -
--pl-color-surface-2light-dark( oklch(94% 0.008 60deg), oklch(22% 0.012 55deg) ) -
--pl-color-textlight-dark(oklch(20% 0.012 55deg), oklch(96% 0.008 60deg)) -
--pl-color-text-mutedlight-dark( oklch(46% 0.015 55deg), oklch(72% 0.012 55deg) ) -
--pl-color-borderlight-dark( oklch(80% 0.015 55deg / 75%), oklch(45% 0.012 55deg / 30%) ) -
--pl-color-border-overlaytransparent -
--pl-color-accentlight-dark(var(--pl-brand-7), var(--pl-brand-4)) -
--pl-color-accent-textlight-dark(white, oklch(16% 0.01 55deg)) -
--pl-color-accent-hovercolor-mix( in oklab, var(--pl-color-accent), oklch(16% 0.01 55deg) 10% ) -
--pl-color-dangeroklch(60% 0.22 25deg) -
--pl-color-danger-bglight-dark( oklch(96% 0.04 25deg), oklch(22% 0.08 25deg) ) -
--pl-color-danger-textlight-dark( oklch(36% 0.18 25deg), oklch(90% 0.06 25deg) ) -
--pl-color-successoklch(58% 0.18 150deg) -
--pl-color-success-bglight-dark( oklch(96% 0.04 150deg), oklch(22% 0.08 150deg) ) -
--pl-color-success-textlight-dark( oklch(34% 0.15 150deg), oklch(82% 0.15 150deg) ) -
--pl-color-warningoklch(62% 0.19 75deg) -
--pl-color-warning-bglight-dark( oklch(96% 0.06 75deg), oklch(24% 0.09 75deg) ) -
--pl-color-warning-textlight-dark( oklch(40% 0.17 75deg), oklch(84% 0.15 75deg) )
Disabled state — uniform dimming for all disabled controls.
-
--pl-opacity-disabled0.5
Accent bar — the left/inline-start indicator for active/selected states.
-
--pl-accent-bar-width3px
Overlay scrim — the modal/dialog backdrop tint.
-
--pl-color-scrimoklch(0% 0 0deg / 55%) -
--pl-overlay-popover-bglight-dark( oklch(100% 0 0deg / 96%), oklch(17% 0.04 250deg / 94%) )
Menu rows — shared by anchored menu-like surfaces.
-
--pl-menu-row-min-block-size2.25rem -
--pl-menu-row-padding-inlinevar(--pl-space-3) -
--pl-menu-row-radiusvar(--pl-radius-sm) -
--pl-menu-row-hover-bgcolor-mix( in oklab, var(--pl-color-surface-2), var(--pl-color-accent) 10% ) -
--pl-menu-row-icon-size1rem
Controls
-
--pl-control-block-size2.5rem -
--pl-control-padding-inlinevar(--pl-space-4) -
--pl-control-gapvar(--pl-space-2) -
--pl-control-border-width1px -
--pl-control-radiusvar(--pl-radius-control)
Focus — aligned with the warm brand hue for a cohesive ring.
-
--pl-focus-colorlight-dark(oklch(52% 0.14 82deg), oklch(72% 0.13 82deg)) -
--pl-focus-offset2px -
--pl-focus-size2px -
--pl-focus-glow-opacity85% -
--pl-backdrop-blur12px -
--pl-backdrop-saturate160% -
--pl-backdrop-blur-strong20px -
--pl-backdrop-saturate-strong180% -
--pl-backdrop-blur-scrim4px -
--pl-backdrop-saturate-scrim80% -
--pl-shadow-10 1px 2px oklch(0% 0 0deg / 8%), 0 1px 4px oklch(30% 0.04 40deg / 6%) -
--pl-shadow-20 4px 8px oklch(0% 0 0deg / 8%), 0 8px 24px oklch(25% 0.06 40deg / 12%), inset 0 1px 0 oklch(100% 0 0deg / 6%) -
--pl-shadow-30 8px 16px oklch(0% 0 0deg / 10%), 0 24px 64px oklch(20% 0.08 40deg / 18%), inset 0 1px 0 oklch(100% 0 0deg / 8%)
Glow: accent-hued ring for focused/active primary controls.
-
--pl-shadow-glow0 0 0 4px color-mix(in oklab, var(--pl-color-accent), transparent 72%)