Ember Pill DESIGN.md
Bright, confident, and motivational. A high-contrast white-canvas mobile aesthetic anchored by a single saturated ember-orange brand. The system feels energetic without being loud, it earns the energy through one large brand-saturated hero card per screen, surrounded by quiet pearl-grey tonal cards that recede into the background.
Screen example: Ember Fitness.
Describe your app to generate screens with this visual style.
Read and download the full DESIGN.md

Color palette
- primary
#F37F46 - on-primary
#FFFFFF - surface
#FFFFFF - surface-alt
#F2F2F7 - on-surface
#000000 - on-surface-variant
#6C6C70 - border
#E5E5EA - success
#34C759 - error
#FF3B30 - warning
#FF9500 - accent-blue
#007AFF - accent-indigo
#5856D6 - accent-yellow
#F5C842
Typography
| Token | Font | Size | Weight | Line height |
|---|---|---|---|---|
| display-xl | Nunito Sans | 120px | 900 | 1 |
| display-lg | Nunito Sans | 64px | 900 | 1 |
| display-md | Nunito Sans | 48px | 900 | 1 |
| headline-lg | Nunito Sans | 30px | 700 | 36px |
| headline-md | Nunito Sans | 20px | 700 | 26px |
| headline-sm | Nunito Sans | 18px | 700 | 24px |
| numeral-stat | Nunito Sans | 30px | 900 | 1 |
| body-md | Nunito Sans | 14px | 600 | 20px |
| body-sm | Nunito Sans | 13px | 500 | 18px |
| label-md | Nunito Sans | 14px | 700 | 20px |
| label-uppercase | Nunito Sans | 10px | 800 | 14px |
| tab-label | Nunito Sans | 10px | 700 | 14px |
Corner radii
- sm
- 8px
- md
- 14px
- lg
- 16px
- xl
- 24px
- 2xl
- 28px
- 3xl
- 32px
- full
- 9999px
Spacing
- xs
- 4px
- sm
- 8px
- md
- 16px
- lg
- 24px
- xl
- 32px
- gutter
- 24px
- card-padding
- 20px
- section-gap
- 32px
The full DESIGN.md
Copy the source into your project. No sign-in required.
---
version: 1
name: Ember Pill Mobile
colors:
primary: "#F37F46"
on-primary: "#FFFFFF"
surface: "#FFFFFF"
surface-alt: "#F2F2F7"
on-surface: "#000000"
on-surface-variant: "#6C6C70"
border: "#E5E5EA"
success: "#34C759"
error: "#FF3B30"
warning: "#FF9500"
accent-blue: "#007AFF"
accent-indigo: "#5856D6"
accent-yellow: "#F5C842"
typography:
display-xl:
fontFamily: Nunito Sans
fontSize: 120px
fontWeight: 900
lineHeight: 1
letterSpacing: -0.04em
display-lg:
fontFamily: Nunito Sans
fontSize: 64px
fontWeight: 900
lineHeight: 1
letterSpacing: -0.02em
display-md:
fontFamily: Nunito Sans
fontSize: 48px
fontWeight: 900
lineHeight: 1
letterSpacing: -0.02em
headline-lg:
fontFamily: Nunito Sans
fontSize: 30px
fontWeight: 700
lineHeight: 36px
letterSpacing: -0.02em
headline-md:
fontFamily: Nunito Sans
fontSize: 20px
fontWeight: 700
lineHeight: 26px
letterSpacing: -0.01em
headline-sm:
fontFamily: Nunito Sans
fontSize: 18px
fontWeight: 700
lineHeight: 24px
letterSpacing: -0.01em
numeral-stat:
fontFamily: Nunito Sans
fontSize: 30px
fontWeight: 900
lineHeight: 1
letterSpacing: -0.02em
body-md:
fontFamily: Nunito Sans
fontSize: 14px
fontWeight: 600
lineHeight: 20px
letterSpacing: 0em
body-sm:
fontFamily: Nunito Sans
fontSize: 13px
fontWeight: 500
lineHeight: 18px
letterSpacing: 0em
label-md:
fontFamily: Nunito Sans
fontSize: 14px
fontWeight: 700
lineHeight: 20px
letterSpacing: 0em
label-uppercase:
fontFamily: Nunito Sans
fontSize: 10px
fontWeight: 800
lineHeight: 14px
letterSpacing: 0.08em
tab-label:
fontFamily: Nunito Sans
fontSize: 10px
fontWeight: 700
lineHeight: 14px
letterSpacing: 0.06em
rounded:
sm: 8px
md: 14px
lg: 16px
xl: 24px
2xl: 28px
3xl: 32px
full: 9999px
spacing:
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 32px
gutter: 24px
card-padding: 20px
section-gap: 32px
icons:
set: solar
default_variant: bold
active_variant: bold
stroke_weight: n/a (filled glyphs)
default_size: 24px
components:
card:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface}"
rounded: "{rounded.2xl}"
padding: "{spacing.card-padding}"
border: none
boxShadow: none
card-hero:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
rounded: "{rounded.3xl}"
padding: "{spacing.lg}"
border: none
boxShadow: "0 10px 25px -5px rgba(243,127,70,0.20)"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.headline-sm}"
rounded: "{rounded.full}"
paddingY: 20px
paddingX: 24px
border: none
boxShadow: "0 12px 30px -8px rgba(243,127,70,0.25)"
button-secondary:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface}"
typography: "{typography.headline-sm}"
rounded: "{rounded.full}"
paddingY: 20px
paddingX: 24px
border: none
boxShadow: none
button-text:
backgroundColor: transparent
textColor: "{colors.primary}"
typography: "{typography.label-md}"
rounded: "{rounded.full}"
paddingY: 0px
paddingX: 0px
gap: 4px
border: none
boxShadow: none
button-icon:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface}"
rounded: "{rounded.full}"
size: 40px
iconSize: 24px
border: none
boxShadow: none
input-text:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface}"
typography: "{typography.body-md}"
rounded: "{rounded.full}"
paddingX: 18px
paddingY: 14px
border: none
boxShadow: none
focusRingColor: "{colors.primary}"
chip:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface-variant}"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
paddingX: 12px
paddingY: 8px
border: none
boxShadow: none
chip-active:
backgroundColor: "{colors.surface}"
textColor: "{colors.on-surface}"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
paddingX: 12px
paddingY: 8px
border: none
boxShadow: "0 1px 2px rgba(0,0,0,0.06)"
badge-pill:
backgroundColor: "rgba(255,255,255,0.20)"
textColor: "{colors.on-primary}"
typography: "{typography.body-sm}"
rounded: "{rounded.full}"
paddingX: 12px
paddingY: 6px
border: none
boxShadow: none
badge-circle:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.label-uppercase}"
rounded: "{rounded.full}"
paddingX: 8px
paddingY: 2px
border: none
boxShadow: none
avatar:
backgroundColor: "{colors.surface-alt}"
rounded: "{rounded.full}"
size: 40px
border: none
boxShadow: none
list-row:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.on-surface}"
rounded: "{rounded.2xl}"
paddingX: 20px
paddingY: 16px
gap: 16px
border: none
boxShadow: none
progress-bar:
backgroundColor: "{colors.surface-alt}"
rounded: "{rounded.full}"
height: 8px
border: none
boxShadow: none
top-app-bar:
backgroundColor: "{colors.surface}"
textColor: "{colors.on-surface}"
height: 64px
paddingX: "{spacing.gutter}"
border: none
boxShadow: none
tab-bar:
backgroundColor: "rgba(255,255,255,0.90)"
rounded: "{rounded.full}"
paddingX: 6px
paddingY: 6px
borderColor: "rgba(229,229,234,0.50)"
borderWidth: 1px
boxShadow: "0 8px 30px rgba(0,0,0,0.12)"
tab-item-active:
backgroundColor: "{colors.surface-alt}"
textColor: "{colors.primary}"
typography: "{typography.tab-label}"
rounded: "{rounded.full}"
paddingY: 12px
iconSize: 24px
border: none
boxShadow: "inset 0 1px 2px rgba(0,0,0,0.04)"
tab-item-inactive:
backgroundColor: transparent
textColor: "{colors.on-surface-variant}"
typography: "{typography.tab-label}"
rounded: "{rounded.full}"
paddingY: 12px
iconSize: 24px
border: none
boxShadow: none
---
# Ember Pill Mobile
## Overview
**Bright, confident, and motivational.** A high-contrast white-canvas mobile aesthetic anchored by a single saturated ember-orange brand. The system feels energetic without being loud — it earns the energy through one large brand-saturated hero card per screen, surrounded by quiet pearl-grey tonal cards that recede into the background.
The personality is **modern, athletic, and rewarding**. Black ultra-bold numerals carry data; rounded-full pills carry actions and navigation; soft pearl-grey rectangles carry secondary stats. There are no hairline borders, no heavy shadows, no gradients on chrome — separation comes from tonal layering (white → pearl-grey → ember).
The aesthetic loves **roundness**: every corner is generously curved, every action is a fully-rounded pill, every icon sits inside a circular halo. The tab bar floats as a translucent capsule above the content. Numerals are oversized, ultra-black, and tightly tracked — the data is the hero.
## Colors
The palette runs in three tiers:
- **Chrome surfaces** — `{colors.surface}` pure white as the page canvas; `{colors.surface-alt}` (#F2F2F7) as the tonal pearl-grey for cards, chips, icon haloes, and inactive nav. `{colors.on-surface}` is true black for headlines and numerals; `{colors.on-surface-variant}` (#6C6C70) for body and metadata; `{colors.border}` (#E5E5EA) used only for the floating tab bar's hairline.
- **Brand** — `{colors.primary}` (#F37F46) is a warm saturated ember orange. It is the **only** brand color and appears in exactly two roles: (1) hero data cards (full-bleed primary fill with white text), and (2) accent dots — active tab icon tint, streak fire icon, primary CTA fill, focus rings, link text. Never use `{colors.primary}` as a body-card fill; reserve it for the screen's most important block.
- **Categorical icon tints** — within an icon halo (always a pearl-grey or white circle), individual icons may carry a categorical color: `{colors.accent-blue}` (#007AFF), `{colors.success}` (#34C759), `{colors.accent-indigo}` (#5856D6), `{colors.warning}` (#FF9500), `{colors.accent-yellow}` for badges. These never apply to text or surfaces — only to glyph fills inside their circular halos.
**Tonal recipe — soft success/warning chip:** for inline status pips, render `{typography.label-uppercase}` text in the semantic color over a `bg-{color}/10` capsule (e.g. `bg-green-500/10 text-green-600 rounded-full`).
**Boundaries:** ember orange never appears as a card border, divider, or hairline. White text only ever sits on the ember hero card or on photographic imagery. Categorical tints never bleed onto text or primary actions — those stay ember.
## Typography
Single-family system: **Nunito Sans** for everything. The expressive weight range (300–900) does all the work; no second display face is used for chrome.
The signature move is **Black 900** for numerals and the largest displays, paired with **Bold 700** for headings and **Semibold 600** for body. Letter-spacing is tightened progressively as size grows — `-0.04em` at the 120px streak counter, `-0.02em` at hero card numerals, settling to `0` at body. The `{typography.label-uppercase}` token tracks +0.08em and is reserved for kickers (eyebrow above a card title) and metadata captions inside hero cards.
Roles:
- `{typography.display-xl}` — single oversized hero counter (streak day count, big celebratory number). One per screen, max.
- `{typography.display-lg}` — primary hero card stat (the big number on the ember card).
- `{typography.headline-lg}` — primary screen title in the top app bar.
- `{typography.headline-md}` — section anchor or in-card title.
- `{typography.headline-sm}` — card subtitle or secondary action label.
- `{typography.numeral-stat}` — the bold number in a tonal stat tile.
- `{typography.body-md}` — paragraphs, descriptions, helper text.
- `{typography.label-md}` — button text, dense list metadata, link affordances.
- `{typography.label-uppercase}` — tracked-out kickers ("KCAL BURNED", "DURATION") inside stat tiles and over photographic hero panels.
- `{typography.tab-label}` — bottom-bar tab text, uppercase tracked.
**Composition recipe — stat tile:** square tonal card, icon-in-halo top-left, ellipsis or status pill top-right, `{typography.numeral-stat}` near the bottom, then `{typography.label-uppercase}` directly under the number in `{colors.on-surface-variant}`.
## Spacing & Layout
Comfortable but data-dense. Page gutter is `{spacing.gutter}` 24px. Vertical rhythm runs in 8px increments; section breaks are `{spacing.section-gap}` 32px. Cards have generous internal padding (`{spacing.card-padding}` 20px) so the oversized numerals breathe.
Stat tiles arrange in a 2-column grid with 12–16px gutters; the hero card spans both columns at the top. Content scrolls under a floating bottom tab bar that sits 24px above the safe area, requiring a `pb-32` to `pb-44` bottom buffer on scroll containers.
## Elevation & Depth
The system is **mostly flat with two intentional lifts**:
1. **The hero card** uses a soft brand-tinted shadow: `0 10px 25px -5px rgba(243,127,70,0.20)`. The ember card glows slightly off the white canvas.
2. **The floating tab bar** uses a soft neutral shadow: `0 8px 30px rgba(0,0,0,0.12)`, paired with a `backdrop-blur-xl` translucent fill (`bg-white/90`) and a hairline border (`{colors.border}/50`). This is the only chrome element with a border.
Everything else relies on **tonal layering**: white canvas → pearl-grey card → white circular icon halo *inside* the pearl card. No hairlines on cards, no shadows on stat tiles, no gradients.
## Shapes
Roundness is the dominant visual language. The radius scale climbs aggressively:
- `{rounded.md}` (14px) — small inline chips and grid cells.
- `{rounded.lg}` (16px) — bar chart segment tops, small inline tiles.
- `{rounded.xl}` (24px) — segmented control inner buttons.
- `{rounded.2xl}` (28px) — standard tonal stat cards.
- `{rounded.3xl}` (32px) — hero brand cards and large feature panels.
- `{rounded.full}` — every action, every nav, every icon halo, every status pip, every avatar.
Rule: **interactive elements are always `{rounded.full}`**. Containers are 28–32px. Inline data shapes are 14–16px. The shape language never goes sharp — `rounded-none` is forbidden.
## Components
### card
Pearl-grey tonal block. Borderless, shadowless, generously padded.
```html
<div class="bg-[#F2F2F7] rounded-[28px] p-5">
<div class="flex items-start justify-between">
<div class="p-2.5 bg-white rounded-full">
<iconify-icon icon="solar:[icon-name]-bold" class="size-6 text-[#F37F46]"></iconify-icon>
</div>
<iconify-icon icon="solar:menu-dots-bold" class="size-5 text-[#6C6C70]/50"></iconify-icon>
</div>
<div class="mt-6">
<div class="text-3xl font-black text-black tracking-tight">[Value]</div>
<div class="text-sm font-bold text-[#6C6C70]">[Label]</div>
</div>
</div>
```
### card-hero (signature)
The screen's loudest block. Ember fill, white text, oversized numeral, decorative oversized icon bleeding off the top-right at 20% opacity, plus a translucent inline pill at the bottom.
```html
<div class="bg-[#F37F46] rounded-[32px] p-6 text-white relative overflow-hidden shadow-[0_10px_25px_-5px_rgba(243,127,70,0.20)]">
<div class="absolute top-0 right-0 p-6 opacity-20">
<iconify-icon icon="solar:[icon-name]-bold" class="size-24 translate-x-4 -translate-y-4"></iconify-icon>
</div>
<div class="relative z-10 flex flex-col gap-4">
<div class="flex items-center gap-2 text-white/80 font-semibold">
<iconify-icon icon="solar:[icon-name]-bold" class="size-5"></iconify-icon>
<span>[Label]</span>
</div>
<div>
<span class="text-[64px] leading-none font-black tracking-tight">[Value]</span>
<span class="text-xl font-bold ml-1 opacity-80">[unit]</span>
</div>
<div class="inline-flex items-center gap-1 bg-white/20 backdrop-blur-md px-3 py-1.5 rounded-full self-start text-sm font-semibold">
<iconify-icon icon="solar:[icon-name]-bold" class="size-4"></iconify-icon>
<span>[Trend label]</span>
</div>
</div>
</div>
```
### button-primary
Full-rounded ember pill with brand-tinted glow shadow and ultra-bold text.
```html
<button class="w-full bg-[#F37F46] text-white py-5 rounded-full font-black text-lg shadow-[0_12px_30px_-8px_rgba(243,127,70,0.25)] active:scale-95 transition-all flex items-center justify-center gap-3">
<iconify-icon icon="solar:[icon-name]-bold" class="size-6"></iconify-icon>
[Action]
</button>
```
### button-secondary
Pearl-grey pill, no shadow.
```html
<button class="w-full bg-[#F2F2F7] text-black py-5 rounded-full font-bold text-lg active:scale-95 transition-all">
[Action]
</button>
```
### button-icon
Circular pearl-grey halo, icon centered.
```html
<button class="size-10 rounded-full bg-[#F2F2F7] text-black flex items-center justify-center active:scale-90 transition-transform">
<iconify-icon icon="solar:[icon-name]-linear" class="size-6"></iconify-icon>
</button>
```
### chip / chip-active (segmented control)
Used as a Week/Month/Year segmented control. The container is a pearl-grey pill with inner padding; the active segment lifts to white with a tiny shadow.
```html
<div class="flex items-center justify-between bg-[#F2F2F7]/50 p-1 rounded-2xl">
<button class="flex-1 py-2 rounded-xl bg-white shadow-sm text-sm font-bold text-black">[Active]</button>
<button class="flex-1 py-2 rounded-xl text-sm font-semibold text-[#6C6C70]">[Inactive]</button>
</div>
```
### badge-pill (status pip on hero card)
Translucent white pill on top of the ember hero, with leading icon.
```html
<div class="inline-flex items-center gap-1 bg-white/20 backdrop-blur-md px-3 py-1.5 rounded-full text-sm font-semibold text-white">
<iconify-icon icon="solar:[icon-name]-bold" class="size-4"></iconify-icon>
<span>[Label]</span>
</div>
```
### badge-circle (compact percent pip)
Tiny tinted capsule for inline metrics:
```html
<div class="text-[10px] font-black px-2 py-0.5 bg-green-500/10 text-green-600 rounded-full">[Value]%</div>
```
### avatar
```html
<div class="size-10 rounded-full bg-[#F2F2F7] overflow-hidden">
<img alt="[name]" src="[url]" class="w-full h-full object-cover" />
</div>
```
### list-row (icon + stat + chevron)
```html
<div class="bg-[#F2F2F7] rounded-[28px] p-5 flex items-center justify-between">
<div class="flex items-center gap-4">
<div class="p-2 bg-white rounded-full">
<iconify-icon icon="solar:[icon-name]-bold" class="size-5 text-[#34C759]"></iconify-icon>
</div>
<div>
<div class="text-xl font-black text-black tracking-tight leading-none">[Value]</div>
<div class="text-[10px] font-extrabold text-[#6C6C70] uppercase tracking-wide">[Label]</div>
</div>
</div>
<iconify-icon icon="solar:alt-arrow-right-linear" class="size-6 text-[#6C6C70]/30"></iconify-icon>
</div>
```
### top-app-bar
Borderless, shadowless. Optional centered title with `{typography.label-uppercase}` kicker; circular icon button left, avatar right.
```html
<div class="flex items-center justify-between px-6 pt-12 pb-4">
<button class="size-10 rounded-full bg-[#F2F2F7] flex items-center justify-center active:scale-90">
<iconify-icon icon="solar:arrow-left-linear" class="size-6"></iconify-icon>
</button>
<div class="flex flex-col items-center">
<h1 class="text-xl font-bold tracking-tight text-black">[Title]</h1>
<p class="text-[10px] font-bold text-[#6C6C70] uppercase tracking-wider">[Kicker]</p>
</div>
<div class="size-10 rounded-full bg-[#F2F2F7] overflow-hidden">
<img alt="[name]" src="[url]" class="w-full h-full object-cover" />
</div>
</div>
```
### tab-bar (signature — floating glass capsule)
Translucent white pill, floats above content with backdrop-blur, hairline border, soft shadow. Active tab gets an inset pearl-grey fill behind ember-tinted glyph.
```html
<div class="absolute bottom-6 left-1/2 -translate-x-1/2 w-[90%] max-w-sm z-50">
<div class="bg-white/90 backdrop-blur-xl border border-[#E5E5EA]/50 rounded-full shadow-[0_8px_30px_rgb(0,0,0,0.12)] p-1.5 flex items-center justify-between">
<button class="flex-1 flex flex-col items-center justify-center py-3 bg-[#F2F2F7] rounded-full text-[#F37F46] shadow-inner active:scale-95 relative overflow-hidden">
<div class="absolute inset-0 bg-[#F37F46]/10 rounded-full"></div>
<iconify-icon icon="solar:[icon-name]-bold" class="size-6 mb-0.5"></iconify-icon>
<span class="text-[10px] font-bold tracking-wide uppercase">[Active]</span>
</button>
<button class="flex-1 flex flex-col items-center justify-center py-3 rounded-full text-[#6C6C70] active:scale-95">
<iconify-icon icon="solar:[icon-name]-bold" class="size-6 mb-0.5"></iconify-icon>
<span class="text-[10px] font-bold tracking-wide uppercase">[Inactive]</span>
</button>
</div>
</div>
```
**Composition recipe — chart bars / activity grid:** rounded-top bars (`rounded-t-lg`) layered as stacked translucent ember tints (`bg-primary/20`, `bg-primary/40`, `bg-primary` for the active day) inside a pearl-grey background column. Heatmap cells are `aspect-square rounded-lg` filled either `bg-primary` (active, with a small `shadow-primary/20`) or `bg-muted` (rest day). The currently-selected cell adds `ring-2 ring-primary ring-offset-2`.
## Iconography
**Solar icon set, `bold` (filled) variant** is the default for almost every icon — solar's bold glyphs match the chunky black-numeral typography. The `linear` (stroked) variant appears only for navigation chrome that needs to feel quieter — back arrow in the top app bar, chevron-right at the end of a list row.
Icons sit in **circular haloes** by convention: `bg-white rounded-full p-2` to `p-2.5` inside a pearl-grey card, or `bg-[#F2F2F7] rounded-full` as a standalone icon button. The glyph carries categorical color (orange/blue/green/purple/yellow); the halo stays neutral.
Default icon size is 24px (`size-6`); 20px (`size-5`) inside compact list-row haloes; 16px (`size-4`) inside inline pill badges; 96px (`size-24`) for decorative bleed-off icons on the hero card. **Never** mix `bold` and `linear` variants within a single component.
## Illustration & Imagery
**Note**: only one photographic source image is present in the HTML (a sweeping landscape used as a share-card background). The avatar URL is a placeholder portrait, not stylistic content. This section captures the photographic treatment from the share card and infers the supporting rules.
- **Style / Technique**: vivid, high-saturation landscape photography with pronounced golden-hour or blue-hour lighting. Wide-angle composition with strong depth — foreground texture leading the eye toward a luminous horizon. The grade leans punchy and slightly warm, with crisp shadows and saturated naturals (vivid greens, amber skies, cool blue clouds). Documentary in feel, but selected for emotional uplift.
- **Palette**: cinematic naturals — saturated green, golden amber, sky blue, with deep shadow tones. Photographs may share the canvas with the ember brand color, so prefer images whose warm highlights harmonize with `{colors.primary}` (sunsets, sunrises, autumn tones, golden grass) over cool-only scenes.
- **Edge treatment**: full-bleed within a heavily rounded container (`{rounded.3xl}` or larger). No outline, no internal frame.
- **Shading & light**: photographic; preserve natural dynamic range. Apply a top-and-bottom black gradient overlay (`bg-gradient-to-t from-black/60 via-transparent to-black/30`) to ensure white text legibility regardless of source brightness.
- **Composition & framing**: prefer 4:5 aspect (`aspect-[4/5]`), subject horizon centered or in the lower third, generous sky for typography overlays. Avoid centered close-up subjects — the chrome (kicker top-left, stats bottom-left, accent ornament bottom-right) needs perimeter space.
- **Background within the illustration**: the photo IS the background; no further treatment.
- **Container styling**: `rounded-[2.5rem]` (40px), no border, soft brand-tinted shadow `shadow-2xl shadow-primary/10`. Background fallback `bg-muted` while the image loads.
- **CSS treatment on the `<img>`**: `absolute inset-0 w-full h-full object-cover`. No mix-blend-mode, no opacity reduction, no filter. The full-color photograph is the point.
- **Box-shadow on the frame**: `0 25px 50px -12px rgba(243,127,70,0.10)` (the `shadow-2xl shadow-primary/10` Tailwind combo). The frame floats just barely off the canvas with a brand-tinted lift.
- **Aspect ratio rule**: 4:5 is canonical for share / hero photo cards. Avatars are 1:1 circular at 40px. Inline thumbnails (if needed) follow the source ratio in a `{rounded.2xl}` frame.
- **Anti-references**: NOT illustrated, NOT 3D rendered, NOT flat vector, NOT desaturated/muted, NOT moody/dark, NOT studio-lit product photography, NOT abstract patterns, NOT line-art.
- **Style recipe prompt**: *"A vivid, golden-hour or blue-hour landscape photograph of [SUBJECT]. Wide-angle, deep foreground-to-horizon depth, saturated naturals with warm amber highlights and crisp shadows. Cinematic uplifting mood, clean horizon line in the lower third, generous sky above. Slight contrast boost, not over-graded. NOT illustrated, NOT 3D, NOT flat vector, NOT muted, NOT moody."*
When a brief calls for an avatar without a real portrait, fall back to a colored initial circle: `size-10 rounded-full bg-{colors.surface-alt}` with the initial in `{typography.label-md}` 700 weight, `{colors.on-surface}`.
## Hierarchy & Emphasis
- **The biggest, blackest numeral wins.** Data is the loudest thing on every screen.
- **Saturation is rationed.** Exactly one ember-fill block per screen (the hero card, primary CTA, or active state — never multiple at once except CTA + active tab, which are visually separated).
- **Pearl-grey recedes.** Stat tiles, segmented controls, secondary buttons, and inactive nav all share the same pearl, deliberately uniform so the ember accent reads instantly.
- **Categorical icon color whispers.** Categorical tints (blue/green/purple/yellow) appear *only* inside tiny circular haloes — they identify a metric, never demand attention.
- **Metadata uppercases and tracks out.** Captions like "KCAL BURNED" sit at 10px, weight 800, +0.08em.
## Distinctive Details
1. **The ember hero card with bleeding decorative icon.** A 96px solar:bold glyph at 20% opacity, translated `+16px / -16px`, anchors the top-right corner and bleeds off-canvas. This is the signature visual move.
2. **Icons live in white circular haloes inside pearl cards.** Never bare on the surface — always `bg-white rounded-full p-2.5`. The double-radius (round halo inside round card) is the aesthetic's calling card.
3. **The floating glass tab capsule.** Translucent `white/90`, `backdrop-blur-xl`, hairline border at `border/50`, soft drop shadow. The active tab is an inset pearl pill with ember glyph — no underline, no dot.
## Do's and Don'ts
### Do
- Use `{colors.primary}` exactly once per screen as a hero fill; let it dominate.
- Wrap every icon-on-card in a white circular halo.
- Keep all interactive elements `{rounded.full}` — buttons, avatars, chips, tab items.
- Use Black 900 weight for numerals and ultra-large displays; tighten letter-spacing as size grows.
- Render kickers and metadata as 10px uppercase tracked-out labels.
- Float the tab bar above content with backdrop-blur translucency.
- Layer tonal transparencies (`primary/20`, `primary/40`, `primary`) for chart fills and progress indicators.
### Don't
- Don't apply `{colors.primary}` as a background to ordinary cards — it's reserved for the hero block.
- Don't add hairline borders to cards or stat tiles; rely on tonal contrast.
- Don't use `linear` solar variants for content icons — keep `bold` consistent; `linear` is only for nav chrome (back arrow, chevron).
- Don't introduce a second display typeface — Nunito Sans 300–900 covers everything.
- Don't render shadows on tonal pearl cards; only the ember hero card and the floating tab bar carry shadows.
- Don't use bright photography subjects with clashing color casts (cool-only blues, magenta neons) — prefer warm-harmonizing landscapes.
- Don't square off corners; `rounded-none` is forbidden in this aesthetic.
- Don't stack multiple ember-saturated elements adjacent to each other — let the ember breathe against pearl and white.
These files follow the Google Labs format with Sleek extensions. Learn how to load DESIGN.md in your coding agent.





