Daily progress
Day 1 of 3Carbs logged
280 g to go
How carbs. looks and works.
The type, colours, icons and components used across carbs.

Manrope gives headings and key numbers their weight. DM Sans keeps labels and longer text easy to read.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 &!?%
Weights 400–800 · Weight 800 is used for the wordmark, display headings and important numbers.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 &!?%
Weights 400–700 · Body text uses 400, labels use 600 and primary actions use 700.
Manrope 800
58px / 1.13 · −2.7px*Manrope 800
36px / 1.2 · −1.4pxManrope 700
22px · −0.6pxManrope 700 · 17pxBuild your plan around foods you enjoy.
DM Sans 400
16px / 1.6DM Sans 400 · 14pxDM Sans 700 · 12px
Uppercase · +1.6px*This example is scaled to fit the page. The app uses 58px for its setup heading. If Google Fonts cannot load, the text uses a sans-serif fallback.
Food names identify the palette. Semantic aliases assign colours to text, surfaces and feedback, with different shades for light and dark themes.
Swatches copy their hex codes. Food variables hold fixed colours; semantic aliases select the shade for each theme. Higher numbers mean darker shades; an a suffix indicates opacity.
| Semantic alias | Light | Dark |
|---|
Outline icons are used for navigation, actions and help. Stroke weight and proportions are kept consistent.
The bagel on its maroon background.
The app icon uses this artwork in a square with rounded corners. Its original proportions and colours are preserved.
Labels clarify unfamiliar icons. Decorative SVGs are hidden from screen readers; icon-only buttons have accessible names.
Interactive examples show button, field and tab states without changing your carbs. data.
Primary / secondary / disabled / destructive / text
52px minimum height · 12px radius · 700 weight
Used to personalise your plan.
Enter a weight to continue.
53px minimum height · 12px radius · Visible labels and focus ring.
Search finds foods and their available portions.
Selected choices use the warm surface and an accent border.
Words and colour explain status. Errors sit beside fields; short messages confirm actions and are announced by screen readers.
Keyboard focus uses a 3px blue outline with 4px offset.
These modules combine the smaller components. Entries, dates and totals are sample data.
Familiar measures sit alongside editable weights: ½ bagel, 2 slices of bread (80g), or a medium glass of juice (250ml). Weights drive the calculation.
Logged carbs, targets and progress appear in the diary. Ingredient details sit in each recipe’s info modal.
Meal suggestions remain available after logging, even when the daily target has been reached.
Carbs logged
280 g to go
1 bagel · with jam
1 glass · 250 ml
1 small
days to go
Spread your food and drinks across the day. Start with meals you know and add snacks between them.

Start your food diary here.
Add a food or drink to track your progress.
Spacing groups related items and separates sections. Rounded corners distinguish controls, cards and badges.
These spacing values appear throughout the app. Related items sit closer together, with more room between groups.
8px
Tab items12px
Controls21px
Cards30px
PillsDesktop uses a sidebar; mobile uses floating navigation. Cards stack on smaller screens, while controls retain their labels and touch areas.
Supporting text, input borders and text on accent backgrounds have dedicated contrast tokens. Controls have labels and visible focus. Skip links, predictable scrolling and focus restoration support keyboard navigation. Tooltips stay open while hovered or focused; blurred surfaces have solid fallbacks.
Motion shows what changed. Haptic feedback marks taps and completed actions on supported devices.
Digits roll after a saved addition, edit or deletion; the unit stays still. Screen readers announce the final total.
1,200ms animation · 250ms delay · Ease out
The progress ring updates with the total. Crossing the daily target triggers confetti. Bagels and selected drinks have brief falling animations after logging.
Celebrations follow saved entries, rather than page loads.
Short pulses confirm saved entries and barcode matches. A double pulse marks the first daily target crossing. Vibration depends on browser and device support.
Totals update immediately on page changes and with reduced motion. Animations, celebrations and haptics are disabled with reduced motion; the final values and status messages remain available.
Keyboard and screen-reader controls remain available throughout.