Musterbogen
Jede Komponente aus src/components/knglmrt/ mit allen Varianten, die sie kennt. Wer etwas Neues baut, nimmt es von hier — und trägt es hier nach.
src/app/knglmrt-theme.css
Die Markenfarben — die einzige Stelle im Projekt mit Hex-Werten. Alles andere sind Rollen, die hierauf zeigen. Im Dark Mode unverändert.
pink100 60 30 15 yellow120 100 60 30 blue100 60 30 green100 60 30 red100 60 30 brown120 100 60 30 dark100 60 30 ink– soft paper– pink grey tintavatar zebra quiet-hover src/app/knglmrt-theme.css · public/branding/backgrounds
Alle Flächenvarianten als Klasse .knglmrt-terrazzo-*. Im Dark Mode ersetzt die Kartenfläche das Muster.
terrazzo-fein-rosafein, zartrosa – Standard
terrazzo-grob-rosagrob, zartrosa
terrazzo-grob-blaugrob, hellblau
terrazzo-grob-graugrob, warmgrau
terrazzo-grob-hellgraugrob, kühles Hellgrau
terrazzo-hellgelbgrob, cremegelb
terrazzo-kraeftig-gelbgrob, Akzentfläche
terrazzo-kraeftig-blaugrob, Akzentfläche
terrazzo-kraeftig-pinkgrob, Akzentfläche
src/app/knglmrt-theme.css · --ui-size-*
Alle Textstile, die es gibt — von groß nach klein. Größen nie als Pixelwert in Komponenten schreiben, sondern Element oder Klasse von hier nehmen. Fließtext (18px) ist die Untergrenze für alles Lesbare; kleiner sind nur Caption, Daten, Label und Tag.
Seitentitel <h1> · PageTitle — Ein Titel pro Seite.
Sektion <h2> — Überschrift eines Seitenabschnitts, z. B. „Für Mitglieder“.
Hier findest du alles zur Werkstatt.
Lead .knglmrt-lead — Einleitender Satz unter einem großen Titel.
Kartentitel <h3> · .knglmrt-card-title — Titel in Karten, Kacheln und Unterabschnitten.
Stunden für den Verein auf den Beitrag anrechnen.
Fließtext <p> (body) — Alles Lesbare: Absätze, Beschreibungen, Kacheltexte. Die Untergrenze für Text.
Musterbogen
Augenbraue .knglmrt-caption — Die einzige Augenbraue: über Titeln (PageTitle, Hero), Abschnittsmarken.
Daten .knglmrt-num — Daten, Zeiten, Beträge, IDs, Mitgliedsnummer.
Kennzahl .knglmrt-value — Die eine Zahl auf einer StatTile.
Label .knglmrt-label — Beschriftung von Feldern und StatTiles.
Tag .knglmrt-tag · Badge — Nur in Statusmarken. Kleinste Größe im System.
components/knglmrt/Button.tsx
Primary: volle Markenfarbe ohne Rahmen. Secondary: dieselbe Farbe mit 25 % Deckkraft, ebenfalls ohne Rahmen. Vier Größen, unabhängig von der Variante.
kind="primary"kind="secondary"kind="emphasis"kind="quiet"kind="ghost"kind="tertiary"kind="admin"kind="danger-primary"kind="danger-secondary"size="chip"size="small"size="medium"size="large"fullWidthcomponents/knglmrt/SegmentedControl.tsx
Eine Zeile, mehrere Schalter, genau einer aktiv. Die Segmente sind Buttons, die Kontur sitzt am Rahmen.
value="liste"size="small"components/knglmrt/Field.tsx
Das beschriftete Eingabefeld — die Grundform aller anderen Felder. Fokus färbt Kontur und Beschriftung pink, ein Fehler tut dasselbe und stellt seinen Satz darunter.
components/knglmrt/Textarea.tsx
Das mehrzeilige Feld. Der Zähler sitzt rechts unter der Kante und läuft in Fira Mono — überschritten wird er pink.
components/knglmrt/Select.tsx
Geschlossen ein Field mit Caret, offen fällt die Liste mit pinker Kontur darüber. Auf/Zu, Tastatur und Klick nach außen macht die Komponente selbst.
components/knglmrt/NativeSelect.tsx
Die Auswahl mit <option>-Kindern — für lange Kontenpläne und alles, was der Browser selbst besser scrollt. Gleicher Rahmen wie Field, das Dreieck des Browsers weicht dem Caret des Systems.
components/knglmrt/FieldShell.tsx
Der Rahmen ohne Steuerelement: Beschriftung oben, Hinweis oder Fehler unten. Für alles, was kein natives Feld ist — Autocomplete, Mehrfachauswahl, Segmented Control.
components/knglmrt/FormSection.tsx
Der Abschnitt im Formular: Überschrift, Einordnung, darunter die Felder. Die Kontur hält ihn zusammen — kein Schatten, keine Rundung. Ohne title bleibt der Kopf weg, die Kontur bleibt.
Alles, was auf dem Beleg steht.
Ohne title: derselbe Rahmen, kein Kopf — für Abschnitte, die ihre Überschrift selbst mitbringen.
components/knglmrt/Combobox.tsx
Tippen und wählen. Der getippte Teil jeder Zeile bleibt fett und pink stehen; gefiltert wird im Feld, solange keine eigene filter-Funktion kommt.
components/knglmrt/MultiSelect.tsx
Mehrfachauswahl aus denselben Teilen wie Select: Gewähltes steht als eckige Marke im Feld, die Liste bleibt offen. Rückschritt in der leeren Suche nimmt die letzte Marke zurück.
components/knglmrt/SearchField.tsx
Lupe links, Trefferzahl und Kreuz rechts. Beide Zeichen sind geometrisch — gezeichnetes Material gibt es erst ab 40px.
components/knglmrt/Stepper.tsx
Zahl zwischen zwei Tasten, alles in einer Kontur. Der Wert ist tippbar — zwölf Stunden klickt niemand zwölfmal.
components/knglmrt/Choice.tsx
Kästchen, Punkt und Schalter — quadratisch mit Absicht. Darunter liegt ein echtes Feld, die Optik hängt an peer-*.
components/knglmrt/Badge.tsx
Statusmarke, 10px uppercase, nie rund. Status läuft über die Tints: Erfolg grün, Fehler rot, Warten gelb.
tone="offen"tone="wartet"tone="gebucht"tone="neutral"tone="neu"tone="kontur"components/knglmrt/Notice.tsx
Tint-Block ohne Kontur und ohne Rundung, optional mit Kopfzeile.
components/knglmrt/StatTile.tsx
Eine Zahl, ein Label, optional ein Balken. Zahlen laufen in Fira Mono.
components/knglmrt/Table.tsx
Primitive statt einer fertigen Tabelle: Table · THead · Th · TBody · Tr · Td · TFoot · TableEmpty.
| Werkbereich | Status | Betrag |
|---|---|---|
| Siebdruck | gebucht | 24,00 € |
| Holzwerkstatt | offen | 96,50 € |
| Summe | 120,50 € | |
components/knglmrt/DataTable.tsx
Dieselbe Tabelle wie oben, nur aus Daten statt aus Markup: Spalten beschreiben, Zeilen durchreichen. Eine Spalte rendert, was sie will — das Badge unten ist ein Badge, keine Prop.
| Tag | Wer | Maschine | Zeit | Status |
|---|---|---|---|---|
| 2026-08-24 | Ada Lovelace | Kreissäge | 09:00–12:00 | gebucht |
| 2026-08-25 | Grace Hopper | Lasercutter | 13:00–15:00 | offen |
| 2026-08-26 | Alan Turing | Drehbank | 10:00–11:30 | wartet |
| 2026-08-27 | Hedy Lamarr | Bandsäge | 16:00–18:00 | neutral |
| Summe | 4 Buchungen | |||
zebra · rowTone="rosa" auf der eigenen Zeile · rowMuted auf der stornierten · footer
| Wer | Zeit |
|---|---|
| Für diese Woche ist nichts gebucht. | |
rows={[]} · emptycomponents/knglmrt/Dialog.tsx
Eine Entscheidung, gerahmt: pinke Kappe, Kontur, der eine 3px-Offset-Schatten der Ansicht. Escape, Klick auf den Hintergrund und der Fokus zurück an die auslösende Taste gehören dazu.
opentone="danger"Derselbe Rahmen ohne Hintergrund — DialogPanel, für Seiten, die ihn selbst platzieren:
Der Platz geht zurück in den Kalender und die Werkstatt sieht ihn sofort wieder als frei.
components/knglmrt/SectionNav.tsx
Bereichsnavigation als eckige Chips: aktiv schwarze Fläche, sonst Kontur.
components/knglmrt/Breadcrumbs.tsx
Fira Mono 12/16, Trenner ' / ', der letzte Eintrag ohne Link.
components/knglmrt/Divider.tsx
Sechs gezeichnete Linien. Als CSS-Maske gerendert, nimmt also jede Farbe an.
number=1number=2number=3number=4number=5number=6components/knglmrt/Face.tsx · Hand.tsx
Die gezeichneten Figuren. Im Bundle liegen nur die tatsächlich genutzten Motive — die volle Bibliothek hat 93 Einträge und gehört nicht hierher.
Face number={2}Face number={3}Face number={4}Face number={5}Face number={6}Face number={8}Face number={11}Face number={17}Face number={19}Face number={21}Face number={22}Hand number={4}color="var(--primary)"flippublic/branding/logo · public/branding
Die Marken des Vereins und von konglodigital.
KNGLMRT_Bildmarke.svgKNGLMRT_Wortmarke.svg
KNGLMRT_Wortbildmarke_hoch.pngkonglodigital-logo.svgkonglodigital-logo-white.svgpublic/branding/werkbereiche
Die Werkbereich-Marken als Bilddateien (Klasse .werkbereich-mark-image für die Einfärbung im Dark Mode).
3d-druck.svg
beton.pngbuchdruck.svgcnc.svgelektronik.svgfoto-film.svgholz.svgk.svg
laser.pngmaterialvermittung.svgprintshop.svgsiebdruck.svgtextil.svgpublic/branding/controls_surfaces_tables-export/react/ui/
Aus dem Export fehlen im Projekt noch Avatar und Card. Die Formularfelder und die Tabelle stehen — die alten Felder unter src/app/[lang]/components/ui/ laufen bis zur Umstellung weiter.
components/knglmrt/Button.tsx
Die stille Variante bleibt im Ruhezustand unsichtbar und meldet sich erst beim Überfahren.
@fortawesome/free-solid-svg-icons
126 Icons, die aktuell im Projekt verwendet werden.
naryAddressBookArrowDownArrowLeftArrowRightArrowRotateLeftArrowTrendDownArrowTrendUpArrowUpArrowUpRightFromSquareArrowsLeftRightArrowsRotateBanBarsBoltBoxOpenBoxesStackedBullhornCalendarCheckCalendarDaysCameraCarChartPieCheckChevronDownChevronLeftChevronRightChevronUpCircleCheckCircleExclamationCircleInfoClipboardCheckClockCloneCodeCompareColumnsCopyCouchCubeCubesStackedDesktopDiagramProjectDisplayDoorOpenDownloadEllipsisEnvelopeEuroSignFileArrowDownFileArrowUpFileCircleCheckFileCirclePlusFileImportFileInvoiceFileLinesFilePdfFileSignatureFilterFloppyDiskFolderOpenGearGearsGraduationCapGripVerticalHammerHandshakeHouseIndustryKeyLaptopLayerGroupLinkListListCheckLocationDotMagnifyingGlassMapMicrochipMicrophoneMinusMobileScreenMoneyBillTransferMoonMusicNoteStickyPalettePaperPlanePenPenToSquarePercentPlugPlusReceiptRepeatRightLeftRotateRotateLeftSatelliteSaveScrewdriverWrenchShieldHalvedShirtSlidersSortSortDownSortUpSpinnerSunTableTableCellsLargeTabletScreenButtonTagTentTrashTreeTriangleExclamationUpRightFromSquareUserUsersVolumeHighWandMagicSparklesWarehouseXmarkletchesc/app/api/admin/story-image/samplecover.png