 core/includes/batch.inc                            |  8 ++--
 core/modules/block/src/BlockForm.php               |  4 +-
 core/modules/book/book.libraries.yml               | 12 ++++++
 core/modules/book/book.module                      | 18 +++++----
 core/modules/color/color.libraries.yml             |  7 ++++
 core/modules/color/color.module                    | 44 ++--------------------
 core/modules/comment/comment.libraries.yml         |  6 +++
 core/modules/comment/src/CommentViewBuilder.php    |  2 +-
 .../config/src/Controller/ConfigController.php     |  2 +-
 .../content_translation.admin.inc                  |  1 -
 .../modules/editor/src/Tests/EditorManagerTest.php |  2 +-
 .../editor/tests/modules/editor_test.libraries.yml |  4 ++
 .../modules/src/Plugin/Editor/UnicornEditor.php    |  2 +-
 core/modules/help/help.libraries.yml               |  5 +++
 .../modules/help/src/Controller/HelpController.php |  2 +-
 core/modules/image/image.libraries.yml             | 11 ++++++
 .../modules/image/src/Form/ImageEffectFormBase.php |  2 +-
 core/modules/image/src/Form/ImageStyleEditForm.php |  2 +-
 .../src/Plugin/Field/FieldWidget/ImageWidget.php   |  2 +-
 .../locale/src/Form/TranslationStatusForm.php      |  1 -
 core/modules/node/node.libraries.yml               |  3 ++
 core/modules/search/search.libraries.yml           |  5 +++
 core/modules/search/src/SearchPageListBuilder.php  | 10 ++---
 core/modules/simpletest/simpletest.module          |  2 +-
 .../simpletest/src/Form/SimpletestResultsForm.php  |  2 +-
 .../system/src/Tests/Ajax/FrameworkTest.php        |  2 +-
 core/modules/system/system.libraries.yml           |  6 +++
 .../src/Form/AjaxFormsTestLazyLoadForm.php         | 27 +++++++------
 core/modules/views/includes/ajax.inc               |  3 --
 core/modules/views_ui/src/ViewAddForm.php          |  3 +-
 core/modules/views_ui/src/ViewEditForm.php         |  3 +-
 core/modules/views_ui/src/ViewFormBase.php         | 21 -----------
 core/modules/views_ui/src/ViewListBuilder.php      |  1 -
 core/modules/views_ui/views_ui.libraries.yml       | 11 ++++++
 core/themes/bartik/bartik.libraries.yml            | 10 +++++
 core/themes/bartik/color/color.inc                 |  3 +-
 36 files changed, 130 insertions(+), 119 deletions(-)

diff --git a/core/includes/batch.inc b/core/includes/batch.inc
index 088889d..4150e72 100644
--- a/core/includes/batch.inc
+++ b/core/includes/batch.inc
@@ -58,11 +58,11 @@ function _batch_page(Request $request) {
 
   $build = array();
 
-  // Add batch-specific CSS.
+  // Add batch-specific libraries.
   foreach ($batch['sets'] as $batch_set) {
-    if (isset($batch_set['css'])) {
-      foreach ($batch_set['css'] as $css) {
-        $build['#attached']['css'][$css] = array();
+    if (isset($batch_set['library'])) {
+      foreach ($batch_set['library'] as $library) {
+        $build['#attached']['library'][] = $library;
       }
     }
   }
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 0a5c8de..23d6ca0 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -162,9 +162,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#prefix' => '<div id="edit-block-region-wrapper">',
       '#suffix' => '</div>',
     );
-    $form['#attached']['css'] = array(
-      drupal_get_path('module', 'block') . '/css/block.admin.css',
-    );
+    $form['#attached']['library'][] = 'block/drupal.block.admin';
     return $form;
   }
 
diff --git a/core/modules/book/book.libraries.yml b/core/modules/book/book.libraries.yml
index fe4209e..2382e75 100644
--- a/core/modules/book/book.libraries.yml
+++ b/core/modules/book/book.libraries.yml
@@ -6,3 +6,15 @@ drupal.book:
     - core/jquery
     - core/drupal
     - core/drupal.form
+
+navigation:
+  version: VERSION
+  css:
+    theme:
+      css/book.theme.css: {}
+
+admin:
+  version: VERSION
+  css:
+    theme:
+      css/book.admin.css: {}
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index 43fb2457..5a7efe0 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -163,9 +163,11 @@ function book_form_node_form_alter(&$form, FormStateInterface $form_state, $form
       '#value' => t('Change book (update list of parents)'),
       '#submit' => array('book_pick_book_nojs_submit'),
       '#weight' => 20,
-      '#attached' => array(
-        'css' => array(drupal_get_path('module', 'book') . '/css/book.admin.css'),
-      ),
+      '#attached' => [
+        'library' => [
+          'book/admin',
+        ],
+      ],
     );
     $form['#entity_builders'][] = 'book_node_builder';
   }
