| Asset | Verdict | What's actually needed |
|---|---|---|
| Tall story frame | 90% done | Generated from your full-vertical court. One source bug to fix. |
| Chat wallpaper | No art | A flat tint or a tiled net at 5% opacity. Both are code. |
| Tag pin / marker | One glyph | A ring around the avatar does the marking. Maybe a 24px tag glyph for the counter. |
Backdrop for Stories, where she swipes through legal formations and names the invariant at the end. It is the only one of the three that genuinely needs artwork.
The gap: your Volleyball-Full-Vertical-Asset 2 is
1024×1588, an aspect of 0.645. Stories are 9:16, or 0.5625 — so it is about 230px short.
More importantly the court body runs from 12% to 91% of the height, which leaves nowhere for the
two things a Stories frame must have: a segment bar across the top and a poll sticker at the foot.
What I did: fitted your court to the middle 64% and bled the free-zone blue to
all four edges. Saved as art/story-frame.png.
#29ABE2 to all four edges, no white marginIf you would rather redraw it than have it upscaled: same numbers as above, and the full court (both sides of the net) is right — it reads as a photo of a game rather than a diagram, which is what the Stories framing wants.
Bug in the source file. Volleyball-Full-Vertical-Asset 2 has a
stray white bar across rows 0–14, about 180px wide, sitting above the transparent top margin. It is
visible in the largest export as a white strip. I cropped past it, but it is worth fixing at source
before the file gets reused anywhere else.
Backdrop behind the message bubbles in The Thread.
The constraint that decides it: the wallpaper has to sit behind white bubbles, navy bubbles, and inline court thumbnails without competing with any of them. That puts a hard ceiling on contrast — anything above roughly 6% starts fighting the bubbles, and below 6% almost any pattern reads as texture rather than as a motif. You would be drawing something nobody can see.
Your own handoff already landed here: "a soft solid or faint pattern is enough." That is right. A flat pale tint, or the net weave lifted from the court asset and tiled at 5% opacity, both do the job and both are ten lines of SwiftUI.
The real asset need hiding behind this one is the inline formation thumbnail —
the mini court that appears inside a chat bubble. The handoff flagged it as a
"render small, don't draw by hand" case. It is already solved:
Volleyball-Half-Asset 1128.png is exactly that thumbnail.
If you do want to draw one: a tileable 256×256 motif — volleyballs, net weave, or court line fragments — in a single light tint, to be composited at 5% or less. Assume it will be barely perceptible; that is the brief, not a compromise.
The marker she drops when tagging a wrong player in Tag the Photo.
A floating pin is now the wrong shape, and this changed today. The court tokens became circular portraits — so a pin hovering between two faces is ambiguous about which one it accuses, and at thumb size the ambiguity is constant.
The marker that actually fits is a ring drawn around the accused avatar: it is unmistakable about its target, it scales with the token, and it is a stroked circle — no art at all. That also matches how the correct/wrong feedback already works on the whiteboard, so the two modes will feel like one app.
#072948 or icon gold
#F3D5A0 both read cleanly.Sampled from the delivered art rather than chosen, and now fixed in code as
Palette. Any new asset has to work against these.
| Swatch | Hex | Reserved for |
|---|---|---|
| Court blue | #29ABE2 | Free zone, out of bounds |
| Court orange | #EF7C26 | Playing surface, back row |
| Deep orange | #ED6A29 | Front row, attack zone |
| Referee navy | #072948 | Signal ink, app chrome, dark screens |
| Signal teal | #1FA3BE | Motion arrows on the referee panels |
| Icon gold | #F3D5A0 | App icon frame — available for markers |
| Correct | #15803D | Feedback only, never decoration |
| Wrong | #C2410C | Feedback only, never decoration |
You have been exporting at 128 / 256 / 512 / 1024. Here is where each one lands, so nothing gets made twice: