     (render [_]
       (let [controls-ch (om/get-shared owner [:comms :controls])]
         (html
-         [:div
-          [:h2 (str "Change parallelism for " (vcs-url/project-name (get-in project-data [:project :vcs_url])))]
-          (if-not (:plan project-data)
-            [:div.loading-spinner common/spinner]
-            (list (parallelism-picker project-data controls-ch)
-                  (mini-parallelism-faq project-data)))])))))
+         [:section
+          [:article
+           [:h2 (str "Change parallelism for " (vcs-url/project-name (get-in project-data [:project :vcs_url])))]
+           (if-not (:plan project-data)
+             [:div.loading-spinner common/spinner]
+             (list (parallelism-picker project-data controls-ch)
+                   (mini-parallelism-faq project-data)))]])))))
 
 (defn env-vars [project-data owner]
   (reify

            project-id (project-model/id project)
            controls-ch (om/get-shared owner [:comms :controls])]
        (html
         [:div.environment-variables
          [:h2 "Environment variables for " (vcs-url/project-name (:vcs_url project))]
          [:div.environment-variables-inner
           [:p
            "Add environment variables to the project build.  You can add sensitive data (e.g. API keys) here, rather than placing them in the repository. "
            "The values can be any bash expression and can reference other variables, such as setting "
            [:code "M2_MAVEN"] " to " [:code "${HOME}/.m2)"] "."
            " To disable string substitution you need to escape the " [:code "$"]
            " characters by prefixing them with " [:code "\\"] "."
            " For example, a crypt'ed password like " [:code "$1$O3JMY.Tw$AdLnLjQ/5jXF9.MTp3gHv/"]
            " would be entered as " [:code "\\$1\\$O3JMY.Tw\\$AdLnLjQ/5jXF9.MTp3gHv/"] "."]
           [:form
            [:input#env-var-name
             {:required true, :type "text", :value new-env-var-name
              :on-change #(utils/edit-input controls-ch (conj state/inputs-path :new-env-var-name) %)}]
            [:label {:placeholder "Name"}]
            [:input#env-var-value
             {:required true, :type "text", :value new-env-var-value
              :on-change #(utils/edit-input controls-ch (conj state/inputs-path :new-env-var-value) %)}]
            [:label {:placeholder "Value"}]
            (forms/stateful-button
             [:input {:data-failed-text "Failed",
                      :data-success-text "Added",
                      :data-loading-text "Adding...",
                      :value "Save variables",
                      :type "submit"
                      :on-click #(do
                                   (put! controls-ch [:created-env-var {:project-id project-id}])
                                   false)}])]
           (when-let [env-vars (seq (:envvars project-data))]
             [:table
              [:thead [:tr [:th "Name"] [:th "Value"] [:th]]]
              [:tbody
               (for [{:keys [name value]} env-vars]
                 [:tr
                  [:td {:title name} name]
                  [:td {:title value} value]
                  [:td
                   [:a
                    {:title "Remove this variable?",
                     :on-click #(put! controls-ch [:deleted-env-var {:project-id project-id
                                                                     :env-var-name name}])}
                    [:i.fa.fa-times-circle]
                    [:span " Remove"]]]])]])]])))))

(defn experiments [project-data owner]
  (reify

             :or {scope "status" label ""}} (:new-api-token project-data)
            controls-ch (om/get-shared owner [:comms :controls])]
        (html
         [:section.circle-api-page
          [:article
           [:h2 "API tokens for " (vcs-url/project-name (:vcs_url project))]
           [:div.circle-api-page-inner
            [:p "Create and revoke project-specific API tokens to access this project's details using our API. First choose a scope "
             [:i.fa.fa-question-circle#scope-popover-hack {:title "Scope"}]
             " and then create a label."]
            [:form
             [:div.styled-select
              [:select {:name "scope" :value scope
                        :on-change #(utils/edit-input controls-ch (conj state/project-data-path :new-api-token :scope) %)}
               [:option {:value "status"} "Status"]
               [:option {:value "view-builds"} "Build Artifacts"]
               [:option {:value "all"} "All"]]
              [:i.fa.fa-chevron-down]]
             [:input
              {:required true, :type "text" :value (str label)
               :on-change #(utils/edit-input controls-ch (conj state/project-data-path :new-api-token :label) %)}]
             [:label {:placeholder "Token label"}]
             (forms/stateful-button
              [:input
               {:data-failed-text "Failed",
                :data-success-text "Created",
                :data-loading-text "Creating...",
                :on-click #(do (put! controls-ch [:saved-project-api-token {:project-id project-id
                                                                            :api-token {:scope scope
                                                                                        :label label}}])
                               false)
                :value "Create token",
                :type "submit"}])]
            (when-let [tokens (seq (:tokens project-data))]
              [:table
               [:thead
                [:th "Scope"]
                [:th "Label"]
                [:th "Token"]
                [:th "Created"]
                [:th]]
               [:tbody
                (for [{:keys [scope label token time]} tokens]
                  [:tr
                   [:td scope]
                   [:td label]
                   [:td [:span.code token]]
                   [:td time]
                   [:td
                    [:a.slideBtn
                     {:title "Remove this Key?",
                      :on-click #(put! controls-ch [:deleted-project-api-token {:project-id project-id
                                                                                :token token}])}
                     [:i.fa.fa-times-circle]
                     [:span " Remove"]]]])]])]]])))))

(defn artifacts [project-data owner]
  (om/component
