This design system moves beyond the utility of a standard coupon app to create an editorial-inspired experience that mirrors the precision and freshness of a premium Japanese convenience store. We reject the "budget app" aesthetic of cluttered grids and harsh borders. Instead, we embrace Soft Layering and Asymmetric Breathing Room.
The system treats every digital coupon as a curated object. By utilizing high-contrast typography scales and overlapping surface elements, we create a sense of tactile depth—as if the user is flipping through a beautifully designed, high-end food magazine rather than scrolling a list.
Our palette balances the "Store Green" (primary) for trust and freshness with a high-energy "Discount Orange" (secondary).
Explicit Instruction: Do not use 1px solid borders to define sections. Layout boundaries must be achieved through background shifts.
- Place a
surface-container-low(#f1f1ec) element on asurface(#f7f7f2) background to define a zone. - Use
surface-container-highest(#dcddd7) only for the most recessed decorative elements or secondary structural blocks.
Treat the UI as a physical stack of fine Japanese paper.
- Base:
surface(#f7f7f2) - Elevated Content: Nest a
surface-container-lowest(#ffffff) card inside asurface-container-low(#f1f1ec) wrapper to create a soft, natural lift.
To prevent a "flat" appearance, apply a subtle linear gradient to primary CTAs:
- From:
primary(#00694a) To:primary_dim(#005b40) at a 135-degree angle. - Glassmorphism: For floating navigation bars or category chips, use
surface(#f7f7f2) at 80% opacity with abackdrop-blurof 12px.
We utilize a dual-font system to balance Japanese legibility with modern editorial flair.
- Display & Headlines (Plus Jakarta Sans): Used for "Hero" moments—massive discount percentages or "Good Morning" greetings. These should feel bold and intentional.
- Example:
display-lg(3.5rem) for a "50% OFF" headline creates an immediate visual anchor.
- Example:
- Title & Body (Be Vietnam Pro / Noto Sans JP Fallback): Used for product names and descriptions. The high x-height ensures readability on small mobile screens.
- Hierarchy Tip: Use
title-lg(1.375rem) for product names to give them "breathing room" against thebody-sm(0.75rem) terms and conditions.
- Hierarchy Tip: Use
Traditional shadows are often too "heavy" for a fresh, clean brand. We prioritize Tonal Layering.
- The Layering Principle: Depth is achieved by stacking. A
surface-container-lowestcard sitting on asurface-container-highbackground provides all the separation needed without visual clutter. - Ambient Shadows: If a card must "float" (e.g., a high-value coupon), use a shadow with a blur of 24px and an opacity of 6%, using a tint of
on_surface(#2d2f2c). - The Ghost Border: If a boundary is strictly required for accessibility, use
outline_variant(#adada9) at 15% opacity. Never use a 100% opaque border.
- Primary: Roundedness
full(9999px). Background:primarygradient. Text:on_primary(#c7ffe2). - Secondary: Roundedness
full. Background:secondary_container(#ffc69a). Use for "Add to Cart" or "Save for Later." - Interactions: On press, scale the button down to 96% to provide tactile haptic feedback.
- Instead of standard boxes, use
md(1.5rem) rounded corners. - Active State:
tertiary_container(#00d9fd) withon_tertiary_containertext. - Inactive State:
surface-container-high(#e2e3dd) to blend into the background.
- Forbid Dividers: Do not use lines to separate product info. Use
spacing-4(1rem) of vertical white space. - The "Punch-Out" Detail: Use a
surfacecolored circle overlay on the left and right edges of asurface-container-lowestcard to mimic a physical perforated coupon.
- Style: Minimalist. No bottom line. Use a
surface-container-highestfill withnone(0px) borders andsm(0.5rem) rounded corners. - Error State: Change background to
error_container(#fb5151) at 20% opacity, rather than just changing the text color.
A custom progress bar for limited-time coupons using a gradient from secondary (Orange) to primary (Green), showing the "freshness" or availability of the deal.
- Do use asymmetrical margins. A larger left margin (e.g.,
spacing-8) for headlines creates an editorial look. - Do use
tertiary(#006576) for utility icons (Account, Settings) to keep them distinct from theprimaryshopping actions. - Do leverage the
xl(3rem) corner radius for hero imagery to make food photography feel soft and appetizing.
- Don't use pure black (#000000). Always use
on_surface(#2d2f2c) for text to maintain the "off-white" softness. - Don't use standard "Drop Shadows." They muddy the "Fresh Store" aesthetic. Use tonal shifts first.
- Don't cram icons. If an icon is used (Food, Drink), it must have at least
spacing-3(0.75rem) of clear space around it.