Communitygithub.com

terrain-ui

ゲームメニューの慣習から抽出した、静かな産業スタイルのWeb UIを構築します(紙とインク、1つのアクセントカラー、一読でわかる選択、ピル型の二次ボタン、`//`パスタイトル、微かな等高線)。ページ、ポートフォリオ、ダッシュボード、または産業的・ターミナルライクなスタイルが求められたときに使用します。

terrain-ui とは?

Terrain UIは、産業テーマのゲームインターフェースから、通常のWebページで有用なルールのみを抽出したAIエージェント用スキルです。1つのアクセントカラー(デフォルトは `#FEEC00`)を現在位置と主要アクションにのみ使用し、選択状態は垂直リストと水平タブで異なる表現を持ちます。ボタンはブロック型(主要)とピル型(二次)で優先度を視覚化し、すべてのページに `// Work / About me` 形式のパスタイトルを配置します。背景には閉じた等高線を使用し、ショートカットキー表示、数値のタブラーニケア字体表示など、ゲーム由来の具体的なUIパターンをWeb向けに翻訳しています。このスキルはClaude CodeなどのAIエージェントで使用することを想定しており、ユーザーが産業的、ターミナル風、あるいは『エンドフィールド』風(終末地風格)のスタイルを指定した際に、一貫性のあるコンポーネントセットを提供します。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Terrain UI

これらのルールは、産業テーマのゲームのインターフェースから抽出されたもので、通常のWebページで有用であることが証明されたものだけを残しています。このスキルにはゲームのアセットは含まれておらず、ゲームを再現しようとするものではありません。

開始する前にこのファイル全体をお読みください。色とコンポーネントのマークアップについては assets/terrain.css を、等高線の背景については assets/contours.js を参照してください。各ルールの由来と省略した理由については references/research.md を参照してください。

8つのルール

  1. 1つのアクセントカラー、2つの意味: 現在位置と主要アクション。デフォルトは #FEEC00、ゲーム内の選択タブからサンプリング。塗りつぶしのみに使用し、その上にインク色のテキストを配置します。ライトテーマでは線やテキストには決して使用しません。ホバー時も同様に、主要ボタンのみがホバー時にアクセントで塗りつぶされます。リンク、ピルボタン、リスト行は単に明るくなるか、下線が太くなります。
  2. 選択方法は方向に依存:
    • 垂直リスト: ホバーで行が明るくなり、選択行は暗くなり明るいテキスト、左側にアクセントバーが表示されます。
    • 水平タブ: 選択タブはアクセントで塗りつぶされます。切り替え時に古いブロックは折り畳まれ、新しいブロックは中央から横に開きます。
  3. ボタンの形状で優先度を示す: 主要アクションは右下隅が切り取られたブロック、二次アクションは右端に丸いアイコンがあるピル型。ボタングループ内の主要ボタンは最大1つまで。
  4. すべてのページの左上にパスを配置: // Work / About me。戻れる階層はリンクにします。
  5. 数字は装飾であり、真実でなければならない: ID、日付、current / total カウンターはワイドなタブラーニケア字体で設定。データを捏造したり、偽の技術テキストを追加しないでください。コピーについても同様です。製品(機能、サポート範囲、インストール方法)の説明は、ユーザーから与えられた情報またはプロジェクト自身のドキュメントからのみ行い、その範囲を守ってください。ソースがない場合は、埋め込まずに [TODO: ...] のようなプレースホルダーを記述してください。
  6. ショートカットキーを表示: 例: ページボタンの横に ← →。ファインポインターを持つデバイスでのみ表示。
  7. 背景: 閉じた等高線: 2つのコーナーにそれぞれ1つのパッチ、6%~9%の不透明度、5本ごとに太く、アニメーションなし。
  8. 短く、しっかりした動き: ホバー90ms、選択110~120ms、カーブ cubic-bezier(.2,0,0,1)。システムが動きの低減を要求する場合はすべてオフにします。

最初にページタイプを選択

開始する前に、どの種類のページを構築するかを決定してください。3つすべて同じ色とコンポーネントを共有しますが、大胆さが異なります。不明な場合は「読む」を選択してください。

タイプ使用目的方法ゲーム内での同等物
読む記事、プロジェクト詳細、設定、ヘルプ1つのテキストカラム、約65ラテン文字または38CJK文字幅。アクセントは現在のナビ項目と主要ボタンのみ。等高線は任意百科事典、アーカイブ
見せるホームページ、ポートフォリオ、ランディングページ大きなワイド見出し、アウトラインフォントも許可。背景に大きな数字。等高線オン。コンテンツはブロックごとにフェードインしてもよいメインメニュー、ショップ
ワークベンチ管理ページ、ダッシュボード、ツール、拡張機能設定左側に垂直リストナビ、上部にタブ。主にテーブル、数字、フォーム。大きな見出しなし。アクションへの応答としてのみモーションインベントリ、装備、友達リスト

コンポーネント

すべて assets/terrain.css に tu- プレフィックスで存在します。examples/demo.html に各コンポーネントの例があります。

