         (render [_]
           (if (>= 0 (get-in app [:hero :life]))
             (dom/h1 nil "GAME OVER")
-            (dom/div #js {:className "grid" :tabIndex 0 :onKeyUp (fn [e] (stop-moving e app)) :onKeyDown (fn [e] (start-moving e app) (.preventDefault e))}
-                   (om/build status-bar (:hero app))
-                   (om/build hero app)
-                   (om/build grid (:grid app))
-                   )
+            (dom/div nil
+                     (om/build status-bar (:hero app))
+                     (dom/div #js {:className "grid" :tabIndex 0 :onKeyUp (fn [e] (stop-moving e app)) :onKeyDown (fn [e] (start-moving e app) (.preventDefault e))}
+                              (om/build hero app)
+                              (om/build grid (:grid app))
+                              ))
             )
           )))
     app-state


(defn start-moving [e app]
  (condp = (aget e "keyCode")
    88 (om/update! app [:hero :dx] 5)
    90 (om/update! app [:hero :dx] -5)
    32 (when (and (on-solid-ground? (get-in @app [:hero :position])) (nil? (get-in @app [:hero :jump :start])))
         (om/update! app [:hero :jump :start] (.getTime (js/Date.)))
         (om/update! app [:hero :jump :bottom] (get-in @app [:hero :position :bottom])))
    nil
    )
  )

(defn off-screen [hero]
  hero)

(defn bounce [hero]
  (update-in hero [:position :bottom] + (get-in hero [:bounce]))
  )

(defn grav [hero]
  (let [new-hero (update-in hero [:dy] - 0.75)]
    (update-in new-hero [:position :bottom] + (new-hero :dy))
    )
  )

(defn vertical-block [original-hero new-hero]
  (let [original-bottom (get-in original-hero [:position :bottom])
        supported (on-supporting-block? (update-in (original-hero :position) [:bottom] - 1))]
    (if supported
      (let [nearest-vertical-border (* (ceil (/ original-bottom 70)) 70)
            newer-hero (update-in new-hero [:position :bottom] (fn [_] nearest-vertical-border))]
        (update-in newer-hero [:dy] (fn [_] 0))
        )
      new-hero
        )
      ))

(defn logger [key hero]
  ;;(console-log {key (get-in hero [:position :left])})
  hero
  )

(defn hero [app owner]
  (reify
    om/IWillMount
    (will-mount [_]
      (console-log "mounting...")
      (if (>= 0 (get-in @app [:hero :life]))
        (om/update! app [:game-over] true)
        (go-loop []
          (<! (timeout 30))

          (let [original-hero (get-in @app [:hero])
                new-hero (-> original-hero
                             grav
                             ((partial vertical-block original-hero))
                             move-horizontally
                             bounce
                             )]

            (om/transact! app [:hero] (fn [hero] (merge hero new-hero)))
            )
          (recur)
          )
        )
