docs: onboarding illustrations recomposed for a full-bleed hero

closes #39

Sixteen files, 3:2 landscape, composed natively for the wide frame rather than
cropped or padded from the portrait originals.

THE FIRST ATTEMPT MET THE CANVAS AND NOT THE BRIEF

It reached 2048x1365 by upscaling the old portrait art ~2.8x and padding the
sides with a blurred copy of itself. The sharp region was 1024x1365 — aspect
0.750 against the originals' 0.748, the same composition — and measured edge
detail fell 2.1x-8.8x in the outer quarters on 15 of 16 files. At real hero size
a hard seam showed around the sharp centre.

This set is natively wide: real painted content to all four edges, checked by
measuring detail across each image and looking for the step change a pasted
rectangle leaves. None has one.

A DUPLICATE THAT WOULD HAVE SHIPPED

07_Forecast dark was byte-identical to 01_Welcome dark. Light was correct, so
light mode looked perfect and only dark mode showed the wrong picture, on the
last onboarding step — the silent failure OnboardingPreviews.kt exists to expose
and that #42 would fail a build over. Replaced; all sixteen hashes are unique.

Dark 07 is 1536x1024 where the rest are 2048x1365 — the same 3:2 to within
0.02%, 274.00dp against 273.93dp at a 411dp hero, and ample resolution at every
density the app ships to.

The set still carries no text, no step numbers, and a forecast illustration that
names no fields. Recorded in dist/README.md, along with two things deliberately
left unmatched: light and dark 07 are different compositions, and eight files
have a busy bottom quarter under the fade.

Sources only. 4.2 MB here; the shipped copies are downscaled into density
buckets, which is #41.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
null 2026-08-19 00:49:22 -05:00
parent 1f5bcfb50c
commit b74bc4b66a
17 changed files with 33 additions and 6 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 277 KiB

View File

@ -30,8 +30,20 @@ replace in
| `EmptyStateIllustration` | — not onboarding | `EmptyStateIllustration` | | `EmptyStateIllustration` | — not onboarding | `EmptyStateIllustration` |
Each stem exists as `Light/<stem>_light.webp` and `Dark/<stem>_dark.webp`, at Each stem exists as `Light/<stem>_light.webp` and `Dark/<stem>_dark.webp`, at
**identical dimensions per card**, so a theme switch swaps the image without the **same aspect ratio**, so a theme switch swaps the image without moving the
moving the layout. layout. Fifteen are 2048 × 1365; `07_Forecast` dark is 1536 × 1024, which is the
same 3:2 to within 0.02% — 274.00 dp tall against 273.93 at a 411 dp hero.
**They are 3:2 landscape, composed for a full-bleed hero.** That is the second
attempt. The first delivery met the canvas size by upscaling the old portrait
art ~2.8× and padding the sides with a blurred copy of itself: measured edge
detail fell 2.1×8.8× in the outer quarters on 15 of 16 files, and at real hero
size a hard seam showed around the sharp centre. The canvas was right and the
composition was still portrait.
The set here is natively wide — real painted content to all four edges, verified
by measuring detail across each image and looking for a step change that would
betray a pasted rectangle. None has one.
`EmptyStateIllustration` is the odd one and deliberately unnumbered: it is `EmptyStateIllustration` is the odd one and deliberately unnumbered: it is
Today's "nothing logged yet" state, not an onboarding step, and it is also drawn Today's "nothing logged yet" state, not an onboarding step, and it is also drawn
@ -112,7 +124,22 @@ sources rendered their rounded corners against black.
## Format ## Format
WebP at the delivered resolution — 312 KB for all sixteen, against 6.8 MB as WebP at the delivered resolution — 4.2 MB for all sixteen, and the same format
PNG, and the same format [`../../data/img/`](../../data/img/) uses for the marks [`../../data/img/`](../../data/img/) uses for the marks privacyllc.dev renders.
privacyllc.dev renders. The delivery `.zip` archives are deliberately not The delivery `.zip` archives are deliberately not tracked; see
tracked; see [`.gitignore`](.gitignore). [`.gitignore`](.gitignore).
**These are sources, not shipping assets, and the size is why that matters.** A
2048 px file dropped into a density-less `drawable/` is decoded at the device's
bucket and costs ~11 MB of heap on every device. The shipped copies are
downscaled into `drawable-*dpi` buckets — see the KDoc in `Illustrations.kt`.
## Two things left unmatched, deliberately
- **`07_Forecast` light and dark are different compositions.** Light draws a
partial ring of hollow beads; dark draws a full arc of dashed circles ending
in an arrow. Dark states "predicted" more clearly, so it is the one to copy if
they are ever reconciled — not the other way round.
- **Eight of the sixteen have a busy bottom quarter**, mostly the dark set,
where foliage and water reach into the band the fade covers. The fade still
works; it simply covers more drawing than intended.