Food4Life · A Taher Company

Design system

The complete visual language for the Food4Life menu product — foundations, compliance semantics, and every primitive the interface is built from. Everything on this page is live markup, not screenshots.

Color

Green leads. Amber earns its weight by being rare — the “4”, one highlight per view, or a warm button; never a large fill. Tomato is a once-a-page spark. Every surface sits on cream; white is reserved for raised cards.

Typography

Bricolage Grotesque for display, headings and big numbers. Hanken Grotesk for body, UI and all data. Numerals are tabular everywhere a figure sits in a column.

Display · Bricolage 800 · 44/1.06 · −.03em
Every tray, accounted for.
Heading · Bricolage 700 · 28px · −.02em
Real food, made from scratch
Body · Hanken 400 · 17/1.6
Built by operators, for operators. Plain, warm and proven — anything a fifth grader can read, and never a word of jargon.
Data · Hanken 700 · tabular
1.25   5.00   11.60   171.70
Eyebrow · Hanken 600 · uppercase · .16em
Hoff Elementary · Lunch · Grades K–5

Spacing, radius, shadow

A 4/8 scale. Soft corners. Warm shadows built on ink, never gray.

Spacing--space-1…10
Radius8 / 14 / 22 / pill
sm 8
md 14
lg 22
Shadowsm / md / lg
sm
md
lg

Compliance status

The product's central semantic. Status is never carried by color alone — every value pairs a glyph and a text label with its color, and color appears only as a meter fill or small text. That keeps amber rare and makes the system readable without color vision.

StatusPipFour states, glyph + label + color
Meets pattern Near limit Short 3.75 Over 10% Not scored
Meter & RangeBar A minimum-only metric, and a min–max metric with its acceptable band
Weekly fruit 1.50 / 1.50 cup min
Meets minimum
Weekly grains 1.25 / 5.00–5.50 oz eq
Short 3.75
Credit chip A menu item's contribution to each USDA component, tinted by component
MMA 2.50 oz eq Grain 1.25 oz eq Veg 0.50 cup Fruit 0.50 cup Milk 1.00 cup

Primitives

Every component the interface is assembled from.

ButtonPill, Hanken 700. Primary green leads; warm amber is a sparing secondary; ghost is outline
Variants
Sizes
TagCategories and menu flags
✓ Vegetarian Needs a swap Grades K–5 Normal
BadgeSolid status pill; counts and “Today”
Today Published Draft Rejected
Form controlsGreen focus ring at 2px offset; tomato for validation
Serving size is required
Whole grain-rich Contains pork Active Chef Council
StatCalloutBig-number proof stat; the unit in amber
98%
Trays accounted for
40+
Years operating kitchens
AvatarInitials, tinted by role
MA DW PR
TabsUnderline bar; green active indicator
Dense table32px rows, sand header, numerics right-aligned and tabular
MetricMenuTargetStatus
Avg daily calories176550–650 Under
Saturated fat11.6%0–10% Over
Added sugars0%0–10% OK
Avg daily sodium172≤1110 OK
Day cardThe atom of the Week surface — plan, crediting, and downstream state in one card
Wed 1 Normal Meets pattern
Mini Meatloaf
Entree
MMA 2.50 oz eq Veg 0.13 cup
Production record signed Count due Friday
CountFieldKitchen mode — one figure, thumb-sized
Physical count
24
cases on the shelf
ToastColored left bar; success, warning, danger
Menu published
Families can see Wednesday’s lunch now.
2 items need a swap
Sodium is over the K–5 target.
SaveBarSticky while edits are pending; blocks navigation
You have unsaved changes
EmptyStateAlways names the cause and the fix
No ingredients set up for this building yet
Inventory only shows ingredients matching this unit’s distributors and industry type. Ask your manager to configure the unit and tag its ingredients.
Open unit settings

Text colors

Which color is legal for which size, so every reading passes WCAG AA.

UseTokenOn cream
Headlines--ink14.41
Body and all essential text--ink-27.56
Metadata, 19px and above only--ink-33.35
Links and green text--garden-6004.67
Deep green headings--garden-7007.27
Short / over status text--tomato-6004.59
Primary button fill, white label--garden-6005.00
Warm button fill, ink label--harvest-5007.61
Amber is a fill with ink text on it, never text on cream. Green as text starts at --garden-600; --garden-500 is for fills and meter bars.

Motion and interaction

Content rules

Iconography

A single-weight rounded line set drawn from a food vocabulary — Leaf, Apple, Carrot, Fork, Grain, Plate — at roughly 2.2px stroke in deep green. Anything the set doesn’t cover comes from Lucide, recolored to match, and is flagged as a substitution.

Logos ↗
The wordmark is pure type; the “4” is always the one colored letter — amber on light, sprout green on dark.
App icon ↗
The “4” tile, on deep garden.
Voice ↗
What Food4Life says, and what it never says.

Reference

The full system, browsable.

In code
Tokens and the data register as stylesheets.