diff --git a/core/.stylelintrc.json b/core/.stylelintrc.json
index 2d003dcc9d21bf20bf18f87173c4f8a9a87f08c6..84123b2e7f328070e83c06f0675b60ea84355968 100644
--- a/core/.stylelintrc.json
+++ b/core/.stylelintrc.json
@@ -441,6 +441,7 @@
   "ignoreFiles": [
     "assets/vendor/**/*.css",
     "tests/Drupal/Tests/Core/Asset/css_test_files/**/*.css",
-    "modules/media/css/plugins/drupalmedia/ckeditor.drupalmedia.css"
+    "modules/media/css/plugins/drupalmedia/ckeditor.drupalmedia.css",
+    "themes/stable/css/core/assets/vendor/**/*.css"
   ]
 }
diff --git a/core/assets/vendor/normalize-css/normalize.css b/core/assets/vendor/normalize-css/normalize.css
index 5e5e3c898106bb66986f7224bf51eea2dc3c82a3..192eb9ce43389039996bc2e9344c5bb14b730d72 100644
--- a/core/assets/vendor/normalize-css/normalize.css
+++ b/core/assets/vendor/normalize-css/normalize.css
@@ -1,89 +1,76 @@
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
 
 /**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS and IE text size adjust after device orientation change,
- *    without disabling user zoom.
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
  */
 
 html {
-  font-family: sans-serif; /* 1 */
-  -ms-text-size-adjust: 100%; /* 2 */
+  line-height: 1.15; /* 1 */
   -webkit-text-size-adjust: 100%; /* 2 */
 }
 
+/* Sections
+   ========================================================================== */
+
 /**
- * Remove default margin.
+ * Remove the margin in all browsers.
  */
 
 body {
   margin: 0;
 }
 
-/* HTML5 display definitions
-   ========================================================================== */
-
 /**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
+ * Render the `main` element consistently in IE.
+ */
+
+main {
   display: block;
 }
 
 /**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
  */
 
-audio,
-canvas,
-progress,
-video {
-  display: inline-block; /* 1 */
-  vertical-align: baseline; /* 2 */
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
 }
 
+/* Grouping content
+   ========================================================================== */
+
 /**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
  */
 
-audio:not([controls]) {
-  display: none;
-  height: 0;
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
 }
 
 /**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
  */
 
