Skip to content

完整設計規範

內容依原始規格呈現 · 查看 Markdown 來源 ↗需具備倉庫查看權限

基於 Figma 原型(學生端 / 教師端 / 管理員端)與功能規格文檔生成。 本文件為 AI 編程代理可直接消費的結構化設計系統規範。


1. Visual Theme & Atmosphere

品牌定位: 兒童華語學習 App — 活潑、溫暖、有安全感 視覺基調: Playful & Professional — 在童趣與教育專業之間取得平衡 核心關鍵詞: 清亮 · 圓潤 · 溫暖 · 漸層 · 雲朵 光影質感: 微陰影(soft shadow)+ 柔和漸層背景,避免生硬邊界 參考品牌: Duolingo(遊戲化)+ Apple(排版純粹)+ Stripe(組件精緻)

特徵描述
主色調天空藍 → 晴空感的漸層背景
輔色調珊瑚粉 → 溫暖活潑的行動呼籲
吉祥物Zuzu(綠色外星生物)貫穿全平台情感設計
形狀語言大圓角(12-24px),避免銳角
圖標風格線條圖標(outline)+ 實心圖標(filled)混合

2. Color Palette & Roles

Primary Colors

TokenHEXCSS VariableUsage
Primary Blue#4A90D9--color-primary主按鈕、連結、活躍態導航
Primary Dark#2E6DB4--color-primary-dark按鈕 hover/active
Primary Light#E3F2FD--color-primary-light選中背景、標籤
Primary Gradient#4A90D9 → #7BB3E8--gradient-primary歡迎頁背景、Hero 區

Accent / Interactive

TokenHEXCSS VariableUsage
Coral Accent#FF6B81--color-accentCTA 強調按鈕、徽章、重點提示
Coral Dark#E85D72--color-accent-darkaccent hover
Coral Light#FFE4E8--color-accent-lightaccent 背景
Green Mascot#5CB85C--color-mascotZuzu 吉祥物、成功狀態、正確答案
Green Light#E8F5E9--color-mascot-light正確答案背景

Neutral / Gray Scale

TokenHEXCSS VariableUsage
Gray 900#1A2744--gray-900主文字(headings)
Gray 700#3A4A62--gray-700內文文字
Gray 500#6B7D93--gray-500輔助文字、placeholder
Gray 300#CBD5E1--gray-300邊框、分隔線
Gray 100#F1F5F9--gray-100卡片背景、禁用態
Gray 50#F8FAFC--gray-50頁面背景

Surface & Borders

TokenHEXCSS VariableUsage
Surface White#FFFFFF--surface-white卡片、模態框
Surface Tinted#F0F7FF--surface-tinted資訊區塊(藍調)
Border Default#E2E8F0--border-default輸入框邊框、分割線
Border Focus#4A90D9--border-focus輸入框聚焦

Semantic Colors

TokenHEXCSS VariableUsage
Success#22C55E--color-success成功提示、正確答案
Warning#F59E0B--color-warning警告、需注意
Error#EF4444--color-error錯誤提示、錯誤答案
Info#3B82F6--color-info資訊提示

Shadow Colors

css
--shadow-color-sm:  rgba(26, 39, 68, 0.06);
--shadow-color-md:  rgba(26, 39, 68, 0.08);
--shadow-color-lg:  rgba(26, 39, 68, 0.12);
--shadow-color-xl:  rgba(26, 39, 68, 0.16);

3. Typography Rules

Font Family

css
--font-display: 'Nunito', 'Noto Sans TC', sans-serif;   /* Headings */
--font-body:    'Inter', 'Noto Sans TC', sans-serif;     /* Body text */
--font-mono:    'JetBrains Mono', 'Consolas', monospace; /* Code/Data */

設計哲學: Nunito 圓潤友善適合兒童學習產品的標題層級; Inter 清晰中性適合大量數據展示與閱讀; Noto Sans TC 為繁體中文後備字體。

Type Scale

LevelSize (px)Size (rem)WeightLine HeightLetter SpacingUsage
Hero322rem8001.2-0.02em歡迎頁標題、Dashboard 主標
H1241.5rem7001.3-0.01em頁面標題
H2201.25rem7001.350區塊標題、卡片標題
H3181.125rem6001.40子標題、模態框標題
Body L161rem4001.50主要內文
Body140.875rem4001.50次要內文、表格
Caption120.75rem5001.40.01em輔助說明、時間戳
Nano100.625rem6001.30.02em標籤、徽章

4. Component Stylings

Buttons

