Designsystem

Tokens, Typografie, Voice.

Eine offene Referenz zum visuellen System von Struqo. Alle Werte werden live aus apps/web/app/globals.css gelesen, die Seite kann also nicht vom Code abweichen.

Quelle der Wahrheit ist der Code. Die Figma-Bibliothek und diese Seite spiegeln globals.css, niemals umgekehrt.

Flächen
bg-body
bg-body
bg-elevated
bg-elevated
bg-surface
bg-surface
bg-hover
bg-hover
bg-active
bg-active
bg-selected
bg-selected
Text
text-text
text-text
text-text-2
text-text-2
text-text-3
text-text-3
text-text-disabled
text-text-disabled
text-text-on-selected
text-text-on-selected
text-interactive
text-interactive
text-interactive-hover
text-interactive-hover
Ränder
border-border-default
border-border-default
border-border-strong
border-border-strong
Status (UI-Feedback)
--color-success
text-success
--color-success-subtle
bg-success-subtle
--color-warning
text-warning
--color-warning-subtle
bg-warning-subtle
--color-error
text-error
--color-error-subtle
bg-error-subtle
--color-info
text-info
--color-info-subtle
bg-info-subtle
--color-focus-ring
Canvas-Objektzustände
--color-state-selected
--color-state-hover
--color-state-locked
--color-state-hidden
--color-state-error
--color-state-warning
--color-state-success
--color-state-info
Holzarten
--color-wood-fichte
--color-wood-laerche
--color-wood-douglasie
--color-wood-eiche
--color-wood-stroke
Hinweise und Status

Vier Konventionen, abgestuft nach Dringlichkeit. Warnung (rot) für blockierende Fehler oder Daten-Inkonsistenz. Alert (orange) für nicht-blockierende Aufmerksamkeit. Hinweis (blau) für neutrale Information. Erfolg (grün) für Bestätigungen. Farbe trägt die Botschaft, der Container bleibt zurückhaltend.

Warnung

Zeichnung weicht vom Querschnitt ab. Breite 120 → 100 mm.
Blockierender Fehler, Daten-Inkonsistenz, Haftungsausschluss
<Notice tone="warning">

Alert

E-Mail-Adresse noch nicht bestätigt. Save-Mails sind pausiert.
Aufmerksamkeit nötig, nicht blockierend
<Notice tone="alert">

Hinweis

Maße werden in mm gespeichert. Anzeige folgt der gewählten Einheit.
Neutrale Information, Tipp, Tooltip
<Notice tone="info">

Erfolg

Projekt gespeichert.
Bestätigung nach Aktion
<Notice tone="success">
Ladeanzeige

Die Sachinformation führt über Position, nicht über Helligkeit. Aller Text bleibt im selben ruhigen Ton; laut sind nur die Aktivitäts-Signale. Darunter läuft ein indeterminierter Balken im Arbeits-Takt (1,6s, linear): ein Determinacy-Zeichen, das keine Prozentzahl behauptet, die niemand hat. Die Anzeige steht ab der ersten Millisekunde, blendet am Ende über 180ms aus und erfindet damit keine Wartezeit. Erst ab 6 Sekunden kommen der Sekundenzähler und der sägende Struqo-Meister dazu, dort wo Ablenkung hilft statt zu bremsen. Unter prefers-reduced-motion steht der Streifen still, der Text bleibt.

Projekt „Carport Winni“ wird geladen …
Füllt die Wartefläche (Canvas, Viewport)
<LoadingIndicator variant="overlay">
Projekt „Carport Winni“ wird geladen …
Das dauert länger als üblich.
Langer Fall: Zeit und Figur kommen dazu
<LoadingIndicator figure hint={…}>
Projekt „Carport Winni“ wird geladen …
Prüfe bitte Deine Internetverbindung.
Aus der Feststellung wird eine Handlung
<LoadingIndicator figure hint={…}>
Laden …
Kompakt in Zeilen und Panels
<LoadingIndicator variant="inline">
ProgressBar

