---
- Criado `public/player.html` como arquivo estático verdadeiro (servido pelo Next.js sem processamento, equivalente ao nginx), com HLS.js, tentativa direta ao MediaMTX em `:8888`, fallback para proxy, e integração silenciosa com `WebOSServiceBridge` para supressão do screensaver WebOS;
- Pure mode "Run HTML" atualizado para apontar a `/player.html?id={id}` em vez de rota dinâmica; rewrite removido do `next.config.ts`;
- Toggles "Pure mode" e "Open in new tab" no menu do card corrigidos: toggle agora à esquerda e texto à direita, alinhados com os demais itens;
- Adicionado `TranslateEnabled: false` na managed policy do Chromium no `Dockerfile`, solução definitiva para suprimir o popup de tradução do Google;
---
---
- Adicionado campo order em Stream e migração automática em readStreams() para ordenação persistida no streams.json;
- Implementado drag-and-drop de cards com @dnd-kit/core + @dnd-kit/sortable, com faixa de drag dedicada no topo de cada card;
- Adicionado endpoint PUT /api/streams/reorder para persistir a nova ordem no servidor;
- Atualizada playlist M3U para respeitar a ordem dos cards e incluir tvg-chno com número de canal;
- Corrigida geração de thumbnail para capturar via ffmpeg -f x11grab direto do Xvfb, usando arquivo temporário thumb.tmp.jpg;
- Adicionada política gerenciada do Chromium no Dockerfile para suprimir diálogo de salvar senha;
- Adicionadas flags --password-store=basic e --disable-features=PasswordManagerRedesign no template do Chromium;
- Substituído confirm() nativo por modal de confirmação customizado no delete de stream;
- Adicionado tamanho mini e redefinidos os tamanhos de card; padrão alterado para md (300px);
- Adicionado logo do projeto no header e ícone GripVertical na faixa de drag;
- Erros de validação do formulário agora exibidos em vermelho negrito;
---