# 「随心」主题(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 顶部主题切换弹窗(与现有位置一致)