Stylus/CSS Customization

pluralspace
pluralspace · May 30, 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-bgPage background#0c0618
--color-bg-2Sidebar / sunken surfaces#150d26
--color-surfaceCard / modal surface#1e1533
--color-surface-2Raised surface / hover#2a1f42
--color-surface-3Active / pressed#3a2a5a
--color-surface-4Subtle emphasis#4a3575
--color-surface-5Muted foreground#5b6478
--color-surface-6Placeholder tone#6c7288
--color-borderBorders / dividers#4a3575

Text

VariableControlsDark default
--color-text-headingHeadings, card titles#ffffff
--color-textPrimary body text#e5e5e5
--color-text-secondaryNames, secondary content#d4d4d4
--color-text-mutedDescriptions, meta#a3a3a3
--color-text-faintCaptions, disabled#737373

Accent & brand

VariableControlsDefault
--color-accentPrimary accent (buttons, links, highlights)var(--color-violet-600)
--color-accent-foregroundText/icons on top of an accent fill#ffffff
--color-accent-contentAccent used as foreground (text/icon)var(--color-violet-600)
--color-primaryAlias 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