Designsystem

Tokens, Bausteine, Voice.

Die offene Referenz zum visuellen System von Struqo, von den Tokens bis zu ganzen Seiten. Jeder Wert kommt live aus dem Code, Figma folgt ihm. Agents lesen dieselben Bausteine in apps/web/components/styleguide/catalog.ts.

01

Foundations

Die Tokens aus globals.css und das Icon-Set. Sie stehen vor den fünf Stufen: Brad Frost zählt Farben, Schriften und Icons zu den Atomen, hier stehen sie getrennt, weil sie kein Baustein sind.

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
bg-selected-card
bg-selected-card
bg-overlay
bg-overlay
bg-overlay-hover
bg-overlay-hover
bg-scrim
bg-scrim
Text
text-text
text-text
text-text-2
text-text-2
text-text-3
text-text-3
text-text-off
text-text-off
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
border-border-overlay
border-border-overlay
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-selection
border-selection
--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

Semantische Farben für Flächen, Text, Ränder, Status und Auswahl, in Hell und Dunkel.

Foundations · ReadyCode: app/globals.css
Auswahl: eine Farbe, drei Orte

Ein Blau für alles, was gewählt ist. Das Bauteil in der Zeichnung, seine Zeile im Panel, der aktive Eintrag im Picker, die offene Zeichnung in der Leiste und der Fokus-Ring lesen denselben Token. Nur die Kante trägt Farbe, die Fläche bleibt neutral.

Dieses Bauteil ist gewählt

Ebenen-Panel und Materialliste spiegeln die Auswahl aus der Zeichnung. Die linke Kante trägt das Blau, die Fläche bleibt der gewöhnliche Hover-Ton.

  • Konterlatte 6443.9 cm
  • Bekleidung West452.0 cm
  • Schalung Dach618.0 cm
--color-canvas-selection-stroke
Dieser Eintrag ist gewählt

Picker, Zeichnungs-Leiste und die Liste im Fokus-Modus markieren mit demselben Balken. Die Fläche bleibt die neutrale Karte, damit die Liste ruhig bleibt.

  • Ansicht West
  • Plan 1
  • Schnitt B-B
bg-selected-card + border-selection
Dieses Element hat den Fokus

Der Fokus-Ring liest dieselbe Farbe. Tastatur und Auswahl sprechen damit eine Sprache, und kein zweites Blau steht daneben.

--color-focus-ring = --color-selection

Wer eine neue Fläche baut, die eine Auswahl zeigt, nimmt --color-selection (als Klasse border-selection oder bg-selection) oder SELECTION_ECHO_EDGE aus lib/editor/selection-echo.ts. Der Wert steht einmal in globals.css, damit nicht wieder drei Muster für dieselbe Aussage entstehen. Die gefüllte Fläche der An-Zustände (2D|3D, Icon-Toggles) ist keine Auswahl und bleibt neutral invertiert.

Eine Auswahlfarbe in Zeichnung, Panels und Listen.

Foundations · ReadyCode: lib/editor/selection-echo.ts
Schriftfamilien

Drei Familien, jede mit einem Auftrag: Inter für die Arbeit im Editor, Manrope für das, womit Struqo nach außen spricht, IBM Plex Mono für alles, was man abliest. Die letzte Zeile jeder Karte zeigt, welche Schrift der Browser für die Probe tatsächlich nimmt.

Arbeit
Inter
Zwölf Sparren 8/16, KVH Fichte, je 3,20 m
Aa Bb Cc Ää Öö Üü ß 0123456789
Aa 400Aa 500Aa 600Aa 700
Wann
Alles, was man im Editor liest oder bedient: Panels, Menüs, Dialoge, Buttons, Zeichnungstitel, freier Text auf dem Blatt.
Wo
Editor, Projektliste, Anmeldung und Registrierung.
--font-sans · font-sans
Schnitte 400 / 500 / 600 / 700
Kommunikation
Manrope
Zwölf Sparren 8/16, KVH Fichte, je 3,20 m
Aa Bb Cc Ää Öö Üü ß 0123456789
Aa 400Aa 500Aa 600Aa 700
Wann
Alles, womit Struqo nach außen spricht: Überschriften, Fließtext, Navigation und Buttons.
Wo
Jede Seite mit Marketing-Kopf und -Fuß: Startseite, Unterseiten, Journal, Hilfe, Konto, Styleguide. Nie im Editor.
--font-comms · font-comms
Schnitte 400 / 500 / 600 / 700
Ablesen
IBM Plex Mono
Zwölf Sparren 8/16, KVH Fichte, je 3,20 m
Aa Bb Cc Ää Öö Üü ß 0123456789
Aa 400Aa 500
Wann
Alles, was man abliest: Maßzahlen mit Einheit (immer tabular-nums), Bemaßung, Achsen, Lineale, Maßstabsbalken, Eyebrows, Bildunterschriften, Token-Namen.
Wo
Überall, in Editor und Kommunikation gleich.
--font-mono · font-mono
Schnitte 400 / 500

