gökberk.

design system · v2 · neutral-led

gökberk. What it's made of.

I'm not a brand. I built the design system anyway — minimal and editorial, now neutral-led: paper and ink do the work, a forest-green stamp marks what matters, and two accents earn their place only where they mean something. Every pairing holds WCAG AAA in both themes.

Principles

A few rules I follow

The whole system descends from these. When a case isn't covered, I derive it from them.

Take things away first

The default answer is less. A part earns its place or it goes. Restraint is the style.

Keep the page quiet

Neutral leads — paper, ink, and grey carry ~70%+ of any view. Calm is the baseline, not the exception.

Neutral leads, colour earns a job

Every colour stands for one specific thing, written down. Colour earns attention by being rare.

Lines and space, not boxes

Structure comes from hairlines and whitespace. One frame per surface; shadows don't do a border's job.

Calm, precise motion

Movement is quick and purposeful — it explains a change, never decorates. It yields to reduced-motion.

Readable from the start

AAA contrast, real focus rings, status by shape and word — accessibility is a gate, not a polish pass.

Colour

Neutral leads. Colour means something.

The palette is closed at three heroes, each with a single named job. Neutral does the work; the brand is a stamp; accents are rationed to meaning. A new colour is a brand decision, never a per-screen call.

Neutral leads. The brand is a stamp. Accents are rationed to meaning. Every colour has a job.

01 — Surface · the neutral field that does the work

canvasthe page itselfpage background, ~70% of any view
surfacecards & panelsraised content on the canvas
surface-strongsoft controls, chipsfilled neutral controls
borderthe hairline rulestructure: lines, not boxes

02 — Text · tiered by emphasis

ink (text)primary textheadings & body, ~18:1
mutedsecondary textintros, captions — still AAA
disabledinactive textnever for content that must be read

03 — Action · the primary is NEUTRAL

primarythe primary actionblack on light, white on darknever coloured "because it's on brand"

04 — Brand · the forest stamp

brandforest greenthe dot, links, focus, success, the one brand buttonnever a background wash / wallpaper
accent-subtlebrand washselected-row tint, the default tagnot a fill that competes with the page

05 — Product accent · turquoise & sunset, rationed to meaning

turquoiseinfo / data / the seainformational meaning, data seriesdecoration; never a fill
turquoise-brightcrystal fill stopreserved — data-viz / illustration, no component yet
sunsetfeatured / warm beatone featured mark per viewnever a fill; one warm beat only
sunset-brightglow fill stopreserved — illustration, no component yet

06 — Status · always shape + word + colour, never colour alone

successpositiveforest-family, with an icon + word
warningcautionicon / rule only (documented AA)
errornegativeoutline / text treatmentnever a solid red fill
info= turquoiseinformational callouts

In use — neutral leads, the stamp marks, accents mean

Project setup

Neutral carries the surface and the primary action; the brand button is the one forest stamp, and the link is forest too.

Save Get started Cancel

Turquoise carries information

Info and data series read in turquoise — a rule and an icon on a neutral surface, never a saturated fill.

Proof — computed live, in the active theme

Text on canvas — recomputed when you flip the theme
RoleSampleRatioLevel
ink → canvas
muted → canvas
link (forest) → canvas
turquoise → canvas
sunset → canvas
Text on colour — the on-color rule (paper on dark fills, ink on light)
PairingSampleRatioLevel
on neutral action
on brand
on turquoise
on sunset

Typography

Geist, and Geist Mono

One family for display and text; hierarchy from weight, size, and tracking. Geist Mono carries labels, eyebrows, and code.

expressive Quiet, precise.
headline-2 A studio identity
headline-4 Minimal & editorial
body-intro The intro line that opens a section, a touch larger than the body.
body-regular The reading body — set to a comfortable measure, never the full canvas width.
eyebrow (mono) Section label

Space

One scale, named by use

A 4px-baseline scale in rem, with semantic names (inset, stack, inline, section) over the raw steps. Whitespace is a material.

space-200 · 8
space-400 · 16
space-600 · 32
space-800 · 48
space-1000 · 96

Shape

Corners and borders

Crisp, small radii — 8px is the editorial control radius, not a pill. Hairline borders carry structure; pills are reserved for tags and avatars.

2px
8px
12px
pill

Motion

Durations and curves

Three easing curves that never borrow from each other — precise to enter, dynamic to exit, standard for symmetric micro-states. Sub-300ms transitions; ambient loops in seconds. Honours reduced-motion.

precise · enter

dynamic · exit

standard · micro

State & status

States swap strength, not hue

Hover and active swap a surface role; focus draws the forest ring; selected is the neutral action. Status is conveyed by a rule, an icon, and a word — never colour alone, never a full fill.

Heads upTurquoise carries information. SavedForest is the success stamp. FeaturedSunset marks the one warm beat.
Neutral Info Success Warning Error Featured

Accessibility

AAA, by the numbers

Accessibility is verified, not assumed — every colour pairing, every component, both themes.

AAA
contrast target, both themes
7:1
minimum for body text
2
themes, one attribute switch
axe
on every component, in real browsers