Drop idle time polling, add cross-desktop screen lock and power save detection
Remove get_idle_time_ms() and IDLE_THRESHOLD_MS entirely. Rewrite
is_screen_locked() with FDO ScreenSaver → GNOME ScreenSaver fallback
chain. Rewrite is_power_save_active() with GNOME Mutter → KDE Solid
fallback chain. Simplify observer mode logic to screen_locked or
power_save. Add XDG_CURRENT_DESKTOP to systemd PassEnvironment. Add
pytest-asyncio dev dependency and tests for all fallback paths.