SmartTest

Design system

One visual language for the README, the docs, the HTML report (1.0) and SmartTest Studio (roadmap 0.9.0). Tokens are defined once and mirrored in scripts/brand/build-readme-assets.mjs. The HTML report (ST-086) reads the same values as CSS custom properties.

SmartTest logo

Brand idea #

"A check mark drawn as a dependency graph." SmartTest's value is the link between a change and the tests that protect it. The logo, the hero and the impact map all show that link: the edge lights up, then the test turns green.

Color tokens #

Surface (dark-first) #

TokenHexUse
--st-bg-0#070B18Page background, terminal
--st-bg-1#0E1530Gradient end, raised areas
--st-panel#111A38Cards, nodes
--st-line#22305CBorders, idle edges
--st-text#E8ECF8Primary text
--st-muted#8C97BDSecondary text
--st-dim#56618ATertiary text, idle nodes

Brand #

TokenHexUse
--st-cyan#22D3EEPrimary accent, focus rings, prompts
--st-violet#8B5CF6Secondary accent, "affected"
Brand gradientcyan → violet, 135°Logo, headline emphasis. Never used for status

Status (semantic, never decorative) #

StatusTokenHexShape cue (color is never the only signal)
Modified / changed--st-warn#FBBF24● filled circle + "MODIFIED" label
Affected (non-test)--st-violet#8B5CF6● + "AFFECTED"
Selected / passed--st-pass#34D399■ square + ✓
Failed--st-fail#FB7185■ + ✕
Flaky--st-warn#FBBF24■ + ↻
Skipped (not run)--st-skip#3A4567dashed outline + "not run"
Cached--st-cyan#22D3EE■ + ⧉ "cached" badge, never shown as plain "passed"

In the graph, circles are source symbols and squares are tests.

Light theme (report & Studio) #

TokenDarkLight
--st-bg-0#070B18#FFFFFF
--st-panel#111A38#F5F7FC
--st-line#22305C#D9DFEE
--st-text#E8ECF8#0B1020
--st-muted#8C97BD#4A5578
--st-pass#34D399#047857
--st-fail#FB7185#BE123C
--st-warn#FBBF24#B45309

All text and status pairs must meet WCAG 2.2 AA contrast (4.5:1 for text, 3:1 for UI glyphs) in both themes.

Typography #

RoleStackSize / weight
Displayui-sans-serif, -apple-system, "Segoe UI", Inter, Roboto, Helvetica, Arial, sans-serif54/800, tracking −1.5
Headingsame30/700, tracking −0.5
Bodysame15–16/400
Code, paths, IDsui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace13–15/400
Labelsmono10.5–12, tracking +1.2–2, UPPERCASE

System stacks only. No web fonts in assets, so nothing loads over the network and nothing can be tracked.

Spacing & shape #

CLI style guide #

ElementStyle
Phase line◇ Changes git · main…HEAD · 3 files (cyan diamond, muted label, padded to 10)
Section pillinverse label: SELECTED (pass bg), SKIPPED (skip bg), FAILED (fail bg)
Result line✓ / ✕ / ↻ + path + right-aligned counts and duration
Summaryone line: ✓ 12 passed · 0 failed · 474 skipped (not run) · 2.1 s
Next step↳ why these tests? smarttest explain
Separators· (middle dot), never pipes
Errors✕ ST_CONFIG_INVALID message + indented hint: + docs link

The wording rule is that "skipped" is always followed by "(not run)" in human output.

Edit this page on GitHub