From dfc3c810032576f3cc57fdb30c48922440974624 Mon Sep 17 00:00:00 2001
From: Benjamin Kott <benjamin.kott@outlook.com>
Date: Tue, 25 Feb 2020 10:08:39 +0100
Subject: [PATCH] [BUGFIX] Only render widget footer if defined and correct
 styling issues

Widget footer is now only rendered if the optional footer section for
widgets is used and contains content. In addition, minor styling issues
were resolved. Templates were cleaned up again. Some extra conditions
were added to prevent empty tags.

Resolves: #90530
Releases: master
Change-Id: Idb4a6858395622a62448041fec3d510bec6fb271
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/63410
Tested-by: Daniel Goerz <daniel.goerz@posteo.de>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
Reviewed-by: Daniel Goerz <daniel.goerz@posteo.de>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
---
 Build/Sources/Sass/dashboard/_widget.scss     |  1 -
 .../Sass/dashboard/_widget_number.scss        |  7 ++++-
 .../Private/Layouts/Widget/Widget.html        |  9 ++++--
 .../Private/Templates/Widget/ChartWidget.html |  6 ++--
 .../Private/Templates/Widget/CtaWidget.html   | 24 ++++++++-------
 .../Private/Templates/Widget/ListWidget.html  | 12 ++++----
 .../Widget/NumberWithIconWidget.html          | 29 ++++++++++---------
 .../Private/Templates/Widget/RssWidget.html   |  2 +-
 .../Widget/T3GeneralInformation.html          | 18 +++++++-----
 .../Resources/Public/Css/dashboard.css        |  2 +-
 10 files changed, 65 insertions(+), 45 deletions(-)

