Communitygithub.com

Terrain UI

Erstelle Web-Oberflächen im ruhigen, industriellen Stil, der aus Spielmenü-Konventionen destilliert wurde (Papier und Tinte, eine Akzentfarbe für „aktuell“ und „primär“, Auswahl, die auf einen Blick lesbar ist, Pill-Sekundärbuttons, `//`-Pfadtitel, zarte geschlossene Konturlinien). Verwende es, wenn eine Seite, ein Portfolio, ein Dashboard oder eine Komponente in diesem Stil oder einem „industriellen“, „terminalartigen“, „Endfield-inspirierten“ oder „终末地风格“-Look gewünscht wird.

Was ist Terrain UI?

Das Terrain UI Skill definiert ein Designtoken-System und eine Komponentenbibliothek für den Aufbau von Web-Oberflächen, die von der Benutzeroberfläche eines industriell thematisierten Spiels inspiriert sind, aber ohne direkte Spiel-Assets auskommen. Es legt acht Kernregeln fest, die das visuelle Verhalten steuern, darunter die Verwendung einer einzigen Akzentfarbe für sowohl die aktuelle Position als auch primäre Aktionen, auswahlabhängige Hervorhebungen (vertikale Listen vs. horizontale Tabs), Button-Formen, die die Priorität anzeigen (Block für primär, Pillen für sekundär), Pfadtitel, die Deckkraft von Zahlen, Tastaturkürzel-Hinweise, dezente Konturhintergründe und kurze, feste Bewegungsanimationen. Es bietet eine Reihe von vorgefertigten CSS-Komponenten (mit dem Präfix `tu-`) für Layouts wie Pfad-Titel, Listen, Tabs, Buttons, Eingabefelder, Tabellen, Dialoge, Toasts und Ladezustände, ergänzt durch eine JavaScript-Datei für den Konturhintergrund. Das Skill unterstützt drei Seitenmodi (Lesen, Präsentation, Arbeitsbereich), die unterschiedliche Grade an visuellem Nachdruck bieten, und enthält eine Checkliste vor der Auslieferung, um die Einhaltung der Regeln sicherzustellen. Es ist für die Verwendung mit Texteditoren, CLI-Tools und KI-Assistenten wie Claude Code, Cursor, Codex, GitHub Copilot und anderen konzipiert, die SKILL.md-Dateien für Anweisungen zum UI-Stil-Design lesen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sayuriovo/terrain-ui/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Terrain UI?

Diese Regeln wurden aus der Benutzeroberfläche eines industriell thematisierten Spiels destilliert, wobei nur das beibehalten wurde, was sich auf gewöhnlichen Webseiten als nützlich erwiesen hat. Das Skill enthält keine Spiel-Assets und versucht nicht, das Spiel nachzubilden.

Lies diese gesamte Datei, bevor du beginnst. Öffne assets/terrain.css für Farben und Komponenten-Markup, verwende assets/contours.js für den Konturhintergrund und siehe references/research.md für die Herkunft jeder Regel und warum einige Dinge weggelassen wurden.

Acht Regeln

  1. Eine Akzentfarbe, zwei Bedeutungen: der aktuelle Ort und die primäre Aktion. Standardmäßig #FEEC00, abgetastet vom ausgewählten Tab im Spiel. Verwende sie nur als Füllung, mit tintenfarbenem Text darauf; verwende sie im hellen Thema niemals für Linien oder Text. Dasselbe gilt für Hover: Nur der primäre Button wischt beim Hover die Akzentfarbe ein. Links, Pill-Buttons und Listenzeilen werden nur heller oder erhalten eine dickere Unterstreichung.
  2. Auswahl hängt von der Richtung ab:
    • Vertikale Listen: Hover hellt die Zeile auf; die ausgewählte Zeile wird dunkel mit hellem Text, und ein Akzentbalken erscheint auf der linken Seite.
    • Horizontale Tabs: Der ausgewählte Tab füllt sich vollständig mit der Akzentfarbe. Beim Wechsel kollabiert der alte Block und der neue öffnet sich seitlich von seiner Mitte aus.
  3. Button-Form zeigt Priorität an: Die primäre Aktion ist ein Block mit abgeschnittener unterer rechter Ecke; sekundäre Aktionen sind Pillen mit einem runden Icon am rechten Ende. Maximal eine primäre Aktion pro Button-Gruppe.
  4. Setze einen Pfad oben links auf jede Seite: // Arbeit / Über mich. Ebenen, zu denen du zurückkehren kannst, sind Links.
  5. Zahlen sind Dekoration, und sie müssen echt sein: Setze IDs, Daten und aktuell / gesamt-Zähler in breiten tabellarischen Ziffern. Erfinde niemals Daten oder füge falschen technischen Text hinzu. Dasselbe gilt für den Text: Beschreibe ein Produkt (Funktionen, unterstützter Umfang, Installation) nur aus dem, was der Benutzer angegeben hat, oder aus den eigenen Dokumenten des Projekts, und behalte dessen Umfang bei. Wo es keine Quelle gibt, schreibe einen Platzhalter wie [TODO: ...] anstatt etwas auszufüllen.
  6. Zeige Tastenkappen für Tastenkürzel an: zum Beispiel ← → neben Seitentasten. Zeige sie nur auf Geräten mit einem feinen Zeiger.
  7. Hintergrund: geschlossene Konturlinien: ein Patch in jeder von zwei Ecken, 6% bis 9% Deckkraft, jede fünfte Linie stärker, nicht animiert.
  8. Kurze, feste Bewegung: Hover 90 ms, Auswahl 110 bis 120 ms, Kurve cubic-bezier(.2,0,0,1). Schalte alles aus, wenn das System eine reduzierte Bewegung anfordert.