Ein Block, eine Schrift. Ein Mono-Label und ein Text in Inter oder Manrope werden zwei Blöcke, sonst passt die Grundlinie nicht (§ Register).

Typo-Skala
Ag 1234
--text-2xs
Ag 1234
--text-caption
Ag 1234
--text-xs
Ag 1234
--text-ui
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
Zeilenhöhen-Raster

Jede Stufe trägt ihre Zeilenhöhe, ein Vielfaches von 4 px. Die zarten Linien liegen alle 4 px, die kräftigen am Ende jeder Textzeile, also immer auf einer zarten. Rechts stehen Größe und Zeilenhöhe, im Browser gemessen. Die Zeilen liegen damit auf dem Raster, die Grundlinien noch nicht: die Schrift sitzt mittig im Zeilenkasten.

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-2xs

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-caption

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-xs

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-ui

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-sm

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-base

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-prose

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-lg

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-xl
Grundlinienraster

Mit baseline-grid steht die erste Grundlinie auf einer 4-px-Linie der eigenen Box, jede weitere eine Zeilenhöhe tiefer. Die Box bleibt so hoch wie ohne die Klasse, nur die Schrift rückt um höchstens 2 px. Die kräftigen Linien liegen auf den Grundlinien, die zarten alle 4 px. Rechts Grundlinie und Zeilenhöhe, im Browser gemessen.

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-2xs

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-caption

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-xs

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-ui

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-sm

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-base

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-prose

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-lg

Sparren, Pfetten und Latten
stehen im selben Takt.

--text-xl

Dieselbe Karte zweimal, das Raster beginnt an ihrer Außenkante. Links trägt sie einen Rahmen mit border, der den Inhalt um 1 px nach unten schiebt. Rechts liegt der Rahmen als inset-ring innen und verschiebt nichts.

Stückliste

Carport Süd

Zwölf Sparren 8/16, KVH Fichte, alle auf Linie.

12 Stk. · 3,20 m

border ·

Stückliste

Carport Süd

Zwölf Sparren 8/16, KVH Fichte, alle auf Linie.

12 Stk. · 3,20 m

inset-ring ·
Register für Marketing und Journal

Auf Marketing- und Journal-Seiten steht jede Grundlinie auf einem Raster von 24 px, über alle Spalten hinweg. Fließtext trägt eine Zeile von 24 px. Überschriften behalten ihre Zeilenhöhe und belegen ganze Module. Ein Bild beginnt auf der Versalhöhe der ersten Zeile daneben und endet auf einer Grundlinie. Die Linien liegen unter den Grundlinien.

Beispiel

Erst zeichnen, dann sägen.

Holz verzeiht viel, nur keine falschen Längen. Ein Plan, den Du selbst gezeichnet hast, macht aus dem Vorhaben eine Reihenfolge.

Zwölf Sparren 8/16, KVH Fichte. Diese Spalte ist kleiner gesetzt und steht auf denselben Linien.

baseline-register · register-figure · 24 px ·
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

Schriftgrößen, Zeilenhöhen und Laufweiten als Tokens, Inter für den Editor, Manrope für die Kommunikation, IBM Plex Mono für Maße.

Foundations · ReadyCode: app/globals.css
Spacing (8px-Raster)
--spacing-1
--spacing-2
--spacing-3
--spacing-4
--spacing-6
--spacing-8
--spacing-12
--spacing-16

Abstände im 8-px-Raster.