css
/* Primary */
.btn-primary {
  background: var(--color-primary);       /* #4A90D9 */
  color: #FFFFFF;
  border: none;
  border-radius: 12px;
  padding: 12px 24px;
  font-family: var(--font-display);
  font-size: 16px;
  font-weight: 700;
  box-shadow: 0 2px 8px var(--shadow-color-md);
  transition: all 0.2s ease;
}
.btn-primary:hover  { background: var(--color-primary-dark); transform: translateY(-1px); }
.btn-primary:active { transform: translateY(0); }
.btn-primary:disabled { background: var(--gray-300); cursor: not-allowed; }

/* Secondary / Outline */
.btn-secondary {
  background: transparent;
  color: var(--color-primary);
  border: 2px solid var(--color-primary);
  border-radius: 12px;
  padding: 10px 24px;
  font-weight: 600;
}
.btn-secondary:hover { background: var(--color-primary-light); }

/* Ghost */
.btn-ghost {
  background: transparent;
  color: var(--gray-700);
  border: none;
  border-radius: 8px;
  padding: 8px 16px;
}
.btn-ghost:hover { background: var(--gray-100); }

/* Accent / CTA */
.btn-accent {
  background: var(--color-accent);        /* #FF6B81 */
  color: #FFFFFF;
  border: none;
  border-radius: 16px;
  padding: 14px 32px;
  font-size: 18px;
  font-weight: 800;
  box-shadow: 0 4px 16px rgba(255, 107, 129, 0.3);
}
.btn-accent:hover { background: var(--color-accent-dark); transform: scale(1.03); }

Cards

css
.card {
  background: var(--surface-white);
  border: 1px solid var(--border-default);
  border-radius: 16px;
  padding: 20px;
  box-shadow:
    0 1px 3px var(--shadow-color-sm),
    0 4px 12px var(--shadow-color-md);
  transition: box-shadow 0.2s ease;
}
.card:hover { box-shadow: 0 4px 20px var(--shadow-color-lg); }

.card--highlight {
  border: 2px solid var(--color-primary-light);
  background: var(--surface-tinted);
}

Inputs

