OPERATOR

Typography

OPERATOR Sans carries interface text; OPERATOR Mono carries code and aligned data. See Typefaces for specimens, downloads, installation, and qualification status.

Scale

xs — 8px UPPERCASE · non-actionable only

sm — 9px UPPERCASE · non-actionable only

base — 11px mixed-case · minimum for actionable labels

md — 13px mixed-case · primary body, input text

lg — 16px UPPERCASE

xl — 20px UPPERCASE

2xl — 28px UPPERCASE

Scale tokens

Each step is a size, a line height, a tracking, and a weight. text-oprt-<step> sets all four and tracking-oprt-<step> sets the tracking alone, both through the tokens below, so a token override reaches every composed component. Steps are xs, sm, base, md, lg, xl, and 2xl.

TOKENVALUEUSAGE
--oprt-type-xs8pxNon-actionable micro-labels
--oprt-type-sm9pxNon-actionable labels and overlines
--oprt-type-base11pxMinimum for actionable labels
--oprt-type-md13pxPrimary body and input text
--oprt-type-lg16pxHeadings
--oprt-type-xl20pxHeadings
--oprt-type-2xl28pxLargest headings

Line heights stay on the 8px grid:

TOKENVALUEUSAGE
--oprt-line-xs16pxLine height of xs
--oprt-line-sm16pxLine height of sm
--oprt-line-base16pxLine height of base
--oprt-line-md24pxLine height of md, and of the document
--oprt-line-lg24pxLine height of lg
--oprt-line-xl32pxLine height of xl
--oprt-line-2xl40pxLine height of 2xl

Tracking falls as size and weight rise. The two caps tokens are for uppercase controls and bind to a component's size variant, never to its base class:

TOKENVALUEUSAGE
--oprt-tracking-xs0.14emxs micro-labels
--oprt-tracking-sm0.12emsm micro-labels
--oprt-tracking-caps0.07em11px uppercase controls (tracking-oprt-caps)
--oprt-tracking-caps-lg0.05em13px uppercase controls (tracking-oprt-caps-lg)
--oprt-tracking-base0.04embase
--oprt-tracking-md0.02emmd body text
--oprt-tracking-lg0.10emlg headings
--oprt-tracking-xl0.07emxl headings
--oprt-tracking-2xl0.06em2xl headings

Each step has a default weight: 500 for sm, lg, xl, and 2xl, and 400 for xs, base, and md. Add font-medium where a label at base needs 500:

TOKENVALUEUSAGE
--oprt-weight-xs400Weight of xs
--oprt-weight-sm500Weight of sm
--oprt-weight-base400Weight of base
--oprt-weight-md400Weight of md
--oprt-weight-lg500Weight of lg
--oprt-weight-xl500Weight of xl
--oprt-weight-2xl500Weight of 2xl

The legacy --oprt-case-xs, --oprt-case-sm, --oprt-case-base, --oprt-case-md, --oprt-case-lg, --oprt-case-xl, and --oprt-case-2xl tokens remain for compatibility. No utility reads them: text size never chooses letter case.

Type stack

RoleFontUsage
PrimaryOPERATOR SansBody, headings, navigation, labels, controls, badges, descriptions
Aligned dataOPERATOR MonoCode, coordinates, IDs, timestamps, JSON, manifests, numerical values

Both variable families include weights 300–700 and separate italics. Keep interface text upright and disable programming ligatures in code and data.

Package defaults

Import @operator-ds/tokens at the application root and register @operator-ds/tailwind. The stylesheet loads four variable WOFF2 files locally. --oprt-font-sans (Operator Sans Family) and --oprt-font-mono (Operator Mono Family) also supply Tailwind's font-sans and font-mono utilities.

For selective token imports, add @operator-ds/tokens/fonts once. Without the token package, use the standalone stylesheet.

These Geist-derived fonts remain development candidates. Review their validation status; retain the included SIL Open Font License and source notices when redistributing.

Rules

Detail hierarchy

Use EntityPreview for record details in a popover, inspector, or page. The entity name leads at 16px semibold. Descriptive labels use 9px medium, uppercase, and the dim text token; values use 11px and retain their supplied case. IDs, coordinates, exact measurements, and timestamps use Mono. Actions retain the 11px minimum.

For a smaller group of facts, use DescriptionList with layout="details". Labels occupy the left column and values align to the right edge. Long values wrap within their column. Keep equipment condition separate from report quality, and use text-only status badges inside these rows. Put contextual explanation below the related rows and actions after the details.

General rules

  • Actionable labels: at least 11px (text-oprt-base) and weight 500. text-oprt-base is weight 400, so add font-medium. This applies to buttons, inputs, links, menus, tabs, and other controls. The xs and sm tokens are for non-actionable labels only. The design references MIL-STD-1472H §5.1.3.3 character height under degraded viewing; font qualification remains open. Selected text in plain text controls uses weight 600 + underline.
  • Uppercase interface labels: section headings, actions, tabs, short navigation and menu labels, and status badges. Docs titles, navigation, and prose keep authored case.
  • Preserve content case: body/help/error text, field labels and values, names, IDs, and code. This includes names or message subjects used as headings. Apply casing with CSS, never by rewriting data. Wrap case-sensitive names in normal-case tracking-normal; code and kbd preserve case automatically.
  • Choose casing explicitly. text-oprt-* sets size, line height, weight, and tracking, not uppercase. Use uppercase for interface labels and normal-case for content.
  • Tracking: tracking-oprt-caps for 11px uppercase controls, tracking-oprt-caps-lg for 13px controls, tracking-oprt-sm for non-actionable micro-labels, and the size scale's tracking for larger headings.
  • Use Sans by default. Reserve Mono for character-position alignment: tabular numerals, code, prompt symbols, coordinates, IDs, timestamps, JSON, and stat-card values.

On this page