R/N/P/F/G/W/A/S/D and arrows all preventDefault()'d unconditionally,
even with focus in #settings-name-input — swallowed those letters
mid-typing (very noticeable for English names). Skip the hotkey handler
entirely when an <input> is focused.
- Favicon: 🚀 emoji via inline SVG data URI, both sokoban.html and php/index.php
- api.php: mb_substr() -> substr() (mbstring not enabled on the server)
- api.php: MariaDB rejects LIMIT directly inside NOT IN(...) (error 1235) —
wrap the top-5 subquery in an extra derived-table SELECT
Verified live against the deployed MySQL/MariaDB DB: whoami, set_name,
submit (insert + dedup + trim-to-5), top all round-trip correctly.
- php/: MySQL-backed (via config.php, gitignored) top-5 solutions per
level, cookie identity with rename, server-side progress for "Продолжить"
- Menu screens: Играть / Продолжить / Предыстория / Настройки, plus
placeholder start/end screens for a future intro/outro
- Lore screen: EXO:GRID backstory text (6 epochs, no gameplay changes yet)
- levels.js/solver.js copied in as-is