gökberk. design system
Grid Baseline Columns Boxes
Density Regular Compact Condensed

px · regular

Composition lab

Do these agree with each other?

The gallery shows every component on its own. This page shows them together — thirteen banking screens built from nothing but gok-* elements and the token layer, with no per-screen tuning. Turn on the grid, change the density, flip the theme: if a row of five different controls stops sharing one height or one baseline, it shows up here first.

Coverage

Elements exercised

counting…

Instances on the page

every gok-* tag, rig included

Compositions

banking screens under test

Seen once only

one context each

Presence is not proof. The first number says every element in the library is on this page next to its neighbours; it does not say each one has been seen in enough contexts to trust. The last is the honest counterweight — an element that appears once has been judged against one arrangement, at one density, in one theme. What is left there is , and those are page-level shells: one per page is the contract, so a second instance would be a defect rather than evidence.

Atoms

Control parity

Every control reads --gok-density-control-height, so a row of them should be one unbroken band with no per-pair tuning. A row of bare controls centres; a form is a stack of field units — never mix the two in one flex row.

Bare controls, one row — centred; all on the control height

Main · SEK Savings · SEK Euro · EUR 7d 30d 90d Reset Apply Draft Cleared

Field units, one row — labels flush, controls flush, message lines flush

Main · SEK Savings · SEK

The trap — a button in a row of labelled fields

Wrong · button aligns to the label

Verify

Right · the label's line is reserved

Verify

Entry

Sign in

Two small surfaces side by side. A card's inset should sit within about one step of the gaps inside it — 24 around 16, not 32 around 16, or the card reads as a frame around loose parts. One primary action per card, and one only.

Secure area

Sign in

Keep me signed in Forgot password?
Continue or Use a passkey

Step 2 of 2

Verify it's you

I sent a six-digit code to the number ending 44.

Verify Send a new code

Task

Identity check

A stepped task, and a second home for three controls the bench had only seen once: the code boxes out of their card and into the flow, an upload beside a text area, and a page header on a sparse screen rather than a dense one. The step count is a gok-progress because the system ships no stepper — a gap the bench is meant to expose, not paper over with a local one.

Why this is asked A document check is required before an account can send money in anyone else's name.

A confirmation code went to the number ending 91.

The document is mine and valid today.
Finish later Back Continue

Overview

Dashboard

A stat strip repeating one column width, a full-width band for the thing that needs a measure, and a rail. Watch the eyebrows: on a screen this dense they belong on the section head and one or two announcing cards, not on every tile.

Move money New payment

Net worth

SEK 412,900

↑ 2.4% this month

Available

SEK 38,140

SEK 1,220 held 3 open

Spent this month

SEK 11,480

↑ 8% vs. June

Savings goal

72%

Recent activity

Last seven days

  • Vattenfall Pending −874.50 Direct debit · 29 Jul
  • Transfer to Savings −4,000.00 Standing order · 28 Jul
  • Northvolt AB — salary +42,180.00 Credit · 25 Jul
  • Coop Konsum Card −612.20 Contactless · 25 Jul
  • SL Access −1,020.00 Subscription · 24 Jul
See all activity

Task

Transfer

Fields in two columns are the hardest alignment case: the components are shadow roots, so an outer subgrid can't reach their internal rows. reserve-message is what keeps every label, control and message line flush across columns — and what stops an error shoving the next row down.

Main · •••• 7466 Savings · •••• 6543 Euro · •••• 2291
Hyresbolaget AB SE45 •••• 7466 Kim Lindqvist SE33 •••• 1180 Someone new Enter an IBAN
Summary
Amount
SEK 4,500.00
Fee
SEK 0.00
Arrives
1 August, before 09:00
Reference
Rent August
I've checked the recipient's details.
Save as draft Back Review transfer

Data

Accounts table

A toolbar is a row of bare controls: search, a range, a filter, a view switch and a menu all land on the same control height, and the grid's sticky header picks up the same rhythm below it. Switch the density and the toolbar and the rows should move together.

Table Cards Export CSV⌘E Choose columns
Clear filters
Export

July 2026

Transactions

Archive

Documents

The same grid, paged the other way. The accounts table pages itself (paginated); an archive that pages on the server owns the control, so gok-pagination sits in a footer row beside the count — and it has to land on the toolbar's control height, or one band reads as two systems. A trail, a header, a filter drawer and an upload sit around it.

Accounts Main Documents Upload
Statements are kept for seven years; anything you upload, for two. Filters

Showing 25–30 of 148

Send one back — drop or browse

Filtered to nothing — the state a live archive spends real time in

No documents between January and July match “chargeback”.

Clear filters
Everything Statements Contracts Tax Only unread Only documents needing a signature
Clear Show 148 documents

