# v12.3 — Sales filters & paging, expandable charts, centred dialogs

- **Sales quick filters** — All / Today / 7 days / 30 days / This month toggles above the Sales date boxes (same as Analytics); the active one is highlighted, typing dates by hand clears it. Defaults to Today.
- **Sales pagination** — bills list is paged (25 per page) with the same pager as Inventory/Procurement. Paging is done by the server (`/api/pos/sales?limit=&offset=`), so the old "latest 200 only" cut-off is gone; totals/KPIs still cover the whole selection. Filters/search reset to page 1.
- **Expandable charts** — every chart card (Analytics, Sales → Summary & charts) has an expand button that opens it large in a viewer (Esc, ✕ or tap outside closes). "Top items" shows up to 15 items when expanded.
- **Dialogs on phones** — form, justification/text, bill and confirm dialogs are now centred with a gap on every side (notch/gesture-bar aware) instead of a full-width bottom sheet.

Files changed: `pos.js` (server), `public/js/pos.js`, `public/css/pos.css`, `public/dashboard.html`, `public/sw.js` (cache bump). No database change.

## 12.3.1
- **Expanded donut/pie** no longer fills the screen: it is a fixed, viewport-fitted size with the legend beside it (below it on phones).
- **Phone type scale** — KPI figures, labels, card titles, chart text and legends are smaller and use one scale; figures like "Rs. 14,462.00" fit their card.
- **Chart labels** — bar/axis labels are cut to the room they have (with …) instead of running off the card; horizontal-bar label space follows the longest label; the full text is still in the tooltip.
- **Axis ticks** are on round steps (0 · 2k · 4k …) instead of 875 / 2.3k.

## 12.3.2
- **Card figures are never cut with "…"** — amounts on Overview, Sales and Analytics cards shrink their font until the whole figure fits (wrapping only as a last resort).
- **Chart labels** — category names wrap to two lines instead of being cut; a negative bar's value label no longer runs over the category name; axis labels thin out instead of touching; legend values can't push a card wider than the screen.
