diff --git a/core/modules/outside_in/css/outside_in.module.css b/core/modules/outside_in/css/outside_in.module.css
index 984b1c0..faced57 100644
--- a/core/modules/outside_in/css/outside_in.module.css
+++ b/core/modules/outside_in/css/outside_in.module.css
@@ -4,7 +4,7 @@
  */
 
 /* Position the offcanvas tray container outside the right of the viewport. */
-.ui-dialog.ui-dialog-offcanvas {
+.ui-dialog-offcanvas {
   box-sizing: border-box;
   height: 100%;
   overflow: hidden;
@@ -16,30 +16,14 @@
   right: 0;
 }
 
-/* Create a place to name the tray. */
-.ui-dialog.ui-dialog-offcanvas h1 {
-  padding: 15px 25% 15px 15px; /* LTR */
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 120%;
-}
-[dir="rtl"] .ui-dialog.ui-dialog-offcanvas h1 {
-  text-align: right;
-  padding-right: 0;
-  padding-left: 25%;
-}
 
 /* Wrap the form that's inside the offcanvas tray. */
-.ui-dialog.ui-dialog-offcanvas > .ui-dialog-content {
+.ui-dialog-offcanvas .ui-dialog-content {
   padding: 0 15px;
 }
-[dir="rtl"] .ui-dialog.ui-dialog-offcanvas .ui-dialog-content {
+[dir="rtl"] .ui-dialog-offcanvas .ui-dialog-content {
   text-align: right;
 }
-.ui-dialog.ui-dialog-offcanvas > .form-item,
-.ui-dialog.ui-dialog-offcanvas > .form-item .form-item {
-  width: 100%;
-}
 
 /*
  * Position the edit toolbar tab.
@@ -55,28 +39,15 @@
  * @todo Remove when more general form styling is done:
  *    https://www.drupal.org/node/2784437.
  */
-.ui-dialog.ui-dialog-offcanvas td {
-    width: auto;
-}
 .ui-dialog.ui-dialog-offcanvas .menu-enabled {
     width: auto;
 }
-.ui-dialog.ui-dialog-offcanvas table#menu-overview th {
-  display: none;
-}
 .ui-dialog.ui-dialog-offcanvas table#menu-overview tr td:first-child {
   min-width: 110px;
 }
-.ui-dialog.ui-dialog-offcanvas details > .details-wrapper {
-  padding: 5px;
+.ui-dialog-offcanvas details {
   overflow: scroll;
 }
-.ui-dialog.ui-dialog-offcanvas .tabledrag-toggle-weight {
+.ui-dialog-offcanvas .tabledrag-toggle-weight {
   font-size: 80%;
 }
-.ui-dialog.ui-dialog-offcanvas input:focus,
-.ui-dialog.ui-dialog-offcanvas summary:focus {
-  outline: none;
-  box-shadow: 2px 2px #ddd;
-}
-
diff --git a/core/modules/outside_in/css/outside_in.theme.css b/core/modules/outside_in/css/outside_in.theme.css
index 433a987..a9ac8a6 100644
--- a/core/modules/outside_in/css/outside_in.theme.css
+++ b/core/modules/outside_in/css/outside_in.theme.css
@@ -92,18 +92,189 @@ button.toolbar-icon.toolbar-icon-edit.toolbar-item:hover > .toolbar-icon-edit:be
  * @todo Move Off-canvas css into core Off-canvas library:
  *   https://www.drupal.org/node/2784443.
  */
-.ui-dialog.ui-dialog-offcanvas {
-  background: #fff;
-  border-left: 1px solid #ddd; /* LTR */
-  box-shadow: -2px 2px 1px 1px rgba(0, 0, 0, 0.1); /* LTR */
+.ui-dialog-offcanvas {
+  border: 0 solid #000;
+  border-left-width: 1px; /* LTR */
+  border-radius: 0;
+  font-size: 14px;
+  font-family: "Source Sans Pro", "Lucida Grande", Verdana, sans-serif;
+  overflow: visible;
+  padding: 0;
 }
-[dir="rtl"] .ui-dialog.ui-dialog-offcanvas {
-  border-right: 1px solid #ddd;
-  box-shadow: 2px 2px 1px 1px rgba(0, 0, 0, 0.1);
+[dir="rtl"] .ui-dialog-offcanvas {
+  border-left-width: 0;
+  border-right-width: 1px;
 }
 
 /* Style the tray header. */
-.ui-dialog.ui-dialog-offcanvas h1 {
+.ui-dialog-offcanvas .ui-dialog-title {
   font-size: 120%;
-  border-bottom: 1px solid #ddd;
+  padding-left: 1.5em;
+}
+.ui-dialog-offcanvas .ui-dialog-title:before {
+  background: transparent url(../../../misc/icons/ffffff/pencil.svg) no-repeat scroll center center;
+  background-size: 100% auto;
+  content: '';
+  display: block;
+  height: 100%;
+  left: 0.6667em;
+  position: absolute;
+  top: 0;
+  width: 20px;
+}
+
+.ui-dialog-offcanvas .ui-dialog-titlebar {
+  background: #2d2d2d;
+  border-color: #777;
+  border-radius: 0;
+  color: #fff;
+  font-weight: normal;
+}
+.ui-dialog-offcanvas .ui-dialog-titlebar-close {
+  background: url(../../../misc/icons/ffffff/ex.svg) no-repeat;
+}
+.ui-dialog-offcanvas .ui-icon-closethick {
+  background: none;
+}
+
+.ui-dialog-offcanvas details,
+.ui-dialog-offcanvas summary,
+.ui-dialog-offcanvas .ui-dialog-content {
+  background: #474747;
+  color: #fff;
+}
+.ui-dialog-offcanvas details,
+.ui-dialog-offcanvas summary,
+.ui-dialog-offcanvas .details-wrapper {
+  border-width: 0;
+  margin: 0 -15px;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+
+.ui-dialog-offcanvas details[open],
+.ui-dialog-offcanvas details[open] summary {
+  background: #373737;
+}
+
+.ui-dialog-offcanvas summary {
+  text-shadow: none;
+  outline: none;
+  padding-bottom: 0.5em;
+  padding-top: 0.5em;
+}
+
+.ui-dialog-offcanvas a,
+.ui-dialog-offcanvas .link {
+  color: #85bef4;
+  border-bottom: none;
+  text-decoration: none;
+}
+
+.ui-dialog-offcanvas table {
+  border: 0;
+  border-collapse: collapse;
+  font-size: 0.857em;
+}
+.ui-dialog-offcanvas tr th {
+  color: #ddd;
+  font-size: 90%;
+}
+.ui-dialog-offcanvas tr th,
+.ui-dialog-offcanvas tr td {
+  padding: 4px 9px;
+  text-align: left;
+}
+.ui-dialog-offcanvas td a {
+  display: block;
+  max-width: 100px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.ui-dialog-offcanvas #menu-overview {
+  margin-top: 0;
+  margin-right: -15px;
+  margin-left: -15px;
+}
+.ui-dialog-offcanvas #menu-overview tr,
+.ui-dialog-offcanvas #menu-overview td,
+.ui-dialog-offcanvas #menu-overview th {
+  border: 0 solid #a8a8a8;
+  border-bottom-width: 1px;
+  background: none;
+}
+
+.ui-dialog-offcanvas button.link {
+  background: transparent;
+  border: 0;
+  cursor: pointer;
+  margin: 0;
+  padding: 0;
+}
+.ui-dialog-offcanvas .button {
+  border-radius: 1em;
+}
+.ui-dialog-offcanvas input {
+  box-sizing: border-box;
+  max-width: 100%;
+}
+.ui-dialog-offcanvas label {
+  line-height: normal;
+  margin-bottom: 0.5em;
+}
+.ui-dialog-offcanvas .description {
+  color: #ddd;
+  margin-top: 0.5em;
+}
+.ui-dialog-offcanvas .form-item {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+.ui-dialog-offcanvas .form-actions {
+  text-align: center;
+}
+.ui-dialog-offcanvas .button--primary {
+  background: #277abd none;
+  border: none;
+  color: #fff;
+  font-size: 0.857em;
+  margin: 1em auto;
+  width: 100%;
+}
+.ui-dialog-offcanvas .button--primary:hover {
+  /* @todo Pick a different hover color. */
+  background: #277abd none;
+}
+
+.ui-dialog-offcanvas .dropbutton-widget,
+.ui-dialog-offcanvas .dropbutton-toggle button {
+  background: #7b7b7b none;
+  border: none;
+  border-radius: 1em;
+  color: #fff;
+}
+.ui-dialog-offcanvas .dropbutton-widget:hover {
+  /* @todo Pick a different hover color. */
+  background: #7b7b7b none;
+}
+.ui-dialog-offcanvas .dropbutton a {
+  color: #fff;
+  font-size: 90%;
+  line-height: 1.8;
+  padding: 0.1em 0.8em;
+}
+.ui-dialog-offcanvas .dropbutton {
+  border: none;
+}
+.ui-dialog-offcanvas .dropbutton .dropbutton-action:hover,
+.ui-dialog-offcanvas .dropbutton a:hover {
+  background: none;
+}
+.ui-dialog-offcanvas td .dropbutton-multiple {
+  padding-right: 0;
+}
+[dir="rtl"].ui-dialog-offcanvas td .dropbutton-multiple {
+  padding-left: 0;
 }
diff --git a/core/modules/outside_in/outside_in.libraries.yml b/core/modules/outside_in/outside_in.libraries.yml
index 0b704af..e99eef8 100644
--- a/core/modules/outside_in/outside_in.libraries.yml
+++ b/core/modules/outside_in/outside_in.libraries.yml
@@ -5,8 +5,12 @@ drupal.outside_in:
   css:
     component:
       css/outside_in.module.css: {}
-      css/outside_in.theme.css: {}
       css/outside_in.motion.css: {}
+    theme:
+      # @todo Set the group higher than CSS_AGGREGATE_THEME so that it overrides
+      #   both jQuery UI and Classy's dialog.css, remove in
+      #   https://www.drupal.org/node/1945262.
+      css/outside_in.theme.css: { group: 200 }
   dependencies:
     - core/jquery
     - core/drupal
diff --git a/core/modules/outside_in/outside_in.module b/core/modules/outside_in/outside_in.module
index b3e6f07..df8b84a 100644
--- a/core/modules/outside_in/outside_in.module
+++ b/core/modules/outside_in/outside_in.module
@@ -5,6 +5,7 @@
  * Allows configuring blocks and other configuration from the site front-end.
  */
 
+use Drupal\Core\Asset\AttachedAssetsInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\outside_in\Block\BlockEntityOffCanvasForm;
 use Drupal\outside_in\Form\SystemBrandingOffCanvasForm;
@@ -134,3 +135,16 @@ function outside_in_block_alter(&$definitions) {
     }
   }
 }
+
+/**
+ * Implements hook_css_alter().
+ */
+function outside_in_css_alter(&$css, AttachedAssetsInterface $assets) {
+  // @todo Remove once conditional ordering is introduced in
+  //   https://www.drupal.org/node/1945262.
+  $path = drupal_get_path('module', 'outside_in') . '/css/outside_in.theme.css';
+  if (isset($css[$path])) {
+    // Use 200 to come after CSS_AGGREGATE_THEME.
+    $css[$path]['group'] = 200;
+  }
+}
diff --git a/core/modules/outside_in/outside_in.routing.yml b/core/modules/outside_in/outside_in.routing.yml
index 5c81541..79bc38d 100644
--- a/core/modules/outside_in/outside_in.routing.yml
+++ b/core/modules/outside_in/outside_in.routing.yml
@@ -2,6 +2,6 @@ entity.block.offcanvas_form:
   path: '/admin/structure/block/manage/{block}/offcanvas'
   defaults:
     _entity_form: 'block.offcanvas'
-    _title: 'Configure block'
+    _title_callback: '\Drupal\outside_in\Block\BlockEntityOffCanvasForm::title'
   requirements:
     _permission: 'administer blocks'
diff --git a/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php b/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
index 73354ed..0c61774 100644
--- a/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
+++ b/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
@@ -37,6 +37,9 @@ public function __construct($title, $content, array $dialog_options = [], $setti
     $this->dialogOptions['resizable'] = 'w';
     $this->dialogOptions['draggable'] = FALSE;
     $this->dialogOptions['drupalAutoButtons'] = FALSE;
+    // @todo drupal.ajax.js does not respect drupalAutoButtons properly, pass an
+    //   empty set of buttons until https://www.drupal.org/node/2793343 is in.
+    $this->dialogOptions['buttons'] = [];
   }
 
   /**
diff --git a/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php b/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
index 089feae..a77f51f 100644
--- a/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
+++ b/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
@@ -3,6 +3,7 @@
 namespace Drupal\outside_in\Block;
 
 use Drupal\block\BlockForm;
+use Drupal\block\BlockInterface;
 use Drupal\Core\Block\BlockPluginInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\PluginWithFormsInterface;
@@ -16,6 +17,21 @@
 class BlockEntityOffCanvasForm extends BlockForm {
 
   /**
+   * Provides a title callback to get the block's admin label.
+   *
+   * @param \Drupal\block\BlockInterface $block
+   *   The block entity.
+   *
+   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
+   *   The title.
+   */
+  public function title(BlockInterface $block) {
+    // @todo Wrap "Configure " in <span class="visually-hidden"></span> once
+    //   https://www.drupal.org/node/2359901 is fixed.
+    return $this->t('Configure @block', ['@block' => $block->getPlugin()->getPluginDefinition()['admin_label']]);
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function form(array $form, FormStateInterface $form_state) {
@@ -34,7 +50,7 @@ public function form(array $form, FormStateInterface $form_state) {
     ];
 
     // Remove the ID and region elements.
-    unset($form['id'], $form['region']);
+    unset($form['id'], $form['region'], $form['settings']['admin_label']);
 
     return $form;
   }
@@ -42,6 +58,16 @@ public function form(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
+  protected function actions(array $form, FormStateInterface $form_state) {
+    $actions = parent::actions($form, $form_state);
+    $actions['submit']['#value'] = $this->t('Save @block', ['@block' => $this->entity->getPlugin()->getPluginDefinition()['admin_label']]);
+    $actions['delete']['#access'] = FALSE;
+    return $actions;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function buildVisibilityInterface(array $form, FormStateInterface $form_state) {
     // Do not display the visibility.
     return [];
diff --git a/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php b/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
index 65139ec..063041d 100644
--- a/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
+++ b/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
@@ -54,6 +54,9 @@ public static function create(ContainerInterface $container) {
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form = $this->plugin->buildConfigurationForm($form, $form_state);
 
+    $form['block_branding']['#type'] = 'details';
+    $form['block_branding']['#weight'] = 10;
+
     // Unset links to Site Information form, we can make these changes here.
     unset($form['block_branding']['use_site_name']['#description'], $form['block_branding']['use_site_slogan']['#description']);
 
@@ -62,7 +65,6 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#type' => 'details',
       '#title' => t('Site details'),
       '#open' => TRUE,
-      '#weight' => -100,
     ];
     $form['site_information']['site_name'] = [
       '#type' => 'textfield',
diff --git a/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php b/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
index 7bad07f..b1dd9ac 100644
--- a/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
+++ b/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
@@ -8,6 +8,7 @@
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\PluginFormBase;
+use Drupal\Core\Render\Element;
 use Drupal\Core\Routing\RedirectDestinationTrait;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -84,6 +85,18 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#open' => TRUE,
     ];
     $form['entity_form'] += $this->getEntityForm($this->entity)->buildForm([], $form_state);
+
+    // Print the menu link titles as text instead of a link.
+    if (!empty($form['entity_form']['links']['links'])) {
+      foreach (Element::children($form['entity_form']['links']['links']) as $child) {
+        $title = $form['entity_form']['links']['links'][$child]['title'][1]['#title'];
+        $form['entity_form']['links']['links'][$child]['title'][1] = ['#markup' => $title];
+      }
+    }
+    // Change the header text.
+    $form['entity_form']['links']['links']['#header'][0] = $this->t('Link');
+    $form['entity_form']['links']['links']['#header'][1]['data'] = $this->t('On');
+
     // Remove the label, ID, description, and buttons from the entity form.
     unset($form['entity_form']['label'], $form['entity_form']['id'], $form['entity_form']['description'], $form['entity_form']['actions']);
     // Since the overview form is further nested than expected, update the
diff --git a/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php b/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
index 42c0ecf..3cc3acd 100644
--- a/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
+++ b/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
@@ -45,6 +45,7 @@ public function testDialog() {
           'resizable' => 'w',
           'draggable' => FALSE,
           'drupalAutoButtons' => FALSE,
+          'buttons' => [],
         ],
     ];
 
diff --git a/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php b/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
index eac1b0f..76d570a 100644
--- a/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
+++ b/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
@@ -30,6 +30,7 @@ public function testRender() {
         'resizable' => 'w',
         'draggable' => FALSE,
         'drupalAutoButtons' => FALSE,
+        'buttons' => [],
       ],
     ];
     $this->assertEquals($expected, $command->render());
