[FEATURE] Add Log Module to AdminPanel 24/57724/12
authorSusanne Moog <susanne.moog@typo3.org>
Sun, 29 Jul 2018 21:30:30 +0000 (23:30 +0200)
committerAndreas Fernandez <a.fernandez@scripting-base.de>
Mon, 13 Aug 2018 17:51:26 +0000 (19:51 +0200)
Add a log module to the admin panel that can display
logging entries generated through the current request.

Resolves: #84606
Releases: master
Change-Id: Id596d99273f751c05d0112a57eb3c32f7f9a6149
Reviewed-on: https://review.typo3.org/57724
Reviewed-by: Benjamin Kott <benjamin.kott@outlook.com>
Tested-by: Benjamin Kott <benjamin.kott@outlook.com>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
13 files changed:
Build/Resources/Public/Sass/adminpanel.scss
typo3/sysext/adminpanel/Classes/Log/InMemoryLogWriter.php [new file with mode: 0644]
typo3/sysext/adminpanel/Classes/Modules/Debug/Log.php [new file with mode: 0644]
typo3/sysext/adminpanel/Classes/Modules/DebugModule.php [new file with mode: 0644]
typo3/sysext/adminpanel/Classes/ViewHelpers/SpeakingLogLevelViewHelper.php [new file with mode: 0644]
typo3/sysext/adminpanel/Resources/Private/Language/locallang_debug.xlf [new file with mode: 0644]
typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/Log.html [new file with mode: 0644]
typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/LogSettings.html [new file with mode: 0644]
typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css
typo3/sysext/adminpanel/composer.json
typo3/sysext/adminpanel/ext_localconf.php
typo3/sysext/core/Documentation/Changelog/master/Feature-84606-AddLogModuleToAdminPanel.rst [new file with mode: 0644]
typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-debug.svg [new file with mode: 0644]

index cf1c84f..3c1293b 100644 (file)
@@ -22,6 +22,12 @@ $adminPanel-color: $gray-lighter;
 $adminPanel-success: #629755;
 $adminPanel-danger: $brand-danger;
 
+// Message
+$adminPanel-message-bg: #fff;
+$adminPanel-message-padding: 20px;
+$adminPanel-message-default-border: #cacaca;
+$adminPanel-message-info-border: #538bb3;
+
 // Bar
 $adminPanel-bar-height: 36px;
 $adminPanel-bar-bg: #424242;
@@ -135,6 +141,23 @@ $adminPanel-input-horizontal-padding: 0.75em;
 }
 
 //
+// Message
+//
+#{$adminPanel-prefix} {
+    .typo3-adminPanel-message {
+        padding: $adminPanel-message-padding;
+        background-color: $adminPanel-message-bg;
+        border-left: 3px solid $adminPanel-message-default-border;
+        margin-bottom: 1em;
+        box-shadow: 0 0 1px rgba(0, 0, 0, 0.15);
+    }
+
+    .typo3-adminPanel-message-info {
+        border-left-color: $adminPanel-message-info-border;
+    }
+}
+
+//
 // Bar
 //
 #{$adminPanel-prefix} {
