From c3ecd80410f6d8f6d6971ab92357416412e94e7d Mon Sep 17 00:00:00 2001
From: Benjamin Kott <benjamin.kott@outlook.com>
Date: Fri, 6 Sep 2024 15:18:17 +0200
Subject: [PATCH] [TASK] Make treelist context aware

The new panel treelist styling is context aware
and adapts to light and dark color schemes. This
patch also restores the visibility of treelines
in Pagetree overview and Localization overview.

Resolves: #104845
Releases: main
Change-Id: I82785daec2de46e259eca757206e502798922069
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/85914
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Benjamin Franzke <ben@bnf.dev>
Tested-by: Andreas Kienast <a.fernandez@scripting-base.de>
Tested-by: Benjamin Franzke <ben@bnf.dev>
Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de>
Tested-by: Oliver Bartsch <bo@cedev.de>
---
 Build/Sources/Sass/component/_treelist.scss   | 35 ++++++++++++++-----
 Build/Sources/Sass/typo3/_element_tree.scss   | 17 +++------
 .../Resources/Public/Css/adminpanel.css       |  5 ++-
 .../backend/Resources/Public/Css/backend.css  |  9 ++---
 .../Templates/Administration/Statistic.html   |  4 +--
 .../Controller/PageInformationController.php  | 14 +++++---
 .../TranslationStatusController.php           | 32 ++++++++---------
 7 files changed, 64 insertions(+), 52 deletions(-)

diff --git a/Build/Sources/Sass/component/_treelist.scss b/Build/Sources/Sass/component/_treelist.scss
index d7b553e650a1..de37d5715990 100644
--- a/Build/Sources/Sass/component/_treelist.scss
+++ b/Build/Sources/Sass/component/_treelist.scss
@@ -30,14 +30,15 @@
 //
 
 //
-// Variables
+// Component
 //
-:root {
-    --treelist-color: #333;
-    --treelist-comment-color: #666;
-    --treelist-bg: #fff;
+.treelist,
+.treeline-container {
+    --treelist-color: var(--typo3-text-color-base);
+    --treelist-comment-color: var(--typo3-text-color-variant);
+    --treelist-bg: var(--typo3-surface-base);
     --treelist-border-width: 1px;
-    --treelist-border-color: #ddd;
+    --treelist-border-color: color-mix(in srgb, var(--treelist-bg), var(--treelist-color) 10%);
     --treelist-indentation: 1rem;
     --treelist-indentation-spacer: .5rem;
     --treelist-item-spacer: 2px;
@@ -45,9 +46,6 @@
     --treelist-control-size: 16px;
 }
 
-//
-// Component
-//
 .treelist,
 .treelist ul {
     color: var(--treelist-color);
@@ -238,3 +236,22 @@
         padding-inline-start: 0;
     }
 }
