Files
website-enchun-mgr/specs/001-users-pukpuk-dev/ux-story-1-10-portfolio-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

272 lines
5.0 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-10 Portfolio - UX Pixel-Perfect Specifications
> **UX Expert Review Document**
> 參考來源: `research/www.enchun.tw/website-portfolio.html`
> 設計系統: `apps/frontend/src/styles/theme.css`
> 目標視覺保真度: 95%+
---
## 🎨 Design Token 驗證
### 色彩系統
| 用途 | 變數名稱 | Hex Color | CSS Variable | 驗證狀態 |
|------|----------|-----------|--------------|----------|
| 主品牌色 | Enchun Blue | `#23608c` | `--color-enchunblue` | ✅ 已定義 |
| 深品牌色 | Enchun Blue Dark | `#3083bf` | `--color-enchunblue-dark` | ✅ 已定義 |
| 深灰文字 | Tarawera | `#2d3748` | `--color-tarawera` | ✅ 已定義 |
---
## 📐 Section 詳細規格
### 1. Portfolio 列表頁
#### 頁面路徑: `/website-portfolio`
#### 標題區塊
```css
.portfolio-header {
text-align: center;
padding: 60px 20px;
}
.portfolio-title {
font-size: 2.5rem;
font-weight: 700;
color: var(--color-enchunblue);
margin-bottom: 8px;
}
.portfolio-subtitle {
font-size: 1.125rem;
color: var(--color-gray-700);
}
.divider-line {
width: 100px;
height: 2px;
background-color: var(--color-enchunblue);
margin: 24px auto;
}
```
#### 作品卡片網格
```css
.portfolio-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
max-width: 1200px;
margin: 0 auto;
padding: 0 20px 60px;
}
@media (max-width: 767px) {
.portfolio-grid {
grid-template-columns: 1fr;
gap: 16px;
}
}
```
---
### 2. 作品卡片組件
#### 組件檔案: `components/PortfolioCard.astro`
```css
.portfolio-card {
background-color: white;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
transition: all 300ms ease-in-out;
display: block;
text-decoration: none;
color: inherit;
}
.portfolio-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}
.portfolio-image-wrapper {
position: relative;
width: 100%;
padding-bottom: 56.25%; /* 16:9 */
overflow: hidden;
}
.portfolio-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 300ms ease-in-out;
}
.portfolio-card:hover .portfolio-image {
transform: scale(1.05);
}
.portfolio-content {
padding: 24px;
}
.portfolio-title {
font-size: 1.25rem;
font-weight: 600;
color: var(--color-tarawera);
margin-bottom: 8px;
}
.portfolio-description {
font-size: 0.875rem;
color: var(--color-gray-600);
line-height: 1.5;
margin-bottom: 16px;
}
.portfolio-tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.portfolio-tag {
padding: 4px 10px;
background-color: var(--color-gray-100);
border-radius: 16px;
font-size: 0.75rem;
font-weight: 500;
color: var(--color-gray-700);
}
```
---
### 3. 作品詳情頁
#### 頁面路徑: `/website-portfolio/[slug]`
```css
.portfolio-detail {
max-width: 1000px;
margin: 0 auto;
padding: 60px 20px;
}
.portfolio-detail-header {
margin-bottom: 40px;
}
.portfolio-detail-title {
font-size: 2.5rem;
font-weight: 700;
color: var(--color-tarawera);
margin-bottom: 16px;
}
.portfolio-detail-meta {
display: flex;
gap: 24px;
font-size: 0.875rem;
color: var(--color-gray-600);
}
.portfolio-detail-image {
width: 100%;
border-radius: 12px;
margin-bottom: 40px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}
.portfolio-detail-description {
font-size: 1.125rem;
line-height: 1.8;
color: var(--color-text-primary);
}
.portfolio-detail-description p {
margin-bottom: 20px;
}
```
---
## 📱 響應式斷點總結
| Breakpoint | Grid Columns | 字體大小 |
|------------|--------------|----------|
| Desktop (>991px) | 2x2 | 19px |
| Tablet (767px) | 2x1 | 19px |
| Mobile (≤767px) | 1x1 | 16px |
| Small Mobile (≤479px) | 1x1 | 13px |
---
## 🎯 互動效果規格
### Hover 效果
```css
.portfolio-card {
transition: all 300ms ease-in-out;
}
.portfolio-card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
}
.portfolio-image {
transition: transform 300ms ease-in-out;
}
.portfolio-card:hover .portfolio-image {
transform: scale(1.05);
}
```
---
## 🏗️ 組件實現清單
### ✅ 已實現
- [x] `website-portfolio.astro` - 基礎框架
- [x] `webdesign-profolio/[slug].astro` - 詳情頁框架
### ⏳ 需新增/修改
- [ ] `PortfolioCard.astro` - 作品卡片組件
- [ ] 更新列表頁使用網格佈局
- [ ] 更新詳情頁樣式
---
## 📋 驗收標準
### 視覺保真度檢查
- [ ] 標題區塊「案例分享」+ 雙線裝飾
- [ ] 2x2 網格佈局(桌面端)
- [ ] 作品卡片 Hover 效果
- [ ] 標籤浮動效果
### 響應式檢查
- [ ] Desktop: 2x2 網格
- [ ] Tablet: 2x1 網格
- [ ] Mobile: 1x1 網格
### 功能檢查
- [ ] 外部連結新分頁打開
- [ ] 圖片 WebP 格式
- [ ] 圖片懶加載
---
*此文件由 UX Expert 創建最後更新2026-02-10*