Communitygithub.com

bompus/hr-better-colors

Farbregeln für Web-UI: Palettenverläufe, semantische Farb-Tokens, Farbschreibweise und Farbraum sowie gemessener Kontrast gerenderter Paare. Verwenden Sie diese bei der Auswahl, Überprüfung oder Korrektur von Farben, Farb-Tokens, Themes oder Textkontrasten in Web-Oberflächen.

Was ist hr-better-colors?

Diese Fähigkeit etabliert ein systematisches Framework für konsistente, messbare und zugängliche Farbsysteme in Web-Benutzeroberflächen. Sie behandelt häufige Farbfehler als Systemfehler – etwa isolierte Werte, falsch ausgeliehene Tokens oder ungemessene Kontraste – und bietet klare Regeln für die Erstellung und Pflege von Farbpaletten, semantischen Tokens und deren Verwendung. Der Fokus liegt auf der Verwendung von Farbverläufen (ramps), die nach Helligkeit und Rolle definiert sind, sowie auf der konsequenten Trennung von primitiven Farbwerten und semantischen Tokens, um Theming und Barrierefreiheit zu ermöglichen. Die Skill unterstützt eine Vielzahl von modernen Farbräumen und Notationen – mit `oklch()` als empfohlener Standard – und betont die Messung des tatsächlich gerenderten Kontrastpaares. Sie enthält zudem eine umfangreiche Checkliste häufiger Fehler und deren Lösungen, eine klare Berichterstattungsstruktur mit Schweregraden (HIGH/MEDIUM/LOW) und ein Format zur Dokumentation von Verstößen gegen die Prinzipien. Die Fähigkeit ist für jede Web-UI geeignet, in der Farben, Tokens, Themes oder Textkontraste systematisch korrigiert oder von Grund auf neu aufgebaut werden müssen. Sie arbeitet mit allen gängigen Frameworks und Plattformen, die CSS-Variablen und moderne Farbräume unterstützen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bompus/house-rules/tree/HEAD/skills/hr-better-colors

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Farben

Ein Farbsystem besteht aus einer kleinen Menge von Verläufen, die nach ihrer Rolle benannt und gegen die Hintergründe überprüft werden, auf denen sie tatsächlich gerendert werden. Die meisten Farbfehler sind Systemfehler. Ein isoliert ausgewählter Wert, ein Token, der ausgeliehen wurde, weil er richtig aussah, ein Paar, das niemand gemessen hat.

Melden Sie niemals einen Kontrastwert, den Sie nicht gemessen haben, und schätzen Sie niemals eine Farbe, die Sie berechnen könnten. Farben sind eines der wenigen Interface-Probleme, für die es eine exakte Antwort gibt – liefern Sie also die exakte Antwort.

Kontrastanforderungen gehören zu hr-better-accessibility. Oberflächen, Schatten und Symbolfarben liegen außerhalb dieser Fähigkeit.

Stimmen Sie mit dem Farbsystem des Projekts überein

Verwenden Sie die Tokens und die Schreibweise des Projekts weiter. Eine zweite Darstellung, die hinzugefügt wird, um einen Wert zu korrigieren, macht die Palette schwerer nachvollziehbar. Ein konsistentes Hex-System ist besser als Hex mit verstreutem oklch().

Sobald die Tokens existieren, erzwingen Sie sie mit einer Lint-Regel oder einem Guard-Test, der bei einem Farbliteral außerhalb der Token-Dateien fehlschlägt – mit einer kurzen Positivliste für Stellen, die aus Designgründen Rohwerte benötigen. Eine schriftliche „Verwende Tokens“-Regel ohne dahinterstehende Prüfung drifft ab.

Für ein neues System ist oklch() der beste Standard, da sich seine Zahlen so verhalten, wie es die untenstehenden Regeln für Verläufe beschreiben. Überall sonst erzeugt eine Farbbibliothek denselben Verlauf in der Schreibweise des Projekts (color-formats.md).

Ein System sind Verläufe, nicht Farben

Ein neutraler Verlauf, ein Akzentverlauf und nur die Statusverläufe, die das Produkt tatsächlich rendert. Ein warning-Verlauf, den nichts importiert, ist Wartungsaufwand für null Pixel. Ein zweiter Akzentfarbton verdient seinen Platz nur, wenn zwei Dinge auf einen Blick unterscheidbar sein müssen.

