Updated
Fitness
Fitness screens for an iOS workout app, light and dark: a daily dashboard with activity rings, an exercise library, analytics and progress charts, a profile and a workout player. Every control that has a component is an instance of it, so one token change moves every screen.
Updated
On this page
Preview
Dashboard, Library, Analytics, Profile, Progress and Exercise, each in Light and Dark. Five screens carry the tab bar, and Exercise is a full screen player without one.












| Screen | What it shows | Built from |
|---|---|---|
| Dashboard | The day: a week strip, activity rings, heart rate, sleep and the next workout | Avatar, Button, Button / Overlay (Button), Sparkline (Chart), Navigation |
| Library | Programs and exercises, filtered by category | Top Bar, Chip, Card, Badge / Overlay (Badge), Section Header, Navigation |
| Analytics | Training time for a period and weight against a target | Top Bar, Segmented Control, Chart / Bar - Stacked (Chart), Navigation |
| Profile | Totals, achievements and account settings | Top Bar, Avatar, Quick Action Button, Section Header, List, Toggle, Navigation |
| Progress | Weekly activity as a bar chart and the personal records behind it | Top Bar, Segmented Control, Badge, Section Header, Button, Navigation |
| Exercise | A workout in progress with a timer, set, reps, weight and player controls | Top Bar, Button |
Which components build the Fitness screens?
Navigation, Button and Segmented Control carry the structure, Card and Chip carry the Library, and five Photo / Gym slots hold photographs.
A fitness app is a tab bar, a stack of cards and charts, and a few controls that change the period or the exercise. On the light frames 145 instances sit on each row of the Fitness page: 87 are Appetite UI components, 5 are photo slots and 53 are Lucide icons with 26 different names. The dark row holds the same instances, so every number below is per row.
| Component | Per row | Where |
|---|---|---|
| Navigation | 25 | Five tab bars with four labels each, on every screen but Exercise |
| Button | 12 | Header actions, See all and View all links, and the player controls on Exercise |
| Segmented Control | 8 | Analytics and Progress, one control and three selectors each |
| Status Bar | 6 | Every screen |
| Chip | 5 | Library |
| Card | 5 | Library, one vertical and four horizontal |
| Top Bar | 5 | Every screen but Dashboard |
| Quick Action Button | 4 | Profile, the achievements |
| Section Header | 4 | Library, Profile twice, Progress |
| List | 3 | Profile, the settings stack |
| Chart / Bar - Stacked (Chart) | 3 | Analytics, the chart, its Trend Chip and its grid |
| Badge | 2 | Library, the Featured overlay, and Progress |
| Avatar | 2 | Dashboard, Profile |
| Sparkline (Chart) | 1 | Dashboard |
| Button / Overlay (Button) | 1 | Dashboard, the play button on the Up next card |
| Toggle | 1 | Profile, on the Notifications row |
5 Photo / Gym slot instances hold photographs, each one named so it can be found and replaced.
Counted on October 2, 2026 with a Plugin API script over the six light frames of the Fitness page in the Appetite UI Figma file. Nested and hidden instances count, parts such as navigation labels are grouped with their family, and an icon is an instance named in lowercase.
Which parts of the Fitness screens are drawn by hand?
Analytics places a Chart component. The activity rings, the week strip, the Progress bars and the weight rail are drawn on the frame.
Analytics places Chart / Bar - Stacked with its Trend Chip, so a chart restyle there follows the component. The table above lists one bar chart and no ring or slider, so the three activity rings and the week strip on Dashboard, the seven bars on Progress and the weight rail on Analytics are drawn on the frame. They resolve through variables like everything else, and they are where a chart or progress component would plug in.
How do the Fitness screens switch between light and dark?
Each frame pins Color Tokens to Light or Dark and Platform to ios-md, so the dark row is the light layout with one mode changed.
Nothing is left to inherit: a frame dropped into another file arrives in the theme it was drawn in. A frame set to Dark resolves every token against the Dark mode of Color Tokens, so the dark row is the same layout with the other values.
The six light frames hold 422 solid fills and strokes bound to 47 different variables, and none is unbound. The activity rings, the week strip and the bars resolve through the same variables, among them the three chart/series colors on Analytics. Nine fills are pictures: two avatars, the Up next card, the featured program, four exercise thumbnails and the Exercise photograph. Seven more are gradients: the tab bar fade on five screens and a shade over each of the Up next and Exercise photographs.
| Token | Where it lands | Paints |
|---|---|---|
text/soft-500 | Tab bar labels at rest, units, captions and meta lines | 54 |
text/strong-950 | Numbers, Top Bar titles and Section Header titles | 48 |
brand/base | Active tab label, Section Header links, selected states | 30 |
fg/strong-950 | The Status Bar on five screens and primary icons | 29 |
bg/white-0 | The tab bar, Chip fills and exercise rows | 25 |
text/sub-700 | Chip and selector labels, exercise subtitles | 24 |
border/soft-100 | Tab bar and exercise row outlines, Top Bar buttons | 21 |
fg/sub-700 | Chart labels and header icons | 16 |
fg/soft-500 | Tab bar icons at rest | 15 |
bg/raised | Top Bar containers and cards | 14 |
state/success/base-500 | Done days on the week strip and completed marks | 12 |
border/sub-200 | Chart gridlines, Chip outlines, dividers between stats | 11 |
bg/grouped-canvas | The screen itself and the surface of the tab bar fade | 10 |
chart/series-1, chart/series-2, chart/series-3 | The three segments of each stacked column on Analytics, and the legend dots | 8, 8, 8 |
bg/sub-200 | Progress bar fills and the weight rail | 7 |
static/static-white-0 | Text and marks over photographs, the switch handle | 13 |
colors/alpha/gray/alpha-10 | The wash behind each tab bar label | 5 |
text/disabled-400 | The weight statistics on Analytics | 5 |
state/error/base-500 | The heart rate icon, the Sparkline and its end dot on Dashboard, and one mark on Profile | 4 |
state/success/lighter-50, state/success/dark-950 | Ring track, Trend Chip, achievement plate and Badge | 4, 3 |
state/feature/base-500, state/feature/light-200, state/feature/lighter-50 | Sleep: the moon, the Night bars, a record plate | 3, 6, 1 |
text/on-color/strong | The selected day on the week strip | 3 |
fg/disabled-400 | The trend icons on Progress records | 3 |
state/faded/lighter-50, state/faded/base-500 | The icon plate and glyph of the Profile settings rows | 3, 3 |
state/warning/lighter-50, state/warning/base-500 | Achievement and record plates, the Stand ring | 2, 2 |
brand/lighter | Achievement and record plates | 2 |
bg/scrim | The dim under overlays on photographs | 2 |
bg/elevated-1 | The Segmented Control track on Analytics and Progress | 2 |
bg/strong-950, text/white-0 | The value chip on Progress and the selected Chip, fill and label | 2, 1 |
static/static-white-alpha-70 | The caption and meta on the Up next card | 2 |
brand/alpha-10 | The Exercise Button wash | 2 |
brand/alpha-16 | The Move ring track | 1 |
state/away/lighter-50, state/away/base-500 | The Stand ring track, progress and label | 1, 2 |
bg/soft-100, state/highlighted/base-500 | The track and the fill of the weight ring on Analytics | 1, 1 |
state/error/lighter-50 | An achievement plate on Profile | 1 |
glass/border | The outline of the Featured overlay Badge | 1 |
static/static-black-950 | The heart on the featured card | 1 |
| Style | Uses | Screens |
|---|---|---|
xs/emphasized | 47 | 5 |
xs/default | 27 | 5 |
sm/default | 26 | 5 |
2xl/emphasized | 17 | 5 |
base/emphasized | 16 | 4 |
sm/emphasized | 14 | 4 |
lg/emphasized | 9 | 5 |
xl/emphasized | 8 | 3 |
3xl/emphasized | 3 | 3 |
4xl/emphasized | 1 | 1 |
6xl/emphasized | 1 | 1 |
dropShadow/xs | 15 | 6 |
dropShadow/lg | 5 | 5 |
backdropBlur/md | 2 | 2 |
backdropBlur/sm | 2 | 1 |
dropShadow/sm | 1 | 1 |
Paints are every visible solid fill and stroke on the light frames, inside instances included, counted by bound variable name on October 2, 2026. Where a token appears as both a fill and a stroke the two counts are added. A style row counts a text layer or a node that carries the style.
| Collection | Modes | What it drives here |
|---|---|---|
Color Tokens | Light, Dark | Every color, pinned on each frame |
Platform | ios-md, ios-lg, android, ios-duo-outer, ios-duo-inner | Status bar and platform metrics, pinned to ios-md |
Foundations | Default | Spacing, radius and control sizing |
Typography | Default | The 11 text styles above |
Platform Bridge | Brand, System | Not pinned on the frames, so the default mode applies |
Motion | Default | Not used on these screens |
On iOS the minimum touch target is 44 pt. The frames pin Platform to ios-md, where platform/min-touch-target reads 44, so a tap target on these screens starts there. Android would read 48.