diff --git a/Build/Sources/Sass/dashboard/_widget.scss b/Build/Sources/Sass/dashboard/_widget.scss
index f61bf4a9b8d8..20423a586bfe 100644
--- a/Build/Sources/Sass/dashboard/_widget.scss
+++ b/Build/Sources/Sass/dashboard/_widget.scss
@@ -39,7 +39,6 @@
 }
 
 .widget-content-main {
-    display: flex;
     flex-grow: 1;
     overflow-y: auto;
     padding: $widget-padding;
diff --git a/Build/Sources/Sass/dashboard/_widget_number.scss b/Build/Sources/Sass/dashboard/_widget_number.scss
index 84e3324a8bbf..3d5ce6c14273 100644
--- a/Build/Sources/Sass/dashboard/_widget_number.scss
+++ b/Build/Sources/Sass/dashboard/_widget_number.scss
@@ -1,6 +1,11 @@
+.widget-number {
+    height: 100%;
+    display: flex;
+    align-items: center;
+}
+
 .widget-number-icon {
     display: flex;
-    justify-content: center;
     align-items: center;
     width: 42px;
     margin-right: 20px;
diff --git a/typo3/sysext/dashboard/Resources/Private/Layouts/Widget/Widget.html b/typo3/sysext/dashboard/Resources/Private/Layouts/Widget/Widget.html
index 17a56c2b045c..d18e1f94d012 100644
--- a/typo3/sysext/dashboard/Resources/Private/Layouts/Widget/Widget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Layouts/Widget/Widget.html
@@ -3,7 +3,10 @@
     <div class="widget-content-main">
         <f:render section="main" optional="true" />
     </div>
-    <div class="widget-content-footer">
-        <f:render section="footer" optional="true" />
-    </div>
+    <f:variable name="footer" value="{f:render(section:'footer', optional: 'true')}" />
+    <f:if condition="{footer -> f:spaceless()}">
+        <div class="widget-content-footer">
+            {footer -> f:format.raw()}
+        </div>
+    </f:if>
 </html>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ChartWidget.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ChartWidget.html
index 9c24d403d576..4e753d334fe8 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ChartWidget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ChartWidget.html
@@ -1,15 +1,17 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
 <f:layout name="Widget/Widget" />
-
 <f:section name="main">
+
     <div class="widget-chart">
         <canvas></canvas>
     </div>
-</f:section>
 
+</f:section>
 <f:section name="footer">
+
     <f:if condition="{button}">
         <a href="{button.link}" target="{button.target}" class="widget-cta">{button.text}</a>
     </f:if>
+
 </f:section>
 </html>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/CtaWidget.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/CtaWidget.html
index 5c1283db9cb6..5f86147458f4 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/CtaWidget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/CtaWidget.html
@@ -1,22 +1,26 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
 <f:layout name="Widget/Widget"/>
 <f:section name="main">
+
     <f:if condition="{text}">
         {text}
     </f:if>
+
 </f:section>
 <f:section name="footer">
 
-    <f:link.external uri="{link}" target="_blank" class="widget-cta">
-        <f:if condition="{icon}">
-            <div class="widget-cta-icon">
-                <core:icon identifier="{icon}" size="large" alternativeMarkupIdentifier="inline" />
-            </div>
-        </f:if>
-        <f:if condition="{label}">
-            <f:translate key="{label}" default="{label}"/>
-        </f:if>
-    </f:link.external>
+    <f:if condition="{link}">
+        <f:link.external uri="{link}" target="_blank" class="widget-cta">
+            <f:if condition="{icon}">
+                <div class="widget-cta-icon">
+                    <core:icon identifier="{icon}" size="large" alternativeMarkupIdentifier="inline" />
+                </div>
+            </f:if>
+            <f:if condition="{label}">
+                <f:translate key="{label}" default="{label}"/>
+            </f:if>
+        </f:link.external>
+    </f:if>
 
 </f:section>
 </html>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ListWidget.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ListWidget.html
index db01cc54428e..bbbac6ee9667 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ListWidget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/ListWidget.html
@@ -2,10 +2,12 @@
 <f:layout name="Widget/Widget" />
 <f:section name="main">
 
-    <ul>
-        <f:for each="{items}" as="item">
-            <li><f:link.typolink parameter="{item.link}">{item.title}</f:link.typolink></li>
-        </f:for>
-    </ul>
+    <f:if condition="{items}">
+        <ul>
+            <f:for each="{items}" as="item">
+                <li><f:link.typolink parameter="{item.link}">{item.title}</f:link.typolink></li>
+            </f:for>
+        </ul>
+    </f:if>
 
 </f:section>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/NumberWithIconWidget.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/NumberWithIconWidget.html
index a21421906595..99c210653e29 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/NumberWithIconWidget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/NumberWithIconWidget.html
@@ -1,17 +1,20 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" data-namespace-typo3-fluid="true">
+<f:layout name="Widget/Widget" />
+<f:section name="main">
 
-<div class="widget-content-main">
-    <f:if condition="{icon}">
-        <div class="widget-number-icon">
-            <core:icon identifier="{icon}" size="large" alternativeMarkupIdentifier="inline" />
-        </div>
-    </f:if>
-    <div class="widget-number-content">
-        <div class="widget-number-title">{title}</div>
-        <f:if condition="{subtitle}">
-            <div class="widget-number-subtitle"><small>{subtitle}</small></div>
+    <div class="widget-number">
+        <f:if condition="{icon}">
+            <div class="widget-number-icon">
+                <core:icon identifier="{icon}" size="large" alternativeMarkupIdentifier="inline" />
+            </div>
         </f:if>
-        <div class="widget-number-number">{number}</div>
+        <div class="widget-number-content">
+            <div class="widget-number-title">{title}</div>
+            <f:if condition="{subtitle}">
+                <div class="widget-number-subtitle"><small>{subtitle}</small></div>
+            </f:if>
+            <div class="widget-number-number">{number}</div>
+        </div>
     </div>
-</div>
-</html>
+
+</f:section>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/RssWidget.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/RssWidget.html
index b367a3fc797a..5dd79fb931a1 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/RssWidget.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/RssWidget.html
@@ -19,7 +19,7 @@
 </f:section>
 <f:section name="footer">
 
-    <f:if condition="moreItemsLink">
+    <f:if condition="{moreItemsLink}">
         <f:link.typolink parameter="{moreItemsLink}" target="_blank" class="widget-cta">
             <f:translate key="{moreItemsText}" default="{moreItemsText}"/>
         </f:link.typolink>
diff --git a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/T3GeneralInformation.html b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/T3GeneralInformation.html
index 83a8b1d40d7f..1f41afa2f135 100644
--- a/typo3/sysext/dashboard/Resources/Private/Templates/Widget/T3GeneralInformation.html
+++ b/typo3/sysext/dashboard/Resources/Private/Templates/Widget/T3GeneralInformation.html
@@ -4,14 +4,16 @@
 
     <div class="row">
         <div class="col-sm-8">
-            <p>
-                {f:translate(key: 'LLL:EXT:about/Resources/Private/Language/Modules/about.xlf:cms_description',
-                arguments: '{
-                0: currentVersion,
-                1: "&copy; {copyrightYear}",
-                2: "Kasper Sk&aring;rh&oslash;j"
-                }') -> f:format.raw()}
-            </p>
+            <f:if condition="{currentVersion} && {copyrightYear}">
+                <p>
+                    {f:translate(key: 'LLL:EXT:about/Resources/Private/Language/Modules/about.xlf:cms_description',
+                    arguments: '{
+                    0: currentVersion,
+                    1: "&copy; {copyrightYear}",
+                    2: "Kasper Sk&aring;rh&oslash;j"
+                    }') -> f:format.raw()}
+                </p>
+            </f:if>
         </div>
         <div class="col-sm-4">
             <img src="{f:uri.resource(path: 'Images/typo3_orange.svg', extensionName: 'backend')}"
diff --git a/typo3/sysext/dashboard/Resources/Public/Css/dashboard.css b/typo3/sysext/dashboard/Resources/Public/Css/dashboard.css
index d906339b077b..8d79f154f43c 100644
--- a/typo3/sysext/dashboard/Resources/Public/Css/dashboard.css
+++ b/typo3/sysext/dashboard/Resources/Public/Css/dashboard.css
@@ -10,4 +10,4 @@
  * 
  * The TYPO3 project - inspiring people to share!
  */
-.module.module{background-color:#eaeaea}.module.module h1{line-height:calc(48 / 32);margin-bottom:20px;font-weight:900;font-size:32px}.dashboard-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;margin:-24px -24px 24px;padding:24px 24px 0;background:#dadada;border-bottom:1px solid #cdcdcd}.dashboard-tabs{display:flex;flex-wrap:wrap;align-items:center}.dashboard-tab{border-radius:5px 5px 0 0;display:inline-block;padding:12px;margin-right:2px;background:#bababa;color:#000}.dashboard-tab:focus,.dashboard-tab:hover{text-decoration:none;background:#adadad;color:#000}.dashboard-tab--active{background:#ff8700;color:#fff}.dashboard-tab--active:focus,.dashboard-tab--active:hover{text-decoration:none;background:#e67a00;color:#f2f2f2}.dashboard-button-tab-add{margin:5px}.dashboard-configuration{padding:10px 0}.dashboard-configuration-button{margin-left:10px;color:#737373;text-decoration:none}.dashboard-configuration-button:focus,.dashboard-configuration-button:hover{color:#ff8700;text-decoration:none}.dashboard-configuration-button:active{color:#000;text-decoration:none}.dashboard-empty{position:relative}.dashboard-empty-content{background-color:rgba(0,0,0,.05);border:2px dashed rgba(0,0,0,.15);padding:2.5em;text-align:center}.dashboard-empty-content h3{font-size:1.5em;margin-bottom:.5em}.dashboard-empty-content p{font-size:1.25em;margin-bottom:1em}.dashboard-empty-content>:first-child{margin-top:0}.dashboard-empty-content>:last-child{margin-bottom:0}.dashboard-grid{position:relative;margin-right:-10px;margin-left:-10px}.dashboard-item{position:absolute;z-index:1;padding:10px;width:100%;height:auto}@media screen and (min-width:750px){.dashboard-item{width:50%;height:200px}}@media screen and (min-width:1285px){.dashboard-item{width:25%}}.dashboard-item.muuri-item-positioning{z-index:2}.dashboard-item.muuri-item-positioning .widget-remove{display:none}.dashboard-item.muuri-item-placeholder{z-index:2;margin:0;opacity:.5}.dashboard-item.muuri-item-placeholder .widget{border:1px dashed #737373}.dashboard-item.muuri-item-placeholder .widget-remove{display:none}.dashboard-item.muuri-item-dragging,.dashboard-item.muuri-item-releasing{z-index:9999}.dashboard-item.muuri-item-releasing .widget-remove{display:none}.dashboard-item.muuri-item-dragging{cursor:move}.dashboard-item.muuri-item-hidden{z-index:0}.dashboard-item.widget-waiting{line-height:200px}.dashboard-item--enableSelect{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}@media screen and (min-width:750px){.dashboard-item--h4{height:400px}}@media screen and (min-width:750px){.dashboard-item--h6{height:600px}}.dashboard-item--w4{width:100%}@media screen and (min-width:1285px){.dashboard-item--w4{width:50%}}.dashboard-item-content{position:relative;width:100%;height:100%}.dashboard-button{display:inline-flex;align-items:center;border-radius:3px;background:#313131;color:#fff;padding:8px;text-decoration:none}.dashboard-button:focus,.dashboard-button:hover{text-decoration:none;background:#ff8700;color:#fff}.dashboard-button .dashboard-button-icon .icon{display:block}.dashboard-button .dashboard-button-icon+.dashboard-button-text{margin-left:.25em;margin-right:.25em}.dashboard-button-add{position:fixed;padding:16px;right:24px;bottom:24px;z-index:2}.widget{height:100%;border-radius:2px;overflow:hidden;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.15);color:#000}.widget:hover .widget-actions{opacity:1}.widget-content{display:flex;flex-direction:column;height:100%}.widget-content-title{padding:10px 20px;padding-right:76px;border-bottom:1px solid #d7d7d7;font-family:"Source Sans Pro",sans-serif;font-size:16px;font-weight:700;line-height:1.25}.widget-content-title span{overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.widget-content-main{display:flex;flex-grow:1;overflow-y:auto;padding:20px}.widget-content-footer{padding:20px;padding-top:0}.widget-actions{position:absolute;display:flex;top:calc(((16px * 1.25)/ 2) + (20px / 2));right:10px;transform:translate(0,-50%);opacity:0;transition:opacity .2s ease-in-out}.widget-action{width:28px;height:28px;position:relative;color:#737373;text-align:center}.widget-action:focus,.widget-action:hover{color:#ff8700}.widget-action .icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.widget-action-move{cursor:-webkit-grab;cursor:grab}.widget-waiting{position:absolute;top:50%;left:50%;line-height:300px;margin-right:-50%;transform:translate(-50%,-50%)}.widget-error{padding:20px;position:absolute;top:50%;text-align:center;transform:translateY(-50%);color:#c83c3c}.widget-chart{width:100%;height:100%}.widget-edit{width:45px;text-align:center}.widget-editIcon{color:#000}.widget-editIcon:focus,.widget-editIcon:hover{color:#ff8700}.widget-table{width:100%;color:#000}.widget-table thead tr{background-color:transparent}.widget-table tr:nth-child(odd){background-color:transparent}.widget-table tr:nth-child(even){background-color:#f2f2f2}.widget-table tbody td,.widget-table tbody th{border-top:1px solid #e0e0e0}.widget-table tbody:first-child tr:first-child td,.widget-table tbody:first-child tr:first-child th{border-top:none}.widget-table td,.widget-table th{padding:10px}.widget-table td>:first-child,.widget-table th>:first-child{margin-top:0}.widget-table td>:last-child,.widget-table th>:last-child{margin-bottom:0}.widget-table th{font-weight:700}.widget-content-main .widget-table-wrapper{margin-top:-10px;margin-left:-20px;margin-right:-20px}.widget-content-main .widget-table-wrapper td:first-child,.widget-content-main .widget-table-wrapper th:first-child{padding-left:20px}.widget-content-main .widget-table-wrapper td:last-child,.widget-content-main .widget-table-wrapper th:last-child{padding-right:20px}.widget-cta{display:flex;justify-content:center;align-items:center;background-color:#313131;color:#fff;border-radius:3px;padding:8px}.widget-cta:focus,.widget-cta:hover{text-decoration:none;background:#ff8700;color:#fff}.widget-cta-icon{display:flex;justify-content:center;align-items:center;width:18px;height:18px;margin-right:12px;color:#fff}.widget-doughnut--value{line-height:1.3;font-weight:900;font-size:36px;text-align:center}.widget-doughnut--meta{margin-top:10px;font-style:italic;color:#737373;text-align:center}.widget-number-icon{display:flex;justify-content:center;align-items:center;width:42px;margin-right:20px;color:#000}.widget-number-content{display:flex;flex-direction:column;justify-content:center}.widget-number-title{line-height:1.3;margin-bottom:5px;font-size:16px;color:#000}.widget-number-number{line-height:1.3;font-weight:900;font-size:24px}
\ No newline at end of file
+.module.module{background-color:#eaeaea}.module.module h1{line-height:calc(48 / 32);margin-bottom:20px;font-weight:900;font-size:32px}.dashboard-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;margin:-24px -24px 24px;padding:24px 24px 0;background:#dadada;border-bottom:1px solid #cdcdcd}.dashboard-tabs{display:flex;flex-wrap:wrap;align-items:center}.dashboard-tab{border-radius:5px 5px 0 0;display:inline-block;padding:12px;margin-right:2px;background:#bababa;color:#000}.dashboard-tab:focus,.dashboard-tab:hover{text-decoration:none;background:#adadad;color:#000}.dashboard-tab--active{background:#ff8700;color:#fff}.dashboard-tab--active:focus,.dashboard-tab--active:hover{text-decoration:none;background:#e67a00;color:#f2f2f2}.dashboard-button-tab-add{margin:5px}.dashboard-configuration{padding:10px 0}.dashboard-configuration-button{margin-left:10px;color:#737373;text-decoration:none}.dashboard-configuration-button:focus,.dashboard-configuration-button:hover{color:#ff8700;text-decoration:none}.dashboard-configuration-button:active{color:#000;text-decoration:none}.dashboard-empty{position:relative}.dashboard-empty-content{background-color:rgba(0,0,0,.05);border:2px dashed rgba(0,0,0,.15);padding:2.5em;text-align:center}.dashboard-empty-content h3{font-size:1.5em;margin-bottom:.5em}.dashboard-empty-content p{font-size:1.25em;margin-bottom:1em}.dashboard-empty-content>:first-child{margin-top:0}.dashboard-empty-content>:last-child{margin-bottom:0}.dashboard-grid{position:relative;margin-right:-10px;margin-left:-10px}.dashboard-item{position:absolute;z-index:1;padding:10px;width:100%;height:auto}@media screen and (min-width:750px){.dashboard-item{width:50%;height:200px}}@media screen and (min-width:1285px){.dashboard-item{width:25%}}.dashboard-item.muuri-item-positioning{z-index:2}.dashboard-item.muuri-item-positioning .widget-remove{display:none}.dashboard-item.muuri-item-placeholder{z-index:2;margin:0;opacity:.5}.dashboard-item.muuri-item-placeholder .widget{border:1px dashed #737373}.dashboard-item.muuri-item-placeholder .widget-remove{display:none}.dashboard-item.muuri-item-dragging,.dashboard-item.muuri-item-releasing{z-index:9999}.dashboard-item.muuri-item-releasing .widget-remove{display:none}.dashboard-item.muuri-item-dragging{cursor:move}.dashboard-item.muuri-item-hidden{z-index:0}.dashboard-item.widget-waiting{line-height:200px}.dashboard-item--enableSelect{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}@media screen and (min-width:750px){.dashboard-item--h4{height:400px}}@media screen and (min-width:750px){.dashboard-item--h6{height:600px}}.dashboard-item--w4{width:100%}@media screen and (min-width:1285px){.dashboard-item--w4{width:50%}}.dashboard-item-content{position:relative;width:100%;height:100%}.dashboard-button{display:inline-flex;align-items:center;border-radius:3px;background:#313131;color:#fff;padding:8px;text-decoration:none}.dashboard-button:focus,.dashboard-button:hover{text-decoration:none;background:#ff8700;color:#fff}.dashboard-button .dashboard-button-icon .icon{display:block}.dashboard-button .dashboard-button-icon+.dashboard-button-text{margin-left:.25em;margin-right:.25em}.dashboard-button-add{position:fixed;padding:16px;right:24px;bottom:24px;z-index:2}.widget{height:100%;border-radius:2px;overflow:hidden;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.15);color:#000}.widget:hover .widget-actions{opacity:1}.widget-content{display:flex;flex-direction:column;height:100%}.widget-content-title{padding:10px 20px;padding-right:76px;border-bottom:1px solid #d7d7d7;font-family:"Source Sans Pro",sans-serif;font-size:16px;font-weight:700;line-height:1.25}.widget-content-title span{overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.widget-content-main{flex-grow:1;overflow-y:auto;padding:20px}.widget-content-footer{padding:20px;padding-top:0}.widget-actions{position:absolute;display:flex;top:calc(((16px * 1.25)/ 2) + (20px / 2));right:10px;transform:translate(0,-50%);opacity:0;transition:opacity .2s ease-in-out}.widget-action{width:28px;height:28px;position:relative;color:#737373;text-align:center}.widget-action:focus,.widget-action:hover{color:#ff8700}.widget-action .icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.widget-action-move{cursor:-webkit-grab;cursor:grab}.widget-waiting{position:absolute;top:50%;left:50%;line-height:300px;margin-right:-50%;transform:translate(-50%,-50%)}.widget-error{padding:20px;position:absolute;top:50%;text-align:center;transform:translateY(-50%);color:#c83c3c}.widget-chart{width:100%;height:100%}.widget-edit{width:45px;text-align:center}.widget-editIcon{color:#000}.widget-editIcon:focus,.widget-editIcon:hover{color:#ff8700}.widget-table{width:100%;color:#000}.widget-table thead tr{background-color:transparent}.widget-table tr:nth-child(odd){background-color:transparent}.widget-table tr:nth-child(even){background-color:#f2f2f2}.widget-table tbody td,.widget-table tbody th{border-top:1px solid #e0e0e0}.widget-table tbody:first-child tr:first-child td,.widget-table tbody:first-child tr:first-child th{border-top:none}.widget-table td,.widget-table th{padding:10px}.widget-table td>:first-child,.widget-table th>:first-child{margin-top:0}.widget-table td>:last-child,.widget-table th>:last-child{margin-bottom:0}.widget-table th{font-weight:700}.widget-content-main .widget-table-wrapper{margin-top:-10px;margin-left:-20px;margin-right:-20px}.widget-content-main .widget-table-wrapper td:first-child,.widget-content-main .widget-table-wrapper th:first-child{padding-left:20px}.widget-content-main .widget-table-wrapper td:last-child,.widget-content-main .widget-table-wrapper th:last-child{padding-right:20px}.widget-cta{display:flex;justify-content:center;align-items:center;background-color:#313131;color:#fff;border-radius:3px;padding:8px}.widget-cta:focus,.widget-cta:hover{text-decoration:none;background:#ff8700;color:#fff}.widget-cta-icon{display:flex;justify-content:center;align-items:center;width:18px;height:18px;margin-right:12px;color:#fff}.widget-doughnut--value{line-height:1.3;font-weight:900;font-size:36px;text-align:center}.widget-doughnut--meta{margin-top:10px;font-style:italic;color:#737373;text-align:center}.widget-number{height:100%;display:flex;align-items:center}.widget-number-icon{display:flex;align-items:center;width:42px;margin-right:20px;color:#000}.widget-number-content{display:flex;flex-direction:column;justify-content:center}.widget-number-title{line-height:1.3;margin-bottom:5px;font-size:16px;color:#000}.widget-number-number{line-height:1.3;font-weight:900;font-size:24px}
\ No newline at end of file
-- 
GitLab