Design system/Foundations
Typography
One font family for everything, a short scale of sizes, and weight instead of color to build hierarchy.
In codeapp/globals.cssapp/layout.tsxcomponents/page-header.tsx
Fonts
Estedad is the main font: variable from weight 100 to 900, hosted on Flowra's own server, with separate subsets for Arabic and Latin scripts so each page loads only the part it needs. English is set in Inter, and any Persian letter in the middle of it falls back to Estedad. Scripts Estedad doesn't cover, like Cyrillic and Armenian, come from the system sans-serif font.
Aa ابج
EstedadPersian, Arabic, and most Latin languages; 100 to 900.Aa
InterEnglish text; 400 to 700.480,000,000
Digit SeparatorsSeparators only, so tabular digits don't get spaced out.Scale
These sizes are the ones actually used in the code. Body text is 14px; headings are tightened with weight 700 to 800 and slightly negative letter spacing, and Persian text breathes with open line height, about twice the size.
Personal space
Design system
Today's actions
Upcoming meetings
Delete this action?
Every action carries its full context.
Create task
Edited yesterday
At least 8 characters
Soon
Headings are bigger on phones
Page headings on phones are one step larger than on desktop: 25 versus 19, and 30 versus 24 on the dashboard. On desktop, the app's top bar names the page; on phones, the heading is the only line that tells you where you are, and a 19px heading next to 16px text can't be read at arm's length. Headings wrap; they aren't truncated.
Rules
Do
Build hierarchy with weight and size.
Don't
Don't make everything bold for emphasis; one orange word is enough.
Do
Write code, values, and keys in the system monospace font.
Don't
Writing code in the text font; zero and O look the same.
Do
Need a new size? First check whether one of the existing steps works.
Don't
13.2px for one card; the scale falls apart.
Sizes in code
14pxbody · font-family: var(--font-fa), ui-sans-serif, system-ui25/19 · 27/21 · 30/24Phone/desktop · font-semibold 600 · leading-tight12.5px · 13pxmd · lg and xl16px / 500Touch 17px14px → 11px / 600compact: 13px → 10.5px11.5px.field-hint14px / 500Phone 14.5px13px / 50015px / 600Dialog; ConfirmDialog 17px- iOS zooms the page on a field with a font smaller than 16px; that's why the floating field is always 16, and below 640px every .input becomes 16 too.
- The page title has overflow-wrap: anywhere: it wraps, it doesn't get cut off.
- On desktop the page header description is one line with an ellipsis, and the full text goes in title; on phones it wraps in full with a line height of 1.75.
Related pages