From eb3c7a019fab69886f56cc1a057d889e06e05f28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=A1bor=20Hojtsy?= <gabor@hojtsy.hu>
Date: Thu, 15 Oct 2020 13:45:52 +0200
Subject: [PATCH] =?UTF-8?q?Issue=20#3072772=20by=20katherined,=20lauriii,?=
 =?UTF-8?q?=20bnjmnm,=20DyanneNova,=20G=C3=A1bor=20Hojtsy,=20ckrina,=20ant?=
 =?UTF-8?q?onellasev:=20Initial=20Claro=20design=20for=20the=20modules=20p?=
 =?UTF-8?q?age?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 core/themes/claro/claro.theme                 |  35 +++
 core/themes/claro/css/base/elements.css       |   2 +-
 core/themes/claro/css/base/elements.pcss.css  |   2 +-
 core/themes/claro/css/base/variables.pcss.css |   1 +
 .../claro/css/components/action-link.css      |  70 ++++++
 .../claro/css/components/action-link.pcss.css |  58 +++++
 core/themes/claro/css/components/details.css  |   2 +-
 .../claro/css/components/details.pcss.css     |   2 +-
 .../css/components/system-admin--modules.css  | 203 +++++++++-------
 .../components/system-admin--modules.pcss.css | 229 +++++++++++-------
 core/themes/claro/images/icons/00309e/key.svg |   1 +
 .../images/icons/00309e/questionmark.svg      |   1 +
 core/themes/claro/images/icons/0036b1/key.svg |   1 +
 .../images/icons/0036b1/questionmark.svg      |   1 +
 core/themes/claro/images/icons/545560/key.svg |   1 +
 .../images/icons/545560/questionmark.svg      |   1 +
 core/themes/claro/images/icons/ab1b1b/key.svg |   1 +
 .../images/icons/ab1b1b/questionmark.svg      |   1 +
 core/themes/claro/images/icons/c11f1f/key.svg |   1 +
 .../images/icons/c11f1f/questionmark.svg      |   1 +
 core/themes/claro/images/icons/d72222/key.svg |   1 +
 .../images/icons/d72222/questionmark.svg      |   1 +
 .../claro/images/icons/windowText/key.svg     |   1 +
 .../images/icons/windowText/questionmark.svg  |   1 +
 .../admin/system-modules-details.html.twig    |  75 ++++++
 core/themes/claro/templates/details.html.twig |   7 +-
 26 files changed, 518 insertions(+), 182 deletions(-)
 create mode 100644 core/themes/claro/images/icons/00309e/key.svg
 create mode 100644 core/themes/claro/images/icons/00309e/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/0036b1/key.svg
 create mode 100644 core/themes/claro/images/icons/0036b1/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/545560/key.svg
 create mode 100644 core/themes/claro/images/icons/545560/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/ab1b1b/key.svg
 create mode 100644 core/themes/claro/images/icons/ab1b1b/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/c11f1f/key.svg
 create mode 100644 core/themes/claro/images/icons/c11f1f/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/d72222/key.svg
 create mode 100644 core/themes/claro/images/icons/d72222/questionmark.svg
 create mode 100644 core/themes/claro/images/icons/windowText/key.svg
 create mode 100644 core/themes/claro/images/icons/windowText/questionmark.svg
 create mode 100644 core/themes/claro/templates/admin/system-modules-details.html.twig

diff --git a/core/themes/claro/claro.theme b/core/themes/claro/claro.theme
index 6cc8734a4063..7ecf9940b8b4 100644
--- a/core/themes/claro/claro.theme
+++ b/core/themes/claro/claro.theme
@@ -724,6 +724,41 @@ function claro_form_views_exposed_form_alter(&$form, FormStateInterface $form_st
   $form['#attributes']['aria-label'] = t('Filter the contents of the %view_title view', ['%view_title' => $view_title]);
 }
 
+/**
+ * Implements hook_form_FORM_ID_alter() for the system_modules form.
+ */
+function claro_form_system_modules_alter(&$form, FormStateInterface $form_state) {
+  if (isset($form['filters'])) {
+    $form['filters']['#attributes']['class'][] = 'modules-table-filter';
+    if (isset($form['filters']['text'])) {
+      unset($form['filters']['text']['#title_display']);
+      $form['filters']['text']['#title'] = t('Filter');
+    }
+  }
+
+  // Convert module links to action links.
+  foreach (Element::children($form['modules']) as $key) {
+    $link_key_to_action_link_type = [
+      'help' => 'questionmark',
+      'permissions' => 'key',
+      'configure' => 'cog',
+    ];
+    if (isset($form['modules'][$key]['#type']) && $form['modules'][$key]['#type'] === 'details') {
+      $form['modules'][$key]['#module_package_listing'] = TRUE;
+      foreach (Element::children($form['modules'][$key]) as $module_key) {
+        if (isset($form['modules'][$key][$module_key]['links'])) {
+          foreach ($form['modules'][$key][$module_key]['links'] as $link_key => &$link) {
+            $action_link_type = $link_key_to_action_link_type[$link_key];
+            $link['#options']['attributes']['class'][] = 'action-link';
+            $link['#options']['attributes']['class'][] = 'action-link--small';
+            $link['#options']['attributes']['class'][] = "action-link--icon-$action_link_type";
+          }
+        }
+      }
+    }
+  }
+}
+
 /**
  * Implements hook_preprocess_form_element().
  */
