Foundations
Tokens
Every value below is read live from the page, so it changes with the brand colour, theme and sizes in Conditions. Contrast badges check text against its background (WCAG: 4.5 for text, 3 for large text and icons).
Brand colours
styles/brand.css--primaryBrand fill: main action, selection
--primary-inkBrand as text on cards
--ringFocus rings
--brandAcopone yellow (fixed)
--brand-blackAcopone black
--brand-whiteAcopone white
Surfaces & text
styles/acopone-tokens.css--backgroundPage
--cardCards and panels
--popoverMenus and sheets
--secondary--mutedTiles, tracks, quiet text
--borderHairlines
--inputField borders
Status colours
styles/brand.css · kit/status.tsx--successFill: dots, bars, solid alerts
--success-softSoft + ink: badges, alerts, tints
--warningFill: dots, bars, solid alerts
--warning-softSoft + ink: badges, alerts, tints
--dangerFill: dots, bars, solid alerts
--danger-softSoft + ink: badges, alerts, tints
--infoFill: dots, bars, solid alerts
--info-softSoft + ink: badges, alerts, tints
| Token | Use for |
|---|---|
| --{tone} | Solid fills: dots, meter bars, the one solid alert that mustn't be missed |
| --{tone}-foreground | Text and icons on the solid fill (black or white, whichever passes) |
| --{tone}-soft | Tinted backgrounds: badges, alerts, row highlights, icon tiles |
| --{tone}-ink | Text and icons on soft or on cards; always 4.5:1 or more |
| --{tone}-edge | Border of tinted surfaces. Transparent, unless the brand is close to this status |
How they appear
Bill settled
Printer paper is low
Couldn't save
New version
Payment failed
When the brand clashes with a status
1. Never colour alone
Every status shows an icon or a word (“Failed”, “Low”). Colour only adds to it. This is what makes a clash harmless, and it also covers colour-blind users.
2. Status wins, the brand gives way
The brand is never swapped for a status colour and a status is never tinted with the brand. When they clash, the status colour moves and gets an edge (-edge stops being transparent).
| Status | May move hue | Keeps a lightness gap | What happens |
|---|---|---|---|
| Success | up to 55° | — | Moves toward teal or lime, away from the brand. |
| Warning | up to 22° | 12% | Moves toward orange and gets darker or lighter than the brand. |
| Danger | Never | 13% | Stays red. Becomes clearly darker (or lighter) than the brand. |
| Info | up to 55° | — | Moves toward cyan or violet, away from the brand. |
Danger is the strictest: red means danger in every app, so it keeps its hue and separates by lightness. Destructive buttons are soft (tinted) rather than filled, so a red brand's filled main button and a delete button never look alike.See every sample brand resolved →
Type
app/globals.cssFigtree
font-sans · labels and body
हिसाब किताब
Noto Sans Devanagari · fallback
Rs 12,450.00
font-mono · Space Grotesk
text-micro10pxOrder for table 12 · ३ जना
Tiny labels on chipstext-caption11pxOrder for table 12 · ३ जना
Captions, timestampstext-xs12pxOrder for table 12 · ३ जना
Hints, metatext-sm14pxOrder for table 12 · ३ जना
Most UI text, buttonstext-base16pxOrder for table 12 · ३ जना
Body, inputs, section titlestext-lg18pxOrder for table 12 · ३ जना
Card titles, empty statestext-xl20pxOrder for table 12 · ३ जना
Sub-headingstext-2xl24pxOrder for table 12 · ३ जना
Big numberstext-3xl30pxOrder for table 12 · ३ जना
Page titles (phone)text-4xl36pxOrder for table 12 · ३ जना
Page titlestext-5xl48pxOrder for table 12 · ३ जना
Hero numbersShape
--radius, --radius-panel/card/rowsm · 6pxSmall tagsmd · 8pxBadgeslg · 10pxNotice bannerxl · 14pxList buttonsrow · 16pxRows, tilescard · 22pxSection cardspanel · 32pxFrosted panels, dockfullButtons, fields, pillsControl heights
components/ui/control.tsGlass & elevation
Frosted panel
bg-card/75 · blur 40
Card
solid · hairline
Dock
floating · strong shadow
Motion
lib/motion.tsspring.smooth0.5s · bounce 0spring.snappy0.5s · bounce 0.15spring.bouncy0.5s · bounce 0.3spring.quick0.3s · bounce 0.1Set Motion to Classic in Conditions to see the instant fallback. Fluid also respects the system's Reduce Motion.
Screens
< 768pxBottom tab bar, dock, sheets. Controls stay touch-sized. Phones held sideways get a side rail.≥ 768pxTablet portrait. Top navigation; dock floats higher.≥ 1024pxPanels go side by side; the dock is replaced by inline toolbars.≥ 1280 / 1536pxWider content, 3-column cells. Type does not grow until 1440p (18px cap).