+
+//
+// Adaptions
+//
+.panel {
+    .treelist,
+    .treeline-container {
+        --treelist-color: var(--typo3-panel-color);
+        --treelist-bg: var(--typo3-panel-bg);
+    }
+}
+
+.form-section {
+    .treelist,
+    .treeline-container {
+        --treelist-color: var(--typo3-form-section-color);
+        --treelist-bg: var(--typo3-form-section-bg);
+    }
+}
diff --git a/Build/Sources/Sass/typo3/_element_tree.scss b/Build/Sources/Sass/typo3/_element_tree.scss
index 614a5d199228..b4be8112220a 100644
--- a/Build/Sources/Sass/typo3/_element_tree.scss
+++ b/Build/Sources/Sass/typo3/_element_tree.scss
@@ -1,20 +1,16 @@
-//
-// Variables
-//
-$navigation-bg: $gray-100;
-
 //
 // Treeline Icons
 //
 .treeline-icon {
     position: relative;
     display: inline-block;
-    margin-top: -.5rem;
-    margin-bottom: -.5rem;
+    margin-top: -.75rem;
+    margin-bottom: -.75rem;
     margin-inline-end: 2px;
     padding: 0;
-    height: 41px;
+    height: 54px;
     width: 16px;
+    flex-shrink: 0;
     white-space: nowrap;
     overflow: hidden;
     vertical-align: middle;
@@ -71,6 +67,7 @@ $navigation-bg: $gray-100;
  */
 .treeline-container {
     display: flex;
+    align-items: center;
     gap: calc(var(--typo3-spacing) * .25);
 }
 
@@ -115,8 +112,4 @@ span.dragIcon {
     .tree-wrapper {
         flex: 1 0 0;
     }
-
-    .navigation-tree-container {
-        background-color: $navigation-bg;
-    }
 }
diff --git a/typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css b/typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css
index 46e0266202d3..e51f3413d689 100644
--- a/typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css
+++ b/typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css
@@ -48,7 +48,7 @@ body.typo3-adminPanel-noscroll{overflow:hidden}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-emphasized{--icon-emphasized-color:var(--typo3-state-default-color);--icon-emphasized-bg:var(--typo3-state-default-bg);color:var(--icon-emphasized-color);background-color:var(--icon-emphasized-bg);display:flex;justify-content:center;align-items:center;width:2rem;height:2rem;border-radius:100%}
 .alert #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-emphasized{--icon-emphasized-color:var(--typo3-alert-icon-color);--icon-emphasized-bg:var(--typo3-alert-icon-bg)}
 .callout #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-emphasized{--icon-emphasized-color:var(--typo3-callout-icon-color);--icon-emphasized-bg:var(--typo3-callout-icon-bg)}
-#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon{position:relative;display:inline-block;margin-top:-.5rem;margin-bottom:-.5rem;margin-inline-end:2px;padding:0;height:41px;width:16px;white-space:nowrap;overflow:hidden;vertical-align:middle}
+#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon{position:relative;display:inline-block;margin-top:-.75rem;margin-bottom:-.75rem;margin-inline-end:2px;padding:0;height:54px;width:16px;flex-shrink:0;white-space:nowrap;overflow:hidden;vertical-align:middle}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon:after,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon:before{position:absolute;content:"";inset-inline-start:50%}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon:before{top:0;height:100%;width:2px;margin-inline-start:-1px;border-inline-start:1px solid var(--treelist-border-color)}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon:after{border-top:1px solid var(--treelist-border-color);height:2px;width:100%;top:50%;margin-top:-1px}
@@ -57,14 +57,13 @@ body.typo3-adminPanel-noscroll{overflow:hidden}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon-line:after{display:none}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon-blank{display:none}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon-clear:after,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon-clear:before{display:none}
-#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-container{display:flex;gap:calc(var(--typo3-spacing) * .25)}
+#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-container{display:flex;align-items:center;gap:calc(var(--typo3-spacing) * .25)}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel body#typo3-pagetree{margin:0;padding:0}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel #typo3-pagetree #typo3-inner-docbody{padding:10px 0}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel span.dragIcon{display:inline-block;height:16px}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel #dragIcon{position:absolute;visibility:hidden;z-index:20;opacity:.5;white-space:nowrap}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component .navigation-tree-container,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component .tree,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component .tree>div{flex:1 0 0;display:flex;flex-direction:column}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component .tree-wrapper{flex:1 0 0}
-#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .scaffold-content-navigation-component .navigation-tree-container{background-color:#f5f5f5}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .treeline-icon{margin-top:-8px;margin-bottom:-8px}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-backdrop{z-index:99991;content:"";position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5)}
 #TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-message{padding:20px;background-color:#fff;border-left:3px solid #cacaca;margin-bottom:1em;box-shadow:0 0 1px rgba(0,0,0,.15)}
diff --git a/typo3/sysext/backend/Resources/Public/Css/backend.css b/typo3/sysext/backend/Resources/Public/Css/backend.css
index f6f5e3254e8d..33f818c8ce24 100644
--- a/typo3/sysext/backend/Resources/Public/Css/backend.css
+++ b/typo3/sysext/backend/Resources/Public/Css/backend.css
@@ -3607,7 +3607,7 @@ typo3-backend-live-search-result-item-action>* .livesearch-result-item-title .sm
 .resource-tile-checkbox{display:none;position:absolute;font-size:var(--resource-tile-checkbox-size);inset-inline-end:calc(var(--resource-tile-spacing)/ 2);top:calc(var(--resource-tile-spacing)/ 2)}
 .recordsearchbox-container{margin-bottom:var(--typo3-spacing)}
 .recordsearchbox-container [data-recordsearchbox-levels]{max-width:140px}
-:root{--treelist-color:#333;--treelist-comment-color:#666;--treelist-bg:#fff;--treelist-border-width:1px;--treelist-border-color:#ddd;--treelist-indentation:1rem;--treelist-indentation-spacer:.5rem;--treelist-item-spacer:2px;--treelist-item-line-height:24px;--treelist-control-size:16px}
+.treeline-container,.treelist{--treelist-color:var(--typo3-text-color-base);--treelist-comment-color:var(--typo3-text-color-variant);--treelist-bg:var(--typo3-surface-base);--treelist-border-width:1px;--treelist-border-color:color-mix(in srgb, var(--treelist-bg), var(--treelist-color) 10%);--treelist-indentation:1rem;--treelist-indentation-spacer:.5rem;--treelist-item-spacer:2px;--treelist-item-line-height:24px;--treelist-control-size:16px}
 .treelist,.treelist ul{color:var(--treelist-color);background:var(--treelist-bg);padding:0;padding-inline-start:calc(var(--treelist-indentation)/ 2);list-style:none;position:relative}
 .treelist ul:before,.treelist:before{content:"";display:block;width:0;position:absolute;top:0;bottom:calc(var(--treelist-item-line-height)/ 2);inset-inline-start:calc(var(--treelist-indentation)/ 2 - var(--treelist-border-width)/ 2);margin-bottom:-2px;border-inline-start:1px solid var(--treelist-border-color)}
 .treelist ul:after,.treelist:after{content:"";display:table}
@@ -3636,6 +3636,8 @@ typo3-backend-live-search-result-item-action>* .livesearch-result-item-title .sm
 .treelist-root>li>.treelist-group>.treelist-control{margin-inline-start:calc(var(--treelist-control-size) * -1)}
 .treelist-root>li>.treelist-group>.treelist-control:before{background-color:transparent}
 .treelist-root-clean>li{padding-inline-start:0}
+.panel .treeline-container,.panel .treelist{--treelist-color:var(--typo3-panel-color);--treelist-bg:var(--typo3-panel-bg)}
+.form-section .treeline-container,.form-section .treelist{--treelist-color:var(--typo3-form-section-color);--treelist-bg:var(--typo3-form-section-bg)}
 .indent{--indent-base:16px;--indent-level:0;margin-inline-start:calc(var(--indent-base) * var(--indent-level))}
 .indent-inline-block{display:inline-block}
 .pagination{flex-wrap:wrap;row-gap:4px}
@@ -3867,7 +3869,7 @@ div.t3-form-field-container:first-child .t3-form-field-label-flex{border-top:0}
 .formengine-field-item.disabled{position:relative}
 .formengine-field-item.disabled .t3-form-field-disable{z-index:100;background:#fafafa;display:block;position:absolute;width:100%;height:100%;opacity:.5}
 .t3-form-field-eval-null-checkbox{z-index:150;position:relative}
-.treeline-icon{position:relative;display:inline-block;margin-top:-.5rem;margin-bottom:-.5rem;margin-inline-end:2px;padding:0;height:41px;width:16px;white-space:nowrap;overflow:hidden;vertical-align:middle}
+.treeline-icon{position:relative;display:inline-block;margin-top:-.75rem;margin-bottom:-.75rem;margin-inline-end:2px;padding:0;height:54px;width:16px;flex-shrink:0;white-space:nowrap;overflow:hidden;vertical-align:middle}
 .treeline-icon:after,.treeline-icon:before{position:absolute;content:"";inset-inline-start:50%}
 .treeline-icon:before{top:0;height:100%;width:2px;margin-inline-start:-1px;border-inline-start:1px solid var(--treelist-border-color)}
 .treeline-icon:after{border-top:1px solid var(--treelist-border-color);height:2px;width:100%;top:50%;margin-top:-1px}
@@ -3876,14 +3878,13 @@ div.t3-form-field-container:first-child .t3-form-field-label-flex{border-top:0}
 .treeline-icon-line:after{display:none}
 .treeline-icon-blank{display:none}
 .treeline-icon-clear:after,.treeline-icon-clear:before{display:none}
-.treeline-container{display:flex;gap:calc(var(--typo3-spacing) * .25)}
+.treeline-container{display:flex;align-items:center;gap:calc(var(--typo3-spacing) * .25)}
 body#typo3-pagetree{margin:0;padding:0}
 #typo3-pagetree #typo3-inner-docbody{padding:10px 0}
 span.dragIcon{display:inline-block;height:16px}
 #dragIcon{position:absolute;visibility:hidden;z-index:20;opacity:.5;white-space:nowrap}
 .scaffold-content-navigation-component,.scaffold-content-navigation-component .navigation-tree-container,.scaffold-content-navigation-component .tree,.scaffold-content-navigation-component .tree>div{flex:1 0 0;display:flex;flex-direction:column}
 .scaffold-content-navigation-component .tree-wrapper{flex:1 0 0}
-.scaffold-content-navigation-component .navigation-tree-container{background-color:#f5f5f5}
 .ui-block{text-align:center;padding-top:200px;position:absolute;z-index:3000;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.3)}
 .pagination{margin:0}
 .pagination .paginator-input{display:inline-block;width:auto;margin:-7px 0}
diff --git a/typo3/sysext/indexed_search/Resources/Private/Templates/Administration/Statistic.html b/typo3/sysext/indexed_search/Resources/Private/Templates/Administration/Statistic.html
index 7fb433823a85..e7fca4b6223e 100644
--- a/typo3/sysext/indexed_search/Resources/Private/Templates/Administration/Statistic.html
+++ b/typo3/sysext/indexed_search/Resources/Private/Templates/Administration/Statistic.html
@@ -31,7 +31,7 @@
                 </div>
             </f:form>
             <div class="table-fit" tabindex="0">
-                <table class="table table-striped table-hover table-vertical-top">
+                <table class="table table-striped table-hover">
                     <thead>
                         <tr>
                             <th class="col-title-flexible">
@@ -128,7 +128,7 @@
                                                 </f:defaultCase>
                                             </f:switch>
                                             <td class="col-control">
-                                                <div class="btn-group">
+                                                <div class="btn-group btn-group-sm">
                                                     <f:link.action
                                                         action="statisticDetails"
                                                         arguments="{pageHash:l.phash}"
diff --git a/typo3/sysext/info/Classes/Controller/PageInformationController.php b/typo3/sysext/info/Classes/Controller/PageInformationController.php
index 6094d608909c..f4ee52e0b2e1 100644
--- a/typo3/sysext/info/Classes/Controller/PageInformationController.php
+++ b/typo3/sysext/info/Classes/Controller/PageInformationController.php
@@ -340,7 +340,12 @@ class PageInformationController extends InfoModuleController
                 case 'title':
                     $showPageId = !empty($userTsConfig['options.']['pageTree.']['showPageIdWithTitle']);
                     $pTitle = htmlspecialchars((string)BackendUtility::getProcessedValue('pages', $field, $row[$field], 20));
-                    $theData[$field] = ($row['treeIcons'] ?? '') . $theIcon . ($showPageId ? '[' . $row['uid'] . '] ' : '') . $pTitle;
+                    $theData[$field] = '<div class="treeline-container">'
+                        . ($row['treeIcons'] ?? '')
+                        . $theIcon
+                        . ($showPageId ? '[' . $row['uid'] . '] ' : '')
+                        . $pTitle
+                        . '</div>';
                     break;
                 case 'php_tree_stop':
                     // Intended fall through
@@ -396,7 +401,7 @@ class PageInformationController extends InfoModuleController
                     // the actual uid to be able to add it as data attribute to the table data cell.
                     // This also makes distinction between record rows and the header line simpler.
                     $theData['_UID_'] = $uid;
-                    $theData[$field] = '<div class="btn-group" role="group">' . $editButton . '</div>';
+                    $theData[$field] = '<div class="btn-group btn-group-sm" role="group">' . $editButton . '</div>';
                     break;
                 case 'shortcut':
                 case 'shortcut_mode':
@@ -416,7 +421,7 @@ class PageInformationController extends InfoModuleController
                     }
             }
         }
