On this page

Design system

Authoritative reference for twin hi-fi HTML mockups. Tokens and components are implemented in CSS; this page maps Figma-scale specs to those implementations (Outfit + Material Symbols; palette in hifi-common.css).

New mockup file: load stylesheets in this order:

<link rel="stylesheet" href="hifi-common.css" />
<link rel="stylesheet" href="hifi-components.css" />
<!-- optional: form controls -->
<link rel="stylesheet" href="hifi-controls.css" />
<link rel="stylesheet" href="hifi-theme-el.css" />

Colors

Swatches use live CSS variables from :root (hifi-common.css). Hex labels mirror the token file — keep them in sync when editing ramps.

Primary brand (--pb-*)

0#3a39ff
10#4d4cff
20#6160ff
30#7574ff
40#8888ff
50#9c9cff
60#b0afff
70#c3c3ff
80#d7d7ff
90#ebebff

Secondary brand (--sb-*)

0#dcb8fe
10#dfbffe
20#e3c6fe
30#e6cdfe
40#ead4fe
50#eddbfe
60#f1e2fe
70#f4e9fe
80#f8f0fe
90#fbf7fe

Third / coral (--tc-*)

0#de3f17
10#e1522e
20#e46545
30#e7785c
40#eb8b73
50#ee9f8b
60#f1b2a2
70#f5c5b9
80#f8d8d0
90#fbebe7

Primary dark (--pd-*)

0#0b0539
10#231d4c
20#3b3760
30#545074
40#6c6988
50#85829c
60#9d9baf
70#b5b4c3
80#ceced7
90#e6e6eb

Primary background (--pbg-*)

0#f8f3ee
10#f8f4ef
20#f7f5f1
30#f8f6f3
40#f9f7f4
50#faf9f6
60#fbfaf8
70#fcfbf9
80#fdfcfb
90#fefdfd

Green success (--g-*)

0#308242
10#448e54
20#599b67
30#6ea77a
40#82b48d
50#97c0a0
60#accbb3
70#c0d9c6
80#d5e6d9
90#eaf2ec

Red danger (--r-*)

0#d91d17
10#dc332e
20#e04a45
30#e4605c
40#e77773
50#ec8e8b
60#efa4a2
70#f3bbb9
80#f7d1d0
90#fbe8e7

Yellow warning (--y-*)

0#ffaa00
10#ffb219
20#ffbb33
30#ffc34c
40#ffcc66
50#ffd47f
60#ffdd99
70#ffe5b2
80#ffeecc
90#fff6e5

Semantic tokens

Prefer these aliases in new UI; they map to palette steps in hifi-common.css.

TokenResolves toUse
--primary--pb-10Primary actions, links
--text-primary--pd-10Body text
--deep-ink / --text-heading--pd-0Headings
--text-secondary--pd-50Secondary copy
--surface / --white--pbg-90Cards, inputs
--input-border--pd-90Default borders
--success / --success-bg--g-0 / --g-90Positive state
--warning / --warning-bg--y-0 / --y-90Warning state
--error / --error-bg--r-0 / --r-90Error / destructive

Typography

Figma references General Sans Variable; mockups use Outfit via --font-sans. Sizes and line heights follow the UI kit scale; letter-spacing is 0. Copy the .ds-* class names below into page-local styles or match values in your own rules.

RoleWeightSize / lineSample class
H170048 / 58.ds-h1
H270040 / 48.ds-h2-type
H370032 / 38.ds-h3-type
H470026 / 31.ds-h4-type
H570024 / 28.ds-h5-type
S160018 / 28.ds-s1
S260016 / 24.ds-s2
B1 / B2400 / 50016 / 24.ds-b1 / .ds-b2
B3 / B4400 / 50014 / 20.ds-b3 / .ds-b4
C1 / C2 / C3400 / 500 / 50012×16, 10×14.ds-c1.ds-c3
Label50012 / 16.ds-label-type