diff --git a/typo3/sysext/adminpanel/Classes/Log/InMemoryLogWriter.php b/typo3/sysext/adminpanel/Classes/Log/InMemoryLogWriter.php
new file mode 100644 (file)
index 0000000..1617a06
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\Log;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Log\LogLevel;
+use TYPO3\CMS\Core\Log\LogRecord;
+use TYPO3\CMS\Core\Log\Writer\AbstractWriter;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Log writer that writes the log records into a static public class variable
+ * for InMemory processing
+ */
+class InMemoryLogWriter extends AbstractWriter
+{
+    public static $log = [];
+
+    private const MINIMAL_PERCENT_OF_FREE_MEMORY = 0.30;
+
+    private static $memoryLock = false;
+
+    /**
+     * Writes the log record
+     *
+     * @param LogRecord $record Log record
+     * @return self
+     * @throws \RuntimeException
+     */
+    public function writeLog(LogRecord $record): self
+    {
+        // Guard: Locked Writer
+        if (self::$memoryLock === true) {
+            return $this;
+        }
+
+        // Guard: Memory Usage
+        if (!self::$memoryLock && $this->isMemoryConsumptionTooHigh()) {
+            $this->lockWriter();
+            return $this;
+        }
+
+        self::$log[] = $record;
+
+        return $this;
+    }
+
+    /**
+     * Checks memory usage used in current process - this is no guarantee for not running out of memory
+     * but should prevent memory exhaustion due to the InMemoryLogger in most cases.
+     *
+     * The logger will stop logging once the amount of free memory falls below the threshold (see
+     * MINIMAL_PERCENT_OF_FREE_MEMORY const).
+     *
+     * @return bool
+     */
+    protected function isMemoryConsumptionTooHigh(): bool
+    {
+        $iniLimit = ini_get('memory_limit');
+        $memoryLimit = $iniLimit === '-1' ? -1 : GeneralUtility::getBytesFromSizeMeasurement($iniLimit);
+        $freeMemory = $memoryLimit - memory_get_usage(true);
+
+        return $memoryLimit > 0 && $freeMemory < (self::MINIMAL_PERCENT_OF_FREE_MEMORY * $memoryLimit);
+    }
+
+    /**
+     * Lock writer and add a info message that there may potentially be more entries.
+     */
+    protected function lockWriter(): void
+    {
+        self::$memoryLock = true;
+        /** @var LogRecord $record */
+        $record = GeneralUtility::makeInstance(
+            LogRecord::class,
+            'TYPO3.CMS.AdminPanel.Log.InMemoryLogWriter',
+            LogLevel::INFO,
+            '... Further log entries omitted, memory usage too high.'
+        );
+        self::$log[] = $record;
+    }
+}
diff --git a/typo3/sysext/adminpanel/Classes/Modules/Debug/Log.php b/typo3/sysext/adminpanel/Classes/Modules/Debug/Log.php
new file mode 100644 (file)
index 0000000..bc864ce
--- /dev/null
@@ -0,0 +1,177 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\Modules\Debug;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Psr\Http\Message\ServerRequestInterface;
+use TYPO3\CMS\Adminpanel\Log\InMemoryLogWriter;
+use TYPO3\CMS\Adminpanel\Modules\AbstractSubModule;
+use TYPO3\CMS\Adminpanel\Service\ConfigurationService;
+use TYPO3\CMS\Core\Log\LogLevel;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Fluid\View\StandaloneView;
+
+/**
+ * Log Sub Module of the AdminPanel
+ */
+class Log extends AbstractSubModule
+{
+    protected $logLevel = LogLevel::INFO;
+
+    /**
+     * @var ConfigurationService
+     */
+    protected $configurationService;
+
+    public function __construct()
+    {
+        $this->configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+    }
+
+    /**
+     * @return string
+     */
+    public function getIdentifier(): string
+    {
+        return 'debug_log';
+    }
+
+    /**
+     * Sub-Module label
+     *
+     * @return string
+     */
+    public function getLabel(): string
+    {
+        return $this->getLanguageService()->sL(
+            'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.label'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getSettings(): string
+    {
+        $view = GeneralUtility::makeInstance(StandaloneView::class);
+        $templateNameAndPath = 'EXT:adminpanel/Resources/Private/Templates/Modules/Debug/LogSettings.html';
+        $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templateNameAndPath));
+        $view->setPartialRootPaths(['EXT:adminpanel/Resources/Private/Partials']);
+
+        $levels = [];
+        for ($i = 1; $i <= LogLevel::DEBUG; $i++) {
+            $levels[] = [
+                'level' => $i,
+                'levelName' => LogLevel::getName($i)
+            ];
+        }
+        $view->assignMultiple(
+            [
+                'levels' => $levels,
+                'startLevel' => (int)$this->getConfigOption('startLevel'),
+                'groupByComponent' => $this->getConfigOption('groupByComponent'),
+                'groupByLevel' => $this->getConfigOption('groupByLevel'),
+            ]
+        );
+
+        return $view->render();
+    }
+
+    /**
+     * Sub-Module content as rendered HTML
+     *
+     * @return string
+     */
+    public function getContent(): string
+    {
+        $view = GeneralUtility::makeInstance(StandaloneView::class);
+        $templateNameAndPath = 'EXT:adminpanel/Resources/Private/Templates/Modules/Debug/Log.html';
+        $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templateNameAndPath));
+        $view->setPartialRootPaths(['EXT:adminpanel/Resources/Private/Partials']);
+
+        // settings for this module
+        $groupByComponent = $this->getConfigOption('groupByComponent');
+        $groupByLevel = $this->getConfigOption('groupByLevel');
+
+        $log = InMemoryLogWriter::$log;
+
+        $sortedLog = [];
+        /** @var \TYPO3\CMS\Core\Log\LogRecord $logRecord */
+        foreach ($log as $logRecord) {
+            if ($logRecord->getLevel() > $this->logLevel) {
+                continue;
+            }
+            if ($groupByComponent && $groupByLevel) {
+                $sortedLog[$logRecord->getComponent()][LogLevel::getName($logRecord->getLevel())][] = $logRecord;
+            } elseif ($groupByComponent) {
+                $sortedLog[$logRecord->getComponent()][] = $logRecord;
+            } elseif ($groupByLevel) {
+                $sortedLog[LogLevel::getName($logRecord->getLevel())][] = $logRecord;
+            } else {
+                $sortedLog[] = $logRecord;
+            }
+        }
+        $view->assignMultiple(
+            [
+                'log' => $sortedLog,
+                'groupByComponent' => $groupByComponent,
+                'groupByLevel' => $groupByLevel,
+            ]
+        );
+
+        return $view->render();
+    }
+
+    public function initializeModule(ServerRequestInterface $request): void
+    {
+        $this->logLevel = $this->getConfigOption('startLevel') ?: LogLevel::INFO;
+
+        // debug is set in ext_localconf as we do not have any config there yet but don't want to miss
+        // potentially relevant log entries
+        unset($GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'][LogLevel::DEBUG][InMemoryLogWriter::class]);
+        $GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'][$this->logLevel][InMemoryLogWriter::class] = [];
+
+        // set inMemoryLogWriter recursively for all configured namespaces/areas so we don't lose log entries
+        $configWithInMemoryWriter = $this->setLoggingConfigRecursive($GLOBALS['TYPO3_CONF_VARS']['LOG'] ?? []);
+
+        // in case there are empty array parts, remove them
+        $GLOBALS['TYPO3_CONF_VARS']['LOG'] = array_filter(
+            $configWithInMemoryWriter
+        );
+    }
+
+    protected function setLoggingConfigRecursive(array $logConfig): array
+    {
+        foreach ($logConfig as $key => $value) {
+            if ($key === 'writerConfiguration') {
+                $logConfig[$key] = $value;
+                $logConfig[$key][$this->logLevel][InMemoryLogWriter::class] = [];
+            } elseif (is_array($value)) {
+                $logConfig[$key] = $this->setLoggingConfigRecursive($value);
+            }
+        }
+        return $logConfig;
+    }
+
+    /**
+     * @param string $option
+     * @return string
+     */
+    protected function getConfigOption(string $option): string
+    {
+        return $this->configurationService->getConfigurationOption('debug_log', $option);
+    }
+}
diff --git a/typo3/sysext/adminpanel/Classes/Modules/DebugModule.php b/typo3/sysext/adminpanel/Classes/Modules/DebugModule.php
new file mode 100644 (file)
index 0000000..02efabc
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\Modules;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Adminpanel\Log\InMemoryLogWriter;
+use TYPO3\CMS\Core\Log\LogRecord;
+
+/**
+ * Debug Module of the AdminPanel
+ */
+class DebugModule extends AbstractModule
+{
+
+    /**
+     * @inheritdoc
+     */
+    public function getIdentifier(): string
+    {
+        return 'debug';
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getIconIdentifier(): string
+    {
+        return 'actions-debug';
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getLabel(): string
+    {
+        return $this->getLanguageService()->sL(
+            'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:module.label'
+        );
+    }
+
+    public function getShortInfo(): string
+    {
+        $errorsAndWarnings = array_filter(InMemoryLogWriter::$log, function (LogRecord $entry) {
+            return $entry->getLevel() <= 4;
+        });
+        return sprintf($this->getLanguageService()->sL(
+                'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:module.shortinfo'
+            ), count($errorsAndWarnings));
+    }
+}
diff --git a/typo3/sysext/adminpanel/Classes/ViewHelpers/SpeakingLogLevelViewHelper.php b/typo3/sysext/adminpanel/Classes/ViewHelpers/SpeakingLogLevelViewHelper.php
new file mode 100644 (file)
index 0000000..43d1ca5
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\ViewHelpers;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Log\LogLevel;
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
+
+/**
+ * Get speaking log level from constant
+ *
+ * @internal
+ */
+class SpeakingLogLevelViewHelper extends AbstractViewHelper
+{
+    use CompileWithRenderStatic;
+
+    /**
+     * First level cache of user names
+     *
+     * @var array
+     */
+    protected static $usernameRuntimeCache = [];
+
+    /**
+     * Initializes the arguments
+     */
+    public function initializeArguments(): void
+    {
+        $this->registerArgument('level', 'int', 'Log Level', true);
+    }
+
+    /**
+     * Resolve user name from backend user id.
+     *
+     * @param array $arguments
+     * @param \Closure $renderChildrenClosure
+     * @param RenderingContextInterface $renderingContext
+     * @return string Username or an empty string if there is no user with that UID
+     */
+    public static function renderStatic(
+        array $arguments,
+        \Closure $renderChildrenClosure,
+        RenderingContextInterface $renderingContext
+    ): string {
+        return LogLevel::getName($arguments['level']);
+    }
+}
diff --git a/typo3/sysext/adminpanel/Resources/Private/Language/locallang_debug.xlf b/typo3/sysext/adminpanel/Resources/Private/Language/locallang_debug.xlf
new file mode 100644 (file)
index 0000000..844ae93
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+       <file t3:id="1521629231" source-language="en" datatype="plaintext" original="messages" date="2018-03-21T11:47:00Z"
+                 product-name="adminpanel">
+               <header/>
+               <body>
+                       <trans-unit id="module.label">
+                               <source>Debug</source>
+                       </trans-unit>
+                       <trans-unit id="module.shortinfo">
+                               <source>(%s Errors/Warnings)</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.label">
+                               <source>Log</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.message">
+                               <source>Log Message</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.component">
+                               <source>Component</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.level">
+                               <source>Level</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.groupByComponent">
+                               <source>Group by Component</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.groupByLevel">
+                               <source>Group by Level</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.startLevel">
+                               <source>Display only levels equal or higher to</source>
+                       </trans-unit>
+                       <trans-unit id="submodule.log.noEntries">
+                               <source>No log entries.</source>
+                       </trans-unit>
+               </body>
+       </file>
+</xliff>
diff --git a/typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/Log.html b/typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/Log.html
new file mode 100644 (file)
index 0000000..5544fa6
--- /dev/null
@@ -0,0 +1,130 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:adm="http://typo3.org/ns/TYPO3/CMS/Adminpanel/ViewHelpers" data-namespace-typo3-fluid="true">
+<f:if condition="{log}">
+    <f:then>
+        <f:if condition="{groupByComponent} && {groupByLevel}">
+            <f:then>
+                <f:for each="{log}" as="entriesByLogLevel" key="component">
+                    <h2 class="typo3-adminPanel-headline">{component}</h2>
+                    <f:for each="{entriesByLogLevel}" as="entries" key="logLevel">
+                        <h3 class="typo3-adminPanel-headline">{logLevel}</h3>
+                        <div class="typo3-adminPanel-table-overflow">
+                            <table class="typo3-adminPanel-table typo3-adminPanel-table-debug">
+                                <thead>
+                                    <tr>
+                                        <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                            <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.message"/>
+                                        </th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    <f:for each="{entries}" as="entry">
+                                        <tr>
+                                            <td>
+                                                {entry.message}
+                                            </td>
+                                        </tr>
+                                    </f:for>
+                                </tbody>
+                            </table>
+                        </div>
+                    </f:for>
+                </f:for>
+            </f:then>
+            <f:else>
+                <f:if condition="{groupByComponent} || {groupByLevel}">
+                    <f:then>
+                        <f:for each="{log}" as="entries" key="headline">
+                            <h2 class="typo3-adminPanel-headline">{headline}</h2>
+                            <div class="typo3-adminPanel-table-overflow">
+                                <table class="typo3-adminPanel-table typo3-adminPanel-table-debug">
+                                    <thead>
+                                    <tr>
+                                        <f:if condition="{groupByComponent}">
+                                            <f:then>
+                                                <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                                    <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.level"/>
+                                                </th>
+                                            </f:then>
+                                            <f:else>
+                                                <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                                    <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.component"/>
+                                                </th>
+                                            </f:else>
+                                        </f:if>
+                                        <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                            <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.message"/>
+                                        </th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    <f:for each="{entries}" as="entry">
+                                        <tr>
+                                            <f:if condition="{groupByComponent}">
+                                                <f:then>
+                                                    <td>
+                                                        <adm:speakingLogLevel level="{entry.level}" />
+                                                    </td>
+                                                </f:then>
+                                                <f:else>
+                                                    <td>
+                                                        {entry.component}
+                                                    </td>
+                                                </f:else>
+                                            </f:if>
+                                            <td>
+                                                {entry.message}
+                                            </td>
+                                        </tr>
+                                    </f:for>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </f:for>
+                    </f:then>
+                    <f:else>
+                        <div class="typo3-adminPanel-table-overflow">
+                            <table class="typo3-adminPanel-table typo3-adminPanel-table-debug">
+                                <thead>
+                                <tr>
+                                    <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                        <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.level"/>
+                                    </th>
+                                    <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                        <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.component"/>
+                                    </th>
+                                    <th scope="col" class="typo3-adminPanel-table-cell-key">
+                                        <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.message"/>
+                                    </th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <f:for each="{log}" as="entry">
+                                    <tr>
+                                        <td>
+                                            <adm:speakingLogLevel level="{entry.level}" />
+                                        </td>
+                                        <td>
+                                            {entry.component}
+                                        </td>
+                                        <td>
+                                            {entry.message}
+                                        </td>
+                                    </tr>
+                                </f:for>
+                                </tbody>
+                            </table>
+                        </div>
+                    </f:else>
+                </f:if>
+            </f:else>
+        </f:if>
+    </f:then>
+    <f:else>
+        <div class="typo3-adminPanel-message typo3-adminPanel-message-info">
+            <div class="typo3-adminPanel-message-text">
+                <f:translate key="LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.noEntries"/>
+            </div>
+        </div>
+    </f:else>
+</f:if>
+</html>
diff --git a/typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/LogSettings.html b/typo3/sysext/adminpanel/Resources/Private/Templates/Modules/Debug/LogSettings.html
new file mode 100644 (file)
index 0000000..a78f13a
--- /dev/null
@@ -0,0 +1,29 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
+<f:render
+    partial="Form/Checkbox"
+    arguments="{
+        label: 'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.groupByComponent',
+        name: 'debug_log_groupByComponent',
+        value: groupByComponent
+    }"
+    debug="false"/>
+<f:render
+    partial="Form/Checkbox"
+    arguments="{
+        label: 'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.groupByLevel',
+        name: 'debug_log_groupByLevel',
+        value: groupByLevel
+    }"
+    debug="false"/>
+<f:render
+    partial="Form/Select"
+    arguments="{
+        label: 'LLL:EXT:adminpanel/Resources/Private/Language/locallang_debug.xlf:submodule.log.startLevel',
+        name: 'debug_log_startLevel',
+        options: levels,
+        optionValue: 'level',
+        optionLabel: 'levelName',
+        value: startLevel
+    }"
+    debug="false"/>
+</html>
index 2f07f42..70d1bd9 100644 (file)
@@ -10,4 +10,4 @@
  * 
  * The TYPO3 project - inspiring people to share!
  */