Wähle zuerst einen Seitentyp

Entscheide, welche Art von Seite du baust, bevor du beginnst. Alle drei teilen sich dieselben Farben und Komponenten; sie unterscheiden sich darin, wie auffällig sie sind. Wenn du dir unsicher bist, wähle Lesen.

TypVerwendet fürWieEntsprechung im Spiel
LesenArtikel, Projektdetails, Einstellungen, HilfeEine Textspalte, etwa 65 lateinische oder 38 CJK-Zeichen breit; Akzent nur auf dem aktuellen Navigationselement und dem primären Button; Konturen optionalEnzyklopädie, Archive
PräsentationStartseiten, Portfolios, LandingpagesGroße breite Überschriften, Umriss-Schriftart erlaubt; große Zahlen als Hintergrund; Konturen aktiviert; Inhalt kann blockweise einblendenHauptmenü, Shop
ArbeitsbereichAdmin-Seiten, Dashboards, Tools, ErweiterungseinstellungenVertikale Listennavigation links, Tabs oben; hauptsächlich Tabellen, Zahlen und Formulare; keine großen Überschriften; Bewegung nur als Reaktion auf AktionenInventar, Ausrüstung, Freundesliste

Komponenten

Alle leben in assets/terrain.css mit dem Präfix tu-. examples/demo.html zeigt jede einzelne.

KomponenteKlassenHinweise
Pfadtiteltu-crumbRegel 4
Vertikale Listetu-listMarkiere das aktuelle Element mit aria-current
Horizontale Tabstu-tabs tu-tabMarkiere den aktuellen Tab mit aria-selected="true" oder aria-current
Primärer / Sekundärer Buttontu-btn / tu-btn--pill + tu-btn__iconRegel 3
Tastenhinweistu-kbdRegel 6
Feldzeiletu-fields tu-sepTrenne Metadaten mit einem vertikalen Balken │
Paneltu-panelEin flacher Block: keine Radius, Schatten oder Rahmen
Tabelletu-table-wrap tu-tableKleine breite Kopfzeilen-Beschriftungen; rechtsbündig numerische Spalten mit tu-right; scrollt seitlich auf schmalen Bildschirmen
Eingabetu-field tu-input tu-hintBei Fokus wird die Unterstreichung dicker und ein Akzentbalken erscheint links
Fehlertu-error, plus aria-invalid="true" auf der EingabeEin kleiner Akzentquadrat und ein Satz, wie man es behebt; kein roter Text
Schaltertu-switch„Ein“ ist ein aktueller Zustand, also füllt sich die Spur mit der Akzentfarbe
Dialog<dialog class="tu-dialog">Buttons sitzen in einer Fußzeilenleiste: einer primär, Abbrechen als Pille; er schärft sich aus einer Unschärfe ein
Toasttu-toastEin dunkler Balken mit einem Akzentbalken links; kommt von links und verschwindet nach 2 Sekunden
Leerer Zustandtu-emptyEine gestrichelte Box mit einem Satz, was hier erscheinen wird, optional ein primärer Button
Ladentu-progress, plus tu-progress--busy während des WartensEine 2 px Linie; wenn der Fortschritt bekannt ist, setze --tu-value und zeige den Prozentsatz

