diff options
| author | Adam Soltys <[email protected]> | 2026-10-02 10:09:28 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-02 10:09:28 -0700 |
| commit | 8249fbe964ae63fa5a34b150b2e5819972d93e5c (patch) | |
| tree | 93892b6c66818596abff896a12c378f703196aad /src/style.css | |
| parent | 98a1cb08eff9958d87c6d84462669d2a1990b21e (diff) | |
| download | coinosv3-8249fbe964ae63fa5a34b150b2e5819972d93e5c.tar.gz coinosv3-8249fbe964ae63fa5a34b150b2e5819972d93e5c.zip | |
Pictures paint with the page: column-sized copies, and CORS that works
Measured in the live tab (screencast frames): back from a profile, the
feed's text was on screen ~200ms before its photo. The <img> was loaded
and complete on the first frame — a 3024px, 12-megapixel original that
Chrome re-decodes whenever the page is rebuilt.
- Post photos wider than the column at 2x are painted from an 1100px
WebP copy made once (fetch, createImageBitmap, OffscreenCanvas) and
kept in Cache Storage; it decodes in a few ms, decoding=sync, inside
the same frame as the text. GIFs and small pictures keep the original;
the lightbox opens the original. Profile banners use the same copies,
warmed on prefetch.
- corsFetch: primal's CDN caches its no-Origin answer without
Vary: Origin, so a CORS fetch after the <img> got that header-less copy
and failed — which had written blossom.primal.net, m.primal.net and
coinos.io off as 'no CORS', so their avatars never got local
thumbnails and painted late from the originals. A refusal is now
retried once past the cache before a host is blamed; the old list is
dropped (nocors-v2).
- DM list: the unread dot sits centred at the row's end, like the
communities' below, instead of beside the time.
- Balance card gear: the icon alone, no circle.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Dmcrt9KyNDKVWFKnb8BREo
Diffstat (limited to 'src/style.css')
| -rw-r--r-- | src/style.css | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/style.css b/src/style.css index 2addd9c..8918c37 100644 --- a/src/style.css +++ b/src/style.css @@ -1255,7 +1255,8 @@ body::after { .balance-switch:hover { color: var(--ink); border-color: var(--line-strong); } .balance-switch svg { opacity: .75; } /* the face's settings: a round icon button, no label */ -.balance-gear { width: 34px; height: 34px; padding: 0; justify-content: center; } +.balance-gear { width: 34px; height: 34px; padding: 0; justify-content: center; background: none; border: 0; } +.balance-gear:hover { background: none; color: var(--ink); } /* Move-money row: the action labels are long ("Move to Spending"), so let the row wrap to two full-width lines rather than crushing the amount field. */ .balance-move .input-group { flex-wrap: wrap; } |
