Every v2 primitive, in every state. This is the review surface — if something looks wrong here it is wrong everywhere, because no screen is allowed to invent its own control.
Metrics 18/24 semibold −0.1px, labels 12/16 medium, body 14/20, cells 13/18.
Total receivable
₹35,08,71,442
₹35.09 Cr
Section title 16/22 −0.2px
Body copy at 14/20. Long enough to check the measure holds around 65 characters before it starts to feel like a wall.
Table cell 13/18 — the densest text in the product.
Caption 12/16, subtle.
Accent
#0077E6
Accent soft
#519DFA
Brand
#448A2B
Secondary
#014D98
OK
positive
Warn
attention
Danger / Cr
negative
Rule
hairline
Filters 28px, inputs and buttons 32px, both at 6px radius — the spec's control rhythm.
Buttons
Sizes
Inputs
Search
Select
Period
Checkbox
Textarea
One status-to-tone map for the whole product. Overdue is never amber on one screen and red on another.
Documents
Tones
Menu
Dialog / Sheet
Tab panels keep their own filter state.
Sticky header, sticky totals, tabular numerals, right-aligned money. The DataTable composes exactly these parts.
| Invoice | Customer | Date | Status | Amount |
|---|---|---|---|---|
| INV-2026-0412 | Sterling Textiles Pvt Ltd | 13 Aug 26 | Paid | 4,82,650.00 |
| INV-2026-0411 | Mahalaxmi Traders | 11 Aug 26 | Partially Paid | 1,19,300.00 |
| INV-2026-0410 | Konark Engineering LLP | 08 Aug 26 | Overdue | 27,45,000.00 |
| INV-2026-0409 | Vedant Polymers | 04 Aug 26 | Draft | 68,940.00 |
| Total · 4 invoices | 34,15,890.00 | |||
Toggle columns with the Columns menu above — it drives this table.
Skeletons are sized to the real 36px row so nothing shifts when data lands.
Nothing matches these filters
Your data is still there — the current search and filters just exclude all of it.
Couldn't load this
The request didn't come back. Check that the backend is running on :8000.
No invoices yet
Create one, or import your history from Tally or Zoho and everything lands here.