diff --git a/core/modules/migrate_drupal_ui/css/components/upgrade-analysis-report-tables.css b/core/modules/migrate_drupal_ui/css/components/upgrade-analysis-report-tables.css
new file mode 100644
index 0000000000..f15ff6a4b4
--- /dev/null
+++ b/core/modules/migrate_drupal_ui/css/components/upgrade-analysis-report-tables.css
@@ -0,0 +1,20 @@
+/**
+ * @file
+ * Styles for the upgrade analysis report tables.
+ */
+.upgrade-analysis-report__status-icon:before {
+  content: "";
+  background-size: 16px;
+  background-position: left center;
+  background-repeat: no-repeat;
+  width: 32px;
+  height: 14px;
+  display: inline-block;
+}
+
+.upgrade-analysis-report__status-icon--warning:before {
+  background-image: url(../../../../misc/icons/e29700/warning.svg);
+}
+.upgrade-analysis-report__status-icon--checked:before {
+  background-image: url(../../../../misc/icons/73b355/check.svg);
+}
diff --git a/core/modules/migrate_drupal_ui/migrate_drupal_ui.libraries.yml b/core/modules/migrate_drupal_ui/migrate_drupal_ui.libraries.yml
new file mode 100644
index 0000000000..54db7c9d2c
--- /dev/null
+++ b/core/modules/migrate_drupal_ui/migrate_drupal_ui.libraries.yml
@@ -0,0 +1,6 @@
+base:
+  version: VERSION
+  css:
+    # Adjust the weights to load these early.
+    component:
+      css/components/upgrade-analysis-report-tables.css: { weight: -10 }
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index d747e0ac2c..7445c0ddab 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -486,16 +486,20 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
     $unmigrated_source_modules = array_diff_key($system_data['module'], $table_data);
 
     // Missing migrations.