diff --git a/core/themes/claro/css/base/elements.css b/core/themes/claro/css/base/elements.css
index 345ffc387d56..fb2be4b3ed9a 100644
--- a/core/themes/claro/css/base/elements.css
+++ b/core/themes/claro/css/base/elements.css
@@ -222,7 +222,7 @@ pre {
 }
 
 details {
-  line-height: 1.295em;
+  line-height: 1.295rem;
 }
 
 details summary {
diff --git a/core/themes/claro/css/base/elements.pcss.css b/core/themes/claro/css/base/elements.pcss.css
index 0e1591ed9e0e..27c2148d3224 100644
--- a/core/themes/claro/css/base/elements.pcss.css
+++ b/core/themes/claro/css/base/elements.pcss.css
@@ -184,7 +184,7 @@ pre {
   white-space: pre-wrap;
 }
 details {
-  line-height: 1.295em;
+  line-height: var(--details-line-height);
 }
 details summary {
   padding: 0.95em 1.45em;
diff --git a/core/themes/claro/css/base/variables.pcss.css b/core/themes/claro/css/base/variables.pcss.css
index 290f3cef1e62..a11c984ad0bd 100644
--- a/core/themes/claro/css/base/variables.pcss.css
+++ b/core/themes/claro/css/base/variables.pcss.css
@@ -133,6 +133,7 @@
   --details-bg-color-transition-duration: 0.12s;
   --details-box-shadow-transition-duration: 0.2s;
   --details-transform-transition-duration: 0.12s;
+  --details-line-height: 1.295rem;
   /**
    * Buttons.
    */
diff --git a/core/themes/claro/css/components/action-link.css b/core/themes/claro/css/components/action-link.css
index 5e7ef9affc6f..adf2a4033ec9 100644
--- a/core/themes/claro/css/components/action-link.css
+++ b/core/themes/claro/css/components/action-link.css
@@ -452,3 +452,73 @@
     background-image: url("data:image/svg+xml,%3csvg fill-rule='evenodd' height='16' viewBox='0 0 16 16' fill='windowText' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m2.0106399 1.6964404-.0106399.0106426 12.072 12.07205-.6964.696467-2.077627-2.077613c-1.015347.38784-2.1292399.602013-3.297973.602013-3.6363601 0-6.7418187-2.073333-8-5 .64703865-1.5050798 1.7826266-2.7844797 3.2277199-3.6722797l-2.2277199-2.2277203.7071066-.707096zm2.98936 6.3035598c0-.54608.1459066-1.0580666.4008533-1.4991333l4.0982932 4.0982801c-.4410666.25496-.9530666.400853-1.4991464.400853-1.6568535 0-3-1.343146-3-3z'/%3e%3cpath d='m5.1510932 3.4439603 1.75984 1.75984c.3376-.1315867.7048933-.2038 1.0890666-.2038 1.6568533-.0000003 3.0000002 1.3431466 3.0000002 2.9999997 0 .3841735-.07221.7514668-.2038 1.0890668l2.344093 2.3440932c1.269973-.871746 2.26864-2.0582932 2.859707-3.43316-1.258134-2.9266664-4.36364-5-8-5-.9987733 0-1.9575066.1564134-2.8489066.44396z'/%3e%3c/svg%3e");
   }
 }
+
+/* Key */
+
+.action-link--icon-key::before {
+  content: "";
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23545560'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-key:hover::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%230036B1'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-key:active::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%2300309e'/%3e%3c/svg%3e");
+}
+
+/* Key — danger */
+
+.action-link--icon-key.action-link--danger::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23d72222'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-key.action-link--danger:hover::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23c11f1f'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-key.action-link--danger:active::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23ab1b1b'/%3e%3c/svg%3e");
+}
+
+@media screen and (-ms-high-contrast: active) {
+  .action-link--icon-key.action-link--icon-key.action-link--icon-key::before {
+    background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='windowText'/%3e%3c/svg%3e") !important;
+  }
+}
+
+/* Question Mark */
+
+.action-link--icon-questionmark::before {
+  content: "";
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23545560'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-questionmark:hover::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%230036B1'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-questionmark:active::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%2300309e'/%3e%3c/svg%3e");
+}
+
+/* Question Mark - danger */
+
+.action-link--icon-questionmark.action-link--danger::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23d72222'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-questionmark.action-link--danger:hover::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23c11f1f'/%3e%3c/svg%3e");
+}
+
+.action-link--icon-questionmark.action-link--danger:active::before {
+  background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23ab1b1b'/%3e%3c/svg%3e");
+}
+
+@media screen and (-ms-high-contrast: active) {
+  .action-link--icon-questionmark.action-link--icon-questionmark.action-link--icon-questionmark::before {
+    background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='windowText'/%3e%3c/svg%3e") !important;
+  }
+}
diff --git a/core/themes/claro/css/components/action-link.pcss.css b/core/themes/claro/css/components/action-link.pcss.css
index c281c0e600bc..4fd41de11175 100644
--- a/core/themes/claro/css/components/action-link.pcss.css
+++ b/core/themes/claro/css/components/action-link.pcss.css
@@ -384,3 +384,61 @@
     background-image: url(../../images/icons/windowText/hide.svg);
   }
 }