Preferences

Settings

A setting row is a two-line name/description block with a control pinned to the end. The control aligns to the row's optical centre, not to the first line — and the row rhythm should survive a density change without the switch drifting off centre.

Notifications — trailing control rows

Payment confirmations

Push and email whenever money leaves an account.

Low balance

Warn me when an account drops below SEK 2,000.

Marketing

Product news and offers. Off by default.

Statement format

How monthly statements are delivered.

PDF CSV Paper

Limits — a slider beside a figure

Grouped disclosure — tabs over an accordion

Security Cards Limits Two-factor authentication

A code from your authenticator app is required for every transfer over SEK 10,000.

Change method
Trusted devices

Three devices are currently signed in.

Session history

Last sign-in from Stockholm, 31 July at 08:14.

Freeze a card instantly; it can be unfrozen at any time.

Physical · 7466 Virtual · 2291 Blocked · 1180

Limits are shared across every card on the account.

Filter chips — a multi-select group, each its own toggle

Groceries Transport Bills Eating out Travel Over SEK 1,000 Archived

Help

Support

The contents rail moved into the content. The same gok-toc that runs this page's chrome, shrunk to a topic list beside an FAQ — two carriers of the numbered register on one screen, which is the hardest test of it. If the in-content one reads louder than the page's own, the register is doing too much work.

What do I pay outside the euro area?

The mid-market rate plus 0.4% on weekdays, 1.0% at weekends. Cash withdrawals are free up to €200 a month.

Premium: no weekend markup
Why did an instant payment take a day?

The receiving bank has to accept SEPA Instant too. When it doesn't, the payment falls back to a standard transfer and arrives the next working day.

How do I dispute a charge?

Open the transaction and choose Dispute. You have 120 days from the charge, and the amount is held while it's reviewed.

Start a dispute
Can I close an account with money in it?

No — move the balance first. Anything left after 30 days is transferred to your main account at that day's rate.

Nothing matched — the compact empty inside a panel

No article answers “chargeback deadline”. A person can.

Message support

Surfaces

Account cards

One repeated column width in the 20–22rem band, chosen by the grid rather than left over from the viewport. Corners nest by subtraction — a 4px inner mark inside a 12px card, never two concentric 12s.

Everyday

Main

SEK 38,140.22

SEK 1,220.00 held · SEK 39,360.22 current

•••• 7466

Salary Direct debits
Move money Statements

Goal

Savings

SEK 214,000.00

SEK 86,000 to go · on track for March

•••• 6543

Top up Edit goal

Foreign currency

Euro

€6,893.93

1 EUR = 11.42 SEK

•••• 2291

Rate alert on
Exchange Rate alerts

Feedback

States

Five statuses across four components. The signature has to be one shape everywhere: a neutral surface, a 2px inline-start rule, an icon and a word — never a saturated banner, never colour on its own.

Alerts

Statement ready Your July statement is available to download. Transfer sent SEK 4,500.00 is on its way to Hyresbolaget AB. Card expires soon The card ending 7466 expires next month. A replacement is on its way. Payment declined The receiving bank rejected the reference. Check it and try again. Edit payment

Marks

Draft Scheduled Settled Pending Failed
Standing order Verified payee Unusual amount Blocked

Progress

Checking the recipient…

Nothing there yet

No standing orders yet.

Set one up

Still loading

Loading accounts

Layers

Overlays

Every floating surface should read as the same system as the page under it: the same hairline, the surface corner rather than a new one, and the same inset. Open two at once and the only difference should be the elevation.

Confirm transfer Close account Filters Exchange rate EUR → SEK

Locked at 11.42 for the next 28 seconds.

Use this rate
An OCR number lets the recipient match your payment automatically. Account actions Rename account Download statements⌘S Round-up savings
Close account
Toast · success Toast · error
The command menu is chrome, so it lives in the flow and opens below itself:
To
Hyresbolaget AB
IBAN
SE45 5000 0000 0583 9825 7466
Arrives
1 August, before 09:00
Reference
Rent August
Cancel Send SEK 4,500.00

Closing the Euro account moves the remaining €6,893.93 to Main at today's rate. This can't be undone.

Keep it open Close account
Everything Money out Money in Only unreconciled
Clear Show 42 results

Chrome

Navigation chrome

Five carriers of the editorial register — mono uppercase, hairline rows, a 2px accent marking the current thing. They're built separately, so this is where a drift in the register shows: one of them using a different label size or a different current-mark would break the voice.

Top bar

gökberk. Home Accounts Payments Invest

Trail, tabs, rail

Accounts Main July statement
All Money out Money in Fees

142 transactions in July.

98 outgoing transactions.

44 incoming transactions.

No fees this month.

Home Accounts Payments Cards Documents Settings