- Sidebar do backoffice: Backups/Auditoria/IP bans/Geo/Origem das visitas/
Atualizações deixam de ser um link cada (enumerados à mão) e passam a um
só link "Sistema" para o índice partilhado do platform-tools
(platform.php?tool=index), como a fotografia/design/dance já fazem — uma
ferramenta nova no platform-tools passa a aparecer sozinha, sem link novo
a escrever aqui. Definições, Mensagens e Comunicações continuam com link
próprio (são páginas do fitme, não do router).
- Horário de Aulas (home e CrossFit, mesmo componente partilhado): a grelha
fica fechada por omissão atrás de um botão "Ver Horário das aulas"
(Bootstrap collapse); clicar em "Horário" na navbar (ou abrir a página já
com #horario no URL) abre-a de imediato em vez de só rolar até uma secção
fechada.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Horário de aulas (home e CrossFit, mesmo componente partilhado): removida
a barra de botões Seg/Ter/Qua/Qui/Sex/Sab acima da grelha — o próprio
cabeçalho do dia (já existente) passa a ser sempre visível (antes só em
desktop, 3 dias) e ganha setas ‹ › ao lado do nome do dia para mudar de
dia em ecrãs de telemóvel/tablet. No desktop (3 dias lado a lado) as
setas ficam escondidas — clicar no dia lateral já muda o dia em foco.
CSS/JS morto do botão-filtro removido.
- Informações e contactos extraído para site/includes/contactos.php,
partilhado pela home e pelo CrossFit — a página CrossFit ganha a mesma
secção de contactos (localização, telefone, e-mail, horário de
funcionamento, mapa, formulário) em vez de só linkar de volta à home.
Hero e restantes secções do CrossFit não foram tocados.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
125 imagens na home, 0 com srcset e 122 sem width/height — o browser
só sabia o tamanho depois de descarregar, o que causa layout shift.
Uploads são redimensionados a um limite de lado maior (functions_images.php),
não a uma dimensão fixa (fotos de equipa vão de 389x512 a 512x512, ícones
de oferta de 128x128 a 256x256), por isso as dimensões não dão para
hardcode: site_img_dims_attr() em functions_site.php lê o ficheiro real
com getimagesize() por pedido, tal como o gallery.php já fazia, e
devolve o par width="" height="" ou "" se o ficheiro não existir. SVG
não passa por getimagesize() (sem decoder embutido) — svg_img_dims_attr()
lê os atributos width/height (ícones fitme-*.svg, 48x48 fixo) ou cai
para o viewBox (logos do navbar, só têm viewBox).
Aplicado a: ícones da oferta, fotos de equipa (card + painel de detalhe),
ícone de modalidade em modalidade_icon_html() e no horário (index.php e
includes/horario.php), logo do navbar.
srcset ficou de fora: as imagens já vêm coartadas para pouco mais do que
o maior tamanho a que aparecem (fotos de equipa a 512px cabidas numa caixa
de no máx. 200px CSS com object-fit:cover; ícones a 128-256px mostrados a
44px) — é a folga normal para ecrãs retina, não desperdício a resolver
com múltiplas resoluções. E o layout é sempre CSS-driven (width/height:
100% + object-fit), por isso um srcset não mudaria o que é descarregado
por variação de viewport, só pouparia bytes nalguns casos — gerar 2-3
tamanhos por upload via GD seria trabalho a mais para o ganho real neste
site. Fica só o fix de dimensões, que é o que resolve o CLS que a
auditoria mediu.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Modalidades: reduce gap between cards
- Horário: drop the day-title above the grid in single-day mode (the active
day-filter button already names it); restyle "Guardar horário" as a plain
link and drop the "(JPG)" suffix
- Mensalidades: give "Escolhe o teu plano" the same dark hammered-metal
background as the reviews/footer sections instead of the plain light one
Fecha os itens 3.2.2, 3.3.1, 4.6, 5.2, 5.6, 5.7 e 7.4 do relatório de
auditoria de 2026-09-24: escapa saídas de site_img_url()/canonical,
valida identificadores de coluna em db_info_save(), troca 100vh por
100dvh, remove a última cor solta, encurta a transição para ~150ms,
acrescenta decoding=async/fetchpriority=high nas imagens da home, e
documenta as versões vendorizadas em ASSETS.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Plain-PHP fleet platform with id.andmore.pt SSO. Wires shared/platform-tools
as a submodule (platform_update, backups, git/migration tools) like the other
platforms.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>