Keyboard shortcuts
On this page
This page establishes the system-wide keyboard shortcut convention. Individual products extend it with domain-specific shortcuts (map navigation in GRIDWATCH, threat classification in GHOST GRID, swipe-decisions in QRF), but they all follow the same registration, discovery, and collision rules.
Modifier conventions
| Modifier | Meaning |
|---|---|
| ⌘ / Ctrl | Primary modifier for destructive, state-changing, or navigation actions (save, undo, open, close) |
| ⇧ Shift | Inverse or extended variant (e.g., ⌘Z = undo, ⌘⇧Z = redo) |
| ⌥ / Alt | Alternate action, or cycle through modes |
| No modifier | Single-letter shortcuts for high-frequency tactical actions (e.g., N for night mode, R for refresh track list) |
Cross-platform mapping
- macOS: ⌘ (Cmd), ⌥ (Option), ⇧ (Shift), Ctrl
- Windows / Linux: Ctrl, Alt, Shift
Products auto-detect platform and display the correct modifier glyph in tooltips, menus, and the help overlay. Internally, shortcuts register as cmd+s (macOS) / ctrl+s (Win/Linux), with the framework mapping at runtime. Never hard-code one platform’s modifiers in user-visible text.
Categories
Three tiers, each with different registration and discovery rules:
Global shortcuts - work anywhere in the product:
| Shortcut | Action |
|---|---|
⌘K |
Open command palette |
⌘/ |
Open keyboard shortcut help overlay |
⌘, |
Open settings |
Esc |
Close modal · cancel active operation · dismiss tooltip |
? |
Contextual help for current view |
View-scoped shortcuts - active only in specific contexts (map, radar scope, decision prompt, report editor):
- Registered when the view mounts, deregistered when it unmounts
- Documented in the view’s own
?overlay specific to that view, and in the global⌘/overlay grouped by view - May reuse single-letter keys that are also used in other views (e.g.,
Mmeans “toggle MGRS grid” in GRIDWATCH and “mute audio” in GHOST GRID - no global conflict because they never coexist)
Workflow shortcuts - multi-key sequences for power users (g then m for “go to map”):
- Rare. Only for flows used 20+ times per session where reducing two keystrokes to a chord saves measurable time.
- Always discoverable via
⌘Kcommand palette - power users shouldn’t be the only ones who know they exist.
Reserved - do not override
The following shortcuts belong to the OS, browser, or platform and must never be reassigned. Re-binding any of them produces confusing, broken behavior:
- Window and tab management:
⌘T,⌘N,⌘W,⌘Q,⌘R,⌘⇧T - Standard clipboard and undo:
⌘C,⌘V,⌘X,⌘A,⌘Z,⌘⇧Z- these work in inputs as expected; never remap them globally - Browser zoom:
⌘+,⌘-,⌘0- native map zoom uses bare=/-/0without modifier - Browser functions:
F5,F11,F12 - Focus traversal:
Tab,⇧Tab- must never be hijacked for anything else
If a product shortcut collides with one of the above, the product loses - rebind to another combination. Arguing with the browser is a fight you can’t win and shouldn’t try.
The shortcut registry
FDT ships a shared registry at the design system layer. Before registering a new shortcut, a product calls into the registry which checks against:
- The global shortcut table (above)
- The reserved list (above)
- Already-registered view-scoped shortcuts within the currently-mounted scope
The registry refuses duplicate bindings within the same scope. It permits the same key across different scopes (the M example above) - collision is scoped, not absolute.
The registry also provides the command palette and help overlay their data - both are generated from the registered shortcuts, never hand-maintained.
Discoverability
Every shortcut appears in at least two places:
- Command palette (
⌘K) - every action with a shortcut is also available as a searchable command. This is the non-expert fallback and the shortcut-discovery path. If you can’t remember the shortcut, you hit⌘K, type the first few letters of the action, and see its shortcut displayed alongside. - Shortcut help overlay (
⌘/or?) - full keyboard map for the current view, grouped by category, searchable, copy-able as a reference card.
Shortcuts are also displayed inline on:
- Button tooltips:
Save · ⌘S - Menu items: right-aligned shortcut display in standard menu style
- First-run onboarding: a single “tip” surface shown once per user per product, never again unless re-requested from settings
Accessibility
Keyboard shortcuts augment operation; they do not replace it. Every shortcut action must also be reachable via:
- A visible UI control (button, menu item, panel action)
- The
⌘Kcommand palette
A shortcut that is the only path to an action fails accessibility - operators with motor impairments, users on tablets without keyboards, and users still learning the system all need the visible path.
Additionally, the shortcut display uses the correct ARIA attributes (aria-keyshortcuts="Meta+S" on the associated control) so screen readers announce the shortcut alongside the control’s label.
Display format
When rendering a shortcut inline in UI or documentation:
- Use the platform-correct modifier glyph - macOS: ⌘ ⌥ ⇧ Ctrl · Windows/Linux: Ctrl Alt Shift
- Wrap keys in
<kbd>tags, rendered in JetBrains Mono - Separate keys with
+(space, plus sign, space) - not commas, not hyphens, not slashes - Single letters render uppercase regardless of input case:
<kbd>⌘ + K</kbd>,<kbd>N</kbd>,<kbd>Esc</kbd> - Function keys render as-written:
<kbd>F1</kbd> - Arrow keys use symbols:
<kbd>←</kbd><kbd>→</kbd><kbd>↑</kbd><kbd>↓</kbd>
Example in a tooltip: Save draft · ⌘ + S
Example in a menu item (aligned right): Open file ⌘ + O
Per-product shortcut tables
Each product documents its full shortcut table in its own ⌘/ help overlay. These are illustrative, not exhaustive:
GRIDWATCH (map, tactical C2)
| Shortcut | Action |
|---|---|
N |
Cycle night-mode intensity - standard → strict red → daylight bleed → standard |
M |
Toggle MGRS grid overlay |
G |
Go to coordinate (opens MGRS input) |
T |
Cycle APP-6D symbology density - cluster / spread / hidden |
1–9 |
Jump to zoom tier (Global → Theater → Operational → Tactical → Close → Micro) |
Space |
Pause/resume mission clock |
GHOST GRID (radar console, C-UAS)
| Shortcut | Action |
|---|---|
C |
Classify selected track - cycles affiliation |
F |
Engage / fire on selected track |
J |
Deploy jammer at cursor |
Space |
Pause/resume scenario clock |
⌘1–⌘4 |
Select countermeasure loadout |
QRF (decision training, mobile-first)
| Shortcut | Action |
|---|---|
← / → |
Decision accept/reject (mirrors swipe) |
Space |
Advance scenario |
R |
Review current sector briefing |
Esc |
Exit mission to operations room |
Anti-patterns
- Shortcuts for features without visible controls. Every shortcut needs a visible fallback.
- Hijacking reserved shortcuts. If your “save” key is
⌘Sand a user hits⌘Rexpecting the browser to reload, they will reload the page and lose state. Do not rebind reserved keys. - Single-letter shortcuts inside text inputs. When the user is typing into a field,
Nshould type the letter N, not switch night modes. The registry auto-suspends single-letter shortcuts when a text input is focused; products should not work around this. - Hidden shortcuts. Every shortcut is discoverable via at least two routes (
⌘Kpalette and⌘/overlay). A shortcut that only appears in onboarding that you missed doesn’t exist. - Inconsistent modifier use.
⌘Smeaning “save” in one product and “search” in another breaks muscle memory across the suite. Keep system-wide actions consistent across products.