Design System

Das META Design System, vollständig.

Diese Seite ist die lebende Dokumentation des Systems, aus dem meta.lu gebaut ist. Alles hier wird mit denselben Tokens gerendert wie der Rest der Website: rund 80 % Neutraltöne, 15 % Schwarz-Weiss-Kontrast, 5 % Orange. Keine Verläufe, keine schweren Schatten, Radien von 3 bis 4 Pixeln.

80 % neutral

Weiss, Grau und feine Linien tragen die Struktur. Neutral lässt Inhalt atmen und altert gut.

15 % Kontrast

Tiefes Schwarz und reines Weiss für Titel, Bänder und Footer. Kontrast erzeugt Hierarchie.

5 % Orange

Orange markiert eine Aktion, eine Kennzahl, einen aktiven Zustand. Sonst nichts. Selten, deshalb wirksam.

Keine Effekte

Kein Verlauf, kein starker Schlagschatten, Radien 3–4 px. Die Geometrie erledigt die Arbeit.

00 — Logo

Die META Wortmarke

Das Logo ist typografisch: Manrope 800, enge Laufweite, ein einzelner oranger Punkt. Es ist dasselbe Markup, das der Header rendert — nie eine exportierte Bilddatei, nie nachgezeichnet.

meta.Helle Fläche
  • Auf hellen Flächen nutzt die Wortmarke den Ink-Token (foreground), der Punkt nutzt primary.
  • Auf dunklen Flächen wird die Wortmarke reinweiss, der Punkt bleibt im selben Orange.
  • Halten Sie ringsum mindestens eine Buchstabenhöhe Schutzraum frei.
  • Die Wortmarke wird nie verzerrt, gedreht, umrandet oder mit Effekten versehen.
  • Keine Umfärbung ausserhalb dieser Tokens; der orange Punkt entfällt nie.
01 — Farben

Farb-Tokens, heller Modus

Jede Farbe der Website stammt aus einer CSS-Variablen in src/styles.css, die über @theme inline an Tailwind gereicht wird. Fest codierte Werte sind in Komponenten nicht erlaubt — genau das macht den Dark Mode kostenlos und globale Änderungen sofort wirksam.

background / card
CSS-Variable
--background, --card
Wert
oklch(1 0 0)
Hex
#ffffff
Verwendung
bg-background, bg-card
foreground / ink
CSS-Variable
--foreground, --ink
Wert
oklch(0.1582 0.0072 258.37)
Hex
#0b0d10
Verwendung
text-foreground, bg-ink
muted-fg
CSS-Variable
--muted-fg
Wert
oklch(0.5092 0.0121 261.77)
Hex
#62666d
Verwendung
text-muted-foreground
faint
CSS-Variable
--faint
Wert
oklch(0.5492 0.0121 261.77)
Hex
#6d7179
Verwendung
text-faint, ::placeholder
line
CSS-Variable
--line
Wert
oklch(0.9302 0.004 106.48)
Hex
#e8e8e5
Verwendung
border-line, border-border
line-strong
CSS-Variable
--line-strong
Wert
oklch(0.89 0.0068 106.54)
Hex
#dbdbd6
Verwendung
border-line-strong, border-input
band / hover
CSS-Variable
--band, --hover
Wert
oklch(0.9845 0.0026 106.45)
Hex
#fafaf8
Verwendung
bg-band, hover:bg-hover
primary
CSS-Variable
--primary
Wert
oklch(0.7022 0.2004 45.1)
Hex
#ff6b00
Verwendung
bg-primary, text-primary, ring
primary-hover
CSS-Variable
--primary-hover
Wert
oklch(0.6516 0.1879 44.5)
Hex
#e85f00
Verwendung
hover:bg-primary-hover
primary-foreground
CSS-Variable
--primary-foreground
Wert
oklch(1 0 0)
Hex
#ffffff
Verwendung
text-primary-foreground
destructive
CSS-Variable
--color-destructive
Wert
oklch(0.577 0.245 27.325)
Hex
#e7000b
Verwendung
text-destructive
destructive-foreground
CSS-Variable
--color-destructive-foreground
Wert
oklch(0.985 0 0)
Hex
#fafafa
Verwendung
text-destructive-foreground
footer-bg
CSS-Variable
--footer-bg
Wert
oklch(0.1582 0.0072 258.37)
Hex
#0b0d10
Verwendung
bg-footer
footer-fg
CSS-Variable
--footer-fg
Wert
oklch(1 0 0)
Hex
#ffffff
Verwendung
text-footer-foreground
footer-muted
CSS-Variable
--footer-muted
Wert
oklch(0.7461 0.0128 259.82)
Hex
#a8adb5
Verwendung
text-footer-muted
footer-line
CSS-Variable
--footer-line
Wert
oklch(0.2799 0.0141 261.69)
Hex
#252930
Verwendung
border-footer-line