Foundations · ReadyCode: app/globals.css
Corner Radius
--radius-sm
--radius-md
--radius-lg
Shadow
--shadow-sm
--shadow-md
--shadow-lg

Eckenradien, 4 px als Standard.

Foundations · ReadyCode: app/globals.css

Drei Schattenstufen für schwebende Flächen.

Foundations · ReadyCode: app/globals.css
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, in der Ansicht hinten
--stroke-din-mittel
In der Ansicht zwischen vorn und hinten
--stroke-din-breit
Geschnitten, in der Ansicht vorn
--stroke-din-extra-breit
Massivwand im Schnitt, Umriss der Ansicht

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

Strichstärken nach DIN EN ISO 128-20 für Zeichnung und Druck.

Foundations · ReadyCode: app/globals.css
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

Dauern und Kurve für Übergänge.

Foundations · ReadyCode: app/globals.css
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

Maximale Inhaltsbreite.

Foundations · ReadyCode: app/globals.css

Ebenen für Sticky, Menüs, Dialoge und Tooltips.

Foundations · ReadyCode: app/globals.css
Icons

85 Icons auf einem 16er Raster mit 1,25 px Strich, die Chevrons für Eingabefelder auf 10 px. Sie übernehmen die Textfarbe ihrer Umgebung und lesen sich deshalb in beiden Themes gleich. Gruppiert nach dem Ort, an dem sie sitzen.

Kopfleiste
@/components/editor/icons/topbar · 20
  • ExportIcon
  • FocusIcon
  • GridIcon
  • HatchIcon
  • HelpIcon
  • KeyboardIcon
  • MenuIcon
  • PrintIcon
  • ProjectsIcon
  • RedoIcon
  • RulerIcon
  • SettingsIcon
  • SnapIcon
  • ThemeDarkIcon
  • ThemeLightIcon
  • ThemeSystemIcon
  • UndoIcon
  • ZoomFitIcon
  • ZoomInIcon
  • ZoomOutIcon
Werkzeuge
@/components/editor/icons/tools · 19
  • AutoDimensionIcon
  • BeamIcon
  • CircleIcon
  • CutIcon
  • DetailMarkerIcon
  • DimensionIcon
  • MassiveWallIcon
  • MeasureIcon
  • NorthArrowIcon
  • PanIcon
  • PenIcon
  • PolygonIcon
  • ScaleBarIcon
  • SectionLineIcon
  • SelectIcon
  • SketchRectIcon
  • TextIcon
  • TriangleIcon
  • WallIcon
Bedienelemente
@/components/editor/icons/controls · 28
  • AlignBottomIcon
  • AlignCenterXIcon
  • AlignCenterYIcon
  • AlignLeftIcon
  • AlignRightIcon
  • AlignTopIcon
  • CheckIcon
  • ChevronDownIcon
  • ChevronLeftIcon
  • ChevronRightIcon
  • CloseIcon
  • CubeIcon
  • DeleteIcon
  • DistributeHorizontalIcon
  • DistributeVerticalIcon
  • DownloadIcon
  • DuplicateIcon
  • FullscreenIcon
  • HiddenIcon
  • LockedIcon
  • MoreHorizontalIcon
  • PlusIcon
  • RotateIcon
  • ShadowIcon
  • SurroundingsIcon
  • SyncIcon
  • UnlockedIcon
  • VisibleIcon
Bauteile
@/components/editor/icons/components · 12
  • BeamComponentIcon
  • BoardIcon
  • CladdingIcon
  • JoistIcon
  • PanelIcon
  • PostIcon
  • RafterIcon
  • RoofingIcon
  • ShrubIcon
  • StudIcon
  • TreeIcon
  • WallFrameIcon
Ansichten
@/components/editor/icons/view-types · 6
  • DetailGlyphIcon
  • ElevationGlyphIcon
  • IsoGlyphIcon
  • MemberGlyphIcon
  • PlanGlyphIcon
  • SectionGlyphIcon

Jedes Icon sitzt in IconBase, dem einzigen zugelassenen SVG-Rahmen. Bedienbar wird es im IconButton, der Beschriftung und Tooltip mitbringt.

Alle Icons von Editor und App, 16er Raster, 1,25 px Strich, Farbe aus der Umgebung.

Foundations · ReadyCode: components/editor/icons
Designsystem · Struqo