diff --git a/core/modules/user/css/user.module.css b/core/modules/user/css/user.module.css
index 6d2c51e..bd163db 100644
--- a/core/modules/user/css/user.module.css
+++ b/core/modules/user/css/user.module.css
@@ -79,7 +79,7 @@ div.password-suggestions ul {
   clear: left; /* LTR */
   margin: 0;
   max-width: 33em;
-  overflow: hidden;
+  width: auto;
 }
 [dir="rtl"] .confirm-parent,
 [dir="rtl"] .password-parent {
diff --git a/core/themes/seven/install-page.css b/core/themes/seven/install-page.css
index 5c3bf83..543d934 100644
--- a/core/themes/seven/install-page.css
+++ b/core/themes/seven/install-page.css
@@ -27,23 +27,28 @@
 /**
  * Password widget
  */
-.install-page .password-parent,
-.install-page .confirm-parent {
-  width: auto;
-}
 .install-page .form-item .password-suggestions {
-  float: none;
-  width: auto;
+  float: left;
+  clear: left;
+  width: 100%;
 }
 @media all and (max-width: 1010px) and (min-width: 48em) {
   .install-page .password-strength,
-  .install-page .confirm-parent,
-  .install-page .password-confirm {
-    float: none;
-    width: auto;
+  .install-page .confirm-parent {
+    width: 100%;
+  }
+  .form-type-password {
+    float: left;
+    width: 100%;
   }
   input.password-confirm,
   input.password-field {
     float: none;
   }
+  div.password-confirm {
+    float: none;
+    width: auto;
+    max-width: 100%;
+  }
+
 }
diff --git a/core/themes/seven/seven.theme b/core/themes/seven/seven.theme
index c0a5a08..71ed79a 100644
--- a/core/themes/seven/seven.theme
+++ b/core/themes/seven/seven.theme
@@ -5,8 +5,10 @@
  * Functions to support theming in the Seven theme.
  */
 
+use Drupal\Core\Template\Attribute;
 use Drupal\Core\Template\RenderWrapper;
 use Drupal\Component\Utility\String;
+use Drupal\Component\Utility\Xss;
 
 /**
  * Implements hook_preprocess_HOOK() for page templates.
@@ -345,3 +347,127 @@ function seven_form_node_form_alter(&$form, &$form_state) {
   $form['revision_information']['#type'] = 'container';
   $form['revision_information']['#group'] = 'meta';
 }
+
+/**
+ * Implements theme_form_element().
+ *
+ * Adds an error class to the form description if an error exists.
+ */
+function seven_form_element($variables) {
+  $element = &$variables['element'];
+
+  // This function is invoked as theme wrapper, but the rendered form element
+  // may not necessarily have been processed by form_builder().
+  $element += array(
+    '#title_display' => 'before',
+  );
+
+  // Take over any #wrapper_attributes defined by the element.
+  // @todo Temporary hack for #type 'item'.
+  // @see http://drupal.org/node/1829202
+  if (isset($element['#wrapper_attributes'])) {
+    $attributes = $element['#wrapper_attributes'];
+  }
+  // Add element #id for #type 'item'.
+  if (isset($element['#markup']) && !empty($element['#id'])) {
+    $attributes['id'] = $element['#id'];
+  }
+  // Add element's #type and #name as class to aid with JS/CSS selectors.
+  $attributes['class'][] = 'form-item';
+  if (!empty($element['#type'])) {
+    $attributes['class'][] = 'form-type-' . strtr($element['#type'], '_', '-');
+  }
+  if (!empty($element['#name'])) {
+    $attributes['class'][] = 'form-item-' . strtr($element['#name'], array(' ' => '-', '_' => '-', '[' => '-', ']' => ''));
+  }
+  // Add a class for disabled elements to facilitate cross-browser styling.
+  if (!empty($element['#attributes']['disabled'])) {
+    $attributes['class'][] = 'form-disabled';
+  }
+  $output = '<div' . new Attribute($attributes) . '>' . "\n";
+
+  // If #title is not set, we don't display any label or required marker.
+  if (!isset($element['#title'])) {
+    $element['#title_display'] = 'none';
+  }
+  $prefix = isset($element['#field_prefix']) ? '<span class="field-prefix">' . $element['#field_prefix'] . '</span> ' : '';
+  $suffix = isset($element['#field_suffix']) ? ' <span class="field-suffix">' . $element['#field_suffix'] . '</span>' : '';
+
+  $form_element_label = array('#theme' => 'form_element_label');
+  $form_element_label += array_intersect_key($element, array_flip(array('#id', '#required', '#title', '#title_display', '#parents', '#errors', '#validated')));
+
+  switch ($element['#title_display']) {
+    case 'before':
+    case 'invisible':
+      $output .= ' ' . drupal_render($form_element_label);
+      $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n";
+      break;
+
+    case 'after':
+      $output .= ' ' . $prefix . $element['#children'] . $suffix;
+      $output .= ' ' . drupal_render($form_element_label) . "\n";
+      break;
+
+    case 'none':
+    case 'attribute':
+      // Output no label and no required marker, only the children.
+      $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n";
+      break;
+  }
+
+  if (!empty($element['#description'])) {
+    $attributes = array('class' => array('description'));
+    if (!empty($element['#id'])) {
+      $attributes['id'] = $element['#id'] . '--description';
+    }
+    if (isset($element['#parents']) && !empty($element['#errors']) && !empty($element['#validated'])) {
+      $attributes['class'][] = 'error';
+    }
+    $output .= '<div' . new Attribute($attributes) . '>' . $element['#description'] . "</div>\n";
+  }
+
+  $output .= "</div>\n";
+
+  return $output;
+}
+
+/**
+ * Implements theme_form_element_label().
+ *
+ * Adds an error class to the form label if an error exists.
+ */
+function seven_form_element_label($variables) {
+  $element = $variables['element'];
+  // If title and required marker are both empty, output no label.
+  if ((!isset($element['#title']) || $element['#title'] === '') && empty($element['#required'])) {
+    return '';
+  }
+
+  // If the element is required, a required marker is appended to the label.
+  $marker = array(
+    '#theme' => 'form_required_marker',
+    '#element' => $element
+  );
+  $required = !empty($element['#required']) ? drupal_render($marker) : '';
+
+  $title = Xss::filterAdmin($element['#title']);
+
+  $attributes = array();
+  // Style the label as class option to display inline with the element.
+  if ($element['#title_display'] == 'after') {
+    $attributes['class'][] = 'option';
+  }
+  // Show label only to screen readers to avoid disruption in visual flows.
+  elseif ($element['#title_display'] == 'invisible') {
+    $attributes['class'][] = 'visually-hidden';
+  }
+  if (isset($element['#parents']) && !empty($element['#errors']) && !empty($element['#validated'])) {
+    $attributes['class'][] = 'error';
+  }
+
+  if (!empty($element['#id'])) {
+    $attributes['for'] = $element['#id'];
+  }
+
+  return '<label' . new Attribute($attributes) . '>' . t('!title!required', array('!title' => $title, '!required' => $required)) . '</label>';
+}
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index 95daa96..4b66386 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -747,24 +747,30 @@ fieldset {
   margin: 1em 0;
 }
 .form-item {
-  margin: 1em 0;
+  margin: 0.75em 0;
 }
 .form-type-checkbox {
   padding: 0;
 }
 label {
   display: block;
-  margin: 0;
+  margin: 0 0 0.2em;
   padding: 0;
-  font-weight: bold;
+  font-weight: normal;
+}
+label.error {
+  color: #e62600;
 }
 .form-item label.option {
-  font-size: 0.923em;
   text-transform: none;
+  display: inline-block;
 }
 .form-item label.option input {
   vertical-align: middle;
 }
+.form-disabled label {
+  color: #737373;
+}
 .form-disabled input.form-text,
 .form-disabled input.form-tel,
 .form-disabled input.form-email,
@@ -775,21 +781,47 @@ label {
 .form-disabled input.form-file,
 .form-disabled textarea.form-textarea,
 .form-disabled select.form-select {
-  background-color: #eee;
-  color: #777;
+  border-color: #d4d4d4;
+  background-color: hsla(0, 0%, 0%, .08);
+  box-shadow: none;
+}
+
+.form-item input.error,
+.form-item textarea.error,
+.form-item select.error {
+  border-width: 2px;
+  border-color: #e62600;
+  background-color: hsla(15, 75%, 97%, 1);
+  box-shadow: inset 0 5px 5px -5px #b8b8b8;
+  color: #e62600;
+}
+.form-item input.error:focus,
+.form-item textarea.error:focus,
+.form-item select.error:focus {
+  border-color: #e62600;
+  outline: 0;
+  box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 0 8px 1px #e62600;
+  background-color: #fcf4f2;
+}
+.form-required {
+  font-weight: bold;
+  color: #e62600;
+  font-size: 1.1em;
+  padding-left: 2px;
 }
-
 /* Filter */
 .filter-wrapper {
   font-size: 0.923em;
 }
 ul.tips,
 div.description,
-.form-item div.description {
-  margin: 5px 0;
-  line-height: 1.231em;
-  font-size: 0.923em;
-  color: #555;
+.form-item .description {
+  margin: 0.2em 0 0 0;
+  color: #595959;
+  font-size: 0.9em;
+}
+.form-item .description.error {
+  color: #e62600;
 }
 ul.tips li {
   margin: 0.25em 0 0.25em 1.5em; /* LTR */
@@ -797,15 +829,21 @@ ul.tips li {
 [dir="rtl"] ul.tips li {
   margin: 0.25em 1.5em 0.25em 0;
 }
-body div.form-type-radio div.description,
-body div.form-type-checkbox div.description {
+.form-type-radio .description,
+.form-type-checkbox .description {
   margin-left: 1.5em; /* LTR */
 }
-[dir="rtl"] body div.form-type-radio div.description,
-[dir="rtl"] body div.form-type-checkbox div.description {
+[dir="rtl"] .form-type-radio .description,
+[dir="rtl"] .form-type-checkbox .description {
   margin-left: 0;
   margin-right: 1.5em;
 }
+.form-text,
+.form-textarea {
+  border-radius: 2px;
+  font-size: 1em;
+  line-height: normal;
+}
 input.form-autocomplete,
 input.form-text,
 input.form-tel,
@@ -815,35 +853,53 @@ input.form-search,
 input.form-number,
 input.form-color,
 input.form-file,
+input.form-date,
 textarea.form-textarea,
 select.form-select {
   -webkit-box-sizing: border-box;
   -moz-box-sizing:    border-box;
   box-sizing:         border-box;
-  padding: 2px;
+  padding: .3em .4em .3em .5em;
   max-width: 100%;
-  border: 1px solid #ccc;
+  border: 1px solid #b8b8b8;
   border-top-color: #999;
-  background: #fff;
-  color: #333;
+  border-radius: 2px;
+  background: #fcfcfa;
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .125);
+  font-size: 1em;
+  color: #595959;
   -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
   -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
   transition: border linear 0.2s, box-shadow linear 0.2s;
 }
-input.form-text:focus,
-input.form-tel:focus,
-input.form-email:focus,
-input.form-url:focus,
-input.form-search:focus,
-input.form-number:focus,
-input.form-color:focus,
-input.form-file:focus,
-textarea.form-textarea:focus,
-select.form-select:focus {
-  color: #000;
-  border-color: rgba(0, 116, 189, 0.8);
-  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(220, 220, 220, 0.4);
-  outline-color: rgba(0, 116, 189, 0.5);
+.form-text:focus,
+.form-tel:focus,
+.form-email:focus,
+.form-url:focus,
+.form-search:focus,
+.form-number:focus,
+.form-color:focus,
+.form-file:focus,
+.form-textarea:focus,
+.form-date:focus,
+.form-select:focus {
+  border-color: #40b6ff;
+  outline: 0;
+  box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 0 8px #40b6ff;
+  background-color: #fff;
+}
+.form-search {
+  border-radius: 0;
+  border-top-left-radius: .9em;
+  border-bottom-left-radius: .9em;
+  border-right: none;
+  margin-right: -3px;
+  padding-left: .8em;
+  padding-right: .7em;
+}
+.form-search:last-child {
+  border-radius: .9em;
+  border-right: 1px #b8b8b8 solid;
 }
 
 /**
