Skip to content

Theme tokens

Every value the theme renders comes from one of these CSS custom properties. They are the public styling API: set any of them from the stylesheet you point css at, and the whole site follows.

Overriding

Your stylesheet loads after the theme's, and the theme's own CSS is wrapped in a @layer ocx cascade layer. Any rule you write is unlayered, and an unlayered rule beats a layered one at any specificity — so you never need !important and never need to out-specify an internal selector.

:root {
  --ocx-color-accent: #2563eb;
  --ocx-radius-lg: 0; /* square corners everywhere */
}

.dark {
  --ocx-color-accent: #60a5fa;
}

Set both blocks. :root and .dark have the same specificity and both match <html>, so a :root-only override wins in dark mode too and pins that token to its light value. Overriding only :root is the single most common way to accidentally break dark mode.

A token whose default is shown as var(--ocx-…) is an alias: it follows whatever that token resolves to, in both colour schemes, so it needs no .dark entry of its own.

Surfaces and borders

Token Light Dark
--ocx-color-bg #f6f7f9 #0e1116
--ocx-color-surface #ffffff #151a22
--ocx-color-surface-subtle #eff2f5 #1c232d
--ocx-color-border #e2e6ec #252d39
--ocx-color-overlay rgba(15, 18, 23, 0.55) —

Foreground

Token Light Dark
--ocx-color-fg #1b2129 #e7ebf1
--ocx-color-fg-muted #4b5665 #9aa5b3
--ocx-color-fg-subtle #636e7f #606c7c

Accent

Token Light Dark
--ocx-color-accent #ff6047 #ff6047
--ocx-color-accent-hover #ff8570 #ff8570
--ocx-color-accent-fg #d11c00 #ff6047
--ocx-color-accent-tint rgba(255, 96, 71, 0.1) rgba(255, 96, 71, 0.1)
--ocx-color-accent-tint-border rgba(255, 96, 71, 0.55) rgba(255, 96, 71, 0.55)

Status

Token Light Dark
--ocx-color-success #0a7652 #3edea6
--ocx-color-warning #926512 #fab833
--ocx-color-warning-tint rgba(250, 184, 51, 0.16) rgba(250, 184, 51, 0.1)
--ocx-color-keyword #6a55ce #c0b3ff
--ocx-color-keyword-tint rgba(111, 91, 208, 0.09) rgba(192, 179, 255, 0.1)

Code

Token Light Dark
--ocx-color-code-bg #f6f8fa #14181f
--ocx-color-code-fg #1b2129 #c8d0da
--ocx-color-code-comment var(--ocx-color-fg-subtle) (alias) —
--ocx-color-code-keyword var(--ocx-color-keyword) (alias) —
--ocx-color-code-string var(--ocx-color-success) (alias) —
--ocx-color-code-number var(--ocx-color-warning) (alias) —
--ocx-color-code-function var(--ocx-color-fg) (alias) —
--ocx-color-code-variable var(--ocx-color-fg-muted) (alias) —
--ocx-color-code-deleted var(--ocx-color-accent-fg) (alias) —

Monogram

Token Light Dark
--ocx-color-monogram-0 #c53a24 #ff8570
--ocx-color-monogram-0-tint rgba(255, 96, 71, 0.1) rgba(255, 96, 71, 0.14)
--ocx-color-monogram-1 #0a7652 #3edea6
--ocx-color-monogram-1-tint rgba(14, 159, 110, 0.1) rgba(62, 222, 166, 0.12)
--ocx-color-monogram-2 #6f5bd0 #c0b3ff
--ocx-color-monogram-2-tint rgba(111, 91, 208, 0.1) rgba(192, 179, 255, 0.12)
--ocx-color-monogram-3 #8f610f #fab833
--ocx-color-monogram-3-tint rgba(250, 184, 51, 0.16) rgba(250, 184, 51, 0.12)

Type

Token Value
--ocx-font-sans 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, sans-serif
--ocx-font-mono 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace
--ocx-text-2xl 26px
--ocx-text-xl 23px
--ocx-text-lg 18px
--ocx-text-md 14.5px
--ocx-text-base 13px
--ocx-text-sm 12.5px
--ocx-text-xs 11.5px
--ocx-text-2xs 10.5px
--ocx-font-weight-regular 400
--ocx-font-weight-medium 500
--ocx-font-weight-semibold 600
--ocx-font-weight-bold 700

Shape and space

Token Value
--ocx-radius-sm 4px
--ocx-radius-md 6px
--ocx-radius-lg 8px
--ocx-radius-full 999px
--ocx-space-1 2px
--ocx-space-2 4px
--ocx-space-3 8px
--ocx-space-4 12px
--ocx-space-5 16px
--ocx-space-6 24px
--ocx-space-7 32px
--ocx-space-8 40px
--ocx-space-9 48px
--ocx-space-10 64px
--ocx-space-11 80px
--ocx-header-height 54px
--ocx-shadow-overlay 0 4px 16px rgb(0 0 0 / 0.12)
--ocx-border-width 1px
--ocx-border-width-emphasis 1.5px
--ocx-border-width-strong 2px
--ocx-border-width-marker 3px

Motion

Token Value
--ocx-duration-fast 0.1s
--ocx-duration-enter 0.12s
--ocx-duration-base 0.15s
--ocx-duration-moderate 0.2s
--ocx-duration-slow 0.3s
--ocx-duration-shimmer 1.6s

Stacking

Token Value
--ocx-z-drawer-backdrop 40
--ocx-z-drawer 44
--ocx-z-drawer-close 45
--ocx-z-popover 100
--ocx-z-modal 101
--ocx-z-toast 200
--ocx-z-skip-link 300