⚠️ AMBIENTE DE TESTES — alterações aqui não afectam o kanban principal
● Sincronizado
Opções
Pesquisa e filtros
Ações
Vista
Nova0
A Preparar0
Em Personalização0
Pronto a Enviar0
Enviado0
⚠ Problema0
Encomenda Cliente Estado Tipo Artigos Entrega Resp. Data Total
'; } const colLabels = { nova:'Nova', preparar:'A Preparar', personalizacao:'Em Personalização', enviar:'Pronto a Enviar', enviado:'Enviado', problema:'Problema' }; const colLabel = c => colLabels[c] || c; const fmtDate = (iso, full=false) => iso ? (full ? new Date(iso).toLocaleString('pt-PT') : new Date(iso).toLocaleDateString('pt-PT',{day:'2-digit',month:'2-digit'})) : '—'; const fmtMoney = v => v != null ? parseFloat(v).toLocaleString('pt-PT',{style:'currency',currency:'EUR'}) : '—'; const esc = s => String(s??'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); const setSync = s => { const el = document.getElementById('sync-status'); ({ok:()=>{el.textContent='● Sincronizado';el.className='sync-status';}, syncing:()=>{el.textContent='● A sincronizar…';el.className='sync-status syncing';}, error:()=>{el.textContent='● Erro de ligação';el.className='sync-status error';}})[s]?.(); };