qia/docs/ui-spec.md
ddshi 2dbb1069a6 feat: 初始化项目结构和认证系统
- 添加React + Vite前端项目 (client)
- 添加Node.js + Express后端项目 (server)
- 实现JWT认证系统 (注册/登录/刷新Token)
- 添加Prisma ORM配置 (SQLite/PostgreSQL)
- 配置Tailwind CSS和Mantine组件库

Co-Authored-By: Claude (MiniMax-M2.1) <noreply@anthropic.com>
2026-01-29 15:08:50 +08:00

1139 lines
41 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.

# 掐日子qiaUI 设计规范
> 版本v1.0.0
> 更新日期2026-01-29
> 设计风格:苹果公司风格,浅色系
---
## 1 设计原则
### 1.1 整体设计理念
掐日子的设计遵循"简洁、高效、温暖"三大核心理念以苹果Human Interface Guidelines为设计准则打造轻便易用的日期管理工具。
**简洁性原则**:去除一切不必要的视觉元素,让用户专注于核心内容。界面采用大量留白,通过清晰的层级结构引导用户视线,避免信息过载带来的认知负担。每一个设计决策都经过深思熟虑,确保每个元素都有其存在的必要性。
**高效性原则**以用户任务为中心优化操作流程减少用户点击次数。AI智能解析功能让添加纪念日和提醒变得像发消息一样简单自然语言交互降低了学习成本。快速响应和流畅的动效设计提升了整体使用效率。
**温暖性原则**:通过精心设计的细节传递产品的温度。倒计时显示让用户感受到时间的珍贵,贴心的到期提醒帮助用户不再错过重要日期。整体视觉风格采用温暖的浅色调,营造舒适愉悦的使用氛围。
### 1.2 视觉风格定义
掐日子采用苹果公司风格的浅色系设计语言,具体特征如下:
| 设计属性 | 规范定义 |
|---------|---------|
| 设计风格 | 苹果扁平化设计,轻拟物元素 |
| 主色调 | 系统蓝品牌色 `#007AFF` |
| 背景色 | 浅灰白色 `#FFFFFF` / `#F5F5F7` |
| 圆角风格 | 中等圆角8px-16px |
| 阴影效果 | 柔和投影,轻量级层级阴影 |
| 字体风格 | 系统字体,无衬线清晰可读 |
| 图标风格 | 线性图标,圆角处理 |
---
## 2 颜色系统
### 2.1 主色调(品牌色)
品牌色是产品视觉识别的核心,应用于主要操作按钮、链接、选中状态等关键元素。
| 颜色名称 | 色值 | CSS变量 | 使用场景 |
|---------|------|---------|---------|
| 品牌主色 | `#007AFF` | `--color-primary` | 主要按钮背景、链接、选中状态、图标填充 |
| 品牌浅色 | `#EAF3FF` | `--color-primary-light` | 背景色、悬停背景、选中框背景 |
| 品牌深色 | `#0056CC` | `--color-primary-dark` | 按下状态、disabled状态 |
### 2.2 辅助色
辅助色用于补充品牌色,在特定场景下传达特定含义。
| 颜色名称 | 色值 | CSS变量 | 使用场景 |
|---------|------|---------|---------|
| 紫色 | `#AF52DE` | `--color-purple` | AI功能标识、特殊纪念日 |
| 绿色 | `#34C759` | `--color-green` | 完成状态、成功提示 |
| 橙色 | `#FF9500` | `--color-orange` | 警告提示、待处理提醒 |
| 红色 | `#FF3B30` | `--color-red` | 错误状态、删除操作、已错过提醒 |
| 黄色 | `#FFCC00` | `--color-yellow` | 提醒标识、重要日期高亮 |
### 2.3 中性色
中性色用于文字、背景、边框等基础UI元素构建界面的层次结构。
| 颜色名称 | 色值 | CSS变量 | 使用场景 |
|---------|------|---------|---------|
| 文字主色 | `#1D1D1F` | `--color-text-primary` | 标题、重要内容 |
| 文字次色 | `#48484A` | `--color-text-secondary` | 正文内容 |
| 文字三级 | `#86868B` | `--color-text-tertiary` | 辅助说明、时间显示 |
| 文字占位 | `#C7C7CC` | `--color-text-placeholder` | 输入框占位符、空状态 |
| 背景白色 | `#FFFFFF` | `--color-bg-white` | 卡片、弹窗背景 |
| 背景浅灰 | `#F5F5F7` | `--color-bg-light` | 页面背景、分组标题背景 |
| 背景更深灰 | `#E5E5EA` | `--color-bg-darker` | 分割线、边框 |
| 边框颜色 | `#C6C6C8` | `--color-border` | 输入框边框、分隔线 |
### 2.4 功能色
功能色用于传达操作结果的反馈信息。
| 功能 | 色值 | CSS变量 | 应用示例 |
|-----|------|---------|---------|
| 成功 | `#34C759` | `--color-success` | 完成checkmark、创建成功提示 |
| 警告 | `#FF9500` | `--color-warning` | 即将过期提醒、需要注意 |
| 错误 | `#FF3B30` | `--color-error` | 删除确认、表单验证失败 |
| 信息 | `#007AFF` | `--color-info` | 普通提示、新功能引导 |
### 2.5 语义色
语义色用于区分不同类型的内容,增强信息的可识别性。
| 内容类型 | 色值 | CSS变量 | 使用场景 |
|---------|------|---------|---------|
| 纪念日色条 | `#AF52DE` | `--color-anniversary` | 纪念日卡片左侧色条 |
| 提醒色条 | `#007AFF` | `--color-reminder` | 提醒卡片左侧色条 |
| 便签色条 | `#34C759` | `--color-note` | 便签区域标识 |
| AI对话色 | `#5856D6` | `--color-ai` | AI消息气泡、对话框 |
| 农历标识 | `#FF9500` | `--color-lunar` | 农历日期文字颜色 |
| 法定节假日 | `#FF3B30` | `--color-holiday` | 节假日标签 |
### 2.6 颜色令牌汇总
```css
:root {
/* 品牌色 */
--color-primary: #007AFF;
--color-primary-light: #EAF3FF;
--color-primary-dark: #0056CC;
/* 辅助色 */
--color-purple: #AF52DE;
--color-green: #34C759;
--color-orange: #FF9500;
--color-red: #FF3B30;
--color-yellow: #FFCC00;
/* 中性色 */
--color-text-primary: #1D1D1F;
--color-text-secondary: #48484A;
--color-text-tertiary: #86868B;
--color-text-placeholder: #C7C7CC;
--color-bg-white: #FFFFFF;
--color-bg-light: #F5F5F7;
--color-bg-darker: #E5E5EA;
--color-border: #C6C6C8;
/* 功能色 */
--color-success: #34C759;
--color-warning: #FF9500;
--color-error: #FF3B30;
--color-info: #007AFF;
/* 语义色 */
--color-anniversary: #AF52DE;
--color-reminder: #007AFF;
--color-note: #34C759;
--color-ai: #5856D6;
--color-lunar: #FF9500;
--color-holiday: #FF3B30;
}
```
---
## 3 字体系统
### 3.1 字体家族
采用系统默认字体,确保在不同平台上的最佳可读性和一致性。
| 字体类型 | 字体名称 | CSS声明 | 说明 |
|---------|---------|---------|------|
| 主字体 | -apple-system | `font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif` | iOS/macOS系统字体 |
| 中文字体 | PingFang SC | `'PingFang SC', 'Microsoft YaHei', sans-serif` | 苹方字体Mac/微软雅黑Windows |
| 等宽字体 | SF Mono | `font-family: 'SF Mono', Monaco, Menlo, monospace` | 用于代码展示 |
### 3.2 字号层级
建立清晰的字号层级体系,确保信息层次的视觉区分。
| 字号名称 | 字号大小 | 行高 | 字重 | CSS变量 | 使用场景 |
|---------|---------|------|------|---------|---------|
| 超大标题 | 34px | 41px | 700 | `--font-size-xxl` | 宣传页主标题 |
| 大标题 | 28px | 34px | 700 | `--font-size-xl` | 页面主标题 |
| 中标题 | 22px | 28px | 600 | `--font-size-lg` | 区域标题、卡片标题 |
| 小标题 | 18px | 24px | 600 | `--font-size-md` | 分组标题、重要内容 |
| 正文字 | 16px | 24px | 400 | `--font-size-base` | 正文内容、输入文字 |
| 小正文 | 14px | 20px | 400 | `--font-size-sm` | 次要说明、卡片内容 |
| 辅助文字 | 12px | 16px | 400 | `--font-size-xs` | 时间标签、占位符 |
| 最小文字 | 10px | 14px | 400 | `--font-size-xxs` | 徽章标签、数量标识 |
### 3.3 字重规范
| 字重 | CSS值 | 使用场景 |
|-----|-------|---------|
| 700 (Bold) | `700` / `bold` | 大标题、区域标题、数字强调 |
| 600 (Semibold) | `600` | 小标题、卡片标题、需要强调的文字 |
| 400 (Regular) | `400` / `normal` | 正文内容、辅助说明 |
### 3.4 行高规范
行高与字号保持合理比例,确保文本的可读性。
| 字号范围 | 推荐行高 | 行高/字号比例 |
|---------|---------|--------------|
| 28px及以上 | 字号 + 6-8px | 约 1.2 |
| 18-22px | 字号 + 6px | 约 1.3 |
| 14-16px | 字号 + 8px | 约 1.5 |
| 12px及以下 | 字号 + 4px | 约 1.4 |
### 3.5 字体令牌汇总
```css
:root {
/* 字号 */
--font-size-xxl: 34px;
--font-size-xl: 28px;
--font-size-lg: 22px;
--font-size-md: 18px;
--font-size-base: 16px;
--font-size-sm: 14px;
--font-size-xs: 12px;
--font-size-xxs: 10px;
/* 行高 */
--line-height-xxl: 41px;
--line-height-xl: 34px;
--line-height-lg: 28px;
--line-height-md: 24px;
--line-height-base: 24px;
--line-height-sm: 20px;
--line-height-xs: 16px;
--line-height-xxs: 14px;
/* 字重 */
--font-weight-bold: 700;
--font-weight-semibold: 600;
--font-weight-regular: 400;
}
```
---
## 4 间距系统
### 4.1 基础间距单位
以 4px 作为基础间距单位,所有间距值均为 4px 的倍数。
| 间距名称 | 间距值 | CSS变量 | 用途 |
|---------|--------|---------|------|
| 间距-xs | 4px | `--spacing-xs` | 元素内部最小间距 |
| 间距-sm | 8px | `--spacing-sm` | 紧密相关的元素间距 |
| 间距-md | 16px | `--spacing-md` | 标准间距 |
| 间距-lg | 24px | `--spacing-lg` | 较大间距 |
| 间距-xl | 32px | `--spacing-xl` | 大间距 |
| 间距-2xl | 48px | `--spacing-2xl` | 区块间距 |
| 间距-3xl | 64px | `--spacing-3xl` | 页面边距 |
### 4.2 组件内间距
| 组件类型 | 水平 padding | 垂直 padding | CSS变量 |
|---------|-------------|-------------|---------|
| 卡片类 | 16px | 12px | `--card-padding` |
| 按钮类 | 16px | 8px | `--button-padding` |
| 输入框 | 12px | 10px | `--input-padding` |
| 弹窗内容 | 24px | 20px | `--modal-padding` |
| 分组标题 | 16px | 8px | `--section-padding` |
### 4.3 组件间距
| 场景 | 间距值 | CSS变量 |
|-----|--------|---------|
| 卡片之间 | 12px | `--gap-card` |
| 分组之间 | 24px | `--gap-section` |
| 列表项之间 | 8px | `--gap-item` |
| 表单项之间 | 16px | `--gap-form` |
| 按钮之间 | 12px | `--gap-button` |
| 图标与文字 | 8px | `--gap-icon-text` |
| 标题与内容 | 8px | `--gap-title-content` |
### 4.4 页面边距
| 页面类型 | 水平边距 | 垂直边距 | 最大宽度 |
|---------|---------|---------|---------|
| 宣传页 | 24px | 0 | 1200px |
| 登录/注册页 | 24px | 0 | 400px |
| Home页 | 24px | 0 | 1200px |
| 弹窗 | 24px | 0 | 480px |
### 4.5 间距令牌汇总
```css
:root {
/* 基础间距 */
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 24px;
--spacing-xl: 32px;
--spacing-2xl: 48px;
--spacing-3xl: 64px;
/* 组件内间距 */
--card-padding: 16px 12px;
--button-padding: 8px 16px;
--input-padding: 10px 12px;
--modal-padding: 24px 20px;
--section-padding: 8px 16px;
/* 组件间距 */
--gap-card: 12px;
--gap-section: 24px;
--gap-item: 8px;
--gap-form: 16px;
--gap-button: 12px;
--gap-icon-text: 8px;
--gap-title-content: 8px;
/* 页面边距 */
--page-margin: 24px;
--page-max-width: 1200px;
}
```
---
## 5 圆角与阴影
### 5.1 圆角层级
建立统一的圆角规范,不同场景使用不同层级的圆角。
| 圆角层级 | 圆角值 | CSS变量 | 使用场景 |
|---------|--------|---------|---------|
| 圆角-sm | 4px | `--radius-sm` | 小按钮、徽章、标签 |
| 圆角-md | 8px | `--radius-md` | 卡片、输入框、弹窗 |
| 圆角-lg | 12px | `--radius-lg` | 大卡片、分组容器 |
| 圆角-xl | 16px | `--radius-xl` | 弹窗、侧边栏 |
| 圆角-full | 9999px | `--radius-full` | 头像、圆形按钮、Pill标签 |
### 5.2 阴影规范
阴影用于表现层级关系和交互状态,层级越高阴影越明显。
| 阴影层级 | 阴影值 | CSS变量 | 使用场景 |
|---------|--------|---------|---------|
| 阴影-sm | `0 1px 2px rgba(0, 0, 0, 0.05)` | `--shadow-sm` | 微小投影、分隔线 |
| 阴影-md | `0 2px 8px rgba(0, 0, 0, 0.08)` | `--shadow-md` | 卡片悬停、按钮按下 |
| 阴影-lg | `0 4px 16px rgba(0, 0, 0, 0.1)` | `--shadow-lg` | 弹窗、下拉菜单 |
| 阴影-xl | `0 8px 32px rgba(0, 0, 0, 0.12)` | `--shadow-xl` | 重要弹窗、模态框 |
| 阴影-inner | `inset 0 2px 4px rgba(0, 0, 0, 0.06)` | `--shadow-inner` | 输入框内陷效果 |
### 5.3 交互状态阴影
| 交互状态 | 阴影效果 | 说明 |
|---------|---------|------|
| 默认状态 | `0 1px 3px rgba(0, 0, 0, 0.06)` | 基础卡片投影 |
| 悬停状态 | `0 4px 12px rgba(0, 122, 255, 0.15)` | 品牌色微光效果 |
| 按下状态 | `0 0 0 3px rgba(0, 122, 255, 0.2)` | 品牌色边框扩散 |
| 选中状态 | `0 0 0 2px var(--color-primary)` | 品牌色描边 |
### 5.4 圆角与阴影令牌汇总
```css
:root {
/* 圆角 */
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-full: 9999px;
/* 阴影 */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.08);
--shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 8px 32px rgba(0, 0, 0, 0.12);
--shadow-inner: inset 0 2px 4px rgba(0, 0, 0, 0.06);
}
```
---
## 6 组件设计规范
### 6.1 纪念日卡片
纪念日卡片用于展示用户的重要日期,支持倒计时显示和重复规则标识。
**布局结构**
```
┌─────────────────────────────────────────────────────────┐
│ [左侧色条] 纪念日名称(主标题) [标识] │
│ 倒计时 + 日期信息(副标题) │
└─────────────────────────────────────────────────────────┘
```
**尺寸规范**
| 属性 | 规范值 |
|-----|-------|
| 卡片高度 | 60px |
| 左侧色条宽度 | 4px |
| 圆角 | 8px |
| 内边距 | 12px 16px |
**样式规范**
| 元素 | 字号 | 字重 | 颜色 |
|-----|------|-----|------|
| 纪念日名称 | 16px | 600 | `--color-text-primary` |
| 倒计时 | 14px | 400 | `--color-text-secondary` |
| 日期信息 | 12px | 400 | `--color-text-tertiary` |
| 色条颜色 | - | - | `--color-anniversary` (#AF52DE) |
**状态定义**
| 状态 | 视觉效果 |
|-----|---------|
| 默认 | 白色背景,轻微阴影 |
| 悬停 | 背景色变浅,品牌色微光阴影 |
| 即将到来30天内 | 高亮显示,倒计时文字使用品牌色 |
| 今日 | 背景色为 `--color-primary-light`,倒计时显示"今日" |
**重复标识**
| 重复类型 | 图标/标识 | 说明 |
|---------|----------|------|
| 仅一次 | 无标识 | 不重复 |
| 年度重复 | 循环图标 (360度旋转箭头) | 每年重复 |
| 月度重复 | 双循环图标 | 每月重复 |
**农历/节假日标识**
| 类型 | 样式 |
|-----|------|
| 农历 | 橙色文字"农历",带月亮图标 |
| 法定节假日 | 红色"节假日"标签 |
### 6.2 提醒卡片
提醒卡片用于展示待办任务,支持完成标记和过期状态。
**布局结构**
```
┌─────────────────────────────────────────────────────────┐
│ [checkbox] 提醒内容(主标题) [时间] │
└─────────────────────────────────────────────────────────┘
```
**尺寸规范**
| 属性 | 规范值 |
|-----|-------|
| 卡片高度 | 50px |
| checkbox尺寸 | 20px x 20px |
| 圆角 | 8px |
| 内边距 | 10px 16px |
**样式规范**
| 元素 | 字号 | 字重 | 颜色 |
|-----|------|-----|------|
| 提醒内容 | 14px | 400 | `--color-text-primary` |
| 时间信息 | 12px | 400 | `--color-text-tertiary` |
| 色条颜色 | - | - | `--color-reminder` (#007AFF) |
**Checkbox 样式**
| 属性 | 规范值 |
|-----|-------|
| 未选中 | 灰色边框圆角4px |
| 选中 | 绿色背景 + 白色checkmark |
| 悬停 | 边框加深 |
**分组样式**
| 分组名称 | 标题颜色 | 标题字号 |
|---------|---------|---------|
| 今天 | `--color-text-primary` | 14px |
| 明天 | `--color-text-primary` | 14px |
| 更久之后 | `--color-text-secondary` | 14px |
| 已错过 | `--color-error` | 14px |
**完成状态**
| 状态 | 视觉效果 |
|-----|---------|
| 未完成 | 正常显示 |
| 已完成 | 内容灰色划线,时间显示完成时间,移至分组底部 |
| 已过期 | 红色高亮,显示在"已错过"分组顶部 |
### 6.3 便签编辑器
便签区域提供富文本编辑能力,采用 Quill 编辑器组件。
**布局结构**
```
┌─────────────────────────────────────────────────────┐
│ [便签标题] [清空按钮] │
├─────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────┐ │
│ │ 富文本编辑器容器 │ │
│ │ (可编辑区域) │ │
│ └───────────────────────────────────────────────┘ │
│ [保存状态:已保存] │
└─────────────────────────────────────────────────────┘
```
**尺寸规范**
| 属性 | 规范值 |
|-----|-------|
| 便签区域高度 | 占右侧区域的50% |
| 编辑器最小高度 | 200px |
| 工具栏高度 | 40px |
| 圆角 | 8px |
**工具栏按钮**
| 按钮 | 图标 | 用途 |
|-----|------|------|
| H1 | 标题1 | 一级标题 |
| H2 | 标题2 | 二级标题 |
| B | 粗体 | 加粗文字 |
| I | 斜体 | 斜体文字 |
| U | 下划线 | 添加下划线 |
| S | 删除线 | 添加删除线 |
| 链接 | 链接图标 | 插入链接 |
| 有序列表 | 数字列表 | 有序列表 |
| 无序列表 | 圆点列表 | 无序列表 |
**保存状态指示**
| 状态 | 颜色 | 位置 |
|-----|------|------|
| 已保存 | `--color-success` | 右上角 |
| 保存中 | `--color-text-tertiary` + 加载动画 | 右上角 |
| 离线保存 | `--color-warning` | 右上角 |
**空状态**
| 状态 | 显示内容 |
|-----|---------|
| 便签为空 | "开始记录你的想法...",灰色文字 `--color-text-placeholder` |
### 6.4 AI对话框
AI对话区域是产品的核心特色采用聊天气泡形式展示对话历史。
**布局结构**
```
┌─────────────────────────────────────────────────────┐
│ [AI区域标题] │
├─────────────────────────────────────────────────────┤
│ ┌───────────────┐ ┌─────────────────────────────┐ │
│ │ │ │ AI消息气泡 │ │
│ │ AI头像 │ │ (自然语言解析结果) │ │
│ │ │ └─────────────────────────────┘ │
│ └───────────────┘ │
│ ┌─────────────────────────────┐ ┌───────────────┐ │
│ │ 用户消息气泡 │ │ │ │
│ │ (用户输入内容) │ │ 用户头像 │ │
│ └─────────────────────────────┘ │ │ │
│ └───────────────┘ │
├─────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────┐│
│ │ [输入框:输入描述要添加的纪念日或提醒...] [发送] ││
│ └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘
```
**气泡样式**
| 气泡类型 | 背景色 | 圆角 | 最大宽度 |
|---------|--------|------|---------|
| AI气泡 | `--color-bg-light` (浅灰) | 16px | 280px |
| 用户气泡 | `--color-primary-light` (浅蓝) | 16px | 280px |
| 解析确认卡片 | 白色 + 边框 | 12px | 100% |
**气泡内边距**12px 16px
**发送按钮**
| 状态 | 背景色 | 效果 |
|-----|--------|------|
| 默认 | `--color-primary` | 蓝色圆形 |
| 悬停 | `--color-primary-dark` | 颜色加深 |
| disabled | `--color-text-placeholder` | 灰色不可点击 |
**解析确认卡片**
| 元素 | 样式 |
|-----|------|
| 卡片背景 | 白色边框2px实线 `--color-primary-light` |
| 卡片圆角 | 12px |
| 确认按钮 | 主要按钮样式 |
| 修改按钮 | 次要按钮样式 |
### 6.5 详情弹窗
点击纪念日或提醒卡片时弹出详情弹窗,支持二次编辑。
**布局结构**
```
┌─────────────────────────────────────────────────────┐
│ [X] 编辑纪念日 / 编辑提醒 [删除]│
├─────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────┐ │
│ │ 表单字段区域 │ │
│ │ - 输入框/选择器 │ │
│ │ - 开关/下拉选择 │ │
│ └───────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤
│ [取消] [保存] │
└─────────────────────────────────────────────────────┘
```
**尺寸规范**
| 属性 | 规范值 |
|-----|-------|
| 弹窗宽度 | 400px - 480px |
| 弹窗最大高度 | 80vh |
| 圆角 | 16px |
| 头部高度 | 52px |
| 底部按钮区高度 | 60px |
**头部样式**
| 元素 | 样式 |
|-----|------|
| 标题 | 中标题 18px字重 600颜色 `--color-text-primary` |
| 关闭按钮 | 20px x 20px灰色图标 |
| 删除按钮 | 红色文字按钮,字重 500 |
**表单控件样式**
| 控件类型 | 样式规范 |
|---------|---------|
| 输入框 | 高度 40px圆角 8px边框 `--color-border`,聚焦边框 `--color-primary` |
| 标签 | 小正文 14px颜色 `--color-text-secondary`,上方留白 8px |
| 开关 | iOS样式圆角 16px滑块白色 |
| 下拉选择 | 右侧下拉箭头,高度 40px圆角 8px |
**操作按钮**
| 按钮类型 | 样式 |
|---------|------|
| 保存按钮 | 主要按钮,蓝色背景,白色文字 |
| 取消按钮 | 次要按钮,灰色边框,黑色文字 |
| 删除按钮 | 危险按钮,红色文字,无背景 |
### 6.6 按钮样式
按钮是用户操作的主要入口,需要清晰区分主次和危险操作。
**主要按钮**
| 属性 | 规范值 |
|-----|-------|
| 背景色 | `--color-primary` (#007AFF) |
| 文字颜色 | 白色 |
| 高度 | 36px - 44px |
| 圆角 | 8px |
| 字重 | 600 |
| 字重 | 14px |
| 内边距 | 0 20px |
| 悬停背景 | `--color-primary-dark` (#0056CC) |
**次要按钮**
| 属性 | 规范值 |
|-----|-------|
| 背景色 | 透明 |
| 文字颜色 | `--color-text-primary` |
| 边框 | 1px solid `--color-border` |
| 高度 | 36px - 44px |
| 圆角 | 8px |
| 字号 | 14px |
| 内边距 | 0 20px |
| 悬停背景 | `--color-bg-light` |
**文字按钮**
| 属性 | 规范值 |
|-----|-------|
| 背景色 | 透明 |
| 文字颜色 | `--color-primary` |
| 高度 | 36px |
| 圆角 | 无0px |
| 字号 | 14px |
| 内边距 | 0 12px |
| 悬停背景 | `--color-primary-light` |
**危险按钮(删除/清除)**
| 属性 | 规范值 |
|-----|-------|
| 背景色 | 透明 |
| 文字颜色 | `--color-error` |
| 边框 | 1px solid `--color-error` |
| 高度 | 36px - 44px |
| 圆角 | 8px |
| 字号 | 14px |
| 内边距 | 0 20px |
| 悬停背景 | `--color-error` + 10% opacity |
**按钮尺寸变体**
| 变体 | 高度 | 字号 | 用途 |
|-----|------|-----|------|
| 小按钮 | 28px | 12px | 工具栏、徽章 |
| 中按钮 | 36px | 14px | 表单操作 |
| 大按钮 | 44px | 16px | 主要行动按钮 |
| 大号按钮 | 52px | 17px | 宣传页CTA |
---
## 7 页面布局规范
### 7.1 宣传页布局
宣传页采用极简设计,分为三个主要区域。
**布局结构**
```
┌─────────────────────────────────────────────────────────┐
│ [Logo: 掐日子 + Slogan] [登录][注册]│
├─────────────────────────────────────────────────────────┤
│ │
│ 让重要日期不再错过 │
│ │
│ AI智能解析 · 轻松管理纪念日 · 即时提醒 │
│ │
│ [开始使用] │
│ │
├─────────────────────────────────────────────────────────┤
│ © 2025 掐日子 隐私政策 服务条款 │
└─────────────────────────────────────────────────────────┘
```
**区域规范**
| 区域 | 高度 | 背景色 |
|-----|------|--------|
| 顶部导航区 | 60px | 白色 |
| 内容展示区 | 自适应最小600px | 白色 |
| 底部信息区 | 60px | `--color-bg-light` |
**Logo规范**
| 元素 | 样式 |
|-----|------|
| 产品名称 | 20px字重 700品牌色 |
| Slogan | 14px灰色 `--color-text-tertiary` |
**CTA按钮**
| 属性 | 规范值 |
|-----|-------|
| 尺寸 | 大号按钮高度52px |
| 圆角 | 26px (pill形状) |
| 文字 | "开始使用" |
### 7.2 登录/注册页布局
登录和注册采用同一页面布局通过Tab切换。
**布局结构**
```
┌─────────────────────────────────────────────────────┐
│ │
│ [Logo] │
│ │
│ [登录] [注册] │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 邮箱地址 │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 密码 │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ [登录按钮] │
│ │
│ 还没有账号?点击注册 │
│ │
└─────────────────────────────────────────────────────┘
```
**卡片规范**
| 属性 | 规范值 |
|-----|-------|
| 卡片宽度 | 400px |
| 卡片圆角 | 16px |
| 卡片背景 | 白色 |
| 卡片阴影 | `--shadow-lg` |
**输入框规范**
| 属性 | 规范值 |
|-----|-------|
| 高度 | 44px |
| 圆角 | 8px |
| 边框 | 1px solid `--color-border` |
| 间距 | 下边距 16px |
**Tab样式**
| 状态 | 视觉效果 |
|-----|---------|
| 激活 | 下边框2px实线 `--color-primary`,文字品牌色 |
| 未激活 | 文字灰色 `--color-text-tertiary`,无下划线 |
### 7.3 Home页四区布局
Home页面采用三栏布局总宽度1200px居中显示。
**布局结构**
```
┌─────────────────────────────────────────────────────────────────────┐
│ 顶部导航栏60px
├───────────────┬───────────────────────────────────────┬─────────────┤
│ │ │ │
│ 纪念日列表 │ 主内容区 │ 便签区 │
40%宽度) │ 40%宽度) │ 20%
│ │ │ │
│ + 纪念日 │ │ ┌─────────┐│
│ + 提醒列表 │ │ │ 便签 ││
40%宽度) │ │ │ 编辑器 ││
│ │ │ └─────────┘│
│ │ │ │
│ │ │ ┌─────────┐│
│ │ │ │ AI ││
│ │ │ │ 对话 ││
│ │ │ │ 区域 ││
│ │ │ └─────────┘│
│ │ │ │
├───────────────┴───────────────────────────────────────┴─────────────┤
│ 底部版权信息 │
└─────────────────────────────────────────────────────────────────────┘
```
**顶部导航栏**
| 属性 | 规范值 |
|-----|-------|
| 高度 | 60px |
| 背景色 | 白色 |
| 内容 | Logo + 用户邮箱 + 登出按钮 |
**左侧区域(纪念日 + 提醒)**
| 属性 | 规范值 |
|-----|-------|
| 宽度占比 | 40%约480px |
| 纪念日区域高度 | 50% |
| 提醒区域高度 | 50% |
| 分割线 | 1px solid `--color-bg-darker` |
**主内容区(便签 + AI对话**
| 属性 | 规范值 |
|-----|-------|
| 宽度占比 | 60%约720px |
| 便签区域高度 | 50% |
| AI对话区域高度 | 50% |
| 便签与AI之间 | 16px间距 |
**底部版权信息**
| 属性 | 规范值 |
|-----|-------|
| 高度 | 40px |
| 背景色 | `--color-bg-light` |
| 文字 | 12px灰色 `--color-text-tertiary` |
### 7.4 响应式适配规则
| 断点 | 屏幕宽度 | 布局变化 |
|-----|---------|---------|
| xs | < 768px | 单栏堆叠布局 |
| sm | 768px - 1024px | 两栏布局左侧合并右侧保留 |
| md | 1024px - 1200px | 三栏布局宽度压缩 |
| lg | 1200px - 1440px | 标准三栏布局 |
| xl | > 1440px | 三栏布局内容居中最大宽度1440px |
**移动端适配方案**
| 场景 | 适配方案 |
|-----|---------|
| 导航栏 | 折叠为汉堡菜单 |
| 三栏布局 | 改为Tab切换纪念日/提醒/其他) |
| 弹窗 | 全屏显示 |
| 卡片 | 占据全宽 |
---
## 8 交互动效规范
### 8.1 悬停效果
交互元素在鼠标悬停时应有明确的视觉反馈。
| 元素类型 | 悬停效果 |
|---------|---------|
| 主要按钮 | 背景色加深5%轻微上移2px |
| 次要按钮 | 背景色变为 `--color-bg-light` |
| 卡片 | 阴影加深轻微上移cursor变为pointer |
| 链接 | 颜色变为 `--color-primary-dark`,下划线显示 |
| 表格行 | 背景色变为 `--color-bg-light` |
### 8.2 点击反馈
用户点击操作应有即时的视觉反馈。
| 元素类型 | 点击效果 |
|---------|---------|
| 按钮 | 背景色变暗10%,轻微下沉 |
| 卡片 | 阴影消失,按下效果 |
| checkbox | 立即显示选中状态checkmark动画 |
| 链接 | 颜色变化,无动画 |
| 图标按钮 | 灰色圆形背景闪烁 |
**checkbox动画**
| 阶段 | 动画效果 |
|-----|---------|
| 点击瞬间 | 缩放0.8倍 |
| 选中完成 | 缩放1.0倍 + 绿色背景填充 |
| checkmark | 从中心向外展开的线条动画 |
### 8.3 过渡动画
元素状态变化时使用平滑的过渡动画。
**通用过渡**
```css
transition: all 0.2s ease-out;
```
**具体场景动画**
| 场景 | 进入动画 | 离开动画 |
|-----|---------|---------|
| 弹窗显示 | fadeIn + scale(0.95) -> fadeIn + scale(1) | fadeOut + scale(1) -> fadeOut + scale(0.95) |
| 下拉菜单 | slideDown (200ms) | slideUp (150ms) |
| 列表项增删 | fadeIn + slideIn | fadeOut + slideOut |
| 卡片悬停 | scale(1.02) | scale(1) |
| 按钮点击 | scale(0.95) | scale(1) |
**AI消息动画**
| 阶段 | 动画效果 | 时长 |
|-----|---------|------|
| 消息出现 | 渐显 + 打字机效果 | 300ms |
| 解析中 | 气泡呼吸动画 | 持续 |
| 发送中 | 发送按钮旋转 | 持续 |
**保存状态指示**
| 状态切换 | 动画效果 |
|---------|---------|
| 保存中 -> 已保存 | 绿色对勾从小到大的缩放动画 |
| 离线保存 | 黄色警告图标闪烁 |
### 8.4 动画令牌
```css
:root {
/* 动画时长 */
--duration-fast: 150ms;
--duration-base: 200ms;
--duration-slow: 300ms;
--duration-slower: 500ms;
/* 动画缓动 */
--ease-out: cubic-bezier(0.4, 0, 0.2, 1);
--ease-in: cubic-bezier(0, 0, 0.2, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
--ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
```
---
## 9 图标规范
### 9.1 图标风格
图标采用线性风格Outline与苹果设计语言保持一致。
| 属性 | 规范定义 |
|-----|---------|
| 线条粗细 | 1.5px - 2px |
| 圆角 | 2px线条端点 |
| 颜色 | 与文字颜色一致 |
| 尺寸 | 16px, 20px, 24px, 32px |
| 风格 | 线性、空心、圆角矩形框 |
### 9.2 图标尺寸
| 尺寸 | CSS变量 | 使用场景 |
|-----|---------|---------|
| 16px | `--icon-size-sm` | 表格内图标、标签旁图标 |
| 20px | `--icon-size-md` | 卡片内图标、按钮图标 |
| 24px | `--icon-size-lg` | 区域标题图标、独立图标 |
| 32px | `--icon-size-xl` | Logo、空状态图标 |
### 9.3 图标使用场景
| 图标名称 | 图标形状 | 用途 |
|---------|---------|------|
| 添加 | 加号 (+) | 添加按钮 |
| 删除 | 垃圾桶 | 删除操作 |
| 编辑 | 铅笔 | 编辑操作 |
| 保存 | 磁盘/对勾 | 保存操作 |
| 关闭 | X号 | 关闭弹窗 |
| 日历 | 日历形状 | 纪念日/日期相关 |
| 闹钟 | 闹钟形状 | 提醒相关 |
| 星星 | 星星形状 | 重要标记 |
| 循环 | 循环箭头 | 重复规则 |
| 月亮 | 月亮形状 | 农历标识 |
| 旗帜 | 旗帜形状 | 节假日标识 |
| 勾选 | 对勾 | 完成、确认 |
| 发送 | 箭头 | 发送消息 |
| 用户 | 用户头像 | 个人中心 |
| 登出 | 退出箭头 | 登出操作 |
| AI | 机器人头像 | AI对话区域 |
| 便签 | 文档形状 | 便签区域 |
### 9.4 图标颜色规则
| 场景 | 图标颜色 |
|-----|---------|
| 普通操作 | `--color-text-secondary` |
| 主要操作 | `--color-primary` |
| 完成状态 | `--color-success` |
| 警告状态 | `--color-warning` |
| 危险操作 | `--color-error` |
| 禁用状态 | `--color-text-placeholder` |
### 9.5 图标令牌
```css
:root {
/* 图标尺寸 */
--icon-size-sm: 16px;
--icon-size-md: 20px;
--icon-size-lg: 24px;
--icon-size-xl: 32px;
/* 图标颜色 */
--icon-color-primary: var(--color-primary);
--icon-color-secondary: var(--color-text-secondary);
--icon-color-tertiary: var(--color-text-tertiary);
--icon-color-success: var(--color-success);
--icon-color-warning: var(--color-warning);
--icon-color-error: var(--color-error);
--icon-color-disabled: var(--color-text-placeholder);
/* 图标线条粗细 */
--icon-stroke-width: 1.5px;
}
```
---
## 10 设计资源
### 10.1 组件速查表
| 组件名称 | 高度 | 圆角 | 字号 | 主要颜色 |
|---------|------|------|------|---------|
| 纪念日卡片 | 60px | 8px | 16px/14px | `--color-anniversary` |
| 提醒卡片 | 50px | 8px | 14px | `--color-reminder` |
| 主要按钮 | 36-44px | 8px | 14-16px | `--color-primary` |
| 次要按钮 | 36-44px | 8px | 14px | 透明+边框 |
| 输入框 | 40px | 8px | 14px | `--color-border` |
| 弹窗 | 自适应 | 16px | 16px | 白色 |
| 聊天气泡 | 自适应 | 16px | 14px | 浅灰/浅蓝 |
### 10.2 常见颜色组合
| 场景 | 背景色 | 文字色 | 边框色 |
|-----|--------|--------|--------|
| 主要按钮 | `#007AFF` | `#FFFFFF` | 无 |
| 次要按钮 | 透明 | `#1D1D1F` | `#C6C6C8` |
| 纪念日卡片 | `#FFFFFF` | `#1D1D1F` | 无 |
| 提醒卡片 | `#FFFFFF` | `#1D1D1F` | 无 |
| AI气泡 | `#F5F5F7` | `#1D1D1F` | 无 |
| 用户气泡 | `#EAF3FF` | `#1D1D1F` | 无 |
| 弹窗 | `#FFFFFF` | `#1D1D1F` | 无 |
| 错误提示 | `#FFF2F2` | `#FF3B30` | `#FF3B30` |
### 10.3 快捷开发样式类
```css
/* 按钮类 */
.btn-primary {
background: var(--color-primary);
color: white;
height: 40px;
border-radius: 8px;
font-weight: 600;
transition: all 0.2s ease;
}
.btn-secondary {
background: transparent;
color: var(--color-text-primary);
border: 1px solid var(--color-border);
height: 40px;
border-radius: 8px;
transition: all 0.2s ease;
}
/* 卡片类 */
.card {
background: white;
border-radius: 8px;
padding: 12px 16px;
box-shadow: var(--shadow-sm);
transition: all 0.2s ease;
}
.card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-2px);
}
/* 输入框类 */
.input {
height: 40px;
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 0 12px;
font-size: 14px;
transition: all 0.2s ease;
}
.input:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: 0 0 0 3px var(--color-primary-light);
}
/* 弹窗类 */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
animation: fadeIn 0.2s ease;
}
.modal {
background: white;
border-radius: 16px;
max-width: 480px;
width: 90%;
max-height: 80vh;
overflow: auto;
animation: scaleIn 0.2s ease;
}
```
---
## 11 附录
### 11.1 设计决策记录
| 决策项 | 决策内容 | 理由 |
|-------|---------|------|
| 圆角值 | 8px作为标准圆角 | 与苹果设计语言一致,视觉平衡 |
| 主色调 | 系统蓝 #007AFF | 用户熟悉度高,易于识别操作入口 |
| 卡片高度 | 纪念日60px提醒50px | 纪念日信息更多,需要更大空间 |
| 间距单位 | 4px | 与Tailwind CSS一致便于开发 |
| 图标风格 | 线性图标 | 与苹果风格一致,清晰易读 |
### 11.2 待确认事项
以下事项需要在设计评审中确认:
1. 倒计时超过365天时是否显示"还有X年"还是统一显示天数
2. 法定节假日是否需要特殊视觉效果(如红色高亮)
3. AI对话区域的聊天记录是否需要持久化存储
4. 便签是否支持多种颜色标签或主题
### 11.3 更新日志
| 版本 | 日期 | 更新内容 | 更新人 |
|------|------|---------|--------|
| v1.0.0 | 2026-01-29 | 初稿完成 | UI设计师 |