Colors
Four primitive ramps and twelve semantic roles, extracted from the components rather than declared ahead of them. Body text is held to 4.5:1 against its background, and where a colour does not clear that bar the audit reports it rather than the system quietly hiding it.
in-sync·Source: css:blocks/base.css·Last synced 31d ago
Blue
300
Light blue, hsl(221 100% 75%). 8.17:1 on blue 950, which is the only place it is used.
#7fa8ff500
Brand blue. 5.28:1 on white.
#2b59ff600
Deeper blue for pressed and hover states.
#1f47d9950
Near-black with a blue cast, hsl(220 35% 7%). Not on the pure-grey neutral ramp, which is why it sits with the blues. The system's only dark surface.
#0b0f17Green
600
Green. 3.54:1 on white.
#3f9b2bYellow
400
Yellow. 1.63:1 on white.
#f3c60dNeutral
0
White. Card, panel and button surfaces.
#ffffff25
Off-white, one step lighter than 50 (L* 97.9 vs 96.5). Used once, by the hero background.
#f9f9f950
Off-white. The page behind every block.
#f5f5f5200
Light grey. Hairline borders and dividers.
#e3e3e3300
Light grey one step darker than 200 (L* 84.9 vs 90.2). Used once, by the features section top rule.
#d4d4d4500
Mid grey. 3.45:1 on white.
#8a8a8a700
Dark grey. 6.69:1 on white.
#5c5c5c950
Near-black. 18.1:1 on white.
#161616Semantic
Ink
Primary text. Headings, body copy, stat figures.
#161616Star
Rating stars. 1.63:1 on white, below AA — the deliberate contrast bug the demo shows the audit catching.
#f3c60dBrand
Brand mark and eyebrow labels. Same value as accent, kept separate so a rebrand can move one without the other.
#2b59ffFaint
Tertiary text. 3.45:1 on white, below AA — a finding the demo keeps.
#8a8a8aMuted
Secondary text. Section intros and card copy.
#5c5c5cAccent
Primary action. Buttons, links, active states.
#2b59ffBorder
Hairline borders, dividers and card outlines.
#e3e3e3Ground
Page background behind the blocks.
#f5f5f5Success
Positive state and upward metrics. 3.54:1 on white, below AA — a finding the demo keeps.
#3f9b2bSurface
Raised surfaces: cards, panels, secondary buttons.
#ffffffBorder Alt
A second border value, used once: the features section top rule. One step darker than --border (#e3e3e3 to #d4d4d4, a delta of 5.3 in L*), which lifts that rule from 1.18:1 to 1.36:1 against the section's own background. Reads as drift, not intent; held at its measured value until that is decided.
#d4d4d4Ground Alt
A second page background, used once: the hero. One step lighter than --ground (#f5f5f5 to #f9f9f9, a delta of 1.4 in L*) and it overrides .dot-grid's own background-color: var(--ground) in the same cascade. Reads as drift, not intent; held at its measured value until that is decided.
#f9f9f9Dark Accent
Accent on --dark-ground: the highlighted span in the stats heading. 8.17:1 there, where --accent would be 3.63:1 and fail AA — which is why the dark context carries its own accent role instead of reusing the light one.
#7fa8ffDark Ground
Dark section background: the inverted counterpart to --ground, and the system's only dark context. One block uses it, the stats block. White text on it is 19.18:1.
#0b0f17Accent Hover
Hover fill for a primary action.
#1f47d9Accent Contrast
Text and icons on an accent fill.
#ffffffOn This Page