Skip to main content
Design System
Foundations Design tokens

Design tokens

Working reference

Explore the foundations, roles and relationships behind HES component styling.

Scope: These tokens have one authoritative source in the Design System repository. Accepted tokens are accepted for their recorded working scope, not automatically for every HES service. Typography candidates are experimental.

How tokens work

Tokens give design decisions reusable names and values. Primitives define a value, semantic tokens explain its purpose, and component tokens assign that role to a particular component.

  1. Primitiveprimitives.colour.orange.600Raw colour value
  2. Semanticsemantic.colour.action.primary.filled.backgroundMeaning within an interface
  3. Componentcomponents.button.primary.filled.backgroundWhere the Button uses it

A change to the primitive travels through validated aliases. The current Button uses that chain through Bootstrap's native .btn-primary class.

Colour primitives

The F+ working palette contains 67 colours: seven graded families, standalone White and Warm neutral 100. Grades identify positions within a family; they do not guarantee contrast between colours.

Recorded maturity and scope: Accepted for the Design System working baseline. This is not HES-wide brand or production approval.

Green

100#DEF2D8Green 100, #DEF2D8
200#B7DEAAGreen 200, #B7DEAA
300#88C273Green 300, #88C273
400#509E2FGreen 400, #509E2F
500#3B942BGreen 500, #3B942B
600#1D8925Green 600, #1D8925
700#19621DGreen 700, #19621D
800#164016Green 800, #164016
900#122412Green 900, #122412

Orange

100#FFE6D5Orange 100, #FFE6D5
200#FCC49DOrange 200, #FCC49D
300#F19F64Orange 300, #F19F64
400#DF7500Orange 400, #DF7500
500#D2621BOrange 500, #D2621B
600#C8512AOrange 600, #C8512A
700#8B381DOrange 700, #8B381D
800#572414Orange 800, #572414
900#2F1811Orange 900, #2F1811

Purple

100#EDE9F4Purple 100, #EDE9F4
200#D5CCE2Purple 200, #D5CCE2
300#BEB1D0Purple 300, #BEB1D0
400#A492BAPurple 400, #A492BA
500#8973A4Purple 500, #8973A4
600#6E548CPurple 600, #6E548C
700#563F71Purple 700, #563F71
800#3F2A56Purple 800, #3F2A56
900#241A2EPurple 900, #241A2E

Grey

50#F5F7F7Grey 50, #F5F7F7
100#E8ECEDGrey 100, #E8ECED
200#CBD2D6Grey 200, #CBD2D6
300#AFB9BEGrey 300, #AFB9BE
400#919EA5Grey 400, #919EA5
500#74848CGrey 500, #74848C
600#5A6971Grey 600, #5A6971
700#45525BGrey 700, #45525B
800#333F48Grey 800, #333F48
900#1E2327Grey 900, #1E2327
1000#090C0EGrey 1000, #090C0E

Red

100#FEE3EARed 100, #FEE3EA
200#F5C1CERed 200, #F5C1CE
300#EA9EB4Red 300, #EA9EB4
400#D97997Red 400, #D97997
500#C44E78Red 500, #C44E78
600#AC145ARed 600, #AC145A
700#881E50Red 700, #881E50
800#672146Red 800, #672146
900#361726Red 900, #361726

Blue

100#D8EFFFBlue 100, #D8EFFF
200#A4D9FBBlue 200, #A4D9FB
300#6BBDF0Blue 300, #6BBDF0
400#009CDEBlue 400, #009CDE
500#078CC5Blue 500, #078CC5
600#0F7EAEBlue 600, #0F7EAE
700#11597BBlue 700, #11597B
800#113A4FBlue 800, #113A4F
900#11212BBlue 900, #11212B

Yellow

100#FFE8C5Yellow 100, #FFE8C5
200#FAC97DYellow 200, #FAC97D
300#F2A900Yellow 300, #F2A900
400#E68D00Yellow 400, #E68D00
500#DF7500Yellow 500, #DF7500
600#A65601Yellow 600, #A65601
700#753C07Yellow 700, #753C07
800#4F2B0FYellow 800, #4F2B0F
900#2B1B10Yellow 900, #2B1B10

White and warm neutral

White#FFFFFF
Warm neutral#EFEBE6

Swatches are for reference, not evidence that overlaid text or controls meet contrast requirements.

Semantic colour roles

