Warum Ratschläge auf Prompt-Ebene nicht ausreichen
Prompt-Tipps sind nicht falsch, sie sind nur kurzlebig. Wenn man dem Agenten eine warme Palette vorgibt, wird er diese nutzen. Sechs Screens später erinnert er sich an das Adjektiv, aber nicht an die Werte; er approximiert, und diese Approximationen driften auseinander. Das ist der Mechanismus dahinter, warum KI-erstellte Seiten konvergieren, und es ist der Grund, warum die folgenden Lösungen als Werte und nicht als Anweisungen formuliert sind.
Faustregel beim Lesen: Wenn eine Änderung als Zahl oder Hex-Wert ausgedrückt werden kann, gehört sie in die Tokens. Wenn sie nur als Adjektiv ausgedrückt werden kann, ist die Entscheidung noch nicht vollständig getroffen.
1. Neutraltöne in Richtung der Akzentfarbe tönen
Dies ist die effektivste Änderung, die jedoch fast niemand vornimmt. Standard-Themes kombinieren eine reine Graustufen-Rampe mit einer nicht zusammenhängenden Akzentfarbe, wodurch beide nicht so wirken, als gehörten sie zum selben Produkt. Gestaltete Systeme tendieren mit den Neutraltönen bei sehr geringer Chroma einige Grad in Richtung der Akzentfarbe.
/* Default: pure neutral, unrelated to the accent */
--background: oklch(0.145 0 0);
--muted: oklch(0.269 0 0);
--primary: oklch(0.55 0.19 45);
/* Tinted: same lightness, a trace of the accent hue */
--background: oklch(0.145 0.008 45);
--muted: oklch(0.269 0.012 45);
--primary: oklch(0.55 0.19 45);Halten Sie die Chroma wirklich niedrig. Ab etwa 0.02 werden die Grautöne eher als farbig denn als neutral wahrgenommen – man tauscht dann nur einen offensichtlichen Look gegen einen anderen aus.
2. Eine zweite Schriftfamilie hinzufügen
Eine einzige Familie für Überschriften, Fließtext, Labels und Zahlen ist der schnellste Weg, eine generierte UI zu entlarven. Die Lösung ist ein Pairing mit echtem Kontrast – keine zwei ähnlichen Grotesk-Schriften, da dies eher wie ein Versehen als wie eine bewusste Entscheidung wirkt.
- Serif Display + Grotesk Body. Der zuverlässigste Kontrast, kaum falsch zu machen.
- Grotesk Display + Humanist Body. Dezenter; funktioniert gut für dichte Produkt-UIs, in denen eine Serifenschrift zu dekorativ wirken würde.
- Eine Superfamilie, zwei Extreme. Ein Condensed Heavy gegenüber einem Regular. Sicher, wenn die Marke kompakt bleiben muss.
- Eine Mono-Schrift für Daten. Keine Dekoration: Tabellarische Ziffern verhindern, dass Zahlen in Zeilen springen.
Egal wofür Sie sich entscheiden: Schreiben Sie die exakten Familien, Gewichte und den Zeichenabstand in die Tokens. *Kombiniere eine Serifenschrift mit einer Sans* ist ein Adjektiv, und Adjektive verblassen.
3. Radius an Elementgröße anpassen
Ein einziger --radius, der überall angewendet wird, ist das dritte Warnsignal. Der Radius wird *relativ zum Element wahrgenommen*, auf dem er liegt. Dieselben 8px lassen einen kleinen Button klumpig und eine große Card kaum abgerundet wirken.
/* One value, applied to everything */
--radius: 0.5rem;
/* Scaled to element size */
--radius-sm: 0.25rem; /* inputs, chips, badges */
--radius-md: 0.5rem; /* buttons, small controls */
--radius-lg: 0.875rem; /* cards, panels */
--radius-xl: 1.25rem; /* modals, sheets, hero surfaces */4. Das uniforme Grid aufbrechen
Drei gleich große Cards suggerieren, dass jedes Element die gleiche Gewichtung hat. Das ist fast nie der Fall, und ein Layout, das dies dennoch behauptet, vermittelt keine Information über das Produkt.
Die Änderung ist eher redaktioneller als technischer Natur: Entscheiden Sie, welches Element tatsächlich am wichtigsten ist, und lassen Sie das Layout dies widerspiegeln. Eine breite Card über zwei schmalen. Eine Aufteilung in zwei Drittel und ein Drittel. Ein einzelnes Feature mit aussagekräftigen Bildern statt drei Icons. Das Grid ist völlig in Ordnung, wenn die Elemente tatsächlich gleichwertig sind. Der Fehler liegt in der Nutzung als Standard.
Consistency check · No type scale
The same plan card, built two ways in Mauve Broadcast.
Pricing
Everything a small team needs to ship a branded UI.
Pricing
Everything a small team needs to ship a branded UI.
5. Ein Modell für die Elevation festlegen
Generierte UIs verwenden meist nur einen einzigen Schatten für alles, was hervorgehoben wirken soll. Echte Elevation-Systeme verfügen über zwei oder drei Ebenen mit einer konsistenten Lichtquelle und nutzen neben Schatten auch Border- und Hintergrundänderungen – oft sogar anstelle von Schatten.
/* One shadow doing every job */
--shadow: 0 1px 3px rgb(0 0 0 / 0.1);
/* Levels that agree about a light source */
--elevation-0: none; /* flush: use a border */
--elevation-1: 0 1px 2px rgb(0 0 0 / 0.06); /* cards */
--elevation-2: 0 4px 12px rgb(0 0 0 / 0.08); /* dropdowns */
--elevation-3: 0 16px 40px rgb(0 0 0 / 0.12); /* modals */6. Dort schreiben, wo der Agent es erneut liest
Die fünf oben genannten Änderungen sind wenig wert, wenn sie nur in einem Chatverlauf existieren. Hinterlegen Sie diese in einer DESIGN.md sowie in Token-Dateien im Repo. So löst der Agent bei jedem Durchlauf dieselben Werte auf, auch in einer Sitzung, die erst nächsten Monat geöffnet wird.
- 1
Design-Contract installieren
Schreibt die DESIGN.md und die Token-Dateien in das Projekt.
npx --yes identityforge@latest install --client claude-code - 2
Ein Kit verwenden, das diese Entscheidungen bereits enthält
Getönte Neutralfarben, ein echtes Pairing, skalierte Radien und ein Elevation-Modell – bereits definiert.
identityforge apply terrain-vivant - 3
In der Agent-Datei referenzieren
Eine Zeile in der AGENTS.md, damit der Contract gezielt gefunden und nicht nur zufällig entdeckt wird.
Never hardcode theme colors. Use the semantic tokens in DESIGN.md. - 4
Überprüfung der Beständigkeit
Öffnen Sie eine neue Sitzung, erstellen Sie einen nicht zusammenhängenden Screen und vergleichen Sie dessen Primary-Farbe und Radius mit dem ersten. Wenn diese identisch sind, werden die Werte gelesen und nicht nur aus dem Gedächtnis reproduziert.
Was nach allen sechs Schritten immer noch generiert aussieht
Jeder Guide zu diesem Thema in den SERPs endet mit der Liste der Fixes. Das ist der falsche Zeitpunkt zum Aufhören, denn zwei Merkmale überstehen alle sechs Änderungen – und genau diese fallen den Nutzern auf, ohne dass sie sie benennen können. Beide liegen außerhalb der Token-Datei, wie sie üblicherweise geschrieben wird, weshalb sie auch bestehen bleiben.
Alles bewegt sich auf die gleiche Weise
Generierte Interfaces haben meist nur eine Animation: ein kurzes Einblenden mit einer kleinen Verschiebung nach oben, angewendet auf jedes erscheinende Element. Das Hero-Element, die Cards, das Modal und der Toast – alle nutzen dasselbe. Die Bewegung gibt keinen Hinweis darauf, welche Art von Ereignis gerade eingetreten ist, wodurch sich das gesamte Produkt wie eine einzige, kontinuierliche Slideshow anfühlt.
Motion vermittelt Bedeutung, wenn Dauer und Easing variieren, je *danach, was das Element tut*, und nicht danach, wo es platziert ist. Die zu kodierende Unterscheidung liegt zwischen Elementen, die auf den Nutzer reagieren, und Elementen, die von selbst erscheinen:
| Elementtyp | Dauer | Easing | |
|---|---|---|---|
| Reaktion auf Klick oder Hover | Ein Control, das die Interaktion bestätigt | 100 bis 150ms | ease-out: schneller Start, es sollte sich bereits abgeschlossen anfühlen |
| Erscheinen eines Elements | Ein Menü, Popover oder Panel | 200 bis 250ms | ease-out, wobei der Transform den Hauptteil der Bewegung übernimmt |
| Verschwinden eines Elements | Das Schließen desselben Elements | 120 bis 180ms | ease-in: Ausblenden sollte schneller gehen als Einblenden |
Die Asymmetrie in der letzten Zeile ist der Punkt, den fast keine generierte UI richtig macht: Ausblenden erfolgt in der gleichen Geschwindigkeit wie Einblenden, was das Schließen von Elementen zäh wirken lässt. Definieren Sie die drei Dauern als Tokens, damit der Agent nicht mehr einen einzigen Wert für alles verwendet.
/* One duration, one curve, applied to everything */
--transition: 200ms ease;
/* Motion that says what kind of event it was */
--motion-response: 120ms cubic-bezier(0, 0, 0.2, 1);
--motion-enter: 220ms cubic-bezier(0, 0, 0.2, 1);
--motion-exit: 160ms cubic-bezier(0.4, 0, 1, 1);
@media (prefers-reduced-motion: reduce) {
--motion-response: 1ms;
--motion-enter: 1ms;
--motion-exit: 1ms;
}Jedes Produkt verwendet dieselben Icons
Das zweite überlebende Merkmal ist die Ikonografie. Eine Standardinstallation liefert ein Open-Source-Set mit einer einzigen Strichstärke. Da dieses Set oft mit der Komponenten-Bibliothek ausgeliefert wird, erscheinen dieselben zwanzig Glyphen in tausenden von Produkten. Man kann jede Farbe und jede Schriftart ändern und das Produkt ist dennoch allein an den Icons erkennbar.
Das Set komplett zu ersetzen, lohnt sich meist nicht. Es einzuschränken hingegen schon:
- Passen Sie die Strichstärke an die Schriftstärke an. Eine 1.5px-Linie wirkt neben einer Light-Schrift wie ein Fremdkörper; neben einer Medium-Schrift wirkt sie stimmig. Wählen Sie einen Wert und hinterlegen Sie ihn in den Tokens.
- Passen Sie die Größe an den danebenstehenden Text an, damit ein Icon in einem Button und ein Icon in einer Tabellenzeile nicht zufällig dieselbe Pixelgröße haben.
- Verbieten Sie dekorative Icons. Untersagen Sie Icons, die eher eine Stimmung als eine Aktion darstellen: Funkeln, Raketen und Blitze sind die stärksten Signale für generierte UIs, die selbst nach einem vollständigen Re-Theme bestehen bleiben.
- Erlauben Sie eine einzige Ausnahme und benennen Sie diese. Ein einzelnes benutzerdefiniertes Glyphen-Element, in der Regel das Markenlogo, das an einer konsistenten Stelle verwendet wird. Eine bewusste Abweichung wirkt wie eine Entscheidung; mehrere wirken wie ein Zufall.
Der Sparkle-Test
Wenn ein Screen ein Funkel-Icon, einen Farbverlauf von Violett zu Blau und das Wort „nahtlos“ enthält, wird keine der sechs oben genannten Token-Änderungen helfen. Diese drei Punkte sind Entscheidungen bezüglich Inhalt und Ikonografie; sie müssen schriftlich untersagt werden, da keine Farbpalette sie überschreiben kann.
Was in den tatsächlich geschriebenen Dateien oft falsch läuft
Die sechs Änderungen schriftlich festzuhalten, ist der einfache Teil. Wir haben 299 öffentliche DESIGN.md-Dateien von GitHub analysiert, um zu sehen, was tatsächlich committet wird. Das Fehlermuster ist konsistent genug, um es bei der Planung zu berücksichtigen.
| Anteil der Dateien | |
|---|---|
| Dark Mode komplett weggelassen | 69% |
| Keine semantischen Farbrollennamen verwendet | 86% |
| Keine Verbote definiert | 76% |
| Keine Motive oder Prinzipien definiert | 57% |
| Überhaupt keine konkreten Größenwerte enthalten | 44% |
| Vage Adjektive anstelle von Werten verwendet | 54% |
| Eine Radius-Skala spezifiziert | 21% |
Vergleicht man dies mit den sechs Änderungen oben, ist die Überschneidung exakt. Eine Radius-Skalierung wird nur in jeder fünften Datei spezifiziert. Verbote (die einfachste Form der Dokumentation und die zuverlässigste Anweisung) fehlen in drei Vierteln der Fälle. Und die häufigsten Wörter, die eine Entscheidung ersetzen sollten, waren *clean* (39 % der Dateien), *modern* (36 %) und *professional* (22 %).
Etwas aufzuschreiben ist nicht dasselbe wie es zu entscheiden
Mehr als die Hälfte der realen Dateien enthält mindestens ein Adjektiv, wo eigentlich ein Wert stehen müsste. Ein Coding-Agent, dem „clean und modern“ übergeben wird, muss dies selbst interpretieren – und tut dies jedes Mal anders. Wenn eine Zeile bei zwei kompetenten Lesern zwei verschiedene Screens erzeugen kann, wurde die Entscheidung noch nicht getroffen.
Die praktische Konsequenz für die sechs Änderungen: Schreiben Sie jede einzelne als Zahl oder Hex-Wert und prüfen Sie Ihre eigene Datei auf die drei oben genannten Wörter, bevor Sie diese committen.
Alle sechs, bereits entschieden
Jedes Identity Forge Kit wird mit getönten Neutralfarben, einem echten Font-Pairing, einem skalierten Radius-Set und einem Elevation-Modell ausgeliefert, zusammen mit der DESIGN.md, die diese über mehrere Sessions hinweg konsistent hält. Kostenlose Kits erfordern kein Konto.
Welche einzelne Änderung bringt die größte Verbesserung?
Das Tönen der Neutralfarben. Es ist keine Layout-Arbeit, keine neue Schriftart und kein Redesign erforderlich. Es wird lediglich die Chroma-Sättigung bestehender Werte angepasst, was die gesamte Wirkung der Seite verändert.
Beeinträchtigt eine zweite Schriftart die Performance?
Nur geringfügig und in einem kontrollierbaren Rahmen. Zwei Schriftfamilien mit jeweils zwei Schriftschnitten entsprechen bei woff2 und Subsetting etwa 60 bis 120 KB, die einmalig geladen werden. Variable Fonts reduzieren dies weiter. Das ist ein fairer Tausch für das auffälligste visuelle Merkmal auf der Seite.
Wird OKLCH für die getönten Neutralfarben benötigt?
Nein, aber es erleichtert den Prozess erheblich. OKLCH trennt die Helligkeit von der Chroma-Sättigung, sodass ein Hauch von Farbton hinzugefügt werden kann, ohne die wahrgenommene Helligkeit zu verändern. In HSL verschiebt dieselbe Anpassung auch die Helligkeit, was eine erneute Abstimmung der Farbabstufungen erforderlich macht.
Handelt es sich hierbei nur um Theming?
Teilweise, und genau das ist der Punkt: Das meiste, was als „generisch“ wahrgenommen wird, liegt in Werten, die bereits von einer Theme-Ebene gesteuert werden. Die Teile, die kein Theming sind, betreffen die Grid-Entscheidung und das Elevation-Modell, welche struktureller Natur sind.
Wie verhindere ich, dass der Coding-Agent diese Werte überschreibt?
Formulieren Sie die Einschränkung als Verbot statt als Präferenz. „Hardcoden Sie niemals Theme-Farben; verwenden Sie die semantischen Tokens“ wird weitaus zuverlässiger befolgt als „bevorzugen Sie semantische Tokens“.