-@font-face{font-family:TYPO3FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.6.3);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.6.3) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.6.3) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.6.3) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.6.3) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format("svg");font-weight:400;font-style:normal}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel{z-index:99990}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel *{background:0 0;border:0;box-shadow:none;box-sizing:border-box;vertical-align:baseline;letter-spacing:normal;width:auto;height:auto;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;font-weight:400;white-space:normal;margin:0;padding:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel *,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :active,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :hover{outline:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon img,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon *{display:block;line-height:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-markup{position:absolute;display:block;text-align:center;top:0;left:0;right:0;bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-overlay{position:absolute;bottom:0;right:0;height:68.75%;width:68.75%;text-align:center}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-spin .icon-markup{-webkit-animation:icon-spin 2s infinite linear;animation:icon-spin 2s infinite linear}@-webkit-keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-state-disabled .icon-markup{opacity:.5}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small{height:16px;width:16px;line-height:16px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small .icon-unify{line-height:16px;font-size:14px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default{height:32px;width:32px;line-height:32px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default .icon-unify{line-height:32px;font-size:28px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large{height:48px;width:48px;line-height:48px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large .icon-unify{line-height:48px;font-size:42px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-actions-edit-copy-release,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-actions-edit-cut-release,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-error,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-current,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-permission-denied{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-light-asc,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-light-desc{color:#fff}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-asc,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-desc{color:#737373}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-information{color:#6daae0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-ok,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-permission-granted{color:#79a548}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-notification{color:#333}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-warning{color:#e8a33d}#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-bar{z-index:99992;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row;flex-flow:row;-webkit-box-pack:stretch;-webkit-justify-content:stretch;justify-content:stretch;position:fixed;bottom:0;left:auto;right:0;height:37px;background-color:#424242;color:#fff;border-bottom:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel.typo3-adminPanel-active .typo3-adminPanel-bar{left:0}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-bar{right:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel.typo3-adminPanel-active .typo3-adminPanel-bar{left:20px}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module{display:-webkit-box;display:-webkit-flex;display:flex;padding:0 10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center;border-right:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings{margin-left:auto}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-logo+.typo3-adminPanel-module-toggle{border-left:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings .typo3-adminPanel-module-trigger-label{display:none}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings .typo3-adminPanel-module-trigger-label{display:block}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-toggle{border-left:1px solid #383838;border-right:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-group{width:100%;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:0 10px;margin-left:-10px;margin-right:-10px;font-size:12px;color:#fff;height:36px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger>span{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger>span+span{margin-left:4px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-active .typo3-adminPanel-module-trigger{background-color:#525252}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger],#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]{cursor:pointer}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger]:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger]:hover,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]:hover{background-color:#525252}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-actions-edit-hide{color:#629755}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-actions-edit-unhide{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-information{display:none;opacity:.5}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-information{display:block}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;position:fixed;bottom:37px;top:20vh;left:20px;right:20px;background-color:#fafafa;color:#333;border-bottom:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main{position:relative;padding:20px;height:100%;overflow:auto}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-active .typo3-adminPanel-content{display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;height:37px;-webkit-flex-shrink:0;flex-shrink:0;color:#333;background-color:#eaeaea}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header:before{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background-color:#dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:37px;padding:0 10px;border-right:1px solid #dadada;border-bottom:1px solid #dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item{color:inherit;text-decoration:none;position:relative}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item:hover{background-color:#e1e1e1}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item.typo3-adminPanel-content-header-item-active{background-color:#fafafa}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item.typo3-adminPanel-content-header-item-active:before{content:'';position:absolute;bottom:-1px;left:0;right:0;height:1px;background-color:#fafafa}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title{position:relative;color:#fff;background-color:#424242;border-right:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title:before{content:'';position:absolute;bottom:-1px;left:0;right:0;height:1px;background-color:#5e5e5e}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title>span+span{margin-left:4px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-close,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-settings{cursor:pointer;border-right:0;border-left:1px solid #dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-nav{width:100%;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings{-webkit-flex-shrink:0;flex-shrink:0;max-height:50%;overflow-y:auto;display:none;background-color:#fafafa;padding:20px;border-bottom:1px solid #dadada;box-shadow:0 0 1px rgba(0,0,0,.1)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings.typo3-adminPanel-content-settings-active{display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group>:first-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group>:last-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group+.typo3-adminPanel-content-settings-group{margin-top:20px;padding-top:20px;border-top:1px solid rgba(0,0,0,.1)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes{position:absolute;top:0;bottom:0;left:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item{display:none;overflow:auto;height:100%;width:100%;padding:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item-active{display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-row{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;padding:.25em 0;margin-left:-.75em;margin-right:-.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-row-header>*{font-weight:700}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col{padding:.25em .75em;word-break:break-all}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;flex:0 0 50%;max-width:50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (max-width:991px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;flex:0 0 50%;max-width:50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;flex:0 0 100%;max-width:100%}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-headline{font-weight:700;margin-top:1.5em;margin-bottom:.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h1.typo3-adminPanel-headline{font-weight:400;font-size:1.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h2.typo3-adminPanel-headline{font-weight:400;font-size:1.5em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h3.typo3-adminPanel-headline{font-size:1.35em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h4.typo3-adminPanel-headline{font-size:1.25em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-overflow{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #e0e0e0;box-shadow:0 0 1px rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-overflow .typo3-adminPanel-table{border:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table{width:100%;max-width:100%;background-color:#fff;display:table;border-collapse:separate;border-spacing:0;border:1px solid #e0e0e0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead tr{background-color:#e0e0e0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead td,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead th{border-top:none;font-family:Verdana,Arial,Helvetica,sans-serif}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th{font-weight:700;text-align:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th>span{font-weight:700}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table tr{font-family:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table td,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th{padding:.75em;vertical-align:top;border-top:1px solid #dee2e6}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody{font-family:monospace}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody *{font-family:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody td{word-wrap:break-word}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-cell-key{width:19%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-cell-nowrap{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-group{display:-webkit-box;display:-webkit-flex;display:flex;margin:-5px;margin-bottom:1em;-webkit-flex-wrap:wrap;flex-wrap:wrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-group .typo3-adminPanel-card{margin:5px;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;max-width:100%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card{background-color:#fff;margin-bottom:1em;box-shadow:0 0 1px rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body>:first-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body>:last-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:20px;padding-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-headline{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-icon{position:relative;height:1em;width:1em;opacity:.75}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-icon .icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-text{padding-left:.5em;font-size:1.25em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body{padding:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump{font-family:monospace;word-wrap:break-word;white-space:pre-wrap;position:relative;z-index:99999;word-break:break-all}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string{color:#75a75a}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string:after,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string:before{color:#bf6500;content:'"'}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-float,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-integer{color:#538bb3}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-group{display:block;margin:1.5em 0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-group-checkbox+.typo3-adminPanel-form-group-checkbox{margin-top:-.5em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox{padding-left:1.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label{position:relative;cursor:pointer}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label:before{position:absolute;top:0;left:-1.75em;display:block;width:1.25em;height:1.25em;pointer-events:none;content:'';-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dadada;border-radius:2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label:after{position:absolute;top:0;left:-1.75em;display:block;width:1.25em;height:1.25em;content:'';background-repeat:no-repeat;background-position:center center;background-size:50% 50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input{display:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input:checked+.typo3-adminPanel-form-checkbox-label:before{background-color:#629755}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input:checked+.typo3-adminPanel-form-checkbox-label:after{background-image:url("data:image/svg+xml;charset=utf8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/></svg>")}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-label{margin-bottom:.5em;display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input{padding:.75em 3em .75em 1.25em;display:block;border-radius:2px;border:1px solid #dadada;background:#fff url("data:image/svg+xml;charset=utf8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'><path fill='#333' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") no-repeat right .75em center;background-size:8px 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input:hover{border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-label{margin-bottom:.5em;display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input-group{margin:-5px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;margin:5px;display:block;padding:.75em 1.25em;border-radius:2px;border:1px solid #dadada;background-color:#fff}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input:hover{border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn{position:relative;cursor:pointer;color:inherit;text-decoration:none;padding:.75em 1.25em;display:inline-block;background-color:rgba(0,0,0,.1);border:1px solid #dadada;border-radius:2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn:hover{z-index:1;background-color:rgba(0,0,0,.15);border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary{color:#fff;background-color:#538bb3;border:1px solid #417092}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary:hover{background-color:#6597bb;border:1px solid #396381}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group:after{content:'';display:table;clear:both}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn{border-radius:0;float:left}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn:first-child{border-radius:2px 0 0 2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn:last-child{border-radius:0 2px 2px 0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn{margin-left:-1px}
\ No newline at end of file
+@font-face{font-family:TYPO3FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.6.3);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.6.3) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.6.3) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.6.3) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.6.3) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format("svg");font-weight:400;font-style:normal}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel{z-index:99990}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel *{background:0 0;border:0;box-shadow:none;box-sizing:border-box;vertical-align:baseline;letter-spacing:normal;width:auto;height:auto;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;font-weight:400;white-space:normal;margin:0;padding:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel *,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :active,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel :hover{outline:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon img,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon *{display:block;line-height:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-markup{position:absolute;display:block;text-align:center;top:0;left:0;right:0;bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-overlay{position:absolute;bottom:0;right:0;height:68.75%;width:68.75%;text-align:center}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-spin .icon-markup{-webkit-animation:icon-spin 2s infinite linear;animation:icon-spin 2s infinite linear}@-webkit-keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-state-disabled .icon-markup{opacity:.5}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small{height:16px;width:16px;line-height:16px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small .icon-unify{line-height:16px;font-size:14px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default{height:32px;width:32px;line-height:32px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default .icon-unify{line-height:32px;font-size:28px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large{height:48px;width:48px;line-height:48px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large .icon-unify{line-height:48px;font-size:42px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-actions-edit-copy-release,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-actions-edit-cut-release,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-error,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-current,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-permission-denied{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-light-asc,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-light-desc{color:#fff}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-asc,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-sorting-desc{color:#737373}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-information{color:#6daae0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-ok,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-status-permission-granted{color:#79a548}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-notification{color:#333}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .icon-status-dialog-warning{color:#e8a33d}#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)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-message-info{border-left-color:#538bb3}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-bar{z-index:99992;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row;flex-flow:row;-webkit-box-pack:stretch;-webkit-justify-content:stretch;justify-content:stretch;position:fixed;bottom:0;left:auto;right:0;height:37px;background-color:#424242;color:#fff;border-bottom:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel.typo3-adminPanel-active .typo3-adminPanel-bar{left:0}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-bar{right:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel.typo3-adminPanel-active .typo3-adminPanel-bar{left:20px}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module{display:-webkit-box;display:-webkit-flex;display:flex;padding:0 10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center;border-right:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings{margin-left:auto}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-logo+.typo3-adminPanel-module-toggle{border-left:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings .typo3-adminPanel-module-trigger-label{display:none}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings .typo3-adminPanel-module-trigger-label{display:block}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-settings,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-toggle{border-left:1px solid #383838;border-right:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-group{width:100%;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:0 10px;margin-left:-10px;margin-right:-10px;font-size:12px;color:#fff;height:36px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger>span{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger>span+span{margin-left:4px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-active .typo3-adminPanel-module-trigger{background-color:#525252}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger],#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]{cursor:pointer}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger]:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-module-trigger]:hover,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel [data-typo3-role=typo3-adminPanel-trigger]:hover{background-color:#525252}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-actions-edit-hide{color:#629755}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-icon .icon-actions-edit-unhide{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-information{display:none;opacity:.5}@media (min-width:768px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-trigger-information{display:block}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;position:fixed;bottom:37px;top:20vh;left:20px;right:20px;background-color:#fafafa;color:#333;border-bottom:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main{position:relative;padding:20px;height:100%;overflow:auto}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-main>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-module-active .typo3-adminPanel-content{display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;height:37px;-webkit-flex-shrink:0;flex-shrink:0;color:#333;background-color:#eaeaea}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header:before{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background-color:#dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:37px;padding:0 10px;border-right:1px solid #dadada;border-bottom:1px solid #dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item{color:inherit;text-decoration:none;position:relative}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item:hover{background-color:#e1e1e1}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item.typo3-adminPanel-content-header-item-active{background-color:#fafafa}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel a.typo3-adminPanel-content-header-item.typo3-adminPanel-content-header-item-active:before{content:'';position:absolute;bottom:-1px;left:0;right:0;height:1px;background-color:#fafafa}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title{position:relative;color:#fff;background-color:#424242;border-right:1px solid #383838}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title:before{content:'';position:absolute;bottom:-1px;left:0;right:0;height:1px;background-color:#5e5e5e}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-title>span+span{margin-left:4px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-close,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-header-settings{cursor:pointer;border-right:0;border-left:1px solid #dadada}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-nav{width:100%;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings{-webkit-flex-shrink:0;flex-shrink:0;max-height:50%;overflow-y:auto;display:none;background-color:#fafafa;padding:20px;border-bottom:1px solid #dadada;box-shadow:0 0 1px rgba(0,0,0,.1)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings.typo3-adminPanel-content-settings-active{display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group>:first-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group>:last-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-settings-group+.typo3-adminPanel-content-settings-group{margin-top:20px;padding-top:20px;border-top:1px solid rgba(0,0,0,.1)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes{position:absolute;top:0;bottom:0;left:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item{display:none;overflow:auto;height:100%;width:100%;padding:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-content-panes-item-active{display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-row{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;padding:.25em 0;margin-left:-.75em;margin-right:-.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-row-header>*{font-weight:700}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col{padding:.25em .75em;word-break:break-all}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;flex:0 0 50%;max-width:50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (max-width:991px){#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;flex:0 0 50%;max-width:50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;flex:0 0 100%;max-width:100%}}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-headline{font-weight:700;margin-top:1.5em;margin-bottom:.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h1.typo3-adminPanel-headline{font-weight:400;font-size:1.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h2.typo3-adminPanel-headline{font-weight:400;font-size:1.5em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h3.typo3-adminPanel-headline{font-size:1.35em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel h4.typo3-adminPanel-headline{font-size:1.25em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-overflow{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #e0e0e0;box-shadow:0 0 1px rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-overflow .typo3-adminPanel-table{border:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table{width:100%;max-width:100%;background-color:#fff;display:table;border-collapse:separate;border-spacing:0;border:1px solid #e0e0e0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead tr{background-color:#e0e0e0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead td,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table thead th{border-top:none;font-family:Verdana,Arial,Helvetica,sans-serif}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th{font-weight:700;text-align:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th>span{font-weight:700}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table tr{font-family:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table td,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table th{padding:.75em;vertical-align:top;border-top:1px solid #dee2e6}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody{font-family:monospace}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody *{font-family:inherit}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-debug tbody td{word-wrap:break-word}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-cell-key{width:19%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-table-cell-nowrap{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-group{display:-webkit-box;display:-webkit-flex;display:flex;margin:-5px;margin-bottom:1em;-webkit-flex-wrap:wrap;flex-wrap:wrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-group .typo3-adminPanel-card{margin:5px;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;max-width:100%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card{background-color:#fff;margin-bottom:1em;box-shadow:0 0 1px rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body>:first-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header>:first-child{margin-top:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body>:last-child,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header>:last-child{margin-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:20px;padding-bottom:0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-headline{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-icon{position:relative;height:1em;width:1em;opacity:.75}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-icon .icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-header-text{padding-left:.5em;font-size:1.25em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-card-body{padding:20px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump{font-family:monospace;word-wrap:break-word;white-space:pre-wrap;position:relative;z-index:99999;word-break:break-all}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string{color:#75a75a}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string:after,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-string:before{color:#bf6500;content:'"'}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-float,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-dump-integer{color:#538bb3}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-group{display:block;margin:1.5em 0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-group-checkbox+.typo3-adminPanel-form-group-checkbox{margin-top:-.5em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox{padding-left:1.75em}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label{position:relative;cursor:pointer}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label:before{position:absolute;top:0;left:-1.75em;display:block;width:1.25em;height:1.25em;pointer-events:none;content:'';-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dadada;border-radius:2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-label:after{position:absolute;top:0;left:-1.75em;display:block;width:1.25em;height:1.25em;content:'';background-repeat:no-repeat;background-position:center center;background-size:50% 50%}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input{display:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input:checked+.typo3-adminPanel-form-checkbox-label:before{background-color:#629755}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-checkbox-input:checked+.typo3-adminPanel-form-checkbox-label:after{background-image:url("data:image/svg+xml;charset=utf8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/></svg>")}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-label{margin-bottom:.5em;display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input{padding:.75em 3em .75em 1.25em;display:block;border-radius:2px;border:1px solid #dadada;background:#fff url("data:image/svg+xml;charset=utf8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'><path fill='#333' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") no-repeat right .75em center;background-size:8px 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-select .typo3-adminPanel-form-select-input:hover{border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-label{margin-bottom:.5em;display:block}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input-group{margin:-5px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;margin:5px;display:block;padding:.75em 1.25em;border-radius:2px;border:1px solid #dadada;background-color:#fff}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-form-datetime .typo3-adminPanel-form-datetime-input:hover{border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn{position:relative;cursor:pointer;color:inherit;text-decoration:none;padding:.75em 1.25em;display:inline-block;background-color:rgba(0,0,0,.1);border:1px solid #dadada;border-radius:2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn:hover{z-index:1;background-color:rgba(0,0,0,.15);border:1px solid #cacaca}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary{color:#fff;background-color:#538bb3;border:1px solid #417092}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary:focus,#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-primary:hover{background-color:#6597bb;border:1px solid #396381}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group:after{content:'';display:table;clear:both}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn{border-radius:0;float:left}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn:first-child{border-radius:2px 0 0 2px}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn:last-child{border-radius:0 2px 2px 0}#TSFE_ADMIN_PANEL_FORM.typo3-kidjls9dksoje.typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn{margin-left:-1px}
\ No newline at end of file
index 29baa0d..b96f782 100644 (file)
@@ -17,6 +17,7 @@
                "typo3/cms-core": "9.4.*@dev",
                "typo3/cms-fluid": "9.4.*@dev",
                "typo3/cms-frontend": "9.4.*@dev",
+               "typo3fluid/fluid": "^2.5.2",
                "psr/http-message": "~1.0",
                "psr/http-server-handler": "^1.0",
                "psr/http-server-middleware": "^1.0"
index 8b8a79e..29d6ff7 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 defined('TYPO3_MODE') or die();
 
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe'][]
@@ -22,26 +23,37 @@ $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules'] = [
         'after' => ['edit'],
         'submodules' => [
             'ts-waterfall' => [
-                'module' => \TYPO3\CMS\Adminpanel\Modules\TsDebug\TypoScriptWaterfall::class
-            ]
-        ]
+                'module' => \TYPO3\CMS\Adminpanel\Modules\TsDebug\TypoScriptWaterfall::class,
+            ],
+        ],
     ],
     'info' => [
         'module' => \TYPO3\CMS\Adminpanel\Modules\InfoModule::class,
         'after' => ['tsdebug'],
         'submodules' => [
             'general' => [
-                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\GeneralInformation::class
+                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\GeneralInformation::class,
             ],
             'request' => [
-                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\RequestInformation::class
+                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\RequestInformation::class,
             ],
             'phpinfo' => [
-                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\PhpInformation::class
+                'module' => \TYPO3\CMS\Adminpanel\Modules\Info\PhpInformation::class,
             ],
-        ]
+        ],
     ],
+    'debug' => [
+        'module' => \TYPO3\CMS\Adminpanel\Modules\DebugModule::class,
+        'after' => ['info'],
+        'submodules' => [
+            'log' => [
+                'module' => \TYPO3\CMS\Adminpanel\Modules\Debug\Log::class
+            ]
+        ]
+    ]
 ];
 
 $GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['adminPanel_save']
     = \TYPO3\CMS\Adminpanel\Controller\AjaxController::class . '::saveDataAction';
+
+$GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'][\TYPO3\CMS\Core\Log\LogLevel::DEBUG][\TYPO3\CMS\Adminpanel\Log\InMemoryLogWriter::class] = [];
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-84606-AddLogModuleToAdminPanel.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-84606-AddLogModuleToAdminPanel.rst
new file mode 100644 (file)
index 0000000..1894ca2
--- /dev/null
@@ -0,0 +1,26 @@
+.. include:: ../../Includes.txt
+
+==============================================
+Feature: #84606 - Add Log Module to AdminPanel
+==============================================
+
+See :issue:`84606`
+
+Description
+===========
+
+A log module has been added to the adminPanel to display log entries generated during the current request.
+
+It displays all log entries generated via the logging framework during the request.
+
+Display options include grouping by log level and component, additionally the log level
+which shall be logged has been made configurable.
+
+
+Impact
+======
+
+A new AdminPanel sub module displaying log entries has been added in a new main module "Debug" which may
+be extended with further debug information.
+
+.. index:: Frontend, ext:adminpanel
diff --git a/typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-debug.svg b/typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-debug.svg
new file mode 100644 (file)
index 0000000..6ad8d8e
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M15 9V8h-3V6l1.9-1.9s.1-.2.1-.3V1h-1v2.3c0 .1-.1.3-.1.4l-.9.8V4h-2V3l-.9-.9S8.9 2 8.8 2H7.2c-.1 0-.3.1-.3.1L6 3v1H4v1l-.9-.9S3 3.9 3 3.8V1H2v3.3c0 .1.1.3.1.4L4 6.5V8H1v1h3v1.5l-1.9 1.9s-.1.2-.1.3V15h1v-1.8c0-.1.1-.3.1-.4L4 12l1.9 1.9s.2.1.3.1h3.6c.1 0 .3-.1.4-.1l1.6-1.6 1.1 1.1c.1.1.1.2.1.4V15h1v-1.8c0-.1-.1-.3-.1-.4L12 11V9h3zM7 3.4l.4-.4h1.2l.4.4V4H7v-.6zm4 8.2L9.6 13H6.4L5 11.6V5h2.5v6h1V5H11v6.6z" class="icon-color"/></svg>
\ No newline at end of file