Ledger & tables in two columns.
FilterBar · ExportMenu · ColumnManager · DensityToggle
A filter chip shows the resolved value — “1 – 30 Sep 2026”, never “Last 30 days”. An export states its scope, because exporting the page when the user expected the filtered set is a silent data error.
TransactionTable
Virtualised with correct aria-rowcount and aria-rowindex. One tab stop for the whole grid; arrows navigate, Space selects, Enter opens, Escape clears. Sticky header, sticky total, no zebra striping — the tabular figures do the aligning. Group it from the toolbar above: each header carries its own count and subtotal, and keeps them when it collapses.
TransactionCard
The phone presentation, and not a compromise: the amount stays right-aligned and tabular, the status stays legible, and the row is a single 44px-plus target.
- 120 US Dollar
- negative 199 US Dollar and 19 cents
- negative 278 US Dollar and 38 cents
- negative 357 US Dollar and 57 cents
- 436 US Dollar and 76 cents
TransactionDetail
The audit trail names the actor and their role, and says when someone acted on behalf of someone else. The categorisation rule that fired is shown, because it is editable context.
LedgerTable
Debit and credit are two columns. Never one signed column. The totals are shown and the sign convention in force is stated, not assumed — and a group subtotals its debits and its credits separately, because netting them is the one thing two columns exist to prevent.
General ledger detail
Accrual basis · Acme Holdings, Inc. · USD · debits positive, credits positive, in their own columns
TrialBalance
Two columns, each account in its normal-balance column, and the pair of totals shown side by side. If they do not agree the difference owns the screen.
Trial balance
As at 30 September 2026 · Acme Holdings, Inc. · accrual basis
Debits equal credits.
CommandPalette
Keyboard-initiated actions are motionless. The palette does not scale, fade or slide in — it is simply there, because motion after a keystroke is latency you can see.
Press the button, or ⌘K