Skip to content
Hey AlbertBrand and design system
As MarkdownDeutschDE

Build

Tokens

Every value of the brand as a named role, light and dark. How they are named, how to use them — on the web, in Swift, in token tools — and the complete table.

A token is a name for a decision. --flaeche-karte says what a colour is for. The value behind it may change, the name stays. Components know only names, never values.

Names

Tokens are named in German, by design. Each name describes a role, never a step on a scale: „Karte“ (card), not „Beige 200“.

LevelExamplesUsed by
Base colours--grund, --karte, --tinte, --rosa, --gelb, --blauonly the semantic roles
Semantic roles--flaeche-seite, --text-koerper, --linie-haar, --rand-offen, --akzentcomponents and pages
Component roles--knopf-primaer-flaeche, --knopf-inaktiv-text, --leiste-ort-zeigerone component and its states
People--person-1 to --person-8, --person-linie-1 to --person-linie-8, --person-textsticky notes, avatars, lanes
Sizes--raum-2, --karte-innen, --ziel-finger, --radius-karte, --strich-haarspacing, targets, shape
Type--schrift-titel, --grad-karten-titel, --gewicht-text-fest, --laufweite-titeltypography
Motion--dauer-kurz, --verlauf-ruhigtransitions

A component reaches for a semantic role whenever one exists. Using --grund directly is allowed, but --flaeche-seite says more.

A few words you will meet in names:

GermanEnglishGermanEnglish
grundgroundraumspace
kartecardzieltarget
flaechesurfaceschrifttypeface
tinteinkgradsize
linielinegewichtweight
randoutlinedauerduration
knopfbuttonverlaufeasing
helllightdunkeldark

Light and dark

Dark mode redefines the roles; it is not a second design. It hangs on one attribute on the root element:

<html data-modus="dunkel">

The roles then take different values. No component asks which mode is on. Person notes, pink, yellow and blue stay light surfaces at night. Text on them uses --person-text, --text-auf-gelb, --text-auf-blau or --text-auf-rosa, which stay dark.

With reduced motion every duration is 0 ms. tokens/motion.css emits that as its own block for prefers-reduced-motion.

The files

FileContentsFor
/tokens/tokens.jsonevery token resolved: name, CSS variable, light, dark, alias, meaningagents, scripts, checks
/tokens/tokens.dtcg.jsonthe source in W3C format, all sets in one filetoken tools, Style Dictionary
/tokens/tokens.cssCSS variables light and dark, type, space, shape, motionany web surface
/tokens/fonts.css@font-face for the four fonts, served locallyweb, together with the font files
/tokens/tailwind.cssTailwind v4 theme: the same roles as utilitiesNext.js with Tailwind
/tokens/Tokens.swiftAlbertFarbe, AlbertRaum, AlbertSchrift, AlbertForm, AlbertBewegungSwiftUI
/regeln.jsonrules that are not values: words, registers, limitscopy and checks

On the web

Inside the monorepo everything comes from the workspace package. Order matters: tokens first, then component states.

// app/layout.tsx
import "@hey-albert/design-system/styles.css";

With Tailwind, import the theme after Tailwind. It switches off Tailwind’s own colours, shadows and radii.

@import "tailwindcss";
@import "@hey-albert/design-system/tailwind/theme.css";
@import "@hey-albert/design-system/tailwind/shadcn.css";

Then you have bg-grund, text-tinte, rounded-karte, p-raum-2, h-ziel-finger and font-schrift-titel. The dark: variant follows data-modus.

Outside the monorepo: download tokens.css and fonts.css, put the font files from the package next to them and include both files.

In Swift

Copy Tokens.swift into the target or add it to a Swift package. Colours are dynamic and follow the system appearance.

Text("Felix · Handball")
  .foregroundStyle(AlbertFarbe.textKoerper)
  .padding(AlbertRaum.karteInnen)
  .background(AlbertFarbe.flaecheKarte, in: RoundedRectangle(cornerRadius: AlbertForm.radiusKarte))

In token tools

tokens.dtcg.json follows the W3C Design Tokens Community Group format. Tools such as Tokens Studio read it directly. Themes live in $themes: Hell (light) uses farben-hell, Dunkel (dark) layers farben-dunkel on top. $metadata sets the order of the sets.

