Wallet, add funds, then the prepaid statement.
Wallet, top-up, statement, and invoicing — one flat Billing surface (Billing and Usage are now separate nav rows, no in-page tab bar).
The widths drawn here are samples of a fluid
continuum, not the only states that exist — content (spacing, type, gaps, card/column widths)
scales continuously between them, each clamp reading a named container. Structure (rail,
row↔stack, grid columns) steps only at sm 640 · md 768 ·
lg 1024; radius, hairlines, and pills never scale. Kit: design-canon.md U8.
Reading order in this document: § Desktop
journey first — every desktop frame, full flow, journey order — then § Mobile
journey — 375 below it — every mobile frame, same order, laid out side by side as a
wrapping grid (never a tall single-file column of phone screens). Two sections, never
interleaved — a review-document convention only (this repo's design-canon.md §
Mockup review reading order). Mobile 375px is still designed and scored FIRST in the /design
ritual (kit canon U5/U8) — the two rules never conflate.
BillingPage.tsx
<h1>Billing</h1> on the readable column, not the PageLayout h1/description zone.WalletBalance (hero + recent activity), then BillingOverview "Billing setup" group.lg).TopUpModal)FundToGoLiveSheet, AddMoneyToContinueDialog) reuse it with different copy, never a second surface./billing/history)/billing/history, prepaid statement)BillingDrillOver
/billing./billing/history/:invoiceId)BillingDrillOver at z-10300; row → /billing/history/:invoiceId, InvoiceDetailModal mounts zIndexOffset=2500 (backdrop/sheet at 10500/12000, above the drill)./billing/details)InvoicingDetails + BillingPreferences
onSignupRequired).BillingHistory reads the wallet statement (no Stripe fetch).