- New 💥 Demolish button in the action bar
- Red ghost highlights building footprint on hover
- Refund: 100% within 3 min, decays linearly to 0%
- Mine teardown unblocks passability tiles and removes status label
- Nisse inside demolished mine are rescued and reset to idle
- Floor/wall/chest tiles restored to GRASS on demolish
- Build error now shows missing resources instead of generic message
- BuildingState gains builtAt field; old saves default to 0 (no refund)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New 3×2 building placeable only on ROCK tiles without resources (50 stone + 200 wood)
- Mine entrance at bottom-centre tile (tileX+1, tileY+1) — only passable tile
- Other 5 footprint tiles blocked via resourceTiles index (impassable ROCK)
- Nisse with mine priority > 0 walk to entrance, hide inside for MINE_WORK_MS (15 s),
then reappear carrying MINE_STONE_YIELD (2) stone and haul to stockpile
- Up to MINE_CAPACITY (3) Nisse work simultaneously; overflow Nisse wait for a slot
- ⛏ X/3 world-space status label above building updated each frame
- Surface rock harvesting unchanged; mine buildings take precedence in pickJob
- Ghost resizes to 3×2 when mine is selected; placement validated across full footprint
- Mine added to build menu with cost and placement hint
Closes#42
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add UI_SETTINGS_KEY to config.ts for separate localStorage entry
- Add uiOpacity field (default 0.8, range 0.4–1.0, 10 % steps) to UIScene
- loadUISettings / saveUISettings persist opacity independently of game save
- Replace all hardcoded panel BG alphas with this.uiOpacity:
build menu, villager panel, context menu, ESC menu, confirm dialog,
nisse info panel
- Debug panel (F3) background synced via updateDebugPanelBackground()
- Replace Settings toast with real Settings overlay:
title, opacity − / value / + buttons, Close button
- ESC key priority stack now includes settingsVisible
- repositionUI closes settings panel on window resize
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>