跳轉到

設計系統(Design System)

本檔角色:UI 設計系統的細化 —— 視覺原則、色票、字級、間距、元件規則、3D 主視覺準則。 設計定位 / 美術資源總覽見 美術資源.md;前端實作(token CSS 架構 / 主題機制 / 元件庫)見 ui-frontend.md。對應 src/styles/

1. 設計定位與視覺原則

Open4WD 的 UI 定位是「專業迷你四驅車調校工坊」,不是汽車維修系統,也不是一般 SaaS dashboard。核心畫面優先展示「四驅車模型 / 賽道 / 比賽狀態」;設定、治理與識別資訊才使用工具型密度。

  • 3D 車輛 / 場地 / 比賽畫面是主視覺,不放小預覽框
  • 工具面板深色、低噪音、可掃描的資訊層級。
  • 狀態回饋同時用顏色 + 圖示 + 文字 + 形狀,不只靠紅綠。
  • 卡片只用於單一作品 / 零件 / 玩家 / 設定群組;不做卡片套卡片。
  • 固定格式元素(HUD / 卡片 / 按鈕 / 列高)須穩定尺寸,避免動態文字跳動。
  • 視覺語言採「克制的機械競速」:石墨黑作舞台、橘色只表速度與主 CTA、青色表遙測與連線、黃色表能量與獎勵;裝飾線框不搶過 3D 主體。
  • 正式介面圖示一律使用經審查的 SVG;不得以 emoji、Unicode 符號或字元圖案充當按鈕、狀態、縮圖與 HUD 圖示。
  • 資訊強度分三級:Level 1(登入 / 設定 / 說明)低噪音、Level 2(車庫 / 工坊 / 賽制 / 房間)模型與操作並重、Level 3(比賽 / 觀戰 / 結算)沉浸與即時狀態優先。
  • 行動版一律 Stage-first:先看車、賽道或賽事主體,再展開 Pit Board 與 Tool Drawer;不得讓技術資訊先於遊戲目標出現。

2. 色票(token)

dot 記法(bg.canvas)= 語意簡寫;CSS 變數名循 ui-frontend.md §5 命名慣例(--{category}-{role}-{variant?})。本表色值 =default 主題預設值的設計來源——實作權威 =themes/default/theme.json主題系統.md),本表與 manifest 同步維護。

設計色/Token 色值 用途
Bench Black/bg.canvas #0B0C0E 3D 舞台、沉浸背景
Oil Graphite/bg.surface #15171A 工具抽屜、低階面板
Tool Steel/bg.surfaceRaisedbg.elevated #292C31 Pit Board、目前選取面
Safety Orange/accent.speed #F26422 速度、危險邊緣、每 viewport 唯一主 CTA
Timing Cream/text.primary #F0E6D2 高優先文字與計時板語意
Telemetry Blue/primary #3DB7E9 焦點、遙測、網路與可互動提示
border.subtletext.secondarytext.muted #41454C#C2B8A5#8c98a8 分隔與文字層級;muted 仍須達可讀門檻
accent.energy #facc15 電量與獎勵;不得取代 Safety Orange 主 CTA
successwarningdanger #22c55e#f59e0b#ef4444 狀態,必須搭配文字或圖示

禁止整頁只由單一色系變化構成;每個主畫面至少一個 gameplay accent(speed / energy / track)。

3. 字級與排版

Token px 用途
display 32/40 · title 22/28 · section 16/22 · body 14/20 · caption 12/16 · hud 18/24 首屏 / 頁標 / 區塊 / 內文 / 註腳 / HUD 數字
  • 不用 viewport-width 動態縮放字級。
  • CJK = Noto Sans TC/SC/JP;拉丁與數字 = Inter;PeerId / CID 用等寬字、僅必要處顯示。
  • track-bracket 是橘色切角框線語彙,不是另一套字型;只用在頁標、3D 舞台、結果焦點與正式空狀態,不套在長文或每張卡片外框。
  • 完整字型策略(self-host OFL、CJK subset、A/B/C/D 文字分類)見 ui-frontend.md §16

4. 間距與尺寸