All tokens

Clicking a name copies var(--name). Meanings are given in German, as in the source.

Colour

Grundfarben (Notizbuch: warmes Papier, Tinte)
TokenLightDarkMeaning
#F8F2E7#14110DSeitenhintergrund, warmes Creme
#EEE8DD#2A2620Standardkarte (Termin), beige
#FBF7EE#201C17Tagesreiter, Menüs, Badges auf Karten, Suchfeld
#EDE6D8#322D26Segment-Regler inaktiv, sekundäre Knöpfe
#171717#0B0A08Leiste, primäre Knöpfe, heutiger Tag, aktive Auswahl
#2C2C2C#2C2C2CSchwarz unter dem Zeiger (Knopf, Kreis, heutiger Reiter)
#3A3A3A#3A3A3ASchwarz beim Drücken
#1A1A1A#F4EFE6Fließtext, Titel
#6E6A63#A9A297Zweittext, Zeiten, Beschriftungen
#D8D0BF#3D372EHaarlinien 1 px, Ränder von Feldern und Kreisen
#F3B8DF#F3B8DFAkzent: Plus, Jetzt-Zeit, aktiver Ort, Zähler, Lupe
#F7CDE8#F7CDE8Zustands-Pillen, Tageskreis mit Offenem
#F5D95C#F5D95CFamilie und Rituale, Alberts Vorschlag (iPhone), Zahlen
#E4C63A#E4C63AFormen auf gelben Karten
#BFD9A6#BFD9A6Bewertung: gut (HQ)
#F5D95C → gelb#F5D95CBewertung: Potenzial (HQ)
#EBA7A0#EBA7A0Bewertung: schwach (HQ)
#2B2A25#2B2A25
#BFCDF0#BFCDF0Fahrten
#9DB1E3#9DB1E3Formen auf blauen Karten
#B8467F#F09CC6nur gestrichelter Rand für „ohne Zuständigen“
#4A4530#4A4530Zweittext auf gelben Flächen
#F4EFE6#F4EFE6Text und Zeichen auf Schwarz
#C9A0BD#B98CADgedämpftes Rosa-Grau für den Sonntag
Semantische Rollen: Flächen
TokenLightDarkMeaning
#F8F2E7 → grund#14110D
#FBF7EE → hell#201C17was schwebt: Menü, Reiter, Feld
#EEE8DD → karte#2A2620Termin
#BFCDF0 → blau#BFCDF0Fahrt
#F5D95C → gelb#F5D95CFamilie und Ritual
transparenttransparentVorschlag: gestrichelt, ohne Füllung
#171717 → schwarz#0B0A08
rgba(26, 26, 26, 0.32)rgba(0, 0, 0, 0.56)dämpft, was dahinter liegt
rgba(244, 239, 230, 0.08)rgba(244, 239, 230, 0.08)Ort in der Leiste unter dem Zeiger
rgba(244, 239, 230, 0.14)rgba(244, 239, 230, 0.14)aktiver Ort in der Leiste unter dem Zeiger
Semantische Rollen: Text
TokenLightDarkMeaning
#1A1A1A → tinte#F4EFE6
#1A1A1A → tinte#F4EFE6
#6E6A63 → grau#A9A297
#F4EFE6 → leistentext#F4EFE6
#9A948B#8C857A
#4A4530 → auf-gelb#4A4530
#1A1A1A → tinte#1A1A1A
#4A4F63#4A4F63Zweittext auf blauen Flächen (Fahrt)
#1A1A1A → tinte#1A1A1A
#A29B8F#7A7469gerechnet, keine Deckkraft
Semantische Rollen: Linien und Ränder
TokenLightDarkMeaning
#D8D0BF → linie#3D372E
#C2B8A2#524A3DKontur 1,5 px statt 1 px
#E4DDCE#2B2620gerechnet, keine Deckkraft
#1A1A1A → tinte#F4EFE6gestrichelte Jetzt-Achse
#6E6A63 → grau#A9A297gestrichelt grau: Vorschlag von Albert
#B8467F → offen#F09CC6gestrichelt: ohne Zuständigen
#B8467F → offen#F09CC6:focus-visible Ring
Semantische Rollen: Akzent und Bedeutung
TokenLightDarkMeaning
#F3B8DF → rosa#F3B8DFAkzent und „jetzt“ – nie Fehler
#F7CDE8 → rosa-hell#F7CDE8
#B8467F → offen#F09CC6
#BFCDF0 → blau#BFCDF0
#9DB1E3 → blau-dunkel#9DB1E3
#F5D95C → gelb#F5D95C
#E4C63A → gelb-dunkel#E4C63A
#EEE8DD → karte#2A2620
Knöpfe
TokenLightDarkMeaning
#171717 → schwarz#F4EFE6
#2C2C2C → schwarz-zeiger#E2DACDDruck macht die Fläche nicht dunkler, sondern die Schrift ruhiger
#3A3A3A → schwarz-druck#CFC6B7
#F4EFE6 → leistentext#171717
#EDE6D8 → knopf-zweit#322D26
#1A1A1A → tinte#F4EFE6
#E9E2D4#2B2620
#A29B8F → text-inaktiv#7A7469
Personenfarben (Klebezettel). Text darauf ist immer Tinte. Acht Plätze; Familie Sonntag belegt fünf.
TokenLightDarkMeaning
#D5F5C2#D5F5C2Anna - Mint
#A8E5E5#A8E5E5Tobias - Türkis
#F6D0FF#F6D0FFFelix - Flieder
#FFD6A5#FFD6A5Lena - Pfirsich
#AEBAFF#AEBAFFSofia - Himmel
#C7EFD0#C7EFD0frei
#FFC9C9#FFC9C9frei
#E3DCA8#E3DCA8frei
#1A1A1A → tinte#1A1A1A
#8FCF6E#A6DE87
#62BFBF#7FD6D6
#D28FE8#E4A8F5
#E0A55F#F0BE7C
#7B8BE0#9AA8F0
#7FC993#98DBAA
#E08F8F#F0A8A8
#B7AE6A#CFC57F