Der Balken einzeln, für Wartezeiten außerhalb der Ladeanzeige. Bewusst ohne value-Prop: solange kein Ladepfad einen echten Fortschritt misst, wäre ein sich füllender Balken eine Behauptung ohne Grundlage. Für Screenreader stumm, die umgebende Live-Region trägt die Aussage.

Determinacy ohne messbaren Fortschritt
<ProgressBar />
Typo-Skala
Ag 1234
--text-xs
Ag 1234
--text-sm
Ag 1234
--text-base
Ag 1234
--text-lg
Ag 1234
--text-xl
Ag 1234
--text-section-xs
Ag 1234
--text-section-sm
Ag 1234
--text-section
Ag 1234
--text-display-xs
Ag 1234
--text-display-sm
Ag 1234
--text-display
Line-Height
--leading-display
Anwendung: Headlines
--leading-heading
Anwendung: Headlines
Letter-Spacing
--tracking-display
Anwendung: Display und Mono-Labels
--tracking-heading
Anwendung: Display und Mono-Labels
--tracking-eyebrow
Anwendung: Display und Mono-Labels
Eyebrow-Utility
KENNT SICH AUS MIT HOLZBAU.eyebrow
Spacing (8px-Raster)
--spacing-1
--spacing-2
--spacing-3
--spacing-4
--spacing-6
--spacing-8
--spacing-12
--spacing-16
Corner Radius
--radius-sm
--radius-md
--radius-lg
Shadow
--shadow-sm
--shadow-md
--shadow-lg
Strichstärken (DIN)

Linienbreiten der Zeichnung nach DIN EN ISO 128-20, Liniengruppe 1. Die Norm-Reihe schreitet mit Faktor Wurzel 2; eine Liniengruppe wählt daraus ein Paar breit zu schmal im Verhältnis 2:1. Was die Schnittebene trifft, bekommt die breite Volllinie, was dahinter liegt die schmale.

--stroke-din-sehr-schmal
Sehr dünn, als Stufe definiert
--stroke-din-schmal
Hinter der Schnittebene
--stroke-din-breit
Geschnitten und Ansichts-Bauteile
--stroke-din-extra-breit
Massiv- und Bestandswand

Die Proben zeichnen 1:1, so wie der Canvas bei Zoom 1 zeichnet. Auf der Stage skaliert die Strichstärke mit dem Zoom mit.

Motion
--duration-fast
Duration bzw. Easing-Kurve
--duration-normal
Duration bzw. Easing-Kurve
--duration-work-loop
Duration bzw. Easing-Kurve
--ease-standard
Duration bzw. Easing-Kurve
Layout
--max-width-container
Container-Maximalbreite
Z-Index
--z-index-sticky
Stacking-Reihenfolge
--z-index-dropdown
Stacking-Reihenfolge
--z-index-modal
Stacking-Reihenfolge
--z-index-tooltip
Stacking-Reihenfolge
Card

Container für Listen-Items in drei Varianten: statisch für passive Info, interaktiv mit Hover-Zustand, und mit Aktions-Menu für sekundäre Operationen. Der Card-Body bleibt immer das primäre Click-Target. Sekundäre Aktionen leben im ⋯-Menu rechts oben, niemals als parallele Buttons.

Beispiel-Eintrag

Sekundäre Info, neutral gehalten

Statisch
<Card>
Beispiel-Eintrag

Sekundäre Info, neutral gehalten

Interaktiv
<Card interactive>
Beispiel-Eintrag

Sekundäre Info, neutral gehalten

Mit Aktions-Menu
<Card interactive> + <DropdownMenu>
FormField

Label, Helper-Text, Fehlermeldung und a11y-Verdrahtung um ein beliebiges Control. Der Fehler-Zustand setzt aria-invalid und färbt den Rahmen. Control-agnostisch: Input, Select oder Textarea.

