Minimal <canvas> game framework