Skip to content

Colour

Colour is used by role, never by value. A role is a token with a paper value and a night value; switching mode switches every role at once. Use the CSS variable (--okr-ui-bg-canvas) or the Tailwind class from @okrado/brand, and nothing else.

  • The primary button is ink: night on paper, cream on night. Amber fill is for the single commit action in a view.
  • One amber element per viewport on marketing surfaces: the logo square plus at most one record marker.
  • Warning is orange-red, never amber. Show it with a dot and a word. Amber means “record”, never “attention”.
  • Links use the link role and are underlined. Never amber.
  • No gradients, except one radial amber wash at 10 % behind a night hero. Never on text or on the logo.
  • Status is never colour alone: a word or an icon always comes with it.
TokenPaperNight
ui.bg.canvas#faf8f3#0d1015
ui.bg.surface#fefdfa#161a22
ui.bg.raised#fefdfa#1e232b
ui.bg.hover#f3efe6#262b34
ui.bg.active#ebe7de#2e343d
TokenPaperNight
ui.text.primary#161a22#f3efe6
ui.text.secondary#52575f#c1bdb4
ui.text.tertiary#63676e#97938c
ui.text.inverse#fefdfa#0d1015
TokenPaperNight
ui.border.subtle#e2ded6#2e343d
ui.border.default#d8d4cc#383e47
ui.border.strong#b4b1a9#646973
ui.border.control#7c8088#86837b
TokenPaperNight
ui.primary.solid#161a22#f3efe6
ui.primary.hover#52575f#c1bdb4
ui.primary.on#fefdfa#0d1015
TokenPaperNight
ui.accent.solid#f6b048#f6b048
ui.accent.hover#e78d02#fcc05c
ui.accent.subtle#fdeedb#30200b
ui.accent.border#e8bb7f#6e4400
ui.accent.text#9c5906#fcd180
ui.accent.on#161a22#0d1015
TokenPaperNight
ui.record.solid#c47500#f6b048
ui.record.logo#e48a00#f6b048
ui.record.text#9c5906#fcd180
ui.record.subtle#fdeedb#30200b
TokenPaperNight
ui.success.solid#008451#2fcf8d
ui.success.hover#00784a#47dc9d
ui.success.subtle#e0f7e9#0f2a1c
ui.success.border#8fd7ad#085d3c
ui.success.text#14764a#5ee6a8
ui.success.on#fefdfa#0d1015
TokenPaperNight
ui.warning.solid#bb5300#f77f20
ui.warning.hover#ae4800#ff9645
ui.warning.subtle#ffece2#361c0d
ui.warning.border#fdaf88#7a3a0b
ui.warning.text#a84811#fca864
ui.warning.on#fefdfa#0d1015
TokenPaperNight
ui.danger.solid#d22632#f1424e
ui.danger.hover#c01c2b#ff4d5e
ui.danger.subtle#ffebe9#3a1717
ui.danger.border#ffaaa7#852b2e
ui.danger.text#be222d#ff898b
ui.danger.on#fefdfa#0d1015
TokenPaperNight
ui.info.solid#3769e0#6294fa
ui.info.hover#2e5dd0#71a0ff
ui.info.subtle#e8f1ff#17233a
ui.info.border#a4c5ff#2d4c87
ui.info.text#2f5bc2#7aa7ff
ui.info.on#fefdfa#0d1015
TokenPaperNight
ui.focus.ring#3769e0#7aa7ff

Every pair below is checked in both modes by the brand build: text at 4.5:1, large text and non-text at 3:1 (WCAG 2.2 AA). A new role that carries text or state ships with its pairs in the same change. This table is generated from the same report the brand tests gate on.

