                       :step     "1"
                       :onChange #(set-grid-size! app (js/parseInt (.. % -target -value)))})
 
-                    (dom/label nil "playback speed:")
+                    (dom/label nil "playback speed")
                     (dom/input #js {
                       :type     "range"
                       :value    (- tick-ms)


(defn paint-canvas! [{:keys [moves grid-size]} tick]
  (take! (@img-cache tick) (fn [img]
    (let [ts (/ capture-size grid-size)]
      (.clearRect playback-ctx 0 0 capture-size capture-size)
      (doseq [[idx pos] (:cells (moves tick))]
        (if-not (= idx :empty)
          (let [[x1 y1] (get-cell-xy idx grid-size)
                [x2 y2] (get-cell-xy pos grid-size)]
            (.drawImage playback-ctx img (* x1 ts) (* y1 ts) ts ts (* x2 ts) (* y2 ts) ts ts))))
      (.drawImage playback-ctx img 0 capture-size)))))

(defonce app-state (atom {}))



(om/root
    (fn [{:keys [stream cells win-state moves tick-ms grid-size media-error? show-nums] :as app} _]
      (reify
        om/IDidMount
        (did-mount [_]