-[hidden],
-template {
-  display: none;
+pre {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
 }
 
-/* Links
+/* Text-level semantics
    ========================================================================== */
 
 /**
- * Remove the gray background color from active links in IE 10.
+ * Remove the gray background on active links in IE 10.
  */
 
 a {
@@ -91,64 +78,39 @@ a {
 }
 
 /**
- * Improve readability of focused elements when they are also in an
- * active/hover state.
- */
-
-a:active,
-a:hover {
-  outline: 0;
-}
-
-/* Text-level semantics
-   ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
  */
 
 abbr[title] {
-  border-bottom: 1px dotted;
+  border-bottom: none; /* 1 */
+  text-decoration: underline; /* 2 */
+  text-decoration: underline dotted; /* 2 */
 }
 
 /**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ * Add the correct font weight in Chrome, Edge, and Safari.
  */
 
 b,
 strong {
-  font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
-  font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
+  font-weight: bolder;
 }
 
 /**
- * Address styling not present in IE 8/9.
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
  */
 
-mark {
-  background: #ff0;
-  color: #000;
+code,
+kbd,
+samp {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
 }
 
 /**
- * Address inconsistent and variable font size in all browsers.
+ * Add the correct font size in all browsers.
  */
 
 small {
@@ -156,7 +118,8 @@ small {
 }
 
 /**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
  */
 
 sub,
@@ -167,258 +130,220 @@ sup {
   vertical-align: baseline;
 }
 
-sup {
-  top: -0.5em;
-}
-
 sub {
   bottom: -0.25em;
 }
 
+sup {
+  top: -0.5em;
+}
+
 /* Embedded content
    ========================================================================== */
 
 /**
- * Remove border when inside `a` element in IE 8/9/10.
+ * Remove the border on images inside links in IE 10.
  */
 
 img {
-  border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
-  overflow: hidden;
+  border-style: none;
 }
 
-/* Grouping content
+/* Forms
    ========================================================================== */
 
 /**
- * Address margin not present in IE 8/9 and Safari.
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
  */
 
-figure {
-  margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
-  box-sizing: content-box;
-  height: 0;
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit; /* 1 */
+  font-size: 100%; /* 1 */
+  line-height: 1.15; /* 1 */
+  margin: 0; /* 2 */
 }
 
 /**
- * Contain overflow in all browsers.
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
  */
 
-pre {
-  overflow: auto;
+button,
+input { /* 1 */
+  overflow: visible;
 }
 
 /**
- * Address odd `em`-unit font size rendering in all browsers.
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
  */
 
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
+button,
+select { /* 1 */
+  text-transform: none;
 }
 
-/* Forms
-   ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
 /**
- * 1. Correct color not being inherited.
- *    Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ * Correct the inability to style clickable types in iOS and Safari.
  */
 
 button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit; /* 1 */
-  font: inherit; /* 2 */
-  margin: 0; /* 3 */
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
 }
 
 /**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ * Remove the inner border and padding in Firefox.
  */
 
-button {
-  overflow: visible;
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
 }
 
 /**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
+ * Restore the focus styles unset by the previous rule.
  */
 
-button,
-select {
-  text-transform: none;
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
 }
 
 /**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- *    and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- *    `input` and others.
+ * Correct the padding in Firefox.
  */
 
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button; /* 2 */
-  cursor: pointer; /* 3 */
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
 }
 
 /**
- * Re-set default cursor for disabled elements.
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ *    `fieldset` elements in all browsers.
  */
 
-button[disabled],
-html input[disabled] {
-  cursor: default;
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
 }
 
 /**
- * Remove inner padding and border in Firefox 4+.
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
  */
 
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
+progress {
+  vertical-align: baseline;
 }
 
 /**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
+ * Remove the default vertical scrollbar in IE 10+.
  */
 
-input {
-  line-height: normal;
+textarea {
+  overflow: auto;
 }
 
 /**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
  */
 
-input[type="checkbox"],
-input[type="radio"] {
+[type="checkbox"],
+[type="radio"] {
   box-sizing: border-box; /* 1 */
   padding: 0; /* 2 */
 }
 
 /**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
+ * Correct the cursor style of increment and decrement buttons in Chrome.
  */
 
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
   height: auto;
 }
 
 /**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
  */
 
-input[type="search"] {
+[type="search"] {
   -webkit-appearance: textfield; /* 1 */
-  box-sizing: content-box; /* 2 */
+  outline-offset: -2px; /* 2 */
 }
 
 /**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
+ * Remove the inner padding in Chrome and Safari on macOS.
  */
 
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
+[type="search"]::-webkit-search-decoration {
   -webkit-appearance: none;
 }
 
 /**
- * Define consistent border, margin, and padding.
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
  */
 
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
 }
 
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
-  border: 0; /* 1 */
-  padding: 0; /* 2 */
-}
+/* Interactive
+   ========================================================================== */
 
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
  */
 
-textarea {
-  overflow: auto;
+details {
+  display: block;
 }
 
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+/*
+ * Add the correct display in all browsers.
  */
 
-optgroup {
-  font-weight: bold;
+summary {
+  display: list-item;
 }
 
-/* Tables
+/* Misc
    ========================================================================== */
 
 /**
- * Remove most spacing between table cells.
+ * Add the correct display in IE 10+.
  */
 
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
+template {
+  display: none;
 }
 
-td,
-th {
-  padding: 0;
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+  display: none;
 }
diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index fd3fa39f12fe1f07ca57f1d8be2cdf2ac1e8704d..b632a426e05a890bcd4f1c67952be24d441718cd 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -580,10 +580,10 @@ modernizr:
 
 normalize:
   remote: https://github.com/necolas/normalize.css
-  version: "3.0.3"
+  version: "8.0.1"
   license:
     name: MIT
-    url: https://github.com/necolas/normalize.css/blob/master/LICENSE.md
+    url: https://github.com/necolas/normalize.css/blob/8.0.1/LICENSE.md
     gpl-compatible: true
   css:
     base:
diff --git a/core/misc/normalize-fixes.css b/core/misc/normalize-fixes.css
index b400831192a84023f2941408eaef253bb61dcf87..0845eebf286decbebe0637842e8d50c883ecebc2 100644
--- a/core/misc/normalize-fixes.css
+++ b/core/misc/normalize-fixes.css
@@ -1,13 +1,40 @@
 /**
  * @file
- * Fixes for core/assets/vendor/normalize-css/normalize.css since version 3.
+ * Fixes for core/assets/vendor/normalize-css/normalize.css since version 8.0.1.
  */
 
 /**
- * Fix problem with details/summary lines missing the drop arrows.
+ * Add SVG styling for IE that was mistakenly removed from normalize.css in
+ * 8.0.0.
  */
-@media (min--moz-device-pixel-ratio: 0) {
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/**
+ * Prevent regression due to normalize.css no longer hiding the cancel search
+ * button in 8.0.0.
+ * @todo Remove this rule in https://drupal.org/node/3114878
+ */
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+/**
+ * Prevent IE11 and Edge <summary> elements from being displayed as list-item.
+ * due to a rule added in normalize.css 5.0.0. For browsers that support
+ * <summary>, this is the correct styling. For IE11 and Edge, which do not
+ * support this element, this results in an unwanted list-item bullet.
+ */
+/* Target IE11 */
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+  summary {
+    display: block;
+  }
+}
+/* Target Edge */
+@supports (-ms-ime-align:auto) {
   summary {
-    display: list-item;
+    display: block;
   }
 }
diff --git a/core/profiles/demo_umami/themes/umami/css/base.css b/core/profiles/demo_umami/themes/umami/css/base.css
index 385fe877c41d1fc8f67a5b21c643a2d2f3411068..63532a340f5efea8ac83e0fc443d90d3abfb279d 100644
--- a/core/profiles/demo_umami/themes/umami/css/base.css
+++ b/core/profiles/demo_umami/themes/umami/css/base.css
@@ -260,6 +260,37 @@ label {
   font-weight: 700;
 }
 
+/**
+ * Prevent regression due to fieldset styling that was removed in normalize.css
+ * 6.0.0.
+ */
+fieldset {
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+  border: 1px solid #c0c0c0;
+}
+
+/**
+ * Prevent regression due to explicit line-height applied to these elements in
+ * normalize.css 7.0.0.
+ */
+button,
+input:not([type="file"]),
+textarea {
+  line-height: 1.5rem;
+}
+optgroup {
+  line-height: normal;
+}
+
+/**
+ * Prevent regression due to -webkit-appearance being set to button in
+ * normalize.css 4.1.0.
+ */
+::-webkit-file-upload-button {
+  -webkit-appearance: push-button;
+}
+
 ul,
 ol {
   margin-bottom: 1.28rem;
diff --git a/core/themes/bartik/css/components/form.css b/core/themes/bartik/css/components/form.css
index f3400f411f87447e960c9de6200f9a40bc86765e..b2b1eae70a08638c8ec7a45713a2106354becf99 100644
--- a/core/themes/bartik/css/components/form.css
+++ b/core/themes/bartik/css/components/form.css
@@ -13,9 +13,28 @@ form {
   margin: 0;
   padding: 0;
 }
+/**
+ * Prevent regression due to explicit line-height applied to these elements in
+ * normalize.css 7.0.0.
+ */
+button {
+  line-height: 1.21875rem;
+}
+input:not([type="file"]) {
+  line-height: normal;
+}
+select {
+  line-height: 1.5;
+}
+/**
+ * 1. Prevent regression due to fieldset styling that was removed in
+ *    normalize.css 6.0.0.
+ */
 fieldset {
   min-width: 0;
   margin: 1em 0;
+  padding: 0.35em 0.625em 0.75em; /* 1 */
+  border: 1px solid #c0c0c0; /* 1 */
 }
 /**
  * We've temporarily added this Firefox specific rule here to fix fieldset
@@ -87,6 +106,14 @@ textarea {
   font-size: 0.929em;
 }
 
+/**
+ * Prevent regression due to -webkit-appearance being set to button in
+ * normalize.css 4.1.0.
+ */
+::-webkit-file-upload-button {
+  -webkit-appearance: push-button;
+}
+
 /**
  * Make the font slightly bigger in mobile
  * @todo: check the correct font-size
diff --git a/core/themes/bartik/css/components/table.css b/core/themes/bartik/css/components/table.css
index 1aa03804fd41f9ec201549966ac5953f9091a0a7..f7b452473562ae4c473574b3f8d9c6efea657037 100644
--- a/core/themes/bartik/css/components/table.css
+++ b/core/themes/bartik/css/components/table.css
@@ -8,6 +8,7 @@ table {
   margin: 10px 0;
   border-spacing: 0;
   border: 0;
+  border-collapse: collapse;
   font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif;
   font-size: 0.857em;
 }
diff --git a/core/themes/claro/css/components/form.css b/core/themes/claro/css/components/form.css
index c2ab325e92a2063e054450b9e9723aaeaddca952..917dedab7c820b273459dab364adea80516ea06c 100644
--- a/core/themes/claro/css/components/form.css
+++ b/core/themes/claro/css/components/form.css
@@ -280,3 +280,26 @@ tr .form-item,
     float: none;
   }
 }
+
+/**
+ * Prevent regression due to explicit line-heights applied to these elements in
+ * normalize.css 7.0.0.
+ */
+
+button {
+  line-height: 1.125rem;
+}
+
+input,
+optgroup {
+  line-height: 1.5rem;
+}
+
+/**
+ * Prevent regression due to -webkit-appearance being set to button in
+ * normalize.css 4.1.0.
+ */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: push-button;
+}
diff --git a/core/themes/claro/css/components/form.pcss.css b/core/themes/claro/css/components/form.pcss.css
index a39ea94255968e74423aaafee6f8445925b939c3..9ff2ac3b19f431ad49f5f2a14fcc4a048964a09a 100644
--- a/core/themes/claro/css/components/form.pcss.css
+++ b/core/themes/claro/css/components/form.pcss.css
@@ -198,3 +198,23 @@ tr .form-item,
     float: none;
   }
 }
+
+/**
+ * Prevent regression due to explicit line-heights applied to these elements in
+ * normalize.css 7.0.0.
+ */
+button {
+  line-height: 1.125rem;
+}
+input,
+optgroup {
+  line-height: 1.5rem;
+}
+
+/**
+ * Prevent regression due to -webkit-appearance being set to button in
+ * normalize.css 4.1.0.
+ */
+::-webkit-file-upload-button {
+  -webkit-appearance: push-button;
+}
diff --git a/core/themes/claro/css/components/tables.css b/core/themes/claro/css/components/tables.css
index 8996753aff64ca216add53930e71582728bb23d7..3af16a7a95c77ce3feb502b087de35023b89cea6 100644
--- a/core/themes/claro/css/components/tables.css
+++ b/core/themes/claro/css/components/tables.css
@@ -58,6 +58,7 @@ table {
   width: 100%;
   margin-top: 1.5rem;
   margin-bottom: 1.5rem;
+  border-collapse: collapse;
 }
 
 .sticky-header {
diff --git a/core/themes/claro/css/components/tables.pcss.css b/core/themes/claro/css/components/tables.pcss.css
index b0933e68904656b38a0a6f0b85d7a544da8c7add..a141bbd3fed82ee447761acb3b7cb770c5ff655e 100644
--- a/core/themes/claro/css/components/tables.pcss.css
+++ b/core/themes/claro/css/components/tables.pcss.css
@@ -9,6 +9,7 @@ table {
   width: 100%;
   margin-top: var(--space-l);
   margin-bottom: var(--space-l);
+  border-collapse: collapse;
 }
 
 .sticky-header {
diff --git a/core/themes/seven/css/components/form.css b/core/themes/seven/css/components/form.css
index 98e78914e92a1a90690e142e7fd3f8bf74f82d92..66f2f53aded8114ece3ac0082dc074763b2dcf3f 100644
--- a/core/themes/seven/css/components/form.css
+++ b/core/themes/seven/css/components/form.css
@@ -5,6 +5,38 @@ form {
   margin: 0;
   padding: 0;
 }
+
+/**
+ * Prevent regression due to explicit line-height and font-size applied to these
+ * elements in normalize.css 7.0.0.
+ */
+button:not(.button),
+input:not([type="file"],.form-text, .form-textarea) {
+  line-height: 1.25em;
+}
+textarea,
+input[type="search"],
+input[type="number"],
+input[type="email"] {
+  line-height: normal;
+}
+select {
+  font-size: 0.8125rem;
+  line-height: 1.42902em;
+}
+details select {
+  line-height: 1.20324em;
+}
+
+/**
+ * Prevent regression due to fieldset styling that was removed in normalize.css
+ * 6.0.0.
+ */
+fieldset {
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+  border: 1px solid #c0c0c0;
+}
 fieldset:not(.fieldgroup) {
   position: relative;
   min-width: 0;
@@ -353,3 +385,11 @@ select {
 div.filter-options select {
   padding: 0;
 }
+
+/**
+ * Prevent regression due to -webkit-appearance being set to button in
+ * normalize.css 4.1.0.
+ */
+::-webkit-file-upload-button {
+  -webkit-appearance: push-button;
+}
diff --git a/core/themes/seven/css/components/tables.css b/core/themes/seven/css/components/tables.css
index 3b74832c4a46738e4111a3e6815194c36565bf31..90e7ac6690ba6103dc75f43db985745f05421017 100644
--- a/core/themes/seven/css/components/tables.css
+++ b/core/themes/seven/css/components/tables.css
@@ -6,6 +6,7 @@
 table {
   width: 100%;
   margin: 0 0 10px;
+  border-collapse: collapse;
 }
 caption {
   text-align: left; /* LTR */
diff --git a/core/themes/stable/css/core/assets/vendor/normalize-css/normalize.css b/core/themes/stable/css/core/assets/vendor/normalize-css/normalize.css
new file mode 100644
index 0000000000000000000000000000000000000000..5e5e3c898106bb66986f7224bf51eea2dc3c82a3
--- /dev/null
+++ b/core/themes/stable/css/core/assets/vendor/normalize-css/normalize.css
@@ -0,0 +1,424 @@
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS and IE text size adjust after device orientation change,
+ *    without disabling user zoom.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+  background-color: transparent;
+}
+
+/**
+ * Improve readability of focused elements when they are also in an
+ * active/hover state.
+ */
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+  font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; /* 1 */
+  font: inherit; /* 2 */
+  margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+  text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+  cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+  line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
+ */
+
+input[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  box-sizing: content-box; /* 2 */
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+  border: 0; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
diff --git a/core/themes/stable/css/core/normalize-fixes.css b/core/themes/stable/css/core/normalize-fixes.css
new file mode 100644
index 0000000000000000000000000000000000000000..b400831192a84023f2941408eaef253bb61dcf87
--- /dev/null
+++ b/core/themes/stable/css/core/normalize-fixes.css
@@ -0,0 +1,13 @@
+/**
+ * @file
+ * Fixes for core/assets/vendor/normalize-css/normalize.css since version 3.
+ */
+
+/**
+ * Fix problem with details/summary lines missing the drop arrows.
+ */
+@media (min--moz-device-pixel-ratio: 0) {
+  summary {
+    display: list-item;
+  }
+}
diff --git a/core/themes/stable/stable.info.yml b/core/themes/stable/stable.info.yml
index 52e93789a099ff44396ed98c16ac93d2389d88b6..511d88444619c2a8a64fa634013b988525e60d29 100644
--- a/core/themes/stable/stable.info.yml
+++ b/core/themes/stable/stable.info.yml
@@ -89,6 +89,9 @@ libraries-override:
       component:
         misc/vertical-tabs.css: css/core/vertical-tabs.css
 
+  # Load version 3.0.3 of normalize.css for backwards compatibility.
+  core/normalize: stable/normalize
+
   dblog/drupal.dblog:
     css:
       component:
diff --git a/core/themes/stable/stable.libraries.yml b/core/themes/stable/stable.libraries.yml
index cfa2abb66ed9f16b581d1da3c4ed90fe2e1c7600..8ef4f9928d4e04986a0e75e2712b32620588ccc5 100644
--- a/core/themes/stable/stable.libraries.yml
+++ b/core/themes/stable/stable.libraries.yml
@@ -7,3 +7,15 @@ drupal.user:
   version: VERSION
   js:
     js/user.theme.js: {}
+
+normalize:
+  remote: https://github.com/necolas/normalize.css
+  version: "3.0.3"
+  license:
+    name: MIT
+    url: https://github.com/necolas/normalize.css/blob/3.0.3/LICENSE.md
+    gpl-compatible: true
+  css:
+    base:
+      css/core/assets/vendor/normalize-css/normalize.css: { weight: -20 }
+      css/core/normalize-fixes.css: { weight: -19 }