コンポーネントクラス備考
パスタイトルtu-crumbルール4
垂直リストtu-list現在の項目を aria-current でマーク
水平タブtu-tabs tu-tab現在のタブを aria-selected="true" または aria-current でマーク
主要/二次ボタンtu-btn / tu-btn--pill + tu-btn__iconルール3
キーヒントtu-kbdルール6
フィールド行tu-fields tu-sepメタデータを縦棒 │ で区切る
パネルtu-panelフラットなブロック: 角丸、影、境界線なし
テーブルtu-table-wrap tu-table小さいワイドなヘッダーラベル。数値列は tu-right で右揃え。狭い画面で横スクロール
入力tu-field tu-input tu-hintフォーカス時に下線が太くなり、左側にアクセントバーが表示
エラーtu-error、入力に aria-invalid="true" を追加小さなアクセント四角と修正方法を1文。赤いテキストなし
スイッチtu-switch「オン」は現在の状態なので、トラックがアクセントで塗りつぶされる
ダイアログ<dialog class="tu-dialog">ボタンはフッターバーに配置: 主要1つ、キャンセルはピル型。ブラーからシャープに表示
トーストtu-toast左側にアクセントバーがある暗いバー。左からスライドインし、2秒後に消える
空の状態tu-emptyここに何が表示されるかを1文で示す破線ボックス。オプションで主要ボタン1つ
ローディングtu-progress、待機中は tu-progress--busy を追加2pxの線。進捗が既知の場合は --tu-value を設定し、パーセンテージを表示

赤は使用しません。警告、失敗、保留状態は、インク色のテキストと小さなアクセント四角を使用します。削除などの不可逆的なアクションは確認ダイアログの後ろに配置します。

この表にないものについては、8つのルールから導出してください。「現在」または「主要」かどうかでアクセントを使用できるかどうか、主要か二次かでブロックかピルか、クリック可能かどうかでホバー時に明るくなるかどうかが決まります。

モーション

アクション継続時間方法
ホバー時の明るさ変化90ms背景色のトランジション
リスト選択バーのドロップイン110msscaleY(0 → 1)
タブ切り替え120msアクセントブロック scaleX(0 → 1)、中央から開く
主要ボタンホバー280ms左からアクセントで塗りつぶされる
ページ変更アウト320ms、イン480ms古いページはブラーしてフェードアウト。新しいページはブロックごとにフェードイン、100ms間隔

禁止事項

  • 未確認マーカー(赤いドット、NEWバッジ): ゲームでは報酬収集を促すものですが、ポートフォリオや通常のサイトではしつこく感じられます。
  • フロストガラス、グリッチテアリング、スキャンライン、グロー、大きなアクセント塗りつぶし、影付きの角丸カード。
  • ゲーム専用要素: 3Dカルーセルメニュー、キャラクターアート、レアリティカラーバー。
  • 公式ゲームアセット: スクリーンショット、ロゴ、アイコン、キャラクターアート、コピー、公式フォントファイル。

タイポグラフィ

  • ラテン文字と数字: Saira(オープンソース、SIL OFL)。ラベルは125%にストレッチ、オールキャップス、0.06emトラッキング。公式サイトはワイドラベルにトラッキングを追加していませんが、小さいサイズでは少し残しています。
  • 中国語: Noto Sans SC またはシステムサンセリフ。本文にセリフ体やブラシ体は使用しません。
  • すべての数字はタブラーニケア(font-variant-numeric: tabular-nums)。

単一HTMLファイルの配信

  • terrain.css のクラスをそのまま使用し、色を変更するページレベルのオーバーライドを追加しないでください。変更が必要な場合は、コンポーネントに問題があるため、スキルに報告する必要があります。
  • terrain.css を <style> 要素に、contours.js を <script> 要素に配置します。スクリプトをインライン化する前に、リテラルの </script> が含まれていないことを確認してください。含まれている場合は \<\/script> と記述します。
  • ページがオフラインで動作する必要がある場合は、Sairaをwoff2データURIとして @font-face に埋め込みます。それ以外の場合はGoogle Fontsにリンクし、フォールバックフォントを保持します。

納品前チェックリスト

  • ページタイプが選択され、異なるタイプの見出しサイズが1ページに混在していない。
  • アクセントは現在位置と主要アクションにのみ表示され、ページに赤はない。
  • 各ボタングループには最大1つのブロック主要ボタンがあり、残りはピル型。
  • 垂直リストと水平タブはそれぞれ独自の選択スタイルを使用している。
  • すべてのページに // パスタイトルがある。
  • すべての数字は実際のデータであり、すべての製品記述にはソースがあり、その範囲を誇張していない。
  • ライトテーマとダークテーマの両方が確認され、電話幅(約400px)で横スクロールしない。
  • キーボードフォーカスが可視であり、動きの低減がオンの場合でもすべてが静止している。
  • 公式ゲームアセットは使用されていない。

ファイル

ファイル内容
assets/terrain.cssカラートークン(ライトとダーク)と全コンポーネント
assets/contours.js等高線背景、設定は1行: TerrainContours.mount(canvas)
examples/demo.htmlすべてのコンポーネントを1ページにまとめた、すぐに開けるもの
examples/screenshots/ライト、ダーク、電話幅、ダイアログでのコンポーネントページのスクリーンショット
references/research.md調査ノート: 観察されたこと、保持されたこと、省略されたこと

関連スキル