+ {/* 72/28, not the 120/36 default: Sparkline's root is a fixed-width
+ shrink-0 box, and the pill beside it is shrink-0 too, so with
+ nothing allowed to give the pill was pushed ~32px outside the
+ card and sat on the viewport edge. /sites already passes 72 here
+ for exactly this reason. */}
+
+
YTD income
{ZAR2(r.income)}
diff --git a/components/InvoiceList.tsx b/components/InvoiceList.tsx
index 2779324..f4a209f 100644
--- a/components/InvoiceList.tsx
+++ b/components/InvoiceList.tsx
@@ -65,27 +65,38 @@ export function InvoiceList({
return (
<>
- {/* A grid, not flex-wrap. The middle tile is far wider than the other two
- because of its ex-VAT/VAT sub-line, so flex sized them by CONTENT and pushed
- the third one onto a second row the moment the viewport dipped under ~644px —
- which is squarely tablet territory. Equal columns keep all three on one row
- from 640px up, and below that they stack as one clean column. */}
-
+ {/* TWO tiles, not three, and a grid rather than flex-wrap. Both reasons are
+ the same lesson: "Booked" (summed over booked lines) and "Billed" (summed
+ over every invoice header) are the SAME figure whenever every line is
+ booked — which is the goal state — so two tiles showing one number read as
+ a duplicate rather than as a reconciliation. The reading that carries
+ information is "booked OF billed", so the single tile now says that, and
+ the two figures separate on their own the moment a line is left unbooked.
+
+ Equal columns, not content sizing: this tile is far wider than the invoice
+ count beside it because of the "of … billed" line and the VAT breakdown, and
+ flex would size by content and shove the second tile onto its own row well
+ above the 640px where a tablet has plenty of room. */}
+
- {/* What actually got booked against the machines, per the shared policy. */}
-
-
{BOOKED_LONG_LABEL}
-
+ {/* What actually got booked against the machines, per the shared policy,
+ set against what the debtors have actually been invoiced. */}
+
+
{BOOKED_LONG_LABEL}
+
{ZAR2(bookedAmount(bookedExVat, bookedVat))}
+
+ {" "}of {ZAR2(totals.incl)} billed
+
-
+ {/* VAT stays visible — the ex-VAT/incl-VAT split is the one figure a reader
+ cannot reconstruct from the headline above. */}
+
{BOOK_INCLUSIVE_VAT
? `${ZAR2(bookedExVat)} ex VAT + ${ZAR2(bookedVat)} VAT`
: `${ZAR2(bookedVat)} VAT not counted as income`}
- {/* What the debtors are actually invoiced. */}
-