Skip to content
Hey AlbertBrand and design system
As MarkdownDeutschDE

Foundations

Motion

Short and calm. Three durations, two curves, no springs, no spinner. Motion explains what happens and stands still when the system asks for less motion.

Motion explains; it does not decorate. A card glides to where it now belongs. A toast comes up from below. A skeleton breathes until the content arrives. Nothing else moves.

Durations and curves

--dauer-kurz · 120ms
--dauer-mittel · 200ms
--dauer-atem · 300ms

--verlauf-ruhig cubic-bezier(0.2, 0, 0.2, 1)

--verlauf-atem cubic-bezier(0.4, 0, 0.6, 1)

Hover over a track. With reduced motion every duration is 0 ms.

TokenFor
--dauer-kurzstates: hover, press, focus, a colour change
--dauer-mittelreveals: menu, toast, dialog
--dauer-atemthe skeleton’s breath
--verlauf-ruhigeverything except the breath
--verlauf-atemonly the skeleton, back and forth

In SwiftUI: AlbertBewegung.verlaufRuhig(AlbertBewegung.dauerKurz).

What moves

  • States change softly: background, outline, text colour. Never the size.
  • Reveals arrive calmly; a toast rises a few pixels from below.
  • One thing travels: when Tobias takes the drive, the card glides from “open” into his lane. On the website exactly this one movement shows what Albert does.
  • The skeleton breathes between --karte and --knopf-zweit. It has the shape of the content that is about to arrive.

What never moves

  • No springs, no bouncing, no wobbling.
  • No spinner. Whoever waits sees a skeleton.
  • No progress bar as decoration.
  • No confetti, not even when Lena has ticked everything off. Albert states (“Fertig.” – done); praise comes from people.
  • No autoplay video and no carousel on the website.

Skelett

components/zustaende/Skelett.jsx
Form des Boards
Liste und Karte

Das Skelett – die Form dessen, was gleich kommt.

<Skelett form="board" spalten={7} zeilen={3} />

Nie ein Kreisel, nie ein Fortschrittsbalken. Es atmet zwischen Karte und Zweitknopf-Beige und steht still, wenn das System weniger Bewegung will.

Types (.d.ts)
/** Skelett in der Form des Inhalts. Atmet 300 ms, steht bei reduzierter Bewegung, nie ein Kreisel. */
export interface SkelettProps {
  /** "karte" (eine Karte) | "zeile" (Liste) | "board" (Stundenraster). */
  form?: "karte" | "zeile" | "board";
  /** Zeilen je Spalte. */
  zeilen?: number;
  /** Spalten im Board. */
  spalten?: number;
  style?: React.CSSProperties;
}
export function Skelett(props: SkelettProps): JSX.Element;

Reduced motion

Whoever has asked their system for less motion gets none. With prefers-reduced-motion: reduce all three durations are zero. The skeleton stops breathing; the toast simply appears.

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

In SwiftUI accessibilityReduceMotion switches motion off completely, not halfway.

In short