{ "schemaVersion": 2, "generatedAt": "2026-05-11T14:00:00+08:00", "title": "Design System: AI零售柜", "extensions": { "colorMeta": { "primary-yellow": { "role": "primary", "displayName": "Brand Yellow", "canonical": "#FFC107", "tonalRamp": [ "#FFF8E1", "#FFECB3", "#FFE082", "#FFD54F", "#FFC107", "#FFB300", "#FFA000", "#FF8F00" ] }, "neutral-ink": { "role": "neutral", "displayName": "Ink", "canonical": "#2C2C2C", "tonalRamp": [ "#0A0A0A", "#1A1A1A", "#2C2C2C", "#404040", "#555555", "#8C8C8C", "#BDBDBD", "#EEEEEE" ] }, "neutral-cream": { "role": "neutral", "displayName": "Cream", "canonical": "#FAFAFA", "tonalRamp": [ "#E8E8E8", "#EEEEEE", "#F0F0F0", "#F5F5F5", "#FAFAFA", "#FCFCFC", "#FEFEFE", "#FFFFFF" ] } }, "shadows": [ { "name": "ambient", "value": "0 2rpx 8rpx rgba(0,0,0,0.04)", "purpose": "Subtle card grounding at rest." }, { "name": "low", "value": "0 4rpx 16rpx rgba(0,0,0,0.06)", "purpose": "Default card elevation above cream background." }, { "name": "mid", "value": "0 8rpx 32rpx rgba(0,0,0,0.08)", "purpose": "Elevated surfaces: login card, active modal." }, { "name": "brand-glow", "value": "0 8rpx 24rpx rgba(255,193,7,0.25)", "purpose": "Scan button halo. The only colored shadow." } ], "motion": [ { "name": "ease-fast", "value": "cubic-bezier(0.25, 0.1, 0.25, 1)", "purpose": "Micro-interactions, button state changes (150ms)." }, { "name": "ease-standard", "value": "cubic-bezier(0.42, 0, 0.58, 1)", "purpose": "Page transitions, card entrances (300ms)." }, { "name": "ease-enter", "value": "cubic-bezier(0, 0, 0.2, 1)", "purpose": "Slide-up entrances for modals and drawers." } ], "breakpoints": [] }, "components": [ { "name": "Scan Button", "kind": "button", "refersTo": "button-primary", "description": "The hero button on the home page. 400rpx circle with Brand Yellow gradient, pulsing ripple, and brand-glow shadow.", "html": "", "css": ".ds-btn-scan { width: 400rpx; height: 400rpx; border-radius: 50%; background: linear-gradient(135deg, #FFE082, #FFC107); border: none; box-shadow: 0 8rpx 24rpx rgba(255,193,7,0.25); display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer; transition: transform 0.3s cubic-bezier(0.25,0.1,0.25,1), box-shadow 0.3s ease; } .ds-btn-scan:active { transform: scale(0.95); box-shadow: 0 4rpx 16rpx rgba(255,193,7,0.3); } .ds-btn-scan-icon { font-size: 80rpx; margin-bottom: 4rpx; } .ds-btn-scan-text { font-size: 40rpx; font-weight: 600; color: #1A1A1A; letter-spacing: 4rpx; }" }, { "name": "Primary Action Button", "kind": "button", "refersTo": "button-primary", "description": "Full-width pill button for primary actions like '开门购物' or '立即开通'.", "html": "", "css": ".ds-btn-primary { width: 100%; height: 108rpx; background: linear-gradient(135deg, #FFD700, #FFC107, #FFB300); border: none; border-radius: 54rpx; color: #1A1A1A; font-size: 36rpx; font-weight: 600; letter-spacing: 8rpx; box-shadow: 0 12rpx 40rpx rgba(255,193,7,0.35), 0 4rpx 16rpx rgba(255,193,7,0.2); transition: transform 0.3s cubic-bezier(0.25,0.1,0.25,1), box-shadow 0.3s ease; } .ds-btn-primary:active { transform: translateY(-4rpx) scale(1.02); box-shadow: 0 16rpx 48rpx rgba(255,193,7,0.45); }" }, { "name": "Ghost Button", "kind": "button", "refersTo": "button-ghost", "description": "Secondary action alongside primary. White fill, light border, used for '返回' and cancel actions.", "html": "", "css": ".ds-btn-ghost { background: #FFFFFF; border: 2rpx solid #EEEEEE; border-radius: 32rpx; color: #8C8C8C; font-size: 28rpx; font-weight: 500; padding: 16rpx 32rpx; transition: background 0.15s ease; } .ds-btn-ghost:active { background: #FAFAFA; }" }, { "name": "Menu Item", "kind": "custom", "refersTo": "menu-item", "description": "List row with icon, label, optional badge, and right-facing chevron. Used in 我的 and settings screens.", "html": "
", "css": ".ds-menu-item { display: flex; align-items: center; padding: 24rpx 32rpx; background: #FFFFFF; border-bottom: 1rpx solid #EEEEEE; transition: background 0.15s ease; } .ds-menu-item:active { background: #FAFAFA; } .ds-menu-item:last-child { border-bottom: none; } .ds-menu-icon { width: 40rpx; height: 40rpx; margin-right: 24rpx; } .ds-menu-label { flex: 1; font-size: 28rpx; color: #2C2C2C; } .ds-menu-arrow { width: 16rpx; height: 16rpx; border-top: 2rpx solid #BDBDBD; border-right: 2rpx solid #BDBDBD; transform: rotate(45deg); }" }, { "name": "Status Card", "kind": "card", "refersTo": "card-default", "description": "Card with status icon, title, and description. Used in shopping flow for door-open, shopping-done, and error states.", "html": "