{ "_comment": "COMMAND DECK — the cyberpunk bar across the bottom of the screen (rendered by js/ui/ActionBar.js). Six evenly spaced slots: `buttons` is the ORDERED list — give a slot an `id` (the action it will fire) + `label` + `accent`, or leave both `null` for a reserved slot. Buttons currently fire `onAction` (see GameScene); the behavior behind them comes next. Everything visual is procedural (no image assets) and tunable here: layout in `height`/`margin`/`padding`/`button`, palette in `colors`, CRT scanlines in `scanline`, motion in `animation` (boot flicker, the rail comet, the glitch bursts, the RGB pull-apart).", "enabled": true, "height": 92, "margin": { "left": 20, "right": 20, "bottom": 12 }, "padding": 16, "button": { "widthFactor": 0.72, "maxWidth": 190, "notch": 10, "iconSize": 26, "fontSize": 14, "letterSpacing": 2.5 }, "buttons": [ { "id": "research", "label": "Research", "accent": "#00e5ff" }, { "id": "build", "label": "Build", "accent": "#ffc94d" }, { "id": "ship", "label": "Ship", "accent": "#7ce8a4" }, { "id": null, "label": null }, { "id": null, "label": null }, { "id": "menu", "label": "Menu", "accent": "#ff2d6f" } ], "colors": { "panelTop": "#101c36", "panelBottom": "#04070e", "slotBg": "#0b1322", "slotBorder": "#22405f", "rail": "#00e5ff", "railBottom": "#ff2d6f", "text": "#eaf6ff", "reserved": "#3d4c74", "hatch": "#78b4ff" }, "scanline": { "_comment": "CRT scanlines over the bar + buttons — the menu's recipe (one dark row per pitch rows). Defaults follow theme.overlay.scanline; override here for the deck only.", "pitch": 3, "alpha": 0.14 }, "animation": { "bootStagger": 70, "rgb": { "_comment": "RGB pull-apart on icons/labels/panel (the menu title's GlitchText technique): idleOffset px of constant chromatic fringe, burstOffset extra px at full burst, idleAlpha/burstAlpha ghost strength.", "idleOffset": 1.8, "burstOffset": 6, "idleAlpha": 0.4, "burstAlpha": 0.55 }, "comet": { "enabled": true, "everyMs": [3600, 7800], "durationMs": 950 }, "glitch": { "enabled": true, "intervalMs": [3500, 9000], "durationMs": [240, 480], "slices": [3, 6] } } }