---
name: AI零售柜
description: AI智能零售柜小程序 — 扫码开门、即拿即走、自动扣款
colors:
  primary-yellow: "#FFC107"
  primary-yellow-light: "#FFE082"
  primary-yellow-dark: "#FFA000"
  primary-yellow-bg: "#FFF8E1"
  neutral-ink: "#2C2C2C"
  neutral-ash: "#8C8C8C"
  neutral-cloud: "#BDBDBD"
  neutral-white: "#FFFFFF"
  neutral-cream: "#FAFAFA"
  neutral-mist: "#F5F5F5"
  neutral-border: "#EEEEEE"
  success-green: "#4CAF50"
  warning-orange: "#FF9800"
  error-red: "#F44336"
  info-blue: "#2196F3"
typography:
  body:
    fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', system-ui, sans-serif"
    fontSize: "28rpx"
    fontWeight: 400
    lineHeight: 1.6
rounded:
  sm: "8rpx"
  md: "16rpx"
  lg: "24rpx"
  xl: "32rpx"
  full: "50%"
spacing:
  xs: "8rpx"
  sm: "16rpx"
  md: "24rpx"
  lg: "32rpx"
  xl: "48rpx"
  xxl: "64rpx"
components:
  button-primary:
    backgroundColor: "{colors.primary-yellow}"
    textColor: "#1A1A1A"
    rounded: "54rpx"
    padding: "24rpx 0"
    height: "108rpx"
  button-primary-hover:
    backgroundColor: "{colors.primary-yellow-dark}"
  button-ghost:
    backgroundColor: "{colors.neutral-white}"
    textColor: "{colors.neutral-ash}"
    rounded: "{rounded.xl}"
    padding: "16rpx 32rpx"
  card-default:
    backgroundColor: "{colors.neutral-white}"
    rounded: "{rounded.lg}"
  input-field:
    backgroundColor: "{colors.neutral-white}"
    textColor: "{colors.neutral-ink}"
    rounded: "{rounded.sm}"
  chip-tag:
    backgroundColor: "rgba(255,255,255,0.9)"
    textColor: "#555555"
    rounded: "40rpx"
---

# Design System: AI零售柜

## 1. Overview

**Creative North Star: "The Yellow Mark"**

AI零售柜 is a consumer mini-program where the yellow accent works like a brand marker — instantly recognizable, like 美团's yellow or 闲鱼's yellow. The surface is clean and white, the yellow appears with purpose: a scan button, a selected state, a price. Its presence signals action; its absence signals rest.

The system is built on restraint, not because less is more, but because every element must justify itself against the physical context: a user standing in front of a cabinet under bright office lights, phone in one hand, products in the other. Speed reads as intelligence. Friction reads as cheapness.

The aesthetic rejects the busy, promo-heavy energy of discount retail mini-programs. No banner carousels, no red flash-sale tags, no cluttered grids of identically-sized product cards. Instead: generous negative space, deliberate typography, one shade of yellow doing one job at a time.

**Key Characteristics:**
- Yellow as brand marker, not surface decoration
- White-dominant backgrounds with warm tint
- Precision over abundance — every pixel is intentional
- Fast transitions that feel mechanical, not theatrical
- Physical-digital coherence: the phone UI mirrors the cabinet interaction

## 2. Colors

The palette is built around a single committed yellow, supported by warm-tinted neutrals and four functional signal colors. This is a **Committed** strategy: yellow carries 30-40% of the visual weight (primary buttons, brand marks, active states), while the rest of the surface stays in neutral territory.