Type

Schriften
TokenLightMeaning
Ag"Bricolage Grotesque", "Helvetica Neue", system-ui, sans-serif
AgInter, system-ui, -apple-system, sans-serif
Ag"Roboto Mono", ui-monospace, "SF Mono", monospace
Ag"Reenie Beanie", "Bradley Hand", cursive
Gewichte
TokenLightMeaning
800
400
500
600
Grade
TokenLightMeaning
40px„Guten Morgen, Anna.“ auf dem Mac
30pxdieselbe Zeile auf dem iPhone
34pxZahl-Kachel: 8,7 h
22pxLogo in der Leiste
17px
14.5pxKartentitel
14px
12pxZweitzeile, Zeiten
11px
10pxWochentag im Tagesreiter
Laufweite
TokenLightMeaning
-0.03emeng, wie in den Screensets
0em
0.08em
Zeilen
TokenLightMeaning
1.02
1.2
1.45
Ziffern
TokenLightMeaning
"tnum" 1, "lnum" 1Zahlen und Zeiten: tabellarische Ziffern

Space

8-px-Raster
TokenLightMeaning
4px
8px
16px
24px
32px
40px
48px
64px
Abstände, wie in den Screensets gemessen
TokenLightMeaning
12px
8px
32px
20px
Zielflächen
TokenLightMeaning
28px
44px
56px
Leisten
TokenLightMeaning
220px
72px
64px
768pxab hier ist es ein Tisch, kein Handy (nur Tailwind-Breakpoint, nicht in spacing.css)

Shape

Radien
TokenLightMeaning
16pxKarten und Menüs
12pxTagesreiter, kleine Karten
24pxiPhone-Leiste
22pxMac-Block
999pxPillen, Kreise, Knöpfe
Striche
TokenLightMeaning
1px
1.5pxKontur wird stark, statt Schatten
1.5px
5px 4px
Kippung
TokenLightMeaning
0.3degwas liegt, ist leicht gekippt
0degwas schwebt, steht gerade
Schatten und Fokus
TokenLightMeaning
nonenicht verhandelbar
2px
2px

Motion

Dauern
TokenLightMeaning
120ms
200ms
300ms
Verläufe
TokenLightMeaning
cubic-bezier(0.2, 0, 0.2, 1)
cubic-bezier(0.4, 0, 0.6, 1)
Reduzierte Bewegung
TokenLightMeaning
0ms
0ms
0ms