Treat DOM elements like objects sliding around on the page.
This is currently considered experimental.
Everything is either a Surface or a SurfaceObject. A Surface can contain contain many SurfaceObjects and a SurfaceObject must belong to a Surface.
This is what defines the boundaries of motions for SurfaceObjects. This can be a DOM node, the window, or manually specified bounds.
These are the objects that do the moving. They move within the bounds of the SurfaceObject that they belong to.