Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* SK navigation – keyboard controls (WASD + arrows + Q/E for Up/Down) */

(function () {
  'use strict';

  function isTypingTarget(el) {
    if (!el) return false;
    var tag = (el.tagName || '').toLowerCase();
    if (tag === 'input' || tag === 'textarea' || tag === 'select') return true;
    if (el.isContentEditable) return true;
    return false;
  }

  function getNavLink(selector) {
    var btn = document.querySelector(selector);
    if (!btn) return null;
    var a = btn.querySelector('a');
    return a || null;
  }

  function navigate(selector) {
    var link = getNavLink(selector);
    if (link && link.href) {
      window.location.href = link.href;
      return true;
    }
    return false;
  }

  document.addEventListener('keydown', function (e) {
    if (isTypingTarget(e.target)) return;

    var key = e.key.toLowerCase();

    var handled = false;

    switch (key) {
      case 'w':
      case 'arrowup':
        handled = navigate('.nav-link-north');
        break;

      case 's':
      case 'arrowdown':
        handled = navigate('.nav-link-south');
        break;

      case 'a':
      case 'arrowleft':
        handled = navigate('.nav-link-west');
        break;

      case 'd':
      case 'arrowright':
        handled = navigate('.nav-link-east');
        break;

      case 'q':
      case 'pageup':
        handled = navigate('.nav-link-up');
        break;

      case 'e':
      case 'pagedown':
        handled = navigate('.nav-link-down');
        break;
    }

    if (handled) {
      e.preventDefault();
    }
  });
})();