diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 62bbb58..a1628cf 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -968,25 +968,6 @@ function template_preprocess_table(&$variables) {
 }
 
 /**
- * Prepares variables for tablesort indicator templates.
- *
- * Default template: tablesort-indicator.html.twig.
- *
- * @param array $variables
- *   An associative array containing:
- *   - style: Set to either 'asc' or 'desc'. This determines which icon to show.
- */
-function template_preprocess_tablesort_indicator(&$variables) {
-  // Provide the image attributes for an ascending or descending image.
-  if ($variables['style'] == 'asc') {
-    $variables['arrow_asc'] = file_create_url('core/misc/arrow-asc.png');
-  }
-  else {
-    $variables['arrow_desc'] = file_create_url('core/misc/arrow-desc.png');
-  }
-}
-
-/**
  * Prepares variables for item list templates.
  *
  * Default template: item-list.html.twig.
diff --git a/core/misc/arrow-asc.png b/core/misc/arrow-asc.png
deleted file mode 100644
index 2edbb17..0000000
--- a/core/misc/arrow-asc.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-   IHDR         H%v?   PLTEÿÿÿ···kR%»   tRNS @æØf   IDATxœc`@õì0È`ào``g``‚
- KzHƒ“Ï    IEND®B`‚
\ No newline at end of file
diff --git a/core/misc/arrow-desc.png b/core/misc/arrow-desc.png
deleted file mode 100644
index a3ccabc..0000000
--- a/core/misc/arrow-desc.png
+++ /dev/null
@@ -1,5 +0,0 @@
-‰PNG
-
-   IHDR         H%v?   PLTEÿÿÿ···kR%»   tRNS @æØf   IDATc`@LL¬Œü…LL
-
-Li |q)í©    IEND®B`‚
\ No newline at end of file
diff --git a/core/misc/icons/004875/twistie-down.svg b/core/misc/icons/004875/twistie-down.svg
new file mode 100644
index 0000000..6cd6a78
--- /dev/null
+++ b/core/misc/icons/004875/twistie-down.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#004875" d="M2.611 5.393c-.17-.216-.084-.393.191-.393h10.397c.275 0 .361.177.191.393l-5.08 6.464c-.17.216-.452.216-.622 0l-5.077-6.464z"/></svg>
diff --git a/core/misc/icons/004875/twistie-up.svg b/core/misc/icons/004875/twistie-up.svg
new file mode 100644
index 0000000..bf3b80e
--- /dev/null
+++ b/core/misc/icons/004875/twistie-up.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#004875" d="M13.391 10.607c.17.216.084.393-.191.393h-10.398c-.275 0-.361-.177-.191-.393l5.08-6.464c.17-.216.45-.216.62 0l5.08 6.464z"/></svg>
diff --git a/core/misc/icons/008ee6/twistie-down.svg b/core/misc/icons/008ee6/twistie-down.svg
new file mode 100644
index 0000000..23f6d9a
--- /dev/null
+++ b/core/misc/icons/008ee6/twistie-down.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#008ee6" d="M2.611 5.393c-.17-.216-.084-.393.191-.393h10.397c.275 0 .361.177.191.393l-5.08 6.464c-.17.216-.452.216-.622 0l-5.077-6.464z"/></svg>
diff --git a/core/misc/icons/008ee6/twistie-up.svg b/core/misc/icons/008ee6/twistie-up.svg
new file mode 100644
index 0000000..dc9dd8e
--- /dev/null
+++ b/core/misc/icons/008ee6/twistie-up.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#008ee6" d="M13.391 10.607c.17.216.084.393-.191.393h-10.398c-.275 0-.361-.177-.191-.393l5.08-6.464c.17-.216.45-.216.62 0l5.08 6.464z"/></svg>
diff --git a/core/modules/system/css/system.module.css b/core/modules/system/css/system.module.css
index 0359e4b..b9d9cbd 100644
--- a/core/modules/system/css/system.module.css
+++ b/core/modules/system/css/system.module.css
@@ -179,6 +179,22 @@ table.sticky-header {
 }
 
 /**
+ * Markup generated by tablesort-indicator.html.twig.
+ */
+.tablesort {
+  width: 16px;
+  height: 16px;
+  display: inline-block;
+  background-size: 100%;
+}
+.tablesort--asc {
+  background-image: url(../../../misc/icons/787878/twistie-down.svg);
+}
+.tablesort--desc {
+  background-image: url(../../../misc/icons/787878/twistie-up.svg);
+}
+
+/**
  * Progress behavior.
  *
  * @see progress.js
diff --git a/core/modules/system/css/system.theme.css b/core/modules/system/css/system.theme.css
index a74bac0..bd220ad 100644
--- a/core/modules/system/css/system.theme.css
+++ b/core/modules/system/css/system.theme.css
@@ -21,6 +21,16 @@ td.is-active {
 }
 
 /**
+ * Markup generated by tablesort-indicator.html.twig.
+ */
+th.active img {
+  display: inline;
+}
+td.active {
+  background-color: #ddd;
+}
+
+/**
  * Markup generated by item-list.html.twig.
  */
 .item-list .title {
diff --git a/core/modules/system/templates/tablesort-indicator.html.twig b/core/modules/system/templates/tablesort-indicator.html.twig
index 059805f..234ee54 100644
--- a/core/modules/system/templates/tablesort-indicator.html.twig
+++ b/core/modules/system/templates/tablesort-indicator.html.twig
@@ -11,8 +11,18 @@
  * @ingroup themeable
  */
 #}
-{% if style == 'asc' -%}
-  <img src="{{ arrow_asc }}" width="13" height="13" alt="{{ 'sort ascending'|t }}" title="{{ 'sort ascending'|t }}" />
-{% else -%}
-  <img src="{{ arrow_desc }}" width="13" height="13" alt="{{ 'sort descending'|t }}" title="{{ 'sort descending'|t }}" />
-{% endif %}
+{%
+  set classes = [
+    'tablesort',
+    'tablesort--' ~ style,
+  ]
+%}
+<span {{ attributes.addClass(classes) }}>
+  <span class="visually-hidden">
+    {% if style == 'asc' -%}
+      {{ 'Sort ascending.'|t }}
+    {% else -%}
+      {{ 'Sort descending.'|t }}
+    {% endif %}
+  </span>
+</span>
diff --git a/core/themes/seven/css/components/tablesort-indicator.css b/core/themes/seven/css/components/tablesort-indicator.css
new file mode 100644
index 0000000..7685fbd
--- /dev/null
+++ b/core/themes/seven/css/components/tablesort-indicator.css
@@ -0,0 +1,22 @@
+/**
+ * @file
+ * Tablesort indicator styles.
+ */
+ .tablesort {
+  float: right; /* LTR */
+  margin-top: 5px;
+  width: 10px;
+  height: 10px;
+ }
+.tablesort--asc {
+  background-image: url(../../../../misc/icons/004875/twistie-down.svg);
+}
+a:hover .tablesort--asc {
+  background-image: url(../../../../misc/icons/008ee6/twistie-down.svg);
+}
+.tablesort--desc {
+  background-image: url(../../../../misc/icons/004875/twistie-up.svg);
+}
+a:hover .tablesort--desc {
+  background-image: url(../../../../misc/icons/008ee6/twistie-up.svg);
+}
diff --git a/core/themes/seven/seven.libraries.yml b/core/themes/seven/seven.libraries.yml
index a576e1d..d7e9b25 100644
--- a/core/themes/seven/seven.libraries.yml
+++ b/core/themes/seven/seven.libraries.yml
@@ -25,6 +25,7 @@ global-styling:
       css/components/panel.css: {}
       css/components/skip-link.css: {}
       css/components/tables.css: {}
+      css/components/tablesort-indicator.css: {}
       css/components/system-status-report.css: {}
       css/components/tabs.css: {}
       css/components/tour.theme.css: {}
diff --git a/core/themes/seven/seven.theme b/core/themes/seven/seven.theme
index 6aa8baa..42a9f04 100644
--- a/core/themes/seven/seven.theme
+++ b/core/themes/seven/seven.theme
@@ -110,18 +110,6 @@ function seven_preprocess_admin_block_content(&$variables) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for tablesort indicator templates.
- *
- * Uses Seven's image versions, so the arrows show up as black and not gray on
- * gray.
- */
-function seven_preprocess_tablesort_indicator(&$variables) {
-  $theme_path = drupal_get_path('theme', 'seven');
-  $variables['arrow_asc'] = file_create_url($theme_path . '/images/arrow-asc.png');
-  $variables['arrow_desc'] = file_create_url($theme_path . '/images/arrow-desc.png');
-}
-
-/**
  * Implements hook_preprocess_HOOK() for menu-local-action templates.
  */
 function seven_preprocess_menu_local_action(array &$variables) {
diff --git a/core/themes/seven/templates/tablesort-indicator.html.twig b/core/themes/seven/templates/tablesort-indicator.html.twig
deleted file mode 100644
index b2eadaa..0000000
--- a/core/themes/seven/templates/tablesort-indicator.html.twig
+++ /dev/null
@@ -1,16 +0,0 @@
-{#
-/**
- * @file
- * Seven's theme implementation for displaying a tablesort indicator.
- *
- * Available variables:
- * - style: Either 'asc' or 'desc', indicating the sorting direction.
- * - arrow_asc: URL to the image for an ascending arrow.
- * - arrow_desc: URL to the image for a descending arrow.
- */
-#}
-{% if style == 'asc' -%}
-  <img src="{{ arrow_asc }}" width="9" height="5" alt="{{ 'Sort ascending'|t }}" title="{{ 'Sort ascending'|t }}" />
-{% else -%}
-  <img src="{{ arrow_desc }}" width="9" height="5" alt="{{ 'Sort descending'|t }}" title="{{ 'Sort descending'|t }}" />
-{% endif %}
