diff -ruN a/src/core/game_settings.gd b/src/core/game_settings.gd --- a/src/core/game_settings.gd 2026-11-07 00:09:03.034481849 -0300 +++ b/src/core/game_settings.gd 2026-11-07 00:09:03.069453885 -0300 @@ -70,9 +70,12 @@ window.mode = Window.MODE_FULLSCREEN else: window.mode = Window.MODE_WINDOWED - window.size = ( - Vector2i(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT) * window_scale - ) + # Site build: in the browser the canvas follows the page, so the window is not resized + # (forcing 1280x720 made it overflow the game frame and cropped the picture). + if not OS.has_feature("web"): + window.size = ( + Vector2i(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT) * window_scale + ) DisplayServer.window_set_vsync_mode( DisplayServer.VSYNC_ENABLED if vsync else DisplayServer.VSYNC_DISABLED ) diff -ruN a/src/data/balance.gd b/src/data/balance.gd --- a/src/data/balance.gd 2026-11-06 23:42:19.928059429 -0300 +++ b/src/data/balance.gd 2026-11-06 23:42:19.966080065 -0300 @@ -3,7 +3,9 @@ ## Loads data/balance/physics.csv (key,value) once and maps 1-5 stat ranks to physical values. ## Static access only; call Balance.reload() in tests that write a different CSV. -const CSV_PATH: String = "res://data/balance/physics.csv" +# Site build: the Godot importer turns physics.csv into a translation and leaves the source out of the pack, so the build +# script renames the file (no importer for .txt) and this path follows it. +const CSV_PATH: String = "res://data/balance/physics.data.txt" static var _values: Dictionary = {} static var _loaded: bool = false diff -ruN a/src/ui/menu/menu_screen.gd b/src/ui/menu/menu_screen.gd --- a/src/ui/menu/menu_screen.gd 2026-11-06 23:31:17.335760794 -0300 +++ b/src/ui/menu/menu_screen.gd 2026-11-06 23:31:17.362917650 -0300 @@ -19,6 +19,9 @@ garage_button.pressed.connect(garage) options_button.pressed.connect(options) quit_button.pressed.connect(quit) + # Site build: no online rooms (they need a game server) and no Quit (it only freezes a browser page). + online_button.hide() + quit_button.hide() PlayerProfile.changed.connect(refresh) GameSettings.changed.connect(refresh) refresh()