Der Header nutzt --header-bg = color-mix(in oklab, background 86%, transparent): ein transluzenter Grund, der die aktive Hintergrundfarbe automatisch übernimmt — hell wie dunkel.

--header-bg: color-mix(in oklab, var(--background) 86%, transparent);

03 — Typografie

Zwei Schriften, keine Ausnahmen

Manrope (variabel 200–800, selbst gehostet als woff2, Fallback Helvetica und Arial) trägt alle Texte. IBM Plex Mono (400 und 500) ist Kickern, Labels und Zahlen vorbehalten: Sie signalisiert Daten, niemals Fliesstext.

Manrope-Schnitte

Manrope 200font-weight: 200
Manrope 300font-weight: 300
Manrope 400font-weight: 400
Manrope 500font-weight: 500
Manrope 600font-weight: 600
Manrope 700font-weight: 700
Manrope 800font-weight: 800

IBM Plex Mono

Kicker, Formular-Labels, Abschnittsnummern und Kennzahlen. Zwei Schnitte genügen: 400 für Text, 500 für Betonung.

IBM Plex Mono 400 — 0123456789

IBM Plex Mono 500 — 0123456789

Manrope

--font-sans: Manrope, Helvetica, Arial, sans-serif;
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
font-display: swap; woff2, latin + latin-ext

Typografische Skala

h-display

Digital, das sich rechnet.

  • clamp(52px, 4.9vw, 72px)
  • line-height 1.04
  • letter-spacing -0.045em
  • weight 700
  • ≤720px: 40px / 1.12
h-section

Was wir bauen

  • 46px
  • line-height 1.12
  • letter-spacing -0.035em
  • weight 700
  • ≤720px: 30px
kicker

01 — Grundlagen

  • IBM Plex Mono
  • 12px
  • letter-spacing 0.16em
  • uppercase
body

Fließtext steht in 16px mit einer Zeilenhöhe von 1.6; sekundäre Absätze nutzen die Farbe muted-fg.

  • 16px
  • line-height 1.6
  • Manrope 400
  • text-muted-foreground

::selection nutzt primary mit weisser Schrift. Formular-Platzhalter nutzen faint, nie muted-fg.

04 — Radien & Abstände

Strenge Geometrie

Vier Radien, ein Container, eine Headerhöhe. Diese Werte werden nicht von Seite zu Seite neu verhandelt — daraus entsteht die Ruhe der Website.

Radien

radius-sm3px
radius / radius-md4px
radius-lg6px
radius-xl8px

Container .sec

max-width
1240px
padding-inline
48px
≤ 1024px
32px
≤ 720px
20px
margin-inline
auto

Header

--header-h
73px
≥ 1024px
85px
position
sticky
scroll-padding-top
var(--header-h)
05 — Interaktion & Bewegung

Unaufdringlich, vorhersehbar, rücksichtsvoll

Bewegung dient dem Lesen, nie der Show. Übergänge sind kurz, Zustände sichtbar, und alles verschwindet, wenn Besucher weniger Animation verlangen.

Primärer Button

bg-primary → hover:bg-primary-hover, Radius 4px, Text primary-foreground, transition-colors.

Fokus-Ring

:focus-visible zeigt eine 2px-Kontur in primary mit 2px Abstand. Mausfokus erzeugt nie einen Ring.

Theme hell / dunkel
0.25s auf background und color
Cookie-Notice
200ms ease-in-out, ohne Bounce
Scrolling
scroll-behavior: smooth
prefers-reduced-motion
0.01ms, eine Iteration, direktes Scrollen
Warum

