Cockpit Shell & Menu Structure¶
Code-verified against
services/player-client/src/(anchors are file:line), browser-verified at 1440×900, as of 2026-07-11. This page is the canonical map of the player client's screen regions, navigation systems, and complete menu tree. For end-to-end task flows see ui-flows.md; for the tech stack see player-client.md.
The player client is a persistent starship cockpit, not a hub-and-spoke website. The player is always "in the chair": a windshield scene occupies the top of the screen, instrument monitors occupy the bottom deck, and a left sidebar carries the ship-systems nav rail plus two multi-function displays (MFDs). Routed pages render as a single full-height instrument monitor in place of the deck.
1. Screen regions¶
1.1 Geometry¶
Shell geometry is governed by three CSS variables — --band-h (windshield band height, 20%), --sidebar-w (clamp ≈317px at 1440w), --deck-h (48%) — plus four modifier classes (game-layout.css:84-172). At 1440×900 in flight mode:
┌──────────────────────────────────────────────────────────────────┐
│ WINDSHIELD BAND — full width, 20% height │
│ [PlayerVitalsHud overlay: name/rank · ₡ credits · turns · │
│ drones · mines · LINK · (bounty) · LOGOUT] │
├───────────────┬──────────────────────────────────────────────────┤
│ SIDEBAR 17.6% │ SCENE (right column of the inverted-L) │
│ ┌───────────┐ │ canvas + HUD chips (LOCATION / HAZARD / │
│ │ROUTE RAIL │ │ RADIATION / FORMATIONS) │
│ │ 9 keys │ ├──────────────────────────────────────────────────┤
│ ├───────────┤ │ INSTRUMENT DECK — 37.4% │
│ │ MFD-A │ │ ┌────────────┬──────────────┬────────────┐ │
│ ├───────────┤ │ │ PLANETARY │ NAV │ COMMS │ │
│ │ MFD-B │ │ │ (30%) │ (40%) │ (30%) │ │
│ └───────────┘ │ └────────────┴──────────────┴────────────┘ │
└───────────────┴──────────────────────────────────────────────────┘
State variants:
| State | Windshield | Deck | Notes |
|---|---|---|---|
Flight (/game) |
45.0% (inverted-L) | 37.4% — three monitors | The only state where the scene is interactive |
| Docked | 4.6% (auto-minimized, 60px band) | 72.8% — single station monitor | ⤢ Expand Viewport restores the band |
| Landed | 4.6%, sidebar auto-collapses | up to 93.3% — single planetary monitor | .landed-expanded flips to 64.9% scene / 35% deck |
Any other /game/* route |
absent | 73.3% — one CockpitInstrument monitor hosts the routed page |
Sidebar + HUD persist (cockpit-instrument.css:28-77); exception: /game/player renders its own chrome instead of the monitor frame (PlayerInfo.tsx:73-105) |
The document never scrolls on /game routes (GameLayout.tsx:141-152); scrolling happens only inside sanctioned containers (.mfd-page-body, .screen-hud-content, monitor interiors). One responsive breakpoint exists (768px); there is no mobile layout.
1.2 Always-visible vs conditional¶
| Region | Visibility |
|---|---|
| StatusBar (persistent bar: identity chip · location chip · vitals cluster · settings popup · logout) | Always, every authed route; BOUNTY chip only when a bounty is active (StatusBar.tsx) |
| Sidebar (rail + both MFDs) | Always mounted; collapsible (manual toggle, or auto-collapse on landing) |
| Windshield scene + deck | /game only |
| Standalone monitor | Every /game/* route except /game |
| Toast/overlay layer (medal, priority hail, welcome-back, NPC-combat banner, first-session objectives) | Event-conditional; fixed z-ladder 1200–10000 (GameLayout.tsx:245-256) |
2. Navigation systems¶
The client runs six distinct navigation grammars simultaneously. This is the load-bearing fact of the current organization and the primary target of reorganization review.
- RouteRail — 9 router-link keys in the sidebar, labeled with 3-letter mnemonics (full names on hover/ARIA only;
RouteRail.tsx:5-19):
| Key | Full name | Route | Content |
|---|---|---|---|
| CMD | COMMAND | /game |
The cockpit (windshield + deck) |
| NAV | NAV CHART | /game/map |
Galaxy map (3D/2D, plot/engage autopilot) |
| PLY | PLAYER INFO | /game/player |
Tabs: IDENTITY · REPUTATION · HANGAR · COLONIES |
| SET | SETTINGS | /game/settings |
UI Scale slider + Back button (2 controls) |
| COL | COLONIES | /game/planets |
Owned-planet roster ("COLONIAL REGISTRY") |
| WPN | WEAPONS | /game/combat |
Target select + engage ("WEAPONS CONSOLE") |
| CRW | CREW | /game/team |
Team management ("CREW MANIFEST") |
| GOV | GOVERNANCE | /game/governance |
Elections · Policies · Treaties |
| SVC | SERVICE RECORD | /game/ranking |
Rank / promotion / standings (read-only) |
-
MFD-A / MFD-B — two persistent multi-function displays under the rail, each a softkey tablist with a hard 5-softkey cap and no paging, driven by the shared softkey-rail primitive that also drives monitor, station, and colony tablists (
common/SoftkeyRail.tsx). MFD-A: STAT · CRGO · QTM (Warp Jumper only). MFD-B: POS · COMM. Threat and salvage read out on the TACTICAL and SOLAR SYSTEM deck monitors; ARIA converses on the teleprinter, which also exposes a JOURNAL tab →MemoryJournalPanel✅ (LEG-397 / #7018df00523). Page selection persists inlocalStorage sw2102.mfd.v1; docking/landing hydrates MFD-A to CARGO (situations.ts:19-25); a page may not appear on both MFDs at once; faulted pages render a PAGE FAULT boundary with RETRY. -
Deck monitors (flight,
/gameonly) — PLANETARY (planet/station rows → Claim/Land/Dock, HARVEST), NAV (course plot + engage/abort + adjacent-sector click-to-move — the primary movement act), COMMS (CONTACTS/HAILS mailbox + HAIL composer). -
Docked sub-navigation — regular station: 3-tab console (🛒 TRADE · 🏛️ PORT OFFICE · 📋 CONTRACTS) + UNDOCK & LAUNCH. SpaceDock: a 10-venue card hub (Trading Hub · Shipyard · Construction (TradeDock) · Port Office · Contract Board · Genesis Store · Armory · Ship Services · Astral Mining · Gambling Hall) plus a reputation-gated Black Market door (
SpaceDockInterface.tsx:1354-1863). -
Landed sub-navigation — planet vitals strip (rename · embark/disembark colonists · terraform header) plus, on owned non-hub planets, a 7-tab colony console: ⬡ Citadel · ▦ Grid · 🌍 Terraform · ⟳ Research · 🏭 Production · 🛡️ Defense · 🔐 Safe (
CockpitColonyManagement.tsx:123-280). -
Windshield interactions (flight only) — canvas entity popups (stations → ⚓ DOCK), orbital closeup (🛬 LAND, ✎ rename), HUD chips with per-chip minimize (persisted
cockpit.hud.<id>.min), LOCATION chip owner controls (◆ GOVERNANCE · region select · INVITE CONTROL · TRADEDOCK CONSTRUCTION), FORMATIONS 🔬 INVESTIGATE.
Plus a seventh, linguistic channel: the ARIA terminal accepts a nav-command grammar ("set course to N" / "engage" / "abort") parsed client-side before any network round-trip (ADR-0072; AriaTerminalPage.tsx:264-323).
3. Complete menu tree¶
Node format: [Label] (kind) — what it opens/does. DEAD = present in code but unreachable or no-op. ALSO-VIA = the same function is reachable elsewhere.
/game (CMD — cockpit)
├─ WINDSHIELD (flight scene only)
│ ├─ [entity] canvas-click → info popup → [⚓ DOCK] (stations)
│ ├─ [planet] canvas-click → orbital closeup → [🛬 LAND] · [✎ NAME THIS WORLD]
│ ├─ LOCATION chip → [◆ GOVERNANCE] · [◆ region select] · [◆ INVITE CONTROL]
│ │ · [◆ TRADEDOCK CONSTRUCTION] (owner-gated)
│ └─ FORMATIONS chip → [🔬 INVESTIGATE] (one-shot per formation)
├─ DECK — flight (three monitors)
│ ├─ PLANETARY: [planet row → Claim/Land] · [station row → Dock] · [⛏️ HARVEST]
│ ├─ NAV: [sector# + PLOT] · [🧭 ENGAGE] · [🛑 ABORT] · [adjacent node → MOVE]
│ │ · [WARP GRAPH | QUANTUM DRIVE] (Warp Jumper) → Gatewright panel
│ └─ COMMS: [CONTACTS | HAILS] · [HAIL] (per contact)
├─ DECK — docked at regular station
│ └─ [🛒 TRADE | 🏛️ PORT OFFICE | 📋 CONTRACTS] · [🚀 UNDOCK & LAUNCH]
│ ├─ TRADE → market grid · Buy/Sell desks · Trade Route Optimizer
│ ├─ PORT OFFICE → [Registry | War Room] · Acquisition Desk
│ └─ CONTRACTS → [Board | My Contracts | Post Contract] · [Accept] per row
├─ DECK — docked at SpaceDock
│ └─ 10 venue cards + Black Market door (rep-gated) · [← Back to Hub] in each
├─ DECK — landed (owned, non-hub planet)
│ ├─ vitals strip: [✎ rename] · [⬇ DISEMBARK] · [⬆ EMBARK] → transfer modal
│ └─ colony console: [⬡ Citadel]* · [▦ Grid] · [🌍 Terraform] · [⟳ Research]
│ · [🏭 Production] (preset buttons + coupled sliders + 🔐 Store + 🎯 Specialization)
│ · [🛡️ Defense] (upgrade/build with inline two-step confirms)
│ · [🔐 Safe] (Deposit|Withdraw tabs · quick-fill % · auto-deposit · per-commodity)
│ (* Citadel tab hosts Buildings / Defenses / Siege modals)
│
SIDEBAR (all routes)
├─ RouteRail: CMD NAV PLY SET COL WPN CRW GOV SVC (§2 table)
├─ MFD-A: [STAT] vitals · [CRGO] cargo + [TERRAFORM READY — DEPLOY]
│ · [THRT] hazard/law + [Clear Fine] + [LAY MINEFIELD qty+Deploy]
│ · [QTM] (Warp Jumper) · [SALV] wrecks → [qty + Salvage]
├─ MFD-B: [NAV] position/exits (display-only) · [ARIA] chat + command grammar · Teleprinter [JOURNAL] → memory journal ✅
│ · [COMM] unread/contacts/crew (passive — no composer)
└─ DEAD MFD pages: [TURN] turn-economy · [REP] reputation (registered, no softkey)
│
ROUTED PAGES (single monitor)
├─ /game/map (NAV): [3D|2D] · [Scan latent warps] · [+/−/Reset] · sector node →
│ [Travel to Sector] · [Lay in course] · [Engage Autopilot] · FRONTIER chips
├─ /game/player (PLY): [IDENTITY | REPUTATION | HANGAR | COLONIES]
├─ /game/settings (SET): [UI Scale] · [← Back to game]
├─ /game/planets (COL): colony roster
├─ /game/combat (WPN): target select → engage → round replay
├─ /game/team (CRW): create-team form | [Overview|Members|Treasury|Chat|Settings]
├─ /game/governance (GOV): [Elections|Policies|Treaties] · [+ PROPOSE POLICY]
├─ /game/ranking (SVC): rank/promotion/commendations/standings (zero controls)
├─ /game/ships — ORPHAN (no link anywhere; typed URL only) — ship switcher
└─ /game/trading — ORPHAN (no link anywhere) — standalone trade ledger
3.1 Counts (live controls; venue/modal interiors excluded)¶
| Metric | Value |
|---|---|
| Total interactive options across all states | ≈205 |
| Top-level entries (rail 9 + softkeys 8 + LOGOUT) | 18 |
| Max nesting depth | 6 clicks |
| Routed pages | 11 (9 rail-linked, 2 orphaned) |
| Sub-navigation systems invisible to the router | 6 |
| Registered-but-dead MFD pages | 2 |
3.2 Clicks-to-reach (from flight, defaults)¶
| Action | Clicks | Action | Clicks |
|---|---|---|---|
| Move (adjacent) | 1 | Colony manage | 2 |
| Check cargo | 1 (0 docked) | Team chat | 2 |
| Settings | 1 | Combat engage | 3 |
| Chat ARIA | 0–1 | Trade desk | 2–3 |
| Dock | 2 | Repair | ≥3 |
4. Known organizational debt¶
These are statements of the shipped structure, recorded so reorganization work has a checklist.
Duplicate paths — the same function reachable N ways with no declared primary:
| Function | Ways | Surfaces |
|---|---|---|
| Trading | 4 | docked TRADE tab · SpaceDock venue · orphan route · embedded component |
| Movement / course plotting | 5 | NAV-monitor node click · PLOT/ENGAGE · cockpit NAV / Galaxy3DRenderer (not GalaxyMap.tsx — absent on tip 46bce720; App.tsx /game/map is RedirectToGame) · ARIA grammar · per-colony Set course rows (PlanetManager.tsx:530-539, also inside PLY→COLONIES) |
| Autopilot engage/abort | 3 | NAV monitor · cockpit NAV / Galaxy3DRenderer · ARIA |
| Planet roster | 3 | COL route · PLY→COLONIES tab · landed console (deep) |
| Dock / Land | 2 each | PLANETARY monitor rows · windshield popups |
| Governance | 2 | GOV rail key · LOCATION chip button |
| Hangar | 2 | PLY→HANGAR tab · orphan /game/ships |
Misgroupings:
- SETTINGS (2 controls) and SERVICE RECORD (0 controls) each hold one of only 9 top-level keys, peers to WEAPONS and GOVERNANCE.
- HANGAR and TRADE LEDGER are full instrument pages with no rail presence — buried as a sub-tab and a docked tab respectively.
- Messaging is stranded: the COMM MFD page is deliberately passive, and the only hail composer lives on the flight deck — there is no way to compose a message while docked, landed, or on any routed page.
- Combat state has three homes: WPN route (engage), THRT MFD (mines/law/fines), NPC-combat banner (toasts).
- Colony management is split across three differently-shaped surfaces (deep console · roster route · roster tab).
Naming collisions:
- "NAV" names three things — the NAV CHART rail key, the NAV/POSITION MFD page (~150px apart in the same column), and the deck NAV monitor. The control that actually moves the ship is the unlabeled monitor.
- "CREW" names two concepts — CRW rail key opens team management ("CREW MANIFEST"); the COMM MFD page ("COMMS / CREW") shows sector contacts.
- Trading carries three names (TRADE LEDGER · 🛒 TRADE · Trading Hub 🏪) for one component.
- The per-system accent palette reuses the same cyan for CMD, NAV CHART, GOVERNANCE, and SETTINGS — color does not uniquely identify a system.
- Two chrome dialects coexist: the rail/MFD layer is strict text-glyph (no emoji); the deck/console layer is emoji-heavy.
Structural constraints for any reorg:
- Every route remounts its own
GameLayout, so sidebar/windshield UI state resets per navigation — a persistent layout route is a prerequisite for stateful nav chrome (GameLayout.tsx:134,230). - MFD-A is at its 5-softkey cap; the next MFD page must land on MFD-B or force a redesign.
- Shell geometry is centralized in three CSS variables — regions can be re-plumbed in one file (
game-layout.css:84-172). - Defense/Safe tab bodies live inside the 3,598-line
GameDashboardclosure rather than components — any reorg drags dashboard state with it.
5. Dead surfaces (disposition pending)¶
| Surface | State |
|---|---|
/game/ships, /game/trading |
Routed, zero inbound links — orphans |
| MFD pages TURN ECONOMY, REPUTATION | Registered + tested; no softkey; selection rejected |
pages/Dashboard.tsx (legacy Command Center) |
Imported nowhere |
pages/SubscriptionResult.tsx |
No route — PayPal return flow dead-ends client-side |
| Docked/landed min-bar system (EXPAND/MINIMIZE SURFACE/BAY) | Hidden or no-op |
TacticalCard |
Imported, never rendered |
responsive.css / mobile-game.css layout classes |
Zero TSX usages |
Closed 2026-08-16 (LEG-64 / LEG-72): Windshield planet-popup LAND branch removed — planet Inspect routes to orbital closeup (enterOrbit); LAND remains on the orbital-closeup HUD only. Live-flight windshield LAND stays on the WindshieldTableau proximity flow. Intentional path: planet → orbital closeup → LAND.
6. Reserved menu slots (canon-mandated, partial / unbuilt)¶
Surfaces canon requires that the menu tree must eventually seat — reserve homes for these during any reorganization:
- ✅ ARIA memory journal — Teleprinter JOURNAL tab →
MemoryJournalPanel.tsx(LEG-397 / PR #7018df00523); not the same as a full companion avatar surface — see aria-companion.md. - 🚧 ARIA companion panel (avatar / tier / relationship) — still reserved/partial alongside the shipped journal tab.
- ARIA recommendation panels (aria.md), unified message inbox + priority ladder (messaging.md), fleet coordination (fleet-tactics.md), bounty board (bounties.md), beacon deploy/list (message-beacons.md), mining license/depletion affordances (mining docs), reputation readout in the top bar (DECISIONS #9), and subscription management (monetization.md).