### Primary
- **Brand Yellow** (#FFC107): The only accent. Used on the scan button, primary action buttons, active states, selected indicators, and the brand mark. Never used as a background fill on text-heavy surfaces; its job is to signal, not to decorate.
- **Yellow Light** (#FFE082): Transitions and subtle fills only. The gradient midpoint on the scan button.
- **Yellow Dark** (#FFA000): Hover/press states on yellow buttons, link text.
- **Yellow Background** (#FFF8E1): Lightest tint, used for highlight overlays and the top of page gradients.

### Neutral
- **Ink** (#2C2C2C): Primary text. Not pure black; slightly warm.
- **Ash** (#8C8C8C): Secondary text, descriptions, meta information.
- **Cloud** (#BDBDBD): Tertiary text, placeholder content, disabled states.
- **White** (#FFFFFF): Card and surface backgrounds.
- **Cream** (#FAFAFA): Page backgrounds, section dividers.
- **Mist** (#F5F5F5): Depressed surfaces, skeleton loading states.
- **Border** (#EEEEEE): Dividers, card borders, input strokes at rest.

### Functional
- **Green** (#4CAF50): Success, completed orders, payment confirmed.
- **Orange** (#FF9800): Warnings, pending status, attention-needed states.
- **Red** (#F44336): Errors, failed payments, expired states.
- **Blue** (#2196F3): Informational highlights, expand-tip text, links.

### Named Rules
**The One Yellow Rule.** Brand Yellow appears on at most 30-40% of any given screen. It is the brand marker, not the brand blanket. When everything is yellow, nothing is.

**The White Canvas Rule.** White (#FFFFFF) is the default card surface; Cream (#FAFAFA) is the default page background. The difference is subtle but structural — cards float on cream; content that belongs to the page sits directly on cream.

## 3. Typography

**Primary Font:** PingFang SC (with system fallback: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', system-ui, sans-serif)

**Character:** A single sans-serif stack optimized for Chinese text on small screens. PingFang SC's generous x-height and clean geometry work at the small sizes required by mini-program interfaces. No display face needed — this is a utility, not a magazine.

### Hierarchy
- **Page Title** (700, 48rpx, 1.2): Page-level headers like "AI零售柜" brand mark or modal titles. Used sparingly, 1-2 per screen.
- **Section Title** (600, 32-36rpx, 1.3): Card headers, section labels, status messages. The workhorse heading.
- **Body** (400-500, 28rpx, 1.6): Product names, prices, menu labels, form content. The default size for most text.
- **Caption** (400, 22-24rpx, 1.5): Secondary metadata, timestamps, helper text, version info.
- **Button** (600, 28-36rpx, 1.0): Action labels in buttons. Letter-spacing of 2-8rpx on primary CTAs for presence.

### Named Rules
**The Scale Jump Rule.** Adjacent text sizes differ by at least 1.25x. No 28rpx next to 30rpx; the scale skips intentionally: 22 → 24 → 28 → 32 → 36 → 48 → 56.

## 4. Elevation

This system uses intentional, restrained shadows. Surfaces are flat at rest; elevation is a response to state — a button lifts on hover, a card lifts when interactive. The shadow vocabulary is minimal: four levels from ambient to prominent.

Shadows are never decorative. They exist to communicate: "this is tappable," "this is above," "this is important right now."

### Shadow Vocabulary
- **Ambient** (`0 2rpx 8rpx rgba(0,0,0,0.04)`): Subtle grounding for cards at rest. Barely visible; more felt than seen.
- **Low** (`0 4rpx 16rpx rgba(0,0,0,0.06)`): Default card elevation. Separates a card from the cream background.
- **Mid** (`0 8rpx 32rpx rgba(0,0,0,0.08)`): Elevated surfaces like the login card or active modal.
- **Brand Glow** (`0 8rpx 24rpx rgba(255,193,7,0.25)`): The scan button's halo. The only colored shadow; reserved for the primary CTA.

### Named Rules
**The Shadow Has a Job Rule.** Never use a shadow without answering: what does this elevation communicate? If the answer is "looks nice," remove it.

**The Flat-By-Default Rule.** Menu items, list rows, and non-interactive surfaces carry no shadow. Shadow = affordance, not decoration.

## 5. Components

### Buttons
- **Shape:** Fully rounded pill (54rpx radius) for primary actions; 32rpx for secondary.
- **Primary:** Brand Yellow fill (#FFC107), near-black text (#1A1A1A), Brand Glow shadow. Used for the scan button, "开门购物," and the payment confirmation button. Height: 108rpx for the scan/home buttons, 88rpx for inline actions.
- **Hover:** Darkens to Yellow Dark (#FFA000), lifts 4rpx with expanded shadow. 300ms ease-out.
- **Ghost:** White fill, 2rpx Border (#EEEEEE) stroke, Ash text. Used for "返回" and secondary actions alongside primary buttons. Active state: background shifts to Cream.

### Cards
- **Corner Style:** 24rpx radius (`$radius-lg`). Consistent across all card types.
- **Background:** White (#FFFFFF) with Ambient or Low shadow depending on context.
- **Internal Padding:** 32rpx (`$spacing-lg`) as default; varies to 24rpx for compact info cards.
- **Border:** Cards use shadow for separation, not borders. The only bordered surface is the login card (1rpx solid rgba yellow tint).

### Inputs & Fields
- **Style:** White fill, 2rpx Border stroke at rest, 2rpx Brand Yellow or Blue on focus.
- **Focus:** Border-color shift to #1890FF or Brand Yellow. No glow; the border transition is enough.
- **Error:** Border shifts to Error Red. Error text in Red below the field.

### Navigation
- **Tab bar:** Text labels with icon above. Active tab in Brand Yellow, inactive in Cloud (#BDBDBD).
- **Door tabs (left/right):** Horizonally split, active tab underlined with 4rpx Brand Yellow bar.
- **Page header:** Centered title in Body weight, optional back arrow on left.

### Chips & Tags
- **Style:** White background (90% opacity), 1rpx border with yellow tint, 40rpx rounded pill.
- **Usage:** Feature tags on login page (秒级开门, 安全支付, AI识别).
- **Badge:** Error Red fill, white text, 32rpx height, 16rpx radius. Used for coupon counts and notification dots.

### Status Indicators
- **Success:** Green circle with white checkmark, 56rpx diameter.
- **Pending:** Orange circle with clock or spinner.
- **Error:** Red circle with cross mark.
- **Each has a 4rpx 12rpx colored shadow matching its fill.**

## 6. Do's and Don'ts

### Do:
- **Do** use Brand Yellow (#FFC107) exclusively for interactive elements: buttons, selected states, brand marks, and active indicators.
- **Do** use White (#FFFFFF) for cards and Cream (#FAFAFA) for page backgrounds. The distinction creates structure without borders.
- **Do** maintain at least 32rpx of breathing room around primary CTAs. The scan button needs space to own the center of the screen.
- **Do** use the Shadow vocabulary intentionally: Ambient for at-rest cards, Brand Glow only for the primary CTA.
- **Do** cap body text at 65-75 characters per line on the widest screen.

### Don't:
- **Don't** use Brand Yellow as a background fill on text-heavy surfaces. Yellow's job is signaling action, not hosting reading.
- **Don't** introduce a second accent color. Green, orange, red, and blue are functional signals; they are not decorative accents.
- **Don't** use nested cards. A card inside a card is always wrong.
- **Don't** use side-stripe borders (border-left/border-right > 1px) as colored accents. Use full borders, background tints, or nothing.
- **Don't** use gradient text (background-clip: text). Solid colors only.
- **Don't** use glassmorphism, decorative blurs, or translucent overlays as a default aesthetic.
- **Don't** use em dashes in copy. Commas, colons, and periods only.
- **Don't** use the hero-metric template (big number + small label + supporting stats + gradient accent).
- **Don't** let the interface feel like a discount retail mini-program: no red flash-sale badges, no banner carousels, no cluttered grids of same-sized product cards.