Kein Rot. Warnungen, Fehler und ausstehende Zustände verwenden den kleinen Akzentquadrat mit Tintentext. Setze irreversible Aktionen wie Löschen hinter einen Bestätigungsdialog.

Für alles, was nicht in dieser Tabelle steht, leite es aus den acht Regeln ab: ob es „aktuell“ oder „primär“ ist, entscheidet, ob es den Akzent verwenden darf; ob es primär oder sekundär ist, entscheidet Block oder Pille; ob es angeklickt werden kann, entscheidet, ob es beim Hover heller wird.

Bewegung

AktionDauerWie
Hover aufhellen90 msHintergrundfarbübergang
Auswahlbalken erscheint110 msscaleY(0 → 1)
Tab-Wechsel120 msAkzentblock scaleX(0 → 1), von der Mitte aus öffnend
Primärer Button Hover280 msAkzent wischt von links ein
SeitenwechselAus 320 ms, ein 480 msAlte Seite verschwimmt und blendet aus; neue Seite blendet blockweise ein, 100 ms Abstand

Nicht tun

  • Unsichtbare Markierungen (rote Punkte, NEU-Abzeichen): Im Spiel drängen sie die Spieler, Belohnungen einzusammeln; auf einem Portfolio oder einer normalen Website wirken sie wie Nörgelei.
  • Milchglas, Glitch-Risse, Scanlines, Glühen, große Akzentfüllungen, abgerundete Karten mit Schatten.
  • Nur im Spiel vorkommende Elemente wie 3D-Karussellmenüs, Charaktergrafiken und Seltenheitsfarbbalken.
  • Offizielle Spiel-Assets: Screenshots, Logos, Icons, Charaktergrafiken, Text oder die offiziellen Schriftdateien.

Schrift

  • Lateinischer Text und Zahlen: Saira (Open Source, SIL OFL). Beschriftungen auf 125% gedehnt, Großbuchstaben, 0.06em Laufweite. Die offizielle Seite fügt ihren breiten Beschriftungen keine Laufweite hinzu; hier wird für kleine Größen ein wenig beibehalten.
  • Chinesisch: Noto Sans SC oder die systemeigene Sans. Keine Serifen- oder Pinselschriften für Fließtext.
  • Alle Zahlen tabellarisch (font-variant-numeric: tabular-nums).

Auslieferung als einzelne HTML-Datei

  • Verwende die terrain.css-Klassen so wie sie sind; füge keine seitenweiten Überschreibungen hinzu, die ihre Farben ändern. Wenn eine Änderung erforderlich ist, hat die Komponente ein Problem und sollte an das Skill zurückgemeldet werden.
  • Setze terrain.css in ein <style>-Element und contours.js in ein <script>-Element. Stelle vor dem Inline-Setzen eines Skripts sicher, dass es kein wörtliches </script> enthält; falls doch, schreibe es als </script>.
  • Wenn die Seite offline funktionieren muss, bette Saira als woff2-Daten-URI in @font-face ein; andernfalls verlinke Google Fonts und behalte die Fallback-Schriftarten bei.

Checkliste vor der Auslieferung

  • Ein Seitentyp wurde ausgewählt, und Überschriftegrößen verschiedener Typen werden nicht auf einer Seite gemischt.
  • Die Akzentfarbe erscheint nur auf dem aktuellen Ort und primären Aktionen; es gibt kein Rot auf der Seite.
  • Jede Button-Gruppe hat höchstens einen primären Block-Button; der Rest sind Pillen.
  • Vertikale Listen und horizontale Tabs verwenden ihre eigenen Auswahlstile.
  • Jede Seite hat einen //-Pfadtitel.
  • Alle Zahlen sind echte Daten; jede Produktaussage hat eine Quelle und überschreitet ihren Umfang nicht.
  • Sowohl helle als auch dunkle Themen wurden überprüft; nichts scrollt seitlich bei Telefonbreite (ca. 400 px).
  • Der Tastaturfokus ist sichtbar; alles ist still bei reduzierter Bewegung.
  • Keine offiziellen Spiel-Assets werden verwendet.

Dateien

DateiInhalt
assets/terrain.cssFarbschemata (hell und dunkel) und alle Komponenten
assets/contours.jsKonturhintergrund, eine Zeile zum Einrichten: TerrainContours.mount(canvas)
examples/demo.htmlJede Komponente auf einer Seite, bereit zum Öffnen
examples/screenshots/Die Komponentenseite in hell, dunkel, Telefonbreite und dem Dialog
references/research.mdForschungsnotizen: was beobachtet wurde, was behalten wurde, was weggelassen wurde

Verwandte Skills