Jeder Schritt hat eine Aufgabe

Ein Verlauf ist kein Farbverlauf, aus dem man nach Augenmaß auswählt. Jeder Schritt existiert, weil eine Rolle ihn braucht: Seitenhintergrund, Hover-Zustand eines Elements, Rand, Vollfläche, Textkörper. Erzeugen Sie keinen Schritt, den keine Rolle konsumiert. Sowohl die Tailwind-Konvention 50–950 als auch die Radix-Konvention 1–12 bilden diese Rollen ab (palette-structure.md).

Benennen Sie Primitive nach Farbton, Semantik nach Rolle

Primitive benennen einen Wert (--blue-500) und werden niemals in einer Komponente angewendet. Semantische Tokens benennen eine Aufgabe (--color-text-secondary), verweisen auf ein Primitiv und sind die einzige Ebene, auf die Komponenten zugreifen.

Diese Trennung ermöglicht Theming. Ohne sie muss der Dunkelmodus jede Verwendung prüfen, um herauszufinden, welche den Akzent und welche einfach nur Blau meinte (token-naming.md).

Verwenden Sie ein Token nur in seiner Rolle

Leihen Sie niemals ein Token aus, nur weil sein Wert heute richtig ist. Ein Trennzeichen, das als Textfarbe verwendet wird, funktioniert, bis Rahmen heller werden – und dann wird der Text mit heller. Wenn eine Rolle kein Token hat, fügen Sie das Token hinzu.

Halten Sie den Farbton über den gesamten Verlauf

Vier Eigenschaften definieren einen wohlgeformten Verlauf:

  • Die Schritte folgen einer bewussten wahrgenommenen Helligkeitsprogression (palette-generation.md).
  • Der Farbton bleibt durchgängig konstant.
  • Die Lebendigkeit erreicht ihren Höhepunkt in der Mitte des Verlaufs und fällt an beiden Enden ab.
  • Die Schritte liegen am hellen Ende dichter als am dunklen Ende.

Beide Enden stoppen kurz vor reinem Schwarz und Weiß, die überhaupt keinen Farbton tragen können. Verwenden Sie eine Farbbibliothek, anstatt nach Augenmaß zu arbeiten (palette-generation.md).

Eine Farbe, eine Bedeutung

Verwenden Sie eine Farbe für einen einzigen Zweck in der gesamten Oberfläche und behandeln Sie alles innerhalb von 15° Farbtonabweichung als dieselbe Farbe. Wenn der Akzent interaktiv bedeutet, signalisiert dieser Farbton auf statischem Text den Benutzern, auf etwas zu klicken, das nicht klickbar ist, und ein interaktives Element, das neutral gerendert wird, führt ebenso in die Irre. Farbe ist niemals der alleinige Bedeutungsträger – das obliegt hr-better-accessibility.

Füllen Sie genau eine Aktion pro Ansicht

Wenn gefüllte Farbe primäre Betonung codiert, erhält eine primäre Aktion diese Farbe und gleichrangige bleiben neutral. Setzen Sie die Farbe auf den Hintergrund, nicht auf das Label. Ein gefüllter Button lesen Sie von weitem als primär; akzentfarbener Text auf einem neutralen Button wirkt wie ein Link.

Mehrere farbige Hintergründe sind in Ordnung, wenn sie unterschiedliche Zustände oder Kategorien codieren, anstatt als gleichrangige Konkurrenten aufzutreten.

Messen Sie das gerenderte Paar, dann melden Sie

Messen Sie einen Vordergrund gegen den Hintergrund, auf dem er tatsächlich gerendert wird – nicht gegen den Seitenhintergrund. Wenn ein Paar nicht besteht, melden Sie das Paar, seinen gemessenen Wert und den Schwellenwert, den es verfehlt, und lassen Sie die Farben dann in Ruhe. Sie sind eine Designentscheidung. Ändern Sie sie nur, wenn Sie darum gebeten werden, und messen Sie danach erneut (contrast.md).

Wählen Sie einen Interpolationsraum für Verläufe

Der Raum ist eine Frage des Aussehens, nicht der Korrektheit.

  • in oklab ist der beste Standard: gleichmäßige Helligkeit, keine Farbton-Überraschungen.
  • in oklch wandert um das Farbrad herum, anstatt durch die Mitte zu gehen, bleibt lebendig und durchläuft jeden Farbton zwischen den Stopps. Greifen Sie danach, wenn ein Zweifarbenverlauf in der Mitte grau wird.
  • Der sRGB-Standard verdunkelt und dämpft den Mittelpunkt. Er ist das, was die meisten Oberflächen bereits haben, weil er ohne weiteres Zutun entsteht.

