Changelog - 09/08/2026
Perfil único de resolução para a arte de jogo
- Janela desta entrada — cobre 03/08 a 09/08 (25 commits em
main-7k). É a entrada mais recente do changelog; 10/08 ainda estava em curso quando ela foi escrita, e os dois commits daquele dia que fecham a poda de environments estão anotados no fim, em## Infra / CI/CD. - O Cloudflare Images codifica o transform no PATH, então cada combinação de largura, altura e recorte é um RECURSO distinto (PR #1876) —
1b6b8e904parte dessa constatação: cache-key de browser própria, entrada de cache CF própria e download próprio pra cada variação. O app tinha 12 superfícies pintandogame.imagecom 4 recortes e 10 ladders diferentes, nenhuma compartilhando nada. Medido no 7k mobile (iPhone 14 Pro Max, DPR 3, 3G): o card do carrossel pediawidth=240,height=300(10,0 KB) e a página de jogo pediawidth=320,height=400(13,5 KB) — 23,5 KB pra mostrar a MESMA arte duas vezes, com o segundo request entrando frio no 3G do usuário e a arte piscando ao abrir o jogo. - Pior: os degraus grandes eram upscale. O master da arte de jogo no CF é 300x350 (amostrado sobre 12 assets reais da biblioteca), então
320,447e480inventavam pixel —width=480,height=600devolvia 21,5 KB de nada, o dobro do degrau que a listagem já tinha em cache. O teto útil é ~300px de largura. - O que passa a valer —
~/utils/game-artworkcentraliza ladder e fallback num perfil único e cada superfície declara só o seusizes, que é o slot de layout real. Não há mais recorte no servidor: o enquadramento vai pro CSS (object-covernuma caixa de aspect fixa), então card 4/5, poster 59/79 e thumb de proporção natural passam a compartilhar o MESMO arquivo. O ladder default vai de[144,216,288]pra[128,192,288]— o degrau do meio serve DPR 1 e precisa ficar logo acima do maior slot (186px, a thumb do preview da página de jogo) sem nenhum degrau entre ele e o menor slot de card de desktop (140px); com216o card pegava um degrau e o hero era empurrado pro seguinte, baixando a mesma arte duas vezes no desktop. As 5 brandssize: "compact"passam a[128,192,240], cortando ~25% dos bytes e da memória de bitmap decodado. Fundos borrados e reflexos reusam as props EXATAS da thumb em vez de baixar uma segunda variante recortada só pra ficar sob umblur(). - Guarda-chuva contra regressão — 11 testes de perfil mais uma auditoria de TODAS as brands (56 casos) que falha se alguém reintroduzir um degrau entre o card e o hero, inclusive em brand nova.
THUMB_ASPECT_VALUEfoi removido porque existia só pra alimentar o recorte no servidor e mantê-lo era convite pra refragmentar. - A convergência que faltava (PR #1877) —
a97d91545: o perfil único convergia em DPR maior ou igual a 2 (todo celular real) e em DPR 1 no desktop, mas não em DPR 1 com viewport estreito, onde os slots divergem de verdade (o card declara 115px e a thumb do preview ~152px, com o degrau128exatamente no meio). O fix faz as superfícies da página de jogo declararem o slot do CARD no mobile:GAME_PREVIEW_ARTWORK_SIZESpassa a espelhar os breakpoints do card e oGamePageHeroda donald vai de131pxpra128px. É uma sub-declaração deliberada de ~19% — em DPR 1 estreito a arte vem 128px numa caixa de ~152px, imperceptível.