@@ -240,11 +242,11 @@ function book_node_view(array &$build, EntityInterface $node, EntityViewDisplayI
       $build['book_navigation'] = array(
         '#markup' => drupal_render($book_navigation),
         '#weight' => 100,
-        '#attached' => array(
-          'css' => array(
-            drupal_get_path('module', 'book') . '/css/book.theme.css',
-          ),
-        ),
+        '#attached' => [
+          'library' => [
+            'book/navigation',
+          ],
+        ],
         // The book navigation is a listing of Node entities, so associate its
         // list cache tag for correct invalidation.
         '#cache' => [
diff --git a/core/modules/color/color.libraries.yml b/core/modules/color/color.libraries.yml
index c6a2db9..b2eb8d6 100644
--- a/core/modules/color/color.libraries.yml
+++ b/core/modules/color/color.libraries.yml
@@ -18,3 +18,10 @@ drupal.color.preview:
     - core/drupal
     - core/drupalSettings
     - core/jquery.once
+
+admin:
+  version: VERSION
+  css:
+    theme:
+      css/color.admin.css: {}
+
diff --git a/core/modules/color/color.module b/core/modules/color/color.module
index 138385c..5b00869 100644
--- a/core/modules/color/color.module
+++ b/core/modules/color/color.module
@@ -65,36 +65,6 @@ function color_form_system_theme_settings_alter(&$form, FormStateInterface $form
 }
 
 /**
- * Implements hook_css_alter().
- *
- * Replaces style sheets with color-altered style sheets.
- */
-function color_css_alter(&$css) {
-  $theme_key = \Drupal::theme()->getActiveTheme()->getName();
-  $themes = list_themes();
-
-  // Override stylesheets.
-  $color_paths = \Drupal::config('color.theme.' . $theme_key)->get('stylesheets');
-
-  if (!empty($color_paths) && !empty($themes[$theme_key]->stylesheets['all'])) {
-
-    foreach ($themes[$theme_key]->stylesheets['all'] as $old_path) {
-      // Loop over the path array with recolored CSS files to find matching
-      // paths which could replace the non-recolored paths.
-      foreach ($color_paths as $color_path) {
-        // Color module currently requires unique file names to be used,
-        // which allows us to compare different file paths.
-        if (drupal_basename($old_path) == drupal_basename($color_path)) {
-          // Replace the path to the new css file.
-          // This keeps the order of the stylesheets intact.
-          $css[drupal_basename($old_path)]['data'] = $color_path;
-        }
-      }
-    }
-  }
-}
-
-/**
  * Implements hook_library_alter().
  *
  * Replaces style sheets declared in libraries with color-altered style sheets.
@@ -240,10 +210,7 @@ function color_scheme_form($complete_form, FormStateInterface $form_state, $them
     '#attached' => array(
       'library' => array(
         'color/drupal.color',
-      ),
-      // Add custom CSS.
-      'css' => array(
-        $base . '/css/color.admin.css' => array(),
+        'color/admin',
       ),
       // Add custom JavaScript.
       'js' => array(
@@ -297,15 +264,10 @@ function template_preprocess_color_scheme_form(&$variables) {
 
   $theme = $form['theme']['#value'];
   $info = $form['info']['#value'];
-  $path = drupal_get_path('theme', $theme) . '/';
 
-  if (isset($info['preview_css'])) {
-    $preview_css_path = $path . $info['preview_css'];
-    $form['scheme']['#attached']['css'][$preview_css_path] = array();
+  if (isset($info['preview_library'])) {
+    $form['scheme']['#attached']['library'][] = $info['preview_library'];
   }
-  $preview_js_path = isset($info['preview_js']) ? $path . $info['preview_js'] : drupal_get_path('module', 'color') . '/' . 'preview.js';
-  // Add the JS at a weight below color.js.
-  $form['scheme']['#attached']['js'][$preview_js_path] = array('weight' => -1);
 
   // Attempt to load preview HTML if the theme provides it.
   $preview_html_path = \Drupal::root() . '/' . (isset($info['preview_html']) ? drupal_get_path('theme', $theme) . '/' . $info['preview_html'] : drupal_get_path('module', 'color') . '/preview.html');
diff --git a/core/modules/comment/comment.libraries.yml b/core/modules/comment/comment.libraries.yml
index ac1ba10..46c98e7 100644
--- a/core/modules/comment/comment.libraries.yml
+++ b/core/modules/comment/comment.libraries.yml
@@ -7,6 +7,12 @@ drupal.comment:
     - core/drupal
     - core/drupal.form
 
+drupal.comment.threaded:
+  version: VERSION
+  css:
+    theme:
+      css/comment.theme.css: {}
+
 drupal.comment-by-viewer:
   version: VERSION
   js:
diff --git a/core/modules/comment/src/CommentViewBuilder.php b/core/modules/comment/src/CommentViewBuilder.php
index cd9a5b9..0e453ae 100644
--- a/core/modules/comment/src/CommentViewBuilder.php
+++ b/core/modules/comment/src/CommentViewBuilder.php
@@ -315,7 +315,7 @@ protected function alterBuild(array &$build, EntityInterface $comment, EntityVie
 
       // Add indentation div or close open divs as needed.
       if ($is_threaded) {
-        $build['#attached']['css'][] = drupal_get_path('module', 'comment') . '/css/comment.theme.css';
+        $build['#attached']['library'][] = 'comment/drupal.comment.threaded';
         $prefix .= $comment->divs <= 0 ? str_repeat('</div>', abs($comment->divs)) : "\n" . '<div class="indented">';
       }
 
diff --git a/core/modules/config/src/Controller/ConfigController.php b/core/modules/config/src/Controller/ConfigController.php
index 8eb713f..dc56910 100644
--- a/core/modules/config/src/Controller/ConfigController.php
+++ b/core/modules/config/src/Controller/ConfigController.php
@@ -138,7 +138,7 @@ public function diff($source_name, $target_name = NULL, $collection = NULL) {
 
     $build['#title'] = t('View changes of @config_file', array('@config_file' => $source_name));
     // Add the CSS for the inline diff.
-    $build['#attached']['css'][] = drupal_get_path('module', 'system') . '/css/system.diff.css';
+    $build['#attached']['library'][] = 'system/diff';
 
     $build['diff'] = array(
       '#type' => 'table',
diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index 231dbc6..b1d1a2a 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -79,7 +79,6 @@ function _content_translation_form_language_content_settings_form_alter(array &$
   $form['entity_types']['#default_value'] = $default;
 
   $form['#attached']['library'][] = 'content_translation/drupal.content_translation.admin';
-  $form['#attached']['js'][] = array('data' => drupal_get_path('module', 'content_translation') . '/content_translation.admin.js', 'type' => 'file');
 
   $dependent_options_settings = array();
   $entity_manager = Drupal::entityManager();
diff --git a/core/modules/editor/src/Tests/EditorManagerTest.php b/core/modules/editor/src/Tests/EditorManagerTest.php
index 410ed29..66804ef 100644
--- a/core/modules/editor/src/Tests/EditorManagerTest.php
+++ b/core/modules/editor/src/Tests/EditorManagerTest.php
@@ -88,7 +88,7 @@ public function testManager() {
     $this->assertIdentical(array(), $this->editorManager->getAttachments(array()), 'No attachments when one text editor is enabled and retrieving attachments for zero text formats.');
     $expected = array(
       'library' => array(
-        0 => 'edit_test/unicorn',
+        0 => 'editor_test/unicorn',
       ),
       'js' => array(
         0 => array(
diff --git a/core/modules/editor/tests/modules/editor_test.libraries.yml b/core/modules/editor/tests/modules/editor_test.libraries.yml
new file mode 100644
index 0000000..b65d5f4
--- /dev/null
+++ b/core/modules/editor/tests/modules/editor_test.libraries.yml
@@ -0,0 +1,4 @@
+unicorn:
+  version: VERSION
+  js:
+    unicorn.js: {}
diff --git a/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php b/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
index 6937fb2..fcc2c90 100644
--- a/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
+++ b/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
@@ -60,7 +60,7 @@ function getJSSettings(EditorEntity $editor) {
    */
   public function getLibraries(EditorEntity $editor) {
     return array(
-      'edit_test/unicorn',
+      'editor_test/unicorn',
     );
   }
 
diff --git a/core/modules/help/help.libraries.yml b/core/modules/help/help.libraries.yml
new file mode 100644
index 0000000..541c67b
--- /dev/null
+++ b/core/modules/help/help.libraries.yml
@@ -0,0 +1,5 @@
+help:
+  version: VERSION
+  css:
+    component:
+      css/help.module.css: {}
diff --git a/core/modules/help/src/Controller/HelpController.php b/core/modules/help/src/Controller/HelpController.php
index 2de0a53..bd2f727 100644
--- a/core/modules/help/src/Controller/HelpController.php
+++ b/core/modules/help/src/Controller/HelpController.php
@@ -54,7 +54,7 @@ public static function create(ContainerInterface $container) {
   public function helpMain() {
     $output = array(
       '#attached' => array(
-        'css' => array(drupal_get_path('module', 'help') . '/css/help.module.css'),
+        'library' => ['help/help'],
       ),
       '#markup' => '<h2>' . $this->t('Help topics') . '</h2><p>' . $this->t('Help is available on the following items:') . '</p>' . $this->helpLinksAsList(),
     );
diff --git a/core/modules/image/image.libraries.yml b/core/modules/image/image.libraries.yml
new file mode 100644
index 0000000..fbf9ef4
--- /dev/null
+++ b/core/modules/image/image.libraries.yml
@@ -0,0 +1,11 @@
+form:
+  version: VERSION
+  css:
+    theme:
+      css/image.theme.css: {}
+
+admin:
+  version: VERSION
+  css:
+    theme:
+      css/image.admin.css: {}
diff --git a/core/modules/image/src/Form/ImageEffectFormBase.php b/core/modules/image/src/Form/ImageEffectFormBase.php
index addbcf6..04516bf 100644
--- a/core/modules/image/src/Form/ImageEffectFormBase.php
+++ b/core/modules/image/src/Form/ImageEffectFormBase.php
@@ -69,7 +69,7 @@ public function buildForm(array $form, FormStateInterface $form_state, ImageStyl
       throw new NotFoundHttpException();
     }
 
-    $form['#attached']['css'][drupal_get_path('module', 'image') . '/css/image.admin.css'] = array();
+    $form['#attached']['library'][] = 'image/admin';
     $form['uuid'] = array(
       '#type' => 'value',
       '#value' => $this->imageEffect->getUuid(),
diff --git a/core/modules/image/src/Form/ImageStyleEditForm.php b/core/modules/image/src/Form/ImageStyleEditForm.php
index 9c4887c..bc58404 100644
--- a/core/modules/image/src/Form/ImageStyleEditForm.php
+++ b/core/modules/image/src/Form/ImageStyleEditForm.php
@@ -57,7 +57,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $user_input = $form_state->getUserInput();
     $form['#title'] = $this->t('Edit style %name', array('%name' => $this->entity->label()));
     $form['#tree'] = TRUE;
-    $form['#attached']['css'][drupal_get_path('module', 'image') . '/css/image.admin.css'] = array();
+    $form['#attached']['library'][] = 'image/admin';
 
     // Show the thumbnail preview.
     $preview_arguments = array('#theme' => 'image_style_preview', '#style' => $this->entity);
diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
index c0d9863..eb3a0b4 100644
--- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
@@ -158,7 +158,7 @@ public static function process($element, FormStateInterface $form_state, $form)
     $item['fids'] = $element['fids']['#value'];
 
     $element['#theme'] = 'image_widget';
-    $element['#attached']['css'][] = drupal_get_path('module', 'image') . '/css/image.theme.css';
+    $element['#attached']['library'][] = 'image/form';
 
     // Add the image preview.
     if (!empty($element['#files']) && $element['#preview_image_style']) {
diff --git a/core/modules/locale/src/Form/TranslationStatusForm.php b/core/modules/locale/src/Form/TranslationStatusForm.php
index 3487589..c8e3017 100644
--- a/core/modules/locale/src/Form/TranslationStatusForm.php
+++ b/core/modules/locale/src/Form/TranslationStatusForm.php
@@ -167,7 +167,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     );
 
     $form['#attached']['library'][] = 'locale/drupal.locale.admin';
-    $form['#attached']['css'] = array(drupal_get_path('module', 'locale') . '/css/locale.admin.css');
 
     $form['actions'] = array('#type' => 'actions');
     if ($languages_update) {
diff --git a/core/modules/node/node.libraries.yml b/core/modules/node/node.libraries.yml
index 2b3d80d..22c93ac 100644
--- a/core/modules/node/node.libraries.yml
+++ b/core/modules/node/node.libraries.yml
@@ -1,5 +1,8 @@
 drupal.node:
   version: VERSION
+  css:
+    layout:
+      css/node.module.css: {}
   js:
     node.js: {}
   dependencies:
diff --git a/core/modules/search/search.libraries.yml b/core/modules/search/search.libraries.yml
index 624fc93..4c04600 100644
--- a/core/modules/search/search.libraries.yml
+++ b/core/modules/search/search.libraries.yml
@@ -3,3 +3,8 @@ drupal.search.results:
   css:
     theme:
       css/search.theme.css: {}
+
+admin:
+  css:
+    theme:
+      css/search.admin.css: {}
diff --git a/core/modules/search/src/SearchPageListBuilder.php b/core/modules/search/src/SearchPageListBuilder.php
index c17bb62..6310dae 100644
--- a/core/modules/search/src/SearchPageListBuilder.php
+++ b/core/modules/search/src/SearchPageListBuilder.php
@@ -253,11 +253,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#attributes' => array(
         'class' => array('container-inline'),
       ),
-      '#attached' => array(
-        'css' => array(
-          drupal_get_path('module', 'search') . '/css/search.admin.css',
-        ),
-      ),
+      '#attached' => [
+        'library' => [
+          'search/admin',
+        ],
+      ],
     );
     // In order to prevent validation errors for the parent form, this cannot be
     // required, see self::validateAddSearchPage().
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index feeffd4..7c0c34f 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -152,7 +152,7 @@ function simpletest_run_tests($test_list) {
     ),
     'finished' => '_simpletest_batch_finished',
     'progress_message' => '',
-    'css' => array(drupal_get_path('module', 'simpletest') . '/css/simpletest.module.css'),
+    'library' => array('simpletest/drupal.simpletest'),
     'init_message' => t('Processing test @num of @max - %test.', array('%test' => $info['name'], '@num' => '1', '@max' => count($test_list))),
   );
   batch_set($batch);
diff --git a/core/modules/simpletest/src/Form/SimpletestResultsForm.php b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
index 7d39496..a127683 100644
--- a/core/modules/simpletest/src/Form/SimpletestResultsForm.php
+++ b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
@@ -118,7 +118,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $test_id
     }
 
     // Load all classes and include CSS.
-    $form['#attached']['css'][] = drupal_get_path('module', 'simpletest') . '/css/simpletest.module.css';
+    $form['#attached']['library'][] = 'simpletest/drupal.simpletest';
 
     // Keep track of which test cases passed or failed.
     $filter = array(
diff --git a/core/modules/system/src/Tests/Ajax/FrameworkTest.php b/core/modules/system/src/Tests/Ajax/FrameworkTest.php
index d52e243..d998f01 100644
--- a/core/modules/system/src/Tests/Ajax/FrameworkTest.php
+++ b/core/modules/system/src/Tests/Ajax/FrameworkTest.php
@@ -134,7 +134,7 @@ public function testLazyLoad() {
       'data' => $expected['css'],
       'browsers' => array('IE' => TRUE, '!IE' => TRUE),
     )), TRUE);
-    $expected_js_html = drupal_get_js('header', array($expected['js'] => drupal_js_defaults($expected['js'])), TRUE);
+    $expected_js_html = drupal_get_js('header', array($expected['js'] => ['version' => \Drupal::VERSION] + drupal_js_defaults($expected['js'])), TRUE);
 
     // Get the base page.
     $this->drupalGet('ajax_forms_test_lazy_load_form');
diff --git a/core/modules/system/system.libraries.yml b/core/modules/system/system.libraries.yml
index 61eb1b4..34c90dd 100644
--- a/core/modules/system/system.libraries.yml
+++ b/core/modules/system/system.libraries.yml
@@ -44,3 +44,9 @@ drupal.system.modules:
     - core/jquery
     - core/drupal
     - core/jquery.once
+
+diff:
+  version: VERSION
+  css:
+    component:
+      css/system.diff.css: {}
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
index 96f5cd5..32b476b 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
@@ -57,21 +57,20 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     if ($form_state->getValue('add_files')) {
-      $path = drupal_get_path('module', 'system');
-      $attached = array(
-        '#attached' => array(
-          'css' => array(
-            $path . '/css/system.admin.css' => array(),
-          ),
-          'js' => array(
-            0 => array(
+      $attached = [
+        '#attached' => [
+          'library' => [
+            'system/admin',
+            'system/drupal.system',
+          ],
+          'js' => [
+            0 => [
               'type' => 'setting',
-              'data' => array('ajax_forms_test_lazy_load_form_submit' => 'executed'),
-            ),
-            $path . '/system.js' => array(),
-          ),
-        ),
-      );
+              'data' => ['ajax_forms_test_lazy_load_form_submit' => 'executed'],
+            ],
+          ],
+        ],
+      ];
       drupal_render($attached);
       drupal_process_attached($attached);
     }
diff --git a/core/modules/views/includes/ajax.inc b/core/modules/views/includes/ajax.inc
index 16f4546..d59ce61 100644
--- a/core/modules/views/includes/ajax.inc
+++ b/core/modules/views/includes/ajax.inc
@@ -34,9 +34,6 @@ function views_ajax_form_wrapper($form_class, FormStateInterface &$form_state) {
 
   // These forms have the title built in, so set the title here:
   $title = $form_state->get('title') ?: '';
-  if (!$ajax && $title) {
-    $form['#attached']['css'][] = drupal_get_path('module', 'views_ui') . '/css/views_ui.admin.css';
-  }
 
   if ($ajax && (!$form_state->isExecuted() || $form_state->get('rerender'))) {
     // If the form didn't execute and we're using ajax, build up a
diff --git a/core/modules/views_ui/src/ViewAddForm.php b/core/modules/views_ui/src/ViewAddForm.php
index 84bb713..d4c9410 100644
--- a/core/modules/views_ui/src/ViewAddForm.php
+++ b/core/modules/views_ui/src/ViewAddForm.php
@@ -55,8 +55,7 @@ protected function prepareEntity() {
    * {@inheritdoc}
    */
   public function form(array $form, FormStateInterface $form_state) {
-    $form['#attached']['css'] = static::getAdminCSS();
-    $form['#attached']['js'][] = drupal_get_path('module', 'views_ui') . '/js/views-admin.js';
+    $form['#attached']['library'][] = 'views_ui/admin.styling';
     $form['#attributes']['class'] = array('views-admin');
 
     $form['name'] = array(
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 8b1e4a2..6ec6aac 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -107,8 +107,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['#attached']['library'][] = 'core/drupal.states';
     $form['#attached']['library'][] = 'core/drupal.tabledrag';
     $form['#attached']['library'][] = 'views_ui/views_ui.admin';
-
-    $form['#attached']['css'] = static::getAdminCSS();
+    $form['#attached']['library'][] = 'views_ui/admin.styling';
 
     $form['#attached']['js'][] = array(
       'data' => array('views' => array('ajax' => array(
diff --git a/core/modules/views_ui/src/ViewFormBase.php b/core/modules/views_ui/src/ViewFormBase.php
index b250f54..4da7f8b 100644
--- a/core/modules/views_ui/src/ViewFormBase.php
+++ b/core/modules/views_ui/src/ViewFormBase.php
@@ -79,27 +79,6 @@ protected function prepareEntity() {
   }
 
   /**
-   * Creates an array of Views admin CSS for adding or attaching.
-   *
-   * This returns an array of arrays. Each array represents a single
-   * file. The array format is:
-   * - file: The fully qualified name of the file to send to _drupal_add_css
-   * - options: An array of options to pass to _drupal_add_css.
-   */
-  public static function getAdminCSS() {
-    $module_path = drupal_get_path('module', 'views_ui');
-    $list = array();
-    $list[$module_path . '/css/views_ui.admin.css'] = array();
-    $list[$module_path . '/css/views_ui.admin.theme.css'] = array();
-
-    if (\Drupal::moduleHandler()->moduleExists('contextual')) {
-      $list[$module_path . '/css/views_ui.contextual.css'] = array();
-    }
-
-    return $list;
-  }
-
-  /**
    * Adds tabs for navigating across Displays when editing a View.
    *
    * This function can be called from hook_menu_local_tasks_alter() to implement
diff --git a/core/modules/views_ui/src/ViewListBuilder.php b/core/modules/views_ui/src/ViewListBuilder.php
index b29d9b0..10e0d7e 100644
--- a/core/modules/views_ui/src/ViewListBuilder.php
+++ b/core/modules/views_ui/src/ViewListBuilder.php
@@ -174,7 +174,6 @@ public function render() {
     $list['#type'] = 'container';
     $list['#attributes']['id'] = 'views-entity-list';
 
-    $list['#attached']['css'] = ViewFormBase::getAdminCSS();
     $list['#attached']['library'][] = 'core/drupal.ajax';
     $list['#attached']['library'][] = 'views_ui/views_ui.listing';
 
diff --git a/core/modules/views_ui/views_ui.libraries.yml b/core/modules/views_ui/views_ui.libraries.yml
index d809b10..112aa03 100644
--- a/core/modules/views_ui/views_ui.libraries.yml
+++ b/core/modules/views_ui/views_ui.libraries.yml
@@ -13,6 +13,7 @@ views_ui.admin:
     - core/drupal.ajax
     - core/drupal.dropbutton
     - views/views.ajax
+    - views_ui/admin.styling
 
 views_ui.listing:
   version: VERSION
@@ -22,3 +23,13 @@ views_ui.listing:
     - core/jquery
     - core/drupal
     - core/jquery.once
+    - views_ui/admin.styling
+
+admin.styling:
+  version: VERSION
+  css:
+    component:
+      css/views_ui.admin.css: {}
+    theme:
+      css/views_ui.admin.theme.css: {}
+      css/views_ui.contextual.css: {}
diff --git a/core/themes/bartik/bartik.libraries.yml b/core/themes/bartik/bartik.libraries.yml
index c1b0f39..2ea5693 100644
--- a/core/themes/bartik/bartik.libraries.yml
+++ b/core/themes/bartik/bartik.libraries.yml
@@ -7,6 +7,16 @@ global-styling:
       css/colors.css: {}
       css/print.css: { media: print }
 
+color.preview:
+  version: VERSION
+  css:
+    theme:
+      color/preview.css: {}
+  js:
+    color/preview.js: {}
+  dependencies:
+    - color/drupal.color
+
 maintenance_page:
   version: VERSION
   css:
diff --git a/core/themes/bartik/color/color.inc b/core/themes/bartik/color/color.inc
index 251c0fc..25e630d 100644
--- a/core/themes/bartik/color/color.inc
+++ b/core/themes/bartik/color/color.inc
@@ -120,7 +120,6 @@
   ),
 
   // Preview files.
-  'preview_css' => 'color/preview.css',
-  'preview_js' => 'color/preview.js',
+  'preview_library' => 'bartik/color.preview',
   'preview_html' => 'color/preview.html',
 );
