The whole system in hex, space and time.
Every value below is generated from assets/css/tokens.css and mirrored in handoff/tokens.json. Components reference tokens only, so a change here moves the entire product, both themes included.
Ethereum
BNB Smart Chain
Base and surfaces
Deep midnight base with four surface steps. Glass surfaces are used only where content scrolls beneath: header, preview panel, toolbars.
Text
Three text levels plus an inverse for light chips. Text 3 is for non-essential labels only and never for a value the user needs to act on.
Borders
1px throughout. Luminous borders only sit on gradient or glass, where a neutral hairline disappears.
Gradient stops
Electric violet into cyan into lime is the brand energy and carries no meaning. Risk never borrows these hues for anything other than atmosphere.
Chain colours
Chain identity uses the official brand colours of each network. The colour is always paired with the official logo and the chain name: a colour alone never identifies a chain.
Risk ramp
Four tiers, four hues, one semantic ladder. The ramp is verified for contrast on both the base and on cards, and every tier is paired with an icon and a word so colour is never the only signal. L* and greyscale values are measured, not estimated: each step differs by at least 9.5 L*, which is what keeps the tiers readable in a printed greyscale report.
| Tier | Token | Score band | L* | ΔL* | Greyscale | On base | On card | Chip |
|---|---|---|---|---|---|---|---|---|
| Low | #2BD9A4 | 0 – 24 | 77.8 | #C0C0C0 | 10.94:1 | 9.98:1 | Low | |
| Moderate | #FFD75E | 25 – 49 | 87.3 | Δ 9.5 | #DBDBDB | 14.32:1 | 13.06:1 | Moderate |
| High | #FF8A2B | 50 – 74 | 69.2 | Δ 18.1 | #A9A9A9 | 8.44:1 | 7.7:1 | High |
| Severe | #FF2E6B | 75 – 100 | 56.4 | Δ 12.8 | #878787 | 5.54:1 | 5.05:1 | Severe |
GREYSCALE PROOF · rendered with filter: grayscale(1) and no hue information left
Light-mode equivalents use a darker ink of the same hue on a tint, so the tier survives a printed report and a white dashboard: low #067A57 on #E6FBF4, moderate #8A5B00 on #FFF6DB, high #A33B00 on #FFEBDD, severe #B00A3C on #FFE3EC. All four clear 4.9:1.
Feedback and focus
Feedback colours are reserved for system messages and never reuse the risk ladder, so a red alert is not mistaken for a severe finding.
2px ring at 3px offset on every interactive element, on both themes. Lime on dark, deep violet on light: both above 4.5:1 against the surface they sit on.
Type scale
Golos Text for display, Inter for UI, JetBrains Mono for addresses, hashes and audit IDs. All three carry latin and latin-ext; cyrillic subsets are included so a future locale does not need a new typeface. Scores and amounts always use tabular numerals.
60px / 1.02 / -0.035em
48px / 1.05 / -0.03em
36px / 1.12 / -0.025em
28px / 1.18 / -0.02em
20px / 1.3 / -0.012em
17px / 1.35 / 0
19px / 1.55 / 0
15px / 1.6 / 0
13px / 1.55 / 0
12px / 1.45 / 0
128 / 0.86 / −0.05em
tabular numerals
13 / 1.6
Spacing
4px base scale. Section rhythm on desktop is 120px, tablet 80px, mobile 48px.
Radii
12px controls, 16px large buttons, 24px cards, 32px hero panels. Nothing is fully square except table rows.
Shadows and glow
Dark surfaces carry shadow plus an inset hairline, because shadow alone disappears on a midnight base. The primary button carries a coloured glow instead.
Motion
Motion explains a change, it does not perform. Hover and press stay under 150ms; panels and accordions at 200–320ms; the gauge sweeps once at 600ms. Everything respects prefers-reduced-motion.
Light mode
The light set exists for institutional buyers, printed reports and screen-sharing into a bank's own tooling. It is a full token override, not a filter: surfaces become white, text becomes near-black, and the risk ladder switches to ink-on-tint.
Ethereum
BNB Smart Chain
Severe
High
Moderate
Low
The light panel above is a live token scope, not an image. Toggle the theme in the header to see the whole product follow.
Accessibility contract
What the tokens guarantee, and where the design hands the job to something other than colour.
| Requirement | How the tokens deliver it |
|---|---|
| Body text on base | #F2F5FF = 18.24:1 · #A8B0C8 = 9.19:1 |
| Body text on cards | #A8B0C8 on #101527 = 8.38:1 |
| Risk tier as text | low 10.94:1 · moderate 14.32:1 · high 8.44:1 · severe 5.54:1 on base |
| Touch targets | 44px minimum on every control; 68px for the hero primary |
| Tier without colour | Icon shape (shield / triangle / triangle / octagon) + the word, always |
| Focus | 2px lime ring, 3px offset, both themes |
| Motion | All durations collapse to 0.001ms under prefers-reduced-motion |