Semantic tokens describe why a colour is used. Select an appropriate role rather than reusing an attractive primitive directly. The current mapping includes 26 action roles and 2 focus roles. Recorded scope: Accepted for the Button working baseline.

Primary / Filled

RoleValuePrimitive
Background#C8512Aorange.600
Border#C8512Aorange.600
Foreground#FFFFFFwhite
Hover / Background#8B381Dorange.700
Hover / Border#8B381Dorange.700
Pressed / Background#572414orange.800
Pressed / Border#572414orange.800

Primary / Outline

RoleValuePrimitive
Border#C8512Aorange.600
Foreground#C8512Aorange.600
Hover / Background#C8512Aorange.600
Hover / Foreground#FFFFFFwhite
Pressed / Background#C8512Aorange.600
Pressed / Foreground#FFFFFFwhite

Secondary / Filled

RoleValuePrimitive
Background#333F48grey.800
Border#333F48grey.800
Foreground#FFFFFFwhite
Hover / Background#1E2327grey.900
Hover / Border#1E2327grey.900
Pressed / Background#090C0Egrey.1000
Pressed / Border#090C0Egrey.1000

Secondary / Outline

RoleValuePrimitive
Border#333F48grey.800
Foreground#333F48grey.800
Hover / Background#333F48grey.800
Hover / Foreground#FFFFFFwhite
Pressed / Background#333F48grey.800
Pressed / Foreground#FFFFFFwhite

Focus colours

RoleValuePrimitive
indicator#333F48grey.800
separation#FFFFFFwhite

Outline Buttons use a transparent base as a CSS treatment, not as an invented colour token. Their interaction and focus-visible behaviour is also defined in component CSS.

Legacy compatibility

2 deprecated aliases remain in the source for compatibility. They are not recommended for new designs.

Deprecated nameCurrent reference
semantic.colour.interactive.primaryprimitives.colour.grey.800
semantic.colour.text.on-interactiveprimitives.colour.white

Component tokens

Component tokens connect shared roles to the component that consumes them. The Button is our first implemented example; this is a relationship reference, not another Button playground.

Default · Primary Filled

Primitiveorange.600
#C8512A
Semanticaction.primary.filled.background
Button--hes-components-button-primary-filled-background

Hover · Primary Filled

Primitiveorange.700
#8B381D
Semanticaction.primary.filled.hover.background
Button--hes-components-button-primary-filled-hover-background

Pressed · Primary Filled

Primitiveorange.800
#572414
Semanticaction.primary.filled.pressed.background
Button--hes-components-button-primary-filled-pressed-background

Button type and geometry also use generated aliases, rather than literal values maintained in its Sass:

Button propertyValueCSS variable
Label size18px--hes-components-button-font-size
Label line-height ratio1.5--hes-components-button-font-line-height
Vertical padding12px--hes-components-button-padding-block
Horizontal padding24px--hes-components-button-padding-inline
Border width1px--hes-components-button-border-width
Corner radius0px--hes-components-button-border-radius

At 18px, a line-height ratio of 1.5 gives the accepted 27px Button label treatment. See Button guidance for live variants and HTML. In Figma, Button colours already bind to shared semantic variables; identical component-alias names aren't required there.

Other foundations

Typography

The source currently contains 10 candidate typography roles using three manually selected contexts. Their values are generated, but the responsive thresholds, Display role and HES-wide adoption remain experimental. Review specimens on the Typography page.

Spacing, border and opacity

Current reusable measurements are scoped to Button. They are not a complete approved spacing or sizing scale for HES. New foundations should be documented when they have real consumers and decisions behind them.

Using and changing tokens

GitHub is the authoritative source for these DTCG values. The build generates CSS variables and applies them through Bootstrap where appropriate. The names on this page are working implementation references, not yet a published stable API for HES services.

/* Generated token, consumed by native Bootstrap styling */
.btn-primary {
  --bs-btn-bg: var(--hes-components-button-primary-filled-background);
}

Maturity matters: Experimental values are candidates; Pilot values are implementation references under review; Accepted values apply only to their recorded scope; Deprecated aliases are retained for compatibility. A canonical value is not necessarily a HES-wide design standard.

The coded Design System owns the token source. Figma variables represent those values for design work, but a token-to-Figma identity should only be claimed after checking that binding.

Explore canonical token files or the F+ Button working decision.