Skip to content
Glasspage.studio

Design system foundations

Built on shadcn/ui and Tailwind CSS v4. Tokens live in src/index.css.

Colors

Semantic color tokens designed for clarity and calm interfaces across light and dark modes.

Brand

Color tokenLight valueDark valuePreview
bg-brandoklch(0.50 0.20 260)oklch(0.50 0.20 260)
border-brand-borderoklch(0.90 0.05 260)oklch(0.35 0.05 260)
bg-brand-bgoklch(0.95 0.02 260)oklch(0.25 0.02 260)
text-brand-foregroundoklch(0.98 0 0)oklch(0.93 0 0)

Actions

Color tokenLight valueDark valuePreview
bg-primaryoklch(0.10 0 0)oklch(0.90 0 0)
text-secondary-foregroundoklch(0.10 0 0)oklch(0.93 0 0)
text-accent-foregroundoklch(0.10 0 0)oklch(0.93 0 0)
bg-secondaryoklch(0.95 0 0)oklch(0.25 0 0)
bg-accentoklch(0.95 0 0)oklch(0.25 0 0)
text-primary-foregroundoklch(0.98 0 0)oklch(0.20 0 0)

Page and surfaces

Color tokenLight valueDark valuePreview
text-foregroundoklch(0.10 0 0)oklch(0.93 0 0)
text-card-foregroundoklch(0.10 0 0)oklch(0.93 0 0)
text-popover-foregroundoklch(0.10 0 0)oklch(0.93 0 0)
bg-background-vividoklch(0.98 0 0)oklch(0.17 0 0)
bg-backgroundoklch(0.99 0 0)oklch(0.15 0 0)
bg-cardoklch(0.99 0 0)oklch(0.20 0 0)
bg-popoveroklch(0.99 0 0)oklch(0.20 0 0)
bg-app-bgoklch(1 0 0)oklch(0 0 0)

Muted

Color tokenLight valueDark valuePreview
text-muted-foregroundoklch(0.50 0 0)oklch(0.70 0 0)
text-outlineoklch(0.7 0 0)oklch(0.55 0 0)
bg-muted-vividoklch(0.92 0 0)oklch(0.25 0 0)
bg-mutedoklch(0.95 0 0)oklch(0.25 0 0)

Semantic

Color tokenLight valueDark valuePreview
bg-destructiveoklch(0.50 0.20 27.325)oklch(0.70 0.19 22.216)
bg-warningoklch(0.70 0.15 70)oklch(0.60 0.15 70)
text-destructive-foregroundoklch(0.98 0 0)oklch(0.93 0 0)
text-warning-foregroundoklch(0.98 0 0)oklch(0.93 0 0)

Borders and inputs

Color tokenLight valueDark valuePreview
ring-ringoklch(0.50 0 0)oklch(0.55 0 0)
border-borderoklch(0.90 0 0)oklch(0.30 0 0)
border-inputoklch(0.90 0 0)oklch(0.20 0 0)
border-border-mutedoklch(0.95 0 0)oklch(0.20 0 0)

Sidebar

Color tokenLight valueDark valuePreview
text-sidebar-foregroundoklch(0.145 0 0)oklch(0.985 0 0)
border-sidebar-borderoklch(0.92 0 0)oklch(0.25 0 0)
bg-sidebar-accentoklch(0.94 0 0)oklch(0.23 0 0)
bg-sidebaroklch(0.97 0 0)oklch(0.19 0 0)

Charts

Color tokenLight valueDark valuePreview
fill-chart-1oklch(0.20 0 0)oklch(0.92 0 0)
fill-chart-2oklch(0.35 0 0)oklch(0.78 0 0)
fill-chart-3oklch(0.50 0 0)oklch(0.64 0 0)
fill-chart-4oklch(0.62 0 0)oklch(0.50 0 0)
fill-chart-5oklch(0.74 0 0)oklch(0.38 0 0)

Typography

A clean, hierarchical type scale built with Inter (--font-sans) for optimal readability.

NameSizeWeightColor tokenPreview
D1text-9xl (128px)font-semibold (600)text-foreground
D2text-7xl (72px)font-semibold (600)text-foreground
D3text-5xl (48px)font-semibold (600)text-foreground
H1text-4xl (36px)font-semibold (600)text-foreground
H2text-2xl (24px)font-semibold (600)text-foreground
H3text-base (16px)font-semibold (600)text-foreground
Titletext-sm (14px)font-semibold (600)text-foreground
Subtitletext-sm (14px)font-normal (400)text-muted-foreground
Bodytext-sm (14px)font-normal (400)text-foreground
Labeltext-xs (12px)font-medium (500)text-muted-foreground

Spacing

Padding, gaps, and margins in 4px steps. Use the table to find the right class and use case.

NamePixelsClassesUse casesPreview
14pxp-1, gap-1Icon padding
28pxp-2, gap-2Compact card padding
416pxp-4, gap-4Default margin and padding
624pxp-6, gap-6Modal padding
832pxp-8, gap-8Section spacing

Corner rounding

One base value sets every corner size: --radius at 0.625rem (10px). Sm subtracts 4px, md subtracts 2px, lg matches the base, xl adds 4px. Full is a fixed pill (9999px), not derived from the base.

NamePixelsClassesCalculationPreview
sm6pxrounded-smcalc(var(--radius) - 4px)
md8pxrounded-mdcalc(var(--radius) - 2px)
lg10pxrounded-lgvar(--radius)
xl14pxrounded-xlcalc(var(--radius) + 4px)
full9999pxrounded-full9999px

Elevation

Shadow shows what sits above what. Use flat for the page, raised for cards, and overlay for menus and dialogs. Use elevation sparingly, too much shadow adds noise and pulls focus from the content.

NameShadowPreview
Flatno shadow
Raisedshadow-sm
Overlayshadow-lg

Button sizing

Interactive elements share a compact scale in 4px steps, from 24px to 36px. Use xs and sm in dense UI, default for most controls, and lg when a target needs more presence.

NamePixelsClassesPreview
xs24pxh-6, w-6, size-6
sm28pxh-7, w-7, size-7
default32pxh-8, w-8, size-8
lg36pxh-9, w-9, size-9

Icons

Use Lucide React outline icons at 16px with a 2px stroke. This matches shadcn and keeps every icon consistent and balanced.

AttributeSpecificationPreview
LibraryLucide React
Sizesize-4 (16px)
StrokestrokeWidth={2}
Styleoutline only

Feedback states

Feedback states show users that their action worked. They confirm clicks, highlight focus, and signal when something is disabled, loading, or wrong.

StateClassesPreview
Hoverhover:bg-muted/50
Pressactive:translate-y-px
Activeactive:bg-muted, active:text-foreground
Focusfocus-visible:ring-3, focus-visible:ring-ring/50
Disableddisabled:opacity-25, disabled:pointer-events-none
Invalidaria-invalid:border-destructive, aria-invalid:ring-destructive/20
LoadingSkeleton, Loader2 with animate-spin
Destructivevariant="destructive"

Responsiveness

Users need apps to work across many window sizes. Many desktop users work with two windows side by side. The layout must adapt at breakpoints to stay readable and usable.

NameMin widthPrefixPreview
sm640pxsm:
md768pxmd:
lg1024pxlg:

Page layout

Area nameUse casePreview
Left sidebarGlobal navigation
Right sidebarAI chat
ToolbarPage actions and controls
Primary paneMain content for selected page
Secondary paneSupporting content in a split view

Read the rest of the design system

Enter your details to unlock the remainder of this page, plus the principles, foundations, components and interactions pages in full.

By pressing unlock, you consent to receive emails from us.