Wir teilen sie mit niemandem.

helper

Pflichtfeld.

error · aria-invalid
required
control-agnostic (select)
Picker

Eine Auswahl-Liste für fünf Instanzen: Projekt, Blatt, Typwahl, Snap-Weite, Einheit. Der geltende Eintrag ist markiert und bleibt wählbar; deaktiviert ist nur, was es real nicht gibt. Klick auf den Knopf öffnet sie, Esc schließt sie und gibt den Fokus zurück.

<Picker side="bottom" sections={…} />
Speicher-Punkt

Gesichert ist der Ruhezustand und bleibt stehen, das Speichern pulst. Offline und Speicher-Fehler sind zwei Lagen: amber heißt, es läuft von allein weiter, rot heißt, hier ist etwas zu tun. Der Titel daneben behält in jedem Zustand seine Farbe.

Noch nichts zu sichern
idle
Wird gesichert
saving
Gesichert
saved
Offline, wird nachgeholtWird nachgeholt
offline
Speichern fehlgeschlagen, Struqo versucht es weiterFenster offen lassen
error
Nicht gesichertNicht gesichert
guest
Frische abgeleiteter Ansichten

Die Zeichnungen-Rail zeigt je Ansicht, ob die Projektion noch zu ihrem Quell-Plan passt. Das ist kein Speicher-Status: die Anzeige weiß nichts von Netz oder Server, sie vergleicht nur Ableitung gegen Quelle. Geschlossener Ring heißt vollständig, offener Bogen heißt es fehlt etwas. Ein Klick zieht nach.

Aktuell
Veraltet, aktualisieren
Illustration

Baum-Behandlungen.

Drei Antworten auf „Was hätte Dieter Rams gemacht?" für den Holz-Baustein. Gleiche Geometrie, drei Dialekte. Verwendet auf der Landing („Warum Holz") und der Haltungsseite.

Konstruktion

Baum als Holzzeichnung: schraffierter Pfosten-Stamm, Mono-Bemaßung, facettierte Krone.

Strich

Reines Liniendialekt, dieselbe Sprache wie die ValueProps-Diagramme.

Aicher

Flächiges Piktogramm in gedämpftem Grün, am weichsten und organischsten.

Voice und Tone

Selbstkritisch-entspannt mit Augenzwinkern.

Dosiert, drei bis fünf Pointen pro größerer Seite. Das Produkt soll wachsen und groß werden, die Haltung darf heute schon schmunzeln, ohne sich klein zu machen.

Muster
Noch X
So
v0.9 · Holzbau-Planer · noch Beta
Nicht so
v0.9 · Holzbau-Planer · in Beta
Noch signalisiert: wir wissen, wo wir stehen, wir sind dran. In hängt im Raum.
Muster
Klammer-Relativierung
So
Plan und Stückliste für (kleine) Holzprojekte.
Nicht so
Plan und Stückliste für Holzprojekte.
Die Klammer lächelt über die aktuelle Kleinheit, ohne Wachstum auszuschließen.
Muster
Kompetenz-Pivot
So
Dafür gibt es teurere Werkzeuge.
Nicht so
Dafür gibt es bessere Werkzeuge.
Teurer beschreibt Fakt, bessere wäre Selbstabwertung.
Muster
Honest Punchline
So
Ein Entwickler, erreichbar. Meistens.
Nicht so
Ein Entwickler, immer für dich da.
Der zweite Satz relativiert ehrlich und schafft Vertrauen.
Offene Stellen

text-text-3 scheitert derzeit am WCAG-AA-Kontrast, Panel-Inputs unterdrücken den globalen Focus-Ring, und die Holz-Swatches leben noch außerhalb des CSS-Tokensystems. Details in docs/DESIGN_SYSTEM.md, Abschnitt Known gaps.

Designsystem · Struqo