+
+/* Key */
+.action-link--icon-key::before {
+  content: "";
+  background-image: url("../../images/icons/545560/key.svg");
+}
+.action-link--icon-key:hover::before {
+  background-image: url("../../images/icons/0036b1/key.svg");
+}
+.action-link--icon-key:active::before {
+  background-image: url("../../images/icons/00309e/key.svg");
+}
+
+/* Key — danger */
+.action-link--icon-key.action-link--danger::before {
+  background-image: url("../../images/icons/d72222/key.svg");
+}
+.action-link--icon-key.action-link--danger:hover::before {
+  background-image: url("../../images/icons/c11f1f/key.svg");
+}
+.action-link--icon-key.action-link--danger:active::before {
+  background-image: url("../../images/icons/ab1b1b/key.svg");
+}
+
+@media screen and (-ms-high-contrast: active) {
+  .action-link--icon-key.action-link--icon-key.action-link--icon-key::before {
+    background-image: url("../../images/icons/windowText/key.svg") !important;
+  }
+}
+
+/* Question Mark */
+.action-link--icon-questionmark::before {
+  content: "";
+  background-image: url("../../images/icons/545560/questionmark.svg");
+}
+.action-link--icon-questionmark:hover::before {
+  background-image: url("../../images/icons/0036b1/questionmark.svg");
+}
+.action-link--icon-questionmark:active::before {
+  background-image: url("../../images/icons/00309e/questionmark.svg");
+}
+
+/* Question Mark - danger */
+.action-link--icon-questionmark.action-link--danger::before {
+  background-image: url("../../images/icons/d72222/questionmark.svg");
+}
+.action-link--icon-questionmark.action-link--danger:hover::before {
+  background-image: url("../../images/icons/c11f1f/questionmark.svg");
+}
+.action-link--icon-questionmark.action-link--danger:active::before {
+  background-image: url("../../images/icons/ab1b1b/questionmark.svg");
+}
+
+@media screen and (-ms-high-contrast: active) {
+  .action-link--icon-questionmark.action-link--icon-questionmark.action-link--icon-questionmark::before {
+    background-image: url("../../images/icons/windowText/questionmark.svg") !important;
+  }
+}
diff --git a/core/themes/claro/css/components/details.css b/core/themes/claro/css/components/details.css
index a078e3ada920..fd5ba82dd05d 100644
--- a/core/themes/claro/css/components/details.css
+++ b/core/themes/claro/css/components/details.css
@@ -138,7 +138,7 @@
 
 .claro-details__summary::before {
   position: absolute;
-  top: 50%;
+  top: 1.75rem;
   left: 0.75rem; /* LTR */
   display: inline-block;
   width: 1rem;
diff --git a/core/themes/claro/css/components/details.pcss.css b/core/themes/claro/css/components/details.pcss.css
index b9f8452bf1d2..2e4330a712c1 100644
--- a/core/themes/claro/css/components/details.pcss.css
+++ b/core/themes/claro/css/components/details.pcss.css
@@ -132,7 +132,7 @@
 
 .claro-details__summary::before {
   position: absolute;
-  top: 50%;
+  top: calc(var(--space-m) + var(--space-s));
   left: var(--space-s); /* LTR */
   display: inline-block;
   width: var(--space-m);
diff --git a/core/themes/claro/css/components/system-admin--modules.css b/core/themes/claro/css/components/system-admin--modules.css
index ab2f4e3457dd..84641a0ee1a2 100644
--- a/core/themes/claro/css/components/system-admin--modules.css
+++ b/core/themes/claro/css/components/system-admin--modules.css
@@ -10,154 +10,177 @@
  * System admin module: modules page.
  */
 
-.system-modules thead > tr {
-  border: 0;
+.modules-table-filter {
+  padding: 0.25rem 1.5rem;
+  border: 1px solid #d4d4d8;
+  border-radius: 2px 2px 0 0;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
 }
 
-.system-modules div.incompatible {
-  font-weight: bold;
+/* Visually hide the module filter input description. */
+
+.modules-table-filter .form-item__description {
+  position: absolute !important;
+  overflow: hidden;
+  clip: rect(1px, 1px, 1px, 1px);
+  width: 1px;
+  height: 1px;
+  word-wrap: normal;
 }
 
-.system-modules td.checkbox {
-  width: 4%;
-  min-width: 25px;
-  padding-left: 1rem; /* LTR */
+.claro-details.claro-details--package-listing,
+.claro-details.module-list__module-details {
+  margin-top: 2rem;
+  margin-bottom: 0;
+  border: none;
+  box-shadow: none;
 }
 
-[dir="rtl"] .system-modules td.checkbox {
-  padding-right: 1rem;
+.claro-details__wrapper.claro-details__wrapper--package-listing {
+  margin: 0;
 }
 
-.system-modules td.module {
-  width: 25%;
+.claro-details__summary.claro-details__summary--package-listing {
+  color: #222330;
+  border-radius: 4px;
+  background: #f3f4f9;
+  font-size: 1.125rem; /* 18px */
+  line-height: 1.424rem; /* 23px */
 }
 
-.system-modules td {
-  vertical-align: top;
+.module-list {
+  margin-top: 0;
 }
 
-.system-modules label,
-.system-modules-uninstall label {
-  color: #1d1d1d;
-  font-size: 1.15em;
+.module-list__module {
+  color: #222330;
+  border-bottom: 1px solid #d4d4d8;
+  background: none;
 }
 
-.system-modules details {
-  color: #5c5c5b;
+.module-list__module:hover {
+  background: none;
 }
 
-.system-modules details[open] {
-  overflow: visible;
+.module-list__module td {
   height: auto;
-  white-space: normal;
+  padding: 1rem calc(1rem - 2px);
+  vertical-align: top;
 }
 
-.system-modules details[open] summary .text {
-  text-transform: none;
-  -webkit-hyphens: auto;
-  -ms-hyphens: auto;
-  hyphens: auto;
-}
+/* Set width only on wider view where description is visible by default. */
 
-.system-modules td details a {
-  color: #5c5c5b;
-  border: 0;
+@media screen and (min-width: 60em) {
+  td.module-list__module {
+    width: 25%;
+  }
 }
 
-.system-modules td details {
-  margin: 0;
-  border: 0;
+.module-list__module-name {
+  font-weight: bold;
 }
 
-.system-modules td details summary {
-  padding: 0;
-  cursor: default;
-  text-transform: none;
-  font-weight: normal;
+.module-list__checkbox {
+  padding-left: 0.6875rem; /* LTR */
+  text-align: left; /* LTR */
 }
 
-.system-modules td {
-  padding-left: 0; /* LTR */
+[dir="rtl"] .module-list__checkbox {
+  padding-right: 0.6875rem;
+  padding-left: calc(1rem - 2px);
+  text-align: right;
 }
 
-[dir="rtl"] .system-modules td {
-  padding-right: 0;
-  padding-left: 12px;
+.module-list__checkbox .form-type--checkbox {
+  margin: 0;
+  line-height: 1.295rem;
 }
 
-@media screen and (max-width: 40em) {
-  .system-modules td.name {
-    width: 20%;
-  }
-  .system-modules td.description {
-    width: 40%;
-  }
+.module-list__checkbox .form-checkbox:not([disabled]) {
+  cursor: pointer;
 }
 
-.system-modules .requirements {
-  max-width: 490px;
-  padding: 5px 0;
+td.module-list__checkbox {
+  width: 4%;
 }
 
-.system-modules .links {
-  overflow: hidden; /* prevents collapse */
+td.module-list__description {
+  padding-top: 0;
+  padding-right: 0;
+  padding-bottom: 0;
 }
 
-.system-modules .checkbox {
-  margin: 0 5px;
+.claro-details.module-list__module-details {
+  margin: 0;
 }
 
-.system-modules .checkbox .form-item {
-  margin-top: 0;
-  margin-bottom: 0;
+.claro-details__summary.module-list__module-summary {
+  padding-top: 1rem;
+  padding-bottom: 1rem;
+  font-weight: normal;
+  line-height: 1.295rem;
 }
 
-.admin-requirements,
-.admin-required {
-  color: #666;
-  font-size: 0.9em;
+.module-details__description {
+  font-size: 0.75rem;
+  line-height: 0.9375rem;
 }
 
-.admin-enabled {
-  color: #080;
+.claro-details__wrapper.module-details__wrapper {
+  margin-top: 0;
+  margin-bottom: 0;
 }
 
-.admin-missing {
-  color: #f00;
+.module-details__requirements {
+  margin-bottom: 1rem;
 }
 
-.module-link {
-  display: block;
-  float: left; /* LTR */
-  margin-top: 2px;
-  padding: 2px 20px;
-  white-space: nowrap;
+.module-details__links {
+  position: relative;
+  /* Negative margin matches the value of action link's top padding. */
+  margin-top: -0.375rem;
+  margin-bottom: 1rem;
 }
 
-[dir="rtl"] .module-link {
-  float: right;
+.module-details__links .action-link + .action-link {
+  margin-left: 0; /* LTR */
 }
 
-.module-link-help {
-  background: url("data:image/svg+xml,%3csvg height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393-.168.148-.35.299-.545.447l-.203.189-.141.129-.096.17-.021.235v.63h-2.001v-.704c.026-.396.078-.73.204-.999.125-.269.271-.498.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18c.098-.152.168-.323.168-.518 0-.552-.447-1-1-1s-1.002.448-1.002 1h-2c0-1.657 1.343-3 3.002-3 1.656 0 3 1.343 3 3zm-1.75 6.619c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z' fill='%23787878'/%3e%3c/svg%3e") 0 50% no-repeat; /* LTR */
+[dir="rtl"] .module-details__links .action-link + .action-link {
+  margin-right: 0;
 }
 
-[dir="rtl"] .module-link-help {
-  background-position: top 50% right 0;
+.claro-details .tableresponsive-toggle {
+  padding: 1rem 1rem 1rem 0;
 }
 
-.module-link-permissions {
-  background: url("data:image/svg+xml,%3csvg height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m13.727 7.714c-1.309-1.308-3.248-1.569-4.827-.818l-5.899-5.896h-3.001v2h1v1.618l.378.382h1.622v1h1v1.622h1.622l.864.862-.986 1.016.992.99c-.062 1.162.335 2.346 1.223 3.234 1.66 1.653 4.352 1.653 6.012 0 1.658-1.66 1.658-4.351 0-6.01zm-.829 5.182c-.646.646-1.693.646-2.338 0-.646-.646-.646-1.692 0-2.338.645-.646 1.688-.646 2.338 0 .645.646.645 1.694 0 2.338z' fill='%23787878'/%3e%3c/svg%3e") 0 50% no-repeat; /* LTR */
+.claro-details .tableresponsive-toggle::before {
+  /* This adjustment is necessary for better alignment with the adjacent button
+   text. */
+  position: relative;
+  top: -1px;
+  display: inline-block;
+  width: 2rem;
+  height: 1.25rem;
+  content: "";
+  cursor: pointer;
+  vertical-align: text-top;
+  background: url("data:image/svg+xml,%3csvg height='16' stroke='%23545560' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3 8h10M8 3v10'/%3e%3c/svg%3e") no-repeat center;
+  background-size: contain;
 }
 
-[dir="rtl"] .module-link-permissions {
-  background-position: top 50% right 0;
+.claro-details .tableresponsive-toggle:hover {
+  color: #0036b1;
+  background-color: #f0f5fd;
 }
 
-.module-link-configure {
-  background: url("data:image/svg+xml,%3csvg height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m15.176 9.041c.045-.327.076-.658.076-.998 0-.36-.035-.71-.086-1.056l-2.275-.293c-.115-.426-.283-.827-.498-1.201l1.396-1.808c-.416-.551-.906-1.039-1.459-1.452l-1.807 1.391c-.373-.215-.774-.383-1.2-.499l-.292-2.252c-.338-.048-.677-.081-1.029-.081s-.694.033-1.032.082l-.291 2.251c-.426.116-.826.284-1.2.499l-1.805-1.391c-.552.413-1.044.901-1.459 1.452l1.395 1.808c-.215.374-.383.774-.499 1.2l-2.276.294c-.05.346-.085.696-.085 1.056 0 .34.031.671.077.998l2.285.295c.115.426.284.826.499 1.2l-1.417 1.836c.411.55.896 1.038 1.443 1.452l1.842-1.42c.374.215.774.383 1.2.498l.298 2.311c.337.047.677.08 1.025.08s.688-.033 1.021-.08l.299-2.311c.426-.115.826-.283 1.201-.498l1.842 1.42c.547-.414 1.031-.902 1.443-1.452l-1.416-1.837c.215-.373.383-.773.498-1.199zm-7.174 1.514c-1.406 0-2.543-1.137-2.543-2.541 0-1.402 1.137-2.541 2.543-2.541 1.402 0 2.541 1.138 2.541 2.541 0 1.404-1.139 2.541-2.541 2.541z' fill='%23787878'/%3e%3c/svg%3e") 0 50% no-repeat; /* LTR */
+.claro-details .tableresponsive-toggle:hover::before {
+  background-image: url("data:image/svg+xml,%3csvg height='16' stroke='%230036b1' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3 8h10M8 3v10'/%3e%3c/svg%3e");
 }
 
-[dir="rtl"] .module-link-configure {
-  background-position: top 50% right 0;
+.claro-details .tableresponsive-toggle-columns button {
+  margin-top: 0.5rem;
+  text-decoration: none;
+  color: #545560;
+  font-weight: bold;
 }
diff --git a/core/themes/claro/css/components/system-admin--modules.pcss.css b/core/themes/claro/css/components/system-admin--modules.pcss.css
index 8450d0341c8a..1d81598b2cf1 100644
--- a/core/themes/claro/css/components/system-admin--modules.pcss.css
+++ b/core/themes/claro/css/components/system-admin--modules.pcss.css
@@ -3,123 +3,178 @@
  * System admin module: modules page.
  */
 
-.system-modules thead > tr {
-  border: 0;
+@import "../base/variables.pcss.css";
+
+:root {
+  --module-table-cell-padding-vertical: var(--space-m);
+  --module-table-cell-padding-horizontal: calc(var(--space-m) - (var(--input-border-size) * 2));
 }
-.system-modules div.incompatible {
-  font-weight: bold;
+
+.modules-table-filter {
+  padding: 0.25rem var(--space-l);
+  border: 1px solid var(--color-lightgray);
+  border-radius: 2px 2px 0 0;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
 }
-.system-modules td.checkbox {
-  width: 4%;
-  min-width: 25px;
-  padding-left: 1rem; /* LTR */
+
+/* Visually hide the module filter input description. */
+.modules-table-filter .form-item__description {
+  position: absolute !important;
+  overflow: hidden;
+  clip: rect(1px, 1px, 1px, 1px);
+  width: 1px;
+  height: 1px;
+  word-wrap: normal;
 }
-[dir="rtl"] .system-modules td.checkbox {
-  padding-right: 1rem;
+
+.claro-details.claro-details--package-listing,
+.claro-details.module-list__module-details {
+  margin-top: 2rem;
+  margin-bottom: 0;
+  border: none;
+  box-shadow: none;
 }
-.system-modules td.module {
-  width: 25%;
+
+.claro-details__wrapper.claro-details__wrapper--package-listing {
+  margin: 0;
 }
-.system-modules td {
-  vertical-align: top;
+
+.claro-details__summary.claro-details__summary--package-listing {
+  color: var(--color-text);
+  border-radius: 4px;
+  background: var(--color-whitesmoke);
+  font-size: 1.125rem; /* 18px */
+  line-height: 1.424rem; /* 23px */
 }
-.system-modules label,
-.system-modules-uninstall label {
-  color: #1d1d1d;
-  font-size: 1.15em;
+
+.module-list {
+  margin-top: 0;
 }
-.system-modules details {
-  color: #5c5c5b;
+
+.module-list__module {
+  color: var(--color-text);
+  border-bottom: 1px solid var(--color-lightgray);
+  background: none;
+}
+
+.module-list__module:hover {
+  background: none;
 }
-.system-modules details[open] {
-  overflow: visible;
+
+.module-list__module td {
   height: auto;
-  white-space: normal;
+  padding: var(--module-table-cell-padding-vertical) var(--module-table-cell-padding-horizontal);
+  vertical-align: top;
+}
+
+/* Set width only on wider view where description is visible by default. */
+@media screen and (min-width: 60em) {
+  td.module-list__module {
+    width: 25%;
+  }
+}
+
+.module-list__module-name {
+  font-weight: bold;
 }
-.system-modules details[open] summary .text {
-  text-transform: none;
-  hyphens: auto;
+
+.module-list__checkbox {
+  padding-left: 0.6875rem; /* LTR */
+  text-align: left; /* LTR */
 }
-.system-modules td details a {
-  color: #5c5c5b;
-  border: 0;
+[dir="rtl"] .module-list__checkbox {
+  padding-right: 0.6875rem;
+  padding-left: var(--module-table-cell-padding-horizontal);
+  text-align: right;
 }
-.system-modules td details {
+
+.module-list__checkbox .form-type--checkbox {
   margin: 0;
-  border: 0;
+  line-height: var(--details-line-height);
 }
-.system-modules td details summary {
-  padding: 0;
-  cursor: default;
-  text-transform: none;
-  font-weight: normal;
+
+.module-list__checkbox .form-checkbox:not([disabled]) {
+  cursor: pointer;
 }
-.system-modules td {
-  padding-left: 0; /* LTR */
+
+td.module-list__checkbox {
+  width: 4%;
 }
-[dir="rtl"] .system-modules td {
+
+td.module-list__description {
+  padding-top: 0;
   padding-right: 0;
-  padding-left: 12px;
+  padding-bottom: 0;
 }
 
-@media screen and (max-width: 40em) {
-  .system-modules td.name {
-    width: 20%;
-  }
-  .system-modules td.description {
-    width: 40%;
-  }
-}
-.system-modules .requirements {
-  max-width: 490px;
-  padding: 5px 0;
+.claro-details.module-list__module-details {
+  margin: 0;
 }
-.system-modules .links {
-  overflow: hidden; /* prevents collapse */
+
+.claro-details__summary.module-list__module-summary {
+  padding-top: var(--module-table-cell-padding-vertical);
+  padding-bottom: var(--module-table-cell-padding-vertical);
+  font-weight: normal;
+  line-height: var(--details-line-height);
 }
-.system-modules .checkbox {
-  margin: 0 5px;
+
+.module-details__description {
+  font-size: var(--space-s);
+  line-height: 0.9375rem;
 }
-.system-modules .checkbox .form-item {
+
+.claro-details__wrapper.module-details__wrapper {
   margin-top: 0;
   margin-bottom: 0;
 }
-.admin-requirements,
-.admin-required {
-  color: #666;
-  font-size: 0.9em;
-}
-.admin-enabled {
-  color: #080;
-}
-.admin-missing {
-  color: #f00;
-}
-.module-link {
-  display: block;
-  float: left; /* LTR */
-  margin-top: 2px;
-  padding: 2px 20px;
-  white-space: nowrap;
+
+.module-details__requirements {
+  margin-bottom: var(--space-m);
 }
-[dir="rtl"] .module-link {
-  float: right;
+
+.module-details__links {
+  position: relative;
+  /* Negative margin matches the value of action link's top padding. */
+  margin-top: calc((var(--space-s) - ((var(--space-l) - var(--space-s)) / 2)) * -1);
+  margin-bottom: var(--space-m);
 }
-.module-link-help {
-  background: url(../../images/core/787878/questionmark-disc.svg) 0 50% no-repeat; /* LTR */
+
+.module-details__links .action-link + .action-link {
+  margin-left: 0; /* LTR */
 }
-[dir="rtl"] .module-link-help {
-  background-position: top 50% right 0;
+[dir="rtl"] .module-details__links .action-link + .action-link {
+  margin-right: 0;
 }
-.module-link-permissions {
-  background: url(../../images/core/787878/key.svg) 0 50% no-repeat; /* LTR */
+
+.claro-details .tableresponsive-toggle {
+  padding: var(--space-m) var(--space-m) var(--space-m) 0;
+}
+.claro-details .tableresponsive-toggle::before {
+  /* This adjustment is necessary for better alignment with the adjacent button
+   text. */
+  position: relative;
+  top: -1px;
+  display: inline-block;
+  width: calc(var(--space-m) * 2);
+  height: 1.25rem;
+  content: "";
+  cursor: pointer;
+  vertical-align: text-top;
+  background: url(../../images/icons/545560/plus.svg) no-repeat center;
+  background-size: contain;
 }
-[dir="rtl"] .module-link-permissions {
-  background-position: top 50% right 0;
+
+.claro-details .tableresponsive-toggle:hover {
+  color: var(--color-absolutezero-hover);
+  background-color: var(--color-bgblue-hover);
 }
-.module-link-configure {
-  background: url(../../images/core/787878/cog.svg) 0 50% no-repeat; /* LTR */
+.claro-details .tableresponsive-toggle:hover::before {
+  background-image: url(../../images/icons/0036b1/plus.svg);
 }
-[dir="rtl"] .module-link-configure {
-  background-position: top 50% right 0;
+
+.claro-details .tableresponsive-toggle-columns button {
+  margin-top: var(--space-xs);
+  text-decoration: none;
+  color: var(--color-davysgray);
+  font-weight: bold;
 }
diff --git a/core/themes/claro/images/icons/00309e/key.svg b/core/themes/claro/images/icons/00309e/key.svg
new file mode 100644
index 000000000000..91dc9783fd6e
--- /dev/null
+++ b/core/themes/claro/images/icons/00309e/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#00309e"/></svg>
diff --git a/core/themes/claro/images/icons/00309e/questionmark.svg b/core/themes/claro/images/icons/00309e/questionmark.svg
new file mode 100644
index 000000000000..caf07449d96b
--- /dev/null
+++ b/core/themes/claro/images/icons/00309e/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#00309e"/></svg>
diff --git a/core/themes/claro/images/icons/0036b1/key.svg b/core/themes/claro/images/icons/0036b1/key.svg
new file mode 100644
index 000000000000..e4ba6ef1fb15
--- /dev/null
+++ b/core/themes/claro/images/icons/0036b1/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#0036B1"/></svg>
diff --git a/core/themes/claro/images/icons/0036b1/questionmark.svg b/core/themes/claro/images/icons/0036b1/questionmark.svg
new file mode 100644
index 000000000000..81dd3ef440d4
--- /dev/null
+++ b/core/themes/claro/images/icons/0036b1/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#0036B1"/></svg>
diff --git a/core/themes/claro/images/icons/545560/key.svg b/core/themes/claro/images/icons/545560/key.svg
new file mode 100644
index 000000000000..b41eaf39c57b
--- /dev/null
+++ b/core/themes/claro/images/icons/545560/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#545560"/></svg>
diff --git a/core/themes/claro/images/icons/545560/questionmark.svg b/core/themes/claro/images/icons/545560/questionmark.svg
new file mode 100644
index 000000000000..e8f23cc5abc0
--- /dev/null
+++ b/core/themes/claro/images/icons/545560/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#545560"/></svg>
diff --git a/core/themes/claro/images/icons/ab1b1b/key.svg b/core/themes/claro/images/icons/ab1b1b/key.svg
new file mode 100644
index 000000000000..78a74f3031be
--- /dev/null
+++ b/core/themes/claro/images/icons/ab1b1b/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#ab1b1b"/></svg>
diff --git a/core/themes/claro/images/icons/ab1b1b/questionmark.svg b/core/themes/claro/images/icons/ab1b1b/questionmark.svg
new file mode 100644
index 000000000000..d374fe1d1211
--- /dev/null
+++ b/core/themes/claro/images/icons/ab1b1b/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#ab1b1b"/></svg>
diff --git a/core/themes/claro/images/icons/c11f1f/key.svg b/core/themes/claro/images/icons/c11f1f/key.svg
new file mode 100644
index 000000000000..a457a7eb9706
--- /dev/null
+++ b/core/themes/claro/images/icons/c11f1f/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#c11f1f"/></svg>
diff --git a/core/themes/claro/images/icons/c11f1f/questionmark.svg b/core/themes/claro/images/icons/c11f1f/questionmark.svg
new file mode 100644
index 000000000000..50465c47b40b
--- /dev/null
+++ b/core/themes/claro/images/icons/c11f1f/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#c11f1f"/></svg>
diff --git a/core/themes/claro/images/icons/d72222/key.svg b/core/themes/claro/images/icons/d72222/key.svg
new file mode 100644
index 000000000000..97f995770c34
--- /dev/null
+++ b/core/themes/claro/images/icons/d72222/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="#d72222"/></svg>
diff --git a/core/themes/claro/images/icons/d72222/questionmark.svg b/core/themes/claro/images/icons/d72222/questionmark.svg
new file mode 100644
index 000000000000..5747fc800c52
--- /dev/null
+++ b/core/themes/claro/images/icons/d72222/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="#d72222"/></svg>
diff --git a/core/themes/claro/images/icons/windowText/key.svg b/core/themes/claro/images/icons/windowText/key.svg
new file mode 100644
index 000000000000..790a3a6081f5
--- /dev/null
+++ b/core/themes/claro/images/icons/windowText/key.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z" fill="windowText"/></svg>
diff --git a/core/themes/claro/images/icons/windowText/questionmark.svg b/core/themes/claro/images/icons/windowText/questionmark.svg
new file mode 100644
index 000000000000..d3dc4a97f762
--- /dev/null
+++ b/core/themes/claro/images/icons/windowText/questionmark.svg
@@ -0,0 +1 @@
+<svg width="15" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z" fill="windowText"/></svg>
diff --git a/core/themes/claro/templates/admin/system-modules-details.html.twig b/core/themes/claro/templates/admin/system-modules-details.html.twig
new file mode 100644
index 000000000000..d2acf3854011
--- /dev/null
+++ b/core/themes/claro/templates/admin/system-modules-details.html.twig
@@ -0,0 +1,75 @@
+{#
+/**
+ * @file
+ * Default theme implementation for the modules listing page.
+ *
+ * Displays a list of all packages in a project.
+ *
+ * Available variables:
+ * - modules: Contains multiple module instances. Each module contains:
+ *   - attributes: Attributes on the row.
+ *   - checkbox: A checkbox for enabling the module.
+ *   - name: The human-readable name of the module.
+ *   - id: A unique identifier for interacting with the details element.
+ *   - enable_id: A unique identifier for interacting with the checkbox element.
+ *   - description: The description of the module.
+ *   - machine_name: The module's machine name.
+ *   - version: Information about the module version.
+ *   - requires: A list of modules that this module requires.
+ *   - required_by: A list of modules that require this module.
+ *   - links: A list of administration links provided by the module.
+ *
+ * @see template_preprocess_system_modules_details()
+ *
+ * @ingroup themeable
+ */
+#}
+<table class="responsive-enabled module-list">
+  <thead>
+    <tr>
+      <th class="checkbox visually-hidden">{{ 'Installed'|t }}</th>
+      <th class="name visually-hidden">{{ 'Name'|t }}</th>
+      <th class="description visually-hidden priority-low">{{ 'Description'|t }}</th>
+    </tr>
+  </thead>
+  <tbody>
+    {% for module in modules %}
+      <tr{{ module.attributes.addClass('module-list__module') }}>
+        <td class="module-list__checkbox">
+          {{ module.checkbox }}
+        </td>
+        <td class="module-list__module">
+          <label id="{{ module.id }}" for="{{ module.enable_id }}" class="module-list__module-name table-filter-text-source">{{ module.name }}</label>
+        </td>
+        <td class="expand priority-low module-list__description">
+          <details class="js-form-wrapper form-wrapper module-list__module-details claro-details" id="{{ module.enable_id }}-description">
+            <summary aria-controls="{{ module.enable_id }}-description" role="button" aria-expanded="false" class="claro-details__summary module-list__module-summary"><span class="text module-description">{{ module.description }}</span></summary>
+            <div class="claro-details__wrapper module-details__wrapper">
+              <div class="module-details__description">
+                <div class="module-details__requirements">
+                  <div class="module-details__requirement">{{ 'Machine name: <span dir="ltr" class="table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name }) }}</div>
+                  {% if module.version %}
+                    <div class="module-details__requirement">{{ 'Version: @module-version'|t({'@module-version': module.version }) }}</div>
+                  {% endif %}
+                  {% if module.requires %}
+                    <div class="module-details__requirement">{{ 'Requires: @module-list'|t({'@module-list': module.requires }) }}</div>
+                  {% endif %}
+                  {% if module.required_by %}
+                    <div class="module-details__requirement">{{ 'Required by: @module-list'|t({'@module-list': module.required_by }) }}</div>
+                  {% endif %}
+                </div>
+                {% if module.links %}
+                  <div class="module-details__links">
+                    {% for link_type in ['help', 'permissions', 'configure'] %}
+                      {{ module.links[link_type] }}
+                    {% endfor %}
+                  </div>
+                {% endif %}
+              </div>
+            </div>
+          </details>
+        </td>
+      </tr>
+    {% endfor %}
+  </tbody>
+</table>
diff --git a/core/themes/claro/templates/details.html.twig b/core/themes/claro/templates/details.html.twig
index 88f72ee1369d..dfd58d498592 100644
--- a/core/themes/claro/templates/details.html.twig
+++ b/core/themes/claro/templates/details.html.twig
@@ -29,6 +29,7 @@
     'claro-details',
     accordion ? 'claro-details--accordion',
     accordion_item ? 'claro-details--accordion-item',
+    element['#module_package_listing'] ? 'claro-details--package-listing',
   ]
 %}
 {%
@@ -37,6 +38,7 @@
     'details-wrapper',
     accordion ? 'claro-details__wrapper--accordion',
     accordion_item ? 'claro-details__wrapper--accordion-item',
+    element['#module_package_listing'] ? 'claro-details__wrapper--package-listing',
   ]
 %}
 {%
@@ -44,6 +46,7 @@
     'claro-details__content',
     accordion ? 'claro-details__content--accordion',
     accordion_item ? 'claro-details__content--accordion-item',
+    element['#module_package_listing']  ? 'claro-details__content--package-listing',
   ]
 %}
 <details{{ attributes.addClass(classes) }}>
@@ -55,7 +58,9 @@
         required ? 'form-required',
         accordion ? 'claro-details__summary--accordion',
         accordion_item ? 'claro-details__summary--accordion-item',
-      ]
+        element['#module_package_listing']  ? 'claro-details__summary--package-listing',
+
+    ]
     %}
     <summary{{ summary_attributes.addClass(summary_classes) }}>
       {{- title -}}
-- 
GitLab