-        $this->addElement_tdCssClass['title'] = $row['_CSSCLASS'] ?? '';
+        $this->addElement_tdCssClass['title'] = 'col-title-flexible';
         return $this->addElement($theData);
     }
 
@@ -503,8 +508,7 @@ class PageInformationController extends InfoModuleController
             if (isset($data[$vKey])) {
                 if ($lastKey) {
                     $cssClass = $this->addElement_tdCssClass[$lastKey] ?? '';
-                    $out .= '
-						<' . $rowTag . ' class="' . $cssClass . ' nowrap"' . $colsp . '>' . $data[$lastKey] . '</' . $rowTag . '>';
+                    $out .= '<' . $rowTag . ' class="' . $cssClass . ' nowrap"' . $colsp . '>' . $data[$lastKey] . '</' . $rowTag . '>';
                 }
                 $lastKey = $vKey;
                 $c = 1;
diff --git a/typo3/sysext/info/Classes/Controller/TranslationStatusController.php b/typo3/sysext/info/Classes/Controller/TranslationStatusController.php
index 014fb77be982..b98392bd844e 100644
--- a/typo3/sysext/info/Classes/Controller/TranslationStatusController.php
+++ b/typo3/sysext/info/Classes/Controller/TranslationStatusController.php
@@ -161,13 +161,15 @@ class TranslationStatusController extends InfoModuleController
                 $icon = BackendUtility::wrapClickMenuOnIcon($icon, 'pages', $data['row']['uid']);
             }
 
