Item count now reflects total owned items, not filtered list (CAL-18). The $itemCount signal, which drives the header badge and footer count, was calculated from the filtered todo list instead of total owned items in two handlers:
handleList (/api/todos?filter=...): ItemCount now uses countOwnedTodos() (total count) instead of len(filteredTodos), so the badge stays correct regardless of the active filter tab.
handleListFragment (/api/todos/fragment): Sets the datastar-signals response header with the correct total count, so the client-side $itemCount updates even on non-SSE fragment refetches (PocketBase realtime sync, offline-replay resolution).