Include supplementary documentation, research notes on Lexical/UX, and setup guides.
350 lines
12 KiB
Markdown
350 lines
12 KiB
Markdown
# Design Tokens - 恩群數位行銷 (Enchun Digital Marketing)
|
|
|
|
**提取日期:** 2026-01-31
|
|
**來源:** Webflow CMS CSS (`enchun.webflow.shared.557e15b5a.css`)
|
|
**用途:** Payload CMS + Astro 遷移專案
|
|
|
|
---
|
|
|
|
## 🎨 Color Palette (色彩系統)
|
|
|
|
### Primary Colors (主要色)
|
|
|
|
| Token | Hex | Usage | Tailwind Class |
|
|
|-------|-----|-------|--------------|
|
|
| `--color-primary` | **#3898EC** | Primary blue (主要按鈕、連結) | `bg-[#3898EC]` |
|
|
| `--color-primary-dark` | **#0082F3** | Primary blue dark (深藍色) | `bg-[#0082F3]` |
|
|
| `--color-primary-light` | **#67AEE1** | Primary blue light (淡藍色) | `bg-[#67AEE1]` |
|
|
| `--color-primary-hover` | **#2895F7** | Primary blue hover | `bg-[#2895F7]` |
|
|
|
|
### Secondary Colors (次要色)
|
|
|
|
| Token | Hex | Usage | Tailwind Class |
|
|
|-------|-----|-------|--------------|
|
|
| `--color-secondary` | **#F39C12** | Secondary orange (次要橙) | `bg-[#F39C12]` |
|
|
| `--color-accent` | **#D84038** | Accent orange (強調橙) | `bg-[#D84038]` |
|
|
| `--color-accent-light` | **#F6C456** | Accent light (粉紅) | `bg-[#F6C456]` |
|
|
| `--color-accent-dark` | **#EA384C** | Accent dark (深紅) | `bg-[#EA384C]` |
|
|
| `--color-red` | **#CF0606** | Alert red (警告紅) | `bg-[#CF0606]` |
|
|
| `--color-pink` | **#BB8282** | Pink (粉紅) | `bg-[#BB8282]` |
|
|
| `--color-rose` | **#C48383** | Rose (玫瑰) | `bg-[#C48383]` |
|
|
|
|
### Neutral Colors (中性色)
|
|
|
|
| Token | Hex | Usage | Tailwind Class |
|
|
|-------|-----|-------|--------------|
|
|
| `--color-white` | **#FFFFFF** | White (白色背景) | `bg-[#FFFFFF]` |
|
|
| `--color-black` | **#000000** | Black (黑色) | `bg-[#000000]` |
|
|
| `--color-gray-50` | **#FAFAFA** | Light gray (淺灰背景) | `bg-[#FAFAFA]` |
|
|
| `--color-gray-100` | **#F5F5F5** | Light gray 1 | `bg-[#F5F5F5]` |
|
|
| `--color-gray-200` | **#F3F3F3** | Light gray 2 | `bg-[#F3F3F3]` |
|
|
| `--color-gray-300` | **#EEEEEE** | Light gray 3 | `bg-[#EEEEEE]` |
|
|
| `--color-gray-400` | **#DDDDDD** | Light gray 4 | `bg-[#DDDDDD]` |
|
|
| `--color-gray-500` | **#C8C8C8** | Mid gray (中灰) | `bg-[#C8C8C8]` |
|
|
| `--color-gray-600` | **#999999** | Medium gray | `text-[#999999]` |
|
|
| `--color-gray-700` | **#828282** | Dark gray 1 | `text-[#828282]` |
|
|
| `--color-gray-800` | **#758696** | Dark gray 2 | `text-[#758696]` |
|
|
| `--color-gray-900` | **#5D6C7B** | Dark gray 3 | `text-[#5D6C7B]` |
|
|
| `--color-gray-950` | **#4F4F4F** | Dark gray 4 (深灰) | `text-[#4F4F4F]` |
|
|
|
|
### Text Colors (文字顏色)
|
|
|
|
| Token | Hex | Usage | Tailwind Class |
|
|
|-------|-----|-------|--------------|
|
|
| `--color-text-primary` | **#333333** | Primary text (主要文字) | `text-[#333333]` |
|
|
| `--color-text-secondary` | **#222222** | Secondary text (次要文字) | `text-[#222222]` |
|
|
| `color-text-muted` | **#999999** | Muted text (弱化文字) | `text-[#999999]` |
|
|
| `--color-text-light` | **#758696** | Light text (淺色文字) | `text-[#758696]` |
|
|
| `--color-text-inverse` | **#FFFFFF** | Inverse text (反白文字) | `text-[#FFFFFF]` |
|
|
|
|
### Dark Mode Colors (深色模式)
|
|
|
|
| Token | Hex | Usage |
|
|
|-------|-----|-------|
|
|
| `--color-dark-bg` | **#2226** | Dark background |
|
|
| `--color-dark-surface` | **#1A1A1A** | Dark surface |
|
|
|
|
### Special Colors (特殊色)
|
|
|
|
| Token | Hex | Usage | Tailwind Class |
|
|
|-------|-----|-------|--------------|
|
|
| `--color-link` | **#3083BF** | Link color (連結色) | `text-[#3083BF]` |
|
|
| `--color-link-hover` | **#23608C** | Link hover | `text-[#23608C]` |
|
|
| `--color-border` | **#E2E8F0** | Border (邊框) | `border-[#E2E8F0]` |
|
|
| `--color-divider` | **#DDDDDD` | Divider (分隔線) | `border-[#DDDDDD]` |
|
|
|
|
---
|
|
|
|
## 🔤 Typography (字體系統)
|
|
|
|
### Font Families (字體家族)
|
|
|
|
| Token | Value | Usage | Notes |
|
|
|-------|-------|-------|-------|
|
|
| `--font-family-sans` | **'Noto Sans TC', 'Quicksand', Arial, sans-serif** | Primary sans (主要無襯線) |繁體中文主要 |
|
|
| `--font-family-heading` | **'Noto Sans TC', 'Quicksand', Arial, sans-serif** | Headings (標題) | Noto Sans TC 優先 |
|
|
| `--font-family-accent` | **'Quicksand', 'Noto Sans TC', sans-serif** | Accent (強調) | 英文使用 Quicksand |
|
|
|
|
### Font Sizes (字體大小)
|
|
|
|
| Token | Value | Usage | Tailwind Class |
|
|
|-------|-------|-------|--------------|
|
|
| `--font-size-xs` | **0.75rem** | Extra small | `text-xs` |
|
|
| `--font-size-sm` | **0.875rem** | Small | `text-sm` |
|
|
| `--font-size-base` | **1rem** | Base (16px @ desktop) | `text-base` |
|
|
| `--font-size-lg` | **1.125rem** | Large | `text-lg` |
|
|
| `--font-size-xl` | **1.25rem** | Extra large | `text-xl` |
|
|
| `font-size-2xl` | **1.5rem** | 2X large | `text-2xl` |
|
|
| `font-size-3xl` | **1.875rem** | 3X large | `text-3xl` |
|
|
| `font-size-4xl` | **2.25rem** | 4X large | `text-4xl` |
|
|
| `font-size-5xl` | **3rem** | 5X large | `text-5xl` |
|
|
|
|
### Font Weights (字體粗細)
|
|
|
|
| Token | Value | Usage | Tailwind Class |
|
|
|-------|-------|-------|--------------|
|
|
| `--font-weight-light` | **300** | Light | `font-light` |
|
|
| `--font-weight-normal` | **400** | Normal | `font-normal` |
|
|
| `--font-weight-medium` | **500** | Medium | `font-medium` |
|
|
| `--font-weight-semibold` | **600** | Semibold | `font-semibold` |
|
|
| `--font-weight-bold` | **700** | Bold | `font-bold` |
|
|
|
|
### Line Heights (行高)
|
|
|
|
| Token | Value | Usage | Tailwind Class |
|
|
|-------|-------|-------|--------------|
|
|
| `--line-height-tight` | **1.25** | Tight | `leading-tight` |
|
|
| `--line-height-snug` | **1.375** | Snug | `leading-snug` |
|
|
| `--line-height-normal` | **1.5** | Normal | `leading-normal` |
|
|
| `line-height-relaxed` | **1.625** | Relaxed | `leading-relaxed` |
|
|
| `--line-height-loose` | **2** | Loose | `leading-loose` |
|
|
|
|
---
|
|
|
|
## 📏 Spacing (間距系統)
|
|
|
|
### Scale (Tailwind 間頭)
|
|
|
|
| Token | Rem | Px (@16px) | Usage | Tailwind Class |
|
|
|-------|-----|-------------|-------|--------------|
|
|
| `--spacing-0` | 0 | 0px | None | `p-0`, `m-0` |
|
|
| `--spacing-px` | 1px | 1px | Pixel | `p-px` |
|
|
| `--spacing-0.5` | 0.125rem | 2px | `p-0.5` |
|
|
| `--spacing-1` | 0.25rem | 4px | `p-1` |
|
|
| `--spacing-2` | 0.5rem | 8px | `p-2` |
|
|
| `--spacing-3` | 0.75rem | 12px | `p-3` |
|
|
| `--spacing-4` | 1rem | 16px | `p-4` |
|
|
| `--spacing-5` | 1.25rem | 20px | `p-5` |
|
|
| `--spacing-6` | 1.5rem | 24px | `p-6` |
|
|
| `--spacing-8` | 2rem | 32px | `p-8` |
|
|
| `spacing-10` | 2.5rem | 40px | `p-10` |
|
|
| `--spacing-12` | 3rem | 48px | `p-12` |
|
|
| `--spacing-16` | 4rem | 64px | `p-16` |
|
|
| `spacing-20` | 5rem | 80px | `p-20` |
|
|
| `spacing-24` | 6rem | 96px | `p-24` |
|
|
|
|
### Container Widths (容器寬度)
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--container-sm` | 640px | Small container |
|
|
| `--container-md` | 768px | Medium container |
|
|
| `--container-lg` | 1024px | Large container |
|
|
| `--container-xl` | 1280px | XL container |
|
|
| `--container-2xl` | 1536px | 2XL container |
|
|
|
|
---
|
|
|
|
## 📱 Breakpoints (斷點系統)
|
|
|
|
### Responsive Breakpoints (Webflow 原始值)
|
|
|
|
| Breakpoint | Max Width | Device | Font Size | Tailwind Config |
|
|
|-----------|-----------|--------|-----------|----------------|
|
|
| `--breakpoint-desktop` | None | Desktop (default) | 19px base | `lg` (1024px+) |
|
|
| `--breakpoint-tablet` | **991px** | Tablet | 19px base | `md` (768px+) |
|
|
| `--breakpoint-mobile` | **767px** | Mobile | 16px base | `sm` (640px+) |
|
|
| `--breakpoint-mobile-small` | **479px** | Small mobile | 13px base | `xs` (480px+) |
|
|
|
|
**Tailwind CSS v4 配置:**
|
|
|
|
```javascript
|
|
// tailwind.config.mjs
|
|
export default {
|
|
theme: {
|
|
extend: {
|
|
screens: {
|
|
'xs': '480px', // Small mobile (< 479px)
|
|
'sm': '640px', // Mobile landscape (480px - 767px)
|
|
'md': '768px', // Tablet (768px - 991px)
|
|
'lg': '1024px', // Desktop (992px+)
|
|
'xl': '1280px', // Large desktop
|
|
'2xl': '1536px', // Extra large
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Webflow HTML 響體大小調整:**
|
|
```css
|
|
@media (max-width: 991px) { html { font-size: 19px; } }
|
|
@media (max-width: 767px) { html { font-size: 16px; } }
|
|
@media (max-width: 479px) { html { font-size: 13px; } }
|
|
```
|
|
|
|
---
|
|
|
|
## 🔲 Border Radius (圓角)
|
|
|
|
| Token | Value | Usage | Tailwind Class |
|
|
|-------|-------|-------|--------------|
|
|
| `--radius-none` | 0 | No radius | `rounded-none` |
|
|
| `--radius-sm` | 0.125rem | 2px | `rounded-sm` |
|
|
| `--radius` | 0.25rem | 4px | `rounded` |
|
|
| `--radius-md` | 0.375rem | 6px | `rounded-md` |
|
|
| `--radius-lg` | 0.5rem | 8px | `rounded-lg` |
|
|
| `--radius-xl` | 0.75rem | 12px | `rounded-xl` |
|
|
| `radius-2xl` | 1rem | 16px | `rounded-2xl` |
|
|
| `radius-3xl` | 1.5rem | 24px | `rounded-3xl` |
|
|
| `radius-full` | 9999px | Full circle | `rounded-full` |
|
|
|
|
---
|
|
|
|
## 💫 Shadows (陰影)
|
|
|
|
| Token | Value | Usage | Tailwind Class |
|
|
|-------|-------|-------|--------------|
|
|
| `--shadow-sm` | 0 1px 2px rgb(0 0 0 / 0.05) | Small shadow | `shadow-sm` |
|
|
| `--shadow` | 0 1px 3px rgb(0 0 0 / 0.1), 0 1px 2px rgb(0 0 0 / 0.06) | Default | `shadow` |
|
|
| `--shadow-md` | 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) | Medium | `shadow-md` |
|
|
| `shadow-lg` | 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) | Large | `shadow-lg` |
|
|
| `shadow-xl` | 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1) | XL | `shadow-xl` |
|
|
| `shadow-2xl` | 0 25px 50px -12px rgb(0 0 0 / 0.25) | 2XL | `shadow-2xl` |
|
|
|
|
---
|
|
|
|
## ⏱ Transitions (過渡效果)
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--transition-fast` | 150ms ease-in-out | Fast transitions |
|
|
| `--transition-base` | 200ms ease-in-out | Base transitions |
|
|
| `transition-normal` | 250ms ease-in-out | Normal transitions |
|
|
| `transition-slow` | 350ms ease-in-out | Slow transitions |
|
|
|
|
---
|
|
|
|
## 🎯 Z-Index Scale (層級)
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--z-dropdown` | 1000 | Dropdown menus |
|
|
| `--z-sticky` | 1020 | Sticky header |
|
|
| `z-modal` | 1040 | Modals |
|
|
| `z-popover` | 1060 | Popovers |
|
|
| `z-tooltip` | 1080 | Tooltips |
|
|
|
|
---
|
|
|
|
## 📐 Layout (佈局)
|
|
|
|
### Container (容器)
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--container-max-width` | 1200px | Max content width |
|
|
| `--container-padding` | 1.5rem | Side padding (mobile) |
|
|
| `--container-padding-lg` | 2rem | Side padding (desktop) |
|
|
|
|
### Grid (網格)
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--grid-columns` | 12 | Grid column count (Webflow) |
|
|
| `--grid-gutter` | 20px | Grid gap (Webflow default) |
|
|
|
|
---
|
|
|
|
## 🔗 Button Styles (按鈕樣式)
|
|
|
|
| Button Type | Background | Text | Border Radius | Padding |
|
|
|-------------|-----------|------|--------------|--------|
|
|
| Primary | `#3898EC` | White | 8px | 12px 24px |
|
|
| Secondary | `#F39C12` | White | 8px | 12px 24px |
|
|
| Accent | `#D84038` | White | 8px | 12px 24px |
|
|
| Outline | Transparent | `#3898EC` | 2px | 12px 24px |
|
|
|
|
**Hover States:**
|
|
- Primary hover: `#2895F7`
|
|
- Secondary hover: `#E08E0B`
|
|
- Accent hover: `#EA384C`
|
|
|
|
---
|
|
|
|
## 🎨 Category Colors (分類顏色 - 來自 Webflow)
|
|
|
|
| Category | Token | Hex | Badge Color |
|
|
|----------|-------|-----|------------|
|
|
| Google小學堂 | `--color-category-google` | **#67AEE1** (Light blue) | bg-[#67AEE1] |
|
|
| Meta小學堂 | `--color-category-meta` | **#8974DE** (Purple) | bg-[#8974DE] |
|
|
| 行銷時事最前線 | `--color-category-news` | **#3083BF** (Blue) | bg-[#3083BF] |
|
|
| 恩群數位最新公告 | `--color-category-enchun` | **#3898EC** (Primary blue) | bg-[#3898EC] |
|
|
|
|
**Badge Labels:**
|
|
- Hot (行銷方案): `#EA384C` (red)
|
|
- New (行銷放大鏡): `#67AEE1` (light blue)
|
|
|
|
---
|
|
|
|
## 📝 Usage Notes (使用說明)
|
|
|
|
### CSS Variables (CSS 變數)
|
|
|
|
All tokens are available as CSS custom properties. Use like:
|
|
|
|
```css
|
|
color: var(--color-primary);
|
|
background-color: var(--color-gray-50);
|
|
font-family: var(--font-family-sans);
|
|
padding: var(--spacing-4);
|
|
```
|
|
|
|
### Tailwind CSS Configuration
|
|
|
|
These tokens map to Tailwind CSS utility classes. Configure in `tailwind.config.mjs`:
|
|
|
|
```javascript
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
primary: '#3898EC',
|
|
secondary: '#F39C12',
|
|
// ... map all tokens
|
|
},
|
|
fontFamily: {
|
|
sans: ['Noto Sans TC', 'Quicksand', 'Arial', 'sans-serif'],
|
|
},
|
|
spacing: {
|
|
// inherits from Tailwind default
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Google Fonts Import
|
|
|
|
```html
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;600;700&family=Quicksand:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
```
|
|
|
|
---
|
|
|
|
**Change Log:**
|
|
|
|
| Date | Version | Description | Author |
|
|
|------|--------|-------------|--------|
|
|
| 2026-01-31 | 1.0 | Initial extraction from Webflow CSS | PM Agent via Design Token Extraction |
|