BMAD-METHOD/test-samples/sample-a/ux-design-specification.md

760 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
inputDocuments: ['test-samples/sample-a/PRD-AquaFlow-V1.0.md']
workflowType: 'ux-design'
lastStep: 14
status: 'complete'
project_name: 'AquaFlow SaaS 專案管理協作平台'
user_name: '東杰'
date: '2025-12-25'
---
# UX Design Specification: AquaFlow SaaS 專案管理協作平台
**Author:** 東杰
**Date:** 2025年12月25日
**Version:** 1.0
---
## 產品背景摘要
**產品名稱:** AquaFlow
**產品類型:** 雲端 SaaS 專案管理協作平台
**目標受眾:** 中小型企業團隊領導者、專案經理、跨職能團隊成員
### 解決的核心問題
1. 現有工具太複雜或太輕量,團隊需要平衡清晰度、速度和適當結構的產品
2. 任務狀態追蹤困難
3. 新手上手時間過長
### 核心功能模組
- 專案管理(建立和管理多個專案)
- 任務看板(看板拖曳、快速新增)
- 任務詳情(指派、截止日期、優先級、評論)
- 搜尋與篩選
- 通知系統(應用內 + Email
### 設計風格方向
- 關鍵字trust、efficiency、clarity、professional
- 風格Modern Professional SaaS
---
## Executive Summary
### Project Vision
AquaFlow 是專為中小型企業團隊打造的雲端專案管理協作平台。我們的目標是提供比 Jira 更輕量、更直覺的體驗,同時保持專業團隊所需的核心功能。
**核心價值主張:**
- 直覺的拖曳看板,讓任務管理變得簡單
- 清晰的團隊進度可見度,一眼掌握全局
- 快速上手5分鐘即可開始使用
- 合理的價格,不需要企業級預算
### Target Users
**主要使用者:**
- 團隊領導者與專案經理(有 Jira 經驗)
- 跨職能團隊成員
- 營運與行銷團隊
**使用者特徵:**
- 技術熟練度:中高(有專案管理與 Jira 經驗)
- 主要設備:桌面電腦
- 使用情境:辦公室環境,團隊協作型任務
**核心痛點:**
- Jira 成本過高
- 現有工具過於複雜或功能不足
### Key Design Challenges
1. **避免「另一個 Jira」的印象** — 需要更簡潔但不失專業
2. **傳達價值感** — UI 需要讓用戶感受到「更划算且更好用」
3. **團隊協作可見度** — 清晰呈現「誰在做什麼、進度如何」
### Design Opportunities
1. **快速上手體驗** — 比 Jira 更低的學習門檻
2. **視覺化進度** — 一眼看清團隊全局
3. **極致拖曳體驗** — 讓核心互動成為產品亮點
4. **輕量專業** — 保持專業外觀,去除不必要複雜度
---
## Core User Experience
### Defining Experience
**核心互動:** 新增任務 + 拖曳任務狀態
這兩個動作是 AquaFlow 的靈魂。用戶每天會執行這些操作數十次,必須做到:
- **新增任務**10 秒內完成,只需輸入標題
- **拖曳任務**:絲滑流暢,即時視覺回饋
**差異化策略vs Jira**
| 面向 | Jira 痛點 | AquaFlow 解法 |
|------|-----------|---------------|
| 新增任務 | 要填很多欄位 | 「標題即任務」— 只需標題,其他選填 |
| 拖曳體驗 | 有時卡頓 | Spring 動畫 + 樂觀更新 |
| 進度可見度 | 要看報表 | 欄位計數器 + 進度環 |
| 設定複雜度 | 設定太多 | 智慧默認,開箱即用 |
### Platform Strategy
| 面向 | 決策 |
|------|------|
| **主要平台** | 響應式 Web App |
| **互動方式** | 滑鼠/鍵盤為主 |
| **離線功能** | V1 暫不支援(辦公室使用為主) |
| **瀏覽器支援** | Chrome, Firefox, Safari, Edge最新兩版 |
### Effortless Interactions
1. **極速新增** — 浮動按鈕 + `Cmd+K` 快捷鍵
2. **絲滑拖曳** — Spring 動畫 + 樂觀更新
3. **一眼進度** — 欄位計數器 + 進度環
4. **快速搜尋**`Cmd+K` 全域搜尋
### Critical Success Moments
| 時刻 | 用戶情感 | 設計策略 |
|------|----------|----------|
| **第一次拖曳到「完成」** | 「哇,好順!」 | 微慶祝動畫 |
| **看到團隊進度** | 「終於不用問了」 | 進度環 + 計數器 |
| **10秒內新增任務** | 「比 Jira 簡單」 | 快速新增流程 |
| **找到上週任務** | 「搜尋好用!」 | `Cmd+K` 全域搜尋 |
### Experience Principles
1. **🚀 速度優先** — 任何操作 200ms 內有視覺回應
2. **👁️ 資訊清晰** — 一眼看到:誰負責、何時截止、什麼狀態
3. **🎯 專注當下** — 減少干擾,專注於當前任務
4. **🔄 流暢過渡** — 所有狀態變化都有自然動畫
5. **⌨️ 效率捷徑** — 為專業用戶提供鍵盤快捷鍵
---
## Desired Emotional Response
### Primary Emotional Goals
| 情感 | 觸發時機 | 設計策略 |
|------|----------|----------|
| **掌控感** | 看到團隊進度 | 進度環 + 清晰的狀態欄 |
| **效率感** | 快速完成操作 | 200ms 內有回應 |
| **輕鬆感** | 首次使用 | 智慧默認,不需要設定 |
| **成就感** | 完成任務 | 微慶祝動畫 |
### Emotional Journey Mapping
| 階段 | 情感 | 設計策略 |
|------|------|----------|
| **發現** | 好奇 + 期待 | 清晰的價值主張5秒內吸引注意 |
| **註冊** | 信任 + 輕鬆 | 最少步驟,支援社群登入 |
| **首次使用** | 自信 + 引導 | 引導式 onboarding不壓迫 |
| **日常使用** | 高效 + 滿足 | 流暢操作,即時回饋 |
| **完成任務** | 成就感 | 微慶祝動畫,進度視覺化 |
| **出錯時** | 被理解 + 有方向 | 友善錯誤訊息,明確解決方案 |
### Micro-Emotions
**強化的正面情感:**
-**自信** vs ❌ 困惑 → 清晰的視覺層級
-**信任** vs ❌ 懷疑 → 一致的互動模式
-**成就感** vs ❌ 挫折 → 漸進式任務分解
-**歸屬感** vs ❌ 孤立 → 團隊活動可見性
**避免的負面情感:**
- 😰 焦慮 — 避免資訊過載vs Jira 太多欄位)
- 😤 挫折 — 避免複雜操作流程
- 😵 困惑 — 避免不一致的 UI 元素
- 😒 厭煩 — 避免過多確認對話框
### Emotional Design Principles
1. **🏆 慶祝進步** — 每個完成的任務都值得微小的慶祝動畫
2. **🤝 溫暖的錯誤處理** — 錯誤訊息像朋友在幫忙,不像機器在責備
3. **✨ 驚喜時刻** — 隱藏的彩蛋讓日常使用不無聊
4. **🧘 減少認知負擔** — 默認值聰明,讓用戶少做決定
5. **👋 個人化觸點** — 使用者名字、偏好設定優先
---
## UX Pattern Analysis & Inspiration
### Inspiring Products Analysis
| 產品 | 優點 | 可借鑒的 UX 模式 |
|------|------|-----------------|
| **Trello** | 極致直覺的拖曳體驗 | 看板 + 卡片設計、封面圖片、標籤系統 |
| **Asana** | 多視圖無縫切換 | 列表/看板/時間軸視圖、右側滑出面板 |
| **Notion** | 鍵盤導向操作 | `Cmd+K` 萬能搜尋、斜線指令 |
| **Linear** | 極簡專業風格 | 清晰資訊層級、快捷鍵系統 |
### Transferable UX Patterns
**導航模式:**
- 側邊欄工作區切換(像 Slack 一樣快速切換)
- 麵包屑導航(工作區 > 專案 > 任務的清晰路徑)
- 全域搜尋 `Cmd+K`(快速找到任何東西)
**互動模式:**
- Trello 風格的流暢拖曳
- 右側滑出詳情面板(不離開上下文)
- @提及自動完成(自然的協作語法)
### Anti-Patterns to Avoid
| 反模式 | 來源 | 為什麼避免 |
|--------|------|-----------|
| 過度功能 | Jira | 中小企業不需要複雜設定 |
| 資訊過載 | Monday.com | 太多欄位造成認知負擔 |
| 強制教學 | 某些企業軟體 | 阻斷新手的探索慾望 |
| 深層導航 | 舊版 Basecamp | 超過 3 層深度造成迷失 |
### Design Inspiration Strategy
**採用 (Adopt)**
- ✅ Trello 的拖曳體驗 → 核心看板互動
- ✅ Asana 的視圖切換 → 列表/看板無縫切換
- ✅ Notion 的 Cmd+K → 全域快捷搜尋
**改編 (Adapt)**
- 🔄 Asana 的慶祝動畫 → 更輕量的完成微動畫
- 🔄 Linear 的鍵盤導向 → 簡化為常用快捷鍵
**避免 (Avoid)**
- ❌ 任何需要培訓的功能 → 自助可發現
- ❌ 深層選單 → 最多 3 層
---
## Design System Foundation
### Design System Choice
**選定方案:** Chakra UI v2 + React
**技術組合:**
- UI 框架Chakra UI v2
- 圖標庫Lucide Icons
- 拖曳:@dnd-kit/core
- 動畫Framer Motion內建
- 表單React Hook Form + Chakra
### Rationale for Selection
| 考量因素 | Chakra UI 優勢 |
|----------|----------------|
| **React 整合** | 原生支援,符合 PRD 技術栈 |
| **可主題化** | 輕鬆建立 AquaFlow 品牌識別 |
| **無障礙** | 內建 WCAG 標準支援 |
| **開發體驗** | 清晰文件、TypeScript 支援 |
| **拖曳支援** | 易於整合 @dnd-kit |
### Implementation Approach
1. **Phase 1: 基礎設定**
- 安裝 Chakra UI 和依賴套件
- 配置主題 (theme.ts)
- 建立設計令牌 (Design Tokens)
2. **Phase 2: 基礎組件**
- Button, Input, Card 等基礎組件
- 導航組件 (Sidebar, Navbar)
- 版面配置組件
3. **Phase 3: 業務組件**
- TaskCard (任務卡片)
- KanbanColumn (看板欄)
- ProjectList (專案列表)
### Customization Strategy
**設計令牌 (Design Tokens)**
- 品牌色:待 Step 8 定義
- 字型Inter (Google Fonts)
- 間距4px 基礎單位
- 圓角sm=4px, md=8px, lg=16px
- 陰影:使用 Chakra 默認 shadow tokens
---
## Visual Design Foundation
### Color System
**色彩來源:** UI/UX Pro Max 知識庫 (SaaS Modern Professional)
| 角色 | Hex 色碼 | 用途 |
|------|----------|------|
| **Primary** | `#2563EB` | 主按鈕、連結、品牌識別 |
| **Secondary** | `#3B82F6` | hover 狀態、次要強調 |
| **CTA** | `#F97316` | 行動呼籲按鈕 |
| **Background** | `#F8FAFC` | 頁面背景 |
| **Text** | `#1E293B` | 主要文字 |
| **Border** | `#E2E8F0` | 邊框、分隔線 |
**語意色彩:**
- Success: `#22C55E`
- Warning: `#EAB308`
- Error: `#EF4444`
- Info: `#3B82F6`
**設計理念:** Trust blue + accent contrast信任藍 + 對比強調色)
### Typography System
**字型來源:** UI/UX Pro Max 知識庫 (Minimal Swiss)
**主要字型:** Inter (Google Fonts)
```css
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
```
**字級階層:**
| 元素 | 大小 | 粗細 | 行高 |
|------|------|------|------|
| H1 | 32px | 700 | 1.2 |
| H2 | 24px | 600 | 1.3 |
| H3 | 20px | 600 | 1.4 |
| Body | 16px | 400 | 1.5 |
| Small | 14px | 400 | 1.5 |
| Caption | 12px | 400 | 1.4 |
### Spacing & Layout Foundation
**基礎單位:** 4px
**間距系統 (Chakra UI)**
```
space.1 = 4px
space.2 = 8px ← 最小按鈕間距
space.3 = 12px
space.4 = 16px ← 常用內邊距
space.6 = 24px ← 區塊間距
space.8 = 32px
space.10 = 40px
space.12 = 48px
```
**版面配置:**
- 最大寬度1280px
- 側邊欄寬度240px
- 卡片內邊距16px
- 欄位間距16px
### Accessibility Considerations
- ✅ 色彩對比度符合 WCAG AA 標準4.5:1
- ✅ 主要按鈕使用至少 44x44px 觸控區域
- ✅ 相鄰按鈕間距至少 8px
- ✅ Inter 字型具備優秀的可讀性
- ✅ 支援鍵盤導航Tab/Shift+Tab
---
## Design Direction Decision
### Design Directions Explored
由於設計決策已在前面步驟中明確定義,跳過多變體 mockups 生成。
**已確定的設計元素:**
- 設計系統Chakra UI v2
- 配色Trust Blue (#2563EB) + Orange CTA (#F97316)
- 字型Inter
- 風格Modern Professional SaaS
### Chosen Direction
**選定方向Modern Professional SaaS**
| 面向 | 設計決策 |
|------|----------|
| **布局** | 側邊欄導航 + 主內容區看板 |
| **視覺密度** | 中等密度,留白適當 |
| **互動風格** | 輕量動畫、Spring 拖曳 |
| **導航模式** | 左側邊欄 + 頂部麵包屑 |
| **卡片風格** | 白底圓角 + 輕陰影 |
### Design Rationale
1. **側邊欄導航** — 符合 SaaS 產品標準,用戶有 Jira 經驗
2. **中等密度** — 平衡資訊呈現和清晰度vs Jira 的高密度)
3. **輕量動畫** — 支持「速度優先」原則,不影響效能
4. **白底圓角卡片** — 現代專業感,符合 Trust + Efficiency 關鍵字
### Implementation Approach
1. **Chakra UI Theme** — 配置自訂顏色和字型
2. **Layout Components** — Sidebar + Main + SlidePanel
3. **Card Components** — TaskCard、ProjectCard
4. **Animation Library** — Framer Motion for Spring animations
---
## User Journey Flows
### Journey 1: 新增任務
**目標:** 10 秒內建立新任務
```mermaid
flowchart TD
A[點擊 + 按鈕 / Cmd+K] --> B[輸入任務標題]
B --> C{按 Enter?}
C -->|是| D[任務建立成功 ✓]
C -->|否| E[展開詳情面板]
E --> F[填寫其他欄位]
F --> D
D --> G[微慶祝動畫]
```
**關鍵設計決策:**
- 只需標題即可建立任務
- 其他欄位皆為選填
- 支援快捷鍵 `Cmd+K`
### Journey 2: 拖曳任務狀態
**目標:** 絲滑流暢的狀態切換
```mermaid
flowchart TD
A[抓取任務卡片] --> B[拖曳中 - 陰影提升]
B --> C[放置到目標欄]
C --> D{樂觀更新}
D -->|成功| E[Spring 動畫完成]
D -->|失敗| F[回滾位置 + 錯誤提示]
E --> G[欄位計數器更新]
```
**關鍵設計決策:**
- 樂觀更新(先顯示成功,再同步後端)
- Spring 動畫增加流暢感
- 失敗時優雅回滾
### Journey 3: 全域搜尋
**目標:** 快速找到任何任務
```mermaid
flowchart TD
A[按 Cmd+K] --> B[搜尋框浮現]
B --> C[輸入關鍵字]
C --> D[即時顯示結果]
D --> E{選擇結果}
E -->|Enter/Click| F[跳轉到任務]
E -->|Esc| G[關閉搜尋]
```
**關鍵設計決策:**
- 全域快捷鍵 `Cmd+K`
- 即時搜尋結果
- 支援鍵盤導航
### Journey Patterns
**通用模式:**
1. **快捷鍵入口** — 所有常用功能支援 keyboard shortcut
2. **即時回饋** — 200ms 內有視覺回應
3. **樂觀更新** — 先顯示成功,後台同步
4. **優雅錯誤處理** — 自動回滾 + 友善訊息
### Flow Optimization Principles
| 原則 | 說明 |
|------|------|
| **10 秒法則** | 核心操作必須在 10 秒內完成 |
| **200ms 回應** | 任何操作有即時視覺回饋 |
| **一鍵可及** | 最常用功能一次點擊/按鍵即可 |
| **漸進揭露** | 進階功能隱藏,需要時才顯示 |
---
## Component Strategy
### Design System Components (Chakra UI v2)
**基礎組件(直接使用):**
- Button, IconButton, ButtonGroup
- Input, Select, Checkbox, Radio, Switch
- Card, Box, Flex, Grid, Stack
- Modal, Drawer, Popover, Tooltip
- Alert, Toast, Progress, Spinner
- Tabs, Breadcrumb, Menu
### Custom Components
#### 1. TaskCard (任務卡片)
| 項目 | 規格 |
|------|------|
| **用途** | 看板上的可拖曳任務卡片 |
| **內容** | 標題、標籤、負責人頭像、截止日期、優先級 |
| **狀態** | default, hover, dragging, selected, loading |
**KB 指南參考:**
- #28 Focus States → `focus:ring-2 focus:ring-blue-500`
- #29 Hover States → `hover:bg-gray-50 cursor-pointer`
- #30 Active States → `active:scale-[0.99]`
- #84 Truncation → 標題超長用 `line-clamp-2`
- #40 ARIA Labels → 拖曳需 `aria-grabbed` 屬性
#### 2. KanbanColumn (看板欄)
| 項目 | 規格 |
|------|------|
| **用途** | 任務狀態欄(待辦/進行中/完成) |
| **內容** | 欄標題、任務計數器、進度環、新增按鈕 |
| **狀態** | default, drop-target-active, empty |
**KB 指南參考:**
- #80 Empty States → 空欄顯示「尚無任務,拖曳或點擊新增」
- #10 Loading States → 載入中顯示 Skeleton
#### 3. CommandPalette (快捷指令面板)
| 項目 | 規格 |
|------|------|
| **用途** | Cmd+K 全域搜尋/快捷指令 |
| **內容** | 搜尋框、分類結果、最近項目 |
| **狀態** | open, searching, results, empty |
**KB 指南參考:**
- #41 Keyboard Navigation → 完整鍵盤支援(↑↓ Enter Esc
- #28 Focus States → 清晰的選項焦點指示
- #89 Search Autocomplete → 即時顯示搜尋建議
#### 4. ProgressRing (進度環)
| 項目 | 規格 |
|------|------|
| **用途** | 視覺化任務完成進度 |
| **內容** | 百分比數字、動畫環 |
| **尺寸** | sm(24px), md(32px), lg(48px) |
**KB 指南參考:**
- #8 Duration Timing → 動畫 200ms
- #9 Reduced Motion → 尊重 `prefers-reduced-motion`
### Component Implementation Strategy
**通用狀態規範(基於 KB 指南):**
```css
/* 所有互動組件必須實作 */
.interactive {
/* #28 Focus States */
focus:ring-2 focus:ring-blue-500 focus:ring-offset-2
/* #29 Hover States */
hover:bg-gray-50 transition-colors
/* #30 Active States */
active:scale-[0.98]
/* #22 Touch Target */
min-h-[44px] min-w-[44px]
}
/* #8 Animation Timing */
transition: all 200ms ease-out;
/* #9 Reduced Motion */
@media (prefers-reduced-motion: reduce) {
transition: none;
}
```
### Implementation Roadmap
| 階段 | 組件 | 優先級 | 依賴 |
|------|------|--------|------|
| **Phase 1** | TaskCard | 🔴 P0 | @dnd-kit |
| **Phase 1** | KanbanColumn | 🔴 P0 | TaskCard |
| **Phase 2** | CommandPalette | 🟡 P1 | - |
| **Phase 2** | ProgressRing | 🟡 P1 | - |
| **Phase 3** | ActivityFeed | 🟢 P2 | - |
| **Phase 3** | UserAvatar | 🟢 P2 | - |
---
## UX Consistency Patterns
**KB 指南參考:** #61 Submit Feedback, #4 Back Button, #43 Form Labels
### Button Hierarchy
| 層級 | 用途 | 樣式 | 範例 |
|------|------|------|------|
| **Primary** | 主要行動 | 填充藍色 `#2563EB` + 白字 | 儲存、建立、提交 |
| **Secondary** | 次要行動 | 邊框藍色 + 藍字 | 取消、返回 |
| **Ghost** | 低調行動 | 透明背景 + 灰字 | 更多選項、展開 |
| **Danger** | 破壞性行動 | 紅色 `#EF4444` | 刪除(需確認對話框) |
**按鈕狀態:**
- Default → Hover (`brightness(1.1)`) → Active (`scale(0.98)`) → Disabled (`opacity-50`)
### Feedback Patterns
| 類型 | 觸發 | 呈現 | 持續時間 |
|------|------|------|----------|
| **Success** | 操作完成 | Toast 右上角 ✓ | 3 秒自動消失 |
| **Error** | 操作失敗 | 紅色 Alert + 說明 | 用戶關閉 |
| **Warning** | 需要注意 | 黃色 Alert | 用戶確認 |
| **Info** | 提示資訊 | 藍色 Toast | 5 秒自動消失 |
| **Loading** | 等待中 | Spinner 或 Skeleton | 完成後消失 |
**回饋規則:**
- 小於 300ms 的操作:無需顯示 loading
- 300ms-1s顯示 spinner
- 大於 1s顯示 skeleton 或進度條
### Form Patterns
**輸入欄位規範:**
- ✅ 每個 input 都有 `<label>` 關聯
- ✅ 必填欄位標示 `*`
- ✅ 即時驗證onBlur
- ✅ 錯誤訊息在欄位下方(紅色)
- ✅ 送出按鈕顯示 loading 狀態
- ✅ 成功後顯示確認訊息 + 自動跳轉
**表單佈局:**
```
[Label] * (required)
[Input Field ]
[Error message in red]
```
### Navigation Patterns
**一致性規則:**
- ✅ 側邊欄高亮當前頁面
- ✅ 麵包屑顯示完整路徑
- ✅ 支援瀏覽器返回鍵(`history.pushState`
- ✅ URL 反映當前狀態(可分享)
- ✅ Cmd+K 開啟搜尋面板
### Modal & Overlay Patterns
| 類型 | 用途 | 關閉方式 |
|------|------|----------|
| **Modal** | 需要用戶決策 | 按鈕、Esc、點擊外部 |
| **Drawer** | 側邊詳情面板 | 按鈕、Esc、點擊外部 |
| **Popover** | 短暫資訊 | 點擊外部、Esc |
| **Toast** | 通知訊息 | 自動消失、點擊關閉 |
---
<!-- UX design content will be appended sequentially through collaborative workflow steps -->
## Responsive Design & Accessibility
### Responsive Strategy
**平台優先級:**
| 優先級 | 平台 | 螢幕尺寸 | 說明 |
|--------|------|----------|------|
| 🔴 P0 | **Desktop** | 1024px+ | 主要使用環境 |
| 🟡 P1 | Tablet | 768-1023px | 次要環境 |
| 🟢 P2 | Mobile | 320-767px | 輕量查看 |
**設計策略:** Desktop-first根據 PRD 主要為桌面辦公室環境)
### Breakpoint Strategy
| 名稱 | 尺寸 | 佈局變化 |
|------|------|----------|
| `mobile` | 320px+ | 單欄佈局、底部導航、隱藏側邊欄 |
| `tablet` | 768px+ | 可收合側邊欄、簡化看板 |
| `desktop` | 1024px+ | 側邊欄常駐、多欄看板、詳情面板 |
| `wide` | 1440px+ | 更寬內容區域、三欄佈局 |
**Chakra UI 對應:**
```javascript
const breakpoints = {
sm: '320px', // mobile
md: '768px', // tablet
lg: '1024px', // desktop
xl: '1440px', // wide
}
```
### Accessibility Strategy
**合規等級:** WCAG 2.1 Level AA ✅
| 類別 | 要求 | 實施方式 |
|------|------|----------|
| **色彩對比** | 4.5:1正常文字、3:1大文字 | 已驗證配色符合標準 |
| **觸控區域** | 最小 44x44px | 所有按鈕和互動元素 |
| **鍵盤導航** | 完整 Tab 支援 | Chakra UI 內建 |
| **焦點指示** | 可見焦點環 | `focus:ring-2 focus:ring-blue-500` |
| **Screen Reader** | ARIA 標籤 | 所有圖標按鈕 |
| **動態效果** | 尊重偏好 | `prefers-reduced-motion` |
| **Skip Links** | 跳過導航 | 首個焦點元素 |
### Testing Strategy
**自動化測試:**
- axe-core — 掃描 a11y 問題
- Lighthouse — 效能和無障礙評分
- ESLint jsx-a11y — 程式碼檢查
**手動測試:**
- ✅ 純鍵盤操作測試
- ✅ VoiceOver (macOS) / NVDA (Windows) 螢幕閱讀器
- ✅ 高對比模式
- ✅ 200% 縮放
**裝置測試:**
- Chrome DevTools 裝置模擬
- 實機iPhone、Android 手機
### Implementation Guidelines
**響應式開發:**
```jsx
// Chakra UI 響應式語法
<Box
w={{ base: '100%', md: '50%', lg: '33%' }}
display={{ base: 'none', lg: 'block' }}
/>
```
**無障礙開發:**
```jsx
// 圖標按鈕必須有 aria-label
<IconButton
aria-label="關閉選單"
icon={<CloseIcon />}
/>
// 尊重動態偏好
const prefersReducedMotion = usePrefersReducedMotion()
```
---
<!-- End of UX Design Specification -->