# 戒烟助手 - 设计语言文档
> 所有页面和组件必须遵循此文档,确保视觉一致性。
---
## 1. 色彩体系
### 品牌色 — 薄荷绿
| 用途 | 色值 | 示例场景 |
|------|------|---------|
| 主色 | `#34C8A0` | 按钮、进度条、选中态边框 |
| 主色深 | `#1a8c62` | 选中文字、强调文字 |
| 主色最深 | `#0D3D2E` | 页面标题、数值文字 |
| 辅助文字 | `#52806E` | 副标题 |
| 次要文字 | `#7aA898` | 说明文字、标签、单位 |
| 淡底色 | `#9CC5B5` | placeholder 文字 |
### 功能色
| 用途 | 色值 | 场景 |
|------|------|------|
| 成功/正向 | `#1a8c62` | 下降趋势、达成状态 |
| 警告 | `#B45309` | 上升趋势、需注意 |
| 警告背景 | `rgba(251, 191, 36, 0.14)` | 警告标签底色 |
| 危险 | `#DC2626` | 高数值指标 |
| 信息蓝 | `#2563EB` | 对比数据(实际值) |
### 背景与表面
| 用途 | 色值 |
|------|------|
| 页面背景渐变 | `linear-gradient(180deg, #E6F7F2 0%, #F0FBF7 40%, #FAFFFE 100%)` |
| 卡片底色 | `rgba(255, 255, 255, 0.88)` |
| 卡片边框 | `rgba(52, 200, 160, 0.14)` |
| 卡片阴影 | `0 4rpx 18rpx rgba(52, 200, 160, 0.07)` |
| 浅底色块 | `rgba(52, 200, 160, 0.06)` |
| 选中底色 | `rgba(52, 200, 160, 0.09)` |
| 选中边框 | `rgba(52, 200, 160, 0.45)` |
---
## 2. 字体规范
### 字体栈
```css
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
```
### 字号层级
| 级别 | 字号 | 字重 | 颜色 | 用途 |
|------|------|------|------|------|
| H1 | 38rpx | 700 | `#0D3D2E` | 页面大标题 |
| H2 | 28rpx | 600 | `#0D3D2E` | 卡片标题 |
| H3 | 26rpx | 600 | `#1a5c45` | 区块标签(section-label) |
| 数值大 | 52rpx | 700 | `#0D3D2E` | 核心指标数字 |
| 数值中 | 38-42rpx | 700 | `#0D3D2E` | 次要指标数字 |
| 正文 | 25rpx | 400 | `#52806E` | 描述文字 |
| 辅助 | 21-22rpx | 400 | `#7aA898` | 标签、单位、说明 |
| 小字 | 20rpx | 500 | `#7aA898` | 注释、补充信息 |
---
## 3. 间距与圆角
### 间距
| 级别 | 数值 | 用途 |
|------|------|------|
| xs | 6-8rpx | 元素内部微间距 |
| sm | 14-16rpx | 标签之间、紧凑元素间距 |
| md | 20rpx | 卡片之间、区块之间 |
| lg | 28rpx | 页面侧边距 |
### 圆角
| 元素 | 圆角 |
|------|------|
| 卡片 | 24rpx |
| 选项卡片 | 20rpx |
| 标签(pill) | 999rpx |
| 按钮 | 48rpx(大按钮)/ 999rpx(小标签) |
| 输入框/选择器 | 12-14rpx |
| 圆形按钮/圆环 | 50% |
| 数据色块 | 14rpx |
---
## 4. 组件样式规范
### 4.1 卡片(Card)
所有独立内容区域使用卡片包裹。
```css
.card {
background: rgba(255, 255, 255, 0.88);
border-radius: 24rpx;
border: 1.5rpx solid rgba(52, 200, 160, 0.14);
box-shadow: 0 4rpx 18rpx rgba(52, 200, 160, 0.07);
padding: 24rpx;
margin-bottom: 20rpx;
}
```
**禁止**:使用旧版灰蓝阴影 `rgba(15, 23, 42, 0.06)`,统一使用薄荷绿阴影。
### 4.2 选择卡片(Mode Card / Option Card)
```css
/* 默认态 */
.option-card {
background: rgba(255, 255, 255, 0.72);
border: 2rpx solid rgba(52, 200, 160, 0.1);
border-radius: 20rpx;
box-shadow: 0 2rpx 10rpx rgba(52, 200, 160, 0.04);
}
/* 选中态 */
.option-card-active {
background: rgba(52, 200, 160, 0.09);
border-color: rgba(52, 200, 160, 0.45);
box-shadow: 0 4rpx 16rpx rgba(52, 200, 160, 0.14);
}
```
### 4.3 标签选项(Pill Tag)
```css
/* 默认态 */
.tag {
padding: 14rpx 26rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.9);
font-size: 25rpx;
color: #4a7a66;
border: 1.5rpx solid rgba(52, 200, 160, 0.18);
}
/* 选中态 */
.tag-active {
background: rgba(52, 200, 160, 0.12);
border-color: rgba(52, 200, 160, 0.45);
color: #1a7f61;
font-weight: 600;
}
```
### 4.4 按钮
```css
/* 主按钮 */
.btn-primary {
height: 96rpx;
background: linear-gradient(180deg, #3DD9AE 0%, #34C8A0 100%);
border-radius: 48rpx;
color: #FFFFFF;
font-size: 32rpx;
font-weight: 600;
box-shadow: 0 12rpx 28rpx rgba(52, 200, 160, 0.28);
}
/* 圆形操作按钮(+/-) */
.btn-circle {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
background: rgba(52, 200, 160, 0.1);
color: #34C8A0;
font-size: 38rpx;
border: 1.5rpx solid rgba(52, 200, 160, 0.25);
}
```
### 4.5 输入框
```css
.input {
background: rgba(52, 200, 160, 0.06);
border: 1.5rpx solid rgba(52, 200, 160, 0.2);
border-radius: 12rpx;
color: #0D3D2E;
font-weight: 600;
}
/* placeholder */
placeholder-style: "color: #9CC5B5"
```
### 4.6 进度条
```css
.progress-bar {
height: 10rpx;
background: rgba(52, 200, 160, 0.1);
border-radius: 999rpx;
}
.progress-fill {
background: linear-gradient(90deg, #34C8A0, #3DD9AE);
border-radius: 999rpx;
}
/* 未完成态 */
.progress-fill-pending {
background: rgba(52, 200, 160, 0.3);
}
```
### 4.7 圆环指标(Ring)
```css
.ring {
width: 110rpx;
height: 110rpx;
border-radius: 50%;
/* 使用 conic-gradient 动态渲染 */
/* 主色: #34C8A0, 底色: #E8F8F3 */
}
.ring-inner {
width: 82rpx;
height: 82rpx;
border-radius: 50%;
background: #FFFFFF;
box-shadow: 0 4rpx 12rpx rgba(52, 200, 160, 0.1);
}
```
### 4.8 状态标签(Chip)
```css
/* 正向 */
.chip-good {
background: rgba(52, 200, 160, 0.12);
color: #1a8c62;
}
/* 警告 */
.chip-warn {
background: rgba(251, 191, 36, 0.14);
color: #B45309;
}
/* 中性 */
.chip-neutral {
background: rgba(52, 200, 160, 0.06);
color: #7aA898;
}
```
### 4.9 Segment(Tab 切换)
```css
.segment {
background: rgba(255, 255, 255, 0.82);
padding: 6rpx;
border-radius: 22rpx;
border: 1.5rpx solid rgba(52, 200, 160, 0.14);
box-shadow: 0 4rpx 16rpx rgba(52, 200, 160, 0.07);
}
.segment-item {
font-size: 24rpx;
font-weight: 600;
color: #7aA898;
border-radius: 16rpx;
}
.segment-active {
background: #FFFFFF;
color: #0D3D2E;
box-shadow: 0 4rpx 12rpx rgba(52, 200, 160, 0.12);
}
```
### 4.10 空状态
```css
.empty-block {
padding: 32rpx;
border-radius: 16rpx;
background: rgba(52, 200, 160, 0.04);
}
/* 虚线边框变体 */
.empty-block-dashed {
border: 2rpx dashed rgba(52, 200, 160, 0.2);
background: transparent;
}
.empty-text {
font-size: 24rpx;
color: #7aA898;
}
```
### 4.11 底部安全区
```css
.bottom-safe {
height: calc(32rpx + env(safe-area-inset-bottom));
}
/* 固定底部按钮区域 */
.footer-fixed {
position: fixed;
left: 0; right: 0; bottom: 0;
padding: 20rpx 28rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: linear-gradient(180deg, transparent 0%, rgba(240, 251, 247, 0.97) 35%);
}
```
---
## 5. 数据可视化配色
| 数据类型 | 色值/色阶 |
|---------|----------|
| 0 / 无数据 | `rgba(52, 200, 160, 0.06)` |
| 低(1-3) | `rgba(52, 200, 160, 0.18)` |
| 中(4-8) | `rgba(251, 191, 36, 0.2)` |
| 高(9+) | `rgba(239, 68, 68, 0.15)` |
| 圆环已完成 | `#34C8A0` |
| 圆环未完成 | `#E8F8F3` |
---
## 6. 禁止事项
| 禁止 | 替代方案 |
|------|---------|
| 灰蓝色阴影 `rgba(15, 23, 42, *)` | 薄荷绿阴影 `rgba(52, 200, 160, *)` |
| 旧主色 `#1AA37A` / `#1aa37a` | 新主色 `#34C8A0`(按钮/进度条)或 `#1a8c62`(文字) |
| 灰色文字 `#6B7280` / `#94A3B8` | 绿调文字 `#7aA898` / `#52806E` |
| 灰色背景 `#F1F5F9` / `#F8FAFC` | 绿调背景 `rgba(52, 200, 160, 0.06)` |
| 纯白卡片背景 `#FFFFFF` | 半透明白 `rgba(255, 255, 255, 0.88)` |
| `backdrop-filter: blur()` | 不再使用模糊滤镜(性能考虑),用不透明度代替 |
| 旧页面背景渐变 `#edf2f8 → #fbfdff` | 薄荷绿渐变 `#E6F7F2 → #FAFFFE` |
---
## 7. 快速参考
开发新页面时复制此基础结构:
```vue
标题
```