-            $tCells[] = '<td' . (!empty($data['row']['_CSSCLASS']) ? ' class="' . $data['row']['_CSSCLASS'] . '"' : '') . '>' .
-                (!empty($data['depthData']) ? $data['depthData'] : '') .
-                ($data['HTML'] ?? '') .
-                $icon .
-                $pageModuleLink .
-                ((string)$data['row']['nav_title'] !== '' ? ' [Nav: <em>' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($data['row']['nav_title'], $titleLen)) . '</em>]' : '') .
-                '</td>';
+            $tCells[] = '<td class="col-nowrap' . (!empty($data['row']['_CSSCLASS']) ? ' ' . $data['row']['_CSSCLASS'] : '') . '">'
+                . '<div class="treeline-container">'
+                . (!empty($data['depthData']) ? $data['depthData'] : '')
+                . ($data['HTML'] ?? '')
+                . $icon
+                . $pageModuleLink
+                . ((string)$data['row']['nav_title'] !== '' ? ' <span>[Nav: <em>' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($data['row']['nav_title'], $titleLen)) . '</em>]</span>' : '')
+                . '</div>'
+                . '</td>';
             $previewUriBuilder = PreviewUriBuilder::create((int)$data['row']['uid']);
             // DEFAULT language:
             $pageTranslationVisibility = new PageTranslationVisibility((int)($data['row']['l18n_cfg'] ?? 0));
