Warm Local Editorial — paprika on cream.
One token set, three surfaces. Everything on this page is built by the same code the screens use, so if it looks right here it looks right everywhere. Contrast figures are measured by scripts/contrast.py.
Brand
The mark is a plate seen from above with a folded napkin: a laid table — Tafel. It sits in the paprika circle on the app icon and as ink on cream in the website header.
Order direct.
Restaurants keep 100%.
Direct, local, warm. German first, English fluent.
Colour
Warmth lives in the ground, not the type. Saffron is a fill, never text. Paprika text uses --paprika-ink.
Ink on cream
Brand and semantic
Dish tints
Status vocabulary
Six order states, one shape on every surface. Icon + text + colour, always.
Restaurant and subscription states
Typography
Fraunces for display (variable, optical size and SOFT axes), Figtree for UI, DM Mono for identifiers. Self-hosted, latin subset, zero external requests.
Deine Bestellung ist unterwegs
Zwei dünne Rinderpatties, doppelt Cheddar, karamellisierte Zwiebeln, Brioche-Bun. Two thin beef patties, double cheddar, caramelised onions, brioche bun.
Space, radius, elevation
4px base. Controls are 44px; the kitchen uses 56–60px for the decisions that matter.
Space
Radius & elevation
Controls
Every button is at least 44px tall. Primary is paprika with white; ink is for the brand surface; basil confirms money and completion; danger is soft until hovered.
Surfaces & data
Cards, panels, KPI tiles, tables. Numbers are tabular. Tables scroll inside their own wrapper, never the page.
Food & restaurants
Line-drawn dish glyphs on warm tints stand in for photography and remain the loading and fallback state in production. The restaurant card derives its “Pickup only” badge live from radius and distance.
Dish rows and the modifier sheet
Größe Pflicht
Extras Optional
Orders
The same six states as a timeline on the phone and as a board on the iPad.
Feedback
Toasts for the presenter, iOS-style push banners inside the phone for the story, sheets on the phone, modals and drawers on the console.
Kitchen surface
The restaurant iPad re-declares the tokens on [data-surface="kitchen"]: dark ground, brighter status colours, the same components.
Iconography
One stroke set (Lucide-style, 24 viewBox, 1.8 stroke) and fifteen dish glyphs. No emoji are used as icons anywhere.
Dish glyphs
Bans, actively enforced
- No emoji as icons. The SVG set only.
- No external requests.
scripts/check.pyfails on one; the prototype opens fromfile://with no wifi. - No saffron text and no paprika body text — both fail the contrast floor.
- No colour-only status. Icon + text + colour, so a state survives greyscale and a bright kitchen.
- No
clamp()on product type. Fluid sizes belong to the brand surface. - No controls under 44px, no page-level horizontal scroll, no content behind fixed bars.