SoroPass

Theming

Restyle the entire SoroPass UI through one OKLCH token file, picking a skin or overriding tokens, while the components never change.

One OKLCH token file is the only styling surface for every SoroPass UI component. Pick a skin, override tokens, done. The components never change.

Skins

Two skins ship by default: light (the default :root) and dark. Set [data-theme="dark"] on any wrapping element; dark overrides only the values that change.

<div data-theme="dark">…</div>

Theme builder

The same data-theme swap re-themes every screen and state. No component code changes. Toggle light / dark below and the real component re-themes live; the :root block updates to paste straight into your app. Each preview on the Components page carries its own light / dark toggle too.

Interactive create preview

The real component runs in mock mode on the demo. Open the demo →

The builder exposes four axes: skin (light / dark), brand accent (indigo, teal, violet, …), corner radius, and density. It emits a :root override like the following:

:root {
  --pk-color-brand: oklch(0.55 0.18 264);
  --pk-radius-lg: 16px;
  --pk-radius-md: 12px;
  --pk-space-6: 24px;
}

Token reference

~70 tokens across these groups. The shipped tokens.css is canonical (note --pk-progress-duration: 1400ms).

GroupTokensPurpose
Color--pk-color-brand / -hover / -active / -on-brand / -softPrimary button, focus, accents
Color--pk-color-background / -surface / -surface-sunkenPage, card, wells
Color--pk-color-text / -muted / -faintText scale
Color--pk-color-border / -border-strongHairlines, inputs
Status--pk-color-success / -error / -info / -warning (+ -soft, -warning-line)Distinct: errors assertive, warnings advisory, progress calm
Shape--pk-radius-none … -fullCorner scale
Space--pk-space-0 … -10Spacing scale
Type--pk-font-sans / -mono, --pk-text-xs … -xl, --pk-weight-*Family, size, weight, leading
Focus--pk-focus-color / -width / -offset / -haloVisible focus ring
Busy--pk-busy-opacity, --pk-scrim, --pk-disabled-opacityOS-sheet dim + scrim
Spinner--pk-spinner-* , --pk-progress-* (--pk-progress-duration 1400ms)Working-state looks
Elevation--pk-shadow-sm/md/lg, --pk-z-card/overlay/toastLayers under the OS sheet
Motion--pk-ease, --pk-duration-fast/base/slow, --pk-pulse-durationTransitions + reduced-motion fallback

The token gate

A machine-enforced CI gate means passkey.css references only var() tokens. Restyle the whole set by overriding tokens, never by editing components.

On this page