Layout and density

Guide index · Shape · Terminal

Units and spacing

Graphical dimensions are logical pixels. On the web these correspond to CSS px at default scaling; native implementations use density-independent layout units and scalable text, not physical display pixels. The terminal uses columns and rows independently; never divide pixel values by a guessed character size.

Spacing token Value Typical use
space.1 4px Icon/metadata adjustment, hint separation
space.2 8px Related controls, label-to-input, chips below titles
space.3 12px Dense groups and compact toolbar gaps
space.4 16px Component inset, standard group gap
space.5 20px Optional breathing space in a large composition
space.6 24px Page gutter and distinct groups
space.8 32px Major section separation
space.12 48px Large empty-state separation

Use the 4px rhythm for layout. Strokes, corner cuts, typography and focus offsets have their own explicit values; they are not rounded to the spacing scale.

space.1 · 4px
space.2 · 8px
space.3 · 12px
space.4 · 16px
space.5 · 20px
space.6 · 24px
space.8 · 32px
space.12 · 48px

Density

Property Standard desktop Dense desktop Compact desktop Touch
Button/input visual minimum height 40px 32px 28px 48px
Icon action minimum target 40×40px 32×32px 28×28px 48×48px
Menu command minimum height 40px 32px 28px 48px
Single-line data row minimum 48px 40px 32px 48px
Horizontal control padding 16px 12px 8px 16px
Related control gap 8px 8px 8px 8px
Component header/content inset 16px 16px 16px 16px

Related gaps remain 8px and component insets remain 16px across densities; touch uses the shared spacing scale. Icon actions (including search Clear) and menu commands follow the same active density minimum as buttons. Standard is the default. Density is set explicitly for a workspace, not inferred from window width. Compact is for deliberate keyboard/mouse use, not a workaround for overflowing content. Preserve the type scale; a wrapped label or larger text setting expands the control beyond its minimum. Touch-capable experiences use touch targets even when the drawn glyph is 24px.

Standard

Button 40px
Row 48px

Dense

Button 32px
Row 40px

Compact

Button 28px
Row 32px

Touch

Button 48px
Row 48px

Shell composition

The graphical shell has a 52px app header, flexible workspace, and 28px minimum status bar. Header and status can grow with text scaling. The workspace contains a leading navigation rail, main content and optional trailing diagnostic drawer.

The icon-only rail is 64px wide; a labeled compact rail is 76px and an expanded navigation list is 240px. Pick one mode per shell rather than mixing widths between destinations. Navigation occupies the workspace height, not the menu or status chrome.

When portrait width cannot accommodate the rail and readable content together, bottom navigation replaces the desktop rail with the same destinations, labels and violet navigation role. Keep the selected destination on the neutral selection face with a bold violet label, independently of keyboard focus. Use one navigation representation at a time.

Persistent primary actions use the shared chamfered primary button with its blue edge in the header's action section or a bottom action area. A bottom action area keeps a frequent action within thumb reach on a tall touch screen; reserve body space for it and respect safe-area and software-keyboard insets so it never covers content or navigation.

Drawer default width is 340px, minimum 230px, maximum 50% of the workspace width. Clamp the effective minimum down to the maximum in a small container. Preserve the preferred width separately from its temporary clamp. A collapsed right drawer is a 36px rail with only its leading/top expansion control; use a 28px target in that desktop rail. Touch layouts expand the rail target to 48px or provide an accessible 48px drawer action elsewhere in the header.

Expanded and collapsed drawer states retain the same body material, header band, frame, toggle anchor and workspace bounds. The toggle sits at the leading edge of the drawer header: right chevron to collapse a right drawer, left chevron to expand it. Do not place the toggle in the unrelated global menu.

Icon rail · 64px
Labeled · 76px

Expanded · 240px

Drawer · 340px
Collapsed · 36px

Header anatomy

Use a 16px top/leading inset within every titled component. The first row contains the heading and at most one optional trailing status chip. Remaining chips, metadata (including any subtitle), and actions follow below in that order, with 8px separation between related rows. Actions always occupy their own section below metadata, including on desktop.

A configured leading icon occupies a stable slot in every state; never add/remove it in a way that shifts the label. Keep the title at its fixed inset as text wraps. If the optional status chip cannot fit beside it, move that chip below the title before the remaining chips. Additional chips and wrapped actions grow the header downward; no title-row action slot is reserved.

Back navigation is a separate region before the controlled area's header. It remains before the heading in focus order. Content Back and drawer controls must not migrate into global chrome as a layout shortcut.

← Back to jobs

Validation run

✓ Ready
Planner

Job 042 · Revision 8

ExportRun

Content layouts

Use a 24px outer page gutter on standard desktop, 16px below 720px available content width. A component's internal 16px inset is measured from its own edge. Card grids use a 280px minimum card width and 16px gap; dense grids may use 12px gaps.

A list/detail split starts at 32% list and 68% detail, with 240px list and 360px detail minima. At less than 720px available split width, show one pane: the list until detail is chosen, then detail with an explicit Back action. Preserve selection, drafts and independent scroll positions across adaptation.

When a narrow portrait viewport cannot comfortably contain the centered desktop dialog, anchor that same dialog to the bottom edge as a sheet. Preserve its chrome, type roles, title-first header order, modal scrim, focus containment and restoration to the trigger. Bound body scrolling to the space above safe-area and keyboard insets; Back and Close follow the dialog's dismissal policy.

Broad forms can show Guided and Advanced panes side by side with a 16px gap when pane minima are satisfied. Forbid side-by-side editors below pane minima; below 720px use one mode or readable stack.

Use these container bands as defaults: compact below 720px, medium 720–1199px, expanded at 1200px and above. Apply the band to the available content region after navigation/drawers, not the physical monitor. A drawer can make a wide window's content compact. Multi-pane arrangements must satisfy all pane minima.

24px page gutter

Card min 280px
16px gap
List 32%
Detail 68%

Scrolling and sticky content

Page navigation, heading, toolbar and footer are fixed relative to the region; its body is the default vertical scroll owner. Sibling split panes scroll independently. Nested layouts opt out of body scrolling when the parent already owns it. Tables/code may own a labeled horizontal viewport; the app shell must not acquire accidental horizontal overflow.

Keep a stable scrollbar gutter. Scrollbar default width is 10px, track input-colored, thumb neutral, 2px inset, 32px minimum thumb length. Native accessibility/user scrollbar settings may override these values. Place the scrollbar immediately inside the trailing contour, outside the 16px content inset.

Composite sticky headers include title, metadata, toolbar and tabs as one opaque region. The next section pushes the previous header away; headers do not accumulate or duplicate controls. If a header becomes taller than the viewport, disable stickiness for that section so normal scrolling reaches everything.

Resizing and overflow

Split/divider affordances have a 1px visible neutral line and at least 8px pointer hit strip, separate from touch targets. Provide named keyboard resizing; arrows change 10px, Shift+arrow 50px, Home/End select limits. Focus is cyan and independent of pointer hover.

At 320px available content width, allow toolbar wrapping, stacked metadata and one-pane navigation. Keep essential actions reachable. Reflow does not submit commands, clear selection, reset drafts or decide an observed outcome.

Sticky header

Opaque composite region

Scrollable body owns vertical overflow.

Scrollbar 10px · input track · neutral thumb.

More content below the fold.

Additional lines preserve gutter.

Pane A
Pane B