function toggleDrawer() { if (IS_GUEST) return; const drawer = document.getElementById('task-drawer'); const backdrop = document.getElementById('drawer-backdrop'); const isHidden = drawer.classList.contains('translate-x-full'); if (isHidden) { drawer.classList.remove('translate-x-full'); backdrop.classList.remove('hidden'); } else { drawer.classList.add('translate-x-full'); backdrop.classList.add('hidden'); } } function setFilter(status) { currentFilter = status; ['ALL', 'IN_PROGRESS', 'BACKLOG', 'COMPLETED'].forEach(f => { const btn = document.getElementById(`filter-${f}`); if (btn) { btn.className = (f === status) ? "px-3 py-1.5 rounded-t-lg border-b-2 border-indigo-600 text-indigo-600 font-bold whitespace-nowrap" : "px-3 py-1.5 rounded-t-lg border-b-2 border-transparent whitespace-nowrap"; } }); renderTasks(); } async function loadTasks() { if (IS_GUEST || !API_TOKEN) return; try { const res = await fetch('/api/v1/tasks', { headers: { 'Authorization': `Bearer ${API_TOKEN}` } }); if (res.status === 401) { logout(); return; } allTasks = await res.json(); document.getElementById('task-count-badge').innerText = allTasks.length; renderTasks(); } catch (err) { document.getElementById('tasks-container').innerHTML = `