css
.input {
  background: var(--surface-white);
  border: 1.5px solid var(--border-default);
  border-radius: 10px;
  padding: 12px 16px;
  font-size: 16px;
  color: var(--gray-900);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.input::placeholder { color: var(--gray-500); }
.input:focus {
  border-color: var(--border-focus);
  box-shadow: 0 0 0 3px var(--color-primary-light);
  outline: none;
}
.input--error { border-color: var(--color-error); }
css
/* Bottom Tab Bar (學生端 App) */
.tab-bar {
  background: var(--surface-white);
  border-top: 1px solid var(--border-default);
  padding: 8px 0 env(safe-area-inset-bottom);
  display: flex;
  justify-content: space-around;
}
.tab-item { color: var(--gray-500); font-size: 10px; }
.tab-item--active { color: var(--color-primary); }

/* Sidebar (教師端 / 管理員端 Web) */
.sidebar {
  background: var(--gray-900);            /* #1A2744 */
  color: #FFFFFF;
  width: 240px;
  padding: 24px 16px;
}
.sidebar-item {
  color: var(--gray-300);
  border-radius: 10px;
  padding: 10px 14px;
  font-size: 14px;
}
.sidebar-item:hover   { background: rgba(255,255,255,0.08); color: #FFFFFF; }
.sidebar-item--active { background: var(--color-primary); color: #FFFFFF; }

Badges / Tags

css
.badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border-radius: 100px;
  font-size: 12px;
  font-weight: 600;
}
.badge--primary  { background: var(--color-primary-light); color: var(--color-primary-dark); }
.badge--success  { background: var(--color-mascot-light);  color: #2E7D32; }
.badge--warning  { background: #FEF3C7; color: #B45309; }
.badge--error    { background: #FEE2E2; color: #B91C1C; }
.badge--accent   { background: var(--color-accent-light);  color: var(--color-accent-dark); }

Modals / Dialogs

css
.modal-overlay {
  background: rgba(26, 39, 68, 0.5);
  backdrop-filter: blur(4px);
  z-index: 100;
}
.modal-content {
  background: var(--surface-white);
  border-radius: 20px;
  padding: 28px;
  max-width: 400px;
  box-shadow: 0 16px 48px var(--shadow-color-xl);
  animation: modal-enter 0.25s ease-out;
}
@keyframes modal-enter {
  from { opacity: 0; transform: scale(0.95) translateY(10px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

5. Layout Principles

Spacing System(基數 4px)

TokenValueUsage
--space-xs4px圖標與文字間距
--space-sm8px列表項間距
--space-md16px卡片內 padding、組件間距
--space-lg24px區塊間距
--space-xl32px頁面 section 間距
--space-2xl48pxHero 區上下 padding
--space-3xl64px頁面級分隔

Grid System

屬性
學生端 App單欄流體,左右 padding 16px
教師/管理員 Web12 欄柵格,gutter 24px,max-width 1280px
主要內容區max-width: 960px,水平置中

Container

css
.container--app    { padding: 0 16px; }                  /* 學生端 */
.container--web    { max-width: 1280px; margin: 0 auto; padding: 0 24px; }
.container--narrow { max-width: 640px; margin: 0 auto; }  /* 表單頁 */

留白哲學

「呼吸感」優先 — 每個可交互元素之間至少保持 8px 安全距離。 兒童用戶需要更大的觸控目標與更清晰的視覺分隔。 資訊密集頁面(Dashboard、數據表格)允許較緊湊的間距(12px 區塊間距)。


6. Depth & Elevation

Shadow System

css
/* 從最低到最高 */
--shadow-none:  none;

--shadow-xs:    0 1px 2px  rgba(26, 39, 68, 0.04);
/* Usage: 內聯分隔、細微層次 */

--shadow-sm:    0 1px 3px  rgba(26, 39, 68, 0.06),
                0 1px 2px  rgba(26, 39, 68, 0.04);
/* Usage: 卡片、列表項 */

--shadow-md:    0 4px 6px  rgba(26, 39, 68, 0.06),
                0 2px 4px  rgba(26, 39, 68, 0.04);
/* Usage: 按鈕、浮動卡片 */

--shadow-lg:    0 10px 15px rgba(26, 39, 68, 0.08),
                0 4px 6px  rgba(26, 39, 68, 0.04);
/* Usage: 下拉選單、彈出層 */

--shadow-xl:    0 20px 25px rgba(26, 39, 68, 0.10),
                0 8px 10px rgba(26, 39, 68, 0.06);
/* Usage: 模態框 */

--shadow-2xl:   0 25px 50px rgba(26, 39, 68, 0.16);
/* Usage: Toast 通知、最高層級浮層 */

Z-index Scale

Layerz-indexUsage
Base0頁面內容
Dropdown100下拉選單、Popover
Sticky200固定導航欄
Overlay300模態框背景
Modal400模態框內容
Toast500通知提示
Tooltip600工具提示

Surface Layers

overlay (模態框)         ← z-400, shadow-xl

elevated (浮動卡片)      ← z-100, shadow-lg

surface (卡片/區塊)      ← z-0,   shadow-sm/md

background (頁面底色)    ← z-0,   shadow-none

7. Do's and Don'ts

Do's ✅

  1. 使用圓角 — 所有互動元素(按鈕、輸入框、卡片)使用 ≥ 8px 圓角
  2. 保持顏色對比 — 文字與背景對比度 ≥ 4.5:1(WCAG AA)
  3. 觸控目標 ≥ 44px — 手機端所有可點擊元素最小 44x44px
  4. 使用微互動 — hover/active 狀態有視覺反饋(顏色變化、輕微位移)
  5. 優先使用主色藍 — 主要行動按鈕統一使用 --color-primary
  6. 卡片分組 — 資訊密集區域使用卡片分割視覺層次
  7. 吉祥物引導 — 空狀態、加載中、錯誤頁面使用 Zuzu 增加情感連結
  8. 留白呼吸 — 區塊之間保持足夠間距,避免擁擠

Don'ts ❌

  1. 禁止純黑文字 — 使用 --gray-900 (#1A2744) 替代 #000000
  2. 禁止過多色彩 — 單頁面主色不超過 3 種(藍 + 珊瑚 + 綠)
  3. 禁止小於 12px 字體 — 兒童用戶文字必須清晰可讀
  4. 禁止無邊界文字按鈕 — 所有按鈕需有明確可點擊區域
  5. 禁止過度動畫 — transition 控制在 0.2-0.3s,避免分散注意力
  6. 禁止銳角 — 不使用 border-radius: 0 的元素
  7. 禁止紅色用於非錯誤場景 — Error 色僅用於錯誤/危險操作
  8. 禁止忽略安全區域 — 學生端 App 必須適配 iPhone notch/home indicator

8. Responsive Behavior

Breakpoints

NameMin WidthTarget Device
Mobile320pxiPhone SE / 13 mini
Tablet768pxiPad
Desktop1024px教師/管理員 Web
Wide1440px大螢幕 Dashboard

Touch Targets

  • 最小觸控尺寸: 44×44px(iOS HIG 標準)
  • 按鈕最小高度: 44px(手機端)/ 36px(桌面端)
  • 列表項最小高度: 56px(確保單指操作)

折疊策略

Breakpoint學生端 App教師/管理員 Web
Mobile (<768px)單欄全屏側邊欄收合為漢堡選單
Tablet (768-1023px)側邊欄顯示(200px)
Desktop (≥1024px)側邊欄完整顯示(240px)

Font Scaling

  • 學生端 App:字體大小固定(不隨螢幕縮放),確保兒童閱讀體驗一致
  • 教師/管理員 Web:使用 rem 單位,支援瀏覽器預設字體縮放

9. Agent Prompt Guide

Quick Reference

yaml
Nihao Academy Design System:
  Primary:     #4A90D9 (Blue)    → --color-primary
  Accent:      #FF6B81 (Coral)   → --color-accent
  Success:     #22C55E (Green)   → --color-success
  Error:       #EF4444 (Red)     → --color-error
  Text:        #1A2744 (Navy)    → --gray-900
  Background:  #F8FAFC (Light)   → --gray-50
  Font:        Nunito (headings) / Inter (body)
  Radius:      12px (buttons), 16px (cards), 20px (modals)
  Spacing:     4px base → 4/8/16/24/32/48/64
  App Target:  iPhone 13 mini (375×812) — mobile-first

Component Prompts

Prompt 1 — 登入頁面

Generate a login page for Nihao Academy student app following DESIGN.md:
- Sky blue gradient background (#4A90D9 → #7BB3E8)
- Nihao logo with pink/blue gradient
- Zuzu mascot illustration
- "Get Start!" accent button (coral #FF6B81, rounded 16px)
- White input fields with 1.5px border, 10px radius
- "Already Have Account" ghost text link below
- Nunito font for headings, Inter for body
- Mobile viewport: 375×812px

Prompt 2 — Dashboard 卡片

Generate a dashboard info card component:
- White surface, 16px border-radius
- Shadow: 0 1px 3px rgba(26,39,68,0.06), 0 4px 12px rgba(26,39,68,0.08)
- Top-left: icon (24px, outline style, primary blue)
- Top-right: trend badge (up/down arrow + percentage)
- Center: large number (32px, 800 weight, gray-900)
- Bottom: label text (14px, gray-500)
- Hover: shadow deepens, slight scale(1.02)
- Width: flexible (min 200px)

Prompt 3 — 底部導航欄

Generate a bottom tab bar for the student app:
- 4 tabs: Home, Speak, Trophy, Me
- White background, top border 1px #E2E8F0
- Active tab: primary blue (#4A90D9) icon + label
- Inactive tab: gray-500 icon + label
- Icon: 24px outline style
- Label: 10px, 600 weight, below icon
- Height: 56px + safe-area-inset-bottom
- iOS-style: no text under icons when inactive (icon-only)

Prompt 4 — 側邊欄導航

Generate a sidebar navigation for teacher/admin web:
- Background: #1A2744 (dark navy)
- Width: 240px
- Logo area at top (32px height, pink/blue gradient logo)
- Menu items with icon + label, 14px, rounded 10px
- Active item: primary blue background, white text
- Inactive items: gray-300 text, hover: lighten
- Bottom section: user avatar + name + role badge
- Divider lines between menu sections

Prompt 5 — 模態框

Generate a modal dialog:
- Dark overlay: rgba(26,39,68,0.5) + backdrop-filter blur(4px)
- White content box: 20px border-radius, 28px padding, max-width 400px
- Title: 18px, 600 weight, gray-900
- Body text: 14px, gray-700
- Two buttons at bottom: ghost (cancel) + primary (confirm)
- Enter animation: scale(0.95→1) + fade in, 0.25s ease-out
- Close button (×) top-right corner, ghost style

Iteration Guide

  1. 先建立色票變數 — 所有顏色使用 CSS 變數,避免硬編碼 HEX
  2. 從最小螢幕開始 — Mobile-first,逐步擴展到桌面
  3. 組件先於頁面 — 確保 Button/Card/Input 等基礎組件正確再組合頁面
  4. 用陰影而非邊框 — 優先使用 shadow 區分層級,減少視覺噪音
  5. 對比度檢查 — 每個頁面完成後驗證文字對比度 ≥ 4.5:1
  6. 觸控區域驗證 — 手機端確認所有點擊目標 ≥ 44×44px
  7. 動畫克制 — 過渡動畫 0.2-0.3s,不加載過多動效
  8. 狀態完整性 — 每個組件需覆蓋:default / hover / active / disabled / loading / error
  9. 吉祥物一致性 — Zuzu 表情需與頁面情緒(成功/鼓勵/等待/錯誤)匹配
  10. 測試實際裝置 — 在 iPhone 13 mini 實機上驗證觸控與可讀性
提交版本內容版本 29c89979提交 5ca7557規格文件,功能實現狀態另行確認