# 「随心」主题（Suixin Theme）高层规范（spec）

## 1. 背景与动机

当前首页（Home）支持两种主题：

- **风景**：使用预置风景图作为背景
- **纯色**：使用预置颜色列表轮换作为背景

现在新增第三种主题 **「随心」**，其核心是：**背景颜色随用户画像个性化**，并遵循既有的「个性化背景颜色推荐算法」规则与硬约束（Hard Rules）。

## 2. 目标（Goals）

- **新增主题**：在现有「风景 / 纯色」基础上新增 **「随心」** 主题，并与现有主题切换入口保持一致。
- **个性化颜色**：基于用户完成问卷后生成的用户画像 `U`，输出 Home 背景的推荐颜色（或渐变颜色组），形成“更贴合此刻”的视觉陪伴。
- **稳定与不冒犯**：严格遵循硬规则（例如 `mom_stage=unknown` 强制 Neutral Theme），并在一次 session 内保持稳定，避免跳色造成打扰。
- **多语言**：支持 **繁体中文（TC / zh-TW）** 与 **英文（EN）** 的主题名称与 UI 文案展示。

## 3. 非目标（Non-Goals）

- **不用于转化**：随心主题不承担 CTA/转化引导职责，不为“制造变化”而变化。
- **不新增色系数量**：不新增主题色系数量，复用既定 Base Theme（5 套）+ Neutral Theme（1 套）。
- **不做心理诊断**：颜色不用于推断用户心理状态，只用于提升阅读与停留的舒适度。

## 4. 适用范围（Scope）

### 4.1 适用页面

- **首页 Home 背景（主题模式为「随心」时）**：输出为“纯色背景”或“轻量渐变背景”（实现形态由工程实现阶段确定，但必须遵循硬约束与稳定性规则）。

### 4.2 不适用页面

- 首页列表/卡片/CTA 组件背景（不在本需求范围）
- 任何需要高对比/强引导的交互区域（避免降低可用性）

## 5. 用户体验与交互

### 5.1 主题切换入口与位置

- **切换位置**：与现有主题切换位置一致（即当前 Home 右上角主题按钮打开的主题选择弹窗/面板）。
- **切换项**：在「风景」「纯色」旁新增第三项「随心」。

### 5.2 主题命名与多语言（TC / EN）

#### i18n Key 建议（示例）

- `home.theme.scenery`
- `home.theme.color`
- `home.theme.suixin`
- `home.theme.suixinDesc`（可选：主题描述，用于解释“随心=按问卷画像推荐颜色”）

#### 文案建议

- **TC（zh-TW）**
  - `home.theme.suixin`: 隨心
  - `home.theme.suixinDesc`: 依照你的問卷狀態，推薦舒適的背景色
- **EN**
  - `home.theme.suixin`: Suixin
  - `home.theme.suixinDesc`: A cozy background color, tailored from your questionnaire

> 说明：主题名「随心」作为品牌/概念名，EN 采用音译 `Suixin`，避免语义误解（如 “Random”）。

## 6. 输入输出（与问卷画像的对接）

### 6.1 输入：用户画像 `U`

随心主题的颜色推荐以客户端本地存储的用户画像为输入（来源：问卷完成后生成的画像）。

必须使用字段（与现有实现对齐）：

- `U.stage.unknown`：用于 Hard Rule（unknown → Neutral Theme）
- `U.need`：用于选择 Base Theme（稀疏 one-hot，例如 `{ "rest_balance": 1 }`；若为空 `{}` 视为“need 跳过”）
- `U.emotion_score`：用于动态强度/亮度扰动的约束（可为 `null`）
- `U.profile_confidence`：用于个性化强度（可信度低则更保守）
- `U.profile_answered`：用于判断题目是否跳过（避免伪精确）

### 6.2 输出：Home 背景推荐颜色

输出形态需支持两类（工程阶段二选一或混合）：

- **纯色输出（推荐优先）**：输出单一 `hex` 颜色作为背景色
- **轻量渐变输出（可选增强）**：输出 2～3 个 `hex` 颜色作为背景渐变 stops（必须连续、低感知变化）

## 7. 颜色算法规则（复用现有文档，Home 场景化）

### 7.1 主题色系（Base Theme / Neutral Theme）

Base Theme（5 套，不新增）：

