Stylus/CSS Customization

Drexel
Drexel · June 10, 2026

PluralSpace's UI is built on a small set of CSS variables. Every color, corner radius, spacing scale, and font in the app reads from these tokens, so overriding them with a use style like Stylus can re-theme the whole app without limitations.


I want to give a warning first - these are not stable names, and can change. I will try to keep this updated if that happens.


How to override the variables

We set these tokens via the active theme, set on the <html>​ element via a data-theme​ attribute. If you want to override the values, you should either set them to :root​ and mark each as !important​.

css
:root { 
  --color-accent: #ff5fa2 !important; 
  --color-bg: #0a0a12 !important; 
  --radius-card: 1.5rem !important; 
  --font-sans: 'Comic Sans MS', cursive !important;
}

Do you want it to only apply to one theme?

Scope to that theme instead of :root​ then it only kicks in when you have that theme selected:

css
 html[data-theme="dark"] {
  --color-accent: #ff5fa2 !important;
}

Built-in themes you can scope to: light​, dark​, dim​, paper​, high-contrast​, sepia​, tron​, cyberpunk​, terminal​, space​, forest​ 

Tokens

Default values shown are from the dark theme; every theme overrides them.

Surfaces & borders

VariableControlsDark default
--color-bg​Page background#0c0618​
--color-bg-2​Sidebar / sunken surfaces#150d26​
--color-surface​Card / modal surface#1e1533​
--color-surface-2​Raised surface / hover#2a1f42​
--color-surface-3​Active / pressed#3a2a5a​
--color-surface-4​Subtle emphasis#4a3575​
--color-surface-5​Muted foreground#5b6478​
--color-surface-6​Placeholder tone#6c7288​
--color-border​Borders / dividers#4a3575​

Text

VariableControlsDark default
--color-text-heading​Headings, card titles#ffffff​
--color-text​Primary body text#e5e5e5​
--color-text-secondary​Names, secondary content#d4d4d4​
--color-text-muted​Descriptions, meta#a3a3a3​
--color-text-faint​Captions, disabled#737373​

Accent & brand

VariableControlsDefault
--color-accent​Primary accent (buttons, links, highlights)var(--color-violet-600)​
--color-accent-foreground​Text/icons on top of an accent fill#ffffff​
--color-accent-content​Accent used as foreground (text/icon)var(--color-violet-600)​
--color-primary​Alias of --color-accentvar(--color-accent)​

Changing --color-accent​ alone re-tints buttons, links, focus rings, activenav, and most highlights at once.

Status

VariableControlsDefault
--color-dangerErrors, destructive actions#ef4444
--color-successSuccess states#10b981
--color-warningWarnings#f59e0b

Corner radius

VariableControlsDefault
--radius-cardCards, modals, large panels1rem
--radius-fieldInputs, selects, textareas0.625rem
--radius-buttonButtons0.625rem

Small UI bits (badges, chips, menu items, dropdowns) use the Tailwind radius scale, which you can also override:

--radius-xs, --radius-sm, --radius-md, --radius-lg, --radius-xl, --radius-2xl, --radius-3xl, --radius-4xl

Set any/all of these to 0 for fully square corners (this is exactly what thesharp themes like tron/terminal do).


Density & spacing

VariableControlsDefault
--densityMaster compactness knob — scales padding and icons1
--icon-scaleIcon size multiplier (normally 1.25 × --density)1
--padding-cardCard inner padding (calc(1rem × --density))derived
--padding-fieldField inner padding (calc(0.625rem × --density))derived

--density is the one knob most people want: 0.85 = compact, 1 = normal,1.15 = comfortable. It cascades into paddings and icon sizes automatically.


Fonts

VariableControlsDefault
--font-sansBody / UI text'Instrument Sans', …, emoji fallbacks
--font-displayHeadings, titles, brand surfaces'Silkscreen', 'Courier New', monospace, …

Always keep the emoji-fallback fonts at the end of your stack('Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji')or emojis will render as missing-glyph boxes.


Was this helpful?

Related articles