Capability
Design System & Token Architecture
A token-driven design system compiled from a single JSON source, distributed as a versioned npm package, and consumed at runtime through CSS custom properties with live theme switching.
Build & Distribution Pipeline
How tokens travel from a single JSON source of truth into production code.
Define in JSON
Tokens are authored in standardized JSON files adhering to the W3C Design Token Community Group (DTCG) specification.
Compile with Style Dictionary
Style Dictionary transforms the token JSON into CSS Custom Properties (--ksv-ds-*) and strongly-typed TypeScript constants.
Publish to NPM Registry
Packaged and versioned as @svinayaka/siddi-design-system on GitHub Packages with automated CI releases.
Consume with Zero JS Overhead
Imported via native CSS @layer tokens, themes;. Theme switching executes via data-ksv-ds-theme without JavaScript runtime recalculations.
Token Architecture (3-Tier Hierarchy)
Tokens are decoupled into three distinct layers of abstraction to ensure scalability, effortless dark-mode switching, and safe component-level overrides.
Primitives
Raw, literal values with zero design context. Includes 15-hue color scales (50-950), 4px spacing scale, font scales, radii, and shadows.
--ksv-ds-color-indigo-600: #4f46e5;--ksv-ds-space-4: 1rem;Semantics
System-wide roles and intent. Aliases Layer 1 primitives and automatically swaps values between Light and Dark modes without changing component markup.
--ksv-ds-interactive-primary--ksv-ds-bg-surfaceComponents
Scoped directly to individual component anatomy (Button, Input, Badge, Card). Enables isolated styling overrides without affecting global semantics.
--btn-primary-bg: var(--interactive-primary);--input-border: var(--border-default);Primitive color scales (Layer 1)
15 hue families, each with an 11-step scale (50–950). Every value is a raw primitive token with zero contextual meaning; components never reference these directly — they are aliased by Layer 2 semantic tokens instead.
Semantic colors (Layer 2)
System-wide roles and intent. These tokens alias Layer 1 primitives and automatically swap values between Light and Dark themes without changing component markup.
--ksv-ds-bg-canvas--ksv-ds-bg-surface--ksv-ds-bg-surface-elevated--ksv-ds-bg-surface-sunken--ksv-ds-bg-subtle--ksv-ds-bg-muted--ksv-ds-text-primary--ksv-ds-text-secondary--ksv-ds-text-tertiary--ksv-ds-text-muted--ksv-ds-text-inverse--ksv-ds-text-brand--ksv-ds-text-link--ksv-ds-border-subtle--ksv-ds-border-default--ksv-ds-border-strong--ksv-ds-border-focus--ksv-ds-interactive-primary--ksv-ds-interactive-primary-hover--ksv-ds-interactive-secondary--ksv-ds-interactive-accent--ksv-ds-interactive-danger--ksv-ds-interactive-disabled--ksv-ds-status-success-bg--ksv-ds-status-warning-bg--ksv-ds-status-danger-bg--ksv-ds-status-info-bgComponent tokens (Layer 3)
Component-scoped tokens isolate styling to a single component's anatomy and states. They map directly to Layer 2 semantic tokens, enabling independent customization without affecting the rest of the design system.
Button
--btn-*--btn-primary-bg→var(--ksv-ds-interactive-primary)--btn-hover-bg→var(--ksv-ds-interactive-primary-hover)--btn-text→var(--ksv-ds-interactive-primary-text)--btn-radius→var(--ksv-ds-radius-md)Form Input
--input-*--input-bg→var(--ksv-ds-bg-surface)--input-border→var(--ksv-ds-border-default)--input-focus-border→var(--ksv-ds-border-focus)--input-radius→var(--ksv-ds-radius-md)Badge / Tag
--badge-*--badge-bg→var(--ksv-ds-status-success-bg)--badge-border→var(--ksv-ds-status-success-border)--badge-text→var(--ksv-ds-status-success-text)--badge-radius→var(--ksv-ds-radius-full)Card Surface
--card-*--card-bg→var(--ksv-ds-bg-surface-elevated)--card-border→var(--ksv-ds-border-subtle)--card-radius→var(--ksv-ds-radius-lg)--card-shadow→var(--ksv-ds-shadow-sm)Typography
Font families, a 12-step size scale, 7 weights, 6 line-height ratios, and 6 letter-spacing tokens — all consumed as tokens.
Spacing
A 4px-based scale from 0 to 8rem. Every margin, padding, and gap in the UI is drawn from these tokens — no arbitrary pixel values.
space-0var(--ksv-ds-space-0)space-1var(--ksv-ds-space-1)space-2var(--ksv-ds-space-2)space-3var(--ksv-ds-space-3)space-4var(--ksv-ds-space-4)space-5var(--ksv-ds-space-5)space-6var(--ksv-ds-space-6)space-8var(--ksv-ds-space-8)space-10var(--ksv-ds-space-10)space-12var(--ksv-ds-space-12)space-16var(--ksv-ds-space-16)space-20var(--ksv-ds-space-20)space-24var(--ksv-ds-space-24)space-32var(--ksv-ds-space-32)Radius
A 9-step radius scale from sharp (0) to fully rounded (9999px). Components pick a radius; you control the overall feel of the UI by changing one token.
radius-noneradius-xsradius-smradius-mdradius-lgradius-xlradius-2xlradius-3xlradius-fullElevation
Seven shadow tokens for consistent depth. Together with radius and border color, they define the visual “surface” of every component.
shadow-xsshadow-smshadow-mdshadow-lgshadow-xlshadow-2xlshadow-innerMotion
Curves and timing tokens that bring physics-based realism to interfaces. Click Play to watch each token shape the animation in real time.
var(--ksv-ds-ease-default)var(--ksv-ds-ease-in)var(--ksv-ds-ease-out)var(--ksv-ds-ease-in-out)var(--ksv-ds-ease-spring)var(--ksv-ds-duration-fast)var(--ksv-ds-duration-normal)var(--ksv-ds-duration-slow)var(--ksv-ds-duration-slower)How tokens compose into UI
Everything above is the raw vocabulary. Here's what happens when tokens compose into a real component — colors, spacing, radius, and typography all working together, with a live theme toggle.
Token-driven card
This card reads colors, spacing, radius, and typography from --ksv-ds-* tokens. Change a control above and the CSS variables update instantly.
--ksv-ds-interactive-primaryInteractivePrimary (#4f46e5)--ksv-ds-radius-demoRadiusLg (0.5rem)data-ksv-ds-themelightWhere this shipped
- PowerSchool — 60+ Web Components in a shared design system across React and Angular apps.
- Accessibility — Internal audit raised from 78% to 94% via WCAG 2.1 AA and VPAT evaluations. View Accessibility Capability →