```json
{
  "emotional_support": ["#F6DCE4", "#FFEFF4", "#FFF7FA"],
  "parenting_pressure": ["#D6EAF5", "#EEF6FB", "#F8FCFF"],
  "self_worth": ["#FFD8A8", "#FFE8C9", "#FFF6E5"],
  "anxiety_relief": ["#DFF3EA", "#ECFBF6", "#F6FFFB"],
  "rest_balance": ["#F2E6D8", "#FAF3EC", "#FFFDF9"]
}
```

Neutral Theme（1 套）：

```json
["#F4F7F2", "#E8F1EC", "#EDF4F8"]
```

### 7.2 Home 场景的主题选择规则（Theme Picking）

- **Hard Rule**：若 `U.stage.unknown = 1` → **强制 Neutral Theme**
- 若 `U.need` 为空对象 `{}`（need 跳过/缺失）→ **使用 Neutral Theme**
- 否则：从 `U.need` 取出被选中的 need tag（稀疏 one-hot 的 key），映射到对应 Base Theme

### 7.3 Home 场景的颜色输出规则（Solid/Gradient）

Home 没有“长文案滚动阅读”的 scroll，因此需要将「连续渐变」规则做“等价映射”：

- **纯色输出（默认）**：使用所选主题的中间色（例如 `theme[1]`）作为背景色，保证稳定、可读、低感知。
- **轻量渐变输出（可选）**：使用主题的 `theme[0]` 与 `theme[2]` 作为 top/bottom，保持同主题内部变化；渐变 stops 仅允许线性分布，不允许 easing/bounce。

> 备注：是否启用渐变由实现阶段决定；即便启用，也必须遵循「同主题内部变化」与「连续」的约束。

### 7.4 情绪与置信度调节（强度而非色系）

复用既有规则精神：`emotion_score` 与 `profile_confidence` **只影响强度**，不得导致色系切换。

- `emotion_score ≤ 0.3`：禁止任何动态增强（保持最稳定的纯色/静态渐变）
- `emotion_score ∈ [0.3, 0.6]` 且 `profile_confidence ≥ 0.6`：允许极弱亮度微扰（\(\Delta L \le \pm 2\%\)），用于降低“模板感”
- `profile_confidence ≤ 0.4`：最大饱和度不超过 60%（若实现包含饱和度调节）

## 8. 稳定性与 Session 规则（Home 版本）

为避免“背景跳色”，随心主题必须具备 **Theme Lock**：

- **锁定时机**：用户进入 Home 且主题模式为「随心」
- **锁定内容**：锁定 Base Theme（或 Neutral Theme）选择结果；必要时也锁定最终输出颜色/渐变 stops
- **解锁时机**：
  - 用户离开 Home（或 app 重启，按实现策略）
  - 用户主动切换主题模式（从随心切换到风景/纯色，再切回时可重新计算）
- **Session 内禁止重新采样**：不得因为画像更新、拉取新文案、上下滑动切换文案而切换 Base Theme

## 9. 边界条件与兜底

- **用户未完成问卷 / 跳过全部题目**：画像中 `stage.unknown=1` 且 `need={}`，必须输出 Neutral Theme（稳定、安全）。
- **emotion_score 为 null**：视为不确定 → 禁止动态增强，输出稳定纯色/静态渐变。
- **非法/未知 need key**：按跳过处理 → Neutral Theme。

## 10. 验收标准（Acceptance Criteria）

- **入口一致**：Home 的主题切换入口不变位置；新增「随心」选项可选中并持久化。
- **多语言正确**：TC 与 EN 下，「随心」主题名称与描述文案正确展示（不出现缺失 key）。
- **规则一致**：
  - `stage.unknown=1` 时必为 Neutral Theme
  - `need` 缺失/跳过时必为 Neutral Theme
  - 不允许跨 need 插值/切换
- **稳定性**：一次 Home session 内，不因切换文案/刷新/拉取推荐而改变随心主题色系（Theme Lock 生效）。

## 11. 依赖与关联模块

- **用户画像来源**：客户端 `User Profile Scoring`（问卷完成后生成 `U` 并写入本地存储）
- **颜色算法来源**：`设计说明文档/个性化背景颜色推荐算法.md`（规则与 Hard Rules）
- **UI 入口**：Home 顶部主题切换弹窗（与现有位置一致）

