EtherBrandGuidelinesFoundationsComponentsOverviewColorLayoutTypographyElevationMotionIconography
Foundations

Layout

A 4px base, a desktop-primary grid, and spacing that is not the grid. Rails sit outside the canvas. Panels span columns. Gutters stay empty.

Units

Base is 4px. It snaps 16/24 type, 24px icons, and density without remainder. No 3s, no 7s, no eyeballing.

TokenValueNotes
--space-00Flush
--space-px2pxOptical only — hairline offsets, icon nudge. Not a spacing step.
--space-14pxBase
--space-28px
--space-312px
--space-416px
--space-520px
--space-624pxIcon box, body line-height
--space-832px
--space-1040px
--space-1248px
--space-1664px
--space-2080px
--space-2496px

Grid

Desktop-primary instrument. Compact is a companion, not the design target.

ViewportWidthColumnsGutterMarginMax canvas
Compact companion0–76741616
Standard768–127981624
Wide1280–15991224321440
Ultrawide1600+1224401600

Grid is alignment. It is not padding.

Breakpoints

Named after the layout they unlock, not after devices.

TokenValue
--bp-compact-max767px
--bp-standard-min768px
--bp-wide-min1280px
--bp-ultrawide-min1600px
--grid-max-wide1440px
--grid-max-ultrawide1600px

Custom properties document the scale. Media queries still need the literal widths.

Density

Compact / standard / roomy is a padding multiplier: 0.75 / 1 / 1.25. It is orthogonal to viewport.

A wide on-call wall can be compact. A compact-width companion can be roomy. Density does not change type size, column count, or hit targets (44×44 holds).

TokenValue
--density-compact0.75
--density-standard1
--density-roomy1.25
--density1 (default)

Default panel pad is --space-3 (12px) at standard density. Compact → 9px. Roomy → 15px (snap to 16). Compute as calc(var(--space-3) * var(--density)).

Control scale

The face is not the hit. Controls sit on a 28 / 32 / 36 face so the instrument stays dense. --hit stays 44 — buttons expand the target with a pseudo; compact-width companion uses the 44 face on fields, menus, and tabs.

TokenValueUse
--hit44pxMinimum target. Always.
--control-h-sm28pxDense toolbars, icon + short label
--control-h-md32pxDefault button, field, select, menu item
--control-h-lg36pxEmphasized action, lg field
--control-pad-x-sm8pxsm button, field inline pad
--control-pad-x12pxDefault control inline pad

Do not size a field to 44 on desktop just to pass the hit. Size the face to the control token and keep the hit.

Spacing

Stack and inline use space tokens. They are independent of the grid.

Do not invent a 10px gap because the panel “looked tight.” Step to --space-2 or --space-3.

CSS custom properties

Space, breakpoint, and density names are in the tables above. Runtime grid tracks change with viewport. Import site/css/tokens.css.

TokenDefault (wide)Notes
--grid-columns124 compact, 8 standard
--grid-gutter24px16 compact / standard
--grid-margin32px16 compact, 24 standard, 40 ultrawide
--grid-max1440pxnone below wide; 1600 ultrawide
--density1Multiplier on padding, not on type

Media queries still need literal widths. Custom properties document the scale.

Live grid

Live columns follow --grid-columns: 4 under 768px, 8 to 1279, 12 from 1280. Gutters stay empty.

Control scale

Face 28 / 32 / 36. Hit stays 44. Desktop uses the face; compact-width companion uses the 44 face on fields and menus.

sm 28
md 32 default
lg 36

Spacing ladder

Stack and inline use space tokens. Independent of the grid. 4px base; no 3s, no 7s.

--space-0 0
--space-px 2px optical
--space-1 4px
--space-2 8px
--space-3 12px
--space-4 16px default pad
--space-5 20px
--space-6 24px
--space-8 32px
--space-10 40px
--space-12 48px
--space-16 64px
--space-20 80px
--space-24 96px

Related