-    $form['missing_module_list_title'] = [
-      '#type' => 'item',
+    $general_info['missing_module_list'] = [
+      '#tree' => TRUE,
+      '#type' => 'details',
+      '#open' => TRUE,
       '#title' => $this->t('Missing upgrade paths'),
       '#description' => $this->t('The following items will not be upgraded. For more information see <a href=":migrate">Upgrading from Drupal 6 or 7 to Drupal 8</a>.', [':migrate' => 'https://www.drupal.org/upgrade/migrate']),
+      '#weight' => 2,
+      '#attributes' => ['id' => ['warning']],
     ];
-    $form['missing_module_list'] = [
+    $general_info['missing_module_list']['module_list'] = [
       '#type' => 'table',
       '#header' => [
-        $this->t('Source'),
-        $this->t('Destination'),
+        $this->t('Source module: Drupal ' . $version),
+        $this->t('Upgrade module: Drupal 8'),
       ],
     ];
     $missing_count = 0;
@@ -503,24 +507,30 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
     foreach ($unmigrated_source_modules as $source_module => $module_data) {
       if ($module_data['status']) {
         $missing_count++;
-        $form['missing_module_list'][$source_module] = [
-          'source_module' => ['#plain_text' => $source_module],
+        $general_info['missing_module_list']['module_list'][$source_module] = [
+          'source_module' => [
+            '#plain_text' => $source_module,
+            '#prefix' => '<span class="upgrade-analysis-report__status-icon upgrade-analysis-report__status-icon--warning">',
+            '#suffix' => '</span>',
+          ],
           'destination_module' => ['#plain_text' => 'Missing'],
         ];
       }
     }
     // Available migrations.
-    $form['available_module_list'] = [
+    $general_info['available_module_list'] = [
       '#tree' => TRUE,
       '#type' => 'details',
       '#title' => $this->t('Available upgrade paths'),
+      '#weight' => 3,
+      '#attributes' => ['id' => ['checked']],
     ];
 
-    $form['available_module_list']['module_list'] = [
+    $general_info['available_module_list']['module_list'] = [
       '#type' => 'table',
       '#header' => [
-        $this->t('Source'),
-        $this->t('Destination'),
+        $this->t('Source module: Drupal ' . $version),
+        $this->t('Upgrade module: Drupal 8'),
       ],
     ];
 
@@ -534,21 +544,41 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
           '#plain_text' => $destination_module,
         ];
       }
-      $form['available_module_list']['module_list'][$source_module] = [
-        'source_module' => ['#plain_text' => $source_module],
+      $general_info['available_module_list']['module_list'][$source_module] = [
+        'source_module' => [
+          '#plain_text' => $source_module,
+          '#prefix' => '<span class="upgrade-analysis-report__status-icon upgrade-analysis-report__status-icon--checked">',
+          '#suffix' => '</span>',
+        ],
         'destination_module' => $destination_details,
       ];
     }
-    $form['counts'] = [
-      '#title' => 'Upgrade analysis report',
-      '#theme' => 'item_list',
-      '#items' => [
-        $this->formatPlural($available_count, '@count available upgrade path', '@count available upgrade paths'),
-        $this->formatPlural($missing_count, '@count missing upgrade path', '@count missing upgrade paths'),
+
+    $counters = [
+      [
+        '#theme' => 'status_report_counter',
+        '#amount' => $missing_count,
+        '#text' => $this->formatPlural($missing_count, 'Missing upgrade path', 'Missing upgrade paths'),
+        '#severity' => 'warning',
+        '#weight' => 0,
       ],
-      '#weight' => -15,
+      [
+        '#theme' => 'status_report_counter',
+        '#amount' => $available_count,
+        '#text' => $this->formatPlural($available_count, 'Available upgrade path', 'Available upgrade paths'),
+        '#severity' => 'checked',
+        '#weight' => 1,
+      ]
+    ];
+
+    $form['status_report_page'] = [
+      '#theme' => 'status_report_page',
+      '#counters' => $counters,
+      '#general_info' => $general_info,
     ];
 
+    $form['#attached']['library'][] = 'migrate_drupal_ui/base';
+
     return $form;
   }
 
@@ -599,7 +629,7 @@ protected function getDatabaseTypes() {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return $this->t('Are you sure?');
+    return $this->t('Upgrade analysis report');
   }
 
   /**
diff --git a/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php b/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
index 046f9c45ce..f785a572b3 100644
--- a/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
+++ b/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
@@ -149,7 +149,7 @@ public function testMigrateUpgrade() {
 
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertResponse(200);
-    $this->assertText('Are you sure?');
+    $this->assertText('Upgrade analysis report');
     // Ensure we get errors about missing modules.
     $this->assertText(t('Source module not found for module_no_annotation.'));
     $this->assertText(t('Source module not found for modules_available_test.'));
@@ -168,7 +168,7 @@ public function testMigrateUpgrade() {
 
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertResponse(200);
-    $this->assertText('Are you sure?');
+    $this->assertText('Upgrade analysis report');
     // Ensure there are no errors about the missing modules.
     $this->assertNoText(t('Source module not found for module_no_annotation.'));
     $this->assertNoText(t('Source module not found for modules_available_test.'));
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
index e322aa3970..0b39b2bcc9 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
@@ -152,7 +152,7 @@ public function testMigrateUpgrade() {
 
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertResponse(200);
-    $this->assertText('Are you sure?');
+    $this->assertText('Upgrade analysis report');
     // Ensure we get errors about missing modules.
     $this->assertSession()->pageTextContains(t('Source module not found for migration_provider_no_annotation.'));
     $this->assertSession()->pageTextContains(t('Source module not found for migration_provider_test.'));
@@ -171,7 +171,7 @@ public function testMigrateUpgrade() {
 
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertSession()->pageTextContains('Are you sure?');
+    $this->assertSession()->pageTextContains('Upgrade analysis report');
     // Ensure there are no errors about the missing modules from the test module.
     $this->assertSession()->pageTextNotContains(t('Source module not found for migration_provider_no_annotation.'));
     $this->assertSession()->pageTextNotContains(t('Source module not found for migration_provider_test.'));
