polish(permissions): nav count badge + relative timestamps + clearAll button reset
Three small Settings UX improvements + one bug fix:
1. **Live count badge on the sidebar nav.** "Permissions (3)" reads
the current decision count without entering the section. Updates on
refresh, single Revoke, and Clear All. Implementation:
`window._setPermissionsNavCount(n)` is exposed during nav setup;
the section's refresh path calls it from a single helper. Empty
when 0.
2. **Relative timestamps.** Decisions now read "5 minutes ago" /
"3 hours ago" / "2 days ago" instead of the verbose locale
timestamp. Falls back to the absolute date for anything older than
a week so the user can still see the day. Helper `relativeTime`
lives next to the renderer (no shared util surface needed).
3. **Bug fix: Clear-all button stuck disabled after success.** The
click handler set `clearAllBtn.disabled = true` on entry; the
success branch only hid the button (`display = 'none'`) without
resetting `disabled`. On the next visit (which un-hides via
refresh) the button was still disabled and silently un-clickable.
Refresh now sets `disabled = false` in both the populated and
empty branches. Caught by the new badge test failing on the
subsequent Clear-all test (which reused the settings window with
the disabled button).
Tests:
* `tests/desktop/permissions-settings.spec.ts` 6/6 (was 5; +badge).
* The new badge test seeds 2 decisions, asserts "Permissions (2)"
on the nav, revokes one (asserts "(1)"), then clears all
(asserts the badge disappears).
* Bonus: switched the `dialog` listener in the Clear-all test to
`.once()` so it doesn't leak across tests reusing the same
settings window.
No backend changes.