       [(str "&:nth-of-type(" n "n+1)")
        {:clear :both}]])))
 
+(defn grid
+  []
+  (list
+    {:display :flex
+     :flex-wrap :wrap}))
+
 (defn column
   [& {:keys [ratio offset cycle uncycle gutter]
       :or {ratio 1 offset 0 cycle 0 uncycle 0}}]

                                                   (column-width (- offset) gutter-width))])
        margin-last (if (neg? offset) margin-r 0)
        cycles (cycle-props cycle side margin-r margin-last)]
    (list {:float side
           :clear :none
           :width (percent col-width)
           (margin side) (percent margin-l)
           (opposite-margin side) (percent margin-r)}
          cycles)))

(defn span
  [& {:keys [ratio offset cycle uncycle gutter]
      :or {ratio 1 offset 0 cycle 0 uncycle 0}}]
  (let [side (direction->side *layout-direction*)
        width (* ratio 100)
        margin-r (if (neg? offset) (* (- offset) 100) 0)
        margin-l (if (pos? offset) (* offset 100) 0)
        cycles (if (pos? cycle)

                  [(str "&:nth-of-type(" cycle "n+1)")
                   {:clear :both}]]
                 [])]
    (list {:flex (if width
                   [[0 0 (px span-width)]]
                   span-width)
           ;:float side
           ;:clear :none
           ;:width (percent span-width)
           (margin side) (percent margin-l)
           (opposite-margin side) (percent margin-r)}
          cycles)))
