Skip to content

Design Tokens

Alle gestalterischen Grundwerte stehen in src/styles/theme.css im @theme-Block von Tailwind 4. Jede Variable dort erzeugt automatisch die passenden Utility-Klassen: --color-brand-600 ergibt bg-brand-600, text-brand-600, border-brand-600.

Die Regel

Komponenten benutzen Token-Namen, keine Werte. Kein bg-[#1d4fd8], kein text-[15px]. Wenn ein Wert fehlt, kommt er als Token dazu — sonst entsteht wieder das Muster aus dem Altprojekt, in dem dieselbe Farbe an zwölf Stellen leicht unterschiedlich notiert war.

Beim Kundenprojekt werden die Werte ersetzt, die Namen bleiben. Deshalb muss keine einzige Komponente angefasst werden, wenn sich die Marke ändert.

Farben

GruppeTokensVerwendung
Markebrand-50brand-950Flächen, Akzente, Links
Flächensurface, surface-muted, surface-inverseSeitenhintergrund, Abschnitte
Textink, ink-muted, ink-inverseFließtext, Sekundärtext
Linienborder, border-strongTrenner, Rahmen
FokusfocusFokusring

brand-600 ist der Standardwert für interaktive Flächen, brand-700 der Hover-Zustand. Beide erfüllen gegen Weiß das WCAG-AA-Verhältnis von 4,5:1.

Beim Austausch der Palette

Der Kontrast ist keine Nebensache, sondern eine Zusage. Die axe-Prüfung im Styleguide schlägt fehl, wenn eine neue Palette darunterfällt — das ist beabsichtigt.

Für Text und Flächen gelten die semantischen Namen, nicht brand-* direkt. Ein späterer Dark Mode ist dann eine Änderung an einer Stelle statt an jeder Komponente.

Typografie

Die Überschriftengrößen skalieren fließend über clamp() zwischen 360 px und 1280 px Viewport-Breite. Das erspart je Überschrift einen Satz Breakpoint-Utilities.

TokenEinsatz
text-displaySeitentitel, Hero
text-titleAbschnittsüberschrift
text-subtitleKarten- und Unterüberschrift
text-leadeinleitender Absatz

Darunter gilt Tailwinds Standardskala (text-base, text-sm, …).

Maße

TokenWertEinsatz
--container-content45remLesebreite für Fließtext
--container-page80remäußere Seitenbreite
--radius-card0.75remKarten, Dialoge
--radius-control0.5remSchaltflächen, Eingabefelder
--shadow-cardruhende Karten
--shadow-raisedangehobene, verlinkte Karten

Die Abstandsskala bleibt Tailwinds Standard (--spacing, Basis 0.25rem).

Schriften

Die Schriften stehen in src/lib/fonts.ts und laufen über die Astro-Fonts-API mit dem Fontsource-Provider. Die Dateien werden zur Bauzeit geladen und selbst ausgeliefert. Damit gibt es zur Laufzeit keine Anfrage an einen Google-Server — das wäre ohne Einwilligung auch gar nicht zulässig. Der End-to-End-Test „fragt nichts bei Dritten an" prüft das.

CSS-VariableFamilie (Platzhalter)Verwendung
--font-bodyInterFließtext, UI
--font-displayLoraÜberschriften

Angesprochen werden sie über font-sans und font-heading — nie über die Variablen direkt.

Höchstens zwei Familien. Das ist kein Stilhinweis, sondern ein Budget: Jede weitere Familie kostet eine Datei auf dem kritischen Pfad. checkFontBudget() bricht den Build ab, wenn eine dritte hinzukommt oder eine Familie ohne display: swap lädt.

Ausgetauscht wird an einer Stelle:

ts
// src/lib/fonts.ts
export const fontFamilies: FontFamilies = [
  {
    provider: fontProviders.fontsource(),
    // Name genau so, wie ihn Fontsource führt.
    name: 'Source Sans 3',
    cssVariable: '--font-body',
    weights: [400, 500, 700],
    styles: ['normal'],
    // latin-ext deckt die deutschen Sonderzeichen ab.
    subsets: ['latin', 'latin-ext'],
    display: 'swap',
  },
];

Nur der Fließtext-Font wird vorgeladen (<Font … preload /> im BaseLayout). Für die Überschriftenschrift erzeugt Astro einen metrisch angepassten Fallback, sodass beim Nachladen kein Umbruch springt.