Warum ein striktes Design System alles verändert

Ein Design System ist keine Designer-Spielerei. Es ist eine wirtschaftliche Entscheidung.

Konsistenz schafft Vertrauen. Besucher können nicht benennen, warum eine Website seriös wirkt — sie spüren es in drei Sekunden. Wenn jede Seite dasselbe Orange, dieselbe Titelstärke, denselben Buttonradius nutzt, hört das Gehirn auf zu arbeiten und konzentriert sich auf den Inhalt. Eine Seite, die in jedem Abschnitt die Regeln wechselt, sendet dagegen ein klares Signal: Hier achtet niemand auf Details. Wenn schon die Website nachlässig ist, warum sollte es die Leistung nicht sein?

Ein Token ist eine einmal getroffene Entscheidung. Ohne System wird die Wahl eines Textgraus auf jeder Seite, in jeder Komponente, bei jedem neuen Mitarbeiter wiederholt. Am Ende existieren vierzig fast identische Grautöne und niemand entscheidet. Mit System gibt es muted-fg, es hat einen Wert, und die Frage stellt sich nicht mehr. Ändert sich die Marke, ändern Sie eine Zeile in styles.css und die gesamte Website folgt — hell, dunkel, in allen Sprachen.

Die Entwicklung wird schneller, die Wartung billiger. Eine neue Seite zu bauen wird zum Zusammensetzen: Container .sec, ein Kicker, ein h-section-Titel, ein in line gerahmtes Raster, ein Primary-Button. Es gibt nichts zu erfinden, also nichts im Review zu korrigieren. Über die Lebensdauer einer Website übersteigt die Wartung die Erstellungskosten deutlich — genau dort zahlt sich das System zurück.

Barrierefreiheit ist eingebaut, nicht nachgerüstet. Kontraste sind an der Quelle geprüft: Haupttext erreicht auf Weiss ein sehr hohes Verhältnis, muted-fg bleibt für Fliesstext über der AA-Schwelle. Fokuszustände sind überall sichtbar und identisch, der orange 2px-Ring hängt nie von der Komponente ab. Und prefers-reduced-motion gilt global, nicht pro Komponente. Wer per Tastatur navigiert oder empfindlich auf Bewegung reagiert, ist kein Sonderfall für später.

Performance folgt derselben Logik. Die Schriften sind als woff2 selbst gehostet, nach Unicode-Bereichen zerlegt und mit font-display: swap ausgeliefert — keine Anfrage an Dritte, kein unsichtbarer Text beim Laden. Zwei Familien statt acht. Keine Komponentenbibliothek für drei Buttons. Das Ergebnis ist messbar: Seiten erscheinen in unter einer Sekunde, und diese Geschwindigkeit ist selbst ein Conversion-Argument.

Der Dark Mode entsteht aus der Struktur. Weil keine Komponente eine feste Farbe kennt, heisst dunkel schalten: acht Variablen neu definieren. Kein zweites Layout, keine verstreuten Korrekturen, kein Rückfall einen Monat später. Genau so eine Funktion kostet ein Vermögen, wenn sie improvisiert wird — und fast nichts, wenn das Fundament sauber ist.

Bleibt die Disziplin der Beschränkung, der schwierigste Teil. Es ist verführerisch, einen Verlauf hinzuzufügen, einen Schatten, eine zweite Akzentfarbe. Jede Ergänzung wirkt harmlos, und jede nimmt dem Ganzen Kraft. Fünf Prozent Orange auf einer Seite treffen; Orange überall sagt nichts mehr. Ein nützliches System ist eines, das Nein sagt — darin liegt sein Wert.

Diesen Standard wenden wir bei Kundenprojekten genauso an wie bei unserer eigenen Website. Das Ergebnis ist keine hübschere Seite an sich: Es ist eine Seite, die schneller weiterentwickelt, günstiger gewartet, barrierefreier und glaubwürdiger ist. Über drei Jahre gerechnet ist der Unterschied buchhalterisch sichtbar.

Denselben Standard für Ihre Website?

Beschreiben Sie Ihr Projekt in drei Schritten. Wir melden uns innerhalb eines Werktags mit einer ersten Einschätzung und einer Budget-Grössenordnung.

Angebot anfragen