--- name: YesWash 用户端小程序 description: 自助洗车车主端微信小程序,预约、支付、会员一站式服务 colors: primary: "#C6171E" primary-light: "#E84545" primary-dark: "#A81212" success: "#4CAF50" warning: "#FF9800" error: "#F44336" info: "#2196F3" text-primary: "#1A1A1A" text-secondary: "#666666" text-tertiary: "#999999" text-placeholder: "#B0B0B0" text-inverse: "#FFFFFF" bg-page: "#F5F7FA" bg-card: "#FFFFFF" bg-hover: "#F8F8F8" border: "#E0E0E0" border-light: "#F0F0F0" divider: "#F0F0F0" typography: body: fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif' fontSize: "14px" fontWeight: 400 lineHeight: 1.6 caption: fontSize: "12px" fontWeight: 400 lineHeight: 1.2 title: fontSize: "18px" fontWeight: 600 lineHeight: 1.4 headline: fontSize: "24px" fontWeight: 700 lineHeight: 1.2 rounded: sm: "2px" md: "3px" lg: "6px" full: "50%" spacing: xs: "4px" sm: "8px" md: "12px" lg: "15px" components: button-primary: backgroundColor: "{colors.primary}" textColor: "{colors.text-inverse}" rounded: "{rounded.md}" button-primary-hover: backgroundColor: "{colors.primary-dark}" tab-active: textColor: "{colors.primary}" tab-inactive: textColor: "#7A7E83" --- # Design System: YesWash 用户端小程序 ## 1. Overview **Creative North Star: "口袋里的洗车助手"** 车主掏出手机,几秒钟内找到最近的洗车网点、完成预约、扫码启动洗车机。整个过程应该在排队等候的间隙就能完成 — 不需要思考,不需要学习,不需要等待。界面是透明的,用户看到的不是 UI,而是自己的车和下一个空闲的洗车位。 系统基于 uni-app + uv-ui 组件库,主色已经是品牌红 (#C6171E),设计令牌体系完整。追求的是「打开即用,用完即走」的小程序典型体验:信息密度低、操作路径短、视觉噪声少。 **Key Characteristics:** - 移动端优先,触控目标 ≥44px - 品牌红作为导航和行动色,页面背景保持浅灰,卡片纯白 - 卡片式布局为主,每个卡片承载一个独立信息单元 - 自定义导航栏和底部 TabBar,与系统 UI 自然融合 - 不做过度动画,只用 150-250ms 微交互做状态反馈 ## 2. Colors ### Primary - **Primary Red** (#C6171E): 品牌主红 — 比后台管理系统的 Brand Red 更深一度,在小尺寸屏幕上有更好的辨识度。用于主按钮、Tab 选中态、轮播指示器、价格、关键状态图标。 - **Primary Light** (#E84545): 浅红,用于 hover 态和浅色强调背景。 - **Primary Dark** (#A81212): 深红,用于按钮按下态和深色强调。 ### Semantic - **Success** (#4CAF50): 支付成功、操作完成。 - **Warning** (#FF9800): 余额不足、即将过期。 - **Error** (#F44336): 支付失败、网络错误。 - **Info** (#2196F3): 订单状态更新、系统通知。 ### Neutral - **Text Primary** (#1A1A1A): 正文、标题、核心信息。 - **Text Secondary** (#666666): 辅助描述、次要标签。 - **Text Tertiary** (#999999): 时间戳、弱化信息。 - **Text Placeholder** (#B0B0B0): 输入框占位符。 - **Page Background** (#F5F7FA): 页面全局底色,略带蓝灰的浅色。 - **Card Background** (#FFFFFF): 卡片、列表项、弹窗背景。 - **Border** (#E0E0E0): 分割线、卡片描边。 - **Divider** (#F0F0F0): 轻量分割。 ### Named Rules **The Red Means Action Rule.** 品牌红不出现在非交互元素上。看到红色,就意味着可以点击、可以操作、或者这是当前激活态。 **The Card-White Rule.** 所有内容卡片使用纯白底 (#FFFFFF),与页面底色 (#F5F7FA) 形成两层信息结构。不做三层以上的背景嵌套。 ## 3. Typography **Font Family:** `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif` 系统字体栈,保证 iOS 和 Android 各自的最优渲染。小程序内不引入 Web 字体,不增加包体积。 **Character:** 清晰、中性、不抢戏。字号跨度从 12px 到 24px,通过字重而非颜色区分层级。 ### Hierarchy - **Headline** (700, 24px, 1.2): 大标题,仅用于首页和重要落地页顶部。 - **Title** (600, 18px, 1.4): 页面标题、区块标题、订单金额。 - **Body** (400, 14px, 1.6): 正文、列表项、描述文本。 - **Caption** (400, 12px, 1.2): 辅助说明、时间、标签。 - **Small** (400, 13px, 1.4): 表单标签、次要按钮文字。 ### Named Rules **The Weight Over Color Rule.** 同一页面最多使用两种文本颜色(Primary + Secondary)。层级差异通过字重 (400/600/700) 和字号表达,不引入第三种颜色。 ## 4. Elevation 小程序采用**扁平底色分层**策略。不依赖阴影区分层级,而是通过背景色差(页面灰 → 卡片白)自然建立视觉层次。 - 页面底色 `#F5F7FA` 提供全局基准面 - 卡片白色 `#FFFFFF` 浮于基准面之上 - 弹窗/底部弹出层使用轻微阴影或遮罩 (`rgba(0,0,0,0.4)`) 阴影仅用于必须传达「浮层」的场景:底部弹出菜单、模态对话框。 ## 5. Components 所有组件基于 `@climblee/uv-ui`,以下记录关键定制和使用约束。 ### Buttons - **Shape:** 3px 圆角,默认高度 44px(满足触控最小尺寸)。 - **Primary:** Primary Red 满底 + 白色文字。用于页面主操作:立即下单、确认支付、一键导航。 - **Hover:** 背景深至 Primary Dark,无缩放动画。 - **Ghost:** 透明底 + Primary Red 边框和文字。用于次要操作。 - **Disabled:** 透明度 0.3,不可交互。 ### Tab Bar - **Style:** 自定义底部导航,白色背景,顶部 1px 分割线。 - **Active:** Primary Red (#C6171E) 图标和文字。 - **Inactive:** 灰色 (#7A7E83) 图标和文字。 - **Font Size:** 12px 标签文字。 ### Cards - **Corner Style:** 6px 圆角。 - **Background:** Card White (#FFFFFF)。 - **Shadow:** 无默认阴影。 - **Internal Padding:** 12-15px (md-lg)。 ### Navigation Bar - **Style:** 自定义导航栏,Primary Red 背景 + 白色标题。 - **Height:** 状态栏高度 + 44px 内容区。 - **Title:** 18px, 600 字重, 白色。 ### List Items - **Style:** 白色背景,左侧图标/标签 + 右侧箭头,高度 ≥44px。 - **Divider:** 底部 1px Border Light 分割线,左右各 15px 留白。 - **Hover:** 背景微变至 #F8F8F8。 ### Form Inputs - **Style:** 白色背景,底部 1px Border 分割线。 - **Focus:** 分割线变为 Primary Red。 - **Label:** 14px, Text Primary, 左对齐。 - **Placeholder:** 14px, Text Placeholder。 ## 6. Do's and Don'ts ### Do: - **Do** 用 Primary Red 标记所有可交互元素和当前激活态 - **Do** 保持页面底色 (#F5F7FA) 和卡片白底 (#FFFFFF) 的二级结构 - **Do** 所有可点击区域至少 44px 高,满足微信小程序触控规范 - **Do** 文本层级靠字重区分:400 正文 → 600 标题 → 700 大标题 - **Do** 按钮、列表项、表单项保持统一的 3px 圆角 - **Do** 订单金额、优惠标签使用 600 字重突出 ### Don't: - **Don't** 使用大红色块铺满屏幕。红色是信号,不是背景 - **Don't** 在非交互元素上使用 Primary Red - **Don't** 卡片内嵌套卡片 - **Don't** 使用超过两种文本颜色(Primary + Secondary)在同一页面 - **Don't** 使用花哨的加载动画或页面切换效果 - **Don't** 使用 `border-left` 彩色强调条 - **Don't** 在小程序内引入 Web 字体,增加不必要的包体积 - **Don't** 在三层以上的背景色嵌套中迷失(页面灰 → 卡片白,仅此两层)