Siehe color-usage.md.

Bevor Sie fertig sind

FehlerKorrektur
Ein Rohwert, wo das Projekt einen Token hatToken für die Rolle in der Schreibweise des Projekts wiederverwenden oder hinzufügen
Ein isolierter oklch()-Wert in einer Hex-CodebasisDie etablierte Schreibweise beibehalten, es sei denn, eine Migration ist geplant
Ein Primitiv wie --blue-500, das direkt in einer Komponente verwendet wirdEin semantisches Token darauf verweisen lassen
Token nach Aussehen (--color-blue-button) oder Ersterwähnung (--color-sidebar-gray) benanntNach Rolle benennen: --color-accent-solid, --color-bg-surface
--color-primary bedeutet die Marke und --color-text-primary bedeutet Fließtextaccent für die Marke reservieren; primary = „am prominentesten in seiner Gruppe“
Semantisches Token außerhalb seiner Rolle verwendet (Trennzeichen als Text)Token für die fehlende Rolle hinzufügen; niemals nach Wert ausleihen
Verlauf durch Variation der HSL-Helligkeit erstelltNeuaufbau gegen wahrgenommene Helligkeit mit konstantem Farbton
Verlauf gleichmäßig über den gesamten Bereich verteiltHelles Ende zusammenziehen, bis 50 und 100 wie zwei verschiedene Oberflächen aussehen
Gleicher Sättigungswert, der über Farbtöne hinweg wiederverwendet wirdDen Anteil des jeweiligen Maximums jedes Farbtons verwenden, nicht den Rohwert
Status-Farbton kollidiert mit dem AkzentfarbtonVerschieben, bis zerstörend und primär nebeneinander unterscheidbar sind
Dunkelmodus durch mechanische Umkehrung der Hellpalette erstelltAls Startpunkt umkehren, dann Lebendigkeit reduzieren, das dunkle Ende verbreitern und jedes Paar erneut prüfen
prefers-color-scheme setzt einige Tokens und eine .dark-Klasse setzt andereEinen einzigen Wechselmechanismus wählen und durchgängig verwenden
Kontrast durch Änderung des Farbtons behobenHelligkeit ändern – den Kanal, auf den Kontrast reagiert
P3-Farbe ohne sRGB-FallbackZuerst den sRGB-Wert deklarieren, dann innerhalb @media (color-gamut: p3) überschreiben

Berichterstattung

Schweregrad. HIGH macht Inhalte unlesbar oder weist eine irreführende semantische Farbe zu. MEDIUM ist ein auffälliger Theme-, Token- oder Farbraumfehler. LOW ist ein isolierter Feinschliff.

Verifikation. Ohne Browser: Token-Werte, der Farbraum jeder deklarierten Farbe, das Vorhandensein beider Theme-Blöcke und der aus dem deklarierten Token-Paar berechnete Kontrast. Mit Browser: der tatsächlich hinter dem Text gerenderte Hintergrund, einschließlich Deckkraft und eventuell darunterliegender Bilder, gemessen sowohl im Hell- als auch im Dunkelmodus. Ein nicht bestandenes Paar wird gemeldet, nicht übermalt. Melden Sie jede Prüfung, die Sie nicht durchführen konnten, als Nicht verifiziert.

Format. Gruppieren Sie die Ergebnisse unter dem Prinzip, das sie verletzen, geordnet nach Schweregrad, eine Zeile pro Ursache, die jede Fundstelle auflistet:

SchweregradFundstelleVorherNachherGrund

Fundstelle ist pfad/zu/datei:zeile. Grund nennt das Prinzip und die Auswirkung auf den Benutzer.

Melden Sie Block (Blockiert), solange ein HIGH besteht, andernfalls Approve (Genehmigen) und lassen Sie den Rest in der Tabelle als zu erledigende Arbeit stehen. Genehmigen Sie niemals eine Abdeckung, die Sie nicht geprüft haben. Falls nichts zu melden ist, geben Sie an: „Keine feststellbaren Farbprobleme“ und melden Sie die Verifikation.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Verwandte Skills