ETH 再平衡
偵測 ETH 週漲幅達 12%,依您設定觸發再平衡。
TrustGuard 是為 AI 投資代理人設計的信任 UX 探索。 這套系統以 深色暖調 + 溫暖橙 為核心,所有元件圍繞 5 條設計原則展開。
“使用者最害怕的不是 AI 做錯選擇,
而是自己沒有機會知道、理解、或阻止。”
— 使用者洞察,Week 1
每個 token、每個元件旁邊會出現Why區塊,紀錄的是「為什麼這樣設計、而不是那樣」。 這不是規範文件,而是設計爭議時的仲裁紀錄 — 下次改版時能看懂每個決策的成本與交易。
色彩以語意分組,不以色相命名。每個 token 都有明確使用場景。
--background
oklch(0.145 0.005 50)
頁面底色
--card
oklch(0.185 0.006 50)
卡片、區塊
--popover
oklch(0.22 0.007 50)
Popover、Tooltip
--muted
oklch(0.26 0.006 50)
次要背景
--accent
oklch(0.28 0.015 55)
Hover 狀態
--primary
oklch(0.72 0.17 50)
品牌、CTA、重要動作
Why 暖橙而非冷色系
金融產品 9 成使用冷色藍(Robinhood、Coinbase、傳統銀行 app),原因是傳達「冷靜、專業、可信」。 TrustGuard 故意反其道而行 — Week 1 訪談中,使用者對 AI 代理人的核心恐懼是「它冷冰冰地把錢搞丟」。
暖橙(oklch 0.72 0.17 50)是決策的解藥:有溫度、有生命、但飽和度夠低不刺眼。 對應原則 03「夥伴關係,不是代理」— 顏色本身就是立場宣言。
Why 深色底
訪談顯示 Web3 使用者多在凌晨監看(時差、亞洲市場、鏈上事件),暗色介面對眼睛友善。 另一層原因是「警示色的對比強度」— 深色底讓 Panic 紅與 Warning 橘能拉出足夠視覺差異, 不會像亮色底那樣被整體色調稀釋。
--foreground
oklch(0.97 0.008 70)
主要文字
--muted-foreground
oklch(0.68 0.008 70)
次要文字、提示
--primary-foreground
oklch(0.145 0.005 50)
Primary 上的文字
用於非 Panic 的狀態指示
--success
oklch(0.75 0.15 155)
成功、正面
--warning
oklch(0.82 0.15 85)
警告、待確認
--info
oklch(0.7 0.13 225)
中性提示
--destructive
oklch(0.68 0.23 25)
刪除、撤銷
Why destructive ≠ panic
Destructive(紅偏粉)給「小範圍危險動作」使用 — 刪除一筆紀錄、取消一次訂閱。 Panic(飽和正紅)保留給「整個 session 級別的撤退」— 撤銷所有授權、切斷錢包連線。
兩者故意拉開色相差距(25° vs 25° 但飽和度差 0.04),避免使用者把「刪除交易」的肌肉記憶用在「緊急制動」。 這是原則 02「Panic 色是神聖的」的色票落地。
神聖色 — 僅用於緊急中止情境,絕不重複使用
--panicSacredoklch(0.63 0.27 25) · 僅用於 Emergency Stop 按鈕、異常警示、不可逆動作。
Why sacred? Week 1 原則 2:緊急制動神聖不可侵犯 — 若到處濫用紅色,真正需要時反而失去警示力。
AI 決策信心的視覺分級,與 Semantic 色分離使用
High
90 – 100%
AI 自主執行
Medium
60 – 89%
AI 執行但通知
Low
30 – 59%
AI 暫停,請使用者確認
Critical
< 30%
AI 拒絕執行,需人工決策
Why 4 階,不是 3 階或 5 階
大多數 AI 產品只顯示「高 / 中 / 低」三階。TrustGuard 故意切成四階,關鍵差異在 Critical(<30%)獨立出來 — 它的語意不是「信心很低」,而是「我建議你拒絕」。
3 階會讓 Low 同時包含「35% 需要你確認」與「15% 我不建議做」, 這兩個決策分歧很大。5 階又太細 — 使用者不會分辨 85% 和 92% 的差別。 4 階剛好對應四種不同動作:自主執行 / 執行但通知 / 暫停請示 / 拒絕。
Inter (拉丁) + Noto Sans TC (中文) + Geist Mono (數字、hash)。中英混排時同一層級視覺一致。
Display · 48px / 600
投資組合再平衡
Title 1 · 36px / 600
Portfolio Rebalancing
Title 2 · 30px / 600
AI 代理人正在思考
Title 3 · 24px / 500
Emergency Stop Activated
Heading · 20px / 500
今日資產變動
Lead · 18px / 400
偵測到 ETH 週漲幅達 12%
Body · 16px / 400
這筆交易將把你的 ETH 比例從 45% 降至 38%,符合保守再平衡策略。
Small · 14px / 400
Confidence: 92% · 已於 03:42 AM 執行
Caption · 12px / 400
最後同步:2 分鐘前 · Block #18923456
Geist Mono — 用於 hash、地址、純數字
Why 三種字體
Inter 處理拉丁文、Noto Sans TC 處理中文、Geist Mono 處理機器資料 — 三者的 x-height 與字重刻意挑過相近的,讓中英混排時同一層級視覺重量一致。
Mono 不是為了「工程師氣質」— 是因為 hash、地址、gas 這類資料需要等寬對齊掃讀,使用者比對 0x 開頭的前後 4 碼時才不會錯位。 這是原則 04「證據優先於承諾」的排版層面體現:鏈上資料用 mono,讓它看起來就是可驗證的。
使用 Tailwind 4pt scale。Radius 以 0.625rem (10px) 為基數。
Why radius 偏大
基數從 10px 起跳、卡片預設 xl/2xl(14–18px),刻意比多數 fintech 圓潤。 尖角傳達「專業、嚴肅」,但對 AI 代理人來說容易過度冷漠; 圓角讓整個介面有「擬人感」,對應暖橙做的是同一件事 — 把硬體感柔化成夥伴感。
陰影用於建立層次,Glow 用於強調 AI / Panic 狀態。
shadow-soft
卡片、對話框
shadow-lift
重要彈窗
shadow-glow-primary
AI 思考中
shadow-glow-panic
Panic 狀態
Why Glow 而不是加粗邊框
Agent 的「狀態」是動態的(思考中、警戒中),用 glow 擴散出邊框之外, 視覺上更像「輻射、呼吸」,比 solid border 更能傳達「它在運作」。
另一個原因:glow 本身是低飽和的顏色外溢,即使同時有 primary glow 和 panic glow 出現在同一畫面, 也不會互相搶焦 — 但如果是 2px border,視覺衝突會很強。
基於 shadcn/ui,以 TrustGuard tokens 客製化。
⚠️ Panic 情境不使用 Destructive — 改用專屬 PanicButton 元件(Day 11 建置)
這是 TrustGuard 最核心的四個元件,所有畫面都由它們組成。
AI 的信心度視覺化。四種 variant,顏色依等級自動切換。
variant="bar"
variant="ring"
variant="dot"
variant="badge"
Why 4 個 variant,不是 1 個
信心分數會出現在完全不同密度的畫面 — 卡片標頭只有 16px 高(用 dot), 對話框按鈕旁需要數字但不能搶焦(用 badge),Portfolio 大圖需要視覺主角(用 ring), 推理過程需要比較多組信心度(用 bar)。
同一筆資料用不同 variant 表達是故意的 — 原則 05「透明度要校準」: 資訊的重要性隨情境變化,元件要能隨之伸縮,而不是一種尺寸套到底。
Agent 當下的狀態。active / thinking 有動畫,critical 脈衝。
variant="pill" (default)
variant="icon"
AI 的每一筆行動紀錄。pending_approval 才會顯示操作按鈕;reasoning 可摺疊。
偵測 ETH 週漲幅達 12%,依您設定觸發再平衡。
市場波動超出歷史區間 2.3 倍,我不太確定該怎麼做。你覺得呢?
每週 Aave USDC 質押收益自動領取。
偵測到未驗證合約的 approve 請求,已自動阻擋並通知您。
AI 主動向使用者說話。四種語氣:info / question / alert / success。
昨日您的投資組合淨值 +1.2%。 已完成 3 筆再平衡、攔截 1 筆可疑合約互動。
市場波動超出歷史區間 2.3 倍,這個情境在歷史資料中僅出現 3 次。我對再平衡的信心下降到 45%,你覺得我應該先暫停嗎?
目標合約 0x3f...b2 未在白名單內,7 天內有 4 筆 rug 報告。 我已自動拒絕簽名並通知您。
依您設定的保守策略,自動賣出 0.3 ETH 換為 1,247 USDC。
Why AI 需要四種語氣
多數 AI 產品只有一種聲音 — 中性、禮貌、略帶行銷感。TrustGuard 把 AI 的語氣拆成四種, 因為 AI 在不同情境下對使用者的「情感負擔」完全不同:
info = 不打擾的摘要; question = 主動承認不確定(對應原則 03); alert = 該讓使用者警覺但不恐慌; success = 完成後簡潔回報,不邀功。
Alert 使用 scale + bounce 的 entrance animation,其他三種只是 fade-up — 動畫節奏本身就是語氣的一部分。
神聖紅按鈕 — 長按 1.5 秒確認撤銷。全專案僅此處允許大面積 panic 紅。
variant="solid" · sizes
variant="outline"
disabled
互動提示:按住任一顆按鈕不放,進度條會從左往右填滿;滿格後才真的撤銷。 中途放開則取消。
Why 長按 1.5 秒,不是確認對話框
PanicButton 是「不可逆動作」的代表 — 撤銷後所有授權需重新簽署。 業界慣例是「點擊 → 跳確認框 → 點 Yes」,但在恐慌場景下這個流程有兩個問題:
1. 使用者真的恐慌時,會連續快速點擊,確認框會被肌肉記憶秒點通過。 2. 確認框從按鈕處「飛出來」的時間成本與長按相當,但失去了「給使用者一個冷靜的 1.5 秒」。
長按的設計讓使用者在按住的過程中能夠反悔 — 放手就取消。 進度條視覺化這個「還沒發生、但正在逼近」的狀態,等於給使用者一個物理層面的 undo 緩衝。
AI 決策的推理軌跡。4 種節點:資料 / 推理 / 決策 / 執行,每一步都有證據可查。
ETH/USD 週線漲幅 +12.4%,24h 波動 2.8%。
漲幅 12.4% 超過您設定的 10% 閾值 → 應賣出超額。
賣出 0.3 ETH(約佔 ETH 部位 15%),轉入 USDC。
Hash: 0x8a…f3d · 已於 1 區塊內確認。
Why 把推理軌跡拆成 4 種節點
Black box 問題的標準解法是「把決策過程攤開」— 但若只是一串文字,使用者會略過。 TraceTimeline 把推理拆成 data → reasoning → decision → action 四種節點,每種節點的 icon 和可展開的 evidence 結構不同。
這個四段式對應心智模型: 「我看到什麼」→「我怎麼想」→「我決定什麼」→「我做了什麼」。 使用者可以在任一段質疑 AI — 是資料錯?推理錯?還是決策錯? 這是原則 04「證據優先於承諾」最直接的介面落地。
動畫語意:AI 思考 = 柔和呼吸感;Panic = 警覺脈衝;狀態切換 = 俐落不拖泥。
animate-thinking · 1.4s ease-in-out infinite
animate-panic-pulse · 1.8s ease-in-out infinite
Why 1.4s 與 1.8s,不是更快
Thinking 用 1.4s 是貼近人類呼吸節奏(成人平均 12–16 次/分鐘,約 4s 一次完整呼吸、1.5s 一次吸氣)。 比這快會像「心跳過快」傳達焦慮;比這慢則失去「正在運作」的暗示。
Panic 脈衝故意用 1.8s — 比思考更慢。直覺上會以為緊急就該快閃,但快閃會讓使用者腎上腺素爆發、 做出不理性決定。1.8s 的節奏傳達的是「這很嚴重,但請冷靜看」, 配合長按 1.5s 的 PanicButton,整個 Panic 場景的節奏設計是「讓你警覺、但不讓你慌」。
貫穿所有設計決策的 5 條原則,來自 Week 1 使用者研究。
AI 的技術資訊必須被翻譯成人話才能顯示。hash、wei、gas 都要人話化。
在任何畫面、任何狀態,緊急制動必須 3 秒內可及。
介面語氣:「我們的組合」而非「你的組合」。AI 會主動問、會承認不確定。
信任來自可驗證的歷史,不是行銷話術。誠實顯示虧損。
預設簡潔,想深入可展開。為散戶 / 進階 / 開發者提供不同深度。