Northgate Builders
3 open invoices · $41,880.00
Every seenry-ui component and every app class, in each state it can be in. Values come only from tokens.css; switch the theme above to check dark. Rules and reasons are in SYSTEM.md.
Cool greys split by hairlines. Ink blue is the one color that means act or selected. Status colors carry money meaning: red is overdue, failed or destructive; green is paid or settled; amber is disputed or at risk; slate is informational.
IBM Plex Sans for everything, Plex Mono for IDs only. Seven steps; money is always tabular and never mono.
A 4px scale. Rows are 36px, controls 32px, both 44px on phones. Radius stays small: 4px for tags, 6px for controls and cards, 8px for floating layers.
Tabler outline, 18px in navigation and icon buttons, 16px beside text. Icons take meta grey so the label stays stronger; selected rows tint them ink blue.
.ui-buttonOne filled primary per view. Secondary is the default; ghost for toolbars; danger is outlined red text and fills only inside the confirming dialog.
.ui-field .ui-inputAlways a visible label. Errors say what to do and sit under the field; affixes carry units.
.ui-select .ui-comboboxNative select for short fixed lists. Combobox wraps an input with a datalist when people type to find a customer or vendor among many.
.ui-choiceChecked controls fill ink blue, the same color as selection everywhere else.
.ui-switchFor settings that apply immediately. In settings rows the label lives in the row and the switch keeps an accessible name.
.ui-sliderA range input with its value written beside it. Use it for tolerances and thresholds where the exact number is shown; type the number when it must be exact to the cent.
.ui-segmentedSwitches a view, never submits. Selected is a raised white segment, not ink blue, so it never competes with the primary.
.ui-tabsSibling panels of one record or page. The 2px ink rule marks the selected tab.
3 open invoices, $61,880.40 outstanding.
Last payment Oct 2, $14,210.00 by ACH.
Priya Raman, Accounts payable.
.ui-chip .ui-filter-barAn unset filter is a dashed outline; a set one turns solid ink and names its value. The count on the right always states rows and money.
.ui-shellSidebar on the second surface, top bar on white, page on grey. Nav items show hover in grey and the current page in pale ink. Under 768px the sidebar becomes a drawer opened by the [data-nav-toggle] button.
Invoices
137 open, $1,284,310.42 outstanding
41 invoices
Rows above: Invoices current, Customers hover, Payments focus.
.ui-breadcrumb .ui-paginationBreadcrumbs collapse to the current page on phones. Pagination sits in the table foot with the row count.
.ui-steps .ui-stepA rule over each step: grey for done with a check, ink for the current step, hairline for what is ahead. Done steps link back.
.ui-command .ui-kbdCmd K opens it anywhere. The first match is active; results never animate.
.ui-alertOne sentence about this page, an optional detail line and at most one action. Tone follows the money meaning of the status colors.
A $22,000.00 wire from MERIDIAN HLTH GRP may match this invoice.Reference “INV0418 PART 1”, Oct 27
Tidewater Marine disputed line 3: short shipment of 4 cases.
ACH payment of $18,420.00 was returned: R01 insufficient funds.Brightwater Logistics · retry allowed after Oct 30
September closed. 214 invoices settled, $1,402,118.06 collected.
QuickBooks Online last synced 4 minutes ago.
.ui-status .ui-badgeStatus always pairs a word with a mark. A badge is a category, not a state.
.ui-progress .ui-meterProgress is work moving; meter is usage against a limit and turns amber near it and red past it. The number is always written beside the bar.
.ui-toastA short result after an action, bottom right, never for errors that need fixing.
Priya Raman will get it at ap@meridianhealth.com.
.ui-skeletonMatches the rows that will load; the shimmer stops for reduced motion.
.ui-dialog .ui-sheetA dialog confirms one consequential act and names what will happen. A sheet holds a related task with more room.
.ui-table36px rows, hairlines, money right-aligned in tabular figures. Click a header to sort. The selected row gets pale ink and a 2px ink edge.
| Customer | Status | Amount due |
|---|---|---|
| Meridian Health Group | 30 days late | $48,250.00 |
| Northgate Builders | Promise to pay | $27,300.00 |
| Tidewater Marine Supply | Disputed | $4,215.50 |
| Saltmarsh Outfitters | Paid | $0.00 |
| Total due | $79,765.50 | |
.ui-stat-stripUp to three figures, exact to the cent with cents dimmed, each with one line of context.
.ui-chartConventional finance forms only: a stacked bar for aging with its legend as a table, vertical bars for money over months in grey with the month in progress in ink. Aging steps through four greys to one red, so only the oldest money is colored.
By days past due
Last 6 months
.ui-listA queue of rows: icon, what happened, who and why, and the amount at the right.
.ui-data-list .ui-detailLabel and value pairs as rows, or as columns for a record header. The detail panel is the selection beside a list.
.ui-timeline .ui-timeline-itemWho, what, when. Newest first; a hairline joins the events.
.ui-codeInline for field names and IDs in help text; a block with a copy button for API keys, webhooks and import formats.
Map your QuickBooks field DocNumber to invoice_number.
curl https://api.fenwick.com/v1/invoices/INV-2026-0418/remind \
-H "Authorization: Bearer $FENWICK_KEY" \
-d channel=email.ui-emptyName what is missing, give one reason, offer one way forward.
Bills over $5,000.00 land here when a vendor sends them to bills@harborpine.com.
.ui-card .ui-avatar .ui-accordionCards are hairline frames, never shadows. Link cards darken their border on hover.
3 open invoices · $41,880.00
.ui-settings-group .ui-dangerA description column beside bordered rows. Destructive actions live last, outlined red, and confirm in a dialog.
Sent from ar@harborpine.com.
Sets the due date from the issue date.
Stops after 4 reminders.
Logged for the whole workspace.
Voids 14 unsent drafts.
.ui-authMark, title, providers, a divider, fields and the legal line. The error names the problem without saying which field was wrong.
or with email
That email and password don’t match.
By continuing you agree to the Terms and Privacy Policy.
Whole screens for one product, Fenwick, built only from the classes above. Start a new screen from the closest one.
Stats, aging, cash, overdue table, queue
Filtered invoices with the selection open
One invoice: facts, lines, activity
Defaults, reminders, methods, danger zone
Plan, usage meters, payment method, receipts
Stepper, one question, the empty product
SSO, email and the error state