space 4 / 8 / 12 / 16 / 24 / 32px;radius.sm 4px / radius.md 8px;hit.min 44px;hud.button 64px desktop / 72px touch。Default 的機械卡片以 8px 內圓角為基準;強風格主題可透過受控 Skin token 改變面板 / 卡片 / 按鈕形狀,但不得改 hit box、造成裁切或把所有控制項做成膠囊(segmented control/chip 除外)。完整契約見 主題外觀與 RWD.md §4

5. 元件規則

元件 規則
Button 主 CTA 用 accent.speed;工具按鈕 icon + tooltip
Segmented Control 賽制模式 / 特效品質 / 語言 等互斥選項
Toggle / Slider 色盲模式·Pinning 節點(settings.md)/ 音量三軸
Stat Bar 電量 / 過熱 / 磨損 / 載入進度
Card 固定 aspect ratio,含縮圖 + 標題 + 核心 stat + 狀態 badge
Toast / Modal 不阻擋操作(需下一步)/ 僅高風險確認(刪本地資料、上鏈扣費)
Icon 24×24 SVG sprite,currentColor 染色;互動圖示有可翻譯 aria-label,純裝飾圖示 aria-hidden

完整 Angular 元件庫(o4-*)見 ui-frontend.md §4

5.1 工坊容器角色

角色 用途 禁止事項
Stage 車、賽道、比賽與冠軍的第一視覺;可含低對比網格 不放大量表單或 PeerId 清單
Pit Board 當前目標、數值比較、狀態與一個主操作 不做 Pit Board 套 Pit Board
Tool Drawer PeerId、CID、OrbitDB、TURN、載入診斷、版本等技術資訊 不得成為完成核心流程的唯一入口

舞台導引紋 是迷你四驅車軌道語彙的非量測轉譯:可使用工作墊嵌槽、起跑箭頭、連續接縫或主題化曲線引導視線,但禁止數字、單位、等距刻度、比例值與尺規造型,不得暗示能量測車長、車寬或零件位置。它只放在 Stage/ 模型架邊緣,不是每張卡片都要套用的裝飾框。

空狀態統一使用 o4-empty-stategenericconnectiongarage 語意;UGC/場地等沒有專屬資產 key 的空狀態使用 generic 插畫搭配 route-specific DOM 文案, 插畫取自目前主題的外部資產,標題、說明與 CTA 必須是可翻譯的真實 DOM 內容。正式 Angular template 除 o4-icon 外部 sprite 包裝外不得內嵌 SVG。

每個 viewport 只允許一個 Safety Orange 主 CTA;同一流程的返回、詳情、刪除、切換與技術操作使用 secondary/ghost/danger。若主 CTA 依狀態切換(例如 RoomPage 的「準備」與「取消準備」),任一時間仍只能有一個;開賽由 ReadySet 驗證完成後自動倒數,不提供房主開始按鈕。

6. 影像與 3D

  • 車庫 / 車間 / 場地 / 展示廳 第一視覺 = 3D / 截圖資產;車間 3D canvas 不得低於桌面寬度 50%。
  • 比賽畫面全螢幕 / 近全螢幕,HUD 疊加,不上下切版壓縮畫面。
  • 作品卡片縮圖須是實際模型 / 自動截圖,不用抽象圖示代替。
  • 正式資產尚未就緒時使用「SVG 類型圖示 + 切角框 + 明確文字」空狀態;不得偽裝成實際縮圖,也不得用 emoji 代替。

7. 動態與音訊完成度

  • 互動回饋走 motion token:按下只做輕微位移 / 縮放,頁面與結果焦點只做短距離 opacity + transform;不得讓卡片 hover 改變尺寸或造成 reflow。
  • OS prefers-reduced-motion: reduce 或玩家選擇 motionPreference=reduce 時,非必要動畫與轉場近乎即時;靜態/SSG 的 data-motion=pending 亦採相同安全值,資訊與操作結果不得依賴動畫才可辨識。
  • 程式必須先完整提供 BGM / SFX 槽位與三路音量控制;default 主題允許全部音訊槽為 null,其語意是安全靜音,不得發出網路請求或 console error。正式槽位與 fallback 規則見 audio-system.md

8. 跨模組對接

對象 對接
ui-frontend.md token CSS 架構 / 主題 / 元件庫 / 字型 / 動畫實作
賽內機制.md §2.4 比賽 HUD 規格
系統常數 動畫 / 版面 / 預設值常數
語系清單.md UI 文字翻譯