Palette
two modes, one structure — every light token has exactly one dark counterpart
Light · default
paper#f1f5f8cool-grey ground
surface#fbfdffraised panels, grids
evidence#e4edf5JSON blocks, selection fill
ink#162636headings and high-contrast anchors
body#33495drunning text
muted#41596dsecondary text
hairline-strong#c5d3dfpanel borders
hairline#dbe5edrow separators
accent#0067b8links, selection, single-hue charts
coral#a8321dhigh severity, risk
amber#765900medium severity, warnings
green#0b6b43healthy, resolved, complete
Dark · night reading
paper#101820charcoal ground
surface#172634raised panels, grids
evidence#112c42JSON blocks, selection fill
ink#eef6fccool white headings and anchors
body#cad8e4running text
muted#a8bac9secondary text
hairline-strong#365069panel borders
hairline#233a4erow separators
accent#69b9f4links, selection, single-hue charts
coral#ff8f7ahigh severity, risk
amber#e6bf61medium severity, warnings
green#72d0a4healthy, resolved, complete
Atmosphere · gradients carry large regions, never data values
app ground + chrome
panels + controls
selected evidence
primary action
app ground + chrome
panels + controls
selected evidence
primary action
Chart categories · CVD-validated both modes
computenetworkstorage*databaseapp svcother
Fixed order, never cycled — the top slots of the app's category_color() set. Charts fold the tail into Other; type dots elsewhere may use the full set. *storage deepens to #a98a00 in dark. Bars are always direct-labelled.
Severity · status, never decorative
Highcoral · always with the word, never colour alone
Mediumamber
Lowneutral
Infoaccent
Footnote daggers (†) mark rows referenced by open findings, in every table of the app.
Mark
a rounded topology A — three nodes and the connectors between them
Lockup reversed140px wide
The node diameter is the clear-space unit
x — keep at least one
x clear on every side. Never crop the mark; only the supplied background motifs crop it, deliberately. Full rules:
marks/USAGE.md. Native app icons are derived from the light app icon by
pnpm run icons, not drawn by hand.
Type
IBM Plex — the family the PDF already vendors
Display 30Plex Serif 600 · view titles, hero numerals
Chapter 19Plex Serif 600 · section & panel headings
Body 14 — descriptions, ledes and supporting evidence read at this size.Plex Sans 400
Table 12.5 — ledger rows, inspector detailPlex Sans 400/600
Label 11 · capsPlex Sans 600 · column heads, metadata
evidence-12 · /subscriptions/…/rg-prod-dataPlex Mono · ARM ids, tags, deltas
Nothing below 11px — the old app's 6–10px floor is retired. Serif carries identity; sans does the work; mono marks machine-shaped values.
Structure
rules over boxes, tone over shadow
2px ink rule — reserved for high-value summary anchors
1px strong hairline — shell rails, record headers, panel edges
1px hairline — sections, table rows, list separators
Spacing rhythm: 4 · 8 · 12 · 20 · 32 · 56 (56 = page margin)
Radii: 3px controls & tag chips · 6px panels · fully rounded summary capsules — one purposeful exception to the near-square evidence workspace language
One working surface per route. Resource records use compact header facts and a full evidence sheet with inline context, property rows, and collection tables — never a fixed detail sidebar. Findings use an on-demand drawer; Relationships navigates directly from groups to maps and resources to records.
Subscriptions and resource groups disclose independently from selection; Azure entities use the vendored Azure artwork at every depth.
Large collections use labelled selectors and honest progressive batches. Figures end with a caption; no numbering, anywhere.
Components
same anatomy in both modes
Primary action
Quiet action
Active tab · 12
Tab · 8
environment=prod
LOCATIONUK South
Search evidence… ⌘K
Primary action
Quiet action
Active tab · 12
Tab · 8
environment=prod
LOCATIONUK South
Search evidence… ⌘K
Summary capsules hold two to six short, read-only orientation facts in spare header or toolbar space. They wrap together, colour only signal values, and never replace controls, primary metrics, long evidence, tables, or ledgers. Theme is a tri-state in Settings — System (default, follows the OS) · Light · Dark. The primary button keeps a higher-contrast Azure wash in both modes; category and severity colours are re-validated per surface, never auto-flipped. Selection anywhere is a quiet --evidence fill — never a coloured bar.