diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index b9a513c..8c45fc4 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -92,8 +92,9 @@ function _drupal_maintenance_theme() {
   }
   _drupal_theme_initialize($themes[$theme], array_reverse($base_theme), '_theme_load_offline_registry');
 
-  // These are usually added from system_init() -except maintenance.css.
-  // When the database is inactive it's not called so we add it here.
+  // These are usually added from system_page_build(), except maintenance.css.
+  // When the database is inactive, it's not called so we add them here.
+  drupal_add_library('system', 'drupal.base');
   $path = drupal_get_path('module', 'system');
   drupal_add_css($path . '/css/system.module.css');
   drupal_add_css($path . '/css/system.theme.css');
diff --git a/core/misc/drupal.base-rtl.css b/core/misc/drupal.base-rtl.css
new file mode 100644
index 0000000..f4ad6d5
--- /dev/null
+++ b/core/misc/drupal.base-rtl.css
@@ -0,0 +1,20 @@
+/**
+ * @file
+ * Provides RTL base styling for HTML elements in Drupal.
+ */
+
+html {
+  direction: rtl;
+}
+
+/**
+ * Table elements.
+ */
+caption {
+  text-align: right;
+}
+th {
+  padding-left: 1em;
+  padding-right: 0;
+  text-align: right;
+}
diff --git a/core/misc/drupal.base.css b/core/misc/drupal.base.css
new file mode 100644
index 0000000..9d52f2c
--- /dev/null
+++ b/core/misc/drupal.base.css
@@ -0,0 +1,86 @@
+/**
+ * @file
+ * Provides a base styling for HTML elements in Drupal.
+ */
+
+/**
+ * Block-level HTML5 display definition.
+ *
+ * Provides display values for browsers that don't recognize the new elements
+ * and therefore display them inline by default.
+ */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * Form elements.
+ */
+form {
+  margin: 0;
+  padding: 0;
+}
+fieldset {
+  border: 1px solid #ccc;
+  margin: 1em 0;
+  padding: 0.5em;
+}
+label {
+  display: block;
+  font-weight: bold;
+}
+button {
+  font-size: 1em;
+}
+input {
+  /* Keep form elements from overflowing their containers. */
+  max-width: 100%;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+/**
+ * Table elements.
+ */
+table {
+  border-collapse: collapse;
+  width: 100%;
+}
+caption {
+  text-align: left; /* LTR */
+}
+th {
+  padding-right: 1em; /* LTR */
+  text-align: left; /* LTR */
+}
+thead > tr {
+  border-bottom: 1px solid #000;
+}
+tr {
+  border-bottom: 1px solid #ccc;
+  padding: 0.1em 0.6em;
+}
+
+/**
+ * Miscellaneous elements.
+ */
+hr {
+  border: 1px solid gray;
+  height: 1px;
+}
+img {
+  border: 0;
+}
diff --git a/core/modules/overlay/css/overlay-child-rtl.css b/core/modules/overlay/css/overlay-child-rtl.css
index 0751b56..e595d11 100644
--- a/core/modules/overlay/css/overlay-child-rtl.css
+++ b/core/modules/overlay/css/overlay-child-rtl.css
@@ -3,10 +3,6 @@
  * RTL styling for Overlay child pages.
  */
 
-html {
-  direction: rtl;
-}
-
 #overlay-title {
   float: right;
   left: auto;
diff --git a/core/modules/system/css/system.module.css b/core/modules/system/css/system.module.css
index 9a1c950..a26e84a 100644
--- a/core/modules/system/css/system.module.css
+++ b/core/modules/system/css/system.module.css
@@ -194,16 +194,6 @@ tr .ajax-progress-throbber .throbber {
 }
 
 /**
- *  Keep form elements from overflowing their containers.
- */
-input {
-  max-width: 100%;
-  -moz-box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-}
-
-/**
  * Inline items.
  */
 .container-inline div,
@@ -294,25 +284,3 @@ input {
   display: table;
   clear: both;
 }
-
-/**
- * Block-level HTML5 display definition.
- *
- * Provides display values for browsers that don't recognize the new elements
- * and therefore display them inline by default.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
diff --git a/core/modules/system/css/system.theme-rtl.css b/core/modules/system/css/system.theme-rtl.css
index 789d908..f5f6408 100644
--- a/core/modules/system/css/system.theme-rtl.css
+++ b/core/modules/system/css/system.theme-rtl.css
@@ -1,22 +1,9 @@
-
 /**
  * @file
  * RTL styles for common markup.
  */
 
 /**
- * HTML elements.
- */
-th {
-  text-align: right;
-  padding-left: 1em;
-  padding-right: 0;
-}
-caption {
-  text-align: right;
-}
-
-/**
  * Markup generated by theme_item_list().
  */
 .item-list ul li {
diff --git a/core/modules/system/css/system.theme.css b/core/modules/system/css/system.theme.css
index c67d1a1..536cd93 100644
--- a/core/modules/system/css/system.theme.css
+++ b/core/modules/system/css/system.theme.css
@@ -4,47 +4,6 @@
  */
 
 /**
- * HTML elements.
- */
-fieldset {
-  border: 1px solid #ccc;
-  margin: 1em 0;
-  padding: 0.5em;
-}
-form {
-  margin: 0;
-  padding: 0;
-}
-button {
-  font-size: 1em;
-}
-hr {
-  border: 1px solid gray;
-  height: 1px;
-}
-img {
-  border: 0;
-}
-table {
-  border-collapse: collapse;
-  width: 100%;
-}
-th {
-  padding-right: 1em; /* LTR */
-  text-align: left; /* LTR */
-}
-thead > tr {
-  border-bottom: 1px solid #000;
-}
-tr {
-  border-bottom: 1px solid #ccc;
-  padding: 0.1em 0.6em;
-}
-caption {
-  text-align: left; /* LTR */
-}
-
-/**
  * Publishing status.
  */
 .unpublished {
@@ -96,10 +55,6 @@ tr.even .form-item {
 .form-item .description {
   font-size: 0.85em;
 }
-label {
-  display: block;
-  font-weight: bold;
-}
 label.option {
   display: inline;
   font-weight: normal;
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 59a1144..0caf2fd 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1558,7 +1558,19 @@ function system_library_info() {
     'css' => array(
       'core/misc/normalize/normalize.css' => array(
         'every_page' => TRUE,
-        'weight' => -10,
+        'weight' => CSS_BASE - 20,
+      ),
+    ),
+  );
+
+  // Drupal's base CSS.
+  $libraries['drupal.base'] = array(
+    'title' => 'Drupal base CSS',
+    'version' => VERSION,
+    'css' => array(
+      'core/misc/drupal.base.css' => array(
+        'every_page' => TRUE,
+        'weight' => CSS_BASE - 10,
       ),
     ),
   );
@@ -2500,6 +2512,8 @@ function system_filetransfer_info() {
  * Implements hook_page_build().
  */
 function system_page_build(&$page) {
+  // Note: ensure the same CSS is loaded in _drupal_maintenance_theme().
+  $page['#attached']['library'][] = array('system', 'drupal.base');
   $path = drupal_get_path('module', 'system');
   // Use the CSS_AGGREGATE_SYSTEM group to load these early.
   $page['#attached']['css'][$path . '/css/system.module.css'] = array('group' => CSS_AGGREGATE_SYSTEM, 'every_page' => TRUE);
