Files
website-enchun-mgr/specs/001-users-pukpuk-dev/ux-story-1-5-homepage-spec.md
pkupuk e9897388dc docs: separate documentation and specs into initial commit
Establish baseline for project documentation including BMAD specs, PRD, and system architecture notes.
2026-02-11 11:49:49 +08:00

582 lines
12 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.

# 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)*