Original prompt
Write a complete, playable single-file HTML5 Canvas game in pure Vanilla JavaScript with NO external libraries, engines, or frameworks. Create an 800x600 <canvas>, implement a 2D Space Defender starship controlled with LEFT/RIGHT arrow keys, fire laser projectiles with SPACE, spawn descending enemy formations, animate particle explosion effects upon impact, render a heads-up display (HUD) with score and lives, and manage a complete 60FPS requestAnimationFrame game loop with state management (Start, Playing, Game Over with Restart). Use modern ES2026 JavaScript (classes, arrow functions, const/let, canvas 2D context drawing API). Return a single standalone HTML file containing embedded <style> and <script>. Design note (interpret freely): this is a zero-framework test of your ability to build a complete game from raw browser primitives. A tight, well-architected game loop, clean state management, and readable vanilla-ES2026 code matter more than flashy art. SCORING & PERSISTENT HIGH-SCORE BOARD (REQUIRED): The game MUST award points for gameplay actions and maintain a persistent high-score table. When a run finishes, prompt the player to enter their name/initials and record it with the score. Save the top 5 scores (name + score) to a local JSON file in the working directory (e.g. high_scores.json), and also write the latest finished run as {"initials": name, "score": number} to /tmp/alpaca_score.json (overwrite it every run) so the arcade scoreboard can pick it up automatically, load and display them on startup and on the game-over screen, and write a new entry whenever a run finishes. Scores must survive restarting the program. Every new game MUST start with the score reset to 0 - never carry over the previous game's score into the next session. The program must run top-to-bottom and open a visible window. OUTPUT REQUIREMENT: Respond with ONLY the raw, runnable source code in a single fenced code block, with the first line starting at column 0 (no leading indentation). Do not include any thinking, explanation, summary, or prose before or after the code, and keep comments inside the code minimal.