What's in the system

  • Tokens. CSS variables for color, typography, elevation, radius, motion, and density. Use the token; never hard-code the value.
  • Primitives. Buttons, badges, form elements, cards, dropdowns, toasts, tables — the small components that compose everything else.
  • Patterns. Larger compositions that recur across the app (detail page header, wizard layout, origin-aware navigation, inbox two-pane). Use these intact; don't reinvent.
  • Behaviors. Universal interaction states (hover, active, focus, selected, disabled, loading, error) plus accessibility, motion, and keyboard nav rules that apply to every component.

How to read these docs

Every component page follows the same shape: a description, an Overview section, an Use cases list, a Properties table, a Types & styles reference, and Best practices. The live examples sit in the right panel — pick a variant from the dropdown, see the rendered preview, and copy the Usage or Code snippet.

Pattern pages (Wizard system, Inbox, Upload wizard) describe compositions of primitives, not new components. If you find yourself reaching for one of these and modifying its chrome, stop and revisit Primitives instead — there's almost always a primitive that already does what you need.

What this system isn't for

  • Marketing sites. The chrome here optimizes for density and decision-making, not delight or storytelling. Use a different system for the public-facing surface.
  • Bespoke one-off screens. If a design needs to break the system, that's a signal to look for a missing primitive — not to ship a one-off.
  • Mobile-first products. The grid, density, and information architecture assume a 1024 px+ work surface. Mobile breakpoints exist but the system is desktop-optimal.

Design principles

Six principles that decide every close call. If a component, layout, or copy choice conflicts with one of these, the principle wins.

01

Quiet by default

Color, motion, and elevation are signals — not decoration. Most cells, rows, and panels should be calm. Reserve the loud treatment for the moments that need a user's attention.

02

Tabular truth

Numbers stack vertically. Always tabular-nums, always right-aligned, always the same column width regardless of value. A misaligned digit reads as a typo.

03

One pattern, many surfaces

The bulk-action bar in the inbox is the same component that ships in the library, the parts list, and the conditioning workspace. Don't fork the chrome per surface — fork the data.

04

Composition over invention

Build new screens by composing existing primitives and tokens. If you can't, the gap is the design system's — file a new primitive proposal before shipping a one-off.

05

State carries meaning

Hover, active, focus, selected, disabled — these aren't decoration. They communicate "this is interactive", "this is what you'll click", "this is what's currently chosen". Use them consistently; users learn them once.

06

Density without friction

Enterprise software earns trust through information density — tight rows, compact toolbars, full-screen tables. But 32 px is the floor for any interactive target; "compact" never means "hard to hit."

Getting started

Install the tokens

Drop the :root variable block into your global stylesheet. Every component below assumes these tokens exist. Override per-theme by re-declaring inside a scoped class (e.g. .theme-dark :root).

One stylesheet, one cascade

The system ships as a single CSS file scoped only by class selectors. Don't reach for CSS-in-JS, scoped modules, or per-component stylesheets — they fight the cascade the system depends on. State classes (.open, .selected, .checked, .dragging) only behave correctly when the base styles are loaded globally.

Conventions you'll see everywhere

  • Class-first. Components are styled by class, not by attribute or descendant selector. .btn.primary, not button[data-variant=primary].
  • BEM-adjacent state classes. A component's open/active/selected/checked state is a class on the same element, not a parent. .ib-sel.open means "the select-all is in its open state."
  • Inline icons via SVG sprite. Symbols defined once in <svg>...</svg> at the top of the document, referenced via <use href="#i-name"/>. Icons inherit color via currentColor.
  • One controller for layout offsets. Sidebar width, panel widths, and assistant-panel widths all flow through a single updateLayout() function that writes inline margins on the content well. Components don't measure each other.