The web UI records keybinds as djb2 hashes of DOM event.code strings (e.g. "KeyM" → 2090563626), but uiohook fires native scan codes (e.g. M → 50). These never matched, so global keybinds only worked in-focus via the web fallback, never out-of-focus via the native hook. Add a uiohook-to-DOM-code mapping table and pre-compute the djb2 hashes so pressedKeys uses the same numbering as the keybind store.