Two related bugs in keyboard shortcuts after the user cleared their
custom mappings:
1) Empty saved map killed defaults. resolveShortcut() short-circuited
on any saved map (including {}) instead of falling through to the
1..9 defaults. Now: loadShortcuts() returns null for empty/missing/
malformed values, and saveShortcuts() actively removes the
localStorage entry when the map empties — so deleting every row in
the settings panel restores the defaults.
2) rgthree's Bookmark node listens on its own KEY_EVENT_SERVICE — if
the user's bookmark and a navigator default share a key (e.g. both
"1"), pressing it caused MY handler to jump first, then rgthree's
bookmark would jump again, overriding the visual.
Fix: onKeyDown now calls preventDefault + stopImmediatePropagation
+ stopPropagation when we claim a key. The window-capture handler
runs before bubble-phase or service-dispatch listeners, so rgthree
no longer gets a chance to override.
If the user WANTS the rgthree bookmark to win for a specific key,
they can remove that key from the navigator settings — resolveShortcut
returns null and we don't intercept.