Design Tokens

Spacing

Spacing-Tokens sorgen dafuer, dass Abstaende im gesamten Design-System konsistent bleiben. Das Token-System arbeitet dabei mit zwei Ebenen: einer festen Basis-Skala und einer theme-spezifischen UI-Skala.

Zwei Ebenen — warum?

Im Design-System gibt es Spacing-Tokens auf zwei Ebenen. Das klingt erstmal redundant, hat aber einen konkreten Grund:

--shield-space-* (Basis-Skala)
Feste Werte, die in jedem Theme identisch sind. Sie definieren das zugrundeliegende Raster und aendern sich nie — egal ob Shield, Horizon, Light oder Dark.

--shield-ui-space-* (UI-Skala)
Theme-spezifische Abstaende, die pro Theme angepasst werden koennen. Shield referenziert die Basis-Skala 1:1 — aber Horizon ueberschreibt diese Werte mit ca. 10–20% groesseren Abstaenden, um das bewusst luftigere Look-and-Feel des Themes umzusetzen.

Kurz gesagt: Die Basis-Skala ist das Fundament, die UI-Skala ist die theme-bewusste Schicht darueber.

Basis-Skala --shield-space-*

Definiert in base.json. Diese Werte sind global und unveraenderlich — sie bleiben identisch, egal welches Theme aktiv ist.

TokenWertVorschau
--shield-space-0 0rem
--shield-space-1 0.25rem
--shield-space-2 0.5rem
--shield-space-3 0.75rem
--shield-space-4 1rem
--shield-space-6 1.5rem
--shield-space-8 2rem

UI-Skala --shield-ui-space-*

Definiert pro Theme. Shield referenziert die Basis-Skala 1:1. Horizon ueberschreibt die Werte und macht sie groesser — das gibt dem Theme seinen charakteristisch luftigeren Charakter.

TokenVerwendungVorschau
--shield-ui-space-0Kein Abstand
--shield-ui-space-1Sehr klein — Inline-Elemente, Badges
--shield-ui-space-2Klein — Icon-Gaps, enge Gruppen
--shield-ui-space-3Mittel — Card-Padding, Listenelemente
--shield-ui-space-4Standard — Formfelder, Abschnitte
--shield-ui-space-6Gross — Section-Trennung
--shield-ui-space-8Sehr gross — Page-Sections

Vergleich: Shield vs. Horizon

Diese Tabelle zeigt konkret, wie Horizon die UI-Spacing-Tokens gegenueber der Basis-Skala anpasst. Shield uebernimmt die Basis-Werte 1:1, Horizon macht sie durchgehend groesser:

Stufe Basis / Shield Horizon Differenz
space-0 0rem 0rem
space-1 0.25rem 0.3rem +20%
space-2 0.5rem 0.6rem +20%
space-3 0.75rem 0.85rem +13%
space-4 1rem 1.1rem +10%
space-6 1.5rem 1.6rem +7%
space-8 2rem 2.2rem +10%

Horizon nutzt durchgehend 7–20% groessere Abstaende. Wer --shield-ui-space-* verwendet, bekommt diese Anpassung automatisch — wer stattdessen --shield-space-* nutzt, sieht in beiden Themes exakt denselben Abstand.

Welchen Token verwenden?

✔ Empfehlung: --shield-ui-space-*

Fuer den Grossteil aller Anwendungsfaelle. Wenn deine Komponente oder dein Layout sich ans aktive Theme anpassen soll, verwende immer die UI-Skala. Damit wirken Abstaende in Shield kompakt und in Horizon luftig — genau wie gewuenscht.

  • Padding / Margin in Komponenten
  • Gap in Flex/Grid-Layouts
  • Abstaende zwischen Sections
  • Innenabstaende von Cards, Dialogen, Formularen

⚠ Ausnahme: --shield-space-*

Nur verwenden, wenn ein Abstand bewusst theme-unabhaengig bleiben soll. Typische Faelle:

  • Technische Abstaende, die sich nicht aendern duerfen (z.B. feste Icon-Offsets)
  • Abstaende in theme-uebergreifenden Utility-Klassen
  • Debugging oder direkte Wert-Kontrolle

Praxisbeispiele

Card-Komponente

Padding und Gap passen sich automatisch ans Theme an:

.card {
  padding: var(--shield-ui-space-4);
  border-radius: 0.5rem;
  border: 1px solid var(--shield-ui-border);
}

.card__header {
  display: flex;
  align-items: center;
  gap: var(--shield-ui-space-2);    /* Icon + Titel */
  margin-bottom: var(--shield-ui-space-3);
}

.card__body {
  display: flex;
  flex-direction: column;
  gap: var(--shield-ui-space-2);    /* Abstand zwischen Absaetzen */
}

Formular-Layout

Abstaende zwischen Feldern und innerhalb von Gruppen:

.form {
  display: flex;
  flex-direction: column;
  gap: var(--shield-ui-space-4);    /* Abstand zwischen Feldern */
}

.form-group {
  display: flex;
  flex-direction: column;
  gap: var(--shield-ui-space-1);    /* Label zu Input */
}

.form-actions {
  display: flex;
  gap: var(--shield-ui-space-3);    /* Abstand zwischen Buttons */
  margin-top: var(--shield-ui-space-6);
}

Page-Section mit fixem Icon-Offset

Hier wird die Basis-Skala bewusst fuer ein technisches Detail genutzt:

.section-header {
  margin-bottom: var(--shield-ui-space-6);  /* ✔ theme-responsiv */
}

.icon-badge {
  /* Fester Offset, der in allen Themes gleich bleibt */
  top: var(--shield-space-1);               /* ⚠ bewusst fix: 0.25rem */
  right: var(--shield-space-1);
}