Color¶
Which color goes where: the roles every token plays, why the brand yellow is never a status, and the two themes.
Color roles¶
- Ground.
canvasfor the page;surfacefor recessed wells (inputs, the terminal bar, display windows, the command in a decision);raisedfor cards and panels;liftedfor the one step above them (an opened row, the top card of a deck, a sheet, a dialog), withedge-hias its 1px top highlight andshadow-1orshadow-2under it;overlayfor menus and popovers;selectedfor the selected row or tab. - Lines.
line-subtlebetween rows inside cards and tables;linefor hairlines (table header rule, chips, keys);line-strongfor control borders (3:1 or better onsurfaceandraised);rulefor section rules and chart axes where there is no card. - Text.
fgfor primary text and values;fg-mutedfor secondary text and inline values;fg-subtlefor labels, keys and timestamps (the lowest text tone, 4.9:1 or better);fg-dimfor separators and disabled marks, never text. - Brand.
brandfill withon-brandtext;brand-hover;brand-textfor brand as text or a 1px line;focusfor the ring.brand-washis deprecated: selection isselectedwith a neutralfgedge or ring, never a yellow tint. - Status.
status-running,status-queued,status-approval,status-failed,status-deniedwithon-status-denied,status-off. Lampslamp-cautionandlamp-warningwithon-lamptext are the only large color fields in the UI, and only in MasterCaution. - Terminal and code.
terminal-*andcode-*stay dark in both themes. Code is greyscale; onlyterminal-errcarries color. - Data.
span-model,span-tool,span-sandbox;stage-plan,stage-edit,stage-test;rail,rail-done,rail-glowfor progress (rail, ring, capsule, track);chart-1tochart-6;readout-cell,display-window;dot-field. - Product.
product-hangar,product-flightdeck,product-tower,product-aidlc,product-spaceport: marks, docs headers and the 2px nav marker only.
The brand is never a status¶
Use brand for the primary action, focus, the active route (trace critical path, now line) and selected marks, and nothing else. Never color a status, alert, badge or chart series yellow. Caution is orange for exactly this reason: cockpits paint caution amber, and an amber "needs approval" beside a yellow primary button would read as one signal. So status-approval is orange (#FF8A3D Night, #B04E00 Day) and always a diamond, and a yellow fill always means "your action". Product hues never carry state either.
Night and Day¶
- Set the theme on the root:
<html data-theme="dark">for Night (the default) ordata-theme="light"for Day. Tokens re-declare per theme; never branch on theme in component CSS. - Night is true black (
canvas#000000) withraised#141414cards. Day is paper grey (canvas#F4F4F2) with whiteraisedcards. - The
brandfill is the same yellow in both. For brand as text or a line usebrand-text, which drops to dark gold#7A5F00in Day, since yellow on paper is 1.5:1. - Terminals, code blocks and lamp fills keep their values in both themes.
- Check every component in both themes: text 4.5:1 on its ground; 3:1 for text 24px and up, meaningful borders, icons and the focus ring.
Part of the brand book. See also Status, Data and Products.