Mitwirken am Design-System

Gilt für packages/design/ und die Bausteine in apps/web/components/. Das Projekt arbeitet spec-getrieben (siehe CLAUDE.md): Nichts wird umgesetzt, das nicht als Spec freigegeben ist.

Leitplanken (nicht neu verhandeln)

Aufbau

OrdnerInhalt
tokens/tokens.json (Quelle aller Werte), Build, Kontrast-Gate, Mandanten-Akzent
src/base.css (semantisches HTML), components.css, print.css, icons.svg, Schriften
styleguide/Komponentenreferenz und Styleguide-Seiten
emails/, documents/, site/E-Mail-Vorlagen, Dokumentvorlagen, Marketing-Seite
test/Paket-Tests, Browser-Tests, Bildvergleich, Mock-API
docs/Entscheidungen (ADR), Microcopy, dieser Leitfaden, Changelog
brand/Bildzeichen und Markenpaket (unverändert übernommen)

Ablauf einer Änderung

  1. Spec zuerst. Neue Funktion oder neues Verhalten: Requirements → Design → Tasks (Slash-Commands /spec-requirements, /spec-design, /spec-tasks). Kleine Korrekturen am bestehenden Verhalten brauchen keine neue Spec, aber einen Eintrag im Changelog.
  2. Wert ändern? Nur in tokens/tokens.json, dann npm run build -w @klasu/design. Nie Werte in CSS kopieren. Der Token-Lint (npm test) meldet feste Farben, Dauern und große Pixelwerte.
  3. Komponente bauen:

- Klassen nach dem Muster .teil, .teil__bestandteil, .teil-variante (z. B. .btn, .card__header, .btn-danger). Zustände über Attribute (aria-pressed, aria-current, aria-invalid), nicht über eigene Klassen. - Größen und Umbrüche über Container Queries (@container), nicht über Fenster-Breiten. - In React: Server Component, Variante als Prop (variant, tone), Teile als Slots (Card.Header), keine Ansammlung von Boolean-Props. - Jede Komponente braucht alle Zustände (Ruhe, Hover, Fokus, Aktiv, Deaktiviert, Laden, Fehler, Leer) und gehört in styleguide/components.src.html.

  1. Texte: In apps/web/lib/messages/de.json und en.json. Regeln siehe MICROCOPY.md.
  2. Tests lokal ``bash npm run build -w @klasu/design npm test -w @klasu/design # Kontrast, Token-Lint, Akzent, keine externen Adressen, E-Mail-Vorlagen npm run build -w @klasu/web && npm test -w @klasu/web npm run test:app -w @klasu/design # axe, Überlauf, ohne JS, Tastatur, Bildvergleich, Schriftwechsel ``
  3. Bildvergleich bewusst ändern: Läuft er rot und die Änderung ist gewollt, die Diff-Bilder in packages/design/reports/visual-diff/ ansehen und erst dann npm run test:visual:update -w @klasu/design ausführen. Neue Referenzbilder gehören mit in den Commit und in die Beschreibung („was sieht anders aus und warum“).
  4. Manuelles: Was Automatik nicht prüft, steht in specs/design-system/phase-6/manual-checklist.md. Bei Änderungen an Navigation, Fokus oder Kalender die betroffenen Punkte durchgehen.
  5. Changelog: Eintrag unter „Unveröffentlicht“ in docs/CHANGELOG.md. Bei einer Entscheidung mit Alternativen zusätzlich ein ADR in docs/ENTSCHEIDUNGEN.md.

Mandantenfarbe

Eine Mandantenfarbe geht nur über tenantAccentCss (@klasu/design/accent). Es hält die Kontraste in beiden Themes ein und liefert null, wenn das nicht gelingt. Gelb ist gesperrt (reserviert für „Neu“).

Was nie in den Commit gehört

Echte Namen oder Daten von Kindern, Zugangsdaten, .env, gebaute Ordner (dist/), Schriftdateien aus fremden Quellen ohne Lizenztext.

Commit-Stil

Kurze deutsche Betreffzeile mit Bereich („Design-System: …“), eine Änderung pro Commit.