tiennm99 b8db785422 fix(mobile): claw back vertical/horizontal space in landscape
Tighten everything that fights the board for pixels in landscape:

- #app top padding 12 -> 6 (saves 6px vertical).
- .game gap 10 -> 6 (saves 4px between HUD and board).
- D-pad arrows 48 -> 44px and action button height 48 -> 44px (still
  above the 44pt HIG minimum). Dock width shrinks 160 -> 150px and
  internal d-pad height 102 -> 94px.
- Dock now justify-content: flex-end so the action stack and d-pad
  cluster at the bottom of the column (natural thumb arc), leaving
  empty space above instead of mid-column.

computeTileSize landscape branch: chromeY 76 -> 64, chromeX
240 -> 186 to match the slimmer chrome reservation. Net board win on
800x360 phones: ~47 -> 50 tile (+6%); on Pixel 7 landscape Microban 1
already hits the 56px cap and stays there. Tall puzzles still bound
by viewport height — no CSS-only path past that without scroll.

All changes gated behind @media (pointer: coarse) and (orientation:
landscape). Portrait and desktop untouched.
2026-04-29 00:18:07 +07:00
2026-04-27 20:51:37 +07:00
2026-04-20 16:01:04 +07:00
2025-04-26 23:07:35 +07:00
2025-04-26 22:44:57 +07:00

Sokoban

My from-scratch Sokoban game, built with Svelte 5 and Vite. The engine, UI, level parser, and progression system are all my own implementation. The puzzle layouts themselves come from David W. Skinner's freely distributable Microban set — I'm not reusing any of his code, only his level designs.

Play: https://tiennm99.github.io/sokoban/

Features

  • All 155 puzzles from the Microban set, from beginner teasers up to the giant "Take the long way home" maze and "The Dungeon" finale.
  • Paginated level select with progress tracking and best-move record per level.
  • Controls: Arrow keys or WASD on desktop; on-screen D-pad on mobile (bottom-right, one-handed). U / Z to undo, R to restart, Esc for menu.
  • Mobile-optimized: Touch-safe controls, haptic feedback (vibrate on push & win), safe-area insets for notches/nav bars, browser gesture blocking.
  • Installable PWA: Add to home screen on iOS/Android, play offline, standalone fullscreen mode.
  • Undo history, live move counter, animated moves.
  • Progress saved locally in localStorage (per browser, per device).
  • Responsive tile sizing so small and large levels both look right on any screen.

Development

npm install
npm run dev          # dev server on http://localhost:8080
npm run build        # production build

Project layout

See docs/codebase-summary.md.

Documentation

Credits

License

  • Source code: see LICENSE.
  • Puzzle layouts (Microban): see LICENSE-LEVELS.md — Skinner's free-distribution-with-credit terms, not the main project license.
S
Description
From-scratch Sokoban puzzle game — Svelte 5 + Vite, all 155 Microban levels, undo, progress tracking
Readme Apache-2.0
1.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Svelte 56.5%
JavaScript 38%
CSS 4.8%
HTML 0.7%