# Beancount Mobile 设计系统（MASTER）

> 本文件与 `src/theme/presets.ts` 一一对应，是实现的事实描述而非平行标准。
> 修改配色/字阶/圆角时必须先改 presets.ts，再同步本文件。

## 设计方向：明亮 Bento 现代风

浅色为主、大圆角卡片（Bento）、近黑白单色 + 财务语义色点缀。
品牌感靠排版与财务色表达，不依赖彩色 accent。暗色为 OLED 纯黑完整对等主题。

## 色板（= presets.ts）

### 浅色（默认）
| Token | 值 | 用途 |
|---|---|---|
| bgPrimary | `#F6F7F9` | 页面背景 |
| bgSecondary | `#FFFFFF` | 卡片 |
| bgTertiary | `#EFF1F4` | 输入框 / chip |
| fgPrimary | `#111318` | 主文字 |
| fgSecondary | `#6B7280` | 次要文字 |
| fgInverse | `#FFFFFF` | 反色文字 |
| accent | `#111318` | 按钮 / 选中态（近黑） |
| accentLight | `rgba(17,19,24,0.08)` | 选中高亮底色 |
| accentDark | `#000000` | 按压态 |
| financial.income | `#10B981` | 收入 |
| financial.expense | `#EF4444` | 支出 |
| financial.transfer | `#3B82F6` | 转账 |
| border | `#E5E7EB` | 边框 |
| overlay | `rgba(17,19,24,0.4)` | 遮罩 |

### 暗色（OLED）
| Token | 值 |
|---|---|
| bgPrimary | `#040508` |
| bgSecondary | `#101218` |
| bgTertiary | `#1A1D24` |
| fgPrimary / accent | `#F3F4F6` |
| fgSecondary | `#9CA3AF` |
| fgInverse | `#111318` |
| financial.income | `#34D399`（提亮） |
| financial.expense | `#F87171`（提亮） |
| financial.transfer | `#60A5FA`（提亮） |
| border | `rgba(255,255,255,0.08)` |

分类/标签/渠道颜色见 `src/theme/palette.ts`（分类 12 色循环 + 具名映射、TAG_COLORS、渠道品牌色）。
其余 token（divider / skeleton / progressBg / success / warning / error / info）见 `presets.ts`。
全工程颜色字面量只允许存在于 `presets.ts` 与 `palette.ts`。

## 字体

系统字体（iOS SF / Android Roboto），不加载自定义字体。
金额数字一律 `fontVariant: ['tabular-nums']` 等宽对齐。

字阶：display 34/800 · h1 28/700 · h2 22/700 · h3 17/600 · body 16/400 · bodySmall 14/400 · caption 12/400。

## 圆角 / 间距 / 阴影

- 圆角：sm 8 · md 12 · lg 16 · **xl 24（弹窗默认；卡片组件 P2 统一升级）** · full
- 间距：xs 4 · sm 8 · md 16 · lg 24 · xl 32
- 阴影：浅色 4–12px 弥散轻阴影；暗色阴影减重，辅以半透边框

## 图标

统一 Ionicons（`@expo/vector-icons`）。禁止用 emoji 充当图标；
分类图标 = Ionicon + 圆形彩色底（CategoryIcon 组件，P2 落地）。

## 反模式

- 禁止在组件中写颜色字面量（`#xxxxxx` / `rgba(...)`），必须走 token
- 禁止低对比文字（< 4.5:1）
- 禁止瞬间状态变化，交互反馈 150–300ms
- 禁止绕过 commonStyles 重复造 input/chip/modal 样式
