docs: separate documentation and specs into initial commit
Establish baseline for project documentation including BMAD specs, PRD, and system architecture notes.
This commit is contained in:
581
specs/001-users-pukpuk-dev/ux-story-1-5-homepage-spec.md
Normal file
581
specs/001-users-pukpuk-dev/ux-story-1-5-homepage-spec.md
Normal file
@@ -0,0 +1,581 @@
|
||||
# Story 1-5 Homepage - UX Pixel-Perfect Specifications
|
||||
|
||||
> **UX Expert Review Document**
|
||||
> 參考來源: `research/www.enchun.tw/index.html` (Webflow Export)
|
||||
> 設計系統: `apps/frontend/src/styles/theme.css`
|
||||
> 目標視覺保真度: 100%
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Design Token 驗證
|
||||
|
||||
### 色彩系統 (與 Webflow 原始設計一致)
|
||||
|
||||
| 用途 | 變數名稱 | Hex Color | CSS Variable | 驗證狀態 |
|
||||
|------|----------|-----------|--------------|----------|
|
||||
| 主品牌色 | Enchun Blue | `#23608c` | `--color-enchunblue` | ✅ 已定義 |
|
||||
| 深品牌色 | Enchun Blue Dark | `#3083bf` | `--color-enchunblue-dark` | ✅ 已定義 |
|
||||
| 淺藍色 | Tropical Blue | `#c7e4fa` | `--color-tropical-blue` | ✅ 已定義 |
|
||||
| 頁腳文字 | St. Tropaz | `#5d7285` | `--color-st-tropaz` | ✅ 已定義 |
|
||||
| CTA 強調 | Amber | `#f6c456` | `--color-amber` | ✅ 已定義 |
|
||||
| 深色文字 | Tarawera | `#2d3748` | `--color-tarawera` | ✅ 已定義 |
|
||||
| 通知紅 | Notification Red | `#d84038` | --color-notification-red | ⚠️ 需新增 |
|
||||
| 深藍色 | Dark Blue | `#062841` | --color-dark-blue | ⚠️ 需新增 |
|
||||
| 中藍色 | Medium Blue | `#67aee1` | --color-medium-blue | ⚠️ 需新增 |
|
||||
| 超淺灰 | Grey 6 | `#f2f2f2` | `--color-gray-100` | ✅ 已定義 |
|
||||
| 淺灰 | Grey 5 | `#e0e0e0` | --color-grey5 | ⚠️ 需新增 |
|
||||
| 中灰 | Grey 3 | `#828282` | `--color-gray-700` | ✅ 已定義 |
|
||||
| 深灰 | Grey 2 | `#4f4f4f` | `--color-gray-950` | ✅ 已定義 |
|
||||
|
||||
### 新增設計 Token 需求
|
||||
|
||||
請在 `theme.css` 中新增以下變數:
|
||||
|
||||
```css
|
||||
/* Webflow 額外色彩 */
|
||||
--color-notification-red: #d84038;
|
||||
--color-dark-blue: #062841;
|
||||
--color-medium-blue: #67aee1;
|
||||
--color-grey5: #e0e0e0;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📐 Section 詳細規格
|
||||
|
||||
### 1. Hero Section
|
||||
|
||||
#### 組件檔案: `VideoHero.astro` (已存在,需調整)
|
||||
|
||||
#### 容器規格
|
||||
```css
|
||||
.centered-container-home {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
max-height: 88.5vh; /* Webflow 原始值 */
|
||||
padding-top: 110px; /* Desktop */
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
```
|
||||
|
||||
#### 背景影片
|
||||
```css
|
||||
.background-video {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
```
|
||||
- **Autoplay**: `true`
|
||||
- **Loop**: `true`
|
||||
- **Muted**: `true`
|
||||
- **Playsinline**: `true`
|
||||
|
||||
#### 漸層遮罩
|
||||
```css
|
||||
.hero-overlay-home {
|
||||
background: linear-gradient(
|
||||
to right,
|
||||
rgba(0, 0, 0, 0.8) 0%,
|
||||
rgba(0, 0, 0, 0) 100%
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
#### Logo
|
||||
```css
|
||||
.hero_logo {
|
||||
width: 135px; /* Desktop */
|
||||
padding-top: 33px;
|
||||
}
|
||||
```
|
||||
|
||||
#### 標題文字
|
||||
```css
|
||||
.hero_title_head {
|
||||
font-size: 3.39em; /* Desktop, ~64px base 19px */
|
||||
line-height: 1.2;
|
||||
text-align: left;
|
||||
color: #ffffff;
|
||||
font-family: "Noto Sans TC", sans-serif;
|
||||
}
|
||||
|
||||
.hero_sub_paragraph-home {
|
||||
font-size: 1.56em; /* Desktop, ~30px */
|
||||
font-weight: 300;
|
||||
line-height: 1.2;
|
||||
text-align: left;
|
||||
color: #f2f2f2; /* var(--grey6) */
|
||||
font-family: "Quicksand", sans-serif;
|
||||
}
|
||||
```
|
||||
|
||||
#### 響應式調整
|
||||
|
||||
| Breakpoint | 標題字體大小 | 副標題字體大小 | Padding |
|
||||
|------------|--------------|----------------|---------|
|
||||
| Desktop (≥992px) | 3.39em (64px) | 1.56em (30px) | 110px/100px |
|
||||
| Tablet (≤991px) | 2.45em (47px) | 1.15em (22px) | 0/0 |
|
||||
| Mobile (≤767px) | 7vw | 3.4vw | 0/0 |
|
||||
|
||||
#### ❌ 當前實現問題
|
||||
1. 當前字體大小使用 `text-6xl`,與 Webflow 的 `3.39em` 不符
|
||||
2. 漸層遮罩方向需要確認
|
||||
3. Logo 尺寸需要調整為 135px
|
||||
|
||||
---
|
||||
|
||||
### 2. 煩惱點區塊 (Painpoint Section)
|
||||
|
||||
#### 新組件: `PainpointSection.astro`
|
||||
|
||||
#### 容器規格
|
||||
```css
|
||||
.section_painpoint {
|
||||
height: 80vh;
|
||||
max-height: 80vh;
|
||||
}
|
||||
```
|
||||
|
||||
#### 標題區塊
|
||||
```css
|
||||
.section_header_w_line {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header_subtitle_head {
|
||||
font-size: 1.8rem; /* ~34px */
|
||||
text-align: center;
|
||||
color: var(--color-dark-blue); /* #062841 */
|
||||
}
|
||||
|
||||
.divider_line {
|
||||
background-color: var(--color-enchunblue);
|
||||
height: 1px;
|
||||
width: 60px;
|
||||
margin: 16px auto;
|
||||
}
|
||||
```
|
||||
|
||||
#### Tabs 系統
|
||||
```css
|
||||
.painpoint_tabs {
|
||||
padding-top: 32px;
|
||||
padding-bottom: 70px;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr; /* Desktop: 2 columns */
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
.painpoint_text {
|
||||
font-size: 2.08em; /* ~40px */
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
color: var(--color-dark-blue);
|
||||
font-family: "Noto Sans TC", sans-serif;
|
||||
cursor: pointer;
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.painpoint_text:hover {
|
||||
text-shadow: 7px 4px 13px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.tab_panel_frame {
|
||||
border: 1px solid var(--color-enchunblue);
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
top: -47px;
|
||||
padding: 32px;
|
||||
}
|
||||
|
||||
.painpoint_icon {
|
||||
height: 110px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.icon_holder {
|
||||
width: 130px;
|
||||
height: 115px;
|
||||
background-color: var(--color-gray-100); /* #f2f2f2 */
|
||||
border-radius: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
```
|
||||
|
||||
#### 響應式調整
|
||||
|
||||
| Breakpoint | Grid | 字體調整 |
|
||||
|------------|------|----------|
|
||||
| Desktop (≥992px) | 2 columns | 100% |
|
||||
| Tablet (≤991px) | 1 column | 85% |
|
||||
| Mobile (≤767px) | 1 column | 70% |
|
||||
|
||||
---
|
||||
|
||||
### 3. 數據統計區塊 (Statistics Section)
|
||||
|
||||
#### 新組件: `StatisticsSection.astro`
|
||||
|
||||
#### 容器規格
|
||||
```css
|
||||
.section_digi_running {
|
||||
padding: var(--spacing-3xl) 0; /* 64px vertical */
|
||||
}
|
||||
|
||||
.digi_holder_grid {
|
||||
display: grid;
|
||||
grid-column-gap: 85px;
|
||||
grid-row-gap: 16px;
|
||||
grid-template-columns: repeat(4, max-content);
|
||||
justify-content: center;
|
||||
max-width: 1150px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
```
|
||||
|
||||
#### 數字顯示
|
||||
```css
|
||||
.text_no {
|
||||
font-size: 72px;
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
color: var(--color-amber); /* #f6c456 */
|
||||
/* Animation: countup, duration 3s */
|
||||
}
|
||||
|
||||
.text_percentage {
|
||||
font-size: 36px;
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
color: var(--color-gray-700); /* #828282 */
|
||||
}
|
||||
|
||||
.text_description {
|
||||
font-size: 30px;
|
||||
font-weight: 100;
|
||||
line-height: 1.2;
|
||||
color: var(--color-dark-blue); /* #062841 */
|
||||
}
|
||||
```
|
||||
|
||||
#### 動畫規格
|
||||
- **Countup 動畫**: 持續時間 3 秒
|
||||
- **Easing**: `ease-out`
|
||||
|
||||
#### 響應式調整
|
||||
|
||||
| Breakpoint | Grid Columns | Gap |
|
||||
|------------|--------------|-----|
|
||||
| Desktop (≥992px) | 4 columns | 85px |
|
||||
| Tablet (≤991px) | 2 columns | 40px |
|
||||
| Mobile (≤767px) | 1 column | 24px |
|
||||
|
||||
---
|
||||
|
||||
### 4. 客戶案例區塊 (Client Cases)
|
||||
|
||||
#### 新組件: `ClientCasesSection.astro`
|
||||
|
||||
#### 容器規格
|
||||
```css
|
||||
.section_client-case {
|
||||
padding: var(--spacing-3xl) 0;
|
||||
}
|
||||
|
||||
.client_case_sub {
|
||||
font-size: 24px;
|
||||
font-weight: 300;
|
||||
line-height: 1.1;
|
||||
color: var(--color-enchunblue); /* #23608c */
|
||||
margin-top: 55px;
|
||||
text-align: center;
|
||||
}
|
||||
```
|
||||
|
||||
#### 輪播設定
|
||||
```css
|
||||
.case_slider_wrapper {
|
||||
height: 77vh;
|
||||
/* Autoplay: 2500ms */
|
||||
/* Animation: slide */
|
||||
/* Infinite: true */
|
||||
}
|
||||
|
||||
.case_content_grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-column-gap: 55px;
|
||||
grid-row-gap: 55px;
|
||||
}
|
||||
```
|
||||
|
||||
#### 案例卡片
|
||||
```css
|
||||
.case_slide_image {
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
aspect-ratio: 16/9;
|
||||
}
|
||||
|
||||
.case_heading {
|
||||
font-size: 1.7em;
|
||||
color: var(--color-dark-blue);
|
||||
font-family: "Noto Sans TC", sans-serif;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.case_job_title {
|
||||
font-size: 18px;
|
||||
color: var(--color-enchunblue-dark); /* #3083bf */
|
||||
font-weight: 100;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.case_review {
|
||||
font-size: 18px;
|
||||
color: var(--color-gray-700);
|
||||
font-weight: 100;
|
||||
line-height: 1.6;
|
||||
}
|
||||
```
|
||||
|
||||
#### 響應式調整
|
||||
|
||||
| Breakpoint | Grid | Height |
|
||||
|------------|------|--------|
|
||||
| Desktop (≥992px) | 2 columns | 77vh |
|
||||
| Tablet (≤991px) | 1 column | auto |
|
||||
| Mobile (≤767px) | 1 column | 59vh |
|
||||
|
||||
---
|
||||
|
||||
### 5. 行動呼籲區塊 (CTA Section)
|
||||
|
||||
#### 新組件: `CTASection.astro`
|
||||
|
||||
#### 容器規格
|
||||
```css
|
||||
.section_call4action {
|
||||
padding: 105px 0 126px 0;
|
||||
}
|
||||
|
||||
.c4a_grid {
|
||||
display: grid;
|
||||
grid-column-gap: 60px;
|
||||
grid-template-columns: max-content max-content;
|
||||
place-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
```
|
||||
|
||||
#### 標題
|
||||
```css
|
||||
.c4a_heading {
|
||||
color: var(--color-dark-blue);
|
||||
font-size: 1.88em;
|
||||
font-weight: 500;
|
||||
line-height: 1.1;
|
||||
}
|
||||
```
|
||||
|
||||
#### 按鈕
|
||||
```css
|
||||
.c4a_button {
|
||||
background-color: var(--color-notification-red); /* #d84038 */
|
||||
border-radius: 15px;
|
||||
padding: 18px 24px;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all var(--transition-base);
|
||||
}
|
||||
|
||||
.c4a_button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.c4a_button-text {
|
||||
color: #f2f2f2;
|
||||
font-size: 1.56em;
|
||||
line-height: 1.1;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
}
|
||||
```
|
||||
|
||||
#### 響應式調整
|
||||
|
||||
| Breakpoint | Grid | Button Width |
|
||||
|------------|------|--------------|
|
||||
| Desktop (≥992px) | 2 columns | auto |
|
||||
| Tablet (≤991px) | 1 column | auto |
|
||||
| Mobile (≤767px) | 1 column | 160px (min-width) |
|
||||
|
||||
---
|
||||
|
||||
## 📱 響應式斷點總結
|
||||
|
||||
### 主要斷點
|
||||
```css
|
||||
/* Webflow 原始斷點 */
|
||||
@media (min-width: 1440px) { /* Desktop Large */ }
|
||||
@media (max-width: 991px) { /* Tablet */ }
|
||||
@media (max-width: 767px) { /* Mobile Landscape */ }
|
||||
@media (max-width: 479px) { /* Mobile Portrait */ }
|
||||
```
|
||||
|
||||
### HTML 字體大小調整
|
||||
```css
|
||||
/* Desktop default */
|
||||
html { font-size: 19px; }
|
||||
|
||||
/* Tablet */
|
||||
@media (max-width: 991px) {
|
||||
html { font-size: 19px; }
|
||||
}
|
||||
|
||||
/* Mobile Landscape */
|
||||
@media (max-width: 767px) {
|
||||
html { font-size: 16px; }
|
||||
}
|
||||
|
||||
/* Mobile Portrait */
|
||||
@media (max-width: 479px) {
|
||||
html { font-size: 13px; }
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 互動效果規格
|
||||
|
||||
### Hover 效果
|
||||
```css
|
||||
/* Tab 文字 Hover */
|
||||
.painpoint_text:hover {
|
||||
text-shadow: 7px 4px 13px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/* 導航連結 Hover */
|
||||
.nav-link:hover {
|
||||
background-color: var(--color-dark-blue);
|
||||
}
|
||||
|
||||
/* 連結 Hover */
|
||||
a:hover {
|
||||
opacity: 0.6;
|
||||
}
|
||||
a:active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* 按鈕 Hover */
|
||||
.c4a_button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
```
|
||||
|
||||
### 過渡動畫
|
||||
```css
|
||||
/* Tabs */
|
||||
--transition-tabs: ease-in-out-cubic;
|
||||
|
||||
/* 輪播 */
|
||||
--transition-slider: ease-in-out-quint;
|
||||
|
||||
/* 數字 Countup */
|
||||
--animation-countup: 3s ease-out;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 組件實現清單
|
||||
|
||||
### ✅ 已實現
|
||||
- [x] `VideoHero.astro` - 需調整字體大小和間距
|
||||
- [x] `Header.astro` - 已完成
|
||||
- [x] `Footer.astro` - 已完成
|
||||
|
||||
### ⏳ 需新增/修改
|
||||
- [ ] `VideoHero.astro` - 調整字體大小、漸層遮罩
|
||||
- [ ] `PainpointSection.astro` - 新增組件
|
||||
- [ ] `StatisticsSection.astro` - 新增組件,含 countup 動畫
|
||||
- [ ] `ClientCasesSection.astro` - 新增組件,含輪播功能
|
||||
- [ ] `CTASection.astro` - 新增組件
|
||||
|
||||
---
|
||||
|
||||
## 📋 驗收標準 (Acceptance Criteria)
|
||||
|
||||
### 視覺保真度檢查
|
||||
- [ ] 所有顏色與 Webflow 原始設計 100% 一致
|
||||
- [ ] 所有字體大小(含響應式)與規格一致
|
||||
- [ ] 所有間距(padding, margin, gap)與規格一致
|
||||
- [ ] 所有圓角(border-radius)與規格一致
|
||||
- [ ] 所有陰影(box-shadow)與規格一致
|
||||
|
||||
### 響應式檢查
|
||||
- [ ] Desktop (≥1440px) 佈局正確
|
||||
- [ ] Tablet (≤991px) 佈局正確
|
||||
- [ ] Mobile (≤767px) 佈局正確
|
||||
- [ ] Mobile Portrait (≤479px) 佈局正確
|
||||
|
||||
### 互動效果檢查
|
||||
- [ ] Hover 效果流暢
|
||||
- [ ] 動畫過渡自然
|
||||
- [ ] 輪播功能正常
|
||||
- [ ] Countup 動畫正常
|
||||
|
||||
### 效能檢查
|
||||
- [ ] Lighthouse Performance ≥ 90
|
||||
- [ ] 影片載入優化(WebM + MP4 fallback)
|
||||
- [ ] 圖片 lazy loading
|
||||
- [ ] CSS/JS minification
|
||||
|
||||
---
|
||||
|
||||
## 🔄 實現順序建議
|
||||
|
||||
1. **階段 1: 設計系統更新**
|
||||
- 新增缺失的 CSS 變數到 `theme.css`
|
||||
- 更新響應式字體大小斷點
|
||||
|
||||
2. **階段 2: Hero Section 調整**
|
||||
- 修改 `VideoHero.astro` 字體大小
|
||||
- 調整漸層遮罩方向
|
||||
- 調整 Logo 尺寸
|
||||
|
||||
3. **階段 3: 新增 Sections**
|
||||
- `PainpointSection.astro`
|
||||
- `StatisticsSection.astro`
|
||||
- `ClientCasesSection.astro`
|
||||
- `CTASection.astro`
|
||||
|
||||
4. **階段 4: 響應式測試**
|
||||
- 測試所有斷點
|
||||
- 調整移動端佈局
|
||||
|
||||
5. **階段 5: 動畫與互動**
|
||||
- Countup 動畫
|
||||
- 輪播功能
|
||||
- Hover 效果
|
||||
|
||||
6. **階段 6: 效能優化**
|
||||
- 影片壓縮
|
||||
- 圖片優化
|
||||
- Code splitting
|
||||
|
||||
---
|
||||
|
||||
*此文件由 UX Expert 創建,最後更新:2026-02-10*
|
||||
*參考來源:Webflow Export HTML (7.4MB)*
|
||||
Reference in New Issue
Block a user