Zum Inhalt
Hey AlbertMarke und Designsystem
Als MarkdownEnglishEN

Entwickeln

Tokens

Alle Werte der Marke als benannte Rollen, hell und dunkel. Wie sie heißen, wie ihr sie einbindet — im Web, in Swift, in Token-Werkzeugen — und die vollständige Tabelle.

Ein Token ist ein Name für eine Entscheidung. --flaeche-karte sagt, wofür eine Farbe da ist. Der Wert dahinter darf sich ändern, der Name bleibt. Bauteile kennen nur Namen, nie Werte.

Namen

Tokens heißen deutsch, mit Absicht. Jeder Name beschreibt eine Rolle, nie eine Stufe auf einer Leiter. „Karte“, nicht „Beige 200“.

EbeneBeispieleWer sie benutzt
Grundfarben--grund, --karte, --tinte, --rosa, --gelb, --blaunur die semantischen Rollen
Semantische Rollen--flaeche-seite, --text-koerper, --linie-haar, --rand-offen, --akzentBauteile und Seiten
Bauteil-Rollen--knopf-primaer-flaeche, --knopf-inaktiv-text, --leiste-ort-zeigerein Bauteil und seine Zustände
Personen--person-1 bis --person-8, --person-linie-1 bis --person-linie-8, --person-textKlebezettel, Avatare, Spuren
Maße--raum-2, --karte-innen, --ziel-finger, --radius-karte, --strich-haarAbstand, Zielfläche, Form
Schrift--schrift-titel, --grad-karten-titel, --gewicht-text-fest, --laufweite-titelTypografie
Bewegung--dauer-kurz, --verlauf-ruhigÜbergänge

Ein Bauteil greift zu einer semantischen Rolle, wenn es eine gibt. --grund direkt zu benutzen ist erlaubt, aber --flaeche-seite sagt mehr.

Hell und dunkel

Der dunkle Modus ist eine Neudefinition der Rollen, keine zweite Gestaltung. Er hängt an einem Attribut auf dem Wurzelelement:

<html data-modus="dunkel">

Die Rollen bekommen dann andere Werte. Kein Bauteil fragt nach dem Modus. Personen-Zettel, Rosa, Gelb und Blau bleiben auch nachts helle Flächen. Text darauf nimmt --person-text, --text-auf-gelb, --text-auf-blau oder --text-auf-rosa, die dunkel bleiben.

Bei reduzierter Bewegung stehen alle Dauern auf 0 ms. Das erzeugt tokens/motion.css als eigenen Block für prefers-reduced-motion.

Die Dateien

DateiInhaltFür
/tokens/tokens.jsonjeder Token aufgelöst: Name, CSS-Variable, hell, dunkel, Alias, BedeutungAgenten, Skripte, Prüfungen
/tokens/tokens.dtcg.jsondie Quelle im W3C-Format, alle Sätze in einer DateiToken-Werkzeuge, Style Dictionary
/tokens/tokens.cssCSS-Variablen hell und dunkel, Schrift, Raum, Form, Bewegungjede Web-Oberfläche
/tokens/fonts.css@font-face für die vier Schriften, lokalWeb, zusammen mit den Schriftdateien
/tokens/tailwind.cssTailwind-v4-Theme: dieselben Rollen als UtilitiesNext.js mit Tailwind
/tokens/Tokens.swiftAlbertFarbe, AlbertRaum, AlbertSchrift, AlbertForm, AlbertBewegungSwiftUI
/regeln.jsonRegeln, die keine Werte sind: Wörter, Register, GrenzenTexte und Prüfungen

Einbinden im Web

Im Monorepo kommt alles aus dem Workspace-Paket. Die Reihenfolge zählt: Tokens zuerst, dann Bauteil-Zustände.

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

Wer Tailwind benutzt, bindet das Theme nach Tailwind ein. Es schaltet Tailwinds eigene Farben, Schatten und Radien ab.

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

Danach gibt es bg-grund, text-tinte, rounded-karte, p-raum-2, h-ziel-finger und font-schrift-titel. Den dunklen Modus erkennt die Variante dark: über data-modus.

Außerhalb des Monorepos: tokens.css und fonts.css herunterladen, die Schriften aus dem Paket daneben legen, beide Dateien einbinden.

Einbinden in Swift

Tokens.swift in das Ziel kopieren oder als Datei eines Swift-Pakets einbinden. Farben sind dynamisch und folgen dem Erscheinungsbild des Systems.

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

In Token-Werkzeugen

tokens.dtcg.json folgt dem Format der W3C Design Tokens Community Group. Werkzeuge wie Tokens Studio lesen es direkt. Die Themen stehen in $themes: Hell nimmt farben-hell, Dunkel legt farben-dunkel darüber. $metadata legt die Reihenfolge der Sätze fest.

Alle Tokens

Ein Klick auf einen Namen kopiert var(--name).

Farbe

Grundfarben (Notizbuch: warmes Papier, Tinte)
TokenHellDunkelBedeutung
#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
TokenHellDunkelBedeutung
#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
TokenHellDunkelBedeutung
#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
TokenHellDunkelBedeutung
#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
TokenHellDunkelBedeutung
#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
TokenHellDunkelBedeutung
#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.
TokenHellDunkelBedeutung
#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

Schrift

Schriften
TokenHellBedeutung
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
TokenHellBedeutung
800
400
500
600
Grade
TokenHellBedeutung
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
TokenHellBedeutung
-0.03emeng, wie in den Screensets
0em
0.08em
Zeilen
TokenHellBedeutung
1.02
1.2
1.45
Ziffern
TokenHellBedeutung
"tnum" 1, "lnum" 1Zahlen und Zeiten: tabellarische Ziffern

Raum

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

Form

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

Bewegung

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