Live samples

H1 Headline

.ds-h1

H2 Headline

.ds-h2-type

H3 Headline

.ds-h3-type

S1 Subtitle — key supporting line

.ds-s1

B1 Body regular for paragraphs and form descriptions.

.ds-b1

C1 Caption or helper

.ds-c1

Label

.ds-label-type

Button type sizes (semi-bold)

Giant 18/24

Large 16/20

Medium 14/18

Small 12/16

Tiny 10/12

Layout & grid

Desktop

Viewport reference 1440 × 1024. Twelve columns, 120px side margins, 20px gutter.

Mobile

Reference 393 × 852. Four columns, 16px margins and gutter.

Phone mockups in this repo use the framed device (~440×956 CSS px); align content to the 4-column mental model for consistency.

Radius & elevation

Corner radius

Implemented CSS variables (actual values in hifi-common.css): inputs --radius-input (12px), cards --radius-card (16px), buttons pill via --radius-btn (40px / full pill on .twin-btn), chips --radius-chip (20px).

input 12
card 16
btn pill

Elevation

shadow-1
shadow-2
shadow-3
shadow-4
shadow-5

Icons

Use Material Symbols Outlined as ligature text inside <span class="hifi-icon"> (or .twin-btn__icon on buttons). Stroke-based Figma icons map to the nearest ligature name. Typical optical sizes: 16–24px (.hifi-icon--sm where defined).

Navigation

home
search
tune
chat_bubble
notifications
settings
person
link
location_on
computer
schedule
chevron_right
chevron_left
delete

Matching

verified
track_changes
check
close
arrow_forward
arrow_back
auto_awesome
sync

Mentorship

calendar_month
menu_book
description
star
favorite
place

Buttons

Use .twin-btn with .twin-btn-primary, .twin-btn-secondary, or .twin-btn-text. Sizes: .twin-btn--sm, .twin-btn--xs. Trailing icon: <span class="twin-btn__icon" aria-hidden="true">arrow_forward</span>.

Form inputs

Default field stack: .hifi-field, .hifi-label, .hifi-input. State modifiers: .hifi-input--success, .hifi-input--warning, .hifi-input--error, .hifi-input--disabled (or native disabled).

Selection controls

Checkboxes and radios use .hifi-checkbox / .hifi-radio patterns from hifi-controls.css.

Stepper

Labeled horizontal flow: .hifi-stepper with .hifi-stepper__labels / .hifi-stepper__col / .hifi-stepper__label, then .hifi-stepper__rail with .hifi-stepper__track, .hifi-stepper__track-fill (width %), and .hifi-stepper__dots with .hifi-stepper__dot + --current / --complete. Compact wizard dots remain .hifi-steps / .hifi-step in screens.

Step 1 active

Access details
Profile details
Confirmation

Step 2 active

Access details
Profile details
Confirmation

Step 3 active

Access details
Profile details
Confirmation

Date & time (static)

Non-interactive reference only. Styles use the .ds-cal* prefix in this page. Promote to shared CSS if a real scheduling screen ships.

SUNMONTUEWEDTHUFRISAT
29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 2 3 4
2023
SUNMONTUEWEDTHUFRISAT
29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 2 3 4
:

Cards & lists

Representative patterns from hifi-components.css. Use full markup from cards-showcase.html when cloning.

Profile card

AK

Alex Kim

Public policy · Berlin · Mentor

About

Short bio text for layout reference.

View Profile

List row + status pill

1

Introduction to democracy

20 min · Lesson

In progress

Stat tile

7
Days streak

Tags & dropdown

Chips: .hifi-pill / .hifi-pill--active. Tag field for multi-value: .hifi-tag-field, .hifi-tag-chip, .hifi-tag-chip--selected, .hifi-tag-field__input. Menu: .hifi-dropdown + button.hifi-dropdown__item (+ --selected).

Pills

Topic Active

Tag field

Policy

Dropdown