KSF Design Language

One palette, one type scale, one set of components across every KSF site. Everything on this page is rendered by ksf.css — if it looks right here, it looks right in the apps.

Planes

Four background levels. The page sits lowest; each step reads as slightly nearer the viewer. Never stack more than three in one view.

--page
#131312
--surface
#1a1a19
--surface-2
#242423
--surface-hover
#2e2e2c

Ink

Four tiers, dimmest last. Primary ink is #e6e4db, not white — the low-contrast pairing is deliberate and must not be "fixed". Below --faint, use an icon rather than text.

--ink · primary text, headings, values
--ink-2 · secondary text
--muted · labels, captions, axis text
--faint · placeholders, disabled, decorative glyphs

Accent & status

One blue, and it always means "interactive". The three status colours carry meaning — good, warning, critical — and are never used decoratively. Each has a -wash variant for fills behind text.

--accent
#3987e5
--ok
#0ca30c
--warn
#fab219
--down
#d03b3b
Accent Running Degraded Failed Neutral

Type

Inter where it loads, the system stack where it doesn't. Seven sizes — anything else is a bug.

--text-xl · section titles
--text-lg · card headings
--text-md · emphasis
--text-base · body copy, the default
--text-sm · controls, dense UI
--text-xs · badges, captions
--font-mono · paths, commands, IDs, log lines

Radius & space

Five radii, six spacing steps on a 4px rhythm. A new magic number is a bug, not a design decision.

--r-xs · 4px
badges, tight chips
--r-sm · 8px
buttons, fields
--r-md · 12px
cards, tiles
--r-lg · 16px
modals, search bar
--r-pill
chips, status pills
1
2
3
4
5
6

Buttons

Secondary is the default. Exactly one .primary per view — the action you actually want taken.

Fields & chips

One focus treatment across the estate: accent border plus a soft ring.

Cards & meters

Cards carry a hairline border, not a shadow — shadow is reserved for things that genuinely float. Meter fill follows status.

Storage
412 GB / 1 TB
Memory
14.2 GB / 16 GB
Interactive
Hover me — lifts, borders accent.

Toast

Transient confirmation, bottom centre, gone in 2.5s. Never for anything the user must act on.