production

This commit is contained in:
2026-08-28 11:13:15 +05:30
parent d7348e253f
commit 5723d373b2
162 changed files with 17924 additions and 7026 deletions

View File

@@ -185,18 +185,79 @@ Pinned by: `home_gutter_test` (hero and route share an edge),
group), `activity_list_test` (a sheet is `working` or `canvas`, never the
warm off-white).
## 6b. The third pass: the glass came out, and forms became bands
Two changes, made together because the second one is only possible once the
first is done.
### The glass is gone
Nothing in `lib/` is translucent any more. What was removed, and why each one
was not worth what it cost:
| Was | Now | Why |
|---|---|---|
| `milerGlassSurface()` — `BackdropFilter` at sigma 18 on every bar | **deleted** | a full-width blur re-samples everything behind it every frame, on the mid-range Android this ships to, over a map that repaints as it pans. It was already rationed to sigma 18, which is the tell that it was tolerated rather than enjoyed. |
| `glassCard` `#EBFFFFFF` (92% white) | `#FFFFFF` | a translucent card takes its contrast from whatever happens to be behind it — the same address is crisp over the canvas and grey over a map. |
| `glassSheet` `#E0FDFDFE` (88%) | `#FFFFFF` | every point of transparency was contrast taken off an address read one-handed at a doorstep in sun. |
| `glassCardLive` `#0D960019` laid *over* the card | `#FAF2F3`, the same tint flattened | with an opaque surface the overlay would cover the content rather than warm it. A live card is a card with a different fill. |
| `glassRim` `#8CFFFFFF` — a specular highlight | `#E5E7EB`, a hairline | the highlight only read as an edge because the surface under it was see-through. |
| `glassRed` | **deleted** | its only caller was the blur. |
`ColorConstants.tint(accent, amount, {on})` replaces the
`accent.withValues(alpha: …)` idiom wherever it was painting a *surface*.
It resolves the composite once against a named ground and returns an ordinary
opaque colour. Same appearance where the old code was already over white;
predictable everywhere else. Borders and scrims keep their alpha — those are
lines and dims, not surfaces.
### Forms are bands, not cards
`MilerBand` (`app_widgets.dart`). A card is right for a screen showing a *list
of objects* — a stop, a job, a booking — because the margin is what says these
are separate things. It is wrong for a screen that is one long thing: a form, a
review, a receipt. There the page margin buys nothing and costs twice.
- **Width.** 32–40pt off a 390pt phone, spent on two strips of empty ground
beside text that is mostly addresses. On the verification screen that is the
difference between an address on two lines and one on three.
- **A second boundary.** The gap between two cards already separates them; the
outline says it again.
So a band runs edge to edge, the page's ground showing between one band and the
next is the only separator, and the margin moves *inside* as padding — air
around words rather than air around a box. `MilerBand.pad` (20) and
`MilerBand.gap` (10) are the two numbers, declared once, so every band's left
edge lines up down the whole flow.
A band cannot carry state in an outline it does not have, so state goes in the
**fill**, and a finished band adds `rail` — a 3pt accent stripe down its
leading edge. That is the one mark that survives a phone at arm's length in
sun.
**Which screens took it.** The whole first-mile flow, which is where forms live:
`stop_verify` (collect · hand over · confirm), `shipment_capture`,
`shipment_review`, `collect_payment`, `delivery_proof_page`. Each is now a grey
page (`daylightSurface`) carrying full-bleed white bands — the inverse of the
white-page/tinted-panel arrangement §6 landed on, and taken for the width
rather than for the tone.
Home, Bookings and Deliveries are **unchanged**. They are lists of objects and
the card is still the right shape there.
## 7. Known gaps
This was a foundation pass. It is not a completed product-wide redesign.
- **`GlassCard` still carries three separation mechanisms** — fill, border and
shadow. Its rim is documented as a fix for shadows crushing on a budget LCD,
reported twice from a device, so it was left alone rather than changed on a
guess. It should be revisited *on a device* now that the ground works.
- ~~**`GlassCard` still carries three separation mechanisms.**~~ Closed by §6b:
the fill is opaque, and the hairline stays — it is the documented fix for
shadows crushing on a budget LCD, reported twice from a device, and nothing
about going opaque changes that. Still worth a look **on a device**.
- **No typography or spacing consolidation.** Arbitrary `.sp` values still exist
across pages; `MilerType` was not rationalised into a smaller scale.
- **Icon families are still mixed.** Lucide was adopted for Activity and the
status vocabulary; Material rounded remains widespread elsewhere.
- **Account/Profile was not audited or migrated.**
- **No device or text-scale QA** of the new ground, and **no GPU profiling** of
`milerGlassSheet`'s blur — so no blur change was made.
- **No device or text-scale QA** of the new ground. The blur question is moot:
§6b removed every `BackdropFilter` in `lib/`, so there is nothing left to
profile.