# Codebase Summary ## Layout ``` src/ ├── main.js # Mounts App.svelte into #app ├── App.svelte # Root router: menu / levels / game ├── app.css # Nord palette (CSS variables) + resets ├── lib/ │ ├── core/ │ │ ├── level-parser.js # XSB text → {walls, targets, boxes, player, floors} │ │ ├── board-model.js # Pure game state + move/undo/win logic │ │ ├── progress-store.js # localStorage persistence (completed + best moves) │ │ └── haptics.js # navigator.vibrate wrapper (10ms on box push, 60ms on win) │ └── data/ │ └── microban-levels.js # 155 XSB level strings (Microban, D. W. Skinner) └── views/ ├── MenuView.svelte # Title, play, progress, hints ├── LevelSelectView.svelte # Paginated 5×4 grid (20/page × 8 pages) ├── GameView.svelte # Board + HUD + win overlay + input + haptics ├── Board.svelte # Presentational DOM board (div-per-tile, touch-action: none) ├── MobileControls.svelte # On-screen D-pad + action stack (hidden on desktop) └── AppButton.svelte # Shared themed button (wraps native