Foreground / backgroundKindFloorPaperNightResult
text.primary / bg.canvasText4.516.4216.61Pass
text.secondary / bg.canvasText4.56.8510.17Pass
text.primary / bg.surfaceText4.517.1315.19Pass
text.secondary / bg.surfaceText4.57.159.30Pass
text.primary / bg.raisedText4.517.1313.75Pass
text.secondary / bg.raisedText4.57.158.42Pass
text.primary / bg.hoverText4.515.1912.39Pass
text.secondary / bg.hoverText4.56.347.58Pass
text.primary / bg.activeText4.514.1210.93Pass
text.secondary / bg.activeText4.55.896.69Pass
text.tertiary / bg.canvasText4.55.356.23Pass
text.tertiary / bg.surfaceText4.55.595.70Pass
text.tertiary / bg.raisedText4.55.595.16Pass
text.tertiary / bg.hoverText4.54.954.65Pass
text.tertiary / bg.activeLarge text34.604.10Pass
text.inverse / text.primaryText4.517.1316.61Pass
primary.on / primary.solidText4.517.1316.61Pass
primary.on / primary.hoverText4.57.1510.17Pass
text.primary / selectionText4.514.1410.98Pass
accent.text / bg.canvasText4.55.1513.22Pass
accent.text / bg.surfaceText4.55.3712.09Pass
accent.text / accent.subtleText4.54.7910.90Pass
link / bg.canvasText4.55.837.98Pass
link / bg.surfaceText4.56.087.30Pass
accent.on / accent.solidText4.59.3110.18Pass
accent.on / accent.hoverText4.56.8111.65Pass
record.solid / bg.canvasNon-text33.3610.18Pass
record.solid / bg.surfaceNon-text33.509.31Pass
record.solid / bg.hoverNon-text33.117.60Pass
record.text / bg.canvasText4.55.1513.22Pass
record.text / bg.surfaceText4.55.3712.09Pass
record.text / record.subtleText4.54.7910.90Pass
chart.now / bg.surfaceNon-text33.509.31Pass
success.text / bg.canvasText4.55.3212.12Pass
success.text / bg.surfaceText4.55.5511.09Pass
success.text / success.subtleText4.55.019.76Pass
success.on / success.solidText4.54.679.46Pass
success.on / success.hoverText4.55.4510.88Pass
success.solid / bg.canvasNon-text34.489.46Pass
warning.text / bg.canvasText4.55.509.91Pass
warning.text / bg.surfaceText4.55.739.07Pass
warning.text / warning.subtleText4.55.108.22Pass
warning.on / warning.solidText4.54.757.27Pass
warning.on / warning.hoverText4.55.548.80Pass
warning.solid / bg.canvasNon-text34.557.27Pass
danger.text / bg.canvasText4.55.728.35Pass
danger.text / bg.surfaceText4.55.977.64Pass
danger.text / danger.subtleText4.55.307.00Pass
danger.on / danger.solidText4.55.085.11Pass
danger.on / danger.hoverText4.56.005.88Pass
danger.solid / bg.canvasNon-text34.875.11Pass
info.text / bg.canvasText4.55.837.98Pass
info.text / bg.surfaceText4.56.087.30Pass
info.text / info.subtleText4.55.436.58Pass
info.on / info.solidText4.54.856.47Pass
info.on / info.hoverText4.55.757.42Pass
info.solid / bg.canvasNon-text34.656.47Pass
border.control / bg.canvasNon-text33.735.03Pass
focus.ring / bg.canvasNon-text34.657.98Pass
border.control / bg.surfaceNon-text33.904.60Pass
focus.ring / bg.surfaceNon-text34.857.30Pass
border.control / bg.raisedNon-text33.904.17Pass
focus.ring / bg.raisedNon-text34.856.61Pass
chart.1 / bg.surfaceNon-text317.1315.19Pass
chart.2 / bg.surfaceNon-text33.658.09Pass
chart.3 / bg.surfaceNon-text33.358.62Pass
chart.4 / bg.surfaceNon-text33.817.72Pass
chart.5 / bg.surfaceNon-text33.418.48Pass
chart.6 / bg.surfaceNon-text33.897.59Pass
Owner
Okrado founders
Updated
Review by
Markdown version
/foundations/colour.md