{ "_comment": "MAP — the deck's MAP button (to the right of SHIP): the full-screen cartography console, js/ui/MapWindow.js (depth 80, the ResearchWindow idiom). LEFT = the cartography feed (assets/videos/map.mp4, a muted 2:3 loop, the same recipe as the research archive feed). RIGHT = tabs on top (CURRENT SYSTEM is live; GALAXY is a reserved socket — pressing it toasts the lock line), the SYSTEM CHART in the middle, and the SYSTEM readout on the bottom (name + discovery % + resource %). THE CHART (the magic, drawn to a canvas texture): the whole solar system — every object's extent (planets, stations, gates AND asteroid clusters, discovered or not) + `bounds.padding` px of padding on each edge — fitted to the plate. Only DISCOVERED objects are drawn (planets / stations / gates / rock fields, small representations). The TETHER RANGE is drawn as the union boundary (Tether.visibleArcs) with a soft zone glow inside, and everything OUTSIDE the tether union is grayed out (a fog-of-war dim pass with feathered rim) — so the chart reads as 'here is what you have charted, and here is the room to expand'. A live SHIP marker + hover tooltips + click-to-autopilot (GameScene.autopilotTo) sit on top. All colors/motion are steered here.", "enabled": true, "title": "STELLAR CARTOGRAPHY", "meta": "NAV DATA // LIVE FEED", "video": { "_comment": "The cartography feed (like research.video): `file` is the clip under assets/videos/ (or a full relative path / URL). Muted, looping, 2:3 portrait (map.mp4 is 544×800). A missing file leaves the NO SIGNAL plate up — the console still works.", "file": "map.mp4", "aspect": [ 2, 3 ] }, "tabs": { "_comment": "The two sockets above the chart (top right). `currentSystem` is the live tab (default). `galaxy` is reserved — `standby: true` renders it dimmed with the standbyTag, and a press fires the scene's onLocked (a console toast) instead of switching.", "currentSystem": { "id": "currentSystem", "label": "Current System", "accent": "#00e5ff" }, "galaxy": { "id": "galaxy", "label": "Galaxy", "accent": "#ffc94d", "standby": true, "standbyTag": "OFFLINE" } }, "galaxyLockedToast": "GALAXY MAP OFFLINE — SECTOR DATA NOT ACQUIRED", "bounds": { "_comment": "The chart's frame: the furthest X/Y extents of EVERY object in the system (planets, stations, gates, asteroid clusters — discovered or not) plus this much padding, px, on each edge (the design rule: ~1024).", "padding": 1024 }, "chart": { "_comment": "The plate's rendering (the canvas texture is redrawn on open / on discovery / on tether changes). colors follow theme.json (neon cyan range, amber alerts). grid.spacing = the world-px step of the adaptive grid (snapped to 1/2/5×10^k). glow = the soft light pooled inside each tether zone (fraction of the zone radius the gradient spans, and its strength). labels = the small name tags under NAV objects.", "colors": { "bg": "#040914", "bgGlow": "#0a2238", "star": "#9fd8ff", "grid": "#1b3a5a", "gridAlpha": 0.28, "ink": "#eaf6ff", "dim": "#7d92c4", "faint": "#3d4c74", "tether": "#00e5ff", "tetherGlow": "#00e5ff", "neon2": "#ff2d6f", "amber": "#ffc94d", "fog": "#111c33", "fogAlpha": 0.55 }, "grid": { "spacing": 512, "alpha": 0.28 }, "glow": { "span": 0.92, "alpha": 0.22 }, "tetherLine": { "dash": 7, "gap": 5, "width": 2, "coreWidth": 1, "ghost": 2.5 }, "labels": { "enabled": true, "size": 10, "letterSpacing": 1.2 }, "planetMin": 4, "planetMax": 16, "starMin": 7, "starMax": 30, "vignette": 0.34 }, "stats": { "_comment": "The bottom-right SYSTEM readout. discovery = the share of the system's NAV objects (planets + space stations + jump gates — the central body is the chart's anchor, not a count) the player has found; resources = the share of asteroid fields found (the only resource kind for now). Both render as segmented bars (one segment per object) + a percent.", "discoveryLabel": "SYSTEM DISCOVERY", "discoveryMeta": "PLANETS · STATIONS · JUMP GATES", "resourcesLabel": "SYSTEM RESOURCES", "resourcesMeta": "ASTEROID FIELDS", "noResources": "NO RESOURCE FIELDS CHARTED" }, "legend": { "_comment": "The glyph key under the stats (the chart's visual language).", "items": [ { "glyph": "planet", "label": "WORLD" }, { "glyph": "station", "label": "STATION" }, { "glyph": "gate", "label": "JUMP GATE" }, { "glyph": "rock", "label": "ROCKS" }, { "glyph": "tether", "label": "TETHER RANGE" }, { "glyph": "ship", "label": "SHIP" } ] }, "sweep": { "_comment": "The scan band crawling across the chart (the CRT pass of light).", "enabled": true, "everyMs": [ 5200, 9800 ], "durationMs": 1500 }, "glitch": { "_comment": "Ambient glitch bursts over the window (slice bars + title RGB split, the ResearchWindow model).", "enabled": true, "intervalMs": [ 5000, 11000 ], "durationMs": [ 200, 420 ] }, "hover": { "_comment": "Plate hover: the object under the cursor gets a highlight ring + tooltip. radiusSlop = extra screen-px hit slop (tiny map objects need room).", "enabled": true, "radiusSlop": 9 }, "zoom": { "_comment": "Wheel zoom + drag pan over the chart plate (Phaser 4's input plugin delivers `wheel` and pointer events to the plate's image, whose hit area IS the plate — so they only fire over the plate; Phaser also stops the page scroll on the canvas by default). Zooming re-renders the chart at the new scale about the cursor (the painter's grid/labels adapt, so it stays crisp) — the visible box is the full frame ÷ z, clamped inside it. A press that moves past 5px pans the zoomed view (drag); release on a still press is the click (select / double-tap reset). Each system remembers its last view; double-tap on empty plate resets to 1×. sensitivity = exponential zoom per px of wheel delta (0.0022 ≈ 2.2× per 500 px of scroll).", "enabled": true, "zMin": 1, "zMax": 8, "sensitivity": 0.0022 }, "clickToast": { "_comment": "Plate interaction copy.", "coursePlotted": "COURSE PLOTTED — {name}", "noCourse": "NO NAV LOCK — OBJECT NOT CHARTED" }, "confirm": { "_comment": "The ENGAGE AUTOPILOT dialog (js/ui/ConfirmOverlay.js, the save pop-up's confirm) shown over the plate before a click engages autopilot — autopilot is a commitment, so it's confirmed. CONFIRM (ENGAGE) plots the course AND closes the console; CANCEL, a scrim click, or ESC leaves the map exactly as it was (the plate + chrome are inert while it's up). width/height/labels are the console language; the destination + distance body is computed live from the pick.", "width": 440, "height": 168, "title": "ENGAGE AUTOPILOT", "label": "ENGAGE" } }