@@ -194,7 +196,7 @@ class TranslationStatusController extends InfoModuleController
             $info .= $pageTranslationVisibility->shouldBeHiddenInDefaultLanguage() ? '<span title="' . htmlspecialchars($lang->sL('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.l18n_cfg.I.1')) . '">D</span>' : '&nbsp;';
             $info .= $pageTranslationVisibility->shouldHideTranslationIfNoTranslatedRecordExists() ? '<span title="' . htmlspecialchars($lang->sL('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.l18n_cfg.I.2')) . '">N</span>' : '&nbsp;';
             // Put into cell:
-            $tCells[] = '<td class="' . $status . ' col-border-left"><div class="btn-group">' . $info . '</div></td>';
+            $tCells[] = '<td class="' . $status . ' col-border-left col-nowrap"><div class="btn-group btn-group-sm">' . $info . '</div></td>';
             $tCells[] = '<td class="' . $status . '" title="' . $lang->sL(
                 'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_CEcount'
             ) . '" align="center">' . ($this->getContentElementCount((int)$data['row']['uid'], 0) ?: '-') . '</td>';
@@ -232,7 +234,7 @@ class TranslationStatusController extends InfoModuleController
                         }
                         $icon = $this->iconFactory->getIconForRecord('pages', $row, IconSize::SMALL);
                         $iconMarkup = '<span title="' . BackendUtility::getRecordIconAltText($row, 'pages') . '">' . $icon->render() . '</span>';
