Skip to system
04 / Controls

Commands stay tactile

Buttons, keycaps, chips, fields and selection controls share one measurable interaction contract.

36 / 44px heights

Button playground

Change the variant, height and availability; the geometry remains stable.

Variant
Size
44px height2px border8px radius5px depth16px icon

Button states

The production command contract stays at JetBrains Mono 12/900, 44px high and 5px deep.

Default
Hover
Focus visible
Pressed / selected
Disabled
Loading
productionsrc/components + src/app/globals.css--command-height--radius-control--arcade-depth-action--arcade-depth-control

Production command inventory

The audit covers every current button family rather than only the primary CTA specimen.

FamilyProduction ownerHeight / depthContract
Primary action.button44px / 5pxLime keycap, optional leading icon
Secondary action.button--ghost44px / 5pxNeutral face, same press physics
Detail action.button--detail44px / 5pxForward command with trailing arrow
Compact action[data-size=compact]36px / 3pxDense non-primary contexts only
Icon-onlyshare / theme / close44 × 44px / 4pxAccessible name required
Filter and sortcatalog-explorer.tsx44px / 4pxState lives in text and aria state
State tilespet-detail-preview.tsxContent-driven / 4pxSprite and label remain one target
Persistent traycompanion-tray.tsx44px minimum / 4pxSafe-area and layer owner
Footer destinationproduct-footer.tsx56px / 5pxIcon, label and direction cue

Chips and badges

6px inner radius. Click to inspect a selected state.

Search and selection

The smart-search glyph stays inside the field; the select chevron keeps an 18px right inset.

Control contract

RoleHeightRadiusDepthLabel
Compact command36px8px3pxMono 11–12px
Default command44px8px4–5pxMono 12px
Icon action44×44px8px4pxAccessible name
Primary mobile action≥44px8px5pxNever wraps