Update toggle component

- Adds text to indicate the current state of the toggle button to meet
  accessibility guidelines
- Update size, color, and focus of toggle component to fix
  DAP violations
- Add page, section, and list-pair layout patterns established
  on the power usage page to begin a pattern for consistent
  page layout
- Add form__field and form__actions to help with form layout
  consistency.

Tested: Verified toggle functions in the GUI and tested with screen reader. Passes DAP.

Signed-off-by: Dixsie Wolmers <dixsiew@gmail.com>
Change-Id: Iaa8646b1179cc307971065c455f4b9448095d1ec
diff --git a/app/common/styles/base/forms.scss b/app/common/styles/base/forms.scss
index 3699521..f04e827 100644
--- a/app/common/styles/base/forms.scss
+++ b/app/common/styles/base/forms.scss
@@ -1,28 +1,31 @@
-label, legend {
-  font-size:1em;
+label,
+legend {
+  font-size: 1em;
   font-weight: 300;
   margin: 0;
   .error {
-    font-size: .9em;
+    font-size: 0.9em;
   }
 }
 
-.label__helper-text {
+// TODO: Start replacing use of label__helper-text
+.label__helper-text,
+.form__helper-text {
   color: $text-02;
   line-height: 1.2;
   font-size: 0.9em;
   margin-bottom: 0.4em;
 }
 
-input[type='email'],
-input[type='number'],
-input[type='password'],
-input[type='search'],
-input[type='tel'],
-input[type='url'],
-input[type='text'],
-input[type='date'],
-input[type='time'],
+input[type="email"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="url"],
+input[type="text"],
+input[type="date"],
+input[type="time"],
 textarea {
   border-radius: 0px;
   border: 1px solid $border-color-02;
@@ -66,37 +69,56 @@
 }
 
 .form-error {
-  margin-bottom: .7em;
+  margin-bottom: 0.7em;
   font-size: 0.8rem;
   color: $status-error;
-  height:1rem;
+  height: 1rem;
   display: block;
   visibility: hidden;
+  // TODO: Create state rulesets rather than relying on one off solutions
   .visible {
     visibility: visible;
   }
 }
 //Foundation overwrite
-[type=color], [type=date], [type=datetime-local], [type=datetime], [type=email], [type=month], [type=number], [type=password], [type=search], [type=tel], [type=text], [type=time], [type=url], [type=week], textarea {
+[type="color"],
+[type="date"],
+[type="datetime-local"],
+[type="datetime"],
+[type="email"],
+[type="month"],
+[type="number"],
+[type="password"],
+[type="search"],
+[type="tel"],
+[type="text"],
+[type="time"],
+[type="url"],
+[type="week"],
+textarea {
   border-color: $border-color-02;
 }
 
 input[readonly],
-input[readonly]:focus{
+input[readonly]:focus {
   box-shadow: 0 0 0;
   background: $background-03;
   border: 1px solid $border-color-02;
 }
 
-textarea { padding: .2em;
-  height: auto;}
-input[type="submit"], .submit {
+textarea {
+  padding: 0.2em;
+  height: auto;
+}
+
+input[type="submit"],
+.submit {
   margin: 1em 0;
   width: 100%;
 }
 
-//Custom select
-select{
+// Custom select
+select {
   border-radius: 0px;
   height: auto;
   padding-right: 0.5rem; //override inherited Foundation style
@@ -121,3 +143,70 @@
   color: $status-error;
   font-size: 0.9em;
 }
+
+/**
+ * Used for basic vertically stacked forms
+ * that do not need a grid for layout
+ * Should only wrap form elements and label
+ * Helper text shoul not be wrapped in the
+ * form-field container
+ * EX: Manage Power Usage
+ * Markup
+    <div class="section-content">
+      <p class="form__helper-text">Some helper text</p>
+      <div class=" form__field">
+        <label for="power-cap" class="content-label">POWER CAP VALUE IN WATTS</label>
+        <input id="power-cap type="number" />
+      </div>
+    </div>
+  */
+
+.form__field {
+  min-width: 150px;
+  max-width: 240px;
+}
+
+.form__field--large {
+  max-width: 330px;
+}
+
+// TODO Replace form-actions with form__actions. see below
+.form-actions {
+  width: 100%;
+  margin-top: 3rem;
+  padding-top: 1rem;
+  border-top: 1px solid $border-color-01;
+
+  button {
+    display: block;
+    float: right;
+    margin: 0.5em 0 0 1em;
+  }
+}
+
+/**
+ * Use to wrap the cancel and submit buttons on
+ * a form to create the top border and white space
+ * Markup
+  <div class="form-actions">
+    <button type="submit" class="btn-primary" ng-click="setPowerCap()">
+      Save settings
+    </button>
+    <button type="button" class="btn btn-secondary" ng-click="refresh()">
+      Cancel
+    </button>
+  </div>
+ */
+
+.form__actions {
+  margin-top: 3rem;
+  padding-top: 1rem;
+  border-top: 1px solid $border-color-01;
+  display: flex;
+  justify-content: flex-end;
+
+  button:first-of-type {
+    order: 1;
+    margin-left: 1rem;
+  }
+}
diff --git a/app/common/styles/base/mixins.scss b/app/common/styles/base/mixins.scss
index 87708da..4c5bfb1 100644
--- a/app/common/styles/base/mixins.scss
+++ b/app/common/styles/base/mixins.scss
@@ -191,3 +191,11 @@
     animation: row-flash 1s infinite; /* IE 10+ */
   }
 }
+
+@mixin label {
+  color: $text-02;
+  text-transform: uppercase;
+  font-weight: 700;
+  font-size: 0.75em;
+  margin-bottom: 0.5rem;
+}
diff --git a/app/common/styles/base/typography.scss b/app/common/styles/base/typography.scss
index f0a5e20..baa6a60 100644
--- a/app/common/styles/base/typography.scss
+++ b/app/common/styles/base/typography.scss
@@ -20,29 +20,35 @@
   color: $text-01;
 }
 
-h1, .h1 {
+h1,
+.h1 {
   font-size: 2.25rem;
   font-weight: 500;
-  padding-top: .5rem;
+  padding-top: 0.5rem;
+  margin-bottom: 3rem;
 }
 
-h2, .h2 {
+h2,
+.h2 {
   font-size: 1.25rem;
   font-weight: bold;
 }
 
-h3, .h3 {
+h3,
+.h3 {
   font-size: 1rem;
   font-weight: bold;
 }
 
-h4, .h4 {
-  font-size: .875rem;
+h4,
+.h4 {
+  font-size: 0.875rem;
   font-weight: bold;
 }
 
-h5, .h5 {
-  font-size: .875rem;
+h5,
+.h5 {
+  font-size: 0.875rem;
   font-weight: 500;
   color: $text-02;
 }
@@ -55,4 +61,4 @@
   font-family: "Courier New", Helvetica, arial, sans-serif;
   font-weight: 700;
   margin-bottom: 0;
-}
\ No newline at end of file
+}
diff --git a/app/common/styles/base/utility.scss b/app/common/styles/base/utility.scss
index 7297628..26f138a 100644
--- a/app/common/styles/base/utility.scss
+++ b/app/common/styles/base/utility.scss
@@ -75,10 +75,6 @@
   margin-top: 0 !important;
 }
 
-.btm-border-grey {
-  border-bottom: 1px solid $border-color-02;
-}
-
 .transitionAll {
   transition: all .5s ease;
 }
diff --git a/app/common/styles/elements/quicklinks.scss b/app/common/styles/elements/quicklinks.scss
index 9d6ea48..c1bff93 100644
--- a/app/common/styles/elements/quicklinks.scss
+++ b/app/common/styles/elements/quicklinks.scss
@@ -50,12 +50,14 @@
     &:after {
       display: none;
     }
+    .toggle-container {
+      float: right;
+    }
   }
   &:last-child {
     border-bottom: 0;
   }
   .float-right {
-    display:inline-block;
     float: right;
     @media(min-width: 1024px) and (max-width: 1140px) {
       display: block;
@@ -77,9 +79,3 @@
     color: $status-error;
   }
 }
-
-//toggle switch
-.quick-links__item .toggle label {
-  transform: translateY(-2px);
-  margin-right: 0;
-}
diff --git a/app/common/styles/elements/toggle-switch.scss b/app/common/styles/elements/toggle-switch.scss
index ae8c276..814da91 100644
--- a/app/common/styles/elements/toggle-switch.scss
+++ b/app/common/styles/elements/toggle-switch.scss
@@ -1,8 +1,5 @@
 @mixin marginTransition {
-  -webkit-transition: margin 0.4s, background 0.4s;
-  -moz-transition: margin 0.4s, background 0.4s;
-  -o-transition: margin 0.4s, background 0.4s;
-  transition: margin 0.4s, background 0.4s;
+  transition: margin $duration--moderate-01, background $duration--moderate-01;
 }
 
 @mixin borderRadius {
@@ -11,11 +8,13 @@
   border-radius: 60px;
 }
 
+.toggle-container {
+  display: flex;
+}
+
 .toggle-switch {
   position: absolute;
-  left: 20px;
-  height: 1px;
-  width: 1px;
+  top: 0;
   opacity: 0;
 }
 
@@ -32,22 +31,25 @@
 
 .toggle label {
   text-indent: -9999px;
-  transform: translateY(-50%); // keeps switch centered
+  margin-right: 0.3rem;
+}
+
+input.toggle-switch__round-flat:focus + label {
+  outline: 1px solid $primary-accent;
+  outline-offset: 3px;
 }
 
 input.toggle-switch__round-flat + label {
   padding: 2px;
-  width: 50px;
-  height: 30px;
+  width: 43px;
+  height: 22px;
   background-color: $border-color-02;
   @include borderRadius;
   @include marginTransition;
 }
 
-input.toggle-switch__round-flat:focus + label {
-  box-shadow: 0 0 4px 4px $primary-accent;
-}
-input.toggle-switch__round-flat + label:before, input.toggle-switch__round-flat + label:after {
+input.toggle-switch__round-flat + label:before,
+input.toggle-switch__round-flat + label:after {
   display: block;
   position: absolute;
   content: "";
@@ -65,7 +67,7 @@
   top: 4px;
   left: 4px;
   bottom: 4px;
-  width: 20px;
+  width: 15px;
   background-color: $border-color-02;
   -webkit-border-radius: 52px;
   -moz-border-radius: 52px;
@@ -76,9 +78,9 @@
   background-color: $primary-accent;
 }
 input.toggle-switch__round-flat:checked + label:before {
-  background-color: $background-02;
+  background-color: $primary-accent;
 }
 input.toggle-switch__round-flat:checked + label:after {
   margin-left: 20px;
-  background-color: $primary-accent;
-}
\ No newline at end of file
+  background-color: $primary-light;
+}
diff --git a/app/common/styles/layout/content.scss b/app/common/styles/layout/content.scss
index 61e082b..8c8b916 100644
--- a/app/common/styles/layout/content.scss
+++ b/app/common/styles/layout/content.scss
@@ -2,15 +2,6 @@
 $nav__toplvlWidth: 120px;
 $nav__seclvlWidth: 240px;
 
-// Page header
-.page-header {
-  width: 100%;
-  position: relative;
-  border-bottom: 1px solid $border-color-02;
-  margin: 0.5em 0 2.2em;
-  padding-left: 0;
-}
-
 // Main element class
 .content__container {
   margin-left: $nav__toplvlWidth;
@@ -41,15 +32,22 @@
   margin-top: 2em;
 }
 
+// TODO: Determine if label and content-label are the same - remove generic element selector
 .content-label,
 label {
-  color: $text-02;
-  text-transform: uppercase;
-  font-weight: 700;
-  font-size: 0.75em;
-  margin-bottom: 0;
+  @include label;
 }
 
+// TODO: Remove and replace with page and page-title pattern
+// Page header
+.page-header {
+  width: 100%;
+  position: relative;
+  border-bottom: 1px solid $border-color-02;
+  margin: 0.5em 0 2.2em;
+  padding-left: 0;
+}
+// TODO: Remove and replace with the .section and .section-title pattern
 .subhead {
   width: 100%;
   border-bottom: 1px solid $border-color-01;
diff --git a/app/common/styles/layout/header.scss b/app/common/styles/layout/header.scss
index 3593780..3e0f0da 100644
--- a/app/common/styles/layout/header.scss
+++ b/app/common/styles/layout/header.scss
@@ -1,3 +1,8 @@
+/**
+ * Application header styles
+ * Should only be used for the application header
+ */
+
 $logoHeight: 30px;
 $logoMaxHeight: 100px;
 $logoMaxWidth: 125px;
@@ -38,7 +43,7 @@
 .header__logout {
   float: right;
   color: $primary-light;
-  font-size: .9em;
+  font-size: 0.9em;
   text-decoration: none;
   padding: 1em;
   font-weight: 400;
@@ -61,7 +66,7 @@
     font-size: 1.5em;
     font-weight: 500;
     color: $text-02;
-    padding: .4em 0 0 1em;
+    padding: 0.4em 0 0 1em;
     height: 100%;
     background: transparent;
     max-width: 600px;
@@ -78,7 +83,7 @@
     }
   }
   .logo__wrapper {
-    padding-top: .5em;
+    padding-top: 0.5em;
   }
 
   .header__logo {
@@ -97,7 +102,7 @@
     right: -480px;
     bottom: 0;
     z-index: 100;
-    margin: .3em 0;
+    margin: 0.3em 0;
     background: $primary-light;
     @include fastTransition-all;
     &.active {
@@ -111,12 +116,13 @@
       color: $primary-dark;
       font-size: 1em;
     }
-    a, p {
+    a,
+    p {
       display: block;
       float: left;
       text-decoration: none;
       color: $text-02;
-      padding: 1.250em;
+      padding: 1.25em;
       height: 100%;
       font-size: 0.875em;
       font-weight: 400;
@@ -125,7 +131,7 @@
         display: block;
         font-size: 1rem;
         font-weight: bold;
-        margin-top: .5em;
+        margin-top: 0.5em;
       }
     }
   }
@@ -137,7 +143,7 @@
   .header__multi-server {
     background: $background-02;
     @include round-corners;
-    margin: 0 .3em;
+    margin: 0 0.3em;
     height: 100%;
     border: 1px solid $border-color-01;
     opacity: 1;
@@ -148,8 +154,8 @@
   }
 
   .header__multi-server {
-    padding: .5em;
-    padding-top: .8em;
+    padding: 0.5em;
+    padding-top: 0.8em;
     float: left;
     margin-top: 10px;
     margin-right: -10px;
@@ -167,12 +173,12 @@
   }
   .header__functions {
     .header__info {
-      padding: .3em;
+      padding: 0.3em;
       min-width: 40px;
       text-align: center;
       float: left;
       span {
-        padding: .7em 0 .3em;
+        padding: 0.7em 0 0.3em;
         font-size: 1em;
         font-weight: 400;
         color: $text-02;
@@ -214,7 +220,7 @@
       font-weight: 400;
       color: $text-02;
       display: block;
-      margin-bottom: .2em;
+      margin-bottom: 0.2em;
     }
     .icon {
       display: block;
diff --git a/app/common/styles/layout/index.scss b/app/common/styles/layout/index.scss
index 4183519..8a33213 100644
--- a/app/common/styles/layout/index.scss
+++ b/app/common/styles/layout/index.scss
@@ -1,2 +1,5 @@
-@import 'header';
-@import 'content';
+@import "header";
+@import "page";
+@import "section";
+@import "content";
+@import "list";
diff --git a/app/common/styles/layout/list.scss b/app/common/styles/layout/list.scss
new file mode 100644
index 0000000..9be7522
--- /dev/null
+++ b/app/common/styles/layout/list.scss
@@ -0,0 +1,18 @@
+/**
+ * Used for any key value pair
+ * Markup
+   <dl class="list-pair">
+     <dt>Term</dt>
+     <dd>Definition associated with the term</dd>
+   </dl>
+ */
+
+.list-pair {
+  dt {
+    @include label;
+  }
+  dd {
+    @include fontCourierBold;
+    margin-bottom: 0;
+  }
+}
diff --git a/app/common/styles/layout/page.scss b/app/common/styles/layout/page.scss
new file mode 100644
index 0000000..2ce98d5
--- /dev/null
+++ b/app/common/styles/layout/page.scss
@@ -0,0 +1,15 @@
+/**
+ * Used for page layout. This should be used for the page container
+ * Mark up
+ <div class="page">
+   <h1 class="page-title">Page Title</h1>
+   ...
+ </div>
+ */
+.page {
+  max-width: 1080px;
+}
+
+.page-title {
+  margin-bottom: 3rem;
+}
diff --git a/app/common/styles/layout/section.scss b/app/common/styles/layout/section.scss
new file mode 100644
index 0000000..e92b096
--- /dev/null
+++ b/app/common/styles/layout/section.scss
@@ -0,0 +1,28 @@
+/**
+ * Used for section layout. This should be used for the page container
+ * Mark up
+ <div class="section">
+   <h2 class="section-title">Section Title</h2>
+   <div class="section-content">
+     ...
+    </div>
+    <div class="section-content">
+     ...
+    </div>
+ </div>
+ */
+
+.section {
+  margin-bottom: 3rem;
+}
+
+.section-title {
+  border-bottom: 1px solid $border-color-01;
+  padding-bottom: 0.5rem;
+  margin-bottom: 1.5rem;
+}
+
+.section-content {
+  margin-bottom: 1.5rem;
+  margin-top: 0;
+}