-                        $tCells[] = '<td class="' . $status . ' col-border-left">' .
+                        $tCells[] = '<td class="' . $status . ' col-border-left col-nowrap">' .
                             BackendUtility::wrapClickMenuOnIcon($iconMarkup, 'pages', (int)$row['uid']) .
                             $pageModuleLink .
                             '</td>';
@@ -256,7 +258,7 @@ class TranslationStatusController extends InfoModuleController
                             . '" class="btn btn-default" title="' . $lang->sL(
                                 'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editLanguageOverlayRecord'
                             ) . '">' . $this->iconFactory->getIcon('actions-open', IconSize::SMALL)->render() . '</a>';
-                        $tCells[] = '<td class="' . $status . '"><div class="btn-group">' . $info . '</div></td>';
+                        $tCells[] = '<td class="' . $status . '"><div class="btn-group btn-group-sm">' . $info . '</div></td>';
                         $tCells[] = '<td class="' . $status . '" title="' . $lang->sL(
                             'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_CEcount'
                         ) . '" align="center">' . ($this->getContentElementCount((int)$data['row']['uid'], $languageId) ?: '-') . '</td>';
@@ -277,11 +279,7 @@ class TranslationStatusController extends InfoModuleController
                     }
                 }
             }
-            $output .= '
-				<tr>
-					' . implode('
-					', $tCells) . '
-				</tr>';
+            $output .= '<tr>' . implode('', $tCells) . '</tr>';
         }
         // Put together HEADER:
         $headerCells = [];
@@ -299,7 +297,7 @@ class TranslationStatusController extends InfoModuleController
                 'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
             ]);
             $editIco = '<a href="' . htmlspecialchars($editUrl)
-                . '" class="btn btn-default" title="' . $lang->sL(
+                . '" class="btn btn-default btn-sm" title="' . $lang->sL(
                     'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editPageProperties'
                 ) . '">' . $this->iconFactory->getIcon('actions-document-open', IconSize::SMALL)->render() . '</a>';
         } else {
@@ -343,7 +341,7 @@ class TranslationStatusController extends InfoModuleController
                 $createLink = (string)$this->uriBuilder->buildUriFromRoute('tce_db', [
                     'redirect' => $request->getAttribute('normalizedParams')->getRequestUri(),
                 ]);
-                $newButton = '<a href="' . htmlspecialchars($createLink) . '" data-edit-url="' . htmlspecialchars($createLink) . '" class="btn btn-default disabled t3js-language-new" data-lang="' . $languageId . '" title="' . $lang->sL(
+                $newButton = '<a href="' . htmlspecialchars($createLink) . '" data-edit-url="' . htmlspecialchars($createLink) . '" class="btn btn-default btn-sm disabled t3js-language-new" data-lang="' . $languageId . '" title="' . $lang->sL(
                     'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_getlangsta_createNewTranslationHeaders'
                 ) . '">' . $this->iconFactory->getIcon('actions-document-new', IconSize::SMALL)->render() . '</a>';
 
-- 
GitLab